时域波形的参数测量实验报告s

时域测试技术综合实验报告书

实验名称        时域波形的参数测量实验                                   

班级   一班           学号  201422070125         姓名   杨梅                  

实验时间:              日                          得分:      

一、   实验目的

1.学习VISUAL DSP++开发流程。

2.掌握波形时域参数(周期、上升时间等)的测量方法。

3.掌握波形幅度参数(幅度、平均值、均方根值等)的测量方法。

4.掌握参数统计的一般实现方法。

二、   实验内容

1.学习Visual DSP++的开发设计流程。

2.编写程序测量波形参数。

3.编写程序对波形参数进行统计运算。

三、   实验步骤

1、计算并显示示波器幅度参数:平均值、有效值。打开Ypara.c源文件,填充缺少的代码。

int GetAverage(short *pBuffer, int Length)

{

       int Sum=0;

      

       int i;

       for (i=0; i<Length;/*input your code*/ i++)

    {

        Sum += *pBuffer;/*input your code*/

       

        pBuffer++;

    }   

   

    return Sum/Length;/*input your code*/

}

float GetRMS(short *pBuffer, int Length, int ZeroValue)

{

       float Sum=0;

      

       int i;

       for (i=0; i<Length; i++)

    {       

              long temp;

              temp =pBuffer[i] - ZeroValue;/*input your code*/

             

              temp *= temp   ;/*input your code*/

             

              Sum += temp;

      

    }   

   

    Sum /= Length;

    return sqrt(Sum)+ZeroValue;

       /*input your code*/

}

2、计算并显示示波器幅度类参数:顶值、底值。打开Ypara.c源文件,填充缺少的代码。

int GetTop(short *pBuffer, int Length)

{

       short midpoint, toppoint, i;

       midpoint=GetAverage(pBuffer,Length);

       toppoint= GetMax();

       i=toppoint;

       GetCount(*pBuffer, Length);

       do

       {

           i--;

           if (tmpbuffer[i]>tmpbuffer[toppoint])

                  toppoint=i;

       }while(i>midpoint);

      

       //修正

       if (tmpbuffer[toppoint]<Length*0.05)

              toppoint= GetMax();

      

       return toppoint;/*input your code*/

       //return 1;

}

int GetBase(short *pBuffer, int Length)

{

       short midpoint, basepoint, i;

      

              midpoint=GetAverage(pBuffer, Length);

              basepoint= GetMin();

              i=basepoint;

             

              GetCount(*pBuffer, Length);

             

              do

              {

                     i++;

                     if (tmpbuffer[i]>tmpbuffer[basepoint])

                            basepoint=i;

              }while(i<midpoint);

             

              //修正

              if (tmpbuffer[basepoint]<Length*0.05)

                     basepoint= GetMin();

                    

              return basepoint;

       /*input your code*/

       //return 1;

}

3、计算并显示示波器时间类参数:上升时间。打开Xpara.c源文件,填充缺少的代码。

int GetRising(short *pBuffer, int Length, int yPer10, int yPer90, int *pxPer10, int *pxPer90)

{

       int Index=0;

      

       while (Index < Length && pBuffer[Index] > yPer10    /*input your code*/ )

              Index++;

             

       while (Index < Length && pBuffer[Index] <=yPer10    /*input your code*/ )

              Index++;

             

       int xPer10=0;

       if (Index < Length)

              xPer10 = Index;

                           

       while (Index < Length && pBuffer[Index] <yPer90    /*input your code*/)

              Index++;

      

       int xPer90=0;

       if (Index < Length)

              xPer90 = Index;

             

       *pxPer90 = xPer90;

       *pxPer10 = xPer10;

       return 1;

}

3、对代码进行测试(打开参数测量功能),并填写如下表格:

4、新建文件Statistic.c和Statistic.h,并将其加入工程中。在Statistic.c文件中对平均值和周期两个参数进行统计运算,并填写如下表格。

(1) 在Statistic.c文件中的参数统计算法:

int GetAverage(short *pBuffer, int Length)

{

       int Sum=0;

      

       int i;

       for (i=0; i<Length;/*input your code*/ i++)

    {

        Sum += *pBuffer;/*input your code*/

       

        pBuffer++;

    }   

   

    return Sum/Length;/*input your code*/

}

int GetPeriod(short *pBuffer, int Length, int yPer10, int yPer90, int *pxFirst, int *pxLast)

