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

时间:2016-08-08 08:38:19

标签: octave hammingweight

我正在尝试在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 个答案:

答案 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.