matlab时频分析之短时傅里叶变换 spectrogram

短时傅里叶变换常用于缓慢时变信号的频谱分析,可以观察沿时间变化的频谱信号。

其优点如下图所示,弥补了频谱分析中不能观察时间的缺点,也弥补了时域分析不能获取频率的缺点。

1 STFT的基本原理

基本原理可以理解为对一段长信号,截取每一段时间的短信号做fft,将得到的频谱图时间沿时间轴排列,及可得到时频的云图。

2 matlab中实现

这里采用最基础的spectrogram函数作为分析函数。虽然在其它很多地方都能找到能实现更高级用法的函数,比如逆变换:
https://ww2.mathworks.cn/matlabcentral/fileexchange/45577-inverse-short-time-fourier-transform-istft-with-matlab
但是这里只是单纯的做可视化分析。

代码如下:

%短时傅里叶变换展示
fs=2^10;    %采样频率 fs=65536hz
dt=1/fs;    %时间精度
timestart=-4;
timeend=4;
t=(0:(timeend-timestart)/dt-1)*dt+timestart;
L=length(t);%设置信号
z=sin(2*pi*5.*t).*(t<-2)+sin(2*pi*10.*t).*(t>=-2&t<0)+...sin(2*pi*20.*t).*(t>=0&t<2)+sin(2*pi*40.*t).*(t>=2);
z2=wextend(1,'sym',z,round(length(z)/2));%镜像延拓wlen=512;%设置窗口长度。窗口越长时间分辨率越差,频率分辨率越好。
hop=1;%每次平移的步长,最小为1。越小图像时间精度越好,但计算量大。
z2=wkeep1(z2,L+1*wlen);%中间截断%做短时傅里叶
h=hamming(wlen);%设置海明窗的窗长
f=1:0.5:60;%设置频率刻度[tfr2,f,t2]=spectrogram(z2,h,wlen-hop,f,fs);
tfr2=tfr2*2/wlen*2;
figure
imagesc(t2+timestart-wlen/fs/2,f,abs(tfr2))

3 窗口长度与分辨率

短时傅里叶变换的分辨率和窗口长度wlen的选取,频率的刻度f、平移的步长hop都有关系。

spectrogram函数可以选取较密的频率刻度来增加频域的分辨率,减小平移步长增加时间的分辨率。

但是对于短时傅里叶变换,最重要的还是窗口长度的选取。当频域刻度和平移步长足够密时,增加的只是生成图像的大小,但是物理层面的分辨率却没有改变。改变物理层面分辨率的就是窗口长度。

下图为同一个信号,选取不同窗口长度的图像。其余量不变。

窗口长度大的话,比如2048,频率能够清晰的显示出来,但是时间上有些模糊。窗口长度比较小比如256,时间上的分界线能够清晰显示,但是频率的值却不能清晰读出。

这就是窗口的影响。可以想象,当窗口大到整个信号长度时,短时傅里叶变换就退化为傅里叶变换,没有时间维度。当窗口小到单个采样点时,分析也就退化为时域分析,无法做频域分析。

4 提高频率分辨率的方法

matlab中的spectrogram函数自带两种提高频率分辨率的方法。

第一种是利用功率谱,将能量集中的原理,提高频率分辨率。
用法为:
spectrogram(x,window,noverlap,f,fs,‘reassigned’,‘yaxis’);
前面的同第2节例子,在后面增加了’reassigned’选项。但是这个选项似乎不能用作输出,只能单独以图像形式显示,不知道为什么。

下图为窗函数为256时的两个对比。可以看到右边图的频率分辨率相比左图有了较大提升。但是存在许多噪点。

第二种是将小于某个数值的数归零,提高频率分辨率。
格式如下:
spectrogram(___,‘MinThreshold’,thresh)
参考第2节中的格式如下
spectrogram(z2,h,wlen-hop,f,fs,‘MinThreshold’,-14,‘yaxis’);
set(gca,‘YDir’,‘reverse’);
结果如下图所示

5 提取相位信号

短时傅里叶变换不仅可以提取信号的幅值,还可以提取信号的相位。
幅值的提取方法为abs,相位的提取方法为angle。

例:

clearload mtlb;
z=mtlb;
L=length(z);
t=(1:L)/Fs;z2=wextend(1,'sym',z,round(length(z)/2));
wlen=512;%设置窗长
hop=1;%平移步长
z2=wkeep1(z2,L+1*wlen);%中间截断h=hamming(wlen);%设置海明窗的窗长
f=100:1:1000;
[tfr2,f,t2]=spectrogram(z2,h,wlen-hop,f,Fs,'reassigned','yaxis');
tfr2=tfr2*2/wlen*2;
figure
imagesc(t,f,angle(tfr2))%提取相位
colormap([linspace(0,1,32)'*ones(1,3);linspace(1,0,32)'*ones(1,3)])

信号的相位图如下:

