lsjfft1.asv

来自「用MATLAB编写的FFT程序」· ASV 代码 · 共 38 行

ASV
38
字号
function   X=lsjfft1(x);%x为输入的序列
M=nextpow2(length(x));%求大于等于x长度的2的最小次幂
N=pow2(M);
if length(x)<N;
    x=[x,zeros(1,N-length(x))];%若x的长度小于N,补N-length(x)个0
          end
rev_order=bin2dec(fliplr(dec2bin([1:N]-1,M)))+1;%求数列1:N的倒序,dec2bin()十进制转换为二进制,
                                                ;%bin2dec()二进制转换为十进制,fliplr()
X=x(rev_order);  % 将x倒序后作为输入X
for L=1:M
    B=2^(L-1);
    W=exp(-j*2*pi/N);
    for J=1:B
        p=2^(M-L)*(J-1);
          if L=1
              for K=J:2^L:N
              W=W^p;
              X(K)=X(K)+X(K+B)*W;
              X(K+B)=X(K)-X(K+B)*W;
              end
          end
        if L=2
          if J=1
            for K=0:4:4
              W=W^p;
              X(K)=X(K)+X(K+B)*W;
              X(K+B)=X(K)-X(K+B)*W;
            end
          end
          if J=2
            for K=1:4:5
               W=W^p;
               X(K)=X(K)+X(K+B)*W;
               X(K+B)=X(K)-X(K+B)*W;
            end
          end
    end
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?