首页 > 微波/射频 > RFIC设计学习交流 > 请教用maxim提供的程序测试DNL和INL

请教用maxim提供的程序测试DNL和INL

录入:edatop.com    阅读:
输入的数据是十进制还是二进制阿?为什么我无论提供什么样的数据格式,总是提示我ADC not clipping啊,有知道的吗?谢谢

有没有高手告知,我把输入电平加到1.8v了,还是说ADC not clipping,我想是我输入的数据有问题,我是直接从逻辑分析仪采样的数据,二进制,十进制,无符号的十进制都试过了,还是同样的提示。本人最近刚开始做这个事情,公司内部也无人告知,愁煞人啊

我记得maxim 的 那个程序好像是10进制输入的
他说你没有clipping,很正常啊,
那个程序需要你输入sine wave,而且要有一点clipping,也就是输入信号超过full scale
产生一点点clip,
你可能需要修改一下那个matlab程序,应该就可以用了



    非常不好意思,我现在才回复,我的adc的full scale是1v,可是我试过1.05v,1.15v,1.25v,1.6v,1.8v的正弦波输入都不行,另外我的adc是12位的,您看我的设置可以吗?fid=fopen(filename,'r');
numpt=32768;  %input('Enter Number of Data Points:  ');
numbit=12;  %input ('Enter ADC Resolution:  ');
mid_code=2048;  %input('Enter Mid-Code (Mean Code):  ');

整个程序如下:
filename=input('Enter File Name: ');
if isempty(filename)
   filename = 'listing';
end
fid=fopen(filename,'r');
numpt=32768;  %input('Enter Number of Data Points:  ');
numbit=12;  %input ('Enter ADC Resolution:  ');
mid_code=2048;  %input('Enter Mid-Code (Mean Code):  ');
%for i=1:13,       
% fgetl(fid);
%end
[v1,count]=fscanf(fid,'%f',[2,numpt]);
fclose(fid);
v1=v1';
code=v1(:,1,;
code_count=zeros(1,2^numbit);
for i=1:size(code),
   code_count(code(i)+1)=code_count(code(i)+1) + 1;
end
if code_count(1) == 0 | code_count(2^numbit) == 0 | ...
  (code_count(1) < code_count(2)) | (code_count(2^numbit-1) > code_count(2^numbit))
   disp('ADC not clipping ... Increase sinewave amplitude!');
   break;
end
A=max(mid_code,2^numbit-1-mid_code)+0.1;
vin=(0:2^numbit-1)-mid_code;       
sin2ramp=1./(pi*sqrt(A^2*ones(size(vin))-vin.*vin));
while sum(code_count(2:2^numbit-1)) < numpt*sum(sin2ramp(2:2^numbit-1))
  A=A+0.1;
  sin2ramp=1./(pi*sqrt(A^2*ones(size(vin))-vin.*vin));
end
disp('You Have Applied a Sine Wave of (dBFS): ');
Amplitude=A/(2^numbit/2)
figure;
plot([0:2^numbit-1],code_count,[0:2^numbit-1],sin2ramp*numpt);
title('CODE HISTOGRAM - SINE WAVE');
xlabel('DIGITAL OUTPUT CODE');
ylabel('COUNTS');
axis([0 2^numbit-1 0 max(code_count(2),code_count(2^numbit-1))]);
code_countn=code_count(2:2^numbit-1)./(numpt*sin2ramp(2:2^numbit-1));
figure;
plot([1:2^numbit-2],code_countn);
title('CODE HISTOGRAM - NORMALIZED')
xlabel('DIGITAL OUTPUT CODE');
ylabel('NORMALIZED COUNTS');
dnl=code_countn-1;
inl=zeros(size(dnl));
for j=1:size(inl')
   inl(j)=sum(dnl(1:j));
end
%End-Point fit INL
%[p,S]=polyfit([1,2^numbit-2],[inl(1),inl(2^numbit-2)],1);
%Best-straight-line fit INL
[p,S]=polyfit([1:2^numbit-2],inl,1);
inl=inl-p(1)*[1:2^numbit-2]-p(2);
disp('End Points Eliminated for DNL and INL Calculations');
figure;
plot([1:2^numbit-2],dnl);
grid on;
title('DIFFERENTIAL NONLINEARITY vs. DIGITAL OUTPUT CODE');
xlabel('DIGITAL OUTPUT CODE');
ylabel('DNL (LSB)');
figure;
plot([1:2^numbit-2],inl);
grid on;
title('INTEGRAL NONLINEARITY vs. DIGITAL OUTPUT CODE');
xlabel('DIGITAL OUTPUT CODE');
ylabel('INL(LSB)');

晕,笑脸是:)

tHANK YOU LANDLORD ....

XIEXIE

代码很有帮助

XIEX IE

可作为模块用



高手你好,这个程序我也从网站下了,这几天也研究了下码密度直方图法。请问这个程序具体是怎样用呢?
目前ADC的simulink Model 已经建好了,仿真DNL INL 的话。是不是将ADC MODEL的DAC OUT 数据导入到matlb中,再用这段代码进行处理? 这个代码处理的sample code 是 digital code 还是 DAC 的analog output?
诸多不懂,还忘指教一二


你输入信号幅度应该适当的大于被测件的满量程。


mid_code为什么是2048?应该是在输入信号小于fullscale情况下,通过计算确定mid_code,而不是2^12/2的来的。采用该评估程序必须分成两步进行。第一步确定mid_code.第二步,输入信号稍大于fullscale,再评估。



   你好,能大概讲讲具体怎么计算吗,他这个mid_code 具体指的是什么呢?



   你好,我想再补充问一下,就是在算mean code的时候您说条件是小于FSR,是为了避免过FSR的输入会导致首尾两个码箱的容量非常大,从而影响mean code 的计算值吗?

good reference for design

thank you for the code

    是这个?

申明:网友回复良莠不齐,仅供参考。如需专业解答,请学习本站推出的微波射频专业培训课程

上一篇:dcdc boost电路的右半平面零点问题
下一篇:国内做Delta Sigma ADC比较好的公司有哪些?

射频和天线工程师培训课程详情>>

  网站地图