📄 fft2.m
字号:
clc;
clear;
%FFT
tic;
m=10;
N=2^m;
dt=0.01;
%将函数离散化输入
for k=0:1:(N-1)
xk(k+1)=k*dt;
%xk(k+1)=2*pi*k/N;
fxk(k+1)=exp(-abs(xk(k+1)));
end
%plot(fxk);
%矩阵计算
T=[1,1;1,-1];
for j=1:1:m;
W(j)=exp(-2*pi*i/2^j);
end
for j=2:1:m
for n=1:1:2^(j-1)
diagonal(n)=W(j)^(n-1);
end
K=diag(diagonal);
I=eye(2^(j-1));
T=[I,I;I,-I]*[I,zeros(size(I));zeros(size(I)),K]*...
[T,zeros(size(T));zeros(size(T)),T];
end
%二进制下标换位
K=zeros(N,m);%倒序的二进制脚标
for n=0:1:(N-1)
a=n;
for j=1:1:m
K(n+1,j)=mod(a,2);
a=(a-K(n+1,j))/2;
end
end
k_mark=zeros(1,N);%倒序后的二进制脚标转换为十进制
for n=1:1:N
for j=1:1:m
k_mark(n)=k_mark(n)+K(n,j)*2^(m-j);
end
end
for n=1:1:N%倒序
Ak(n)=fxk(k_mark(n)+1);
end
Ck=T*Ak';%DFT;
t1=toc;%运行时间
tic;
ff=fft(fxk);
t2=toc;%matlab中fft运行时间
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -