请教fft程序
N=500t=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)))
运行之后出现错误代码,请指教
正确的如下:
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 编辑 ] 呵呵,建议楼主根据错误提示自己改改,都是基本的错误。
谢谢两位的回答。
谢谢citywander和冬春夏秋两位的回答。程序能运行了,呵呵。回复 沙发 citywander 的帖子
参考下p(k)=r(k).*conj(r(k));改成
p=r(k).*conj(r(k));
楼主快回来改改
原帖由 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都是一样的啊,为什么这里的值会乘下来不一样呢?待会再研究。。。
回复 6楼 citywander 的帖子
两者是一样的! 至於跑两次不一样, 是因为randn(size(t))的缘故 这个偏是频率分辨率和信号对不上造成的。我看过一个帖子,把N值调大就好了
页:
[1]