FFT濾波器和FIR濾波器性能比較分析_第1頁
FFT濾波器和FIR濾波器性能比較分析_第2頁
FFT濾波器和FIR濾波器性能比較分析_第3頁
FFT濾波器和FIR濾波器性能比較分析_第4頁
FFT濾波器和FIR濾波器性能比較分析_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、分類號:TP311.1 U D C: 密 級:公 開 編 號: 學(xué)位論文FFT濾波器和FIR濾波器性能比較分析論文作者姓名:申請學(xué)位專業(yè):通信工程申請學(xué)位類別:工學(xué)學(xué)士指導(dǎo)教師姓名(職稱):論文提交日期:2015年5月25日FFT濾波器和FIR濾波器性能比較分析摘 要二十一世紀(jì)標(biāo)志著數(shù)字化時代的來臨,隨著信息科技的快速發(fā)展,數(shù)字信號處理技術(shù)(DSP)已經(jīng)發(fā)展成為信息產(chǎn)業(yè)之中的重要技術(shù)。它在通訊、電力系統(tǒng)、儀器自動化、遙感技術(shù)等技術(shù)領(lǐng)域得到了普遍的應(yīng)用。與模擬濾波器相比,數(shù)字濾波器擁有穩(wěn)定性高,精度高。設(shè)計方式靈活等重要的優(yōu)點,沒有模擬濾波器所存在的電壓漂移和噪聲等問題。并且擁有接近于理想的頻率

2、響應(yīng)特性。這些優(yōu)勢注定了數(shù)字濾波器會得到廣泛的應(yīng)用。這其中,有限沖擊響應(yīng)濾波器(FIR濾波器)能夠在保證幅度特性滿足技術(shù)要求的同時,保證嚴(yán)格的線性相位特性。在數(shù)據(jù)傳輸,語音技術(shù)等方面應(yīng)用廣泛。同時,DSP的發(fā)展和FPGA技術(shù)的出現(xiàn)為數(shù)字濾波器的硬件實現(xiàn)提供了多樣化的選擇。本課題主要應(yīng)用C+語言設(shè)計FIR濾波器以及FFT濾波器,并對所設(shè)計的濾波器進(jìn)行仿真。應(yīng)用Microsoft Visual Studio 2010編譯調(diào)試程序。主要運用窗函數(shù)設(shè)計法設(shè)計濾波器。學(xué)術(shù)中比較常用的窗函數(shù)有以下幾種:矩形窗函數(shù),三角形窗函數(shù),漢寧窗函數(shù),海明窗函數(shù),布萊克曼窗函數(shù)。通過這幾種窗函數(shù)來分析兩種濾波器在時間

3、開銷、幅度誤差、相位誤差等方面的差異。關(guān)鍵字:數(shù)字信號技術(shù) 濾波器 FIR FFT 模型仿真 窗函數(shù)Comparative analysis of FFT filter and FIR filter performanceAbstractThe 21st century is the era of digital, with the rapid development of information technology, digital signal processing (DSP) technology has become an important technology

4、 in information industry. It has been widely used in the field of high-tech communications, power systems, instrument automation, remote sensing etc. Compared with analog filter, digital filter has  high stability, high precision.

5、 The design is flexible and other important advantages, no problem existing simulation filter voltage drift and noise etc. And have close to the ideal frequency response. This kind of advantage to digital filte

6、r will be widely used. Among these, the finite impulse response (FIR) filter can in the guarantee range characteristics to meet technical requirements at the same time, to ensure the strict linear phase characteristics. In data transmission, voice technology has be

7、en applied widely. At the same time, provides a diverse selection of DSP development and FPGA technology for the realization of digital filterhardware.The main comppiling language of designing the FIR filter and FFT filter in this paper is C+ languag

8、e.Debugging programs through The application of Microsoft Visual Studio 2010 . Academic commonly used window function is the following: Rectangular window function, Bartlett window function, Hanning window function, Hamming window function, Blackman window function.Through the analysi

9、s of several window functions to find differences between the two kinds of filters, and the difference of amplitude error and phase error.Keywords: Digital signal technology FIR filter simulation window function第一章 緒論11.1課題研究的背景與意義11.2數(shù)字濾波器的實現(xiàn)方法11.3本文的主要研究內(nèi)容2第二章 FIR濾波器基

10、礎(chǔ)32.1FIR濾波器的概念32.2 FIR濾波器的特點32.3 FIR濾波器的設(shè)計方法42.3.1利用窗函數(shù)法設(shè)計FIR濾波器4(一) 窗函數(shù)法設(shè)計FIR濾波器的基本思想42.3.2 運用頻率抽樣法設(shè)計FIR濾波器72.3.3 運用切比雪夫逼近法設(shè)計FIR濾波器82.4 FFT濾波器的濾波原理10第三章 基于C+的濾波器設(shè)計及仿真123.1 C+及MFC的簡介123.2 基于C+的濾波器設(shè)計及仿真133.2.1 設(shè)計要求133.2.2 仿真過程143.2.3 FIR濾波以及FFT濾波的性能分析24第四章 總 結(jié)31參考文獻(xiàn)32致謝33聲 明34第一章 緒論1.1課題研究的背景與意義隨著科技和

