def bi2sym(x, m):
"""Convert bits to symbols.
:param x: bit array
:param m: symbol alphabet size (must be a power of 2)
:returns: symbol array
>>> import arlpy
>>> arlpy.comms.bi2sym([0, 0, 1, 0, 1, 0, 1, 1, 1], 8)
array([1, 2, 7])
"""
n = int(_np.log2(m))
if 2**n != m:
raise ValueError('m must be a power of 2')
x = _np.asarray(x, dtype=_np.int)
if _np.any(x < 0) or _np.any(x > 1):
raise ValueError('Invalid data bits')
nsym = len(x)/n
x = _np.reshape(x, (nsym, n))
y = _np.zeros(nsym, dtype=_np.int)
for i in range(n):
y <<= 1
y |= x[:, i]
return y
评论列表
文章目录