Added Noise correlation parameter
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
__version__ = "0.1.1dev"
|
__version__ = "0.1.2dev"
|
||||||
|
|
||||||
|
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ default_parameters = dict(
|
|||||||
shape="gaussian",
|
shape="gaussian",
|
||||||
frep=40e6,
|
frep=40e6,
|
||||||
behaviors=["spm", "ss"],
|
behaviors=["spm", "ss"],
|
||||||
|
noise_correlation=0,
|
||||||
raman_type="agrawal",
|
raman_type="agrawal",
|
||||||
parallel=True,
|
parallel=True,
|
||||||
repeat=1,
|
repeat=1,
|
||||||
|
|||||||
@@ -81,7 +81,9 @@ class Params(BareParams):
|
|||||||
|
|
||||||
# Technical noise
|
# Technical noise
|
||||||
if self.intensity_noise is not None and self.intensity_noise > 0:
|
if self.intensity_noise is not None and self.intensity_noise > 0:
|
||||||
delta_int, delta_T0 = pulse.technical_noise(self.intensity_noise)
|
delta_int, delta_T0 = pulse.technical_noise(
|
||||||
|
self.intensity_noise, self.noise_correlation
|
||||||
|
)
|
||||||
self.peak_power *= delta_int
|
self.peak_power *= delta_int
|
||||||
self.t0 *= delta_T0
|
self.t0 *= delta_T0
|
||||||
self.width *= delta_T0
|
self.width *= delta_T0
|
||||||
@@ -203,7 +205,7 @@ class Config(BareConfig):
|
|||||||
if self.loss == "capillary":
|
if self.loss == "capillary":
|
||||||
for param in ["core_radius", "he_mode"]:
|
for param in ["core_radius", "he_mode"]:
|
||||||
self.get_fiber(param)
|
self.get_fiber(param)
|
||||||
for param in ["length", "input_transmission"]:
|
for param in ["length", "input_transmission", "n2"]:
|
||||||
self.get(param)
|
self.get(param)
|
||||||
|
|
||||||
def gas_consistency(self):
|
def gas_consistency(self):
|
||||||
@@ -244,6 +246,7 @@ class Config(BareConfig):
|
|||||||
"interpolation_degree",
|
"interpolation_degree",
|
||||||
"ideal_gas",
|
"ideal_gas",
|
||||||
"recovery_last_stored",
|
"recovery_last_stored",
|
||||||
|
"noise_correlation",
|
||||||
]:
|
]:
|
||||||
self.get(param)
|
self.get(param)
|
||||||
|
|
||||||
|
|||||||
@@ -139,6 +139,7 @@ def modify_field_ratio(
|
|||||||
target_power: float = None,
|
target_power: float = None,
|
||||||
target_energy: float = None,
|
target_energy: float = None,
|
||||||
intensity_noise: float = None,
|
intensity_noise: float = None,
|
||||||
|
noise_correlation: float = None,
|
||||||
) -> float:
|
) -> float:
|
||||||
"""multiply a field by this number to get the desired effects
|
"""multiply a field by this number to get the desired effects
|
||||||
|
|
||||||
@@ -165,7 +166,7 @@ def modify_field_ratio(
|
|||||||
ratio *= np.sqrt(target_power / abs2(field).max())
|
ratio *= np.sqrt(target_power / abs2(field).max())
|
||||||
|
|
||||||
if intensity_noise is not None:
|
if intensity_noise is not None:
|
||||||
d_int, _ = technical_noise(intensity_noise)
|
d_int, _ = technical_noise(intensity_noise, noise_correlation)
|
||||||
ratio *= np.sqrt(d_int)
|
ratio *= np.sqrt(d_int)
|
||||||
return ratio
|
return ratio
|
||||||
|
|
||||||
@@ -318,6 +319,7 @@ def setup_custom_field(params: BareParams) -> bool:
|
|||||||
params.peak_power,
|
params.peak_power,
|
||||||
params.energy,
|
params.energy,
|
||||||
params.intensity_noise,
|
params.intensity_noise,
|
||||||
|
params.noise_correlation,
|
||||||
)
|
)
|
||||||
width, peak_power, energy = measure_field(params.t, field_0)
|
width, peak_power, energy = measure_field(params.t, field_0)
|
||||||
else:
|
else:
|
||||||
@@ -374,7 +376,7 @@ def pulse_energy_with_loss(spectrum, dw, alpha, h) -> float:
|
|||||||
return np.sum(spec2 * dw) - h * np.sum(alpha * spec2 * dw)
|
return np.sum(spec2 * dw) - h * np.sum(alpha * spec2 * dw)
|
||||||
|
|
||||||
|
|
||||||
def technical_noise(rms_noise, relative_factor=0.4):
|
def technical_noise(rms_noise, noise_correlation=-0.4):
|
||||||
"""
|
"""
|
||||||
To implement technical noise as described in Grenier2019, we need to know the
|
To implement technical noise as described in Grenier2019, we need to know the
|
||||||
noise properties of the laser, summarized into the RMS amplitude noise
|
noise properties of the laser, summarized into the RMS amplitude noise
|
||||||
@@ -391,7 +393,7 @@ def technical_noise(rms_noise, relative_factor=0.4):
|
|||||||
delta_T0 : float
|
delta_T0 : float
|
||||||
"""
|
"""
|
||||||
psy = np.random.normal(1, rms_noise)
|
psy = np.random.normal(1, rms_noise)
|
||||||
return psy, 1 - relative_factor * (psy - 1)
|
return psy, 1 + noise_correlation * (psy - 1)
|
||||||
|
|
||||||
|
|
||||||
def shot_noise(w_c, w0, T, dt):
|
def shot_noise(w_c, w0, T, dt):
|
||||||
|
|||||||
@@ -392,6 +392,7 @@ class BareParams:
|
|||||||
shape: str = Parameter(literal("gaussian", "sech"))
|
shape: str = Parameter(literal("gaussian", "sech"))
|
||||||
wavelength: float = Parameter(in_range_incl(100e-9, 3000e-9), display_info=(1e9, "nm"))
|
wavelength: float = Parameter(in_range_incl(100e-9, 3000e-9), display_info=(1e9, "nm"))
|
||||||
intensity_noise: float = Parameter(in_range_incl(0, 1), display_info=(1e2, "%"))
|
intensity_noise: float = Parameter(in_range_incl(0, 1), display_info=(1e2, "%"))
|
||||||
|
noise_correlation: float = Parameter(in_range_incl(-10, 10))
|
||||||
width: float = Parameter(in_range_excl(0, 1e-9), display_info=(1e15, "fs"))
|
width: float = Parameter(in_range_excl(0, 1e-9), display_info=(1e15, "fs"))
|
||||||
t0: float = Parameter(in_range_excl(0, 1e-9), display_info=(1e15, "fs"))
|
t0: float = Parameter(in_range_excl(0, 1e-9), display_info=(1e15, "fs"))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user