wavelet.c
来自「源程序是关于9/7小波的提升方案的c语言的实现」· C语言 代码 · 共 104 行
C
104 行
#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 + =
减小字号Ctrl + -
显示快捷键?