《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 解決方案 > 產(chǎn)品設(shè)計(jì)原理:在小尺寸DSP上實(shí) 2D條形碼解碼

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

2011-08-03
作者:Hazarathaiah Malepati,Yosi Stein
關(guān)鍵詞: DSP Blackfin 2D條形碼解碼

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

1D(一維)條形碼只能對(duì)數(shù)字?jǐn)?shù)據(jù)進(jìn)行編碼,,在過(guò)去二十年中主要用于產(chǎn)品運(yùn)輸和追蹤,、系統(tǒng)安全、超市等場(chǎng)合,。使用 2D(二維)條形碼,數(shù)據(jù)在水平和垂直方向被編碼為 2D 符號(hào),如下圖 1 所示,。
 
2D 符號(hào)所能包含的數(shù)據(jù)量遠(yuǎn)大于 1D 符號(hào)。2D 條形碼解決方案可比傳統(tǒng) 1D 條形碼提供更大的信息密度,,特別是對(duì)于那些需要對(duì)精密信息而不是簡(jiǎn)單的碼信息進(jìn)行編碼的應(yīng)用,。
 
2D 條形碼技術(shù)的一些應(yīng)用包括產(chǎn)品標(biāo)簽、產(chǎn)品信息追蹤和檢驗(yàn),、移動(dòng)安全,、出入境檢查服務(wù)、醫(yī)療保健和電子商務(wù)等,。
圖 1:2D 條形碼示例
 
如今存在很多 2D 條形碼算法,,這催生出采用不同條形碼技術(shù)的一系列應(yīng)用,。一般來(lái)說(shuō),有兩種類型的 2D 條形碼:1)  堆疊式 2D 條形碼,,例如 PDF417  和 Code 49,,2)  矩陣式條形碼,例如 QR 碼和數(shù)據(jù)矩陣,。在這篇文章中,,我們僅限于討論數(shù)據(jù)矩陣式條形碼技術(shù)[2]。
 
2D 數(shù)據(jù)矩陣式條形碼技術(shù)
 
2D 數(shù)據(jù)矩陣式條形碼包括在正方形或長(zhǎng)方形中排列的黑色和白色模塊,,如圖 1 所示,。編碼數(shù)據(jù)位映射到黑色和白色模塊(或單元)組成的區(qū)域,稱為數(shù)據(jù)區(qū)域,。關(guān)于 2D 數(shù)據(jù)矩陣式條形碼所支持的不同類型的編碼方案的詳細(xì)信息,,請(qǐng)參見(jiàn)參考文獻(xiàn)[2]。
 
數(shù)據(jù)區(qū)域由定位圖形包圍(定位圖形的底部和左側(cè)只包含黑色模塊,,而定位圖形的上部和右側(cè)由交替的白色和黑色模塊組成),。數(shù)據(jù)矩陣 2D 條形碼支持由排位圖形分隔的多個(gè)數(shù)據(jù)區(qū)域,從而能容納更多數(shù)據(jù)信息,。
 
有兩種版本的數(shù)據(jù)矩陣,,一種是基于循環(huán)冗余校驗(yàn)(CRC)和卷積糾錯(cuò),另一種是基于里德所羅門(mén)(RS)糾錯(cuò),。對(duì)于掃描,、讀取和提取數(shù)據(jù)位,基于 CRC 與基于 RS 的數(shù)據(jù)矩陣解碼沒(méi)有區(qū)別,。提取數(shù)據(jù)位之后,,基于 CRC 的解碼與基于 RS 的解碼路徑不同,因?yàn)樗鼈兊慕豢椇图m錯(cuò)方法不同,。
圖 2:2D 條形碼掃描器框圖和 DSP 處理內(nèi)核
 
這里我們考慮在小尺寸 Blackfin 處理器上對(duì)新興的基于 RS 碼的 2D 數(shù)據(jù)矩陣式條形碼進(jìn)行解碼,。通過(guò) PPI-DMA 通道連接到 DSP 處理器的 2D 條形碼掃描器的框圖如上面圖 2 所示。
 
在小尺寸 DSP 上實(shí)現(xiàn)條形碼
 
傳感器對(duì)條形碼進(jìn)行掃描并將像素?cái)?shù)據(jù)通過(guò)并行端口接口(PPI)傳輸給 DSP,。之后,,DSP 處理器處理圖像像素并提取數(shù)據(jù)區(qū)域中黑色和白色模塊對(duì)應(yīng)的數(shù)據(jù)位,然后進(jìn)行糾錯(cuò),。從掃描的 2D 條形碼的特定數(shù)據(jù)區(qū)域提取數(shù)據(jù)位的過(guò)程如下面圖 3 所示的流程圖,。
圖 3:從 2D 數(shù)據(jù)矩陣符號(hào)提取數(shù)據(jù)位的流程圖
 
我們將 2D 數(shù)據(jù)矩陣式條形碼看做大小為 M x N 的圖像(通常是 QVGA 或 VGA 圖像)并進(jìn)行處理。相機(jī)的 CMOS 傳感器捕獲圖像并將圖像像素傳輸給 DSP 進(jìn)行處理,。
 
現(xiàn)在的問(wèn)題是,,需要多大的存儲(chǔ)器來(lái)保存處理過(guò)程中的圖像?例如,,以 VGA(即 640x480)為例,,我們需要大約 300 kB 的數(shù)據(jù)存儲(chǔ)器來(lái)保存捕獲到的圖像,。處理器內(nèi)核的尺寸取決于其包含的存儲(chǔ)器的數(shù)量。
 
特別是 L1 高速存儲(chǔ)器,,它占用更多的硅面積,,總成本也更高。因此,,大多數(shù)處理器包含非常有限的 L1 存儲(chǔ)器。
 
 
另一方面,,L2 或 L3 存儲(chǔ)器通常有較大的容量,,占用較小的面積,成本也較低,。然而,,它們速度較慢,需要通過(guò) DMA 與處理器的工作存儲(chǔ)器(L1)進(jìn)行數(shù)據(jù)傳輸,。
 
接下來(lái)我們將討論用 Blackfin 系列的兩款不同處理器實(shí)現(xiàn)數(shù)據(jù)矩陣 2D 條形碼在,,其中一款具有 16 kB 的 L1 和較大 L2/L3 存儲(chǔ)器,另一款只有 16 kB 的 L1 存儲(chǔ)器,。
 
對(duì)于帶有 L2 和 L3 存儲(chǔ)器的處理器,,捕獲的圖像通過(guò) DMA 和 PPI 接口傳輸?shù)?L2 存儲(chǔ)器。然后通過(guò)將少量圖像像素同時(shí)從 L2 移動(dòng)到 L1 存儲(chǔ)器,,來(lái)對(duì) 2D 條形碼中提取的數(shù)據(jù)位進(jìn)行處理,。在這種情況下,我們使用另一個(gè) DMA 進(jìn)行 L1 和 L2 之間的數(shù)據(jù)傳輸,,整體解碼很簡(jiǎn)單也不復(fù)雜,。
 
在另一方面,如果僅有少量的 L1 存儲(chǔ)器,,并且沒(méi)有 L2/L3 存儲(chǔ)器,,那么問(wèn)題就相當(dāng)棘手。在這種情況下,,我們對(duì)同樣的條形碼要進(jìn)行更多的掃描,,并將目標(biāo)區(qū)域(ROI)通過(guò)適當(dāng)設(shè)置的 PPI-DMA 通道傳輸?shù)?L1 存儲(chǔ)器進(jìn)行處理。
 
雖然這個(gè)系統(tǒng)設(shè)置起來(lái)很復(fù)雜,,但其成本和尺寸與前一個(gè)例子相比要小,。接下來(lái),我們將討論使用上面提到的兩個(gè)處理器實(shí)例對(duì) 2D 數(shù)據(jù)矩陣式條形碼進(jìn)行解碼的技術(shù),。
 
用 L2 存儲(chǔ)器實(shí)施
在這種情況下,,經(jīng)掃描的所有圖像通過(guò) PPI-DMA 通道被讀入 L2 存儲(chǔ)器,采用另一個(gè)存儲(chǔ)器 DMA 通過(guò)訪問(wèn) L2 中的部分圖像對(duì)其進(jìn)行處理,。如下圖 4(a)所示,。
 
圖 4:用小尺寸 Blackfin 處理器進(jìn)行 2D 條形碼解碼,,
(a)具有 L2/L3 和 L1 存儲(chǔ)器,(b)僅有 L1 存儲(chǔ)器,。
 
采用 OmniVision CMOS VGA 傳感器[3],,我們逐行獲得像素?cái)?shù)據(jù)和控制信號(hào)、HREF(水平基準(zhǔn)輸出),、VSYNC(垂直同步輸出)和 PCLK(像素時(shí)鐘輸出),。PPI-DMA 通道以 27 MHz 時(shí)鐘速率將像素讀入 L2 存儲(chǔ)器。在這種情況下,,DMA 設(shè)置很簡(jiǎn)單,,因?yàn)槲覀冊(cè)趩未螔呙柚凶x取整個(gè)圖像。
 
我們基本上遵循上面圖 3 所示的流程圖來(lái)從數(shù)據(jù)矩陣式條形碼模塊中提取數(shù)據(jù)位,。如果在掃描的圖像中存在任何方向,,我們能夠糾正方向和偏差,因?yàn)槲覀冊(cè)?L2 存儲(chǔ)器中有全部圖像,。
 
現(xiàn)在,,我們假設(shè)圖像被正確掃描,沒(méi)有任何方向和偏差,。首先,,我們將數(shù)據(jù)矩陣式條形碼定位圖形的頂部幾行和右邊幾列從 L2 移入 L1 存儲(chǔ)器。在測(cè)量定位圖形中模塊的平均高度和寬度后,,我們?yōu)槎ㄎ粓D形所有頂部和右邊模塊的中點(diǎn)做標(biāo)記,,將中點(diǎn)像素位置的 x 和 y 坐標(biāo)值存入存儲(chǔ)器,留作以后使用,。無(wú) L2 或 L3 存儲(chǔ)器無(wú) L2/L3 存儲(chǔ)器時(shí),,我們直接將圖像讀入 L1 存儲(chǔ)器。由于 L1 存儲(chǔ)器空間有限,,我們一次
直接讀取整個(gè)圖像到 L1 存儲(chǔ)器中,。如上圖 4(b)所示。
 
在這種情況下,,進(jìn)行條形碼解碼時(shí)我們要多次掃描圖像,。使用 PPI 延遲和 PPI 計(jì)數(shù)寄存器,定位圖形模塊像素的頂部幾行和右邊幾列在一次掃描中被讀入 L1 存儲(chǔ)器,。在這種情況下需要更多地 DMA 編程,,因?yàn)槲覀冃枰獜膾呙杵鬏敵鰧⑺x的圖像像素通過(guò)PPI-DMA 通道讀入 L1 存儲(chǔ)器。我們找到定位圖形模塊的大小及其中點(diǎn)位置坐標(biāo),,并將其存儲(chǔ)起來(lái)為將來(lái)使用,。
 
在圖像有細(xì)微方向或偏離時(shí),我們讀取多行像素來(lái)糾正方向或偏差,。這里,,我們逐行進(jìn)行圖像處理,,因?yàn)槲覀儧](méi)有完整的圖像。從數(shù)據(jù)矩陣式條形碼中提取數(shù)據(jù)位我們遵循下半部分流程圖(如之前圖 3 所示),,從數(shù)據(jù)矩陣式條形碼黑色和白色模塊中提取位信息,。
 
