3

我想采用一个整数来n定义我的通信代码中的位数和一个定义我分配给 bits 的字母的向量0:n-1,并输出一个矩阵/单元数组,其中包含每个状态的字母符号,即:

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

生产

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

我尝试用更简单的方法来做这个dec2bin(0:7,3),但似乎没有一种快速的方法可以将零变成-1s。

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

4

3 回答 3

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
于 2013-05-05T10:54:28.223 回答
1

要轻松地将零转换为-1(并保持原样),您只需执行以下操作

minusOnes = 2 * zeroOnes - 1;
于 2013-05-05T10:27:56.760 回答
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

于 2017-01-06T03:37:40.070 回答