Menu Close

数域的概念

数域是指数的集合,是近代数学研究的一个重要分支。特别是在数字信号处理,编解码运算中的理论研究和实际工程应用中得到广泛的应用。的数域不仅定义数的集合,还定义了数的运算规则。一般情况下规定了加、减、乘、除四则运算。下文就数域的定义、分类、运算规则及应用等内容进行描述。

1. 数域

数域是由数组成的集合,并在该集合上定义了一套运算规则,如加、减、乘、除(除数不为0)等。常见的有二进制数域,十进制数域等。其中在十进制术语中又有整数域、有理数域、无理数域、实数域、复数域等。数域一般用F表示。可以用枚举方式表示,如二进制数域可以写成F[0, 1],十进制数域可以写成F[0, 1, 2, 3, 4, 5, 6, 7, 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所示。

%title插图%num

图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进制的权值,计算结果如下

                   = X3 +  3X2 + 0X1 + 2 = X3 +  3X2 + 2

其中X 可能为二进制,8进制,10进制,16进制等的权值,如果定义含进位的计算方式,则

    • 二进制的权值为2,逢2进1
    • 8进制的权值为8,逢8进1
    • 10进制的权值为10,逢10进1
    • 16进制的权值为16,逢16进1

带借位的减法与加法类似,向高位借位时,每借一位都相当于权值大小。

  • 不带进位(借位)的加减法

在不带进位(借位)的加、减法中X的幂并不表示具体的权值,仅代表相应的序号,因此没有进位或借位的运算,仅是对应的权值的数相加或减,进位(借位)位直接丢弃,如

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表示。

点乘.表示矢量中对应的元素相乘相加,结果为标量。如,

  1. b=[9 ,7, 8].[3,2,4] =27+14+32=73,

这种运算可以扩展到多矢量矩阵运算。

叉乘x可以用如下步骤计算

  1. 表示矢量b中的每一个带权值的元素与矢量a相乘相加,如,

a*b=(9X2+7X1+8X0 )*3X2+(9X2+7*X1+8)*2X1+(9X2+7*X1+8)*4X0

  1. 再将(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

  1. 按有进位位方式计算,低位向高位进位,如

a*b=27X4+39X3+64X2+28X1+32X0 =3X5+X4+5X3+7X2+ X1 +2X0

  1. 按无进位位的方式计算,直接丢弃进位位

a*b=7X4+9X3+4X2+8X1+2X0

总结:上文介绍了数域的概念,数域的属性,数域的计算以及由带有权值形成的向量在数域上的计算,虽然上文中数域的计算所用的例子都是在10进制的数域进行的,但根据数域的定义,在其它进制(如2进制,8进制,16进制)定义的数域同样适用。

 

Posted in FPGA, FPGA, 教材与教案, 文章, 资料区

发表评论

相关链接