1、 题目:循环卷积
2、 代码:
3、 说明:
Delay有输入范围要求:
当Temi > 0时,要满足temp – DataLen < DataLen, 即 Temj(max)+ Temi(max) – DataLen < DataLen, 即 (Filter – 1) + (DataLen – 1 + Delay) – DataLen < DataLen, 所以有Delay < DataLen + 2 – FilterLen;
当Temi < 0 时,要满足 temp + DataLen >= 0, 即 Temj(min) + Temi(min) + DataLen >= 0, 即 0 + Delay + DataLen >= 0, 所以有 Delay >= - DataLen.
综上所述,Delay的取值范围是-DataLen <= Delay < DataLen+2-FilterLen.
如果Delay的值在上述范围之外,将取到lpData[-1]和lpData[DataLen]及之外的值,结果发生错误。
4、 改进:
使temp值(Temj + Temi)始终处于0到DataLen-1之间,采用如下方法:
temp = (Temj + Temi) - ( (Temj + Temi) / DataLen ) * DataLen;
if(temp < 0) temp = DataLen + temp;
改进的代码如下:
原代码出:《小波分析及其在图像处理中的应用》,陈武凡主编,科学出版社,2002年4月第一版,程序附录