Source code for u_shaped_lib.beta_sep

"""
Module for beta separation method in laser linewidth analysis.

This module implements the beta separation method to estimate effective laser linewidth
by analyzing frequency noise power spectral density (PSD) data. It uses a heaviside-like
function to identify regions where the PSD exceeds the beta separation line.
"""

import numpy as np
from scipy import integrate

#Using the beta separation method to estimate the effective linewidth. 
#Using a kind of heaviside function to get the indices where the FN PSD powers are above the beta sep. line, rather than a specific cut-off.


[docs]def beta_sep_condition(freqs,ps): """ Find indices where PSD exceeds beta separation line. Parameters ---------- freqs : numpy.ndarray Array of frequencies ps : numpy.ndarray Array of power spectral density values Returns ------- tuple Indices where PSD exceeds beta separation line """ condition_indices = np.where (ps - 8*np.log(2)*freqs/np.pi**2 > 0) return condition_indices
[docs]def beta_sep_line(freqs, ps, cutoff): """ Calculate effective linewidth using beta separation method. Parameters ---------- freqs : numpy.ndarray Array of frequencies ps : numpy.ndarray Array of power spectral density values cutoff : float Frequency cutoff value Returns ------- tuple Four values containing: - new_freqs : filtered frequency array - new_ps : filtered PSD array - integral : cumulative integral of PSD - eff_lw : effective linewidth estimate """ condition = beta_sep_condition(freqs,ps) #(freqs < cutoff) & (freqs > 0) new_freqs = freqs[condition] new_ps = ps[condition] integral = integrate.cumtrapz(new_ps, new_freqs, initial=0) A = integral[-1] eff_lw = np.sqrt(8 * np.log(2) * A) return new_freqs, new_ps, integral, eff_lw