复数的加法和乘法
复数的加法相对比较简单
(a+jb) + (c+jd) = (a+c) + j (b+d), 实部和实部相加,虚部和虚部相加,两部分的加法运算按照前面讲述的有符号加法进行实现即可。 这里重点讲讲复数乘法:
(a+jb) *(c+jd) =a*c+ja*d+jb*c-b*d=(a*c-b*d)+j(a*d+b*c) 按照通常运算,按照这个公式即可,对应乘法和加减按照有符号乘法和加减法处理,即总共需要4个乘法器和2个加法器(减法器),注意:在实际集成电路实现复数,就是分为实部和虚部两部分,不会作a+jb的加法运算。 上面的结构可以考虑对公式进行化简优化:
复数乘法的优化
复数乘法(a+j*b)*(c+j*d)=(ac-bd)+j*(ad+bc)有2中优化形式,如下:
结构1:
令: m1 = (a+b)(c-d);m2 = bc;m3 = ad;
复则有:ac-bd = m1-m2+m3;
ad+bc = m2+m3;
结构2:
令: m1 = d(a-b);m2 = a(c-d);m3 = b(c+b);
则有:ac-bd = m2 + m1;
ad+bc = m3 + m1;
以上2中结构,都是通过减少一个乘法器,增加3个加法器的代价实现资源的优化。但是通过比较可以知道:结构2中计算ac-bd和ad+bc的路径延时一样,都需要经过2级加法和1级乘法。而结构1各条路径的延时相差较大,如:计算ac-bd 需要3级加法和1级乘法,而计算ad+bc则只需要1级加法和1级乘法。路径延时相差较大时,需要按照延时最大的路径进行流水打拍,效果没有结构2好。