当前位置:文档之家› 电子测量技术大作业

电子测量技术大作业

电子测量技术大作业目录题目一测量数据误差处理 (1)(1)提供测试数据输入、粗大误差判别准则选择等的人机界面; (1)(2)编写程序使用说明; (1)(3)通过实例来验证程序的正确性。

(1)题目二时域反射计 (1)(1)时域反射计简介 (1)(2)时域反射计原理 (2)(3)时域反射计(TDR)组成 (2)(4)仿真与结果 (2)附录 (2)题目一测量数据误差处理2-21 参考例2-2-6的解题过程,用C语言或Matlab设计测量数据误差处理的通用程序,要求如下:(1)提供测试数据输入、粗大误差判别准则选择等的人机界面;图 1 测试数据误差处理的输入(2)编写程序使用说明;本题用的是C语言编写的数据误差处理的通用程序,调试编译借助了CodeBlocks软件。

运行exe文件后,只需输入所需测试数据的数目、各数值大小并选择误差处理方式与置信概率即可得出处理结果。

在程序的子函数中已经将t a值表、肖维纳准则表及格拉布斯准则表的所有数据存入,无需人工查表填入。

其他具体程序内容可见附录。

图 2 程序运行流程图(3)通过实例来验证程序的正确性。

例2-2-6中的原始数据如下表1计算所得结果与图3显示结果近似相等,说明程序编译无误。

图 3 数据处理后的结果显示题目二时域反射计6-14 在Multisim环境下,基于Tektronix TDS204虚拟示波器设计一种时域反射计,给出电路原理图和实验仿真结果。

(本题设计以时域反射计测量阻抗为例)(1)时域反射计简介时域反射计(TDR)用来测量信号在通过某类传输环境传导时引起的反射,如电路板轨迹、电缆、连接器等等。

TDR仪器通过介质发送一个脉冲,把来自“未知”传输环境的反射与标准阻抗生成的反射进行比较。

TDR 显示了在沿着一条传输线传播快速阶跃信号时返回的电压波形。

波形结果是入射阶跃和阶跃遇到阻抗偏差时产生的反射的组合。

(2)时域反射计原理时域反射计TDR是最常用的测量传输线特征阻抗的仪器,它是利用时域反射的原理进行特性阻抗的测量。

图 4 TDR原理图(3)时域反射计(TDR)组成①快沿信号发生器:典型的发射信号的特征是:幅度200mv,上升时间35ps,频率250kHz方波。

②采样示波器:通用的采样示波器;③探头系统:连接被测件和TDR仪器。

(4)仿真与结果图 5 时域反射计仿真电路图 6 信号发生器设置选项图7 信号发生器上升沿时间设置图8 示波器仿真显示结果在图8中,第一条黄线为终端开路(反射系数为1)时的结果;第二条蓝线为终端有负载阻抗时的结果;第三条为终端短路(反射系数为-1)时的结果。

