一 FFT的使用方法

在matlab中常用的FFT函数有以下几种方式:(详细的使用说明可以百度matlab官网中FFT函数的介绍)
X=FFT(x);
X=FFT(x,N);
x=IFFT(X);
x=IFFT(X,N)

二 下面直接使用案例对FFT函数进行介绍

案例一:x=1*sin(2*pi*15*t)+4*sin(2*pi*40*t)。采样频率fs=100Hz,分别绘制N=128、1024点幅频图。

解:fft本质上是在频域对某信号分析,其fft结果对应的频率即表示某信号的固有频率。案例一中的信号含有两个频率即15Hz和40Hz,其对应的幅值比例是1:4.下面对上述信号进行fft

fs=100;N=128;   %采样频率和数据点数
n=0:N-1;t=n/fs;   %时间序列
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号
y=fft(x,N);    %对信号进行快速Fourier变换
mag=abs(y);     %求得Fourier变换后的振幅
f=n*fs/N;    %频率序列figure(1)
subplot(2,2,1),plot(f,mag);   %绘出随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=128');grid on;subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=128');grid on;
%对信号采样数据为1024点的处理
fs=100;N=1024;n=0:N-1;t=n/fs;
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号
y=fft(x,N);   %对信号进行快速Fourier变换
mag=abs(y);   %求取Fourier变换的振幅
f=n*fs/N;subplot(2,2,3),plot(f,mag); %绘出随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=1024');grid on;subplot(2,2,4)
plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=1024');grid on;

上述代码运行结果是:

分析:fs=100Hz,则Nyquist频率为fs/2=50Hz。理论上,整个频谱图是以Nyquist频率为对称轴的。并且可以明显识别出信号中含有两种频率成分:15Hz和40Hz。

由此可以知道FFT变换数据的对称性。因此用FFT对信号做谱分析,只需考察0~Nyquist频率范围内的幅频特性。若没有给出采样频率和采样间隔,则分析通常对归一化频率0~1进行。

另外,振幅的大小与所用采样点数有关,采用128点和1024点的相同频率的振幅是有不同的表现值,但在同一幅图中,40Hz与15Hz振动幅值之比均为4:1,与真实振幅4:1是一致的。为了与真实振幅对应,需要将变换后结果乘以2除以N即可。

案例2:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t),fs=100Hz,绘制:
1.数据个数N=32,FFT所用的采样点数NFFT=32;
2.N=32,NFFT=128;
3.N=136,NFFT=128;
4.N=136,NFFT=512。

上述四种情况下fft代码如下:

fs=100; %采样频率
Ndata=32; %数据长度
N=32; %FFT的数据长度
n=0:Ndata-1;t=n/fs;   %数据对应的时间序列
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);   %时间域信号
y=fft(x,N);   %信号的Fourier变换
mag=abs(y);    %求取振幅
f=(0:N-1)*fs/N; %真实频率
subplot(2,2,1),plot(f(1:N/2),mag(1:N/2)*2/N); %绘出Nyquist频率之前的振幅
xlabel('频率/Hz');ylabel('振幅');
title('Ndata=32 Nfft=32');grid on;Ndata=32;   %数据个数
N=128;     %FFT采用的数据长度
n=0:Ndata-1;t=n/fs;   %时间序列
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);
y=fft(x,N);
mag=abs(y);
f=(0:N-1)*fs/N; %真实频率
subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)*2/N); %绘出Nyquist频率之前的振幅
xlabel('频率/Hz');ylabel('振幅');
title('Ndata=32 Nfft=128');grid on;Ndata=136;   %数据个数
N=128;     %FFT采用的数据个数
n=0:Ndata-1;t=n/fs; %时间序列
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);
y=fft(x,N);
mag=abs(y);
f=(0:N-1)*fs/N;   %真实频率
subplot(2,2,3),plot(f(1:N/2),mag(1:N/2)*2/N); %绘出Nyquist频率之前的振幅
xlabel('频率/Hz');ylabel('振幅');
title('Ndata=136 Nfft=128');grid on;Ndata=136;    %数据个数
N=512;    %FFT所用的数据个数
n=0:Ndata-1;t=n/fs; %时间序列
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);
y=fft(x,N);
mag=abs(y);
f=(0:N-1)*fs/N;   %真实频率
subplot(2,2,4),plot(f(1:N/2),mag(1:N/2)*2/N); %绘出Nyquist频率之前的振幅
xlabel('频率/Hz');ylabel('振幅');
title('Ndata=136 Nfft=512');grid on;

分析:
1.当数据个数和FFT采用的数据个数均为32时,频率分辨率较低,但没有由于添零而导致的其他频率成分。
2.由于在时间域内信号加零,致使振幅谱中出现很多其他成分,这是加零造成的。其振幅由于加了多个零而明显减小。
3.FFT程序将数据截断,这时分辨率较高。
4.也是在数据的末尾补零,但由于含有信号的数据个数足够多,FFT振幅谱也基本不受影响。
5.对信号进行频谱分析时,数据样本应有足够的长度,一般FFT程序中所用数据点数与原含有信号数据点数相同,这样的频谱图具有较高的质量,可减小因补零或截断而产生的影响

