我在Matlab中有以下代码(我没有Matlab),显然是通过采样二进制值序列来构造整数:
velocity_LUT_10bit = zeros(2^10,1);
for n = 1:length(velocity_LUT_10bit),
imagAC = bin2dec(num2str(bitget(n-1,9:-1:6))) - bitget(n-1,10)*2^4; % Imaginary part of autocorrelation: signed 5-bit integer
realAC = bin2dec(num2str(bitget(n-1,4:-1:1))) - bitget(n-1, 5)*2^4; % Real part of autocorrelation: signed 5-bit integer
velocity_LUT_10bit(n) = velNyq_CF*angle((realAC+0.5)/16 + 1i*(imagAC+0.5)/16)/pi;
end;
我无法理解bitget()
功能。从docs开始,第一个arg是采样序列,而第二个arg指定样本的范围,但我对切片x:-y:z
的含义感到困惑。我理解它从docs作为“从索引 x 到 z 的样本,从 y ”的步幅向右移动。这是对的吗?
bin2dec(num2str(bitget(n-1,9:-1:6)))
的numpy等价物是什么?我知道我应该使用numpy.packbits()
,但我有点卡住了。
答案 0 :(得分:1)
在Octave会议中:
>> for n=0:3:15,
bitget(n,1:1:5)
end
ans =
0 0 0 0 0
ans =
1 1 0 0 0
ans =
0 1 1 0 0
ans =
1 0 0 1 0
ans =
0 0 1 1 0
ans =
1 1 1 1 0
这只是数字的二进制表示,具有切片选择的位。 Octave / Matlab正在使用' start:step:stop'语法。
其余的将数字转换为字符串,从二进制转换为十进制:
>> num2str(bitget(13,5:-1:1))
ans = 0 1 1 0 1
>> bin2dec(num2str(bitget(13,5:-1:1)))
ans = 13
bitget(n-1,9:-1:6)
必须以相反的顺序取出第9位到第6位(2的幂)。因此,对于最多2 ^ 10-1的数字,它会拔出“#bit”位。 1-4,5,6-9和10.
我不熟悉Python / numpy二进制表示,但这是一个开始:
>> num2str(bitget(100,10:-1:1))
ans = 0 0 0 1 1 0 0 1 0 0
In [434]: np.binary_repr(100,10)
Out[434]: '0001100100'