基于链表数组的多幅波形包络提取方法转让专利

申请号 : CN201611161528.2

文献号 : CN106597049B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张沁川郭连平谭峰潘卉青焦晓曼

申请人 : 电子科技大学

权利要求 :

1.一种基于链表数组的多幅波形包络提取方法,其特征在于包括以下步骤:

S1:构建一个长度为L的动态链表数组P,该数组中每个元素P[i]为一个链表的表头节点,i=0,1,…,L-1,L表示每幅波形数据的采样点数量;

S2:按照预定参数实时采集第1幅波形数据,记其采样点序列为X1,X1[i]表示第1幅波形的第i个采样点,令链表数组中每个链表的表头节点数据域P[i].data=X1[i],指针域P[i].next=null;

S3:令波形序号t=2;

S4:按照预定参数实时采集第t幅波形,记其采样点序列为Xt,Xt[i]表示第t幅波形的第i个采样点;

S5:分别判断每个链表当前的链表节点数量是否小于M,M表示预设的包络次数,如果是,不作任何操作,否则删除该链表的表头节点;

S6:对波形中的每个采样点分别创建一个链表节点S[i],其数据域S[i].data=Xt[i],指针域S[i].next=null;将链表节点S[i].data与数组元素P[i]对应链表中的所有节点的数据域依次比较,若该链表中的所有节点的数据域都与S[i].data不同,则将S[i]直接添加到该链表末尾;若有某一节点的数据域与S[i].data相同,则删除该节点后将S[i]添加到该链表末尾;

S7:判断链表数组P中每个表头节点P[i]所对应的波形数据的序号ti与当前波形数据序号t之间的差值是否大于预设阈值T,如果t-ti>T,则将该表头节点删除,将下一链表节点作为表头节点;

S8:依次扫描每个链表,提取该链表所有节点数据域中数据的最大值Roof[i]和最小值Floor[i],分别作为第i个采样点的上包络值和下包络值,得到信号的包络数据;

S9:判断是否接收到结束指令,如果是,结束信号采集和包络提取,否则令t=t+1,返回步骤S4。

2.根据权利要求1所述的多幅波形包络提取方法,其特征在于,所述步骤S7中阈值T等于包络次数M。

说明书 :

基于链表数组的多幅波形包络提取方法

技术领域

[0001] 本发明属于数字信号分析技术领域,更为具体地讲,涉及一种基于链表数组的多幅波形包络提取方法。

背景技术

[0002] 信号的包络信息实质上就是提取信号幅度信息,将波形记录中的每个采样点位置的最大值和最小值存储并构成波形显示,即得到波形的包络信息。包络分析是观测波形抖动、监察毛刺信号、检测信号漂移等情况的一种很好的方式,应用包络分析可以更加清晰直观地观察到信号的异常或所需要的结果。包络分析也是工程信号分析的一种常用方法,利用包络分析方法可以对信号高频成分的低频特征或低频事件进行详细分析。这种方法在机械测试和故障诊断等领域有着很重要的作用。
[0003] 单幅波形包络的理论并不复杂,若由人工绘制,直接连接信号的极值就可以得到信号包络线,在数字信号处理系统中,也可以采用希尔伯特变换法,小波变换法,带通滤波法等等来提取单幅波形的包络。但是这些包络提取方法都是针对单幅波形数据的,而在数字三维示波器中,由于其显示对象为多幅波形数据的叠加,所需要提取的包络是由每个采样点上的极值连接而成的,与单幅波形数据的包络存在较大区别,以上方法就不再适用,需要研究新的包络提取方法。

发明内容

[0004] 本发明的目的在于克服现有技术的不足,提供一种基于链表数组的多幅波形包络提取方法,通过将波形数据存储到动态链表型数组中,实现高精度的多幅波形包络数据提取。
[0005] 为实现上述发明目的,本发明基于链表数组的多幅波形包络提取方法包括以下步骤:
[0006] S1:构建一个长度为L的动态链表数组P,该数组中每个元素P[i]为一个链表的表头节点,i=0,1,…,L-1,L表示每幅波形数据的采样点数量;
[0007] S2:按照预定参数实时采集第1幅波形数据,记其采样点序列为X1,X1[i]表示第1幅波形的第i个采样点,令链表数组中每个链表的表头节点数据域P[i].data=X1[i],指针域P[i].next=null;
[0008] S3:令波形序号t=2;
[0009] S4:按照预定参数实时采集第t幅波形,记其采样点序列为Xt,Xt[i]表示第t幅波形的第i个采样点;
[0010] S5:分别判断每个链表当前的链表节点数量是否小于M,M表示预设的包络次数,如果是,不作任何操作,否则删除该链表的表头节点;
[0011] S6:对波形中的每个采样点分别创建一个链表节点S[i],其数据域S[i].data=Xt[i],指针域S[i].next=null;将链表节点S[i].data与数组元素P[i]对应链表中的所有节点的数据域依次比较,若该链表中的所有节点的数据域都与S[i].data不同,则将S[i]直接添加到该链表末尾;若有某一节点的数据域与S[i].data相同,则删除该节点后将S[i]添加到该链表末尾;
[0012] S7:判断链表数组P中每个表头节点P[i]所对应的波形数据的序号ti与当前波形数据序号t之间的差值是否大于预设阈值T,如果t-ti>T,则将该表头节点删除,将下一链表节点作为表头节点;
[0013] S8:依次扫描每个链表,提取该链表所有节点数据域中数据的最大值Roof[i]和最小值Floor[i],分别作为第i个采样点的上包络值和下包络值,得到信号的包络数据;
[0014] S10:判断是否接收到结束指令,如果是,结束信号采集和包络提取,否则令t=t+1,返回步骤S4。
[0015] 本发明基于链表数组的多幅波形包络提取方法,建立一个动态链表数组,数组长度和一副信号波形长度相同,数组中的数据元素均为链表表头节点,每一个链表中存储同一个采样位置的波形数据,每采集完一幅波形数据即更新数据链表;在每次更新数据时,如果链表长度达到用户设置的包络次数,则删除表头节点;如果最新数据与之前某个节点相同,则将这一旧节点删除,将最新数据添加至链表末尾节点,否则直接将最新数据添加至链表末尾节点;然后对链表进行数据老化处理,避免老旧数据滞留;依次扫描每个链表得到其最大值和最小值,即为对应采样点的包络数据。
[0016] 采用本发明,使用链表数组存储波形数据,然后从中提取包络数据,省去在硬件中复杂的计算过程,同时解放大量存储空间,提高了数据处理的效率以及包络数据的精度。

附图说明

[0017] 图1是本发明基于链表数组的多幅波形包络提取方法的具体实施方式流程图;
[0018] 图2是本发明中所采用的链表数组结构图。

具体实施方式

[0019] 下面结合附图对本发明的具体实施方式进行描述,以便本领域的技术人员更好地理解本发明。需要特别提醒注意的是,在以下的描述中,当已知功能和设计的详细描述也许会淡化本发明的主要内容时,这些描述在这里将被忽略。
[0020] 实施例
[0021] 为了更好地说明本发明的技术内容,首先对链表数组进行一个简要说明。链表数组同时结合了链表和数组的优点,将同类型的元素按照一定顺序排列,用同一个名字命名这些有限个类型相同的变量,然后用编号区分他们,并且可以用一组任意的存储单元来存储数据元素,这组存储单元可以是连续的也可以是不连续的。这就意味着,这些数据元素可以存储于内存未被占用的任意位置。链表的每一个节点包括两部分:存储数据元素的数据域,以及存储下一个节点地址的指针域。通过每个节点的指针域将数据元素按其逻辑顺序链接在一起。这些节点可以在运行时动态生成,避免数据长度变化较大时,难以确定存储空间容量这一问题。
[0022] 图1是本发明基于链表数组的多幅波形包络提取方法的具体实施方式流程图。如图1所示,本发明基于链表数组的多幅波形包络提取方法的具体步骤包括:
[0023] S101:构建链表数组:
[0024] 构建一个动态链表数组,用于存储采集到的波形数据。图2是本发明中所采用的链表数组结构图。如图2所示,本发明中采用链表数组是长度为L的数组P,该数组中每个元素P[i]为一个链表的表头节点,i=0,1,…,L-1,L表示每幅波形数据的采样点数量。表1是链表节点结构。
[0025]data next
[0026] 表1
[0027] 如表1所示,链表节点中的数据域data用于保存数据,在本发明中用于保存对应采样点数据,指针域next用于指向下一个节点,若该节点是当前链表的最后一个节点,则next域为null。本发明中,每个链表的最大长度为M,M表示预设的包络次数,即在求取信号的包络时,所涵盖的波形数据的幅数。
[0028] S102:链表数组初始化:
[0029] 按照预定参数,例如时基、幅度档位实时采集第1幅波形数据,记其采样点序列为X1,X1[i]表示第1幅波形的第i个采样点,令链表数组中每个链表的表头节点数据域P[i].data=X1[i],指针域P[i].next=null。
[0030] S103:令波形序号t=2。
[0031] S104:信号数据采集:
[0032] 按照预定参数实时采集第t幅波形,记其采样点序列为Xt,Xt[i]表示第t幅波形的第i个采样点。
[0033] S105:链表长度维护:
[0034] 分别判断每个链表当前的链表节点数量是否小于M,如果是,不作任何操作,否则删除该链表的表头节点。该步骤的作用是保证每个链表的节点数量不超过其最大长度。
[0035] S106:链表节点维护:
[0036] 对于第t幅波形中的每个采样点,依次创建并初始化一系列的链表节点,即对采样点Xt[i]创建一个链表节点S[i],其数据域S[i].data=Xt[i],指针域S[i].next=null;将链表节点S[i].data(新采样点)与数组元素P[i]对应链表中的所有节点的数据域(旧采样点)依次比较,若该链表中的所有节点的数据域都与S[i].data不同,则将S[i]直接添加到该链表末尾;若有某一节点的数据域与S[i].data大小相同,则删除该节点后将S[i]添加到该链表末尾。
[0037] 可见,采用以上方法进行链表节点维护后,每个链表下各个节点的数据域均为不同的值,这样就不需要存储每幅波形的数据,从而减少数据存储量,并且也大大减少了后续包络提取时的运算量。
[0038] S107:数据老化处理:
[0039] 判断链表数组中每个表头节点P[i]所对应的波形数据的序号ti与当前波形数据序号t之间的差值是否大于预设阈值T,如果t-ti>T,则将该表头节点删除,将下一链表节点作为表头节点。该操作可以避免某个较老的数据滞留在链表中,影响包络提取的准确性。由于包络次数为M,因此可以设置T=M,以保证链表中所存储的是最近M幅波形数据的相关数据。
[0040] S108:包络提取:
[0041] 依次扫描每个链表,提取该链表所有节点数据域中数据的最大值Roof[i]和最小值Floor[i],分别作为第i个采样点的上包络值和下包络值,得到信号的包络数据。根据系统参数进行实时刷新并显示,即可显示信号的包络波形。
[0042] S109:判断是否接收到结束指令,如果是,结束信号采集和包络提取,否则令t=t+1,返回步骤S104。
[0043] 尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。