日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转]FFT倒序算法—雷德算法

發(fā)布時間:2025/3/15 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]FFT倒序算法—雷德算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載文章,文字說明部分修改文字錯誤、補(bǔ)充一些文字以及在程序中加一些注釋,原文網(wǎng)址:

http://www.xuebuyuan.com/2117668.html

程序部分是借鑒介紹FFT算法程序的文章《網(wǎng)上找的純C實(shí)現(xiàn)的FFT,與matlab計(jì)算結(jié)果完全一樣》,網(wǎng)址:

https://blog.csdn.net/cp1300/article/details/28850309

在實(shí)現(xiàn)FFT計(jì)算的時候,第一步要做的就是實(shí)現(xiàn)倒位序的實(shí)現(xiàn),這里有一種算法,叫做雷德(Rader)算法。

自然序排列的二進(jìn)制數(shù),其下面一個數(shù)總比上面的數(shù)大1,而倒序二進(jìn)制數(shù)的下面一個數(shù)是上面一個數(shù)在最高位加1并由高位向低位進(jìn)位而得到的。?若已知某數(shù)的倒序數(shù)是J,求下一個倒序數(shù),應(yīng)先判斷J的最高位是否為0,與k=N/2進(jìn)行比較即可得到結(jié)果:

i)如果J<k,說明最高位為0,應(yīng)把其變成1,即J+N/2,這樣就得到倒序數(shù)了。

ii)如果J>=k,即J的最高位為1,將最高位化為0,即J-N/2;此時,需要再判斷次高位(即與k=N/4進(jìn)行比較),若為0,將其變位1(即J+N/4),即得到倒序數(shù);如果次高位為1,將其化為0(即J-N/4),再判斷下一位為0還是1,為0則變?yōu)?,得到倒序數(shù);如果為1則變?yōu)?后繼續(xù)判斷下一位......直到判斷到某位為0或者判斷完全部的位數(shù)都為1才會結(jié)束判斷。


若倒序數(shù)大于順序數(shù),進(jìn)行換位,否則不變,防止重復(fù)交換,變回原數(shù)。


C代碼如下:


/*----以int型數(shù)據(jù)為例,假設(shè)數(shù)據(jù)長度N為2的整數(shù)次冪*----/
void Rader(int *f, int N)
{
int i,j,t,k;
/*----按照倒位序重新排列原信號----*/
for(i=1,j=N/2;i<=N-2;i++) ?// 第一個和最后一個數(shù)據(jù)是位置不變的,因此i=0和i=N-1不處理
{
if(i<j) ?// 原始下標(biāo)小于變換下標(biāo)才交換
{
t=f[j];
f[j]=f[i];
f[i]=t;
}
k=N/2; // 用于比較最高位
while(k<=j) ?// 位判斷為1
{
j=j-k; ?// 該位變?yōu)?
k=k/2; ?// 用于比較下一高位
}
j=j+k; ?// 判斷為0的位變?yōu)?
}
}


總結(jié)

以上是生活随笔為你收集整理的[转]FFT倒序算法—雷德算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。