1、题目:一维小波变换,可多次分解 2、原理:卷积核变为Daubechies正交小波基h[]和g[]的交替形式。增加了多次分解的功能。 3、代码: #include <stdio.h> #include <stdlib.h> #include <math.h> #define LENGTH 4096//信号长度 /***************************************************************** * 一维卷积函数 * * 说明: 循环卷积,卷积结果的长度与输入信号的长度相同 * * 输入参数: data[],输入信号; h[],Daubechies小波基低通滤波器系数; * g[],Daubechies小波基高通滤波器系数; cov[],卷积结果; * n,输入信号长度; m,卷积核长度. * * 李承宇, lichengyu2345@126.com * * 2010-08-22 *****************************************************************/ void Covlution(double data[], double h[], double g[], double cov[] , int n, int m) { int i = 0; int j = 0; int k = 0; //将cov[]清零 for(i = 0; i < n; i++) { cov[i] = 0; } //**************************************************** //奇数行用h[]进行卷积 //**************************************************** //前m/2+1行 i = 0; for(j = 0; j < m/2; j+=2, i+=2) { for(k = m/2-j; k < m; k++ ) { cov[i] += data[k-(m/2-j)] * h[k];//k针对core[k] } for(k = n-m/2+j; k < n; k++ ) { cov[i] += data[k] * h[k-(n-m/2+j)];//k针对data[k] } } //中间的n-m行 for( ; i <= (n-m)+m/2; i+=2) { for( j = 0; j < m; j++) { cov[i] += data[i-m/2+j] * h[j]; } } //最后m/2-1行 // i = ( (n - m) + m/2 + 1 )/2*2;//********** for(j = 1; j <= m/2; j+=2, i+=2) { for(k = 0; k < j; k++) { cov[i] += data[k] * h[m-j-k];//k针对data[k] } for(k =