短时傅里叶变换时频谱图画法【求助】
本帖最后由 hitdely 于 2011-2-25 17:00 编辑下面的程序是网上照的 我想通过短时傅里叶变换得到时频谱图 应该怎么办 请各位高手指点 万分感谢
clear all;
close all;
fs=3200;%采样频率
Ts=1/fs;%采样时间间隔
TT=0.4;%终止时间
t=0:Ts:TT;%采样时刻
N=fs*TT;%采样点
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 产生信号 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x=zeros(size(t));
%x1=sin(2*pi*50*t);x2=sin(2*pi*100*t)+sin(2*pi*50*t);%采样频率fs=3200;Ts=1/fs;t=0:Ts:0.4;
%x=;
x1=sin(2*pi*50*t);x2=sin(2*pi*200*t);
x=;
% x=sin(2*pi*50*t)+sin(2*pi*100*t)+sin(2*pi*240*t)+sin(2*pi*400*t);
%Generate two sine signal with different frequencies.
% x(50:150)=cos(pi*(t(50:150)-50)/10);
% x(250:350)=cos(pi*(t(250:350)-250)/20);
% x=wavread('D:\MATLAB7\123\XP_KaiShi.wav');
figure;
subplot(221);
plot(x);
title('信号波形图'); %图名
xlabel('时间'); %x轴
ylabel('振幅'); %y轴
% axis([ 0 800 -0.11 0.1]);
grid;
%%%%%%%%%%%%%%%%%%%%%%%%%%% 短时傅里叶变换 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Nw=20; %窗函数长 window length
L=Nw/2; %窗函数每次移动的样点数
Ts=round((N-Nw)/L)+1; %计算把数据x共分成多少段
nfft=128; %FFT的长度
TF=zeros(Ts,nfft);%将存放三维谱图,先清零
for i=1:Ts
xw=x((i-1)*L+1:i*L+L); %取一段数据
temp=fft(xw,nfft); %FFT变换
temp=fftshift(temp); %频谱以0频为中心
TF(i,:)=temp; %把谱图存放在TF中
end
subplot(222);
mesh(abs(TF));%三维绘图
title('STFT');
xlabel('时间');
ylabel('频率');
%%%%%%%%%%%%%%%%%%%%%%%%%% 画等高图 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
subplot(223);
contour(abs(TF));
% plot(abs(TF));
title('等高图');
xlabel('时间');
ylabel('频率');
axis equal ; %纵、横坐标轴采用等长刻度 set the axes aspect ratio
%axis();
grid;
页:
[1]