タイトルが混乱している場合は、事前にお詫び申し上げます。基本的に、私はオーディオファイルを持っています。私は50msごとにSTFTを実行します。私のファイルは約11秒(10.8526秒)で、これはサウンドトラックから切り離されています。 Btw、私はSTFTのMatlabで組み込み関数を使用することはできません。私はそれがはるかに容易であることを認識しています。とにかく、コードを実行した後、50msごとにSTFTが実行され、画像がプロットされています。 今私は3つの異なるプロットでそれを分離したいと思います。最初のプロットでは、低い周波数(0-300Hz)、2番目のプロット中間周波数(300-5kHz)、最後のプロットでは高い周波数(5Khz-fs/2)です。 fs = 44100 - >以下のコードでさらに説明します。どのように私は今エリアを定義することができますか?3つの異なる周波数領域でオーディオファイルを分割する
%AUDIO-FILE
%______________________________________________________
[y,fs]=audioread('UnchainMyHeart.wav');
% audioread = Reads Audio file
% y = A vector, which contains the audio signal
% fs = sample rate
% 'UnchainMyHeart' = Audio file
%______________________________________________________
% Paramter for the real-time spectral-analysis
%______________________________________________________
NFA=2;
% Every second picture is being plotted
% Don't need every picture
t_seg=0.05;
%Length of the audio signal on which is a STFT performed
fftlen = 4096;
% Length of the FFT, frequency resolution
TPF= 300;
BPF= 5000;
HPF= 22050;
% Trying to define the frequencies areas
% Isn't working right now
LOW=((TPF*fftlen)/fs);
MEDIUM=((BPF*fftlen)/fs);
HIGH=((HPF*fftlen)/fs);
% Contains the number of FFT points in the frequency
%_______________________________________________________
segl =floor(t_seg*fs);
windowshift=segl/2;
window=hann(segl);
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);
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==NFA
Yres=Yres/NFA;
n=0;
drawnow;
%Updates the graphical objects which are being plotted every 50ms
figure(f1);
plot(f(1:end/2), 20*log10(abs(Yres(1:end/2))));
ylim([-90 50]);
title('Spektrum of audio signal');
xlabel('f(Hz)');
ylabel('dB');
grid on;
end
si=si+windowshift;
% Updating Start Index
ei=ei+windowshift;
% Updating End index
end