yhc310 发表于 2007-6-26 09:43

请教一个FFT横纵坐标显示问题

大家好!我做了一个FFT变换程序,但是横纵坐标显示有点不对劲,请各位高手执教一下。
程序如下:
这里N表示采样点数即y的点数,fs为采样频率。这里y是一个5Hz的正弦信号y=sin(2*pi*5*t)。
y=abs(y);
y=abs(fft(y));
plot((0:N/2-1)/N*fs,y(1:N/2));
本来应该画出5Hz,但是现在画出的是10Hz,不知道是为什么?还有FFT的纵坐标表示什么意思啊,如何控制才合理呢?

zhangnan3509 发表于 2007-6-26 09:58

回复 #1 yhc310 的帖子

以前本版大版主yangzj和大牛eight专门对FFT做过总结,你可以找找他们的帖子。
我在他们的基础之上稍做了修改,主要差别在没有体现负频率,做的是单边的。
N=1024;
fs=120;
t=(0:N-1)/fs;      % 时间序列
x=2*sin(2*pi*15*t);
figure(1)
subplot(2,1,1);
plot(t, x);
xlabel('t/s');
a=abs(fft(x));   

df = fs/N;            %频域分辨率 Hz
f = (0:N/2-1)*df;       %频域序列
subplot(2,1,2);
plot(f, 2*a(0:N/2-1)/N);
xlabel('f/Hz');
希望指正:@)

[ 本帖最后由 zhangnan3509 于 2007-6-26 15:58 编辑 ]

zhangnan3509 发表于 2007-6-26 10:01

回复 #1 yhc310 的帖子

我的问题是在第一行,和第二行,不知道你要干什么,为什么要这样用两次abs,你想得到什么结果?

[ 本帖最后由 zhangnan3509 于 2007-6-26 10:10 编辑 ]

yhc310 发表于 2007-6-26 10:42

回复 #1 yhc310 的帖子

不好意思,问题没有说的太明白,其实这段程序是截下来的,其实y以前是复数,中间加了改动。第一个abs(y)可以不看,看下面两行就可以了。
y=abs(fft(y));
plot((0:N/2-1)/N*fs,y(1:N/2));

yhc310 发表于 2007-6-26 10:51

回复 #1 yhc310 的帖子

zhangnan3509 兄弟,请问一下你是怎么请教的这两位大牛啊?我刚来这里不久还不是很明白。还有这个版的小波分析大牛是谁啊?

zhangnan3509 发表于 2007-6-26 11:07

回复 #5 yhc310 的帖子

我不是专门请教的,而是他们曾经在帖子上总结过,我又根据自己需要修改了一下。但是我想如果你不清楚的说明自己的意图,仅靠这两行程序是找不到原因的。小波方面,版里有yangzj,zhlong,破凰,以及songzy41 ,还有VibrationMaster博导等等很多人都会给你提出建议的。


但是如果你要发贴求助资料请在置顶贴求助区,按要求发贴,如果是想讨论问题,那在讨论区就没问题了

[ 本帖最后由 zhangnan3509 于 2007-6-26 11:09 编辑 ]

songzy41 发表于 2007-6-26 11:33

本帖最后由 wdhd 于 2016-9-8 13:51 编辑

原帖由 yhc310 于 2007-6-26 09:43 发表
大家好!我做了一个FFT变换程序,但是横纵坐标显示有点不对劲,请各位高手执教一下。
程序如下:
这里N表示采样点数即y的点数,fs为采样频率。这里y是一个5Hz的正弦信号y=sin(2*pi*5*t)。
y=abs(y);
y=abs( ...
在这个程序不能不看笫1行。y是一个5Hz的正弦信号y=sin(2*pi*5*t),而取了y=abs(y)后,便没有负值了,全是正值,不是一个标准的正弦信号,对应的频谱中有主要频率为10Hz。
楼主为什么要在笫1行取绝对值,如果是复数,可用real或imag取实部/虚部。

zhangnan3509 发表于 2007-6-26 12:04

回复 #7 songzy41 的帖子

还是您把问题看得透彻!

VibrationMaster 发表于 2007-6-26 14:02

由于取绝对值,这种非线性操作,使得原来的正弦信号,变成半波信号。相应的周期也缩短了一半,这样信号中就出现了非常强的10Hz成分。

wy558558558 发表于 2007-6-26 14:19

zhangnan的程序是单边幅值谱的话,是不是少乘以个2?就是a=abs(fft(x))*2;:loveliness:

zhangnan3509 发表于 2007-6-26 14:24

回复 #10 wy558558558 的帖子

你好好看看倒数第二行:@)

wy558558558 发表于 2007-6-26 14:56

2写前面了没看见不好意思:loveliness:

wy558558558 发表于 2007-6-26 15:12

还有请问zhangnan你的频率序列中1:N/2和0:N/2-1.是把0频率去掉的意思吗?

yangzj 发表于 2007-6-26 15:30

本帖最后由 wdhd 于 2016-9-8 13:53 编辑

原帖由 zhangnan3509 于 2007-6-26 09:58 发表
以前本版大版主yangzj和大牛eight专门对FFT做过总结,你可以找找他们的帖子。
我在他们的基础之上稍做了修改,主要差别在没有体现负频率,做的是单边的。
N=1024;
fs=120;
t=(0:N-1)/fs;      % 时间序列 ...

版主应该把f改成 f=(0:N/2-1)*df
另外有个大家可能都没留意的问题,就是做双边谱的时候直流量是不用乘2的.

zhlong 发表于 2007-6-26 15:32

回复 #14 yangzj 的帖子

因为直流量的频率在0点,刚好在正负的中间,没有被分为两半,可以这样理解么?
页: [1] 2 3
查看完整版本: 请教一个FFT横纵坐标显示问题