电子测量技术大作业.docx

上传人:b****7 文档编号:16321374 上传时间:2023-07-12 格式:DOCX 页数:29 大小:22.85KB
下载 相关 举报
电子测量技术大作业.docx_第1页
第1页 / 共29页
电子测量技术大作业.docx_第2页
第2页 / 共29页
电子测量技术大作业.docx_第3页
第3页 / 共29页
电子测量技术大作业.docx_第4页
第4页 / 共29页
电子测量技术大作业.docx_第5页
第5页 / 共29页
电子测量技术大作业.docx_第6页
第6页 / 共29页
电子测量技术大作业.docx_第7页
第7页 / 共29页
电子测量技术大作业.docx_第8页
第8页 / 共29页
电子测量技术大作业.docx_第9页
第9页 / 共29页
电子测量技术大作业.docx_第10页
第10页 / 共29页
电子测量技术大作业.docx_第11页
第11页 / 共29页
电子测量技术大作业.docx_第12页
第12页 / 共29页
电子测量技术大作业.docx_第13页
第13页 / 共29页
电子测量技术大作业.docx_第14页
第14页 / 共29页
电子测量技术大作业.docx_第15页
第15页 / 共29页
电子测量技术大作业.docx_第16页
第16页 / 共29页
电子测量技术大作业.docx_第17页
第17页 / 共29页
电子测量技术大作业.docx_第18页
第18页 / 共29页
电子测量技术大作业.docx_第19页
第19页 / 共29页
电子测量技术大作业.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

电子测量技术大作业.docx

《电子测量技术大作业.docx》由会员分享,可在线阅读,更多相关《电子测量技术大作业.docx(29页珍藏版)》请在冰点文库上搜索。

电子测量技术大作业.docx

电子测量技术大作业

电子测量技术大作业

题目一测量数据误差处理

2-21参考例2-2-6的解题过程,用C语言或Matlab设计测量数据误差处理的通用程序,要求如下:

(1)提供测试数据输入、粗大误差判别准则选择等的人机界面;

图1测试数据误差处理的输入

(2)编写程序使用说明;

本题用的是C语言编写的数据误差处理的通用程序,调试编译借助了CodeBlocks软件。

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

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

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

图2程序运行流程图

(3)通过实例来验证程序的正确性。

例2-2-6中的原始数据如下表1

表1测量电压原始数据

测量序号i

1

2

3

4

5

6

7

8

9

10

11

电压/U

2.72

2.75

2.65

2.71

2.62

2.45

2.62

2.70

2.67

2.73

2.74

由书上计算可得:

计算所得结果与图3显示结果近似相等,说明程序编译无误。

图3数据处理后的结果显示

题目二时域反射计

6-14在Multisim环境下,基于TektronixTDS204虚拟示波器设计一种时域反射计,给出电路原理图和实验仿真结果。

(本题设计以时域反射计测量阻抗为例)

(1)时域反射计简介

时域反射计(TDR)用来测量信号在通过某类传输环境传导时引起的反射,如电路板轨迹、电缆、连接器等等。

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

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

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

(2)时域反射计原理

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

图4TDR原理图

(3)时域反射计(TDR)组成

快沿信号发生器:

典型的发射信号的特征是:

幅度200mv,上升时间35ps,频率250kHz方波。

采样示波器:

通用的采样示波器;

探头系统:

连接被测件和TDR仪器。

(4)仿真与结果

图5时域反射计仿真电路

图6信号发生器设置选项

图7信号发生器上升沿时间设置

图8示波器仿真显示结果

在图8中,第一条黄线为终端开路(反射系数为1)时的结果;第二条蓝线为终端有负载阻抗时的结果;第三条为终端短路(反射系数为-1)时的结果。

图9TDR测试信号理论运行特征图

图10被测传输线特征阻抗的计算

附录

#include

#include

//求绝对值的函数,因为“abs”只适用于整数

floatAbs(floata)

{

if(a>0.0)

returna;

return-a;

}

//计算平均值的子函数

floatAverage(floata[],intn)

{

inti;

floatsum=0.0;

for(i=0;i<=n-1;i++)

{

sum+=a[i];

}

returnsum/n;

}

//计算方差的子函数

floatVariance(floata[],intn)

