<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 產(chǎn)品設計原理:在小尺寸DSP上實(shí) 2D條形碼解碼

產(chǎn)品設計原理:在小尺寸DSP上實(shí) 2D條形碼解碼

作者: 時(shí)間:2011-11-09 來(lái)源:網(wǎng)絡(luò ) 收藏

條形碼一般被用于將關(guān)鍵的字母數字信息轉換為數字系統能夠掃描和讀取的符號信息,而無(wú)需每次都要將信息錄入數字系統。

本文引用地址:http://dyxdggzs.com/article/257815.htm
1D(一維)條形碼只能對數字數據進(jìn)行編碼,在過(guò)去二十年中主要用于產(chǎn)品運輸和追蹤、系統安全、超市等場(chǎng)合。使用 2D(二維)條形碼,數據在水平和垂直方向被編碼為 2D 符號,如下圖 1 所示。
2D 符號所能包含的數據量遠大于 1D 符號。2D 條形碼解決方案可比傳統 1D 條形碼提供更大的信息密度,特別是對于那些需要對精密信息而不是簡(jiǎn)單的碼信息進(jìn)行編碼的應用。
2D 條形碼技術(shù)的一些應用包括產(chǎn)品標簽、產(chǎn)品信息追蹤和檢驗、移動(dòng)安全、出入境檢查服務(wù)、醫療保健和電子商務(wù)等。
圖 1:2D 條形碼示例
如今存在很多 2D 條形碼算法,這催生出采用不同條形碼技術(shù)的一系列應用。一般來(lái)說(shuō),有兩種類(lèi)型的 2D 條形碼:1) 堆疊式 2D 條形碼,例如 PDF417 和 Code 49,2) 矩陣式條形碼,例如 QR 碼和數據矩陣。在這篇文章中,我們僅限于討論數據矩陣式條形碼技術(shù)[2]。
2D 數據矩陣式條形碼技術(shù)
2D 數據矩陣式條形碼包括在正方形或長(cháng)方形中排列的黑色和白色模塊,如圖 1 所示。編碼數據位映射到黑色和白色模塊(或單元)組成的區域,稱(chēng)為數據區域。關(guān)于 2D 數據矩陣式條形碼所支持的不同類(lèi)型的編碼方案的詳細信息,請參見(jiàn)參考文獻[2]。
數據區域由定位圖形包圍(定位圖形的底部和左側只包含黑色模塊,而定位圖形的上部和右側由交替的白色和黑色模塊組成)。數據矩陣 2D 條形碼支持由排位圖形分隔的多個(gè)數據區域,從而能容納更多數據信息。
有兩種版本的數據矩陣,一種是基于循環(huán)冗余校驗(CRC)和卷積糾錯,另一種是基于里德所羅門(mén)(RS)糾錯。對于掃描、讀取和提取數據位,基于 CRC 與基于 RS 的數據矩陣解碼沒(méi)有區別。提取數據位之后,基于 CRC 的解碼與基于 RS 的解碼路徑不同,因為它們的交織和糾錯方法不同。
圖 2:2D 條形碼掃描器框圖和 DSP 處理內核
這里我們考慮在小尺寸 處理器上對新興的基于 RS 碼的 2D 數據矩陣式條形碼進(jìn)行解碼。通過(guò) PPI-DMA 通道連接到 DSP 處理器的 2D 條形碼掃描器的框圖如上面圖 2 所示。
在小尺寸 DSP 上實(shí)現條形碼
傳感器對條形碼進(jìn)行掃描并將像素數據通過(guò)并行端口接口(PPI)傳輸給 DSP。之后,DSP 處理器處理圖像像素并提取數據區域中黑色和白色模塊對應的數據位,然后進(jìn)行糾錯。從掃描的 2D 條形碼的特定數據區域提取數據位的過(guò)程如下面圖 3 所示的流程圖。
圖 3:從 2D 數據矩陣符號提取數據位的流程圖
我們將 2D 數據矩陣式條形碼看做大小為 M x N 的圖像(通常是 QVGA 或 VGA 圖像)并進(jìn)行處理。相機的 CMOS 傳感器捕獲圖像并將圖像像素傳輸給 DSP 進(jìn)行處理。

現在的問(wèn)題是,需要多大的存儲器來(lái)保存處理過(guò)程中的圖像?例如,以 VGA(即 640x480)為例,我們需要大約 300 kB 的數據存儲器來(lái)保存捕獲到的圖像。處理器內核的尺寸取決于其包含的存儲器的數量。

