Appendice A
Codice MATLAB
Simulazione algoritmo SAR doppio ideale………...151
Simulazione algoritmo differenziale al Nonio ideale…………152
Simulazione algoritmo SAR doppio reale..………...153
Simulazione algoritmo differenziale al Nonio reale..…………158
%--- %Script per la verifica funzionale algoritmo SAR doppio nel caso ideale.
%Numero di pesi N=7.
%Range di recupero dello skew 60-200 ps.
%Caso in cui cka si trova in anticipo di fase rispetto a ckb. %--- %Autori: Gelasio Gregorio
% Montepaone Maria Concetta
%--- v=[57.6 28.8 14.4 7.2 3.6 1.8 0.9]; for skew=60:200 b=[0 0 0 0 0 0 0]; c=[1 1 1 1 1 1 1]; d=c; echo off
cka1=v*d.'; %Introduzione dell'offset sul segnale in anticipo di fase;
ckb1=skew+v*c.'; b(1)=1; c(1)=0; cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(1)=0;c(1)=1; else b(1)=1;c(1)=0;end; b(2)=1;
c(2)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(2)=0;c(2)=1; else b(2)=1;c(2)=0;end; b(3)=1;
c(3)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(3)=0;c(3)=1; else b(3)=1;c(3)=0;end; b(4)=1;
c(4)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(4)=0;c(4)=1; else b(4)=1;c(4)=0;end; b(5)=1; c(5)=0; cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(5)=0;c(5)=1; else b(5)=1;c(5)=0;end; b(6)=1;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(6)=0;c(6)=1; else b(6)=1;c(6)=0;end; b(7)=1;
c(7)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(7)=0;c(7)=1; else b(7)=1;c(7)=0;end; cka=cka1+v*b.'; ckb=skew+v*c.'; residuo=ckb-cka; a(skew-59)=residuo; end for i=1:141 tskew=i+59; a(i); end max_skew_res=max(a) %--- %--- %Script per la verifica funzionale dell'algoritmo differenziale al %Nonio nel caso ideale.
%Numero di pesi N=10. %Lsb di 0.2 ps.
%--- %Autori: Gelasio Gregorio
% Montepaone Maria Concetta
%--- linea1=[2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2 2.2]; linea2=[2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0]; Skew_residuo=1.6; cka1=0; ckb2=Skew_residuo; cka=cka1; ckb=ckb2; if cka<ckb cka=cka1+linea1*[1 0 0 0 0 0 0 0 0 0].';
ckb=ckb2+linea2*[1 0 0 0 0 0 0 0 0 0].';else cka=cka1,ckb=ckb2
end;skew=cka-ckb
if cka<ckb cka=cka1+linea1*[1 1 0 0 0 0 0 0 0 0].';
ckb=ckb2+linea2*[1 1 0 0 0 0 0 0 0 0].';else cka=cka;ckb=ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 0 0 0 0 0 0 0].';
ckb=ckb2+linea2*[1 1 1 0 0 0 0 0 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb
if cka<ckb cka=cka1+linea1*[1 1 1 1 0 0 0 0 0 0].';
ckb=ckb2+linea2*[1 1 1 1 0 0 0 0 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 0 0 0 0 0].';
ckb=ckb2+linea2*[1 1 1 1 1 0 0 0 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 1 0 0 0 0].';
ckb=ckb2+linea2*[1 1 1 1 1 1 0 0 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 1 1 0 0 0].';
ckb=ckb2+linea2*[1 1 1 1 1 1 1 0 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 1 1 1 0 0].';
ckb=ckb2+linea2*[1 1 1 1 1 1 1 1 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 1 1 1 1 0].';
ckb=ckb2+linea2*[1 1 1 1 1 1 1 1 1 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 1 1 1 1 1].';
ckb=ckb2+linea2*[1 1 1 1 1 1 1 1 1 1].';else cka=cka;ckb=ckb;
end;
skew=cka-ckb
%--- %Script per la valutazione della curva di valor medio dello skew residuo ottenuto al termine
%della correzione grossolana con il metodo SAR Doppio al variare della deviazione standard
%dovuta al processo tecnologico, calcolato su una realizzazione di %100 prove.
%Errore variabile in un intervallo 0-10%. %Errore con distribuzione Gaussiana.
%--- %Autori: Gelasio Gregorio
% Montepaone Maria Concetta
%---
for s=0:0.01:0.1
for j=1:100
e=sqrt(s*s).*randn(1)+0;
for skew=60:200 b=[0 0 0 0 0 0 0]; c=[1 1 1 1 1 1 1]; d=c; echo off cka1=v*d.'; ckb1=skew+v*c.'; b(1)=1; c(1)=0; cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(1)=0;c(1)=1; else b(1)=1;c(1)=0;end; b(2)=1;
c(2)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(2)=0;c(2)=1; else b(2)=1;c(2)=0;end; b(3)=1;
c(3)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(3)=0;c(3)=1; else b(3)=1;c(3)=0;end; b(4)=1;
c(4)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(4)=0;c(4)=1; else b(4)=1;c(4)=0;end; b(5)=1;
c(5)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(5)=0;c(5)=1; else b(5)=1;c(5)=0;end; b(6)=1;
c(6)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(6)=0;c(6)=1; else b(6)=1;c(6)=0;end; b(7)=1;
c(7)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(7)=0;c(7)=1; else b(7)=1;c(7)=0;end; cka=cka1+v*b.';
ckb=skew+v*c.';
residuo=ckb-cka; a(skew-59)=residuo; end for i=1:141 tskew=i+59; a(i); end max_skew_res=max(a); M(j)=max_skew_res; min_skew_res=min(a); ideal(j)=1.6; ax(j)=j; end media(1+s*100)=mean(M); std(1+s*100)=s; end figure
plot(std,media,'LineWidth',2);grid clear
%--- %--- %Script per l'analisi dell'algoritmo SAR Doppio impiegato nella %correzione
%grosssolana dello skew al variare dell'errore dovuto al mismatch %circuitale.
%Errore con distribuzione Gaussiana. %Numero di pesi N=7.
%Range correzione skew 60-200 ps.
%--- %Autori: Gelasio Gregorio
% Montepaone Maria concetta
%---
s=0.07; %Deviazione Standard dovuta al Processo Tecnologico
for j=1:100
e=sqrt(s*s).*randn(1)+0;
v=[57.6+64*e 28.8+32*e 14.4+16*e 7.2+8*e 3.6+4*e 1.8+2*e 0.9+e]; for skew=60:200 b=[0 0 0 0 0 0 0]; c=[1 1 1 1 1 1 1]; d=c; echo off cka1=v*d.'; ckb1=skew+v*c.';
b(1)=1; c(1)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(1)=0;c(1)=1; else b(1)=1;c(1)=0;end; b(2)=1;
c(2)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(2)=0;c(2)=1; else b(2)=1;c(2)=0;end; b(3)=1;
c(3)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(3)=0;c(3)=1; else b(3)=1;c(3)=0;end; b(4)=1;
c(4)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(4)=0;c(4)=1; else b(4)=1;c(4)=0;end; b(5)=1;
c(5)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(5)=0;c(5)=1; else b(5)=1;c(5)=0;end; b(6)=1;
c(6)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(6)=0;c(6)=1; else b(6)=1;c(6)=0;end; b(7)=1;
c(7)=0;
cka=cka1+v*b.'; ckb=skew+v*c.';
if cka>ckb b(7)=0;c(7)=1; else b(7)=1;c(7)=0;end; cka=cka1+v*b.'; ckb=skew+v*c.'; residuo=ckb-cka; a(skew-59)=residuo; end for i=1:141 tskew=i+59; a(i); end
max_skew_res=max(a); M(j)=max_skew_res; min_skew_res=min(a); ideal(j)=1.6; ax(j)=j; end max(M) min(M) n=mean(M) figure
plot(ax,M,ax,ideal,'-r',ax,n,'-g','LineWidth',2);grid s=std(M,1)
clear
%--- %--- %Script per la valutazione delle curve di deviazione standard %dell'errore
%in funzione dell'intervallo di sfasamento di fase. Sfasamento %corretto con
%l'algoritmo SAR Doppio. Errore dovuto al mismatch circuitale %variabile in un
%intervallo compreso tra lo 0-6%. Intervallo di sfasamento 60-200 %ps.
%--- %Autori: Gelasio Gregorio
% Montepaone Maria Concetta
%--- x = 1.45:0.001:2.15; n=1.7793; s=0.0358; %---err=1% y1 = (1./(sqrt(2.*pi).*s)).*exp((-(x-n).*(x-n))./(2.*s.*s)); n=1.7897; s=0.0405; %---err=2% y2 = (1./(sqrt(2.*pi).*s)).*exp((-(x-n).*(x-n))./(2.*s.*s)); n=1.7884; s=0.0585; %---err=3% y3 = (1./(sqrt(2.*pi).*s)).*exp((-(x-n).*(x-n))./(2.*s.*s)); n=1.7936; s=0.0878; %---err=4% y4 = (1./(sqrt(2.*pi).*s)).*exp((-(x-n).*(x-n))./(2.*s.*s)); n=1.7836; s=0.1149; %---err=5% y5 = (1./(sqrt(2.*pi).*s)).*exp((-(x-n).*(x-n))./(2.*s.*s)); n=1.7899; s=0.1136; %---err=6% y6 = (1./(sqrt(2.*pi).*s)).*exp((-(x-n).*(x-n))./(2.*s.*s)); figure plot(x,y1,x,y2,x,y3,x,y4,x,y5,x,y6) clear %---
%--- %Script per la valutazione della curva di valor medio dello skew %corretto con il metodo
%differenziale al Nonio al variare della deviazione standard %dovuta al processo tecnologico,
%calcolato su una realizzazione di 100 prove. %Errore variabile in un intervallo 0-10%. %Errore con distribuzione Gaussiana.
%--- %Autori: Gelasio Gregorio
% Montepaone Maria Concetta
%--- for s=0:0.01:0.10 for j=1:100 R5=sqrt(s*s).*randn(1)+0;R6=sqrt(s*s).*randn(1)+0;R7=sqrt(s*s).*ra ndn(1)+0;R8=sqrt(s*s).*randn(1)+0;R9=sqrt(s*s).*randn(1)+0; R1=sqrt(s*s).*randn(1)+0;R2=sqrt(s*s).*randn(1)+0;R3=sqrt(s*s).*ra ndn(1)+0;R4=sqrt(s*s).*randn(1)+0;R10=sqrt(s*s).*randn(1)+0; S5=sqrt(s*s).*randn(1)+0;S6=sqrt(s*s).*randn(1)+0;S7=sqrt(s*s).*ra ndn(1)+0;S8=sqrt(s*s).*randn(1)+0;S9=sqrt(s*s).*randn(1)+0; S1=sqrt(s*s).*randn(1)+0;S2=sqrt(s*s).*randn(1)+0;S3=sqrt(s*s).*ra ndn(1)+0;S4=sqrt(s*s).*randn(1)+0;S10=sqrt(s*s).*randn(1)+0; linea1=[2.2+R1 2.2+R2 2.2+R3 2.2+R4 2.2+R5 2.2+R6 2.2+R7 2.2+R8 2.2+R9 2.2+R10]; linea2=[2.0+S1 2.0+S2 2.0+S3 2.0+S4 2.0+S5 2.0+S6 2.0+S7 2.0+S8 2.0+S9 2.0+S10]; cka1=0; ckb2=1.7936; cka=cka1; ckb=ckb2; if cka<ckb cka=cka1+linea1*[1 0 0 0 0 0 0 0 0 0].';
ckb=ckb2+linea2*[1 0 0 0 0 0 0 0 0 0].';else cka=cka1,ckb=ckb2
end;skew=cka-ckb;
if cka<ckb cka=cka1+linea1*[1 1 0 0 0 0 0 0 0 0].';
ckb=ckb2+linea2*[1 1 0 0 0 0 0 0 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 0 0 0 0 0 0 0].';
ckb=ckb2+linea2*[1 1 1 0 0 0 0 0 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 1 0 0 0 0 0 0].';
ckb=ckb2+linea2*[1 1 1 1 0 0 0 0 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 0 0 0 0 0].';
ckb=ckb2+linea2*[1 1 1 1 1 0 0 0 0 0].';else cka=cka;ckb=ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 1 0 0 0 0].';
ckb=ckb2+linea2*[1 1 1 1 1 1 0 0 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 1 1 0 0 0].';
ckb=ckb2+linea2*[1 1 1 1 1 1 1 0 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 1 1 1 0 0].';
ckb=ckb2+linea2*[1 1 1 1 1 1 1 1 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 1 1 1 1 0].';
ckb=ckb2+linea2*[1 1 1 1 1 1 1 1 1 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 1 1 1 1 1].';
ckb=ckb2+linea2*[1 1 1 1 1 1 1 1 1 1].';else cka=cka;ckb=ckb;
end; x(j)=0; skew=cka-ckb; w(j)=skew; y(j)=j; end media(1+s*100)=mean(w); std(1+s*100)=s; end figure
plot(std,media,'LineWidth',2);grid clear
%--- %--- %Script per la correzione differenziale dello skew residuo con il %metodo del NONIO (VERNIER)
%in presenza di errore (s) dovuto al mismatch del Processo %Tecnologico nella valutazione
%dei ritardi temporali.
%Errore con distribuzione Gaussiana. %Lsb ideale di 0.2 ps;
%N°pesi adoperati 10;
%--- %Autori: Gelasio Gregorio
% Montepaone Maria Concetta
%---
s=0.05 %Deviazione Standard Mismatch Processo Tecnologico.
R5=sqrt(s*s).*randn(1)+0;R6=sqrt(s*s).*randn(1)+0;R7=sqrt(s*s).*ra ndn(1)+0;R8=sqrt(s*s).*randn(1)+0;R9=sqrt(s*s).*randn(1)+0; R1=sqrt(s*s).*randn(1)+0;R2=sqrt(s*s).*randn(1)+0;R3=sqrt(s*s).*ra ndn(1)+0;R4=sqrt(s*s).*randn(1)+0;R10=sqrt(s*s).*randn(1)+0; S5=sqrt(s*s).*randn(1)+0;S6=sqrt(s*s).*randn(1)+0;S7=sqrt(s*s).*ra ndn(1)+0;S8=sqrt(s*s).*randn(1)+0;S9=sqrt(s*s).*randn(1)+0; S1=sqrt(s*s).*randn(1)+0;S2=sqrt(s*s).*randn(1)+0;S3=sqrt(s*s).*ra ndn(1)+0;S4=sqrt(s*s).*randn(1)+0;S10=sqrt(s*s).*randn(1)+0; linea1=[2.2+R1 2.2+R2 2.2+R3 2.2+R4 2.2+R5 2.2+R6 2.2+R7 2.2+R8 2.2+R9 2.2+R10]; linea2=[2.0+S1 2.0+S2 2.0+S3 2.0+S4 2.0+S5 2.0+S6 2.0+S7 2.0+S8 2.0+S9 2.0+S10]; Skew_residuo=1.6; cka1=0; ckb2=Skew_residuo; cka=cka1; ckb=ckb2; if cka<ckb cka=cka1+linea1*[1 0 0 0 0 0 0 0 0 0].';
ckb=ckb2+linea2*[1 0 0 0 0 0 0 0 0 0].';else cka=cka1,ckb=ckb2
end;skew=cka-ckb;
if cka<ckb cka=cka1+linea1*[1 1 0 0 0 0 0 0 0 0].';
ckb=ckb2+linea2*[1 1 0 0 0 0 0 0 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 0 0 0 0 0 0 0].';
ckb=ckb2+linea2*[1 1 1 0 0 0 0 0 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 1 0 0 0 0 0 0].';
ckb=ckb2+linea2*[1 1 1 1 0 0 0 0 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 0 0 0 0 0].';
ckb=ckb2+linea2*[1 1 1 1 1 0 0 0 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 1 0 0 0 0].';
ckb=ckb2+linea2*[1 1 1 1 1 1 0 0 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 1 1 0 0 0].';
ckb=ckb2+linea2*[1 1 1 1 1 1 1 0 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 1 1 1 0 0].';
ckb=ckb2+linea2*[1 1 1 1 1 1 1 1 0 0].';else cka=cka;ckb=ckb;
end;skew=cka-ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 1 1 1 1 0].';
ckb=ckb2+linea2*[1 1 1 1 1 1 1 1 1 0].';else cka=cka;ckb=ckb;
if cka<ckb cka=cka1+linea1*[1 1 1 1 1 1 1 1 1 1].';
ckb=ckb2+linea2*[1 1 1 1 1 1 1 1 1 1].';else cka=cka;ckb=ckb;
end; x(j)=0; skew=cka-ckb; w(j)=skew; y(j)=j; end max(w) min(w) n=mean(w) ds=std(w) figure
plot(y,w,y,x,'-r','LineWidth',2);grid clear
%--- %--- %Script per la valutazione delle curve di deviazione standard %dell'errore
%in funzione dello skew residuo. Skew residuo corretto con %l'algoritmo differenziale al Nonio. Errore dovuto al mismatch %circuitale;
%errore variabile in un intervallo compreso tra lo 0-16%.
%--- %Autori: Gelasio Gregorio
% Montepaone Maria Concetta
%--- x = -0.6:0.001:0.650; n=0.0934; s=0.0717; %---err=1% y1 = (1./(sqrt(2.*pi).*s)).*exp((-(x-n).*(x-n))./(2.*s.*s)); n=0.1039; s=0.0616; %---err=2% y2 = (1./(sqrt(2.*pi).*s)).*exp((-(x-n).*(x-n))./(2.*s.*s)); n=0.1108; s=0.0684; %---err=3% y3 = (1./(sqrt(2.*pi).*s)).*exp((-(x-n).*(x-n))./(2.*s.*s)); n=0.1000; s=0.0749; %---err=4% y4 = (1./(sqrt(2.*pi).*s)).*exp((-(x-n).*(x-n))./(2.*s.*s)); n=0.1106; s=0.0854; %---err=5% y5 = (1./(sqrt(2.*pi).*s)).*exp((-(x-n).*(x-n))./(2.*s.*s)); n=0.1044; s=0.0879; %---err=6% y6 = (1./(sqrt(2.*pi).*s)).*exp((-(x-n).*(x-n))./(2.*s.*s)); n=0.0807; s=0.1309; %---err=7% y7 = (1./(sqrt(2.*pi).*s)).*exp((-(x-n).*(x-n))./(2.*s.*s)); n=0.0947; s=0.1578; %---err=8%
y8 = (1./(sqrt(2.*pi).*s)).*exp((-(x-n).*(x-n))./(2.*s.*s)); n=0.0306; s=0.2128; %---err=9% y9 = (1./(sqrt(2.*pi).*s)).*exp((-(x-n).*(x-n))./(2.*s.*s)); n=0.0672; s=0.2072; %---err=10% y10 = (1./(sqrt(2.*pi).*s)).*exp((-(x-n).*(x-n))./(2.*s.*s)); figure plot(x,y1,x,y2,x,y3,x,y4,x,y5,x,y6,x,y7,x,y8,x,y9,x,y10) clear %---