加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 1 緒?論
    • 2 FIR數(shù)字濾波器的設(shè)計(jì)方法
    • 3?濾波器仿真濾波
    • 4 總結(jié)與展望
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于FPGA的FIR數(shù)字濾波器設(shè)計(jì)

04/28 11:40
4178
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

大俠好,歡迎來(lái)到FPGA技術(shù)江湖,江湖偌大,相見(jiàn)即是緣分。大俠可以關(guān)注FPGA技術(shù)江湖,在“闖蕩江湖”、"行俠仗義"欄里獲取其他感興趣的資源,或者一起煮酒言歡。

今天給大俠帶來(lái)在畢業(yè)設(shè)計(jì)之基于FPGA的FIR數(shù)字濾波器設(shè)計(jì),僅供大俠參考,話不多說(shuō),上貨。

本篇介紹基于FPGA的FIR數(shù)字濾波器設(shè)計(jì),針對(duì)畢業(yè)設(shè)計(jì)要做的基本工作有如下幾點(diǎn):

(一)掌握有限沖擊響應(yīng)FIR(Finite Impulse Response, FIR)的基本結(jié)構(gòu),研究現(xiàn)有的實(shí)現(xiàn)方法,對(duì)各種方案和步驟進(jìn)行比較和論證分析,然后針對(duì)目前FIR數(shù)字濾波器需要的特點(diǎn),速度快和硬件規(guī)模小,作為指導(dǎo)思想進(jìn)行設(shè)計(jì)計(jì)算。

(二)基于硬件FPGA的特點(diǎn),利用Matlab軟件以及窗函數(shù)法設(shè)計(jì)濾波器。對(duì)整個(gè)FPGA元件,計(jì)劃采用模塊化、層次化設(shè)計(jì)思想,從而對(duì)各個(gè)部分功能進(jìn)行更為詳細(xì)的理解和分工設(shè)計(jì),最終FIR數(shù)字濾波器的設(shè)計(jì)語(yǔ)言選擇 Verilog HDL硬件編程語(yǔ)言。

(三)設(shè)計(jì)中的軟件仿真使用開(kāi)發(fā)軟件Quartus II,并且利用Matlab工具進(jìn)行對(duì)比仿真,在仿真的過(guò)程中,對(duì)比證明,本設(shè)計(jì)的濾波器的技術(shù)指標(biāo)已經(jīng)全部達(dá)標(biāo)。

1 緒?論

1.1 本課題研究意義

在現(xiàn)代通信信號(hào)處理領(lǐng)域中,隨著各種精密計(jì)算和快速計(jì)算的發(fā)展對(duì)信號(hào)處理的實(shí)時(shí)性、快速性的要求越來(lái)越高。以往的模擬濾波器無(wú)法克服電壓漂移、溫度漂移和噪聲等問(wèn)題,從而帶來(lái)了許多誤差和不穩(wěn)定因素。而數(shù)字濾波器具有穩(wěn)定性高、精度高、設(shè)計(jì)靈活、實(shí)現(xiàn)方便等突出優(yōu)點(diǎn)。

FPGA元器件在高速并行處理數(shù)據(jù)傳輸中有獨(dú)特優(yōu)勢(shì),F(xiàn)PGA正在前端信號(hào)處理中越來(lái)越多地代替ASIC和DSP。我們需要的就是這種設(shè)計(jì)周期短,功能密度高,重組時(shí)間短的元器件。本文在FPGA元器件的基礎(chǔ)上,實(shí)現(xiàn)現(xiàn)代FIR數(shù)字濾波器功能。并且研究多種快速的FIR數(shù)字濾波器的理論設(shè)計(jì)思想和程序設(shè)計(jì)方法。

1.2 國(guó)內(nèi)外研究現(xiàn)狀分析

1985年,Xilinx生產(chǎn)出了第一塊FPGA元器件,由于它有著集成度高、方便易用、開(kāi)發(fā)和上市周期短的絕對(duì)優(yōu)勢(shì),使得FPGA器件在數(shù)字設(shè)計(jì)和電子生產(chǎn)中得到迅速普及和應(yīng)用,發(fā)展?jié)摿κ志薮蟆,F(xiàn)在FPGA已經(jīng)發(fā)展到可以利用硬件乘加器、片內(nèi)儲(chǔ)存器、邏輯單元、流水處理技術(shù)等特有的硬件結(jié)構(gòu),高速完成FFT 、FIR 、復(fù)數(shù)乘加、卷積、三角函數(shù)以及矩陣運(yùn)算等數(shù)字信號(hào)處理。這樣可以完成信號(hào)處理的主要技術(shù),如中頻采樣、參數(shù)估計(jì)、自適應(yīng)濾波、脈沖壓縮、自適應(yīng)波束形成和旁瓣對(duì)消等。

1.3 研究思路

通過(guò)對(duì)目前數(shù)字濾波器的幾種實(shí)現(xiàn)方法的簡(jiǎn)單分析,本文認(rèn)為基于FPGA的數(shù)字濾波器具有許多優(yōu)點(diǎn),本文考慮到信息技術(shù)的發(fā)展對(duì)于數(shù)字濾波器的要求越來(lái)越高,而目前FIR數(shù)字濾波器的性能還不完善,于是選擇了基于FPGA的數(shù)字濾波器作為主要研究?jī)?nèi)容,通常濾波器在進(jìn)行數(shù)據(jù)處理時(shí)用到了卷積運(yùn)算,在設(shè)計(jì)中的解決這些乘法運(yùn)算的思路是將它們轉(zhuǎn)換成加減法,這是目前解決乘法運(yùn)算的主流思想。設(shè)計(jì)初期在Matlab下對(duì)濾波器原理進(jìn)行證明包括(零極點(diǎn)圖、時(shí)域和頻域分析圖等),分析FIR數(shù)字濾波器的多種理論設(shè)計(jì)思想和窗函數(shù)選擇方法,在設(shè)計(jì)后期對(duì)FIR數(shù)字濾波器的小數(shù)乘法問(wèn)題進(jìn)行單獨(dú)論證。然后對(duì)分析出來(lái)的問(wèn)題進(jìn)行論證和解決,最后在Quartus Ⅱ中進(jìn)行仿真驗(yàn)證。

1.4 相關(guān)概念說(shuō)明

數(shù)字濾波器(Digital filter)是由數(shù)字乘法器、加法器和延時(shí)單元組成的一種裝置。其功能是對(duì)輸入離散信號(hào)的數(shù)字代碼進(jìn)行運(yùn)算處理,以達(dá)到改變信號(hào)頻譜的目的。可認(rèn)為是一個(gè)離散時(shí)間系統(tǒng)按預(yù)定的算法,將輸入離散時(shí)間信號(hào)轉(zhuǎn)換為所要求的輸出離散時(shí)間信號(hào)的特定功能裝置FIR(Finite Impulse Response )由線性系統(tǒng)理論可知,在某種適度條件下,輸入到線性系統(tǒng)的一個(gè)沖擊完全可以表征系統(tǒng)。當(dāng)我們處理有限的離散數(shù)據(jù)時(shí),線形系統(tǒng)的響應(yīng)(包括對(duì)沖擊的響應(yīng))也是有限的。若線性系統(tǒng)僅是一個(gè)空間濾波器,則通過(guò)簡(jiǎn)單地觀察它對(duì)沖擊的響應(yīng),我們就可以完全確定該濾波器。通過(guò)這種方式確定的濾波器稱為有限沖擊響應(yīng)(FIR)濾波器。

圖1-1總體設(shè)計(jì)流程圖

2 FIR數(shù)字濾波器的設(shè)計(jì)方法

2.1 理論部分

2.1.1? 引言

數(shù)字濾波器的功能一般是用來(lái)變換時(shí)域或者頻域中某些要求信號(hào)的屬性,濾除信號(hào)中某一部分頻率分量。經(jīng)過(guò)數(shù)字濾波器的信號(hào)是讓其頻譜與數(shù)字濾波器的頻率響應(yīng)相乘從而得出新的結(jié)果。經(jīng)過(guò)一個(gè)線性卷積過(guò)程,從時(shí)域上輸入信號(hào)與濾波器的單位沖擊響應(yīng)作一個(gè)卷積和。下面是卷積定義式:

