一种计算数据序列平均值的方法及其实现装置的制作方法

文档序号:82683阅读:622来源:国知局
专利名称:一种计算数据序列平均值的方法及其实现装置的制作方法
技术领域
本发明涉及数字信号处理领域,具体涉及一种对长数据序列求均值的方法,及其实现装置。
背景技术
在语音信号处理、仪器仪表等智能型实时信号处理系统中,经常需要对长序列采样数据求平均值问题。例如,在数字电话的免提功能中,需要把在一定时间内采集到的离散语音信号电平数据求平均,以判断出哪一方在说话。这里,通常的做法是把2秒内的语音数字信号进行代数求平均。在数字电话中,语音信号的数据采样频率通常是8KHz,因此对2秒内的信号进行求平均时,现有技术的做法是把这16K个数据依次全部读入内存,相加出总和后求平均。显然这种做法是非常占用内存空间的,尤其是在很多嵌入式开发中,芯片的内存空间弥足珍贵,往往难以满足这种把所有数据都读入内存的做法,因此现有技术的这种做法大大限制了数字信号处理技术在这些领域的应用。
又例如在数字化温度、压力探测领域,例如在工业环境中的温度探测,由于工业现场的干扰大、电磁环境复杂,各种干扰使得采集到的数据往往不够稳定。为了消除这些干扰而获得可靠的测量结果,采用的有效方法之一就是采用多值长序列求平均值的做法,并且单位时间内采集的样值越多就越有利于消除各种干扰。比如探测到1000个温度采样值,每个数据占2个字节的内存,整个序列共占内存2000个字节。采用现有技术的序列求均值方法时设样值序列d0,d1,d2,d3,d4,......d999
总和为SUM=d0+d1+d2+d3+d4+......+d999平均值为dpj=SUM/1000可见,现有的做法占用内存多,对芯片内存要求高,因此提高了系统成本,也限制了技术发展。从上面的计算公式中可以看出,要计算n个采样值的平均值,就需要n个内存单元。例如,当n=1024时,需要把这1024个数据都读入内存,同样的当n=16×1024=16384时,就需要16384个内存单元。因此,对内存的过量占用限制数字信号在这些领域的应用。

