我试图在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
如果你能帮助我,我将非常感激。
求和的维度不对!
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.