11、信息技術(shù)的快速發(fā)展,數(shù)字信號處理技術(shù)在電子技術(shù)、儀器自動化、數(shù)控機床等諸多領(lǐng)域得到了廣泛應(yīng)用,數(shù)字信號濾波器作為數(shù)字信號處理技術(shù)之中的一個重要工具,可以用來過濾離散信號和數(shù)字信號。在數(shù)字信號處理技術(shù)之中,數(shù)字濾波器占有極其重要的地位。FIR濾波器的基本概念 FIR濾波器是指有限長單位沖激響應(yīng)濾波器,是數(shù)字信號處理系統(tǒng)中最基本的元件,它可以在保證任意幅頻特性的同時具有嚴(yán)格的線性相頻特性,同時其單位抽樣響應(yīng)是有限長的,因而FIR濾波器是穩(wěn)定的系統(tǒng)。因此,F(xiàn)IR濾波器在通信、聲音圖像處理等領(lǐng)域都有著廣泛的應(yīng)用。FFT的濾波功能源自DFT運算與復(fù)調(diào)制濾波器組運算的相似性,近年來FFT作為復(fù)調(diào)制濾波器組

12、的快速算法在圖像傳輸、信道化處理等領(lǐng)域得到了廣泛應(yīng)用。但是在實際工程設(shè)計之中,F(xiàn)FT的濾波輸出常常與預(yù)期的效果存在差異,差異主要表現(xiàn)在時域波形畸變、起始部分?jǐn)?shù)據(jù)丟失等,可能造成后續(xù)數(shù)據(jù)處理產(chǎn)生嚴(yán)重誤差,工程中只能通過反復(fù)調(diào)整其低通原型濾波器來接近預(yù)期效果。FIR濾波器是時間域卷積,F(xiàn)FT濾波過程是頻域卷積。本文主要是對FFT濾波器和FIR濾波器的濾波原理進(jìn)行分析,進(jìn)行推證,分析兩種濾波器在時間開銷、幅度誤差、相位誤差等方面的差異。1.2數(shù)字濾波器的實現(xiàn)方法目前為止,數(shù)字濾波器的主要實現(xiàn)方法有:一:在微型計算機上用軟件實現(xiàn)軟件可以是自己編寫,也可以使用現(xiàn)成的軟件包。這種方法并不能適用于實時的系統(tǒng)

13、,只能用于教學(xué)和仿真研究。例如,在MATLAB下幾乎可以實現(xiàn)所有種類的數(shù)字濾波器的仿真研究。再如本篇論文之中應(yīng)用C+語言實現(xiàn)仿真程序。二:用DSP(Digital Signal Prosessing)芯片實現(xiàn)DSP芯片是專門為數(shù)字信號的處理設(shè)計的。例如TI公司的TMS320C54X系列,還有AD公司的ADSP系列,它們的主要運算單元是乘法累加器(Multiply-accumulator),具備特別的循環(huán)尋址和倒序?qū)ぶ饭δ堋7浅S欣跀?shù)字信號處理技術(shù)之中的濾波器的有效實現(xiàn)。三:用固定功能的信號處理器實現(xiàn)專用信號處理器采用專用集成電路實現(xiàn),適用于過程固定而追求高速的信號處理任務(wù)。它們的優(yōu)點是體積小

14、、保密性好,具有極高的性能,但靈活性差。四:用FPGA等可編程器件模擬開發(fā)數(shù)字濾波算法現(xiàn)如今,F(xiàn)PGA產(chǎn)品層出不窮,人們可以利用Atera、Xilinx等公司提供的產(chǎn)品,使用他們公司的相關(guān)開發(fā)工具和硬件開發(fā)語言,通過軟件編程然后運用硬件實現(xiàn)特定的數(shù)字濾波算法。這一方法目前是比較活躍的研究領(lǐng)域。相關(guān)研究開發(fā)的項目在國內(nèi)外都非常充足。相比較以上的幾種方法,本課題設(shè)計的FIR濾波器以及頻域上的TFT濾波器將采用C+語言進(jìn)行設(shè)計和仿真,并且對比兩種濾波器的濾波性能的差別。1.3本文的主要研究內(nèi)容本課題主要應(yīng)用C+語言設(shè)計FIR以及FFT濾波器,并對所設(shè)計的濾波器進(jìn)行仿真。應(yīng)用Microsoft Vis

15、ual Studio 2010編譯調(diào)試程序。具體工作包括:對FIR數(shù)字濾波器的基本理論進(jìn)行研究和分析。應(yīng)用窗函數(shù)法設(shè)計FIR濾波器,用到的窗函數(shù)有以下幾種:矩形窗函數(shù),三角形窗函數(shù),漢寧窗函數(shù),海明窗函數(shù),布萊克曼窗函數(shù)。然后在比較幾種常見波形經(jīng)過兩種濾波器之后的輸出序列以及輸出序列頻譜的差異。第二章 FIR濾波器基礎(chǔ)2.1FIR濾波器的概念FIR濾波器是一種線性時不變(Linear Time-Invariant)濾波器,它的N 階輸出響應(yīng)是由輸入的時間序列與濾波器系數(shù)卷積計算得出的,具體公式如下: (2.1)FIR數(shù)字濾波器的基本網(wǎng)絡(luò)結(jié)構(gòu)類型有直接型、級聯(lián)型、快速卷積型、線性相位型等網(wǎng)絡(luò)類型