(1)

LTI數(shù)字濾波器在一般情況下分為有限脈沖響應(yīng)(Finite impulse response)和無(wú)限脈沖響應(yīng)(Infinite impulse response),F(xiàn)IR數(shù)字濾波器的設(shè)計(jì)方法和IIR濾波器的設(shè)計(jì)方法有很大的差別。因?yàn)槠湓O(shè)計(jì)方向是選擇有限長(zhǎng)度的,使頻率響應(yīng)函數(shù)滿足指標(biāo)。數(shù)字濾波器正在用直接的電子計(jì)算機(jī)規(guī)范和算法進(jìn)行分析的方式來(lái)逐漸代替?zhèn)鹘y(tǒng)的模擬濾波器的RLC元器件和放大電路。

2.1.2? FIR數(shù)字濾波器的基礎(chǔ)

首先介紹FIR數(shù)字濾波器基本原理,在如下表格中對(duì)FIR和IIR數(shù)字濾波器進(jìn)行了全面的比較:

表2-1兩種濾波器特點(diǎn)比較分析

 

通常情況下一般數(shù)字濾波器的N階FIR數(shù)字濾波器基于輸入信號(hào)x(n)的表達(dá)式為:

??(2)

這個(gè)公式給我們了一個(gè)非常明了的直接型網(wǎng)絡(luò)結(jié)構(gòu),該結(jié)構(gòu)表現(xiàn)出N個(gè)乘法器,每次采樣y(n)的內(nèi)容是n次乘法和n-1次加法,然后做乘累加之和。如圖2-1所示:

 

圖2-1 FIR濾波器直接型網(wǎng)絡(luò)結(jié)構(gòu)

從DSP的介紹中,第一類線性相位對(duì)h(n)的約束條件:

?(3)

(4)

由公式(3),(4)我們可以推出:

?(5)

移相并利用三角公式化簡(jiǎn)得到:

?(6)

從數(shù)字信號(hào)處理學(xué)科中知道函數(shù)關(guān)于求和區(qū)間的中心(N-1)/2奇對(duì)稱,于是我們要求和h(n)滿足如下條件:

其中對(duì)應(yīng)的有:

(7)

圖2-2 線性相位FIR濾波器結(jié)構(gòu)

若h(n)呈現(xiàn)對(duì)稱特性,即此具有線性相位的濾波器是FIR數(shù)字濾波器。濾波器的基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu)可以相互進(jìn)行轉(zhuǎn)換。

在前面本篇已經(jīng)討論過(guò), FPGA的實(shí)現(xiàn)中將對(duì)各種方法進(jìn)行比較,找出最優(yōu)設(shè)計(jì)方式。從而達(dá)到減少資源占有和提高系統(tǒng)作業(yè)速度的目的,更好的體現(xiàn)實(shí)時(shí)性的數(shù)字濾波器優(yōu)勢(shì)。

2.1.3? 數(shù)字濾波器的設(shè)計(jì)原理

在數(shù)字信號(hào)處理技術(shù)的研究中,一般是使用的三種設(shè)計(jì)方法:窗函數(shù)法,F(xiàn)DATool直接設(shè)計(jì)法,程序編譯法。本文首先使用窗函數(shù)和Matlab軟件共同進(jìn)行設(shè)計(jì)。

隨著技術(shù)的不斷發(fā)展,Matlab軟件能給設(shè)計(jì)者帶來(lái)的數(shù)字信號(hào)處理工作已經(jīng)非常的完善和多樣了,設(shè)計(jì)者可以利用Matlab軟件進(jìn)行數(shù)字濾波器的設(shè)計(jì)和仿真,而且還可以用這款軟件進(jìn)行設(shè)計(jì)的優(yōu)化。數(shù)字濾波器的一般設(shè)計(jì)步驟如下:

1.指標(biāo)的確定

做任何工程或者設(shè)計(jì),設(shè)計(jì)者都必須要有一個(gè)期望的指標(biāo)用來(lái)限制設(shè)計(jì)范圍。在很多的實(shí)際應(yīng)用中,設(shè)計(jì)者常常都是使用數(shù)字濾波器做選頻的工作。因此,指標(biāo)的形式一半在頻域中給出相位響應(yīng)和幅度。相位響應(yīng)的指標(biāo)形式,一半是指系統(tǒng)在通頻帶中藥有線性相位。幅度指標(biāo):絕對(duì)指標(biāo),它給出對(duì)幅度響應(yīng)函數(shù)的要求,一般用于FIR濾波器的設(shè)計(jì)。相對(duì)指標(biāo),以分貝值的形式給出具體限制。

2.逼近目標(biāo)

設(shè)計(jì)者做高頻的時(shí)候大概都有一個(gè)模式,就是首先得到技術(shù)指標(biāo),然后利用我們的技術(shù)和工具讓我們的產(chǎn)品去逼近這個(gè)指標(biāo)。同理我們首先建立以個(gè)目標(biāo)的數(shù)字濾波器模型。一般情況下都是采用理想的數(shù)字濾波器模型,然后去逼近我們想要的目標(biāo)數(shù)字濾波器參數(shù)。

3.計(jì)算機(jī)仿真和性能優(yōu)化分析

在工作中我們發(fā)現(xiàn)通過(guò)(1)、(2)之后本文會(huì)得到以差分、系統(tǒng)函數(shù)或者沖擊響應(yīng)這三種方式描述的濾波器。這個(gè)時(shí)候設(shè)計(jì)者可以利用計(jì)算進(jìn)行仿真,在系統(tǒng)中分析技術(shù)指標(biāo)和濾波結(jié)果是否是希望得到的結(jié)果。

圖2-3各種理想數(shù)字濾波器的幅度頻率響應(yīng)

2.1.4? FIR數(shù)字濾波器的理論計(jì)算方式與參數(shù)轉(zhuǎn)換思想

在理論上掌握了FIR數(shù)字濾波器的基本原理之后,本文需要對(duì)設(shè)計(jì)思想進(jìn)行一個(gè)多方位的論證和嘗試。首先設(shè)計(jì)者設(shè)計(jì)濾波器要有一個(gè)硬性的指標(biāo),這個(gè)指標(biāo)可以是直接給出最基本的數(shù)據(jù),也有多重表現(xiàn)形式。于是我例舉兩種特殊的指標(biāo)形式然后加以解決設(shè)計(jì)。然后我們分別用2種方式來(lái)設(shè)計(jì)不同指標(biāo)的濾波器。接下來(lái)我首先用程序的方式來(lái)實(shí)現(xiàn)濾波器:

1.逼近法轉(zhuǎn)換與思想

使用remez函數(shù)設(shè)計(jì)FIR低通濾波器

設(shè)計(jì)濾波器,使逼近低通濾波特性||。

要求通帶波紋?,阻帶衰減,并用最小階數(shù)實(shí)現(xiàn)。

繪出設(shè)計(jì)的FIR數(shù)字濾波幅頻特性曲線,檢驗(yàn)設(shè)計(jì)指標(biāo)。

這個(gè)指標(biāo)我們可以以如下計(jì)算方法來(lái)得出詳細(xì)指標(biāo):

從給出的低通濾波特性||。我們可以看出設(shè)計(jì)參數(shù)f=[1/4,5/16],m=[1,0];

dev的計(jì)算根據(jù)公式:

于是有,

所以dev(1),dev(2)可以被表示出來(lái)。

2.逼近法程序描述與思想

有了這幾個(gè)參數(shù)我們現(xiàn)在就可以根據(jù)已經(jīng)設(shè)定好的格式來(lái)調(diào)用函數(shù)remezord和remez函數(shù)了,于是可得如下程序。

