假设我成功地生成了如下单边功率谱:
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)是行不通的。
谁能解释一下原因吗?谢谢
发布于 2014-12-13 14:31:11
一个简单的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()来计算分贝。那可能会有用。
发布于 2014-12-13 14:30:11
响应h是复杂的,因此您需要通过它的复共轭乘法得到响应的大小。
plot(f, 10*log10(h.*conj(h)));注意使用10*log10 10,因为上面的操作与h中保持的振幅响应相乘。
或者,如果您对处理复数不太感兴趣,您可以只取复数的绝对值,确保为20* you 10,因为abs没有将值平方
plot(f, 20*log10(abs(h)));https://stackoverflow.com/questions/27459673
复制相似问题