我正在尝试使用
我的参数是:
通带频率(Fp)= 10 Hz,因此Wp = 2*pi*10 Hz
阻带频率(Fs)= 100 Hz,因此Ws = 2*pi*100 Hz
通带和阻带损失/衰减(Rp,Rs)分别为3 dB和80 dB。
在MATLAB中,我使用以下代码:
buttord
函数设计模拟Butterworth滤波器(实际上,我正在将一个调用此函数的MATLAB程序移植到Python)。我的参数是:
通带频率(Fp)= 10 Hz,因此Wp = 2*pi*10 Hz
阻带频率(Fs)= 100 Hz,因此Ws = 2*pi*100 Hz
通带和阻带损失/衰减(Rp,Rs)分别为3 dB和80 dB。
在MATLAB中,我使用以下代码:
Wp = 2 * pi * 10
Ws = 2 * pi * 100
Rp = 3
Rs = 80
[N, Wn] = buttord(Wp, Ws, Rp, Rs, 's')
这段文字给出了 N = 5
, Wn = 99.581776302
相关的IT技术内容。
在SciPy中,我尝试做同样的事情:
from numpy import pi
from scipy import signal
Wp = 2 * pi * 10
Ws = 2 * pi * 100
Rp = 3
Rs = 80
(N, Wn) = signal.buttord(Wp, Ws, Rp, Rs, analog=True)
我得到了 N = 5
和 Wn = 62.861698649592753
。Wn与MATLAB给出的值不同,且奇怪地接近于Wp。这里有什么问题?
深入研究SciPy的源代码和问题,我发现这个拉取请求可能可以解释事情:原来MATLAB和SciPy有不同的设计目标(MATLAB试图优化匹配阻带频率,而SciPy试图优化匹配通带频率)。
如果有影响,我正在使用MATLAB R2013a、Python 3.4.2和SciPy 0.15.0。