蝶形 同址和變址計算

2021-08-31 16:02:51 字數 2478 閱讀 7749

蝶形、同址和變址計算

1.  蝶形計算

任何乙個n為2的整數冪(即n=2m)的dft,都可以通過m次分解,最後成為2點的 dft來計算。m次分解構成了從x(n)到x(k)的m級迭代計算,每級由n/2個蝶形組成。圖3.20表示了蝶形的一般形式表示。

其輸入和輸出之間滿足下列關係:

大多數情況下複數乘法所花的時間最多,因此下面僅以複數乘法的計算次數為例來與直接計算進行比較。

直接計算dft需要的乘法次數為αd=n2,於是有

同址(原位)計算 

圖3. 19包含log2n級迭代運算,每級由n/2個蝶形計算構成。蝶形計算的優點是可以進行所謂同址或原位計算。

現在來考察第一級的計算規律。設將輸入x(0),x(4),x(2),x(6), x(1),x(5),x(3),x(7)分別存入計算機的儲存單元m(1), m(2), m(3),…,m(7)和m(8)中。首先,儲存單元m(1)和m(2)中的資料x(0)和x(4)進入運算器並進行蝶形運算,流圖中各蝶形的輸入量或輸出量是互不相重的,任何乙個蝶形的二個輸入量經蝶形運算後,便失去了利用價值,不再需要儲存。這樣,蝶形運算後的結果便可以送到m(1)和m(2)儲存起來。類似地,m(3)和m(4)中的x(2)和x(6)進入運算器進行蝶形運算後的結果也被送回 到m(3)和m(4)儲存,等等。第二級運算與第一級類似,不過,m(1)和m(3)儲存單元中的數 據進行蝶形運算後的結果被送回m(1)和m(3)儲存,m(2)和m(4)中的資料進行蝶形運算 後送回m(2)和m(4)儲存,等等。這樣一直到最後一級的最後乙個蝶形運算完成。

蝶形運算的特點是,首先每乙個蝶形運算都需要兩個輸入資料,計算結果也是兩個資料,與其它結點的資料無關,其它蝶形運算也與這兩結點的資料無關、因此,乙個蝶形 運算一旦計算完畢,原輸入資料便失效了。這就意味著輸出資料可以立即使用原輸 人資料結點所占用的記憶體。原來的資料也就消失了。輸出、輸人資料利用同一記憶體單 元的這種蝶形計算稱為同位(址)計算。 

可以看出, 每一級的蝶形的輸入與輸出在運算前後可以儲存在同一位址(原來位置上)的儲存單元中,這種同址運算的優點是可以節省儲存單元,從而降低對計算機儲存量的要求或降低硬體實現的成本。

3.變址計算 

從圖3. 19所示的流程圖看出,同址計算要求輸入x(n)是「混序」排列的。所謂輸入為「混 序」,並不是說輸入是雜亂無章的,實際上它是有規律的。如果輸入x(n)的序號用二進位製碼來 表示,就可以發現輸入的順序恰好是正序輸入的「碼位倒置」,表3. 3列出了這種規律。

在實際運算中,按碼位倒置順序輸入資料x(n),特別當n較大時,是很不方便的。因此,資料總是按自然順序輸入儲存,然後通過「變址」運算將自然順序轉換成碼位倒置順序儲存。實現這種轉換的程式可用圖3. 21來說明。

圖中用n表示自然順序的標號,用l表示碼位倒置的標號。當l=n時,x(n)和x(l)不必互相調換。當l≠n時, 必須將x(l)和x(n)互相調換,但只能調換一次,為此必須規定每當l>n時,要將x(l)和x(n)相互調換,即把原來存放x(n)的儲存單元中的資料調入儲存x(l)的儲存單元中,而把原來儲存x(l)的儲存單元中的資料調入到儲存x(n)的儲存單元中。

這樣,按自然序輸入的資料x(n)經過變址計算後變成了碼位倒置的排列順序,便可進入第一級的蝶形運算。 

最後介紹一下時間抽選fft演算法的另外一些形式的流程圖。對於任何流程圖,只要保持 各節點所連支路及其傳輸係數不變,則不論節點位置怎樣排列,所得到的流程圖總是等效的,因而都能得到dft的正確結果,只是資料的提取和儲存次序不同而已。 

把圖3. 19中與x(4)水平相鄰的所有節點和與x(1)水平相鄰的所有節點交換,把與x(6)水平相鄰的所有節點和與 x(3)水平相鄰的所有節點交換,而與x(2)、x(5)和x(7)水平相鄰各節點位置不變,就可以從圖3. 19得到圖3.22。圖3.22與圖3.19的區別只是節點的排列不同,而支路傳輸比,即wn的 各次冪保持不變。顯然圖3.22所示流程圖的輸入是正序(自然順序)排列的,輸出是碼位倒置 排列的,所以輸出要進行變址計算。圖3. 22所示的流程圖相當於最初由庫利和圖基給出的時 間抽選演算法。

另一種形式的流程圖是將節點排列成輸入 和輸出兩者都是正序排列,但這類流程圖不能進行同址計算,因而需要兩列 長度為n的複數儲存器。

協變和逆變

協變和逆變都是術語,前者指能夠使用比原始指定的派生型別的派生程度更大的型別,後者指能夠使用比原始指定的派生型別的派生程度更小的型別。using system using system.collections.generic using system.text class derived base s...

協變和逆變

二 真正的協變和逆變 概念 1 以前的泛型系統 或者說沒有in out關鍵字時 是不能 變 的,無論是 逆 還是 順 協 2 當前僅支援介面和委託的逆變與協變 不支援類和方法。但陣列也有協變性。3 值型別不參與逆變與協變。協變 foo foo public class testoutwhere t ...

協變和逆變

假設有這樣乙個類 class person icloneable 但是由於我們知道是返回乙個person類的例項,所以返回型別 object 寫在這裡總會覺得很彆扭,我們希望寫成 class person icloneable 顯然,這是錯的 雖然這是錯的,但這就是返回型別的協變性,只是非泛型介面和...