用于 AOA 估计的 Cordic Cosine 函数。我以度数的形式得到 PDOA 估计,并且想要找到 AOA 的余弦和反正弦

问题描述 投票:0回答:1
def cosine_fun(input):
    k = 1.646
    bitw = 15
    inpLUK = np.zeros(bitw + 1)

    x = 1/k
    y = 0
    z = 0

    for j in range(bitw):
        tmp = atan(2 ** -(j - 1))
        inpLUK[j] = round(tmp / pi * (2 ** bitw - 1))

    x = round(x * 2**bitw)
    y = round(y * 2 ** bitw)
    for i in range(bitw):
        if i == 0:
            tmp_x = x << 1
            tmp_y = y << 1
        else:
            tmp_x = x >> (i - 1)
            tmp_y = y >> (i - 1)
        if z > 0:
            x = x - tmp_y
            y = y + tmp_x
            z = z - inpLUK[i]
        else:
            x = x + tmp_y
            y = y - tmp_x
            z = z + inpLUK[i]

    x_out = x/2**bitw
    y_out = y/2**bitw

    return x_out, y_out, z


input_angle = 30.0
sign = 0

if input_angle >= 360:
    angle = input_angle % 360
elif input_angle < -360:
    input_angle = input_angle % -360

if input_angle > 180:
    input_angle -= 360
elif input_angle < -180:
    input_angle += 360

if input_angle > 90:
    input_angle -= 180
    sign = 1

if input_angle < -90:
    input_angle += 180
    sign = 1

angle_out = input_angle

angle_out = angle_out * (pi/180)

x, y, z = cosine_fun(angle_out)

if sign:
    x = -x
    y = -y

print("cosine({}) = {}".format(input_angle, x))

这是估计余弦的代码。但它并没有按预期工作。有人可以帮我吗?我必须使用定点或浮点来实现它。

我尝试输入为 30 度,输出为 x = 2.23 、z = 1 和 y = -0.00064。但余弦 (30) 的值为 0.15。

python trigonometry angle cordic
1个回答
0
投票

问题在于

inpLUK[j]
的计算和
x
的初始值:

k = 0.607252935
bitw = 15
inpLUK = np.zeros(bitw + 1)
x = 1.0
y = 0
x = 0
for j in range(bitw):
    tmp = atan(2 ** -(j))
    inpLUK[j] = round(tmp * (2 ** bitw))

在您的代码中,

k
设置为
1.646
,这是不正确。正确的 CORDIC 增益是
0.607252935
。另外,
x
的初始值应该是
1.0
,而不是
1/k

inpLUK[j]
计算也是不正确。正确的计算是
round(tmp *(2 ** bitw))
。除以
pi
和减
1
是不必要的,也是不正确

尝试多关注一些小细节,因为它们会显着影响您的最终结果😉。

© www.soinside.com 2019 - 2024. All rights reserved.