-
sdr.foa_crlb(snr: ArrayLike, time: ArrayLike, bandwidth: ArrayLike, rms_integration_time: ArrayLike | None =
None
, noise_bandwidth: ArrayLike | None =None
) NDArray[float64] Calculates the Cramér-Rao lower bound (CRLB) on frequency of arrival (FOA) estimation.
- Parameters:¶
- snr: ArrayLike¶
The signal-to-noise ratio (SNR) of the signal \(\gamma = S / (N_0 B_n)\) in dB.
- time: ArrayLike¶
The integration time \(T\) in seconds.
- bandwidth: ArrayLike¶
The signal bandwidth \(B_s\) in Hz.
- rms_integration_time: ArrayLike | None =
None
¶ The root-mean-square (RMS) integration time \(T_{\text{rms}}\) in Hz. If
None
, the RMS integration time is calculated assuming a rectangular power envelope, \(T_{\text{rms}} = T/\sqrt{12}\).- noise_bandwidth: ArrayLike | None =
None
¶ The noise bandwidth \(B_n\) in Hz. If
None
, the noise bandwidth is assumed to be the signal bandwidth \(B_s\).
- Returns:¶
The Cramér-Rao lower bound (CRLB) on the frequency of arrival (FOA) estimation error standard deviation \(\sigma_{\text{foa}}\) in Hz.
See also
Notes
The Cramér-Rao lower bound (CRLB) on the frequency of arrival (FOA) estimation error standard deviation \(\sigma_{\text{foa}}\) is given by
\[\sigma_{\text{foa}} = \frac{1}{\pi \sqrt{8} T_{\text{rms}}} \frac{1}{\sqrt{B_n T \gamma}}\]\[ T_{\text{rms}} = \sqrt{\frac {\int_{-\infty}^{\infty} (t - \mu_t)^2 \cdot \left| x(t - \mu_t) \right|^2 \, dt} {\int_{-\infty}^{\infty} \left| x(t - \mu_t) \right|^2 \, dt} } \]where \(\gamma\) is the signal-to-noise ratio (SNR), \(\left| x(t) \right|^2\) is the power envelope of the signal, and \(\mu_t\) is the centroid of the power envelope.
Note
The constant terms from Stein’s original equations were rearranged. The factor of 2 was removed from \(\gamma\) and the factor of \(2\pi\) was removed from \(T_{\text{rms}}\) and incorporated into the CRLB equation.
The signal-to-noise ratio (SNR) \(\gamma\) is improved by the coherent integration gain, which is the time-bandwidth product \(B_n T\). The product \(B_n T \gamma\) is the output SNR of the matched filter or correlator, which is equivalent to \(E / N_0\).
\[B_n T \gamma = B_n T \frac{S}{N_0 B_n} = \frac{S T}{N_0} = \frac{E}{N_0}\]Warning
According to Stein, the CRLB equation only holds for output SNRs greater than 10 dB. This ensures there is sufficient SNR to correctly identify the time/frequency peak without high \(P_{fa}\). Given the rearrangement of scaling factors, CRLB values with output SNRs less than 7 dB are set to NaN.
The frequency measurement precision is inversely proportional to the integration time of the signal and the square root of the output SNR.
Examples
In [1]: snr = 10 In [2]: bandwidth = np.logspace(5, 8, 101) In [3]: plt.figure(); \ ...: plt.loglog(bandwidth, sdr.foa_crlb(snr, 1e-6, bandwidth), label="1 μs"); \ ...: plt.loglog(bandwidth, sdr.foa_crlb(snr, 1e-5, bandwidth), label="10 μs"); \ ...: plt.loglog(bandwidth, sdr.foa_crlb(snr, 1e-4, bandwidth), label="100 μs"); \ ...: plt.loglog(bandwidth, sdr.foa_crlb(snr, 1e-3, bandwidth), label="1 ms"); \ ...: plt.legend(title="Integration time"); \ ...: plt.xlim(1e5, 1e8); \ ...: plt.ylim(1e0, 1e6); \ ...: plt.xlabel("Bandwidth (Hz), $B$"); \ ...: plt.ylabel(r"CRLB on FOA (Hz), $\sigma_{\text{foa}}$"); \ ...: plt.title(f"Cramér-Rao lower bound (CRLB) on FOA estimation error\nstandard deviation with {snr}-dB SNR"); ...: