我无法修复此程序中的错误。该程序中的错误在以下行中:
mx(mslen+1:length(mx))=r;
???在赋值A(I)= B中,B和中的元素个数 我必须是一样的。 ==>中的错误25点 MX(mslen + 1:长度(MX))= R;
该计划
clc;
clear all;
en=[1 0 0 0 0 0 0; ...
1 1 1 1 1 1 1; ...
1 1 0 0 0 0 0; ...
1 0 1 0 1 0 1; ...
1 1 1 1 0 0 0; ...
1 1 0 0 1 1 0; ...
0 0 0 0 0 0 0; ...
1 1 0 0 0 1 1; ...
0 0 0 0 1 1 1]
m=en;
mslen=length(m);
patlen=input('\n Enter the length of the pattern : ');
p(1:patlen)=1;
p(2:patlen-1)=randint(1,patlen-2);
mx=m;
mx(mslen+1:mslen+patlen-1)=0;
temp=mx(1:patlen);
x=patlen;
g=1;
while(x<length(mx)+1)
r(1:patlen-1)=xor(temp(2:patlen),g*p(2:patlen));
temp=r;
if x<(mslen+patlen-1)
temp(patlen)=mx(x+1);
g=r(1);
end
x=x+1;
end
mx(mslen+1:length(mx))=r;
disp(sprintf('\n\n The transmitted frame is : '));
disp(sprintf('%d',mx));
temp=0;
rx=mx;
rx(randint(1,1,[1,length(rx)]))=randint(1,1);
rx(randint(1,1,[1,length(rx)]))=randint(1,1);
temp=rx(1:patlen);
x=patlen;
g=1;
while(x<length(rx)+1)
rr(1:patlen-1)=xor(temp(2:patlen),g*p(2:patlen));
temp=rr;
if x<length(rx)
temp(patlen)=rx(x+1);
g=rr(1);
end
x=x+1;
end
disp(sprintf('\n\n The received frame is : '));
disp(sprintf('%d',rx));
if sum(rr)==0;
disp(sprintf('\n\n No error in the received frame : '));
disp(sprintf('\n\n The received data is : \n'));
disp(sprintf('%d',rx(1:mslen)));
else
disp(sprintf('\n\n Error in the received frame !!!\n'));
end
答案 0 :(得分:1)
以下更改会使您的代码运行...因为它可以保证表达式两边的内容具有相同的大小。是否有意义我留给你了解:
mx(mslen+(1:numel(r)) = r;
当我执行此操作并运行您的代码时,它会显示一个已发送的帧和一个带有一位差异的接收帧,以及收到的帧中的消息&#34;错误!!!&#34;
我怀疑这是你的解决方案。
答案 1 :(得分:0)
错误很明显:mslen+1:length(mx)
表达式的大小必须等于r
的大小。
使用length
非常危险。它总是返回最大尺寸的大小。它可以是行数或列数。使用size(m,1)
表示行,size(m,2)
表示列更安全。
变量mslen
是m
的长度,您有mx=m
。这意味着当您执行mslen+1:length(mx)
时,您会得到空矩阵,因为mslen+1
大于length(mx)
。
您的算法存在问题,如果不查看代码,就无法摆脱错误。