% =========================================================================
    clear all
    clc
    close all
% =========================================================================
% promìnné
    f=0.860; %frekvence (pro útlum v GHz)
    samplerate=1.92e6; %vzorkovací frekvence
    c=299792458.0; % rychlost svìtla v m/s
    prepo=16;   %prepocet parametrù signalu pro RB=6;

% =========================================================================
%   generování signálu pro jednotlivé buòky
% =========================================================================
    signal0=gen_frame(0,0,6); %BS 0
    signal1=gen_frame(0,1,6); %BS 1
    signal2=gen_frame(0,2,6); %BS 2
    signal3=gen_frame(1,0,6); %BS 3
    signals=[signal0;signal1;signal2;signal3];
    signals=[signals signals]; %dva rámce za sebou pro ovìøení poèátku rámce
    clear signal0 signal1 signal2 signal3

% polohy jednotivých bunìk (m) a MS
    position(1,:)=[2300 -2500];  %BS 0
    position(2,:)=[-4000 4000];  %BS 1
    position(3,:)=[3900 4800];   %BS 2
    position(4,:)=[-3750 -3900]; %BS 3
    positionMS=[0 0];            %MS

% výpoèet doby šíøení signálu od bunìk k MS (pro generování signálù
for i=1:length(position(:,1))
    radius(i)=gen_radius(positionMS,position(i,:)); %vzdálenost od buòky
    delay(i)=radius(i)/c;
    delay_sample(i)=round(delay(i)*samplerate); %zpoždìní (vzorky)
end; clear positionMS
% výpoèet útlumù jednotlivých signálù podle FSL
for i=1:length(position(:,1))
    FSLdb(i)=40*log10(radius(i))+7.8-18*log10(9)-18*log10(0.5)+2*log10(f);
    FSL(i)=10^(FSLdb(i)/10);
end
% % modelování signálu pøijatého MS
for i=1:length(position(:,1))
    tx(i,:)=[zeros(1,delay_sample(i)) signals(i,:) ...% doplnìní generovaných signálù nulami pro posun
        zeros(1,(max(delay_sample)-delay_sample(i)))];
    tx(i,:)=tx(i,:)./(sqrt(FSL(i)));% váhování signálù podle útlumu
end
    tx=sum(tx); % suma signálù (výsledkem je signál pøijatý MS)  
% =========================================================================
% zpracování signálu v MS
% hledání poèátku symbolu
[tau]=det_poc_sym(tx,prepo); 
% tau_def=delay_sample(1)+2;

% hledání buòky
[cellID pocatek]= det_cell(tx(1+tau:length(tx)),prepo);
% synchronizace LTE rámce
tx=tx(pocatek+tau:pocatek+tau+19200-1); %vybrání jednoho rámce
% Generování PRS signálù pro jednotlivé buòky
ref(1,:)=gen_ref_prs(0,0,6,prepo); %generování referenèního PRS v èasové doménì
ref(2,:)=gen_ref_prs(0,1,6,prepo); %generování referenèního PRS v èasové doménì
ref(3,:)=gen_ref_prs(0,2,6,prepo); %generování referenèního PRS v èasové doménì
ref(4,:)=gen_ref_prs(1,0,6,prepo); %generování referenèního PRS v èasové doménì
% vyhledávání èasových rozdílù pomocí PRS
for i=1:length(ref(:,1))
    corr(i,:) = abs(xcorr(tx,ref(i,:))); %korelace pøijatého signálu s definovaným PRS
end
for i=1:4
    peak(i,:)=find((corr(i,:)==max(corr(i,:)))); %vyhledání maxima korelace
end
for i=1:4
    tdoa_sample(i,:)=peak(1,:)-peak(i,:); %prozdíl pøíchodu PRS signálù
        tdoa_sample_def(i,:)=delay_sample(1)-delay_sample(i);
    tdoa(i,:)=peak(1,:)-peak(i,:); %rozdíl doby pøíchodu ve vzorcích
    tdoa(i,:)=tdoa(i,:)/samplerate; %rozdíl doby pøíchodu v sekundách
    tdoa(i,:)=tdoa(i,:)*c; %rozdíl doby pøíchodu v metrech
end
% vykreslení hyperbol
    figure
    hold on
    [x1 y1] = hyperbola(position(1,:),position(2,:),tdoa(2,:));
    plot(x1,y1)
    [x2 y2] = hyperbola(position(1,:),position(3,:),tdoa(3,:));
    plot(x2,y2)
    [x3 y3] = hyperbola(position(1,:),position(4,:),tdoa(4,:));
    plot(x3,y3)
    plot(position(1,1),position(1,2),'o');
    plot(position(2,1),position(2,2),'o');
    plot(position(3,1),position(3,2),'o');
    plot(position(4,1),position(4,2),'o');
    xlim([-5000 5000])
    ylim([-5000 5000])
% hledání prùseèíkù hyperbol
    [pr(1,1),pr(1,2)] = intersections(x1,y1,x2,y2);
    [pr(2,1),pr(2,2)] = intersections(x1,y1,x3,y3);
    [pr(3,1),pr(3,2)] = intersections(x3,y3,x2,y2); 
% urèení polohy výpoètem tìžištì
%     prvni teznice
        t1=[((pr(1,1)-pr(2,1))/2)+pr(2,1) ((pr(1,2)-pr(2,2))/2)+pr(2,2)];
        t1(2,1)=pr(3,1);
        t1(2,2)=pr(3,2);
        t2=[((pr(1,1)-pr(3,1))/2)+pr(3,1) ((pr(1,2)-pr(3,2))/2)+pr(3,2)];
        t2(2,1)=pr(2,1);
        t2(2,2)=pr(2,2);
        [MS(1) MS(2)] = intersections(t1(:,1),t1(:,2),t2(:,1),t2(:,2));

plot(MS(1),MS(2),'o')
legend('hyp 0-1','hyp 0-2','hyp 0-3','BS0','BS1','BS2','BS3','MS') 








% figure
%     hold on
%     plot(position(1,1),position(1,2),'o');
%     plot(position(2,1),position(2,2),'o');
%     plot(position(3,1),position(3,2),'o');
%     plot(position(4,1),position(4,2),'o');
%     xlim([-5000 5000])
%     ylim([-5000 5000])
%     plot(MS(1),MS(2),'o')
% legend('BS0','BS1','BS2','BS3','MS','Location','southeast') 