clear;close allfc=1/4;fs=5/16;             %輸入給定指標(biāo)Rp=3;As=60;Fs=2;f=[fc,fs];m=[1,0];            %計(jì)算remezord函數(shù)所需參數(shù)f,m,devdev=[(10^(Rp/20)-1)/(10^(Rp/20)+1),10^(-As/20)];[N,fo,mo,W]=remezord(f,m,dev,F(xiàn)s);    %確定remez函數(shù)所需參數(shù)hn=remez(N,fo,mo,W);               %調(diào)用remez函數(shù)進(jìn)行設(shè)計(jì)hw=fft(hn,512);                     %求設(shè)計(jì)出的濾波器頻率特性w=[0:511] *2/512;plot(w,20*log10(abs(hw)));grid;        %畫對(duì)數(shù)幅頻特性圖axis([0,max(w)/2,-90,5]); xlabel('w/pi');ylabel('Magnitude(dB)')line([0,0.4],[-3,-3]);                   %畫線檢驗(yàn)設(shè)計(jì)結(jié)果line([1/4,1/4],[-90,5]);line([5/16,5/16],[-90,5]);

3.仿真圖像與結(jié)果

用以上的程序我們可以得到在Matlab中的許多參數(shù)和圖像,從而進(jìn)一步分析我們的設(shè)計(jì)。首先引入程序輸出的幅頻特性圖:(如圖2-4)

圖2-4在Matlab中的程序

圖2-5程序輸出的幅頻特性

圖2-6 Impulse Response

圖2-7 Magnitude and Phase Responses

圖2-8 Phase Delay

圖2-9 Pole,Zero plot

結(jié)論:從上面程序運(yùn)行情況分析,觀察程序輸出的幅頻特性圖中橫線為-3dB,兩條豎線分別位于頻率π/4和5π/16。顯然,通帶指標(biāo)有富裕,零極點(diǎn)圖反應(yīng)出大部分零極點(diǎn)在圓內(nèi),過(guò)渡帶寬度和阻帶最小衰減剛好滿足指標(biāo)要求。

4.窗函數(shù)選擇法與規(guī)劃思想

表2-2窗函數(shù)選擇指標(biāo)

在設(shè)計(jì)指標(biāo)中沒(méi)有直接給出窗函數(shù)的,可以利用下面這個(gè)表格進(jìn)行篩選,具體方法如下:

這個(gè)表格給出了近似過(guò)渡帶寬、精確過(guò)渡帶寬和最小阻帶衰減,我們可以根據(jù)自己濾波器的參數(shù)來(lái)選擇我們的窗函數(shù),因?yàn)檫x擇不同的窗函數(shù)設(shè)計(jì)出來(lái)的濾波器生成的過(guò)渡帶寬度和阻帶最小衰減是不同的。在這里我以一個(gè)例子來(lái)說(shuō)明函數(shù)的選擇方式:

用窗函數(shù)法設(shè)計(jì)FIR帶通濾波器。指標(biāo)如下:

高端通帶截止頻率

高端阻帶截止頻率:

低端阻帶截止頻率:

低端通帶截止頻率:

通帶最大衰減??Rp=1dB

阻帶最小衰減??Rs=60dB

在這樣一個(gè)例子中,可以看到它明確的給出了Rs=60dB來(lái)設(shè)置窗函數(shù)類型和階次。表格中給出的blackman窗其濾波器阻帶最小衰減是74dB,再利用給出的其他參數(shù)計(jì)算濾波器階數(shù)。表中顯示窗口長(zhǎng)度M由過(guò)渡帶寬度B=0.8π-0.65π=0.15π決定,而B(niǎo)lackman窗設(shè)計(jì)的濾波器過(guò)渡帶寬度為12π/M,則M=12/0.15=80。又因M=N+1,所以濾波器階數(shù)N=79。

在了解了怎么選擇窗函數(shù)和計(jì)算濾波器階數(shù)之后,本論文將針對(duì)實(shí)際FIR數(shù)字濾波器進(jìn)行研究。已經(jīng)給出了設(shè)計(jì)參數(shù),下面開(kāi)始利用MATLAB程序來(lái)設(shè)計(jì)這個(gè)濾波器。

5.窗函數(shù)法程序描述與思想

程序和對(duì)應(yīng)的解釋:

%用窗函數(shù)法設(shè)計(jì)FIR帶通濾波器clear;close?all;wls=0.2*pi;wlp=0.35*pi;whp=0.65*pi;B=wlp-wls;??????????????%這里是在計(jì)算過(guò)渡帶寬N=ceil(12/0.15);????????%計(jì)算窗口長(zhǎng)度wc=[wlp/pi-6/N,whp/pi+6/N];??%設(shè)置理想帶通截止頻率hn=fir1(N-1,wc,Blackman(N)); %設(shè)計(jì)濾波器參數(shù)

6.理論計(jì)算方法總結(jié)

仿真完成之后,掌握如何去利用已有的指標(biāo)去設(shè)計(jì)一個(gè)濾波器,總的來(lái)說(shuō)就是四項(xiàng):

通過(guò)傅里葉逆變換獲得理想濾波器的單位脈沖響應(yīng)hd(n)。

分析給定參數(shù),計(jì)算出濾波器的階數(shù),頻率等等相關(guān)指標(biāo)。

把已經(jīng)有的參數(shù)用程序函數(shù)表達(dá)出來(lái),利用已經(jīng)有的各種內(nèi)置函數(shù)架設(shè)起濾波器。

參看Matlab的輸出圖形和參數(shù)是否滿足要求。

2.1.5? Matlab直接FDAtool設(shè)計(jì)方式解析

FDATool(Filter Design & Analysis Tool)是MATLAB信號(hào)處理工具箱里專用的濾波器設(shè)計(jì)分析工具,MATLAB6.0以上的版本還專門增加了濾波器設(shè)計(jì)工具箱(Filter Design Toolbox)。FDATool可以設(shè)計(jì)幾乎所有的基本的常規(guī)濾波器,包括FIR和IIR的各種設(shè)計(jì)方法。它操作簡(jiǎn)單,方便靈活。

FDATool界面總共分兩大部分,一部分是Design Filter,在界面的下半部,用來(lái)設(shè)置濾波器的設(shè)計(jì)參數(shù),另一部分則是特性區(qū),在界面的上半部分,用來(lái)顯示濾波器的各種特性。Design Filter部分主要分為:

Filter Type(濾波器類型)選項(xiàng),包括Lowpass(低通)、Highpass(高通)、Bandpass(帶通)、Bandstop(帶阻)和特殊的FIR濾波器。

Design Method(設(shè)計(jì)方法)選項(xiàng),包括IIR濾波器的Butterworth(巴特沃思)法、Chebyshev Type I(切比雪夫I型)法、 Chebyshev Type II(切比雪夫II型) 法、Elliptic(橢圓濾波器)法和FIR濾波器的Equiripple法、Least-Squares(最小乘方)法、Window(窗函數(shù))法。

Filter Order(濾波器階數(shù))選項(xiàng),定義濾波器的階數(shù),包括Specify Order(指定階數(shù))和Minimum Order(最小階數(shù))。在Specify Order中填入所要設(shè)計(jì)的濾波器的階數(shù)(N階濾波器,Specify Order=N-1),如果選擇Minimum Order則MATLAB根據(jù)所選擇的濾波器類型自動(dòng)使用最小階數(shù)。

Frenquency Specifications選項(xiàng),可以詳細(xì)定義頻帶的各參數(shù),包括采樣頻率Fs和頻帶的截止頻率。它的具體選項(xiàng)由Filter Type選項(xiàng)和Design Method選項(xiàng)決定,例如Bandpass(帶通)濾波器需要定義Fstop1(下阻帶截止頻率)、Fpass1(通帶下限截止頻率)、Fpass2(通帶上限截止頻率)、Fstop2(上阻帶截止頻率),而Lowpass(低通)濾波器只需要定義Fstop1、Fpass1。采用窗函數(shù)設(shè)計(jì)濾波器時(shí),由于過(guò)渡帶是由窗函數(shù)的類型和階數(shù)所決定的,所以只需要定義通帶截止頻率,而不必定義阻帶參數(shù)。

Magnitude Specifications選項(xiàng),可以定義幅值衰減的情況。例如設(shè)計(jì)帶通濾波器時(shí),可以定義Wstop1(頻率Fstop1處的幅值衰減)、Wpass(通帶范圍內(nèi)的幅值衰減)、Wstop2(頻率Fstop2處的幅值衰減)。當(dāng)采用窗函數(shù)設(shè)計(jì)時(shí),通帶截止頻率處的幅值衰減固定為6db,所以不必定義。

