声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 5761|回复: 16

[FFT] 求助:matlab给出的fft例子的问题

[复制链接]
发表于 2007-6-2 16:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
matlab中给出的fft例子如下:
t = 0:0.001:0.6;
x = sin(2*pi*50*t)+sin(2*pi*120*t);
y = x + 2*randn(size(t));
plot(1000*t(1:50),y(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)')
Y = fft(y,512);
Pyy = Y.* conj(Y) / 512;
f = 1000*(0:256)/512;
plot(f,Pyy(1:257))
title('Frequency content of y')
xlabel('frequency (Hz)')

画出的波形见附件
在画出的频谱图中x轴表示频率,y轴表示的什么意思?是能量吗?还是信号的幅值?
如果是幅值的话,50hz和120hz的信号幅值不是应该为1吗?为什么是70呢?
如果我想要它的y轴表示幅值,程序应该怎么修改呢?
不好意思,刚刚接触fft,谢谢大家的帮助!

[ 本帖最后由 sxinwei 于 2007-6-2 16:23 编辑 ]
fft.jpg
fft.jpg

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2007-6-2 16:31 | 显示全部楼层

回复 #1 sxinwei 的帖子

请搜索本版FFT相关帖子
发表于 2007-6-2 16:51 | 显示全部楼层
发表于 2007-6-2 17:08 | 显示全部楼层
根据上面链接的那个帖子中Songzy的回贴,为方便对FFT幅值和能量的理解,将你的问题改成如下:

t = 0:0.001:1-0.001;
x = 2*sin(2*pi*50*t)+sin(2*pi*120*t);
y = x ;
subplot(311);
plot(1000*t(1:50),y(1:50))
title('时域波形')

Y = fft(y,1000);
P= abs(Y)*2/1000;%幅值
Pxx=P.*P;%能量
f = 1000*(0:500)/1000;
subplot(312);
plot(f,P(1:501))
title('幅值谱')

subplot(313);
plot(f,Pxx(1:501))
title('能量谱')
xlabel('frequency (Hz)')
2.gif
发表于 2007-6-2 17:27 | 显示全部楼层
添加噪声的情况:
t = 0:0.001:1-0.001;
x = 2*sin(2*pi*50*t)+sin(2*pi*120*t);
y = x+2*randn(size(t)) ;
subplot(311);
plot(1000*t(1:50),y(1:50))
title('时域波形')
Y = fft(y,1000);
P= abs(Y)*2/1000;%幅值
Pxx=P.*P;%能量
f = 1000*(0:500)/1000;
subplot(312);
plot(f,P(1:501))
title('幅值谱')
subplot(313);
plot(f,Pxx(1:501))
title('能量谱')
xlabel('frequency (Hz)')
3.gif

评分

1

查看全部评分

发表于 2007-6-2 20:50 | 显示全部楼层
matlab有的版本帮助fft纵轴是错的,少除了N/2,所以很大
发表于 2007-6-4 15:24 | 显示全部楼层

回复 #1 sxinwei 的帖子

呵呵,还是不太明白,请问MATLAB中的这个例子纵坐标对不?还是整不明白70怎么回事,我在用MATLAB生成随机序列
t = 0:0.001:0.6;
x = sin(2*pi*50*t)+sin(2*pi*120*t);
y = x + 2*randn(size(t));
将数据代入一个用的FORTRAN程序中计算其对数普谱,结果如图,纵坐标是 20log10(),峰值在20多点

[ 本帖最后由 行者无疆TJ 于 2007-6-4 15:47 编辑 ]
1.JPG
发表于 2007-6-4 15:38 | 显示全部楼层

回复 #7 行者无疆TJ 的帖子

请仔细看楼主的帖子
发表于 2007-6-4 15:56 | 显示全部楼层
还是看不明白呀,请指教。花了好长时间也没弄明白,这一学期就为了验证我的那个FORTRAN程序是正确的,想了好多办法都没成功,急死我了
发表于 2007-6-4 15:59 | 显示全部楼层

回复 #9 行者无疆TJ 的帖子

楼主的意思是纵坐标70是不对的
发表于 2007-6-5 11:01 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-8 14:08 编辑

  呵呵,谢谢,再请教一下:MATLAB中关于CSD的一个例题
  randn('state',0);
  h = fir1(30,0.2,rectwin(31));
  h1 = ones(1,10)/sqrt(10);
  r = randn(16384,1);
  x = filter(h1,1,r);
  y = filter(h,1,x);
  csd(x,y,1024,10000,triang(500),0,[])
  其最后的纵坐标是DB,也就是应该为对数谱,但我用另一程序算出来的对数谱20LOG10()纵坐标大小相差两倍。不知为何?是20的原因吗?
  [ 本帖最后由 zhlong 于 2007-6-5 11:15 编辑 ]
2.JPG
发表于 2007-6-5 11:21 | 显示全部楼层

回复 #11 行者无疆TJ 的帖子

会不会是单边谱和双边谱的问题?
发表于 2007-6-5 11:28 | 显示全部楼层

回复 #12 zhlong 的帖子

但是随机序列是一样的呀,您的意思CSD的计算也是按20LOG的?如果我的主要目的是为了验证一个计算相关函数和谱的程序是正确的,您有什么好的见意吗?之前是想以星谷胜的随机振动分析一书为参考,验证一个有限带宽白噪声,但根据白噪声谱获得随机序列有点问题,所以最后返回谱计算时其数值大小也存在问题

[ 本帖最后由 行者无疆TJ 于 2007-6-5 11:35 编辑 ]
发表于 2007-6-5 12:44 | 显示全部楼层

回复 #12 zhlong 的帖子

csd作出的图有三条线,分别是什么呀?
发表于 2007-6-5 12:48 | 显示全部楼层

回复 #14 行者无疆TJ 的帖子

没用过这个函数
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-9 04:49 , Processed in 0.075327 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表