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

文章介绍了一个自编的快速傅里叶变换(FFT)函数,并与MATLAB内置的fft函数进行了对比。通过对给定序列x进行128点的FFT运算,展示了两个函数的输出结果,观察它们在处理相同任务时的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

静静今天想休息

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

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

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

打赏作者

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

抵扣说明:

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

余额充值