matlab 短时傅立叶变换,如何进行短时傅里叶变换
参考一下这个:time1=0:1:200;t1=201:1:400;time2=401:1:600;t2=601:1:800;time3=801:1:1000;signal1=sin(500*t1); %frequency1 = 500/(2*pi)plot(t1,signal1);xlabel('Time (seconds)');ylabel('Magnitude');signal2=sin(5
参考一下这个:
time1=0:1:200;
t1=201:1:400;
time2=401:1:600;
t2=601:1:800;
time3=801:1:1000;
signal1=sin(500*t1); %frequency1 = 500/(2*pi)
plot(t1,signal1);
xlabel('Time (seconds)');
ylabel('Magnitude');
signal2=sin(50*t2); %frequency2 =50/(2*pi)
figure,
plot(t2,signal2);
xlabel('Time (seconds)');
ylabel('Magnitude');
signal=[zeros(size(time1)) signal1 zeros(size(time2)) signal2 zeros(size(time3))];
figure,
time=0:1:1000;
plot(time,signal);
xlabel('Time (seconds)');
ylabel('Magnitude');
x=size(signal);
p=round(x(2)/10);
X=signal;
step_dist=10;
window_length=p;
LENX = length(X);
IMGX = ceil(LENX/step_dist);
if (window_length/2 == round(window_length/2))
IMGY = (window_length/2) + 1;
else
IMGY = ceil(window_length/2);
end
stft_plot = zeros(IMGX,IMGY);
X = [zeros(1,window_length/2) X zeros(1,window_length/2)]; % padding the signal with zeros
WIN = ones(1,window_length);
iter = 0;
for i = 1:step_dist:LENX
iter = iter + 1;
windowing = X(i:(i + window_length - 1)); % making window
signal_window = windowing.* WIN; %y(t)=h(t)*w(n-t)
signalout = abs(fft(signal_window, window_length)); %fft of y(t) gives us stft
stft_plot(iter,:) = signalout(1:IMGY);
end
%sampling_rate=10;
freq = 10;
figure,
imagesc([0:(step_dist):(LENX-1)],[0:(freq):freq*10],stft_plot');
xlabel('Time (seconds)');
ylabel('Frequency (Hz)');
axis('xy')
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)