python中的低通滤波器

mar*_*yer 8 python numpy filter scipy

我正在尝试将Matlab代码转换为Python.我想fdesign.lowpass()在Python中实现Matlab.使用以下内容的Matlab代码的确切替代品是什么scipy.signal.firwin():

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);
Run Code Online (Sandbox Code Playgroud)

Dav*_*ave 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)
Run Code Online (Sandbox Code Playgroud)

这应该产生一个类似于最终在Matlab代码中制作的过滤器.如果你的目标是获得功能相同的结果,这应该提供一个有用的过滤器.

但是,如果您的目标是python代码提供完全相同的结果,那么您将不得不深入了解design调用(在Matlab中); 从我的快速检查来看,解析Matlab调用以确切地识别它正在做什么,即使用什么设计方法等等,以及如何将其映射到相应的scipy调用中并不是一件容易的事.如果你真的想要兼容性,而你只需要为有限数量的过滤器做这个,你可以手工查看Hd.Numerator字段 - 这个数字数组直接对应于h上面python代码中的变量.因此,如果您手动将这些数字复制到数组中,您将获得数值相同的结果.