bundles / scipy latest / scipy / signal / _filter_design / freqz_zpk
function
scipy.signal._filter_design:freqz_zpk
Signature
def freqz_zpk ( z , p , k , worN = 512 , whole = False , fs = 6.283185307179586 ) Summary
Compute the frequency response of a digital filter in ZPK form.
Extended Summary
Given the Zeros, Poles and Gain of a digital filter, compute its frequency response:
where is the gain, are the zeros and are the poles.
Parameters
z: array_likeZeroes of a linear filter
p: array_likePoles of a linear filter
k: scalarGain of a linear filter
worN: {None, int, array_like}, optionalIf a single integer, then compute at that many frequencies (default is N=512).
If an array_like, compute the response at the frequencies given. These are in the same units as
fs.whole: bool, optionalNormally, frequencies are computed from 0 to the Nyquist frequency, fs/2 (upper-half of unit-circle). If
wholeis True, compute frequencies from 0 to fs. Ignored if w is array_like.fs: float, optionalThe sampling frequency of the digital system. Defaults to 2*pi radians/sample (so w is from 0 to pi).
Returns
w: ndarrayThe frequencies at which h was computed, in the same units as
fs. By default, w is normalized to the range [0, pi) (radians/sample).h: ndarrayThe frequency response, as complex numbers.
Notes
Array API Standard Support
freqz_zpk 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 a 4th-order digital Butterworth filter with cut-off of 100 Hz in a system with sample rate of 1000 Hz, and plot the frequency response:import numpy as np from scipy import signal z, p, k = signal.butter(4, 100, output='zpk', fs=1000) w, h = signal.freqz_zpk(z, p, k, fs=1000)✓
import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.add_subplot(1, 1, 1)✓
ax1.set_title('Digital filter frequency response')
✗ax1.plot(w, 20 * np.log10(abs(h)), 'b') ax1.set_ylabel('Amplitude [dB]', color='b') ax1.set_xlabel('Frequency [Hz]')✗
ax1.grid(True)
✓ax2 = ax1.twinx() phase = np.unwrap(np.angle(h))✓
ax2.plot(w, phase, 'g') ax2.set_ylabel('Phase [rad]', color='g')✗
plt.axis('tight')
✗plt.show()
✓
See also
Aliases
-
scipy.signal.freqz_zpk