2017-06-15 79 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