2016-08-08 14 views
0

Я пытаюсь вычислить вес Хэмминга вектора в Matlab.Как рассчитать вес Хэмминга для вектора?

function Hamming_weight (vet_dec) 
Ham_Weight = sum(dec2bin(vet_dec) == '1')  
endfunction 

Вектор является:

Hamming_weight ([208 15 217 252 128 35 50 252 209 120 97 140 235 220 32 251]) 

Однако это дает следующий результат, который не то, что я хочу:

Ham_Weight = 

    10 10 9 9 9 5 5 7 

Я был бы очень признателен, если вы могли бы мне помочь Пожалуйста.

+0

Это Octave, а не MATLAB –

+0

Октава похожа на MATLAB. –

+0

Это похоже, но не то же самое. Поэтому вы всегда должны сказать, используете ли вы октаву или matlab или код должен работать в обеих системах. – Andy

ответ

1

Вы суммируете неправильное измерение!

sum(dec2bin(vet_dec) == '1',2).' 
ans = 
    3 4 5 6 1 3 3 6 4 4 3 3 6 5 1 7 

dec2bin(vet_dec) создает матрицу, как это:

11010000 
00001111 
11011001 
11111100 
10000000 
00100011 
00110010 
11111100 
11010001 
01111000 
01100001 
10001100 
11101011 
11011100 
00100000 
11111011 

Как вы можете видеть, что вы заинтересованы в сумме каждой строки, а не каждый столбец. Используйте второй входной аргумент sum(x, 2), который определяет размер, который вы хотите суммировать.

Обратите внимание, что этот подход ужасно медленный, как вы можете видеть из this question.

EDIT

Для этого, чтобы быть действительной, и значимая функцией MATLAB, вы должны изменить определение функции немного.

function ham_weight = hamming_weight(vector)  % Return the variable ham_weight 

ham_weight = sum(dec2bin(vector) == '1', 2).'; % Don't transpose if 
               % you want a column vector 
end            % endfunction is not a MATLAB command. 
Смежные вопросы