DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1747|回复: 0
打印 上一主题 下一主题

[待整理] 低通滤波器之VLS架构的设计与实现

[复制链接]
跳转到指定楼层
楼主
发表于 2015-4-27 15:46:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
第一章 緒論
          影像有時候會出現干擾的現象,稱為雜訊(noise)。由於雜訊的性質不同,導致去除雜訊的方法也不盡相同。這邊我們假設雜訊的狀況為干擾亮點,此一雜訊屬於高頻的雜訊,因此利用低通濾波器來使雜訊模糊化,藉此達到去除雜訊的效果。
           
          1.1 研究背景與動機
          雜訊的本意是對外界干擾的總稱。何謂影像的雜訊呢?例如由於電視天線狀況不佳導致影像接收不好,這又可分為兩類,其一是收視的影像本身出現扭曲、歪斜或者是模糊不清等情況。其二是影像上面出現各種形式的干擾斑點、條紋等。後一種干擾稱之為影像的雜訊(noise)。
           
          由於雜訊的性質不同,導致去除雜訊的方法也不盡相同。那麼,如何從一幅有雜訊的影像中把雜訊除去呢?這是本篇研究的主題。我們的目的是要把干擾的雜訊除去,得到清晰的影像。
           
          因此我們可以把有雜訊干擾的影像放大觀察後,可以知道,雜訊的濃度與其四周像素(pixel)的濃度間,存在著很大的濃度差。正是這種急遽變化的濃度差,使人覺得刺眼,利用雜訊的這種性質除去雜訊的方法,一般稱之為平滑化(smoothing)。但影像的邊界部份也有急遽變化的濃度差。如何將邊界與雜訊恰當的分離開來,只除去雜訊部份,這也是需要注意的地方。
           
          1.2 數位影像類型簡介
          基礎的影像類型有四種,這邊作個簡單的介紹。
           
          1.二元數位影像(binary) 每一個像素不是黑就是白。由於像素只有兩種可能值,因此每個像素只需1位元,這種影像的儲存效率很高。
           
          2.灰階影像(grayscale) 每一個像素都是灰色,只是深淺不同,一般來說範圍從0(黑)到255(白)。由此可知每個像素需要8位元來表示。
           
          3.全彩或RGB影像(true color) 每一個像素都有自己的顏色,這個顏色是由不同比例的紅,綠,藍調配而成。且每個原色深淺範圍也各都是0-255。因為每個像素需要使用24位元,所以這種影像又稱為24位元彩色影像(24-bit color image)。
           
          4.索引影像(indexed) 大部分影像集中在某一部分,為了方便儲存及處理,於是建立相對應的色譜(colormap)或調色盤(color palette),每個像素的值僅代表著色譜上對應顏色的索引(index)。
           
          第二章 421濾波器及演算法
          我們可以透過對像素執行特定函數運算來修正影像。對於四周的部份(臨域)也可以使用同樣的方式去運算。主要的概念便是將遮罩覆蓋到指定的影像上面。如此一來,便會如圖2.1所示,產生一個新的影像,該影像的像素值則是根據遮罩下的像素值運算而來。而遮罩與函數的結合便稱之為濾波器(filter)。
           
          濾波器的運算大致來說可分為三個步驟:
          1.將遮罩置於指定像素上。
          2.將濾波器的所有元素與臨域相對應的像素相乘。
          3.將上述乘法的結果相加後計算平均值。
          影像中的所有像素都需重覆此一運算。
           
                

           (a)3x3遮罩器                     (b)指定像素

           

        (c)遮罩示意圖

        圖2.1 遮罩器與指定像素

        2.1 高通濾波器及低通濾波器
          影像處理中的一個重要概念就是頻率(frequency)。簡單來說,影像的頻率是像素值隨著距離變化的一種度量。高頻的部份(high-frequency)指的是短距離內像素值產生很大的變化,例如影像的邊緣部份或雜訊部份。相對地,低頻(low- -frequency)的部份則是影像中像素值變化不大的部份,像是背景等。
           
          因此所謂的高通濾波器(high-pass filter)便是保持高頻率的部份,減少或消除低頻率的部份的濾波器;而低通濾波器(low-pass filter)則是保持低頻率的部份,減少或消除高頻率的部份的濾波器。
           
          2.2 421低通濾波器演算法
          舉例來說,若有一421低通濾波器函數與指定像素E及其臨域的像素值如圖2.2及圖2.3所示,
           
                                  

               圖2.2 421低通濾波器函數     圖2.3 指定像素及其四周的像素

           
          則其對指定像素進行運算的結果為
          E’= ( A + 2B + C + 2D + 4E + 2F + G + 2H + I ) / 16
          以上面的例子來說,421平均濾波器是低通濾波器,此濾波器的效果會模糊邊緣,或者是降低高頻的雜訊,所以這邊我們可以利用它降低亮點的雜訊干擾。並且由於421低通濾波器的函數是線性的計算,屬於線性濾波器,因此可以拆解成如圖2.4的表示方法。
           
       

        圖2.4 拆解後濾波器示意圖

           
          2.3 影像邊界延伸之處理
          在本節之前並沒有談到影像邊界之問題。如圖2.5所示,若指定像素在邊界時,遮罩器可能會超過影像邊界。而在真實的世界中,我們想要處理的影像必定為有限大小,所以會產生邊界問題。因此如何處理邊界延伸之問題就顯得格外重要。
           
       

        圖 2.5 指定像素在邊界

           
          解決邊界延伸的方法有許多種類型,各有其優缺點。例如補零方法,是將超過邊界之部份全部當成零來計算,此種方法的實現方式最為簡單。但是由於可能造成的落差太大,所以並不適合我們在這邊使用。另一種方法為週期性對稱延伸,是利用複製指定像素的臨域去做計算。這樣做的好處是邊界延伸的部份會與鄰近的像素值相近,在視覺上會有一種連續的效果。因此在這邊我們採用此種方法去處理邊界延伸之問題。如圖2.6。
           
       

        圖2.6 週期性對稱延伸示意圖

        第三章 硬體功能及規格
          在前面的章節我們簡單說明了421低通濾波器的演算法,本章節針對它以及內部各個部份的功能及規格上做介紹。它的架構如圖3.1所示。
           
       

                                          圖3.1 整體架構圖
           
        表3.1 LPF輸入及輸出腳位

                                                                         輸入腳位名稱
                       
                                                                         功能說明
                       
                                                                         大小(bits)
                       
                                                                         CLK
                       
                                                                         時脈週期。
                       
                                                                         1
                       
                                                                         RSTn
                       
                                                                         重設,0代表重設;1代表不動作。
                       
                                                                         1
                       
                                                                         DIN
                       
                                                                         接收輸入資料。
                       
                                                                         24
                       
                                                                         DINEn
                       
                                                                         控制輸入資料的致能;0 代表致能。
                       
                                                                         1
                       
                                                                         HS
                       
                                                                         當資料為圖片每行的開頭之前或結尾之後則1;否則0。
                       
                                                                         1
                       
                                                                         VS
                       
                                                                         當資料為圖片的開頭之前或結尾之後則1;否則0。
                       
                                                                         1
                       
                                                                         輸出腳位名稱
                       
                                                                         功能說明
                       
                                                                         大小(bits)
                       
                                                                         DOUT
                       
                                                                         傳送輸出資料。
                       
                                                                         24
                       
                                                                         DOUTEn
                       
                                                                         控制輸出資料的致能;0 代表致能。
                       
                                                                         1
                       
           
          表3.1說明了輸入及輸出腳位。這邊的時脈週期我們採用的是正緣觸發。重設是低準位重設,高準位不動作。因為我們的影像類型是採用YUV,而YUV各為8位元,因此輸入及輸出的資料為24位元。不過需要注意的是我們只對Y做影像處理,因此為了節省記憶體空間,偶數行的U留下但是V捨去,奇數行的U捨去但是V留下,而兩行間的UV共用。另外輸入及輸出的致能腳為低準位致能。
           
       

        圖3.2 YUV共用示意圖

           
          3.1 各級架構
          此低通濾波器中,總共大致可分為3個架構,如圖3.3所示。其中包括有邊界處理器(Boundary)、記憶體(Memory)、計算處理器(Processer)等。一一敘述如下。
           
       

        圖3.3內部架構示意圖

           
          3.1.1 邊界處理器
          為了影像在邊界延伸時的特殊情況,我們設計了一個專門用來處理邊界問題之部分,如圖3.4。
           
       

        圖3.4 邊界處理器

           
          邊界處理器之規格如表3.2所列。DIN_1、DIN_2及DIN_3僅含有YU或YV,因此為16位元。DOUT_1、DOUT_2、DOUT_3、DOUT_4及DOUT_5僅含有Y或U或V,所以為8位元。C_EVEN是為了控制記憶體的讀寫動作,所以會把C_EVEN接至記憶體的輸入腳。
           
        表3.2

                               
                                        輸入腳位名稱

                       
                               
                                        功能說明

                       
                               
                                        大小(bits)

                       
                               
                                        CLK

                       
                                                                         時脈週期。
                       
                               
                                        1

                       
                               
                                        RSTn

                       
                                                                         重設,0代表重設;1代表不動作。
                       
                               
                                        1

                       
                               
                                        HS

                       
                                                                         當資料為圖片每行的開頭之前或結尾之後則1;否則0。
                       
                               
                                        1

                       
                               
                                        VS

                       
                                                                         當資料為圖片的開頭之前(或結尾之後)則1;否則0。
                       
                               
                                        1

                       
                               
                                        DINEn

                       
                                                                         控制輸入資料的致能;0 代表致能。
                       
                               
                                        1

                       
                               
                                        DIN_1

                       
                                                                         從SRAM讀進的偶數列資料。
                       
                               
                                        16

                       
                               
                                        DIN_2

                       
                                                                         從SRAM讀進的奇數列資料。
                       
                               
                                        16

                       
                               
                                        DIN_3

                       
                                                                         從掃描列讀進的資料。
                       
                               
                                        16

                       
                               
                                        輸出腳位名稱

                       
                               
                                        功能說明

                       
                               
                                        大小(bits)

                       
                               
                                        DOUTEn

                       
                                                                         控制輸出資料的致能;0 代表致能。
                       
                               
                                        1

                       
                               
                                        DOUT_1

                       
                                                                         僅含有Y且送到Processer的資料。
                       
                               
                                        8

                       
                               
                                        DOUT_2

                       
                                                                         僅含有Y且送到Processer的資料。
                       
                               
                                        8

                       
                               
                                        DOUT_3

                       
                                                                         僅含有Y且送到Processer的資料。
                       
                               
                                        8

                       
                               
                                        DOUT_4

                       
                                                                         僅含有U的資料。
                       
                               
                                        8

                       
                               
                                        DOUT_5

                       
                                                                         僅含有V的資料。
                       
                               
                                        8

                       
                               
                                        C_EVEN

                       
                                                                         0代表掃瞄列為偶數列;1則為奇數列。
                       
                               
                                        1

                       
        3.1.2記憶體
          我們把偶數列跟奇數列的資料分別儲存於不同的記憶體中。先使用Memory Generate 呼叫出 single port的SRAM,然後與控制讀寫電路組合成如圖3.5所示之記憶體,偶數列與奇數列的記憶體架構一樣,只有控制讀寫電路略有不同。
           

        圖3.5 記憶體

           
        表3.3

                               
                                        輸入腳位名稱

                       
                               
                                        功能說明

                       
                               
                                        大小(bits)

                       
                               
                                        CLK

                       
                                                                         時脈週期。
                       
                               
                                        1

                       
                               
                                        RSTn

                       
                                                                         重設,0代表重設;1代表不動作。
                       
                               
                                        1

                       
                               
                                        DINEn

                       
                                                                         控制輸入資料的致能;0 代表致能。
                       
                               
                                        1

                       
                               
                                        DIN

                       
                                                                         寫入到記憶體的資料。
                       
                               
                                        32

                       
                               
                                        C_EVEN

                       
                                                                         0代表掃瞄列為偶數列;1則為奇數列。
                       
                               
                                        1

                       
                               
                                        輸出腳位名稱

                       
                               
                                        功能說明

                       
                               
                                        大小(bits)

                       
                               
                                        DOUT

                       
                                                                         從記憶體讀出的資料。
                       
                               
                                        32

                       
           
          本章開頭提到為了節省記憶體空間,因此在存入資料時,並非將原始的資料直接存入,而是只取YU或者是YV,加上一次儲存兩行的資料,所以輸入及輸出資料為32位元。
           
       

        圖3.6 SRAM儲存方式

         

          3.1.3 計算處理器
          計算處理器的主要功能是要處理對Y做加權函數的計算。DIN_1與DIN_3的加權值為1,而DIN_2的加權值為2。
           
       

        圖3.7 計算處理器

           
          整理出計算處理器規格如表3.4。
        表3.4

                               
                                        輸入腳位名稱

                       
                               
                                        功能說明

                       
                               
                                        大小(bits)

                       
                               
                                        CLK

                       
                                                                         時脈週期。
                       
                               
                                        1

                       
                               
                                        RSTn

                       
                                                                         重設,0代表重設;1代表不動作。
                       
                               
                                        1

                       
                               
                                        DIN_1

                       
                                                                         僅含有Y且加權值為1。
                       
                               
                                        8

                       
                               
                                        DIN_2

                       
                                                                         僅含有Y且加權值為2。
                       
                               
                                        8

                       
                               
                                        DIN_3

                       
                                                                         僅含有Y且加權值為1。
                       
                               
                                        8

                       
                               
                                        輸出腳位名稱

                       
                               
                                        功能說明

                       
                               
                                        大小(bits)

                       
                               
                                        DOUT

                       
                                                                         輸出為計算過後的Y。
                       
                               
                                        8

                       
        第四章 硬體的設計
          本章開始設計濾波器內部的各個部份,說明如下。
           
          4.1 邊界處理器
          在設計邊界處理器之前,我們必須先考慮週期性對稱延伸的幾種情況。包括有上下週期性對稱延伸左右週期性對稱延伸,最後一種則是兩個情況同時發生的時候。
           
          先考慮上下週期性對稱延伸,發生在指定像素為第一列或是最後一列之任意像素。左右週期性對稱延伸,則是發生在指定像素為第一行或是最後一行之任意像素。而兩種情況會同時發生在指定像素為圖片的四個端點時。
           
          4.1.1 上下週期性對稱延伸
          要解決上下週期性對稱延伸之問題,只要在指定像素為第一列及最後一列時,將DIN_1複製到DIN_3或是將DIN_3複製到DIN_1。在上邊界時,必須要等到掃描到第二列才能複製;下邊界時,則直接複製從記憶體讀出的資料。
           
       

        圖4.1 上下週期性對稱示意圖

         

          4.1.2 左右週期性對稱延伸
          與上下週期性對稱延伸之問題類似,因此解決方法也類似,只要將所讀入的資料貼到左側或右側即可。在左邊界時,必須要等到掃描到第二行像素時才能複製它當成延伸;在右邊界時,想要取得已經掃瞄過的像素當成延伸則需要利用到暫存器。
           
       

        圖4.2 左右週期性對稱示意圖

         

          我們可以發現,必須要等到掃描第二列第二行時,邊界處理器才會有第一次的輸出(DIN_1、DIN_2與DIN_3是同時輸出的)。因此,可設計出如圖4.3之架構。
           
       

        圖4.3  處理左右邊界問題之架構

           
          4.1.3 兩種情況同時發生
          當兩種情況同時發生時,延伸之方法如圖2.6所表示。
           
          4.2 記憶體
          從圖3.6的儲存方式來看,雖然掃描時一次是一個像素值,不過利用暫存器並且合成,儲存時便可一次存兩個像素值,並且可以在輸入前取DEven為YU;Dodd為YV。而輸出時也可利用暫存器並且做分解,如圖4.4所示。
           
       

        圖4.4 記憶體輸入之合成與輸出之分解

           
          在控制讀寫方面,需要注意的是當掃描到偶數列時,儲存奇數列之記憶體的讀寫腳位會一直維持在讀的狀態;而掃瞄到奇數列時,儲存偶數列之記憶體的讀寫腳位也會一直維持在讀的狀態。
           
          4.3 計算處理器
          依照圖2.4做拆解運算,如圖4.5(a)(b)(c),可以看出只需要兩個1x3的濾波器和一些暫存器就可以完成圖2.4的拆解動作。
           
                

        (a)                         (b)

       

        (c)

        圖4.5 拆解步驟

           
          因此計算處理器的設計上最為簡單,其中大部分是由組合電路所組成。如圖4.6所示。
       

        圖4.6 計算處理器內部

           
          其中的暫存器R1與R2是為了將ALU_1所計算出的結果暫存起來,如圖4.7。ALU_1及ALU_2的作用是為了做加權函數的計算,輸出為 DIN_1 + 2*DIN_2 + DIN_3 ,但須注意的是ALU_1輸出及ALU_2輸入位元大小的設定,以免發生溢位。最後再將ALU_2的輸出向右位移4位元(函數計算中的除以16),DOUT即為做完加權計算的Y值。
           
             


        圖4.7 R1及R2

        第五章 設計與驗證之流程
          在本章節中,我們將簡單的介紹LPF設計流程,接著,會利用一組的測試資料,來驗證模擬結果是否正確。
           
          5.1 設計流程
          如圖5.1所示,一開始先考慮架構之功能,接著使用硬體描述語言Verilog HDL 實現功能之設計,經過編譯器確定語法無誤後,再模擬結果。若有問題,則回頭尋找錯誤;若沒有問題,則完成全部設計之流程。
       

         圖5.1 設計流程

           
          5.2 模擬及驗證
          完成RTL之後,接著要模擬及驗證結果是否正確。首先要先將.ppm檔轉換成.dat檔,因為這是Verilog HDL中testbench所能夠讀取的檔案。我們除了用Verilog HDL來模擬421低通濾波器之外,也使用C語言模擬421低通濾波器,並將兩者輸出之結果儲存成.dat檔來比較。若結果無誤,則轉換回.ppm檔。
           
       

        圖5.2 模擬及驗證流程

         

          5.3 波型圖
          當模擬完成之後,使用Verdi觀察波型圖。
           
          5.3.1 低通濾波器
          圖5.3(a)(b)說明了當讀取資料為圖片的開頭之前或結尾之後時,VS會為1;否則為0。當讀取資料為圖片每行的開頭之前或結尾之後時,HS會為1;否則為0。
           
       

        圖5.3(a) 低通濾波器

         

       

        圖5.3(b) 低通濾波器

         

          5.3.2 邊界處理器
          在之前提到邊界處理器需要利用到暫存器並位移。如圖5.4所表示,R1、R4、R7、R10分別為DIN_1延遲一個、兩個、三個及四個時脈週期;R2、R5、R8、R11分別為DIN_2延遲一個、兩個、三個及四個時脈週期;而R3、R6、R9、R12分別為DIN_3延遲一個、兩個、三個及四個時脈週期。
           
       

        圖5.4 邊界處理器

         

          5.3.3 記憶體
          記憶體在控制讀寫方面,需要注意的是當掃描到偶數列時,儲存奇數列之記憶體的讀寫腳位會一直維持在讀的狀態;而掃瞄到奇數列時,儲存偶數列之記憶體的讀寫腳位也會一直維持在讀的狀態。圖5.5(a)是掃描到奇數列時,而圖5.5(b)則是為掃描到偶數列時。可注意到WEn的差異性。
           
       

        圖5.5(a) 儲存偶數列之記憶體

         

       

        圖5.5(b) 儲存偶數列之記憶體

         

          5.3.4 計算處理器
          可以看出利用暫存器的位移便只需要兩個1x3的濾波器即可達到原本要求之函數加權計算。
       

        圖5.6 計算處理器

         

          5.4 模擬結果
           
       

        圖5.7 含有雜訊之影像(未處理)

       

        圖5.8 影像經過第一次處理

       

        圖5.9 影像經過第二次處理
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-12-29 03:13 , 耗时 0.109606 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表