我正在尝试在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 :(得分: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看到。
修改强>
要使其成为有效且有意义的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.