Matlab 如何将伽罗瓦域矩阵转换为二进制矩阵
我有一个编码器BCH的输出矩阵(3,63),但这个矩阵是伽罗瓦字段,我需要将这个伽罗瓦字段转换成矩阵二进制,因为matlab将伽罗瓦字段中的元素视为字符串,我需要将这些值视为二进制数Matlab 如何将伽罗瓦域矩阵转换为二进制矩阵,matlab,galois-field,Matlab,Galois Field,我有一个编码器BCH的输出矩阵(3,63),但这个矩阵是伽罗瓦字段,我需要将这个伽罗瓦字段转换成矩阵二进制,因为matlab将伽罗瓦字段中的元素视为字符串,我需要将这些值视为二进制数 --------------------------------------------------------------------------- ENCODE ---------------------------------------------------------------------------
---------------------------------------------------------------------------
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,但代码矩阵行采用Galois字段格式
我遇到问题的代码是以下代码: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
您可以将代码从GF(2)转换为数值数组,从那里可以简单地实现: 试验后<代码>试验=代码(1:3,i),
test
的类是GF(2)数组
- 将测试从GF(2)数组转换为逻辑数组:
numeric_test = (test == ones(nwords, 1));
- 将数值测试转换为字符串:
str_test = (char(numeric_test + '0'))';
- 将字符串从二进制转换为十进制:
decimal_test = bin2dec(str_test);
- 在十进制值上使用开关大小写,或仅将其用作索引:
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
请发布可运行的代码,以复制您的problem@zurbaranf,您尝试过我发布的解决方案吗?