MATLAB实现短时傅里叶变换

一、短时傅里叶变换的定义

离散傅里叶变换使用的是一种全局变换,因为它表示一段时间内平均的频率特性,无法表述信号的时域局域性质,为了能够分析处理非平稳信号,人们对离散傅里叶变换进行了推广,提出了短时傅里叶变换。表达式如下所示:
在这里插入图片描述
短时傅立叶采用滑动窗口机制,设定窗口大小和步长,让窗口在时域信号上滑动,分别计算每个窗口的傅立叶变换形成了不同时间窗口对应的频域信号,拼接起来就成为了频率随时间变化的数据(时频信号)。

在这里插入图片描述

二、函数调用

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
  • 27
    点赞
  • 284
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值