16、。其中最基本也是最重要的的網(wǎng)絡(luò)結(jié)構(gòu)是直接型網(wǎng)絡(luò)結(jié)構(gòu),它是了解其它網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ),因而首先介紹的是FIR 數(shù)字濾波器的直接型網(wǎng)絡(luò)結(jié)構(gòu),如圖2.1 所示。 對上圖中的網(wǎng)絡(luò)結(jié)構(gòu)信號流圖進(jìn)行顛倒信號流、交換輸入輸出的方向等變換可以得到FIR濾波器的轉(zhuǎn)置型網(wǎng)絡(luò)結(jié)構(gòu),其結(jié)構(gòu)如圖2.2 所示。 2.2 FIR濾波器的特點在數(shù)字信號處理技術(shù)之中,往往需要設(shè)計線性相位濾波器。FIR濾波器是一種能夠保證幅度特性滿足技術(shù)要求的同時做到嚴(yán)格的線性相位特性。FIR濾波器連續(xù)性的對輸入樣本x(n)進(jìn)行延時操作,然后再作乘法累加算法將濾波結(jié)果y(n)輸出,因此,F(xiàn)IR濾波器實際上是一種乘法累加運算。在數(shù)字濾波器中,F(xiàn)IR濾

17、波器的一個重要特點是沒有反饋回路,所以不存在不穩(wěn)定的問題;同時,可以在幅度特性滿足要求的同時保證精確的線性相位。線性相位特性是FIR濾波器的突出優(yōu)點。另外,它還有以下特點:過渡過程是一個有限區(qū)間;相對IIR濾波器而言,階次更高,延遲也要更高。2.3 FIR濾波器的設(shè)計方法FIR數(shù)字濾波器的設(shè)計方法主要有窗函數(shù)設(shè)計法、頻率抽樣設(shè)計法、切比雪夫逼近法等。其中窗函數(shù)設(shè)計法是最基本的設(shè)計方法。在設(shè)計FIR濾波器中,最重要的計算就是加窗,采用矩形窗是最直接的方法,但采用矩形窗存在較大的Gibbis效應(yīng),因此實際設(shè)計中一般采用其他類型的窗函數(shù)。2.3.1利用窗函數(shù)法設(shè)計FIR濾波器(1) 窗函數(shù)法設(shè)計FI

18、R濾波器的基本思想窗函數(shù)法設(shè)計FIR濾波器的基本思想是,選取一種合適的理想頻率選擇性濾波器,然后將它的脈沖響應(yīng)截斷,得到一個線性相位的FIR濾波器。因此這種方法的重點在于選擇哪一種合適的窗函數(shù)和哪一種理想濾波器。對于工程項目給定的濾波器技術(shù)指標(biāo),選擇具有最窄主瓣寬度和盡可能小的旁瓣衰減的某個窗函數(shù)。所有的數(shù)字濾波器的頻率響應(yīng)都是的周期函數(shù),傅里葉級數(shù)展開式為: (2.1)其中,(2.2)公式中的是濾波器的歸一化截止頻率。而傅里葉系數(shù)則是理想數(shù)字濾波器的沖擊響應(yīng)。但是Gibbs現(xiàn)象使得直接截取法的結(jié)果令人失望。窗函數(shù)就是用,窗函數(shù)的有限加權(quán)序列來修正公式(2.2)中的傅里葉級數(shù)。來求得所需要的有

19、限沖擊響應(yīng)序列,即得到: (2.3)是有限長的序列,當(dāng)及時,(二)工程中常用的窗函數(shù)類型日常工程中常用的幾種窗函數(shù)是:矩形窗函數(shù),三角形窗函數(shù),漢寧窗函數(shù),海明窗函數(shù),布萊克曼窗函數(shù)。這幾種窗函數(shù)的對比情況見表2-1。為了滿足工程的需要,窗函數(shù)的選擇原則是:(1)窗函數(shù)必須具有較低的旁瓣幅度,其中尤其是第一旁瓣幅度;(2)窗函數(shù)的旁瓣幅度下降速度要比較大,以利于增加阻帶衰減;(3)窗函數(shù)的主瓣的寬度要窄,以獲得比較陡的過渡帶。但是在實際的運用過程中,上述三點很難同時滿足。當(dāng)選用主瓣寬度較窄的窗函數(shù)時,雖然能夠得到較陡的過渡帶,但是弊端就是,通帶和阻帶的波動明顯增加;當(dāng)選用最小的旁瓣幅度的窗函數(shù)

20、時,雖然能夠得到均勻光滑的幅度響應(yīng)和較小的阻帶波動,但是缺點就是過渡帶加寬。因此,實際選用的窗函數(shù)往往是他們之中弊端最小的那種。在保證主瓣寬度達(dá)到系統(tǒng)要求的同時,稍微犧牲主瓣的寬度來換取旁瓣波動的減少。(1) 漢寧窗漢寧窗函數(shù)又稱升余弦窗。這三部分的總和,使旁瓣的能量互相抵消,從而使能量更集中在主瓣,根據(jù)計算,它的最大旁瓣值比主瓣值大約低31dB。但是所需要付出的代價就是主瓣寬度比矩形窗的主瓣寬度增加大約一倍,為:。(2) 海明窗海明窗函數(shù)又稱為改進(jìn)的升余弦窗。將升余弦窗再進(jìn)一步的改進(jìn),可以得到旁瓣更小的加窗效果,該窗的形式為: (2.7)的頻響幅度特性為: (2.8)該窗與漢寧窗相對比,它們

