转自:

https://www.cnblogs.com/alexanderkun/p/4723577.html

https://blog.csdn.net/qq_36024066/article/details/89491650

一、FFT物理意义如下

二.调用方法

X=FFT(x);

X=FFT(x,N);

x=IFFT(X);

x=IFFT(X,N)

用MATLAB进行谱分析时注意:

(1)函数FFT返回值的数据结构具有对称性。

例:

N=8;

n=0:N-1;

xn=[4 3 2 6 7 8 9 0];

Xk=fft(xn)

Xk =

39.0000 -10.7782 + 6.2929i 0 - 5.0000i 4.7782 - 7.7071i 5.0000 4.7782 + 7.7071i 0 + 5.0000i -10.7782 - 6.2929i

Xk与xn的维数相同,共有8个元素。Xk的第一个数对应于直流分量,即频率值为0。

(2)做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。在IFFT时已经做了处理。要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。

三.FFT应用举例

- 例1:

x=0.5sin(2pi15t)+2sin(2pi40t)。采样频率fs=100Hz,分别绘制N=128、1024点幅频图。

clf;

fs=100;N=128; %采样频率和数据点数

n=0:N-1;t=n/fs; %时间序列

x=0.5sin(2pi15t)+2sin(2pi40t); %信号

y=fft(x,N); %对信号进行快速Fourier变换

mag=abs(y); %求得Fourier变换后的振幅

f=nfs/N; %频率序列

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.5sin(2pi15t)+2sin(2pi40t); %信号

y=fft(x,N); %对信号进行快速Fourier变换

mag=abs(y); %求取Fourier变换的振幅

f=nfs/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,与真实振幅0.5:2是一致的。为了与真实振幅对应,需要将变换后结果乘以2除以N。

例2:

x=0.5sin(2pi15t)+2sin(2pi40t),fs=100Hz,绘制:

(1)数据个数N=32,FFT所用的采样点数NFFT=32;

(2)N=32,NFFT=128;

(3)N=136,NFFT=128;

(4)N=136,NFFT=512。

clf;fs=100; %采样频率

Ndata=32; %数据长度

N=32; %FFT的数据长度

n=0:Ndata-1;t=n/fs; %数据对应的时间序列

x=0.5sin(2pi15t)+2sin(2pi40t); %时间域信号

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.5sin(2pi15t)+2sin(2pi40t);

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.5sin(2pi15t)+2sin(2pi40t);

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.5sin(2pi15t)+2sin(2pi40t);

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振幅谱也基本不受影响。

对信号进行频谱分析时,数据样本应有足够的长度,一般FFT程序中所用数据点数与原含有信号数据点数相同,这样的频谱图具有较高的质量,可减小因补零或截断而产生的影响。

例3:

x=cos(2pi0.24n)+cos(2pi0.26n)

(1)数据点过少,几乎无法看出有关信号频谱的详细信息;

(2)中间的图是将x(n)补90个零,幅度频谱的数据相当密,称为高密度频谱图。但从图中很难看出信号的频谱成分。

(3)信号的有效数据很长,可以清楚地看出信号的频率成分,一个是0.24Hz,一个是0.26Hz,称为高分辨率频谱。

可见,采样数据过少,运用FFT变换不能分辨出其中的频率成分。添加零后可增加频谱中的数据个数,谱的密度增高了,但仍不能分辨其中的频率成分,即谱的分辨率没有提高。只有数据点数足够多时才能分辨其中的频率成分。

