fir2从matlab到python

时间:2015-10-13 20:13:57

标签: python matlab numpy scipy signal-processing

我试图通过使用spicy.signal.firwin2函数将fir2过滤器转换为python但是返回以下错误:

from scipy import signal as sigs
orderFIR = 4096
# WdBCor is a numpy array with 22050 values 
outMidFIR = sigs.firwin2(orderFIR+1,range(0,FS/2,1),10**(WdB_cor / 20))

错误是:

{ValueError} freq必须以0开头,以nye结束。

任何人都可以解释问题是什么吗?或者我应该使用其他函数来执行与Matlab相同的fir2过滤器?

1 个答案:

答案 0 :(得分:1)

仔细阅读fir2win的文档。对于第二个参数freq,它说:

  

freqarray_like,1D

     

频率采样点。通常为0.0到1.0,其中1.0为奈奎斯特。可以使用参数nyq重新定义奈奎斯特频率。 freq中的值必须不减少。值可以重复一次以实现不连续性。 freq中的第一个值必须为0,最后一个值必须为nyq

因此,您首先需要提供一个名为nyq的附加参数,重新定义奈奎斯特频率,因为它当前假设1.0是奈奎斯特。简单地说,在这种情况下你会做nyq=FS/2。其次,range 包括结束点,此函数要求您将奈奎斯特频率指定为数组中的最后一个元素。因此,最好使用numpy.linspace来包含起点和终点。

因此,你会这样做:

import numpy as np
from scipy import signal as sigs

orderFIR = 4096
num_points = len(Wdb_cor) # Get total number of points
outMidFIR = sigs.firwin2(orderFIR+1,np.linspace(0,FS/2,num_points),10**(WdB_cor/20), nyq=FS/2)