bundles / scipy latest / scipy / signal / _filter_design / iirpeak
function
scipy.signal._filter_design:iirpeak
Signature
def iirpeak ( w0 , Q , fs = 2.0 , * , xp = None , device = None ) Summary
Design second-order IIR peak (resonant) digital filter.
Extended Summary
A peak filter is a band-pass filter with a narrow bandwidth (high quality factor). It rejects components outside a narrow frequency band.
Parameters
w0: floatFrequency to be retained in a signal. If
fsis specified, this is in the same units asfs. By default, it is a normalized scalar that must satisfy0 < w0 < 1, withw0 = 1corresponding to half of the sampling frequency.Q: floatQuality factor. Dimensionless parameter that characterizes peak filter -3 dB bandwidth
bwrelative to its center frequency,Q = w0/bw.fs: float, optionalThe sampling frequency of the digital system.
xp: array_namespace, optionalOptional array namespace. Should be compatible with the array API standard, or supported by array-api-compat. Default:
numpydevice: anyoptional device specification for output. Should match one of the supported device specification in
xp.
Returns
b, a: ndarray, ndarrayNumerator (
b) and denominator (a) polynomials of the IIR filter.
Notes
Array API Standard Support
iirpeak has experimental support for Python Array API Standard compatible backends in addition to NumPy. Please consider testing these features by setting an environment variable SCIPY_ARRAY_API=1 and providing CuPy, PyTorch, JAX, or Dask arrays as array arguments. The following combinations of backend and device (or other capability) are supported.
==================== ==================== ==================== Library CPU GPU ==================== ==================== ==================== NumPy ✅ n/a CuPy n/a ✅ PyTorch ✅ ✅ JAX ✅ ✅ Dask ✅ n/a ==================== ==================== ====================
See
dev-arrayapifor more information.
Examples
Design and plot filter to remove the frequencies other than the 300 Hz component from a signal sampled at 1000 Hz, using a quality factor Q = 30import numpy as np from scipy import signal import matplotlib.pyplot as plt✓
fs = 1000.0 # Sample frequency (Hz) f0 = 300.0 # Frequency to be retained (Hz) Q = 30.0 # Quality factor b, a = signal.iirpeak(f0, Q, fs)✓
freq, h = signal.freqz(b, a, fs=fs) fig, ax = plt.subplots(2, 1, figsize=(8, 6))✓
ax[0].plot(freq, 20*np.log10(np.maximum(abs(h), 1e-5)), color='blue') ax[0].set_title("Frequency Response") ax[0].set_ylabel("Amplitude [dB]", color='blue') ax[0].set_xlim([0, 500]) ax[0].set_ylim([-50, 10])✗
ax[0].grid(True)
✓ax[1].plot(freq, np.unwrap(np.angle(h))*180/np.pi, color='green') ax[1].set_ylabel("Phase [deg]", color='green') ax[1].set_xlabel("Frequency [Hz]") ax[1].set_xlim([0, 500]) ax[1].set_yticks([-90, -60, -30, 0, 30, 60, 90]) ax[1].set_ylim([-90, 90])✗
ax[1].grid(True) plt.show()✓

See also
Aliases
-
scipy.signal.iirpeak