本發(fā)明涉及流式浮點(diǎn)數(shù)據(jù)壓縮,具體涉及一種流式誤差有界的浮點(diǎn)類型數(shù)據(jù)壓縮方法。
背景技術(shù):
1、近年來(lái),物聯(lián)網(wǎng)(iot)技術(shù)取得了長(zhǎng)足進(jìn)步,在典型的物聯(lián)網(wǎng)場(chǎng)景中,大量的浮點(diǎn)時(shí)間序列數(shù)據(jù)(簡(jiǎn)稱時(shí)間序列)由各種傳感器以流式方式不斷生成,然后在有限帶寬下傳輸?shù)椒?wù)器,以供進(jìn)一步的實(shí)時(shí)分析處理。這類應(yīng)用場(chǎng)景(如圖1所示)具有以下特點(diǎn):1)帶寬有限。時(shí)間序列的數(shù)量是巨大的,但傳感器和服務(wù)器之間的網(wǎng)絡(luò)帶寬通常是有限的。例如,廣泛使用的無(wú)線網(wǎng)絡(luò)通信協(xié)議zigbee的定義速率僅為250kbit/s。2)具備容錯(cuò)能力。一方面,傳感器本身存在一定的測(cè)量誤差;另一方面,某些應(yīng)用實(shí)際上并不需要傳感器的精確讀數(shù)。例如,在日常生活中,我們只關(guān)心最多兩位小數(shù)的溫度讀數(shù)。因此,此類數(shù)據(jù)的壓縮處理允許存在指定誤差范圍的失真。3)實(shí)時(shí)性要求高。許多關(guān)鍵應(yīng)用程序依賴于實(shí)時(shí)的數(shù)據(jù)分析,意味著每條記錄一旦生成就應(yīng)立即發(fā)送至服務(wù)器端。例如,通過(guò)校車跟蹤監(jiān)控系統(tǒng),家長(zhǎng)、學(xué)校和監(jiān)管機(jī)構(gòu)可以實(shí)時(shí)跟蹤校車內(nèi)的狀況和安全情況。
2、結(jié)合上述特點(diǎn),為了提高效率,人們公認(rèn)在傳輸之前對(duì)數(shù)據(jù)進(jìn)行壓縮是十分必要的。
3、現(xiàn)有的時(shí)序浮點(diǎn)數(shù)據(jù)壓縮算法主要可以分為三大類:批式無(wú)損壓縮、批式有損壓縮和流式無(wú)損壓縮。批式無(wú)損壓縮算法,能夠以批量的工作方式在不會(huì)丟失任何信息的情況下壓縮時(shí)間序列;批式有損壓縮算法,通常能夠以批量的工作方式在犧牲一些數(shù)據(jù)精度的情況下實(shí)現(xiàn)更好的壓縮比;流式無(wú)損壓縮算法,能夠以流式的工作方式在不會(huì)丟失任何信息的情況下壓縮時(shí)間序列。
4、然而申請(qǐng)人發(fā)現(xiàn),現(xiàn)有的浮點(diǎn)壓縮方法要么是批式壓縮,可能會(huì)導(dǎo)致較長(zhǎng)的延遲;要么是流式無(wú)損壓縮,在允許一定錯(cuò)誤的應(yīng)用場(chǎng)景下,壓縮率并不理想。具體來(lái)說(shuō),批式壓縮算法需要等待一批中的所有數(shù)據(jù)記錄(例如,1000條數(shù)據(jù)記錄)準(zhǔn)備好,然后才能實(shí)際執(zhí)行壓縮操作。如果數(shù)據(jù)采樣率不高,則會(huì)帶來(lái)較大的延遲,無(wú)法滿足實(shí)時(shí)性要求。例如,gps(全球定位系統(tǒng))傳感器通常每1~10秒報(bào)告一次位置,如果批大小設(shè)置為1,000,則延遲將高達(dá)1.7~16.7分鐘,不適用于實(shí)時(shí)公交跟蹤和監(jiān)控等場(chǎng)景。為降低延遲,一種解決策略是采用小批量技術(shù),例如將批大小設(shè)置為小于50的值。然而,由于在這種情況下很難發(fā)現(xiàn)數(shù)據(jù)記錄之間的共享信息,因此大多數(shù)批量壓縮算法的壓縮性能會(huì)在小批量時(shí)效果不佳。
5、而在流式壓縮方面,目前現(xiàn)有的方法均為無(wú)損壓縮,這雖然能夠使其適應(yīng)諸如科學(xué)計(jì)算之類的高精度要求的應(yīng)用場(chǎng)景,但相較于誤差有界的有損壓縮算法而言,這類算法在壓縮比上的表現(xiàn)并不理想。結(jié)合物聯(lián)網(wǎng)領(lǐng)域的實(shí)際應(yīng)用場(chǎng)景及需求(具備一定容錯(cuò)能力、實(shí)時(shí)性要求高),誤差有界的流式有損壓縮方法理論上能夠更好地契合需求。因此,如何設(shè)計(jì)一種誤差有界的流式有損壓縮方法是亟需解決的技術(shù)問(wèn)題。
技術(shù)實(shí)現(xiàn)思路
1、針對(duì)上述現(xiàn)有技術(shù)的不足,本發(fā)明所要解決的技術(shù)問(wèn)題是:如何提供一種流式誤差有界的浮點(diǎn)類型數(shù)據(jù)壓縮方法,通過(guò)設(shè)計(jì)基于量化和基于異或運(yùn)算的流式誤差有界浮點(diǎn)壓縮方法來(lái)實(shí)現(xiàn)誤差有界的流式浮點(diǎn)壓縮,相較于批式壓縮算法與流式無(wú)損壓縮算法,能夠更好地契合物聯(lián)網(wǎng)等流式時(shí)序數(shù)據(jù)的壓縮需求。
2、為了解決上述技術(shù)問(wèn)題,本發(fā)明采用了如下的技術(shù)方案:
3、一種流式誤差有界的浮點(diǎn)類型數(shù)據(jù)壓縮方法,包括:
4、s1:獲取待壓縮的浮點(diǎn)類型的原始時(shí)間序列;
5、s2:根據(jù)設(shè)置的誤差有界類型選取對(duì)應(yīng)的流式誤差有界浮點(diǎn)壓縮方法:若選擇基于量化的流式誤差有界浮點(diǎn)壓縮方法,則執(zhí)行步驟s3;若選擇基于異或運(yùn)算的流式誤差有界浮點(diǎn)壓縮方法,則執(zhí)行步驟s4;
6、s3:將原始時(shí)間序列中的浮點(diǎn)值量化為整數(shù)的量化值,生成量化值序列;對(duì)量化值序列中的量化值進(jìn)行編碼,生成壓縮后的比特流作為壓縮時(shí)間序列;
7、s4:對(duì)原始時(shí)間序列中的浮點(diǎn)值進(jìn)行位移得到位移值,生成位移值序列;將位移值序列中的位移值轉(zhuǎn)換為近似值,得到近似值序列;將近似值序列中的每個(gè)近似值與其前一個(gè)近似值進(jìn)行異或運(yùn)算得到異或值,生成異或值序列;對(duì)異或值序列中的異或值進(jìn)行編碼,生成壓縮后的比特流作為壓縮時(shí)間序列。
8、優(yōu)選的,步驟s2中,誤差有界類型包括絕對(duì)誤差界限和相對(duì)誤差界限;
9、當(dāng)誤差有界類型為絕對(duì)誤差界限時(shí),選擇基于量化或基于異或運(yùn)算的流式誤差有界浮點(diǎn)壓縮方法;
10、當(dāng)誤差有界類型為相對(duì)誤差界限時(shí),選擇基于異或運(yùn)算的流式誤差有界浮點(diǎn)壓縮方法。
11、優(yōu)選的,步驟s3中,將原始時(shí)間序列ts=<v1,v2,...>中的浮點(diǎn)值vi量化為整數(shù)的量化值qi,生成量化值序列<q1,q2,...>;
12、具體步驟如下:
13、s301:對(duì)浮點(diǎn)值vi進(jìn)行預(yù)測(cè),生成預(yù)測(cè)值pi;
14、s302:根據(jù)浮點(diǎn)值vi的預(yù)測(cè)值pi結(jié)合絕對(duì)誤差界限∈a計(jì)算量化值qi;
15、公式表示為:
16、
17、式中:[*]表示將浮點(diǎn)值四舍五入為整數(shù)的運(yùn)算。
18、優(yōu)選的,步驟s3中,通過(guò)zigzag編碼將量化值序列<q1,q2,...>中的量化值qi轉(zhuǎn)換為正整數(shù),再通過(guò)elias?gamma編碼對(duì)zigzag編碼的結(jié)果進(jìn)行編碼得到編碼值codei,生成壓縮后的比特流<code1,code2,...>;
19、公式表示為:
20、codei=elias?gammaen(zigzagen(qi)+1);
21、式中:zigzagen表示zigzag編碼;elias?gammaen表示elias?gamma編碼。
22、優(yōu)選的,步驟s3中,通過(guò)elias?gamma解碼對(duì)比特流<code1,code2,...>中的編碼值進(jìn)行解碼,再使用zigzag解碼對(duì)elias?gamma解碼的結(jié)果進(jìn)行二次解碼得到量化值qi,解碼生成量化值序列<q1,q2,...>;
23、公式表示為:
24、qi=zigzagde(elias?gammade(codei)-1);
25、式中:elias?gammade表示elias?gamma解碼;zigzagde表示zigzag解碼;
26、serf_qt解壓器的反量化器對(duì)量化值序列<q1,q2,...>中的量化值qi進(jìn)行反量化得到恢復(fù)浮點(diǎn)值v′i,生成解壓時(shí)間序列ts′=<v1′,v2′,...>;
27、公式表示為:
28、v′i=2×∈a×qi+pi;
29、式中:∈a表示絕對(duì)誤差界限;pi表示浮點(diǎn)值vi的預(yù)測(cè)值。
30、優(yōu)選的,步驟s4中,為原始時(shí)間序列ts=<v1,v2,...>中的浮點(diǎn)值vi添加整數(shù)偏移量λ得到位移值si=vi+λ,生成位移值序列<s1,s2,...>;
31、其中
32、式中:max、min分別表示原始時(shí)間序列ts=<v1,v2,...>中的最大值和最小值;u為正整數(shù);表示向上取整;表示向下取整。
33、優(yōu)選的,步驟s4中,為位移值序列<s1,s2,...>中位移值si找到近似值ai∈[si-∈,si+∈],使得ai和ai-1共享最多的后綴位,生成近似值序列<a1,a2,...>;
34、其中:∈=∈a或∈=∈r×|vi|;∈a表示絕對(duì)誤差界限;∈r表示相對(duì)誤差界限。
35、優(yōu)選的,步驟s4中,通過(guò)如下步驟為位移值si找到近似值ai:
36、s401:獲取誤差界限∈、前一個(gè)位移值si-1以及si-1對(duì)應(yīng)的近似值ai-1;
37、s402:分別計(jì)算low=si-∈,up=si+∈,
38、s403:構(gòu)建拼接組合其中prebn-j表示從low中選取bn-j個(gè)前綴位,sufj表示從ai-1中選取j個(gè)后綴位,bn表示原始時(shí)間序列的浮點(diǎn)值位數(shù);表示拼接操作;
39、s404:從bn-l開始到0結(jié)束的順序迭代選取j,直至滿足c1或c2∈[si-∈,si+∈];
40、s405:將滿足條件的c1或c2作為位移值si的近似值ai。
41、優(yōu)選的,步驟s4中,將近似值序列<a1,a2,...>中的每個(gè)近似值ai與其前一個(gè)近似值ai-1進(jìn)行異或運(yùn)算得到異或值xori,生成異或值序列<xor1,xor2,...>;
42、采用self*編碼策略結(jié)合自適應(yīng)標(biāo)識(shí)分配的方式對(duì)異或值序列<xor1,xor2,...>中的異或值xori進(jìn)行編碼得到編碼值codei,生成壓縮后的比特流<code1,code2,...>;
43、編碼的處理步驟如下:
44、s411:獲取浮點(diǎn)類型的已有時(shí)間序列的已有異或值序列;
45、s412:統(tǒng)計(jì)已有異或值序列中異或值的前導(dǎo)零計(jì)數(shù)和尾隨零計(jì)數(shù)來(lái)定義前導(dǎo)零和尾隨零的近似規(guī)則rulelead和ruletrail;
46、s413:自適應(yīng)標(biāo)識(shí)調(diào)整:通過(guò)self*編碼策略對(duì)已有異或值序列進(jìn)行編碼,統(tǒng)計(jì)編碼結(jié)果中每種情況出現(xiàn)的頻率;將頻率最高的情況對(duì)應(yīng)的標(biāo)志位設(shè)置為1,將頻率第二和第三高的情況對(duì)應(yīng)的標(biāo)志位分別設(shè)置為00或01;
47、s414:對(duì)于異或值序列<xor1,xor2,...>中的每個(gè)異或值xori,執(zhí)行如下步驟:
48、s4141:確定異或值xori的前導(dǎo)零計(jì)數(shù)、尾隨零計(jì)數(shù)和中心位;
49、s4142:根據(jù)rulelead和ruletrail得到近似的前導(dǎo)零計(jì)數(shù)、尾隨零計(jì)數(shù)和中心位;
50、s4143:計(jì)算和
51、s4144:定義條件c為:leadi≥leadi-1、traili≥traili-1且(leadi-leadi-1)+(traili-traili-1)<1+ln+tn;其中l(wèi)eadi、traili分別是xori近似的前導(dǎo)零計(jì)數(shù)和尾隨零計(jì)數(shù);
52、s4145:判斷是否滿足情況一:xori=0:若是,則codei編碼為情況一對(duì)應(yīng)的標(biāo)志位;否則,執(zhí)行步驟s4126;
53、s4146:判斷是否滿足情況二:xori≠0且條件c成立:若是,則codei編碼為:情況二對(duì)應(yīng)的標(biāo)志位后跟近似的中心位;若否,則判斷滿足情況三,codei編碼為:情況三對(duì)應(yīng)的標(biāo)志位后跟ln位的leadi、tn位的traili以及近似的中心位。
54、優(yōu)選的,步驟s4中,對(duì)壓縮后的比特流<code1,code2,...>中的編碼值進(jìn)行解碼得到異或值xori,解碼生成異或值序列<xor1,xor2,...>;對(duì)異或值序列<xor1,xor2,...>中的異或值xori進(jìn)行異或運(yùn)算得到近似值ai,解碼生成近似值序列<a1,a2,...<;將近似值序列<a1,a2,...>中的每個(gè)近似值ai轉(zhuǎn)換為恢復(fù)浮點(diǎn)值v′i,生成解壓時(shí)間序列ts′=<v1′,v2′,...>。
55、本發(fā)明中流式誤差有界的浮點(diǎn)類型數(shù)據(jù)壓縮方法與現(xiàn)有技術(shù)相比,具有如下有益效果:
56、本發(fā)明可通過(guò)基于量化的流式誤差有界浮點(diǎn)壓縮方法(serf-qt)實(shí)現(xiàn)流式浮點(diǎn)壓縮。首先serf-qt通過(guò)量化過(guò)程,將連續(xù)的浮點(diǎn)數(shù)值映射到整數(shù)集合中,并確保了壓縮過(guò)程中的數(shù)據(jù)失真被嚴(yán)格控制在預(yù)設(shè)的誤差界范圍內(nèi);同時(shí)通過(guò)調(diào)整誤差界,可以在壓縮率和誤差之間找到最佳平衡點(diǎn),確保壓縮后的數(shù)據(jù)在可接受的誤差范圍內(nèi)。其次量化后的整數(shù)序列相比于原始的浮點(diǎn)數(shù)值,在表示上更為緊湊,因?yàn)檎麛?shù)可以直接用二進(jìn)制位表示,且無(wú)需考慮浮點(diǎn)數(shù)的指數(shù)和尾數(shù)部分,這種表示方式顯著減少了數(shù)據(jù)存儲(chǔ)空間的需求,提高了壓縮效率。最后物聯(lián)網(wǎng)等設(shè)備產(chǎn)生的流式時(shí)序數(shù)據(jù)具有連續(xù)性和時(shí)間相關(guān)性強(qiáng)的特點(diǎn),serf-qt能夠有效利用這些特性,通過(guò)合理的量化策略和編碼方法,實(shí)現(xiàn)對(duì)大量流式數(shù)據(jù)的快速壓縮和解壓,減少數(shù)據(jù)傳輸和存儲(chǔ)的成本;同時(shí)由于誤差可控,serf-qt可以在保持?jǐn)?shù)據(jù)質(zhì)量的同時(shí),滿足物聯(lián)網(wǎng)等領(lǐng)域?qū)?shí)時(shí)性和準(zhǔn)確性的要求。
57、本發(fā)明可通過(guò)基于異或運(yùn)算的流式誤差有界浮點(diǎn)壓縮方法(serf-xor)實(shí)現(xiàn)流式浮點(diǎn)壓縮。首先serf-xor將浮點(diǎn)值轉(zhuǎn)換為位移值并進(jìn)一步轉(zhuǎn)換為近似值,雖然在轉(zhuǎn)換過(guò)程中引入了誤差,但通過(guò)設(shè)計(jì)近似邏輯和后續(xù)的異或運(yùn)算,可以使得誤差在連續(xù)的數(shù)據(jù)點(diǎn)間累積受到控制,確保整體誤差在可接受范圍內(nèi),特別是當(dāng)數(shù)據(jù)點(diǎn)間變化較小時(shí),異或運(yùn)算能夠更有效地減少冗余信息,同時(shí)保持?jǐn)?shù)據(jù)間的相對(duì)關(guān)系,控制誤差。其次異或運(yùn)算利用了數(shù)據(jù)間的相關(guān)性,通過(guò)比較相鄰數(shù)據(jù)點(diǎn)的變化來(lái)減少需要存儲(chǔ)的信息量,當(dāng)數(shù)據(jù)點(diǎn)間差異較小時(shí),異或結(jié)果趨向于較小的數(shù)值,這些數(shù)值在編碼時(shí)更加高效,從而提高了壓縮效率。進(jìn)一步的serf-xor結(jié)合了位移、近似和異或等多種技術(shù),能夠在保持?jǐn)?shù)據(jù)特性的同時(shí),更深入地挖掘數(shù)據(jù)間的冗余性;同時(shí)由于異或運(yùn)算和編碼過(guò)程相對(duì)簡(jiǎn)單,整體壓縮和解壓縮過(guò)程高效,適合對(duì)實(shí)時(shí)性要求高的應(yīng)用場(chǎng)景。最后物聯(lián)網(wǎng)等設(shè)備產(chǎn)生的流式時(shí)序數(shù)據(jù)具有高度的時(shí)間相關(guān)性和連續(xù)性,serf-xor能夠充分利用這些特性,通過(guò)比較相鄰數(shù)據(jù)點(diǎn)的變化來(lái)實(shí)現(xiàn)高效壓縮;同時(shí)serf-xor在壓縮過(guò)程中保持了數(shù)據(jù)間的相對(duì)關(guān)系,使得解壓縮后的數(shù)據(jù)能夠較好地恢復(fù)原始數(shù)據(jù)的特性,滿足物聯(lián)網(wǎng)等領(lǐng)域?qū)?shù)據(jù)質(zhì)量和實(shí)時(shí)性的要求。
58、本發(fā)明中,可以根據(jù)用戶需求和誤差有界類型選擇serf-qt或serf-xor來(lái)實(shí)現(xiàn)流式浮點(diǎn)壓縮,從而提高流式浮點(diǎn)壓縮的靈活性。其中serf-qt在誤差界相對(duì)較大時(shí)效果較好,但是它僅支持絕對(duì)誤差界,且當(dāng)誤差界較小時(shí)可能表現(xiàn)不佳;serf-xor同時(shí)支持絕對(duì)誤差界限和相對(duì)誤差界限,并且在誤差界較小時(shí)通常具備比serf-qt更好的壓縮比表現(xiàn)。