【原创】我用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)
回复: 【原创】我用matlab写的fft程序!
本来就有这个函数你为什么还写? 怎么说也因该鼓励下好的
是该鼓励一下 如果楼主有时间的话写写这样的程序未尝不是没有收获,对理论能有更深的了解。同时把自己的程序和matlab自带的进行比较,看看差距,对编程技巧上相信也会有很大帮助。
页:
[1]