时频分析:短时傅里叶变换实现(1)

Matlab spectrogram函数

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

1语法

 s = spectrogram(x)
 s = spectrogram(x,window)
 s =spectrogram(x,window,noverlap)
 s =spectrogram(x,window,noverlap,nfft)   

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')

在这里插入图片描述
重复验证计算:
将源信号分割成几个段的信号 nsc=⌊Nx/4.5⌋nsc=⌊Nx/4.5⌋.
使用汉宁窗进行加窗运算
确定使用50%的重叠部分
-对傅里叶计算的点做选择,点数由max(256,2^p),其中p等于 p=⌈log2Nx⌉p=⌈log2⁡Nx⌉.
验证这俩个途径的计算结果是否相同:
在这里插入图片描述

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(:))))

在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值