前言

目前内外网自用ADC动态参数计算的matlab程序都是同一套模板的改版,存在共同的问题,迟迟没有得到解决,也困扰了我几天,不过还好,最终搞明白了几点。


一、ADC动态参数分析的源程序从何而来?

目前看到的各种文章,很多都可以追溯到2002年的这篇文章:

https://www.maximintegrated.com/en/design/technical-documents/tutorials/7/729.html后面附带的示例程序,大部分改编的文章都是在这个基础上改了数据读出的方式(每个人采集数据的保留格式不同),后面的具体程序几乎没有实质性改变,这也造成了几个问题:

1,没有交代清楚 signal 的 span 该取,谐波的spanh 该取多少,为什么要使用这个公式,为什么取这个值:

           %Span of the input frequency on each sidespan=max(round(numpt/200),5);%Approximate search span for harmonics on each sidespanh=2;

2, 没有考虑非满量程下的幅度比例因子的问题,导致程序结果有偏差。

3,迭代过程中数组可以预设置内存大小,加快计算速度。

二、直接上代码

1.修改后的matlab code

代码如下(示例):

clc
clear%extract array data from the datasource file
fileID = fopen('E:\data\matlab\100mV_0912_1.c','r');
[data4,~] =  fscanf(fileID,'%d');
data4 = data4';             %转置数组numpt = 20000;              %数据点个数(可根据需求调节)
num_bit=12; %               %ADC数据位。(有符号整型数)
fclose(fileID);             %关闭文件x = 1:1001;                 %作图点数
data100 = data4(1:1001);    %原始波形取作图点数个点
subplot(1,2,1);             %作图 一行 二列 中的第一个小图
plot(x,data100);            %作图,仅作波形示意,和后面的数据处理关系不大mul=mean(data4);            %求数据平均值,用于后面的数据 正负中心对齐%span=40;                    %信号频率+ -span范围都算作信号能量
span=max(round(numpt/200),5);%一种经验公式,来自maxim网站源码,基本正确,确实可以涵盖信号带宽
spanh=5;                     %谐波频率+ -spanh范围都算作谐波能量,可由小达到实验,ENOB数值稳定后即可
Fsample=125;                 %采样率125M,单位MHzm=1:numpt;                                  %生成数组data33=(data4(m)-mul)/(2^(num_bit-1)-1);    %正负中心(基线)对齐,并转化为具体幅度0-1;% data33,需要做FFT变换的数据,4000个点,必须是连续的周期信号
beta=5.658;                                 %没有使用此变量
data44=data33'.*hanning(numpt);            %加窗,汉宁窗
%data44=data33'.*hamming(numpt);            %加窗,汉明窗
%data44=data33;
data55=fft(data44);                         %fft变换
data66=abs((data55));                       %取绝对值,表示信号幅度
data77=20*log10(data66);                    %取对数,分贝
data88=data66.*data66;                      %平方,表示信号能量max_voltage =  max(abs(data33));            %最大电压值
max_voltagedb = 20*log10(max_voltage/1);    %最大电压分贝
%max_voltagedb = 0;                         %试验不设置为零的时候频谱图形状bili_factor_1=1/max_voltage;                %幅度比例因子
bili_factor=bili_factor_1^2;                %功率比例因子
%bili_factor=1;                             %测试比例因子为1时参数变化    maxdb=max(data77(1:numpt/2));               %最大幅值,分贝x=((0:(numpt/2-1)).*Fsample/numpt);         %x轴,频率单位,Mhz,
y1=data77(1:numpt/2)-maxdb+max_voltagedb;   %y轴,幅值,db,最大0db
figure(1);
subplot(1,2,2)
plot(x,y1);                                 % 作图fin=find(data77(1:numpt/2)==maxdb);         %输入信号,赋值,找到最大的频率%  fin=fin+1;% 如果含直流成分过大,那么fin可能是直流频率%所以不考虑直流分量Fh= zeros(1:8);   %谐波频率 数组 预设置内存
Ph= zeros(1:8);   %谐波能量 数组 预设置内存for har_num=1:8      %1到15次谐波分量tone=rem((har_num*(fin)+1)/numpt,1);  %各次谐波对应的能量if tone>0.5tone=1-tone;      %对称end
%Fh=[Fh tone]; %旧版本,每次迭代的时候append 数据,速度慢,现改称预设内存大小,根据数组下标赋值
Fh(har_num)=tone;
%谐波,在Fh中加入tone
if round(tone*numpt)-spanh>0
har_peak=max(data88(round(tone*numpt)-spanh:round(tone*numpt)+spanh));%谐波附近+-spanh最大值
har_bin=find(data88(round(tone*numpt)-spanh:round(tone*numpt)+spanh)==har_peak);%最大值对应频率har_bin=har_bin+round(tone*numpt)-spanh-1;Ph(har_num)=sum(data88(round(tone*numpt)-spanh:round(tone*numpt)+spanh)); %  har_bin-spanh:har_bin+spanh;
else
har_peak=max(data88(1:round(tone*numpt)+spanh));%谐波附近+-spanh最大值
har_bin=find(data88(1:round(tone*numpt)+spanh)==har_peak); %最大值对应频率har_bin=har_bin+round(tone*numpt)-spanh-1;Ph(har_num)=sum(data88(1:har_bin+spanh)); %旧版本,每次迭代的时候append 数据,速度慢,现改称预设内存大小,根据数组下标赋值
end
%某谐波分量
end
%你好Pdc=sum(data88(1:span));                        %直流能量
Ps=bili_factor*sum(data88(fin-span:fin+span));  %信号能量,前后span个都算作信号能量,
Pd=bili_factor*sum(Ph(2:8));                    %谐波能量
Pn=sum(data88(1:numpt/2))-Pdc-Pd/bili_factor-Ps/bili_factor;   %噪声能量%fin_MHz=fin/numpt*Fsample;                      %信号频率
SNR=10*log10(Ps/Pn);                            %信噪比
SINAD=10*log10(Ps/(Pn+Pd));                     %信纳比
SFDR=10*log10(Ph(1)/max(Ph(2:8)));              %无杂散动态范围
ENOB=(SINAD-1.76+20*log10(1/max_voltage))/6.02; %幅度校正后有效位

2.代码处理的数据

代码+数据压缩文件链接https://download.csdn.net/download/qq_38239093/86533881



三、讲解

1,span、spanh本质都是测出来的

放大信号的频谱图,测量频谱图信号峰值两边到峰值频率的-3dB带宽的,再除以FFt的Bin宽取整,就得到了span的数值,经过验证,段落一中引用的经验公式,基本可以将信号的能量囊简括在内,保证ADC参数结果基本稳定。

谐波的范围参数spanh则是试出来的!从最小的正整数1开始,逐渐增加,直到SINAD或者ENOB数值不发生明显变化即可,省去了计算的过程,不过理论是可行的,基本上此数值下,已经囊括了大部分的谐波能量。

2,整型数据需要中心对齐(recenter),需要转化成幅度,这是源程序没有的,原因是其数据格式已经是代表幅度的浮点数。

data33=(data4(m)-mul)/(2^(num_bit-1)-1);    %正负中心(基线)对齐,并转化为具体幅度0-1;

3,最好根据迭代的次数(根据计算的谐波个数)预设置内存大小,加快运算速度

Fh= zeros(1:8);   %谐波频率 数组 预设置内存
Ph= zeros(1:8);   %谐波能量 数组 预设置内存

4,比例因子的引入,如代码所示,需要提醒的是最后的ENOB也要考虑到这一点:

ENOB=(SINAD-1.76+20*log10(1/max_voltage))/6.02; %幅度校正后有效位

理论来源:冯雪. ADC动态参数估算算法的优化与实现[D]. 江苏:东南大学,2016. DOI:10.7666/d.Y3142543.


总结

本文简单介绍了关于ADC动态参数matlab程序的一些思考和改进。

ADC 动态参数分析matlab code的几个问题(span,spanh取值问题,幅度比例因子的添加等)相关推荐

  1. 【ADC】分析ADC动态参数的MATLAB代码

    首先将cadence中波形导出,为matlab程序备用.(这里的cadence波形可以是经过理想DAC后还原的一个输出波形,也可以是未还原的几组数字信号,因为测试需要,我采用的是后一种.) 具体的导出 ...

  2. ADC的参数分析以及采样分析

    A/D变换器的性能参数 2.1 采样速率与分辨率 采样速率指模数变换的速率,而分辨率表示变换输出数字数据的比特数.这2个参数很重要,因为较高的采样速率与分辨率对应了高信噪比和较宽的信号输入带宽.近几年 ...

  3. matlab一阶动态电路分析,MATLAB在一阶动态电路特性分析的应用

    MATLAB 在一阶动态电路特性分析的应用 (董梦媛 12013241942 2013级通信一班) 摘要: MATLAB 具有强大的图形处理功能.符号运算功能和数值计算功能.其中系统的仿真工具箱是从底 ...

  4. 光脚丫思考Vue3与实战:第04章 模板语法 第02节 指令的参数+动态参数

    下面是本文的屏幕录像的在线视频: 第02节 指令的参数+动态参数 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baidu.com/s/11_hwQF ...

  5. 高速ad指标分析 matlab,高速ADC的动态性能参数和基于DSP技术的测试方法研究

    高速ADC是信号处理机的不可欠缺的组成部分,其性能的好坏对信号处理系统的整体性能也至关重要.通常ADC的技术参数是由生产厂商提供,可作为设计的重要依据,但是在电路板上形成的ADC模块的性能如何,还与A ...

  6. matlab中对伺服电机,基于MATLAB仿真的伺服电机动态特性分析

    基于MATLAB仿真的伺服电机动态特性分析 摘要:伺服电机(servo motor )是指在伺服系统中控制机械元件运转的发动机,是一种补助马达间接变速装置.伺服电机可使控制速度,位置精度非常准确,可以 ...

  7. matlab 喷嘴挡板阀,双喷嘴挡板伺服阀动态参数寻优及仿真研究

    摘要:电液伺服阀通过液压技术.自动控制技术与高端制造技术优点的全面结合,实现电.液信号的转换和精确控制,是机.电.液一体化的集成之作.它是电液伺服控制系统中的核心元件,其性能直接影响和决定了整个控制系 ...

  8. ADC参数测试上位机,通过将ADC的数字量输入上位机,上位机可以计算出动态参数 ENOB SFDR SNR 总谐波失真

    ADC参数测试上位机,通过将ADC的数字量输入上位机,上位机可以计算出动态参数 ENOB SFDR SNR 总谐波失真 以及静态参数 DNL和INL等参数. 其中动态参数的计算以及时序和频域的波形显示 ...

  9. matlab处理abaqus_Abaqus/用Abaqus进行参数分析(python+maltab助攻)

    (原文发在微信公众号"建筑工业产品经理") 有时候需要对模型做大量的参数分析以尝试获得一些规律认识,这时若仅仅通过abaqus的cae界面手动修改参数以及前后处理,几乎不可能完成大 ...

最新文章

  1. 开源工程系列之讯飞VBOX改装蓝牙5.0(aptX HD)音箱
  2. 这5个 AI 用例,转变了传统商务沟通
  3. 美多商城之用户注册(用户注册业务实现)
  4. 结构体和typedef
  5. Avahi DOS攻击broadcast-avahi-dos
  6. Web.config中连接字符串的加密和解密
  7. 春季学期第十一周作业
  8. 理解Promise (4)
  9. Spring Boot-使用Spring Initializer快速创建Spring Boot项目
  10. python的变量的命名规则以及定义
  11. 利用Node.js为Node.js生成HttpStatusCode辅助类并发布到npm
  12. 视频当道的时代,这些珍藏的优质 Python 播客值得推荐
  13. dosbox下载并配置masm环境变量的方法
  14. 《嵌入式 – GD32开发实战指南》第1章 开发环境搭建
  15. 解读“统一价格分评审方法”
  16. python游戏编程培训
  17. 各品牌手机音视频格式支持一览表收藏
  18. 求助移动硬盘显示函数不正确
  19. 使用Python对FPS游戏读写操作
  20. api 定位 微信小程序 精度_微信小程序API~地理位置location

热门文章

  1. 德勤软件定义汽车2020
  2. 德勤高科技高成长中国50强(2008-2010)
  3. 网络表示学习-Node2vec
  4. Altium Designer、EAGLE、OrCAD、Proteus、KiCAD、LTspice、NI Multisim这些软件各有什么优缺点...
  5. linux dig命令_如何在Linux上使用dig命令
  6. 合并多个fasta文件,并重命名基因名称
  7. 配置文件报错:不允许有匹配 [xX][mM][lL] 的处理指令目标。
  8. hp服务器bios如何改高性能,HPE ProLiant DL380 Gen10 不同BIOS设置内存性能测试
  9. 推荐一款非常好用的Excel导入导出工具EasyPoi
  10. 查看远程计算机的共享,win7怎么查看远程机器共享文件夹