{

 

  int FirstR10, FirstR90, FirstMid;

         GetRising(pBuffer, Length, yPer10, yPer90, &FirstR10, &FirstR90);

         FirstMid=(FirstR10 + FirstR90) / 2;

        

         int FirstF10, FirstF90, SecondMid;

         GetFalling(pBuffer, Length, yPer10, yPer90, &FirstF10, &FirstF90);

         SecondMid=(FirstF10 + FirstF90) / 2;

 

         int Third10, Third90, ThirdMid;

         if (FirstMid > SecondMid)

         {

                GetFalling(pBuffer+FirstR90, Length-FirstR90, yPer10, yPer90, &Third10, &Third90);

                *pxFirst= SecondMid;

                ThirdMid=(Third10 + Third90) / 2 + FirstR90;

         }

         else

         {

                GetRising(pBuffer+FirstF10, Length-FirstF10, yPer10, yPer90, &Third10, &Third90);

                *pxFirst= FirstMid;

                ThirdMid=(Third10 + Third90) / 2 + FirstF10;

         }

 

        

 

         *pxLast = ThirdMid;

         return 1;

      /*input your code*/

      *pxFirst= 50;

      *pxLast = 100;

     

      return 1;

}

(2) 实验表格

四、   实验思考题

1、如何提高波形测量的精度?                     

答: 主要有两种方法,其一是减少测频量化误差,即增加测量时间(主门时间)的方法;其二是减小侧周量化误差,即采用多周期测量法,在这里不再赘述。此外,为了提高测量的准确度,比较常用的方法还有游标法、内插法、平均测量技术、多周期同步测量法、相检宽带测频技术以及量化时沿法。      

2、完善波形周期、幅度值的测量算法。

答:int GetPeriod(short *pBuffer, int Length, int yPer10, int yPer90, int *pxFirst, int *pxLast)

{

 

  int FirstR10, FirstR90, FirstMid;

         GetRising(pBuffer, Length, yPer10, yPer90, &FirstR10, &FirstR90);

         FirstMid=(FirstR10 + FirstR90) / 2;

        

         int FirstF10, FirstF90, SecondMid;

         GetFalling(pBuffer, Length, yPer10, yPer90, &FirstF10, &FirstF90);

         SecondMid=(FirstF10 + FirstF90) / 2;

 

         int Third10, Third90, ThirdMid;

         if (FirstMid > SecondMid)

         {

                GetFalling(pBuffer+FirstR90, Length-FirstR90, yPer10, yPer90, &Third10, &Third90);

                *pxFirst= SecondMid;

                ThirdMid=(Third10 + Third90) / 2 + FirstR90;

         }

         else

         {

                GetRising(pBuffer+FirstF10, Length-FirstF10, yPer10, yPer90, &Third10, &Third90);

                *pxFirst= FirstMid;

                ThirdMid=(Third10 + Third90) / 2 + FirstF10;

         }

 

        

 

         *pxLast = ThirdMid;

         return 1;

      /*input your code*/

      *pxFirst= 50;

      *pxLast = 100;

     

      return 1;

}

int GetAmplitude(short *pBuffer, int Length)

{

      return GetTop(pBuffer, Length)-GetBase(pBuffer, Length);

}

五、   实验结果分析与总结

(1)系统的噪声水平、和被测信号的信噪比对波形参数测量的精度有直接的影响,通过参数统计功能可以减小噪声对参数测量的影响。

(2)脉冲波形的顶值、低值非常重要,幅度、上升时间、脉宽等其他波形参数的都依赖于顶值和低值。

(3)对正弦波、三角波而言,其顶值、低值就是最大和最小值。

【注意:每次完成实验后,按上面的格式手写并上交实验报告。】

 

第二篇:4螺纹参数测量实验报告

实验三、用万能工具显微镜测量螺纹主要参数

一、实验目的

1、了解万能工具显微镜的测量原理及结构特点。

2、掌握用万能工具显微镜测量外螺纹中径,螺距和牙型半角的方法。

二、实验设备:万能工具显微镜

测角目镜,顶尖,曲轴

三、测量原理

影像法测量外螺纹中径,牙型半角和螺距。

 四、实验步骤

1、利用调焦杆进行调焦;

2、擦净仪器被测螺纹,将工件小心地安装在两顶尖之间,拧紧顶尖的固紧螺钉

4、根据被测螺纹的尺寸,调节光澜。

5、调节立柱倾斜一个个螺旋升角角度

6、测量螺纹主要参数:

(1)测量中径     =             =

取两者的平均值作为实际中径:

                  =

 

               图 1                               图 2

(2) 测量牙型半角

(Ⅰ)=       (Ⅱ)=          (Ⅲ) =       (Ⅳ)=

按下述方式处理:

=           =

(3) 测量螺距

 =                =

取它们的平均值作为螺纹n个螺距的实际尺寸:

图 3

n个螺距的累积偏差为:

  思  考  题

   1. 用影象法测量螺纹时,立柱为什么要倾斜一个螺旋角ψ?

   2. 用工具显微镜测量外螺纹的主要参数时,为什么测量结果要取平均值?

相关推荐