簡體   English   中英

使用具有保持功能的Matlab繪制頻譜圖

[英]Plotting Frequency Spectrum using Matlab with hold function

假設我已經成功生成了單邊功率譜,如下所示:

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)不起作用。

有人可以解釋為什么嗎? 謝謝

響應h很復雜,因此您需要通過乘以其復共軛來獲得響應的大小。

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

請注意使用10 * log10,因為上面的運算將保持在h的幅度響應平方。

或者,如果您對處理復數不太感興趣,則可以取復數值的絕對值,並確保為20 * log10,因為abs不會使數值平方

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

一個簡單的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() 那可能有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM