我正在尝试将Matlab代码转换为Python。我想fdesign.lowpass()
用Python实现Matlab。使用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);
一个非常基本的方法是调用
# 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
字段-此数字数组直接对应于h
上面的python代码中的变量。因此,如果您手动将这些数字复制到数组中,则会得到数值上相等的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句