MATLAB自己编写的fft与matlab内部的fft函数比较

1.编写的fft函数

function X=FFT(x,N)

b=length(x);  %x(n)的长度

%若x(n)的长度小于N,则补零
if(b<N)
    x=[x,zeros(1,N-b)];
end

b=length(x);                  %补零后x(n)的长度
xm=zeros(1,b);                %x(n)转换数组
M=log2(N);                   

%将x(n)的序号码位倒置
nxd=fliplr(dec2bin([1:N]-1,M));%将系数取二进制并对调
nxd=bin2dec(nxd)+1;            %取十进制 (matlab的下标从1开始,需要加1)                                                        
x=x(nxd);                      %将x(n)倒序排列作为输入端的初始值

% N个1点DFT,即x(n),赋值到数组xm
for k=1:N                                
   xm(k)=x(k);
end

%将N点DFT作M次基2分解,从左到右,对每次分解作DFT运算,共M级蝶形运算
for L=1:M  
    B=2^(L-1);    %第L级中,每个蝶形单元两个输入数据的距离,共有B个旋转因子
    for J=0:B-1                  %第L级中不同的旋转因子
        R=J*2^(M-L);             %旋转因子的指数
        for p=(J+1):2^L:N        %本次蝶形运算的跨越间隔为2^L
            W=exp(-j*2*pi*R/N);  %计算本次运算的旋转因子           
            t=xm(p)+xm(p+B)*W;   %进行蝶形运算                                            
            xm(p+B)=xm(p)-xm(p+B)*W;
            xm(p)=t;
        end
    end
end
X=xm;   %输出X为xm

2.与MATLAB内部的fft函数对比

clear
x=[1 1 1 1 1 1 1 1];               
N=128;                       
X1=fft(x,N); %MATLAB内部的fft函数
X=FFT(x,N); %调用自己编写的fft函数
subplot(211);                                
stem(abs(X1),'.');grid on;
title('MATLAB内部的FFT变换图像');
subplot(212);                             
stem(abs(X),'.');grid on; 
title('自己编写的FFT变换图像');

3.运行结果

 

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静静今天想休息

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值