目录

一、STFT

1.基本理论

2.spectrogram函数

3.频率分辨率和时间分辨率

3.1分辨率的影响因素

3.2提高频率分辨率的方法

二、MATLAB代码

参考文献


一、STFT

1.基本理论

傅里叶变换只反映出信号在频域的特性,无法在时域内对信号进行分析。为了将时域和频域相联系,Gabor于1946年提出了短时傅里叶变换(short-time Fourier transform
,STFT),其实质是加窗的傅里叶变换。STFT的过程是:在信号做傅里叶变换之前乘一个时间有限的窗函数 h(t),并假定非平稳信号在分析窗的短时间隔内是平稳的,通过窗函数 h(t)在时间轴上的移动,对信号进行逐段分析得到信号的一组局部“频谱”。信号的短时傅里叶变换定义为:

由上式知,信号在时间 t 处的短时傅里叶变换就是信号乘上一个以 t 为中心的“分析窗”后所作的傅里叶变换。乘以分析窗函数等价于取出信号在分析时间点 t 附近的一个切片。对于给定时间 t,可以看作是该时刻的频谱。特别是,当窗函数取时,则短时傅里叶变换就退化为传统的傅里叶变换。要得到最优的局部化性能,时频分析中窗函数的宽度应根据信号特点进行调整,即正弦类信号用大窗宽,脉冲型信号用小窗宽。

短时傅里叶变换的优缺点:优点是其基本算法即是傅里叶变换,易于解释其物理意义;缺点是STFT 的窗宽是固定的,不能进行自适应调整。

2.spectrogram函数

function varargout = spectrogram(x,varargin):用于短时傅里叶变换(STFT)的频谱图。

S = SPECTROGRAM(X),返回由矩阵S中的向量X指定的信号的短时傅立叶变换。默认情况下,X被分成8个有50个重叠的段,每个段用Hamming窗口加窗。用于计算离散傅里叶变换的频率点的数目等于256或大于段长度的下一次幂的256。如果X不能精确地分成八段,X将被截断。

S = SPECTROGRAM(X,WINDOW),当WINDOW是一个向量时,将X分成与WINDOW长度相同的段,然后用WINDOW指定的向量对每个段进行加窗。如果WINDOW是一个整数,函数将X分成长度等于该整数值的段,并用Hamming窗口对每个段进行加窗。如果未指定WINDOW,则使用默认值。

S = SPECTROGRAM(X,WINDOW,NOVERLAP),指定相邻线段之间重叠的NOVERLAP采样。如果WINDOW是整数,则NOVERLAP必须是小于WINDOW的整数。如果WINDOW是向量,则NOVERLAP必须是小于WINDOW长度的整数。如果未指定NOVERLAP,则使用默认值获得50个重叠。

S = SPECTROGRAM(X,WINDOW,NOVERLAP,NFFT),指定用于计算离散傅里叶变换的频率点的数目。如果未指定NFFT,则使用默认NFFT。

S = SPECTROGRAM(X,WINDOW,NOVERLAP,NFFT,Fs),指定采样率Fs(Hz)。如果Fs指定为空,则默认为1Hz。如果未指定,则使用规范化频率。

S的每一列包含X的短期、时间局部化频率含量的估计值。S列中的时间从左到右递增。频率从0开始沿行递增。如果X是一个长度为NX的复信号,则S是一个具有NFFT行和k=fix((NX-NOVERLAP)/(length(WINDOW)-NOVERLAP))列的复矩阵。对于实X,如果NFFT是偶数,S有(NFFT/2+1)行;如果NFFT是奇数,S有(NFFT+1)/2行。

[S,F,T] = SPECTROGRAM(...),返回频率向量F和时间向量T,在该向量下计算频谱图。F的长度等于S的行数。T的长度为k(如上定义),其值对应于每个线段的中心。如果没有提供采样率,F包含归一化频率。

[S,F,T] = SPECTROGRAM(X,WINDOW,NOVERLAP,F),计算矢量F中指定的归一化频率下的双面谱图。F必须至少有两个元素。

[S,F,T] = SPECTROGRAM(X,WINDOW,NOVERLAP,F,Fs),计算矢量F中指定频率下的双侧频谱图。F必须以赫兹表示,并且至少有两个元素。

[S,F,T,P] = SPECTROGRAM(...),P是表示每段功率谱密度(PSD)的矩阵。对于实信号,SPECTROGRAM返回每段PSD的单边修正周期图估计值;对于复信号,如果指定了频率向量,则返回双边PSD。

3.频率分辨率和时间分辨率

3.1分辨率的影响因素

窗口的长度会影响时间分辨率和频率分辨率。窗口越长,截取的信号越长,时间分辨率越低,频率分辨率越高;窗口越短,截取的信号越短,时间分辨率越高,频率分辨率越低。

从定量的角度来看,STFT的时间分辨率取决于平移步长,而频率分辨率则取决于。显然,一方的增加必然意味着另一方的减小。这就是所谓的时频测不准原理,具体关系为:

3.2提高频率分辨率的方法

利用spectrogram函数自带两种提高频率分辨率的方法

方法1:将小于某个数值的数归零,提高频率分辨率。

调用格式:[S,F,T,P] = SPECTROGRAM(...,'MinThreshold',THRESH);当10*log10(P)的对应元素小于THRESH(以分贝为单位指定阈值)时,将P的元素设置为零。

方法2:利用功率谱将能量集中的原理,提高频率分辨率。

调用格式:[S,F,T,P] = SPECTROGRAM(...,'reassigned');将每个PSD估计值重新设定为其重心位置。

二、MATLAB代码

clc;
clear;
close all;
tic;
%% 产生信号
fs = 1000;  % 采样频率1KHz
t = 0:1/fs:1-1/fs;
N=size(t,2);
f1=10;
f2=30;
x=3*cos(2*pi*f1*t)+5*sin(2*pi*f2*t);
figure(1);
plot(t,x);%% 短时傅里叶变换
wlen=500;%设置窗口长度。窗口越长时间分辨率越差,频率分辨率越好。
hop=1;%每次平移的步长,最小为1。越小图像时间精度越好,但计算量大。
x=wkeep1(x,N+1*wlen);%中间截断
h=hamming(wlen);%设置海明窗的窗长
[B, F, T, P] = spectrogram(x,h,wlen-hop,N,fs);   % B是F行T列的频率峰值,P是对应的能量谱密度
figure(2);
imagesc(T,F,P);
set(gca,'YDir','normal')
colorbar;
xlabel('时间 t/s');
ylabel('频率 f/Hz');
title('短时傅里叶时频图');
toc;

参考文献

[1]宫宇新,何满潮,汪政红,等.岩石破坏声发射时频分析算法与瞬时频率前兆研究[J].岩石力学与工程学报,2013,32(4):787-799.

[2]时频分析之STFT:短时傅里叶变换的原理与代码实现(非调用Matlab API).

[3]matlab时频分析之短时傅里叶变换 spectrogram.

时频分析之短时傅里叶变换(STFT)相关推荐

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

    matlab时频分析之短时傅里叶变换 spectrogram 短时傅里叶变换常用于缓慢时变信号的频谱分析,可以观察沿时间变化的频谱信号. 其优点如下图所示,弥补了频谱分析中不能观察时间的缺点,也弥补了 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    目录: 前言 实验环境 Matlab spectrogram函数 1语法 2使用说明 3代码如下 3.1谱图聚集和门限设置 参考: 前言 之前讲了时频分析的原理,现在来讲讲它在matlab里面的实现. ...

  10. 时频分析:短时傅立叶变换实现(4)

    目录: 前言 实验环境 Matlab spectrogram函数 1语法 2使用说明 3代码如下 3.1重新分配平方鸟声的谱图 3.2设置了下限的谱图 参考: 前言 之前讲了时频分析的原理,现在来讲讲 ...

最新文章

  1. C# 视频多人脸识别的实现
  2. The prefix tx for element tx:annotation-driven is not bound.
  3. 2017 Android 面试题 [ 基础与细节 ]
  4. 查找数组中任一峰值的下标
  5. [itint5]棋盘漫步
  6. 再有人问你MySQL索引原理,就把这篇文章甩给他!
  7. C#开发笔记之19-如何用C#实现优雅的Json解析(序列化/反序列化)方案?
  8. ajax获取session值_java程序员你真的了解session与cookie吗?
  9. 遇到一个valgrind自身的bug
  10. android百度地图根据点路线规划,Android 百度地图路径规划一直都是搜索不到结果...
  11. H5 --力导向图、关系图谱
  12. SSH复用代码最终版
  13. kali 破解无线密码
  14. 关于PV、EV、AC、CV、SV、CPI、SPI、BAC、ETC、EAC的解析及计算
  15. HDU 3533 BFS
  16. shell脚本俄罗斯方块小游戏
  17. 计算机考研404是什么意思,研路分享:我的404分考研高分心得体会
  18. 树莓派 python 驱动 lcd tft spi 2.8寸 ili9341 240x320
  19. python对sqlite增删改查_Python操作sqlite3数据库 增删改查
  20. VC驿站《实用C++》教程开篇

热门文章

  1. 淘宝商品详情API接口(商品描述信息查询接口)
  2. python django 商品进销存管理系统(毕设、课设、学习)
  3. 机器翻译 | 反向翻译 (back-translation) 笔记
  4. 《论文阅读》D3DLO: DEEP 3D LIDAR ODOMETRY
  5. selenium模拟鼠标滑动
  6. vue 网页点击置顶图标缓慢置顶
  7. ABBYY FineReader15老牌ocr文字识别软件
  8. python linux区域截屏,用Python写一个像QQ可快捷键唤起区域截屏的应用
  9. 2011年50大最佳网站
  10. 【JAVA】poi-tl简单实现调查问卷word模板