MATLAB中FFT的使用说明(含MATLAB代码)相关推荐

  1. Kalman滤波在船舶GPS导航定位系统中的应用(含MATLAB仿真)

    Kalman滤波在船舶GPS导航定位系统中的应用(含MATLAB仿真) 1.原理介绍 2.MATLAB仿真代码 Kalman滤波 计算欧氏距离 3.仿真结果 figure1 figure2 1.原理介 ...

  2. 关于matlab中princomp的使用说明讲解

    %% test for princomp(Principal Component Analysis) % 关于matlab中princomp的使用说明讲解小例子 by faruto % 能看懂本程序及 ...

  3. MATLAB中FFT的使用方法(频谱分析)

    原文地址:MATLAB中FFT的使用方法(频谱分析)作者:飞鸿 说明:以下资源来源于<数字信号处理的MATLAB实现>万永革主编 一.调用方法 X=FFT(x): X=FFT(x,N): ...

  4. Matlab中N是什么意思,MATLAB中y=FFT(X,N)中的N是什么意思

    matlab傅里叶变换中fft(x,n),x,n分别是什么含义? fft(x,n)是一维快速傅里叶变换,x相当于信号,n是变换点数.离散傅里叶变换DFT的快速算法就是FFT. matlab中FFT函数 ...

  5. matlab函数fftshift,matlab中fft算法_matlab中fftshift函数_matlab中fft函数的用法(2)

    plot([0 : PointNum/2 - 1], x1(1:PointNum/2)); grid on subplot(3,1,2); % [REX IMX] am = sqrt(abs(REX. ...

  6. matlab函数乘阶跃,MATLAB中FFT函数和点乘、乘、单位阶跃函数

    注意问题:1, 对于单位阶跃函数u(t-b)和Dirac函数delta(t-a),可以借用Maple函数库中的定义,他们分别是Heaviside(t-b),Dirca(t-a). 2,点乘和点除代表矩 ...

  7. 【音乐检索】基于matlab音乐检索系统【含Matlab源码 435期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[音乐检索]基于matlab音乐检索系统[含Matlab源码 435期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费专栏 ...

  8. 【图像去噪】基于matlab全变分算法图像去噪【含Matlab源码 626期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像去噪]基于matlab全变分算法图像去噪[含Matlab源码 626期] 获取代码方式2: 付费专栏Matlab图像处理(初级版) ...

  9. 【GA TSP】基于matlab遗传算法求解旅行商问题【含Matlab源码 1337期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab遗传算法求解旅行商问题[含Matlab源码 1337期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  10. 【指纹识别】基于matlab指纹图像细节特征提取 【含Matlab源码 227期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[指纹识别]基于matlab指纹图像细节特征提取 [含Matlab源码 227期] (https://download.csdn.net/d ...

最新文章

  1. php 安装rabbitmq拓展_【RabbitMQ】——centos7安装rabbitmq教程 以及 PHP开启rabbitmq扩展...
  2. 中断技术之中断的定义,中断服务程序的设计方法,中断处理的过程以及中断向量表的建立
  3. CVPR 2018 VITAL:《VITAL: VIsual Tracking via Adversarial Learning》论文笔记
  4. 【渝粤教育】国家开放大学2019年春季 1308外国文学专题 参考试题
  5. Android 工程师如何快速学会web前段
  6. geoserver三维_基于geoserver的伪三维地图制作
  7. 华为HPLC模组全拆解之电力载波收发原理分析
  8. ps切图教程 android,PS怎么切图 PS最新版本切图教程
  9. 分布式长连接 session 共享解决方案
  10. java 将月份、星期转换为英文
  11. Vue单页面应用性能优化实践
  12. 大学英语计算机统考怎么过,2011年9月大学英语B 统考 计算机网考样题
  13. Remix部署契约时出现错误:creation of Ballot errored: Error encoding arguments: Error: expected array value (ar
  14. 腾讯短视频SDK代码层面上录制功能的实现,短视频APP开发第一步
  15. python中stdin_通过python中的stdin发送输入子流程.popen
  16. 问题 A: Jugs BFS
  17. 解决Vmware下虚拟机下打开gazebo报错:VMware: vmw_ioctl_command error Invalid argument
  18. 《Word2vec》1 模型的引入介绍与相关概念
  19. 【一起入门NLP】中科院自然语言处理期末考试*总复习*:考前押题+考后题目回忆
  20. 神兽麒麟kylin驾驭指南

热门文章

  1. Android SDK怎么救砖,Android手机刷机变砖后无法开机的修复方法
  2. 2017百度之星程序设计大赛 - 资格赛 1003
  3. Unity 使用BmFont制作艺术字体
  4. 国税计算机基础知识,国税系统计算机基础知识培训课件精要.ppt
  5. 5分钟搞定!java免费源码网站
  6. wimdows11 eplan安装过程及遇到的问题
  7. 计算机代数与数论pdf,计算机代数及数论(maple).pdf
  8. ps2模拟器bios3dm_龙漫ps2模拟器最新版 - 模拟器综合讨论区 - 3DMGAME论坛 - Powered by Discuz!...
  9. 高级操作系统——XV6内存管理
  10. 量化指标公式源码_精选指标:五行八卦图-五行量化指标公式——附源码