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

📄 dft.cpp

📁 从.txt文件中读取数据
💻 CPP
字号:
#include<iostream.h>
#include <iomanip.h>
#include<stdio.h>
#include<complex>
#include<math.h>
#define	pi 3.1415927
using namespace std;
void main()
{
double	s[319];			//压缩实部
double	j[319];			//压缩虚部
double	ss[319];		//解压缩实部
double	jj[319];		//解压缩虚部
double  eggs[319];
for(int init=0;init<319;init++)
{
	s[init]=0;
	j[init]=0;
	ss[init]=0;
	jj[init]=0;
}
int		k=0;		//压缩时x对应的系数
//读入文件****************************88888888888
    double *F=new double[319];
	char *temp;
	int i=0;
	FILE  *f;   //定义文件指针f
	cout<<"准备读入原始数据..."<<endl;
	if((f=fopen("egg.txt","r"))==NULL) //以读方式打开egg.txt
	{
		cout<<"文件不能打开!"<<endl; //如果该文件不存在,则报错
	}
   	while (i<319)
	{
		temp=new char[5];
		fscanf(f,"%s",temp);
		if(temp[0]=='t')
			break;
		cout<<setw(5)<<temp<<" ";
		F[i]=atof(temp);
	if ((i+1)%12==0)
		{
			cout<<endl;
		}
		i++;
	
	}
	 cout<<endl<<"数据读入完毕";
	cout<<endl;
	fclose(f);//关闭文件
	for(i=0;i<319;i++)
	{
		eggs[i]=F[i];
	}





/*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};*/
cout<<"**************DFT压缩后的数据********************"<<endl;
	while(k<319)
{		
	for(int n=0;n<319;n++)
	{
		s[k]=s[k]+eggs[n]*cos(2*pi*n*k/319);
		j[k]=j[k]-eggs[n]*sin(2*pi*n*k/319);
	}
	k++;
}
	
	for( i=0;i<319;i++)
	{
		if(fabs(s[i])<500)
			{
				s[i]=0;
			}
		if(j[i]<0)
		{	
			cout<<setw(6)<<s[i]<<j[i]<<"j  ";
			if((i+1)%4==0&&i!=0)
				cout<<endl;
		}
		else
		{
			cout<<setw(6)<<s[i]<<"+"<<j[i]<<"j  ";
			if((i+1)%4==0&&i!=0)
				cout<<endl;
		}
	}
	cout<<endl;
	cout<<endl;
cout<<"*****************DFT解压缩后的数据*******************"<<endl;
/*	int		nn=0;		//解压缩时x对应的系数
	while(nn<319)
	{
		for(int kk=0;kk<319;kk++)
		{
			ss[nn]=ss[nn]+(s[kk]*cos(2*pi*nn*kk/319))/319;
			jj[nn]=jj[nn]+(j[kk]*sin(2*pi*nn*kk/319))/319;
		}
		//	ss[nn]=ss[nn]/319;
		//	jj[nn]=jj[nn]/319;
			cout<<setw(8)<<ss[nn]<<"  ";
			if((nn+1)%8==0&&nn!=0)
				cout<<endl;
			nn++;
*/

	complex <float>* source,cons(319,0);
	complex <float>* r;			//结果输出控制变量
	source = new complex<float>[319];
	r = new complex<float>[319];
	for(int com=0;com<319;com++)
	{
		source[com].real(s[com]);
		source[com].imag(j[com]);
	}
	for (int nn = 0; nn < 319; nn++)
	{
		complex <float> temp(0,0),a(0,0);
		float x = 0;
		for (int kk = 0;kk < 319; kk++)
		{
			x = (2*pi*nn*kk)/319;
			a.real( cos(x) );
			a.imag( sin(x) );
			temp += source[kk]*a;
		}
		r[nn] = temp/cons;
	}
	for(int c=0;c<319;c++)
	{
	
		cout<<r[c].real()<<" ";
	}
/*性能估计*/
	complex <float>  E(0,0);
	complex <float>* egg;
	egg = new complex<float>[319];
	for(int e=0;e<319;e++)
		{
			egg[e].real(eggs[e]);
			if(e<319)
				E.real(E.real()+(egg[e].real()-r[e].real())*(egg[e].real()-r[e].real()));
		}
	cout<<endl;
	cout<<endl;
	cout<<"性能估计均差E为:"<<E.real()<<endl;
/*	for(int c=0;c<319;c++)
	{
	
		cout<<r[c].real()<<" ";
	}*/
	cout<<endl; 
}

⌨️ 快捷键说明

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