#include
#include
#include
#include
#define LENGTH 4096//信号长度
#define DB_LENGTH 8 //Daubechies小波基紧支集长度
/******************************************************************
* 一维卷积函数
*
* 说明: 循环卷积,卷积结果的长度与输入信号的长度相同
*
* 输入参数: data[],输入信号; core[],卷积核; cov[],卷积结果;
* n,输入信号长度; m,卷积核长度.
*
* 李承宇, lichengyu2345@126.com
*
* 2010-08-18
******************************************************************/
/*void Covlution(double data[], double core[], 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;
}
//前m/2+1行
i = 0;
for(j = 0; j < m/2; j++, i++)
{
for(k = m/2-j; k < m; k++ )
{
cov[i] += data[k-(m/2-j)] * core[k];//k针对core[k]
}
for(k = n-m/2+j; k < n; k++ )
{
cov[i] += data[k] * core[k-(n-m/2+j)];//k针对data[k]
}
}
//中间的n-m行
for( i = m/2; i <= (n-m)+m/2; i++)
{
for( j = 0; j < m; j++)
{
cov[i] += data[i-m/2+j] * core[j];
}
}
//最后m/2-1行
i = (n - m) + m/2 + 1;
for(j = 1; j < m/2; j++, i++)
{
for(k = 0; k < j; k++)
{
cov[i] += data[k] * core[m-j-k];//k针对data[k]
}
for(k = 0; k < m-j; k++)
{
cov[i] += core[k] * data[n-(m-j)+k];//k针对core[k]
}
}
}
*/
//定义一个线性卷积
void Covlution(double data[], double core[], double cov[], int n, int m)
{
int i = 0;
int j = 0;
int t = 0;
//将cov[]清零
for(j = 0; j < n+m-1; j++)
{
cov[j] = 0;
}
for(j=0;j
{
if(j<=m-1) //前面m行
{
for(i=0,t=j;t>=0;i++,t--)
cov[j]+=data[i]*core[t];
}
else if(j<=n-1) //中间n-m行
{
for(i=j-m+1,t=m-1;t>=0;i++,t--)
cov[j]+=data[i]*core[t];
}
else //后面m行
{
for(i=j-m+1,t=m-1;i
cov[j]+=data[i]*core[t];
}
}
}
/******************************************************************
* 一维小波变换函数
*
* 说明: 一维小波变换,只变换一次
*
* 输入参数: input[],输入信号; output[],小波变换结果,包括尺度系数和
* 小波系数两部分; temp[],存放中间结果;h[],Daubechies小波基低通滤波器系数;
* g[],Daubech