数域是指数的集合,是近代数学研究的一个重要分支。特别是在数字信号处理,编解码运算中的理论研究和实际工程应用中得到广泛的应用。的数域不仅定义数的集合,还定义了数的运算规则。一般情况下规定了加、减、乘、除四则运算。下文就数域的定义、分类、运算规则及应用等内容进行描述。
1. 数域
数域是由数组成的集合,并在该集合上定义了一套运算规则,如加、减、乘、除(除数不为0)等。常见的有二进制数域,十进制数域等。其中在十进制术语中又有整数域、有理数域、无理,数域、实数域、复数域等。数域一般用F表示。可以用枚举方式表示,如二进制数域可以写成F[0 ,1],十进制数域可以写成F[0,1,2,3,4,5,6,8,9]等。也可以用描述的方式表示,如实数域FR={X/XϵR},一般到数域的元素较多或无穷多而无法用枚举的方式表达时,都用描述的方法表示。
2. 数域运算规则
不同的数域可以定义不同的运算规则,如实数域可以定义加、减、乘、除(除数不为零),开方、求导、积分等运算。一般数域的运算规则至少包含加、减、乘、除(除数不为零)四则运算。
-
封闭数域
如果F中任意两个数的和、差、积、商(除数不为0)仍是F中的数,则称F为一个封闭数域或闭合数域,简称数域。不是任何定义的数域都是闭合数域,如整数就不是闭合数域,因为两个整数相除可能得到小数值(如3/5)。无理数集合也不是封闭数域,因为两个无理数的运算可能是有理数(如-=0)。在本文及后续文章讨论的数域都是指封闭数域。但有理数、实数等都是闭合数域。
3. 数域的性质
满足四则运算的闭合域,应有下列属性。
- 在定义的数域中可以实现加、减、乘、除(除数不为0)四则运算;
- 0,1元素,数域中包含元素0和元素1;
- 逆元素(反元素),如元素a,则-a,1/a也应该包含在数域中。即应该满足a + (-a) = 0, a *(1/a) = 1;
- 满足加法和乘法运算的交换律,如a + b = b + a, a * b = b * a等。
- 满足加法和乘法运算的结合律,如 (a + b) + c = a + (b + c);
- 满足加法和乘法运算的分配律,如a(b + c) = ab + ac;
- 如果减法和除法用逆元素表示,也满足交换律、结合律以及分配律。
4. 矢量数域及矢量运算
数域可以可以有标量数域和适量数域两种,没有特殊说明一般是指标量,即数域内的元素。数域也可以按照一定的顺序组成有序数域,并在有序数域上进行运算。根据有序数的个数可以确定维数,矢量不仅有量的大小还有方向。如在实数空间内的2维序列,可以在2维空间内实现适量的加减运算,而在3维域内还能适量实现乘法运算等。由这些有序域可以映射到矢量空间上。如二维元素生成矢量可以与平面内点一一对应,也可以用平面的有向失线(有方向的线段)表示,在平面坐标内如图1所示。

