从位编码数组中提取通道

extract channels from bit wise encoded array

我得到了一个按位编码的 3 个通道的数组。 像这样:

1 for channel 1
2 for channel 2
3 for channel 1 and 2
4 for channel 3
5 for channel 1 and 3
6 for channel 3 and 2

我知道如何在 Matlab bitand(digital_word, 2^1) 中使用按位和,但是如果我尝试使用 eg 对 python 做同样的事情。对于频道 1 np.bitwise_and(digital_word, 2^1) 我得到了乱码

如果频道是由位编码的,我想为给定的频道输出一个。

一些示例:
输入:

 array([0,0,1,0,1,0,3,4,5,6])

输出:

channel 1: [0,0,1,0,1,0,1,0,1,0]
channel 2: [0,0,0,0,0,0,1,0,0,1]
channel 3: [0,0,0,0,0,0,0,1,1,1]

我不确定您使用 2^1 的目的是什么,但使用 np.bitwise_and 是正确的方法。

例如,通道 1 的结果为 np.bitwise_and(digital_word, 1):

>>> digital_word = np.array([0,0,1,0,1,0,3,4,5,6])
>>> np.bitwise_and(digital_word, 1)
array([0, 0, 1, 0, 1, 0, 1, 0, 1, 0])

对于较高值的位,结果几乎是你想要的,但你需要右移它以获得 1 而不是 2n.

>>> np.bitwise_and(digital_word, 2)
array([0, 0, 0, 0, 0, 0, 2, 0, 0, 2])
>>> np.bitwise_and(digital_word, 2) >> 1
array([0, 0, 0, 0, 0, 0, 1, 0, 0, 1])

注意获取第三位需要按位与4(=23–1),不是3:

>>> np.bitwise_and(digital_word, 4)
array([0, 0, 0, 0, 0, 0, 0, 4, 4, 4])
>>> np.bitwise_and(digital_word, 4) >> 2
array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1])

一般来说,获取第n位:

np.bitwise_and(digital_word, (1 << n)) >> n

NumPy 数组也支持 & 按位运算符,所以这等价于:

(digital_word & (1 << n)) >> n