Added Noise correlation parameter

This commit is contained in:
Benoît Sierro
2021-08-26 09:21:29 +02:00
parent e29ec621f5
commit bc95f6d8d5
5 changed files with 13 additions and 6 deletions

View File

@@ -1,4 +1,4 @@
__version__ = "0.1.1dev" __version__ = "0.1.2dev"
from typing import Any from typing import Any

View File

@@ -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,

View File

@@ -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)

View File

@@ -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):

View File

@@ -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"))