Python中的低通滤波器

9

我正在试图将Matlab代码转换为Python。我想在Python中实现Matlab的fdesign.lowpass()。使用scipy.signal.firwin(),下面是这个Matlab代码的精确替代方案:

demod_1_a = mod_noisy * 2.*cos(2*pi*Fc*t+phi);
d = fdesign.lowpass('N,Fc', 10, 40, 1600);
Hd = design(d);
y = filter(Hd, demod_1_a);
1个回答

6
一个非常基础的方法是调用
# spell out the args that were passed to the Matlab function
N = 10
Fc = 40
Fs = 1600
# provide them to firwin
h = scipy.signal.firwin(numtaps=N, cutoff=40, nyq=Fs/2)
# 'x' is the time-series data you are filtering
y = scipy.signal.lfilter(h, 1.0, x)

这应该可以得到一个与Matlab代码中最终生成的滤波器相似的滤波器。如果你的目标是获得功能等效的结果,那么这应该提供一个有用的滤波器。

然而,如果你的目标是让Python代码提供完全相同的结果,则必须查看design调用(在Matlab中)的内部机制;从我的快速检查来看,解析Matlab调用以确定它正在做什么(即使用了哪种设计方法等),并将其映射到相应的scipy调用并不容易。如果你真的想要兼容性,并且只需要对有限数量的滤波器进行此操作,那么你可以手动查看Hd.Numerator字段——这些数字数组直接对应于上面Python代码中的h变量。因此,如果你手动将那些数字复制到一个数组中,你将得到数值上等价的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接