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
|
||||
|
||||
@@ -20,6 +20,7 @@ default_parameters = dict(
|
||||
shape="gaussian",
|
||||
frep=40e6,
|
||||
behaviors=["spm", "ss"],
|
||||
noise_correlation=0,
|
||||
raman_type="agrawal",
|
||||
parallel=True,
|
||||
repeat=1,
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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"))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user