TypeError:filter()缺少1个必需的位置参数:'v'

时间:2018-01-05 18:16:24

标签: python signal-processing

我正在尝试用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])

1 个答案:

答案 0 :(得分:1)

您尚未初始化课程(IIR2Filter),因此filter(self, v)未被传递self;因此,x[i]是第一个位置参数(self),缺少第二个位置参数(v)。

此外,您添加到__init__方法的参数会影响全局范围中的变量名称(模块顶部的变量名称)。看起来你的filter方法打算引用全局变量; __init__上的论点是多余的。