日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于FPGA的音频信号的FIR滤波(Matlab+Modelsim验证)

發(fā)布時(shí)間:2023/12/29 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于FPGA的音频信号的FIR滤波(Matlab+Modelsim验证) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

1 設(shè)計(jì)內(nèi)容

??????? 本設(shè)計(jì)是基于FPGA的音頻信號(hào)FIR低通濾波,根據(jù)要求,采用Matlab對(duì)WAV音頻文件進(jìn)行讀取和添加噪聲信號(hào)、FFT分析、FIR濾波處理,并分析濾波的效果。通過Matlab的分析驗(yàn)證濾波效果后,將疊加噪聲信號(hào)的音頻信號(hào)輸出到txt文件里。然后使用Matlab語言編寫濾波器模塊和測(cè)試模塊,通過Modelsim軟件讀取txt文件的數(shù)據(jù),將數(shù)據(jù)送入濾波模塊,最后將濾波的結(jié)果輸出到txt文件里,最后用Matlab將處理的結(jié)果從txt文件讀出、顯示、FFT分析用Verilog設(shè)計(jì)的FIR濾波器的處理效果。

?

2 設(shè)計(jì)原理

2.1 語音信號(hào)概述

?????? 語言是人類創(chuàng)造的,是人類區(qū)別于其他地球生命的本質(zhì)特征之一。人類用語言交流的過程可以看成是一個(gè)復(fù)雜的通信過程,為了獲取便于分析和處理的語音信源,必須將在空氣中傳播的聲波轉(zhuǎn)變?yōu)榘Z音信息并且記載著聲波物理性質(zhì)的模擬(或數(shù)字)電信號(hào),即語音信號(hào),因此語音信號(hào)就成為語音的表現(xiàn)形式或載體。

?????? 語音學(xué)和數(shù)字信號(hào)處理的交叉結(jié)合便形成了語音信號(hào)處理。語音信號(hào)處理是建立在語音學(xué)和數(shù)字信號(hào)處理基礎(chǔ)之上的,對(duì)語音信號(hào)模型進(jìn)行分析、存儲(chǔ)、傳輸、識(shí)別和合成等方面的一門綜合性學(xué)科。

?????? 本設(shè)計(jì)中,從WAV音頻文件用Matlab讀取音頻信號(hào)進(jìn)行分析、處理。

2.2 數(shù)字濾波器原理

?????? 若濾波器的輸入、輸出都是離散時(shí)間信號(hào),那么該濾波器的單位沖激響應(yīng)h(n)也必然是離散的,這種濾波器稱為數(shù)字濾波器(DF)。數(shù)字濾波器實(shí)質(zhì)上是一種運(yùn)算過程——用來描述離散系統(tǒng)輸入與輸出關(guān)系的差分方程的計(jì)算或卷積計(jì)算。數(shù)字濾波器的實(shí)質(zhì)是用一有限精度算法實(shí)現(xiàn)的離散時(shí)間線性時(shí)不變系統(tǒng),以完成對(duì)信號(hào)進(jìn)行濾波處理的過程。它是數(shù)字信號(hào)處理的一個(gè)重要分支,具有穩(wěn)定性好、精度高、靈活性強(qiáng)、體積小、質(zhì)量輕等諸多優(yōu)點(diǎn)。

????? 根據(jù)單位沖激響應(yīng)h(n)的時(shí)間特性分類

(1) 無限沖激響應(yīng)(IIR)數(shù)字濾波器

(2) 有限沖激響應(yīng)(FIR)數(shù)字濾波器

????? 本設(shè)計(jì)中選擇FIR低通濾波器對(duì)音頻信號(hào)進(jìn)行濾波處理。

????? FIR濾波器響應(yīng)(簡(jiǎn)稱FIR)系統(tǒng)的單位脈沖響應(yīng)h(n)為有限長(zhǎng)序列,系統(tǒng)函數(shù)H(z)在有限z平面上不存在極點(diǎn),其運(yùn)算結(jié)構(gòu)中不存在反饋支路,即沒有環(huán)路。如果h(n)的長(zhǎng)度為N,則它的系統(tǒng)函數(shù)和差分方程一般具有如下形式:

????? FIR濾波器的結(jié)果主要有:直接型、級(jí)聯(lián)型、線性相位型。

