我尝试将一个简单的差分方程应用到numpy数组,作为滤波算法的一部分。问题是python在for循环中重新分配numpy变量,从而返回一个零列表。如何通过引用for循环来重构此代码以传递numpy数组?你知道吗
def resonant_ladder_filter(vector_in, fc, res):
fs = 44100
fs2 = 2*fs
in2 = signal.decimate(vector_in, 2)
h = signal.firwin(10, 0.5)
in2 = signal.lfilter(h,1,in2)
g = 2*np.pi*fc/fs2
Gres = res;
h0 = g/1.3; h1 = g*0.3/1.3;
w = np.array([0, 0, 0, 0, 0])
wold = np.array([0, 0, 0, 0, 0])
Gcomp = 0.5;
out = np.zeros(len(vector_in))
out2 = np.zeros(len(in2))
for n in range(0,len(in2)):
u = in2[n] - 4*Gres*(wold[4] - Gcomp*in2[n])
w[0] = np.tanh(u)
w[1] = h0*w[0] + h1*wold[0] + (1-g)*wold[1]
w[2] = h0*w[1] + h1*wold[1] + (1-g)*wold[2]
w[3] = h0*w[2] + h1*wold[2] + (1-g)*wold[3]
w[4] = h0*w[3] + h1*wold[3] + (1-g)*wold[4]
out2[n] = w[4]
wold = w
out2 = signal.lfilter(h,1,out2)
out = signal.decimate(out2, 2)
return out
这段代码基本上是用matlab风格编写的,不能很好地使用python进行即插即用。一定有更好的方法写这个,我就是想不出来。你知道吗
你知道吗 你好,k.munn
我相信你的问题与变量赋值和复制有关。你知道吗
这条线是你的问题:
更改为:
它将创建您的numpy.数组解决你的问题。你知道吗
请参阅此处的常规文档:Python docs - copy,或此处Numpy docs - copy
希望这有帮助!你知道吗
编辑:
运行代码时,numpy数组中出现了一个元素分配问题,因为它们被初始化为整数零:
将此更改为(分别用于wold):
应该允许
正确插入值。你知道吗
相关问题 更多 >
编程相关推荐