0

我无法修复此程序中的错误。该程序中的错误在以下行中:

mx(mslen+1:length(mx))=r;
???在赋值 A(I) = B 中,B 和 I 中的元素数必须相同。错误 ==> oo 在 25 mx(mslen+1:length(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 
4

2 回答 2

1

以下更改使您的代码运行......因为它保证表达式两侧的内容具有相同的大小。这是否有意义我留给你弄清楚:

mx(mslen+(1:numel(r)) = r;

当我这样做并运行您的代码时,它会显示一个传输帧和一个接收帧,但有一位差异,以及消息“接收帧错误!!!”

我怀疑这是你的解决方案。

于 2013-04-10T19:44:45.887 回答
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)

您的算法有问题,如果不查看代码,您将无法摆脱错误。

于 2013-04-10T17:23:19.583 回答