EE6580: VLSI DATA CONVERSION CIRCUITS
ASSIGNMENT 4
SUNDARAIAH GURINDAGUNTA
EE10M086
Signal bandwidth=1M
SQNR>100dB
SNR>84dB
∆=2
a)
Order=3
OBG=1.5
OSR=128
Sampling rate(fs)=2*OSR* Signal bandwidth =256M
b)
clear clear
clc
path(path,'D:\delsig\delsig');
w=linspace(0,pi,10000);
order=3;
osr=128;
obg=1.5;
nlev=2;
ntf=synthesizeNTF(order,osr,0,obg,0);
ntf_mag=abs(evalTF(ntf,exp(j*w)));
( − 1)
=
( − 0.6694) ( − 1.531 + 0.6639)
Plot of NTF in Db scale
Plot of NTF in linear scale
∆
= | ( )|
12
So we can calculate this integral by using MATLAB.
clear all
w=(0:0.0001:pi/(4*128));
z=exp(j*w);
mag=(((z-1).^3)./((z-0.6694).*(z.^2 - 1.531*z + 0.6639)));
mag=abs(mag);
mag=mag.^2;
noisepower=trapz(mag,w)
Theoritical
noisepower= 1.3952e-013
inband_noisepower= 1.48e-014=-138Db
SNR for 0.65v sinusoidal signal=-12-(-128)=125dB
Total noise power=-4.77dB
Cutoff frequency of NTF=0.4072
practical
A sinusoid of amplitude 0.65V and frequency of 250k
The SQNR is 101.64db
c)
MSA Calculation
clear clear
clc
path(path,'D:\delsig\delsig');
w=linspace(0,pi,10000);
order=3;
osr=128;
obg=1.5;
nlev=2;
ntf=synthesizeNTF(order,osr,0,obg,0);
ntf_mag=abs(evalTF(ntf,exp(j*w)));
u=0:nlev/1e6:nlev;
[v,xn,xmax,y]=simulateDSM(u,ntf,nlev,randn(order,1));
MSA=(1/(nlev-1))*u(min(find((y>50))))
plot(log10(abs(y)));
MSA = 0.7976
Peak SNR calculation
clear clear
clc
path(path,'D:\delsig\delsig');
w=linspace(0,pi,10000);
order=3;
osr=128;
obg=1.5;
nlev=2;
ntf=synthesizeNTF(order,osr,0,obg,0);
ntf_mag=abs(evalTF(ntf,exp(j*w)));
[snr,amp]= simulateSNR(ntf,osr,-3.74,0,nlev,1/(4*osr),14);
[snr,amp] = simulateSNR(ntf,osr);
figureMagic([-100 0], 10, 1, ...
[0 100], 10, 1);
xlabel('Input Level, dB')
ylabel('SNR dB');
title('SNR curve');
s=sprintf('peak SNR = %4.1fdB\n',...
max(snr));
text(-49,15,s);
Peak snr=107.34db
Spectrum for the input
clear
clc
path(path,'D:\delsig\delsig');
w=linspace(0,pi,10000);
order=3;
osr=128;
obg=1.5;
nlev=2;
ntf=synthesizeNTF(order,osr,0,obg,0);
ntf_mag=abs(evalTF(ntf,exp(j*w)));
u1=0.65*1*sin(2*pi*(1:1:2^14)/(4*osr));
[v1,xn1,xmax1,y1]=simulateDSM(u1,ntf,nlev,randn(order,1));
plot(log10(abs(y1)));
psd(v1,2^15,256e6);
hear i take the 2^15 fft to facilitate the no.of bins in
signal band is 128
d) 1)
clear clear
clc
path(path,'D:\delsig\delsig');
w=linspace(0,pi,10000);
order=3;
osr=128;
obg=1.5;
nlev=2;
ntf=synthesizeNTF(order,osr,0,obg,0);
ABCDc=realizeNTF_ct(ntf,'FF')
ABCDc =
0 0 0 1.0000 -1.0000
1.0000 0 0 0 0
0 1.0000 0 0 0
0.6703 0.2442 0.0440 0 -0.0000
K1=0.6703
K2=0.2442
K3=0.0440
New values with half clock cycle delay
2 3
0′ = 1 + + = 0.3666
2 6
3
1′ = 1 + 2 + = 0.7979
2
2′ = 2 + 3 = 0.2662
3′ = 3 = 0.0440
1′ 2′ 3′
( ) = 0′ + + +
0.7979 0.2662 0.0440
( ) = 0.3666 + + +
2)
Loop filter realization
3)
*simulation of DSM
v3 n12 0 pulse(0 5 1f 1f 1f 1.953125e-9 3.90625e-9)
v2 n13 0 pulse(5 0 1f 1f 1f 1.953125e-9 3.90625e-9)
v1 1 0 SIN 0 0.65 250k
*quantize inversion
rq1 out inq 5k
rq2 inq outq 5k
Gq outq 0 0 inq 10000000000 *out is int output
*k0 inversion
ruv1 1 inuv 5k
ruv2 outq inuv 5k
Guv outuv 0 0 inuv 10000000000 *out is int output
ruvfeed outuv inuv 5k
*k0 inversion
rkuv outuv inuvinv 5k
rkuv1 inuvinv outuvinv 5k
Guvinv outuvinv 0 0 inuvinv 10000000000 *out is int output
*integrator1
rint1 outuvinv in1 1k/6.2832
cint1 in1 out1 3.9025e-13
rint11 in1 out1 1Meg
Gint1 out1 0 0 in1 10000000000 *out is int output
*integrator2
rint2 out1 in2 8k/6.2832
cint2 in2 out2 0.5e-12
rint21 in2 out2 1Meg
Gint2 out2 0 0 in2 10000000000 *out is int output
*integrator3
rint3 out2 in3 40k/6.2832
cint3 in3 out3 0.5e-12
Gint3 out3 0 0 in3 10000000000 *out is int output
rint31 in3 out3 1Meg
*k0 inversion
rk01 1 ink0 5k
rk02 ink0 outk0 5k
Gk0 outk0 0 0 ink0 10000000000 *out is int output
*k2 inversion
rk21 out2 ink2 5k
rk22 ink2 outk2 5k
Gk2 outk2 0 0 ink2 10000000000 *out is int output
*summing
rk0 outk0 insum 13.64k
rk1 out1 insum 6.27k
rk2 outk2 insum 18.78k
rk3 out3 insum 113.64kk
rfeed insum outsum 5k
Gsum outsum 0 0 insum 10000000000 *out is int output
routsum outsum 0 1Meg
*switch
Y1 VSWITCH outsum outswitch1 n13 0
cswitch1 outswitch1 0 1p
Y2 VSWITCH outswitch1 outswitch2 n12 0
cswitch2 outswitch2 0 1p
E1 out 0 outswitch2 0 10000000000 MIN=-1 MAX=1
r2 out 0 1k
*Gquantize outswitch1 0 outquantize 0 100000000000 MIN=-1
MAX=1
*output
*r2 outquantize 0 1k
.tran .01u 10u
*.ac dec 100 1 100Meg
.plot v(out1) v(out2) v(out3) v(outswitch1) v(outswitch2)
v(out) v(outsum) v(n12) v(n13) v(outuvinv) v(1) v(outq)
.end
Time domain version for 250khz signal
Spectral density for 250khz signal
4)
Loop filter
v1 1 0 ac 1
*integrator1
rint1 1 in1 1k/6.2832
cint1 in1 out1 3.9025e-13
Gint1 out1 0 0 in1 10000000000 *out is int output
rint11 in1 out1 10Meg
*integrator2
rint2 out1 in2 8k
cint2 in2 out2 0.5p
Gint2 out2 0 0 in2 10000000000 *out is int output
rint21 in2 out2 10Meg
*integrator3
rint3 out2 in3 8k/6.2382
cint3 in3 out3 0.5p
Gint3 out3 0 0 in3 10000000000 *out is int output
rint31 in3 out3 10Meg
*k0 inversion
rk01 1 ink0 8k
rk02 ink0 outk1 8k/6.2382
Gk01 outk1 0 0 ink0 10000000000 *out is int output
*k2 inversion
rk21 out2 ink2 8k
rk22 ink2 outk2 8k
Gk01 outk2 0 0 ink2 10000000000 *out is int output
*summing
rk0 outk0 insum 13.64k
rk1 out1 insum 6.27k
rk2 outk2 insum 18.78k
rk3 out3 insum 113.64kk
rfeed insum outsum 5k
Gk01 outsum 0 0 insum 10000000000 *out is int output
*output
*.tran .01u 10u
.ac dec 1000 1 10Meg
.plot v(out1) v(out2) v(out3)
.end
5)
*simulation of DSM
v3 n12 0 pulse(0 5 1f 1f 1f 1.953125e-9 3.90625e-9)
v2 n13 0 pulse(5 0 1f 1f 1f 1.953125e-9 3.90625e-9)
v1 1 0 SIN 0 0.65 256.25Meg
*quantize inversion
rq1 out inq 5k
rq2 inq outq 5k
Gq outq 0 0 inq 10000000000 *out is int output
*k0 inversion
ruv1 1 inuv 5k
ruv2 outq inuv 5k
Guv outuv 0 0 inuv 10000000000 *out is int output
ruvfeed outuv inuv 5k
*k0 inversion
rkuv outuv inuvinv 5k
rkuv1 inuvinv outuvinv 5k
Guvinv outuvinv 0 0 inuvinv 10000000000 *out is int output
*v1 1 0 ac 2
*integrator1
rint1 outuvinv in1 1k/6.2832
cint1 in1 out1 3.9025e-13
rint11 in1 out1 1Meg
Gint1 out1 0 0 in1 10000000000 *out is int output
*integrator2
rint2 out1 in2 8k/6.2832
cint2 in2 out2 0.5e-12
rint21 in2 out2 1Meg
Gint2 out2 0 0 in2 10000000000 *out is int output
*integrator3
rint3 out2 in3 40k/6.2832
cint3 in3 out3 0.5e-12
Gint3 out3 0 0 in3 10000000000 *out is int output
rint31 in3 out3 1Meg
*k0 inversion
rk01 1 ink0 5k
rk02 ink0 outk0 5k
Gk0 outk0 0 0 ink0 10000000000 *out is int output
*k2 inversion
rk21 out2 ink2 5k
rk22 ink2 outk2 5k
Gk2 outk2 0 0 ink2 10000000000 *out is int output
*summing
rk0 outk0 insum 13.64k
rk1 out1 insum 6.27k
rk2 outk2 insum 18.78k
rk3 out3 insum 113.64kk
rfeed insum outsum 5k
Gsum outsum 0 0 insum 10000000000 *out is int output
routsum outsum 0 1Meg
*switch
Y1 VSWITCH outsum outswitch1 n13 0
cswitch1 outswitch1 0 1p
Y2 VSWITCH outswitch1 outswitch2 n12 0
cswitch2 outswitch2 0 1p
E1 out 0 outswitch2 0 10000000000 MIN=-1 MAX=1
r2 out 0 1k
*Gquantize outswitch1 0 outquantize 0 100000000000 MIN=-1
MAX=1
*output
*r2 outquantize 0 1k
.tran .01u 10u
*.ac dec 100 1 100Meg
.plot v(out1) v(out2) v(out3) v(outswitch1) v(outswitch2)
v(out) v(outsum) v(n12) v(n13) v(outuvinv) v(1) v(outq)
.end
Time domain version for 250khz signal
Spectral density for 250khz signal
Time domain version for fs+250khz signal
Spectral density for fs+250khz signal
So from time domain version of output waveforms for both
250khz and fs+250khz ,it has inhibited ani alias property.
ON THOSE DIAGRAMS the amplitude of the quantized output for
250khz is 1 and -1 varying with signal,but for fs+250khz
the amplitude is -1 which stays at the same point
f)
Jitter noise
∆ ∆
= ( ) ∗ (1 − )
12 ∗
clear all
w=(0:0.0001:pi);z=exp(j*w);
mag=((((z-1).^3).*(1-z.^-1))./((z-0.6694).*(z.^2 - 1.531*z
+ 0.6639)));
mag=abs(mag); mag=mag.^2;
power=trapz(mag,w)
power =14.2165
∆ ∆
= ∗ 14.2165
∗
1 = −137 = 1.99 ∗ 10
4
= ∆ ∗ 14.2165
12 ∗ 128 ∗ (3.90625 − 9)
12 ∗ 128 ∗ (3.90625 − 9) ∗ 1.99 ∗ 10
∆ = =
4 ∗ 14.2165
∆ =5