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

View File

@@ -20,6 +20,7 @@ default_parameters = dict(
shape="gaussian",
frep=40e6,
behaviors=["spm", "ss"],
noise_correlation=0,
raman_type="agrawal",
parallel=True,
repeat=1,

View File

@@ -81,7 +81,9 @@ class Params(BareParams):
# Technical noise
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.t0 *= delta_T0
self.width *= delta_T0
@@ -203,7 +205,7 @@ class Config(BareConfig):
if self.loss == "capillary":
for param in ["core_radius", "he_mode"]:
self.get_fiber(param)
for param in ["length", "input_transmission"]:
for param in ["length", "input_transmission", "n2"]:
self.get(param)
def gas_consistency(self):
@@ -244,6 +246,7 @@ class Config(BareConfig):
"interpolation_degree",
"ideal_gas",
"recovery_last_stored",
"noise_correlation",
]:
self.get(param)

View File

@@ -139,6 +139,7 @@ def modify_field_ratio(
target_power: float = None,
target_energy: float = None,
intensity_noise: float = None,
noise_correlation: float = None,
) -> float:
"""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())
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)
return ratio
@@ -318,6 +319,7 @@ def setup_custom_field(params: BareParams) -> bool:
params.peak_power,
params.energy,
params.intensity_noise,
params.noise_correlation,
)
width, peak_power, energy = measure_field(params.t, field_0)
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)
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
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
"""
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):

View File

@@ -392,6 +392,7 @@ class BareParams:
shape: str = Parameter(literal("gaussian", "sech"))
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, "%"))
noise_correlation: float = Parameter(in_range_incl(-10, 10))
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"))