2014-12-13 168 views
0

想我已經成功地產生了單面功率譜如下:繪製利用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') 

順便說一句,存在用於計算分貝一個MATLAB函數db()。這可能是有用的。

+0

我試過了,但lpc的情節是直到fs/2?這是什麼原因? – user3488736 2014-12-13 15:29:21

+0

你寫過'N_2 = ceil(N/2);'這就是爲什麼.. – mehmet 2014-12-13 15:34:41

+0

並且有這樣一個命令:'plot(fax_Hz(1:N_2),20 * log10(X_mags(1:N_2)) );' – mehmet 2014-12-13 15:37:33

0

響應h是複雜的,所以你要通過它的複共軛:

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

注意通過乘法獲得響應的大小採用10 * LOG10因爲在以上操作平方振幅響應保持在h

或者,如果你在爲迂腐關於與複數的工作不感興趣,你可以只取復值的絕對值,是確保20 * LOG10因爲abs不方值

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