Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python';scipy.signal.lfilter的s scipy.signal.remez输出?_Python_Scipy_Digital Filter - Fatal编程技术网

如何使用Python';scipy.signal.lfilter的s scipy.signal.remez输出?

如何使用Python';scipy.signal.lfilter的s scipy.signal.remez输出?,python,scipy,digital-filter,Python,Scipy,Digital Filter,我正在用python创建一个带通过滤器。我使用signal.remez计算了传递函数系数,频率响应看起来正是我想要的。但是,signal.remez返回单个一维系数数组。我希望有两个数组,一组用于传递函数的分子和分母 如何在signal.lfilter中使用python remez算法的输出 代码段: from scipy.signal import lfilter, remez def Rfilter(data, samplerate): g = samplera

我正在用python创建一个带通过滤器。我使用signal.remez计算了传递函数系数,频率响应看起来正是我想要的。但是,signal.remez返回单个一维系数数组。我希望有两个数组,一组用于传递函数的分子和分母

如何在signal.lfilter中使用python remez算法的输出

代码段:

from scipy.signal import lfilter, remez

def Rfilter(data, samplerate):
    g           = samplerate/2.
    f           = g/62.5
    e           = f*0.875
    d           = e*(3./7.)
    c           = d*(4./15.)
    coeff           = remez(400, [0, c, d, e, f, g], [0, 1, 0], Hz=samplerate, maxiter=100)
    return coeff


infile      = 'data.csv'
data        = open(infile, 'r')
data        = data.readlines()
X           = []
V           = []


for line in data:
    line        = line.strip().split(',')
    X.append(float(line[0]))
    V.append(float(line[1]))


timestep    = X[1] - X[0]
samplerate  = 1/timestep

#Here is the array of coefficients that remez returns. 
coeff       = Rfilter(V, samplerate)

#From coeff, need to generate a and b, the numerator and denomenator coefficients
#FV             = lfilter(a, b, V)

这是一个古老的问题,但是有超过1000个视图,也许仍然有人带着类似的问题出现在这里

计算(FIR)滤波器的系数。输出只是一组系数。你说你期望两组系数,这意味着你期望
remez
设计一个(IIR)滤波器,但是
remez
没有这样做


您可以使用卷积函数应用过滤器,例如
numpy.convolve
或。您也可以使用
lfilter
接受IIR滤波器的系数。
lfilter
b
a
的前两个参数是IIR滤波器的分子和分母的系数。通过将
b
设置为
remez
返回的系数,并设置
a=1,可以将FIR滤波器传递给
lfilter
。(换句话说,分母不重要的“IIR”滤波器实际上是FIR滤波器。)

这个问题属于FIR滤波器,因为我的问题的前一个版本太长,我将把信号处理部分移到建议的堆栈交换。我希望编辑的版本足够窄,修改得更好;包含一个您尝试过的代码示例将对它有更大的帮助
data=(72、[0,0.1,0.2,0.4,0.45,0.5]、[0,1,0]);signal.lfilter(signal.remez(*data),[1],data[1])
(请考虑,我对dsp几乎一无所知,这只是通过阅读文档和一些常识…)