2015-11-20 2 views
1

Я написал следующий код matlab, чтобы получить 8 бит lsb для каждого элемента в массиве 1D.получить 8 младших значащих бит для каждого элемента в массиве

clc; 
clear all; 
close all; 

sum=uint32(rand(1,80)); 
sumf=uint8(zeros(1,80)); 

for i=1:80   
    sumf(1,i)=bitget(sum(1,i),8:-1:1,'uint32'); 
end 

Однако, когда я бегу, я получаю следующее сообщение об ошибке

Assignment has more non-singleton rhs dimensions than 
non-singleton subscripts 

Error in Untitled2 (line 11) 
    sumf(1,i)=bitget(sum(1,i),8:-1:1,'uint32'); 

Любые предложения для устранения этой ошибки? Что я делаю неправильно

ответ

0

Ваш код имеет ряд проблем:

  1. my_uint32 = uint32(rand(1,80)) не генерирует случайные числа. Он генерирует массив uint32 размером 1 × 80, который равен 0 или 1, в зависимости от того, возвращает ли результат rand двойное значение выше или ниже .5.
  2. Вы пытаетесь назначить вектор 1x8 для uint8. В вашем случае bitget возвращает вектор uint32, например: [0,0,0,0,0,0,0,1]. Вы не можете назначить вектор пятну в матрице для одного скаляра.
  3. sum - стандартная функция в Matlab. Хотя вы можете использовать его как переменную, это плохой стиль и может быть запутанным.

    `

Я хотел бы использовать побитовое and для извлечения 8 значащих цифр:

random_uint32s = uint32(floor(rand(1, 80) * (2^32 - 1))); 
lsd8 = bitand(random_uint32s, 255); %255 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 

my_uint8 = uint8(lsd8); % if you really want it in a uint8 type for some weird reason? 
+0

Весь код очень большой. Чтобы сохранить короткий вопрос, я использовал массив случайных чисел. Выполняется команда numbers.lsd8 = bitand (random_uint32s, 255). Огромное спасибо :-) – Anonymous

Смежные вопросы