短时傅立叶变换的代码程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

短时傅立叶变换试验

为了克服傅立叶变换的时频局部化方面的不足,也是为了对时域信号作局部分析,于1946年提出了窗口傅立叶变换(简记为WFT )。

WFT 的公式形式

()(,)()()jwt R Gf w b f t w t b e dt -=-⎰()(,)()()jwt R

Gf w b f t w t b e dt -=-⎰ 其中,实函数w(t)为是时窗函数,窗函数w(t)具有较强的衰减性,所以要精心选择窗函数。

下面是一个短时傅立叶变换的代码程序

function timefreq(x,Nw,window)

% 待分析信号,行向量,Nw 时窗宽度

subplot(2,2,1);

plot(real(x));%描绘待分析信号

X=fft(x);%快速傅里叶变换

X=fftshift(X);%调整0频位置

subplot(2,2,2);

plot(abs(X));%描绘幅度谱

Lap=Nw/2;%重叠宽度

Tn=(length(x)-Lap)/(Nw-Lap);%计算分段数目

'

nfft=2^ceil(log2(Nw));%做fft 的点数

TF=zeros(Tn,nfft);%时频矩阵

for i=1:Tn

if(strcmp(window,'rec'))

Xw=x((i-1)*10+1:i*10+10);%加窗矩形处理

elseif(strcmp(window,'Hamming'))

Xw=x((i-1)*10+1:i*10+10).*Hamming(Nw)';%加hamming 处理

elseif(strcmp(window,'Blackman'))

(

Xw=x((i-1)*10+1:i*10+10).*Blackman(Nw)';%加black 处理

elseif(strcmp(window,'Gauss'))

Xw=x((i-1)*10+1:i*10+10).*Gauss(Nw)';%加Gauss 处理

else

return;

end

temp=fft(Xw,nfft);%求fft

temp=fftshift(temp);%调整0频位置

TF(i,:)=temp;%保存分段fft 结果

end

%绘制时频分析结果

subplot(2,2,3);

fnew=((1:nfft)-nfft/2)/nfft;

tnew=(1:Tn)*Lap;

[F,T]=meshgrid(fnew,tnew);

mesh(T,F,abs(TF));

|

xlabel('n');ylabel('w');zlabel('Gf'); subplot(2,2,4);

contour(T,F,abs(TF));

xlabel('n');ylabel('w');

例子:clc ;clear;

N=400;

x=zeros(1,N);

T=0:N-1;

x=exp(j*4*pi*(T/80).^2);

figure(1);

timefreq(x,20,’rec’);

figure(2);

timefreq(x,20,’Blackman’);

相关文档
最新文档