发明内容(一)要解决的技术问题本发明的目的是要克服目前现有技术的缺陷,提出一种可以有效减少内存占用量的数字信号序列求均值的方法,以及可以实现这种方法的装置,使得数字信号处理可以方便的应用在许多场合中。
(二)技术方案本发明提出一种计算数据序列平均值的装置,包括计算模块和存储模块,计算模块用于计算所输入的数据的平均值,存储模块用于存储待计算的数据,并将所得的数据输出到计算模块,其中,存储模块分为若干级,每一级包括若干个存储单元,每一个存储单元可以存储一个待处理的数据;每当上一级的存储单元中的数据被输出到计算模块后,计算所得的结果值输出到下一级存储单元。
上述的计算数据序列平均值的装置,一种优选的方案是所述装置采用可编程器件实现,其中可编程器件中的内存用作该装置的存储模块。所述可编程器件为单片机、或现场可编程门阵列、或数字信号处理器、或ARM芯片。
上述的计算数据序列平均值的装置,一种优选的方案是所述存储模块分为20级,每一级包括2个存储单元。
本发明还提出一种数据序列平均值计算方法,该方法使用了上述的装置,当向该装置依次输入长度为N的数字信号序列时,采用以下步骤(a)将序列中的ml个数值读入存储模块中的第一级的ml个存储单元;计算本级ml个存储单元内的数值的平均值,所得结果输出到第二级存储单元中的一个存储单元;将第一级存储单元全部清空;继续读取序列中下一批ml个数值,并进行本步骤中的前述处理;(b)中间某一级存储模块的mi个存储单元读入前一级的mi个输出值;计算本级mi个存储单元内的数值的平均值,将所得结果输出到后一级存储单元中的一个存储单元;将本级存储单元全部清空;继续读取前一级的下一批mi个输出的平均值,并进行本步骤中的前述处理;(c)最后一级的mk个存储单元读入前一级的mk个输出的平均值;计算本级mk个存储单元中的数值的平均值,该平均值即为待处理的序列的平均值。
上述的数据序列平均值计算方法,一种优选的方案是m1、mi、mk均为2。也就是说,当向该装置依次输入长度为N的数字信号序列时,采用以下步骤(a)序列中的2个数值读入存储模块中的第一级的2个存储单元;计算这2个数值的平均值,所得结果输出到第二级存储单元中的一个存储单元;将第一级存储单元全部清空;继续读取序列中下2个数值,并进行本步骤中的前述处理;(b)中间某一级存储模块的2个存储单元读取前一级存储单元中的2个输出值;计算这2个数值的平均值,将所得结果输出到后一级存储单元中的一个存储单元;将本级存储单元全部清空;继续读取前一级的下2个输出值,并进行本步骤中的前述处理;
(c)最后一级的2个存储单元读取前一级的2个存储单元的输出值;计算这2个数值的平均值,所得结果即为待处理的序列的平均值。
(三)有益效果采用本发明,通过动态循环的使用内存单元的方式,提高芯片内存的利用率,尤其对于长序列,在计算序列平均值时所需要占用的内存比现有技术少得多,大大提高了内存效率,从而使得内存较小的芯片实现长序列数据的处理,降低了开发成本。
图1为实施例1的装置中各级存储单元的关系示意图;图2为本发明的方法流程图;图3为本发明的方法流程图;图4为实施例2的装置中各级存储单元的关系示意图。
其中,10、第一级偶存储单元;11、第一级奇存储单元;20、第二级偶存储单元;21、第二级奇存储单元;30、第三级偶存储单元;31、第三级奇存储单元;K0、第K级偶存储单元;K1、第K级奇存储单元。
具体实施方式实施例1本发明提出计算序列平均值的装置及其使用方法,结合附图和实施例说明如下。以下实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域
的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由各权利要求
限定。
本发明的关键是采用分级计算的方法,使得内存单元能被循环使用,所以不仅大幅节省内存单元,同时还可以得到多个短序列的平均值。在本实施例中,存储模块分为20级,每一级有2个存储单元,对应到mi=ml=mk=2,第K级即为第20级存储单元的情况。每一级2个存储单元的技术方案是本发明的最佳实施方案,采用这种方案时,运算时所需的内存占用量最小,也就是说相比现有技术,它节省的内存占用量最大。因此,本实施例用于说明在每一级存储模块包括2个存储单元的技术方案。
参照图1、图2、图3和图4,说明本发明的原理。本实施例所采用的装置具有20级存储模块,每一级包括2个存储单元,为了方便叙述,每一级中的2个存储单元分别命名为偶存储单元和奇存储单元。
首先以最简单的序列为例,假定序列为d0,d1,d2,d3将前两个数据读入第一级偶存储单元10和第一级奇存储单元11,然后计算这2个数据的平均值Ad1=(d0+d1)/2,所得结果输出到第二级偶存储单元20。清空存储单元10和存储单元11。
再将序列的第3、4个数据读入第一级偶存储单元10和第一级奇存储单元11,然后计算这2个数据的平均值Bd1=(d2+d3)/2,然后所得结果输出到第二级奇存储单元21。然后计算第二级偶存储单元20和第二级基存储单元21内寄存的数据的平均值。所得结果即为整个序列的平均值。整个计算过程中,总共占用2级内存模块,即总共占用4个存储单元。可见,每一对上一级的存储单元,所得的计算结果数据输出有2种流向,对照图1中的实线和虚线,分别流向下一级存储单元中的其中一个。
为了更清楚地说明本发明,再以16位的序列为例d0,d1,d2,d3......d15将d0、d1读入第一级偶存储单元10和第一级奇存储单元11,然后计算这2个数据的平均值Ad1=(d0+d1)/2,所得结果输出到第二级偶存储单元20。清空存储单元10和存储单元11。
再将d2、d3读入第一级偶存储单元10和第一级奇存储单元11,然后计算这2个数据的平均值Bd1=(d2+d3)/2,所得结果输出到第二级奇存储单元21。清空存储单元10和存储单元11。
然后计算第二级偶存储单元20和第二级基存储单元21内寄存的数据的平均值Ad2=(Ad1+Bd1)/2,所得结果输出到第三级偶存储单元30。清空存储单元20和存储单元21。
在把d4、d5读入第一级偶存储单元10和第一级奇存储单元11,求均值后所得结出输出到第二级偶存储单元20,清空存储单元10和存储单元11;读取d6、d7并把平均值输出到第二级偶奇存器21。计算第二级偶存储单元20和第二级偶奇存器21内的数据的平均值,所得数据输出到第三级奇存储单元31。清空第二级存储单元。
把前述得到的寄存在第三级偶存储单元30中的数据、和第三级奇存储单元31中的数据相加求平均,所得数据输出到第四级偶存储单元40,并清空第三级偶存储单元30和第三级奇存储单元31。可以看出,寄存在第四级偶存储单元中的数据,是待处理的序列的前半段,即d0、d1、d2......d7的平均值。
重复上述步骤获得待处理的序列的后半段,即d8、d9、d10......d15的平均值,所得结果输出到第四级奇存储单元。
最后,把第四级偶存储单元中的数据,和第四级奇存储单元中的数据相加求平均,即得到整个序列d0,d1,d2,d3......d15的代数平均值。
可见,采用本发明,对长度为16个序列,所需的内存为4级,每一级包括2个存储单元,因此总共需要8个存储单元。同样的,每一对上一级的存储单元,所得的计算结果数据输出有2种流向,对照图1中的实线和虚线,分别流向下一级存储单元中的其中一个。
同理,对于更长的序列,例如n=1024=210的序列,采用本发明提出的方法,总共需要10级共20个存储单元的内存空间,比使用现有技术的方法节省了1004个。可见,对于本实施例,长度为N=2n的序列,总共所需占用的内存总数为2×log2N。例如当序列长度为16384=214时,采用本发明的方法所需内存为14级共28个,比现有技术节省了16356个。也就是说对于本实施例中,总共采用40个存储单元的技术方案,即总共具有20级、每一级包括2个存储单元的装置而言,可以计算的序列的最大长度是220。可以看出,本发明对长度越长的序列,优势越明显。
而且,对比现有技术,本发明还有一个优点在于,现有技术无法得到序列的某一段的平均值。例如,对于一个1024长度的序列,采用现有技术的计算方法,如果要得到后半段的平均值,只能重新计算获得结果,也就是说把序列的后半段全部读入存储单元,然后计算平均值。相对的采用本发明提出的方法,如果要获得这个序列的前半段或后半段的平均值,可以直接读取第十级偶存储单元和第十级奇存储单元内的数据,就可以得到序列前半段或后半段的平均值,完全不用重新计算。类似的,如果要得到序列的四分之一位置开始,到二分之一位置结束的序列段的平均值,可以读取第九级奇存储单元内的数据,在整个计算过程中,第九级奇存储单元一共存储过2次数据,其中第一次输入的数据就是所要的结果。
对于本发明,具体实现时可以采用可编程器件例如FPGA(现场可编程门阵列)、单片机、DSP(数字信号处理器)、ARM处理器,配合循环算法实现。在本实施例中,以一件FPGA为例,说明器件内部的工作原理。编程代码方面,本领域的技术人员在理解本发明的精神的情况下,可以容易的找出多种可行方案,因此代码部分不作赘述。
采用FPGA芯片配合循环嵌套的算法,用作数字电话中的芯片,实现当需要使用免提功能时计算数字语音序列的平均值。该FPGA芯片的内存容量为1K字节,如果按照8KHz的采样率,采用现有技术的方法,将待处理的数据依次全部读入内存,则该芯片最多只能完成0.125秒时间内的序列的运算,无法处理更长的数据流。而根据本发明提出的方法,这片芯片可以处理更长的数据流,例如2秒时间段内共16K个数据的长序列。
该芯片的工作原理如下开始使用时,芯片的全部内存清零,然后将待处理的序列数据依次输入到第一级偶存储单元和第一级奇存储单元中,每输入一对数据就计算一次这2个数据的平均值,所得的结果数据输出到下一级存储单元中的其中一个,如此循环,直到整个序列中的所有数据都被计算过。最后一级存储单元中的数据相加求平均后,所得的结果就是整个序列的平均值。对于数据序列的长度,如果序列长度不满足N=2n的关系,例如长度为1000的序列,则取当中的512个序列完成计算。但是在大多数实际应用上,由于数据的采样率足够高,例如本实施例的数字电话芯片的采样率为8KHz,实际上只要处于通话状态,系统会一直处于采样状态,也就是说数据信号是不间断的,因此不需要担心因为序列长度不够而无法使用本发明的情况。
通过这样实现出来的FPGA芯片,完全可以实现数字电话的信号处理功能,可见本发明的方法,能很有效率的节约内存的占用量,而且从实际试验结果看来,语音质量、处理速度等各方面效果参数,对比采用现有技术的方法并没有受到影响。至于FPGA芯片内的算法代码,本领域的技术人员在理解本发明的精神后,都会知道如何使用循环嵌套的程序段完成编成的过程,因此代码部分在此不作赘述。
实施例2本实施例用于说明存储模块中每一级具有更多存储单元的情况。根据本发明,每一级包括更多存储单元的方案并不是最优的,但是它是可行的。
本实施例采用单片机配合编程实现,用于工业探测中的温度探测器的处理器,参照图4,整个存储模块分为15级,每级包括4个存储单元,对应到mi=ml=mk=4,第K级即为第15级存储单元的情况。
本实施例的工作原理如下当每一级包括4个存储单元时,对于长度为16的序列d0,d1,d2,d3......d15将d0、d1、d2、d3分别读入第一级存储单元,然后计算这4个数据的平均值Ad1=(d0+d1+d2+d3)/4,然后所得结果输出到第二级第1存储单元。清空所有第一级存储单元。
再将d4、d5、d6、d7读入第一级存储单元,计算这4个数据的平均值Bd1=(d4+d5+d6+d7)/4,然后所得结果输出到第二级第2存储单元。清空第一级存储单元。
类似的计算后面8个数值的平均值,所得结果分别输出到第二级第3存储单元和第二级第4存储单元。
4个第二级存储单元中的数据的平均值就是本序列的平均值。
可见,对于本实施例,当数据流在某一时刻的长度为N=4n时,计算这个序列总共所需占用的内存总数为4×log4N;而本实施例的装置,可以计算长度不大于415的序列。
类似的,当每一级的内存单元增加到8个时,对于长度为N=8n的序列,总共所需占用的内存总数为8×log8N。也就是说,每一级的存储单元越多,计算同一个序列所需的内存空间就越大。
对于长度为N的数据序列,如果采用每级m个存储单元的装置进行平均值计算,所需要的存储级数为logmN;也就是说对于设有更多级的存储单元的计算装置来说,如果需要计算长度为N的数据序列的平均值,只需要读取该装置的第logmN级的平均值就可以了,其中N是m的整次幂。
对于更长的序列,计算方法是雷同的,在此不做赘述。本实施例中的编程代码相对于实施例1也是雷同的,本领域的技术人员只要理解本发明后,都可以知道多种可行的代码方案。
本实施例的芯片,在工业探测的实际使用中,可以实时有效的获得工业现场的温度,而采用本发明后,对探测器芯片的内存占用非常的小,大大节约了开发成本,使得数字信号处理技术可以应用在这些场合中。
权利要求
1.一种计算数据序列平均值的装置,包括计算模块和存储模块,计算模块用于计算所输入的数据的平均值,存储模块用于存储待计算的数据,并将所得的数据输出到计算模块,其特征在于存储模块分为若干级,每一级包括若干个存储单元,每一个存储单元可以存储一个待处理的数据;每当上一级的存储单元中的数据被输出到计算模块后,计算所得的结果值输出到下一级存储单元。
2.如权利要求
1所述的计算数据序列平均值的装置,其特征在于所述装置采用可编程器件实现,其中可编程器件中的内存用作该装置的存储模块。
3.如权利要求
2所述的计算数据序列平均值的装置,其特征在于所述可编程器件为单片机、或现场可编程门阵列、或数字信号处理器、或ARM芯片。
4.如权利要求
1所述的计算数据序列平均值的装置,其特征在于所述每一级存储模块包括2个存储单元。
5.一种使用如权利要求
1至4之一所述装置的数据序列平均值计算方法,其特征在于当向该装置依次输入长度为N的数字信号序列时,采用以下步骤(a)将序列中的ml个数值读入存储模块中的第一级的ml个存储单元;计算本级ml个存储单元内的数值的平均值,所得结果输出到第二级存储单元中的一个存储单元;将第一级存储单元全部清空;继续读取序列中下一批ml个数值,并进行本步骤中的前述处理;(b)中间某一级存储模块的mi个存储单元读入前一级的mi个输出值;计算本级mi个存储单元内的数值的平均值,将所得结果输出到后一级存储单元中的一个存储单元;将本级存储单元全部清空;继续读取前一级的下一批mi个输出的平均值,并进行本步骤中的前述处理;(c)最后一级的mk个存储单元读入前一级的mk个输出的平均值;计算本级mk个存储单元中的数值的平均值,该平均值即为待处理的序列的平均值。
6.如权利要求
5所述的数据序列平均值计算方法,其特征在于ml、mi、mk均为2。
7.如权利要求
6所述的数据序列平均值计算方法,其特征在于当向该装置依次输入长度为N的数字信号序列时,采用以下步骤(a)将序列中的2个数值读入存储模块中的第一级的2个存储单元;计算这2个数值的平均值,所得结果输出到第二级存储单元中的一个存储单元;将第一级存储单元全部清空;继续读取序列中下2个数值,并进行本步骤中的前述处理;(b)中间某一级存储模块的2个存储单元读取前一级存储单元中的2个输出值;计算这2个数值的平均值,将所得结果输出到后一级存储单元中的一个存储单元;将本级存储单元全部清空;继续读取前一级的下2个输出值,并进行本步骤中的前述处理;(c)最后一级的2个存储单元读取前一级的2个存储单元的输出值;计算这2个数值的平均值,所得结果即为待处理的序列的平均值。
专利摘要
本发明涉及数字信号处理领域。本发明提出一种计算数据序列平均值的方法,及其实现装置,采用分级计算序列各段平均值的方法,最后综合得到整个序列的结果。采用本发明,通过动态循环的使用内存单元的方式,提高芯片内存的利用率,尤其对于长序列,在计算序列平均值时所需要占用的内存比现有技术少得多,大大提高了内存效率,从而使得内存较小的芯片能够实现长序列数据的处理,降低了产品成本。
文档编号G06F17/10GK1991818SQ200510136301
公开日2007年7月4日 申请日期2005年12月30日
发明者谭立军 申请人:北京远东仪表有限公司导出引文BiBTeX, EndNote, RefMan
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1