收藏 分享(赏)

VC实现对不同信号波形相似程度的判别.doc

上传人:dreamzhangning 文档编号:2241002 上传时间:2018-09-07 格式:DOC 页数:3 大小:34KB
下载 相关 举报
VC实现对不同信号波形相似程度的判别.doc_第1页
第1页 / 共3页
VC实现对不同信号波形相似程度的判别.doc_第2页
第2页 / 共3页
VC实现对不同信号波形相似程度的判别.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、VC 实现对不同信号波形相似程度的判别摘要:本文介绍了利用相关对信号波形进行相似程度的判别方法。通过该技术可以对采集到的多种类型的数据信号间的相似度进行判别。本算法由 Microsoft Visual C+ 6.0 实现。 一、 引言 在工程上我们经常要判断某设备产生的实际波形信号是否能同预先设计的相拟合,但由于实际产生的波形不仅仅是简单的正、余弦波形,而往往是含有较丰富频率分布的不规则波形,而设备元器件本身及外界的电磁干扰又不可避免的引入了干扰噪声,就为我们分析其与预先设计波形的拟合程度的判别增加了困难。另外,实际波形和预先设计波形间往往存在着时序上的差别,相位的改变同样也不利于信号的拟合判

2、别。本文利用高等数学以及信号与系统方面的有关知识提出对该问题的解决方法。二、 信号相似程度判别的理论依据 在信号与系统这门学科中,相关性是一种在时域中对信号特性进行描述的重要方法。由于其通信的功率谱函数是一对傅立叶变换,在信号分析中往往利用它来分析随机信号的功率谱分布,以致不少人一提到相关性马上会联想到信号功率谱的计算,但相关在对确定信号的分析也是有一定应用。由于相关的概念是为研究随机信号的统计特性而引入的,那么从理论上我们也可以将其应用于两个确定信号(一个我们采集到的信号波形和一个理论波形)相似性的研究上。要比较两波形的相似程度还要从相关的概念上入手,假定两信号分别为 x(t)、y(t),可

3、以选择当倍数 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 就可以用来表征两波形的相

4、似程度。解出关于 Pxy 的方程,其分子为 x(t)*y(t)在时域的积分;分为两信号各自的平方在时域积分之积的平方根。从数学上可以证明分子的模小于分母,也即相关数 Pxy 的模不会大于 1。由于对于能量有限的信号而言,能量是确定的,相关系数 Pxy 的大小只由 x(t)*y(t)的积分所决定。如果两完全不相似的波形其幅度取值和出现时刻是相互独立、彼此无关的,x(t)*y(t)=0,其积分结果亦为 0,所以当相关系数为 0 时相似度最差,即不相关。当相关系数为 1,则误差能量为 0,说明这两信号相似度很好,是线形相关的。因此把相关系数作为两个信号波形的相似性(或线形相关性)的一种度量完全是有理

5、论依据的、合理的。三、 算法的设计与实现 我们在对信号进行比较之前,先将理论波形做成一个数据文件,实际设备输出的波形也通过计算机接口采集并将数据存成数据文件。我们编写的程序通过对两个数据文件的相关性比较来得出实际波形同理论波形信号的拟合度。下面就对数据文件的读取、数据相关程度计算等关键代码作简要的绍:首先,要在计算相关系数前把参加运算的两序列数据从文件读取到内存(堆栈)中去,为了方便读取多种数据格式的文件使程序更加灵活,选用 MFC 基本类库的 CFileDialog 类的成员函数来选取数文件,然后再通过 CFile 类的相关成员函数将其读取到内存中:CFileDialog dlg(TRUE,

6、“dat“,“*.dat“, /TRUE 为“打开文件“窗口OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,“信号数据文件(*.dat)|*.dat| 所有文件(*.*)|*.*|“,NULL);if(dlg.DoModal()=IDOK)CString FileName=“;FileName=dlg.GetPathName(); /取文件所在的完整路径CFile file;file.Open(FileName,CFile:modeReadWrite); /以读写方式打开文件buf1=new char file.GetLength(); /为指针动态分配堆栈file.

7、Read(buf1,file.GetLength(); /将数据读取到内存m_nData1Len=file.GetLength(); /获取文件长度file.Close(); /关闭文件 上述为读取一个信号文件的相关代码,其中 buf1 是一个 char*类型的指针,该指针指向的内存存储有数据文件的数据,m_nData1Len 保存有第一个数据文件的长度。用同样的方法将第二个数据文件也读取到内存中,指向其首地址的指针为 buf2,文件长度为m_nData2Len。参与运算的数据序列准备好后就可以进行这两组信号波形的相关系数的计算了,下面是有关的关键部分代码: int N=m_nData1Len

8、m_nData2Len?m_nData2Len:m_nData1Len; 由于两序列长度可能不一样,如以较长序列为准,将短序列不足部分补 0,根据相关系数的概念,补 0 部分的 x(t)*y(t)的积分为 0,没有实际意义,故以较短序列为准可以避免不必要的运算,运算效较高。 float A,B,C,Pxy;A=B=C=Pxy=0.0f; 在计算机中将积分近似按离散点取和的方式进行近似的积分:for(int i=0;i A+=buf1i*buf2i;/对 x(t)*y(t)的积分B+=buf1i*buf1i;/对 x(t)*x(t)的积分C+=buf2i*buf2i;/对 y(t)*y(t)的积

9、分Pxy=A/(sqrt(B*C);/计算出相关系数 最后释放掉申请的内存:delete buf1;delete buf2; 四、 实验效果的检验 下面通过一个实际的例子来检验一下上述程序,我们想要获得的理想的波形如下图Data1 所示,Data2 所示波形是设备经过噪声抑制和相位纠偏等诸多措施后产生的实际波形,Data3 所示波形是在没有任何保护措施下得到的粗糙的波形,显然 Data2 要比 Data3 能更好的同设计的理想波形 Data1 相拟合,但只是停留在定性分析上,究竟相似程度如何,定量的分析靠肉眼显然是无法完成的。先对 Data1 和 Data2 波形信号进行相关系数计算,得出其相

10、关系数为 0.793931,基本上是线形相关的,即实际的 Data2 信号设计的理想信号 Data1的拟合程度还是可以接受的;然后再对 Data1 和 Data3 两波形信号进行相关系数计算,组信号的相关系数为 -0.013341,基本上线形不相关;再对 Data2 和 Data3 进行分析,计算结果是 0.011665,结论也是基本不相关。通过上述程序对波形信号进行的定量分析同直观上的定性分析是相吻的。通过实际实验的检验证明该程序是可靠、实用的。小结:本文提出的对波形信号相似程度的判断在电子工程上有着较为广泛的应用,能准确的判断出参加比较的两波形信号的相似程度,为设备的改进、元器件的选型等提供可参考的依据。另外,在判断移动的信号是否具有线形相关性的场合,如对雷达站接收到的两个不同距离的目标的反射信号的分析等都可以用本算法。通过对本文介绍的相关算法的改进还可以对信号的功率谱进行绘制、对波形信号进行更全面的分析。本程序在 Windows 98 下,由 Microsoft Visual C+ 6.0 编译通过。

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

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报