频谱分析结果怎么不正确那?
我用下面的程序进行频谱分析,按说在频谱图上当频率等于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 y11=2*abs(y1)/N1中除的不应是FFT变换的长度,而应信号p的长度,改为
N=length(p);
。。。
y11=2*abs(y1)/N;
得到的谱图的幅值便为1了。 按照songzy41 先生的意思做了修改,幅度是1了.但是对应的频率却不是4*10^6Hz.而在3.4*10^6的地方~怎么回事那? 还有下面的程序中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; 我也做过这样的例子
我的是这样的:对一个信号比如采样500个点,每个周期采10个,也就是说fs=10f;
如果做FFT变换fft(xn,500);使用和采样点数相同的点数做变换,结果的峰值正确,这时,
变换的点数和采样的点数同是周期点数的整数倍,结果和理想的一样。
可是,要是不是整数倍,加入采用采样512个点,那么同样的使用512个点进行变换,得到的
不会有理想的峰值。会得到小于理想的。不过点数很多的情况下似乎还会有理想的。
而,要是变换的点数是采样点数的整数倍,加入采样500,变换使用的是1000,那么结果得到的
单边谱的峰值是理想的一半。
这是自己做的时候的结果,应该还是由于不是整周期的结果影响的。
我给自己的解释就这样,不是什么发现。 原帖由 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变换时的长度就可以了。 作FFT后,计算的结果频率怎么对应不起来?也就是幅度是1的地方,对应的频率应该是p=sin(2*4e6*pi*t)中的4e6!怎么不是4e6那? 我图上标示的0.34*10^7? 原帖由 sjh821 于 2007-4-19 15:59 发表
作FFT后,计算的结果频率怎么对应不起来?也就是幅度是1的地方,对应的频率应该是p=sin(2*4e6*pi*t)中的4e6!怎么不是4e6那?
频率和时间的对应关系请参看本版精华贴 原帖由 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处。 首先感谢songzy41 先生的指教!我看在论坛上songzy41 先生很活跃,帮忙解决了很多的问题!
这里我要说的是,我的程序就想发射一个周期的脉冲,若把t改为t=0:dt:1e-6;则成4个周期的了.我想是不是可以把dt改小一点,比如改成dt=2e-9,或者更小的数值.请问这样采样频率是不是就增加了?对结果有什么影响?dt有什么限制?
回楼主
只针对你的原程序,修改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 编辑 ]
页:
[1]