生成位矩阵

时间:2013-05-05 10:06:55

标签: matlab bit-manipulation octave

我想取一个整数n来定义我的通信代码中的位数和一个定义我分配给位0:n-1的字母的向量,并输出一个包含该位的矩阵/单元数组每个州的字母表示法,即:

function M = mycommarray(3,[-1,1])

产生

M = [{-1,-1,-1}, {-1,-1,1}...]

我尝试使用dec2bin(0:7,3)更轻松地执行此操作,但似乎没有一种快速方法可以将{0}变为-1

是否有预先包装的东西可以做到这一点?在这种情况下,我不希望任何人为我(与家庭作业相关)。

3 个答案:

答案 0 :(得分:5)

dec2bin实际上不是解决问题的最佳方法,因为它的结果是一个字符串数组(一个字符矩阵),其中每个数字都是一个字符。如果您希望'-1'表示逻辑“0”,那将是两个字符,并且会引入问题。

考虑使用bitget的替代方法。利用Shai的建议,请执行以下操作:

[bits, values] = meshgrid(1:3, 0:7);
M = 2 * bitget(values, bits) - 1;

这将产生你想要的东西:

M =
    -1    -1    -1
     1    -1    -1
    -1     1    -1
     1     1    -1
    -1    -1     1
     1    -1     1
    -1     1     1
     1     1     1

答案 1 :(得分:1)

要轻松将零转换为-1(并保留原样),您只需执行

minusOnes = 2 * zeroOnes - 1;

答案 2 :(得分:1)

你也可以这样做:

M = 2 * (dec2bin(0:7, 3)=='1')-1;

返回:

M =
    -1    -1    -1
    -1    -1     1
    -1     1    -1
    -1     1     1
     1    -1    -1
     1    -1     1
     1     1    -1
     1     1     1

然而,它变慢了。对于1024个值和10位,我得到0.0012s(dec2bin)对0.0002s(meshgrid + bitget)。