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