MATLAB中的赋值错误

时间:2013-04-10 17:09:54

标签: matlab

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

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 

2 个答案:

答案 0 :(得分:1)

以下更改会使您的代码运行...因为它可以保证表达式两边的内容具有相同的大小。是否有意义我留给你了解:

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

当我执行此操作并运行您的代码时,它会显示一个已发送的帧和一个带有一位差异的接收帧,以及收到的帧中的消息&#34;错误!!!&#34;

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

答案 1 :(得分:0)

错误很明显:mslen+1:length(mx)表达式的大小必须等于r的大小。

使用length非常危险。它总是返回最大尺寸的大小。它可以是行数或列数。使用size(m,1)表示行,size(m,2)表示列更安全。

变量mslenm的长度,您有mx=m。这意味着当您执行mslen+1:length(mx)时,您会得到空矩阵,因为mslen+1大于length(mx)

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