Я пытаюсь применить простое разностное уравнение к массиву пустышек как часть алгоритма фильтрации. Проблема в том, что python переназначает числовые переменные внутри цикла for и, таким образом, возвращает список нулей. Как мне реструктурировать этот код так, чтобы он передавал пустые массивы по ссылке на цикл for?
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 как есть. Должен быть лучший, питонный способ написать это, я просто не могу решить это.