非传统定点数(二)-- 余数系统(Residue Number System,RNS)

关注我的公众号c137Lab获取更多相关内容

在这里插入图片描述

非传统定点数(二)

余数系统(Residue Number System,RNS)

简介

RNS 系统考虑正整数基集 { m 1 , m 2 , … , m l } \{m_1,m_2,\dots,m_l\} { m1,m2,,ml} 的情况下定义,其中 m 1 m_1 m1 是相对(对偶)的质数。表示数字的动态范围 M = ∏ l = q L m l M=\prod^L_{l=q}m_l M=l=qLml ,对于有符号数, X ∈ [ − M / 2 , M / 2 ] X\in[-M/2,M/2] X[M/2,M/2] 。整数 X X X 到通过 x l = X   m o d   m l x_l=X\ mod\ m_l xl=X mod ml 映射到 RNS数组 ( x 1 , x 2 , … , x l ) (x_1,x_2,\dots,x_l) (x1,x2,,xl)

假设 □ \square 为加、减、乘运算,如果 X , Y , Z ∈ Z M X,Y,Z\in Z_M X,Y,ZZM 有:
Z = X □ Y   m o d   M Z=X\square Y\ mod\ M Z=XY mod M

例:

img1

大多数 RNS 系统中采用小型 RAM 表或 ROM 表来实现整数到 RNS 数组的映射。实现除法或幅值缩放时,将 RNS 转回整数进行操作,使用中国剩余定理(Chinese Remainder Theorem,CRT)与混合基数转换(Mixed-radix conversion,MRC)算法完成转换。通常设计所需要的 RNS 计算输出远小于动态范围 M,此时有一种称为 ε − C R T \varepsilon-CRT εCRT 的高效算法实现实时转换。

索引算法

索引算法也是 RNS 的变化之一,其在某些方面和 LNS 相似。根据数论可知:存在一个本原元素,一个生成元 g g g 也就是:
a ≡ g α   m o d   p a\equiv g^\alpha\ mod\ p agα mod p
这一公式可以生成 Z p Z_p Zp 域内除零之外的所有元素。将索引 a a a 与生成元 g g g 和整数 α \alpha α 之间的关系表述为 α = i n d g ( a ) \alpha=ind_g(a) α=indg(a),为了表示 a = 0 a=0 a=0 我们认为 i n d g ( 0 ) = − ∞ ind_g(0)=-\infty indg(0)=

索引乘法器(Index Multiplier)

假设 a × b = n a\times b=n a×b=n ,RNS 数的乘法运算可以按照如下方式进行:

  1. a , b a,b a,b 映射到索引域, α = i n d g ( a ) , β = i n d g ( b ) \alpha=ind_g(a),\beta=ind_g(b) α=indg(a),β=indg(b)
  2. 将索引数值相加并模 p − 1 p-1 p1 v = ( α + β )   m o d   ( p − 1 ) v=(\alpha+\beta)\ mod\ (p-1) v=(α+β) mod (p1)
  3. 将所得的和映射回到初始索引域中, v = i n d g ( n ) v=ind_g(n) v=indg(n)

示例:

一个 p = 17 , g = 3 p=17,g=3 p=17,g=3 生成的译码表如下所示

a a a 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 = 4 a=2,b=4 a=2,b=4 的乘积:
( i n d 3 ( 2 ) + i n d 3 ( 4 ) )   m o d   16 = ( 14 + 12 )   m o d   16 = 10 (ind_3(2)+ind_3(4))\ mod\ 16=(14+12)\ mod\ 16=10 (ind3(2)+ind3(4)) mod 16=(14+12) mod 16=10

查表可得 10 = i n d 3 ( 8 ) 10=ind_3(8) 10=ind3(8) ,则得到结果 2 × 4 = 8 2\times4=8 2×4=8

索引域中的加法

要在索引域中进行加法,一种方法是把索引 RNS 转换回 RNS 进行加法后再转换到索引域。另一种方法根据 Zech 对数。

定义: Zech对数
Z ( n ) = i n d g ( 1 + g n ) ↔ g Z ( n ) = 1 + g n Z(n)=ind_g(1+g^n)\lrarr g^{Z(n)}=1+g^n Z(n)=indg(1+gn)gZ(n)=1+gn
观察索引域中的求和运算:
a + b = g α + g β = g β ( 1 + g α − β ) a+b=g^\alpha +g^\beta=g^\beta(1+g^{\alpha-\beta}) a+b=gα+gβ=gβ(1+gαβ)
可以改写成
a + b = g β + Z ( α − β ) a+b=g^{\beta+Z(\alpha-\beta)} a+b=gβ+Z(αβ)

