lixiaoming_eric 发表于 2009-6-2 15:23

请教关于FFT变换后能量谱幅度值问题

今天用三个幅度值相同的不同频率的正弦波,合成了一个信号,对该信号进行FFT变换后,求其能量谱,为什么得到的信号能量幅度值不同呢?
程序如下:
clc;
clear;
t=0:0.001:1;
f1=25;
f2=105;
f3=205;
x=sin(2*pi*t*f1)+sin(2*pi*t*f2)+sin(2*pi*t*f3);
fx=abs(fft(x,1024));
plot(fx);

请高手赐教,谢谢了~

lixiaoming_eric 发表于 2009-6-2 15:33

刚刚将FFT点数改为2048后,这种现象就几乎消失了,是因为FFT点数少的原因吗?

yelv123 发表于 2009-6-2 16:41

本帖最后由 wdhd 于 2016-9-19 11:16 编辑

原帖由 lixiaoming_eric 于 2009-6-2 15:33 发表
刚刚将FFT点数改为2048后,这种现象就几乎消失了,是因为FFT点数少的原因吗?
fx=abs(fft(x,1024))*2/1024;

ChaChing 发表于 2009-6-2 18:16

除楼上说的, 尚有频域在f1/f2/f3上刚好无点, 时域点数不足补零!
clc; clear;
t=0:0.001:3; f1=25; f2=105; f3=205;
x=sin(2*pi*t*f1)+sin(2*pi*t*f2)+sin(2*pi*t*f3);
nn=1024; fx=abs(fft(x,nn))*2/nn; ff=;
plot(ff,fx,'o-'); grid on;

lixiaoming_eric 发表于 2009-6-3 09:15

谢谢回复~明白了,嘿嘿,感谢~

jidianwangliang 发表于 2009-6-4 09:46

回复 板凳 yelv123 的帖子

fx=abs(fft(x,1024))*2/1024
这是不是求功率谱了
lz要的是能量谱啊

jidianwangliang 发表于 2009-6-4 09:54

回复 楼主 lixiaoming_eric 的帖子

能量谱是在w+dw之间信号能量的分布,幅值不一样就对了吧
t=0:0.001:1;
f1=25; sin(2*pi*t*f1)+
f2=105; sin(2*pi*t*f1)
f3=205; sin(2*pi*t*f2)+sin(2*pi*t*f3)
三个信号的能量是不一样的吧
求出在f1 f2 f3能量谱幅值应该不同

ChaChing 发表于 2009-6-4 18:28

说真的, 一直不清楚功率谱/能量谱的明确定义!
的确正弦信号若以psd(power spectrum density)表示频谱, 会因使用fft长度不同, 其值会有所差异!
但若画在同一张(使用相同fft长度), 其值也应该相当! 除非有4F的问题!

jidianwangliang 发表于 2009-6-4 21:45

自己有点想当然了
的确如chaching所说的,尚有频域在f1/f2/f3上刚好无点,

我想解释一下,还望指正,
x=sin(2*pi*t*f1)+sin(2*pi*t*f2)+sin(2*pi*t*f3)相当于三个正弦信号(无限长)乘以了一个矩形窗,然后做傅里叶变换,
也就是在25 105 205处的三个sinc函数的相加,那么sinc函数的旁瓣也就是等于零的点的间距为2*pi/T(T为矩形窗的长度,本例中为1),即间距为2*pi,转化为赫兹就是1赫兹,f1 f2 f3两两之间的距离为80和100均为1的倍数,所以叠加后在三个频率处的幅值相等,
在采样,周期延拓就形成了fft,则在三个频率出的幅度值相等,若将f3改为205.5,再试试
clc;
clear;
t=0:0.001:1-0.001;
f1=25;
f2=105;
f3=205.5;
x=sin(2*pi*t*f1)+sin(2*pi*t*f2)+sin(2*pi*t*f3);
fx=abs(fft(x,1000));
plot(fx);

一家之言,望高手们指教

evans_xu 发表于 2009-7-1 16:04

楼主的频率分辨力是1000/1001,约等于0.999Hz,这样不管是基频的多少倍也不能与25,105,205重合,将采样点数改为1000后,频率分辨力为1,这样就能与25,105,205重合,就可以看到它们的幅值都为1.
程序为:
clc;
clear;
t=0.001:0.001:1;
f1=25;
f2=105;
f3=205;
x=sin(2*pi*t*f1)+sin(2*pi*t*f2)+sin(2*pi*t*f3);
fx=abs(fft(x))*2/length(t);
fx=fx(1:501);
f_tem=linspace(0,500,501);
plot(f_tem,fx);

please 发表于 2009-8-5 19:28

楼上的图中幅值怎么是1???不是0.25吗?

[ 本帖最后由 please 于 2009-8-5 19:31 编辑 ]
页: [1]
查看完整版本: 请教关于FFT变换后能量谱幅度值问题