21、得到主瓣寬度相同,都為,但是改窗的旁瓣被進(jìn)一步壓低,可以將99.963%的能量集中在主瓣內(nèi),它的最大旁瓣值比主瓣值大約要低41dB。(3)布萊克曼窗布萊克曼窗函數(shù)又稱為二階升余弦窗。為了進(jìn)一步抑制旁瓣,在升余弦窗函數(shù)的基礎(chǔ)上再加上一個二次諧波的余弦分量,這樣就變成了布拉克曼窗,正是這樣,它又稱為二階升余弦窗。(4)凱塞窗這是一種適應(yīng)性比較強的窗函數(shù),也是一種性能最優(yōu)異的窗。它是在給定阻帶衰減下,得到一種大的主瓣寬度意義上的最優(yōu)結(jié)果,這個過程本身就暗含著它擁有最陡峭的過渡帶。它的公式為: (2.11)公式中,是第一類變形零階貝賽爾函數(shù),而參數(shù)是一個可以自由選擇的參數(shù)。以下為凱塞窗的優(yōu)點:該窗可以

22、提供變化的過渡帶寬,而且可以通過改變的值能夠達(dá)到最陡的過渡帶;該窗具有能夠與海明窗相互匹敵的特性,通過調(diào)整的值,可以將凱塞窗函數(shù)完全等價于海明窗函數(shù);該窗最大旁瓣值比主瓣大約要低80dB,是所有的窗函數(shù)中旁瓣抑制度最高的。2.3.2 運用頻率抽樣法設(shè)計FIR濾波器所謂的頻率抽樣法就是指,從頻域出發(fā),根據(jù)頻域采樣定理,對給定的濾波器的頻域相應(yīng)進(jìn)行相同間隔采樣。將當(dāng)做需要設(shè)計的濾波器頻率響應(yīng)的采樣值,通過以下的公式就可以求出該濾波器的系統(tǒng)函數(shù)和頻響。因為通過頻譜的有限個采樣值所恢復(fù)出來的頻率響應(yīng),其實實際上是對理想頻率響應(yīng)逼近。所以這種方法肯定有逼近誤差。若該被逼近的頻率響應(yīng)比較順滑,那么各采樣點

23、之間的逼近誤差就比較?。蝗舯槐平念l率響應(yīng)比較突兀,則逼近誤差比較大。如果想要提高逼近的質(zhì)量,能夠采用人為的擴展過渡帶的方法,就是在頻率所對應(yīng)的過渡帶內(nèi)插入多個連續(xù)的采樣點,使過渡帶連續(xù),因此通帶和阻帶之間變化就會變得緩慢,導(dǎo)致所設(shè)計的濾波器對理想濾波器的逼近誤差比較小。2.3.3 運用切比雪夫逼近法設(shè)計FIR濾波器上文所論述的兩種方法所設(shè)計的FIR濾波器的頻率響應(yīng)都不是非常理想,主要缺點就是通帶不夠平整,阻帶衰減不夠大,過渡帶過于寬闊,頻率邊緣并不能夠精確的指定。切比雪夫逼近法是最佳的逼近法。切比雪夫逼近法在數(shù)字信號處理技術(shù)之中占有極其重要的地位,也是設(shè)計FIR數(shù)字濾波器最理想的方法。但是,

24、該方法的原理較為復(fù)雜,比較難以理解。數(shù)字濾波器頻域設(shè)計的最佳方法就是等波紋切比雪夫法,它是采用最大誤差最小準(zhǔn)則所得到的最優(yōu)數(shù)字濾波器。最優(yōu)設(shè)計實際上就是調(diào)節(jié)FIR濾波器在Z域上零點的分布,使實際濾波器的頻響與理想濾波器的頻響兩者之間的最大絕對誤差最小。對于I型FIR數(shù)字濾波器,其頻響可表示為: (2.16)式中,為數(shù)字濾波器的系數(shù),為數(shù)字濾波器的階數(shù)。接下來,我們將分析廣泛使用的算法Parks-McClellan算法。這個算法的基礎(chǔ)是,將數(shù)字濾波器的設(shè)計問題用公式表示成為多項式逼近的問題。這個算法將數(shù)字濾波器階數(shù)、帶沿頻率和。以及通帶和阻帶的最大誤差比所固定,然后令或為變量,接著改變()個非限

25、制的脈沖響應(yīng)值,從而滿足系統(tǒng)的設(shè)計指標(biāo)。 公式(2.16)可以改寫為: (2.17)式中,是一個與相關(guān)聯(lián)的常數(shù)。然后定義逼近誤差函數(shù)為: (2.18)式中,是加權(quán)函數(shù),要求,和在且只在 的區(qū)間上有定義。而最大誤差最小準(zhǔn)則即是在,所要求頻域上找出能夠使公式(218)的最大加權(quán)逼近誤差達(dá)到最小的頻率響應(yīng)。最佳逼近就是在意義上所求的逼近。這里F是的閉合子集。該給定階次的多項式的最大加權(quán)誤差為最小的充要條件,是由交替定理給出的。它的表達(dá)式為:公式之中,為最優(yōu)誤差。公式(2.19)(2.20)說明了逼近誤差至少都要有個交錯點,從而使得最小,同時保證唯一存在。由公式(2.17)、(2.19)可以解出系數(shù)組

26、與。除此之外,另外一種更加有效的方法是多項式內(nèi)插公式,可以求得:這之中,如果由滿足公式(2.17)、(2.19)所確定的而且是由公式(2.21)所給出,那么誤差函數(shù)就會通過個頻率上的點處。正是如此,為了避免求解(2.17)、(2.19)兩個比較復(fù)雜的方程來得出所需要的系數(shù),Parks-McClellan先生采用拉格朗日多項式內(nèi)插公式,得出:通過公式(2.22)可以計算通帶和阻帶之中許多處頻域的和的值。如果對于通帶和阻帶之中所有的,都有,那么就說明已經(jīng)達(dá)到了最佳逼近。否則,就要計算出新的極值頻率。2.4 FFT濾波器的濾波原理為了了解FFT濾波的過程,我們首先來做以下的推導(dǎo)過程。一個時域離散信號

27、x(n)通過一個FIR 線性濾波器h(n)(階數(shù)為,長度為)的計算過程如下圖1所示。如上圖所示,圖中第n 時刻的濾波輸出實際上是及該點之前的 個點(將第個點定義為)與反向之后的的相乘然后再相加的結(jié)果,由此濾波結(jié)果可以等價表示為下面這種滑動的相關(guān)形式: (2.4.1)式中,。在公式(2.4.1)的基礎(chǔ)上再定義一個新的函數(shù): (2.4.2)將這個求和公式展開之后,比較(2.4.1)和(2.4.2)有下面的結(jié)論: (2.4.3)由此可知,是的一個近似,并且它們的近似程度決定于和兩項的取值。進(jìn)而可以得出:(2.4.4)然后以 階梳狀濾波器為低通原型,構(gòu)造復(fù)調(diào)制濾波器組,如下式:(2.4.5)然后根據(jù)公

28、式(2.4.4),信號x(n)通過該濾波器的時候,第k個子信道的輸出為:(2.4.6)顯而易見的是,公式(2.4.6)的等號右邊就是對做FFT濾波之后的表達(dá)式。同時不難證明用FFT濾波實現(xiàn)低通原型為其他濾波器(設(shè)為,階數(shù)為)的復(fù)調(diào)試濾波器組的表達(dá)公式是:(2.4.7)結(jié)果就是先對信號加窗再做FFT濾波,所加的窗函數(shù)為反向移位后的低通原型,而與此同時第n時刻濾波輸出的誤差是: (即:)。上面推導(dǎo)的過程非常重要,這就是下一章我們在程序中做FFT運算的數(shù)學(xué)依據(jù)。第三章 基于C+的濾波器設(shè)計及仿真3.1 C+及MFC的簡介C+語言是在C語言的基礎(chǔ)上開發(fā)的一種通用的編程語言,用途更加的廣泛。C+語言支持

29、多種編程范式,主要有面向?qū)ο缶幊?、泛型編程和過程化編程三種范式。它的編程領(lǐng)域非常廣泛,常用于引擎開發(fā),系統(tǒng)開發(fā)等領(lǐng)域,是計算機產(chǎn)業(yè)發(fā)展到今天最受歡迎和最強大編程語言之一。本文對濾波器的仿真用到的是C+其中的一個類庫,MFC。MFC是英語Microsoft Foundation Classes的縮寫,它是以C+類的形式封裝了Windows API,其中包含一個應(yīng)用程序框架,能夠有效地減少開發(fā)人員的工作量。其中包含的類包含豐富的Windows句柄封裝類和大量的Windows的內(nèi)建控件和組件的封裝類。當(dāng)一個應(yīng)用程序在創(chuàng)建某個類型的窗口前,必須首先注冊該窗口類。Register Window會將窗口過

30、程、窗口類型和其他類型的信息和需要register的窗口類關(guān)聯(lián)起來。“窗口類”是Windows系統(tǒng)之中的的數(shù)據(jù)結(jié)構(gòu),我們可以把它理解為Windows系統(tǒng)的類型定義,Windows使用一個結(jié)構(gòu)來描述“窗口類”,其定義如下:typedef struct _WNDCLASSEX UINT cbSize; /定義結(jié)構(gòu)的字節(jié)數(shù)UINT style; /定義該窗口類的風(fēng)格WNDPROC lpfnWndProc; /窗口過程int cbClsExtra;int cbWndExtra;HANDLE hInstance; /窗口過程所屬的應(yīng)用實例HICON hIcon; /所用的像標(biāo)HCURSOR hCurso

31、r; /所用的光標(biāo)HBRUSH hbrBackground; /所用的背景刷LPCTSTR lpszMenuName; /所用的菜單資源LPCTSTR lpszClassName; /名稱HICON hIconSm; /所用的小圖標(biāo) WNDCLASSEX;從上面“窗口類”的定義之中不難看出,它包含了如窗口風(fēng)格、窗口過程、顯示和繪制窗口所需要的信息等重要的組成部分。3.2 基于C+的濾波器設(shè)計及仿真 前面的章節(jié)中已經(jīng)簡單的介紹了C+以及MFC的定義,F(xiàn)IR數(shù)字濾波器的設(shè)計方法和FFT濾波過程的推理過程。本節(jié)中將在MFC下進(jìn)行兩種濾波器的設(shè)計及性能比較。3.2.1 設(shè)計要求輸入信號為0.8個周期9

32、.8周期的正弦波、矩形方波、三角波、鋸齒波、沖擊信號以及階躍信號。運用到的窗函數(shù)有矩形窗函數(shù),三角形窗函數(shù),漢寧窗函數(shù),海明窗函數(shù),布萊克曼窗函數(shù)。通過這幾種窗函數(shù)來分析兩種濾波器在時間開銷、幅度誤差、相位誤差等方面的差異。設(shè)計時默認(rèn)濾波器的類型為全通濾波器。3.2.2 仿真過程(1)啟動Microsoft VS2010打開的程序設(shè)計界面,如圖3.1所示。圖3.1 Microsoft VS2010編譯界面 (2)MFC創(chuàng)建程序主界面首先需要繪制該程序的相關(guān)參數(shù)的控件。相關(guān)參數(shù)共有:輸入序列,F(xiàn)IR窗函數(shù)這兩個下拉型選擇控件;以及序列長度,窗口長度,序列周期,F(xiàn)FT點數(shù),特別的,在FIR窗函數(shù)為

33、矩形窗時,才會有的占空比控件,這五個控件為滾動條型控件。該界面的右下角有 確定,清除圖像,以及退出程序三個按鈕。如圖3.2所示。圖3.2 程序圖形化界面的相關(guān)參數(shù)設(shè)置界面下面的這段代碼的功能是定義上述的這幾個控件的名稱,并且將需要同步的量與該控件相關(guān)聯(lián)起來。void CFirfilterDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX);DDX_Control(pDX, IDC_ZHANKONG, m_zhankong);DDX_Control(pDX, IDC_WINDOWPOINT, m_windowpoin

34、t);DDX_Control(pDX, IDC_WINDOW_TYPE, m_window_type);DDX_Control(pDX, IDC_WAVEPOINT, m_wavepoint);DDX_Control(pDX, IDC_WAVE_SHAPE, m_wave_shape);DDX_Control(pDX, IDC_PERIOD, m_period);DDX_Control(pDX, IDC_FFTPOINT, m_fftpoint);DDX_Text(pDX, IDC_PERIOD_MSG, m_period_msg);DDX_Text(pDX, IDC_WAVEPOINT_MS

35、G, m_wavepoint_msg);DDX_Text(pDX, IDC_WINDOWPOINT_MSG, m_windowpoint_msg);DDX_Text(pDX, IDC_ZHANKONG_MSG, m_zhankong_msg);DDX_Text(pDX, IDC_FFTPOINT_MSG, m_fftpoint_msg);DDX_Text(pDX, IDC_ZK, m_ZK);在將程序圖形中的控件與程序中設(shè)置的變量相關(guān)聯(lián)起來之后,接下來的任務(wù)就是設(shè)置每個控件的控制范圍。并且在人為改變界面中數(shù)據(jù)的時候,讓程序中的變量即時獲取到最新值。m_wavepoint.SetScrollRa

36、nge(11,300); /設(shè)置序列的長度范圍m_windowpoint.SetScrollRange(10,211); / 設(shè)置窗口點數(shù)的范圍m_period.SetScrollRange(1,100); /設(shè)置序列周期的范圍m_zhankong.SetScrollRange(1,100);/設(shè)置占空比的范圍m_fftpoint.SetScrollRange(2, 6);/設(shè)置FFT點數(shù)的范圍m_wavepoint.SetScrollPos(128); /設(shè)置波形點數(shù)m_windowpoint.SetScrollPos(64);/設(shè)置窗口點數(shù)m_zhankong.SetScrollPos(5

37、0);/設(shè)置占空比的初始值為50%m_period.SetScrollPos(10);/設(shè)置序列周期的初始值m_fftpoint.SetScrollPos(3);/設(shè)置FFT點數(shù)的初始值m_wave_shape.SetCurSel(0); /將輸入序列默認(rèn)為第一個m_window_type.SetCurSel(0);/將FIR窗函數(shù)類型默認(rèn)為第一個wavepoint=m_wavepoint.GetScrollPos(); /從界面中讀取序列長度period=m_period.GetScrollPos();/從界面中讀取周期長度zhankong=m_zhankong.GetScrollPos()

