时间抽取(DIT)基2FFT算法(matlab)

该博客详细介绍了如何使用MATLAB实现离散傅里叶变换(DIT)基2快速傅里叶变换(FFT)算法,包括旋转因子的计算和蝶形运算的过程。通过一个16点FFT的例子展示了函数的调用和运算结果,验证了算法的正确性。

参考文献《数字信号处理. 理论、算法与实现》 第二版实现DIT基2FFT,主要就是实现下图中的一个蝶形运算。
8点FFT时间抽取算法信号流图
下面是用matlab编写的实现函数。

function [Xk]=DIT_FFT_2_MOD(xn,N)
    t=1:N;
    WWr=exp(-1i*2*pi/N*[0:N/2-1].');%旋转因子
    %蝶形运算开始
    M=log2(N);%“级”的数量
    % 码位倒置
    Xk=permute(reshape(xn,2*ones(1,M)),M:-1:1);
    Xk=Xk(:);
    N2=N/2;
    Num_of_Group=N2;%每一级中组的个数初始值
    Interval_of_Group=1;%每一级中组与组之间的间距

    for m=0:M-1 %“级”循环开始
        Wr=WWr(1:Num_of_Group:end);
        gMatrix2=reshape(t,Interval_of_Group,2,Num_of_Group);
        gMatrix21=reshape(gMatrix2(:,1,:),N2,1);
        gMatrix22=reshape(gMatrix2(:,2,:),N2,1);
        if(m==0)
            XKtemp=Xk(gMatrix22);%第0级,蝶形运算式
        elseif(m==1)
            XKtemp=Xk(gMatrix22);
            XKtemp(2:2:end)=XKtemp(2:2:end)*Wr(2);%第1级,蝶形运算式
        else
            ss=repmat(Wr,Num_of_Group,1);
            XKtemp=Xk(gMatrix22).*ss;%第m级,第g组的
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值