声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2955|回复: 6

[综合讨论] 使用matlab编写fft函数

[复制链接]
发表于 2009-5-4 17:31 | 显示全部楼层 |阅读模式

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

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

x
闲来无事,自己写了一个fft函数的程序,写完之后与matlab自带的fft进行比较,结果不正确,不知道我的程序里面出现了什么问题,请高手指点一二。程序在附件里。

fft_matlab.txt

1.4 KB, 下载次数: 40

自己用matlab编写的fft函数

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

 楼主| 发表于 2009-10-12 16:46 | 显示全部楼层
居然这么久都没有人来看这个帖子。
这个问题已经解决了。
发表于 2009-10-12 22:56 | 显示全部楼层

回复 沙发 Spire 的帖子

怎没人来看这个帖子? 不是破百了!:@)
而且LZ的副档应该直接贴, 不然我的系统开启会乱码
还有可以的话建议LZ与大家分享你的成果, 做个结束!

[ 本帖最后由 ChaChing 于 2009-10-12 23:01 编辑 ]
 楼主| 发表于 2009-10-13 09:22 | 显示全部楼层
贴出程序,希望对大家有帮助。不过人们都用自带的fft函数,谁会用这个呢,哈

  1. clear; clc;

  2. for kk=1:1024; %%生成一个含有1024个数的数组data(正式使用的时候load文件)
  3.    data(kk)=kk;
  4. end


  5. N=1024; %%数组总元素个数
  6. n=10; %%2的幂指数,也就是2^10=1024,n也等于快速傅里叶变换时的总行数
  7. j=1; %%初始化j,方便在变换数组元素次序的时候使用

  8. for ii=1:N %%这个for循环的结果使原来数组次序改变,如数组1 2 3 ……14 15 16经过此循环以后变为
  9. %%以下次序:1 9 5 13 3 11 7 15 2 10 6 14 4 12 8 16
  10. if j>ii
  11.    temp=data(j); data(j)=data(ii); data(ii)=temp;
  12. end
  13. m=N/2;
  14. while m>=2 && j>m-1
  15.    j=j-m; m=m/2;
  16. end
  17. j=j+m;
  18. end

  19. a=data; %%将变换次序以后的数组赋值给a

  20. %%以下是蝴蝶算法
  21. for r=1:n %%最外层循环是蝴蝶算法的总行数
  22. M=2^(n-r); %%M为第r行的组数(比如第一行有2^(n-1)组,第二行有2^(n-2)组……最后一行只有一组)
  23. for m=1:M %%m为当前计算所在的行数
  24. %%以下两个for循环处于嵌套循环的最内层,在同一组内,前一半的计算公式和后一半的计算公式不一样
  25. for j=1:(2^(r-1))
  26. W=cos(pi*(j-1)/2^(r-1))-i*sin(pi*(j-1)/2^(r-1));
  27. b(j+(m-1)*(2^(r)))=a(j+(m-1)*(2^(r)))+W*a(j+(2^(r-1))+(m-1)*(2^(r)));
  28. end
  29. for j=(2^(r-1)+1):(2^r)
  30. W=-cos(pi*(j-1-2^(r-1))/2^(r-1))+i*sin(pi*(j-1-2^(r-1))/2^(r-1));
  31. b(j+(m-1)*(2^(r)))=a(j-(2^(r-1))+(m-1)*(2^(r)))+W*a(j+(m-1)*(2^(r)));
  32. end
  33. end
  34. %%用新的数组b覆盖原来的数组a,用于下一行的计算
  35. for j=1:N, a(j)=b(j); end
  36. end
复制代码

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

评分

1

查看全部评分

发表于 2009-10-16 09:37 | 显示全部楼层
我挺欣赏楼住的,我喜欢你这种追根就地的性格,这才是真正的学习:@D :@D
发表于 2009-10-16 11:59 | 显示全部楼层
其实代码可以优化下, 如
for kk=1:1024, data(kk)=kk; end
可改为data=[1:1024]; ...
 楼主| 发表于 2009-10-27 08:52 | 显示全部楼层
谢谢楼上二位!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-14 17:10 , Processed in 0.085871 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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