一種高效容錯(cuò)的數(shù)據(jù)采集方法
【專(zhuān)利摘要】一種高效容錯(cuò)的數(shù)據(jù)采集方法,方法用流水線的方式處理衛(wèi)星的大規(guī)模數(shù)據(jù)流,而循環(huán)緩沖是作為流水線的“裝配車(chē)間”。循環(huán)緩沖能夠巧妙地將衛(wèi)星數(shù)傳過(guò)程中的誤碼局限在一個(gè)緩沖的長(zhǎng)度之內(nèi),提高魯棒性。并且,該方法采用比特位指示每一個(gè)衛(wèi)星行中的解壓縮行缺失情況,采取索引解壓縮行位置的方法替代實(shí)際拷貝操作,這些改進(jìn)能夠最大限度提高對(duì)衛(wèi)星數(shù)據(jù)進(jìn)行實(shí)時(shí)處理的能力。
【專(zhuān)利說(shuō)明】一種高效容錯(cuò)的數(shù)據(jù)采集方法
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明屬于遙感地面處理領(lǐng)域。
【背景技術(shù)】
[0002]現(xiàn)今,遙感衛(wèi)星所載相機(jī)的分辨率達(dá)到I米量級(jí)已經(jīng)十分普遍,隨著分辨率的提高,衛(wèi)星數(shù)傳系統(tǒng)的壓力也增加明顯。為了在有限的數(shù)傳通道中盡可能傳輸多種載荷數(shù)據(jù),對(duì)載荷數(shù)據(jù)進(jìn)行壓縮是很有必要的。
[0003]光學(xué)相機(jī)的CXD像元多達(dá)數(shù)萬(wàn),星上的數(shù)傳系統(tǒng)把CXD像元按照一定規(guī)則切分成幾路交由數(shù)個(gè)壓縮編碼器同時(shí)進(jìn)行壓縮處理,再傳往地面。在地面上,采集程序需要把幾路的解壓縮數(shù)據(jù)拼接在一起組成完整數(shù)據(jù),地面系統(tǒng)把它稱(chēng)作O級(jí)數(shù)據(jù)。每一路過(guò)來(lái)的解壓縮數(shù)據(jù)幀作為O級(jí)數(shù)據(jù)某一行圖像的某一列,具體處于哪一行由行計(jì)數(shù)決定,處于哪一列由列號(hào)決定。
[0004]因此,采集的輸入是多路解壓縮輸出的解壓縮數(shù)據(jù),解壓縮數(shù)據(jù)的一個(gè)基本單位是一個(gè)解壓縮數(shù)據(jù)行,每一個(gè)解壓縮數(shù)據(jù)行由行號(hào)和列號(hào)共同標(biāo)識(shí)。采集的輸出是排序的衛(wèi)星數(shù)據(jù)行。每一個(gè)衛(wèi)星數(shù)據(jù)行由具有相同行號(hào)的解壓縮數(shù)據(jù)行拼接而成,拼接的順序由列號(hào)決定。
[0005]一個(gè)衛(wèi)星數(shù)據(jù)行的某一列數(shù)據(jù)可能由任一路解壓縮輸出。但是,總的列數(shù)和行數(shù)是相等的。
[0006]在采集的拼接過(guò)程中,行計(jì)數(shù)和列號(hào)是把數(shù)據(jù)對(duì)齊的重要依據(jù):行計(jì)數(shù)相同的解壓縮數(shù)據(jù)幀才能拼接在一起,而列號(hào)決定了拼接的位置。一般情況下,不同路輸出的解壓縮數(shù)據(jù)幀是不同步的,也就是行計(jì)數(shù)不同,但相隔在一個(gè)允許值MaxDiffLine范圍內(nèi)。拼接的過(guò)程是把各路輸出的解壓縮幀按照順序放在一起。例如,L3001V1,L3001V2,L3001V3為第3001 行;L3002V1, L3002V2, L3002V3 為第 3002 行。
[0007]如果某一 O級(jí)數(shù)據(jù)行的列號(hào)都存在,則該行為完整行,否則,該行稱(chēng)為不完整行。正常情況下,采集的輸出應(yīng)該是行號(hào)連續(xù)的完整行,即連續(xù)完整行。
[0008]由于衛(wèi)星數(shù)傳、接收站接收的干擾,接收站與處理中心網(wǎng)絡(luò)通道等原因,行計(jì)數(shù)和列號(hào)兩個(gè)值并不總是正確的,采集程序即使不能糾正誤碼,也要盡可能從錯(cuò)誤狀態(tài)中恢復(fù)到正常,以便順利處理剩余數(shù)據(jù),即具有較強(qiáng)的魯棒性。
[0009]在一次成像過(guò)程中,行計(jì)數(shù)是自然數(shù)排序的,也就是每次嚴(yán)格遞增I。但是,相機(jī)經(jīng)常多次成像,并通過(guò)一次回放在一次采集處理中。這樣,采集拼接過(guò)程中的行計(jì)數(shù)完全可能出現(xiàn)跳躍,既可能往前跳,即較大的行計(jì)數(shù)突變到較小的行計(jì)數(shù);也可能往后跳,即較小的行計(jì)數(shù)突變到較大的行計(jì)數(shù)。多段成像需要在采集過(guò)程中以多段的形式標(biāo)識(shí)出來(lái)。令人困擾的是,行計(jì)數(shù)由于多段成像產(chǎn)生的跳變與誤碼產(chǎn)生的錯(cuò)誤跳變是無(wú)法準(zhǔn)確區(qū)分的。多段成像和誤碼大大提升了數(shù)據(jù)采集的難度。
【發(fā)明內(nèi)容】
[0010]本發(fā)明的技術(shù)解決問(wèn)題是:克服現(xiàn)有技術(shù)的不足,提供一種高效容錯(cuò)的數(shù)據(jù)采集方法,該方法能夠以巧妙的方式處理誤碼,并能夠極快的進(jìn)行高分辨率相機(jī)的大數(shù)據(jù)量處理。
[0011]本發(fā)明的技術(shù)解決方案是:一種高效容錯(cuò)的數(shù)據(jù)采集方法,步驟如下:
[0012](I)建立循環(huán)緩沖區(qū)并初始化為O ;該緩沖區(qū)的結(jié)構(gòu)包括三個(gè)循環(huán)緩沖
[0013]camld[LINEBUFLEN][WAYCOUNT];
[0014]Iine_pin[LINEBUFLEN];
[0015]Iine_ind [LINEBUFLEN];和數(shù)組 last_line_per [WAYCOUNT];以及兩個(gè)變量
[0016]write_line, int finish_line,通過(guò)變量 write_line 和 finish_line 記錄連續(xù)完
[0017]整行的范圍;
[0018]其中,LINEBUFLEN代表緩沖區(qū)的長(zhǎng)度,WAYCOUNT代表解壓縮數(shù)據(jù)的路數(shù);line_pin[]用于指示一個(gè)衛(wèi)星行的完整情況,其中每個(gè)解壓縮數(shù)據(jù)行根據(jù)自身的列號(hào)對(duì)應(yīng)一個(gè)比特;
[0019](2)接收外部輸入的多路解壓縮數(shù)據(jù),對(duì)每路解壓縮數(shù)據(jù)進(jìn)行幀同步處理;
[0020](3)從步驟(2)處理后的任一一路解壓縮數(shù)據(jù)開(kāi)始,讀入解壓縮數(shù)據(jù)行,將該行作為當(dāng)前解壓縮數(shù)據(jù)行;
[0021](4)識(shí)別當(dāng)前解壓縮數(shù)據(jù)行的行號(hào)和列號(hào)AuxSeq,用連續(xù)性對(duì)行號(hào)進(jìn)行驗(yàn)證和糾錯(cuò),得到正確的當(dāng)前解壓縮行的行號(hào)Cur_line ;
[0022](5)根據(jù)cur_line以及緩沖區(qū)的長(zhǎng)度LINEBUFLEN,計(jì)算cur_line在循環(huán)緩沖區(qū)中的下標(biāo)IineIndex ;
[0023](6)判斷l(xiāng)ine_ind[linelndex]是否等于cur_line,若等于,則直接轉(zhuǎn)步驟(7);若不等于,則 line_pin[linelndex] =0,line_ind[linelndex]=cur_line,轉(zhuǎn)步驟(7);
[0024](7)將 line_pin[linelndex]中的第 AuxSeq 列的比特置為 I ;
[0025](8)將當(dāng)前解壓縮數(shù)據(jù)行的位置記錄在camld[linelndex] [AuxSeq]緩沖區(qū)中;
[0026](9)判斷l(xiāng)ine_pin[linelndex]中的比特是否全為I,若全為1,則轉(zhuǎn)步驟(10),否貝U,讀入另一解壓縮數(shù)據(jù)行,將該行作為當(dāng)前解壓縮數(shù)據(jù)行轉(zhuǎn)步驟(4);
[0027](10)判斷write_line+l是否等于cur_line,若等于,則轉(zhuǎn)步驟(11);否則,轉(zhuǎn)步驟(12);
[0028](11)令 write_line=cur_line,判斷 write_line_finish_line 是否大于預(yù)設(shè)的閾值,若大于,則從camld [i] [j]緩沖區(qū)中取出對(duì)應(yīng)的數(shù)據(jù)輸出,其中,i為finish_line到write_line之間的所有行的下標(biāo),j取值I一WAYCOUNT ;否則讀入另一解壓縮數(shù)據(jù)行,將該行作為當(dāng)前解壓縮數(shù)據(jù)行轉(zhuǎn)步驟(4);
[0029](12)從camld[i][j]緩沖區(qū)中取出對(duì)應(yīng)的數(shù)據(jù)輸出,其中,i為finish_line到write_line 之間的所有行的下標(biāo),j 取值 I一WAYCOUNT,令 write_line=cur_line, finish_line=Cur_line;讀入另一解壓縮數(shù)據(jù)行,將該行作為當(dāng)前解壓縮數(shù)據(jù)行轉(zhuǎn)步驟(4)。
[0030]本發(fā)明與現(xiàn)有技術(shù)相比有益效果為:
[0031]本發(fā)明摒棄了有序鏈表的排序方式,采用二進(jìn)制掩碼的方式對(duì)列號(hào)進(jìn)行拼接;采用連續(xù)區(qū)間標(biāo)志行計(jì)數(shù)嚴(yán)格增一的范圍;把列號(hào)掩碼,行計(jì)數(shù)和解壓縮數(shù)據(jù)行的索引放入三個(gè)循環(huán)緩沖。[0032]把解壓縮數(shù)據(jù)行的索引而不是解壓縮數(shù)據(jù)行本身放入循環(huán)緩沖減少了數(shù)據(jù)拷貝,能夠提高性能。采用掩碼的方式拼接列號(hào)能夠快速判斷拼接的O級(jí)數(shù)據(jù)行是否完整。最后,采用遞增區(qū)間而不是鏈表排序的方式能夠減少搜索和排序操作。
[0033]重要的是,循環(huán)緩沖巧妙地解決了誤碼對(duì)采集后續(xù)數(shù)據(jù)的影響。因?yàn)榧词剐杏?jì)數(shù)和列號(hào)錯(cuò)誤導(dǎo)致循環(huán)緩沖被寫(xiě)壞,相隔大約緩沖長(zhǎng)度的行之后,后續(xù)正確的行計(jì)數(shù)和列號(hào)將覆蓋錯(cuò)誤值,從而恢復(fù)正確處理,提高魯棒性。并且,該方法采用比特位指示每一個(gè)衛(wèi)星行中的解壓縮行缺失情況,采取索引解壓縮行位置的方法替代實(shí)際拷貝操作,這些改進(jìn)能夠最大限度提高對(duì)衛(wèi)星數(shù)據(jù)進(jìn)行實(shí)時(shí)處理的能力
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0034]圖1為本發(fā)明采集程序?qū)Ω髀份敵龅媒鈮嚎s數(shù)據(jù)進(jìn)行拼接的流程;
[0035]圖2為本發(fā)明拼接過(guò)程中使用的循環(huán)緩沖區(qū)的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0036]高分辨率遙感衛(wèi)星的數(shù)據(jù)率非常高,當(dāng)空間分辨率達(dá)到米級(jí)時(shí),每秒的數(shù)據(jù)量S主要由圖像數(shù)據(jù)決定,計(jì)算公式是:
【權(quán)利要求】
1.一種高效容錯(cuò)的數(shù)據(jù)采集方法,其特征在于步驟如下: (1)建立循環(huán)緩沖區(qū)并初始化為O;該緩沖區(qū)的結(jié)構(gòu)包括三個(gè)循環(huán)緩沖
camId[LINEBUFLEN][WAYCOUNT];
line_pin[LINEBUFLEN]; line_ind[LINEBUFLEN];和數(shù)組 last_line_per [WAYCOUNT];以及兩個(gè)變量 write_line, int finish_line,通過(guò)變量 write_line 和 finish_line 記錄連續(xù)完 整行的范圍; 其中,LINEBUFLEN代表緩沖區(qū)的長(zhǎng)度,WAYCOUNT代表解壓縮數(shù)據(jù)的路數(shù);Iine_pin[]用于指示一個(gè)衛(wèi)星行的完整情況,其中每個(gè)解壓縮數(shù)據(jù)行根據(jù)自身的列號(hào)對(duì)應(yīng)一個(gè)比特; (2)接收外部輸入的多路解壓縮數(shù)據(jù),對(duì)每路解壓縮數(shù)據(jù)進(jìn)行幀同步處理; (3)從步驟(2)處理后的任一一路解壓縮數(shù)據(jù)開(kāi)始,讀入解壓縮數(shù)據(jù)行,將該行作為當(dāng)前解壓縮數(shù)據(jù)行; (4)識(shí)別當(dāng)前解壓縮數(shù)據(jù)行的行號(hào)和列號(hào)AuxSeq,用連續(xù)性對(duì)行號(hào)進(jìn)行驗(yàn)證和糾錯(cuò),得到正確的當(dāng)前解壓縮行的行號(hào)cur_line ; (5)根據(jù)cur_line以及緩沖區(qū)的長(zhǎng)度LINEBUFLEN,計(jì)算cur_line在循環(huán)緩沖區(qū)中的下標(biāo) IineIn dex ; (6)判斷l(xiāng)ine_ind[linelndex]是否等于cur_line,若等于,則直接轉(zhuǎn)步驟(7);若不等于,則 line_pin[linelndex] =0,line_ind[linelndex]=cur_line,轉(zhuǎn)步驟(7); (7)將line_pin[linelndex]中的第AuxSeq列的比特置為I; (8)將當(dāng)前解壓縮數(shù)據(jù)行的位置記錄在camld[linelndex][AuxSeq]緩沖區(qū)中; (9)判斷l(xiāng)ine_pin[linelndex]中的比特是否全為I,若全為1,則轉(zhuǎn)步驟(10),否則,讀入另一解壓縮數(shù)據(jù)行,將該行作為當(dāng)前解壓縮數(shù)據(jù)行轉(zhuǎn)步驟(4); (10)判斷write_line+l是否等于cur_line,若等于,則轉(zhuǎn)步驟(11);否則,轉(zhuǎn)步驟(12); (11)令write_line=cur_line,判斷 write_line-f inish_line 是否大于預(yù)設(shè)的閾值,若大于,則從camld[i] [j]緩沖區(qū)中取出對(duì)應(yīng)的數(shù)據(jù)輸出,其中,i為finish_line到write_line之間的所有行的下標(biāo),j取值I一WAYCOUNT ;否則讀入另一解壓縮數(shù)據(jù)行,將該行作為當(dāng)前解壓縮數(shù)據(jù)行轉(zhuǎn)步驟(4); (12)從camld[i][j]緩沖區(qū)中取出對(duì)應(yīng)的數(shù)據(jù)輸出,其中,i為finish_line到write_line 之間的所有行的下標(biāo),j 取值 I一WAYCOUNT,令 write_line=cur_line, finish_line=Cur_line;讀入另一解壓縮數(shù)據(jù)行,將該行作為當(dāng)前解壓縮數(shù)據(jù)行轉(zhuǎn)步驟(4)。
【文檔編號(hào)】H04L1/00GK103873199SQ201410106229
【公開(kāi)日】2014年6月18日 申請(qǐng)日期:2014年3月20日 優(yōu)先權(quán)日:2014年3月20日
【發(fā)明者】李運(yùn)偉, 喻文勇, 王小燕 申請(qǐng)人:中國(guó)資源衛(wèi)星應(yīng)用中心