本文简要介绍 python 语言中 scipy.signal.iircomb
的用法。
用法:
scipy.signal.iircomb(w0, Q, ftype='notch', fs=2.0, *, pass_zero=False)#
设计 IIR 陷波或峰值数字梳状滤波器。
陷波梳状滤波器由窄带宽(高品质因数)的 regularly-spaced band-stop 滤波器组成。每个都抑制一个窄频带,而其余频谱几乎没有变化。
峰化梳状滤波器由窄带宽(高品质因数)的 regularly-spaced band-pass 滤波器组成。每个都抑制窄频带之外的分量。
- w0: 浮点数
梳状滤波器的基频(其峰值之间的间距)。这必须均匀划分采样频率。如果fs已指定,其单位与fs.默认情况下,它是一个标准化的标量,必须满足
0 < w0 < 1
, 和w0 = 1
对应于采样频率的一半。- Q: 浮点数
品质因数。表征陷波滤波器 -3 dB 带宽
bw
相对于其中心频率Q = w0/bw
的无量纲参数。- ftype: {‘notch’, ‘peak’}
该函数生成的梳状滤波器的类型。如果‘notch’,则 Q 因子适用于凹口。如果‘peak’,则 Q 因子适用于峰值。默认为‘notch’。
- fs: 浮点数,可选
信号的采样频率。默认值为 2.0。
- pass_zero: 布尔型,可选
如果为 False(默认值),则滤波器的凹口(空值)以频率 [0, w0, 2*w0, …] 为中心,峰值以中点 [w0/2, 3*w0/2, 5] 为中心*w0/2,...]。如果为 True,则峰值以 [0, w0, 2*w0, …] 为中心(通过零频率),反之亦然。
- b, a: 数组,数组
IIR 滤波器的分子 (
b
) 和分母 (a
) 多项式。
- ValueError
如果w0小于或等于 0 或大于或等于
fs/2
, 如果fs不能被w0, 如果类型不是‘notch’ 或‘peak’
参数 ::
返回 ::
抛出 ::
注意:
实现细节见[1]。由于使用了单个重复极点,因此梳状滤波器的 TF 实现即使在更高阶数上也是数值稳定的,不会遭受精度损失。
参考:
[1]Sophocles J. Orfanidis,“信号处理简介”,Prentice-Hall,1996 年,第 1 章11、“Digital Filter Design”
例子:
使用品质因数 Q = 30 设计并绘制 20 Hz 的陷波梳状滤波器,用于以 200 Hz 采样的信号
>>> from scipy import signal >>> import matplotlib.pyplot as plt >>> import numpy as np
>>> fs = 200.0 # Sample frequency (Hz) >>> f0 = 20.0 # Frequency to be removed from signal (Hz) >>> Q = 30.0 # Quality factor >>> # Design notching comb filter >>> b, a = signal.iircomb(f0, Q, ftype='notch', fs=fs)
>>> # Frequency response >>> freq, h = signal.freqz(b, a, fs=fs) >>> response = abs(h) >>> # To avoid divide by zero when graphing >>> response[response == 0] = 1e-20 >>> # Plot >>> fig, ax = plt.subplots(2, 1, figsize=(8, 6), sharex=True) >>> ax[0].plot(freq, 20*np.log10(abs(response)), 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([-30, 10]) >>> ax[0].grid(True) >>> ax[1].plot(freq, (np.angle(h)*180/np.pi+180)%360 - 180, color='green') >>> ax[1].set_ylabel("Angle (degrees)", 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()
使用品质因数 Q = 30,设计并绘制 250 Hz 处的峰值梳状滤波器,用于以 1000 Hz 采样的信号
>>> fs = 1000.0 # Sample frequency (Hz) >>> f0 = 250.0 # Frequency to be retained (Hz) >>> Q = 30.0 # Quality factor >>> # Design peaking filter >>> b, a = signal.iircomb(f0, Q, ftype='peak', fs=fs, pass_zero=True)
>>> # Frequency response >>> freq, h = signal.freqz(b, a, fs=fs) >>> response = abs(h) >>> # To avoid divide by zero when graphing >>> response[response == 0] = 1e-20 >>> # Plot >>> fig, ax = plt.subplots(2, 1, figsize=(8, 6), sharex=True) >>> 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([-80, 10]) >>> ax[0].grid(True) >>> ax[1].plot(freq, (np.angle(h)*180/np.pi+180)%360 - 180, color='green') >>> ax[1].set_ylabel("Angle (degrees)", 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()
相关用法
- Python SciPy signal.iirdesign用法及代码示例
- Python SciPy signal.iirfilter用法及代码示例
- Python SciPy signal.iirnotch用法及代码示例
- Python SciPy signal.iirpeak用法及代码示例
- Python SciPy signal.impulse用法及代码示例
- Python SciPy signal.impulse2用法及代码示例
- Python SciPy signal.invresz用法及代码示例
- Python SciPy signal.istft用法及代码示例
- Python SciPy signal.invres用法及代码示例
- Python SciPy signal.czt_points用法及代码示例
- Python SciPy signal.chirp用法及代码示例
- Python SciPy signal.residue用法及代码示例
- Python SciPy signal.max_len_seq用法及代码示例
- Python SciPy signal.kaiser_atten用法及代码示例
- Python SciPy signal.oaconvolve用法及代码示例
- Python SciPy signal.hilbert用法及代码示例
- Python SciPy signal.ricker用法及代码示例
- Python SciPy signal.group_delay用法及代码示例
- Python SciPy signal.cheb2ord用法及代码示例
- Python SciPy signal.get_window用法及代码示例
- Python SciPy signal.lfilter用法及代码示例
- Python SciPy signal.morlet用法及代码示例
- Python SciPy signal.coherence用法及代码示例
- Python SciPy signal.dfreqresp用法及代码示例
- Python SciPy signal.TransferFunction用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.signal.iircomb。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。