bundles / scipy 1.17.1 / scipy / signal / _filter_design / iirnotch
function
scipy.signal._filter_design:iirnotch
Signature
def iirnotch ( w0 , Q , fs = 2.0 , * , xp = None , device = None ) Summary
Design second-order IIR notch digital filter.
Extended Summary
A notch filter is a band-stop filter with a narrow bandwidth (high quality factor). It rejects a narrow frequency band and leaves the rest of the spectrum little changed.
Parameters
w0: floatFrequency to remove from 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 notch 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
iirnotch 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 60 Hz component from a signal sampled at 200 Hz, using a quality factor Q = 30from scipy import signal import matplotlib.pyplot as plt import numpy as np✓
fs = 200.0 # Sample frequency (Hz) f0 = 60.0 # Frequency to be removed from signal (Hz) Q = 30.0 # Quality factor b, a = signal.iirnotch(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(abs(h)), color='blue') ax[0].set_title("Frequency Response") ax[0].set_ylabel("Amplitude [dB]", color='blue') ax[0].set_xlim([0, 100]) ax[0].set_ylim([-25, 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, 100]) 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.iirnotch