第一篇:實驗二 應用FFT對信號進行頻譜分析-作業要求
實驗二 應用fft對信號進行頻譜分析
作業要求:
1、利用matlab編程計算教材中59頁例2-2的結果,并畫出頻譜圖。
2、已知有限長序列x(n)=[7,6,5,4,3,2],求x(n)的DFT和IDFT。要求:①畫出序列傅里葉變換對應的|X(k)|和arg[X(k)]的圖形。
②畫出原信號與傅里葉逆變換IDFT[X(k)]的圖形進行比較。
3、實驗教材第11頁第3題。
4、已知一個周期序列x(k)?cos(?
8k??
3)?0.5cos(?
4k),利用FFT計算其頻譜。
5、有限長序列的離散傅里葉變換(DFT)與離散時間傅里葉變換(DTFT)有何聯系與區別?
第二篇:DFT在信號頻譜分析中的應用
設計一 DFT在信號頻譜分析中的應用
一、設計目的
1.熟悉DFT的性質。
2.加深理解信號頻譜的概念及性質。
3.了解高密度譜與高分辨率頻譜的區別。
二、設計任務與要求
1.學習用DFT和補零DFT的方法來計算信號的頻譜。
2.用MATLAB語言編程來實現,在做課程設計前,必須充分預習課本DTFT、DFT及補零DFT的有關概念,熟悉MATLAB語言,獨立編寫程序。
三、設計內容
1.用MATLAB語言編寫計算序列x(n)的N點DFT的m函數文件dft.m。并與MATLAB中的內部函數文件fft.m作比較。參考程序如下: function Xk=dft(xn,N)if length(xn) xn=[xn,zeros(1,N-length(xn))];end n=0:N-1;for k=0:N-1 Xk(1,k+1)=sum(xn.*exp((-1)*j*n*k*(2*pi/N)));end 2.對離散確定信號 x(n)?cos(0.48?n)?cos(0.52?n) 作如下譜分析: (1)截取x(n)使x(n)成為有限長序列N(0?n?N-1),(長度N自己選)寫程序計 算出x(n)的N點DFT X(k),畫出時域序列圖xn~n和相應的幅頻圖X(k)~k。參考程序如下:(假設N取11,即0≤n≤10 時, 編寫程序,計算出X(n)的11點DFT Xk) n = 0:10;xn=cos(0.48*pi*n)+cos(0.52*pi*n);Xk = fft(xn, 11);subplot(2,1,1);stem(n, xn);grid;subplot(2,1,2);stem(n, abs(Xk));grid; (2)將(1)中x(n)補零加長至M點,長度M自己選,(為了比較補零長短的影響,M可以取兩次值,一次取較小的整數,一次取較大的整數),編寫程序計算x(n)的M點DFT, 畫出時域序列圖和兩次補零后相應的DFT幅頻圖。 參考程序如下:(假設M取20和M取70,即分別補9個0和59個0,得補零后20點的序列xn1和70點的序列xn2,編寫程序,計算出xn1的20點DFT Xk1和 xn2的70點DFT Xk2) n = 0:10;xn=cos(0.48*pi*n)+cos(0.52*pi*n);n1 = 0:19;xn1 = [xn, zeros(1,9)];n2= 0:69;xn2 = [xn, zeros(1,59)];Xk1 = fft(xn1, 20);Xk2 = fft(xn2, 70);subplot(3,1,1);stem(n, xn);grid;subplot(3,1,2);stem(n1, abs(Xk1));grid;subplot(3,1,3);stem(n2, abs(Xk2));grid; (2)用補零DFT計算(1)中N點有限長序列x(n)頻譜X(ej?)并畫出相應的幅頻圖 X(ej?)~?。 參考程序如下:(假設M取200) n = 0:10;xn=cos(0.48*pi*n)+cos(0.52*pi*n);n1 = 0:199;xn3 = [xn, zeros(1,189)];Xk3 = fft(xn3, 200);plot(n1, abs(Xk3));grid;3.研究高密度譜與高分辨率頻譜。 對連續確定信號xa(t)?cos(2??6.5?10t)?cos(2??7?10t)?cos(2??9?10t)以采樣頻率fs=32kHz對信號xa(t)采樣得離散信號x(n),分析下列三種情況的幅頻特性。(1)采集數據x(n)長度取N=17點,編寫程序計算出x(n)的17點DFTX(k),并畫出相應 的幅頻圖X(k)~k。 (2)采集數據x(n)長度N=17點,補零加長至M點(長度M自己選),利用補零DFT計算 333 x(n)的頻譜X1(ej?)并畫出相應的幅頻圖X1(ej?)~?。 (3)采集數據x(n)長度取為M點(注意不是補零至M),編寫程序計算出M點采集數據x(n)的的頻譜X2(ej?)并畫出相應的幅頻圖X2(ej?)~?。 參考程序如下: T=1/(32*10^3);t=(0:16);xn=cos(2*pi*6.5*10^3*t*T)+cos(2*pi*7*10^3*t*T)+cos(2*pi*9*10^3*t*T);Xk=fft(xn,17);subplot(2,1,1);stem(t,xn);grid;subplot(2,1,2);stem(t,abs(Xk));grid; T=1/(32*10^3);t=(0:16);xn=cos(2*pi*6.5*10^3*t*T)+cos(2*pi*7*10^3*t*T)+cos(2*pi*9*10^3*t*T);n1=0:20;xn1=[xn,zeros(1,4)];Xk1=fft(xn1,21);subplot(2,1,1);stem(n1,xn1);grid;subplot(2,1,2);plot(n1,abs(Xk1));grid; T=1/(32*10^3);t=[0:20];xn=cos(2*pi*6.5*10^3*t*T)+cos(2*pi*7*10^3*t*T)+cos(2*pi*9*10^3*t*T);Xk2=fft(xn,21);subplot(2,1,1);stem(t,xn);grid;subplot(2,1,2);plot(t,abs(Xk2));grid; 四、設計報告要求 1.簡述設計目的及原理。 2.完成設計中要求的各種理論推導和計算,并列出相應的MATLAB程序。3.繪出設計中要求的各種曲線,并作出說明。 4.結合設計過程,歸納得出結論,并分析設計中遇到的問題及解決思路和方法。5.寫出設計體會。 6.簡要回答如下思考題: (1)對比設計內容2中(1)(2)(3)的圖,說明補零DFT的作用。 j?j?(2)解釋設計內容3中X1(e)~?圖和X2(e)~?圖有什么區別?補零DFT 能否提高信號的頻譜分辨率,說明提高頻譜密度、頻譜分辨率的措施各是什么? 實驗二離散時間信號分析 一、實驗目的1.掌握各種常用的序列,理解其數學表達式和波形表示。 2.掌握在計算機中生成及繪制數字信號波形的方法。 3.掌握序列的相加、相乘、移位、反褶等基本運算及計算機實現與作用。 4.掌握線性卷積軟件實現的方法。 5.掌握計算機的使用方法和常用系統軟件及應用軟件的使用。 6.通過編程,上機調試程序,進一步增強使用計算機解決問題的能力。 二、實驗原理 1.序列的基本概念 離散時間信號在數學上可用時間序列{x(n)}來表示,其中x(n)代表序列的第n個數字,n代表時間的序列,n的取值范圍為???n??的整數,n取其它值x(n)沒有意義。離散時間信號可以是由模擬信號通過采樣得到,例如對模擬信號xa(t)進行等間隔采樣,采樣間隔為T,得到{xa(nT)}一個有序的數字序列就是離散時間信號,簡稱序列。 2.常用序列 常用序列有:單位脈沖序列(單位抽樣)?(n)、單位階躍序列u(n)、矩形序列RN(n)、實指數序列、復指數序列、正弦型序列等。 3.序列的基本運算 序列的運算包括移位、反褶、和、積、標乘、累加、差分運算等。 4.序列的卷積運算 y(n)? m????x(m)h(n?m)?x(n)?h(n)? 上式的運算關系稱為卷積運算,式中?代表兩個序列卷積運算。兩個序列的卷積是一個序列與另一個序列反褶后逐次移位乘積之和,故稱為離散卷積,也稱兩序列的線性卷積。其計算的過程包括以下4個步驟。 (1)反褶:先將x(n)和h(n)的變量n換成m,變成x(m)和h(m),再將h(m)以縱軸為對稱軸反褶成h(?m)。 (2)移位:將h(?m)移位n,得h(n?m)。當n為正數時,右移n位;當n為負數時,左移n位。 (3)相乘:將h(n?m)和x(m)的對應點值相乘。 (4)求和:將以上所有對應點的乘積累加起來,即得y(n)。 5.matlab命令 1、單位采樣序列:可用MATLAB中的zeros函數實現; X=[1 zeros(1,n-1)] 2、單位階躍序列:這一序列可用MATLAB中的zeros函數實現; X=ones(1,N) 3、實指數序列; n=0:N-1; x=a.^n; 4、正弦波: t=0:0.01*pi:2*pi x=sin(2*pi*t); plot(t,x); xlabel(‘時間t’); ylabel(‘幅值y’); 5、移位 用MATLAB編寫一個移位函數sigshift() function [y,m]=sigshift(x,n,k) %implements y(m+k)=x(n) m=n+k; y=x; 把上面的矩形序列右移3位 n0=0; n1=-10; n2=10; n=[n1:n2]; x=[(n-n0)>=0&(n-4)<=0]; k=3; [y,n]=sigshift(x,n,k); stem(n,y); xlabel('n');ylabel('x(n)'); title('step sequence'); grid6、翻褶 用MATLAB編寫一個翻褶函數sigfold() function [y,n]=sigfold(x,m,k) y=fliplr(x); n=-fliplr(n); 用MATLAB編寫一個程序把上面的矩形序列翻褶 三、主要實驗儀器及材料 微型計算機、Matlab6.5教學版、TC編程環境。 四、實驗內容 1.知識準備 認真復習以上基礎理論,理解本實驗所用到的實驗原理。 2.離散時間信號(序列)的產生。 利用MATLAB編程產生和繪制下列有限長序列: (1)單位脈沖序列?(n) (2)單位階躍序列u(n) (3)矩形序列R8(n) (4)正弦型序列x(n)?Asin((5)任意序列 ?5n??3) x(n)??(n)?2?(n?1)?3?(n?2)?4?(n?3)?5?(n?4) h(n)??(n)?2?(n?1)??(n?2)?2?(n?3) 3.序列的運算 利用MATLAB編程完成上述兩序列的移位、反褶等運算,并繪制運算后序列的波形。 4.卷積運算 利用MATLAB編制一個計算兩個序列線性卷積的通用程序,計算上述兩序列x(n)?h(n),并繪制卷積后序列的波形。 5.上機調試并打印或記錄實驗結果。 6.完成實驗報告。 五、實驗報告要求 1.簡述實驗原理及目的。 2.列出計算卷積的公式,畫出程序框圖,并列出實驗程序清單(可略)(包括必要的程序說明)。 3.記錄調試運行情況及所遇問題的解決方法。 4.給出實驗結果,并對結果作出分析。 實驗一語音信號分析與處理 學號姓名注:1)此次實驗作為《數字信號處理》課程實驗成績的重要依據,請同學們認真、獨立完成,不得抄襲。 2)請在授課教師規定的時間內完成; 3)完成作業后,請以word格式保存,文件名為:學號+姓名 4)請通讀全文,依據第2及第3 兩部分內容,認真填寫第4部分所需的實驗數據,并給出程序內容。 1.實驗目的(1)學會MATLAB的使用,掌握MATLAB的程序設計方法 (2)掌握在windows環境下語音信號采集的方法 (3)掌握MATLAB設計FIR和IIR濾波器的方法及應用 (4)學會用MATLAB對語音信號的分析與處理方法 2.實驗內容 錄制一段自己的語音信號,對錄制的語音信號進行采樣,畫出采樣后語音信號的時域波形和頻譜圖,確定語音信號的頻帶范圍;使用MATLAB產生白噪聲信號模擬語音信號在處理過程中的加性噪聲并與語音信號進行疊加,畫出受污染語音信號的時域波形和頻譜圖;采用雙線性法設計出IIR濾波器和窗函數法設計出FIR濾波器,畫出濾波器的頻響特性圖;用自己設計的這兩種濾波器分別對受污染的語音信號進行濾波,畫出濾波后語音信號的時域波形和頻譜圖;對濾波前后的語音信號進行時域波形和頻譜圖的對比,分析信號的變化;回放語音信號,感覺與原始語音的不同。 3.實驗步驟 1)語音信號的采集與回放 利用windous下的錄音機或其他軟件錄制一段自己的語音(規定:語音內容為自己的名字,以wav格式保存,如wql.wav),時間控制再2秒之內,利用MATLAB提供的函數wavread對語音信號進行采樣,提供sound函數對語音信號進行回放。 [y,fs,nbits]=wavread(file),采樣值放在向量y中,fs表示采樣頻率nbits表示采樣位數。Wavread的更多用法請使用help命令自行查詢。 2)語音信號的頻譜分析 利用fft函數對信號進行頻譜分析 3)受白噪聲干擾的語音信號的產生與頻譜分析 ①白噪聲的產生: N1=sqrt(方差值)×randn(語音數據長度,2)(其中2表示2列,是由于雙聲道的原因)然后根據語音信號的頻譜范圍讓白噪聲信號通過一個帶通濾波器得到一個帶限的白噪聲信號N2; 帶通濾波器的沖激響應為: hB(n)=?c2 ?sinc(?c2 ?(n??))??c1 ?sinc(?c1 ?(n??))其中ωc1為通帶濾波器的下截止頻率,ωc2為通帶濾波器的上截止頻率。其中下截止頻率由每個人的語音信號的最高頻率確定 濾波器的長度N由濾波器的過渡帶確定,一般不宜太小(大于1000),α=(N-1)/2; ②信號y通過低通濾波器,得到信號為x1 低通濾波器的沖激響應為: hL(n)??c1?sinc(?c1 ?(n??))其中的ωc1與上面的帶通濾波器的下截止頻率一致,濾波器的長度N也于上面的帶通濾波器一致,α=(N-1)/2 ③將N1加上x1得到一個受到噪聲污染的聲音信號 4)據語音信號的頻帶情況,設計FIR和IIR兩種濾波器 5)用濾波器對受污染語音信號進行濾波 FIR濾波器fftfilt函數對信號進行濾波,IIR濾波器用filter函數對信號進行濾波 6)比較濾波前后信號的波形與頻譜 7)回放濾波后的語音信號 4.實驗數據及實驗程序 實驗數據 1)原始語音信號的時域波形和頻譜圖及語音信號的頻帶范圍 2)帶限白噪聲信號的時域波形和幅頻特性 3)受污染語音信號的時域波形和幅頻譜圖 4)濾波器的頻響特性圖 FIR濾波器的幅頻響特性圖 IIR濾波器的幅頻響特性圖 5)濾波后語音信號的時域波形和頻譜圖 6)濾波前后的語音信號時域波形對比圖和幅頻譜對比圖 7)將實驗的資料的電子文檔交給班長(建立一個文件夾,里面包括:①實驗報告的電子版;②采集的語音信號電子文件;③受污染的語音信號及濾波后的語音信號存在文件名為“姓名+學號.mat”文件的文件中) 實驗程序: 1)實驗主程序 2)FIR濾波器子程序 3)IIR濾波器子程序 武漢工程大學 數字信號處理實驗報告二 專業班級: 14級通信03班 學生姓名:秦重雙 學號: 1404201114 實驗時間: 2017年5月3日 實驗地點: 4B315 指導老師:楊述斌 實驗一離散時間信號的分析實驗 一、實驗目的 ① 認識常用的各種信號,理解其數學表達式和波形表示。② 掌握在計算機中生成及繪制數值信號波形的方法。③ 掌握序列的簡單運算及計算機實現與作用。 ④ 理解離散時間傅里葉變換、Z變換及它們的性質和信號的頻域特性。 二、實驗設備 計算機,MATLAB語言環境。 三、實驗基礎理論 1、序列的相關概念 離散時間信號用一個稱為樣本的數字序列來表示。一般用{x[n]}表示,其中自變量n的取值范圍是﹣∞到﹢∞之間的整數。為了表示方便,序列通常直接用x[n]表示。 離散時間信號可以是一個有限長序列,也可以是一個無限長序列。有限長(也稱為有限時寬)序列僅定義在有限的時間間隔中:﹣∞≤N1 ≤N2 ≤+∝.有限長序列的長度或時寬為N=N1-N2+1。 滿足x[n+kN]=x[n](對于所有n)的序列稱為周期為N的周期序列,其中N取任意正整數;k取任意整數; 2、常見序列 常見序列有單位取樣值信號、單位階躍序列、矩形序列、斜變序列、單邊指數序列、正弦序列、復指數序列等。 3、序列的基本運算 序列的基本運算有加法、乘法、倒置(反轉)、移位、尺度變換、卷積等。 4、離散傅里葉變換的相關概念 5、Z變換的相關概念 四.實驗內容與步驟 1、知識準備 認真復習以上基礎理論,理解本實驗所用到的實驗原理。 2、離散時間信號(序列)的產生 利用MATLAB語言編程和繪制單位樣值信號、單位階躍序列、指數序列、正弦序列及隨機離散信號的波形,以加深對離散信號時域表示的理解。① 單位取樣值信號 Matlab程序 x=0;y=1;stem(x,y);title('單位樣值');axis([-2,2,0,1]); ② 單位階躍序列 Matlab程序 n0=0;n1=-5;n2=5;n=[n1:n2];x=[(n-n0)>=0];stem(n,x);xlabel('n');ylabel('x(n)');title('單位階躍序列'); ③ 指數序列、正弦序列 Matlab程序 n=[0:10];x=(1/3).^n;stem(n,x);xlabel('n');ylabel('x(n)');title('指數序列'); n=[-20:20];x=2*sin(0.5.*n);stem(n,x);xlabel('n');ylabel('x(n)');axis([-20,20,-3,3]);title('正弦序列'); ④ 隨機離散信號矩形序列 Matlab程序 n=[1:10];x=rand(1,10);stem(n,x);xlabel('n');ylabel('x(n)');title('隨機序列'); 3、序列的運算 數字信號處理的目的,就是從一個或幾個給定的離散時間信號中產生一個具有所需性質的信號。處理算法由加法、乘法、倒置(反轉)、移位、尺度變換、卷積等基本運算組合構成。此部分實驗將通過幾個簡單常見的例子說明這些基本運算的實際運用,以便進一步理解序列的簡單運算及計算機實現與作用。(1)信號平滑 利用MATLAB語言編程實現信號平滑運算。信號平滑是數字信號處理應用中的一個常見的算法,以慮出被加性噪聲污染的信號中的噪聲。假定信號s[n]被噪聲d[n]所污染,得到了一個含有加性噪聲的信號x[n]=s[n]+d[n]。要得到無污染的信號,可用簡單的信號平滑即信號的加法實現。例如,采用三點(可選,以信號特點來定)平滑來實現。y[n]=(x[n-1]+x[n]+x[n+1])/3 由此可以理解平滑濾波的處理方法。 Matlab程序 r=65; d=0.8*(rand(r,1)-0.5);m=0:r-1;s=2*m.*(0.9.^m);x=s+d';subplot(2,1,1); plot(m,d','r-',m,s,'g--',m,x,'b-.');xlabel('n');ylabel('振幅'); legend('d[n]','s[n]','x[n]');x1=[0 0 x];x2=[0 x 0];x3=[x 0 0];y=(x1+x2+x3)/3;subplot(2,1,2); plot(m,y(2:r+1),'r-',m,s,'g--');legand('y[n]','s[n]');xlabel('n');ylabel('振幅'); (2)調制信號的產生 利用MATLAB語言編程實現信號的調制。調制信號是工程應用中常用的一類信號,調制信號的產生可以通過序列的乘法運算得到。例如,用低頻調制信號xL[n]=cos(wln)來調制高頻正弦信號xH[n]=cos(wHn),就可得到振幅調制信號y[n]。 y[n]=A(1+m*xL[n])xH[n]=A(1+mcos(wLn))cos(wHn)其中m稱為調制指數,用來確保(1+m*xL[n])在所有可能的n的情況下m都是正數。以上式進行編程即可實現調制的目的。 Matlab程序 Fm=10;Fc=100;Fs=500;k=0:199;t=k/Fs;x=sin(2*pi*Fm*t);y=x.*cos(2*pi*Fc*t);X=fft(x,256);Y=fft(y,256);subplot(2,2,1);plot(x); xlabel('t(s)');ylabel('x');title('原信號'); subplot(2,2,2);plot(X); plot([-128:127],fftshift(abs(X)));xlabel('w');ylabel('X(jw)');title('原信號頻譜'); subplot(2,2,3);plot(y);xlabel('t(s)');ylabel('y');title('調制信號');subplot(2,2,4); plot(Y);plot([-128:127],fftshift(abs(Y)));xlabel('w');ylabel('Y(jw)');title('調制信號頻譜'); (3)卷積的計算 用MATLAB語言編程可實現信號卷積運算。卷積是數字信號處理中非常重要的一個運算,用卷積可以計算一個序列通過離散系統后的響應信息。如可以編程實現9點對7點(序列長度可以自己設定)的序列卷積運算。 Matlab程序 x=[0 0.5 1 1.5 0];nx=0:4;h=[1 1 1 0 0];nh=0:4;[y,ny]=conv_m(x,nx,h,nh);subplot(2,2,1);stem(nx,x);title('序列x');xlabel('n');ylabel('x(n)');subplot(2,2,2);stem(nh,h);title('序列h');xlabel('n');ylabel('h(n)');subplot(2,2,3);stem(ny,y);title('');xlabel('n');ylabel('y(n)'); conv_m函數程序 function[y,ny]=conv_m(x,nx,h,nh)%信號處理的卷積程序 %[y,ny]=conv_m(x,nx,h,nh)%y=卷積結果 %ny=y的基底(support);%nx=x的基底;%h=基底nh上的第二個信號 %nh=h的基底 nyb=nx(1)+nh(1);nye=nx(length(x))+nh(length(h));ny=[nyb:nye];y=conv(x,h);end 兩 序 列 卷 積 (4)序列的離散傅里葉變換,Z變換及信號頻域特性 ? 用MATLAB語言編程實現信號離散傅里葉的正反變換。Matlab程序 xn=[1,1,1,1];N=4;k=dft(xn,N)' Xk=[4,0,0,0];N=4;Xk=idft(xn,N)' xn=[1,1,1,1];N=length(xn);n=0:N-1;k=0:N-1;Xk=xn*exp(-j*2*pi/N).^(n'*k);x=(Xk*exp(j*2*pi/N).^(n'*k))/N;subplot(1,2,2);stem(k,abs(Xk));grid on;title('|X(k)|');axis([-1,N,1.1*min(abs(Xk)),1.1*max(abs(Xk))]);subplot(1,2,1);stem(n,xn);grid;title('x(n)');axis([-1,N,1.1*min(xn),1.1*max(xn)]); dft函數程序 function[Xk]=dft(xn,N)n=[0:1:N-1];k=n;WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^nk;Xk=xn*WNnk;end idft函數程序 function[Xk]=idft(xn,N)n=[0:1:N-1];k=n;WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^(-nk);Xk=xn*WNnk/N; end ? 用MATLAB語言編程實現信號的圓周移位、圓周卷積、驗證DFT的圓周時移、圓周卷積性質和圓周卷積與線性卷積的關系。 圓周移位 Matlab程序 n=[0:10];M=6;N=11;x=10*0.8.^n;y=cirshift(x,M,N);subplot(2,1,1);stem(n,x); title('?-DòáD2¨D?');xlabel('n');ylabel('x(n)');subplot(2,1,2);stem(n,y); title('?2?üò???DòáD2¨D?');xlabel('n');ylabel('y(n)'); sigmod函數程序 function[ m ]= sigmod(n,N);m=rem(n,N);m=m+N;m=rem(m,N);end cirshift函數程序 function[ y ]= cirshift(x,m,N);if length(x)>N error('N must be greater than length(x)');end x=[x zeros(1,N-length(x))];n=[0:N-1];n=sigmod(n-m,N);y=x(n+1);end 圓周卷積 Matlab程序 x1=[1 2 2];n1=[0:2];x2=[1 2 3 4];n2=[0:3];disp('N=5');n3=[0:4];N=5;y=circonvt(x1,x2,N)subplot(3,1,1);stem(n1,x1);title('x1');xlabel('n1');ylabel('x1(n)');subplot(3,1,2);stem(n2,x2);title('x2');xlabel('n2');ylabel('x2(n)');subplot(3,1,3);stem(n3,y);title('圓周卷積');xlabel('n3');ylabel('y(n)'); circonvt函數程序 function [y] = circonvt(x1,x2,N);if length(x1)>N error('Length(x1)is not great than N');end if length(x2)>N error('Length(x2)is not great than N');end x1=[x1, zeros(1,N-length(x1))];x2=[x2, zeros(1,N-length(x2))];m=[0:N-1];x2=x2(mod(-m,N)+1);H=zeros(N,N);for n=1:N;H(n,:)=cirshift(x2,n-1,N);end y=x1*H';end ? 驗證一個實周期序列奇偶部分的DFT與此序列本身的DFT之間的關系。Matlab程序 function[xe,xo,m]=evenodd(x,n)if any(imag(x)~=0)error end m=-fliplr(n);m1=min([m,n]);m2=max([m,n]);m=m1:m2; nm=n(1)-m(1);n1=1:length(n);x1=zeros(1,length(m));x1(n1+nm)=x;x=x1;xe=0.5*(x+fliplr(x));xo=0.5*(x-fliplr(x));n=[0:10];x=stepseq(0,0,10)-stepseq(10,0,10);[xe,xo,m]=evenodd(x,n); subplot(2,2,2);stem(m,xe);title('偶部');xlabel('n');ylabel('xe(n)');subplot(2,2,4);stem(m,xo);title('奇部');xlabel('n');ylabel('xo(n)'); ? 用MATLAB語言編程實現信號的Z變換及其反變換、Z變換的零極點分布。 a=[1 1-6];b=[0 5 0]; [r,p,k]=residuez(b,a);subplot(121);zplane(b,a); title('零極點分布圖');[H,w]=freqz(b,a,100);magH=abs(H);phaH=angle(H);figure(2) subplot(222);plot(w/pi,magH);grid xlabel('frequency in pi units');title('magnitude part'); subplot(223),plot(w/pi,phaH/pi);grid xlabel('frequency in pi units');title('Angle part'); 五、實驗擴展思考 ① 編程產生方波信號序列和鋸齒波信號序列。 x=[0:1/256:8];y1=square(pi*x); subplot(2,1,1);plot(x,y1);axis([0,8,-2,2]);title('方波');xlabel('x');ylabel('y1');grid on;y2=sawtooth(pi*x);subplot(2,1,2);plot(x,y2);title('鋸齒波');xlabel('x');ylabel('y2');grid on; ② 實驗中所產生的正弦序列的頻率是多少?怎樣才能改變它?分別是哪些參數控制該序列的相位、振幅和周期? 正弦序x[n=]Asin(w0n+Φ)頻率f=w0/2pi通過改變w0改變頻率f;Φ控制序列相位,A控制序列振幅,w0控制序列周期。 ③ 編程實現序列長度為N的L點的正反離散傅里葉變換,并分析討論所得出的結果,其中L≧N,如L=8,N=6。 function[Xk]=dft(xn,N)n=[0:1:8-1];k=n;WN=exp(-1j*2*pi/N);nk=n'*k;WNnk=WN.^nk;Xk=xn*WNnk; function[Xk]=idft(xn,N)n=[0:1:8-1];k=n;WN=exp(-1j*2*pi/N);nk=n'*k;WNnk=WN.^(-nk);Xk=xn*WNnk/N; ④ 由實驗說明離散傅里葉變換的對稱關系,說明序列的時域和頻域的關聯特性。 離散傅里葉變換具有共軛對稱性 (1)復共軛序列的DFT。設x*(n)為x(n)的復共軛序列,長度為N,X(k)=DFT[x(n)],則DFT[x*(n)]=X*(N-K),0<=k<=N-1(2)DFT的共軛對稱性。 定義圓周共軛對稱分量xep(n)和圓周共軛反對稱分量xop(n)xep(n)=1/2[x(n)+x*(N-n)],xop(n)=1/2[x(n)-x*(N-n)]則 DFT[xep(n)]=Re[X(k)], DFT[xop(n)]=jIm[X(k)] 序列的時域和頻域的關聯特性(1)時域卷積對應頻域相乘 設f[x(n)]=X(ejw),f[h(n)]=H(ejw),y(n)=x(n)*h(n), 則Y(e^jw)=1/2pi[X(e^jw)*H(e^jw)](2)時域相乘對應于1/2*pi的頻域卷積 設f[x(n)]=X(e^jw),f[h(n)]=H(e^jw),y(n)=x(n)h(n),則Y(e^jw)=1/2*pi[X(e^jw)*H(e^jw)] ? 六、實驗報告要求 1、實驗中的主要結論:圓周卷積與線性卷積之間的關系。 設圓周卷積y(n)=∑x1(m)x2(n-m)LRL(n),線性卷積y1(n)=x1(n)*x2(n),則y(n)=[∑y1(n+rL)]Rl(n),及當L>=N1+N2-1,y(n)=y1(n)。 2、通過編寫程序,讓我更熟練的使用MATLAB,能更好的理解書本所學的內容 3、心得體會:在使用matlab軟件定義函數時,必須對函數的含義理解清楚,要不然很容易定義函數出現錯誤。其次要對matlab自帶函數的含義用法理解清楚。這次實驗我最大的收獲就是對離散時間序列的理論基礎的概念有了一個很好的復習和更深刻的認識。遇到最大的問題就是定義函數時考慮不夠全面。但是我相信隨著后面實驗的進行,我能將matlab這個工具與課本的理論基礎知識完美的結合起來。??第三篇:實驗二離散時間信號分析
第四篇:實驗二語音信號分析與處理2010
第五篇:武漢工程大學matlab實驗二離散時間信號的分析實驗