關注我的公衆號c137Lab獲取更多相關內容
非傳統定點數(二)
餘數系統(Residue Number System,RNS)
簡介
RNS 系統考慮正整數基集 {m1,m2,…,ml} 的情況下定義,其中 m1 是相對(對偶)的質數。表示數字的動態範圍 M=∏l=qLml ,對於有符號數, X∈[−M/2,M/2] 。整數 X 到通過 xl=X mod ml 映射到 RNS數組 (x1,x2,…,xl)。
假設 □ 爲加、減、乘運算,如果 X,Y,Z∈ZM 有:
Z=X□Y mod M
例:
大多數 RNS 系統中採用小型 RAM 表或 ROM 表來實現整數到 RNS 數組的映射。實現除法或幅值縮放時,將 RNS 轉回整數進行操作,使用中國剩餘定理(Chinese Remainder Theorem,CRT)與混合基數轉換(Mixed-radix conversion,MRC)算法完成轉換。通常設計所需要的 RNS 計算輸出遠小於動態範圍 M,此時有一種稱爲 ε−CRT 的高效算法實現實時轉換。
索引算法
索引算法也是 RNS 的變化之一,其在某些方面和 LNS 相似。根據數論可知:存在一個本原元素,一個生成元 g 也就是:
a≡gα mod p
這一公式可以生成 Zp 域內除零之外的所有元素。將索引 a 與生成元 g 和整數 α 之間的關係表述爲 α=indg(a),爲了表示 a=0 我們認爲 indg(0)=−∞ 。
索引乘法器(Index Multiplier)
假設a×b=n ,RNS 數的乘法運算可以按照如下方式進行:
- 把 a,b 映射到索引域,α=indg(a),β=indg(b)
- 將索引數值相加並模 p−1 ,v=(α+β) mod (p−1)
- 將所得的和映射回到初始索引域中,v=indg(n)
示例:
一個 p=17,g=3 生成的譯碼錶如下所示
a |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
$ind_3(a) $ |
−∞ |
0 |
14 |
1 |
12 |
5 |
15 |
11 |
10 |
2 |
3 |
7 |
13 |
4 |
9 |
6 |
8 |
計算 a=2,b=4 的乘積:
(ind3(2)+ind3(4)) mod 16=(14+12) mod 16=10
查表可得 10=ind3(8) ,則得到結果 2×4=8
索引域中的加法
要在索引域中進行加法,一種方法是把索引 RNS 轉換回 RNS 進行加法後再轉換到索引域。另一種方法根據 Zech 對數。
定義: Zech對數
Z(n)=indg(1+gn)↔gZ(n)=1+gn
觀察索引域中的求和運算:
a+b=gα+gβ=gβ(1+gα−β)
可以改寫成
a+b=gβ+Z(α−β)
例:對於質數模 p=17,g=3,Zech 對數表如下:
n |
−∞ |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
Z(n) |
0 |
14 |
12 |
3 |
7 |
9 |
15 |
8 |
13 |
−∞ |
6 |
2 |
10 |
5 |
4 |
1 |
11 |
計算 2+5:
2+5=314+35=35(1+39)=35+Z(9)=311≡7 mod 17
利用QRNS計算複數乘法
當使用 RNS 碼對複數進行編碼時,形成的數制稱爲複數 RNS(CRNS)。CRNS 進行復數加法時需要兩次實數加法。CRNS 乘法需要四個實數乘積,一次加法和一次減法。但是當使用二次 RNS(QRNS)時,可以簡化爲兩次乘法。
QRNS建立在 p=4k+1 形式的高斯質數已知性質的基礎上,其中 k 是正整數。Zp 中多項式 x2+1 有兩個根 J^,−J^ 其中 J^,−J^ 是屬於餘數類 Zp 的實整數。將一個 CRNS 轉換爲 QRNS 的過程如下:
f(a+jb)=((a+J^b) mod p,(a−J^b) mod p)=(A,B)
在QRNS中,乘法和加法按分量實現:
(a+jb)+(c+jd)↔(A+C,B+D) mod p
(a+jb)(c+jd)↔(AC,BD) mod p
絕對值的平方按以下方式實現:
∣a+jb∣2↔(AB) mod p
從 QRNS 轉換爲 CRNS 的過程如下:
f−1(A,B)=2−1(A+B)+j(2J^)−1(A−B) mod p
例:
取高斯質數 p=13,計算(2+j)(3+j2)
在 Zp 中二次方程 x2≡(−1) mod 13 有兩個根:
J^=5,−J^=−5≡8 mod 13
將數據轉化爲QRNS 編碼:
KaTeX parse error: No such environment: align at position 8:
\begin{̲a̲l̲i̲g̲n̲}̲
(a+jb)&=2+j\\
…
KaTeX parse error: No such environment: align at position 8:
\begin{̲a̲l̲i̲g̲n̲}̲
(c+jd)&=3+j2\\…
然後按分量實現乘法:
(A,B)(C,D)=(AC,BD) mod p≡(0,8) mod 13
接下來將 QRNS 轉回 CRNS:
解方程 2x≡1 mod 13 和 10x≡1 mod 13 得 2−1≡7,(2J^)−1=10−1≡4
f−1(0,8)=7(0+8)+j4(0−8) mod 13≡4+j7 mod 13
下圖給出 CRNS 和 QRNS 之間的映射關係