2016-10-27 12 views
0

У меня есть wav-файл в моем коде. Я использовал fft на своем аудиосигнале, чтобы сделать шлем. В основном, что я делаю, это «спектральный анализ в реальном времени». То, что я получаю от своего сигнала, - это двухсторонний спектр. Приведенный здесь код поможет вам понять, что я имею в виду. Советую попробовать. Просто возьмите любой wav-файл и поместите его в свой каталог Matlab/Octave. Переменная «Yres» содержит двухсторонний спектр. Любая идея, как сделать ее односторонней? Я уверен, что это что-то простое, я пропал без вести.Octave/Matlab - Как построить односторонний спектр из двухстороннего спектра

[y,fs]=wavread('UnchainMyHeart.wav'); 
t=linspace(0,length(y)/fs,length(y)); 
plot(t,y) 

%Plotting my signal in the time domain 
fftlen = 4096; 
segl =floor(0.05*fs); 
windowshift=segl/2; 
window=hann(segl); 
window=window.'; 

si=1; 
ei=segl; 
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; 
    figure(f1); 
    plot(f, 20*log10(abs(Yres))); 
    ylim([-90 20]); 
    title("Spectrum of a audio signal"); 
    xlabel("f(Hz)"); 
    ylabel("dB"); 
    grid on; 
    end 

    si=si+windowshift; 
    ei=ei+windowshift; 
end  

ответ

1

вы можете просто построить половину спектра у вас уже есть:

plot(f(1:end/2), 20*log10(abs(Yres(1:end/2)))); 

Или Alternativly вы можете в полной мере один, но по центру:

plot(fftshift(f), 20*log10(abs(fftshift(Yres)))); 
+0

Спасибо за вашу помощь! Я ценю это. –

 Смежные вопросы

  • Нет связанных вопросов^_^