短时傅里叶变换(2)

							<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
    <a href="https://h5.youzan.com/v2/goods/3nj52dd9seo3z" target="_blank"><img src="https://img-blog.csdnimg.cn/2019042818380821.jpg"></a>								            <div id="content_views" class="markdown_views">
						<!-- flowchart 箭头图标 勿删 -->
						<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg>
						<p>目录:</p>

短时傅里叶变换(2)

前言

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

实验环境

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

Matlab spectrogram函数

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

1语法

>

  s = spectrogram(x,window,noverlap,nfft,Fs) 
 
 
  • 1

2使用说明

s = spectrogram(x,window,noverlap,nfft,Fs)
返回输入信号的短时傅里叶变换,该函数和之前的返回结果有所不同,它的时间轴和频率轴发生了变化
详细说明:
返回输入信号x的谱图,结果存储在矩阵s中,其他参数的设置和之前一样,Fs是采样频率,单位为Hz,如果Fs是[]的话,它默认是1Hz,如果Fs没有定义的话,将使用归一化的频率。
s的每一列都是x短时局部锁定的频率成分,时间轴从左至右,频率轴从下至上。
如果x是长度为NX的复信号,s是一个有NFFT行的复矩阵,以及fix((nx-noverlap)/(length(window)-noverlap))列。对于实信号,如果NFFT是偶数则s的行数是(NFFT/2+1),如果NFFT是奇数,则行数为(NFFT+1)/2.

3代码如下:

3.1坐标轴变换

%产生一个平方鸟声(chirp)信号,采样频率是1khz,采样时间是2秒,前一秒的信号是100hz,后一秒的信号是200hz。                                                                                                                 
t = 0:0.001:2;
x = chirp(t,100,1,200,'quadratic');
%计算并展示x的谱图
% 将信号分割成每段128个点的信号,使用汉宁窗加窗。
% 选择120个点作为连续的重叠部分
%计算谱值 【128/2+1】=65个频率点,[(length(x)-120)/(128-120)]=235个时间块。
spectrogram(x,128,120,128,1e3)
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

example2
使用Blackman窗代替汉宁窗,将重叠点下降到60个,画出时间轴,它的轴是逆转的。

spectrogram(x,blackman(128),60,128,1e3)
ax = gca;
ax.YDir = 'reverse';
 
 
  • 1
  • 2
  • 3

这里写图片描述
如图所示

3.2鸟声信号的功率谱密度

3.2.1平方鸟声信号

计算并展示一个分段鸟声信号的功率谱密度,开始时是100hz,并在1秒时变成了200hz。采样率为1000hz,分段的每一段长度为128点,每一段有120个点重合,使用128点的离散傅里叶变换和默认的海明窗

t = 0:0.001:2;
x = chirp(t,100,1,200,'quadratic');
spectrogram(x,128,120,128,1e3,'yaxis')
title('Quadratic Chirp')
 
 
  • 1
  • 2
  • 3
  • 4

如图所示
这里写图片描述

3.2.线性鸟声信号

计算并展示一个线性鸟声信号每一段的功率谱密度,开始时是直流,并在t=1s时达到150hz。
信号设置,采样率1khz,每一段的长度为256个点,每一段的重叠是250个点,使用默认的海明窗和256点离散傅里叶变换。

t = 0:0.001:2;
x = chirp(t,0,1,150);
spectrogram(x,256,250,256,1e3,'yaxis')
title('Linear Chirp')
 
 
  • 1
  • 2
  • 3
  • 4

如图所示
这里写图片描述

3.3对数鸟声信号

计算并展示一个对数鸟声信号每一段的功率谱密度,开始时是20hz,并在t=1s时达到60hz。
信号设置,采样率1khz,每一段的长度为256个点,每一段的重叠是250个点,使用默认的海明窗和256点离散傅里叶变换。

t = 0:0.001:2;
x = chirp(t,20,1,60,'logarithmic');
spectrogram(x,256,250,[],1e3,'yaxis')
title('Logarithmic Chirp')
 
 
  • 1
  • 2
  • 3
  • 4

如图所示:
这里写图片描述
在这张图里,当你使用对数频率轴时,图像会变成一条直线
代码如下:

ax = gca;
ax.YScale = 'log';
 
 
  • 1
  • 2

这里写图片描述
这也展示对坐标轴的设置会影响展示效果。


参考:

mathworks

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值