-
sdr.albersheim(p_d: ArrayLike, p_fa: ArrayLike, N_nc: ArrayLike =
1
) NDArray[float_] Estimates the minimum required single-sample SNR, given \(N_{NC}\) non-coherent combinations, to achieve a probability of detection \(P_D\) and probability of false alarm \(P_{FA}\). This function implements Albersheim’s equation.
Notes¶
Albersheim’s equation is given by:
\[A = \ln \frac{0.62}{P_{FA}}\]\[B = \ln \frac{P_D}{1 - P_D}\]\[ \text{SNR}_{\text{dB}} = -5 \log_{10} N_{NC} + \left(6.2 + \frac{4.54}{\sqrt{N_{NC} + 0.44}}\right) \log_{10} \left(A + 0.12AB + 1.7B\right) \]The error in the estimated minimum SNR is claimed to be less than 0.2 dB for \(10^{-7} \leq P_{FA} \leq 10^{-3}\), \(0.1 \leq P_D \leq 0.9\), and \(1 \le N_{NC} \le 8096\).
References¶
Examples¶
In [1]: p_d = 0.9; \ ...: p_fa = np.logspace(-7, -3, 100) ...: In [2]: plt.figure(figsize=(8, 4)); \ ...: plt.semilogx(p_fa, sdr.albersheim(p_d, p_fa, N_nc=1), label="$N_{NC}$ = 1"); \ ...: plt.semilogx(p_fa, sdr.albersheim(p_d, p_fa, N_nc=2), label="$N_{NC}$ = 2"); \ ...: plt.semilogx(p_fa, sdr.albersheim(p_d, p_fa, N_nc=10), label="$N_{NC}$ = 10"); \ ...: plt.semilogx(p_fa, sdr.albersheim(p_d, p_fa, N_nc=20), label="$N_{NC}$ = 20"); \ ...: plt.legend(); \ ...: plt.grid(True, which="both"); \ ...: plt.xlabel("Probability of false alarm, $P_{FA}$"); \ ...: plt.ylabel("Minimum required SNR (dB)"); \ ...: plt.title(f"Estimated minimum required SNR across non-coherent combinations for $P_D = 0.9$\nusing Albersheim's approximation"); \ ...: plt.tight_layout() ...: