时域波形的参数测量实验报告s
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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*/ )
ThirdMid=(Third10 + Third90) / 2 + FirstR90;
}
else
{
GetRising(pBuffer+FirstF10, Length-FirstF10, yPer10, yPer90, &Third10, &Third90);
*pxFirst= FirstMid;
int Third10, Third90, ThirdMid;
if (FirstMid > SecondMid)
{
GetFalling(pBuffer+FirstR90, Length-FirstR90, yPer10, yPer90, &Third10, &Third90);
*pxFirst= SecondMid;
时域测试技术综合实验报告书
实验名称时域波形的参数测量实验
班级一班学号201422070125姓名杨梅
实验时间:年月日得分:
一、实验目的
1.学习VISUAL DSP++开发流程。
2.掌握波形时域参数(周期、上升时间等)的测量方法。
3.掌握波形幅度参数(幅度、平均值、均方根值等)的测量方法。
4.掌握参数统计的一般实现方法。
输入波形
平均值
均方根值
上升时间
1KHz正弦波(偏移1V,幅度600mV)
1.1v
1.64v
142us
1KHz方波(偏移100mV,幅度600mV)
82mv
680mv
18us
1KHz三角波(偏移0V,幅度1.2V)
12mv
1.22v
284us
四、实验思考题
1、如何提高波形测量的精度?
答:主要有两种方法,其一是减少测频量化误差,即增加测量时间(主门时间)的方法;其二是减小侧周量化误差,即采用多周期测量法,在这里不再赘述。此外,为了提高测量的准确度,比较常用的方法还有游标法、内插法、平均测量技术、多周期同步测量法、相检宽带测频技术以及量化时沿法。
GetRising(pBuffer, Length, yPer10, yPer90, &FirstR10, &FirstR90);
FirstMid=(FirstR10 + FirstR90) / 2;
int FirstF10, FirstF90, SecondMid;
GetFalling(pBuffer, Length, yPer10, yPer90, &FirstF10, &FirstF90);
{
return GetTop(pBuffer, Length)-GetBase(pBuffer, Length);
}
五、实验结果分析与总结
(1)系统的噪声水平、和被测信号的信噪比对波形参数测量的精度有直接的影响,通过参数统计功能可以减小噪声对参数测量的影响。
(2)脉冲波形的顶值、低值非常重要,幅度、上升时间、脉宽等其他波形参数的都依赖于顶值和低值。
Index++;
int xPer90=0;
if (Index < Length)
xPer90 = Index;Fra Baidu bibliotek
*pxPer90 = xPer90;
*pxPer10 = xPer10;
return 1;
}
3、对代码进行测试(打开参数测量功能),并填写如下表格:
输入波形
平均值
均方根值
上升时间
1KHz正弦波(偏移1V,幅度600mV)
1.1v
1.64v
142us
1KHz方波(偏移100mV,幅度600mV)
82mv
680mv
18us
1KHz三角波(偏移0V,幅度1.2V)
12mv
1.22v
284us
4、新建文件Statistic.c和Statistic.h,并将其加入工程中。在Statistic.c文件中对平均值和周期两个参数进行统计运算,并填写如下表格。
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);
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*/)
(3)对正弦波、三角波而言,其顶值、低值就是最大和最小值。
【注意:每次完成实验后,按上面的格式手写并上交实验报告。】
FirstMid=(FirstR10 + FirstR90) / 2;
int FirstF10, FirstF90, SecondMid;
GetFalling(pBuffer, Length, yPer10, yPer90, &FirstF10, &FirstF90);
SecondMid=(FirstF10 + FirstF90) / 2;
midpoint=GetAverage(pBuffer,Length);
toppoint= GetMax();
i=toppoint;
GetCount(*pBuffer, Length);
do
{
i--;
if (tmpbuffer[i]>tmpbuffer[toppoint])
toppoint=i;
}while(i>midpoint);
SecondMid=(FirstF10 + FirstF90) / 2;
int Third10, Third90, ThirdMid;
if (FirstMid > SecondMid)
{
GetFalling(pBuffer+FirstR90, Length-FirstR90, yPer10, yPer90, &Third10, &Third90);
{
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)
二、实验内容
1.学习Visual DSP++的开发设计流程。
2.编写程序测量波形参数。
3.编写程序对波形参数进行统计运算。
三、实验步骤
1、计算并显示示波器幅度参数:平均值、有效值。打开Ypara.c源文件,填充缺少的代码。
int GetAverage(short *pBuffer, int Length)
{
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;
ThirdMid=(Third10 + Third90) / 2 + FirstF10;
}
*pxLast = ThirdMid;
return 1;
/*input your code*/
*pxFirst= 50;
*pxLast = 100;
return 1;
}
int GetAmplitude(short *pBuffer, int Length)
}while(i<midpoint);
//修正
if (tmpbuffer[basepoint]<Length*0.05)
basepoint= GetMin();
return basepoint;
/*input your code*/
//return 1;
}
3、计算并显示示波器时间类参数:上升时间。打开Xpara.c源文件,填充缺少的代码。
//修正
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;
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;
*pxFirst= SecondMid;
ThirdMid=(Third10 + Third90) / 2 + FirstR90;
}
else
{
GetRising(pBuffer+FirstF10, Length-FirstF10, yPer10, yPer90, &Third10, &Third90);
midpoint=GetAverage(pBuffer, Length);
basepoint= GetMin();
i=basepoint;
GetCount(*pBuffer, Length);
do
{
i++;
if (tmpbuffer[i]>tmpbuffer[basepoint])
basepoint=i;
*pxFirst= FirstMid;
ThirdMid=(Third10 + Third90) / 2 + FirstF10;
}
*pxLast = ThirdMid;
return 1;
/*input your code*/
*pxFirst= 50;
*pxLast = 100;
return 1;
}
(2)实验表格
(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*/
return sqrt(Sum)+ZeroValue;
/*input your code*/
}
2、计算并显示示波器幅度类参数:顶值、底值。打开Ypara.c源文件,填充缺少的代码。
int GetTop(short *pBuffer, int Length)
{
short midpoint, toppoint, i;
{
int Index=0;
while (Index < Length && pBuffer[Index] > yPer10 /*input your code*/ )
ThirdMid=(Third10 + Third90) / 2 + FirstR90;
}
else
{
GetRising(pBuffer+FirstF10, Length-FirstF10, yPer10, yPer90, &Third10, &Third90);
*pxFirst= FirstMid;
int Third10, Third90, ThirdMid;
if (FirstMid > SecondMid)
{
GetFalling(pBuffer+FirstR90, Length-FirstR90, yPer10, yPer90, &Third10, &Third90);
*pxFirst= SecondMid;
时域测试技术综合实验报告书
实验名称时域波形的参数测量实验
班级一班学号201422070125姓名杨梅
实验时间:年月日得分:
一、实验目的
1.学习VISUAL DSP++开发流程。
2.掌握波形时域参数(周期、上升时间等)的测量方法。
3.掌握波形幅度参数(幅度、平均值、均方根值等)的测量方法。
4.掌握参数统计的一般实现方法。
输入波形
平均值
均方根值
上升时间
1KHz正弦波(偏移1V,幅度600mV)
1.1v
1.64v
142us
1KHz方波(偏移100mV,幅度600mV)
82mv
680mv
18us
1KHz三角波(偏移0V,幅度1.2V)
12mv
1.22v
284us
四、实验思考题
1、如何提高波形测量的精度?
答:主要有两种方法,其一是减少测频量化误差,即增加测量时间(主门时间)的方法;其二是减小侧周量化误差,即采用多周期测量法,在这里不再赘述。此外,为了提高测量的准确度,比较常用的方法还有游标法、内插法、平均测量技术、多周期同步测量法、相检宽带测频技术以及量化时沿法。
GetRising(pBuffer, Length, yPer10, yPer90, &FirstR10, &FirstR90);
FirstMid=(FirstR10 + FirstR90) / 2;
int FirstF10, FirstF90, SecondMid;
GetFalling(pBuffer, Length, yPer10, yPer90, &FirstF10, &FirstF90);
{
return GetTop(pBuffer, Length)-GetBase(pBuffer, Length);
}
五、实验结果分析与总结
(1)系统的噪声水平、和被测信号的信噪比对波形参数测量的精度有直接的影响,通过参数统计功能可以减小噪声对参数测量的影响。
(2)脉冲波形的顶值、低值非常重要,幅度、上升时间、脉宽等其他波形参数的都依赖于顶值和低值。
Index++;
int xPer90=0;
if (Index < Length)
xPer90 = Index;Fra Baidu bibliotek
*pxPer90 = xPer90;
*pxPer10 = xPer10;
return 1;
}
3、对代码进行测试(打开参数测量功能),并填写如下表格:
输入波形
平均值
均方根值
上升时间
1KHz正弦波(偏移1V,幅度600mV)
1.1v
1.64v
142us
1KHz方波(偏移100mV,幅度600mV)
82mv
680mv
18us
1KHz三角波(偏移0V,幅度1.2V)
12mv
1.22v
284us
4、新建文件Statistic.c和Statistic.h,并将其加入工程中。在Statistic.c文件中对平均值和周期两个参数进行统计运算,并填写如下表格。
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);
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*/)
(3)对正弦波、三角波而言,其顶值、低值就是最大和最小值。
【注意:每次完成实验后,按上面的格式手写并上交实验报告。】
FirstMid=(FirstR10 + FirstR90) / 2;
int FirstF10, FirstF90, SecondMid;
GetFalling(pBuffer, Length, yPer10, yPer90, &FirstF10, &FirstF90);
SecondMid=(FirstF10 + FirstF90) / 2;
midpoint=GetAverage(pBuffer,Length);
toppoint= GetMax();
i=toppoint;
GetCount(*pBuffer, Length);
do
{
i--;
if (tmpbuffer[i]>tmpbuffer[toppoint])
toppoint=i;
}while(i>midpoint);
SecondMid=(FirstF10 + FirstF90) / 2;
int Third10, Third90, ThirdMid;
if (FirstMid > SecondMid)
{
GetFalling(pBuffer+FirstR90, Length-FirstR90, yPer10, yPer90, &Third10, &Third90);
{
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)
二、实验内容
1.学习Visual DSP++的开发设计流程。
2.编写程序测量波形参数。
3.编写程序对波形参数进行统计运算。
三、实验步骤
1、计算并显示示波器幅度参数:平均值、有效值。打开Ypara.c源文件,填充缺少的代码。
int GetAverage(short *pBuffer, int Length)
{
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;
ThirdMid=(Third10 + Third90) / 2 + FirstF10;
}
*pxLast = ThirdMid;
return 1;
/*input your code*/
*pxFirst= 50;
*pxLast = 100;
return 1;
}
int GetAmplitude(short *pBuffer, int Length)
}while(i<midpoint);
//修正
if (tmpbuffer[basepoint]<Length*0.05)
basepoint= GetMin();
return basepoint;
/*input your code*/
//return 1;
}
3、计算并显示示波器时间类参数:上升时间。打开Xpara.c源文件,填充缺少的代码。
//修正
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;
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;
*pxFirst= SecondMid;
ThirdMid=(Third10 + Third90) / 2 + FirstR90;
}
else
{
GetRising(pBuffer+FirstF10, Length-FirstF10, yPer10, yPer90, &Third10, &Third90);
midpoint=GetAverage(pBuffer, Length);
basepoint= GetMin();
i=basepoint;
GetCount(*pBuffer, Length);
do
{
i++;
if (tmpbuffer[i]>tmpbuffer[basepoint])
basepoint=i;
*pxFirst= FirstMid;
ThirdMid=(Third10 + Third90) / 2 + FirstF10;
}
*pxLast = ThirdMid;
return 1;
/*input your code*/
*pxFirst= 50;
*pxLast = 100;
return 1;
}
(2)实验表格
(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*/
return sqrt(Sum)+ZeroValue;
/*input your code*/
}
2、计算并显示示波器幅度类参数:顶值、底值。打开Ypara.c源文件,填充缺少的代码。
int GetTop(short *pBuffer, int Length)
{
short midpoint, toppoint, i;