繁体   English   中英

如何将python的scipy.signal.remez输出用于scipy.signal.lfilter?

[英]How to use Python's scipy.signal.remez output for scipy.signal.lfilter?

我在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多个视图,也许仍然有人在这里出现类似的问题。

scipy.signal.remez计算有限冲激响应 (FIR)滤波器的系数。 输出只是一组系数。 您说您期望两组系数,这意味着您期望remez设计一个无限冲激响应 (IIR)滤波器,但是remez不会那样做。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM