非傳統定點數(二)-- 餘數系統(Residue Number System,RNS)

關注我的公衆號c137Lab獲取更多相關內容

在這裏插入圖片描述

非傳統定點數(二)

餘數系統(Residue Number System,RNS)

簡介

RNS 系統考慮正整數基集 {m1,m2,,ml}\{m_1,m_2,\dots,m_l\} 的情況下定義,其中 m1m_1 是相對(對偶)的質數。表示數字的動態範圍 M=l=qLmlM=\prod^L_{l=q}m_l ,對於有符號數, X[M/2,M/2]X\in[-M/2,M/2] 。整數 XX 到通過 xl=X mod mlx_l=X\ mod\ m_l 映射到 RNS數組 (x1,x2,,xl)(x_1,x_2,\dots,x_l)

假設 \square 爲加、減、乘運算,如果 X,Y,ZZMX,Y,Z\in Z_M 有:
Z=XY mod M Z=X\square Y\ mod\ M

例:

img1

大多數 RNS 系統中採用小型 RAM 表或 ROM 表來實現整數到 RNS 數組的映射。實現除法或幅值縮放時,將 RNS 轉回整數進行操作,使用中國剩餘定理(Chinese Remainder Theorem,CRT)與混合基數轉換(Mixed-radix conversion,MRC)算法完成轉換。通常設計所需要的 RNS 計算輸出遠小於動態範圍 M,此時有一種稱爲 εCRT\varepsilon-CRT 的高效算法實現實時轉換。

索引算法

索引算法也是 RNS 的變化之一,其在某些方面和 LNS 相似。根據數論可知:存在一個本原元素,一個生成元 gg 也就是:
agα mod p a\equiv g^\alpha\ mod\ p
這一公式可以生成 ZpZ_p 域內除零之外的所有元素。將索引 aa 與生成元 gg 和整數 α\alpha 之間的關係表述爲 α=indg(a)\alpha=ind_g(a),爲了表示 a=0a=0 我們認爲 indg(0)=ind_g(0)=-\infty

索引乘法器(Index Multiplier)

假設a×b=na\times b=n ,RNS 數的乘法運算可以按照如下方式進行:

  1. a,ba,b 映射到索引域,α=indg(a),β=indg(b)\alpha=ind_g(a),\beta=ind_g(b)
  2. 將索引數值相加並模 p1p-1v=(α+β) mod (p1)v=(\alpha+\beta)\ mod\ (p-1)
  3. 將所得的和映射回到初始索引域中,v=indg(n)v=ind_g(n)

示例:

一個 p=17,g=3p=17,g=3 生成的譯碼錶如下所示

aa 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
$ind_3(a) $ -\infty 0 14 1 12 5 15 11 10 2 3 7 13 4 9 6 8

計算 a=2,b=4a=2,b=4 的乘積:
(ind3(2)+ind3(4)) mod 16=(14+12) mod 16=10 (ind_3(2)+ind_3(4))\ mod\ 16=(14+12)\ mod\ 16=10

查表可得 10=ind3(8)10=ind_3(8) ,則得到結果 2×4=82\times4=8

索引域中的加法

要在索引域中進行加法,一種方法是把索引 RNS 轉換回 RNS 進行加法後再轉換到索引域。另一種方法根據 Zech 對數。

定義: Zech對數
Z(n)=indg(1+gn)gZ(n)=1+gn Z(n)=ind_g(1+g^n)\lrarr g^{Z(n)}=1+g^n
觀察索引域中的求和運算:
a+b=gα+gβ=gβ(1+gαβ) a+b=g^\alpha +g^\beta=g^\beta(1+g^{\alpha-\beta})
可以改寫成
a+b=gβ+Z(αβ) a+b=g^{\beta+Z(\alpha-\beta)}

例:對於質數模 p=17,g=3p=17,g=3,Zech 對數表如下:

nn -\infty 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Z(n)Z(n) 0 14 12 3 7 9 15 8 13 -\infty 6 2 10 5 4 1 11

計算 2+52+5
2+5=314+35=35(1+39)=35+Z(9)=3117 mod 17 2+5=3^{14}+3^5=3^5(1+3^9)=3^{5+Z(9)}=3^{11}\equiv7\ mod\ 17

利用QRNS計算複數乘法

當使用 RNS 碼對複數進行編碼時,形成的數制稱爲複數 RNS(CRNS)。CRNS 進行復數加法時需要兩次實數加法。CRNS 乘法需要四個實數乘積,一次加法和一次減法。但是當使用二次 RNS(QRNS)時,可以簡化爲兩次乘法。

QRNS建立在 p=4k+1p=4k+1 形式的高斯質數已知性質的基礎上,其中 kk 是正整數。ZpZ_p 中多項式 x2+1x^2+1 有兩個根 J^,J^\hat J,-\hat J 其中 J^,J^\hat J,-\hat J 是屬於餘數類 ZpZ_p 的實整數。將一個 CRNS 轉換爲 QRNS 的過程如下:
f(a+jb)=((a+J^b) mod p,(aJ^b) mod p)=(A,B) f(a+jb)=((a+\hat Jb)\ mod\ p,(a-\hat Jb)\ mod\ p)=(A,B)
在QRNS中,乘法和加法按分量實現:
(a+jb)+(c+jd)(A+C,B+D) mod p (a+jb)+(c+jd)\lrarr(A+C,B+D)\ mod\ p

(a+jb)(c+jd)(AC,BD) mod p (a+jb)(c+jd)\lrarr(AC,BD)\ mod\ p

絕對值的平方按以下方式實現:
a+jb2(AB) mod p |a+jb|^2\lrarr(AB)\ mod\ p
從 QRNS 轉換爲 CRNS 的過程如下:
f1(A,B)=21(A+B)+j(2J^)1(AB) mod p f^{-1}(A,B)=2^{-1}(A+B)+j(2\hat J)^{-1}(A-B)\ mod\ p

例:

取高斯質數 p=13p=13,計算(2+j)(3+j2)(2+j)(3+j2)

ZpZ_p 中二次方程 x2(1) mod 13x^2\equiv(-1)\ mod\ 13 有兩個根:
J^=5,J^=58 mod 13 \hat J=5,-\hat J=-5\equiv8\ 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 (A,B)(C,D)=(AC,BD)\ mod\ p\equiv(0,8)\ mod\ 13
接下來將 QRNS 轉回 CRNS:

解方程 2x1 mod 132x\equiv1\ mod\ 1310x1 mod 1310x\equiv1\ mod\ 132172^{-1}\equiv7(2J^)1=1014(2\hat J)^{-1}=10^{-1}\equiv4
f1(0,8)=7(0+8)+j4(08) mod 134+j7 mod 13 f^{-1}(0,8)=7(0+8)+j4(0-8)\ mod\ 13\equiv 4+j7\ mod\ 13

下圖給出 CRNS 和 QRNS 之間的映射關係

img2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章