特別是 L1 高速存儲器,它占用更多的硅面積,總成本也更高。因此,大多數處理器包含非常有限的 L1 存儲器。
另一方面,L2 或 L3 存儲器通常有較大的容量,占用較小的面積,成本也較低。然而,它們速度較慢,需要通過(guò) DMA 與處理器的工作存儲器(L1)進(jìn)行數據傳輸。
接下來(lái)我們將討論用 系列的兩款不同處理器實(shí)現數據矩陣 2D 條形碼在,其中一款具有 16 kB 的 L1 和較大 L2/L3 存儲器,另一款只有 16 kB 的 L1 存儲器。
對于帶有 L2 和 L3 存儲器的處理器,捕獲的圖像通過(guò) DMA 和 PPI 接口傳輸到 L2 存儲器。然后通過(guò)將少量圖像像素同時(shí)從 L2 移動(dòng)到 L1 存儲器,來(lái)對 2D 條形碼中提取的數據位進(jìn)行處理。在這種情況下,我們使用另一個(gè) DMA 進(jìn)行 L1 和 L2 之間的數據傳輸,整體解碼很簡(jiǎn)單也不復雜。
在另一方面,如果僅有少量的 L1 存儲器,并且沒(méi)有 L2/L3 存儲器,那么問(wèn)題就相當棘手。在這種情況下,我們對同樣的條形碼要進(jìn)行更多的掃描,并將目標區域(ROI)通過(guò)適當設置的 PPI-DMA 通道傳輸到 L1 存儲器進(jìn)行處理。
雖然這個(gè)系統設置起來(lái)很復雜,但其成本和尺寸與前一個(gè)例子相比要小。接下來(lái),我們將討論使用上面提到的兩個(gè)處理器實(shí)例對 2D 數據矩陣式條形碼進(jìn)行解碼的技術(shù)。
用 L2 存儲器實(shí)施
在這種情況下,經(jīng)掃描的所有圖像通過(guò) PPI-DMA 通道被讀入 L2 存儲器,采用另一個(gè)存儲器 DMA 通過(guò)訪(fǎng)問(wèn) L2 中的部分圖像對其進(jìn)行處理。如下圖 4(a)所示。
圖 4:用小尺寸 處理器進(jìn)行 2D 條形碼解碼,
(a)具有 L2/L3 和 L1 存儲器,(b)僅有 L1 存儲器。
采用 OmniVision CMOS VGA 傳感器[3],我們逐行獲得像素數據和控制信號、HREF(水平基準輸出)、VSYNC(垂直同步輸出)和 PCLK(像素時(shí)鐘輸出)。PPI-DMA 通道以 27 MHz 時(shí)鐘速率將像素讀入 L2 存儲器。在這種情況下,DMA 設置很簡(jiǎn)單,因為我們在單次掃描中讀取整個(gè)圖像。
我們基本上遵循上面圖 3 所示的流程圖來(lái)從數據矩陣式條形碼模塊中提取數據位。如果在掃描的圖像中存在任何方向,我們能夠糾正方向和偏差,因為我們在 L2 存儲器中有全部圖像。
現在,我們假設圖像被正確掃描,沒(méi)有任何方向和偏差。首先,我們將數據矩陣式條形碼定位圖形的頂部幾行和右邊幾列從 L2 移入 L1 存儲器。在測量定位圖形中模塊的平均高度和寬度后,我們?yōu)槎ㄎ粓D形所有頂部和右邊模塊的中點(diǎn)做標記,將中點(diǎn)像素位置的 x 和 y 坐標值存入存儲器,留作以后使用。無(wú) L2 或 L3 存儲器無(wú) L2/L3 存儲器時(shí),我們直接將圖像讀入 L1 存儲器。由于 L1 存儲器空間有限,我們一次
直接讀取整個(gè)圖像到 L1 存儲器中。如上圖 4(b)所示。
在這種情況下,進(jìn)行條形碼解碼時(shí)我們要多次掃描圖像。使用 PPI 延遲和 PPI 計數寄存器,定位圖形模塊像素的頂部幾行和右邊幾列在一次掃描中被讀入 L1 存儲器。在這種情況下需要更多地 DMA 編程,因為我們需要從掃描器輸出將所選的圖像像素通過(guò)PPI-DMA 通道讀入 L1 存儲器。我們找到定位圖形模塊的大小及其中點(diǎn)位置坐標,并將其存儲起來(lái)為將來(lái)使用。
在圖像有細微方向或偏離時(shí),我們讀取多行像素來(lái)糾正方向或偏差。這里,我們逐行進(jìn)行圖像處理,因為我們沒(méi)有完整的圖像。從數據矩陣式條形碼中提取數據位我們遵循下半部分流程圖(如之前圖 3 所示),從數據矩陣式條形碼黑色和白色模塊中提取位信息。
這里,我們假設數據矩陣包含有黑色和白色模塊組成的單一數據區域。我們知道,有了定位圖形模塊的中點(diǎn)位置坐標,我們能很容易地獲得所有模塊中心點(diǎn)作為相交叉的水平線(xiàn)(與左側定位圖形垂直)。
它也通過(guò)定位圖形右側模塊的中點(diǎn)位置和垂直線(xiàn)(與定位圖形下邊垂直并通過(guò)定位圖形的上邊模塊的中點(diǎn)位置)。我們不能畫(huà)出所有這些線(xiàn)來(lái)標識交叉點(diǎn),因為我們在 L1 存儲器中沒(méi)有完整的圖像。
然而,我們可以通過(guò)一次掃描一行的方式來(lái)獲得交叉點(diǎn)(使用定位圖形右側模塊中點(diǎn)的 y坐標作為行索引),將當前行列索引與定位圖形上邊模塊中點(diǎn) x 坐標進(jìn)行比較。
如果兩者相同,那么就是交叉點(diǎn),否則我們繼續掃描這一行。采用這一過(guò)程,我們掃描模塊的交叉點(diǎn),并找到該位置像素的值。
如果像素值大于 128(即淺色),我們將該位解碼為 0,或者如果像素值小于 128,我們將該位解碼為 1。采用同樣的方式,我們能提取數據矩陣式條形碼數據區域的所有位。
對于具有 L2 存儲器的處理器,我們將與定位圖形右側模塊中點(diǎn) y 坐標對應的像素行從 L2移入 L1 存儲器。當我們正在處理當前像素行時(shí),使用 DMA 來(lái)移動(dòng)下一像素行。但是,在使用無(wú) L2 存儲器的處理器時(shí),我們必須進(jìn)行實(shí)時(shí)數據提取。此時(shí),PPI-DMA 將下一行數據填入 L1 存儲器,我們必須完成對當前行的處理(進(jìn)行基本的數據位提?。?。
2D 解交織
據矩陣式條形碼使用 2D 交織的數據位。從數據區域模塊中提取數據位后,我們執行解交織來(lái)獲得糾錯碼字的數據位。關(guān)于 2D 數據位交織的詳細信息,請參見(jiàn)參考文獻[2]。
我們用預計算查找表來(lái)進(jìn)行解交織。由于數據矩陣式條形碼支持不同尺寸的數據區域,因此解交錯查找表的大小和表單元也不同。不可能在小尺寸處理器中保存所有尺寸的查找表。然而,如果在預先給定的應用中數據矩陣大小是已知的,我們只需要存儲特定解交織查找表。解交織后,數據位按字節格式形成碼字,輸入 RS 解碼器。
條形碼糾錯
新興的 ECC-200 型數據矩陣式條形碼使用 RS (N, K)碼來(lái)糾正解交織位的錯誤和遺漏。RS (N, K)碼可以糾正最多(N-K)/2 個(gè)錯誤或者最多(N-K)個(gè)遺漏(如果不存在錯誤)。在這個(gè)應用中使用的 Galois 域是 GF(28)。對于不同數據區域大小,數據矩陣式條形碼使用不同的 RS 碼字長(cháng)度。例如,14x14 大小的數據區域條形碼使用 RS(24, 12)碼來(lái)糾錯,16x16 大小的數據區域條形碼使用 RS(32, 18)碼。RS 解碼器的復雜度取決于數據區域的大小。隨著(zhù) RS 碼字長(cháng)度的增加,存儲器需要存儲的所有 RS 解碼工作緩沖區也要增加。
為了高效地實(shí)施 RS 解碼器,我們使用查找表來(lái)進(jìn)行 Galois 域計算。對所有 RS 碼字長(cháng)度進(jìn)行解碼時(shí)使用相同的 Galois 域對數和反對數查找表,因此域單元也屬于 GF(28)。我們需要大約 2 kB 的 L1 存儲器來(lái)存儲對數和反對數查找表。
數據矩陣式條形碼解碼復雜度

2D 條形碼解碼有兩個(gè)部分:1) 圖像處理,2)條形碼解碼。如果捕捉的圖像與解碼區域沒(méi)有適當對齊,我們可能需要進(jìn)行圖像旋轉、偏差糾正等,來(lái)使圖像與解碼區域對齊。
在這種情況下,圖像處理階段的復雜度比實(shí)際條形碼解碼要大。在這篇文章中,我們假設圖像與解碼區域是對齊的。數據矩陣式條形碼的解碼復雜度(在周期和存儲器方面)取決于數據符號的大小。如果數據符號尺寸較大,每個(gè)符號中包含多個(gè)較大的數據區域,那么我們需要更多的存儲器來(lái)保存圖像的行像素和 RS 工作緩沖。每單位時(shí)間需要處理的數據量也隨著(zhù)數據區域的尺寸而增加。以每個(gè)數據矩陣式條形碼符號具有 16x16 數據區域的 VGA 圖像為例,我們需要大約 6kB數據存儲器和 4kB 的 Blackfin 程序存儲器。BF53x 內核上運行單個(gè)模塊的近似周期數如下:
模塊尺寸和數量:7,200
數據位提取: 2,000 個(gè)周期
解交織和封包:600
RS 解碼:7,000 個(gè)周期
本文小結
本文討論了在小尺寸 Blackfin 處理器上進(jìn)行數據矩陣 2D 條形碼解碼。同時(shí)解釋了使用或不使用高延遲 L2 存儲器對 2D 條形碼進(jìn)行解碼的不同方法。分析了基于 RS 的數據矩陣 的復雜度,并估算了使用 BF53x 處理器對 VGA 圖像中單個(gè) 16x16 數據符號進(jìn)行解碼所需的存儲器和周期數.


關(guān)鍵詞: Blackfin 2D條形碼解碼

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>