1、下面为FFT.CPP文件:/ FFT.cpp : 定义控制台应用程序的入口点。#include stdafx.h#include complexbitsetvectorconio.hstringfstream using namespace std;bool inputData(unsigned long &, vectorcomplex &); /手工输入数据void FFT(unsigned long & /FFT变换void display(unsigned long & /显示结果bool readDataFromFile(unsigned long & /从文件中读取数据bool s
2、aveResultToFile(unsigned long & /保存结果至文件中const double PI = 3.1415926;int _tmain(int argc, _TCHAR* argv) vector vecList; /有限长序列 unsigned long ulN = 0; /N char chChoose = ; /功能选择 /功能循环 while(chChoose != Q & chChoose !q) /显示选择项 cout nPlease chose a function endl;t1.Input data manually, press M:t2.Read
3、data from file, press Ft3.Quit, press Please chose: /输入选择 chChoose = getch(); /判断 switch(chChoose) case m if(inputData(ulN, vecList) FFT(ulN, vecList); display(ulN, vecList); saveResultToFile(ulN, vecList); break;f /从文档读取数据 if(readDataFromFile(ulN, vecList) return 0;bool Is2Power(unsigned long ul) /
4、判断是否是2的整数次幂 if(ul 1 ) if( ul % 2 ) ul /= 2; return true; ulN, vector vecList) /题目 coutulN; if(!Is2Power(ulN) /验证N的有效性N is invalid (N must like 2, 4, 8, .), please retry. /输入各元素 vecList.clear(); /清空原有序列 complex c; for(unsigned long i = 0; i vecList.push_back(c); vecList) /从文件中读取数据nnn=Read Data From F
5、ile= /输入文件名 string strfilename;Input filename: ; strfilename; /打开文件open file strfilename cant get NN = ulN /读取元素t get enough infomationx() = c /关闭文件 loadfile.close(); vecList) /保存结果至文件中 /询问是否需要将结果保存至文件Do you want to save the result to file? (y/n): chChoose = _getch(); if(chChoose !yYnInput file name
6、:Save result to file . ofstream savefile(strfilename.c_str();savefile)t open file /写入N savefile /写入元素 for(vectoriterator i = vecList.begin(); vecList.end(); *i 0) ulPower+; ulN1 /= 2; /反序 bitset bsIndex; /二进制容器 unsigned long ulIndex; /反转后的序号 unsigned long ulK; for(unsigned long p = 0; p p+) ulIndex
7、= 0; ulK = 1; bsIndex = bitset(p); for(unsigned long j = 0; j p) c = vecListp; vecListp = vecListulIndex; vecListulIndex = c; /计算旋转因子 vecW; ulN / 2; vecW.push_back(complex(cos(2 * i * PI / ulN) , -1 * sin(2 * i * PI / ulN); for(unsigned long m = 0; m m+)nvW= vecWm; /计算FFT unsigned long ulGroupLength
8、 = 1; /段的长度 unsigned long ulHalfLength = 0; /段长度的一半 unsigned long ulGroupCount = 0; /段的数量 cw; /WH(x) c1; /G(x) + WH(x) c2; /G(x) - WH(x) for(unsigned long b = 0; b b+) ulHalfLength = ulGroupLength; ulGroupLength *= 2; j += ulGroupLength) for(unsigned long k = 0; k ulHalfLength; k+) cw = vecWk * ulN
9、/ ulGroupLength * vecListj + k + ulHalfLength; c1 = vecListj + k + cw; c2 = vecListj + k - cw; vecListj + k = c1; vecListj + k + ulHalfLength = c2;nn=Display The Result= for(unsigned long d = 0; d d+)X()ttt = vecListd / TODO: 在此处引用程序要求的附加头文件下面为STDAFX.CPP文件:/ stdafx.cpp : 只包括标准包含文件的源文件/ FFT.pch 将成为预编译头/ stdafx.obj 将包含预编译类型信息 在 STDAFX.H 中/引用任何所需的附加头文件,而不是在此文件中引用
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1