static sdr.ReplicaCorrelator.p_d(enr: ArrayLike, p_fa: ArrayLike, complex: bool = True) NDArray[float64]

Computes the probability of detection \(P_d\).

Parameters:
enr: ArrayLike

The received energy-to-noise ratio \(\mathcal{E}/\sigma^2\) in dB.

p_fa: ArrayLike

The probability of false alarm \(P_{fa}\).

complex: bool = True

Indicates whether the signal is complex.

Returns:

The probability of detection \(P_d\).

Notes

For real signals:

\[P_d = Q\left( Q^{-1}(P_{fa}) - \sqrt{\frac{\mathcal{E}}{\sigma^2}} \right)\]

For complex signals:

\[P_d = Q\left( Q^{-1}(P_{fa}) - \sqrt{\frac{\mathcal{E}}{\sigma^2 / 2}} \right)\]

References

  • Steven Kay, Fundamentals of Statistical Signal Processing: Detection Theory, Equations 4.14 and 13.9.

Examples

In [1]: enr = np.linspace(0, 20, 101)

In [2]: plt.figure(); \
   ...: sdr.plot.p_d(enr, sdr.ReplicaCorrelator.p_d(enr, 1e-1), label="$P_{fa} = 10^{-1}$"); \
   ...: sdr.plot.p_d(enr, sdr.ReplicaCorrelator.p_d(enr, 1e-2), label="$P_{fa} = 10^{-2}$"); \
   ...: sdr.plot.p_d(enr, sdr.ReplicaCorrelator.p_d(enr, 1e-3), label="$P_{fa} = 10^{-3}$"); \
   ...: sdr.plot.p_d(enr, sdr.ReplicaCorrelator.p_d(enr, 1e-4), label="$P_{fa} = 10^{-4}$"); \
   ...: sdr.plot.p_d(enr, sdr.ReplicaCorrelator.p_d(enr, 1e-5), label="$P_{fa} = 10^{-5}$"); \
   ...: sdr.plot.p_d(enr, sdr.ReplicaCorrelator.p_d(enr, 1e-6), label="$P_{fa} = 10^{-6}$"); \
   ...: sdr.plot.p_d(enr, sdr.ReplicaCorrelator.p_d(enr, 1e-7), label="$P_{fa} = 10^{-7}$");
   ...: 
../../_images/sdr_ReplicaCorrelator_p_d_1.png