FFT倒序算法—雷德Rader算法及matlab实现

在实现FFT(快速Fourier变换)计算的时候,第一步要做的就是实现码位(二进制码)倒序,这里有一种算法,叫做雷德(Rader)算法。
对照码位倒置对应表:
这里写图片描述

寻找下一个倒序数的基本思想:

    如果k>J,则J的最高位为0,只要把该位变为1(J与k=N/2相加即可),就得到下一个倒位序数;
    如果K<=J,则J的最高位为1,可将最高位变为0(J与k=N/2相减即可)。
    然后(k<=J时)还需判断次高位,这可与k=N\4相比较,若次高位为0,则需将它变为1(加N\4即可)其他位不变,
既得到下一个倒位序数;
    若次高位是1,则需将它也变为0。然后再判断下一位。。。。(以此循环)

实现matlab代码:

length=8;
j=length/2;%数组半长
a=[0 1 2 3 4 5 6 7 ];

for i=1:length/2-1%这里实现了奇偶前后分开排序 ,
                  %比较前半部分序数【0 1 2 3 】,对每对中的后一个偶数进行交换1换4,3换6
    if i<j
        t=a(j+1);
        a(j+1)=a(i+1);%交换
        a(i+1)=t;
    end
    %求下一个倒序数
        k=length/2;%数组半长
        while(j>=k)%j为下一个倒序数,比较100的最高位1,如果为1,置0
            j=j-k;
            k=k/2;%变为010,准备比较第二位的1,循环
        end
        if j<k
            j=j+k;%找到为0 的一位,补成1,j就是下一个倒序数
        end
end
a

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值