MATLAB实现FFT
来源:互联网 发布:监控工程预算软件 编辑:程序博客网 时间:2024/06/05 19:41
信号的频率分析
利用MATLAB编程,即可实现上述的运算,程序如下:
得到结果:
可见FFT跟DFT并没有本质上的区别,基于这一点,上面先介绍DFT,后面再在DFT基础之上介绍实现FFT的编程运算。
给定一个序列,画出其DTFT之后的结果(蓝线)以及DFT之后的结果(红线),这就验证了DTFT到DFT的转化原理,即时间序列确定的情况下,其频率特性已经确定,即DTFT曲线,对其做不同点数的DFT,只是在频率曲线上进行不同程度的采样,并不改变原来的频率特性。有了这样的理论基础,我们就可以解决上面提到的那个问题,即如果序列的长度并不是2的整次幂,我们可以在序列的后面补零,序列的零值不会增加新的信息,同时可以实现FFT运算。
1.3 FFT实现
实现快速傅里叶变换的途径有两条:
1) 按时间抽取的FFT。原理是把序列按奇偶划分,实现FFT运算。
2) 按频率抽取的FFT。原理是把序列按长度从中间划分,实现FFT运算。
按时间抽取的FFT:
这样的关系,可以借助蝶形图进行表示:
这样就实现了一级的快速运算,如果划分之后的信号,依旧满足奇偶划分,就可以在这样的基础上,再次简化运算,原理就不再一一列出。以8点为例,最简型的DFT对应的蝶形图如下:
观察最左边的数据,排列的顺序存在这样的规律:
以x(6)对应X(3)为例,在二进制编码中,3=011,而6=110;即二者反序。对应图标的形式为:
有了这样的规律,便可编程实现:
1) 对于一个M位长的二进制码,每次在个位上加一,得到对应的反序码;
2) 将得到的反序码转化为十进制的数字,并以此为下标,将原来的数据放到该下标下。
给定一个长度为8的序列:
即:
基于上面一系列的分析,即可对数据实现FFT处理。
实验验证,该FFT程序有效。
1.4 级联FFT
FFT无疑提高了数据频域分析的速度,但对于一个非常长的序列,直接进行运算既占内存,又影响速度,所以通常可以把一个长的序列分段,拼成一个二维数据,分段内、段间分别处理,级联FFT的原理就不再细细介绍,只说一下简单流程:
结果:
可见,几种FFT变换都可以实现数据的频域变换。
- Matlab实现FFT变换
- Matlab实现FFT变换
- MATLAB实现FFT
- MATLAB实现的FFT函数
- FFT算法MATLAB实现与测试
- Matlab下FFT和IFFT的实现
- 实验二:FFT算法的MATLAB实现
- FFT的原理及matlab实现
- (转)Matlab编程实现FFT实践及频谱分析
- FFT快速傅立叶变换-Matlab和c语言实现
- matlab2c使用c++实现matlab函数系列教程-fft函数
- FFT倒序算法—雷德Rader算法及matlab实现
- FFT的matlab程序
- FFT的matlab程序
- MATLAB中FFT使用方法
- Matlab FFT 测试
- matlab fft 幅度,相位
- Matlab FFT实验
- 2011华为编程大赛第二道题
- Tomcat7.0.40 基于DataSourceRealm的和JDBCRealm的资源用户访问控制
- 【define宏定义和const常量定义之间的区别】
- socket.error C2011: “sockaddr”: “struct”类型重定义
- 数据库学习
- MATLAB实现FFT
- iOS:[译]Xcode Concepts--概念Target、Project、Build Setting、Workspace、Scheme
- 【linux驱动分析】之dm9000驱动分析(三):sk_buff结构分析
- 使用信号量和关键区来实现生产者消费者
- JDK中rt.jar、tools.jar和dt.jar作用
- unix socket 的缓冲区大小
- [ZK] messagebox 弹出对话框判断点击按钮
- IOS编程教程(五)自定义UITableView的表单元格
- Cent OS 5.4 rsync+inotify配置触发式(实时)远程同步