38、;/從界面中讀取占空比windowpoint=m_windowpoint.GetScrollPos();/從界面中讀取窗口長度fftpoint = m_fftpoint.GetScrollPos();/從界面中讀取FFT點數(shù)OnSelchangeWaveShape(); /從界面中讀取波形類型return TRUE; (3)程序整體框架的構(gòu)造該程序之中滾動條的觸發(fā)是編程時的一個重要步驟,當(dāng)鼠標(biāo)拖動滾動條調(diào)節(jié)該數(shù)據(jù)的值時,下方輸出界面馬上會感應(yīng)到這種改變,并作出迅速的反應(yīng)。下面我們就以觸發(fā)序列長度的滾動條的時候的程序為例來分析滾動條滾動的過程。當(dāng)輸入序列為正弦波,F(xiàn)IR窗函數(shù)為矩形窗時,F(xiàn)IR的

39、輸出序列,以及輸出頻譜的情況如圖(3.3)(3.4)所示。圖3.3序列長度為最小值時的界面圖3.4序列長度為最大值時的界面具體程序如下:CFirfilterDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) /滾動條的觸發(fā)wavepoint=m_wavepoint.GetScrollPos(); /屬于序列長度的滾動條period=m_period.GetScrollPos(); /屬于周期長度的滾動條zhankong=m_zhankong.GetScrollPos(); /屬于占空比的滾動條windowpoint=m_

40、windowpoint.GetScrollPos(); /屬于窗口長度的滾動條fftpoint = m_fftpoint.GetScrollPos(); /屬于FFT點數(shù)的滾動條if(pScrollBar->GetDlgCtrlID()=IDC_WAVEPOINT) /當(dāng)觸發(fā)的滾動條屬于序列長度時switch(nSBCode) / 判斷滾動條是向右還是向左運動case SB_LINERIGHT:if(wavepoint<300)wavepoint+=1;pScrollBar->SetScrollPos(wavepoint);MainFunction();break;case

41、SB_LINELEFT:if(wavepoint>10)wavepoint-=1;pScrollBar->SetScrollPos(wavepoint);MainFunction();break;case SB_THUMBPOSITION:pScrollBar->SetScrollPos(nPos);MainFunction();break;case SB_THUMBTRACK:pScrollBar->SetScrollPos(nPos);MainFunction();break;在完成程序界面之中相關(guān)參數(shù)的程序設(shè)計之后,接下來的主要任務(wù)就是主程序下方繪圖界面的程序?qū)崿F(xiàn)

42、。本程序下方共有六塊圖像界面,分別是:輸入序列,輸入序列頻譜;FIR輸出序列,F(xiàn)IR輸出序列頻譜;FFT輸出序列,F(xiàn)FT輸出序列頻譜。如圖3.5所示:圖3.5 程序的繪圖界面(3)波形圖的繪制下面我們就以繪制FIR輸出序列為例分析繪制波形圖的過程。代碼如下:void CFirfilterDlg:MainFunction() /繪制界面上用于顯示各種波形的區(qū)域int i;DrawCoordinate(); UpdateShowText(); Complex *x=new ComplexSAMPLE_POINTS; /定義采樣點的指針Complex *X=new ComplexSAMPLE_POI

43、NTS;Complex *FFT_In = new ComplexSAMPLE_POINTS;int ftype=m_wave_shape.GetCurSel();/獲取所選擇的輸入序列InitData(ftype,x); /根據(jù)所選擇的波形形狀,調(diào)用相應(yīng)的方法生成波形數(shù)據(jù)for(i=1;i<SAMPLE_POINTS;i+)FFT_Ini = Xi=xi; DrawInPic1(wavepoint,x);/繪制原始信號波形/找到比wavepoint的數(shù)值大的最小的2的指數(shù)次方,從這里開始產(chǎn)生頻譜int pointtemp = wavepoint;int ffttime=0;while(

44、pointtemp!=0)pointtemp/=2;ffttime+;ffttime-;if(wavepoint>pow(2.0,ffttime)ffttime+;/將大于wavepoint 和小于pow(2.0,ffttime) 之間的點賦零值,將不夠的部分補0for(i=wavepoint+1;i<=pow(2.0,ffttime);i+) /pow函數(shù)是數(shù)學(xué)庫中的函數(shù),功能是計算2的ffttime次方xi.real=0;xi.image=0;FFT(int)pow(2.0,ffttime),ffttime,x);DrawInPic2(int)pow(2.0,ffttime),

45、x); /顯示輸入序列頻譜,x已經(jīng)轉(zhuǎn)化為頻域數(shù)據(jù)Complex *y=new ComplexSAMPLE_POINTS; /生成y,大小也是1024long fir_start = GetTickCount(); /獲取start時間FirFunction(X, y); /FIR濾波器的實現(xiàn)long fir_finish = GetTickCount(); /獲取finish時間long fir_duration = fir_finish - fir_start; /計算FIR的時間差TRACE("fir_duration = %ldn", fir_duration); D

