在 impulse response 的使用中遇到了小小的问题,具体如图,第一行是原始信号,第二行是响应的信号,在通过将原始信号和相应信号分别转换到频域求得 transfer function 后,ifft 得到 impulse response。第三行是原始信号和 ir 进行卷积得到的结果,可以看到在信号最开始的阶段,有一个意料外的响应。:
这一段的代码如下:
1 | % src: 原始信号 |
先说短的结论,把最后一条命令 conv
换为 cconv
即可。
和 Daniel 探讨后,问题出在 得到的 ir 上。
对于这个ir,是不能直接进行卷积的,而应该先做一个 circular shift ( ir = circshift(ir, Nshift)
, z = circshift(z, -Nshift)
)。让响应变得完整。
这样得到的响应就没有前面恼人的部分了。然而。。。。又出现了另一个问题,响应的后半部分消失了。。。。。
最后就索性使用圆周卷积,结果完美。
1 | % src: 原始信号 |
看来,信号处理的基本功还是不太扎实啊。
圆周卷积与线性卷积的区别
Linear and Circular Convolution - MathWorks Documents
Circular/Linear Convolution 与 DFT - CSDN blog
频域相乘等于时域卷积仅适用于圆周卷积。
对于长度N与长度L的向量进行线性卷积,结果长度为N+L-1。
对于圆周卷积,两个向量长度应当相同,不同的话要进行补零。
将进酒
李白
君不见,黄河之水天上来,奔流到海不复回。
君不见,高堂明镜悲白发,朝如青丝暮成雪。
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。
烹羊宰牛且为乐,会须一饮三百杯。
岑夫子,丹丘生,将进酒,杯莫停。
与君歌一曲,请君为我倾耳听。
钟鼓馔玉不足贵,但愿长醉不复醒。
古来圣贤皆寂寞,惟有饮者留其名。
陈王昔时宴平乐,斗酒十千恣欢谑。
主人何为言少钱,径须沽取对君酌。
五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。