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

📄 dwt.cpp

📁 从.txt文件中读取数据
💻 CPP
字号:
#include<iostream.h>
#include <iomanip.h>
#include<math.h>
#include<fstream.h>
#include<stdlib.h>
void main()
{
//	int  key=0;				//选择DWT或Inverse DWT 
	int  i=0;				//扩充的数据源标号	
	int  N=512;
	int  key=0;
	double  source[512];
	double  result[512];
	double  mid[512];
	for(int s=0;s<512;s++)
		{result[s]=0;}
	 
	float  eggs[319]={0,0,0,0,2149,4627,4523,6030,2684,3373,446,133,17,56,58,0,6,25,30,0,0,548,461,1638,1524,2338,1473,3287,1367,617,936,112,91,0,0
					,0,1,47,8,0,77,598,6814,1537,1296,451,1863,2408,358,847,14,0,62,4,39,0,0,107,172,828,1216,2109,3460,2438,3234,1574,7445,2019,
					672,0,0,0,0,33,26,32,0,321,230,392,253,324,1369,1252,977,1336,1450,2520,3057,302,166,20,27,70,4,38,5,48,115,364,1034,1295,2383,
					2435,2535,1701,1601,580,460,363,0,106,80,0,303,755,536,802,688,1244,1662,5050,926,3011,1461,526,107,136,0,0,8,10,418,616,1319,
					396,1636,1249,975,813,699,1908,952,477,206,121,39,70,162,3,170,300,417,623,1061,1852,1766,2681,2577,2333,1383,5915,1241,38,108,
					10,2,65,128,6,71,336,343,991,1709,766,749,6267,3750,4393,1527,5520,756,1166,1294,206,253,233,1024,185,112,521,287,650,1254,1977,
					976,2880,2505,1394,2233,629,683,397,725,14,7,146,285,694,558,1221,901,1754,2066,1311,452,3092,3747,541,1606,884,675,1037,1804,
					765,733,981,581,311,1313,946,755,951,422,330,188,1643,1178,1861,1717,1031,2973,2225,1983,1745,1321,1942,433,2009,254,248,2511,
					2404,1652,2657,4169,2525,1907,1498,1197,3238,476,819,1094,1238,1167,2082,3168,1645,3892,4603,2717,2162,1998,3547,2825,4377,1189,
					1460,279,188,1190,450,2189,1276,2174,2737,2822,2460,1793,603,509,1194,2047,1601,631,1717,1560,2512,2617,4033,8103,7991,10546,5230,
					10857,3167,2164,1405,389,0,156,2,676,652,2622,763,2109};	//319,分析512个数据,2657是第256个数据  */

	
	
	
	
	
	
	for(;i<319;i++)			//只处理256个数据源
		{
			source[i]=eggs[i];
		}
	for(i=319;i<512;i++)
		{
			source[i]=0;
		}
	cout<<"请您选择是否DWT分析:1代表开始分析;2代表退出"<<endl;
	cin>>key;
	if(key==1)
	{
		cout<<"*************DWT压缩如下****************"<<endl;
		while(N/2>=1)
		{
			for(int j=0;j<N/2;j++)
			{
				result[j]=(source[2*j]+source[2*j+1])/sqrt(2);
			}
			for(int jj=0;jj<N/2;jj++)
			{
				result[jj+N/2]=(source[2*jj]-source[2*jj+1])/sqrt(2);
			}
			for(j=0;j<512;j++)
			{
				source[j]=result[j];
			}
			N=N/2;
		}
		for(int m=0;m<512;m++)
		{
			if(fabs(result[m])<1)
			{
				result[m]=0;
			}
			cout<<setw(9)<<result[m];

			if((m+1)%8==0&&m!=0)
					cout<<endl;
		}
		cout<<endl;//DWT分析

//		cout<<"Inverse DWT解压缩如下"<<endl;
		N=1;
		int n=0,nn=0,NN=1;//nn管mid的A;NN管result的D;
			source[n]=(result[n]+result[n+1])/sqrt(2);
			source[n+1]=(result[n]-result[n+1])/sqrt(2);
			N=2*N;
			NN=2*NN;
		do
		{
			for(n=0;n<N;n++)
			{
				mid[n]=source[n];//保存A
			}
			for(n=0;nn<N,n<2*N;n++)
			{
				source[n]=(mid[nn]+result[NN])/sqrt(2);
				source[n+1]=(mid[nn]-result[NN])/sqrt(2);
				nn++;
				n++;
				NN++;
			}
			N=2*N;
			nn=0;
		}while(N<=256);
/*性能估计*/
		
		double E=0;
		for(int e=0;e<512;e++)
		{
			if(e<319)
				E=E+(eggs[e]-source[e])*(eggs[e]-source[e]);
			else
				E=E+source[e]*source[e];
		}
		cout<<"性能估计均差E为:"<<E<<endl<<endl;
		
		cout<<"*********Inverse DWT解压缩如下:**********"<<endl;
/*数据解压缩后的处理和显示*/
		for(int ss=0;ss<512;ss++)
		{
			//if(fabs(source[ss])<0.5)	解压缩后处理的比较小的数据		
			//	source[ss]=0;

			cout<<setw(15)<<source[ss];

			if((ss+1)%5==0&&ss!=0)
					cout<<endl;
		}
		cout<<endl;

	}
	if(key==2)
	{cout<<"程序已退出"<<endl;}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -