如何计算向量的汉明权重?

How to calculate the Hamming weight for a vector?

我正在尝试在 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) 的第二个输入参数,指定要求和的维度。

请注意,这种方法非常慢,正如您从 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.