- class sdr.FractionalDelay(sdr.FIR)
Implements a fractional delay FIR filter.
Examples
Design \(\Delta n = 0.21719\) delay filters with various lengths. Examine the width and flatness of the frequency response passband.
In [1]: plt.figure(); In [2]: for length in [4, 8, 16, 32, 64, 128]: ...: fir = sdr.FractionalDelay(length, 0.21719) ...: sdr.plot.magnitude_response(fir, label=f"$L = {length}$") ...: In [3]: plt.legend(loc="lower left");
Design filters with length \(L = 8\) and various fractional delays. Examine the effects on the magnitude response outside the passband as a function of the fractional delay. Note the symmetry about \(\Delta n = 0.5\) and that the out-of-band magnitude response is worst at \(\Delta n = 0.5\).
In [4]: plt.figure(); In [5]: for delay in np.arange(0.1, 1, 0.1): ...: fir = sdr.FractionalDelay(8, delay) ...: sdr.plot.magnitude_response(fir, label=f"$\Delta n = {delay:0.1f}$") ...: In [6]: plt.ylim(-10, 1); \ ...: plt.legend(loc="lower left"); ...:
Examine the effects on the group delay outside the passband as a function of the fractional delay. Note the symmetry about \(\Delta n = 0.5\). The out-of-band group delay is worst around \(\Delta n \approx 0.5\), however the group delay is perfectly flat at exactly \(\Delta n = 0.5\).
In [7]: plt.figure(); In [8]: for delay in np.arange(0.1, 1, 0.1): ...: fir = sdr.FractionalDelay(8, delay) ...: sdr.plot.group_delay(fir, label=f"$\Delta n = {delay:0.1f}$") ...: In [9]: plt.legend(loc="lower left");
Constructors¶
- FractionalDelay(length: int, delay: float)
Creates a fractional delay FIR filter.
Special methods¶
Streaming mode only¶
- reset()
Resets the filter state. Only useful when using streaming mode.
- flush() NDArray
Flushes the filter state by passing zeros through the filter. Only useful when using streaming mode.
- property state : NDArray
The filter state consisting of the previous \(N\) inputs.
Methods¶
-
impulse_response(N: int | None =
None
) NDArray Returns the impulse response \(h[n]\) of the FIR filter.
-
step_response(N: int | None =
None
) NDArray Returns the step response \(s[n]\) of the FIR filter.
- frequency_response(...) tuple[ndarray[Any, dtype[float64]], ndarray[Any, dtype[complex128]]]
- frequency_response(freqs: float, ...) complex
- frequency_response(freqs, ...) ndarray[Any, dtype[complex128]]
Returns the frequency response \(H(\omega)\) of the FIR filter.
- group_delay(...) tuple[NDArray, NDArray]
Returns the group delay \(\tau_g(\omega)\) of the FIR filter.
- phase_delay(...) tuple[NDArray, NDArray]
Returns the phase delay \(\tau_{\phi}(\omega)\) of the FIR filter.
-
noise_bandwidth(sample_rate: float =
1.0
) float Returns the noise bandwidth \(B_n\) of the FIR filter.
Properties¶
- property taps : NDArray
The feedforward taps \(h[n]\) with length \(N + 1\).