【技术实现步骤摘要】
本专利技术涉及数字信号处理领域,具体涉及一种对长数据序列求均值的方法,及其实现装置。
技术介绍
在语音信号处理、仪器仪表等智能型实时信号处理系统中,经常需要对长序列采样数据求平均值问题。例如,在数字电话的免提功能中,需要把在一定时间内采集到的离散语音信号电平数据求平均,以判断出哪一方在说话。这里,通常的做法是把2秒内的语音数字信号进行代数求平均。在数字电话中,语音信号的数据采样频率通常是8KHz,因此对2秒内的信号进行求平均时,现有技术的做法是把这16K个数据依次全部读入内存,相加出总和后求平均。显然这种做法是非常占用内存空间的,尤其是在很多嵌入式开发中,芯片的内存空间弥足珍贵,往往难以满足这种把所有数据都读入内存的做法,因此现有技术的这种做法大大限制了数字信号处理技术在这些领域的应用。 又例如在数字化温度、压力探测领域,例如在工业环境中的温度探测,由于工业现场的干扰大、电磁环境复杂,各种干扰使得采集到的数据往往不够稳定。为了消除这些干扰而获得可靠的测量结果,采用的有效方法之一就是采用多值长序列求平均值的做法,并且单位时间内采集的样值越多就越有利于消除各种干扰。比如探测到1000个温度采样值,每个数据占2个字节的内存,整个序列共占内存2000个字节。采用现有技术的序列求均值方法时设样值序列d0,d1,d2,d3,d4,......d999 总和为SUM=d0+d1+d2+d3+d4+......+d999平均值为dpj=SUM/1000可见,现有的做法占用内存多,对芯片内存要求高,因此提高了系统成本,也限制了技术发展。从上面的计算公式中可以看出,要 ...
【技术保护点】
一种计算数据序列平均值的装置,包括计算模块和存储模块,计算模块用于计算所输入的数据的平均值,存储模块用于存储待计算的数据,并将所得的数据输出到计算模块,其特征在于存储模块分为若干级,每一级包括若干个存储单元,每一个存储单元可以存储一个待处理的数据;每当上一级的存储单元中的数据被输出到计算模块后,计算所得的结果值输出到下一级存储单元。
【技术特征摘要】
限定。 本发明的关键是采用分级计算的方法,使得内存单元能被循环使用,所以不仅大幅节省内存单元,同时还可以得到多个短序列的平均值。在本实施例中,存储模块分为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个数据的长序列。 该芯片的工作原理如下开始使用时,芯片的全部内存清零,然后将待处理的序列数据依次输...
【专利技术属性】
技术研发人员:谭立军,
申请(专利权)人:北京远东仪表有限公司,
类型:发明
国别省市:11[中国|北京]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。