參數(shù)要求:采樣頻率fs=100Hz,通帶下限截止頻率fc1=10 Hz,通帶上限截止頻率fc2=20 Hz,過(guò)渡帶寬6 Hz,通阻帶波動(dòng)0.01,采用凱塞窗設(shè)計(jì)。

針對(duì)一個(gè)含有5Hz、15Hz和30Hz的混和正弦波信號(hào)已知濾波器的階數(shù)n=38,beta=3.4。本例中,首先在Filter Type中選擇Bandpass;在Design Method選項(xiàng)中選擇FIR Window,接著在Window選項(xiàng)中選取Kaiser,Beta值為3.4;指定Filter Order項(xiàng)中的Specify order為38;采樣頻率Fs=100Hz,截止頻率Fc1=10Hz,F(xiàn)c2=20Hz。設(shè)置完以后點(diǎn)擊窗口下方的Design Filter,在窗口上方就會(huì)看到所設(shè)計(jì)濾波器的幅頻響應(yīng),通過(guò)菜單選項(xiàng)Analysis還可以看到濾波器的相頻響應(yīng)、組延遲、脈沖響應(yīng)、階躍響應(yīng)、零極點(diǎn)配置等。設(shè)計(jì)完成后將結(jié)果保存為kaiser15.fda文件。我們可以根據(jù)FDAtool工具得到我們的濾波器相關(guān)增益。

系數(shù)轉(zhuǎn)換成二進(jìn)制碼:

若采用乘法器,用1位整數(shù)位,1位符號(hào)位,共22位定點(diǎn)二進(jìn)制數(shù)進(jìn)行運(yùn)算,負(fù)數(shù)用補(bǔ)碼表示,由此將減法運(yùn)算變成累加求和運(yùn)算。各系數(shù)可用matlab編程轉(zhuǎn)成二進(jìn)制補(bǔ)碼:

/* General type conversion for MATLAB generated C-code  */#include "tmwtypes.h"/*  * Expected path to tmwtypes.h  * D:MATLAB7externincludetmwtypes.h  */const int BL = 39;const real64_T B[39] = {-0.0008969942906957,0.001248746631882,0.007070735236406,0.009180571739749,-8.354434235897e-018,-0.01457672567709,-0.01798701306701,-0.005189936475222,0.006300913248271,-5.136773213647e-018,-0.009200436084654,0.01113207796169,0.05739543087552,0.07065284310647,-2.116878167777e-017,-0.1149210109554,-0.1575671556317,-0.05691148173912,0.1151784185022,0.2,0.1151784185022,-0.05691148173912,-0.1575671556317,-0.1149210109554,-2.116878167777e-017,0.07065284310647,0.05739543087552,0.01113207796169,-0.009200436084654,-5.136773213647e-018,0.006300913248271,-0.005189936475222,-0.01798701306701,-0.01457672567709,-8.354434235897e-018,0.009180571739749,0.007070735236406,0.001248746631882,-0.0008969942906957};

這是一個(gè)非常典型的例子,可以清晰的看到利用Matlab提供的FDAtool設(shè)計(jì)濾波器的方便與快捷。比較以上幾種類型的濾波器參數(shù),在給定的參數(shù)要求下,采用橢圓濾波器可以獲得最佳的幅頻響應(yīng)特性,具有階數(shù)低,過(guò)渡帶窄等優(yōu)點(diǎn)。雖然橢圓濾波器在通帶也會(huì)產(chǎn)生波動(dòng),但考慮到波動(dòng)處在可接受的范圍內(nèi),仍然符合設(shè)計(jì)要求。

但由直接型傳輸函數(shù)表達(dá)式來(lái)實(shí)現(xiàn)并不實(shí)用。因此如前所說(shuō),將其分解為多個(gè)二階傳輸函數(shù)的級(jí)聯(lián)形式。借助Matlab 信號(hào)處理工具箱中函tf2sos(Transfer function to second- order- section)將傳遞函數(shù)轉(zhuǎn)換為二階級(jí)聯(lián)形式。

對(duì)于是數(shù)字信號(hào),需要對(duì)先前分析計(jì)算中分解獲得的二階子系統(tǒng)的濾波器系數(shù)進(jìn)行量化,即用一個(gè)固定的字長(zhǎng)加以表示。量化過(guò)程中由于存在不同程度的量化誤差,由此會(huì)導(dǎo)致濾波器的頻率響應(yīng)出現(xiàn)偏差,嚴(yán)重時(shí)會(huì)使濾波器的極點(diǎn)移到單位圓之外,使系統(tǒng)不穩(wěn)定。為了獲得最優(yōu)的濾波器系數(shù),量化的精度也相當(dāng)重要。

2.1.6 FDAtool設(shè)計(jì)模板及設(shè)計(jì)結(jié)果圖

這里把上面的濾波器設(shè)計(jì)參數(shù)的總體圖給出,如圖2-10

圖2-10 FIR帶通濾波器總體設(shè)計(jì)參數(shù)

2.2程序分析部分

根據(jù)上述FIR低通數(shù)字濾波器的原理與濾波特性,我們?cè)谏厦娴能浖?shí)踐中已經(jīng)掌握了設(shè)計(jì)數(shù)字濾波器的方法并且成功的使用Matlab/Simulink進(jìn)行了設(shè)計(jì)和仿真。通過(guò)以上的過(guò)程我們可以導(dǎo)出一定性能的FIR濾波器頻率響應(yīng)與抽頭系數(shù),然后用Verilog HDL語(yǔ)言設(shè)計(jì)和QUARTUSⅡ仿真FIR低通數(shù)字濾波器,實(shí)現(xiàn)用軟件描述硬件的動(dòng)作及功能,應(yīng)用軟件來(lái)實(shí)現(xiàn)數(shù)字濾波器的功能和時(shí)序仿真。

2.2.1FPGA 可編程邏輯元件介紹

EDA是Electronic Design Automation的縮寫,意為電子設(shè)計(jì)自動(dòng)化,即利用計(jì)算機(jī)自動(dòng)完成電子系統(tǒng)的設(shè)計(jì)。EDA技術(shù)是以計(jì)算機(jī)和微電子技術(shù)為先導(dǎo),匯集了計(jì)算機(jī)圖形學(xué)、拓?fù)?、邏輯學(xué)、微電子工藝與結(jié)構(gòu)學(xué)和計(jì)算數(shù)學(xué)等多種計(jì)算機(jī)應(yīng)用學(xué)科最新成果的先進(jìn)技術(shù)。

它與電子技術(shù)、微電子技術(shù)的發(fā)展密切相關(guān),吸收了計(jì)算機(jī)領(lǐng)域的大多數(shù)最新研究成果,以高性能的計(jì)算機(jī)作為工作工具,在EDA軟件平臺(tái)土,根據(jù)硬件描述語(yǔ)言HDL完成的設(shè)計(jì)文件,自動(dòng)地完成邏輯編譯、化簡(jiǎn)、分割、綜合及優(yōu)化、布線、仿真,直至對(duì)于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。

