声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1347|回复: 7

[编程技巧] 请教fft程序

[复制链接]
发表于 2009-3-9 20:34 | 显示全部楼层 |阅读模式

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

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

x
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)))


运行之后出现错误代码,请指教
回复
分享到:

使用道具 举报

发表于 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 编辑 ]

评分

1

查看全部评分

发表于 2009-3-9 20:56 | 显示全部楼层
呵呵,建议楼主根据错误提示自己改改,都是基本的错误。
 楼主| 发表于 2009-3-9 21:12 | 显示全部楼层

谢谢两位的回答。

谢谢citywander和冬春夏秋两位的回答。程序能运行了,呵呵。
发表于 2009-3-9 22:26 | 显示全部楼层

回复 沙发 citywander 的帖子

参考下
p(k)=r(k).*conj(r(k));改成
p=r(k).*conj(r(k));
发表于 2009-3-10 11:01 | 显示全部楼层

楼主快回来改改


真的,我还以为这两个之间没有区别的,试了一下真的发现两者值有一点差距,尽管最后图类似,但峰值是有变化的!而且变化很大!希望楼主不要被我误导了,快回来改一下啊,把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都是一样的啊,为什么这里的值会乘下来不一样呢?待会再研究。。。
发表于 2009-3-10 15:51 | 显示全部楼层

回复 6楼 citywander 的帖子

两者是一样的! 至於跑两次不一样, 是因为randn(size(t))的缘故
 楼主| 发表于 2009-3-11 11:19 | 显示全部楼层
这个偏是频率分辨率和信号对不上造成的。我看过一个帖子,把N值调大就好了
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-6 09:49 , Processed in 0.071401 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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