⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fft2.m

📁 matlab实现快速傅立叶变换
💻 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 + -