可編程邏輯器PLD(Programmable Logic Devices)是ASIC(Application?Specific Integrated Circuits的一個(gè)重要分支。ASIC按制造方法又可分為全定制(Full Custom)產(chǎn)品、半定制(semi-custom)產(chǎn)品和可編程邏輯器件(PLD)。前兩種ASIC的設(shè)計(jì)和制造都離不開(kāi)器件生產(chǎn)廠家,用戶主動(dòng)性較差。隨著微電子技術(shù)的發(fā)展,設(shè)計(jì)師們更愿意自己設(shè)計(jì)專用集成電路芯片,并盡可能縮短設(shè)計(jì)周期,最好是在實(shí)驗(yàn)室里就能設(shè)計(jì)出合適的ASIC芯片,并且立即投入實(shí)際應(yīng)用之中,在使用中也能比較方便的對(duì)設(shè)計(jì)進(jìn)行修改??删幊踢壿嬈骷褪菫闈M足用戶的這一需求應(yīng)運(yùn)而生的。

使用FPGA器件設(shè)計(jì)數(shù)字電路,不僅可以簡(jiǎn)化設(shè)計(jì)過(guò)程,而且可以降低整個(gè)系統(tǒng)的體積和成本,增加系統(tǒng)的可靠性。它們無(wú)需花費(fèi)傳統(tǒng)意義下制造集成電路所需大量時(shí)間和精力,避免了投資風(fēng)險(xiǎn),成為電子器件行業(yè)中發(fā)展最快的一族。使用FPGA器件設(shè)計(jì)數(shù)字系統(tǒng)電路的主要優(yōu)點(diǎn)如下:

1.設(shè)計(jì)靈活

使用FPGA器件,可不受標(biāo)準(zhǔn)系列器件在邏輯功能上的限制。而且修改邏輯可在系統(tǒng)設(shè)計(jì)和使用過(guò)程的任一階段中進(jìn)行,并且只須通過(guò)對(duì)所用的FPGA器件進(jìn)行重新編程即可完成,給系統(tǒng)設(shè)計(jì)提供了很大的靈活性。

2.增大功能密集度

功能密集度是指在給定的空間能集成的邏輯功能數(shù)量。可編程邏輯芯片內(nèi)的組件門數(shù)高,一片F(xiàn)PGA可代替幾片、幾十片乃至幾百片中小規(guī)模的數(shù)字集成電路芯片。用FPGA器件實(shí)現(xiàn)數(shù)字系統(tǒng)時(shí)用的芯片數(shù)量少,從而減少芯片的使用數(shù)目,減少印刷線路板面積和印刷線路板數(shù)目,最終導(dǎo)致系統(tǒng)規(guī)模的全面縮減。

3.提高可靠性

減少芯片和印刷板數(shù)目,不僅能縮小系統(tǒng)規(guī)模,而且它還極大的提高了系統(tǒng)的可靠性。具有較高集成度的系統(tǒng)比用許多低集成度的標(biāo)準(zhǔn)組件設(shè)計(jì)的相同系統(tǒng)具有高得多的可靠性。使用FPGA器件減少了實(shí)現(xiàn)系統(tǒng)所需要的芯片數(shù)目,在印刷線路板上的引線以及焊點(diǎn)數(shù)量也隨之減少,所以系統(tǒng)的可靠性得以提高。

4.縮短設(shè)計(jì)周期

基于FPGA器件的可編程性和靈活性,用它來(lái)設(shè)計(jì)一個(gè)系統(tǒng)所需時(shí)間比傳統(tǒng)方法大為縮短。FPGA器件集成度高,使用時(shí)印刷線路板電路布局布線簡(jiǎn)單。同時(shí),在樣機(jī)設(shè)計(jì)成功后,由于開(kāi)發(fā)工具先進(jìn),自動(dòng)化程度高,對(duì)其進(jìn)行邏輯修改也十分簡(jiǎn)便迅速。因此,使用FPGA器件可大大縮短系統(tǒng)的設(shè)計(jì)周期,加快產(chǎn)品投放市場(chǎng)的速度,提高產(chǎn)品的競(jìng)爭(zhēng)能力。

5.工作速度快

FPGA/CPLD器件的工作速度快,一般可以達(dá)到幾百兆赫茲,遠(yuǎn)遠(yuǎn)大于DPS器件。同時(shí),使用FPGA器件后實(shí)現(xiàn)系統(tǒng)所需要的電路級(jí)數(shù)又少,因而整個(gè)系統(tǒng)的工作速度會(huì)得到提高。

6.增加系統(tǒng)的保密性能

很多FPGA器件都具有加密功能,在系統(tǒng)中廣泛的使用FPGA器件可以有效防止產(chǎn)品被他人非法仿制。

7.降低成本

使用FPGA器件實(shí)現(xiàn)數(shù)字系統(tǒng)設(shè)計(jì)時(shí),如果僅從器件本身的價(jià)格考慮,有時(shí)還看不出來(lái)它的優(yōu)勢(shì),但是影響系統(tǒng)成本的因素是多方面的,綜合考慮,使用FPGA的成本優(yōu)越性是很明顯的。首先,使用FPGA器件修改設(shè)計(jì)方便,設(shè)計(jì)周期縮短,使系統(tǒng)的研制開(kāi)發(fā)費(fèi)用降低;其次,F(xiàn)PGA器件可使印刷線路板面積和需要的插件減少,從而使系統(tǒng)的制造費(fèi)用降低;再次,使用FPGA器件能使系統(tǒng)的可靠性提高,維修工作量減少,進(jìn)而使系統(tǒng)的維修服務(wù)費(fèi)用降低??傊?,使用FPGA器件進(jìn)行系統(tǒng)設(shè)計(jì)能節(jié)約成本。

2.2.2 QuartusⅡ及Verilog HDL介紹

Quartus II 是 Intel 公司的綜合性開(kāi)發(fā)軟件,支持原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多種設(shè)計(jì)輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件配置的完整PLD設(shè)計(jì)流程。

Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl腳本完成設(shè)計(jì)流程外,提供了完善的用戶圖形界面設(shè)計(jì)方式。具有運(yùn)行速度快,界面統(tǒng)一,功能集中,易學(xué)易用等特點(diǎn)。

Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫(kù),使用戶可以充分利用成熟的模塊,簡(jiǎn)化了設(shè)計(jì)的復(fù)雜性、加快了設(shè)計(jì)速度。對(duì)第三方EDA工具的良好支持也使用戶可以在設(shè)計(jì)流程的各個(gè)階段使用熟悉的第三方EDA工具。

此外,Quartus II 通過(guò)和 DSP Builder工具 與 Matlab/Simulink相結(jié)合,可以方便地實(shí)現(xiàn)各種DSP應(yīng)用系統(tǒng);支持Altera的片上可編程系統(tǒng)(SOPC)開(kāi)發(fā),集系統(tǒng)級(jí)設(shè)計(jì)、嵌入式軟件開(kāi)發(fā)、可編程邏輯設(shè)計(jì)于一體,是一種綜合性的開(kāi)發(fā)平臺(tái)。

Maxplus II 作為Altera的上一代PLD設(shè)計(jì)軟件,由于其出色的易用性而得到了廣泛的應(yīng)用。目前 Altera 已經(jīng)停止了對(duì)Maxplus II 的更新支持,Quartus II 與之相比不僅僅是支持器件類型的豐富和圖形界面的改變。Altera在Quartus II 中包含了許多諸如SignalTap II、Chip Editor和 RTL Viewer 的設(shè)計(jì)輔助工具,集成了SOPC和HardCopy設(shè)計(jì)流程,并且繼承了Maxplus II 友好的圖形界面及簡(jiǎn)便的使用方法。

Altera Quartus II 作為一種可編程邏輯的設(shè)計(jì)環(huán)境, 由于其強(qiáng)大的設(shè)計(jì)能力和直觀易用的接口,越來(lái)越受到數(shù)字系統(tǒng)設(shè)計(jì)者的歡迎。

Verilog HDL是目前應(yīng)用最為廣泛的硬件描述語(yǔ)言。Verilog HDL可以用來(lái)進(jìn)行各種層次的邏輯設(shè)計(jì),也可以進(jìn)行數(shù)字系統(tǒng)的邏輯綜合,仿真驗(yàn)證和時(shí)序分析等。該語(yǔ)言適合算法級(jí),寄存器級(jí),邏輯級(jí),門級(jí)和版圖級(jí)等各個(gè)層次的設(shè)計(jì)和描述。Verilog HDL進(jìn)行設(shè)計(jì)最大的優(yōu)點(diǎn)是其工藝無(wú)關(guān)性。這使得我們?cè)诠δ茉O(shè)計(jì),邏輯驗(yàn)證階段可以不必過(guò)多考慮門級(jí)及工藝實(shí)現(xiàn)的具體細(xì)節(jié),只需根據(jù)系統(tǒng)設(shè)計(jì)的要求施加不同的約束條件,即可設(shè)計(jì)出實(shí)際電路。VerilogHDL是一種硬件描述語(yǔ)言(hardware description language),為了制作數(shù)字電路而用來(lái)描述ASIC和FPGA的設(shè)計(jì)之用。VerilogHDL 的設(shè)計(jì)者想要以 C 編程語(yǔ)言為基礎(chǔ)設(shè)計(jì)一種語(yǔ)言,可以使工程師比較容易學(xué)習(xí)。

