我试图通过使用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过滤器?
答案 0 :(得分:1)
仔细阅读fir2win
的文档。对于第二个参数freq
,它说:
freq
:array_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)