新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 視頻跟蹤算法在Davinci SOC上的實現與優化

        視頻跟蹤算法在Davinci SOC上的實現與優化

        作者: 時間:2015-01-29 來源:網絡 收藏

          算法在上的實現

        本文引用地址:http://www.104case.com/article/269186.htm

          平臺的選擇

          DM6446采用ARM與 雙核結構,其中ARM子系統搭載297 MHz主頻的ARM926 核,部分則采用594 MHz的C64x+DSP核,外圍存儲均支持256 MB DDR2 RAM和各類存儲卡,另外使用了VPSS 子系統豐富的視頻前后處理功能,且都配備了完善的外設接口。目標跟蹤算法需要做大量運算,DM6446 DSP核強大的運算處理能力保證了算法的實時處理。同時DM6446的ARM核可以進行系統管理,數據讀寫,網絡傳輸等處理。

          我們使用Spectrum Digital公司的DVEVM平臺進行算法仿真、原型制作和軟件優化。DVEVM?還可實現視頻輸入/輸出連接、網絡接口、存儲器接口以及標準的子卡連接等。

          系統軟件框架

          整個系統的軟件框架如圖2如示。DM6446的ARM核運行基于Linux操作系統的應用程序,所用的外圍設備都由ARM負責控制。ARM端的HTTP服務器通過Linux網絡協議棧來處理HTTP請求,并發送壓縮視頻數據。視頻跟蹤的應用程序由五個POSIX線程組成,分別是視頻捕捉線程,視頻跟蹤線程,視頻壓縮線程,顯示線程,系統控制線程。視頻捕捉線程通過V4L2接口設備驅動從攝像頭讀取原始視頻數據。視頻跟蹤線程把視頻數據送到ARM和DSP的共享緩沖內存,并通知DSP執行跟蹤算法。壓縮線程負責控制DSP側的壓縮算法并從共享內存中讀取壓縮數據。視頻顯示線程從視頻緩存中讀取視頻數據幀,并疊加目標跟蹤框,最后通過Frame Buffer設備驅動輸出顯示。系統控制線程負責響應遙控器和鼠標并執行相應操作。

          DM6446的DSP核上運行DSP/BIOS實時操作系統和目標檢測,跟蹤算法,視頻壓縮算法。所有的算法的接口都符合TI xDAIS標準,由Codec Engine調用。除了算法,DSP核上還集成了管理內存和DMA的Framework Component。

          ARM核和DSP核的通信由TI提供的Codec Engine軟件框架負責。Codec Engine是介于應用程序和具體算法之間的軟件模塊,其中的VISA API通過stub和skeleton訪問Engine SPI最終調用算法。ARM和DSP的所用共享緩沖內存都是通過CMEM模塊在DDR中分配的,緩沖內存地址連續且與DSP核Cache對齊。

          

         

          圖 2 軟件結構圖

          跟蹤算法在DSP上的優化

          為了充分發揮出強大的視頻處理能力,滿足實時跟蹤的需要,我們通過算法優化和編程優化相結合的方法對Codec程序進行了大量的優化。

          算法優化

          算法優化是指在不降低算法性能的情況下,采用等效算法來降低計算量,我們的工作主要集中在“歸一化互相關系數”的計算例程的簡化上。根據均值和方差的性質,我們可以將(1)式化簡為:

          

         

          上式與式(1)比較,減少了大量的加減法計算,而且將方差和協方差的計算轉化為大量的乘加運算,這為我們后面的編程優化也提供了極大的便利。例如M=64, N=64時,加法次數從36864減少到12288。

          編程優化

          編程優化是在計算量不變的情況下,根據Davinci處理器DSP核心的特點,通過優化存儲器的存取效率和提高程序的并行化程度來縮短程序運行所需要的指令周期數,以使程序運行得更快。我們的編程優化工作主要包含使用dsplib、使用線性匯編、使用內聯函數以及循環展開等五個方面,下面將一一加以介紹。

          * dsplib的使用

          在優化過程中,我們還采用了CCS中提供的庫函數來對代碼進行優化。CCS中針對c64x+ DSP提供了高度優化的dsplib庫函數供用戶使用,這些庫函數提供了數字信號處理中常見的處理例程,而且由匯編語言寫成,具有極高效的代碼效率。特別是用于計算向量內積的DSP_dotprod和DSP_vecsumsq函數正好滿足了我們的計算需求。在計算尺寸為32x32的“歸一化互相關系數”時,優化后計算

        部分只需要271個DSP時鐘周期,而計算
        部分只需要267個DSP時鐘周期,這大大提高了程序運行的速度。

         

          * 線性匯編

          對于uf和ug的計算,如果使用for循環實現,將會大大拖累整個“歸一化互相關系數”計算例程的執行效率。我們用手工編寫線性匯編代碼的方式實現了dspsum函數,利用C64x + DSP中的8個并行計算單元,在每個DSP時鐘周期內同時進行4個16位加16位的加法操作,對于尺寸為32x32的求和計算而言,該函數只需要258個DSP時鐘周期。



        關鍵詞: DSP Davinci SOC

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 江达县| 建瓯市| 辽中县| 高平市| 伊宁县| 桃园县| 滦南县| 河西区| 洛南县| 雷山县| 甘洛县| 怀宁县| 蕲春县| 沂水县| 霞浦县| 根河市| 孟连| 琼海市| 井冈山市| 罗城| 义乌市| 碌曲县| 龙井市| 云南省| 牙克石市| 彰化县| 溧水县| 临朐县| 榆中县| 涡阳县| 郑州市| 勐海县| 曲麻莱县| 杭锦旗| 古交市| 怀安县| 灵丘县| 深水埗区| 丰宁| 苍溪县| 安阳县|