硬件资源节约技巧:利用复数乘模块实现共轭复数乘-不经过取反加1

Posted 飞凡可期

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了硬件资源节约技巧:利用复数乘模块实现共轭复数乘-不经过取反加1相关的知识,希望对你有一定的参考价值。

复数乘简单实现共轭乘

问题

已经有一个复数乘模块 Cmultiply(A,B)=C,实现了复数乘法功能:
A*B = (a+bj)(c+dj) = ac-bd + (bc+ad)j=C
则基于此模块实现复数共轭乘法 A ′ ∗ B ′ H A'*B'^H ABH?
( a + b j ) ∗ ( c − d j ) = ( a c + b d ) + ( b c − a d ) j (a+bj)*(c-dj) = (ac+bd) + (bc-ad)j (a+bj)(cdj)=(ac+bd)+(bcad)j
要求,不用对B取共轭(因为取反加1,涉及2次硬件计算)是否可以用交换实部、虚部次序方法获取?

解决

通过交换输入的A以及输出的C的实部虚浮,实现共轭乘到直接复数乘的转变!

硬件中,输入次序容易控制,由此每次共轭乘节约一个加、一个取反,资源优化效果极为明显!

**证明:**即求这样结论 ( A ′ . i m a g + j A ′ . r e a l ) ∗ B ′ H = C ′ . i m a g + j ∗ C ′ . r e a l (A'.imag + j A'.real)*B'^H= C'.imag + j*C'.real (A.imag+jA.real)BH=C.imag+jC.real
从而有
C m u l t i p l y ( A ′ . i m a g + j A ′ . r e a l , B ′ ) = ( b + a j ) ( c + d j ) = ( a c − b d ) + ( a c + b d ) j Cmultiply(A'.imag + jA'.real, B') = (b+aj)(c+dj) = (ac-bd) + (ac+bd)j Cmultiply(A.imag+jA.real,B)=(b+aj)(c+dj)=(acbd)+(ac+bd)j
交换输出次序,可发现实现了共轭乘的效果。

以上是关于硬件资源节约技巧:利用复数乘模块实现共轭复数乘-不经过取反加1的主要内容,如果未能解决你的问题,请参考以下文章

复数运算

DSP Math加速优化整理

DSP Math加速优化整理

DSP Math加速优化整理

用java 编写一个复数类

矩阵论基础