[英]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.convolve
或scipy.signal.convolve
應用過濾器。 您也可以使用scipy.signal.lfilter
。 lfilter
接受IIR濾波器的系數。 lfilter
的前兩個參數b
和a
是IIR濾波器的分子和分母的系數。 通過將b
設置為remez
返回的系數並設置a=1
,可以將FIR濾波器傳遞給lfilter
。 (換句話說,具有微分母的“ IIR”濾波器實際上是FIR濾波器。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.