Этот код работает в состоянии 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