matlab时频分析之短时傅里叶变换 spectrogram相关推荐

  1. matlab 时频分析(短时傅里叶变换、STFT)

    短时傅里叶变换,short-time fourier transformation,有时也叫加窗傅里叶变换,时间窗口使得信号只在某一小区间内有效,这就避免了传统的傅里叶变换在时频局部表达能力上的不足, ...

  2. 时频分析:短时傅里叶变换

    目录 1 傅里叶变换的缺陷 2 短时傅里叶变换(窗式傅里叶变换) 3 小波部分 4 补充部分 1 傅里叶变换的缺陷 FFT在平稳信号的分析和处理中有着突出贡献的原因在于,人们利用它可以把复杂的时间信号 ...

  3. 时频分析:短时傅里叶变换(1)

    目录: 文章目录 目录: 前言 1傅里叶变换的缺陷 2短时傅里叶变换(窗式傅里叶变换) 3小波部分 4补充部分 补充 前言 最近需要对处理的数据做时频分析,因此恶补了一下相关的知识,光是学习并没有用处 ...

  4. 时频分析:短时傅里叶变换应用

    目录: 前言 实验环境 Matlab spectrogram函数 1语法 2举栗子: 2.1跟踪声音信号里的鸟声轨迹 2.2谱图3d可视化 参考: 前言 之前讲了时频分析的原理,和matlab里面的相 ...

  5. 时频分析:短时傅里叶变换实现(2)

    目录: 文章目录 补充 #前言 之前讲了时频分析的原理,现在来讲讲它在matlab里面的实现. 想要复习原理的同学,可以参照一一下这篇: 短时傅里叶分析 本次讲解中阶的函数,基础的可以参见前面的: 短 ...

  6. 时频分析:短时傅里叶变换实现(1)

    目录: 前言 实验环境 Matlab spectrogram函数 1语法 2使用说明 3代码如下: 前言 之前讲了时频分析的原理,现在来讲讲它在matlab里面的实现. 想要复习原理的同学,可以参照一 ...

  7. 数字信号处理——时频分析(短时傅里叶变换)

    短时傅里叶变换的概念 背景: 傅里叶变换的局限性:在做傅里叶变换的时候,使用的是(-∞,∞)的时间信息来计算单个频率的频谱,所以傅里叶变换是一种全局性的描述,不能反映信号局部区域的信息,故如果信号在某 ...

  8. matlab时频分析工具箱安装_EEG时频分析介绍与实现(基于EEGLAB、NetStation与Analyzer2软件)...

    本文首发在个人博客上(7988888.xyz),此文章中所有链接均通过博客进行访问. 我在很早之前有翻译过一篇通过小波变换来进行时频分析的文章,可参考<小波教程>.最近,我在油管上看到了E ...

  9. matlab时频分析代码

    当进行时频分析时,MATLAB提供了多种函数和工具箱,下面是一个简单的MATLAB时频分析代码示例: 假设我们有一个信号x和一个采样频率fs.以下是使用MATLAB信号处理工具箱的代码: ```mat ...

最新文章

  1. Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot)、通过size参数指定数据点的大小、自定义不同分组的气泡的色彩
  2. 二十六、二叉树--查找指定节点
  3. 安天移动安全:Janus高危漏洞深度分析
  4. python pos函数_使用python+sklearn实现特征提取
  5. 设主存容量为1MB,外存容量为400MB,计算机系统的地址寄存器有32位,那么虚拟存储器的最大容量是( )
  6. 语音识别插件_2D动画唇动合成,根据语音自动生成动画人物口型
  7. C/C++课程设计 ——货物管理系统
  8. 用git提交代码到远程仓库遇到的问题
  9. Android权限管理原理,Android手机Root授权原理细节全解析
  10. 了解PHP中$_SERVER变量对路径的解析
  11. OA考勤打卡系统功能点
  12. 文库下载软件 冰点文库下载器 软件 百度网盘链接地址
  13. ANC 调试 -FF 降噪原理和调试
  14. K60解锁以及IAR Missing or malformed ...FlashK60Dxxx128K.flash错误的修改
  15. 怎样练出完美肌肉:[2]完美背肌
  16. import torchvision报错,UserWarning: Failed to load image Python extension: Could not find module ‘C:\U
  17. 鸿蒙 电视盒子,目前最强的电视盒子:性价比最高的5款电视盒子
  18. 用php语言说句情话,50句最美情话,套路我都懂,只是舍不得对你用
  19. 【LC中等】1321. 餐馆营业额变化增长
  20. 谁是全球芯片行业的“麒麟才子”?得之可得天下!

热门文章

  1. 小米官网前端页面还原
  2. python绘制箱线图-python 中箱线图绘制
  3. ImageJ Nikon_ImageJ的下载与安装
  4. pixhawk2.4.8-地面站配置-APM固件
  5. 华为高通携LTE技术杀入车联网,正面挑战V2X老标准
  6. 养活一团春意思,撑起两根穷骨头
  7. 【推荐系统】特征工程(1)
  8. 数据库--商品 表的设计
  9. 计算机网络历年填空与选择(2013)
  10. app 所需图标尺寸