我正在尝试用Python创建一个数字滤波器来过滤波形文件。
它告诉我,我没有将参数传递给过滤函数,但我是底部循环的一部分。
TypeError:filter()缺少1个必需的位置参数:'v'
有人可以帮忙吗?
import scipy.io.wavfile as wavfile
import numpy as np
#Load the data
r, x = wavfile.read('M80_and_speech.wav')
#create output array
y = np.zeros(len(x))
#filter coefficients
a1 = -1.96977856
a2 = 0.97022848
b0 = 0.98500176
b1 = -1.97000352
b2 = 0.98500176
#create filter class
class IIR2Filter:
def __init__(self, a1, a2, b0, b1, b2):
self.input_acc = 0
self.outut_acc = 0
self.buffer1 = 0
self.buffer2 = 0
def filter(self, v):
#accumulator for the IIR part
self.input_acc = v
self.input_acc = self.input_acc - (a1*self.buffer1)
self.input_acc = self.input_acc - (a2*self.buffer2)
#accumulator for the FIR part
self.output_acc = self.input_acc * b0
self.output_acc = self.output_acc + (b1*self.buffer1)
self.output_acc = self.output_acc + (b2*self.buffer2)
self.buffer2 = self.buffer1
self.buffer1 = self.input_acc
return self.output_acc
for i in range (len(x)):
y[i] = IIR2Filter.filter(x[i])
答案 0 :(得分:1)
您尚未初始化课程(IIR2Filter
),因此filter(self, v)
未被传递self
;因此,x[i]
是第一个位置参数(self
),缺少第二个位置参数(v
)。
此外,您添加到__init__
方法的参数会影响全局范围中的变量名称(模块顶部的变量名称)。看起来你的filter
方法打算引用全局变量; __init__
上的论点是多余的。