📄 lift97.cpp
字号:
// LIFT53.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "lift97.h"
#define N 1024
#define Rate 0.2
#define Lev 5
int main(int argc, char* argv[])
{
//变量定义
float data[N];
float value[N];
int pos[N];
float threshold[Lev+1];
int index=0;
int i,j;
//读取数据
FILE *in;
if((in = fopen("data.txt", "rt"))==NULL)
{
printf("Error read file \"data.txt\"\n");
exit(1);
}
for(i=0;i<N;i++)
{
if(fscanf(in, "%f\n", &data[i]))
{
;
}
else
{
fprintf(stderr, "Error reading an float from file.\n");
exit(1);
}
}
fclose(in);
//小波变换
Lift97(data,N,Lev);
if((in = fopen("wavecoef.txt", "wr"))==NULL)
{
exit(1);
}
for(i=0;i<N;i++)
{
fprintf(in,"%f\n",data[i]);
}
fclose(in);
//压缩处理
for(i=0;i<Lev;i++)
{
threshold[i]=0;
}
for(i=0;i<Lev;i++)
{
for(j=(int)(N/pow(2,Lev-i));j<(int)(N/pow(2,Lev-1-i));j++)
{
if(threshold[i]<fabs(data[j]))
{
threshold[i]=fabs(data[j]);
}
}
threshold[i]=(1-Rate)*threshold[i];
for(j=(int)(N/pow(2,Lev-i));j<(int)(N/pow(2,Lev-1-i));j++)
{
if(fabs(data[j])>threshold[i])
{
value[index+int(N/pow(2,Lev))]=data[j];
pos[index+int(N/pow(2,Lev))]=j;
index++;
}
}
}
for(i=0;i<N/pow(2,Lev);i++)
{
value[i]=data[i];
pos[i]=i;
}
if((in = fopen("coefreseve.txt", "wr"))==NULL)
{
exit(1);
}
for(i=0;i<index+N/pow(2,Lev);i++)
{
fprintf(in,"%f\t%d\n",value[i],pos[i]);
}
fclose(in);
//解压缩处理
for(i=0;i<N;i++)
{
data[i]=0.0;
}
for(i=0;i<index+N/pow(2,Lev);i++)
{
data[pos[i]]=value[i];
}
ILift97(data,N,Lev);
if((in = fopen("datare.txt", "wr"))==NULL)
{
exit(1);
}
for(i=0;i<N;i++)
{
fprintf(in,"%f\n",data[i]);
}
fclose(in);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -