ADC测试matlab代码
前面有做过ADC性能测试,测试方式是先使用ADC采集一个单频信号,然后利用matlab进行性能分析。
下面把matlab分析的代码记录下来:
- %The following program code plots the FFT spectrum of a desired test tone. Test tone based on coherent sampling criteria, and
- %computes SNR, SINAD, THD and SFDR.
- %This program is believed to be accurate and reliable. This program may get altered without prior notification.;
- %fid=fopen('F:\pelican_ADC_test\vjtag_prj\data_analysis\single_tone.txt','r');
- %numpt=input('Number of Points in FFT? ');
- %fclk=input('Sampling Frequency (MHz)? ');
- %numbit=input('ADC Resolution (bits)? ');
- close all;
- clear all;
- numpt=;
- fclk=/;
- % fclk=//;
- numbit=;
- % a=textread('dds_data_out.txt','%s')';%以字符形式打开文件
- % a=dlmread('sample_data.txt','%s')';%以字符形式打开文件
- a=dlmread('sample_data.txt','%s')';%以字符形式打开文件
- v1=a'; %16进制转化为10进制数,存储进v1矩阵
- % for i = :numpt
- % v1(i) = bitxor(v1(i),);
- % end
- %v1 is a column vector(:numpt), and count is its length
- %v1=dlmread('F:\pelican_ADC_test\vjtag_prj\data_analysis\single_tone.txt','');
- %fclose(fid);
- %change v1 into a row vector
- code=v1';
- %Warning: ADC output may be clipping - reduce input amplitude
- if (max(code)==2^numbit-1) | (min(code)==0)
- disp('WARNING: ADC OUTPUT MAYBE CLIPPING - CHECK INPUT AMPLITUDE!');
- end
- figure;
- plot(code);
- title('TIME DOMAIN')
- xlabel('SAMPLES');
- ylabel('DIGITAL OUTPUT CODE');
- Dout=code-(2^numbit-1)/2; %Re-center the digitized sinusoidal input
- Voltage=Dout./((2^numbit-1)/2)*(0.5);
- figure;
- plot([1:numpt],Voltage);
- Doutw=(Dout').*blackmanharris(numpt); %add Minimum -term Blackman-Harris window
- Dout_spect=fft(Doutw);
- Dout_dB=*log10(abs(Dout_spect));
- figure;
- maxdB=max(Dout_dB(:numpt/)); %numpt points FFT result in numpt/ points spectrum
- %计算距离满量程的幅度差
- max_voltage=max(Voltage);
- delta_amplitude=*log10(max_voltage/0.5); %full scale voltage amplitude is .5v
- plot([:numpt/-].*fclk/numpt,Dout_dB(:numpt/)-maxdB+delta_amplitude);
- grid on;
- title('SINGLE TONE FFT PLOT');
- xlabel('ANALOG INPUT FREQUENCY (MHz)');
- ylabel('AMPLITUDE (dBfs)');
- a1=axis; axis([a1() a1() - a1()]);
- fin=find(Dout_dB(:numpt/)==maxdB); %Find the signal bin (DC represents bin=)
- DC_span=; %default DC leakage bins are bins
- signal_span = ; %signal leakage bins are ± bins for minumun -term black-harris window
- spanh=; %%default harmonic leakage bins are ± bins
- spectP=(abs(Dout_spect)).*(abs(Dout_spect));
- %Determine power level
- Pdc=sum(spectP(:DC_span)); %Determine DC offset power level
- Ps=sum(spectP(fin-signal_span:fin+signal_span)); %Determine signal power level
- Fh=[];
- %Vector storing frequency and power components of signal and harmonics
- Ph=[]; %HD1=signal, HD2=2nd harmonic, HD3=3rd harmonic, etc.
- %Find the harmonic frequencies/power within the FFT plot
- for har_num=:
- tone=rem((har_num*(fin- )+)/numpt,); %Note: tones > fSAMPLE are aliased back
- if tone>0.5
- tone=-tone;
- end
- Fh=[Fh tone];
- %For this method to work properly, make sure that the folded back high order harmonics do not overlap with DC and signal
- %components or lower order harmonics.
- har_peak=max(spectP(round(tone*numpt)-spanh:round(tone*numpt)+spanh));
- har_bin=find(spectP(round(tone*numpt)-spanh:round(tone*numpt)+spanh)==har_peak);
- har_bin=har_bin+round(tone*numpt)-spanh- ; %make sure that the folded back high order harmonics do not overlap with DC and signal components or lower order harmonics
- Ph=[Ph sum(spectP(har_bin-:har_bin+))];
- end
- Pd=sum(Ph(:)); %Total distortion power level
- Pn=sum(spectP(:numpt/))-Pdc-Ps-Pd; %Extract noise power level
- format;
- A=(max(code)-min(code))/(^numbit) %Analog input amplitude in mV
- AdB=*log10(A) %Analog input amplitude in dB
- SNR=*log10(Ps/Pn) %SNR in dB
- SINAD=*log10(Ps/(Pn+Pd)) %SINAD in dB
- disp('THD - HD2 through HD9');
- THD=*log10(Pd/Ph()) %THD in dB
- SFDR=*log10(Ph()/max(Ph(:))) %SFDR in dB
- disp('SIGNAL AND HARMONIC POWER (dB)');
- HD=*log10(Ph(:)/Ph())
- hold on;
- plot(Fh()*fclk,-,'bo',Fh()*fclk,-,'bx',Fh()*fclk,-,'b+',Fh()*fclk,-,'b*',Fh()*fclk,-,'bs',Fh()*fclk,-,'bd',Fh()*fclk,-,'bv',Fh()*fclk,-,'b^');
- legend('SIGNAL','HD2','HD3','HD4','HD5','HD6','HD7','HD8','HD9');
- hold off;
输出结果
- A =
- 0.5432
- AdB =
- -5.3006
- SNR =
- 54.0005
- SINAD =
- 53.4240
- THD - HD2 through HD9
- THD =
- -62.4784
- SFDR =
- 63.0618
- SIGNAL AND HARMONIC POWER (dB)
- HD =
- -63.0618 -78.1190 -79.6691 -82.4058 -86.1153 -90.7795 -91.1868 -89.8460 -74.6853
会标记出谐波的位置。
ADC测试matlab代码的更多相关文章
- 如何加速MATLAB代码运行
学习笔记 V1.0 2015/4/17 如何加速MATLAB代码运行 概述 本文源于LDPCC的MATLAB代码,即<CCSDS标准的LDPC编译码仿真>.由于代码的问题,在信息位长度很长 ...
- SVM实例及Matlab代码
******************************************************** ***数据集下载地址 :http://pan.baidu.com/s/1geb8CQf ...
- 数据分析处理之PCA OLSR PCR PLSR(NIPALS)及其Matlab代码实现
传统的OLS(普通最小二乘)方法无法解决样本数据的共线性(multicollinearity)问题,如果你的数据样本中每个特征变量具有共线性,那么使用基于PCA的PCR和PLSR方法对数据样本进行回归 ...
- 测试C++代码与WebBrowser HTML的互动
testWebBrowserDlg.h // testWebBrowserDlg.h : 头文件 // #pragma once #include "explorer1.h" #i ...
- 多分类问题中,实现不同分类区域颜色填充的MATLAB代码(demo:Random Forest)
之前建立了一个SVM-based Ordinal regression模型,一种特殊的多分类模型,就想通过可视化的方式展示模型分类的效果,对各个分类区域用不同颜色表示.可是,也看了很多代码,但基本都是 ...
- 卷积相关公式的matlab代码
取半径=3 用matlab代码实现上式公式: length=3;for Ki = 1:length for Kj = 1:length for Kk = 1:length Ksigma(Ki,Kj,K ...
- 使用JUnit测试java代码
Junit 单元测试实验报告 一.实验环境 MyEclipse2014.Junit4.10 二.实验目的 学会单元测试,在MyEclipse中进行Junit测试 三.实验步骤 1.写出要测试的类 代 ...
- JAVA调用matlab代码
做实验一直用的matlab代码,需要嵌入到java项目中,matlab代码拼拼凑凑不是很了解,投机取巧采用java调用matlab的方式解决. 1. matlab版本:matlabR2014a ...
- 前端测试框架Jest系列教程 -- Asynchronous(测试异步代码)
写在前面: 在JavaScript代码中,异步运行是很常见的.当你有异步运行的代码时,Jest需要知道它测试的代码何时完成,然后才能继续进行另一个测试.Jest提供了几种方法来处理这个问题. 测试异步 ...
随机推荐
- 浏览器功能记住账号和密码解决方法(HTML解决方式)
1.在input标签里应用html5的新特性autocomplete="off" 注:对chrome不管用.其他浏览器没试. 2.如果是一个输入框那就在当前input标签后面(一 ...
- 毛毛虫学习日记_SQL
五毛叶的SQL学习: 1.SELECT:(A 表名,a 字段) SELECT A.b, C.c , D.d(a,b,c,d,e...各种自己需要的字段) FROM A(中心表名) LEFT /INN ...
- mysql 完整性约束
mysql 完整性约束 数据的完整性概述根据完整性实施的方法将完整性约束分为四类:1.实体完整性 实体完整性的实现:通过在表中设置主键约束.唯一约束或标识列来实现 主键约束:应用于表列的一个约束 用法 ...
- PHP实例开发(3)PHP中MVC学习之ThinkPHP
PHP中MVC学习之ThinkPHP 1.什么是MVC MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离 MVC是一个设 ...
- java常用IO流数据流小结
类名 常用方法 说明 输入流 InputStream int read(); 只能读字节流,虽然返回值是int,但只有低8位起作用. DataInputStream Type readType() ...
- Windows环境下npm install常见错误
Windows环境下npm install安装包依赖时,常出现一些错误,下面为个人解决办法: 错误一 缺少python环境: G:\nodejs\moviesite\node_modules\bcry ...
- Ubuntu学习——第一篇
一. Ubuntu简介 Ubuntu(乌班图)是一个基于Debian的以桌面应用为主的Linux操作系统,据说其名称来自非洲南部祖鲁语或科萨语的“ubuntu”一词,意思是“人性”.“我的存在是因为大 ...
- How to create/restore a slave using GTID replication in MySQL 5.6
MySQL 5.6 is GA! Now we have new things to play with and in my personal opinion the most interesting ...
- pt-table-checksum 检查主从数据一致性
http://www.cnblogs.com/xiaoyanger/p/5584554.html http://www.cnblogs.com/gomysql/p/3662264.html https ...
- 实现Cookie跨域共享
实现原理:cookie是不能跨域访问的,但是在二级域名是可以共享cookie的 概念说明:站点1=a.abc.com 站点2=b.abc.com 实现步骤:1. 配置两个站点的webconfig ...