久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

讓我們利用DSP Builder創(chuàng)建一個中值濾波模塊(原創(chuàng))

 等緣708 2013-01-08

先前我用verilog編寫了一個中值濾波模塊,這種算法處理因為數(shù)據(jù)量巨大而且還重復(fù)存取,,所以比較適合放在FPGA前端來處理,,DSP就做小數(shù)據(jù)有技巧的算法吧。當(dāng)時寫這個模塊的時候可真是折騰啊,,呵呵,,其實不是中值算法難,也不是用verilog表述出來難,,難的就是在工程中搭建這個數(shù)據(jù)鏈,,我們得根據(jù)相機的數(shù)據(jù)流來小心翼翼的存儲和放出這些數(shù)據(jù),不能阻塞而且要有效率,。

我很驚奇dsp builder,,真的是個非常好的工具,它讓我們從全局來構(gòu)建我們的模塊,,而不是掉進了信號的泥潭,,這就是我先前用verilog寫中值模塊的苦惱,你得關(guān)注每一個相關(guān)的信號,,相機的,、DSP的,這些繁雜的信號都有可能導(dǎo)致你無法實現(xiàn)效果,。而且我們還非常不好測試,,這點也絕對的成為了問題,我們需要的測試就是我給一幅圖片經(jīng)過我的模塊,,出來效果圖片,!這點很難,F(xiàn)PGA無法提供這么大的RAM給你存,,而且取出來也是個麻煩,,我們需要可視化!

呵呵,DSP builder果真是一把針對DSP的利器,!(這里的DSP是數(shù)字信號處理,,不是處理器,否則TI會不高興了,,hoho~),。當(dāng)然了,我們寫控制邏輯的時候還是自己手寫吧,算法就用dsp builder,,如果你用一個純硬件的頭腦在simulink中搭建電路模塊,,這也是很好的,你真的可以一句代碼也不寫,呵呵,,這真令人驚奇,,我是達不到這么胸中有器件,還是行為級的描述描述吧~~

FPGA這個東西,,太綜合了,,正是因為它像一張白紙,你可以隨意發(fā)揮,,隨意發(fā)揮的結(jié)果是你需要太多知識才能發(fā)揮,,汗~ 你看,你數(shù)數(shù)這繁多的工具,,timequest,signaltap,modelsim,matlab…從工程上說它需要三個方面支持,,硬件、算法,、軟件,。

 

說偏了,我只是想說這個工具讓我們脫離了泥潭,。DSP builder這個組件分兩部分,,一個是基礎(chǔ)庫,一個是高級庫?,F(xiàn)在Altera把大部分精力放在了高級庫上,,而且有有些IP是需要lincese才能用的。

 

好了,,讓我們先來了解一下中值算法,,google一下吧。我采用的是快速中值濾波,,3x3矩陣,。這個算法主要功能是去噪,附帶會產(chǎn)生模糊的效果,。算法如下:

 

圖一

先縱列以箭頭方向從小到大排序,,縱列排好后,,再橫列以箭頭方向從小到大排,最后取45°角方向斜線的三個數(shù)取中值,。

 

了解了算法之后,,編寫verilog模塊吧。這里需要注意的就是,,務(wù)必達成流水線處理,,我們可以一個時鐘節(jié)拍就處理完一個三值比較,或者多個時鐘完成,。一定要注意到相機的數(shù)據(jù)是流水般過來的,,所以我們可以先等幾個或者十幾個時鐘,但是后續(xù)必須是流水般出結(jié)果,。

寫好之后,打開matlab&simulink,,開始建模,,用HDL inport導(dǎo)進去吧。其實也可以自己用dsp builder的組件來搭建這個算法模塊,,因為我這有個以前寫的代碼了,,所以就直接用:下面7個大的方形模塊是verilog導(dǎo)入。

 

圖二

因為我的相機是640*480輸出的灰階圖像,,所以對應(yīng)著3x3矩陣就是三行數(shù)據(jù)了,。這里IncCount組件作用就是模擬相機數(shù)據(jù)了,線性遞增數(shù)據(jù)0-63,,很簡單,,可以初步驗證一下我寫的Compare_3Num模塊的作用,。示波器觀察數(shù)據(jù)看看:

 

圖三

正好是64個數(shù)據(jù)循環(huán),,所以經(jīng)過中值應(yīng)該也是對應(yīng)的,初步效果可以確認(rèn)了,。其實這樣觀察和Modelsim,SignalTapII觀察就是一個樣,,只見樹木不見森林,,看著單個單個的值,有點無助~~

