專利名稱:一種計(jì)算數(shù)據(jù)序列平均值的方法及其實(shí)現(xiàn)裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)字信號(hào)處理領(lǐng)域,具體涉及一種對(duì)長(zhǎng)數(shù)據(jù)序列求均值的方法,及其實(shí)現(xiàn)裝置。
背景技術(shù):
在語(yǔ)音信號(hào)處理、儀器儀表等智能型實(shí)時(shí)信號(hào)處理系統(tǒng)中,經(jīng)常需要對(duì)長(zhǎng)序列采樣數(shù)據(jù)求平均值問題。例如,在數(shù)字電話的免提功能中,需要把在一定時(shí)間內(nèi)采集到的離散語(yǔ)音信號(hào)電平數(shù)據(jù)求平均,以判斷出哪一方在說話。這里,通常的做法是把2秒內(nèi)的語(yǔ)音數(shù)字信號(hào)進(jìn)行代數(shù)求平均。在數(shù)字電話中,語(yǔ)音信號(hào)的數(shù)據(jù)采樣頻率通常是8KHz,因此對(duì)2秒內(nèi)的信號(hào)進(jìn)行求平均時(shí),現(xiàn)有技術(shù)的做法是把這16K個(gè)數(shù)據(jù)依次全部讀入內(nèi)存,相加出總和后求平均。顯然這種做法是非常占用內(nèi)存空間的,尤其是在很多嵌入式開發(fā)中,芯片的內(nèi)存空間彌足珍貴,往往難以滿足這種把所有數(shù)據(jù)都讀入內(nèi)存的做法,因此現(xiàn)有技術(shù)的這種做法大大限制了數(shù)字信號(hào)處理技術(shù)在這些領(lǐng)域的應(yīng)用。
又例如在數(shù)字化溫度、壓力探測(cè)領(lǐng)域,例如在工業(yè)環(huán)境中的溫度探測(cè),由于工業(yè)現(xiàn)場(chǎng)的干擾大、電磁環(huán)境復(fù)雜,各種干擾使得采集到的數(shù)據(jù)往往不夠穩(wěn)定。為了消除這些干擾而獲得可靠的測(cè)量結(jié)果,采用的有效方法之一就是采用多值長(zhǎng)序列求平均值的做法,并且單位時(shí)間內(nèi)采集的樣值越多就越有利于消除各種干擾。比如探測(cè)到1000個(gè)溫度采樣值,每個(gè)數(shù)據(jù)占2個(gè)字節(jié)的內(nèi)存,整個(gè)序列共占內(nèi)存2000個(gè)字節(jié)。采用現(xiàn)有技術(shù)的序列求均值方法時(shí)設(shè)樣值序列d0,d1,d2,d3,d4,......d999
總和為SUM=d0+d1+d2+d3+d4+......+d999平均值為dpj=SUM/1000可見,現(xiàn)有的做法占用內(nèi)存多,對(duì)芯片內(nèi)存要求高,因此提高了系統(tǒng)成本,也限制了技術(shù)發(fā)展。從上面的計(jì)算公式中可以看出,要計(jì)算n個(gè)采樣值的平均值,就需要n個(gè)內(nèi)存單元。例如,當(dāng)n=1024時(shí),需要把這1024個(gè)數(shù)據(jù)都讀入內(nèi)存,同樣的當(dāng)n=16×1024=16384時(shí),就需要16384個(gè)內(nèi)存單元。因此,對(duì)內(nèi)存的過量占用限制數(shù)字信號(hào)在這些領(lǐng)域的應(yīng)用。
發(fā)明內(nèi)容(一)要解決的技術(shù)問題本發(fā)明的目的是要克服目前現(xiàn)有技術(shù)的缺陷,提出一種可以有效減少內(nèi)存占用量的數(shù)字信號(hào)序列求均值的方法,以及可以實(shí)現(xiàn)這種方法的裝置,使得數(shù)字信號(hào)處理可以方便的應(yīng)用在許多場(chǎng)合中。
(二)技術(shù)方案本發(fā)明提出一種計(jì)算數(shù)據(jù)序列平均值的裝置,包括計(jì)算模塊和存儲(chǔ)模塊,計(jì)算模塊用于計(jì)算所輸入的數(shù)據(jù)的平均值,存儲(chǔ)模塊用于存儲(chǔ)待計(jì)算的數(shù)據(jù),并將所得的數(shù)據(jù)輸出到計(jì)算模塊,其中,存儲(chǔ)模塊分為若干級(jí),每一級(jí)包括若干個(gè)存儲(chǔ)單元,每一個(gè)存儲(chǔ)單元可以存儲(chǔ)一個(gè)待處理的數(shù)據(jù);每當(dāng)上一級(jí)的存儲(chǔ)單元中的數(shù)據(jù)被輸出到計(jì)算模塊后,計(jì)算所得的結(jié)果值輸出到下一級(jí)存儲(chǔ)單元。
上述的計(jì)算數(shù)據(jù)序列平均值的裝置,一種優(yōu)選的方案是所述裝置采用可編程器件實(shí)現(xiàn),其中可編程器件中的內(nèi)存用作該裝置的存儲(chǔ)模塊。所述可編程器件為單片機(jī)、或現(xiàn)場(chǎng)可編程門陣列、或數(shù)字信號(hào)處理器、或ARM芯片。
上述的計(jì)算數(shù)據(jù)序列平均值的裝置,一種優(yōu)選的方案是所述存儲(chǔ)模塊分為20級(jí),每一級(jí)包括2個(gè)存儲(chǔ)單元。
本發(fā)明還提出一種數(shù)據(jù)序列平均值計(jì)算方法,該方法使用了上述的裝置,當(dāng)向該裝置依次輸入長(zhǎng)度為N的數(shù)字信號(hào)序列時(shí),采用以下步驟(a)將序列中的ml個(gè)數(shù)值讀入存儲(chǔ)模塊中的第一級(jí)的ml個(gè)存儲(chǔ)單元;計(jì)算本級(jí)ml個(gè)存儲(chǔ)單元內(nèi)的數(shù)值的平均值,所得結(jié)果輸出到第二級(jí)存儲(chǔ)單元中的一個(gè)存儲(chǔ)單元;將第一級(jí)存儲(chǔ)單元全部清空;繼續(xù)讀取序列中下一批ml個(gè)數(shù)值,并進(jìn)行本步驟中的前述處理;(b)中間某一級(jí)存儲(chǔ)模塊的mi個(gè)存儲(chǔ)單元讀入前一級(jí)的mi個(gè)輸出值;計(jì)算本級(jí)mi個(gè)存儲(chǔ)單元內(nèi)的數(shù)值的平均值,將所得結(jié)果輸出到后一級(jí)存儲(chǔ)單元中的一個(gè)存儲(chǔ)單元;將本級(jí)存儲(chǔ)單元全部清空;繼續(xù)讀取前一級(jí)的下一批mi個(gè)輸出的平均值,并進(jìn)行本步驟中的前述處理;(c)最后一級(jí)的mk個(gè)存儲(chǔ)單元讀入前一級(jí)的mk個(gè)輸出的平均值;計(jì)算本級(jí)mk個(gè)存儲(chǔ)單元中的數(shù)值的平均值,該平均值即為待處理的序列的平均值。
上述的數(shù)據(jù)序列平均值計(jì)算方法,一種優(yōu)選的方案是m1、mi、mk均為2。也就是說,當(dāng)向該裝置依次輸入長(zhǎng)度為N的數(shù)字信號(hào)序列時(shí),采用以下步驟(a)序列中的2個(gè)數(shù)值讀入存儲(chǔ)模塊中的第一級(jí)的2個(gè)存儲(chǔ)單元;計(jì)算這2個(gè)數(shù)值的平均值,所得結(jié)果輸出到第二級(jí)存儲(chǔ)單元中的一個(gè)存儲(chǔ)單元;將第一級(jí)存儲(chǔ)單元全部清空;繼續(xù)讀取序列中下2個(gè)數(shù)值,并進(jìn)行本步驟中的前述處理;(b)中間某一級(jí)存儲(chǔ)模塊的2個(gè)存儲(chǔ)單元讀取前一級(jí)存儲(chǔ)單元中的2個(gè)輸出值;計(jì)算這2個(gè)數(shù)值的平均值,將所得結(jié)果輸出到后一級(jí)存儲(chǔ)單元中的一個(gè)存儲(chǔ)單元;將本級(jí)存儲(chǔ)單元全部清空;繼續(xù)讀取前一級(jí)的下2個(gè)輸出值,并進(jìn)行本步驟中的前述處理;
(c)最后一級(jí)的2個(gè)存儲(chǔ)單元讀取前一級(jí)的2個(gè)存儲(chǔ)單元的輸出值;計(jì)算這2個(gè)數(shù)值的平均值,所得結(jié)果即為待處理的序列的平均值。
(三)有益效果采用本發(fā)明,通過動(dòng)態(tài)循環(huán)的使用內(nèi)存單元的方式,提高芯片內(nèi)存的利用率,尤其對(duì)于長(zhǎng)序列,在計(jì)算序列平均值時(shí)所需要占用的內(nèi)存比現(xiàn)有技術(shù)少得多,大大提高了內(nèi)存效率,從而使得內(nèi)存較小的芯片實(shí)現(xiàn)長(zhǎng)序列數(shù)據(jù)的處理,降低了開發(fā)成本。
圖1為實(shí)施例1的裝置中各級(jí)存儲(chǔ)單元的關(guān)系示意圖;圖2為本發(fā)明的方法流程圖;圖3為本發(fā)明的方法流程圖;圖4為實(shí)施例2的裝置中各級(jí)存儲(chǔ)單元的關(guān)系示意圖。
其中,10、第一級(jí)偶存儲(chǔ)單元;11、第一級(jí)奇存儲(chǔ)單元;20、第二級(jí)偶存儲(chǔ)單元;21、第二級(jí)奇存儲(chǔ)單元;30、第三級(jí)偶存儲(chǔ)單元;31、第三級(jí)奇存儲(chǔ)單元;K0、第K級(jí)偶存儲(chǔ)單元;K1、第K級(jí)奇存儲(chǔ)單元。
具體實(shí)施方式實(shí)施例1本發(fā)明提出計(jì)算序列平均值的裝置及其使用方法,結(jié)合附圖和實(shí)施例說明如下。以下實(shí)施方式僅用于說明本發(fā)明,而并非對(duì)本發(fā)明的限制,有關(guān)技術(shù)領(lǐng)域:
的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術(shù)方案也屬于本發(fā)明的范疇,本發(fā)明的專利保護(hù)范圍應(yīng)由各權(quán)利要求
限定。
本發(fā)明的關(guān)鍵是采用分級(jí)計(jì)算的方法,使得內(nèi)存單元能被循環(huán)使用,所以不僅大幅節(jié)省內(nèi)存單元,同時(shí)還可以得到多個(gè)短序列的平均值。在本實(shí)施例中,存儲(chǔ)模塊分為20級(jí),每一級(jí)有2個(gè)存儲(chǔ)單元,對(duì)應(yīng)到mi=ml=mk=2,第K級(jí)即為第20級(jí)存儲(chǔ)單元的情況。每一級(jí)2個(gè)存儲(chǔ)單元的技術(shù)方案是本發(fā)明的最佳實(shí)施方案,采用這種方案時(shí),運(yùn)算時(shí)所需的內(nèi)存占用量最小,也就是說相比現(xiàn)有技術(shù),它節(jié)省的內(nèi)存占用量最大。因此,本實(shí)施例用于說明在每一級(jí)存儲(chǔ)模塊包括2個(gè)存儲(chǔ)單元的技術(shù)方案。
參照?qǐng)D1、圖2、圖3和圖4,說明本發(fā)明的原理。本實(shí)施例所采用的裝置具有20級(jí)存儲(chǔ)模塊,每一級(jí)包括2個(gè)存儲(chǔ)單元,為了方便敘述,每一級(jí)中的2個(gè)存儲(chǔ)單元分別命名為偶存儲(chǔ)單元和奇存儲(chǔ)單元。
首先以最簡(jiǎn)單的序列為例,假定序列為d0,d1,d2,d3將前兩個(gè)數(shù)據(jù)讀入第一級(jí)偶存儲(chǔ)單元10和第一級(jí)奇存儲(chǔ)單元11,然后計(jì)算這2個(gè)數(shù)據(jù)的平均值A(chǔ)d1=(d0+d1)/2,所得結(jié)果輸出到第二級(jí)偶存儲(chǔ)單元20。清空存儲(chǔ)單元10和存儲(chǔ)單元11。
再將序列的第3、4個(gè)數(shù)據(jù)讀入第一級(jí)偶存儲(chǔ)單元10和第一級(jí)奇存儲(chǔ)單元11,然后計(jì)算這2個(gè)數(shù)據(jù)的平均值Bd1=(d2+d3)/2,然后所得結(jié)果輸出到第二級(jí)奇存儲(chǔ)單元21。然后計(jì)算第二級(jí)偶存儲(chǔ)單元20和第二級(jí)基存儲(chǔ)單元21內(nèi)寄存的數(shù)據(jù)的平均值。所得結(jié)果即為整個(gè)序列的平均值。整個(gè)計(jì)算過程中,總共占用2級(jí)內(nèi)存模塊,即總共占用4個(gè)存儲(chǔ)單元??梢姡恳粚?duì)上一級(jí)的存儲(chǔ)單元,所得的計(jì)算結(jié)果數(shù)據(jù)輸出有2種流向,對(duì)照?qǐng)D1中的實(shí)線和虛線,分別流向下一級(jí)存儲(chǔ)單元中的其中一個(gè)。
為了更清楚地說明本發(fā)明,再以16位的序列為例d0,d1,d2,d3......d15將d0、d1讀入第一級(jí)偶存儲(chǔ)單元10和第一級(jí)奇存儲(chǔ)單元11,然后計(jì)算這2個(gè)數(shù)據(jù)的平均值A(chǔ)d1=(d0+d1)/2,所得結(jié)果輸出到第二級(jí)偶存儲(chǔ)單元20。清空存儲(chǔ)單元10和存儲(chǔ)單元11。
再將d2、d3讀入第一級(jí)偶存儲(chǔ)單元10和第一級(jí)奇存儲(chǔ)單元11,然后計(jì)算這2個(gè)數(shù)據(jù)的平均值Bd1=(d2+d3)/2,所得結(jié)果輸出到第二級(jí)奇存儲(chǔ)單元21。清空存儲(chǔ)單元10和存儲(chǔ)單元11。
然后計(jì)算第二級(jí)偶存儲(chǔ)單元20和第二級(jí)基存儲(chǔ)單元21內(nèi)寄存的數(shù)據(jù)的平均值A(chǔ)d2=(Ad1+Bd1)/2,所得結(jié)果輸出到第三級(jí)偶存儲(chǔ)單元30。清空存儲(chǔ)單元20和存儲(chǔ)單元21。
在把d4、d5讀入第一級(jí)偶存儲(chǔ)單元10和第一級(jí)奇存儲(chǔ)單元11,求均值后所得結(jié)出輸出到第二級(jí)偶存儲(chǔ)單元20,清空存儲(chǔ)單元10和存儲(chǔ)單元11;讀取d6、d7并把平均值輸出到第二級(jí)偶奇存器21。計(jì)算第二級(jí)偶存儲(chǔ)單元20和第二級(jí)偶奇存器21內(nèi)的數(shù)據(jù)的平均值,所得數(shù)據(jù)輸出到第三級(jí)奇存儲(chǔ)單元31。清空第二級(jí)存儲(chǔ)單元。
把前述得到的寄存在第三級(jí)偶存儲(chǔ)單元30中的數(shù)據(jù)、和第三級(jí)奇存儲(chǔ)單元31中的數(shù)據(jù)相加求平均,所得數(shù)據(jù)輸出到第四級(jí)偶存儲(chǔ)單元40,并清空第三級(jí)偶存儲(chǔ)單元30和第三級(jí)奇存儲(chǔ)單元31。可以看出,寄存在第四級(jí)偶存儲(chǔ)單元中的數(shù)據(jù),是待處理的序列的前半段,即d0、d1、d2......d7的平均值。
重復(fù)上述步驟獲得待處理的序列的后半段,即d8、d9、d10......d15的平均值,所得結(jié)果輸出到第四級(jí)奇存儲(chǔ)單元。
最后,把第四級(jí)偶存儲(chǔ)單元中的數(shù)據(jù),和第四級(jí)奇存儲(chǔ)單元中的數(shù)據(jù)相加求平均,即得到整個(gè)序列d0,d1,d2,d3......d15的代數(shù)平均值。
可見,采用本發(fā)明,對(duì)長(zhǎng)度為16個(gè)序列,所需的內(nèi)存為4級(jí),每一級(jí)包括2個(gè)存儲(chǔ)單元,因此總共需要8個(gè)存儲(chǔ)單元。同樣的,每一對(duì)上一級(jí)的存儲(chǔ)單元,所得的計(jì)算結(jié)果數(shù)據(jù)輸出有2種流向,對(duì)照?qǐng)D1中的實(shí)線和虛線,分別流向下一級(jí)存儲(chǔ)單元中的其中一個(gè)。
同理,對(duì)于更長(zhǎng)的序列,例如n=1024=210的序列,采用本發(fā)明提出的方法,總共需要10級(jí)共20個(gè)存儲(chǔ)單元的內(nèi)存空間,比使用現(xiàn)有技術(shù)的方法節(jié)省了1004個(gè)??梢姡瑢?duì)于本實(shí)施例,長(zhǎng)度為N=2n的序列,總共所需占用的內(nèi)存總數(shù)為2×log2N。例如當(dāng)序列長(zhǎng)度為16384=214時(shí),采用本發(fā)明的方法所需內(nèi)存為14級(jí)共28個(gè),比現(xiàn)有技術(shù)節(jié)省了16356個(gè)。也就是說對(duì)于本實(shí)施例中,總共采用40個(gè)存儲(chǔ)單元的技術(shù)方案,即總共具有20級(jí)、每一級(jí)包括2個(gè)存儲(chǔ)單元的裝置而言,可以計(jì)算的序列的最大長(zhǎng)度是220??梢钥闯?,本發(fā)明對(duì)長(zhǎng)度越長(zhǎng)的序列,優(yōu)勢(shì)越明顯。
而且,對(duì)比現(xiàn)有技術(shù),本發(fā)明還有一個(gè)優(yōu)點(diǎn)在于,現(xiàn)有技術(shù)無法得到序列的某一段的平均值。例如,對(duì)于一個(gè)1024長(zhǎng)度的序列,采用現(xiàn)有技術(shù)的計(jì)算方法,如果要得到后半段的平均值,只能重新計(jì)算獲得結(jié)果,也就是說把序列的后半段全部讀入存儲(chǔ)單元,然后計(jì)算平均值。相對(duì)的采用本發(fā)明提出的方法,如果要獲得這個(gè)序列的前半段或后半段的平均值,可以直接讀取第十級(jí)偶存儲(chǔ)單元和第十級(jí)奇存儲(chǔ)單元內(nèi)的數(shù)據(jù),就可以得到序列前半段或后半段的平均值,完全不用重新計(jì)算。類似的,如果要得到序列的四分之一位置開始,到二分之一位置結(jié)束的序列段的平均值,可以讀取第九級(jí)奇存儲(chǔ)單元內(nèi)的數(shù)據(jù),在整個(gè)計(jì)算過程中,第九級(jí)奇存儲(chǔ)單元一共存儲(chǔ)過2次數(shù)據(jù),其中第一次輸入的數(shù)據(jù)就是所要的結(jié)果。
對(duì)于本發(fā)明,具體實(shí)現(xiàn)時(shí)可以采用可編程器件例如FPGA(現(xiàn)場(chǎng)可編程門陣列)、單片機(jī)、DSP(數(shù)字信號(hào)處理器)、ARM處理器,配合循環(huán)算法實(shí)現(xiàn)。在本實(shí)施例中,以一件FPGA為例,說明器件內(nèi)部的工作原理。編程代碼方面,本領(lǐng)域的技術(shù)人員在理解本發(fā)明的精神的情況下,可以容易的找出多種可行方案,因此代碼部分不作贅述。
采用FPGA芯片配合循環(huán)嵌套的算法,用作數(shù)字電話中的芯片,實(shí)現(xiàn)當(dāng)需要使用免提功能時(shí)計(jì)算數(shù)字語(yǔ)音序列的平均值。該FPGA芯片的內(nèi)存容量為1K字節(jié),如果按照8KHz的采樣率,采用現(xiàn)有技術(shù)的方法,將待處理的數(shù)據(jù)依次全部讀入內(nèi)存,則該芯片最多只能完成0.125秒時(shí)間內(nèi)的序列的運(yùn)算,無法處理更長(zhǎng)的數(shù)據(jù)流。而根據(jù)本發(fā)明提出的方法,這片芯片可以處理更長(zhǎng)的數(shù)據(jù)流,例如2秒時(shí)間段內(nèi)共16K個(gè)數(shù)據(jù)的長(zhǎng)序列。
該芯片的工作原理如下開始使用時(shí),芯片的全部?jī)?nèi)存清零,然后將待處理的序列數(shù)據(jù)依次輸入到第一級(jí)偶存儲(chǔ)單元和第一級(jí)奇存儲(chǔ)單元中,每輸入一對(duì)數(shù)據(jù)就計(jì)算一次這2個(gè)數(shù)據(jù)的平均值,所得的結(jié)果數(shù)據(jù)輸出到下一級(jí)存儲(chǔ)單元中的其中一個(gè),如此循環(huán),直到整個(gè)序列中的所有數(shù)據(jù)都被計(jì)算過。最后一級(jí)存儲(chǔ)單元中的數(shù)據(jù)相加求平均后,所得的結(jié)果就是整個(gè)序列的平均值。對(duì)于數(shù)據(jù)序列的長(zhǎng)度,如果序列長(zhǎng)度不滿足N=2n的關(guān)系,例如長(zhǎng)度為1000的序列,則取當(dāng)中的512個(gè)序列完成計(jì)算。但是在大多數(shù)實(shí)際應(yīng)用上,由于數(shù)據(jù)的采樣率足夠高,例如本實(shí)施例的數(shù)字電話芯片的采樣率為8KHz,實(shí)際上只要處于通話狀態(tài),系統(tǒng)會(huì)一直處于采樣狀態(tài),也就是說數(shù)據(jù)信號(hào)是不間斷的,因此不需要擔(dān)心因?yàn)樾蛄虚L(zhǎng)度不夠而無法使用本發(fā)明的情況。
通過這樣實(shí)現(xiàn)出來的FPGA芯片,完全可以實(shí)現(xiàn)數(shù)字電話的信號(hào)處理功能,可見本發(fā)明的方法,能很有效率的節(jié)約內(nèi)存的占用量,而且從實(shí)際試驗(yàn)結(jié)果看來,語(yǔ)音質(zhì)量、處理速度等各方面效果參數(shù),對(duì)比采用現(xiàn)有技術(shù)的方法并沒有受到影響。至于FPGA芯片內(nèi)的算法代碼,本領(lǐng)域的技術(shù)人員在理解本發(fā)明的精神后,都會(huì)知道如何使用循環(huán)嵌套的程序段完成編成的過程,因此代碼部分在此不作贅述。
實(shí)施例2本實(shí)施例用于說明存儲(chǔ)模塊中每一級(jí)具有更多存儲(chǔ)單元的情況。根據(jù)本發(fā)明,每一級(jí)包括更多存儲(chǔ)單元的方案并不是最優(yōu)的,但是它是可行的。
本實(shí)施例采用單片機(jī)配合編程實(shí)現(xiàn),用于工業(yè)探測(cè)中的溫度探測(cè)器的處理器,參照?qǐng)D4,整個(gè)存儲(chǔ)模塊分為15級(jí),每級(jí)包括4個(gè)存儲(chǔ)單元,對(duì)應(yīng)到mi=ml=mk=4,第K級(jí)即為第15級(jí)存儲(chǔ)單元的情況。
本實(shí)施例的工作原理如下當(dāng)每一級(jí)包括4個(gè)存儲(chǔ)單元時(shí),對(duì)于長(zhǎng)度為16的序列d0,d1,d2,d3......d15將d0、d1、d2、d3分別讀入第一級(jí)存儲(chǔ)單元,然后計(jì)算這4個(gè)數(shù)據(jù)的平均值A(chǔ)d1=(d0+d1+d2+d3)/4,然后所得結(jié)果輸出到第二級(jí)第1存儲(chǔ)單元。清空所有第一級(jí)存儲(chǔ)單元。
再將d4、d5、d6、d7讀入第一級(jí)存儲(chǔ)單元,計(jì)算這4個(gè)數(shù)據(jù)的平均值Bd1=(d4+d5+d6+d7)/4,然后所得結(jié)果輸出到第二級(jí)第2存儲(chǔ)單元。清空第一級(jí)存儲(chǔ)單元。
類似的計(jì)算后面8個(gè)數(shù)值的平均值,所得結(jié)果分別輸出到第二級(jí)第3存儲(chǔ)單元和第二級(jí)第4存儲(chǔ)單元。
4個(gè)第二級(jí)存儲(chǔ)單元中的數(shù)據(jù)的平均值就是本序列的平均值。
可見,對(duì)于本實(shí)施例,當(dāng)數(shù)據(jù)流在某一時(shí)刻的長(zhǎng)度為N=4n時(shí),計(jì)算這個(gè)序列總共所需占用的內(nèi)存總數(shù)為4×log4N;而本實(shí)施例的裝置,可以計(jì)算長(zhǎng)度不大于415的序列。
類似的,當(dāng)每一級(jí)的內(nèi)存單元增加到8個(gè)時(shí),對(duì)于長(zhǎng)度為N=8n的序列,總共所需占用的內(nèi)存總數(shù)為8×log8N。也就是說,每一級(jí)的存儲(chǔ)單元越多,計(jì)算同一個(gè)序列所需的內(nèi)存空間就越大。
對(duì)于長(zhǎng)度為N的數(shù)據(jù)序列,如果采用每級(jí)m個(gè)存儲(chǔ)單元的裝置進(jìn)行平均值計(jì)算,所需要的存儲(chǔ)級(jí)數(shù)為logmN;也就是說對(duì)于設(shè)有更多級(jí)的存儲(chǔ)單元的計(jì)算裝置來說,如果需要計(jì)算長(zhǎng)度為N的數(shù)據(jù)序列的平均值,只需要讀取該裝置的第logmN級(jí)的平均值就可以了,其中N是m的整次冪。
對(duì)于更長(zhǎng)的序列,計(jì)算方法是雷同的,在此不做贅述。本實(shí)施例中的編程代碼相對(duì)于實(shí)施例1也是雷同的,本領(lǐng)域的技術(shù)人員只要理解本發(fā)明后,都可以知道多種可行的代碼方案。
本實(shí)施例的芯片,在工業(yè)探測(cè)的實(shí)際使用中,可以實(shí)時(shí)有效的獲得工業(yè)現(xiàn)場(chǎng)的溫度,而采用本發(fā)明后,對(duì)探測(cè)器芯片的內(nèi)存占用非常的小,大大節(jié)約了開發(fā)成本,使得數(shù)字信號(hào)處理技術(shù)可以應(yīng)用在這些場(chǎng)合中。
權(quán)利要求
1.一種計(jì)算數(shù)據(jù)序列平均值的裝置,包括計(jì)算模塊和存儲(chǔ)模塊,計(jì)算模塊用于計(jì)算所輸入的數(shù)據(jù)的平均值,存儲(chǔ)模塊用于存儲(chǔ)待計(jì)算的數(shù)據(jù),并將所得的數(shù)據(jù)輸出到計(jì)算模塊,其特征在于存儲(chǔ)模塊分為若干級(jí),每一級(jí)包括若干個(gè)存儲(chǔ)單元,每一個(gè)存儲(chǔ)單元可以存儲(chǔ)一個(gè)待處理的數(shù)據(jù);每當(dāng)上一級(jí)的存儲(chǔ)單元中的數(shù)據(jù)被輸出到計(jì)算模塊后,計(jì)算所得的結(jié)果值輸出到下一級(jí)存儲(chǔ)單元。
2.如權(quán)利要求
1所述的計(jì)算數(shù)據(jù)序列平均值的裝置,其特征在于所述裝置采用可編程器件實(shí)現(xiàn),其中可編程器件中的內(nèi)存用作該裝置的存儲(chǔ)模塊。
3.如權(quán)利要求
2所述的計(jì)算數(shù)據(jù)序列平均值的裝置,其特征在于所述可編程器件為單片機(jī)、或現(xiàn)場(chǎng)可編程門陣列、或數(shù)字信號(hào)處理器、或ARM芯片。
4.如權(quán)利要求
1所述的計(jì)算數(shù)據(jù)序列平均值的裝置,其特征在于所述每一級(jí)存儲(chǔ)模塊包括2個(gè)存儲(chǔ)單元。
5.一種使用如權(quán)利要求
1至4之一所述裝置的數(shù)據(jù)序列平均值計(jì)算方法,其特征在于當(dāng)向該裝置依次輸入長(zhǎng)度為N的數(shù)字信號(hào)序列時(shí),采用以下步驟(a)將序列中的ml個(gè)數(shù)值讀入存儲(chǔ)模塊中的第一級(jí)的ml個(gè)存儲(chǔ)單元;計(jì)算本級(jí)ml個(gè)存儲(chǔ)單元內(nèi)的數(shù)值的平均值,所得結(jié)果輸出到第二級(jí)存儲(chǔ)單元中的一個(gè)存儲(chǔ)單元;將第一級(jí)存儲(chǔ)單元全部清空;繼續(xù)讀取序列中下一批ml個(gè)數(shù)值,并進(jìn)行本步驟中的前述處理;(b)中間某一級(jí)存儲(chǔ)模塊的mi個(gè)存儲(chǔ)單元讀入前一級(jí)的mi個(gè)輸出值;計(jì)算本級(jí)mi個(gè)存儲(chǔ)單元內(nèi)的數(shù)值的平均值,將所得結(jié)果輸出到后一級(jí)存儲(chǔ)單元中的一個(gè)存儲(chǔ)單元;將本級(jí)存儲(chǔ)單元全部清空;繼續(xù)讀取前一級(jí)的下一批mi個(gè)輸出的平均值,并進(jìn)行本步驟中的前述處理;(c)最后一級(jí)的mk個(gè)存儲(chǔ)單元讀入前一級(jí)的mk個(gè)輸出的平均值;計(jì)算本級(jí)mk個(gè)存儲(chǔ)單元中的數(shù)值的平均值,該平均值即為待處理的序列的平均值。
6.如權(quán)利要求
5所述的數(shù)據(jù)序列平均值計(jì)算方法,其特征在于ml、mi、mk均為2。
7.如權(quán)利要求
6所述的數(shù)據(jù)序列平均值計(jì)算方法,其特征在于當(dāng)向該裝置依次輸入長(zhǎng)度為N的數(shù)字信號(hào)序列時(shí),采用以下步驟(a)將序列中的2個(gè)數(shù)值讀入存儲(chǔ)模塊中的第一級(jí)的2個(gè)存儲(chǔ)單元;計(jì)算這2個(gè)數(shù)值的平均值,所得結(jié)果輸出到第二級(jí)存儲(chǔ)單元中的一個(gè)存儲(chǔ)單元;將第一級(jí)存儲(chǔ)單元全部清空;繼續(xù)讀取序列中下2個(gè)數(shù)值,并進(jìn)行本步驟中的前述處理;(b)中間某一級(jí)存儲(chǔ)模塊的2個(gè)存儲(chǔ)單元讀取前一級(jí)存儲(chǔ)單元中的2個(gè)輸出值;計(jì)算這2個(gè)數(shù)值的平均值,將所得結(jié)果輸出到后一級(jí)存儲(chǔ)單元中的一個(gè)存儲(chǔ)單元;將本級(jí)存儲(chǔ)單元全部清空;繼續(xù)讀取前一級(jí)的下2個(gè)輸出值,并進(jìn)行本步驟中的前述處理;(c)最后一級(jí)的2個(gè)存儲(chǔ)單元讀取前一級(jí)的2個(gè)存儲(chǔ)單元的輸出值;計(jì)算這2個(gè)數(shù)值的平均值,所得結(jié)果即為待處理的序列的平均值。
專利摘要
本發(fā)明涉及數(shù)字信號(hào)處理領(lǐng)域。本發(fā)明提出一種計(jì)算數(shù)據(jù)序列平均值的方法,及其實(shí)現(xiàn)裝置,采用分級(jí)計(jì)算序列各段平均值的方法,最后綜合得到整個(gè)序列的結(jié)果。采用本發(fā)明,通過動(dòng)態(tài)循環(huán)的使用內(nèi)存單元的方式,提高芯片內(nèi)存的利用率,尤其對(duì)于長(zhǎng)序列,在計(jì)算序列平均值時(shí)所需要占用的內(nèi)存比現(xiàn)有技術(shù)少得多,大大提高了內(nèi)存效率,從而使得內(nèi)存較小的芯片能夠?qū)崿F(xiàn)長(zhǎng)序列數(shù)據(jù)的處理,降低了產(chǎn)品成本。
文檔編號(hào)G06F17/10GK1991818SQ200510136301
公開日2007年7月4日 申請(qǐng)日期2005年12月30日
發(fā)明者譚立軍 申請(qǐng)人:北京遠(yuǎn)東儀表有限公司導(dǎo)出引文BiBTeX, EndNote, RefMan