STFT短时傅里叶变换的实现

本科毕设做雷达微动的时频分析时,最常用的就是STFT了。matlab已经有了时频分析工具箱,调用里面的tfrstft函数即可轻松实现。今天看了源代码感觉写的比较复杂,于是结合微动,尝试自己实现一下。


 STFT是在信号时域加窗函数,并通过移动窗函数进行FFT以获得信号的时变频率特性。可见,窗函数长度越短,对信号信号的时域划分越细,时域分辨性越好,但是频率分辨性越差。因此要合理选择窗函数长度。

代码实现的思路:先求

这个认为姑且认为是关于x与g的瞬时相关函数吧。其中要注意,和都是时间范围,但却是两个变量。

第二步就是求瞬时相关函数关于的FFT了。

【注意】: -在窗函数范围内有值,之外就要取零了。

matlab实现时频功能部分的相关代码:

window=gausswin(128); 
for m=1:length(t)
    for n=1:length(t)  % 窗宽128
        if (m-n)<=0||(m-n)>128
            g=0;
        else 
            g=window(m-n)';
        end
        ST(m,n)=(sb(m,1)+sb(m,2))*g;
    end
end

for n=1:length(t)
    STFT(:,n)=fftshift(fft(ST(:,n)));  % 时频矩阵
end

figure(3)
imagesc([0,2.5],[-fs/2,fs/2],abs(STFT));
axis xy



你可能感兴趣的:(信号处理)