第一篇:中南大學《數字信號處理》課程設計報告
中南大學
《現代信號處理》 課程設計報告
學 院: 專業班級:
姓 名:
學 號:
指導老師:
設計時間:
前 言
《現代信號處理》課程設計與《現代信號處理》課程配套,是通信工程類專業的重要實踐環節。數字信號處理是每一個電子信息科學工作者必須掌握的重要知識。它采用計算機仿真軟件,以數值計算的方法對信號進行分析、變換、濾波、檢測、估計與識別等加工處理,以達到提取信息便于使用的目的。
通信工程專業的培養目標是具備通信技術的基本理論和應用技術,能從事電子、信息、通信等領域的工作。鑒于我校充分培養學生實踐能力的辦學宗旨,對本專業學生的培養要進行工程素質培養、拓寬專業口徑、注重基礎和發展潛力。特別是培養學生的創新能力,以實現技術為主線多進行實驗技能的培養。學生通過《現代信號處理》課程設計這一重要環節,可以將本專業的主干課程《現代信號處理》從理論學習到實踐應用,對數字信號處理技術有較深的了解,進一步增強學生動手能力和適應實際工作的能力。
目 錄
前 言............................................................2 第一章 設計目的及要求.............................................4
1.1 課程設計目的................................................4 1.2 課程設計要求................................................4 1.3 課程設計選做題目............................................4 第二章 設計題目及思想.............................................5
2.1 各題目的設計思想............................................5
2.1.1 第一題................................................5 2.1.2 第二題...............................................6 2.1.3 第三題...............................................6 2.1.4 第四題...............................................7 2.1.5 第五題...............................................7 2.1.6 第六題...............................................8 2.2 GUI界面設計思想............................................9 第三章 調試及結果分析............................................12 3.1 GUI界面的結果與調試.......................................12 3.2 各題目的結果與調試.........................................12 3.2.1 第一題...............................................12 3.2.2 第二題...............................................13 3.2.3 第三題...............................................14 3.2.4 第四題...............................................15 3.2.5 第五題...............................................16 3.2.6 第六題...............................................21 第四章 課程設計總結..............................................24 4.1 課程設計所遇問題及解決方案.................................24 4.2 課程設計心得體會...........................................25 附錄:............................................................26 參考文獻..........................................................35 第一章 設計目的及要求
1.1 課程設計目的
1.全面復習課程所學理論知識,鞏固所學知識重點和難點,將理論與實踐很好地結合起來。
2.掌握信號分析與處理的基本方法與實現
3.提高綜合運用所學知識獨立分析和解決問題的能力; 4.熟練使用一種高級語言進行編程實現。
1.2 課程設計要求
一、使用MATLAB(或其它開發工具)編程實現上述內容,寫出課程設計報告。濾波器設計題目應盡量避免使用現成的工具箱函數。為便于分析與觀察,設計中所有頻譜顯示中的頻率參數均應對折疊頻率歸一化。
二、課程設計報告的內容包括:
(1)課程設計題目和題目設計要求;(2)設計思想和系統功能分析;
(3)設計中關鍵部分的理論分析與計算,關鍵模塊的設計思路;(4)測試數據、測試輸出結果,及必要的理論分析和比較;
(5)總結,包括設計過程中遇到的問題和解決方法,設計心得與體會等;(6)參考文獻;(7)程序源代碼清單。
三、課程設計考核要求:
課程考核分三部分,一部分是上機率,占20%;第二部分是檢查成績,最后兩次上機為檢查時間,占50%;第三部分為課程設計報告,占30%。注意:
(1)演示系統使用GUI界面或混合編程實現集成打包發布,酌情加分。(2)若發現程序或課程設計報告雷同,一律不及格。
1.3 課程設計選做題目
選題1.音樂信號處理:
1)獲取一段音樂或語音信號,設計單回聲濾波器,實現信號的單回聲產 生。給出加入單回聲前后的信號頻譜。
2)設計多重回聲濾波器,實現多重回聲效果。給出加入多重回聲后的信號頻譜。
3)設計均衡器,使得得不同頻率的混合音頻信號,通過一個均衡器后,增強或削減某些頻率區域。
選題二.對混有噪聲的音樂信號進行濾波:
1)在一段音樂信號中混入兩個頻率的正弦型干擾信號,利用FFT計算該混合信號的頻譜并確定干擾信號的頻譜;
2)利用二階帶阻濾波器設計一個能濾出干擾信號的梳狀濾波器; 3)利用梳狀濾波器濾除信號中的噪聲,播放處理前后的信號,并比較處理前后的結果
本次課程設計共有6道必做題目,并且我們并沒有系統的學過MATLAB,所以我并沒有做選做題。
第二章 設計題目及思想
2.1 各題目的設計思想
2.1.1 第一題
一、題目:
1.給定模擬信號:xa(t)?e?1000t
1)選擇采樣頻率Fs = 5000Hz和合適的信號長度,采樣得到序列 x1(n)。求并畫出x1(n)及其序列傅里葉變換 |X1(ejw)|。
2)選擇采樣頻率Fs = 1000Hz和合適的信號長度,采樣得到序列 x2(n)。求并畫出x2(n)及其序列傅里葉變換 |X2(ejw)|。3)說明|X1(ejw)|與|X2(ejw)|間的區別,為什么?
二、思想:
第一題主要的考查點是對連續時間信號的抽樣,對抽樣信號進行傅里葉變換以及不同采樣頻率對幅頻特性曲線的影響等。主要的理論依據如下:
(1)對連續時間信號的抽樣:設連續時間信號為x(t),則對其采樣得到的離散時間信號為x(n)=x(nT),T為采樣周期;
(2)離散時間信號的傅里葉變換:X(e)?FT[x(n)]?j?
由于抽樣后的離散時間信號題目沒有給出,故應先對連續信號做抽樣,后再對離散時間信號進行傅里葉變換。本次我直接采用輸入公式的方式進行傅里葉變換。
n????x(n)e??j?n。
2.1.2 第二題
一、題目:
2.已知兩系統分別用下面差分方程描述:
y1(n)?x(n)?x(n?1)
y2(n)?x(n)?x(n?1)
試分別寫出它們的傳輸函數,并分別打印H(ejw)~w曲線。說明這兩個系統的區別。
二、思想:
第二題的主要考查點是由系統的方程得出系統的傳輸函數。而在MATLAB中有freqz函數可直接求出系統的傳輸函數,然后由abs函數以及angle函數可得出其幅頻相頻特性曲線。
2.1.3 第三題
一、題目:
3.已知已調信號x(t)?cos(?t)cos(9?t),其中調制信號cos(?t),載波為cos(9?t)。
1)選擇合適的采樣頻率及信號長度,使用FFT分析該已調信號的頻譜并畫出其幅頻特性和相頻特性曲線圖。2)對該已調信號進行解調,恢復原調制信號。
二、思想:
第三題的主要考查點是信號的調制與解調。這屬于通信原理的主要原理知識。本題第一問需要使用FFT分析已調信號的頻譜特性,在MATLAB中FFT可以直接作為函數調用,所以我選擇直接調用FFT對其進行分析。第二問中要 對已調信號進行解調。其主要思想是解調已調信號需要先將已調信號乘以載波后選擇適當的濾波器進行濾波,將其多余信號濾除。
2.1.4 第四題
一、題目:
4.已知三角波序列x1(n)和反三角波序列x2(n):
?n?1,0?n?3?4?n,0?n?3??x1(n)??8?n,4?n?7 x2(n)??n?3,4?n?7
?0,?0,其它其它??用N=8點FFT分析序列x1(n)和x2(n)的幅頻特性,觀察兩者的序列形狀和頻譜特性曲線有什么異同?繪出兩序列及其幅頻特性曲線。在x1(n)和x2(n)的末尾補零,用N=16點FFT分析這兩個信號的幅頻特性,觀察幅頻特性發生了什么變化?兩情況的FFT頻譜還有相同之處嗎?這些變化說明了什么?
二、思想:
第四題的主要考查點是FFT快速傅里葉變換的用法。而這在MATLAB中,FFT可以直接作為函數調用,所以我選擇用FFT快速傅里葉變換進行分析三角波序列。不過首先要將三角波以及反三角波的取值范圍和函數值計算出來,后才可直接對序列進行FFT變換并分析其頻譜特性。
2.1.5 第五題
一、題目:
5.設有一信號x(n)=1+cos(n)+cos(4?2?n),設計各種IIR數字濾波器以實現: 31)低通濾波器,濾除cos(2??n)的成分,保留成分1+cos(n)342)高通濾波器,濾除1+cos(n)的成分,保留成分cos(4?2?n)33)帶通濾波器,濾除1+cos(?2??n)的成分,保留成分cos(n)342?n)34)帶阻濾波器,濾除cos(n)的成分,保留成分1+cos(4要求:1)求出各個濾波器的階數,設計各濾波器。畫出各濾波器的幅頻和相 頻特性,計算濾波器的系統函數H(z)。2)畫出濾波前后信號的時域、頻域波形。
二、思想:
第五題的主要考查點是用IIR雙線性變換法設計BW類型(低通、高通、帶通以及帯阻)數字濾波器。
其主要理論依據如下:(1)正切變換實現頻率壓縮:
??2tan(?1T/2)/T
(2)雙線性變換:
s?(2/T)[(1?z?1)(1?z?1)]
或
z?(2/T?s)/(2T/? s
(3)將所需數字濾波器的邊界頻率轉換成相應類型的模擬濾波器的邊界頻率公式為:
??(2/T)tan(?/2)
其設計主要按照課中所學濾波器設計的步驟進行分步設計。但由于其系統函數的公式無法直接輸入,故采用buttord函數進行巴特沃斯濾波器的方法分析所給參數計算出其系統函數的系數矩陣。再借由系統函數的系數矩陣得出具體的系統函數。得出系統函數后便可得到相應的階數以及幅頻、相頻特性。
濾波前的信號頻域波形由先對時域波形進行FFT變換后得出。對原信號的濾波則采用直接調用filter函數進行對原函數的濾波,而頻域波形同樣經由先FFT變換分析后得出。
2.1.6 第六題
一、題目:
6.1)用Hanning窗設計一線性相位帶通數字濾波器,要求:N=15。觀察它的實際3dB和20dB帶寬。N=45,重復這一設計,觀察幅頻和相位特性的變化,注意長度N變化的影響;
2)分別改用矩形窗和Blackman窗,設計(1)中的帶通濾波器,觀察并記錄窗函數對濾波器幅頻特性的影響,比較三種窗的特點;總結窗的不同長度和不同窗對濾波器的影響
二、思想:
第六題的主要考查點是幾種主要的窗函數(矩形窗、漢寧窗、哈明窗等)對離散時間信號的截取,并用FFT對其頻譜進行分析。其主要理論依據如下:
(1)矩形窗(Rectangle Window)
wR(n)?RN(n)
其幅度函數為:
WRg(?)?sin(?N/2)/sin(?/2)
(2)漢寧(Hanning)窗——升余弦窗
wHn(n)?0.5[1?cos(2?n/(N?1))]RN(n)
其頻譜函數為:
WHn(ej?)?FT[wHn(n)]?WHng(?)e?j(N?1)?/2
其幅度函數為:
WHng(?)?0.5WRg(?)?0.25[WRg(??2?/N)?WRg(??2?/N)]
(3)哈明(Hamming)窗——改進的升余弦窗
wHm(n)?[0.54?0.46cos(2?n/(N?1))]RN(n)
其頻譜函數為:
WHm(ej?)?0.54WR(ej?)?0.23WR(ej(??2?/(N?1)))?0.23WR(ej(??2?/(N?1)))
當N??1時,其幅度函數可近似表示為:
WHmg(?)?0.54WRg(?)?0.23WRg(??2?/N)?0.23WRg(??2?/N)
2.2 GUI界面設計思想
本次課程設計由于結果中圖形太多,若一次性完成所以題目的演示則需要開創許多個新的窗口進行圖形建立,這樣不方便驗收及查看。所以最后決定采用圖形用戶(Graphical User Interface,簡稱 GUI)界面,下面對GUI界面進行簡單的一些介紹。
GUI 是 Graphical User Interface 的簡稱,即圖形用戶界面,通常人機交互圖形化用戶界面設計經常讀做“goo-ee”,準確來說 GUI 就是屏幕產品的視覺體驗和互動操作部分。
GUI 是一種結合計算機科學、美學、心理學、行為學,及各商業領域需求分析的人機系統工程,強調人—機—環境三者作為一個系統進行總體設計。
在MATLAB主界面中輸入“guide”,再敲擊回車鍵,彈出GUI界面窗口,即可新建GUI界面,如下圖所示:
圖2.5 GUI界面的新建窗口圖
在圖2.5的窗口中點擊“OK”,則可新建一個GUI界面,并進入其編輯窗口,如圖2.6所示:
圖2.6 GUI界面的編輯窗口圖
隨后便可在此窗口內編輯演示界面,此次設計主要利用的是Static Text(靜態文本)和Push Button(按鈕)。在界面中輸入相關的靜態文本,并新建若干個按鈕,再以此在每個按鈕上點擊右鍵,選擇View CallBacks調出Call Back函數,將相應設計題的源代碼輸入Call Back函數界面中對應按鈕的段落后。如圖2.7 和2.8所示:
圖2.7 調用CallBack的操作流程圖
圖2.8 CallBack代碼編輯窗口圖
如此便可以建立一個方便、美觀又直觀的演示界面,以便老師驗收時操作簡單、條理清晰、并且用時不長。第三章 調試及結果分析
3.1 GUI界面的結果與調試
這次設計的演示界面采用的是GUI界面,這一點在前面提到過,在此不贅述了,只將界面的調試結果說明一下。演示界面如圖3.1所示:
圖3.1 演示界面圖
如圖3.1所示,用戶克根據需要選擇題目,每個題中又有不同的選項,只要點擊一下對應的按鈕,相關信號的處理結果就會出現在一個新的figure窗口中。
3.2 各題目的結果與調試
3.2.1 第一題
第一題的調試結果如圖3.2所示,各圖形的意義均有明確表明。
圖3.2 第一題的調試結果圖
分析: 分別以所要求采樣頻率fs=5000Hz、1000Hz對xa(t)進行等間隔采樣,得到x(n)?xa(nT),(T?1/fs為采樣周期),可知,采樣信號的頻譜函數是在原模擬信號頻譜函數的周期延拓;若以頻率f為自變量,則以采樣頻率fs?1/T為延拓周期;對頻帶限于fc的模擬信號xa(t),根據采樣定理,只有當fs?2fc時,采樣后才不會發生頻譜混疊失真。但是在Matlab上是無法計算連續函數,只有在當fs足夠大的時候,我們才將頻譜混疊忽略不計,從而可對采樣序列進行傅里葉變換;最后應用subplot()命令實現畫圖,并注意到要歸一化。
由以上實驗得到的圖形結果可以看到:,當采樣頻率越大的時候,采樣信號的頻譜越陡峭,而其失真情況也越來越小,根據采樣定理“采樣頻率越接近信號頻率,其失真情況就越小”可以得到上述結論。
3.2.2 第二題
第二題的調試結果如圖3.3所示,各圖形的意義均有明確表明。
圖3.3 第二題的調試結果圖
分析:由于所求系統的系統方程已經由題目可知,則其零極點分布圖也可由上圖所知。故根據計算所得出其系統函數后做FFT變換所得幅頻特性和相頻特性均由上圖可知。
3.2.3 第三題
第三題的調試結果如圖3.4所示,上圖為第一問結果,下圖為第二問結果。
圖3.4 第三題的調試結果圖
分析:當已調信號進行不同點數的采樣后再經不同間隔的FFT變換后,其展現的幅頻特性以及相頻特性類似于上圖。因選取的采樣點不同則結果不同。第二問中的濾波器的設計參數由題目中的調制信號和載波決定,由此設計出的低通濾波器的系統函數圖如上。最后因濾波器的不嚴密而導致解調后的原信號有所失真,并不能完完全全的解調出原信號。
3.2.4 第四題
第四題的調試結果如圖3.5所示,圖中所代表意義均有標明
圖3.5 第四題的調試結果圖
分析:首先先根據題目中所給的三角波函數以及反三角波函數的函數式得出其波形。經由不同采樣的FFT變換后有stem畫出其圖形如上。由圖可看出三角波序列和反三角波序列在8點的FFT變換后的圖形基本一樣,沒有太大差別。而16點FFT后的圖形則有不小差異,此說明對其FFT變換時,取的點數越多,圖形差異越大。
3.2.5 第五題
第五題的調試結果第一問中低通濾波器的圖形如圖3.6所示。
圖3.6 第五題的低通濾波器調試結果圖
高通濾波器的圖形如圖3.7所示。
圖3.7 第五題的高通濾波器調試結果圖 帶通濾波器的圖形如圖3.8所示。
圖3.8 第五題的帶通濾波器調試結果圖 帶阻濾波器的圖形如圖3.9所示。
圖3.9 第五題的帶阻濾波器調試結果圖 分析:經由一下理論知識可依次求出各濾波器的參數及系統函數。(1)正切變換實現頻率壓縮:
??2tan(?1T/2)/T
(2)雙線性變換:
s?(2/T)[(1?z?1)(1?z?1)]
或
z?(2/T?s)/(2T/? s(3)將所需數字濾波器的邊界頻率轉換成相應類型的模擬濾波器的邊界頻率公式為:
??(2/T)tan(?/2)
頻域圖形均由FFT變換后可得出。此次設計IIR數字濾波器是其參數選擇并不精準,均由自己在可行范圍中嘗試得出最像的結果。但其濾波器的幅頻特性和相頻特性仍然具有失真現象。
3.2.6 第六題
第六題的調試結果依次的圖形如圖4.0所示。
圖4.0 第六題的調試結果圖
分析:此圖由上往下依次為N=15及N=45的漢明窗、布萊克曼窗和矩形窗。由圖形可以看出N越小時窗函數的主瓣范圍越大,副瓣坡度越緩。濾波器濾波功能越好。
第四章 課程設計總結
4.1 課程設計所遇問題及解決方案
拿到設計題時,完全不知道從何處入手,一開始只會按照書上的解題思路一步步來算,一步步來解這些題目,解出來后再設法將其輸入編程中,從而的到想要的答案。可是每次如此,系統輸出的結果總是和預想中的不一樣,有些甚至不知道哪里出了錯。不過后來,在翻閱了有關參考文獻后,知道了題目中大部分內容都可以通過MATLAB強大的函數工具箱里的函數直接實現。開始設計后,總是用錯函數,輸錯參數等,這類問題層出不窮,畢竟是第一次用MATLAB進行設計實踐,很多問題還是要虛心向老師和同學請教的。在很多次的請教,修改后,程序基本成功地得到了運行,調試過程中又遇到了一些小問題,大多是由于粗心 導致的,這些問題在調試過程中都得到了修正。
這次課程設計過程中遇到的主要問題是頻率歸一化的問題,開始對歸一化的概念不是很清楚。在問了班上能力較強的同學后,對這個概念深入理解了,并在程序中成功地實現了。
4.2 課程設計心得體會
通過這兩周的《現代信號處理》課程設計實踐,我學習會了MATLAB編程語言的基本概念、語法、語義和數據類型的使用特點,加深了對數字信號處理這門學科所學理論知識的理解,掌握了運用結構化程序設計的基本思想和方法,更重要的是培養了自己的自學能力。
因為這是我們第一次接觸MATLAB編程語言,在編寫程序以及調試的過程中遇到了很多困難,但是我通過去圖書館查找資料,請教同學老師,再自己一點點改善程序,最終還是編寫出一個比較完善的程序,基本實現了所有要求功能,這是最值得我欣慰的一點。
剛拿到程序設計課題時,我感覺一片茫然,因為在之前的信號處理學習中,本身對數字信號處理這門學科的學習就不精深,更何況只是在一些例題中接觸過MATLAB語言,甚至沒有看過一些基礎的書籍,更沒有上過課,所以初次遇到一個實際問題,感覺無從下手。這是由于自己對MATLAB的模塊設計不夠理解,同時對MATLAB的基本語句一無所知,不過通過請教老師懂得了首先要了解解題思路,以及若要實現此次設計需要哪些最基本的思路和函數。這樣一下子豁然開朗,掌握了基本設計思路之后,后面的編程就順利多了。至此,我真真體會到清晰地思路對成功編寫一個程序的重要性。
當然成功編寫一個程序絕非易事,之前,我總以為程序能夠正常運行,就代表著編程成功,后來我才發現我大錯特錯了。我用了三天時間,完成了程序的編寫、改錯,但我立刻發現盡管程序能夠正常運行,部分功能卻不完善,甚至不能出現自己想要的結果。經過一次又一次調試、修改又修改,一點一點發現問題并改正,我才真正發現編程遠沒有想象中的簡單,并且深刻體會到編程和單純的解題是有著多么大的不同。它需要的不僅是清晰地編程思路、編程技巧,還需要細心,有耐心有毅力。
在編程過程中,我遇到了許多問題,通過查找資料也未能找到原因,每次我想老師請教,可老師總不是萬能的,顧不到每一位同學的要求。這時,同學就是一個很好的求助對象。我們可以找曾經接觸過MATLAB的同學學習、交流、討論。這樣不僅我們可以學習,他們也可以更加鞏固他們的知識。我想這便是團隊 精神,有的時候真的是人多力量大。
最后,在此次編程過程中,我收獲的不僅僅是對上學期已學的知識的鞏固,和MATLAB這項新的工作平臺,我還學會了遇到難題時不能輕易放棄,要有迎難而上的勇氣,有時候自己一個人完成不了的理解不了的知識,多請教請教別人是一項很好的選擇等等。總之,這次課程設計讓我學會了很多,我會銘記于心,讓其在以后的學習、生活或者工作中都時刻警醒著我。
附錄:
源程序清單
%1.現代碼 figure(1)t=-0.005:0.0001:0.005;y1=exp(-1000*abs(t));T=0.0002;n=-25:1:25;y2=exp(-1000*abs(n*T));N=200;k=0:1:N;w=pi*k/N;X=y2*exp(-j*n'*w);X=real(X);w=[-fliplr(w),w(2:N+1)];X=[fliplr(X),X(2:N+1)];subplot(2,2,1);plot(t,y1);title('原函數');xlabel('t/秒');ylabel('y1(n)');subplot(2,2,2);stem(n*T,y2,'.');xlabel('n*T/秒');ylabel('y2(n)');title('(1)離散序列,fs=5000');subplot(2,3,4);plot(w/pi,X);xlabel('頻率/pi');ylabel('Xl(w)')title('(1)序列的傅里葉變換')t=-0.005:0.0001:0.005;y1=exp(-1000*abs(t));T=0.001;n=-5:1:5;y2=exp(-1000*abs(n*T));N=200;k=0:1:N;w=pi*k/N;X=y2*exp(-j*n'*w);X=real(X);w=[-fliplr(w),w(2:N+1)];X=[fliplr(X),X(2:N+1)];subplot(2,3,5);stem(n*T,y2,'.');xlabel('n*T/秒');ylabel('y2(n)');title('(2)離散序列,fs=1000');subplot(2,3,6);plot(w/pi,X);xlabel('頻率/pi');ylabel('Xl(w)')title('(2)序列的傅里葉變換')
%2.figure(1)B=[1,1];A=1;subplot(2,3,3);zplane(B,A);xlabel('實部Re');ylabel('虛部Im');title('y(n)=x(n)+x(n-1)傳輸函數零極點分布');grid on [H,w]=freqz(B,A,'whole');subplot(2,3,1);plot(w/pi,abs(H),'linewidth',2);grid on;xlabel('omega/pi');ylabel('|H(e^j^omega)|');title('幅頻響應特性');axis([0,2,0,2.2]);subplot(2,3,2);plot(w/pi,angle(H),'linewidth',2);grid on;axis([-0.1,2.1,-1.6,1.6]);xlabel('omega/pi');ylabel('phi(omega)');title('相頻響應特性');B=[1,-1];A=1;subplot(2,3,6);zplane(B,A);xlabel('實部Re');ylabel('虛部Im');title('y(n)=x(n)-x(n-1)傳輸函數零極點分布');grid on [H,w]=freqz(B,A,'whole');subplot(2,3,4);plot(w/pi,abs(H),'linewidth',2);grid on;xlabel('omega/pi');ylabel('|H(e^j^omega)|');title('幅頻響應特性 ');axis([0,2,0,2.2]);subplot(2,3,5);plot(w/pi,angle(H),'linewidth',2);grid on;xlabel('omega/pi');ylabel('phi(omega)');title('相頻響應特性');axis([-0.1,2.1,-1.6,1.6]);
%3.%(1)figure(1)t=0:1.9:100;n=0:1:99;x1=cos(pi*t);x2=cos(9*pi*t);y1=x1.*x2;y2=fft(y1,100);subplot(3,1,1);plot(t,y1);title('已調信號x');xlabel('t/秒');ylabel('y1(n)');subplot(3,1,2);stem(n,abs(y2),'.');title('幅頻特性');xlabel('頻率/pi');ylabel('幅值');pha=angle(y2);subplot(3,1,3);stem(n,pha,'.');title('相頻特性');xlabel('頻率/pi');ylabel('相位(rad)');axis([0 99-5 5]);
%(2)figure(2)t1=1;t=[0:0.05:5];x=cos(pi*t).*cos(9*pi*t);%已調信號 subplot(2,2,1);plot(t,x);title('已調信號');y=x.*cos(9*pi*t);%已調信號再乘以載波信號 wp=6*pi/5;ws=14*pi/8;Rp=3;As=30;%選定濾波器的參數,并設計模擬低通濾波器 [N,wc]=buttord(wp,ws,Rp,As,'s');[B,A]=butter(N,wc,'s');[H,w]=freqs(B,A,127);%濾波器的系統函數 subplot(2,2,2);plot(w/(2*pi),abs(H));axis([0,5,0,1]);title('濾波器系統函數');w1=linspace(0,40,64);%求y的頻譜 F1=y*exp(-j*t'*w1);F=[fliplr(F1),F1(2:64)];w=[-fliplr(w1),w1(2:64)];subplot(2,2,3);plot(w,abs(F)),title('y的頻譜');Y3=H'.*F;%通過信號的頻譜與系統函數相乘進行濾波 z=Y3*exp(j*w'*t)/pi;%濾波后的序列 subplot(2,2,4);plot(t,z);title('濾波后的序列');
%4.figure(1)n1=0:3,n2=4:7;x1=n1+1,x2=8-n2;subplot(2,3,1);stem([n1,n2],[x1,x2],'.');title('三角波序列');x=[1 2 3 4 4 3 2 1];subplot(2,3,2);stem(abs(fft(x)),'.');title('三角波序列8點FFT');x=[1 2 3 4 4 3 2 1 0 0 0 0 0 0 0 0];subplot(2,3,3);stem(abs(fft(x)),'.');title('三角波序列16點FFT');n1=0:3,n2=4:7;x1=4-n1,x2=n2-3;subplot(2,3,4);stem([n1,n2],[x1,x2],'.');title('反三角波序列');x=[4 3 2 1 1 2 3 4];subplot(2,3,5);stem(abs(fft(x)),'.');title('反三角波序列8點FFT');x=[4 3 2 1 1 2 3 4 0 0 0 0 0 0 0 0];subplot(2,3,6);stem(abs(fft(x)),'.');title('反三角波序列16點FFT');
%5.%低通 figure(1)n=0:1:24;x=1+cos(pi*n/4)+cos(2/3*pi*n);Wp=1/4*pi;Ws=2/3*pi;Ap=3;As=30;Os=2*tan(Ws/2);Op=2*tan(Wp/2);N=ceil(1/2*log10((10^(0.1*As)-1)/(10^(0.1*Ap)-1))./log10(Os/Op)), Oc1=Op*(10^(0.1*Ap)-1)^(-1/(2*N));Oc2=Os*(10^(0.1*As)-1)^(-1/(2*N));Oc=[Oc1,Oc2];Oc=min(Oc)
wp=[Wp/pi];wr=[Ws/pi];[N,wc]=buttord(wp,wr,Ap,As,'s');[b,a]=butter(N,wc,'low');sysl=tf(b,a)w=linspace(0,2*pi,500);
n=0:100;x1=1+cos(pi*n/4)+cos(2*pi*n/3);subplot(221),plot(n,x1);title('濾波前時域波形');y1=fft(x1,500);subplot(222),plot(w,abs(y1));title('濾波前頻域波形');
x2=filter(b,a,x1);subplot(223),plot(n,x2)title('濾波后的時域波形');y2=fft(x2,500);subplot(224),plot(w,abs(y2));title('濾波后的頻域波形');
figure(2);freqz(b,a,1000);title('濾波器幅頻相頻響應');%高通 figure(1)n=0:1:24;x=1+cos(pi*n/4)+cos(2/3*pi*n);Wp=2*pi/3;Ws=1*pi/4;Ap=3;As=30;Os=2*tan(Ws/2);Op=2*tan(Wp/2);N=ceil(1/2*log10((10^(0.1*As)-1)/(10^(0.1*Ap)-1))./log10(Op/Os)), Oc1=(1/Op)*(10^(0.1*Ap)-1)^(-1/(2*N));Oc2=(1/Os)*(10^(0.1*As)-1)^(-1/(2*N));Oc=[Oc1,Oc2];Oc=min(Oc)
wp=[Wp/pi];wr=[Ws/pi];[N,wc]=buttord(wp,wr,Ap,As,'s');[b,a]=butter(N,wc,'high');sysl=tf(b,a)w=linspace(0,2*pi,500);
n=0:100;x1=1+cos(pi*n/4)+cos(2*pi*n/3);subplot(221),plot(n,x1);title('濾波前時域波形');y1=fft(x1,500);subplot(222),plot(w,abs(y1));title('濾波前頻域波形');
x2=filter(b,a,x1);subplot(223),plot(n,x2)title('濾波后的時域波形');y2=fft(x2,500);subplot(224),plot(w,abs(y2));title('濾波后的頻域波形');
figure(2);freqz(b,a,1000);title('濾波器幅頻相頻響應');
%帶通 figure(1);wp1=(3*pi)/16;wp2=(5*pi)/16;ap=1;ws1=(1*pi)/16;ws2=(5*pi)/9;as=50;wp=[wp1/pi wp2/pi];ws=[ws1/pi ws2/pi];[N,wn]=buttord(wp,ws,ap,as);[b,a]=butter(N,wn,'bandpass');N, sysl=tf(b,a), w=linspace(0,2*pi,500);
n=0:100;x1=1+cos(pi*n/4)+cos(2*pi*n/3);subplot(221),plot(n,x1);title('濾波前時域波形');y1=fft(x1,500);subplot(222),plot(w,abs(y1));title('濾波前頻域波形');
x2=filter(b,a,x1);subplot(223),plot(n,x2)title('濾波后的時域波形');y2=fft(x2,500);subplot(224),plot(w,abs(y2));title('濾波后的頻域波形')
figure(2);freqz(b,a,1000);title('濾波器幅頻相頻響應');
%帶阻 figure(1);
wp1=pi/16;wp2=(5*pi)/9;ap=1;ws1=(3*pi)/16;ws2=(5*pi)/16;as=50;wp=[wp1/pi,wp2/pi];ws=[ws1/pi,ws2/pi];[N,wc]=buttord(ws,wp,ap,as);[b,a]=butter(N,wc,'stop');w=linspace(0,2*pi,500);N, sysl=tf(b,a)
n=0:100;x1=1+cos(pi*n/4)+cos(2*pi*n/3);subplot(221),plot(n,x1);title('濾波前時域波形');y1=fft(x1,500);subplot(222),plot(w,abs(y1));title('濾波前頻域波形');
x2=filter(b,a,x1);subplot(223),plot(n,x2)title('濾波后的時域波形');y2=fft(x2,500);subplot(224),plot(w,abs(y2));title('濾波后的頻域波形')
figure(2);freqz(b,a,1000);title('濾波器幅頻相頻響應');
%6.%(1)figure(1)Window=hanning(16);h=fir1(15,[0.3 0.5],Window);
freqz(h,1)title('N=15的漢寧窗');figure(2)Window=hanning(46);h=fir1(45,[0.3 0.5],Window);freqz(h,1)title('N=45的漢寧窗');%(2)figure(3)Window=blackman(16);b=fir1(15,[0.3 0.5],Window);freqz(b,1)title('N=15的布萊克曼窗');
figure(4)Window=blackman(46);b=fir1(45,[0.3 0.5],Window);freqz(b,1)title('N=45的布萊克曼窗');
figure(5)Window=boxcar(16);b=fir1(15,[0.3 0.5],Window);freqz(b,1)title('N=15的矩形窗');
figure(6)Window=boxcar(46);b=fir1(45,[0.3 0.5],Window);freqz(b,1)title('N=45的矩形窗');
參考文獻
[1]高西全,丁玉美.數字信號處理.第三版.西安:西安電子科技大學出版社,2008 [2]彭軍,李宏.信號與信息處理基礎.北京:中國鐵道出版社,2009 [3]A.V.奧本海姆,等.信號與系統.劉樹棠,譯.西安:西安交通大學出版社,1985 [4]程佩青.數字信號處理教程.第二版.北京:清華大學出版社,2001 [5]陳懷琛,吳大正,高西全.MATLAB在電子信息課程中的應用.第三版.北京:電子工業出版社,2006 [6]董長虹.MATLAB信號處理與應用.北京:國防工業出版社,2005
第二篇:中南大學數字信號處理課程設計報告2
中南大學
數字信號處理課程設計報告
專業班級:
指導老師:
姓
名:
學
號:
目
錄
一、課程設計要求
二、設計過程
(1)設計題目(2)設計源代碼(3)設計結果(4)結果分析
三、設計總結與心得體會
四、課程設計指導書
一、課程設計要求
1、課程設計指導書
①《數字信號處理(第二版)》,丁玉美等,西安電子科技大學出版社; ②《MATLAB 及在電子信息課程中的應用》,陳懷琛等,電子工業出版社。
2、課程設計內容: ⑴語音信號去噪處理 主要要求:
1)在windows系統下的錄音機錄制一段1s左右的語音信號作為原聲信號,在MATLAB軟件平臺下,利用函數wavread對語音信號進行采樣,記住采樣頻率和采樣點數;
2)畫出語音信號的時域波形,對采樣后的語音進行fft變換,得到信號的頻譜特性;對語音信號分別加入正弦噪聲和白噪聲,畫出加噪信號的時域波形和頻譜圖;
3)根據對加噪語音信號譜分析結果,確定濾除噪聲濾波器的技術指標,設計合適的數字濾波器,并畫出濾波器的頻域響應;
4)用所設計的濾波器對加噪的信號進行濾波,在同一個窗口畫出濾波前后信號的時域圖和頻譜圖,對濾波前后的信號進行對比,分析信號變化; 5)利用sound(x)回放語音信號,驗證設計效果。
⑵語音信號的延時和混響 主要要求:
1)利用Windows下的錄音機或其他軟件,錄制一段自己的語音信號,時間控制在1s左右,并對錄制的信號進行采樣;
2)語音信號的頻譜分析,畫出采樣后語音信號的時域波形和頻譜圖; 3)將信號加入延時和混響,再分析其頻譜,并與原始信號頻譜進行比較; 4)設計幾種特殊類型的濾波器:單回聲濾波器,多重回聲濾波器,全通結構的混響器,并畫出濾波器的頻域響應;
5)用自己設計的濾波器對采集的語音信號進行濾波;
6)分析得到信號的頻譜,畫出濾波后信號的時域波形和頻譜,并對濾波前后的信號進行對比,分析信號的變化; 7)回放語音信號。
⑶數字濾波器的設計及實現 主要要求:
1)調用信號產生函數mstg產生三路抑制載波調幅信號相加構成的復合信號st,觀察st的時域波形和幅頻特性曲線;
2)由要求將st中的三路調幅信號分離,通過觀察st的幅頻特性曲線,分別確定可以分離st中三路抑制載波單頻調幅信號的三個濾波器(低通濾波器、帶通濾波器、高通濾波器)的通帶截止頻率和阻帶截止頻率,要求濾波器的通帶最大衰減為0.1dB,阻帶最小衰減為60dB;
3)編程調用MATLAB濾波器設計函數分別設計這三個數字濾波器,并繪圖顯示其幅頻特性曲線;
4)調用濾波函數filter,用所設計的三個濾波器分別對復合信號st進行濾波,分離出st中的三路不同載波頻率的調幅信號,并繪圖顯示濾波后信號的時域波形和頻譜,觀察分離效果。
⑷心電信號的處理 主要要求:
1)在MATLAB軟件平臺下,給原始的心電信號疊加上噪聲或干擾,干擾類型分為如下幾種:白噪聲、工頻干擾(50Hz)、諧波干擾(二次、三次諧波為主,分別為100Hz、150Hz)繪出疊加噪聲后的心電信號時域和頻譜圖,在視覺上與原始心電信號圖形對比,分析頻域基本特征變化。
2)給定濾波器的規一化性能指標(參考指標,實際中依據每個同學所疊加噪聲情況而定),例如:通帶截止頻率wp=0.25*pi, 阻通帶截止頻率ws=0.3*pi;通帶最大衰減Rp=1 dB;阻帶最小衰減Rs=15 dB
3)采用窗函數法設計各型FIR濾波器(低通、高通、帶通、帶阻中的至少2種類型),來對疊加干擾前后的心電信號進行濾波處理,繪出濾波器的頻域響應及濾波后信號的時域波形和頻譜,并對濾波前后的信號進行對比,分析信號的變化;在相同的性能指標下比較各方法的濾波效果,并從理論上進行分析或解釋;
4)采用雙線性變換法利用不同的原型低通濾波器(Butterworth型與切比雪夫I型)來設計各型IIR濾波器(低通、高通、帶通、帶阻中的至少2種類型)繪出濾波器的頻域響應,并用這些數字濾波器對含噪心電信號分別進行濾波處理;比較不同方法下設計出來的數字濾波器的濾波效果,并從理論上進行分析或解釋;
5)心電信號波形觀察、頻譜觀察,對濾波后的心電信號觀察其時域、頻域特征變化。
3、具體要求
⑴、使用 MATLAB(或其它開發工具)編程實現上述內容,寫出課程設計報告。
⑵、課程設計報告的內容包括:
①課程設計題目和題目設計要求;
②設計思想和系統功能結構及功能說明;
③設計中關鍵部分的詳細描述和介紹,采用流程圖描述關鍵模塊的設計思路;
④總結,包括設計過程中遇到的問題和解決方法,心得體會等;
⑤參考文獻;
⑥程序源代碼清單。
4、考核方式
課程考核分三部分,一部分是上機率,占 20%;第二部分是檢查成績,最后兩次上機為
檢查時間,占 50%;第三部分為課程設計報告,占 30%。注意:
⑴、使用 GUI 界面或混合編程實現仿真程序,酌情加分; ⑵、若發現程序或課程設計報告雷同,一律不及格。⑶、主要參考資料
[1] S.K.Mitra.Digital Signal Processing: A Computer Based Approach, 3rd Edition [M], New York, USA: McGraw-Hill, 2000 [2] R.G.Lyons.Understanding Digital Signal Processing, 2nd Edition [M].New Jersey, USA: Prentice Hall, 2005 [3] 程佩青.數字信號處理教程, 第二版[M].北京: 清華大學出版社, 2001 [4] 趙樹杰等.數字信號處理[M].西安: 西安電子科技大學出版社, 1997 [5] 丁玉美等.數字信號處理—時域離散隨機信號處理[M].西安: 西安電子科技大學出版社, 2002 [6] 陳懷琛等.MATLAB 及在電子信息課程中的應用[M], 北京: 電子工業出版社出版, 2002 ⑷、課程設計進度安排
序號 階段內容 合計(天)一 設計準備 1 二 方案選擇及初步設計 2 三 目標項目設計實現及調試 3 四 撰寫課程設計報告 2 五 上機檢查成績 2 總計(2 周)10
二.設計過程
第一題、語音信號去噪處理
1.設計要求:
(1)在windows系統下的錄音機錄制一段1s左右的語音信號作為原聲信號,在MATLAB軟件平臺下,利用函數wavread對語音信號進行采樣,記住采樣頻率和采樣點數;
(2)畫出語音信號的時域波形,對采樣后的語音進行fft變換,得到信號的頻譜特性;對語音信號分別加入正弦噪聲和白噪聲,畫出加噪信號的時域波形和頻譜圖;
(3)根據對加噪語音信號譜分析結果,確定濾除噪聲濾波器的技術指標,設計合適的數字濾波器,并畫出濾波器的頻域響應;
(4)用所設計的濾波器對加噪的信號進行濾波,在同一個窗口畫出濾波前后信號的時域圖和頻譜圖,對濾波前后的信號進行對比,分析信號變化;(5)利用sound(x)回放語音信號,驗證設計效果。
2.設計步驟:
(1)找到7s的語音信號,利用函數wavread對語音信號進行信號讀取;(2)計算樣本時刻和頻譜圖的頻率,并進行N+1點FFT變換;(3)加噪聲為5000Hz的正弦信號正弦噪聲,采用awgn函數加信噪比為10的高斯白噪聲;
(4)設計濾波器;
(5)繪出相應的時域、頻域圖;
(6)利用sound函數進行原始信號的語音播放,加噪聲音播放,以及濾波之后的語言播放。
3.設計實現:
(1)時域圖與頻譜圖(加正弦)
錄入原始信號的時域圖:
加入正弦信號后的時域圖: 濾波后的時域圖:
錄入原始信號的頻域圖:
加入正弦信號后的頻率圖:
濾波后的頻域圖:
采用巴斯低通濾波器濾除正弦波:
(2)具體代碼實現:
[x,fs,bits]=wavread('E:mcpass.wav');%原信號
n=size(x,1);
%提取采樣信號的長度 t=(0:length(x)-1)/fs;
%計算樣本時刻
f=fs*(0:(n+1)/2-1)/n+1;
%計算頻域圖的頻率
X=fft(x,n+1);
%進行N+1點FFT變換
ts=0:1/fs:(size(x)-1)/fs;
%將所加噪聲信號的點數調整到與原始信號相同 s=x+0.05*sin(2*pi*5000*ts)';
%加噪聲為5000Hz的正弦信號正弦噪聲 S=fft(s,n+1);
%加正弦噪聲后的頻域 %正弦濾波
wp=2000/fs*2*pi;
%2000為通帶截止頻率
ws=3000/fs*2*pi;
%3000為阻帶下限截止頻率
Rp=4;
%通帶波紋
Rs=25;
%阻帶波紋
T=1/fs;Fs=1/T;
%定義采樣間隔
Wp=2/T*tan(wp/2);
%計算對應的數字頻率
Ws=2/T*tan(ws/2);[N,wn]=buttord(Wp,Ws,Rp,Rs,'s');
%計算濾波器介數和截止頻率
[c,d]=butter(N,wn,'s');
%計算濾波器系統函數分子分母系數
[B,A]=bilinear(c,d,Fs);
%雙線性變換得到數字濾波器系統函數分子分母系數 [Hb,Wc]=freqz(B,A);sf=filter(B,A,s);
%對加噪信號進行濾波
Sf=fft(sf,n+1);
%對濾波后進行N+1點FFT變換
%繪圖部分 figure(3);plot(fs*Wc/(2*pi),20*log10(abs(Hb)));title('巴斯低通濾波器頻域響應圖');xlabel('頻率(Hz)');ylabel('幅度');figure(1);subplot(3,1,1);plot(t,x);title('原信號時域')xlabel('時間(s)');ylabel('幅度');figure(2);subplot(3,1,1);plot(f,abs(X(1:(n+1)/2)));title('原信號頻域')xlabel('頻率(Hz)');ylabel('幅度');figure(1);subplot(3,1,2);plot(t,s);title('加正弦信號后的時域')xlabel('時間(s)');ylabel('幅度');figure(2);subplot(3,1,2);plot(f,abs(S(1:(n+1)/2)));title('加正弦信號后的頻域圖')xlabel('頻率(Hz)');ylabel('幅度');figure(1)subplot(3,1,3);plot(t,sf);title('濾波后的時域圖');xlabel('時間(s)');ylabel('幅度');figure(2)subplot(3,1,3);plot(f,abs(Sf(1:(n+1)/2)));title('濾波后的頻域圖');xlabel('頻率(Hz)');ylabel('幅度');sound(x);sound(s);sound(sf);
(3)時域圖與頻域圖(加白噪聲)
加白噪聲后的時域圖和濾除之后的時域圖:
加白噪聲和濾除之后的頻域圖:
采用blackman函數濾波:
具體代碼實現:
[x,fs,bits]=wavread('E:hbsong.wav');N=size(x,1);t=(0:length(x)-1)/fs;f=fs*(0:(N+1)/2-1)/N+1;X=fft(x,N+1);%加高斯白噪聲
z=awgn(x,20);
%對信號加信噪比為10的高斯白噪聲 N1=size(z,1);
%提取采樣信號的長度 t=(0:length(z)-1)/fs;
%計算樣本時刻 f=fs*(0:(N1+1)/2-1)/N1+1;Z=fft(z,N1+1);Wp=2500/fs*2*pi;Ws=3000/fs*2*pi;
%計算對應的數字頻率 B=Ws-Wp;n=ceil(1*pi/B);wc=(Wp+Ws)/2;b=fir1(n-1,wc/pi,'stop',blackman(n));%blackman窗函數濾波 [H,w]=freqz(b,1);y=fftfilt(b,z);
t1=(0:length(y)-1)/fs;
Y=fft(y,N1+1);subplot(2,2,1);
plot(t,z);title('加高斯白噪聲后時域圖');subplot(2,2,2);plot(f,abs(Z(1:(N1+1)/2)));title('濾波前信號頻譜圖')figure
plot(fs*w/(2*pi),20*log10);title('blackman函數頻域響應圖');title('頻率響應')xlabel('頻率(Hz)');ylabel('幅度');subplot(2,2,3);
plot(t1,y)title('濾波后信號時域圖');xlabel('時間(s)');ylabel('幅度');subplot(2,2,4);plot(f,abs(Y(1:(N1+1)/2)));title('濾波后信號頻譜圖')xlabel('頻率(Hz)');ylabel('幅度');
sound(y,fs)
第二題、語音信號的延時和混響
1.設計要求:
(1)利用Windows下的錄音機或其他軟件,錄制一段自己的語音信號,時間控制在1s左右,并對錄制的信號進行采樣;
(2)語音信號的頻譜分析,畫出采樣后語音信號的時域波形和頻譜圖; 將信號加入延時和混響,再分析其頻譜,并與原始信號頻譜進行比較;
(3)設計幾種特殊類型的濾波器:單回聲濾波器,多重回聲濾波器,全通結構的混響器,并畫出濾波器的頻域響應;
(4)用自己設計的濾波器對采集的語音信號進行濾波;
(5)分析得到信號的頻譜,畫出濾波后信號的時域波形和頻譜,并對濾波前后的信號進行對比,分析信號的變化;(6)回放語音信號。
2.設計步驟:
(1)錄入原始聲音信號;
(2)計算樣本時刻和頻譜圖的頻率,并進行N+1點FFT變換;(3)加入單回聲;
(4)設計單回聲濾波器幅頻響應函數;(5)繪出相應時域與頻域圖;
(6)利用sound函數進行原始信號的語音播放,加單回聲后語言播放,以及濾除之后的語言播放;
3.設計實現:
(1)時域圖和頻域圖(加單回聲)
原始信號時域圖:
濾波后的時域圖:
原始信號頻域圖:
濾波后頻域圖:
單回聲濾波器幅頻響應:
(2)具體代碼實現(單回聲):
[x,fs,bits]=wavread('E:mcpass.wav');%原聲音信號 n=size(x,1);t=(0:length(x)-1)/fs;f=fs*(0:(n+1)/2-1)/n+1;X=fft(x,n+1);a=0.6;%單回聲濾波 R=fs*a;B=[1,zeros(1,R-2),a];A=[1,zeros(1,R-1)];y = filter(B,A,x);Y=fft(y,n+1);[H,W]=freqz(B,A);
%求單回聲濾波器幅頻響應函數 %繪圖部分 figure(2);plot(fs*W/(2*pi),20*log10(abs(H)));title('頻率響應');xlabel('頻率(Hz)');ylabel('幅度');figure(1);subplot(4,1,1);plot(t,x);title('原信號時域');xlabel('時間(s)');ylabel('幅度');subplot(4,1,2);plot(f,abs(X(1:(n+1)/2)));title('原信號頻域');xlabel('頻率(Hz)');ylabel('幅度');figure(1);subplot(4,1,3);plot(t,y);title('濾波后時域圖');xlabel('時間(s)');ylabel('幅度');figure(1);subplot(4,1,4);plot(f,abs(Y(1:(n+1)/2)));title('濾波后頻域圖');xlabel('頻率(Hz)');ylabel('幅度');sound(x,fs,bits);sound(y,fs,bits);
(3)時域圖與頻域圖(多重回聲)
原始信號時域圖與多重信號時域圖:
原始信號時域圖與多重信號頻域圖:
多重回聲濾波器幅頻響應:
(4)具體代碼實現(多回聲)
%原聲音信號
[x,fs,bits]=wavread('E:mcpass.wav');N=size(x,1);t=(0:length(x)-1)/fs;f=fs*(0:(N+1)/2-1)/N+1;%多重回聲 a=0.5;R=fs*a;B=[1,zeros(1,R-2)];A=[1,zeros(1,R-1),a];yd = filter(B,A,x);
%濾波器函數 %頻率響應
[Hb,Wc]=freqz(B,A);
%求多重回聲濾波器幅頻響應函數 %繪圖部分 figure(2);plot(fs*Wc/(2*pi),20*log10(abs(Hb)));title('多重濾波器頻域響應圖')xlabel('頻率(Hz)');ylabel('幅度');figure(1);subplot(4,1,1);plot(t,x);title('原信號時域');xlabel('時間(s)');ylabel('幅度');X=fft(x,N+1);subplot(4,1,3);plot(f,abs(X(1:(N+1)/2)));title('原信號頻域');xlabel('頻率(Hz)');ylabel('幅度');figure(1);subplot(4,1,2);plot(t,yd);title('多重信號時域圖')xlabel('時間(s)');ylabel('幅度');Yd=fft(yd,N+1);
%多重回聲濾波后信號FFT變換 subplot(4,1,4);plot(f,abs(Yd(1:(N+1)/2)));title('多重信號頻域圖');xlabel('頻率(Hz)');ylabel('幅度');sound(x);sound(yd);
(5)時域圖與頻域圖(全通濾波器)
原始信號時域圖與全通濾波器時域圖:
原始信號時域圖與全通濾波器頻域圖:
全通濾波器的頻域響應圖:
(6)具體代碼實現(全通濾波器):
%原聲音信號
[x,fs,bits]=wavread('E:mcpass.wav');N=size(x,1);t=(0:length(x)-1)/fs;f=fs*(0:(N+1)/2-1)/N+1;%全通結構混響 a=0.5;R=fs*a;B=[a,zeros(1,R-2),1];A=[1,zeros(1,R-2),a];yd = filter(B,A,x);%頻率響應
[Hb,Wc]=freqz(B,A);
%求全通濾波器幅頻響應函數 figure(2);plot(fs*Wc/(2*pi),20*log10(abs(Hb)));title('全通結構頻域響應圖')xlabel('頻率(Hz)');ylabel('幅度');figure(1);subplot(4,1,1);plot(t,x);title('原信號時域');xlabel('時間(s)');ylabel('幅度');X=fft(x,N+1);subplot(4,1,3);plot(f,abs(X(1:(N+1)/2)));title('原信號頻域');xlabel('頻率(Hz)');ylabel('幅度');figure(1);subplot(4,1,2);plot(t,yd);title('全通濾波器時域圖');xlabel('時間(s)');ylabel('幅度');Yd=fft(yd,N+1);subplot(4,1,4);plot(f,abs(Yd(1:(N+1)/2)));title('全通濾波器頻域圖');xlabel('頻率(Hz)');ylabel('幅度');sound(x);sound(yd);(7)時域圖與頻域圖(延時與混響)
原始信號時域圖:
延時時域圖:
混響時域圖:
原始信號頻域:
延時信號頻域圖:
混響信號頻域圖:
(8)具體代碼實現(延時與混響):
[x,fs,bits]=wavread('E:mcpass.wav');N=size(x,1);t=(0:length(x)-1)/fs;f=fs*(0:(N+1)/2-1)/N+1;xd=[zeros(300,1);x];%信號延時 td=(0:length(xd)-1)/fs;Xd=fft(xd);
Xd1=fftshift(Xd);
dFs =fs/length(xd);
xd1=[x;zeros(300,1)];%信號混響 x1=xd1+xd;Xhun=fft(x1);%混響信號fft變換
Xh2=fftshift(x1);%平移,中心為0頻率 dFs = fs/length(x1);%繪圖部分 figure(1);subplot(4,1,1);plot(t,x);title('原信號時域');xlabel('時間(s)');ylabel('幅度');X=fft(x,N+1);subplot(4,1,2);plot(f,abs(X(1:(N+1)/2)));title('原信號頻域');xlabel('頻率(Hz)');ylabel('幅度');subplot(4,1,3);
plot(td,xd);title('延時信號時域圖')xlabel('時間(s)');ylabel('幅度');subplot(4,1,4);
plot([-fs/2:dFs: fs/2-dFs],abs(Xd));title('延時信號頻域圖')xlabel('頻率(Hz)');ylabel('幅度');figure(2);subplot(2,1,1);plot(td,x1);title('混響信號時域圖');xlabel('時間(s)');ylabel('幅度');figure(2);subplot(2,1,2);plot([-fs/2:dFs: fs/2-dFs],abs(Xh2));title('混響信號頻域圖');xlabel('頻率(Hz)');ylabel('幅度');sound(x);sound(xd);sound(x1);第三題、數字濾波器的設計及實現
1.設計要求:
(1)調用信號產生函數mstg產生由三路抑制載波調幅信號相加構成的復合信號st,觀察st的時域波形和幅頻特性曲線;
(2)要求將st中的三路調幅信號分離,通過觀察st的幅頻特性曲線,分別確定可以分離st中三路抑制載波單頻調幅信號的三個濾波器(低通濾波器、帶通濾波器、高通濾波器)的通帶截止頻率和阻帶截止頻率,要求濾波器的通帶最大衰減為0.1dB,阻帶最小衰減為60dB;(3)編程調用MATLAB濾波器設計函數分別設計這三個數字濾波器,并繪圖顯示其幅頻特性曲線;
(4)調用濾波函數filter,用所設計的三個濾波器分別對復合信號st進行濾波,分離出st中的三路不同載波頻率的調幅信號,并繪圖顯示濾波后信號的時域波形和頻譜,觀察分離效果。
2.設計步驟:
(1)產生三路調幅信號;
(2)三路信號相加組成復合信號;
(3)分別設計低通、帶通、高通濾波器,對三路信號濾波;(4)繪出相應的時域、頻域圖;(5)觀察分離效果;
3.設計實現:
(1)時域圖與頻域圖(第一路):
第二路:
第三路:
4.具體代碼實現:
N=1600;
%N為信號st的長度。
Fs=10000;T=1/Fs;Tp=N*T;%采樣頻率Fs=10kHz,Tp為采樣時間 t=0:T:(N-1)*T;k=0:N-1;f=k/Tp;fc1=Fs/10;
%第1路調幅信號的載波頻率fc1=1000Hz, fm1=fc1/10;
%第1路調幅信號的調制信號頻率fm1=100Hz fc2=Fs/20;
%第2路調幅信號的載波頻率fc2=500Hz fm2=fc2/10;
%第2路調幅信號的調制信號頻率fm2=50Hz fc3=Fs/40;
%第3路調幅信號的載波頻率fc3=250Hz, fm3=fc3/10;
%第3路調幅信號的調制信號頻率fm3=25Hz xt1=cos(2*pi*fm1*t).*cos(2*pi*fc1*t);%產生第1路調幅信號 xt2=cos(2*pi*fm2*t).*cos(2*pi*fc2*t);%產生第2路調幅信號 xt3=cos(2*pi*fm3*t).*cos(2*pi*fc3*t);%產生第3路調幅信號 st=xt1+xt2+xt3;
%三路調幅信號相加 fxt=fft(st,N);
%計算信號st的頻譜 figure(1);subplot(2,1,1);plot(t,st);title('三路調幅信號時域圖')grid;xlabel('t/s');ylabel('s(t)');axis([0,Tp/2,min(st),max(st)]);title('(a)s(t)的波形');subplot(2,1,2);stem(f,abs(fxt)/max(abs(fxt)),'.');grid;title('(b)s(t)的頻譜');axis([0,Fs/5,0,1.2]);xlabel('f/Hz');ylabel('幅度');
Fs=10000;T=1/Fs;
%采樣頻率
%調用信號產生函數mstg產生由三路抑制載波調幅信號相加構成的復合信號st
%低通濾波器設計與實現
fp=280;fs=450;wp=2*fp/Fs;ws=2*fs/Fs;rp=0.1;rs=60;
[N,wp]=ellipord(wp,ws,rp,rs);[B,A]=ellip(N,rp,rs,wp);
y1t=filter(B,A,st);
[Hb,Wc]=freqz(B,A);
figure(2);subplot(2,1,1);plot(Fs*Wc/(2*pi),20*log10(abs(Hb)));title('低通濾波器頻域響應圖')subplot(2,1,2);plot(t,y1t);title('第一路低頻信號時域圖')
%帶通濾波器設計與實現
fpl=440;fpu=560;fsl=275;fsu=900;wp=[2*fpl/Fs,2*fpu/Fs];ws=[2*fsl/Fs,2*fsu/Fs];rp=0.1;rs=60;[N,wp]=ellipord(wp,ws,rp,rs);
[B,A]=ellip(N,rp,rs,wp);y2t=filter(B,A,st);[Hb1,Wc1]=freqz(B,A);figure(3);subplot(2,1,1);plot(Fs*Wc1/(2*pi),20*log10(abs(Hb1)));title('帶通濾波器頻域響應圖')subplot(2,1,2);plot(t,y2t);title('第二路中頻信號時域圖')
%高通濾波器設計與實現 fp=890;fs=600;wp=2*fp/Fs;ws=2*fs/Fs;rp=0.1;rs=60;
%DF指標(低通濾波器的通、阻帶邊界頻)[N,wp]=ellipord(wp,ws,rp,rs);
%調用ellipord計算橢圓DF階數N和通帶截止頻率wp [B,A]=ellip(N,rp,rs,wp,'high');%調用ellip計算橢圓帶通DF系統函數系數向量B和A y3t=filter(B,A,st);
%濾波器軟件實現 [Hb2,Wc2]=freqz(B,A);figure(4);subplot(2,1,1);plot(Fs*Wc2/(2*pi),20*log10(abs(Hb2)));title('高通濾波器頻域響應圖')subplot(2,1,2);plot(t,y3t);title('第三路高頻信號時域圖')第四題、心電信號的處理
1.設計要求:
(1)在MATLAB軟件平臺下,給原始的心電信號疊加上噪聲或干擾,干擾類型分為如下幾種:白噪聲、工頻干擾(50Hz)、諧波干擾(二次、三次諧波為主,分別為100Hz、150Hz)繪出疊加噪聲后的心電信號時域和頻譜圖,在視覺上與原始心電信號圖形對比,分析頻域基本特征變化。
(2)給定濾波器的規一化性能指標(參考指標,實際中依據每個同學所疊加噪聲情況而定),例如:通帶截止頻率wp=0.25*pi, 阻通帶截止頻率ws=0.3*pi;通帶最大衰減Rp=1 dB;阻帶最小衰減Rs=15 dB
(3)采用窗函數法設計各型FIR濾波器(低通、高通、帶通、帶阻中的至少2種類型),來對疊加干擾前后的心電信號進行濾波處理,繪出濾波器的頻域響應及濾波后信號的時域波形和頻譜,并對濾波前后的信號進行對比,分析信號的變化;在相同的性能指標下比較各方法的濾波效果,并從理論上進行分析或解釋;(4)采用雙線性變換法利用不同的原型低通濾波器(Butterworth型與切比雪夫I型)來設計各型IIR濾波器(低通、高通、帶通、帶阻中的至少2種類型)繪出濾波器的頻域響應,并用這些數字濾波器對含噪心電信號分別進行濾波處理;比較不同方法下設計出來的數字濾波器的濾波效果,并從理論上進行分析或解釋;
(5)心電信號波形觀察、頻譜觀察,對濾波后的心電信號觀察其時域、頻域特征變化。
2.設計步驟:
(1)讀取原始心電信號;
(2)心電信號加50HZ工頻信號;(3)心電信號加入諧波;(4)心電信號加入白噪聲;
(5)設計相應的濾波器進行不同噪聲的濾除;(6)繪出相應的時域頻域圖;
3.設計實現:
(1)各時域頻域圖:
原始心電信號時域圖以及加入個噪聲后的時域圖:
原始心電信號頻域圖以及加入個噪聲后的時頻域圖:
(2)具體代碼實現:
%原心電信號
xl=load('E:心電信號-新.txt');x=xl(:,2);N=size(x,1);fs=1000;t=(0:length(x)-1)/fs;f=fs/N*(0:(N+1)/2-1)+1;X=fft(x,N);%加50hz工頻干擾 y=x+sin(2*50*pi*t)';Y=fft(y,N);%加100hz、150hz諧波干擾
y1=x+sin(2*100*pi*t)'+cos(2*150*pi*t)';Y1=fft(y1,N);%加白噪聲 yb=awgn(x,20);Yd=fft(yb,N);figure(1);subplot(4,1,1);plot(t,x);title('原信號時域圖')xlabel('時間(s)');ylabel('幅度');figure(2);subplot(4,1,1)plot(f,abs(X(1:(N+1)/2)));title('原信號頻域圖')xlabel('頻率(Hz)');ylabel('幅度');figure(1);subplot(4,1,2);plot(t,y);title('加50hz工頻信號時域圖')xlabel('時間(s)');ylabel('幅度');figure(2);subplot(4,1,2);plot(f,abs(Y(1:(N+1)/2)));title('加50hz工頻信號頻域圖')xlabel('頻率(Hz)');ylabel('幅度');figure(1)subplot(4,1,3);plot(t,y1);title('加諧波后的時域圖')xlabel('時間(s)');ylabel('幅度');figure(2)subplot(4,1,3);plot(f,abs(Y1(1:(N+1)/2)));title('加諧波后的頻域圖')xlabel('頻率(Hz)');ylabel('幅度');figure(1);subplot(4,1,4);plot(t,y1);title('加白噪后的時域圖');figure(2);subplot(4,1,4);plot(f,abs(Y1(1:(N+1)/2)));title('加白噪后的頻域圖');
(3)濾除部分:
濾除50HZ信號后的時域圖(blackman低通濾波器):
濾除50HZ信號后的頻域圖: blackman低通濾波器濾波:
具體代碼:
%原心電信號
xl=load('E:心電信號-新.txt');x=xl(:,2);N=size(x,1);fs=1000;t=(0:length(x)-1)/fs;f=fs/N*(0:(N+1)/2-1)+1;%f=fs/N*(0:N-1);X=fft(x,N);%加50hz工頻干擾 y=x+sin(2*50*pi*t)';Y=fft(y,N);%blackman低通濾波器 wp=30/fs*pi;ws=40/fs*pi;B=ws-wp;M=ceil(12*pi/B)-1;bl=fir1(M,(ws+wp)/2/pi,'low',blackman(M+1));yl=fftfilt(bl,y);Yl=fft(yl,N);figure(1);subplot(3,1,1);plot(t,x);title('原信號時域圖')figure(2);subplot(3,1,1)plot(f,abs(X(1:(N+1)/2)));%plot(f,abs(X));title('原信號頻域圖')figure(1);subplot(3,1,2);plot(t,y);title('加50hz工頻信號時域圖')figure(2);subplot(3,1,2);plot(f,abs(Y(1:(N+1)/2)));%plot(f,abs(Y));title('加50hz工頻信號頻域圖')figure(1);subplot(3,1,3);plot(t,yl);title('濾波后信號時域圖')figure(2)subplot(3,1,3);plot(f,abs(Yl(1:(N+1)/2)));%plot(f,abs(Yl));title('濾波后信號頻域圖')figure(3)[h2,w2]=freqz(bl,1);plot(w2/(2*pi)*fs,20*log10(abs(h2)));title('blackman低通濾波器頻率響應圖');
濾除50HZ信號后的時域圖(切比雪夫濾波器):
濾除50HZ信號后的頻域圖(切比雪夫濾波器):
切比雪夫濾波器:
具體代碼實現:
%原心電信號
xl=load('E:心電信號-新.txt');x=xl(:,2);N=size(x,1);fs=1000;t=(0:length(x)-1)/fs;f=fs/N*(0:(N+1)/2-1)+1;X=fft(x,N);%加50hz工頻干擾 y=x+sin(2*50*pi*t)';Y=fft(y,N);%切比雪夫濾波器
wp=20/fs*2*pi;ws=30/fs*2*pi;wp1=2*fs*tan(wp/2);ws1=2*fs*tan(ws/2);Rp=1;Rs=15;[N1,w]=cheb1ord(wp1,ws1,Rp,Rs,'s');[B1,A1]=cheby1(N1,1,w,'low','s');[B,A]=bilinear(B1,A1,fs);[Hk,wk]=freqz(B,A);yf=filter(B,A,y);Yf=fft(yf,N);figure(1);subplot(3,1,1);plot(t,x);title('原信號時域圖')figure(2);subplot(3,1,1)plot(f,abs(X(1:(N+1)/2)));title('原信號頻域圖')figure(1);subplot(3,1,2);plot(t,y);title('加50hz工頻信號時域圖')figure(2);subplot(3,1,2);plot(f,abs(Y(1:(N+1)/2)));title('加50hz工頻信號頻域圖')figure(1);subplot(3,1,3)plot(t,yf);title('濾波后信號時域圖')figure(2);subplot(3,1,3)plot(f,abs(Yf(1:(N+1)/2)));title('濾波后信號頻域圖')figure(3)plot(fs*wk/(2*pi),20*log10(abs(Hk)));title('切比雪夫濾波器頻域響應圖');
濾除白噪聲后的時域圖(blackman低通濾波器):
濾除白噪聲后的頻域圖(blackman低通濾波器):
blackman低通濾波器:
具體代碼實現:
%原心電信號
xl=load('E:心電信號-新.txt');x=xl(:,2);N=size(x,1);fs=1000;t=(0:length(x)-1)/fs;f=fs/N*(0:(N+1)/2-1)+1;X=fft(x,N);%加白噪聲 yb=awgn(x,20);Yd=fft(yb,N);%blackman低通濾波器 wp=70/fs*pi;ws=90/fs*pi;Bl=ws-wp;Ml=ceil(12*pi/Bl)-1;bl=fir1(Ml,(ws+wp)/2/pi,'low',blackman(Ml+1));yl=fftfilt(bl,y1);Yl=fft(yl,N);%繪圖部分 figure(1);subplot(3,1,1);plot(t,x);title('原信號時域圖')figure(2);subplot(3,1,1)plot(f,abs(X(1:(N+1)/2)));title('原信號頻域圖')figure(1);subplot(3,1,2);plot(t,y1);title('加白噪后的時域圖');figure(2);subplot(3,1,2);plot(f,abs(Y1(1:(N+1)/2)));title('加白噪后的頻域圖');figure(1);subplot(3,1,3);plot(t,yl);title('濾波后信號時域圖')figure(2)subplot(3,1,3);plot(f,abs(Yl(1:(N+1)/2)));%plot(f,abs(Yl));title('濾波后信號頻域圖')figure(3)[h2,w2]=freqz(bl,1);plot(w2/(2*pi)*fs,20*log10(abs(h2)));title('blackman低通濾波器頻率響應圖');
三、設計總結與心得體會
在課程設計的這段時間,我獲益匪淺。不但進一步掌握了數字信號處理的基礎知識及MATLAB的基本操作,還使我了解了信號的產生、采樣及頻譜分析的方法。我進一步了解到凡事都需要耐心,細心仔細是成功的保證。雖然在做的過程中遇到了一些問題,但是我都通過自己的努力解決了它們,證明了自己的能力。這次課程設計對我各方面的綜合能力有了很大的提高,對我以后的工作,實踐都有很大的幫助。
在此次課程設計當中,我經常把C語言的語法知識照搬到MATALAB設計中,從而導致調試失敗,所以下次用此類語言做課程設計時,應事先學習下這類語言的基本語法,以免與其他語言相混淆。還有就是有些不定參數存在時,可先取定值,用于調試,這樣可以節約調試時間,從而提高效率。
本次課程設計不但讓我又學到了一些知識,而且也提高了我的綜合能力。使我在各個方面都得到了鍛煉,以后有這樣的機會一定會更加的很好利用,它不僅可以提高學習的針對性而且可以很好的鍛煉動手能力以及自己的邏輯設計能力和處理問題的能力,希望在以后這方面的能力會很好的加強。
四、課程設計指導書
[1] 《數字信號處理(第二版)》.丁玉美等 西安電子科技大學出版社 [2] 《數字信號處理及其MATLAB實現》,陳懷琛等譯,電子工業出版社; [3] 《MATLAB及在電子信息課程中的應用》,陳懷琛等,電子工業出版社
第三篇:數字信號處理課程設計..
課程設計報告
課程名稱: 數字信號處理 課題名稱: 語音信號的處理與濾波
姓 名: 學 號: 院 系: 專業班級: 指導教師: 完成日期: 2013年7月2日
目錄
第1部分 課程設計報告………………………………………3 一.設計目的……………………………………………3 二.設計內容……………………………………………3 三.設計原理……………………………………………3 四.具體實現……………………………………………5 1.錄制一段聲音…………………………………5 2.巴特沃斯濾波器的設計………………………8 3.將聲音信號送入濾波器濾波…………………13 4.語音信號的回放………………………………19 5.男女語音信號的頻譜分析……………………19 6.噪聲的疊加和濾除……………………………22 五. 結果分析……………………………………………27 第2部分 課程設計總結………………………………28 一. 參考文獻……………………………………………28
第1部分 課程設計報告
一.設計目的
綜合運用本課程的理論知識進行頻譜分析以及濾波器設計,通過理論推導得出相應結論,并利用MATLAB作為工具進行實現,從而復習鞏固課堂所學的理論知識,提高對所學知識的綜合應用能力,并從實踐上初步實現對數字信號的處理。
二.設計內容
錄制一段個人自己的語音信號,并對錄制的信號進行采樣;畫出采樣后語音信號的時域波形和頻譜圖;給定濾波器的性能指標,采用窗函數法和雙線性變換法設計濾波器,并畫出濾波器的頻率響應;然后用自己設計的濾波器對采集的信號進行濾波,畫出濾波后信號的時域波形和頻譜,并對濾波前后的信號進行對比,分析信號的變化;回放語音信號;換一個與你性別相異的人錄制同樣一段語音內容,分析兩段內容相同的語音信號頻譜之間有什么特點;再錄制一段同樣長時間的背景噪聲疊加到你的語音信號中,分析疊加前后信號頻譜的變化,設計一個合適的濾波器,能夠把該噪聲濾除;
三.設計原理
1.在Matlab軟件平臺下,利用函數wavrecord(),wavwrite(),wavread(),wavplay()對語音信號進行錄制,存儲,讀取,回放。
2.用y=fft(x)對采集的信號做快速傅立葉變換,并用[h1,w]=freqz(h)進行DTFT變換。
3.掌握FIR DF線性相位的概念,即線性相位對h(n)、H(?)及零點的約束,了解四種FIR DF的頻響特點。
4.在Matlab中,FIR濾波器利用函數fftfilt對信號進行濾波。
5.抽樣定理
連續信號經理想抽樣后時域、頻域發生的變化(理想抽樣信號與連續信號頻譜之間的關系)
理想抽樣信號能否代表原始信號、如何不失真地還原信號即由離散信號恢復連續信號的條件(抽樣定理)
理想采樣過程描述: 時域描述:
?a(t)?xa(t)?T(t)??xa(t)?(t?nT)??xa(nT)?(t?nT)xn???n??????T(t)?頻域描述:利用傅氏變換的性質,時域相乘頻域卷積,若
n?????(t?nT)??a(t)Xa(j?)?xXa(j?)?xa(t)?T(j?)??T(t)
則有
?(j?)?1X(j?)??(j?)XaaT2?1?2?1??Xa(j?)??Xa(j??jk)??Xa(j??jk?s)Tk???TTk????(j?)與X(j?)的關系:理想抽樣信號的頻譜是連續信號頻譜的Xaa
周期延拓,重復周期為?s(采樣角頻率)。如果:
?X(j?)?Xa(j?)??a??0???s/2???s/2即連續信號是帶限的,且信號最高頻率不超過抽樣頻率的二分之一,則可不失真恢復。
奈奎斯特采樣定理:要使實信號采樣后能夠不失真還原,采樣頻率必須大于信號最高頻率的兩倍:?s?2?h 或 fs?2fh
四.具體實現
1.錄制一段聲音
1.1錄制并分析
在MATLAB中用wavrecord、wavread、wavplay、wavwrite對聲音進行錄制、讀取、回放、存儲。
程序如下:
Fs=8000;%抽樣頻率 time=3;%錄音時間 fprintf('按Enter鍵錄音%ds',time);%文字提示 pause;%暫停命令 fprintf('錄音中......');x=wavrecord(time*Fs,Fs,'double');%錄制語音信號 fprintf('錄音結束');%文字提示 fprintf('按Enter鍵回放錄音');pause;%暫停命令
wavplay(x,Fs);%按任意鍵播放語音信號
wavwrite(x,Fs,'C:UsersacerDesktop數字信號sound.wav');%存儲語音信號
N=length(x);%返回采樣點數 df=fs/N;%采樣間隔 n1=1:N/2;f=[(n1-1)*(2*pi/N)]/pi;%頻帶寬度 figure(2);subplot(2,1,1);plot(x);%錄制信號的時域波形 title('原始信號的時域波形');%加標題 ylabel('幅值/A');%顯示縱坐標的表示意義 grid;%加網格
y0=fft(x);%快速傅立葉變換 figure(2);subplot(2,1,2);plot(f,abs(y0(n1)));%原始信號的頻譜圖 title('原始信號的頻譜圖');%加標題 xlabel('頻率w/pi');%顯示橫坐標表示的意義 ylabel('幅值 ');%顯示縱坐標表示的意義 title('原始信號的頻譜圖');%加標題
grid;%加網格
圖1.1 原始信號的時域與頻譜圖
1.2濾除無效點
針對實際發出聲音落后錄制動作半拍的現象,如何拔除對無效點的采樣的問題: 出現這種現象的原因主要是錄音開始時,人的反應慢了半拍,導致出現了一些無效點,而后而出現的無效的點,主要是已經沒有聲音的動作,先讀取聲音出來,將原始語音信號時域波形圖畫出來,根據己得到的信號,可以在第二次讀取聲音的后面設定采樣點,取好有效點,畫出濾除無效點后的語音信號時域波形圖,對比可以看出。這樣就可以解決這個問題。
x=wavread('C:UsersacerDesktop數字信號sound.wav', 7
[4000,24000]);%從4000點截取到24000結束 plot(x);%畫出截取后的時域圖形 title('截取后的聲音時域圖形');%標題 xlabel('頻率');ylabel('振幅');grid;%畫網格
圖1.2 去除無效點
2.巴特沃斯濾波器的設計
2.1設計巴特沃思低通濾波器
MATLAB程序如下。濾波器圖如圖3.3所示。
%低通濾波
fp=1000;fs=1200;Fs=22050;rp=1;rs=100;wp=2*pi*fp/Fs;ws=2*pi*fs/Fs;Fs1=1;wap=2*tan(wp/2);was=2*tan(ws/2);[N,wc]=buttord(wap,was,rp,rs,'s');[B,A]=butter(N,wc,'s');[Bz,Az]=bilinear(B,A,Fs1);figure(1);[h,w]=freqz(Bz,Az,512,Fs1*22050);plot(w,abs(h));title('巴特沃斯低通濾波器');xlabel('頻率(HZ)');ylabel('耗損(dB)');gridon;9
圖2.1 巴特沃思低通濾波器
2.2設計巴特沃思高通濾波器
MATLAB程序如下。濾波器圖如圖3.5所示。%高通濾波
fp=4800;fs=5000;Fs=22050;rp=1;rs=100;wp=2*pi*fp/Fs;ws=2*pi*fs/Fs;T=1;Fs1=1;wap=2*tan(wp/2);was=2*tan(ws/2);10
[N,wc]=buttord(wap,was,rp,rs,'s');[B,A]=butter(N,wc,'high','s');[Bz,Az]=bilinear(B,A,Fs1);figure(1);[h,w]=freqz(Bz,Az,512,Fs1*22050);plot(w,abs(h));title('巴特沃斯高通濾波器');xlabel('頻率(HZ)');ylabel('耗損(dB)');grid on;
圖2.2巴特沃思高通濾波器
2.3設計巴特沃思帶通濾波器
MATLAB程序如下。濾波器圖如圖3.7所示。%帶通濾波
fp=[1200,3000];fs=[1000,3200];Fs=8000;rp=1;rs=100;wp=2*pi*fp/Fs;ws=2*pi*fs/Fs;T=1;Fs1=1;wap=2*tan(wp/2);was=2*tan(ws/2);[N,wc]=buttord(wap,was,rp,rs,'s');[B,A]=butter(N,wc,'s');[Bz,Az]=bilinear(B,A,Fs1);figure(4);[h,w]=freqz(Bz,Az,512,Fs1*1000);plot(w,abs(h));title('巴特沃斯帶通濾波器');xlabel('頻率(HZ)');ylabel('耗損(dB)');grid on;12
圖2.3巴特沃思帶通濾波器
3.將聲音信號送入濾波器濾波
x=wavread('C:UsersacerDesktop數字信號sound.wav');%播放原始信號
wavplay(x,fs);%播放原始信號 N=length(x);%返回采樣點數 df=fs/N;%采樣間隔 n1=1:N/2;f=[(n1-1)*(2*pi/N)]/pi;%頻帶寬度 figure(4);subplot(4,2,1);plot(x);%錄制信號的時域波形
title('原始信號的時域波形');%加標題 ylabel('幅值/A');%顯示縱坐標的表示意義 grid;%加網格
y0=fft(x);%快速傅立葉變換 subplot(4,2,3);plot(f,abs(y0(n1)));%原始信號的頻譜圖 title('原始信號的頻譜圖');%加標題 xlabel('頻率w/pi');%顯示橫坐標表示的意義 ylabel('幅值 ');%顯示縱坐標表示的意義 title('原始信號的頻譜圖');%加標題 grid;%加網格
3.1低通濾波器濾波 fs=8000;beta=10.056;wc=2*pi*1000/fs;ws=2*pi*1200/fs;width=ws-wc;wn=(ws+wc)/2;n=ceil(12.8*pi /width);h=fir1(n,wn/pi,'band',kaiser(n+1,beta));[h1,w]=freqz(h);
ys=fftfilt(h,x);%信號送入濾波器濾波,ys為輸出 fftwave=fft(ys);%將濾波后的語音信號進行快速傅立葉變換 figure(4);subplot(4,2,2);%在四行兩列的第二個窗口顯示圖形 plot(ys);%信號的時域波形
title('低通濾波后信號的時域波形');%加標題 xlabel('頻率w/pi');ylabel('幅值/A');%顯示標表示的意義 grid;%網格
subplot(4,2,4);%在四行兩列的第四個窗口顯示圖形 plot(f, abs(fftwave(n1)));%繪制模值 xlabel('頻率w/pi');ylabel('幅值/A');%顯示標表示的意義
title('低通濾波器濾波后信號的頻譜圖');%標題 grid;%加網格
wavplay(ys,8000);%播放濾波后信號
3.2高通濾波器濾波 fs=8000;beta=10.056;ws=2*5000/fs;wc=2*4800/fs;
width=ws-wc;wn=(ws+wc)/2;n=ceil(12.8*pi/width);h=fir1(n,wn/pi, 'high',kaiser(n+2,beta));[h1,w]=freqz(h);ys=fftfilt(h,x);%將信號送入高通濾波器濾波 subplot(4,2,5);%在四行兩列的第五個窗口顯示圖形 plot(ys);%信號的時域波形 xlabel('頻率w/pi');ylabel('幅值/A');%顯示標表示的意義 title('高通濾波后信號的時域波形');%標題 ylabel('幅值/A');%顯示縱坐標的表示意義 grid;%網格
fftwave=fft(ys);%將濾波后的語音信號進行快速傅立葉變換 subplot(4,2,7);%在四行兩列的第七個窗口顯示圖形 plot(f,abs(fftwave(n1)));%繪制模值 axis([0 1 0 50]);xlabel('頻率w/pi');ylabel('幅值/A');%顯示標表示的意義
title('高通濾波器濾波后信號的頻譜圖');%標題 grid;%加網格
wavplay(ys,8000);%播放濾波后信號
3.3帶通濾波器 fs=8000;beta=10.056;wc1=2*pi*1000/fs;wc2=2*pi*3200/fs;ws1=2*pi*1200/fs;ws2=2*pi*3000/fs;width=ws1-wc1;wn1=(ws1+wc1)/2;wn2=(ws2+wc2)/2;wn=[wn1 wn2];n=ceil(12.8/width*pi);h=fir1(n,wn/pi,'band',kaiser(n+1,beta));[h1,w]=freqz(h);ys1= fftfilt(h,x);%將信號送入高通濾波器濾波 figure(4);subplot(4,2,6);%在四行兩列的第六個窗口顯示圖形 plot(ys1);%繪制后信號的時域的圖形 title('帶通濾波后信號的時域波形');%加標題 xlabel('頻率w/pi');ylabel('幅值/A');%顯示縱坐標表示的意義 grid;%網格
fftwave=fft(ys1);%對濾波后的信號進行快速傅立葉變換 subplot(4,2,8);%在四行兩列的第八個窗口顯示圖形
plot(f, abs(fftwave(n1)));%繪制模值 axis([0 1 0 50]);xlabel('頻率w/pi');ylabel('幅值/A');%顯示標表示的意義 title('帶通濾波器濾波后信號的頻譜圖');%加標題 grid;%網格
wavplay(ys1,8000);%播放濾波后信號 圖形如下:
原始信號的時域波形幅值/A0-1012x 10原始信號的頻譜圖34幅值/A1低通濾波后信號的時域波形0.50-0.5012頻率w/pi3400.51頻率w/pi高通濾波后信號的時域波形幅值/A0幅值/A0幅值/Ax 10高通濾波器濾波后信號的頻譜圖5012頻率w/pi34幅值/A0.20-0.2幅值/A2001000x 10低通濾波器濾波后信號的頻譜圖200100000.51頻率w/pi帶通濾波后信號的時域波形0.50-0.501234頻率w/pix 10帶通濾波器濾波后信號的頻譜圖50幅值 00.5頻率w/pi1000.5頻率w/pi1
分析:三個濾波器濾波后的聲音與原來的聲音都發生了變化。其中低
通的濾波后與原來聲音沒有很大的變化,其它兩個都又明顯的變化
4.語音信號的回放
sound(xlow,Fs,bits);%在Matlab中,函數sound可以對聲音進行回放,其調用格式: sound(xhigh, Fs,bits);%sound(x, Fs, bits);sound(xdaitong, Fs,bits);5.男女語音信號的頻譜分析
5.1 錄制一段異性的聲音進行頻譜分析
Fs=8000;%抽樣頻率 time=3;%錄音時間 fprintf('按Enter鍵錄音%ds',time);%文字提示 pause;%暫停命令 fprintf('錄音中......');x=wavrecord(time*Fs,Fs,'double');%錄制語音信號 fprintf('錄音結束');%文字提示 fprintf('按Enter鍵回放錄音');pause;%暫停命令 wavplay(x,Fs);%按任意鍵播放語音信號
wavwrite(x,Fs,'C:UsersacerDesktop數字信號sound2.wav');%存儲語音信號
5.2 分析男女聲音的頻譜
x=wavread(' C:UsersacerDesktop數字信號sound2.wav ');%播放原始信號,解決落后半拍
wavplay(x,fs);%播放原始信號 N=length(x);%返回采樣點數 df=fs/N;%采樣間隔 n1=1:N/2;
f=[(n1-1)*(2*pi/N)]/pi;%頻帶寬度 figure(1);subplot(2,2,1);plot(x);%錄制信號的時域波形
title('原始女生信號的時域波形');%加標題 ylabel('幅值/A');%顯示縱坐標的表示意義 grid;%加網格
y0=fft(x);%快速傅立葉變換 subplot(2,2,2);plot(f,abs(y0(n1)));%原始信號的頻譜圖 title('原始女生信號的頻譜圖');%加標題 xlabel('頻率w/pi');%顯示橫坐標表示的意義 ylabel('幅值 ');%顯示縱坐標表示的意義 grid;%加網格
[y,fs,bits]=wavread(' C:UsersacerDesktop數字信號sound.wav ');% 對語音信號進行采樣
wavplay(y,fs);%播放原始信號 N=length(y);%返回采樣點數 df=fs/N;%采樣間隔 n1=1:N/2;f=[(n1-1)*(2*pi/N)]/pi;%頻帶寬度 subplot(2,2,3);plot(y);%錄制信號的時域波形
title('原始男生信號的時域波形');%加標題 ylabel('幅值/A');%顯示縱坐標的表示意義 grid;%加網格
y0=fft(y);%快速傅立葉變換
subplot(2,2,4);%在四行兩列的第三個窗口顯示圖形 plot(f,abs(y0(n1)));%原始信號的頻譜圖 title('原始男生信號的頻譜圖');%加標題 xlabel('頻率w/pi');%顯示橫坐標表示的意義 ylabel('幅值 ');%顯示縱坐標表示的意義 grid;%加網格
5.3男女聲音的頻譜圖
原始女生信號的時域波形0.50-0.5-1150100原始女生信號的頻譜圖幅值/A幅值 012345000x 10原始男生信號的時域波形0.50.5頻率w/pi原始男生信號的頻譜圖1300200幅值/A0幅值 012x 1034100-0.5000.5頻率w/pi1
圖5.3男女聲音信號波形與頻譜對比
分析:就時域圖看,男生的時域圖中振幅比女生的高,對于頻譜圖女生的高頻成分比較多
6.噪聲的疊加和濾除
6.1錄制一段背景噪聲
Fs=8000;%抽樣頻率 time=3;%錄音時間 fprintf('按Enter鍵錄音%ds',time);%文字提示 pause;%暫停命令 fprintf('錄音中......');x=wavrecord(time*Fs,Fs,'double');%錄制語音信號
fprintf('錄音結束');%文字提示 fprintf('按Enter鍵回放錄音');pause;%暫停命令 wavplay(x,Fs);%按任意鍵播放語音信號 wavwrite(x,Fs,'C:UsersacerDesktop數字信號噪音.wav');%存儲語音信號
6.2 對噪聲進行頻譜的分析
[x1,fs,bits]=wavread(' C:UsersacerDesktop數字信號噪音.wav ');%對語音信號進行采樣
wavplay(x1,fs);%播放噪聲信號 N=length(x1);%返回采樣點數 df=fs/N;%采樣間隔
n1=1:N/2;f=[(n1-1)*(2*pi/N)]/pi;%頻帶寬度 figure(5);subplot(3,2,1);plot(x1);%信號的時域波形 title('噪聲信號的時域波形');grid;ylabel('幅值/A');y0=fft(x1);%快速傅立葉變換
subplot(3,2,2);plot(f,abs(y0(n1)));%噪聲信號的頻譜圖 ylabel('幅值');title('噪聲信號的頻譜圖');
6.3原始信號與噪音的疊加
fs=8000;[x,fs,bits]=wavread(' C:UsersacerDesktop數字信號sound.wav ');%對錄入信號進行采樣
[x1,fs,bits]=wavread(' C:UsersacerDesktop數字信號噪音.wav ');%對噪聲信號進行采樣
yy=x+x1;%將兩個聲音疊加
6.4疊加信號的頻譜分析:
wavplay(yy,fs);%播放疊加后信號 N=length(yy);%返回采樣點數 df=fs/N;%采樣間隔 n1=1:N/2;f=[(n1-1)*(2*pi/N)]/pi;%頻帶寬度 figure(5);subplot(3,2,3);plot(yy,'LineWidth',2);%信號的時域波形
title('疊加信號的時域波形');xlabel('時間/t');ylabel('幅值/A');grid;y0=fft(yy);%快速傅立葉變換 subplot(3,2,4);plot(f,abs(y0(n1)));%疊加信號的頻譜圖 title('疊加信號的頻譜圖');xlabel('頻率w/pi');ylabel('幅值/db');grid;
6.5 設計一個合適的濾波器將噪聲濾除 fs=18000;%采樣頻率 Wp=2*1000/fs;%通帶截至頻率 Ws=2*2000/fs;%阻帶截至頻率 Rp=1;%最大衰減 Rs=100;%最小衰減
[N,Wn]=buttord(Wp,Ws,Rp,Rs);%buttord函數(n為階數,Wn為截至頻率)
[num,den]=butter(N,Wn);%butter函數(num為分子系數den為分母系數)
[h,w]=freqz(num,den);%DTFT變換
ys=filter(num,den,yy);%信號送入濾波器濾波,ys為輸出 fftwave=fft(ys);%將濾波后的語音信號進行快速傅立葉變換 figure(5);subplot(3,2,5);plot(ys);%信號的時域波形
title('低通濾波后信號的時域波形');%加標題 ylabel('幅值/A');%顯示標表示的意義 grid;%網格 subplot(3,2,6);plot(f, abs(fftwave(n1)));%繪制模值 title('低通濾波器濾波后信號的頻譜圖');%標題 xlabel('頻率w/pi');ylabel('幅值/A');%顯示標表示的意義 grid;%加網格
wavplay(ys,8000);%播放濾波后信號 grid;圖形如下:
噪聲信號的時域波形1100噪聲信號的頻譜圖幅值/A0-1幅值0123450000.5疊加信號的頻譜圖1x 10疊加信號的時域波形10-101時間/t2200幅值/db34幅值/A100000.5頻率w/pi1x 10低通濾波后信號的時域波形0.5低通濾波器濾波后信號的頻譜圖200幅值/A0-0.5幅值/A012x 1034100000.5頻率w/pi1
圖6.1噪音的疊加與濾除前后頻譜對比
7.結果分析
1.錄制剛開始時,常會出現實際發出聲音落后錄制動作半拍,可在[x,fs,bits]=wavread('d:matlavworkwomamaaiwo.wav')加 窗[x,fs,bits]=wavread('d:matlavworkwomamaaiwo.wav',[100 10000]),窗的長度可根據需要定義。
2.語音信號通過低通濾波器后,把高頻濾除,聲音變得比較低沉。當通過高通濾波器后,把低頻濾除,聲音變得比較就尖銳。通過帶通濾波器后,聲音比較適中。
3.通過觀察男生和女生圖像知:時域圖的振幅大小與性別無關,只與說話人音量大小有關,音量越大,振幅越大。頻率圖中,女生高 27
頻成分較多。
4.疊加噪聲后,噪聲與原信號明顯區分,但通過低通濾波器后,噪聲沒有濾除,信號產生失真。原因可能為噪聲與信號頻率相近無法濾除。
第2部分 課程設計總結
通過本次課程設計,使我們對數字信號處理相關知識有了更深刻的理解,尤其是對各種濾波器的設計。在設計的過程中遇到了很多問題,剛剛開始時曾天真的認為只要把以前的程序改了參數就可以用了,可是問題沒有我想象中的那么簡單,單純的搬程序是不能解決問題的。通過查閱資料和請教同學收獲了很多以前不懂的理論知識。再利用所學的操作,發現所寫的程序還是沒有能夠運行,通過不斷地調試,運行,最終得出了需要的結果。整個過程中學到了很多新的知識,特別是對Matlab的使用終于有些了解。在以后的學習中還需要深入了解這方面的內容。在這次的課程設計中讓我體會最深的是:知識來不得半點的馬虎。也認識到自己的不足,以后要進一步學習。
八.參考文獻
[1]數字信號處理教程(第三版)程佩青 清華大學出版社 [2]MATLAB信號處理 劉波 文忠 電子工業出版社 [3]MATLAB7.1及其在信號處理中的應用 王宏 清華大學出版社
[4]MATLAB基礎與編程入門 張威 西安電子科技大學出版社
[5] 數字信號處理及其MATLAB實驗 趙紅怡 張常 化學工業出版社
[6]MATLAB信號處理詳解 陳亞勇等 人民郵電出版社 [7] 數字信號處理
錢同惠 機械工業出版社 29
第四篇:數字信號處理課程設計
目 錄
摘要...........................................................................................................................................1 1 緒論..............................................................................................................................................2
1.1 DSP系統特點和設計基本原則......................................................................................2 1.2 國內外研究動態.............................................................................................................2 2系統設計........................................................................................................................................3 3硬件設計........................................................................................................................................5
3.1 硬件結構...........................................................................................................................5 3.2 硬件電路設計...................................................................................................................7
3.2.1 總輸入電路...........................................................................................................7 3.2.2 總輸出電路...........................................................................................................7 3.2.3 語音輸入電路.......................................................................................................9 3.2.4 語音輸出電路.......................................................................................................9 實驗結果及分析.........................................................................................................................10 4.1 實驗結果.........................................................................................................................10 4.2 實驗分析.........................................................................................................................12 5 總結與心得體會.........................................................................................................................13 參考文獻.........................................................................................................................................14 致謝................................................................................................................................................15
摘要
基于DSP的語音信號處理系統,該系統采用TMS320VC5509作為主處理器,TLV320AIC23B作為音頻芯片,在此基礎上完成系統硬件平臺的搭建和軟件設計,從而實現對語音信號的采集、濾波和回放功能,它可作為語音信號處理的通用平臺。
語音是人類相互之間進行交流時使用最多、最自然、最基本也是最重要的信息載體。在高度信息化的今天,語音信號處理是信息高速公路、多媒體技術、辦公自動化、現代通信及智能系統等新興領域應用的核心技術之一。通常這些信號處理的過程要滿足實時且快速高效的要求,隨著DSP技術的發展,以DSP為內核的設備越來越多,為語音信號的處理提供了良好的平臺。本文設計了一個基于TMS320VC5509定點的語音信號處理系統,實現對語音信號的采集、處理與回放等功能,為今后復雜的語音信號處理算法的研究和實時實現提供一個通用平臺。
關鍵詞:語音處理;DSP;TMS320VC5509;TLV320AIC23B
1 緒論
語音是人類相互間所進行的通信的最自然和最簡潔方便的形式,語音通信是一種理想的人機通信方式。語音通信的研究涉及到人工智能、數字信號處理、微型計算機技術、語言聲學、語言學等許多領域,所以說語音的通信是一個多學科的綜合研究領域,其研究成果具有重要的學術價值。另外通過語音來傳遞信息是人類最重要的、最有效、最常用的交換信息的形式。語言是人類特有的功能,聲音是人類常用的工具,是相互傳遞信息的主要手段。同時也是眾構成思想交流和感情溝通的最主要的途徑。
1.1 DSP系統特點和設計基本原則
DSP(digital signal processor)是一種獨特的微處理器,是以數字信號來處理大量信息的器件。其工作原理是接收模擬信號,轉換為0或1的數字信號。再對數字信號進行修改、刪除、強化,并在其他系統芯片中把數字數據解譯回模擬數據或實際環境格式。它不僅具有可編程性,而且其實時運行速度可達每秒數以千萬條復雜指令程序,遠遠超過通用微處理器,是數字化電子世界中日益重要的電腦芯片。它的強大數據處理能力和高運行速度,是最值得稱道的兩大特色。
1.2 國內外研究動態
語音信號處理作為一個重要的研究領域,已經有很長的研究歷史。但是它的快速發展可以說是從1940年前后Dudley的聲碼器和Potter等人的可見語音開始的;20世紀60年代中期形成的一系列數字信號處理的理念和技術基礎;到了80年代,由于矢量量化、隱馬爾可夫模型和人工神經網絡等相繼被應用于語音信號處理,并經過不斷改進與完善,使得語音信號處理技術產生了突破性的進展。一方面,對聲學語音學統計模型的研究逐漸深入,魯棒的語音識別、基于語音段的建模方法及隱馬爾可夫模型與人工神經網絡的結合成為研究的熱點。另一方面,為了語音識別實用化的需要,講者自適應、聽覺模型、快速搜索識別算法以及進一步的語言模型的研究等課題倍受關注。
在通信越來越發達的當今世界,尤其最近幾十年,語音壓縮編碼技術在移動 通信、IP電話通信、保密通信、衛星通信以及語音存儲等很多方面得到了廣泛的應用。因此,語音編碼一直是通信和信號處理的研究熱點,并其取得了驚人的進展,目前在PC機上的語音編碼已經趨于成熟,而如何在嵌入式系統中實時實現語音壓縮編碼則是近些年來語音信號處理領域的研究熱點之一。
2系統設計
在實際生活中,當聲源遇到物體時會發生反射,反射的聲波和聲源聲波一起傳輸,聽者會發現反射聲波部分比聲源聲波慢一些,類似人們面對山體高聲呼喊后可以在過一會兒聽到回聲的現象。聲音遇到較遠物體產生的反射會比遇到較近的反射波晚些到達聲源位置,所以回聲和原聲的延遲隨反射物體的距離大小改變。同時,反射聲音的物體對聲波的反射能力,決定了聽到的回聲的強弱和質量。另外,生活中的回聲的成分比較復雜,有反射、漫反射、折射,還有回聲的多次反射、折射效果。
當已知一個數字音源后,可以利用計算機的處理能力,用數字的方式通過計算模擬回聲效應。簡單的講,可以在原聲音流中疊加延遲一段時間后的聲流,實現回聲效果。當然通過復雜運算,可以計算各種效應的混響效果。如此產生的回聲,我們稱之為數字回聲。
本次實驗的程序流程圖如下:
圖2.1 程序流程圖
本次實驗的系統框圖如下:
圖2.2 系統框圖
3硬件設計
3.1 硬件結構
圖3.1是系統的硬件結構框圖, 系統主要包括VC5509和A IC23 兩個模塊。
圖3.1系統硬件結構框圖
利用VC5509 的片上外設I2C(Inter-Integrated Circuit, 內部集成電路)模塊配置AIC23 的內部寄存器;通過VC5509 的McBSP(Multi channel Buffered Serial Ports, 多通道緩存串口)接收和發送采樣的音頻數據。控制通道只在配置AIC23 的內部寄存器時工作, 而當傳輸音頻數據時則處于閑置狀態。
AIC23通過麥克風輸入或者立體聲音頻輸入采集模擬信號, 并把模擬信號轉化為數字信號, 存儲到DSP的內部RAM中,以便DSP處理。
當DSP完成對音頻數據的處理以后, AIC23再把數字信號轉化為模擬信號, 這樣就能夠在立體聲輸出端或者耳機輸出端聽到聲音。
AIC23能夠實現與VC5509 DSP的McBSP端口的無縫連接, 使系統設計更加簡單。接口的原理框圖, 如下圖所示。
圖3.2 AIC23與VC5509接口原理圖
系統中A IC23的主時鐘12 MHz直接由外部的晶振提供。MODE接數字地, 表示利用I2 C控制接口對AIC23傳輸控制數據。CS接數字地, 定義了I2 C總線上AIC23的外設地址, 通過將CS接到高電平或低電平, 可以選擇A IC23作為從設備在I2 C總線上的地址。SCLK和SDIN是AIC23控制端口的移位時鐘和數據輸入端,分別與VC5509的I2C模塊端口SCL和SDA相連。
收發時鐘信號CLKX1和CLKR1由A IC23的串行數據輸入時鐘BCLK提供, 并由A IC23的幀同步信號LRCIN、LRCOUT啟動串口數據傳輸。DX1和DR1分別與A IC23 的D IN 和DOUT 相連, 從而完成VC5509與AIC23間的數字信號通信。
3.2 硬件電路設計
3.2.1 總輸入電路
圖3.3 總輸入電路
從左到右各部分電路為:
話筒,開關,語音輸入電路,UA741高增益放大電路,有源二階帶 通濾波器。
3.2.2 總輸出電路
圖3.4 總輸出電路
從左到右各部分電路為:
LM386高頻功率放大器及其外圍器件連接電路,語音輸出電路,開關,揚聲器。
3.2.3 語音輸入電路
圖3.5語音輸入電路
3.2.4 語音輸出電路
圖3.6 語音輸出電路
語音信號通道包括模擬輸入和模擬輸出兩個部分。模擬信號的輸入輸出電路如圖所示。上圖中MICBIAS 為提供的麥克風偏壓,通常是3/4 AVDD,MICIN為麥克風輸入,可以根據需要調整輸入增益。下圖中LLINEOUT 為左聲道輸出,RLINEOUT為右聲道輸出。用戶可以根據電阻阻值調節增益的大小,使語音輸入輸出達到最佳效果。從而實現良好的模擬語音信號輸入與模擬信號的輸出。4 實驗結果及分析
4.1 實驗結果
按“F5”鍵運行,注意觀察窗口中的bEcho=0,表示數字回聲功能沒有激活。這時從耳機中能聽到麥克風中的輸入語音放送。將觀察窗口中bEcho的取值改成非0值。這時可從耳機中聽到帶數字回聲道語音放送。
分別調整uDelay和uEffect的取值,使他們保持在0-1023范圍內,同時聽聽耳機中的輸出有何變化。
當uDelay和uEffect的數值增大時,數字回聲的效果就會越加的明顯。
圖4.1 修改前程序圖
圖4.2 修改前程序圖
圖4.3 頻譜分析
圖4.4 左聲道及右聲道波形 4.2 實驗分析
所以,從本實驗可知當已知一個數字音源后,可以利用計算機的處理能力,用數字的方式通過計算模擬回聲效應。簡單的講,可以在原聲音流中疊加延遲一段時間后的聲流,實現回聲效果。當然通過復雜運算,可以計算各種效應的混響效果。
聲音放送可以加入數字回聲,數字回聲的強弱和與原聲的延遲均可在程序中設定和調整。5 總結與心得體會
通過本次課程設計,我明白了細節決定成敗這句話的道理,在實驗中,有很多注意的地方,都被忽視了,導致再花費更多的時間去修改,這嚴重影響了試驗的進度。同時,在本次實驗中我了解了ICETEK – VC5509 – A板上語音codec芯片TLV320AIC23的設計和程序控制原理,并進一步掌握了數字回聲產生原理、編程及其參數選擇、控制,以及了解了VC5509DSP擴展存儲器的編程使用方法。
這一學期的理論知識學習加上這次課程設計,使我對DSP有了更加深刻的了解,對數字信號的處理功能,軟硬件相結合,語音信號的采集與放送等等方面都有了很深的了解,相信本次課程設計,無論是對我以后的學習,還是工作等方面都有一個很大的幫助。因此,本次課程設計讓我受益匪淺。
參考文獻
[1]李利.DSP原理及應用[M].北京:中國水利水電出版社,2004.[2]王安民,陳明欣,朱明.TMS320C54xxDSP實用技術[M].北京:清華大學出版社,2007 [3]彭啟琮,李玉柏.DSP技術[M].成都:電子科技大學出版社,1997 [4]李宏偉,等.基于幀間重疊譜減法的語音增強方法[J].解放軍理工大學學報,2001(1):41~44 [5]TexasInstrumentsIncorporated.TMS320C54x系列DSP的CPU與外設[M].梁曉雯,裴小平,李玉虎,譯.北京:清華大學出版社,2006 [6]趙力.語音信號處理[M].北京:機械工業出版社,2003比較圖4和圖5,可以看到1200Hz以上的頻譜明顯得到了抑制。
[7]江濤,朱光喜.基于TMS320VC5402的音頻信號采集與系統處理[J].電子技術用,2002,28(7):70~72[8]TexasInstrumentsIncorporated:TMS320VC5402Datasheet,2001
致謝
在本次課程設計的即將完成之際,筆者的心情無法平靜,本文的完成既是筆者孜孜不倦努力的結果,更是指導老師樊洪斌老師親切關懷和悉心指導的結果。在整個課程設計的選題、研究和撰寫過程中,老師都給了我精心的指導、熱忱的鼓勵和支持,他的精心點撥為我開拓了研究視野,修正了寫作思路,對課程設計的完善和質量的提高起到了關鍵性的作用。另外,導師嚴謹求實的治學態度、一絲不茍的工作作風和高尚的人格魅力,都給了學生很大感觸,使學生終生受益。在此,學生謹向老師致以最真摯的感激和最崇高的敬佩之情。
另外,還要感謝這段時間來陪我一起努力同學,感謝我們這個小團隊,感謝每一個在學習和生活中所有給予我關心、支持和幫助的老師和同學們,幾年來我們一起學習、一起玩耍,共同度過了太多的美好時光。我們始終是一個團結、友愛、積極向上的集體。
第五篇:數字信號處理(DSP)課程設計報告
中南大學
數字信號處理課程設計報告
專業班級: 通信工程1201
指導老師:李宏
姓
名:
學
號:
完成日期:2014年10月18日
前
言
現代信號處理是將信號表示并處理的理論和技術,而數字信號處理與模擬信號處理是信號處理的子集。在本次課程設計中主要以數字信號處理來解決問題。數字信號處理的目的是對真實世界的連續模擬信號進行測量或濾波,因此在進行數字信號處理之前需要將信號從模擬域轉換到數字域,這通常通過模數轉換器實現。而數字信號處理的輸出經常也要變換到模擬域,這是通過數模轉換器實現的。
數字信號處理的算法需要利用計算機或專用處理設備如數字信號處理器(DSP)和專用集成電路(ASIC)等。數字信號處理技術及設備具有靈活、精確、抗干擾強、設備尺寸小、造價低、速度快等突出優點,這些都是模擬信號處理技術與設備所無法比擬的。數字信號處理的核心算法是離散傅立葉變換(DFT),是DFT使信號在數字域和頻域都實現了離散化,從而可以用通用計算機處理離散信號。而使數字信號處理從理論走向實用的是快速傅立葉變換(FFT),FFT的出現大大減少了DFT的運算量,使實時的數字信號處理成為可能、極大促進了該學科的發展。
MATLAB是矩陣實驗室(Matrix Laboratory)的簡稱,和Mathematica、Maple并稱為三大數學軟件。它在數學類科技應用軟件中在數值計算方面首屈一指。MATLAB可以進行矩陣運算、繪制函數和數據、實現算法、創建用戶接口、連接其它編程語言的程序等。
一、課程設計目的:
1.全面復習課程所學理論知識,鞏固所學知識重點和難點,將理論與實踐很好地結合起來。
2.掌握信號分析與處理的基本方法與實現
3.提高綜合運用所學知識獨立分析和解決問題的能力; 4.熟練使用一種高級語言進行編程實現。
二、課程設計題目:
(一):
1)生成信號發生器:能產生頻率(或基頻)為10Hz的周期性正弦波、三角波和方波信號。繪出它們的時域波形
2)為避免頻譜混疊,試確定各信號的采樣頻率。說明選擇理由。3)對周期信號進行離散傅立葉變換,為了克服頻譜泄露現象,試確定截取數據的長度,即信號長度。分析說明選擇理由。4)繪出各信號頻域的幅頻特性和相頻特性
5)以正弦周期信號為例,觀察討論基本概念(頻譜混疊、頻譜泄漏、整周期截取等)。
(二):
已知三個信號aip(n),經調制產生信號s(n)??aip(n)cos(i?n/4),其中ai為
i?1常數,p(n)為具有窄帶特性的Hanning信號。將此已調信號通過信道傳輸,描述該信道的差分方程為
y(n)?1.1172y(n?1)?0.9841y(n?2)?0.4022y(n?3)?0.2247y(n?4)?0.2247x(n)?0.4022x(n?1)?0.9841x(n?2)?1.1172x(n?3)?x(n?4)
得到接收信號y(n)?s(n)*h(n)
1)分析Hanning信號p(n)的時域與頻域特性 2)分析已調信號s(n)的時域與頻域特性 3)分析系統的單位脈沖響應h(n)4)分析接收信號y(n)的頻譜
5)設計帶通濾波器從接收信號y(n)中還原出三個已調信號。
3(三):圖像信號相關處理
1)讀入一幅彩色圖像
2)將彩色圖像進行三原色分解,分解出R、G、B分量,并用圖像顯示出來
3)將彩色圖像灰度化,轉換為灰度圖像并顯示
4)對灰度圖像用幾種典型的邊緣檢測算子進行邊緣檢測,顯示檢測出的邊緣。
三、調試及結果分析(截圖):
(一):
1)
頻率為10Hz的周期性正弦波:
頻率為10Hz的周期性三角波:
頻率為10Hz的周期性方波:
2)采樣頻率不能過低,必須fs>=2fm,即采樣頻率必須大于或等于最高截止頻率的二倍(對采樣頻率的要求,即采樣頻率要足夠大,采樣的值要足夠多,才能不失真的恢復原信號)。題目中信號頻率為10Hz,則采樣頻率應該大于或等于20Hz,這樣的話采樣離散信號才能夠無失真的恢復到原來的連續信號。3)截取數據長度(即信號長度)N=T*fs=2 4)
頻率為10Hz的周期性正弦波的幅頻特性和相頻特性:
頻率為10Hz的周期性三角波的幅頻特性和相頻特性:
頻率為10Hz的周期性方波的幅頻特性和相頻特性:
5)
頻譜混疊:一個信號的最高頻率比如是fmax,那它的頻譜就是在-fmax~fmax之間有值。對這個信號進行時域采樣(就是取離散的點),設采樣率為fs。有一個定理:對信號進行時域fs的采樣,信號的頻譜就會在頻域以fs為周期重復。那么如果fs>=2fmax,可想而知,頻域寬度為fs的頻帶內,是可以放得下一整個完整的頻譜的,所以不會混疊。如果fs<2fmax,頻域每間隔fs就會出現一個頻譜,必定會有相鄰的頻譜疊在一起的情況,就是混疊。
頻譜泄露:對于頻率為fs的正弦序列,它的頻譜應該只是在fs處有離散譜。但是,在利用DFT求它的頻譜做了截短,結果使信號的頻譜不只是在fs處有離散譜,而是在以fs為中心的頻帶范圍內都有譜線出現,它們可以理解為是從fs頻率上“泄露”出去的,這種現象稱 為頻譜“泄露”。
整周泣截取:與周期函數一樣,周期信號是每隔時間T以后,信號重復出現。T就稱為信號的周期。
N取100時:
N取200時:
(二):
1)Hanning信號p(n)的時域與頻域特性:
2)已調信號s(n)的時域與頻域特性:
3)系統的單位脈沖響應h(n):
4)接收信號y(n)的頻譜:
5)(設計帶通濾波器)從接收信號y(n)中還原出三個已調信號:
(三):
1)讀入一幅彩色圖像:
2)將彩色圖像進行三原色分解,分解出R、G、B分量,并用圖像顯示出來:
3)將彩色圖像灰度化,轉換為灰度圖像并顯示:
4)對灰度圖像用幾種典型的邊緣檢測算子進行邊緣檢測,顯示檢測出的邊緣:
四、源程序:
(一): 1):
周期性正弦波: fs=10;w=2*pi*fs;t=0:0.01:2;y=sin(w*t);plot(t,y);grid on;axis([0 2-2 2]);title('正弦信號');
周期性三角波: t=-0.3:0.01:0.3;y=sawtooth(10*pi*t,0.5);plot(t,y);grid on;axis([-0.3 0.3-1.5 1.5]);title('三角波信號')
周期性方波: t=0:0.001:0.5;y=square(2*pi*10*t,50);plot(t,y);grid on;axis([0 0.5-1.5 1.5]);title('周期方波信號')
4):
周期性正弦波: t=0:0.001:0.999;subplot(311)a=sin(20*pi*t);plot(t,a);grid on;title('sin20pi*t');xlabel('T');b=fft(a);subplot(312);stem(t*1000,abs(b)/1000,'fill');xlabel('Hz');axis([-10 50 0 0.5]);grid on;title('幅頻特性')subplot(313)stem(t*1000,angle(b)/1000,'fill');xlabel('Hz');axis([0 100-0.004 0.004])grid on;title('相頻特性')
周期性三角波: t=-0.3:0.01:0.3;a=sawtooth(10*pi*t,0.5);subplot(311)plot(t,a);grid on;axis([-0.3 0.3-1.5 1.5]);title('三角波信號')b=fft(a);subplot(312)stem(t*100,abs(b)/100,'fill');axis([0 50 0 0.5]);grid on;title('幅頻特性')subplot(313)stem(t*100,angle(b)/100,'fill');axis([0 25-0.04 0.04]);grid on;title('相頻特性')周期性方波: t=0:0.001:0.5;a=square(2*pi*10*t,50);subplot(311)plot(t,a);grid on;axis([0 0.5-1.5 1.5]);title('周期方波信號')b=fft(a);subplot(312)stem(t*100,abs(b)/100,'fill');axis([0 50 0 4]);grid on;title('幅頻特性')subplot(313)stem(t*100,angle(b)/100,'fill');axis([0 5-0.04 0.04]);grid on;title('相頻特性')
5):
N=100(或:N=200);T=1;
t=linspace(0,T,N);x=sin(2*pi*10*t);dt=t(2)-t(1);f=1/dt;X=fft(x);F=X(1:N/2+1);f=f*(0:N/2)/N;subplot(2,1,1)plot(t,x)
title('x=sin(2*pi*50*t)')xlabel('t')
ylabel('Amplitude')axis([0,1,-1,1]);subplot(2,1,2)plot(f,abs(F))xlabel('Frequency');ylabel('|X(e^{jw})|')
(二): 1): N=100;n=0:99;Rn=[ones(1,N-1)zeros(1, 101-N)];pn=0.5*[1-cos((2*pi*n)/(N-1))].*Rn;subplot(211);stem(n,pn);title('漢寧信號');[H,w]=freqz(pn,1,200);magH=abs(H);length(w);length(H);magHdB=20*log10(magH);subplot(212);plot(w/pi,magHdB);2):
N=100;n=0:99;
Rn=[ones(1,N-1)zeros(1,101-N)];pn=0.5*[1-cos((2*pi*n)/(N-1))].*Rn;
sn=2*pn.*(cos(pi*n/4)+4*pn.*cos(pi*n/2)+6*pn.*cos(3*pi*n/4));subplot(211);stem(n,sn);
title('已調信號');
[H,w]=freqz(sn,1,200);magH=abs(H);length(w);length(H);
magHdB=20*log10(magH);subplot(212);plot(w/pi,magHdB);
3):
a=[1-1.1172 0.9842-0.4022 0.2247];b=[0.2247-0.4022 0.9842-1.1172 1];n=1:49;
hn=impz(b,a,n);stem(n,hn,'k','f');ylabel('脈沖響應 ¨h(n)');xlabel('序號(n)');title('單位脈沖響應');
4):
a=[1-1.1172 0.9842-0.4022 0.2247];b=[0.2247-0.4022 0.9842-1.1172 1];k=0:0.1:100;p=0.5-0.5*cos(2*pi*k./74);s=p.*(cos(pi*k/4)+2*cos(pi*k/2)+3*cos(3*pi*k/4));y=filter(b,a,s);z1=fft(y,256);plot([-128:127],fftshift(abs(z1)));axis([-30 30 0 120]);grid on;
5):
wp=200;ws=200;wp1=[0.2,0.3];ws1=[0.1,0.4];wp2=[0.4,0.6];ws2=[0.3,0.7];wp3=[0.7,0.8];ws3=[0.6,0.9];ap=1;as=20;N=100;n=0:99;
Rn=[ones(1,N-1)zeros(1,101-N)];pn=0.5*[1-cos((2*pi*n)/(N-1))].*Rn;
sn=2*pn.*(cos(pi*n/4)+4*pn.*cos(pi*n/2)+6*pn.*cos(3*pi*n/4));a=[1-1.1172 0.9841-0.4022 0.2277];b=[0.2277-0.4022 0.9841-1.1172 1];yn=filter(b,a,sn);
[n,wc]=cheb1ord(wp,ws,ap,as);[bz,az]=cheby1(n,ap,wc);subplot(311)bz1=bz;az1=az;x1=filter(bz1,az1,yn);plot(x1);subplot(312)bz2=bz;az2=az;x2=filter(bz2,az2,yn);plot(x2);subplot(313)bz3=bz;az3=az;x3=filter(bz3,az3,yn);plot(x3)
(三):
1):
clc;a=imread('F:星空.jpg');imshow(a),title('原彩色圖像');2):
clc;a=imread('F:星空.jpg');subplot(3,2,1),imshow(a),title('原彩色圖像');
ar=a(:,:,1);ag=a(:,:,2);ab=a(:,:,3);subplot(3,2,4),imshow(ar),title('R');
subplot(3,2,5),imshow(ag),title('G');subplot(3,2,6),imshow(ab),title('B');3):
clc;a=imread('F:星空.jpg');subplot(2,1,1),imshow(a),title('原彩色圖像');b=rgb2gray(a);subplot(2,1,2),imshow(b),title('灰度圖像');4):
a=imread('F:星空.jpg');b=rgb2gray(a);b1=edge(b,'sobel');b2=edge(b,'prewitt');b3=edge(b,'roberts');b4=edge(b,'log');b5=edge(b,'canny');subplot(3,2,1);imshow(b);title('灰度圖像');subplot(3,2,2);imshow(b1);title('Sobel邊緣檢測');subplot(3,2,3);imshow(b2);title('Prewitt邊緣檢測');subplot(3,2,4);imshow(b1);title('Roberts邊緣檢測');subplot(3,2,5);imshow(b1);title('LoG邊緣檢測');subplot(3,2,6);imshow(b1);title('Canny邊緣檢測');
五、總結與心得體會:
在課程設計的這段時間,我獲益匪淺,不但進一步掌握了數字信號處理的基礎知識及MATLAB的基本操作,還詳細了解并掌握了信號的產生、采樣及頻譜分析的方法。我進一步了解到凡事都需要耐心,細心仔細是成功的重要保證之一。雖然在做的過程中遇到了一些問題,但是在研究生學姐、班級同學的幫助以及自己的努力下,問題最終都得以解決。這次課程設計對我各方面的能力有了很大的提高,對我以后的工作、實踐都有很大的幫助。
在此次課程設計當中,我經常把C語言的語法知識照搬到MATALAB設計中,從而導致調試失敗,所以下次用此類語言做課程設計時,應事先學習下這類語言的基本語法,以免與其他語言相混淆。還有就是有些不定參數存在時,可先取定值,用于調試,這樣可以節約調試時間,從而提高效率。
本次課程設計不但讓我又學到了一些知識,而且也提高了我的綜合能力,使我在各個方面都得到了鍛煉。以后有這樣的機會一定會更加的很好利用,它不僅可以提高學習的針對性而且可以很好的鍛煉動手能力以及自己的邏輯設計能力和處理問題的能力,希望在以后的學習生活中會有更多的機會來加強這方面的能力。
參考文獻:
[1] 《數字信號處理(第二版)》.丁玉美等 西安電子科技大學出版社 [2] 《數字信號處理及其MATLAB實現》,陳懷琛等譯,電子工業出版社;
[3] 《MATLAB及在電子信息課程中的應用》,陳懷琛等,電子工業出版社