文章目录

  • 补零(zero padding)
    • 带来的效果: 频率分辨率变好
    • 举例
    • 补零对原信号的影响
    • 补零的作用: 增加频率分辨率, 并能任意选择FFT的长度
  • FFT
    • DFT的性质
  • 加窗
    • N点内非周期振动出现的问题
    • 频率泄露的原因
    • 加窗就是为了减少跳变带来的频率泄露
    • 看看加窗后对频谱的影响
  • STFT
    • DFT的缺点, 对整个信号进行处理, 没有前后时间信息
    • STFT通过帧对信号进行处理
    • 帧长短的影响
    • hop size的影响(也就是步进值大小的影响)
      • 直观上增加了frame数量

补零(zero padding)

带来的效果: 频率分辨率变好

  • 补零就是在信号后面加上0

比如我有一个随机信号, 长度为8, 所谓的长度是说被8个点采样了, 如下图:

那么我们知道它输出的X[K] 也应该有8个数, 代表的意思是8个点里有0次周期, 1次周期, 2次周期, …7次周期的基波. 所以当我的采样点加多, 对应的输出的X[k]也就越长, 这里注意的是 在固定的采样频率下, 采样点是不变的, 那么我们就可以把短的信号补长, 补上0

然后再做DFT就可以得到长度为8的, 为16的等不等的数组, 会发现补零使得图变平滑了, 实质就是 频率的分辨率变小了, 之前的时候提到 对应每个X[k], 它的频率是 k∗fs/Nk*f_s/Nk∗fs​/N ,所以频率分辨率就是 fs/Nf_s/Nfs​/N .

  • 由此可见N越大, 频率分辨率越好.

举例

  • 假如我有个信号是由440Hz和441Hz组成的, 假如要想分辨出这两个信号频率分辨率至少是1Hz, 也就是 fs/Nf_s/Nfs​/N <1, 查看下面的补零效果

补零对原信号的影响

  • 直观来想, 假如我给一个有限长信号后面补零, 肯定会对原信号造成影响, 这个影响体现在哪呢?

看下面这个图, 假如我的原信号有4410个点, 然后补零到16384个点, 它的频谱图可能是这样的:

假如不补零而是这个信号变长了,就是不在原来的地方断掉而是不断的延续,其频谱图如下:

补零的作用: 增加频率分辨率, 并能任意选择FFT的长度

FFT

FFT 是快速计算DFT的统称

DFT的性质

  • 假如N个点的DFT可以分解成 N=n1∗n2N\text=n_1*n_2N=n1​∗n2​ 的形式, 那么此时的DFT可以分解为两部分DFT, 缩短了计算时间复杂度降低了

  • 补零N到2的k次幂, 可以使得任意DFT都分解为2长度的DFT

  • 当然X[k]还是中心对称的, 比较容易计算

加窗

N点内非周期振动出现的问题

  • 之前的时候都假设信号在采样的N个点里振动了整数个周期

看下面这个图, 第一个是256个点里振动了4个周期, 第二个是把后面的36个点给去掉了

  • 现在在第二个后面补零到256个点, 做N=256的DFT, X[4]应该在两个信号中都是最高的那个

按理来说应该只有一个频率, 但是截断补零后第二个信号出现了别的频率, 也就是出现了所谓的频率泄露的情况, 这是为什么呢?

频率泄露的原因

  • DFT计算的时候 假定信号会是无限长的, 因为正弦和余弦正交的性质只有在无限长的信号中才成立

DFT计算的时候会把有限长的信号补长, 变为无限长的, 假如不是整数周期的话就会在补的地方出现跳变, 这个跳变的频率其实是无限大的, 所以各个地方都会有频率了

加窗就是为了减少跳变带来的频率泄露

  • 看看下面这个汉宁窗的例子, 窗都是从0开始到0结束的, 为了减少跳变, 汉宁窗乘过原信号后就不会存在跳变了, 因为边缘都成了0了

看看加窗后对频谱的影响

  • 可以看到加窗去掉了 高频的频率泄露 , 但是在低频的噪声似乎更大了, 但是实际上我们能够知道加上窗后中心频率衰减了多少, 第二高的比例是多少, 相当于从不可控到可控了

STFT

DFT的缺点, 对整个信号进行处理, 没有前后时间信息

比如下面的信号应该是先440Hz, 后660Hz, 但是DFT得到的频谱图完全看不出来

STFT通过帧对信号进行处理

  1. 假如有一个3s的音频, 我们先取一个10到25ms的时间作为1帧, 如下图:

  1. 得到的信号 一般不会是恰好有整数个周期, 因此需要加窗
  • 加窗前

  • 加窗后

  1. 补零进行傅里叶变换, 得到频谱图

  1. 可以得到第一帧的X数组, len(X) =N

  2. 帧移取帧长的25%到75%, 再取一帧

  1. 等到走完信号后, 竖着构成一个矩阵, k=0在下面

  1. 对矩阵进行染色, 就得到了实频谱

  • 总结: 这里横轴是frame, 纵轴分辨率是 fs/Nf_s/Nfs​/N

帧长短的影响

  • 感性来看, 增加frame长度, 每个帧包含的信息多了, 那么测量的频率应该就越准确
  • 但是这样导致 时间分辨率降低了, 不能准确知道到底是在什么时候频率发生了改变

可以查看下面的例子, 帧长分别是2048个点, 4096个点, 16384个点, 可以看到frame很小时间分辨率比较好, 能够清楚看到是什么时候跳变的, 但是对音频的频率却不清楚, 假如frame很大, 则频率可以明显的知道, 但是 跳变的界限就不清楚了

hop size的影响(也就是步进值大小的影响)

直观上增加了frame数量
  • 可以看下面不同的步进值, 发现区别不大
  • 但是重叠还是必要的, 因为边缘可能还是会丢失一部分信息, 所以重叠是要加的, 但是不要加太多

理解FFT, STFT, 加窗的含义相关推荐

  1. 如何理解FFT中时间窗与RBW的关系

    作为一种常用的频谱分析工具,快速傅里叶变换(FFT) 实现了时域到频域的转换,是数字信号分析中最常用的基本功能之一.FFT 频谱分析是否与传统的扫频式频谱仪类似,也具有分辨率带宽(RBW) 的概念?如 ...

  2. rbw数字信号处理_如何理解FFT中时间窗与RBW的关系

    傅里叶变换(FFT)实现了时域到频域的转换,是信号分析中最常用的基本功能之一.本文将描述FFT应用中为什么要采用时间窗,以及RBW与时间窗的关系. FFT变换是在一定假设下完成的,即认为被处理的信号是 ...

  3. 了解FFT和信号加窗

    0 概览 学习信号时域和频域.快速傅立叶变换(FFT).加窗,以及如何通过这些操作来加深对信号的认识. 1. 理解时域.频域.FFT 傅立叶变换有助于理解常见的信号,以及如何辨别信号中的错误. 尽管傅 ...

  4. python信号处理加汉明窗_SciPyTutorial-非整周期信号加窗

    17. Scipy Tutorial- 非整周期信号加窗 17.1 什么是加窗? 使用FFT分析信号的频率成分时,分析的是有限的数据集合. FFT认为波形是一组有限数据的集合,一个连续的波形是由若干段 ...

  5. 信号处理(二)音频信号的分帧, 加窗

    1 .语音信号的三个参数 语音信号有三个重要的参数:声道数.取样频率和量化位数. 声道数:单声道或者双声道 采样频率:一秒钟对声音采样的次数,例如10000HZ代表一秒钟将信号分解为10000份,当采 ...

  6. FFT频谱分析(补零、频谱泄露、栅栏效应、加窗、细化、频谱混叠、插值),Matlab、C语言代码

    文章目录 引言 Matlab FFT函数 频谱混叠 栅栏效应 细化技术 什么是细化技术? 细化FFT技术的应用: Zoom-FFT算法介绍及MATLAB实现 Zoom-FFT根本没有实现"细 ...

  7. FFT分析的加窗和重叠

    FFT分析的加窗和重叠 这将通过实例说明加窗和重叠对频谱分析的影响.用10Hz的正弦波,以说明重叠窗函数在频谱分析过程中的不同之处. 重叠分析,就是连续分析的时域数据块通过指定的时间纪录百分比进行重叠 ...

  8. STM32 fft加窗的问题(汉宁窗)

    在FFT处理线面呢,很多人就说要加窗,加窗的好处了就是防止能量泄露和高频滤波啊,不过精度呢就会相应的降低.(听说是这样的.本人小白) 窗的种类也很多啦,然后听说啥都不懂的就可以了选择汉宁窗... 在M ...

  9. 傅里叶变换学习笔记(二)——栅栏效应、频谱泄漏与加窗

    上文传送门: 傅里叶变换学习笔记(一) 本文将对傅里叶变换应用中常见的两个问题进行讨论. (一) 栅栏效应 先看一个典型的应用案例: 构造信号: x(t)=−sin(2πf1t)+sin(2πf2t) ...

  10. 深入浅出解释FFT(六)——深入理解fft变换

    (如需交流,请关注公众号:神马观止) FFT(FastFourier Transform,快速傅立叶变换)是离散傅立叶变换的快速算法,也是我们在数字信号处理技术中经常会提到的一个概念.在大学的理工科课 ...

最新文章

  1. Redis以及Redis的php扩展安装无错版
  2. Lazy Line Painter – 很有趣的 jQuery 路径动画插件
  3. dataframe 空值替换为0_缓解Pandas中DataFrame占用内存过高
  4. 软件测试用例设计“八法归一”——因果阵
  5. Java函数式编程:Javaslang入门
  6. C++|Linux工作笔记-C++获取Linux中shell命令结果
  7. C++设计模式-职责链模式
  8. 锤子t1重置后怎么显示无服务器,解决锤子手机smartisanT1关机后无法正常开机(附带刷机教程图文)...
  9. greenplum配置高可用_GREENPLUM介绍之数据库管理(七)- 配置数据库高可用性之master镜像 | 学步园...
  10. POJ2115 C Looooops 扩展欧几里德
  11. 这样投递简历更容易找到工作
  12. sql脚本 windows导出 linux乱码,mysql query browser中文乱码的解决方法
  13. win10系统迁移后系统重装_win10系统迁移超简单!详细步骤解析
  14. cv曲线面积的意义_浅谈圆锥曲线中的高级技巧
  15. 手机CPU天梯图2021年6月版
  16. termux php 出错,Termux MariaDB 升级后报错解决
  17. 老年人智能手机APP开发界面设计具体策略
  18. Vue.js学习笔记—调查问卷WebApp
  19. 2017 云+未来峰会——上海站开发者专场即将开讲(30元电话充值卡等你拿)
  20. 【JDBC】使用c3p0数据库连接池的各种报错警告

热门文章

  1. 南京大学计算机科学与技术,南京大学计算机科学与技术系简介
  2. ZigBee2006 CC2430 按键流程
  3. Tensorflow SavedModel 模型的保存和加载
  4. ABP官方文档翻译 8.1 通知系统
  5. OSPF路由聚合(学习笔记+实验验证)
  6. 怎么去掉360导航页
  7. win10计算机域填写,win10系统如何加入域 win10系统加入域的方法
  8. matlab找最大值_matlab求函数最大值
  9. PLC面向对象编程系列之双通气缸功能块(SMART梯形图)
  10. 【Windows 10系统】惠普打印机解决打印机状态已暂停