图1
用矢量表达含有权值的数据,如10进制978可以表示为 978 = 9*102 + 7*101 + 8*100, 可以用矢量表示为 a = [9,7,8]。可以在此基础上定义带有权值数据的运算。
-
加减运算
-
带进位(借位)的加减法
-
带进位位加,上式如果定义进位位加,应实现加法时低位产生的进位向高位进位,
如:
a + b = [9,7,8] + [3,2,4] = [1,3,0,2]
a – b = [9,7,8] + [3,2,4] = [6,5,4]
b – a = [3,2,4] – [9,7,8] = -[3,4,6]
对于一般进制的数据可以用X的幂次方代表权值,生成一个表达式的形式,如向量a = [9,7,8],b = [3,2,4]可以表达为
a = 9*X2 + 7*X1 + 8*X0= 9X2 + 7X1 + 8
b = 3X2 + 2X1 + 4X0= 3X2 + 2X1 + 4
a + b = 9X2 + 7X1 + 8 + 3X2 + 2X1 + 4
如果X表示10进制的权值,计算结果如下
= 12*102 + 9*101 + 12
= 10*102 + 2*102 + 9*101 + 10 + 2
= 10*102 + 2*102 + 10*101 + 2
= 10*102 + 2*102 + 1*102 + 2
= 1*103 + 3*102 + 2
= 1*X3 + 3*X2 + 0*X1 + 2*X0
其中X幂次方可能为二进制,8进制,10进制,16进制等的权值,如果定义含进位的计算方式,则
-
- 2进制的权值为2幂次方, 逢2进1
- 8进制的权值为8幂次方, 逢8进1
- 10进制的权值为10幂次方,逢10进1
- 16进制的权值为16幂次方,逢16进1
带借位的减法与加法类似,向高位借位时,每借一位都相当于对应基数大小。
-
不带进位(借位)的加减法
在不带进位(借位)的加、减法中X的幂并不表示具体的权值,仅代表相应的序号,因此没有进位或借位的运算,仅是对应的权值的数相加或减,进位(借位)位直接丢弃,这种运算称为模运算(模2运算,模8运算,模10运算等),如
a + b = [9,7,8] + [3,2,4] = [2,9,2]
不带借位的加法,当有借位时,借位位丢弃,如13 – 9 = [1,3] – [0,9] = 14
a – b = [9,7,8] – [3,2,4] = [6,5,4]
a – b = 9X2 + 7X1 + 8 – 3X2 – 2X1 – 4 = 6X2 + 5X1 + 4
b – a = [3,2,4] – [9,7,8] = [4,5,6]
b – a = 3X2 + 2X1 + 4 – 9X2 – 7X1 – 8 = 4X2 + 5X1 + 6
不带进位位的减法也可以用负数补码相加的方法实现。对于10进制数补码的计算方法如下:设n为0-9的十进制数,+n的补码为n, -n 的补码为10-n。如-1的补码为9,-2的补码为8等。使用补码可以将不带进位(借位)位的加、减法统一都使用加法实现。
例如,假设m,n为0-9的十进制数 m – n = m + (10 – n)
不带借位的减法也一样,仅对应相同权值的数参与运算,不向高位借位
如:b – a = 4X2 + 5X1 + 6
不带借位的加减法一般用在2进制的数域中定义的模2运算中。详细内容请参见2进制模2数域及计算。
矢量乘法
矢量乘法包含点乘和叉乘两种。点乘用.表示,叉乘用x表示。
点乘.表示矢量中对应的元素相乘相加,结果为标量。如,
- b = [9,7,8].[3,2,4] = 27 + 14 + 32 = 73,
这种运算可以扩展到多矢量矩阵运算。
叉乘x可以用如下步骤计算
- 表示矢量b中的每一个带权值的元素与矢量a相乘相加,如,
a * b = (9X2 + 7X1 + 8X0 ) * 3X2 + (9X2 + 7*X1 + 8) * 2X1 + (9X2 + 7*X1 + 8) * 4X0
- 再将(1)式的多项式每项a中的元素与对应的元素相乘,如
a * b = (9X2 + 7X1 + 8X0 ) * 3X2 + (9X2 + 7*X1 + 8) * 2X1 + (9X2 + 7*X1 + 8) * 4X0
= 27X4 + 21X3 + 24X2 + 18X3 + 14X2 + 16X2 + 36X2 + 28X1 + 32X0
= 27X4 + 39X3 + 64X2 + 28X1 + 32X0
- 按有进位位方式计算,低位向高位进位,如
a * b = 27X4 + 39X3 + 64X2 + 28X1 + 32X0 = 3X5 + X4 + 5X3 + 7X2 + X1 + 2X0
- 按无进位位的方式计算,直接丢弃进位位
a * b = 7X4 + 9X3 + 4X2 + 8X1 + 2X0
总结:上文介绍了数域的概念,数域的属性,数域的计算以及由带有权值形成的向量在数域上的计算,虽然上文中数域的计算所用的例子都是在10进制的数域进行的,但根据数域的定义,在其它进制(如2进制,8进制,16进制)定义的数域同样适用。