attempt at realisting bandpass attenuation (noise)

This commit is contained in:
2024-03-06 15:45:07 +01:00
parent 843b077850
commit 706c35b892
3 changed files with 15 additions and 4 deletions

View File

@@ -6,5 +6,5 @@ Van der Waals constants : https://en.wikipedia.org/wiki/Van_der_Waals_constants_
Chi3 : Wahlstrand 2012
# `raman_response.csv`
Raman impulse response recovered from measured gain spectrum. This is used then `raman_type` is set to `"measured"`.
Raman impulse response recovered from measured gain spectrum. This is used then `raman_type` is set to `"measured"` (Stolen1989).

View File

@@ -230,7 +230,7 @@ def create_zoom_axis(
return inset
def corner_annotation(text, ax, position="tl", pts_x=8, pts_y=8, **text_kwargs):
def corner_annotation(text, ax, position="tl", pts_x=4, pts_y=4, **text_kwargs):
"""puts an annotatin in a corner of an ax
Parameters
----------

View File

@@ -202,12 +202,23 @@ class Spectrum(np.ndarray):
def energy(self) -> np.ndarray:
return np.trapz(self.time_int, x=self.t, axis=-1)
def mask_wl(self, pos: float, width: float) -> Spectrum:
def mask_wl(self, pos: float, width: float, preserve_sn: bool = False) -> Spectrum:
"""
Filters the spectrum with a bandpass centered at `pos` of FWHM `width`.
The FWHM is taken on the intensity profile, not on the complex amplitude
"""
return self * np.exp(-(((self.l - pos) / (pulse.fwhm_to_T0_fac["gaussian"] * width)) ** 2))
band = np.exp(-(((self.l - pos) / (pulse.fwhm_to_T0_fac["gaussian"] * width)) ** 2))
if preserve_sn:
dt = self.t[1] - self.t[0]
sn = np.fft.fft(
np.reshape(
[pulse.shot_noise(self.w, dt) for _ in range(np.prod(self.shape[:-1]))],
self.shape,
)
)
return self * band + np.sqrt(1 - band**2) * sn
else:
return self * band
def measure(self) -> tuple[float, float, float]:
"""returns fwhm, peak power and energy"""