本文主要是介绍impulse response 使用的踩坑 —— cconv,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在 impulse response 的使用中遇到了小小的问题,具体如图,第一行是原始信号,第二行是响应的信号,在通过将原始信号和相应信号分别转换到频域求得 transfer function 后,ifft 得到 impulse response。第三行是原始信号和 ir 进行卷积得到的结果,可以看到在信号最开始的阶段,有一个意料外的响应。:
这一段的代码如下:
% src: 原始信号
% resp: 响应的信号Ssrc = fft(src);
Sresp = fft(rest);
Stf = Ssrc./Sresp;
ir = ifft(Stf);z = conv(src,ir);
先说短的结论,把最后一条命令 conv
换为 cconv
即可。
和 Daniel 探讨后,问题出在 得到的 ir 上。
对于这个ir,是不能直接进行卷积的,而应该先做一个 circular shift ( ir = circshift(ir, Nshift)
, z = circshift(z, -Nshift)
)。让响应变得完整。
<
这篇关于impulse response 使用的踩坑 —— cconv的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!