⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lift97.cpp

📁 基于97提升小波变换的一维信号压缩程序。头文件中包括了提升小波变换的源程序。
💻 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 + -