2017-06-15 85 views
0

我有以下在Matlab(I没有Matlab的)码,即通过取样的二进制值的序列显然构建整数:我无法理解bitget()功能Python的等效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; 

。从docs开始,第一个arg是采样序列,第二个arg指定了采样的范围,但我对分割x:-y:z意味着什么感到困惑。我从docs了解到,它是“从索引xz的样本,从y的右边往左走”。那是对的吗?

bin2dec(num2str(bitget(n-1,9:-1:6)))的numpy相当于什么?我知道我应该使用numpy.packbits(),但我有点卡住了。

回答

1

在一个倍频程会话:

>> 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,它拉出 '位' 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' 
+0

谢谢!我没有想过在Octave中尝试排除故障。 – Raoul

+0

'np.binary_repr'可能会启动,给出一个类似的字符串版本。 – hpaulj