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