簡體   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