barplot画直方图,有的自动生成横坐标,有的却没有,为什么

如题所述

没有下载你的附件,下面是我自己的经验,虽然原理也不太清楚,如果有说错的大虾补充,不过结果没有大问题,举个简单的例子吧。
假设我们有个时间序列

t=0:0.01:5;
a=sin(2*pi*t)+sin(6*pi*t);
画出来看看
plot(t,a);
这个信号在谱空间应该有两个峰值,分别对应频率1和3,峰值大小都是1。

n=length(t); % length of signal
x=fft(a)/n; % normalized fft
f=(0:n-1)/t(end); % corresponding frequency

画出结果
bar(f,abs(x));
会看到关于中心轴对称的图像。这是因为这样求出来的是双侧谱,频率是有正有负,但是我们一般只关心正频率。所以我们要截断一半。

cutoff=floor(n/2); % cut into two halves
bar(f(1:cutoff),2*abs(x(1:cutoff)));% plot
xlim([0 f(cutoff)]);

这个地方乘以2的原因如上所述已经可以猜到了,原本的能量在正负频率都有分布,但是因为只截取了正频率,所以负频率的能量损失掉了,因此要将谱折叠过来,所有振幅都乘以2就是了。

放大关心的部分看看
xlim([0 4]);
温馨提示:答案为网友推荐,仅供参考
相似回答