【问题标题】:Lowpass Filter in pythonpython中的低通滤波器
【发布时间】:2013-07-23 21:01:55
【问题描述】:

我正在尝试将 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);

【问题讨论】:

    标签: python numpy filter scipy


    【解决方案1】:

    一个非常基本的方法是调用

    # 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 变量。所以如果你复制那些 手动将数字放入数组中,您将获得数值等效的结果。

    【讨论】:

      猜你喜欢
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 2011-08-31
      • 2012-04-08
      • 2015-01-22
      相关资源
      最近更新 更多