门户网站建设经验总结报告,wordpress样式乱了,网站开发最强工具,asp.net做的网站模板VC实现对不同信号波形相似程度的判别摘要#xff1a;本文介绍了利用相关对信号波形进行相似程度的判别方法。通过该技术可以对采集到的多种类型的数据信号间的相似度进行判别。本算法由Microsoft Visual C 6.0实现。 一、 引言 在工程上我们经常要判断某设备产生的实际波形信号…VC实现对不同信号波形相似程度的判别摘要本文介绍了利用相关对信号波形进行相似程度的判别方法。通过该技术可以对采集到的多种类型的数据信号间的相似度进行判别。本算法由Microsoft Visual C 6.0实现。 一、 引言 在工程上我们经常要判断某设备产生的实际波形信号是否能同预先设计的相拟合但由于实际产生的波形不仅仅是简单的正、余弦波形而往往是含有较丰富频率分布的不规则波形而设备元器件本身及外界的电磁干扰又不可避免的引入了干扰噪声就为我们分析其与预先设计波形的拟合程度的判别增加了困难。另外实际波形和预先设计波形间往往存在着时序上的差别相位的改变同样也不利于信号的拟合判别。本文利用高等数学以及信号与系统方面的有关知识提出对该问题的解决方法。 二、 信号相似程度判别的理论依据 在信号与系统这门学科中相关性是一种在时域中对信号特性进行描述的重要方法。由于其通信的功率谱函数是一对傅立叶变换在信号分析中往往利用它来分析随机信号的功率谱分布以致不少人一提到相关性马上会联想到信号功率谱的计算但相关在对确定信号的分析也是有一定应用。由于相关的概念是为研究随机信号的统计特性而引入的那么从理论上我们也可以将其应用于两个确定信号一个我们采集到的信号波形和一个理论波形相似性的研究上。 要比较两波形的相似程度还要从相关的概念上入手假定两信号分别为x(t)、y(t)可以选择当倍数a使a*y(t)去逼近x(t)。再此我们可以借用误差能量来度量这对波形的相似程度具体方法同高等数学上用来判断函数间正交性的方法基本类似 误差能量用x(t)-a*y(t)的平方在时域上的积分来表示倍数a的选择必须要保证能使能量误差为最小通过对函数求导求极值可以得知当a为x(t)*y(t)在时域的积分与y(t)*y(t)在时域的积分比值时可以满足条件在此条件下的误差能量是可能所有条件下最小的。定义x(t)与y(t)的相关数为Pxy,其平方与1的差值为相对误差能量即误差能量与x(t)*x(t)在时域积分的比值。其中xy就可以用来表征两波形的相似程度。解出关于Pxy的方程其分子为x(t)*y(t)在时域的积分分为两信号各自的平方在时域积分之积的平方根。从数学上可以证明分子的模小于分母也即相关数Pxy的模不会大于1。由于对于能量有限的信号而言能量是确定的相关系数Pxy的大小只由x(t)*y(t)的积分所决定。如果两完全不相似的波形其幅度取值和出现时刻是相互独立、彼此无关的x(t)*y(t)0其积分结果亦为0所以当相关系数为0时相似度最差即不相关。当相关系数为1则误差能量为0说明这两信号相似度很好是线形相关的。因此把相关系数作为两个信号波形的相似性或线形相关性的一种度量完全是有理论依据的、合理的。三、 算法的设计与实现 我们在对信号进行比较之前先将理论波形做成一个数据文件实际设备输出的波形也通过计算机接口采集并将数据存成数据文件。我们编写的程序通过对两个数据文件的相关性比较来得出实际波形同理论波形信号的拟合度。下面就对数据文件的读取、数据相关程度计算等关键代码作简要的绍 首先要在计算相关系数前把参加运算的两序列数据从文件读取到内存堆栈中去为了方便读取多种数据格式的文件使程序更加灵活选用MFC基本类库的CFileDialog类的成员函数来选取数文件然后再通过CFile类的相关成员函数将其读取到内存中……CFileDialog dlg(TRUE,dat,*.dat, //TRUE为打开文件窗口OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,信号数据文件(*.dat)|*.dat|所有文件(*.*)|*.*||,NULL);if(dlg.DoModal()IDOK){CString FileName;FileNamedlg.GetPathName(); //取文件所在的完整路径CFile file;file.Open(FileName,CFile::modeReadWrite); //以读写方式打开文件buf1new char [file.GetLength()]; //为指针动态分配堆栈file.Read(buf1,file.GetLength()); //将数据读取到内存m_nData1Lenfile.GetLength(); //获取文件长度file.Close(); //关闭文件}…… 上述为读取一个信号文件的相关代码其中buf1是一个char*类型的指针该指针指向的内存存储有数据文件的数据m_nData1Len 保存有第一个数据文件的长度。用同样的方法将第二个数据文件也读取到内存中指向其首地址的指针为buf2,文件长度为m_nData2Len。参与运算的数据序列准备好后就可以进行这两组信号波形的相关系数的计算了下面是有关的关键部分代码 ……int Nm_nData1Lenm_nData2Len?m_nData2Len:m_nData1Len; 由于两序列长度可能不一样如以较长序列为准将短序列不足部分补0根据相关系数的概念补0部分的x(t)*y(t)的积分为0没有实际意义故以较短序列为准可以避免不必要的运算运算效较高。 ……float A,B,C,Pxy;ABCPxy0.0f;…… 在计算机中将积分近似按离散点取和的方式进行近似的积分for(int i0;i {Abuf1*buf2;//对x(t)*y(t)的积分Bbuf1*buf1;//对x(t)*x(t)的积分Cbuf2*buf2;//对y(t)*y(t)的积分}PxyA/(sqrt(B*C));//计算出相关系数…… 最后释放掉申请的内存delete[] buf1;delete[] buf2; 四、 实验效果的检验 下面通过一个实际的例子来检验一下上述程序我们想要获得的理想的波形如下图Data1所示Data2所示波形是设备经过噪声抑制和相位纠偏等诸多措施后产生的实际波形Data3所示波形是在没有任何保护措施下得到的粗糙的波形显然Data2要比Data3能更好的同设计的理想波形Data1相拟合但只是停留在定性分析上究竟相似程度如何,定量的分析靠肉眼显然是无法完成的。先对Data1和Data2波形信号进行相关系数计算得出其相关系数为0.793931基本上是线形相关的即实际的Data2信号设计的理想信号Data1的拟合程度还是可以接受的;然后再对Data1和Data3两波形信号进行相关系数计算组信号的相关系数为 -0.013341基本上线形不相关再对Data2和Data3进行分析计算结果是0.011665,结论也是基本不相关。通过上述程序对波形信号进行的定量分析同直观上的定性分析是相吻的。通过实际实验的检验证明该程序是可靠、实用的。 小结本文提出的对波形信号相似程度的判断在电子工程上有着较为广泛的应用能准确的判断出参加比较的两波形信号的相似程度为设备的改进、元器件的选型等提供可参考的依据。另外在判断移动的信号是否具有线形相关性的场合如对雷达站接收到的两个不同距离的目标的反射信号的分析等都可以用本算法。通过对本文介绍的相关算法的改进还可以对信号的功率谱进行绘制、对波形信号进行更全面的分析。本程序在Windows 98下由Microsoft Visual C 6.0编译通过。转载于:https://www.cnblogs.com/qq78292959/archive/2010/05/20/2077051.html