<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

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

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

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

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

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


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

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();