为了大家能够复现各个图中的结果,我附上了所有我编写的MATLAB代码。

创作不易,未经允许,禁止转载。

另外,说明一下,用MATLAB做FFT并不要求数据点个数必须为以2为基数的整数次方。之所以很多资料上说控制数据点数为以2为基数的整数次方,是因为这样就能采用以2为基的FFT算法,提升运算性能。

如果数据点数不是以2为基数的整数次方,处理方法有两种,一种是在原始数据开头或末尾补零,即将数据补到以2为基数的整数次方,这是“补零”的一个用处;第二种是采用以任意数为基数的FFT算法。

而MATLAB的

函数在参数
正好就是数据
的长度,但又不是以2为基数的整数次方时,并不会采用补零的方法,而是采用以任意数为基数的FFT算法,这样也能得到很好的结果,只不过速度要稍稍慢了一些,但一般的计算量是体现不出来的。

快速傅里叶变换 FFT

比如,现在我有一个信号,这个信号中仅包含两个正(余)弦波,一个是

,一个是
,即
。设定采样频率为
,如果采
个点,那么时域信号的时长就有
图1. 1000个数据点

如果,直接对这1000个数据点其做快速傅里叶变换,将得到频谱图:

图2. 1000个数据点做FFT的频谱

可以发现,频谱点稀疏,在1MHz附近根本无法将1 MHz 和1.05 MHz 的两个频率分开。

clear

频率分辨率

发现频率成分无法被区分开来,第一反应应该就是:频率分辨率不够。那么,如何提高频率分辨率呢?首先要清楚,这里存在两种类型的频率分辨率。

一种叫波形分辨率,其由原始数据的时间长度决定:

另一种可以称之为视觉分辨率FFT分辨率,其由采样频率和参与FFT的数据点数决定[1]

之所以要区分,就是因为后面要进行“补零”的操作。如果不补零,直接对原始数据做FFT,那么这两种分辨率是相等的。

例如上面,有:

补零

那么,如果现在在原始数据点后补零会有什么效果呢?假设在这

个原始数据点后面再补充零达到
个点,那么数据变成了:
图3. 7000个补零后数据点

此时对其做快速傅里叶变换,结果如下:

图4. 7000个补零后数据点做FFT的频谱

可以发现,频谱点密集了不少,但是在

附近依然无法将
的两个频率成分分开。这是因为从式
可以看出,

波形分辨率只与原始数据的时长

有关,而与参与FFT的数据点数无关。所以,虽然补了很多零,但波形分辨率依然为:

,该分辨率大于
这两个频率成分之间的距离
。这就好比用筛子分黄豆和大米,分辨率就好像是筛子上孔的大小,如果筛子的孔太大了,就没有办法把这两者分开。

而“时域补零相当于频域插值”[2],也就是说,补零操作增加了频域的插值点数,让频域曲线看起来更加光滑,也就是增加了FFT频率分辨率,注意式

所示,

这是“补零”的另一个原因

clear

频谱泄漏

显然,根据上面的分析可知,在采样频率不变的情况下,要想将

这两个频率成分分析出来,光靠“补零”是不够的,必须要改变波形分辨率,也就是要延长原始数据的时长。现在以相同的采样频率对信号采
个点作为原始信号:
图5. 7000个数据点

对其做快速傅里叶变换,结果如下:

图6. 7000个数据点做FFT的频谱

因为此时的波形分辨率为:

,小于
这两个频率成分之间的距离
,所以可以看出有两个明显的峰值。

但是会发现

对应的幅值为1,与原始信号中该频率成分的幅值一致,但
对应的幅值明显低于1,但是其周边的点上却都有不小的幅值,这就是所谓的

频谱泄露,因为数据点的个数影响,使得在

处有谱线存在,但在
处没有谱线存在,使测量结果偏离实际值 ,同时在实际频率点的能量分散到两侧的其它频率点上,并出现一些幅值较小的假谱。
clear

为了解决这个问题,可以设法使得谱线同时经过

这两个频率点,找到他们的公约数。

如果原始数据不变,在后面再补充

个零点:
图7. 8000个补零后数据点

那么FFT分辨率就是

,是这两个频率的公约数,
,所以谱线同时经过
这两个频率点。

对其做快速傅里叶变换,结果如下:

图8. 8000个补零后数据点做FFT的频谱

会发现

对应的幅值均为1,与原始信号一致。

这也是一种补零操作带来的影响

clear

图8 中会有一些旁瓣出现,这是因为补零影响了原始信号,如果,直接采8000个点作为原始数据,即将程序中的L0改为8000,那么有:

图9. 8000个数据点

并对其做FFT,结果如下

图10. 8000个数据点做FFT的频谱

这样就不存在补零带来的误差了。

参考

  1. ^Zero Padding http://www.bitweenie.com/listings/fft-zero-padding/
  2. ^Zero Padding Theorem https://ccrma.stanford.edu/~jos/dft/Zero_Padding_Theorem_Spectral.html

