【问题标题】:writing in Python fir1 matlab with Scipy firwin使用 Scipy firwin 在 Python fir1 matlab 中编写
【发布时间】:2020-07-17 12:13:32
【问题描述】:

我需要将信号处理 Matlab 包翻译成 Python。我被困在 fir1 函数中。 Matlab中的Fir1描述: b = fir1(n,Wn) 使用汉明窗设计具有线性相位的 n 阶低通、带通或多频带 FIR 滤波器。过滤器类型取决于Wn的元素个数。

我试过了:

import scipy
b = scipy.signal.firwin(11,.5, window = "hamming", pass_zero = False)
-0.00506032, -0.  0.04194288, -0. -0.28848483, 0.49679547, -0.28848483,
 -0. 0.04194288, -0.  -0.00506032

在 Matlab 或 Octave 中:

   fir1(10,.5)
0.00505978  -0.00016286  -0.04194054   0.00066187   0.28847599   0.49581153   0.28847599    
-0.00016286   0.00505978

【问题讨论】:

    标签: python matlab scipy signal-processing


    【解决方案1】:

    来自 Matlab 的fir documentation

    如果 Wn 是标量,则 fir1 设计一个 低通或高通滤波器,其截止频率为 Wn...

    因此,似乎提供pass_zero = False 可能与Matlab 的结果不符。相反,请尝试pass_zero='lowpass' 进行正确比较。

    【讨论】:

    • scipy.signal.firwin(11,.5, window = "hamming", pass_zero = 'lowpass') 给出:5.06031712e-03, -3.25061549e-18, -4.19428794e-02, 1.32104345e-17、2.88484826e-01、4.96795472e-01、2.88484826e-01、1.32104345e-17、-4.19428794e-02、-3.25061549e-18、5.06031712e-03
    • 我认为您错过了在您的问题中编写 Matlab 的 fir1 命令的一些输出。它应该有 11 列。而您的输出中只有 9 列。无论如何,当我在 Matlab 中发出 format longe; fir1(10, 0.5) 时,我得到以下输出:[5.060317124844847e-03, -3.250615490734487e-18, -4.194287943134473e-02, 1.321043449104680e-17, 2.884848263026376e-01, 4.967954720077247e-01, 2.884848263026376e-01, 1.321043449104680e-17, -4.194287943134473e-02, -3.250615490734487e-18, 5.060317124844847e-03],在我看来,这与你从 scipy 的 firwin 得到的结果接近。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多