在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜全文
查看: 249|回复: 0

[求助] 新手关于ADC INL和DNL测试的几点疑问

[复制链接]
发表于 昨天 21:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
小弟最近在学习做ADC,对于ADC ADC INL和DNL测试流程有几点疑问,感谢各位前辈不吝赐教~~
1、对于输入信号一般有两种三角波和正弦波,看到有前辈说正弦波会准一些,那么输入正弦波的频率需要满足相干采样吗?如果需要,那么对于10bit 20M的ADC,取1024个点509个周期,输入信号的频率就是fin=(fs/1024)*509,总的采样时间=1024/20M=51.2u,这样可以吗?
2、分析INL和DNL的时候是用ADC输出的10位2进制码来测试还是用理想DAC转化后的10进制波形进行测试?
3、看到论坛上有说用美信的matlab代码测试INL和DNL,我找了一下应该是下面这个代码,还是不太明白cadence仿真出来的波形数据怎么和代码联系起来,要怎么导出仿真数据进行测试呢?导出什么数据?matlab代码应该首先要读cadence导出的数据吧,那这部分代码应该怎么写呢?
function[DNLmax,DNLmin,INLmax,INLmin]=Static_test(Vin,N)

Dout=Vin;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%% 静态特性测试 %%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 计算DNL/INL
min_bin=min(Dout);
max_bin=max(Dout);
code_num=max_bin-min_bin;
h=hist(Dout, min_bin:max_bin);            % 直方图
ch = cumsum(h);                           % 累积直方图
Tlevels = -cos(pi*ch/sum(h));             % 升余弦拟合
hlin = Tlevels(2:end) - Tlevels(1:end-1); % 相邻码箱之间的差异
hlin = hlin(3:end-2);                     % 丢弃边缘码箱
lsb = sum(hlin) / (length(hlin));         % 查找箱之间的平均差异,以消除增益误差
dnl = [0 hlin/lsb-1];                     % 删除增益误差,中心处DNL为0
inl= cumsum(dnl);                         % INL是DNL的积分(求和)
DNLmax=max(dnl);
DNLmin=min(dnl);
INLmax=max(inl);
INLmin=min(inl);
  
% 绘出DNL/INL绘
figure;
subplot(2,1,1) %绘出DNL
Q_DNL=plot(linspace(min_bin+2, max_bin-2, length(dnl)), dnl,'k');
set(gca,'linewidth',2);
set(gca,'FontWeight','bold','fontsize',15,'fontname','Arial');
set(Q_DNL,'linewidth',2);
title(sprintf('DNL'),'FontWeight','bold','fontsize',20,'fontname','Arial');
xlabel('Digital Code [LSB]');
ylabel('DNL [LSB]');
grid on;
box on;
xlim([0 2^N]);
ylim([-1 ceil(max(dnl))]);
text(0.02,0.5,sprintf('DNLmax = %3.2fLSB\n\n\n\n\nDNLmin = %3.2fLSB',DNLmax,DNLmin),...
    'sc','FontWeight','bold','fontsize',15,'fontname','Arial');
subplot(2,1,2) %绘出INL
Q_INL=plot(linspace(min_bin+2, max_bin-2, length(dnl)), inl,'k');
set(gca,'linewidth',2);
set(gca,'FontWeight','bold','fontsize',15,'fontname','Arial');
set(Q_INL,'linewidth',2);
title(sprintf('INL'),'FontWeight','bold','fontsize',20,'fontname','Arial');
xlabel('Digital Code [LSB]');
ylabel('INL [LSB]');
grid on;
box on;
xlim([0 2^N]);
ylim([floor(min(inl)) ceil(max(inl))]);
set(gca,'xgrid','off');
set(gcf, 'unit', 'centimeters', 'position', [10 5 18 14]);
text(0.02,0.5,sprintf('INLmax = %3.2fLSB\n\n\n\n\nINLmin = %3.2fLSB',INLmax,INLmin),...
    'sc','FontWeight','bold','fontsize',15,'fontname','Arial');

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

X 关闭广告

手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-10-14 19:15 , Processed in 0.009749 second(s), 3 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表