k=round(m/2); %m,n为源输入矩阵的行数和列数,f为源输入矩阵
F=zeros(m,n); %F为傅里叶变化后的矩阵
F1=zeros(m,n); %F1为傅里叶变化中间的过度值
for y=0:n-1
for u=0:k-1
f0=0;f1=0; %f0,f1为中间值
for x=0:k-1
f0=f(2*x+1,y+1)*exp(-j*2*pi*u*x/k)+f0;
f1=f(2*x+2,y+1)*exp(-j*2*pi*u*x/k)+f1;
end
F1(u+1,y+1)=(f0+f1*exp(-j*2*pi*u/(2*k)));
F1(u+k+1,y+1)=(f0-f1*exp(-j*2*pi*u/(2*k)));
end
end %一维傅里叶变化
k=round(n/2);
for u=0:m-1
for v=0:k-1
f0=0;f1=0;
for y=0:k-1
f0=F1(u+1,2*y+1)*exp(-j*2*pi*v*y/k)+f0;
f1=F1(u+1,2*y+2)*exp(-j*2*pi*v*y/k)+f1;
end
F(u+1,v+1)=(f0+f1*exp(-j*2*pi*v/(2*k)));
F(u+1,v+k+1)=(f0-f1*exp(-j*2*pi*v/(2*k)));
end
end %以后反傅里叶变化时前面系数再/(m*n)
%IFFT 快速傅里叶反变化
k=round(m/2); %m,n为F的行数和列数,fm为过度矩阵
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余2页未读,立即下载