Numpy 带Scipy的低通切比雪夫I型滤波器
我正在读一篇论文,试图重现论文的结果。在本文中,他们对原始数据使用低通切比雪夫I型滤波器。他们给出了这些参数 采样频率=32Hz,Fcut=0.25Hz,Apass=0.001dB,Astop=-100dB,Fstop=2Hz,滤波器阶数=5。我发现一些材料可以帮助我理解这些参数 但是当我看一下scipy.signal.cheby1。此功能所需的参数不同Numpy 带Scipy的低通切比雪夫I型滤波器,numpy,filter,scipy,signal-processing,data-processing,Numpy,Filter,Scipy,Signal Processing,Data Processing,我正在读一篇论文,试图重现论文的结果。在本文中,他们对原始数据使用低通切比雪夫I型滤波器。他们给出了这些参数 采样频率=32Hz,Fcut=0.25Hz,Apass=0.001dB,Astop=-100dB,Fstop=2Hz,滤波器阶数=5。我发现一些材料可以帮助我理解这些参数 但是当我看一下scipy.signal.cheby1。此功能所需的参数不同 cheby1(N, rp, Wn, btype='low', analog=False, output='ba') 这里N:过滤器的顺序;
cheby1(N, rp, Wn, btype='low', analog=False, output='ba')
这里N:过滤器的顺序;B类型:过滤器的类型,在我的例子中,它是“低通”;模拟=假,因为数据是采样的,所以是数字的;输出:指定输出的类型。但我不确定rp,Wn
文件中说:
rp:浮动
通带中单位增益以下允许的最大纹波。以分贝为单位的正数
Wn:数组_-like
给出临界频率的标量或长度为2的序列。对于I型滤波器,这是过渡带中增益首次降至-rp以下的点。对于数字滤波器,Wn从0到1进行归一化,其中1是奈奎斯特频率,π弧度/采样。(因此Wn为半周期/样本。)对于模拟滤波器,Wn为角频率(例如rad/s)
根据这一问题:
我知道如何使用过滤器。但是我不知道如何创建一个与上面提到的参数相同的过滤器。我不知道如何转换这些参数并将它们提供给Scipy中的函数。请查看。请注意,绘图显示了常规过滤器的特性。然而,低通I型切比雪夫滤波器在阻带中没有纹波
I型切比雪夫滤波器的设计有三个可用参数:滤波器阶数、纹波系数和截止频率。以下是的前三个参数:
的第一个参数是过滤器的顺序cheby1
- 第二个参数,
,对应于维基百科页面中的δ,显然就是您所称的rp
Apass
- 第三个参数是
,截止频率表示为奈奎斯特频率的一部分。在你的情况下,你可以这样写wn
fs = 32 # Sample rate (Hz) fcut = 0.25 # Desired filter cutoff frequency (Hz) # Cutoff frequency relative to the Nyquist wn = fcut / (0.5*fs)
xlim
和ylim
函数的参数以查看更多信息
import numpy as np
from scipy.signal import cheby1, freqz
import matplotlib.pyplot as plt
# Sampling parameters
fs = 32 # Hz
# Desired filter parameters
order = 5
Apass = 0.001 # dB
fcut = 0.25 # Hz
# Normalized frequency argument for cheby1
wn = fcut / (0.5*fs)
b, a = cheby1(order, Apass, wn)
w, h = freqz(b, a, worN=8000)
plt.figure(1)
plt.plot(0.5*fs*w/np.pi, 20*np.log10(np.abs(h)))
plt.axvline(fcut, color='r', alpha=0.2)
plt.plot([0, fcut], [-Apass, -Apass], color='r', alpha=0.2)
plt.xlim(0, 0.3)
plt.xlabel('Frequency (Hz)')
plt.ylim(-5*Apass, Apass)
plt.ylabel('Gain (dB)')
plt.grid()
plt.title("Chebyshev Type I Lowpass Filter")
plt.tight_layout()
plt.show()