当前位置:首 页 --> 技术分享
低通滤波器之VLS架构的设计与实现
发布时间:2015/1/19 11:36:00 来源:
在线咨询:
给我发消息
张代明 3003290139
给我发消息
姚红霞 3003214837
给我发消息
李湘宁 2850985550
13713728695
第一章 緒論

影像有時候會出現干擾的現象,稱為雜訊(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)指定像素

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

 

(c)遮罩示意圖

(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 指定像素及其四周的像素

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

 

則其對指定像素進行運算的結果為

E’= ( A + 2B + C + 2D + 4E + 2F + G + 2H + I ) / 16

以上面的例子來說,421平均濾波器是低通濾波器,此濾波器的效果會模糊邊緣,或者是降低高頻的雜訊,所以這邊我們可以利用它降低亮點的雜訊干擾。並且由於421低通濾波器的函數是線性的計算,屬於線性濾波器,因此可以拆解成如圖2.4的表示方法。

 

圖2.4 拆解後濾波器示意圖

圖2.4 拆解後濾波器示意圖

 

2.3 影像邊界延伸之處理

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

 

圖 2.5 指定像素在邊界

圖 2.5 指定像素在邊界

 

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

 

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

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

第三章 硬體功能及規格

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

 

  圖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.2 YUV共用示意圖

 

3.1 各級架構

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

 

圖3.3內部架構示意圖

圖3.3內部架構示意圖

 

3.1.1 邊界處理器

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

 

圖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.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.6 SRAM儲存方式

 

3.1.3 計算處理器

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

 

圖3.7 計算處理器

圖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 上下週期性對稱示意圖

 

4.1.2 左右週期性對稱延伸

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

 

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

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

 

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

 

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

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

 

4.1.3 兩種情況同時發生

當兩種情況同時發生時,延伸之方法如圖2.6所表示。

 

4.2 記憶體

從圖3.6的儲存方式來看,雖然掃描時一次是一個像素值,不過利用暫存器並且合成,儲存時便可一次存兩個像素值,並且可以在輸入前取DEven為YU;Dodd為YV。而輸出時也可利用暫存器並且做分解,如圖4.4所示。

 

圖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 計算處理器內部

圖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

圖4.7 R1及R2

第五章 設計與驗證之流程

在本章節中,我們將簡單的介紹LPF設計流程,接著,會利用一組的測試資料,來驗證模擬結果是否正確。

 

5.1 設計流程

如圖5.1所示,一開始先考慮架構之功能,接著使用硬體描述語言Verilog HDL 實現功能之設計,經過編譯器確定語法無誤後,再模擬結果。若有問題,則回頭尋找錯誤;若沒有問題,則完成全部設計之流程。

圖5.1 設計流程

 圖5.1 設計流程

 

5.2 模擬及驗證

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

 

圖5.2 模擬及驗證流程

圖5.2 模擬及驗證流程

 

5.3 波型圖

當模擬完成之後,使用Verdi觀察波型圖。

 

5.3.1 低通濾波器

圖5.3(a)(b)說明了當讀取資料為圖片的開頭之前或結尾之後時,VS會為1;否則為0。當讀取資料為圖片每行的開頭之前或結尾之後時,HS會為1;否則為0。

 

圖5.3(a) 低通濾波器

圖5.3(a) 低通濾波器

 

圖5.3(b) 低通濾波器

圖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.4 邊界處理器

 

5.3.3 記憶體

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

 

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

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

 

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

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

 

5.3.4 計算處理器

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

圖5.6 計算處理器

圖5.6 計算處理器

 

5.4 模擬結果

 

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

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

圖5.8 影像經過第一次處理

圖5.8 影像經過第一次處理

圖5.9 影像經過第二次處理

圖5.9 影像經過第二次處理

 
    您可能对以下产品感兴趣  
产品型号 功能介绍 兼容型号 封装形式 工作电压 备注
 
深圳市永阜康科技有限公司 粤ICP备17113496号 服务热线:0755-82863877 手机:13242913995