這里,我們假設(shè)數(shù)據(jù)矩陣包含有黑色和白色模塊組成的單一數(shù)據(jù)區(qū)域,。我們知道,,有了定位圖形模塊的中點(diǎn)位置坐標(biāo),我們能很容易地獲得所有模塊中心點(diǎn)作為相交叉的水平線(與左側(cè)定位圖形垂直),。
 
它也通過(guò)定位圖形右側(cè)模塊的中點(diǎn)位置和垂直線(與定位圖形下邊垂直并通過(guò)定位圖形的上邊模塊的中點(diǎn)位置),。我們不能畫(huà)出所有這些線來(lái)標(biāo)識(shí)交叉點(diǎn),因?yàn)槲覀冊(cè)?L1 存儲(chǔ)器中沒(méi)有完整的圖像,。
 
然而,我們可以通過(guò)一次掃描一行的方式來(lái)獲得交叉點(diǎn)(使用定位圖形右側(cè)模塊中點(diǎn)的 y坐標(biāo)作為行索引),,將當(dāng)前行列索引與定位圖形上邊模塊中點(diǎn) x 坐標(biāo)進(jìn)行比較,。
 
如果兩者相同,那么就是交叉點(diǎn),,否則我們繼續(xù)掃描這一行,。采用這一過(guò)程,我們掃描模塊的交叉點(diǎn),,并找到該位置像素的值,。
 
如果像素值大于 128(即淺色),我們將該位解碼為 0,,或者如果像素值小于 128,,我們將該位解碼為 1。采用同樣的方式,,我們能提取數(shù)據(jù)矩陣式條形碼數(shù)據(jù)區(qū)域的所有位,。
 
對(duì)于具有 L2 存儲(chǔ)器的處理器,我們將與定位圖形右側(cè)模塊中點(diǎn) y 坐標(biāo)對(duì)應(yīng)的像素行從 L2移入 L1 存儲(chǔ)器,。當(dāng)我們正在處理當(dāng)前像素行時(shí),,使用 DMA 來(lái)移動(dòng)下一像素行。但是,,在使用無(wú) L2 存儲(chǔ)器的處理器時(shí),,我們必須進(jìn)行實(shí)時(shí)數(shù)據(jù)提取。此時(shí),,PPI-DMA 將下一行數(shù)據(jù)填入 L1 存儲(chǔ)器,,我們必須完成對(duì)當(dāng)前行的處理(進(jìn)行基本的數(shù)據(jù)位提取),。
 
2D 解交織
 
據(jù)矩陣式條形碼使用 2D 交織的數(shù)據(jù)位,。從數(shù)據(jù)區(qū)域模塊中提取數(shù)據(jù)位后,,我們執(zhí)行解交織來(lái)獲得糾錯(cuò)碼字的數(shù)據(jù)位。關(guān)于 2D 數(shù)據(jù)位交織的詳細(xì)信息,,請(qǐng)參見(jiàn)參考文獻(xiàn)[2],。
 
我們用預(yù)計(jì)算查找表來(lái)進(jìn)行解交織。由于數(shù)據(jù)矩陣式條形碼支持不同尺寸的數(shù)據(jù)區(qū)域,,因此解交錯(cuò)查找表的大小和表單元也不同,。不可能在小尺寸處理器中保存所有尺寸的查找表。然而,,如果在預(yù)先給定的應(yīng)用中數(shù)據(jù)矩陣大小是已知的,,我們只需要存儲(chǔ)特定解交織查找表。解交織后,,數(shù)據(jù)位按字節(jié)格式形成碼字,,輸入 RS 解碼器。
 
條形碼糾錯(cuò)
 
