MATLAB快速傅里叶变换(fft)函数详解
转载:https://blog.csdn.net/me4weizhen/article/details/53688848
定义:
The 'i' in the 'Nth root of unity' 是虚数单位
调用:
1. Y = fft(y);
2. Y = fft(y,N);
式中,y是序列,Y是序列的快速傅里叶变换。y可以是一向量或矩阵,若y为向量,则Y是y的FFT,并且与y具有相同的长度。若y为一矩阵,则Y是对矩阵的每一列向量进行FFT。
说明:
1. 函数fft返回值的数据结构具有对称性
根据采样定理,fft能分辨的最高频率为采样频率的一半(即Nyquist频率),函数fft返回值是以Nyqusit频率为轴对称的,Y的前一半与后一半是复数共轭关系。
2. 幅值
作FFT分析时,幅值大小与输入点数有关,要得到真实的幅值大小,只要将变换后的结果乘以2除以N即可(但此时零频—直流分量—的幅值为实际值的2倍)。对此的解释是:Y除以N得到双边谱,再乘以2得到单边谱(零频在双边谱中本没有被一分为二,而转化为单边谱过程中所有幅值均乘以2,所以零频被放大了)。
3. 基频
若分析数据时长为T,则分析结果的基频就是f0=1/T,分析结果的频率序列为[0:N-1]*f0
4. 执行N点FFT
在调用格式2中,函数执行N点FFT。若y为向量且长度小于N,则函数将y补零至长度N,若向量y的长度大于N,则函数截断y使之长度为N。
注意:
使用N点FFT时,若N大于向量y的长度,将给频谱分析结果带来变化,应该特别注意。
例子:
将对N点FFT进行举例,说明当N大于向量y的长度时给频谱分析带来的变化。
上图中,左列为信号时域图形,右列为对应信号的频谱图。可以看出当N大于向量y的长度时,由于fft自动将100s后的信号值补零,原信号实际变为左下角的时域图形,所以频率发生了变化(增加多种频率的小振幅振动,主峰幅值被削弱)。
结论:
使用N点FFT时,不应使N大于y向量的长度,否则将导致频谱失真。
例子程序:
clear all %清除内存所有变量
close all %关闭所有打开的图形窗口
%% 执行FFT点数与原信号长度相等(100点)
% 构建原信号
N=100; % 信号长度(变量@@@@@@@)
Fs=1; % 采样频率
dt=1/Fs; % 采样间隔
t=[0:N-1]*dt; % 时间序列
xn=cos(2*pi*0.24*[0:99])+cos(2*pi*0.26*[0:99]);
xn=[xn,zeros(1,N-100)]; % 原始信号的值序列
subplot(3,2,1) % 变量@@@@@@@
plot(t,xn) % 绘出原始信号
xlabel('时间/s'),title('原始信号(向量长度为100)') % 变量@@@@@@@
% FFT分析
NN=N; % 执行100点FFT
XN=fft(xn,NN)/NN; % 共轭复数,具有对称性
f0=1/(dt*NN); % 基频
f=[0:ceil((NN-1)/2)]*f0; % 频率序列
A=abs(XN); % 幅值序列
subplot(3,2,2),stem(f,2*A(1:ceil((NN-1)/2)+1)),xlabel('频率/Hz') % 绘制频谱(变量@@@@@@@)
axis([0 0.5 0 1.2]) % 调整坐标范围
title('执行点数等于信号长度(单边谱100执行点)'); % 变量@@@@@@@
%% 执行FFT点数大于原信号长度
% 构建原信号
N=100; % 信号长度(变量@@@@@@@)
Fs=1; % 采样频率
dt=1/Fs; % 采样间隔
t=[0:N-1]*dt; % 时间序列
xn=cos(2*pi*0.24*[0:99])+cos(2*pi*0.26*[0:99]);
xn=[xn,zeros(1,N-100)]; % 原始信号的值序列
subplot(3,2,3) % 变量@@@@@@@
plot(t,xn) % 绘出原始信号
xlabel('时间/s'),title('原始信号(向量长度为100)') % 变量@@@@@@@
% FFT分析
NN=120; % 执行120点FFT(变量@@@@@@@)
XN=fft(xn,NN)/NN; % 共轭复数,具有对称性
f0=1/(dt*NN); % 基频
f=[0:ceil((NN-1)/2)]*f0; % 频率序列
A=abs(XN); % 幅值序列
subplot(3,2,4),stem(f,2*A(1:ceil((NN-1)/2)+1)),xlabel('频率/Hz') % 绘制频谱(变量@@@@@@@)
axis([0 0.5 0 1.2]) % 调整坐标范围
title('执行点数大于信号长度(单边谱120执行点)'); % 变量@@@@@@@
%% 执行FFT点数与原信号长度相等(120点)
% 构建原信号
N=120; % 信号长度(变量@@@@@@@)
Fs=1; % 采样频率
dt=1/Fs; % 采样间隔
t=[0:N-1]*dt; % 时间序列
xn=cos(2*pi*0.24*[0:99])+cos(2*pi*0.26*[0:99]);
xn=[xn,zeros(1,N-100)]; % 原始信号的值序列
subplot(3,2,5) % 变量@@@@@@@
plot(t,xn) % 绘出原始信号
xlabel('时间/s'),title('原始信号(向量长度为120)') % 变量@@@@@@@
% FFT分析
NN=120; % 执行120点FFT(变量@@@@@@@)
XN=fft(xn,NN)/NN; % 共轭复数,具有对称性
f0=1/(dt*NN); % 基频
f=[0:ceil((NN-1)/2)]*f0; % 频率序列
A=abs(XN); % 幅值序列
subplot(3,2,6),stem(f,2*A(1:ceil((NN-1)/2)+1)),xlabel('频率/Hz') % 绘制频谱(变量@@@@@@@)
axis([0 0.5 0 1.2]) % 调整坐标范围
title('执行点数等于信号长度(单边谱120执行点)'); % 变量@@@@@@@
MATLAB快速傅里叶变换(fft)函数详解相关推荐
- Matlab中fft函数详解
FFT函数 Y = fft(x) 如果x是向量,则fft(x)返回该向量的傅里叶变换 如果x是矩阵,则fft(x)将x的各列视为向量,并返回每列的傅里叶变换. 如果x是一个多维数组,则 fft(X) ...
- MATLAB从入门到精通系列之MATLAB维度获取size()函数详解
1.预备知识 维度获取size()主要用获取矩阵维度,常用于获取一维向量的长度,二维矩阵的行.列维度,以及高维数组的维度,方便对矩阵进行相关运算. 打开MATLAB运行界面进行准备. 2.size() ...
- 一个简单的BP神经网络matlab程序(附函数详解)
说明:20180604更新 1.此文的程序来自博客:http://www.cnblogs.com/heaad/archive/2011/03/07/1976443.html 2.本人对其中涉及到的函数 ...
- matlab中的eps函数详解
最近开始使用matlab,在写代码过程中遇到了除数为0的情况,在分母位置加了eps就没有报错了,所以查了下eps函数的用法,在这里分享一下,也当作是自己的学习记录! 首先matlab中eps是一个函数 ...
- matlab中的ceil函数详解
函数说明 ceil函数的功能即向上取整 Y = ceil(X) 将 X 的每个元素变为大于或等于该元素的最接近整数. Y= ceil(t) 将 duration 数组 t 的每个元素变为大于或等于此元 ...
- 快速傅里叶变换(FFT)详解
快速傅里叶变换(FFT)详解 (这是我第一次写博,不喜勿喷...) 关于FFT已经听闻已久了,这次终于有机会在Function2的介绍下来了解一下FFT了. 快速傅里叶变换(Fast Fourier ...
- Matlab如何进行利用离散傅里叶变换DFT (快速傅里叶变换FFT)进行频谱分析
文章目录 1. 定义 2. 变换和处理 3. 函数 4. 实例演示 例1:单频正弦信号(整数周期采样) 例2:单频正弦信号(非整数周期采样) 例3:含有直流分量的单频正弦信号 例4:正弦复合信号 例5 ...
- matlab cftool光滑曲线导出为什么就不光滑了_快速傅里叶变换(FFT)中为什么要“补零”?...
为了大家能够复现各个图中的结果,我附上了所有我编写的MATLAB代码. 创作不易,未经允许,禁止转载. 另外,说明一下,用MATLAB做FFT并不要求数据点个数必须为以2为基数的整数次方.之所以很多资 ...
- Matlab快速傅里叶变换程序(FFT)编写
Matlab快速傅里叶变换程序(FFT)编写 (不利用Matlab内置fft) 最近在学习数字信号处理,正好到快速傅里叶变换,写一个基于基2FFT算法的傅里叶变换.利用原理:DIT-FFT(时域抽取法 ...
- MATLAB的iptcheckinput函数详解
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 iptcheckinput函数详解,这个函数在看 ...
最新文章
- PMBOK学习笔记二-项目管理过程
- 【正一专栏】欧冠四强猜想—不是冤家不聚首
- SlidingMenu实现侧滑
- OpenGL stencil test模板测试的实例
- 安装jdk步骤rpm_jenkins rpm包方式安装
- 如何open一个新tab页面
- c语言大型软件设计的面向对象_C语言跟C++的根本区别以及特点
- android播放html5视频,仅仅有声音没有图像视频
- java singletonlist_Java Collections singletonList()方法及示例
- http://ju.outofmemory.cn/entry/307891---------TICK
- Puppet基础篇5-如何建立master和agent之间的认证关系
- sass函数:@function
- java上传图片至阿里云oss服务器
- 【渝粤题库】广东开放大学 商务网站建设与维护 形成性考核
- 双路CPU笔记本计算机,什么是双路cpu cpu双路什么意思 - 云骑士一键重装系统
- 深入浅出mysql_深入浅出MySQL读书笔记(一)
- Hulu 2020年校招-算法题《Hulu杀》Python
- 做数据分析的36款常用工具!!!初学者必备,纯干货!!
- 2015061710 - 海豹突击队的忠告
- 丈人/丈母娘,岳父/岳母、妈/母亲/娘 的解释
热门文章
- qcc3020定制、qcc3020软件开发tws耳机的注意事项
- java计算机毕业设计大数据在线考试系统在线阅卷系统及大数据统计分析MyBatis+系统+LW文档+源码+调试部署
- 开源力量 Linux内核源码深度解析与开发实战
- 10款炫酷的html5动画特效附源码,10款炫酷的HTML5动画特效,附源码
- MATLAB希尔伯特Hilbert变换求包络谱
- scv文件单元格内存在换行符
- webService CXF框架
- 企业信息化建设的总体规划
- delphi android 2017,Delphi春天将来临,Android遇到XE7我也是醉了,Hello World
- Microchip PIC系列8位单片机入门教程(六)ADC