sdr.coherent_gain(time_bandwidth: ArrayLike) NDArray[float64]

Computes the SNR improvement by coherent integration.

Parameters:
time_bandwidth: ArrayLike

The time-bandwidth product \(T_c B_n\) in seconds-Hz (unitless). If the noise bandwidth equals the sample rate, the argument equals the number of samples \(N_c\) to coherently integrate.

Returns:

The coherent gain \(G_c\) in dB.

Notes

The signal \(x[n]\) is coherently integrated over \(N_c\) samples to produce the output \(y[n]\).

\[y[n] = \sum_{m=0}^{N_c-1} x[n-m]\]

The coherent integration gain is the reduction in SNR of \(x[n]\) compared to \(y[n]\), such that both signals have the same detection performance.

\[\text{SNR}_{y,\text{dB}} = \text{SNR}_{x,\text{dB}} + G_c\]

The coherent integration gain is the time-bandwidth product

\[G_c = 10 \log_{10} (T_c B_n) .\]

If the noise bandwidth equals the sample rate, the coherent gain is simply

\[G_c = 10 \log_{10} N_c .\]

Examples

See the Coherent integration example.

Compute the coherent gain for various integration lengths.

In [1]: sdr.coherent_gain(1)
Out[1]: 0.0

In [2]: sdr.coherent_gain(2)
Out[2]: 3.010299956639812

In [3]: sdr.coherent_gain(10)
Out[3]: 10.0

In [4]: sdr.coherent_gain(20)
Out[4]: 13.010299956639813

Plot coherent gain as a function of the number of coherently integrated samples.

In [5]: n_c = np.logspace(0, 3, 1001)

In [6]: plt.figure(); \
   ...: plt.semilogx(n_c, sdr.coherent_gain(n_c)); \
   ...: plt.xlabel("Number of samples, $N_c$"); \
   ...: plt.ylabel("Coherent gain (dB), $G_c$"); \
   ...: plt.title("Coherent gain as a function of the number of integrated samples");
   ...: 
../../_images/sdr_coherent_gain_1.png