如何在MATLAB中将定点(Q格式)数转换为浮点数

时间:2015-10-25 17:06:51

标签: python matlab numpy

为什么int16没有从十六进制字符串中检索符号?

MATLAB:

>> single(int16(hex2dec('ffff')))
ans =

       32767

>> int16(hex2dec('ffff')) == int16(hex2dec('8fff'))

ans =

     1

为了将其置于一般上下文中,我想在MATLAB中重写以下numpy Python 代码段代码:

>>> import numpy as np 
>>> i='ffff'
>>> q='3fff'
>>> i_float = np.int16(int(i,16))
>>> i_float = i_float * 2 ** -15
>>> i_float
-3.0517578125e-05
>>> q_float = np.int16(int(q,16))
>>> q_float = q_float * 2 ** -15
>>> q_float
0.499969482421875

1 个答案:

答案 0 :(得分:1)

这就是我所拥有的。 (是的,它似乎比应该更复杂。)

i_hex = 'ffff'
q_hex = '3fff'

i_int16 = typecast(uint16(hex2dec(i_hex)),'int16')
i_float = single(i_int16) * 2 ^ -15

q_int16 = typecast(uint16(hex2dec(q_hex)),'int16')
q_float = single(q_int16) * 2 ^ -15

输出:

i_hex = ffff
q_hex = 3fff
i_int16 = -1
i_float =   -3.05175781250000e-05
q_int16 = 16383
q_float =  0.499969482421875

hex2dec将十六进制转换为double,因此我将其转换为uint16以保留符号位(hex2dec拒绝执行)。然后我typecast将结果发送到已签名的int16。这只取uint16的位并将它们解释为int16。然后将其转换为single和bitshift。

注意:我使用format long查看尽可能多的小数位。