FFT倒序演算法 Rader演算法

2021-07-02 06:28:16 字數 1590 閱讀 7060

在實現fft計算的時候,第一步要做的就是實現倒位序的實現,這裡有一種演算法,叫做雷德(rader)演算法。

下面假如使用a[i]存的是順序位序,而b[j]存的是倒位序。ij的時候就不用,避免重複而做無用功。

例如   n = 8 的時候,

倒位序順序          二進位制表示      倒位序 順序

0 0                                      

000          

0004

1                                     100        

0012

2                                     010          

010           6

3                                     110          

0111

4                                     001                 1005

5                                     101        

1013

6                                     011        

1107

7                                     111        

111自然序排列的二進位制數,其下面乙個數總比上面的數大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 

#include 

#include 

intmain(

void

)  ;  

inti,j,k;  

intn = 8;  

inttemp;  

j = 0;  

for(i = 0; i < n -1; i ++)  

k = n >> 1;  

while

( k <= j)  

j = j + k;  

}  for

( i = 0; i < n; i ++)  

printf("%d "

,array[i]);  

printf("\n"

);  

return

0;  

}  

演算法之倒序輸出句子

本次講一下倒敘輸出句子的簡單演算法,倒序輸出有很多種方式,其中一種是給出乙個句子,由空格和單詞組成,請給出演算法,倒序輸出。本題相對簡單,基本演算法就是根據提示只有空格和單詞,納悶我們就可以以空格為邊界,具體取後面的單詞來實現倒序輸出。具體code如下 由code可以看出,基本邏輯就是for迴圈根據...

二進位制倒序演算法

建表,遞推求出0 n的所有數的二進位制倒序,複雜度o n 這裡的n,l滿足n 2 l 1 二進位制串長度l,求出某個數n的二進位制倒序,演算法思想複雜度o log l 網上有乙個 雷德演算法,大致思路也是遞推求得1 n的所有數的二進位制逆序,不過方法比較顯然麻煩,每一次都要在之前的逆序數基礎上找第乙...

js演算法 判斷最大值,排序,倒序輸出。

輸入三個數,判斷它們大小 用三元運算。js function on1 在測試中遇到的問題 a b c在強制轉換中,ma前面不可以加var,否則a b c輸入的數值會按照最多位數的來新增其他不同位數的數值 例如 12 3 14輸出的是3。因為將3當成三十了。另一種寫法 var a document.g...