matlab cftool光滑曲线导出为什么就不光滑了_快速傅里叶变换(FFT)中为什么要“补零”?...相关推荐

  1. matlab cftool光滑曲线导出为什么就不光滑了_MATLAB|二维绘图

    0| 前言 数据可视化(data visualization)技术指的是运用计算机图形学和图像处理技术,将数据转换为图形或图像在屏幕上显示出来,并进行交互处理的技术.它涉及计算机图形学.图像处理.计算 ...

  2. matlab cftool光滑曲线导出为什么就不光滑了_【富怡CAD问题答疑】为什么我画的曲线有锯齿状,不光滑...

    ❤ 点击上方蓝字,轻松关注 ❤   具体操作如下: 1.菜单栏--选项--系统设置 2.页面设置--使用光滑曲线这里打钩 3.对照一下,解决! ............................ ...

  3. Matlab如何进行利用离散傅里叶变换DFT (快速傅里叶变换FFT)进行频谱分析

    文章目录 1. 定义 2. 变换和处理 3. 函数 4. 实例演示 例1:单频正弦信号(整数周期采样) 例2:单频正弦信号(非整数周期采样) 例3:含有直流分量的单频正弦信号 例4:正弦复合信号 例5 ...

  4. 快速傅里叶变换FFT进行频谱分析(matlab)

    快速傅里叶变换FFT进行频谱分析(matlab) 本章摘要:FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域.有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了 ...

  5. MATLAB之傅里叶变换,快速傅里叶变换FFT

    文章目录 傅里叶变换及傅里叶逆变换定义 窗函数/矩形脉冲信号的傅里叶变换 基于MATLAB的快速傅里叶变换FFT 傅里叶变换及傅里叶逆变换定义 能从时域的非周期连续信号转化到频域非周期连续信号. 窗函 ...

  6. matlab绘制oc曲线,三角网方法绘制等值线图及其在重力资料成图中的应用

    一目U舀物化探资抖成图过去常用的是网格化数据绘等值线图,然而实际工作中观测点一般是随机的,:主就需光转换成网格化数据,然后再绘图,这样做有很多不足取的地方,例如极值偏移.影响精度等等.最近随机点数据绘 ...

  7. matlab fft频率轴,FFT(快速傅里叶变换)中频率和实际频率的关系

    原标题:FFT(快速傅里叶变换)中频率和实际频率的关系 一 四个名词:实际物理频率,角频率,圆周频率,归一化频率 ·实际物理频率表示AD采集物理信号的频率,fs为采样频率,由奈奎斯特采样定理可以知道, ...

  8. matlab中filter卷积补零,matlab中的卷积——filter,conv之间的区别

    filter是做滤波,其实原理跟卷积是想通的,只不过处理结果的方法不同,先看示例程序: x=[1,2,3,4,5]; h=[1,1,1]; y1=conv(h,x) y2=filter(h,1,x) ...

  9. MATLAB中的快速傅里叶变换FFT与IFFT

    背景 FFT (Fast Fourier Transform)是离散傅立叶变换的快速算法,可以将一个信号从时域变换到频域.同时与之对应的是IFFT(Inverse Fast Fourier Trans ...

最新文章

  1. 小程序定制开发需要注意的事项
  2. 群晖NAS百度云Docker客户端下载目录没有权限的问题解决
  3. scrapy-splash抓取动态数据例子十三
  4. php 根据权重随机数,PHP根据概率产生随机数
  5. 获取sqlserver数据库中所有库、表、字段名的方法
  6. Java面向对象(12)--对象类型转换 (Casting )
  7. 编写一个可以打印不同长度数组内容的函数模板
  8. simpson积分模板
  9. 开源大数据:Alluxio 云原生数据编排
  10. Kafka开源转商业实践,助力车主无忧系统稳健 | 凌云时刻
  11. Nginx工作原理及基本使用
  12. IIC详解之AT24C08
  13. 26. 平衡二叉排序树
  14. 【金融基础设施建设01】金融基础设施建设概论(金融基础设施的定义、现状、国内外标准、基本特征、作用、风险)
  15. 区块链搭建联盟链及控制台安装
  16. 把ip导入mysql_纯真IP数据库导入mysql
  17. 计算机怎么取消u盘启动程序,如何设置电脑启动项的为U盘启动,小编教你如何设置电脑启动项的为U盘启动...
  18. 锋利的jQuery读书笔记-第1章 认识jQuery
  19. 2019华师在线计算机,华师计算机基础客观作业2019.pdf
  20. linux trac svn,Ubuntu安装Trac SVN

热门文章

  1. 高级项目管理-4、项目范围、进度、成本、质量管理
  2. java检测磁盘空间大小
  3. 不写DAX实现TopN和其他
  4. mysql以及DBeaver的使用
  5. java 找出所有水仙花数,java 水仙花数 所有的
  6. 2021年中国百强区总体发展概况分析:深圳南山区、广州天河区、深圳福田区等城区高质量发展水平领跑全国[图]
  7. CentOS安装配置tomcat
  8. 实验室信息化管理系统创新管理模式
  9. java1逻辑运算符作业(16道)
  10. 充分利用计算机在教学中的作用,浅谈多媒体在教学中的作用