首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将伽罗瓦域矩阵转换为二进制矩阵

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

Stack Overflow用户
提问于 2019-10-29 23:25:30
回答 1查看 522关注 0票数 0

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

代码语言:javascript
复制
---------------------------------------------------------------------------
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);

我需要将代码列与000,010,...有开关情况或if,但代码矩阵的行是伽罗华域格式,我有问题的代码是跟随,matlab错误是开关表达式必须是标量或字符向量。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2019-10-30 07:01:15

您可以将代码从GF(2)转换为数值型数组,然后就很简单了:

test = code(1:3,i);之后,test的类是GF(2)数组。

  • 转换测试从GF(2)数组转换为逻辑array:numeric_test =( == on (nword,1));
  • 转换numeric_test为string:str_test = (char(numeric_test +
  • numeric_test from to decimal:decimal_test =十进制值的大小写开关,或仅将其用作索引: switch decimal_test case 0 symbol=R(1:500,1);案例1 symbol=R(1:500,2);

除了switch,你还可以这样做:

代码语言:javascript
复制
symbol = R(1:500, decimal_test+1);

..。

下面是一个完整的代码示例:

代码语言:javascript
复制
%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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58610504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档