信号测试实验报告
- 格式:doc
- 大小:1.19 MB
- 文档页数:6
课程名称:信号分析与实验测试技术
实验名称:梁的振动频谱分析
一、实验目的和要求
(1)掌握振动电磁传感器和位移传感器的安装及使用方法;
(2)掌握多通道采样、整周期采样的控制思路,编写C程序实现其功能;
(3)掌握对信号进行频谱分析的方法;
(4)分析整周期采样对频谱精度的影响。
二、实验内容和原理
本实验要通过程序实现测试的功能有:
(1)多通道采样:从1通道获取振动电磁传感器的电压信号,从2通道获取位移传感器测得的每转转盘上凸起造成的位移变化所发出的脉冲信号;
(2)整周期采样:为了保证实验数据处理后结果的精度,对信号进行整周期采样,本实验中是通过位移传感器所测到的脉冲信号作为判断整周期的依据。
三、主要仪器设备
图3-1 实验仪器与设备
本实验所需要的仪器设备主要包括:1-实验梁、2-振动电磁传感器、3-速度传感器、4-变速仪、5-电机、6-计算机、7-A/D板卡,信号处理器以及数据线,电源线,如图3-1所示。
四、操作方法和实验步骤
(1)编程,实验的第一步是要按照要求编出C语言程序,具体的程序实现过程如附件1的实验源程序所示,在初始的程序基础上做了修改,通过改变MAXN的值来改变采集点数以达到整周期采样与非整周期采样的目的。
(2)插上电源,开动电机,通过变速仪调节梁振动的大小,选取非共振情况下的较大值在DOS环境下TC中编译运行采集程序获取数据,拍照记录实验过程。
(3)关掉电机,提取数据,将实验电机关掉后,从计算机中提取实验的数据。
(4)实验结束后,用U盘取走实验数据,整理实验器材并离开实验室。
五、实验数据记录和处理
基于DFT和FFT算法的要求,采样必须满足整周期采样,在转速为915rpm时,在程序中中取三组不同的采点数目进行数据采集和记录。
六、实验结果和分析
在Origin绘图软件中绘出3组信号数据的速度及位移曲线,如下图所示。
图6-1 采样点数为1500时梁的振动及转速脉冲曲线
图6-2 采样点数为2500时梁的振动及转速脉冲曲线
图6-3 采样点数为3000时梁的振动及转速脉冲曲线
梁振动的频率和电机的转速是保持一致的,因此待测信号的频率为f=n/60=915/60=15.25Hz。
对该梁的三组实验得到的振动曲线进行FFT变换,并将3张图放在同一坐标系下进行比较得到如图
6-4所示的结果。
图6-4 三组实验的频谱对比图
由图中可见三组实验的的频率都在15.25Hz附近,其中黑色的幅值最高,蓝色和绿色的频谱产生了更为严重的泄露。第二组实验更接近整周期采样,所以其谱线产生的泄露比其它两组更少。
误差分析:实验产生误差的原因主要有多方面,比如实验过程中其他信号的干扰,速度传感器、位移传感器的安放位置和采样精度,以及A/D板卡数据处理的精度等。
七、实验总结
通过本次实验,对A/D转换器的原理和应用有了更深入的学习,掌握了信号多通道采样的方法,并对信号的频率泄露有了直观的认识,进一步明确了整周期采样的合理性和必要性。对C语言编程和傅里叶变换有了进一步的掌握。
附:实验源程序
#include "dos.h"
#include "math.h"
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "stdarg.h"
#include "graphics.h"
#include "bios.h"
#include "time.h"
#define BASE 0Xe880 /* AD board address */
#define DLY1 50000
#define DLY2 1000
#define MAXN 1895
float sample(int n);
void save(float timespan,float x1[],float x2[]);
FILE *fp;
main()
{
int i,k;
float ck1,ck2,timespan;
float x1[MAXN],x2[MAXN];
printf ("\n Press any key to begin the test ! ");
getch();
ck1=clock(); /*clock()是turbo c 2.0中的时间函数,其相减得到的再除以CLK_TCK这个常数才是秒,在tc中为18.2*/
for(i=0;i { x1[i]=0.0; x2[i]=0.0; for(k=0;k<10;k++) { x1[i]=x1[i]+(float)(sample(0))/10; x2[i]=x2[i]+(float)(sample(1))/10; delay(10); } } ck2=clock(); timespan=(ck2-ck1)/(18.2*MAXN); save(timespan,x1,x2); printf("\n save done ! "); getch(); } float sample(int n) { float data; unsigned int TEMP1; int IDL; outport(BASE,n);