zhangyong315315 发表于 2009-3-9 20:34

请教fft程序

N=500
t=0:0.001:0.6
x=sin(2*pi*50*t)+sin(2*pi*120*t)
a=x+2*randn(size(t))
r=fft(a,N)
k=0:1:round(N/2)
p(k)=r(k)*conj(r(k))
f=1000*(0:round(N/2))/N)
plot(f,p(1:(round(N/2)+1)))


运行之后出现错误代码,请指教

citywander 发表于 2009-3-9 20:45

正确的如下:

N=500;
t=0:0.001:0.6;
x=sin(2*pi*50*t)+sin(2*pi*120*t);
a=x+2*randn(size(t));
r=fft(a,N);
k=1:1:round(N/2);
p(k)=r(k).*conj(r(k));
f=1000*(1:round(N/2))/N;
plot(f,p(1:(round(N/2))));
图上的横轴即为峰值频率:50 和120

[ 本帖最后由 ChaChing 于 2009-3-10 11:25 编辑 ]

friendchj 发表于 2009-3-9 20:56

呵呵,建议楼主根据错误提示自己改改,都是基本的错误。

zhangyong315315 发表于 2009-3-9 21:12

谢谢两位的回答。

谢谢citywander和冬春夏秋两位的回答。程序能运行了,呵呵。

ChaChing 发表于 2009-3-9 22:26

回复 沙发 citywander 的帖子

参考下
p(k)=r(k).*conj(r(k));改成
p=r(k).*conj(r(k));

citywander 发表于 2009-3-10 11:01

楼主快回来改改

原帖由 ChaChing 于 2009-3-9 22:26 发表 http://www.chinavib.com/forum/images/common/back.gif
参考下
p(k)=r(k).*conj(r(k));改成
p=r(k).*conj(r(k));
真的,我还以为这两个之间没有区别的,试了一下真的发现两者值有一点差距,尽管最后图类似,但峰值是有变化的!而且变化很大!希望楼主不要被我误导了,快回来改一下啊,把p(k)=r(k).*conj(r(k));改成p=r(k).*conj(r(k));最好把最后两句也改一下变成f=1000*(1:round(N/2)-1)/N;plot(f,p(2:(round(N/2))));这样才是在图上直接对应50和120处,不然就是歪了一点,在51和121了
可是这是为什么呢?我试了个小数组,用p(k)或者用p都是一样的啊,为什么这里的值会乘下来不一样呢?待会再研究。。。

ChaChing 发表于 2009-3-10 15:51

回复 6楼 citywander 的帖子

两者是一样的! 至於跑两次不一样, 是因为randn(size(t))的缘故

zhangyong315315 发表于 2009-3-11 11:19

这个偏是频率分辨率和信号对不上造成的。我看过一个帖子,把N值调大就好了
页: [1]
查看完整版本: 请教fft程序