0

このプログラムのエラーを修正できません。このプログラムのエラーは次の行にあります。

mx(mslen+1:length(mx))=r;
??? 代入 A(I) = B では、B と I の要素数は同じでなければなりません。25 mx(mslen+1:length(mx))=r での ==> oo のエラー。

プログラムは

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

0

エラーは明らかです。expression のサイズはmslen+1:length(mx)のサイズと等しくなければなりませんr

の使用lengthは非常に危険です。常に最大次元のサイズを返します。行数または列数にすることができます。size(m,1)行と列に使用する方が安全size(m,2)です。

変数mslenは の長さでm、あなたは を持っていましたmx=m。これは、が よりも大きいmslen+1:length(mx)ため、空の行列が得られることを意味します。mslen+1length(mx)

アルゴリズムに問題があり、コードを確認しないとエラーを取り除くことができません。

于 2013-04-10T17:23:19.583 に答える