0

我正在尝试在 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

如果您能帮助我,我将不胜感激。

4

1 回答 1

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.
于 2016-08-08T08:51:32.110 回答