46、rawOutPic1(wavepoint+windowpoint,y); /繪制輸出序列 (4) FIR濾波以及FFT濾波的代碼實現(xiàn)首先是FIR濾波的功能實現(xiàn),代碼如下:void CFirfilterDlg:FirFunction(Complex A, Complex B) /FIR實現(xiàn)Complex windowdata513;/濾波器窗函數(shù)的序列長度/創(chuàng)建指定類型的濾波器(操作界面上用戶選擇的類型)/windowpoint 生成的窗口長度CreateFirFilter(windowpoint,/*m_filter_type.GetCurSel(),*/m_window_type.GetCu

47、rSel(), windowdata); /繪制系統(tǒng)響應(yīng)(時域域形)Complex windowdata1513;for(int i=1;i<513;i+)windowdata1i=windowdatai;int pointtemp=windowpoint;int ffttime=0;while(pointtemp!=0)pointtemp/=2;ffttime+;ffttime-;if(windowpoint>pow(2.0,ffttime)ffttime+;for(int i=windowpoint+1;i<=pow(2.0,ffttime);i+)windowdata1

48、i.real=0;windowdata1i.image=0;/計算窗函數(shù)windowdata 的頻譜FFT(int)pow(2.0,ffttime),ffttime,windowdata1); DrawSYS2(int)pow(2.0,ffttime),windowdata1);/繪制系統(tǒng)響應(yīng)頻譜for(int i=1;i<513;i+)windowdata1i=windowdatai;/windowdata1 為頻譜/windowpoint 為有效的頻點長度 DrawSYS3(windowpoint,windowdata1);/繪制系統(tǒng)系統(tǒng)響應(yīng)幅度頻譜int max=wavepoint

49、 + windowpoint;/計算通過濾波器的信號(卷積運算)myConv(A, windowdata, B, max);FFT濾波的代碼實現(xiàn),如下:void CFirfilterDlg:FFT(int N, int M, Complex data2)int j=1;int i=1;int K;/根據(jù)蝶形運算的規(guī)律,提前將各變量索引位置上的值交換。交換后如:x0,x4,x2,x6,x1,x5,x3,x7doif(i<j)Complex T;T.real = data2j.real;T.image = data2j.image;data2j.real=data2i.real;data2j

50、.image=data2i.image;data2i.real=T.real;data2i.image=T.image;K=N/2;while(K<j)j-=K;K/=2;j+=K;i+;while(i<N);/位置交換完成后,將對應(yīng)的值乘上對應(yīng)的W,就會得到正確順序的傅立葉變換后的值int LE,LE1,IP;int L=1;doLE=(int)pow(2.0,L);LE1=LE/2;Complex U=1.0,0.0;Complex W=cos(0-PI/(double)LE1),sin(0-PI/(double)LE1);j=1;doi=j;doIP=i+LE1;Comple

51、x T;T.real= data2IP.real*U.real-data2IP.image*U.image;T.image = data2IP.real*U.image+data2IP.image*U.real;data2IP.real = data2i.real-T.real;data2IP.image = data2i.image-T.image;data2i.real = data2i.real+T.real;data2i.image = data2i.image+T.image;i+=LE; while(i<=N);double tempreal=U.real;double te

52、mpimage=U.image;U.real = U.real*W.real-W.image*U.image;U.image = tempreal*W.image+tempimage*W.real;j+; while(j<=LE1);L+; while(L<=M);至此,我們仿真過程的部分核心代碼展示完畢,其他的代碼這里不做介紹。MFC所提供的整體框架也已經(jīng)配置好,應(yīng)用程序已經(jīng)能夠?qū)⒏鞣N信號的經(jīng)過兩種濾波過程之后的波形圖像和頻譜圖像繪制出來,以做進(jìn)一步的研究。3.2.3 FIR濾波以及FFT濾波的性能分析(1)在時間開銷上的差異在上個小結(jié)波形圖繪制的代碼之中,我們已經(jīng)獲取到FIR處

53、理過程所需要的時間,即最后計算出來的時間差,但是通過計算可以發(fā)現(xiàn),這個值幾乎為零,也就是說在C+下完成FIR濾波的過程非常之快,時間幾乎可以忽略不計。之后的FFT濾波過程與之類似,時間消耗也非常小。根據(jù)如今微型計算機的處理速度,兩種濾波過程都發(fā)生在極短的時間,由于沒有更加精確的記錄工具,所以無法比較它們之間在時間開銷上的差異。在這個問題上我們不便贅述。(2)在相位誤差上的差異由于窗口類型以及序列長度等因素并不會影響兩種濾波過程,所以我們在進(jìn)行分析對比的時候就保證其他條件不變,只改變輸入序列的類型。首先選擇輸入序列為正弦波,F(xiàn)IR窗口類型為三角形窗,序列長度為128,窗口長度為64,序列周期為3

54、 T,F(xiàn)FT點數(shù)為32的情況下,輸出序列的波形如圖3.6所示。圖3.6 正弦波的FIR、FFT的濾波后輸出序列波形圖當(dāng)輸入序列為三角波,F(xiàn)IR窗口類型為三角形窗,序列長度為128,窗口長度為64,序列周期為3 T,F(xiàn)FT點數(shù)為32的情況下,輸出序列的波形如圖3.7所示。圖3.7 三角波的FIR、FFT的濾波后輸出序列波形圖當(dāng)輸入序列為階躍信號,F(xiàn)IR窗口類型為三角形窗,序列長度為128,窗口長度為64,序列周期為3 T,F(xiàn)FT點數(shù)為32的情況下,輸出序列的波形如圖3.8所示。圖3.8 階躍信號的FIR、FFT的濾波后輸出序列波形圖通過上述三張?zhí)幚斫Y(jié)果圖像的對比,我們不難發(fā)現(xiàn),F(xiàn)FT的輸出序列相對比FIR輸出序列,都有明顯的輸出延

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論