根据课本上分析的DIT和DIF的步骤以及特点,写了两个DIF和DIT的基2fft算法。

DIT和DIF,为了方便编程,对于前者将输入按倒位序重新排列,输出几位自然顺序排列;后者的话,输入为自然顺序,输出为倒位序。

难点就是倒位序的算法,以及FFT的循环算法。

下面是最简单的序列长度为2的整数幂

1.倒位序算法,两者都是通用的。

(1)折断一半再拼上,再折断一半再拼上,知道列向量变成行向量

这就反应了倒位序的实质。

我只能想到用循环:

x=[1:8]';
L=length(x);
for i=1:1:log2(L)L=L/2;y=mat2cell(x,[L,L]);y=reshape(y,1,2);x=cell2mat(y);
end

询问了大牛,不用循环,直接用matlab的函数有:

第一种方法:

N = 3;
a = (1:8)';
y = permute(reshape(a,2*ones(1,N)),N:-1:1);
y(:).'

第二种方法:

N=4;
p(1:2^N,N:-1:1)=dec2bin(0:(2^N-1));
re=bin2dec(char(p))+1;
re
 

第二种方法就是说,每一次折断一半再拼上,就想等于下标数循环右移

即000=>000,001=>100,010=>010,011=>101....类似这样。



(2)至于循环,就是利用相互之间的关系。

p与第几级与k之间的关系,书上说,考虑到硬件的设备成本问题,发现每一级每两个相互乘积求和的下标与其他两者无关,故不需要在引进其他的硬件设备。

x(k)=x(k)+x(k+b)e^(-j*2*π/N*p);

x(k+b)=x(k)-x(k+b)e^(-j*2*π/N*p);

在编程的时候注意x(k)需要重新赋给其他字母,不然会引起混淆错误,即

mid=x(k)

x(k)=mid+x(k+b)e^(-j*2*π/N*p);

x(k+b)=mid-x(k+b)e^(-j*2*π/N*p)

上述三句语句就是核心,其他的循环无非就是找各种k,p,n等等参数的关系!

(3)最后强调下,一直调了好久的问题,复数和实数的转置(复数转置不可用x‘,一定要用x.')切记!

DIT和DIF的基2FFT算法相关推荐

  1. 基2FFT算法matlab程序编写,频率抽取(DIF)基2FFT算法的MATLAB实现

    频率抽取(DIF)基2FFT算法和时间抽取(DIT)基2FFT算法是两种等价的FFT算法,其相同之处: (1)DIF与DIT两种算法均为原位运算. (2)DIF与DIT运算量相同. 不同之处: (1) ...

  2. 第四章 快速傅里叶变换之三 按频率抽选的基-2FFT算法

    三 .按频率抽选的基-2FFT算法 1.算法原理 设序列点数N=2L,L为整数.将X(k)按k的奇偶分组前,先将输入x(n)按n的顺序分成前后两半: 2.算法特点 3.DIT与DIF的异同

  3. 基2FFT算法matlab程序编写,按时间抽取的基2FFT算法分析及MATLAB实现

    按时间抽取的基2FFT 算法分析及MATLAB 实现 1 DIT-FFT 算法的基本原理 有限长序列x (n )的N 点DFT 定义为:∑-==10 )()(N n n k N W n x k X , ...

  4. matlab中xtem,快速傅里叶变换_蝶形运算_按频率抽取基2-fft算法_MATLAB代码

    function y=MyFFT_FB(x,n) %MYFFT_TB:My Fast Fourier Transform Frequency Based %按频率抽取基2-fft算法 %input: ...

  5. 快速傅里叶变换的基2FFT算法的C++实现

    [转自 http://hi.baidu.com/kxw102/blog/item/8672eaeddf54532e279791a4.html] 快速傅里叶变换的基2FFT算法的C++实现 2011-0 ...

  6. 基2FFT的matlab实现

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.基2 FFT 二.使用步骤 1.分解 2.旋转因子 代码 前言 提示:这里可以添加本文要记录的大概内容: 在学习各 ...

  7. c语言编程实现基2-fft,时间抽选基2FFT及IFFT算法C语言实现

    /*时间抽选基2FFT及IFFT算法C语言实现*/ /*Author :Junyi Sun*/ /*Copyright 2004-2005*/ /*Mail:ccnusjy@yahoo.com.cn* ...

  8. c代码实现 ifft运算_月光软件站 - 编程文档 - 其他语言 - 时间抽选基2FFT及IFFT算法C语言实现...

    正在学数字信号处理,感觉上学期信号与系统学得不扎实,因为当时只是死记公式,这学期数信老师提倡动手实践,觉得自己在编程中对公式理解得更加深刻了. 以下是我写的FFT,欢迎指教. /*时间抽选基2FFT及 ...

  9. DIT和DIF实现快速傅里叶变换的FFT

    DIT和DIF实现快速傅里叶变换的FFT 数字信号处理课程老师要求做的一个小程序,在此分享~ %***************基2的DIF&DIT-FFT算法***************** ...

最新文章

  1. Cordova打包教程知识体系整理(Vue项目打包成ipa)
  2. Solr建立索引时,过滤HTML标签
  3. Map端的聚合操作Combiner
  4. 清晰版 构建最高可用oracle数据库系统.pdf,构建最高可用Oracle数据库系统
  5. html怎么用chrome测试,通过chrome调试器测试了解浏览器解析和渲染HTML的过程
  6. Java基础知识——Java集合详解
  7. 声明式和命令式编程_命令式与声明式编程
  8. es6 Promise 的应用
  9. python color属性_模块“cv2.cv2”没有“COLOR”属性“BGR2GREY”
  10. mysql 字符串有有乱码 转码_mysql字符转化以及乱码原因
  11. 2022道路运输企业安全生产管理人员考试模拟100题及在线模拟考试
  12. java-php-python-ssm制药企业人力资源管理系统计算机毕业设计
  13. IOS学习之Segue
  14. CentOS8 离线安装 汉语拼音
  15. 计算机试图启动宏,打开电子表格时,将提示禁用或启用宏的解决方案
  16. bittorrent+sync+java_使用BitTorrent-Sync实现双机文件双向同步
  17. 为什么Word文档无响应,Word文档无响应的解决方法
  18. soho新工作 新娘秘書
  19. CE-扫描扫雷中雷区地址
  20. Python Tricks : Function Argument Unpacking

热门文章

  1. java 重写函数_JAVA函数的重载和重写
  2. python将英文单词表示的数字转换成阿拉伯数字的代码
  3. 一个简单的swap交换函数
  4. 单片机百科知识点---杂七杂八系列
  5. RK3188 5.1平台PCM2708 USB声卡调试
  6. Entity Framework优缺点及使用方法总结
  7. git push 失败,提示:error: RPC failed; HTTP 411 curl 22 The requested URL returned error: 411
  8. [生存志] 第141节 秦魏风俗掌故
  9. kindeditor图片上传 jsp版
  10. opencv java 车牌定位_用opencv实现在图像找到车牌号并检测出车牌号