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

📄 fft.cpp

📁 傅立叶变换用于周期性数据压缩的程序。包括傅立叶变换以及压缩处理的程序。
💻 CPP
字号:
// FFT.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "FFT.h"

int main(int argc, char* argv[])
{
	//变量定义
	float data[1024];
	float RealOut[1024];
	float ImagOut[1024];
	float datare[1024];
	float temp[1024];
	//读取数据
	FILE *in;
	if((in = fopen("data.txt", "rt"))==NULL)
	{
  		printf("Error read file \"data.txt\"\n");
		exit(1);
	}
	for(int i=0;i<1024;i++)
	{
		if(fscanf(in, "%f\n", &data[i]))
		{
  			;
		}
		else
		{
  			fprintf(stderr, "Error reading an float from file.\n");
			exit(1);
		}
		temp[i]=0;
	}
	fclose(in);
	//付立叶变换
	FFT (1024,0,data,NULL,RealOut,ImagOut);
	//压缩处理
	double re[50];
	double im[50];
	int pos[50];
	double tem;
	re[0]=RealOut[0];
	im[0]=ImagOut[0];
	tem=sqrt(powf(RealOut[0],2.0)+powf(ImagOut[0],2.0));
	for(int index=0;index<50;index++)
	{
		for(i=1;i<1024;i++)
		{
			if(tem<sqrt(powf(RealOut[i],2.0)+powf(ImagOut[i],2.0)))
			{
				tem=sqrt(powf(RealOut[i],2.0)+powf(ImagOut[i],2.0));
				re[index]=RealOut[i];
				im[index]=ImagOut[i];
				pos[index]=i;
			}
		}
		RealOut[pos[index]]=0;
		ImagOut[pos[index]]=0;
		tem=sqrt(powf(RealOut[0],2.0)+powf(ImagOut[0],2.0));
	}
	//解压缩处理
	for(i=0;i<1024;i++)
	{
		RealOut[i]=0.0;
		ImagOut[i]=0.0;
	}
	for(i=0;i<50;i++)
	{
		RealOut[pos[i]]=re[i];
		ImagOut[pos[i]]=im[i];
	}
	//付立叶逆变换
	FFT (1024,1,RealOut,ImagOut,datare,temp);
	if((in = fopen("result.txt", "wr"))==NULL)
	{
  		exit(1);
	}
	for(i=0;i<1024;i++)
	{
		fprintf(in,"%E\t\t%E\t\t%E\t\t%E\t\t%E\n",data[i],datare[i],datare[i]-data[i],RealOut[i],ImagOut[i]);
	}
	fclose(in);
	return 0;
}

⌨️ 快捷键说明

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