例:对于质数模 p = 17 , g = 3 p=17,g=3 p=17,g=3,Zech 对数表如下:

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

计算 2 + 5 2+5 2+5
2 + 5 = 3 14 + 3 5 = 3 5 ( 1 + 3 9 ) = 3 5 + Z ( 9 ) = 3 11 ≡ 7   m o d   17 2+5=3^{14}+3^5=3^5(1+3^9)=3^{5+Z(9)}=3^{11}\equiv7\ mod\ 17 2+5=314+35=35(1+39)=35+Z(9)=3117 mod 17

利用QRNS计算复数乘法

当使用 RNS 码对复数进行编码时,形成的数制称为复数 RNS(CRNS)。CRNS 进行复数加法时需要两次实数加法。CRNS 乘法需要四个实数乘积,一次加法和一次减法。但是当使用二次 RNS(QRNS)时,可以简化为两次乘法。

QRNS建立在 p = 4 k + 1 p=4k+1 p=4k+1 形式的高斯质数已知性质的基础上,其中 k k k 是正整数。 Z p Z_p Zp 中多项式 x 2 + 1 x^2+1 x2+1 有两个根 J ^ , − J ^ \hat J,-\hat J J^,J^ 其中 J ^ , − J ^ \hat J,-\hat J J^,J^ 是属于余数类 Z p Z_p Zp 的实整数。将一个 CRNS 转换为 QRNS 的过程如下:
f ( a + j b ) = ( ( a + J ^ b )   m o d   p , ( a − J ^ b )   m o d   p ) = ( A , B ) f(a+jb)=((a+\hat Jb)\ mod\ p,(a-\hat Jb)\ mod\ p)=(A,B) f(a+jb)=((a+J^b) mod p,(aJ^b) mod p)=(A,B)
在QRNS中,乘法和加法按分量实现:
( a + j b ) + ( c + j d ) ↔ ( A + C , B + D )   m o d   p (a+jb)+(c+jd)\lrarr(A+C,B+D)\ mod\ p (a+jb)+(c+jd)(A+C,B+D) mod p

( a + j b ) ( c + j d ) ↔ ( A C , B D )   m o d   p (a+jb)(c+jd)\lrarr(AC,BD)\ mod\ p (a+jb)(c+jd)(AC,BD) mod p

绝对值的平方按以下方式实现:
∣ a + j b ∣ 2 ↔ ( A B )   m o d   p |a+jb|^2\lrarr(AB)\ mod\ p a+jb2(AB) mod p
从 QRNS 转换为 CRNS 的过程如下:
f − 1 ( A , B ) = 2 − 1 ( A + B ) + j ( 2 J ^ ) − 1 ( A − B )   m o d   p f^{-1}(A,B)=2^{-1}(A+B)+j(2\hat J)^{-1}(A-B)\ mod\ p f1(A,B)=21(A+B)+j(2J^)1(AB) mod p

例:

取高斯质数 p = 13 p=13 p=13,计算 ( 2 + j ) ( 3 + j 2 ) (2+j)(3+j2) (2+j)(3+j2)

Z p Z_p Zp 中二次方程 x 2 ≡ ( − 1 )   m o d   13 x^2\equiv(-1)\ mod\ 13 x2(1) mod 13 有两个根:
J ^ = 5 , − J ^ = − 5 ≡ 8   m o d   13 \hat J=5,-\hat J=-5\equiv8\ mod\ 13 J^=5,J^=58 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 ) = ( A C , B D )   m o d   p ≡ ( 0 , 8 )   m o d   13 (A,B)(C,D)=(AC,BD)\ mod\ p\equiv(0,8)\ mod\ 13 (A,B)(C,D)=(AC,BD) mod p(0,8) mod 13
接下来将 QRNS 转回 CRNS:

解方程 2 x ≡ 1   m o d   13 2x\equiv1\ mod\ 13 2x1 mod 13 10 x ≡ 1   m o d   13 10x\equiv1\ mod\ 13 10x1 mod 13 2 − 1 ≡ 7 2^{-1}\equiv7 217 ( 2 J ^ ) − 1 = 1 0 − 1 ≡ 4 (2\hat J)^{-1}=10^{-1}\equiv4 (2J^)1=1014
f − 1 ( 0 , 8 ) = 7 ( 0 + 8 ) + j 4 ( 0 − 8 )   m o d   13 ≡ 4 + j 7   m o d   13 f^{-1}(0,8)=7(0+8)+j4(0-8)\ mod\ 13\equiv 4+j7\ mod\ 13 f1(0,8)=7(0+8)+j4(08) mod 134+j7 mod 13

下图给出 CRNS 和 QRNS 之间的映射关系

img2

猜你喜欢

转载自blog.csdn.net/verse_monger/article/details/105783686