我正在对我的WAV文件进行短时傅里叶变换。基本上我正在做的是实时光谱分析。要理解,我的意思是,我建议你尝试我的代码。只需将任何WAV文件放入matlab / octave目录即可。无论如何,问题是如何从我的音频信号中获得幅度谱?顺便说一下,我的单侧频谱信号包含在变量" Yres"中。
%% OCTAVE-Program
[y,fs]=wavread('UnchainMyHeart.wav');
%Reading wav-file
t=linspace(0,length(y)/fs,length(y));
%Creating time vector
plot(t,y) %Drawing signal in the time domain
fftlen = 4096;
segl =floor(0.05*fs); %Length of Segment
windowshift=segl/2;
window=hann(segl); %Optimizing hanning-function in a variable
window=window.';
si=1; %Start Index
ei=segl; %End Index
AOS= length(y)/windowshift - 1;
f1=figure;
f=0:1:fftlen-1;
f=f/(fftlen-1)*fs;
Ya=zeros(1,fftlen);
plot(f,Ya),axis([0 fs -90 20])
grid on
n=0;
for m= 1:1:AOS
y_a = y(si:ei);
y_a= y_a.*window;
Ya=fft(y_a, fftlen);
n=n+1;
if n==1
Yres=abs(Ya);
else
Yres=Yres+abs(Ya);
end
if n=10
Yres=Yres/10;
n=0;
drawnow; %Updating the frames
figure(f1);
plot(f(1:end/2), 20*log10(abs(Yres(1:end/2))));
ylim([-90 20]);
title("One-sided Spectrum of audio signal");
xlabel("f(Hz)");
ylabel("dB");
grid on;
end
si=si+windowshift; %Update Start Index
ei=ei+windowshift; %Update End Index
end