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

目录:

前言

之前讲了时频分析的原理,和matlab里面的相关实现,现在展示一下它的应用。
想要复习原理的同学,可以参照一下这篇:短时傅里叶分析(1)
想要熟悉函数语句的同学:
基础的可以参见前面的:短时傅里叶实现(1)
中阶的可以参见前面的:短时傅里叶实现(2)
高阶的可以参见前面的:短时傅立叶实现(3)
进阶的可以参见前面的:短时傅里叶实现(4)
终极的可以参见前面的:短时傅里叶实现(5)

实验环境

本文的所有实验都是在matlab2016a下通过的。

Matlab spectrogram函数

谱图函数:使用短时傅里叶变换化成短时傅里叶变换的谱图。

1语法

前面的几个帖子,已经详细的介绍了这个函数,不清楚的可以参看一下,本篇只演示应用。

2举栗子:

本文会介绍一些常见的应用,重要的是结合原理去理解它,这样才好应用到自己的应用上。

2.1跟踪声音信号里的鸟声轨迹

加载一个包含两个下降鸟声信号和宽带飞溅声的声音信号。计算短时傅里叶变换,将信号分割成400个段落,300个重叠,画出谱图。

load splat
% To hear, type soundsc(y,Fs)
sg = 400;
ov = 300;
spectrogram(y,sg,ov,[],Fs,'yaxis')
colormap bone                                                                                                        

如图所示
这里写图片描述
%可以使用谱图函数获得信号的功率谱密度信息

[s,f,t,p] = spectrogram(y,sg,ov,[],Fs);
%可以使用medfreq来追踪这两个鸟声信号,为了找到最强的,低频鸟声信号,限制这个搜索在频率大于100hz,时间
%在宽带信号之前
f1 = f > 100;
t1 = t < 0.75;
m1 = medfreq(p(f1,t1),f(f1));
%为了找到虚弱的高频鸟声信号,限制搜索在2500hz以上,时间在0.3秒到0.65秒之间。
f2 = f > 2500;
t2 = t > 0.3 & t < 0.65;
m2 = medfreq(p(f2,t2),f(f2));
%将结果叠加在谱图上。将频率值除以1000,以kHz表示。
hold on
plot(t(t1),m1/1000,'linewidth',4)
plot(t(t2),m2/1000,'linewidth',4)
hold off

如图所示:
谱图信号

2.2谱图3d可视化

%产生一个两秒的信号,采样频率为10khz,瞬时频率信号是一个时间的三角函数
fs = 10e3;
t = 0:1/fs:2;
x1 = vco(sawtooth(2*pi*t,0.5),[0.1 0.4]*fs,fs);
%计算并画出信号的谱图,使用256点shape为5的kaiser窗,特别地重叠点数是220512点DFT,在y轴画出颜色图
spectrogram(x1,kaiser(256,5),220,512,fs,'yaxis')

这里写图片描述

%改变视角,并展示瀑布样的谱图,颜色设置为bone
colormap bone
view(-45,65)

wave


参考:

mathworks

猜你喜欢

转载自blog.csdn.net/lvsehaiyang1993/article/details/80594158