Generate matrix of bits

后端 未结 3 494
别跟我提以往
别跟我提以往 2021-01-21 04:52

I would like to take an integer n defining the number of bits in my communication code and a vector defining the alphabet I am assigning to bits 0:n-1,

相关标签:
3条回答
  • 2021-01-21 04:59

    To easily convert zeros to -1 (and leave the ones intact) you can simply do

    minusOnes = 2 * zeroOnes - 1;
    
    0 讨论(0)
  • 2021-01-21 05:04

    You can also do it like this:

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

    That returns:

    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
    

    However, it's slower. I get 0.0012s (dec2bin) against 0.0002s (meshgrid+bitget) for 1024 values and 10 bits.

    0 讨论(0)
  • 2021-01-21 05:10

    dec2bin is actually not the best way to approach the problem, because its result is an array of strings (i.e a matrix of characters), where each digit is a character. If you want '-1' to represent a logical "0", that would be two characters, and it introduces problems.

    Consider an alternative method with bitget. Making use of Shai's suggestion, do the following:

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

    The will produce what you want:

    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
    
    0 讨论(0)
提交回复
热议问题