- 由纯电阻组成的dac结构简单,且对输出节点而言,时间常数与code无关,所以该电阻具有较好的“harmonic distortion”。
- 下面以4 bits dac matlab code 为例,输出R2R dac的dnl;
clear all;
clc;
N = 4; %% bits of R2R dac
n = 0:2^N-1;
nn = n+1;
vdd = 0.900; %% supply of dac
var = 0.001; %% mismatch of resistor
a = dec2bin(n);
sel = vdd*(double(a)-48);
Ru = 100; %% res value
mm = 1000; %% number of monte-carlo
R1V = [2*Ru*(1+1/sqrt(2)*var*randn(1,mm));Ru*(1+var*randn(N-1,mm))];
R2V = 2*Ru*(1+1/sqrt(2)*var*randn(N,mm));
vi = 0;
R1E = repmat(R1V(1,:),length(n),1);
for jj = 1:N,
vi = vi.*repmat(R2V(jj,:),length(n),1)./(repmat(R2V(jj,:),length(n),1) + R1E)+ repmat(sel(:,N+1-jj),1,mm).*R1E./(repmat(R2V(jj,:),length(n),1)+R1E);
if(jj<N)
R1E = repmat(R1V(jj+1,:),length(n),1) + repmat(R2V(jj,:),length(n),1).*R1E./(repmat(R2V(jj,:),length(n),1)+R1E);
else
break
end
end
lsb = vi(end,:)/(2^N-1);
lsb_ideal = 0.9/2^N;
dnl = diff(vi)./lsb -1;
sig_dnl = std(dnl,0,2);
plot(sig_dnl)
dnl_max = max(sig_dnl) %% the output of R2R dac in matlab code
l_max_cal = sqrt(2)*var/4*(1-2^(-N))/lsb_ideal %% theoretica output
code的输出结果:
dnl_max = 0.0068
dnl_max_cal = 0.0059
我们可以看出推导出的dnl偏小,是因为理论推导过程中进行了采用很多近似。
matlab输出结果图
理论推导过程【1】
参考文献
【1】Analog-Digital Converters for Industrial Applications Including an Introduction to Digital-Analog Converters