当前位置: 首页 > news >正文

C#计算模数转换器(ADC)的参数DNL、INL、SNR等

1、ADC参数计算类

/// <summary>/// ADC参数(SNR、THD、SFDR、ENOB)计算/// </summary>/// <param name="source"></param>/// <param name="snr"></param>/// <param name="thd"></param>/// <param name="sfdr"></param>/// <param name="enob"></param>public static void AdcParameterCalculate(double[] source,out double snr,out double thd,out double sfdr,out double enob){double P0 = 0;double P1 = 0;double PD = 0;double PN = 0;double PS = 0;for(int i=0; i<source.Length; i++){if (i == 0){P0 = source[i];}else if (i == 1){P1 = source[i];}else if(i>1 && i<11){PD += source[i];if (source[i] > PS){PS = source[i];}}else{PN += source[i];if (source[i] > PS){PS = source[i];}}}snr = 10 * Math.Log10(P1 / PN);thd = 10 * Math.Log10(PD / P1);sfdr = 10 * Math.Log10(P1 / PS);double sinad = 10 * Math.Log10(P1 / (PN + PD));enob = (sinad - 1.76) / 6.02;}/// <summary>/// ADC参数(DNL、INL)计算/// </summary>/// <param name="x"></param>/// <param name="y"></param>/// <param name="bits"></param>/// <param name="scope"></param>/// <param name="dnl"></param>/// <param name="inl"></param>public static void AdcDnlAndInlCalculate(List<double> x,List<double> y, int bits,double scope,out double dnl,out double inl){List<double> data = LinearRegression(x, y);double vlsb = GetVlsb(bits, scope);dnl = AdcDnl(x, y, vlsb);inl = AdcInl(data, y, vlsb);}/// <summary>/// 求和/// </summary>/// <param name="source"></param>/// <returns></returns>public static double Sum(List<double> source){double sum = 0;foreach(double d in source){sum+= d;}return sum;}/// <summary>/// 平方和/// </summary>/// <param name="source"></param>/// <returns></returns>public static double SumOfSquare(List<double> source){double sum = 0;foreach (double d in source){sum+= d*d;}return sum;}/// <summary>/// 交叉积和/// </summary>/// <param name="x"></param>/// <param name="y"></param>/// <returns></returns>public static double SumOfCross(List<double> x, List<double> y){double sum = 0;for(int i=0; i<x.Count; i++){double d = x[i] * y[i];sum+= d;}return sum;}/// <summary>/// 用最小二乘法计算一元一次函数的参数/// </summary>/// <param name="x"></param>/// <param name="y"></param>/// <param name="a"></param>/// <param name="b"></param>public static void LeastSquareMethod(List<double> x, List<double> y,out  double a,out double b){a = (SumOfSquare(x) * Sum(y) - Sum(x) * SumOfCross(x, y)) / (x.Count * SumOfSquare(x) - Sum(x) * Sum(x));b = (x.Count * SumOfCross(x, y) - Sum(x) * Sum(y)) / (x.Count * SumOfSquare(x) - Sum(x) * Sum(x));}/// <summary>/// 线性回归/// </summary>/// <param name="x"></param>/// <param name="y"></param>/// <returns></returns>public static List<double> LinearRegression(List<double> x, List<double> y){LeastSquareMethod(x, y, out double a, out double b);List<double> data = new List<double>();foreach (double d in x){double z = a + b * d;data.Add(z);}return data;}/// <summary>/// 计算VLSB/// </summary>/// <param name="bits"></param>/// <param name="scope"></param>/// <returns></returns>public static double GetVlsb(int bits, double scope){int count = (int)Math.Pow(2, bits);double d = (scope - 0) / (count - 1);//Console.WriteLine($"VLSB:{d}");return d;}/// <summary>/// 计算INL/// </summary>/// <param name="y1"></param>/// <param name="y"></param>/// <param name="vlsb"></param>/// <returns></returns>public static double AdcInl(List<double> y1, List<double> y, double vlsb){double max = 0;for (int i = 0; i < y1.Count; i++){double x = Math.Abs(y1[i] - y[i]);if (x > max) max = x;}double inl = max / vlsb;//Console.WriteLine($"INL:{inl}");return inl;}/// <summary>/// 计算DNL/// </summary>/// <param name="x"></param>/// <param name="y"></param>/// <param name="vlsb"></param>/// <returns></returns>public static double AdcDnl(List<double> x, List<double> y, double vlsb){double max = 0;for (int i = 1; i < x.Count; i++){double d = Math.Abs(y[i] - y[i - 1]) / Math.Abs(x[i] - x[i - 1]);if (d > max) max = d;}double dnl = (max - vlsb) / vlsb;//Console.WriteLine($"DNL:{dnl}");return dnl;}

2、应用

private void AdcInitialize(){List<List<double>> idealData = IdealAdcData(4, 100);AdcDnlAndInlCalculate(idealData[0], idealData[1], 4, 100, out double dnl, out double inl);Console.WriteLine($"DNL:{dnl}");Console.WriteLine($"INL:{inl}");easyChartX2.Plot(idealData[1], 0, 1);}
double[] res = FFT.ButterflyFFT(data);FFT.AdcParameterCalculate(res, out SNR, out THD, out SFDR, out ENOB);

其中data为数据

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SQL Server Service Broker故障排除
  • InternVL 多模态模型部署微调实践
  • 骁龙CPU简介
  • Java-数据结构-时间和空间复杂度 (ಥ_ಥ)
  • 耦合和内聚
  • MySQL——多表操作(四)(2)带 EXISTS 关键字的子查询
  • 大数据分析与挖掘技术实训室解决方案
  • 【杂谈】新能源和智能车
  • 如何使用 Go 语言开发微服务
  • 3.4.1 爬取王者荣耀英雄皮肤实战
  • 如何禁止电脑访问网站
  • 音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息
  • 微信小程序客户端与服务端进行WebSocket通信
  • 关于欧洲玩家的几个事实
  • Redis高级----五种数据结构及其底层实现
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • Git同步原始仓库到Fork仓库中
  • Mysql5.6主从复制
  • overflow: hidden IE7无效
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Vue学习第二天
  • 从重复到重用
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (23)Linux的软硬连接
  • (6)设计一个TimeMap
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (第27天)Oracle 数据泵转换分区表
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (一) springboot详细介绍
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • .Net CF下精确的计时器
  • .net Signalr 使用笔记
  • .Net Winform开发笔记(一)
  • .NET 指南:抽象化实现的基类
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .pyc文件是什么?
  • [ C++ ] STL---仿函数与priority_queue
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [2]十道算法题【Java实现】
  • [AutoSar]BSW_Com02 PDU详解
  • [Bugku] web-CTF靶场系列系列详解⑥!!!
  • [c++] 自写 MyString 类
  • [C++初阶]string类的详解
  • [ChromeApp]指南!让你的谷歌浏览器好用十倍!
  • [Labview] 表格改值后单元格编辑功能,更改颜色、字体、颜色等
  • [LeetCode] 148. Sort List 链表排序
  • [LeetCode] Ransom Note 赎金条
  • [LeetCode] Verify Preorder Sequence in Binary Search Tree 验证二叉搜索树的先序序列
  • [LeetCode]—Permutations II 求全排列(有重复值)
  • [LeetCode]-使用特殊算法的题目-2