2014-12-13 4 views
0

Предположим, что я успешно произвел Односторонняя спектр мощности следующим образом:Plotting частотного спектра с использованием Matlab с функцией удержания

X_mags = abs(fft(signal)); 
bin_vals = [0 : N-1]; 
fax_Hz = bin_vals*fs/N; 
N_2 = ceil(N/2); 
plot(fax_Hz(1:N_2), 20*log10(X_mags(1:N_2)));` 

теперь я хочу, чтобы построить второй график на верхней части первой:

hold on; 

И наконец, я выполняю анализ LPC по сигналу и вычисляю частотную характеристику. Частотная характеристика должна быть построена на вершине спектра мощности, так:

[a, g] = lpc(signal,N); 
[h,f] = freqz(b,a,N,fs); 
plot(?); 

Для простоты предположим, что параметры все правильно даны, как я должен написать функцию участок для иметь правильное отображение частотной характеристики? Простой график (f) не работает.

Может кто-нибудь объяснить, почему? Благодаря

ответ

0

Простой plot(f) пытается построить вектор частоты, не так ли?

Проверьте код ниже:

X_mags = abs(fft(signal)); 
bin_vals = [0 : N-1]; 
fax_Hz = bin_vals*fs/N; 
N_2  = ceil(N/2); 

[a, g] = lpc(signal,N); 
[h, f] = freqz(b, a, N, fs); 

figure, 

hold on, 
plot(f, 20*log10(abs(h)), 'r'); 
plot(fax_Hz(1:N_2), 20*log10(X_mags(1:N_2))); 
title('Frequency Spectrum'); 
xlabel('Frequency (Hz)'); 
ylabel('Amplitude (dB)'); 
legend('Frequency Response', 'Single-sided Power spectrum') 

Btw, есть функция MATLAB db() для расчета децибел. Это может быть полезно.

+0

Я попробовал, но график lpc до fs/2? В чем причина этого? – user3488736

+0

Вы написали «N_2 = ceil (N/2)», поэтому ... – mehmet

+0

И есть такая команда: 'plot (fax_Hz (1: N_2), 20 * log10 (X_mags (1: N_2))); ' – mehmet

0

Ответ h является сложным, так что вы хотите, чтобы получить величину отклика с помощью умножения на комплексно сопряженное .:

plot(f, 10*log10(h.*conj(h))); 

Обратите внимание на использование 10 * log10, потому что вышеупомянутая операция измеряет амплитудный отклик в h.

Или, если вы меньше заинтересованы в том, педантично работать с комплексными числами, вы можете просто взять абсолютное значение комплексных значений, будучи уверенным, что 20 * log10, потому что abs не вяжется значения

plot(f, 20*log10(abs(h)));