????? 設(shè)計(jì)中采用線性相位型,FIR濾波器最主要的特性就是它可以具備線性相位的特性。所謂線性相位特性,是指濾波器對(duì)不同頻率的正弦波所產(chǎn)生的相移和正弦波的頻率成直線關(guān)系。因此,在濾波器通帶內(nèi)的信號(hào)通過濾波器后,除了由相移特性的斜率決定的延時(shí)外,可以不失真地保留通帶內(nèi)的全部信號(hào)。這一點(diǎn)很重要,在很多的應(yīng)用場(chǎng)合都有所需求。

????? 當(dāng)系統(tǒng)的單位抽樣響應(yīng)h(n)滿足下列對(duì)稱條件時(shí),即

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

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

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

圖 1 N為偶數(shù)和奇數(shù)的FIR濾波器結(jié)構(gòu)

3. 設(shè)計(jì)思路

????? 本設(shè)計(jì)主要分為兩個(gè)部分,一個(gè)是Matlab的設(shè)計(jì)驗(yàn)證和音頻信號(hào)提取,另一個(gè)為Modelsim平臺(tái)上基于Verilog的FIR濾波器的設(shè)計(jì)和testbench的編寫。

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

????? 此過程中需要對(duì)疊加了噪聲信號(hào)的音頻信號(hào)寫入TXT文件作為Modelsim平臺(tái)的信號(hào)源,同時(shí)將FIR的抽頭參數(shù)進(jìn)行提取,用于Verilog編寫FIR濾波器。

????? 在Modelsim平臺(tái)上,采用Verilog編寫線性相位型的FIR濾波器,然后編寫testbench代碼,testbench的主要功能是提供時(shí)鐘、復(fù)位、信號(hào)源,同時(shí)將FIR模塊的處理結(jié)果讀出并寫入到TXT文件中。

????? 最后將Modelsim處理的結(jié)果用Matlab進(jìn)行分析,并與Matlab處理的結(jié)果進(jìn)行對(duì)比。

具體流程如下圖:

圖 2 本設(shè)計(jì)的流程

?

4. 設(shè)計(jì)過程

4.1 Matlab平臺(tái)

4.1.1 Matlab讀取音頻文件

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

???? 采樣頻率為100K,讀取點(diǎn)數(shù)為4096個(gè)信號(hào)。

4.1.2 疊加噪聲信號(hào)

????? 疊加一個(gè)頻率為6K,點(diǎn)數(shù)為4096,幅值為0.003的正弦波,并對(duì)疊加前后的信號(hào)進(jìn)行FFT分析。

????? 由于讀取出來的音頻信號(hào)幅值很小,由于FPGA處理整數(shù)比較方便,所以需要將疊加的噪聲的音頻信號(hào)進(jìn)行放大,然后將負(fù)數(shù)轉(zhuǎn)為正整數(shù),最后寫入到TXT文件中。

寫入的TXT文件如下:

圖 3 音頻信號(hào)的TXT文件

?????? 同時(shí),為了將此信號(hào)源作為FPGA內(nèi)部的信號(hào)源,還需要將信號(hào)數(shù)據(jù)寫入到MIF文件中,然后調(diào)用一個(gè)ROM模塊,存放此數(shù)據(jù)。在Matlab中將語音信號(hào)數(shù)據(jù)寫入MIF文件的代碼如下:

產(chǎn)生的MIF文件數(shù)據(jù)如下:

圖 4 MIF文件

4.1.3 FIR濾波

?????? 本設(shè)計(jì)中采用的FIR濾波器為8階,采樣頻率為100K,截至頻率為6K。

?????? 在Matlab中采用fir1函數(shù)提取抽頭系統(tǒng),然后將抽頭系數(shù)和帶噪聲的音頻信號(hào)進(jìn)行卷積,然后對(duì)FIR處理的結(jié)果進(jìn)行FFT分析。

提取抽頭系數(shù),系數(shù)如下:

????? 由于提取的系數(shù)為浮點(diǎn)數(shù),所以需要對(duì)系數(shù)進(jìn)行移位變換,作為整數(shù)用于FPGA設(shè)計(jì)的FIR濾波器中,然后最后再將處理的結(jié)果進(jìn)行反向移位變換,得取正確的結(jié)果。

轉(zhuǎn)換后的系數(shù)如下:

4.1.4 分析濾波效果

????? 將疊加噪聲前后、FIR處理后的信號(hào)進(jìn)行FFT分析,并顯示出來進(jìn)行對(duì)比:

4.1

4.2 Modelsim與QuartusII平臺(tái)

4.2.1 FIR模塊的編寫

?????? 本設(shè)計(jì)中FIR模塊主要分為信號(hào)源模塊和FIR濾波器模塊,信號(hào)源模塊采用ROM存儲(chǔ)帶有噪聲信號(hào)的語音信號(hào),存儲(chǔ)的位寬為8bit,深度為4096。由于采用Altera的FPGA中內(nèi)嵌有一定數(shù)量的M4K塊,所以可以直接調(diào)用這些模塊用于存儲(chǔ)信號(hào)。

ROM模塊中MIF文件存儲(chǔ)的信號(hào)數(shù)據(jù)如下:

圖 5 ROM模塊中的數(shù)據(jù)

????? 采用線性相位型結(jié)構(gòu)的FIR濾波器進(jìn)行設(shè)計(jì),由此可以將乘法器的個(gè)數(shù)減少一半,本設(shè)計(jì)中采用4個(gè)乘法器,由于FPGA中內(nèi)嵌了一定數(shù)量的硬件乘法器,由此可以直接調(diào)用這些乘法器將抽頭參數(shù)和信號(hào)數(shù)據(jù)進(jìn)行乘法運(yùn)算,以減少邏輯單元的調(diào)用和減少一定的延遲。

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

濾波器的結(jié)構(gòu)如下:

由于抽頭系數(shù)左移了10位,所以在得到最終處理結(jié)果后,需要將結(jié)果右移10位,如下所示:

FIR模塊頂層設(shè)計(jì)如下:

4.2.2 Testbench編寫

????? Testbench的主要的功能是讀取TXT文件中的信號(hào)數(shù)據(jù),作為FIR濾波模塊的信號(hào)源,同時(shí)將為FIR濾波模塊提供時(shí)鐘和復(fù)位信號(hào),最后將FIR濾波模塊處理后數(shù)據(jù)寫入到TXT文件中。

5 分析驗(yàn)證

5.1 QUARTUS II設(shè)計(jì)

在設(shè)計(jì)完成各個(gè)模塊和頂層封裝之后,通過編譯綜合。

圖 6 綜合結(jié)果

整體設(shè)計(jì)的RTL視圖如下:

圖 7 RTL視圖

其中,clk信號(hào)為100K,同時(shí)也是FIR模塊的采樣信號(hào)。

5.2 Modelsim仿真結(jié)果分析

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

圖 8 Modelsim仿真波形

FIR處理輸出的結(jié)果如下:

圖 9 Modelsim仿真結(jié)果數(shù)據(jù)輸出

5.3 Matlab設(shè)計(jì)分析驗(yàn)證

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

圖 10 時(shí)域圖對(duì)比

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

圖 11 頻譜對(duì)比

?????? 通過Matlab將Modelsim仿真結(jié)果的數(shù)據(jù)讀出,并將處理后的語音信號(hào)進(jìn)行顯示,并與原始語音信號(hào)對(duì)比。

圖 12 原始語音、Modelsim仿真的語音信號(hào)對(duì)比

??????? 將原始語音信號(hào)、采用Matlab進(jìn)行 FIR濾波后的信號(hào)、Modelsim仿真處理后的語音信號(hào)進(jìn)行FFT分析、對(duì)比,結(jié)果如下:

圖 13 疊加噪聲的信號(hào)與Modelsim仿真后信號(hào)頻譜對(duì)比

圖 14 Matlab濾波效果與Modelsim仿真效果對(duì)比

?????? 通過以上的分析、驗(yàn)證,采用Verilog設(shè)計(jì)的FIR濾波器能夠?qū)崿F(xiàn)預(yù)定的功能,能過將6K以上的噪聲信號(hào)基本濾除掉,由于10K的噪聲信號(hào)幅值較大,所以要完全濾波可以通過增加FIR濾波器的階數(shù)。

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

博客資料、代碼、圖片、文字等屬大西瓜FPGA所有,切勿用于商業(yè)! 若引用資料、代碼、圖片、文字等等請(qǐng)注明出處,謝謝!

每日推送不同科技解讀,原創(chuàng)深耕解讀當(dāng)下科技,敬請(qǐng)關(guān)注“科乎”。

轉(zhuǎn)載于:https://www.cnblogs.com/logic3/p/5228764.html

總結(jié)

以上是生活随笔為你收集整理的基于FPGA的音频信号的FIR滤波(Matlab+Modelsim验证)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。