fixed HUGE bug with shot noise

This commit is contained in:
Benoît Sierro
2023-12-11 13:39:35 +01:00
parent e5c37f3155
commit 3a16b87882
3 changed files with 4 additions and 25 deletions

View File

@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "scgenerator" name = "scgenerator"
version = "0.3.26" version = "0.4.0"
description = "Simulate nonlinear pulse propagation in optical fibers" description = "Simulate nonlinear pulse propagation in optical fibers"
readme = "README.md" readme = "README.md"
authors = [{ name = "Benoit Sierro", email = "benoit.sierro@iap.unibe.ch" }] authors = [{ name = "Benoit Sierro", email = "benoit.sierro@iap.unibe.ch" }]

View File

@@ -559,10 +559,11 @@ def finalize_pulse(
dt: float, dt: float,
input_transmission: float, input_transmission: float,
) -> np.ndarray: ) -> np.ndarray:
pre_field_0 *= np.sqrt(input_transmission)
if quantum_noise: if quantum_noise:
pre_field_0 = pre_field_0 + shot_noise(w, dt) pre_field_0 = pre_field_0 + shot_noise(w, dt)
return np.sqrt(input_transmission) * pre_field_0 return pre_field_0
def A_to_C(A: np.ndarray, effective_area_arr: np.ndarray) -> np.ndarray: def A_to_C(A: np.ndarray, effective_area_arr: np.ndarray) -> np.ndarray:
@@ -614,29 +615,7 @@ def compress_pulse(spectra: np.ndarray):
else: else:
return fftshift(ifft(flatten_phase(spectra)), axes=1) return fftshift(ifft(flatten_phase(spectra)), axes=1)
def shot_noise(w: np.ndarray, dt: float):
"""
Parameters
----------
w : array, shape (n,)
angular frequencies
dt : float
resolution of time grid
Returns
-------
np.ndarray, shape (n,)
noise field to be added on top of initial field in time domain
"""
dw = w[1] - w[0]
rand_phase = np.random.rand(len(w)) * 2 * pi
shot_noise_phase = np.exp(-1j * rand_phase)
shot_noise_amplitude = np.sqrt(0.5 * units.hbar * np.abs(w) / dw)
return ifft(shot_noise_amplitude * shot_noise_phase / dt * np.sqrt(2 * pi))
def ideal_compressed_pulse(spectra: np.ndarray): def ideal_compressed_pulse(spectra: np.ndarray):
""" """
returns the ideal compressed pulse assuming flat phase returns the ideal compressed pulse assuming flat phase

View File

@@ -389,7 +389,7 @@ def propagation_series(
convenient object to work with multiple propagations **built on the same grid** convenient object to work with multiple propagations **built on the same grid**
""" """
if isinstance(files, str) or not isinstance(files, Sequence): if isinstance(files, str) or not isinstance(files, Sequence):
files = sorted(Path(files).glob("*.zip"), key=logical_sort_key) files = sorted(Path(files).expanduser().glob("*.zip"), key=logical_sort_key)
if len(files) == 0: if len(files) == 0:
raise ValueError("You must provide at least one file to build a propagation series") raise ValueError("You must provide at least one file to build a propagation series")