基於FPGA的音頻信號的FIR濾波(Matlab+Modelsim驗證)


 

1 設計內容

        本設計是基於FPGA的音頻信號FIR低通濾波,根據要求,采用Matlab對WAV音頻文件進行讀取和添加噪聲信號、FFT分析、FIR濾波處理,並分析濾波的效果。通過Matlab的分析驗證濾波效果后,將疊加噪聲信號的音頻信號輸出到txt文件里。然后使用Matlab語言編寫濾波器模塊和測試模塊,通過Modelsim軟件讀取txt文件的數據,將數據送入濾波模塊,最后將濾波的結果輸出到txt文件里,最后用Matlab將處理的結果從txt文件讀出、顯示、FFT分析用Verilog設計的FIR濾波器的處理效果。

 

2 設計原理

2.1 語音信號概述

       語言是人類創造的,是人類區別於其他地球生命的本質特征之一。人類用語言交流的過程可以看成是一個復雜的通信過程,為了獲取便於分析和處理的語音信源,必須將在空氣中傳播的聲波轉變為包含語音信息並且記載着聲波物理性質的模擬(或數字)電信號,即語音信號,因此語音信號就成為語音的表現形式或載體。

       語音學和數字信號處理的交叉結合便形成了語音信號處理。語音信號處理是建立在語音學和數字信號處理基礎之上的,對語音信號模型進行分析、存儲、傳輸、識別和合成等方面的一門綜合性學科。

       本設計中,從WAV音頻文件用Matlab讀取音頻信號進行分析、處理。

2.2 數字濾波器原理

       若濾波器的輸入、輸出都是離散時間信號,那么該濾波器的單位沖激響應h(n)也必然是離散的,這種濾波器稱為數字濾波器(DF)。數字濾波器實質上是一種運算過程——用來描述離散系統輸入與輸出關系的差分方程的計算或卷積計算。數字濾波器的實質是用一有限精度算法實現的離散時間線性時不變系統,以完成對信號進行濾波處理的過程。它是數字信號處理的一個重要分支,具有穩定性好、精度高、靈活性強、體積小、質量輕等諸多優點。

      根據單位沖激響應h(n)的時間特性分類

(1) 無限沖激響應(IIR)數字濾波器

(2) 有限沖激響應(FIR)數字濾波器

      本設計中選擇FIR低通濾波器對音頻信號進行濾波處理。

      FIR濾波器響應(簡稱FIR)系統的單位脈沖響應h(n)為有限長序列,系統函數H(z)在有限z平面上不存在極點,其運算結構中不存在反饋支路,即沒有環路。如果h(n)的長度為N,則它的系統函數和差分方程一般具有如下形式:

clip_image002

clip_image004

      FIR濾波器的結果主要有:直接型、級聯型、線性相位型。

      設計中采用線性相位型,FIR濾波器最主要的特性就是它可以具備線性相位的特性。所謂線性相位特性,是指濾波器對不同頻率的正弦波所產生的相移和正弦波的頻率成直線關系。因此,在濾波器通帶內的信號通過濾波器后,除了由相移特性的斜率決定的延時外,可以不失真地保留通帶內的全部信號。這一點很重要,在很多的應用場合都有所需求。

      當系統的單位抽樣響應h(n)滿足下列對稱條件時,即

偶對稱條件:h(n)=h(N-1-n)0<n<N-1

奇對稱條件:h(n)=-h(N-1-n)0<n<N-1

      系統的相頻特性是線性的。其對稱中心為(N-1)/2。采用線性相位型可以比直接型少用(N-1)/2個乘法器。下圖為N為偶數和奇數的情形,a圖為N=7, b圖為N=6。

clip_image006

圖 1 N為偶數和奇數的FIR濾波器結構

3. 設計思路

      本設計主要分為兩個部分,一個是Matlab的設計驗證和音頻信號提取,另一個為Modelsim平台上基於Verilog的FIR濾波器的設計和testbench的編寫。

      Matlab的設計驗證和音頻信號提取:在MATLAB中,[y,fs,bits]=wavread('Blip',[N1 N2]);用於讀取語音,采樣值放在向量y中,fs表示采樣頻率(Hz),bits表示采樣位數。[N1 N2]表示讀取的值從N1點到N2點的值。采用此函數對WAV音頻信號進行讀取,然后對該信號進行FFT分析,再在原始的音頻信號上疊加一個6K的正弦波信號,並進行FFT分析。

      此過程中需要對疊加了噪聲信號的音頻信號寫入TXT文件作為Modelsim平台的信號源,同時將FIR的抽頭參數進行提取,用於Verilog編寫FIR濾波器。

      在Modelsim平台上,采用Verilog編寫線性相位型的FIR濾波器,然后編寫testbench代碼,testbench的主要功能是提供時鍾、復位、信號源,同時將FIR模塊的處理結果讀出並寫入到TXT文件中。

      最后將Modelsim處理的結果用Matlab進行分析,並與Matlab處理的結果進行對比。

具體流程如下圖:

QQ截圖20160229195049

圖 2 本設計的流程

 

4. 設計過程

4.1 Matlab平台

4.1.1 Matlab讀取音頻文件

     在MATLAB中,[y,fs,bits]=wavread('Blip',[N1 N2]);用於讀取語音,采樣值放在向量y中,fs表示采樣頻率(Hz),bits表示采樣位數。[N1 N2]表示讀取的值從N1點到N2點的值。

     采樣頻率為100K,讀取點數為4096個信號。

clip_image010

4.1.2 疊加噪聲信號

      疊加一個頻率為6K,點數為4096,幅值為0.003的正弦波,並對疊加前后的信號進行FFT分析。

clip_image012

      由於讀取出來的音頻信號幅值很小,由於FPGA處理整數比較方便,所以需要將疊加的噪聲的音頻信號進行放大,然后將負數轉為正整數,最后寫入到TXT文件中。

clip_image014

寫入的TXT文件如下:

clip_image016

圖 3 音頻信號的TXT文件

       同時,為了將此信號源作為FPGA內部的信號源,還需要將信號數據寫入到MIF文件中,然后調用一個ROM模塊,存放此數據。在Matlab中將語音信號數據寫入MIF文件的代碼如下:

clip_image018

產生的MIF文件數據如下:

clip_image020

圖 4 MIF文件

4.1.3 FIR濾波

       本設計中采用的FIR濾波器為8階,采樣頻率為100K,截至頻率為6K。

       在Matlab中采用fir1函數提取抽頭系統,然后將抽頭系數和帶噪聲的音頻信號進行卷積,然后對FIR處理的結果進行FFT分析。

clip_image022

提取抽頭系數,系數如下:

clip_image024

      由於提取的系數為浮點數,所以需要對系數進行移位變換,作為整數用於FPGA設計的FIR濾波器中,然后最后再將處理的結果進行反向移位變換,得取正確的結果。

轉換后的系數如下:

clip_image026

4.1.4 分析濾波效果

      將疊加噪聲前后、FIR處理后的信號進行FFT分析,並顯示出來進行對比:

clip_image028

4.1

4.2 Modelsim與QuartusII平台

4.2.1 FIR模塊的編寫

       本設計中FIR模塊主要分為信號源模塊和FIR濾波器模塊,信號源模塊采用ROM存儲帶有噪聲信號的語音信號,存儲的位寬為8bit,深度為4096。由於采用Altera的FPGA中內嵌有一定數量的M4K塊,所以可以直接調用這些模塊用於存儲信號。

ROM模塊中MIF文件存儲的信號數據如下:

clip_image030

圖 5 ROM模塊中的數據

      采用線性相位型結構的FIR濾波器進行設計,由此可以將乘法器的個數減少一半,本設計中采用4個乘法器,由於FPGA中內嵌了一定數量的硬件乘法器,由此可以直接調用這些乘法器將抽頭參數和信號數據進行乘法運算,以減少邏輯單元的調用和減少一定的延遲。

clip_image032

      抽頭參數分別為19、65、170、256,是通過將Matlab輸出的參數左移10位得到的。

濾波器的結構如下:

clip_image034

由於抽頭系數左移了10位,所以在得到最終處理結果后,需要將結果右移10位,如下所示:

clip_image036

FIR模塊頂層設計如下:

clip_image038

4.2.2 Testbench編寫

      Testbench的主要的功能是讀取TXT文件中的信號數據,作為FIR濾波模塊的信號源,同時將為FIR濾波模塊提供時鍾和復位信號,最后將FIR濾波模塊處理后數據寫入到TXT文件中。

clip_image040

clip_image042

5 分析驗證

5.1 QUARTUS II設計

在設計完成各個模塊和頂層封裝之后,通過編譯綜合。

clip_image044

圖 6 綜合結果

整體設計的RTL視圖如下:

clip_image046

圖 7 RTL視圖

其中,clk信號為100K,同時也是FIR模塊的采樣信號。

5.2 Modelsim仿真結果分析

      Modelsim仿真結果如下,其中data_in為從txt文件讀入的疊加了噪聲的語音信號,fir_data為經過FIR濾波處理后輸出的信號,由於截至頻率為6K,從中可以看出,大部分的噪聲信號已被濾除,為了更好的分析處理的結果,將FIR處理的結果寫入到TXT文件中,然后用Matlab進行FFT分析。

clip_image048

圖 8 Modelsim仿真波形

FIR處理輸出的結果如下:

clip_image050

圖 9 Modelsim仿真結果數據輸出

5.3 Matlab設計分析驗證

       采用Matlab將原始語音信號、疊加噪聲的語音信號、FIR濾波后的信號分別顯示如下,從下圖可以看出,采用8階的FIR濾波器可以較好的將噪聲信號濾除掉。

clip_image052

圖 10 時域圖對比

         為了更好的地分析信號的頻譜,原始語音信號、疊加噪聲的語音信號、FIR濾波后的信號的頻譜如下,對比可以更加確定地得出,通過FIR濾波,6K以上的信號基本被濾除掉了,由於10K的噪聲信號的頻率功能相對較大,FIR濾波器的階數比較少,10K的噪聲信號還是未能完全濾除,不過這個可以通過增加階數將其完全濾除。

clip_image054

圖 11 頻譜對比

       通過Matlab將Modelsim仿真結果的數據讀出,並將處理后的語音信號進行顯示,並與原始語音信號對比。

clip_image056

圖 12 原始語音、Modelsim仿真的語音信號對比

        將原始語音信號、采用Matlab進行 FIR濾波后的信號、Modelsim仿真處理后的語音信號進行FFT分析、對比,結果如下:

clip_image058

圖 13 疊加噪聲的信號與Modelsim仿真后信號頻譜對比

clip_image060

圖 14 Matlab濾波效果與Modelsim仿真效果對比

       通過以上的分析、驗證,采用Verilog設計的FIR濾波器能夠實現預定的功能,能過將6K以上的噪聲信號基本濾除掉,由於10K的噪聲信號幅值較大,所以要完全濾波可以通過增加FIR濾波器的階數。

大西瓜FPGA-->https://daxiguafpga.taobao.com

博客資料、代碼、圖片、文字等屬大西瓜FPGA所有,切勿用於商業! 若引用資料、代碼、圖片、文字等等請注明出處,謝謝!

每日推送不同科技解讀,原創深耕解讀當下科技,敬請關注“科乎”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM