(原創(chuàng)聲明:該文是作者的原創(chuàng),面向?qū)ο笫?/em>FPGA入門者,后續(xù)會有進階的高級教程。宗旨是讓每個想做FPGA的人輕松入門,作者不光讓大家知其然,還要讓大家知其所以然!每個工程作者都搭建了全自動化的仿真環(huán)境,只需要雙擊top_tb.bat文件就可以完成整個的仿真(前提是安裝了modelsim),降低了初學者的門檻。如需整個工程請留言(WX:Blue23Light),不收任何費用,但是僅供參考,不建議大家獲得資料后從事一些商業(yè)活動!)
?均值濾波,是圖像處理中常用的手段,從頻率域觀點來看均值濾波是一種低通濾波器,高頻信號將會去掉。均值濾波可以幫助消除圖像尖銳噪聲,實現(xiàn)圖像平滑,模糊等功能。理想的均值濾波是用每個像素和它周圍像素計算出來的平均值替換圖像中每個像素。
均值濾波的實現(xiàn)方式就是用N個點的值相加再求平均,用這個平均值代替一個點的值,思路是非常簡單的,用FPGA如何實現(xiàn)呢?如下所示,假如我們每次用4個點求均值,那就可以選擇4個時鐘周期的滑窗向右滑動1個時鐘周期滑動1次。開始時滑窗是在數(shù)據(jù)1,2,3,4的位置,累加后除4得到結(jié)果;下個時鐘周期滑窗在數(shù)據(jù)2,3,4,5的位置,累加后除4得到結(jié)果;再下個周期滑窗在數(shù)據(jù)3,4,5,6的位置......N值比較小的時候還好處理,但是N比較大的時候,比如64個值求均值,應(yīng)該如何實現(xiàn)呢?總不能在每個時鐘周期完成64次累計吧?我們仔細觀察一下,當?shù)?個滑窗完成累加得到結(jié)果x,到第2個滑窗的時候2,3,4,5的累加值其實可以用x-d1+d5這樣求出來,所以一個時鐘周期完成一次加法和減法即可。
所以要計算N個值的均值,就要至少有N個寄存器用于緩存這N個數(shù)據(jù),如果再有新的數(shù)據(jù),那就將這N個寄存器統(tǒng)一移動,進來新的數(shù)據(jù),出去舊的數(shù)據(jù)。這個操作其實就是RAM或者FIFO的功能。我們可以用數(shù)組搭建一個簡單的RAM,如下所示。參數(shù)N就是數(shù)組的個數(shù),通過wr_en,wr_addr和wr_data將數(shù)據(jù)寫入數(shù)組,通過rd_en,rd_addr,rd_vld,rd_data等將數(shù)據(jù)讀出數(shù)組。
在mean_filter模塊中,定義了參數(shù)FILTER_CNT,用來指示多少個數(shù)據(jù)進行均值濾波,BIT_CNT是FILTER_CNT個8位數(shù)據(jù)相加,結(jié)果最大需要擴展多少位。本設(shè)計為了簡單起見,避免了除法的使用,那FILTER_CNT取2,4,8,16,32......等2的BIT_CNT次冪。
計數(shù)器cnt用來控制開始的FILTER_CNT次的累加,當有新的數(shù)據(jù)要寫入時,產(chǎn)生寫使能wr_en,寫地址wr_addr和寫數(shù)據(jù)信號wr_data。
當已經(jīng)有FILTER_CNT個數(shù)據(jù)寫入RAM后,開始從RAM中讀出寫入時間最長的數(shù)據(jù)。在rd_domain拉高可以讀取數(shù)據(jù),這兒需要注意一下,寫RAM的地址和讀RAM的地址在同一個時刻是完全一樣的。因為讀寫RAM用的都是時序邏輯,寫x地址,數(shù)據(jù)在下個系統(tǒng)時鐘才寫進去,讀x地址,下個時鐘周期讀出來的是當前時刻x地址內(nèi)數(shù)據(jù)。
例化mean_ram,在RAM內(nèi)數(shù)據(jù)小于FILTER_CNT時進行累加,當RAM內(nèi)數(shù)據(jù)等于FILTER_CNT后進行新數(shù)據(jù)累加,同時舊數(shù)據(jù)減操作,最后輸出取BIT_CNT+7到BIT_CNT位即為均值。
新建仿真tb文件來產(chǎn)生隨機數(shù),雙擊sim目錄下的top_tb.bat文件,完成系統(tǒng)的自動化仿真。
modelsim的仿真結(jié)果如下所示,首先取8個點進行均值濾波,濾波后的輸出波形隨機性降低。
再取64個點進行均值濾波,濾波后的輸出波形隨機性進一步降低。所以可以看出,均值濾波能夠抑制系統(tǒng)的隨機噪聲,點數(shù)越多,一致程度也越高。文章來源:http://www.zghlxwxcb.cn/news/detail-786481.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-786481.html
到了這里,關(guān)于孩子都能學會的FPGA:第三十課——用FPGA實現(xiàn)均值濾波的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!