sdr.fdoa_crlb(snr1: ArrayLike, snr2: 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 difference of arrival (FDOA) estimation.

Parameters:
snr1: ArrayLike

The signal-to-noise ratio (SNR) of the first signal γ1=S1/(N0Bn) in dB.

snr2: ArrayLike

The signal-to-noise ratio (SNR) of the second signal γ2=S2/(N0Bn) in dB.

time: ArrayLike

The integration time T in seconds.

bandwidth: ArrayLike

The signal bandwidth Bs in Hz.

rms_integration_time: ArrayLike | None = None

The root-mean-square (RMS) integration time Trms in Hz. If None, the RMS integration time is calculated assuming a rectangular power envelope, Trms=T/12.

noise_bandwidth: ArrayLike | None = None

The noise bandwidth Bn in Hz. If None, the noise bandwidth is assumed to be the signal bandwidth Bs. The noise bandwidth must be the same for both signals.

Returns:

The Cramér-Rao lower bound (CRLB) on the frequency difference of arrival (FDOA) estimation error standard deviation σfdoa in Hz.

Notes

The Cramér-Rao lower bound (CRLB) on the frequency difference of arrival (FDOA) estimation error standard deviation σfdoa is given by

σfdoa=1π8Trms1BnTγ

1γ=1γ1+1γ2+1γ1γ2

Trms=(tμt)2|x(tμt)|2dt|x(tμt)|2dt

where γ is the effective signal-to-noise ratio (SNR), |x(t)|2 is the power envelope of the signal, and μ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 γ and the factor of 2π was removed from Trms and incorporated into the CRLB equation.

The effective signal-to-noise ratio (SNR) γ is improved by the coherent integration gain, which is the time-bandwidth product BnT. The product BnTγ is the output SNR of the matched filter or correlator, which is equivalent to E/N0.

BnTγ=BnTSN0Bn=STN0=EN0

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 Pfa. 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.fdoa_crlb(snr, snr, 1e-6, bandwidth), label="1 μs"); \
   ...: plt.loglog(bandwidth, sdr.fdoa_crlb(snr, snr, 1e-5, bandwidth), label="10 μs"); \
   ...: plt.loglog(bandwidth, sdr.fdoa_crlb(snr, snr, 1e-4, bandwidth), label="100 μs"); \
   ...: plt.loglog(bandwidth, sdr.fdoa_crlb(snr, 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 FDOA (Hz), $\sigma_{\text{fdoa}}$"); \
   ...: plt.title(f"Cramér-Rao lower bound (CRLB) on FDOA estimation error\nstandard deviation with {snr}-dB SNR");
   ...: 
../../_images/sdr_fdoa_crlb_1.png