使用固定点的复杂划分

时间:2014-11-14 06:48:31

标签: c division complex-numbers fixed-point

我正在编写一个C程序来在Fixed Point中执行2个复数的划分。 我无法从中得到分数部分。下面是更多细节。

我有两个复数:

N = a + ib
M = c + jd

我需要在固定点(不使用浮点)

进行N/M

上述复数的示例值可以是:

a = 1.55, b = 1.44, c = 1.24, d = 0.55

N = 1.55 + i(1.44)
M = 1.24 + j(0.55)

为了转换为固定点,我将这些a,b,c和d与2^14相乘。 之后他们变成了:

a = 0x6333, b = 0x5c28, c = 0x4f5c and d = 0x2333

然后执行N/M操作:

N/M = (a + ib)/(c + jd) = ((a + ib) * (c - jd)) / ((c + jd) * (c - jd))

然后对于真实的部分:

(ac + bd) / (c^2 + d^2)

依旧......

我面临的问题是我不理解如何从分部获得小数部分。 我只得到小数部分,大部分是1或0.

获得小数部分的正确方法是什么?在上面的例子中,实部应该是1.47490。但我只能得到1。

任何人都可以帮我正确地进行固定点的复杂划分吗?

非常感谢。

2 个答案:

答案 0 :(得分:0)

在定点除法和乘法中,必须注意结果值必须还有缩放因子 K

in addition / subtraction:
a * K  + b * K  =  K * ( a + b)

in multiplication:

(a * K) * (b * K)  =  K^2 * (a * b)   --> must compensate with 1/K
proper form:  (aK * bK) / K

in division:

(a * K) / (b * K) = a / b      --> must pre-multiply with K
proper form:   (aK * K) / (bK)

答案 1 :(得分:0)

对于两个复杂的X=a+jbY=c+jdj=sqrt(-1)abcd是实数,除法X/Y

给出
(ac+bd)/(c^2+d^2) + j(bc-ad)/(c^2+d^2)

如您所述,设K = 2^14,用于保存分数的二进制数字。 让Aa的固定数字表示,即A = a * K,同样地让B = b*KC=c*K和最后D=d*K。假设您的数字不足以溢出计算机的整数,在以下计算中:

您应首先计算U = A * C + B * DV = C * C + D * DW = B * C - A * D 然后,您应该计算V' = V >> 14。然后,X/Y的实部为U/V'X/Y的虚部为W/V',两个部分均以固定点形式表示。