当前位置: 首页 > 知识库问答 >
问题:

如何将伽罗瓦场矩阵转换为二进制矩阵

柴兴贤
2023-03-14

我有一个编码器BCH的输出矩阵(3,63),但这个矩阵是伽罗瓦域,我需要将这个伽罗瓦域转换为矩阵二进制,因为matlab将伽罗瓦域中的元素视为字符串,我需要将这些值视为二进制数。

---------------------------------------------------------------------------
ENCODE
----------------------------------------------------------------------------
M = 6;                    %
n = 2^M-1;                % Codeword length
k=36;                     % Message length
rows2=3;
msg=reshape(matrix2,[rows2,k]);
gfmsg=gf(msg);
[genploy,t]=bchgenpoly(n,k);
code=bchenc(gfmsg,n,k);
noisycode = code + randerr(rows2,n,1:t);

我需要将代码列与000010进行比较,。。。对于开关情况或if,但代码矩阵行是伽罗瓦场格式。我的问题是,遵循matlab错误是开关表达式必须是标量或字符向量。

for i=1:63
   test =code(1:3,i)
   switch test
      case 000
          symbol=R(1:500,1);
      case 100
          symbol=R(1:500,2);
      case 010
          symbol=R(1:500,3);
      case 110
          symbol=R(1:500,4);
      case 001
          symbol=R(1:500,5);
      case 101
          symbol=R(1:500,6);
      case 011
          symbol=R(1:500,7);
      case 111
          symbol=R(1:500,8);
   end
   symbol=(symboltx(:,i))
end

共有1个答案

李弘光
2023-03-14

您可以将代码从GF(2)转换为数字数组,从那里很简单:

试验后=代码(1:3,i),测试的类是GF(2)数组。

>

  • 将测试从GF(2)数组转换为逻辑数组:

    numeric_test = (test == ones(nwords, 1));
    

    将数值测试转换为字符串:

    str_test = (char(numeric_test + '0'))';
    

    将字符串从二进制转换为十进制:

    decimal_test = bin2dec(str_test);
    

    在十进制值上使用switch case,或将其用作索引:

    switch decimal_test
        case 0
            symbol=R(1:500,1);
        case 1
            symbol=R(1:500,2);
    

    您可以这样做而不是开关

    symbol = R(1:500, decimal_test+1);
    

    ...

    这是一个完整的代码示例:

    %Build data set:
    M = 6;
    n = 2^M-1;   % Codeword length
    k = 36;      % Message length
    nwords = 3; % Number of words to encode
    gfmsg = gf(randi([0 1],nwords,k));
    [genploy,t]=bchgenpoly(n,k);
    code = bchenc(gfmsg,n,k);
    
    %Assume we are inside the for loop 
    %for i=1:63 
    i = 1;
    test = code(1:3, i);
    
    %True answer code begins here:
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %Convert test from GF(2) array to logical array
    numeric_test = (test == ones(nwords, 1));
    
    %Convert to string:
    str_test = (char(numeric_test + '0'))';
    
    %Convert from string to decimal:  
    decimal_test = bin2dec(str_test);
    
    %Now you can use switch case on the decimal value, or just use it as an index.  
    switch decimal_test
        case 0
            symbol=R(1:500,1);
        case 1
            symbol=R(1:500,2);
        case 2
            symbol=R(1:500,3);
        case 3
            symbol=R(1:500,4);
        case 4
            symbol=R(1:500,5);
        case 5
            symbol=R(1:500,6);
        case 6
            symbol=R(1:500,7);
        case 7
            symbol=R(1:500,8);
    end
    

  •  类似资料:
    • 问题内容: 我在NumPy中有三个相同大小的正方形矩阵。我想将它们组合成块对角矩阵。 例: 做这个的最好方式是什么? 问题答案: scipy.linalg具有block_diag函数以自动执行此操作

    • 嗨,假设您有两个不同的独立的64位二进制矩阵和()(是其自身的转置版本,使用转置版本的矩阵允许在乘法期间对的行而不是列进行操作,这对于二进制算术来说非常酷),并且您想要对这些矩阵进行乘法,唯一的问题是矩阵乘法结果被截断为64位,如果您在某个特定的矩阵单元中屈服于大于的值,则生成的矩阵单元将包含,否则 二进制和传统乘法结果: 你如何用上面描述的最有效物质的方法,将这些矩阵相乘? 我试图利用二进制(即

    • 我用成像软件Imaris研究免疫细胞,该软件允许在延时实验中掩蔽细胞表面,并将每个掩蔽表面从一个时间帧链接到另一个时间帧,以便可以跟踪它们。我使用2D数据集,对于每个时间帧和每个曲面对象(单元),我需要提取几个2D参数(周长、长轴长度、面积),以便可以监视单元形状随时间的变化。不幸的是,Imaris提供了几个3D参数(检测到的粒子体积等),但没有2D参数。Imaris的构建是为了将数据导出到Mat

    • 我目前正在将原始矩阵转换为光栅以使用焦距函数,然后我想将光栅转换回矩阵。但是,当我尝试将光栅函数用作时,出现了一条错误消息。矩阵()。即使有这个非常简单的例子: 以下是我得到的: 如果(!is.null(names(x)))列表(names(x),,则数组(x,c(length(x),1L)中出错: “dimnames”[1]的长度不等于数组范围 我正在使用RstuIO、R版本3.4.0和、和库。

    • 我有一个带有空间坐标和一个变量的矩阵数据。空间分辨率为1000米。 我想将其转换为光栅格式。 我使用下面的代码来完成它。但我得到的决心与我得到的不一样。有没有更好的方法可以用我的真实数据获得相同的分辨率?

    • 问题内容: 我有一个3,076,568个二进制值(1s和0s)的NumPy数组。我想将其转换为矩阵,然后在Python中转换为灰度图像。 但是,当我尝试将数组重塑为1,538,284 x 1,538,284矩阵时,出现内存错误。 如何减小矩阵的大小,以便将其变成适合屏幕显示的图像而又不丢失唯一性/数据? 此外,如何将其转换为灰度图像? 任何帮助或建议,将不胜感激。谢谢。 问题答案: 您的“二进制值