體現(xiàn)matlab強大的時候到了,,simulink有個兩組件From workspace,To workspace,。它能把matlab工作間的內(nèi)容導(dǎo)進dsp builder模塊之后在觀察框中顯示出來。這為我們提供很好的測試方法,,特別是圖像處理,。不過我們需要先寫.m腳本,你的去了解幾句matlab語言才行~~

建模如下,,這里的subsystem就是用圖二的模塊創(chuàng)建的子系統(tǒng),,F(xiàn)rom Workspace的simin就是數(shù)據(jù)入口,,從這里把整幅圖片的數(shù)據(jù)導(dǎo)進,To workspace就是數(shù)據(jù)出口,,復(fù)位和使能就直接置1了,。

 

圖四

我們來嘗試導(dǎo)入一幅彩色圖片,經(jīng)過我的中值濾波模塊之后的效果(第二幅是灰階圖,,第三幅是中值濾波后的效果圖):

 

圖五

經(jīng)過上面兩種測試方法,,特別是第二種方法,我們直觀的得到了整幅圖片的效果,,現(xiàn)在進入實戰(zhàn)階段了,,導(dǎo)出VHDL代碼,加載到工程里,,我們希望得到的就是實時的中值濾波效果,!

利用signalcompile組件指定器件---編譯----export….

 

圖六

軍工級的代碼出現(xiàn)了,呵呵,,不包括我寫的那段~~~不要看它產(chǎn)生的文件多,,占用的資源卻是很優(yōu)化的,而且效率也非常高,。

 

這些代碼可以直接用的,,我的工程是verilog代碼,引用VHDL模塊直接引用即可,,這里的top文件是median6_GN,。有了top文件我相信大家都會調(diào)用的吧~

 

我的板級可通過網(wǎng)絡(luò)獲取相機的黑白數(shù)據(jù),實時顯示,。PC客戶端保存的圖片是png格式的,,獲取個原圖:

 

圖七

我們寫個腳本,運用matla本身的中值函數(shù)medfilt2來做一下處理,,得到下面的效果:此圖是直接在顯示的figure里save as..jpg格式(這個圖片保存了就這么小,,我沒縮放過,順便申明這些圖片都被轉(zhuǎn)成jpg格式,博客園不支持bmp上傳)

 

圖八

好了,,我們把matlab導(dǎo)出的中值VHDL代碼加進工程,,編譯出來sof,燒寫FPGA,,看PC端的實時顯示結(jié)果,,截個圖:

 

圖九

呵呵,感覺還行,,相機熱噪點較多,,水漬水漬的。和matlab本身的函數(shù)處理結(jié)果相差不大,。這里的圖片有一些小黑點,,可能是相機幀行信號沒控制好,,導(dǎo)致無效數(shù)據(jù)進fifo了,看見了吧,,實踐中的工程就是還有很多的細節(jié)需要完善的,!上面的幾幅圖片都有行偏移,這是PC端的采集軟件有點bug,,我這里主要是演示圖像處理,,沒有理它。

 

通過這個演示,,我們知道了DSP builder能導(dǎo)出可用的硬件代碼,。matlab給我們提供系統(tǒng)級建模的平臺,無需寫一句代碼也能完成軍工級的任務(wù),。

 

后記:

我現(xiàn)在用的平臺是quartusII12.0 & Matlab2010b,,

其實quartusII9.1 & Matlab2009b配合的是很好的,后面我用的時候創(chuàng)建文件用dsp builder的signalTapII組件,,發(fā)現(xiàn)報錯: Matlab Error

Undefined function or method 'eval' for input arguments of type 'double'.

而且沒有彈出signalTapII的觀察框,,這真是件糾結(jié)的事情,于是我又懷疑是版本問題了,,因為畢竟2009b不是“正室”啊,,決定卸載,。

找缺氧同學(xué)要了12.0版本的quartusII及各組件,,花了兩個半鐘把quartusII9.1 & modelsim & dspbuilder &matlab卸載,換成12.0的各版本配合…這真是下了大決心,,換這種軟件忐忑啊,。

其實,那個報錯12.0也會有,,而且問題不是軟件版本問題,,是我有個組件的參數(shù)沒配置好,直接導(dǎo)致signaltap無法彈出觀察框,!

 

就這樣吧,,慢慢就會習(xí)慣12.0了~

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多