FFT倒序算法—雷德算法

在实现FFT计算的时候,第一步要做的就是实现倒位序的实现,这里有一种算法,叫做雷德(Rader)算法。自然序排列的二进制数,其下面一个数总比上面的数大1,而倒序二进制数的下面一个数是上面一个数在最高位加1并由高位向低位仅为而得到的。 若已知某数的倒序数是J,求下一个倒序数,应先判断J的最高位是否为0,与k=N/2进行比较即可得到结果。如果k>J,说明最高位为0,应把其变成1,即J+N/2,这样就得到倒序数了。如果J<=k,即J的最高位为1,将最高位化为0,即J-N/2,再判断次高位;与k=N/4进行比较,若为0,将其变位1,即J+N/4,即得到倒序数,如果次高位为1,将其化为0,再判断下一位......

即从高位到低位依次判断其是否为1,为1将其变位0,若这一位为0,将其变位1,即可得到倒序数。若倒序数小于顺序数,进行换位,否则不变,防治重复交换,变回原数。


#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main(void)
{
    int array[8]={0,1,2,3,4,5,6,7};
    int i,j,k;
    int N = 8;
    int temp;
    j = 0;

    for(i = 0; i < N -1; i ++)
    {
        if(i < j)
        {
            temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }

        k = N >> 1;

        while( k <= j)
        {
            j = j - k;
            k >>= 1;
        }

        j = j + k;
    }

    for( i = 0; i < N; i ++)
        printf("%d ",array[i]);
    printf("\n");

    return 0;
}



  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值