scipy 1.8.0 Pypi GitHub Homepage
Other Docs
NotesParametersReturnsBackRef
bilinear_zpk(z, p, k, fs)

Transform a set of poles and zeros from the analog s-plane to the digital z-plane using Tustin's method, which substitutes (z-1) / (z+1) for s , maintaining the shape of the frequency response.

Notes

versionadded

Parameters

z : array_like

Zeros of the analog filter transfer function.

p : array_like

Poles of the analog filter transfer function.

k : float

System gain of the analog filter transfer function.

fs : float

Sample rate, as ordinary frequency (e.g., hertz). No prewarping is done in this function.

Returns

z : ndarray

Zeros of the transformed digital filter transfer function.

p : ndarray

Poles of the transformed digital filter transfer function.

k : float

System gain of the transformed digital filter.

Return a digital IIR filter from an analog one using a bilinear transform.

See Also

bilinear
lp2bp_zpk
lp2bs_zpk
lp2hp_zpk
lp2lp_zpk

Examples

>>> from scipy import signal
... import matplotlib.pyplot as plt
>>> fs = 100
... bf = 2 * np.pi * np.array([7, 13])
... filts = signal.lti(*signal.butter(4, bf, btype='bandpass', analog=True,
...  output='zpk'))
... filtz = signal.lti(*signal.bilinear_zpk(filts.zeros, filts.poles,
...  filts.gain, fs))
... wz, hz = signal.freqz_zpk(filtz.zeros, filtz.poles, filtz.gain)
... ws, hs = signal.freqs_zpk(filts.zeros, filts.poles, filts.gain,
...  worN=fs*wz)
... plt.semilogx(wz*fs/(2*np.pi), 20*np.log10(np.abs(hz).clip(1e-15)),
...  label=r'$|H_z(e^{j \omega})|$')
... plt.semilogx(wz*fs/(2*np.pi), 20*np.log10(np.abs(hs).clip(1e-15)),
...  label=r'$|H(j \omega)|$')
... plt.legend()
... plt.xlabel('Frequency [Hz]')
... plt.ylabel('Magnitude [dB]')
... plt.grid()
See :

Back References

The following pages refer to to this document either explicitly or contain code examples using this.

scipy.signal._filter_design.bilinear scipy.signal._filter_design.bilinear_zpk

Local connectivity graph

Hover to see nodes names; edges to Self not shown, Caped at 50 nodes.

Using a canvas is more power efficient and can get hundred of nodes ; but does not allow hyperlinks; , arrows or text (beyond on hover)

SVG is more flexible but power hungry; and does not scale well to 50 + nodes.

All aboves nodes referred to, (or are referred from) current nodes; Edges from Self to other have been omitted (or all nodes would be connected to the central node "self" which is not useful). Nodes are colored by the library they belong to, and scaled with the number of references pointing them


GitHub : /scipy/signal/_filter_design.py#2569
type: <class 'function'>
Commit: