问题描述
我正在尝试编写自己的卷积函数来在处理 2 通道音频信号时替换 lfilter。我必须将过滤器状态从一个块传递到另一个块。
def convolution(h,x,N_taps,zi):
conv_out = np.zeros(len(x),dtype = 'complex_')
for i in range(len(x)):
for j in range(N_taps):
if j != N_taps-1: #have not reached the last one
conv_out[i] += zi[j]*h[N_taps-1-j]
if j < N_taps-2:
zi[j] = zi[j+1]
else: #last one
conv_out[i] += x[i]*h[N_taps-1-j]
zi[-1] = x[i]
return conv_out,zi
但是,运行上面的代码会出现以下错误。注意:当我没有为 conv_out 指定 dtype 时,它不会引发任何错误,但也听不到输出音频。
ComplexWarning: Casting complex values to real discards the imaginary part
filtered_data[position:position+block_size,0],z = convolution(firwin_coeff,audio_data[position:position+block_size,zi = z)
ValueError: Unexpected shape for zi: expected (9999,),found (50,).
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)