短时傅里叶变换(1)

短时傅里叶变换(1)

目录:

前言

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

实验环境

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

Matlab spectrogram函数

谱图函数使用短时傅里叶变换

1语法

>

 s = spectrogram(x)
  s = spectrogram(x,window)
   s =spectrogram(x,window,noverlap)
   s =spectrogram(x,window,noverlap,nfft)   
 
 
 
 
  • 1
  • 2
  • 3
  • 4

2使用说明

s = spectrogram(x)
返回输入信号(x)的短时傅里叶变换,s的每一列包含着信号s短期时间锁定的频率成分
详细说明:
返回输入信号x的谱图,结果存储在矩阵s中。默认设置:X被分割为8段,每段都有50%重叠,每个段落都经过汉宁窗处理。nfft的点数是256或者比每段X最多点数大的2的倍数。如果x不能被分成8段,它会被截断。
S = spectrogram(X,WINDOW)
详细说明:当window是一个向量的时候,将x划分成每段长数和window一样长的n段,并使用window对每段信号进行处理,如果window是一个整数,则将x分成这么多段,并使用汉宁窗进行处理。
S = spectrogram(X,WINDOW,NOVERLAP) .
noverlp 重叠部分是x中重叠的点数,当window是整数的时候,它必须是个小于window的整数,当window是向量的时候它必须小于window的长度,默认值是50%重叠。
S = spectrogram(X,WINDOW,NOVERLAP,NFFT)
额外设置NFFT的点数。

3代码如下:

产生一个1024点的采样信号,信号源是两个正弦波的叠加,归一化频率分别是0.4pi,和0.8pi,高频信号的能量是低频的10倍。                                                                                                                 
N = 1024;
n = 0:N-1;
w0 = 2*pi/5;
计算短时傅里叶变换,并使用默认参数画出谱图。
x = sin(w0*n)+10*sin(2*w0*n);
s = spectrogram(x);
spectrogram(x,'yaxis')
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这里写图片描述
重复验证计算:

  • 将源信号分割成几个段的信号 ???=N?/4.5nsc=⌊Nx/4.5⌋.

验证这俩个途径的计算结果是否相同:

Nx = length(x);
nsc = floor(Nx/4.5);
nov = floor(nsc/2);
nff = max(256,2^nextpow2(nsc));
t = spectrogram(x,hamming(nsc),nov,nff);
maxerr = max(abs(abs(t(:))-abs(s(:))))
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

maxerr =

     0
 
 
 
 
  • 1
  • 2
  • 3
  • 4

误差为0,因此,这种方法是可以使用的。
将信号分割成8个等长的部分,每个区段由50%的部分重叠。将FFT的长度确定为和之前的步骤一样长。计算短时傅里叶变换并确认它的结果和之前的两个步骤得出的结果一样。

ns = 8;
ov = 0.5;
lsc = floor(Nx/(ns-(ns-1)*ov));
t = spectrogram(x,lsc,floor(ov*lsc),nff);
maxerr = max(abs(abs(t(:))-abs(s(:))))
 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

maxerr =

     0
 
 
 
 
  • 1
  • 2
  • 3
  • 4

误差为0,因此,这种方法是可以使用的。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值