新興的 ECC-200 型數(shù)據(jù)矩陣式條形碼使用 RS (N, K)碼來(lái)糾正解交織位的錯(cuò)誤和遺漏,。RS (N, K)碼可以糾正最多(N-K)/2 個(gè)錯(cuò)誤或者最多(N-K)個(gè)遺漏(如果不存在錯(cuò)誤),。在這個(gè)應(yīng)用中使用的 Galois 域是 GF(28)。對(duì)于不同數(shù)據(jù)區(qū)域大小,,數(shù)據(jù)矩陣式條形碼使用不同的 RS 碼字長(zhǎng)度,。例如,14x14 大小的數(shù)據(jù)區(qū)域條形碼使用 RS(24, 12)碼來(lái)糾錯(cuò),,16x16 大小的數(shù)據(jù)區(qū)域條形碼使用 RS(32, 18)碼,。RS 解碼器的復(fù)雜度取決于數(shù)據(jù)區(qū)域的大小。隨著 RS 碼字長(zhǎng)度的增加,,存儲(chǔ)器需要存儲(chǔ)的所有 RS 解碼工作緩沖區(qū)也要增加,。
 
為了高效地實(shí)施 RS 解碼器,我們使用查找表來(lái)進(jìn)行 Galois 域計(jì)算,。對(duì)所有 RS 碼字長(zhǎng)度進(jìn)行解碼時(shí)使用相同的 Galois 域?qū)?shù)和反對(duì)數(shù)查找表,,因此域單元也屬于 GF(28)。我們需要大約 2 kB 的 L1 存儲(chǔ)器來(lái)存儲(chǔ)對(duì)數(shù)和反對(duì)數(shù)查找表,。
 
數(shù)據(jù)矩陣式條形碼解碼復(fù)雜度

2D 條形碼解碼有兩個(gè)部分:1)  圖像處理,,2)條形碼解碼。如果捕捉的圖像與解碼區(qū)域沒(méi)有適當(dāng)對(duì)齊,,我們可能需要進(jìn)行圖像旋轉(zhuǎn),、偏差糾正等,來(lái)使圖像與解碼區(qū)域?qū)R,。
 
在這種情況下,,圖像處理階段的復(fù)雜度比實(shí)際條形碼解碼要大。在這篇文章中,我們假設(shè)圖像與解碼區(qū)域是對(duì)齊的,。數(shù)據(jù)矩陣式條形碼的解碼復(fù)雜度(在周期和存儲(chǔ)器方面)取決于數(shù)據(jù)符號(hào)的大小,。如果數(shù)據(jù)符號(hào)尺寸較大,每個(gè)符號(hào)中包含多個(gè)較大的數(shù)據(jù)區(qū)域,,那么我們需要更多的存儲(chǔ)器來(lái)保存圖像的行像素和 RS 工作緩沖,。每單位時(shí)間需要處理的數(shù)據(jù)量也隨著數(shù)據(jù)區(qū)域的尺寸而增加。以每個(gè)數(shù)據(jù)矩陣式條形碼符號(hào)具有 16x16 數(shù)據(jù)區(qū)域的 VGA 圖像為例,,我們需要大約 6kB數(shù)據(jù)存儲(chǔ)器和 4kB 的 Blackfin 程序存儲(chǔ)器,。BF53x 內(nèi)核上運(yùn)行單個(gè)模塊的近似周期數(shù)如下:
模塊尺寸和數(shù)量:7,200 
數(shù)據(jù)位提取: 2,000 個(gè)周期
解交織和封包:600
RS 解碼:7,000 個(gè)周期
 
本文小結(jié)
本文討論了在小尺寸 Blackfin 處理器上進(jìn)行數(shù)據(jù)矩陣 2D 條形碼解碼。同時(shí)解釋了使用或不使用高延遲 L2 存儲(chǔ)器對(duì) 2D 條形碼進(jìn)行解碼的不同方法,。分析了基于 RS 的數(shù)據(jù)矩陣 2D條形碼解碼的復(fù)雜度,,并估算了使用 BF53x 處理器對(duì) VGA 圖像中單個(gè) 16x16 數(shù)據(jù)符號(hào)進(jìn)行解碼所需的存儲(chǔ)器和周期數(shù)。
本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected]