%% Prikaz korelacij
% Ta skripta prikazuje delovanje korelacij pri sprejemu GPS signalov.
% Najprej definirajmo nekaj funkcij, ki nam bodo pomagale pri izrisovanju.

a=1;

%vrne floorano vrednost v zaporedju
function ret=get_floor(gc,t)
    ti=floor(t)+1;
    if ti<1
        ti=ti+1023;
    end
    if ti>1023
        ti=ti-1023;
    end
    ret=gc(ti);
end

%nariše vsoto signalov satelitov, vsoto s šumom in korelacijo
function plot_all(prn,prn_r,zamik,amp,noise)
    res=1+1023*20;
    offs=100;
    if length(prn)~=length(zamik) || length(prn)~=length(amp)
        error('Dimenzije prn, zamik in amp se morajo ujemati');
    end
    l=length(prn);
    gc=zeros(l,1023);
    for n=1:l
        gc(n,:)=gold_code(n);
    end
    gc_r=gold_code(prn_r);
    t=linspace(0,1023,res);
    sats=zeros(1,res);
    rec=zeros(1,res);
    for n=1:res
        s=0.0;
        for m=1:l
            s=s+amp(m)*get_floor(gc(m,:),t(n)+zamik(m));
        end
        sats(n)=s;
        rec(n)=get_floor(gc_r,t(n));
    end
    sig=sats+noise*normrnd(0,1,[1 res]);
    xc0=xcorr([sig 0],[rec rec]);
    xc=flip(xc0(res+1:2*res));
    [u,v]=max(xc);
    prec=[rec rec];
    prec=prec(v+1:v+2*offs);
    t1=v-offs;
    t2=v+offs;
    tiledlayout(4,1);
    nexttile;
    plot(t(1:2*offs), sats(1:2*offs),'r-');
    set(gca,'xtick',[]);
    %set(gca,'YLim',[-1.2 1.2]);
    nexttile;
    plot(t(1:2*offs), sig(1:2*offs),'b-');
    set(gca,'xtick',[]);
    %set(gca,'YLim',[-1.2 1.2]);
    nexttile;
    plot(t(1:2*offs), prec, 'g-');
    %set(gca,'xtick',[]);
    set(gca,'YLim',[-1.2 1.2]);
    nexttile;
    plot(t(t1:t2),xc(t1:t2)/res,'m-');
    set(gcf,'position',[0,0,400,600])
end

% Tukaj vnesemo PRN satelitov, njihove zamike in jakost (relativno na sprejemnik). Program ne prikazuje dobro zamikov v bližini ničle (0 oz. 1023).

prn=[1 2 3];
zamik=[277.9 130.3 418.6];
amp=[1 0.7 0.3];

% Tukaj pa PRN in zamik sprejemnika

prn_r=3;

% Vnesimo še jakost šuma relativno na sprejemnik.

noise=5;

% Narišemo skupen signal, zašumljen signal, zamaknjen lokalno generiran signal in izhod korelatorja.

plot_all(prn,prn_r,zamik,amp,noise)