一、短时傅里叶变换的定义
离散傅里叶变换使用的是一种全局变换,因为它表示一段时间内平均的频率特性,无法表述信号的时域局域性质,为了能够分析处理非平稳信号,人们对离散傅里叶变换进行了推广,提出了短时傅里叶变换。表达式如下所示:
短时傅立叶采用滑动窗口机制,设定窗口大小和步长,让窗口在时域信号上滑动,分别计算每个窗口的傅立叶变换,形成了不同时间窗口对应的频域信号,拼接起来就成为了频率随时间变化的数据(时频信号)。
二、函数调用
1.短时傅里叶变换tfrstft函数:
[tfr,t,f]=tfrstft(x,t,N,h,trace);
其中x是数据矢量,t是时间刻度(默认1:N),N是FFT长度,h是窗函数,trace为是否跟踪运算。tfr是x的STFT值,t是时间刻度的输出变量,f是频率刻度的输出变量,是一个归一化的频率值,在-0.5-0.5的区间内。
2.短时傅里叶逆变换tfristft
[x,t]=tfristft(tfr,t,N,h,trace);
tfr是STFT域的数值,是一个二维的复数数组,t是时间刻度,x是经短时傅里叶逆变换得到的重构数据,t是该重构数据对应的时间刻度。
三、用tfrstft函数做STFT的谱图
1.mesh函数作三维图:
mesh(t,f(1:N/2)*fs,abs(tfr(1:N/2,:)));
2.mesh函数做二维图:
mesh(tt,f(1:N/2)*fs,abs(B(1:N/2,:)));
view(0,90); xlim([0 max(tt)])%使用view函数翻转mesh所做的三维图
3.imagesc函数做二维图
imagesc(tt,f(1:N/2)*fs,abs(B(1:N/2,:))); axis xy
附:
(1)imagesc函数用法:
imagesc函数用法
(2)axis xy:
axis xy与axis ij的用法
4.范例
clear all; clc; close all;
N=1024; % 数据长度
fs=1000; % 采样频率
tt=(0:N-1)/fs; % 时间刻度
x1=chirp(tt,0,1,350); % Chirp 信号x1
x2=chirp(tt,350,1,0); % Chirp 信号x2
x=x1'+x2'; % 两个Chirp 信号相加;
win=hanning(127); % 窗函数
[B,t,f]=tfrstft(x,1:N,N,win);% 短时傅里叶变换
% 作图
figure(1) % 信号波形图
subplot 211; plot(tt,x1,'k');
title