Как рассчитать вес Хэмминга для вектора?

Я пытаюсь вычислить вес Хемминга вектора в 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

Буду очень признателен, если вы поможете мне, пожалуйста.

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), который определяет размер, который вы хотите суммировать.

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

РЕДАКТИРОВАТЬ

Чтобы это была действительная и значимая функция 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.
Другие вопросы по тегам