声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2514|回复: 11

[FFT] 频谱分析结果怎么不正确那?

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

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

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

x
我用下面的程序进行频谱分析,按说在频谱图上当频率等于4*10^6时候,幅度应该是1.但是结果确对应不起来?大家帮忙看看啊!
dt=2e-8;
t=0:dt:(1/4)*1e-6;
p=sin(2*4e6*pi*t);
y1=fft(p,500);
N1=length(y1)
y11=2*abs(y1)/N1;
f=1/dt;
f1=(0:N1/2-1)*f/length(y1);
plot(f1,y11(1:N1/2))
title('频谱图'),xlabel('频率'),ylabel('幅度')
grid on
回复
分享到:

使用道具 举报

发表于 2007-4-19 07:17 | 显示全部楼层
y11=2*abs(y1)/N1中除的不应是FFT变换的长度,而应信号p的长度,改为
N=length(p);
。。。
y11=2*abs(y1)/N;
得到的谱图的幅值便为1了。
 楼主| 发表于 2007-4-19 09:47 | 显示全部楼层
按照songzy41 先生的意思做了修改,幅度是1了.但是对应的频率却不是4*10^6Hz.而在3.4*10^6的地方~怎么回事那?
重新曝光 {2157A8BE-5D62-4DC9-9D6A-7124AD42FF7A}.jpg
 楼主| 发表于 2007-4-19 10:22 | 显示全部楼层
还有下面的程序中y11=abs(Y)*2/N;除的就是N而不是p的长度,怎么画的幅度是1那?而且和频率50 对应的很好!
N=1000;
t=0:0.001:3;
p=sin(2*pi*50*t);
y1=fft(p,N);
y11=abs(Y)*2/N;
f=1000*(0:N/2-1)/N;
plot(f,y11(1:N/2)); grid;
{0CEF9636-FD32-40F1-B2C7-821F8DC8FFB7}.jpg
发表于 2007-4-19 10:38 | 显示全部楼层
我也做过这样的例子
我的是这样的:对一个信号比如采样500个点,每个周期采10个,也就是说fs=10f;
如果做FFT变换fft(xn,500);使用和采样点数相同的点数做变换,结果的峰值正确,这时,
变换的点数和采样的点数同是周期点数的整数倍,结果和理想的一样。
可是,要是不是整数倍,加入采用采样512个点,那么同样的使用512个点进行变换,得到的
不会有理想的峰值。会得到小于理想的。不过点数很多的情况下似乎还会有理想的。
而,要是变换的点数是采样点数的整数倍,加入采样500,变换使用的是1000,那么结果得到的
单边谱的峰值是理想的一半。
这是自己做的时候的结果,应该还是由于不是整周期的结果影响的。
我给自己的解释就这样,不是什么发现。
发表于 2007-4-19 15:39 | 显示全部楼层
原帖由 sjh821 于 2007-4-19 10:22 发表
还有下面的程序中y11=abs(Y)*2/N;除的就是N而不是p的长度,怎么画的幅度是1那?而且和频率50 对应的很好!
N=1000;
t=0:0.001:3;
p=sin(2*pi*50*t);
y1=fft(p,N);
y11=abs(Y)*2/N;
f=1000*(0:N/2-1)/N;
plo ...

我上一个贴子是针对你前一个程序的。因为在前一个程序中,p数据长仅13,而作500点的FFT,在作FFT时补了0。所以在作FFT时数据补了0的情况下,除法要用p数据的长度。而在这次的程序中,p数据在作FFT时没有补0,故除法中用FFT变换时的长度就可以了。

评分

1

查看全部评分

 楼主| 发表于 2007-4-19 15:59 | 显示全部楼层
作FFT后,计算的结果频率怎么对应不起来?也就是幅度是1的地方,对应的频率应该是p=sin(2*4e6*pi*t)中的4e6!怎么不是4e6那?
 楼主| 发表于 2007-4-19 16:01 | 显示全部楼层
我图上标示的0.34*10^7?
发表于 2007-4-19 16:02 | 显示全部楼层
原帖由 sjh821 于 2007-4-19 15:59 发表
作FFT后,计算的结果频率怎么对应不起来?也就是幅度是1的地方,对应的频率应该是p=sin(2*4e6*pi*t)中的4e6!怎么不是4e6那?



频率和时间的对应关系请参看本版精华贴
发表于 2007-4-19 18:55 | 显示全部楼层
原帖由 sjh821 于 2007-4-19 09:47 发表
按照songzy41 先生的意思做了修改,幅度是1了.但是对应的频率却不是4*10^6Hz.而在3.4*10^6的地方~怎么回事那?

我细看了你的程序,为什么笫1个程序计算出结果是3.4*10^6,而不是4*10^6Hz,其原因是p的数据太少,13个数据都不能完整地描述出一个周期的正弦波。而在笫2个程序中,500点的FFT,将近半秒,有25个周期。在正弦波FFT分析中,分析窗内至少要有3-4个周期。例如还是拿笫1个程序来看,把t改为
t=0:dt:1e-6;
分析结果便有如下图,最大值在4*10^6Hz处。

信号图和谱图

信号图和谱图

评分

1

查看全部评分

 楼主| 发表于 2007-4-20 15:08 | 显示全部楼层
首先感谢songzy41 先生的指教!我看在论坛上songzy41 先生很活跃,帮忙解决了很多的问题!
这里我要说的是,我的程序就想发射一个周期的脉冲,若把t改为t=0:dt:1e-6;则成4个周期的了.我想是不是可以把dt改小一点,比如改成dt=2e-9,或者更小的数值.请问这样采样频率是不是就增加了?对结果有什么影响?dt有什么限制?
发表于 2007-6-4 13:51 | 显示全部楼层

回楼主

只针对你的原程序,修改N值和变换长度后,结果不管是幅值还是频率,都对应得很好
至于什么周期脉冲,呵呵,我是学化学的……

dt=2e-8;
N=8000;                      %感觉你原来的数据量太少,所以加大了点
t=dt:dt:N*dt;
p=sin(2*4e6*pi*t);
y1=fft(p,N);                 %这里也是,加大了变换长度
y11=2*abs(y1)/N;
f=1/dt;
f1=(0:N-1)*f/N;
plot(f1(1:N/2),y11(1:N/2))
title('频谱图'),xlabel('频率'),ylabel('幅值')
grid on

[ 本帖最后由 wufashengcun 于 2007-6-4 13:55 编辑 ]
未命名.jpg

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-6-3 04:02 , Processed in 0.071437 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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