2.2.3實(shí)際濾波器程序設(shè)計(jì)(11階FIR數(shù)字濾波器)

FPGA實(shí)現(xiàn)FIR濾波器,首先進(jìn)行指標(biāo)選定和Matlab軟件參數(shù)仿真,然后執(zhí)行基于Verilog方法的硬件實(shí)現(xiàn)中用移位方法代替了乘法運(yùn)算。

表2-3設(shè)計(jì)指標(biāo)要求

根據(jù)以上指標(biāo),利用MATLAB中的FIR濾波器系數(shù)設(shè)計(jì)命令fir1(10,0.85)所設(shè)計(jì)濾波器的系數(shù)。

表2-4 Matlab中導(dǎo)出的濾波器系數(shù)

MATLAB軟件仿真的濾波器的抽頭系數(shù)及其幅度頻響特性如下圖2-11所示。

圖2-11 11階FIR濾波器的抽頭系數(shù)和幅頻特性曲線

可見(jiàn)抽頭系數(shù)是奇對(duì)稱的,即:

,

。

FIR濾波器采用對(duì)稱結(jié)構(gòu),每個(gè)抽頭的輸出分別乘以相應(yīng)加權(quán)的二進(jìn)制值,再將結(jié)果相加。同時(shí),利用濾波器系數(shù)的及對(duì)稱的特性,對(duì)輸入信號(hào)?進(jìn)行如下等效:

,

。

2.2.4.VerilogHDL的實(shí)現(xiàn)

這個(gè)方法的實(shí)現(xiàn)中,使用了移位代替乘法運(yùn)算來(lái)實(shí)現(xiàn)濾波器乘加的方法。由于濾波器系數(shù)都是小數(shù),所以我們先左移7位(即放大128倍),再用相應(yīng)的移位來(lái)近似這些系數(shù),最后經(jīng)過(guò)乘加運(yùn)算得到結(jié)果,對(duì)這個(gè)結(jié)果再右移7位(即縮小128倍)即可得出正確的結(jié)果。各個(gè)系數(shù)的移位情況如下:其中2表示左移1位,1表示不移位,0.5表示右移1位,其他依次類推:

128×h(0)=128×0.036=0.4608=0.5-0.03125

128×h(1)=128×0.0127=1.6256=1+0.5+0.125

128×h(2)=128×0.0417=5.3376=4+1+0.25+0.625+0.03125

128×h(3)=128×0.0878=11.2384=8+4-1+0.25

128×h(4)=128×0.1318=16.8704=16+1-0.125

128×h(5)=128×0.8500=108.800=128-16-4+0.25+0.0625

這樣,我們就可以把這個(gè)11階FIR數(shù)字濾波器的輸出用一下的算式得到

表2-5 Verilog方法設(shè)計(jì)FIR的實(shí)驗(yàn)數(shù)據(jù)

 

圖 2-12系數(shù)放大后求SUM

計(jì)算得到結(jié)果后再將sum右移7位,即可得到正確結(jié)果。程序的功能仿真結(jié)果如下圖2-12所示。

圖2-13功能仿真

由上圖2-12可以看出,tap0到tap10是輸入x的依次延時(shí)1個(gè)時(shí)鐘周期,結(jié)果sum輸出相對(duì)于輸入x延遲了2個(gè)時(shí)鐘周期,y輸出相對(duì)于sum輸出延遲了1個(gè)時(shí)鐘周期,這和程序設(shè)計(jì)相符合。同時(shí),對(duì)比程序運(yùn)行結(jié)果和MATLAB的計(jì)算結(jié)果(如章節(jié)開(kāi)頭表格所示),可知,二者結(jié)果是一致的,其中個(gè)別數(shù)據(jù)的小誤差是由于移位取代小數(shù)乘法運(yùn)算帶來(lái)的誤差。因此,程序設(shè)計(jì)是正確的。

于是,根據(jù)以上所有思想我們可以得出以下11階FIR數(shù)字濾波器的Verilog程序如下:

module firv2(clk, x, y); input clk;?input?[7:0]?x;?output?[25:0]?y; reg [26:0] y; reg[7:0] x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16; wire[21:0] acc1,acc2,acc3,acc4,acc5,acc6,acc7,acc8,acc9,acc10,acc11,acc12,acc13,acc14,acc15,acc16,acc17;  reg [8:0]sxin[0:32]; reg [5:0]i,k; reg [8:0]xx[16:0];  parameter   c0=-21,             c1=-8,             c2= 22,             c3=34,             c4=6,             c5=-34,             c6=-31,             c7=32,             c8=87,             c9=32,             c10=-154,             c11=-321,             c12=-217,             c13=321,             c14=1185,             c15=1996,             c16=2328;                 always @ (posedge clk)    begin      xx[16]<=sxin[16] ;     for(i=0;i<16;i=i+1)     xx[i]<=sxin[i]+sxin[32-i] ;     for(k=32;k>0;k=k-1)?????sxin[k]<=sxin[k-1];??????sxin[0]<={x[7],x};    end    mult13_8 uut0(clk,c0,xx[0],acc1);   mult13_8 uut1(clk,c1,xx[1],acc2);  mult13_8 uut2(clk,c2,xx[2],acc3);  mult13_8 uut3(clk,c3,xx[3],acc4);  mult13_8 uut4(clk,c4,xx[4],acc5);   mult13_8 uut5(clk,c5,xx[5],acc6);  mult13_8 uut6(clk,c6,xx[6],acc7);  mult13_8 uut7(clk,c7,xx[7],acc8);  mult13_8 uut8(clk,c8,xx[8],acc9);   mult13_8 uut9(clk,c9,xx[9],acc10);  mult13_8 uut10(clk,c10,xx[10],acc11);  mult13_8 uut11(clk,c11,xx[11],acc12);  mult13_8 uut12(clk,c12,xx[12],acc13);   mult13_8 uut13(clk,c13,xx[13],acc14);  mult13_8 uut14(clk,c14,xx[14],acc15);     mult13_8 uut15(clk,c15,xx[15],acc16);    mult13_8 uut16(clk,c16,xx[16],acc17); 
  always @(posedge clk)    begin      y<={acc16[1],acc16[1],acc16[1],acc16[1],acc16[1],acc16}+{acc17[1],acc17[1],acc17[1],acc17[1],acc17[1],acc17}      +{acc15[1],acc15[1],acc15[1],acc15[1],acc15[1],acc15}+{acc14[1],acc14[1],acc14[1],acc14[1],acc14[1],acc14}      +{acc13[1],acc13[1],acc13[1],acc13[1],acc13[1],acc13}+{acc12[1],acc12[1],acc12[1],acc12[1],acc12[1],acc12}      +{acc11[1],acc11[1],acc11[1],acc11[1],acc11[1],acc11}+{acc10[1],acc10[1],acc10[1],acc10[1],acc10[1],acc10}      +{acc9[1],acc9[1],acc9[1],acc9[1],acc9[1],acc9}+{acc8[1],acc8[1],acc8[1],acc8[1],acc8[1],acc8}      +{acc7[1],acc7[1],acc7[1],acc7[1],acc7[1],acc7}+{acc6[1],acc6[1],acc6[1],acc6[1],acc6[1],acc6}      +{acc5[1],acc5[1],acc5[1],acc5[1],acc5[1],acc5}+{acc4[1],acc4[1],acc4[1],acc4[1],acc4[1],acc4}      +{acc3[1],acc3[1],acc3[1],acc3[1],acc3[1],acc3}+{acc2[1],acc2[1],acc2[1],acc2[1],acc2[1],acc2}      +{acc1[1],acc1[1],acc1[1],acc1[1],acc1[1],acc1};    end      endmodule

1.分析程序設(shè)計(jì)

使用MAC單元完成乘加運(yùn)算(包括單MAC和多MAC的情況)這個(gè)方法可以利用FPGA中已有的MAC單元(像Xilinx Spartan 3E-100中有四個(gè)乘加單元),只要設(shè)計(jì)好數(shù)據(jù)運(yùn)算流程,就能方便高效地實(shí)現(xiàn)FIR運(yùn)算。使用MAC單元還有一個(gè)優(yōu)點(diǎn)是系數(shù)可以存成系數(shù)表,可以方便地修改,這是移位方法代替乘法運(yùn)算所不及的。

