📄 wavelet.c
字号:
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
//分解重构系数
#define ALPHA -1.586134342
#define BELTA -0.05298011854
#define GAMMA 0.8829110762
#define DELTA 0.4435068522
#define K 1.230174105
void main()
{
double data[20];
int Datalen = 20;
int c;
int mid = (Datalen+1)/2;
double odd[10],even[10]; // 分解的奇分量和偶分量
for(c=0;c<Datalen;c++) //待分解的数
{
data[c] = c;
}
printf("原始数据\n"); //产生小波的原始数据
for(c=0;c<mid;c++)
{
even[c]=data[c*2]; //分裂的偶分量
odd[c]=data[c*2+1]; //分裂的奇分量
printf("%f\t%f\n",even[c],odd[c]); //输出待分解的数
}
//分解////////////////////////////////////////
for(c=0;c<mid-1;c++) //预测
{
odd[c]+=ALPHA*(even[c]+even[c+1]);
}
odd[mid-1]+=ALPHA*(even[mid-1])*2;
even[0]+=BELTA*(odd[0])*2; //更新
for(c=1;c<mid;c++)
{
even[c]+=BELTA*(odd[c-1]+odd[c]);
}
for(c=0;c<mid-1;c++) //预测
{
odd[c]+=GAMMA*(even[c]+even[c+1]);
}
odd[mid-1]+=GAMMA*(even[mid-1])*2;
even[0]+=DELTA*(odd[0])*2; //更新
for(c=1;c<mid;c++)
{
even[c]+=DELTA*(odd[c-1]+odd[c]);
}
printf("小波分解结果\n"); //输出结果
for(c=0;c<mid;c++)
{
even[c]=even[c]/K;
odd[c]=odd[c]*K;
printf("%f\t%f\n",even[c],odd[c]);
}
//重构//////////////////////////////////////
for(c=0;c<mid;c++)
{
even[c]=even[c]*K;
odd[c]=odd[c]/K;
}
even[0]+=DELTA*(odd[0])*2; //反更新
for(c=1;c<mid;c++)
{
even[c]+=DELTA*(odd[c-1]+odd[c]);
}
for(c=0;c<mid-1;c++) //反预测
{
odd[c]+=GAMMA*(even[c]+even[c+1]);
}
odd[mid-1]+=GAMMA*(even[mid-1])*2;
even[0]+=BELTA*(odd[0])*2; //反更新
for(c=1;c<mid;c++)
{
even[c]+=BELTA*(odd[c-1]+odd[c]);
}
for(c=0;c<mid-1;c++) //反预测
{
odd[c]+=ALPHA*(even[c]+even[c+1]);
}
odd[mid-1]+=ALPHA*(even[mid-1])*2;
printf("重构结果\n"); //输出结果
for(c=0;c<mid;c++)
{
printf("%f\t%f\n",even[c],0-odd[c]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -