首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用保持函数Matlab绘制频谱图

用保持函数Matlab绘制频谱图
EN

Stack Overflow用户
提问于 2014-12-13 14:07:54
回答 2查看 2.5K关注 0票数 0

假设我成功地生成了如下单边功率谱:

代码语言:javascript
复制
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)));`

现在,我想在第一个图的上面绘制第二个图:

代码语言:javascript
复制
hold on;

最后对信号进行了LPC分析,计算了信号的频率响应。频率响应应绘制在功率谱之上,因此:

代码语言:javascript
复制
[a, g] = lpc(signal,N);
[h,f] = freqz(b,a,N,fs);
plot(?);

为了简单起见,让我们假设参数都是正确给定的,我应该如何编写绘图函数才能正确显示频率响应呢?简单的情节(F)是行不通的。

谁能解释一下原因吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-13 14:31:11

一个简单的plot(f)试图绘制频率矢量,不是吗?

检查下面的代码:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-12-13 14:30:11

响应h是复杂的,因此您需要通过它的复共轭乘法得到响应的大小。

代码语言:javascript
复制
plot(f, 10*log10(h.*conj(h)));

注意使用10*log10 10,因为上面的操作与h中保持的振幅响应相乘。

或者,如果您对处理复数不太感兴趣,您可以只取复数的绝对值,确保为20* you 10,因为abs没有将值平方

代码语言:javascript
复制
plot(f, 20*log10(abs(h)));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27459673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档