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