{

inti;

floatsum=0.0;

floatxi=Average(a,n);

for(i=0;i<=n-1;i++)

{

sum+=(a[i]-xi)*(a[i]-xi);

}

return(float)sqrt(sum/(n-1));

}

//删除数组中指定位置的子函数

voidDelete(floata[],intn,inti)

{

intj;

for(j=i;j<=n-2;j++)

{

a[j]=a[j+1];

}

}

//粗大误差处理1

//莱特检验法,出口参数为所剔除坏值的个数

intLaite(floata[],intn)

{

intt=0;//t用来装粗大误差的个数

inti;

intz;

intflag=1;

floataver;

floatvar;

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;

}

returnt;

}

//粗大误差处理2

//肖维纳准则

intXiaown(floata[],intn)

{

floatch[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

};//肖维纳准则表

intt=0;//t用来装粗大误差的个数

inti;

intz;

intflag=1;

floataver;

floatvar;

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;

}

returnt;

}

//粗大误差处理3

//格拉布斯准则\

//格拉布斯准则表1:

95%

floatGe95(intn)

{

floatGe[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)returnGe[n];

switch(n)

{

case30:

return2.74;

case35:

return2.81;

case40:

return2.87;

case50:

return2.96;

case100:

return3.17;

default:

printf("输入n值错误!

");

return0.0;

}

}

//格拉布斯准则表2:

99%

floatGe99(intn)

{

floatGe[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)returnGe[n];

switch(n)

{

case30:

return3.10;

case35:

return3.18;

case40:

return3.24;

case50:

return3.34;

case100:

return3.58;

default:

printf("输入n值错误!

");

return0.0;

}

}

//格拉布斯执行函数

intGlbs(floata[],intn,intm)

{

intt=0;//t用来装粗大误差的个数

inti;

intz;

floataver;

floatvar;

intflag=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;

returnt;

}

elseif(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;

returnt;

}

else

{

printf("输入有错!

请重新输入:

\n");

}

}

}

//误差处理子函数

intWucha(floata[],intn,intx,intm)

{

intpa=1;

intt;

inti;

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]);

}

returnn;

}

elseif(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]);

}

returnn;

}

elseif(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]);

}

returnn;

}

elseprintf("输入错误,请重新输入!

\n");

}

}

//判断有无累进性误差的子函数

floatMax(floata[],intn)

{

inti;

floatf=Average(a,n);

floatx,y;

x=Abs(a[0]-f);

for(i=0;i<=n-1;i++)

{

if(Abs(a[i]-f)>=x)

{

x=Abs(a[i]-f);

}

}

returnx;

}

voidMlkf(floata[],intn)

{

inti;

floatsum1=0.0,sum2=0.0;

floatf=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("测量中存在累进性系统误差。

\n");

elseprintf("测量中不存在累进性系统误差。

\n");

}

if(n%2==1)//奇数个

{

for(i=0;i<=(n-1)/2-1;i++)

sum1=sum1+(a[i]-f);

for(i=(n+1)/2;i<=n-1;i++)

sum2=sum2+(a[i]-f);

printf("\n");

if(Abs(sum1-sum2)>=Max(a,n))

printf("测量中存在累进性系统误差。

\n");

elseprintf("测量中不存在累进性系统误差。

\n");

}

}

//判断有无周期性误差的子函数

voidZwc(floata[],intn)

{

floatsum=0.0;

inti;

floatf=Average(a,n);

for(i=0;i<=n-2;i++)

{

sum=sum+(a[i]-f)*(a[i+1]-f);

}

if(sum>sqrt(n-1)*Variance(a,n)*Variance(a,n))

printf("测量中存在周期性系统误差。

\n");

elseprintf("测量中不存在周期性系统误差。

\n");

}

//置信区间子函数

floatZhi05(intn)

{

floatz[15]={0,0,1.000,0.816,0.765,0.741,0.727,0.718,0.711,0.706,

0.703,0.700

};

if(n<=11)returnz[n];

switch(n)

{

case15:

return0.691;

case20:

return0.687;

case25:

return0.684;

case30:

return0.683;

case40:

return0.681;

case60:

return0.679;

case120:

return0.677;

case999:

//在这里把999作为无穷大!

return0.674;

default:

printf("输入n值错误!

");

return0.0;

}

}

floatZhi06(intn)

{

floatz[15]={0,0,1.376,1.061,0.978,0.941,0.920,0.906,0.896,

0.889,0.883,0.879

};

if(n<=11)returnz[n];

switch(n)

{

case15:

return0.866;

case20:

return0.860;

case25:

return0.856;

case30:

return0.854;

case40:

return0.851;

case60:

return0.848;

case120:

return0.845;

case999:

//在这里把999作为无穷大!

return0.842;

default:

printf("输入n值错误!

");

return0.0;

}

}

floatZhi07(intn)

{

floatz[15]={0,0,1.963,1.386,1.250,1.190,1.156,1.134,1.119,

1.108,1.100,1.093

};

if(n<=11)returnz[n];

switch(n)

{

case15:

return1.074;

case20:

return1.064;

case25:

return1.058;

case30:

return1.055;

case40:

return1.050;

case60:

return1.046;

case120:

return1.041;

case999:

//在这里把999作为无穷大!

return1.036;

default:

printf("输入n值错误!

");

return0.0;

}

}

floatZhi08(intn)

{

floatz[15]={0,0,3.078,1.886,1.638,1.553,1.476,1.440,1.415,

1.397,1.383,1.372

};

if(n<=11)returnz[n];

switch(n)

{

case15:

return1.341;

case20:

return1.325;

case25:

return1.316;

case30:

return1.310;

case40:

return1.303;

case60:

return1.296;

case120:

return1.289;

case999:

//在这里把999作为无穷大!

return1.282;

default:

printf("输入n值错误!

");

return0.0;

}

}

floatZhi09(intn)

{

floatz[15]={0,0,6.314,2.920,2.353,2.132,2.015,1.943,1.895,

1.860,1.833,1.812

};

if(n<=11)returnz[n];

switch(n)

{

case15:

return1,753;

case20:

return1.725;

case25:

return1.708;

case30:

return1.697;

case40:

return1.684;

case60:

return1.671;

case120:

return1.658;

case999:

//在这里把999作为无穷大!

return1.645;

default:

printf("输入n值错误!

");

return0.0;

}

}

floatZhi095(intn)

{

floatz[15]={0,0,12.706,4.303,3.182,2.776,2.571,2.447,2.365,

2.306,2.262,2.228

};

if(n<=11)returnz[n];

switch(n)

{

case15:

return2.131;

case20:

return2.086;

case25:

return2.060;

case30:

return2.042;

case40:

return2.021;

case60:

return2.000;

case120:

return1.980;

case999:

//在这里把999作为无穷大!

return1.960;

default:

printf("输入n值错误!

");

return0.0;

}

}

floatZhi098(intn)

{

floatz[15]={0,0,31.821,6.965,4.541,3.747,3.365,3.143,2.998,

2.896,2.821,2.764

};

if(n<=11)returnz[n];

switch(n)

{

case15:

return2.602;

case20:

return2.528;

case25:

return2.485;

case30:

return2.457;

case40:

return2.423;

case60:

return2.390;

case120:

return2.358;

case999:

//在这里把999作为无穷大!

return2.326;

default:

printf("输入n值错误!

");

return0.0;

}

}

floatZhi099(intn)

{

floatz[15]={0,0,63.657,9.925,5.841,4.604,4.032,3.707,3.499,

3.355,3.250,3.169

};

if(n<=11)returnz[n];

switch(n)

{

case15:

return2.947;

case20:

return2.845;

case25:

return2.787;

case30:

return2.750;

case40:

return2.704;

case60:

return2.660;

case120:

return2.617;

case999:

//在这里把999作为无穷大!

return2.576;

default:

printf("输入n值错误!

");

return0.0;

}

}

floatZhi0999(intn)

{

floatz[15]={0,0,636.619,31.598,12.924,8.610,6.859,5.959,5.405,

5.041,4.781,4.587

};

if(n<=11)returnz[n];

switch(n)

{

case15:

return4.073;

case20:

return3.850;

case25:

return3.725;

case30:

return3.646;

case40:

return3.551;

case60:

return3.460;

case120:

return3.373;

case999:

//在这里把999作为无穷大!

return3.291;

default:

printf("输入n值错误!

");

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2