2014-12-13 108 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)));