图9 TDR测试信号理论运行特征图图10 被测传输线特征阻抗的计算附录#include <stdio.h>#include <math.h>//求绝对值的函数,因为“abs”只适用于整数float Abs(float a){if(a>0.0)return a;return -a;}//计算平均值的子函数float Average(float a[],int n){int i;float sum=0.0;for(i=0; i<=n-1; i++){sum+=a[i];}return sum/n;}//计算方差的子函数float Variance(float a[],int n){int i;float sum=0.0;float xi=Average(a,n);for(i=0; i<=n-1; i++){sum+=(a[i]-xi)*(a[i]-xi);}return (float)sqrt(sum/(n-1));}//删除数组中指定位置的子函数void Delete(float a[],int n,int i){int j;for(j=i; j<=n-2; j++){a[j]=a[j+1];}}//粗大误差处理1//莱特检验法,出口参数为所剔除坏值的个数int Laite(float a[],int n){int t=0; //t用来装粗大误差的个数int i;int z;int flag=1;float aver;float var;while(flag){z=n;aver=Average(a,n);var=Variance(a,n);for(i=0; i<=n-1; i++){if(Abs(a[i]-aver)>3*var){printf(" %f是坏值!\n",a[i]);Delete(a,n,i);n--;t++;}}if(n==z) flag=0;}return t;}//粗大误差处理2//肖维纳准则int Xiaown(float a[],int n){float ch[38]= {0,0,0,0,0,1.65,1.73,1.79,1.86,1.92,1.96,2.00,2.04,2.07,2.10,2.13,2.16,2.18,2.20,2.22,2.24,2.26,2.28,2.30,2.32,2.33,2.34,2.35,2.37,2.38,2.39,2.45,2.50,2.58,2.64,2.74,2.81,3.02}; //肖维纳准则表int t=0; //t用来装粗大误差的个数int i;int z;int flag=1;float aver;float var;while(flag){z=n;aver=Average(a,n);var=Variance(a,n);for(i=0; i<=n-1; i++){if(Abs(a[i]-aver)>ch[n]*var){printf(" %f是坏值!\n",a[i]);Delete(a,n,i);n--;t++;}}if(z==n) flag=0;}}//粗大误差处理3//格拉布斯准则\//格拉布斯准则表1:95%float Ge95(int n){float Ge[30]= {0,0,0,1.15,1.46,1.67,1.82,1.94,2.03,2.11,2.18,2.23,2.29,2.33,2.37,2.41,2.44,2.47,2.50,2.53,2.56,2.58,2.60,2.62,2.64,2.66};if(n<=25) return Ge[n];switch (n){case 30:return 2.74;case 35:return 2.81;case 40:return 2.87;case 50:return 2.96;case 100:return 3.17;default:printf(" 输入n值错误!!!");return 0.0;}}//格拉布斯准则表2: 99%float Ge99(int n){float Ge[30]= {0,0,0,1.16,1.49,1.75,1.94,2.10,2.22,2.32,2.41,2.48,2.55,2.61,2.66,2.71,2.75,2.79,2.82,2.85,2.88,2.91,2.94,2.96,2.99,3.01};if(n<=25) return Ge[n];switch (n){case 30:return 3.10;return 3.18;case 40:return 3.24;case 50:return 3.34;case 100:return 3.58;default:printf(" 输入n值错误!!!");return 0.0;}}//格拉布斯执行函数int Glbs(float a[],int n,int m){int t=0; //t用来装粗大误差的个数int i;int z;float aver;float var;int flag=1,flag1=1,flag2=1;while(flag){if(m==1){while(flag1){z=n;aver=Average(a,n);var=Variance(a,n);for(i=0; i<=n-1; i++){if(Abs(a[i]-aver)>Ge95(n)*var){printf(" %f是坏值!\n",a[i]);Delete(a,n,i);n--;t++;}}if(z==n) flag1=0;}flag=0;return t;}else if(m==2){while(flag2){z=n;aver=Average(a,n);var=Variance(a,n);for(i=0; i<=n-1; i++){if(Abs(a[i]-aver)>Ge99(n)*var){printf(" %f是坏值!\n",a[i]);Delete(a,n,i);n--;t++;}if(z==n) flag2=0;}}flag=0;return t;}else{printf(" 输入有错!!请重新输入:\n");}}}//误差处理子函数int Wucha(float a[],int n,int x,int m){int pa=1;int t;int i;while (pa){if(x==1){pa=0;t=Laite(a,n);n=n-t;printf(" 处理后的数据如下:\n\t\t");for(i=0; i<=n-1; i++){printf("%f\t",a[i]);}return n;}else if(x==2){pa=0;t=Xiaown(a,n);n=n-t;printf(" 处理后的数据如下:\n\t\t");for(i=0; i<=n-1; i++){printf("%f\t",a[i]);}return n;}else if(x==3){pa=0;t=Glbs(a,n,m);n=n-t;printf(" 处理后的数据如下:\n\t\t");for(i=0; i<=n-1; i++){printf("%f\t",a[i]);}return n;}else printf(" 输入错误,请重新输入!\n");}}//判断有无累进性误差的子函数float Max(float a[],int n){int i;float f=Average(a,n);float x,y;x=Abs(a[0]-f);for(i=0; i<=n-1; i++){if(Abs(a[i]-f)>=x){x=Abs(a[i]-f);}}return x;}void Mlkf(float a[],int n){int i;float sum1=0.0,sum2=0.0;float f=Average(a,n);if(n%2==0) //偶数个{for(i=0; i<=n/2-1; i++)sum1=sum1+(a[i]-f);for(i=n/2; i<=n-1; i++)sum2=sum2+(a[i]-f);printf("\n");if(Abs(sum1-sum2)>=Max(a,n))printf(" 测量中存在累进性系统误差。

相关主题