iTS*_*iTS 1 signal-processing numpy filter data-processing scipy
我正在阅读一篇论文,试图重现论文的结果。在本文中,他们对原始数据使用低通切比雪夫 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')
Run Code Online (Sandbox Code Playgroud)
这里N:滤波器的阶数;btype:滤波器的类型,在我的例子中,它是“低通”;Analog=False,因为数据是采样的,所以是数字的;输出:指定输出的类型。但我不确定rp、Wn。
在文档中,它说:
rp :浮点 通带中允许低于单位增益的最大纹波。以分贝为单位指定,为正数。
Wn : array_like 给出临界频率的标量或长度为 2 的序列。对于 I 型滤波器,这是过渡带中增益首次降至 -rp 以下的点。对于数字滤波器,Wn 从 0 到 1 归一化,其中 1 是奈奎斯特频率,pi 弧度/样本。(因此,Wn 的单位是半周期/样本。)对于模拟滤波器,Wn 是角频率(例如rad/s)。
根据这个问题: How To apply a filter to a signal in python
我知道如何使用过滤器。但我不知道如何创建一个具有与上述相同参数的过滤器。我不知道如何转换这些参数并将它们提供给Scipy中的函数。
查看有关 I 型切比雪夫滤波器的维基百科页面。请注意,您的图说明了一般过滤器的特征。然而,低通 I 型切比雪夫滤波器在阻带中没有纹波。
\n\n您可以使用三个可用参数来设计 I 型切比雪夫滤波器:滤波器阶数、纹波系数和截止频率。这些是 的前三个参数scipy.signal.cheby1:
cheby1是过滤器的顺序。rp对应于维基百科页面中的 \xce\xb4 ,显然就是您所说的Apass。第三个参数是wn,截止频率表示为奈奎斯特频率的分数。对于你的情况,你可以写类似的东西
fs = 32 # Sample rate (Hz)\nfcut = 0.25 # Desired filter cutoff frequency (Hz)\n\n# Cutoff frequency relative to the Nyquist\nwn = fcut / (0.5*fs) \nRun Code Online (Sandbox Code Playgroud)一旦选择了这三个参数,所有其他特性(例如过渡带宽、Astop、Fstop 等)就确定了。因此,您给出的规范“采样频率 = 32Hz,Fcut=0.25Hz,Apass = 0.001dB,Astop = -100dB,Fstop = 2Hz,滤波器阶数 = 5”似乎与 I 型不兼容切比雪夫滤波器。特别是,我在 2 Hz 时获得约 -78 dB 的增益。\n(如果将阶数增加到 6,则 2 Hz 时的增益约为 -103。)
\n\n这是一个完整的脚本,后面是它生成的情节。该图仅显示通带,但您可以更改xlim和ylim函数的参数以查看更多信息。
import numpy as np\nfrom scipy.signal import cheby1, freqz\nimport matplotlib.pyplot as plt\n\n\n# Sampling parameters\nfs = 32 # Hz\n\n# Desired filter parameters\norder = 5\nApass = 0.001 # dB\nfcut = 0.25 # Hz\n\n# Normalized frequency argument for cheby1\nwn = fcut / (0.5*fs)\n\nb, a = cheby1(order, Apass, wn)\n\nw, h = freqz(b, a, worN=8000)\n\nplt.figure(1)\nplt.plot(0.5*fs*w/np.pi, 20*np.log10(np.abs(h)))\nplt.axvline(fcut, color=\'r\', alpha=0.2)\nplt.plot([0, fcut], [-Apass, -Apass], color=\'r\', alpha=0.2)\nplt.xlim(0, 0.3)\nplt.xlabel(\'Frequency (Hz)\')\nplt.ylim(-5*Apass, Apass)\nplt.ylabel(\'Gain (dB)\')\nplt.grid()\nplt.title("Chebyshev Type I Lowpass Filter")\nplt.tight_layout()\n\nplt.show()\nRun Code Online (Sandbox Code Playgroud)\n\n\n
| 归档时间: |
|
| 查看次数: |
6876 次 |
| 最近记录: |