matlab绘制正弦波频谱图,matlab对正弦信号作FFT得到频谱图相关推荐

  1. MATLAB绘制正弦波、方波、三角波、锯齿波的mif文件

    MATLAB绘制正弦波.方波.三角波.锯齿波的mif文件 % 对波形进行等间隔采样,以采样次数作为 ROM 存储 % 地址,将采集的波形幅值数据做为存储数据写入存储地址对应的存储空间 % 采样次数为 ...

  2. matlab ploty,matlab绘制函数 如何利用matlab的ploty

    最近有网友提出"matlab绘制函数 如何利用matlab的ploty"等问题,小小知识站提取了各大知名网站有关"matlab绘制函数 如何利用matlab的ploty& ...

  3. matlab yticklable,Matlab绘制XTickLabel有效字符串(Matlab Plot XTickLabel valid strings)

    Matlab绘制XTickLabel有效字符串(Matlab Plot XTickLabel valid strings) 我有一个情节: x = [0 1 2 3]; y = [0 0 1 1]; ...

  4. 【matlab代码】生成特定频率的正弦信号,X轴以时间表示

    模拟信号:   正弦波三要素: 幅度A,角频率\omega,相位\varphi y=A sin\left ( \omega t+\varphi \right )   角频率\omega与频率f的关系: ...

  5. matlab绘制磁场图,基于Matlab的电磁场图示化教学

    第 26 卷第 3 期 孝感学院学报 VOL. 26 NO. 3 2006 年 5 月 JOURNAL OF XIAOGAN UNIVERSITY MA Y. 2006 基于 Matlab 的电磁场图 ...

  6. matlab绘制三维球体,使用Matlab绘制三维圆柱体和球体

    使用Cylinder功能函数绘制圆柱体侧面 在matlab中自带了绘制圆柱体的功能函数cylinder,其用法如下: 例1,绘制一个圆柱体的三维图像,要求圆柱体底面圆心在坐标原点,底面半径为3,高度为 ...

  7. 如何用MATLAB绘制真值表,编写真值表 - MATLAB Simulink - MathWorks 中国

    编写真值表 在创建新真值表后,您就可以对它进行编写以根据您的设定执行.要编写真值表,您需要添加条件.决策和动作.有关创建真值表的详细信息,请参阅使用真值表对组合逻辑建模. 真值表仅在 Simulink ...

  8. matlab绘制星下点轨迹,卫星星下点轨迹Matlab仿真.docx

    使用Matlab绘制卫星星下点轨迹1.地球静止轨道卫星,倾角分别为0,30,90度.clc; clear;t = 0:1:6;we = 360/24;u = we*t;i = 30;fai = asi ...

  9. matlab编写正弦波mif,使用MATLAB生成正弦波的MIF文件的问题

    function data=sin_mif_data_generation %使用MATLAB生成正弦波的MIF文件 %2010.2.10 %生成数据 N=8; index = linspace(pi ...

  10. matlab绘制三角波脉冲信号,单位冲激信号、单位阶跃信号、实指数信号、正弦信号、非周期矩形脉冲信号和非周期三角波脉冲信号的频谱...

    matlaB函数 连续周期三角波信号频谱图 N=10; n1=-N:-1; C1=-4*j*sin(n1*pi/2)/pi^2./n1.^2; C0=0; n2=1:N; C2=-4*j*sin(n2 ...

最新文章

  1. 初识Django —Python API接口编程入门
  2. HDU 1232 -畅通工程(并查集)
  3. 基于vue2+vuex+vue-router+sass+webpack的网易云音乐
  4. 反射应用和获取Class对象的三种方式
  5. Codeforces Round #364 (Div. 1) (差一个后缀自动机)
  6. lua进入压缩包_使用lua语言制作贪吃蛇游戏(love2d)(一)开发环境的搭建
  7. 精准高效估计多人3D姿态,美图北航分布感知式单阶段模型(CVPR 2022)
  8. oracle数字日期43841怎么转,安装0racle已崩溃,求助大佬
  9. 软件路由测试,软路由测试
  10. 智慧城市特效(建筑颜色渐变、飞线、扫光、扫描、光墙、线路、水、道路线条、锥形标、漫游)three+shader
  11. element的form表单中如何一行显示多el-form-item标签
  12. 现代浏览器探秘(part 1):架构
  13. 电脑罗盘时钟html怎么设置成桌面,抖音最火的罗盘时钟桌面壁纸使用教程
  14. 手机端(移动端)UI框架整理
  15. python的计算_python计算smoothed PSSM(二)
  16. Log4j整合阿里云日志服务
  17. java 接口耗时分析_性能优化案例(2019-案例78)-接口性能耗时问题分析
  18. 网页浏览器的发展详史
  19. JetBrains产品字体大小调整
  20. win10下loadrunner11安装与破解

热门文章

  1. 技术自查番外篇六:死锁及解决办法
  2. 批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
  3. 基于Java平台实现发送短信功能
  4. STM8 捕获模式HS0038 红外遥控解码
  5. ps高低频磨皮详细教学
  6. 2.4G超低功耗射频芯片NRF24L01P和SI24R1和CI24R1的区别
  7. 获取网站url ico小图标
  8. 蒋正寒计算机编程大赛,重庆大学第七届研究生编程大赛完美收官
  9. Typora官网下载慢,用这个镜像
  10. html ckplayer.swf,Flash基础入门之ckplayer.js视频播放插件