假设我已成功生成单面功率谱,如下所示:
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 :(得分:0)
响应h
很复杂,因此您需要通过乘以其复共轭来获得响应的大小。:
plot(f, 10*log10(h.*conj(h)));
请注意使用10 * log10,因为上面的操作会对h
中保持的幅度响应进行平方。
或者,如果你对使用复数进行迂腐不太感兴趣,你可以只取复数值的绝对值,确保20 * log10,因为abs
不对数值求平方
plot(f, 20*log10(abs(h)));
答案 1 :(得分: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()
。这可能有用。