feifa77 发表于 2003-9-10 21:21:10

【原创】我用matlab写的fft程序!

看了半天的数字信号处理,利用中午睡觉的时间编的,

c=rand(1,512);% 定制512点抽样%
%%%%求反序,实现反序输入,正序输出%%%%
c(1)=0;c(2)=256;
for i=1:8   % log(512)-1=8%
   c((2^i+1):2^(i+1))=c(1:2^i)+2^(8-i);
end
d=rand(1,512);
t=linspace(1,100,512)/100;b=;%输入5HZ正弦波,
%%%%%%%%%%%%%%%%%%%%%%%%%%%% 取均分512点的正弦值作为fft的初始值
for i=1:512
   d(i)=b(2,(c(i)+1));
end%完成初始值的反序%
%%%%求出所有的蝶算指数因子%%%%
x=rand(512,10);a=rand(1,256);q=1;w=rand(1,256);
for o=1:256
   w(o)=exp(-j*2*pi*(o-1)/512);
end
%%%%fft变换%%%%
x(:,1)=d';
for k=2:10
   i=1;p=1;
   for m=1:2^(k-2)%求出每级所需的蝶算指数因子%
         q=(m-1)*512/(2^(k-1));
         a(p)=w(q+1);p=p+1;
   end
   for n=1:(512/(2^(k-1)))%对偶节点个数的确定及变换计算%
         p=1;
         for h=i:(i+(2^(k-2)-1))
             x(h,k)=x(h,k-1)+a(p)*x(h+2^(k-2),k-1);
             x(h+2^(k-2),k)=x(h,k-1)-a(p)*x(h+2^(k-2),k-1);
             p=p+1;
         end
         i=(2^(k-1))*n+1;
   end
end
%%%%取出fft变换后的点数值,取1到50点的值进行作图%%%%
S=abs(x(:,10));
plot((0:49)/50*50,abs(S(1:50)),'linewidth',2)

snow_man_0 发表于 2003-10-13 16:54:25

回复: 【原创】我用matlab写的fft程序!

本来就有这个函数你为什么还写?

lyjack520 发表于 2008-12-7 17:20:21

怎么说也因该鼓励下

postwar 发表于 2008-12-8 11:12:33

好的

是该鼓励一下

ydlcsu 发表于 2008-12-8 11:31:31

如果楼主有时间的话写写这样的程序未尝不是没有收获,对理论能有更深的了解。同时把自己的程序和matlab自带的进行比较,看看差距,对编程技巧上相信也会有很大帮助。
页: [1]
查看完整版本: 【原创】我用matlab写的fft程序!