使用移位代替乘法運(yùn)算這個(gè)方法的優(yōu)點(diǎn)是速度快,例如11階的濾波器,完成一次運(yùn)算需要11次乘法,如果使用單MAC的話,需要11個(gè)時(shí)鐘周期來(lái)完成,而使用移位方法可以在一個(gè)時(shí)鐘周期完成11個(gè)乘法運(yùn)算;缺點(diǎn)是需要另外去完成濾波系數(shù)到移位位數(shù)的換算,如果修改濾波系數(shù)的話,程序修改將會(huì)比較麻煩,同時(shí)硬件資源也要使用多一些。

t*0.125={t[7],t[7],t[7],t[7:3]} t*0.125?=?t/8?=?t>>3; t為有符號(hào)數(shù),所以是帶符號(hào)右移,于是t>>3?={t[7],t[7],t[7],t[7:3]} 之所以這么些就是為了節(jié)省資源,提高頻率

以?-4*0.5?為例? -4的原碼:1000?0100B??補(bǔ)碼:1111?1100B -4>>1=0111?1110 而符號(hào)位不能變?應(yīng)用原來(lái)的位代替?1111?1110B?的原碼?1000?0010B?=-2

2.?對(duì)程序設(shè)計(jì)中的問(wèn)題分析與總結(jié)

在最開(kāi)始的設(shè)計(jì)中,本文初始計(jì)劃使用乘法單元。但是在程序設(shè)計(jì)的過(guò)程中我們遇見(jiàn)了實(shí)數(shù)乘法的問(wèn)題,程序的運(yùn)行遇到了困難,在與指導(dǎo)老師的研究中我們發(fā)現(xiàn)問(wèn)題出在實(shí)數(shù)乘法的問(wèn)題上。在Verilog的運(yùn)算中實(shí)數(shù)乘法需要特殊的小數(shù)乘法器來(lái)單元來(lái)實(shí)現(xiàn)。在原來(lái)的38階濾波器的設(shè)計(jì)中出現(xiàn)了這樣子的問(wèn)題。我們使用過(guò)這樣的程序:

reg  [63:0] filter_in_force [0:3344];  reg  [63:0] filter_out_expected [0:3344];  // Function definitions  function real abs_real;  input real arg;  begin  abs_real = arg > 0 ? arg : -arg;  end  endfunction //function abs_real  // Component Instances  filter u_filter    (    .clk(clk),    .clk_enable(clk_enable),    .reset(reset),    .filter_in(filter_in),    .filter_out(filter_out));  initial    begin  // Constants    filter_in_force [0] <= $realtobits(1.0000000000000000E+000);    filter_in_force [1] <= $realtobits(0.0000000000000000E+000);    filter_in_force [2] <= $realtobits(0.0000000000000000E+000);filter_in_force [3] <= $realtobits(0.0000000000000000E+000);

系統(tǒng)無(wú)法實(shí)現(xiàn)real值得計(jì)算,于是這里需要我們用小數(shù)乘法器進(jìn)行特殊單元的方案解決。于是我們要進(jìn)行小數(shù)乘法器的設(shè)計(jì)。

3.小數(shù)乘法器介紹及在設(shè)計(jì)中的作用

隨著FPGA 的發(fā)展以及相應(yīng)EDA 軟件工具的成熟,F(xiàn)PGA 在高速數(shù)字信號(hào)處理領(lǐng)域得到了越來(lái)越廣泛的應(yīng)用。而乘法,尤其是浮點(diǎn)乘法運(yùn)算是數(shù)值計(jì)算和數(shù)據(jù)分析中最常用的運(yùn)算之一。目前,多數(shù)FPGA 上可以實(shí)現(xiàn)整數(shù)和標(biāo)準(zhǔn)邏輯矢量的乘法,但不支持浮點(diǎn)乘法運(yùn)算, 因此使得FPGA 在數(shù)值計(jì)算、數(shù)據(jù)分析和信號(hào)處理等方面受到了限制。本文采用適合于FPGA 實(shí)現(xiàn)的自定義26 位浮點(diǎn)數(shù)據(jù)格式,利用改進(jìn)的基4Boot h 編碼運(yùn)算方式,以及CSA和4 - 2 壓縮器綜合的Wallace 樹(shù)形結(jié)構(gòu),減少了部分積,使系統(tǒng)具有高速度,低功耗的特點(diǎn),并且結(jié)構(gòu)規(guī)則。在尾數(shù)的舍入中采用了基于預(yù)測(cè)和選擇的舍入方法,進(jìn)一步提高了運(yùn)算的速度,優(yōu)化了乘法器的性能。

4.小數(shù)乘法器程序設(shè)計(jì)與仿真

 modulefix_mult ( clk,rst_n,in_a,in_b,x1,x2,x3,x4,x5,x6,x7,y_out );
  inputclk,rst_n;//時(shí)鐘和復(fù)位信號(hào)  input[31:0]   in_a,in_b;//輸入的被乘數(shù)和乘數(shù)  output[31:0]   y_out;//輸出的乘積 /*寄存器類型變量 為了能更清楚的了解全處理過(guò)程, 特地設(shè)計(jì)為輸出的,不然仿真可能會(huì)被綜合掉*/ output[15:0]   x1,x2,x3,x4; output[0:0]    x5; output[29:0]   x6; output[31:0]   x7;///////////////////////////////////////////////////// reg[31:0]   y_out; reg[15:0]   x1,x2,x3,x4; reg[0:0]    x5; reg[29:0]   x6; reg[31:0]   x7; always@ (posedgeclk ) begin if(!rst_n )//復(fù)位時(shí),全部寄存器變量清零 begin x1<=16'b0; x2<=16'b0; x3<=16'b0; x4<=16'b0; x5<=1'b0;x6<=30'b0; x7<=32'b0; y_out<=32'b0; end else/  begin x1<=in_a[31:16];//截取16位被乘數(shù), x2<=in_b[31:16];//截取16位乘數(shù) x3<=(x1[15]==0)?x1:{x1[15],~x1[14:0]+1'b1};  //據(jù)最高位判斷是否為負(fù)數(shù), //若負(fù)數(shù)則把補(bǔ)碼轉(zhuǎn)成原碼 x4<=(x2[15]==0)?x2:{x2[15],~x2[14:0]+1'b1}; x5<=x3[15]^x4[15];//兩數(shù)符號(hào)位相異或,得到乘積的符號(hào)位 x6<=x3[14:0]*x4[14:0];//兩數(shù)的數(shù)據(jù)位相乘 x7<={x5,x6,1'b0};  //乘積由1位符號(hào)位和30位數(shù)據(jù)位及1位無(wú)關(guān)組成; //因?yàn)槭切?shù),往低位生長(zhǎng),所以無(wú)關(guān)位放置最低位 y_out<=(x7[31]==0)?x7:{x7[31],~x7[30:0]+1'b1}; end end endmodule  

小數(shù)乘法器的仿真結(jié)果如下圖2-14所示:

圖2-14小數(shù)乘法器仿真結(jié)果

全過(guò)程可以看成:把32位的小數(shù)截取高16位左移16位,變?yōu)?6位整數(shù)相乘得到32位整數(shù)乘積后,右移32位調(diào)整無(wú)關(guān)位的位置得到32位小數(shù),這樣就可以完成早期程序中的小數(shù)乘法功能,然后來(lái)進(jìn)行設(shè)計(jì)中的FPGA數(shù)字濾波器設(shè)計(jì)的優(yōu)化。

在先前的設(shè)計(jì)中我們使用Matlab進(jìn)行綜合仿真設(shè)計(jì),并且借助FDAtool設(shè)計(jì)出濾波器。在Quartus II 的仿真中我們發(fā)現(xiàn)程序無(wú)法正常的完成運(yùn)行,究其原因在于小數(shù)乘法器的問(wèn)題。在原來(lái)的濾波器中需要對(duì)每一個(gè)參數(shù)進(jìn)行單獨(dú)設(shè)置,這樣會(huì)使得程序占有巨量的篇幅大大的增加了工作量和容錯(cuò)度。于是,我們需求另外一種方法來(lái)解決這個(gè)問(wèn)題,后來(lái)我們研究了移位算法。利用移位來(lái)把小數(shù)運(yùn)算轉(zhuǎn)換成整數(shù)運(yùn)算,這樣我們的11階濾波器程序大大減少篇幅同時(shí)也增加了程序的可讀程度和穩(wěn)定程度。

