版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/实验用的头文件 MYFFT.H /作用:为帮助小虎子做实验,这个头文件提供了完整的一维与二维FFT算法,我想应改是够你折腾了吧! #include / complex using namespace std; typedef complex Comp; / 复数类型定义 const float _2PI_ = 2.0f * 3.14159265f; / 常数2PI定义 const int MAX_N = 256; / 最大DFT点数 /*-*-*-*-*-*-*-*-*-*-*-*-* FFT算法模块接口定义 *-*-*-*-*-*-*-*-*-*-*-*-*/ / / Function n
2、ame : BitReverse / Description : 二进制倒序操作 / Return type : int / Argument : int src 待倒读的数 / Argument : int size 二进制位数 int BitReverse(int src, int size) int tmp = src; int des = 0; for (int i=size-1; i=0; i-) des = (tmp & 0x1) 1; return des; / / Function name : Reorder / Description : 数据二进制整序 / Return
3、type : void / Argument : Comp xMAX_N 待整序数组 / Argument : int N FFT点数 / Argument : int M 点数的2的幂次 void Reorder(Comp xMAX_N, int N, int M) Comp new_xMAX_N; for (int i=0; iN; i+) new_x = xBitReverse(i, M); / 重新存入原数据中(已经是二进制整序过了的数据) for (i=0; iN; i+) x = new_x; / / Function name : CalcW / Description : 计算
4、旋转因子 / Return type : void / Argument : Comp WMAX_N 存放因子的数组 / Argument : int N FFT的点数 / Argument : int flag 正逆变换标记 void CalcW(Comp WMAX_N, int N, int flag) for (int i=0; iN/2; i+) if (flag = 1) W = exp(Comp(0, -_2PI_ * i / N); / 正FFT变换 else W = exp(Comp(0, _2PI_ * i / N); / 逆FFT变换 / / Function name :
5、 FFT_1D_Kernel / Description : FFT算法核心 / Return type : void / Argument : Comp* x 数据 / Argument : int M 幂次 / Argument : int flag 正逆变换标记 以下本应由自己完成。 void FFT_1D(Comp* x, int M, int flag) int N = (1 M); / 二进制整序 Reorder(x, N, M); / 旋转因子计算 Comp WMAX_N; CalcW(W, N, flag); / 级内群数 int GroupNum = N/2; / 第一级的群
6、数为N/2 / 群内蝶形单元数 int CellNum = 1; / 第一级的群内蝶形单元数为1 / 处理各级 for (int i=0; iM; i+) / 处理各群 for (int j=0; jGroupNum; j+) / 处理各蝶形单元 for (int k=0; k= 1; / 级别增加, 则相应的群数减少一半 CellNum = 1; / 级别增加, 则相应的群内单元数增加一倍 / 如果是IFFT,各元素还要再除以N if (flag != 1) for (i=0; iN; i+) x /= N; / / Function name : FFT_2D_Kernel / Descr
7、iption : 2D FFT核心算法 / Return type : void / Argument : Comp xMAX_NMAX_N 二维数据 / Argument : int M 幂次 / Argument : int flag 正逆变换标记 以下本应由自己完成。 void FFT_2D(Comp xMAX_NMAX_N, int M, int flag) int N = (1 M); / 先逐行进行 1D-FFT for (int i=0; iN; i+) FFT_1D(x, M, flag); / - 计算结果再存入矩阵x中 / 再逐列进行 1D-FFT Comp colMAX_
8、N; for (int j=0; jN; j+) / 取得第j列的数据 for (int i=0; iN; i+) col = xj; / 对第j列数据进行 1D-FFT FFT_1D(col, M, flag); / - 计算结果在数组col中 / 将结果放回矩阵第j列中 for (i=0; iN; i+) xj = col; / 0),实质上k是n个采样数据可以分解为偶次幂和奇次幂的次数/ pr: l=0时,存放N点采样数据的实部/ l=1时, 存放傅立叶变换的N个实部/ pi: l=0时,存放N点采样数据的虚部 / l=1时, 存放傅立叶变换的N个虚部/ 出口参数:/ fr: l=0,
9、返回傅立叶变换的实部/ l=1, 返回逆傅立叶变换的实部/ fi: l=0, 返回傅立叶变换的虚部/ l=1, 返回逆傅立叶变换的虚部/ pr: il = 1,i = 0 时,返回傅立叶变换的模/ il = 1,i = 1 时,返回逆傅立叶变换的模/ pi: il = 1,i = 0 时,返回傅立叶变换的辐角/ il = 1,i = 1 时,返回逆傅立叶变换的辐角/ data: 2005.8.15,Mend Xin Dongvoid kkfft(double pr, double pi, int n, int k, double fr, double fi, int l, int il)int
10、 it,m,is,i,j,nv,l0;double p,q,s,vr,vi,poddr,poddi;for (it=0; it=n-1; it+) m = it; is = 0;for(i=0; i=k-1; i+) j = m/2; is = 2*is+(m-2*j); m = j;frit = pris; fiit = piis;/-pr0 = 1.0; pi0 = 0.0;p = 6.283185306/(1.0*n);pr1 = cos(p); pi1 = -sin(p);if (l!=0) pi1=-pi1;for (i=2; i=n-1; i+) p = pri-1*pr1; q
11、= pii-1*pi1;s = (pri-1+pii-1)*(pr1+pi1);pri = p-q; pii = s-p-q;for (it=0; it=0; l0-) m = m/2; nv = 2*nv;for(it=0; it=(m-1)*nv; it=it+nv)for (j=0; j=(nv/2)-1; j+) p = prm*j*frit+j+nv/2;q = pim*j*fiit+j+nv/2;s = prm*j+pim*j;s = s*(frit+j+nv/2+fiit+j+nv/2);poddr = p-q; poddi = s-p-q;frit+j+nv/2 = frit+
12、j-poddr;fiit+j+nv/2 = fiit+j-poddi;frit+j = frit+j+poddr;fiit+j = fiit+j+poddi;if(l!=0)for(i=0; i=n-1; i+) fri = fri/(1.0*n);fii = fii/(1.0*n);if(il!=0)for(i=0; i=n-1; i+) pri = sqrt(fri*fri+fii*fii);if(fabs(fri)0) pii = 90.0;else pii = -90.0;elsepii = atan(fii/fri)*360.0/6.283185306;return;/快速傅立叶变换
13、的源代码/-/ fft.cpp/ The implementation of the/ Fast Fourier Transform algorithm/ (c) Reliable Software, 1996/-#include fft.h#include recorder.h/ log (1) = 0, log(2) = 1, log(3) = 2, log(4) = 2 .#define PI (2.0 * asin(1.0)/ Points must be a power of 2Fft:Fft (int Points, long sampleRate): _Points (Point
14、s), _sampleRate (sampleRate)_aTape = new double _Points;#if 0/ 1 kHz calibration wavefor (int i = 0; i _Points; i+)_aTapei = 1600 * sin (2 * PI * 1000. * i / _sampleRate);#elsefor (int i = 0; i = 1;_logPoints+;_aBitRev = new int _Points;_X = new Complex_Points;_W = new Complex* _logPoints+1;/ Precom
15、pute complex exponentialsint _2_l = 2;for (int l = 1; l = _logPoints; l+)_Wl = new Complex _Points;for ( int i = 0; i _Points; i+ )double re = cos (2. * PI * i / _2_l);double im = -sin (2. * PI * i / _2_l);_Wli = Complex (re, im);_2_l *= 2;/ set up bit reverse mappingint rev = 0;int halfPoints = _Po
16、ints/2;for (i = 0; i = mask)rev -= mask; / turn off this bitmask = 1;rev += mask;_aBitRev _Points-1 = _Points-1;Fft:Fft()delete _aTape;delete _aBitRev;for (int l = 1; l _Points)return;/ make space for cSample samples at the end of tape/ shifting previous samples towards the beginningmemmove (_aTape,
17、 &_aTapecSample,(_Points - cSample) * sizeof(double);/ copy samples from iterator to tail end of tapeint iTail = _Points - cSample;for (int i = 0; i cSample; i+, iter.Advance()_aTape i + iTail = (double) iter.GetSample();/ Initialize the FFT bufferfor (i = 0; i _Points; i+)PutAt (i, _aTapei);/ 0 1 2 3 4 5 6 7/ level 1/ step 1 0/ increm 2 W/ j = 0 1/ level 2/ step 2/ increm 4 0/ j = 0 W 1/ j = 1 2 W/ level 3 2/ step 4/ increm 8 0/ j = 0 W 1/ j = 1 3 W 2/ j = 2 3 W 3/ j = 3 3 W/ 3/void Fft:Transform ()/ step = 2 (level-1)/ increm = 2 level;int step = 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026福建厦门工学院全球教师招聘备考题库含答案详解(达标题)
- 2026广东中山大学招聘网络与信息中心专业技术人员1人备考题库及答案详解(新)
- 2026广东广州医科大学校本部招聘3人备考题库(第二次编制)含答案详解(考试直接用)
- 2026浙江省劳务派遣招聘1人备考题库(派遣至浙江大学海洋学院科研助理)及答案详解1套
- 2026上半年广东茂名市高州市医疗保障事业管理中心选聘3人备考题库含答案详解(预热题)
- 2026恒丰银行济南分行社会招聘36人备考题库带答案详解
- 2026北京航空航天大学宇航学院聘用编科研财务助理F岗招聘1人备考题库及答案详解(名师系列)
- 2026内蒙古巴彦淖尔市临河区老年大学班主任储备人才招募备考题库含答案详解(基础题)
- 2026广西南宁市邕宁区中医医院招聘脑病科1人备考题库及答案详解1套
- 2026河南郑州汽车工程职业学院高层次人才招聘35人备考题库附答案详解(综合题)
- 医疗设备第三方维修与保养服务项目可行性研究报告
- 2025年广东九年级物理中考三轮冲刺之题型过关综合能力题 科普阅读题(含答案)
- (四调)武汉市2025届高中毕业生四月调研考试 历史试卷(含答案)
- 安装学生床合同范本
- 危急值报告制度考试题
- T-CSEE 0399-2023 水电站紧固件技术监督导则
- 高血压急症和亚急症
- 2025届中国长江电力股份限公司“三峡班”招聘易考易错模拟试题(共500题)试卷后附参考答案
- 多轴加工项目化教程课件 项目四 任务4-1 陀螺仪基体加工
- 《公共管理学》第六章 公共政策PPT
- 2022年河北雄安新区容西片区综合执法辅助人员招聘考试真题
评论
0/150
提交评论