Векторы должны быть одинаковой длины - PullRequest
0 голосов
/ 13 мая 2018

Этот код работает в состоянии new_f([0 0 0 0 0 0 0],5,1000)
но если мы попробуем new_f([0 1 0 0 1 1 1 1],5,1000), то получится, что Векторы должны быть одинаковой длины.
Что действительно странно, так как я думаю, что я делаю find, потому что я использую t (длительность в битах) и tsym для длительности в 2 бита, а Rb - это скорость передачи в битах.
Я позаботился о специальном случае, если данные заканчиваются одним, я добавляю нули и увеличиваю n (Длина данных)

    function new_f(Data,v,Rb)
  n=length(Data);
  if(Data(n)==1)
    Data=[Data 0];
    n=n+1;
  end
  Tb=1/Rb;
  Ts=Tb/1200;
  t=0:Ts:Tb-Ts;
  pulse=[ones(1,length(t)/2) zeros(1,length(t)/2) ];
  A0=1;
  A01=2;
  A11=2;
  ph0=0;
  ph10=0;
  ph11=pi;
  f=1000;
  ph11=pi;
  tsym=0:Ts:2*Tb-Ts;

  D0=A0*sin(2*pi*f*t+ph0);
  D10=A01*sin(2*pi*f*tsym+ph10);
  D11=A11*sin(2*pi*f*tsym+ph11);
  clock=[];
  Dout=[];
  Dout2=[];

  for i=1:1:n
  clock=[clock pulse];
  end
  for i=1:1:n

if(Data(i)==0 )
    Dout=[Dout D0];

    continue;
end

    if(Data(i)==1 && Data(i+1)==0)
    Dout=[Dout D10 ];
    i=i+1
  continue;
    end

    Dout=[Dout D11];
    i=i+1;
    end



  T=0:Ts:n*Tb-Ts;
  subplot(2,1,1)
  plot(T,clock);
  grid on
  axis([0 n*Tb-Ts -0.1 1.1 ])
  subplot(2,1,2)
  plot(T,Dout);
  grid on
  axis([0 n*Tb-Ts -v-0.1*v v+0.1*v])


  end

1 Ответ

0 голосов
/ 14 мая 2018

Благодаря @CrisLuengo в соответствии с CrisLuengo мы не можем контролировать приращение цикла for в matlab и решение использует оператор while

 function line_coding(Data,v,Rb)
    n=length(Data);
    if(n>1)
    if(Data(n)==1 && Data(n-1)==0)
      Data=[Data 0];
      n=n+1;
    end;

    else
    if(Data(n)==1)
  Data=[Data 0];
  n=n+1;

end;
Tb=1/Rb;
Ts=Tb/1200;
t=0:Ts:Tb-Ts;
pulse=[ones(1,length(t)/2) zeros(1,length(t)/2) ];
A0=1;
A01=2;
A11=2;
ph0=0;
ph10=0;
ph11=pi;
f=1000;
ph11=pi;
tsym=0:Ts:2*Tb-Ts;

D0=A0*sin(2*pi*f*t+ph0);
D10=A01*sin(2*pi*f*tsym+ph10);
D11=A11*sin(2*pi*f*tsym+ph11);
clock=[];
Dout=[];
Dout2=[];
%   a=1;
%   b=1;
temp =1 ;
for i=1:1:n
clock=[clock pulse];
end
j=1;
while j<=n
    if(Data(j)==0)
        Dout=[Dout D0];
        j=j+1;
    else
       if(Data(j+1)==1)
           Dout=[Dout D11]
       else 
           Dout=[Dout D10]
       end
       j=j+2
    end

end;


T=0:Ts:n*Tb-Ts;
subplot(2,1,1)
plot(T,clock);
grid on
axis([0 n*Tb-Ts -0.1 1.1 ])
subplot(2,1,2)
plot(T,Dout);
grid on
axis([0 n*Tb-Ts -v-0.1*v v+0.1*v])


end
...