时频分析:短时傅里叶实现(3)

目录:

前言

之前讲了时频分析的原理,现在来讲讲它在matlab里面的实现。
想要复习原理的同学,可以参照一下这篇:短时傅里叶分析
本次讲解高阶的函数使用(1),
基础的可以参见前面的:短时傅里叶实现(1)
中阶的可以参见前面的:短时傅里叶实现(2)

实验环境

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

Matlab spectrogram函数

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

1语法

标准函数引用方式如下:

[s,w,t] = spectrogram(___)
[s,f,t] = spectrogram(___,fs)
[s,w,t] = spectrogram(x,window,noverlap,w)
[s,f,t] = spectrogram(x,window,noverlap,f,fs)

2使用说明

[s,w,t] = spectrogram(_)
返回输入信号的短时傅里叶变换,其中归一化频率向量w和时间向量t存放的是在那一点计算谱图。w的长度和s的行数一样,T的长度和k相等(参见前一篇),它的值是每段的中心时间。
[s,f,t] = spectrogram(_,fs)
f是频率向量f存放谱图计算的点,基于采样频率fs。
[s,w,t] = spectrogram(x,window,noverlap,w)
基于归一化向量w,计算谱图并返回。
[s,f,t] = spectrogram(x,window,noverlap,f,fs)
基于周期频率f返回谱图。

3代码如下

3.1谱图和瞬时频率

利用谱图函数度量和追踪一个信号的瞬时频率。

%产生一个平方鸟声(chirp)信号,采样频率是1khz,采样时间是2秒,前一秒的信号是100hz,后一秒的信号是200hz。                                                                                                                 
Fs = 1000;
t = 0:1/Fs:2-1/Fs;
y = chirp(t,100,1,200,'quadratic');
%估计鸟声信号的谱图使用短时傅立叶变换。
% 将信号划分成长度为100个点,使用海明窗加窗,使用80个样本重叠,估计[100/2+1]=51个频率点,不使用默认
%的颜色棒。
spectrogram(y,100,80,100,Fs,'yaxis')
view(-77,72)
shading interp
colorbar off

如图所示
这里写图片描述
由这个图可以很好的观测峰值频率的变化

3.2鸟声信号功率谱密度追踪

通过确定在[(2000-80)/(100-80)]=96个时间点时,各个谱功率密度的最大值,追踪鸟声频率的轨迹,将谱图当作一个二维图来可视化。恢复颜色棒。

[s,f,t,p] = spectrogram(y,100,80,100,Fs);
[q,nd] = max(10*log10(p));
hold on
plot3(t,f(nd),q,'r','linewidth',4)
hold off
colorbar
view(2)

如图所示
这里写图片描述


参考:

mathworks

猜你喜欢

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