3?濾波器仿真濾波

3.1設(shè)置混合信號(hào)

在Matlab中進(jìn)行我們?cè)O(shè)計(jì)過(guò)的FIR數(shù)字濾波器的仿真,首先我們啟動(dòng)Matlab中的Simulink,啟動(dòng)方式是直接在文本窗口中輸入命令Simulink,或者點(diǎn)擊Matlab中的快速啟動(dòng)按鈕。

圖2-15 Simulink工具窗口圖

本論文模擬一個(gè)混合信號(hào)正弦波信號(hào)他包涵了10,30,60(Hz)的信號(hào),在Matlab模擬出來(lái)是這樣一個(gè)信號(hào):

Fs=200;t=(1:200)/Fs;x1=sin(2*pi*t*10);x2=sin(2*pi*t*30);x3=sin(2*pi*t*60);X= x1+ x2+ x3;plot(t,X);title('混合正弦波信號(hào)X(t)-濾波前');grid;Module end//整個(gè)模擬濾波信號(hào)結(jié)束//使用軟件仿真出待濾波信號(hào)

混合信號(hào)設(shè)定之后利用Matlab工具進(jìn)行模型仿真。

圖2-16 Matlab中模擬的混合信號(hào)

?然后在程序中設(shè)置好仿真模型如下圖(2-17)

圖2-17 Simulink模型仿真

3.2設(shè)置仿真參數(shù)

設(shè)置好仿真參數(shù),對(duì)各個(gè)信號(hào)進(jìn)行單獨(dú)修改和設(shè)置如下圖(2-18):

圖2-18 sin(2*pi*30*t)參數(shù)模塊

在主設(shè)置中,振幅(Amplitude)設(shè)置為1,

頻率(Frequency)設(shè)置為30Hz,

輸出混合為實(shí)常量,樣本時(shí)間為1/1000,

采樣幀數(shù)設(shè)置為1幀,以下不同頻率信號(hào)同理設(shè)置:

圖2-19 sin(2*pi*10*t)參數(shù)模塊

圖2-20 混合參數(shù)模塊

圖2-21 仿真設(shè)計(jì)模塊

最后來(lái)設(shè)置仿真參數(shù):在Matlab模型窗口打開(kāi)菜單[Simulation:Configuration Parameters];找到【SimulationConfiguration Parameters】對(duì)話框,設(shè)置仿真參數(shù)如下Configuration Parameters設(shè)置完成之后運(yùn)行:可以直接點(diǎn)擊模塊窗口中的,開(kāi)始進(jìn)行仿真。輸出結(jié)果如圖2-22所示:

圖2-22 濾波前信號(hào)波形圖

圖2-23濾波后信號(hào)波形圖

3.3 仿真總結(jié)

由上面的仿真結(jié)果輸出圖可以看出,所設(shè)計(jì)的數(shù)字帶通濾波器使混合輸入信號(hào)中頻率為30Hz的正弦波信號(hào)通過(guò),明顯的出現(xiàn)了帶中信號(hào)。而將頻率為10Hz和60Hz的正弦波信號(hào)大大衰減,從而達(dá)到濾波效果。用Matlab Simulink仿真數(shù)字濾波器設(shè)計(jì)更加直觀,操作便捷,易于分析。

4 總結(jié)與展望

4.1 設(shè)計(jì)成果總結(jié)

在理論積累和重復(fù)實(shí)踐的基礎(chǔ)上,多種濾波器設(shè)計(jì)思路已經(jīng)相當(dāng)成熟,設(shè)計(jì)出來(lái)的濾波器通過(guò)仿真概率高,仿真結(jié)果符合設(shè)計(jì)要求。FIR數(shù)字濾波器的設(shè)計(jì)方式選擇更具有科學(xué)性和時(shí)效性,可以根據(jù)自己熟悉的軟件,需要的FIR數(shù)字濾波器的精度,F(xiàn)IR數(shù)字濾波器的類型和濾波器階數(shù)來(lái)靈活選擇設(shè)計(jì)思路和方法。

4.2 設(shè)計(jì)心得

本次畢業(yè)設(shè)計(jì)主要包含了信號(hào)與系統(tǒng),數(shù)字信號(hào)處理和FPGA方面的相關(guān)知識(shí)。設(shè)計(jì)心得總結(jié)如下:

設(shè)計(jì)路徑優(yōu)化?確定好所需要設(shè)計(jì)的FIR數(shù)字濾波器濾波器后,首先對(duì)其進(jìn)行性能需求分析,明確FIR數(shù)字濾波器系統(tǒng)應(yīng)該達(dá)到的各種性能指標(biāo),其次,擬定多種濾波器類型,對(duì)這些方案采用Matlab進(jìn)行仿真,在這個(gè)過(guò)程中我們有許多的窗函數(shù)選擇和設(shè)計(jì)方法選擇,進(jìn)行綜合分析和比較,選擇出最佳的濾波器類型作為本設(shè)計(jì)方案,然后依據(jù)其性能指標(biāo)編寫Matlab程序,確定二階節(jié)系數(shù),或者直接進(jìn)行 Verilog HDL語(yǔ)言的編寫。

系統(tǒng)整體思維細(xì)節(jié)決定整體,整體展現(xiàn)細(xì)節(jié)。我們的設(shè)計(jì)必須有系統(tǒng)的設(shè)計(jì)思維,把每一個(gè)細(xì)節(jié)都融入到整個(gè)系統(tǒng)中考慮,去發(fā)現(xiàn)整個(gè)FIR數(shù)字濾波器系統(tǒng)的主觀性、完整性、穩(wěn)定性和仿真功能的實(shí)現(xiàn),才能讓各個(gè)細(xì)節(jié)完美縫合,才能快速的完成性能優(yōu)越的硬件設(shè)計(jì)。

多做設(shè)計(jì)嘗試和總結(jié),在FIR數(shù)字濾波器的設(shè)計(jì)中遇到過(guò)很多困難甚至是障礙。但是必須堅(jiān)持自己的設(shè)計(jì)思路,去尋找其他的解決方法比如本論文中所提到的小數(shù)乘法器。這個(gè)本來(lái)是設(shè)計(jì)過(guò)程無(wú)法逾越的障礙,最后在不懈努力下,一樣做出的小數(shù)乘法器。并且我們要善于積累和總結(jié)讓障礙成為我們的另一種知識(shí)沉淀,這樣我們才能融會(huì)貫通,才能更善于發(fā)現(xiàn)問(wèn)題和解決問(wèn)題。無(wú)論在什么時(shí)候,科學(xué)的道路上永遠(yuǎn)都是未知。我們應(yīng)該一直堅(jiān)持自己的原則,不拋棄,不放棄,這樣才能在這條充滿荊棘的路上走的更遠(yuǎn)!

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
EPM240M100C5N 1 Altera Corporation Flash PLD, 7.5ns, 192-Cell, CMOS, PBGA100, 6 X 6 MM, 0.50 MM PITCH, LEAD FREE, MICRO, FBGA-100
$80.18 查看
EP4CE6U14I7N 1 Altera Corporation Field Programmable Gate Array, 6272-Cell, PBGA256, LEAD FREE, UBGA-256
$19.6 查看
XC7A35T-2FGG484I 1 AMD Xilinx Field Programmable Gate Array, 2600 CLBs, 1286MHz, 33280-Cell, CMOS, PBGA484, FBGA-484

ECAD模型

下載ECAD模型
$70.07 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

任何技術(shù)的學(xué)習(xí)就好比一個(gè)江湖,對(duì)于每一位俠客都需要不斷的歷練,從初入江湖的小白到歸隱山林的隱世高人,需要不斷的自我感悟自己修煉,讓我們一起仗劍闖FPGA乃至更大的江湖。