《Matlab App Designer設(shè)計(jì)入門及實(shí)戰(zhàn)》課件 第10章 基于MATLAB App Designer的數(shù)字信號(hào)處理系統(tǒng)_第1頁(yè)
《Matlab App Designer設(shè)計(jì)入門及實(shí)戰(zhàn)》課件 第10章 基于MATLAB App Designer的數(shù)字信號(hào)處理系統(tǒng)_第2頁(yè)
《Matlab App Designer設(shè)計(jì)入門及實(shí)戰(zhàn)》課件 第10章 基于MATLAB App Designer的數(shù)字信號(hào)處理系統(tǒng)_第3頁(yè)
《Matlab App Designer設(shè)計(jì)入門及實(shí)戰(zhàn)》課件 第10章 基于MATLAB App Designer的數(shù)字信號(hào)處理系統(tǒng)_第4頁(yè)
《Matlab App Designer設(shè)計(jì)入門及實(shí)戰(zhàn)》課件 第10章 基于MATLAB App Designer的數(shù)字信號(hào)處理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩99頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第10章基于MATLABAppDesigner的數(shù)字信號(hào)處理系統(tǒng)本章要點(diǎn)本章首先介紹MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用,包括信號(hào)的產(chǎn)生、序列的基本運(yùn)算、離散傅里葉變換、IIR數(shù)字濾波器和FIR數(shù)字濾波器,然后設(shè)計(jì)并實(shí)現(xiàn)基于MATLABAppDesigner的數(shù)字信號(hào)處理系統(tǒng),主要包括信號(hào)發(fā)生器界面、序列基本運(yùn)算界面、離散傅里葉變換界面、IIR數(shù)字濾波器界面和FIR數(shù)字濾波器界面。

本章要點(diǎn):⑴數(shù)字信號(hào)處理的基本應(yīng)用。⑵數(shù)字信號(hào)處理總界面設(shè)計(jì)。⑶信號(hào)發(fā)生器界面設(shè)計(jì)。⑷序列基本運(yùn)算界面設(shè)計(jì)。⑸離散傅里葉變換設(shè)計(jì)。⑹IIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)。⑺FIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)。

學(xué)習(xí)目標(biāo):⑴了解數(shù)字信號(hào)處理的基本方法和原理。⑵掌握基本信號(hào)的產(chǎn)生方法。⑶掌握序列相加相乘、序列平移、序列折疊和卷積運(yùn)算的函數(shù)。⑷掌握離散傅里葉變換函數(shù)。⑸掌握基于MATLABAppDesigner的數(shù)字濾波器設(shè)計(jì)。10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.1信號(hào)的產(chǎn)生

數(shù)字信號(hào)處理是以數(shù)字運(yùn)算方法實(shí)現(xiàn)信號(hào)變換、濾波、檢測(cè)、估值、調(diào)制解調(diào)以及快速算法等處理的一門學(xué)科。由于MATLAB強(qiáng)大的圖形處理功能,為實(shí)現(xiàn)信號(hào)的可視化提供了強(qiáng)有力的工具,可以實(shí)現(xiàn)利用MATLAB的繪圖命令繪制出直觀的信號(hào)波形。

利用MATLAB軟件的信號(hào)處理工具箱(SignalProcessingToolbox)中的專用函數(shù)產(chǎn)生信號(hào)并繪出波形。在MATLAB中,函數(shù)square用于產(chǎn)生方波,其調(diào)用格式為:x=quare(t);

%生成周期為2π的方波x=quare(x,duty);

%生成占空比為duty的方波在MATLAB中,函數(shù)sawtooth用于產(chǎn)生三角波或鋸齒波,其調(diào)用格式為:x=sawtooth(t);

%生成鋸齒波x=sawtooth(x,xmax);%生成修正三角波,xmax設(shè)置為0.5時(shí),生成標(biāo)準(zhǔn)三角波10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.1信號(hào)的產(chǎn)生【例10-1】分別產(chǎn)生正弦波、余弦波、Sinc函數(shù)、Diric函數(shù)、矩形波、三角波和鋸齒波信號(hào)波形。輸入程序命令如下:x=0:0.01:6*pi;%正弦信號(hào)波形y1=sin(x);subplot(2,3,1);plot(x,y1,'linewidth',1,'color','m');title('正弦信號(hào)波形');%余弦信號(hào)波形y2=cos(x);subplot(2,3,2);plot(x,y2,'linewidth',1,'color','m');title('余弦信號(hào)波形');%sinc函數(shù)y3=sinc(x);subplot(2,3,3);plot(x,y3,'linewidth',1,'color','m');title('sinc函數(shù)');%方波y4=square(x,50);subplot(2,3,4);plot(x,y4,'linewidth',1,'color','b');title('方波');10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.1信號(hào)的產(chǎn)生%鋸齒波T=10*(1/50);fs=1000;t=0:1/fs:T-1/fs;y5=sawtooth(pi*30*t);subplot(2,3,5);plot(t,y5,'linewidth',1,'color','b');title('鋸齒波');%三角波y6=sawtooth(pi*30*t,1/2);subplot(2,3,6);plot(t,y6,'linewidth',1,'color','b');title('三角波');10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.1信號(hào)的產(chǎn)生程序運(yùn)行結(jié)果,如圖10-1所示。圖10-1

信號(hào)的產(chǎn)生10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.1信號(hào)的產(chǎn)生在MATLAB中,用函數(shù)stem繪制離散序列數(shù)據(jù),其調(diào)用格式為: stem(Y)當(dāng)Y為向量時(shí),x軸的刻度范圍是從1至length(Y),當(dāng)Y為矩陣時(shí),則根據(jù)相同的x值繪制行中的所有元素。 stem(X,Y)當(dāng)X和Y都是向量時(shí),則根據(jù)X中的對(duì)應(yīng)項(xiàng)繪制Y中的各項(xiàng);當(dāng)X是向量時(shí),Y是矩陣,則根據(jù)X指定的值集繪制Y的每列;當(dāng)X和Y都是矩陣時(shí),則根據(jù)X的對(duì)應(yīng)列繪制Y的列。10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.1信號(hào)的產(chǎn)生【例10-2】利用stem函數(shù)不同的調(diào)用方式,分別繪制不同情況下的序列。輸入程序命令如下:clear;clc;%繪制單數(shù)據(jù)序列figurey1=-2*pi:0.2:2*pi;subplot(2,3,1);stem(y1);title("在2π到-2π之間,繪制間隔為0.1的序列");x2=linspace(0,4*pi,50);y2=sin(x2);subplot(2,3,2);stem(y2);title("單數(shù)據(jù)序列");10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.1信號(hào)的產(chǎn)生%繪制多個(gè)數(shù)據(jù)系列x3=linspace(0,2*pi,50)';y3=[2*cos(x3),0.5*sin(x3)];subplot(2,3,3);stem(y3);title("繪制多個(gè)數(shù)據(jù)系列");%指定范圍內(nèi)繪制單序列x4=linspace(pi,3*pi,60)';y4=cos(x4);subplot(2,3,4);stem(x4,y4);title("指定范圍內(nèi)繪制單序列");%指定范圍繪制多數(shù)據(jù)x5=linspace(0,2*pi,40)';y5=[sinc(x5),sin(x5)];10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.1信號(hào)的產(chǎn)生subplot(2,3,5);stem(x5,y5);title("指定范圍繪制多數(shù)據(jù)");%在x值集處繪制多個(gè)序列x61=linspace(0,2*pi,50)';x62=linspace(pi,3*pi,50)';x6=[x61,x62];y6=[0.2*cos(2*x61),sinc(x62)];subplot(2,3,6);stem(x6,y6);title("在x值集繪制多個(gè)序列");10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.1信號(hào)的產(chǎn)生程序運(yùn)行結(jié)果,如圖10-2所示。圖10-2

函數(shù)stem的使用10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.2序列的基本運(yùn)算序列的基本運(yùn)算,包括序列的移位、折疊、序列相加、序列相乘和序列的卷積和等運(yùn)算。1.序列的移位和折疊【例10-3】實(shí)現(xiàn)給定序列的時(shí)移和折疊。輸入程序命令如下:clc;clear;n=[01234];x=[23456];subplot(2,2,1);stem(n,x,"LineWidth",1);axis([-4808]);title('原序列');n1=n+4;y1=x;%序列右移subplot(2,2,2);stem(n1,y1,"LineWidth",1);10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.2序列的基本運(yùn)算axis([-4808]);title('右移4個(gè)單位后序列');n2=n-3;y2=x;%序列左移subplot(2,2,3);stem(n2,y2,"LineWidth",1);axis([-4808]);title('左移3個(gè)單位后序列');y3=fliplr(x);n3=-max(n):-min(n);%序列翻轉(zhuǎn)subplot(2,2,4);stem(n3,y3,"LineWidth",1);axis([-4808]);title('折疊后序列');10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.2序列的基本運(yùn)算程序運(yùn)行結(jié)果,如圖10-3所示。圖10-3

序列的時(shí)移和折疊結(jié)構(gòu)10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.2序列的基本運(yùn)算2.序列的相加和相乘【例10-4】實(shí)現(xiàn)兩個(gè)有限長(zhǎng)序列的相加和相乘運(yùn)算。輸入程序命令如下:clc;clear;x1=[1,3,5,7,6,4,2,1];ns1=-3;%給定x1和它的起始點(diǎn)位置ns1x2=[4,0,2,1,-1,3];ns2=1;nf1=ns1+length(x1)-1;%求出x1的終點(diǎn)位置nf1nf2=ns2+length(x2)-1;n1=ns1:nf1;n2=ns2:nf2;%定義n1和n2的范圍n=min(ns1,ns2):max(nf1,nf2);y1=zeros(1,length(n));%y向量初始化為零y2=y1;y1(find((n>=ns1)&(n<=nf1)==1))=x1;y2(find((n>=ns2)&(n<=nf2)==1))=x2;10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.2序列的基本運(yùn)算yj=y1+y2;%序列的相加yc=y1.*y2;%序列的相乘subplot(2,2,1),stem(n1,x1,"LineWidth",1,'color','b'),title('序列x1(n)');subplot(2,2,2),stem(n2,x2,"LineWidth",1,'color','r'),title('序列x2(n)');subplot(2,2,3),stem(n,yj,"LineWidth",1,'color','m'),title('相和后序列');subplot(2,2,4),stem(n,yc,"LineWidth",1,'color','g'),title('相乘后序列');10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.2序列的基本運(yùn)算程序運(yùn)行結(jié)果,如圖10-4所示。圖10-4

序列基本運(yùn)算結(jié)果10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.2序列的基本運(yùn)算3.序列的卷積和序列的卷積和就是將兩個(gè)離散序列中的數(shù),按照規(guī)則,兩兩相乘再相加的操作。在MATLAB中,用函數(shù)conv進(jìn)行卷積運(yùn)算,其調(diào)用格式為:w=conv(u,v)返回u和v的卷積運(yùn)算結(jié)果。10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.2序列的基本運(yùn)算【例10-5】實(shí)現(xiàn)兩個(gè)有限長(zhǎng)序列的卷積和運(yùn)算。輸入程序命令如下:clc;clear;nx=0:4;x=[124816];nh=0:4;h=[11111];nyb=nx(1)+nh(1);%卷積的起始點(diǎn)nye=nx(length(x))+nh(length(h));%卷積的結(jié)束點(diǎn)ny=nyb:nye;y=conv(x,h);%實(shí)現(xiàn)卷積和subplot(1,3,1);stem(nx,x,"LineWidth",0.6,'color','m');title('x(n)');subplot(1,3,2);stem(nh,h,"LineWidth",0.6,'color','m');title('h(n)');subplot(1,3,3);stem(ny,y,"LineWidth",0.6,'color','g');title('y(n)=x(n)*h(n)');10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.2序列的基本運(yùn)算程序運(yùn)行結(jié)果如圖10-5所示。圖10-5

卷積和運(yùn)行結(jié)果圖10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.3離散傅里葉變換離散傅里葉變換(DFT)是數(shù)字信號(hào)處理中非常有用的一種變換,其時(shí)域和頻域都離散化了,這樣使計(jì)算機(jī)對(duì)信號(hào)的時(shí)域、頻域都能進(jìn)行計(jì)算,并且DFT有多種快速算法,使得信號(hào)處理速度有非常大的提高。其中FFT就是DFT的快速算法。在MATLAB中提供了用快速算法計(jì)算離散傅里葉變換的函數(shù)fft,其調(diào)用格式為:X=fft(x)%計(jì)算N點(diǎn)的DFT,N為序列x[k]的長(zhǎng)度,即N=length(x)X=fft(xN)%計(jì)算序列x[k]的N點(diǎn)DFT;x=ifft(X)%計(jì)算N點(diǎn)的IDFT,N為序列x[m]的長(zhǎng)度;x=ifft(X,N)%計(jì)算序列x[m]的N點(diǎn)IDFT;10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.3離散傅里葉變換【例10-6】利用函數(shù)fft分別得到8點(diǎn)和16點(diǎn)傅里葉變換的幅頻特性圖和相頻特性圖。輸入程序命令如下:xn=[11110111111];%輸入時(shí)域序列Xk16=fft(xn,16);%計(jì)算xn的16點(diǎn)fftXk8=fft(xn,8);%計(jì)算xn的8點(diǎn)fftk=0:7;wk=2*k/8;%計(jì)算8點(diǎn)DFT對(duì)應(yīng)的采樣點(diǎn)頻率subplot(2,2,1);stem(wk,abs(Xk8),'.');%繪制8點(diǎn)DFT的幅頻特性圖title('8點(diǎn)DFT的幅頻特性圖');xlabel('w/π');ylabel('幅度');subplot(2,2,2);stem(wk,angle(Xk8),'.');%繪制8點(diǎn)DFT的相頻特性圖line([0,2],[0,0]);title('8點(diǎn)DFT的相頻特性圖');10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.3離散傅里葉變換xlabel('w/π');ylabel('相位');k=0:15;wk=2*k/16;%計(jì)算16點(diǎn)DFT對(duì)應(yīng)的采樣點(diǎn)頻率subplot(2,2,3);stem(wk,abs(Xk16),'.');%繪制16點(diǎn)DFT的幅頻特性圖title('16點(diǎn)DFT的幅頻特性圖');xlabel('w/π');ylabel('幅度');subplot(2,2,4);stem(wk,angle(Xk16),'.');%繪制16點(diǎn)DFT的相頻特性圖title('16點(diǎn)DFT的相頻特性圖');xlabel('w/π');ylabel('相位');10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.3離散傅里葉變換程序運(yùn)行結(jié)果,如圖10-6所示。圖10-6

離散傅里葉變換運(yùn)行結(jié)果10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.3離散傅里葉變換在MATLAB中,函數(shù)ifft用于快速傅里葉逆變換,其調(diào)用格式為:X=ifft(Y)%計(jì)算Y的逆離散傅里葉變換。X與Y的大小相同。X=ifft(Y,n)%通過(guò)填充零以達(dá)到長(zhǎng)度n,返回Y的n點(diǎn)傅里葉逆變換。例如,輸入程序命令如下:clc;clear;t=1:1:8;xn=[11110111];%輸入時(shí)域序列subplot(1,2,1);stem(t,xn);title('原序列');Xk8=fft(xn,8);%計(jì)算xn的8點(diǎn)fftxifft=ifft(Xk8);%ifft計(jì)算傅里葉逆變換subplot(1,2,2);stem(xifft);title('ifft逆變換后序列');10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.3離散傅里葉變換程序運(yùn)行結(jié)果,如圖10-7所示。圖10-7

ifft快速傅里葉逆變換結(jié)果10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.4IIR數(shù)字濾波器在MATLAB工具箱中,提供了設(shè)計(jì)了濾波器(低通、高通、帶通和帶阻)的MATLAB設(shè)計(jì)函數(shù)。1.確定階次及截止頻率調(diào)用巴特沃斯、切比雪夫Ⅰ型、切比雪夫Ⅱ型和橢圓函數(shù)四種濾波器確定階次N及截止頻率wn的MATLAB如下:[N,wn]=buttord(wp,ws,Rp,Rs,As,'s')[N,wn]=cheb1ord(wp,ws,Rp,Rs,As,'s')[N,wn]=cheb2ord(wp,ws,Rp,Rs,As,'s')[N,wn]=ellipord(wp,ws,Rp,Rs,As,'s')其中wp為通帶截止頻率,ws為阻帶截止頻率,Rp為通帶波紋,As為阻帶最小衰減(巴特沃斯濾波器ws為3dB衰減處的截止頻率),'s'表示模擬濾波器。⑴低通濾波器時(shí),wp<ws;⑵高通濾波器時(shí),wp>ws;⑶帶通濾波器及帶阻濾波器時(shí),wp、ws和wn都是二元向量。wp=[wp1,wp2]ws=[ws1,ws2]當(dāng)為帶通濾波器時(shí),ws1<wp1<wp2<ws2,當(dāng)為帶阻濾波器時(shí),wp1<ws1<ws2<wp2。10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.4IIR數(shù)字濾波器2.模擬低通、高通、帶通和帶阻濾波器調(diào)用巴特沃斯、切比雪夫Ⅰ型、切比雪夫Ⅱ型和橢圓函數(shù)四種濾波器的模擬低通、高通、帶通、帶阻濾波器的MATLAB函數(shù)如下:[b,a]=butter(N,wn,'type','s')[b,a]=chebyl(N,Rp,wn,'type','s')[b,a]=cheby2(N,As,ws,'type','s')[b,a]=ellip(N,Rp,As,wn,'type','s')其中,type決定濾波器類型,type=high,設(shè)計(jì)高通IIR濾波器,type=stop,設(shè)計(jì)帶阻IIR濾波器。3.用freqz函數(shù)驗(yàn)證設(shè)計(jì)結(jié)果在MATLAB中,freqz函數(shù)用于返回?cái)?shù)字濾波器的頻率響應(yīng),其調(diào)用格式如下:[h,w]=freqz(b,a,n)%返回?cái)?shù)字濾波器的n點(diǎn)頻率響應(yīng)向量h和對(duì)應(yīng)的角頻率向量w[h,f]=freqz(b,a,n,fs)%可以對(duì)以速率fs采樣的信號(hào)進(jìn)行濾波。10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.4IIR數(shù)字濾波器【例10-7】設(shè)計(jì)IIR的巴特沃斯低通濾波器,其中Fs=2000Hz,F(xiàn)p1=300Hz,F(xiàn)s1=500Hz,Rp=2dB,Rs=20dB。輸入程序命令如下:clc;clear;close;fs=2000;Rp=2;Rs=20;fp1=300;fs1=500;wp1=2*fp1/fs;ws1=2*fs1/fs;Nn=128;[n,wn]=buttord(wp1,ws1,Rp,Rs);[b,a]=butter(n,wn);[h,f]=freqz(b,a,Nn,fs);figure(1);plot(f,abs(h));title('幅頻響應(yīng)圖');grid;figure(2);plot(f,angle(h));title('相頻響應(yīng)圖');grid;10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.4IIR數(shù)字濾波器程序運(yùn)行結(jié)果如圖10-8所示。圖10-8

巴特沃斯低通濾波器幅頻相應(yīng)和相頻相應(yīng)圖10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.5FIR數(shù)字濾波器MATLAB可以使用fir1函數(shù)設(shè)計(jì)低通、高通、低通、帶通等具有嚴(yán)格線性相位特性的濾波器。fir1函數(shù)的調(diào)用格式如下:b=fir1(n,wn);b=fir1(n,wn,'ftype');b=fir1(n,wn,'ftype',window)b=fir1(...,'noscale')n:濾波器的階數(shù),設(shè)計(jì)出的濾波器長(zhǎng)度為n+1;wn:濾波器的截止頻率。當(dāng)需要設(shè)計(jì)低通/高通濾波器,wn是單個(gè)值的,即截至頻率,ftype參數(shù)是low/high;;當(dāng)設(shè)計(jì)帶通/帶阻濾波器時(shí),wn由兩個(gè)數(shù)組成的向量[wn1wn2],ftype參數(shù)是bandpass/stop;noscale:指定歸一化濾波器的幅度;window:指定使用的窗函數(shù),默認(rèn)是漢明窗(Hamming),最常用的還有漢寧窗(Hanning)、布萊克曼窗(Blackman)、凱賽窗(Kaiser),在MATLAB中有相應(yīng)的子程序?qū)崿F(xiàn)各類窗函數(shù)。10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.5FIR數(shù)字濾波器wd=boxcor(N)%返回N點(diǎn)矩形窗列向量wd=triang(N)%返回N點(diǎn)三角形窗列向量wd=hanning(N)%返回N點(diǎn)漢寧窗列向量wd=hamming(N)%返回N點(diǎn)海明窗列向量wd=blackman(N)%返回N點(diǎn)布萊克曼窗列向量wd=kaiser(N,beta)%返回N點(diǎn)凱澤窗列向量,以beta(β)為參數(shù)輸出是中心值歸一化為1的窗函數(shù)序列wd,它是列向量,可利用stem([1:N]',wd)語(yǔ)句畫出窗函數(shù)序列的形狀。10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.5FIR數(shù)字濾波器【例10-8】當(dāng)N=45時(shí),畫出boxcar窗、hamming窗、blackman窗歸一化的幅度譜。輸入程序命令如下:clearall;N=45;wn1=boxcar(N);%boxcar窗wn2=hamming(N);%hamming窗wn3=blackman(N);%blackman窗[h1,w1]=freqz(wn1,1);%調(diào)用freqz函數(shù)求數(shù)字濾波器的幅頻響應(yīng)[h2,w2]=freqz(wn2,1);[h3,w3]=freqz(wn3,1);plot(w1/pi,20*log10(abs(h1)),'r-',w2/pi,20*log10(abs(h2)),'m--',w3/pi,20*log10(abs(h3)),'b-.');xlabel('歸一化頻率/\pi');ylabel('幅度/db');legend('boxcar窗','hamming窗','blackman窗');10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.5FIR數(shù)字濾波器程序運(yùn)行結(jié)果如圖10-9所示。圖10-9

boxcar窗、hamming窗和blackman窗幅度譜10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.5FIR數(shù)字濾波器【例10-9】設(shè)計(jì)FIR的Boxcar窗、Bartlett窗、Blackman窗、Hanning窗、Hamming窗和Kaiser窗的帶通濾波器,并且觀察其幅頻響應(yīng)。其中Fs=4000Hz,F(xiàn)p1=800Hz,F(xiàn)p2=1400Hz,F(xiàn)s1=700Hz,F(xiàn)s2=1600Hz,Rp=2dB,Rs=20dB,輸入程序命令如下:clc;clearallfs=4000;fp1=800;fp2=1400;fs1=700;fs2=1600;Rs=20;Rp=2;Nn=128;wp1=2*fp1/fs;wp2=2*fp2/fs;ws1=2*fs1/fs;ws2=2*fs2/fs;wp=[wp1,wp2];ws=[ws1,ws2];[n,Wn]=buttord(wp,ws,Rp,Rs);%帶通帶阻濾波器w1=boxcar(n+1);b1=fir1(n,Wn,w1);[h1,f1]=freqz(b1,1,Nn,fs);%Boxcar窗w2=bartlett(n+1);b2=fir1(n,Wn,w2);[h2,f2]=freqz(b2,1,Nn,fs);%Bartlett窗w3=blackman(n+1);b3=fir1(n,Wn,w3);[h3,f3]=freqz(b3,1,Nn,fs);%Blackman窗w4=hanning(n+1);b4=fir1(n,Wn,w4);[h4,f4]=freqz(b4,1,Nn,fs);%Hanning窗w5=hamming(n+1);b5=fir1(n,Wn,w5);[h5,f5]=freqz(b5,1,Nn,fs);%Hamming窗10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.5FIR數(shù)字濾波器w6=kaiser(n+1);b6=fir1(n,Wn,w6);[h6,f6]=freqz(b6,1,Nn,fs);%Kaiser窗subplot(2,3,1);plot(f1,20*log10(abs(h1)));title('Boxcar窗帶通濾波器');gridon;subplot(2,3,2);plot(f2,20*log10(abs(h2)));title('Bartlett窗帶通濾波器');gridon;subplot(2,3,3);plot(f3,20*log10(abs(h3)));title('Blackman窗帶通濾波器');gridon;subplot(2,3,4);plot(f4,20*log10(abs(h4)));title('Hanning窗帶通濾波器');gridon;subplot(2,3,5);plot(f5,20*log10(abs(h5)));title('Hamming窗帶通濾波器');gridon;subplot(2,3,6);plot(f6,20*log10(abs(h6)));title('Kaiser窗帶通濾波器');gridon;10.1MATLAB中數(shù)字信號(hào)處理的基本應(yīng)用10.1.5FIR數(shù)字濾波器程序運(yùn)行結(jié)果如圖10-10所示。圖10-10

FIR帶通濾波器10.2數(shù)字信號(hào)處理總界面的MATLABAppDesigner設(shè)計(jì)

數(shù)字信號(hào)處理系統(tǒng)共分為5個(gè)模塊,包括信號(hào)發(fā)生器、序列的基本運(yùn)算、離散傅里葉變換、IIR數(shù)字濾波器和FIR數(shù)字濾波器。數(shù)字信號(hào)處理總界面主要功能是可以跳轉(zhuǎn)到任意模塊,采用5個(gè)圖像模塊實(shí)現(xiàn)跳轉(zhuǎn),界面布局設(shè)計(jì)如圖10-11所示,菜單欄設(shè)置如圖10-12所示。圖10-11

數(shù)字信號(hào)處理界面布局

圖10-12

菜單欄設(shè)置10.2數(shù)字信號(hào)處理總界面的MATLABAppDesigner設(shè)計(jì)通過(guò)對(duì)菜單項(xiàng)和圖像組件添加回調(diào)函數(shù)的方式,實(shí)現(xiàn)界面的跳轉(zhuǎn)。例如打開(kāi)信號(hào)發(fā)生器MATLABAppDesigner界面的程序命令如下:runsingal%打開(kāi)命名為singal.mlapp的界面其余4個(gè)圖像組件添加回調(diào)函數(shù)方法同理。同時(shí)在各個(gè)子界面設(shè)置菜單項(xiàng),實(shí)現(xiàn)從子界面跳轉(zhuǎn)到主界面的功能也是同理。關(guān)閉當(dāng)前界面的程序命令如下:close(app.UIFigure);%關(guān)閉當(dāng)前界面10.3信號(hào)發(fā)生器界面的MATLABAppDesigner設(shè)計(jì)

基于MATLABAppDesigner的信號(hào)發(fā)生器由連續(xù)信號(hào)和離散信號(hào)兩部分組成。下面從界面布局設(shè)計(jì)、界面組件回調(diào)設(shè)計(jì)和界面運(yùn)行結(jié)果顯示三部分介紹。10.3.1信號(hào)發(fā)生器的界面布局設(shè)計(jì)

信號(hào)發(fā)生器界面布局,共需要添加1個(gè)選項(xiàng)卡組、1個(gè)標(biāo)簽、3個(gè)面板、6個(gè)編輯字段(數(shù)值)、1個(gè)下拉框、2個(gè)按鈕、1個(gè)單選按鈕組、3個(gè)滑塊和3個(gè)坐標(biāo)區(qū)組件,如圖10-13所示。圖10-13

信號(hào)發(fā)生器界面布局10.3信號(hào)發(fā)生器界面的MATLABAppDesigner設(shè)計(jì)10.3.2信號(hào)發(fā)生器的回調(diào)設(shè)計(jì)1.連續(xù)信號(hào)選項(xiàng)卡下output信號(hào)下拉框組件在連續(xù)信號(hào)選項(xiàng)卡下,當(dāng)選擇sin和sinc信號(hào)時(shí),dutycycle編輯字段組件不能執(zhí)行編輯操作;當(dāng)選擇square信號(hào)時(shí),phase編輯字段組件不能執(zhí)行編輯操作;當(dāng)選擇triangle和tooth信號(hào)時(shí),phase和dutycycle編輯字段組件不能執(zhí)行編輯操作。右擊單選按鈕組組件,選擇【回調(diào)】,選擇【轉(zhuǎn)至outputDropDownValueChanged回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:value=app.outputDropDown.Value;switchvaluecase'sin'app.dutycycleEditField.Enable='off';app.phaseEditField.Enable='on';case'sinc'app.dutycycleEditField.Enable='off';app.phaseEditField.Enable='on';case'square'app.phaseEditField.Enable='off';app.dutycycleEditField.Enable='on';10.3信號(hào)發(fā)生器界面的MATLABAppDesigner設(shè)計(jì)10.3.2信號(hào)發(fā)生器的回調(diào)設(shè)計(jì)case'triangle'app.phaseEditField.Enable='off';app.dutycycleEditField.Enable='off';case'tooth'app.phaseEditField.Enable='off';app.dutycycleEditField.Enable='off';end10.3信號(hào)發(fā)生器界面的MATLABAppDesigner設(shè)計(jì)10.3.2信號(hào)發(fā)生器的回調(diào)設(shè)計(jì)上述程序運(yùn)行效果如圖10-14所示。圖10-14

選擇不同信號(hào)的參數(shù)顯示效果10.3信號(hào)發(fā)生器界面的MATLABAppDesigner設(shè)計(jì)10.3.2信號(hào)發(fā)生器的回調(diào)設(shè)計(jì)2.連續(xù)信號(hào)選項(xiàng)卡下的【確定】按鈕選擇輸出信號(hào)類型,并根據(jù)需求輸入sample、frequenc、amplitude、offset、phase和dutycycle參數(shù),單擊【確定】按鈕,即可在左側(cè)坐標(biāo)區(qū)繪制出相應(yīng)圖形。右擊按鈕組件,選擇【回調(diào)】,選擇【添加ButtonPushedFcn回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:samp=app.sampleEditField.Value;frequency=app.frequencyEditField.Value;amplitude=app.amplitudeEditField.Value;offset=app.offsetEditField.Value;phase=app.phaseEditField.Value;duty=app.dutycycleEditField.Value;value=app.outputDropDown.Value;switchvaluecase'sin'10.3信號(hào)發(fā)生器界面的MATLABAppDesigner設(shè)計(jì)10.3.2信號(hào)發(fā)生器的回調(diào)設(shè)計(jì)t=0:(1/samp):1;y=offset+amplitude*sin(2*pi*frequency*t+phase*pi/180);plot(app.UIAxes,t,y);title(app.UIAxes,'sin');case'sinc't=0:(1/samp):1;y=offset+amplitude*sin(2*pi*frequency*t+phase*pi/180+eps)./(2*pi*frequency*t+......phase*pi/180+eps);plot(app.UIAxes,t,y);title(app.UIAxes,'sinc');case'square't=0:(1/samp):1;y=offset+amplitude*sign(duty/100/frequency-mod(t,1/frequency));plot(app.UIAxes,t,y);title(app.UIAxes,'square');10.3信號(hào)發(fā)生器界面的MATLABAppDesigner設(shè)計(jì)10.3.2信號(hào)發(fā)生器的回調(diào)設(shè)計(jì)case'triangle't=0:(1/samp):1;y=(4*amplitude*frequency*mod(t,1/frequency)-2*amplitude).*sign(mod(t,1/frequency)......-1/frequency/2)-amplitude+offset;plot(app.UIAxes,t,y);title(app.UIAxes,'triangle');case'tooth't=0:(1/samp):1;y=2*amplitude*frequency*mod(t,1/frequency)-amplitude+offset;plot(app.UIAxes,t,y);title(app.UIAxes,'tooth');end10.3信號(hào)發(fā)生器界面的MATLABAppDesigner設(shè)計(jì)10.3.2信號(hào)發(fā)生器的回調(diào)設(shè)計(jì)3.離散序列選項(xiàng)卡下的單選按鈕組當(dāng)選擇正弦波或sinc函數(shù)或指數(shù)函數(shù)時(shí),左側(cè)第1個(gè)坐標(biāo)區(qū)顯示相應(yīng)的連續(xù)信號(hào)波形。右擊單選按鈕組組件,選擇【回調(diào)】,選擇【轉(zhuǎn)至ButtonGroupSelectionChanged回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:selectedButton=app.ButtonGroup.SelectedObject;t=0:0.1:4*pi;switchselectedButton.Textcase'正弦波'y=sin(t);case'sinc函數(shù)'y=sinc(t);case'指數(shù)函數(shù)'y=exp(t);endplot(app.UIAxes_2,t,y);10.3信號(hào)發(fā)生器界面的MATLABAppDesigner設(shè)計(jì)10.3.2信號(hào)發(fā)生器的回調(diào)設(shè)計(jì)4.離散序列選項(xiàng)卡下【確定】按鈕在單選按鈕組組件選擇信號(hào),并拖動(dòng)滑動(dòng)條,選擇幅值、頻率和采樣點(diǎn)參數(shù),單擊【確定】按鈕,即可在左側(cè)第2個(gè)坐標(biāo)區(qū)顯示離散序列。右擊按鈕組件,選擇【回調(diào)】,選擇【添加Button_4PushedFcn回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:fs=1000;a=app.Slider_fuzhi.Value;f=app.Slider_pinlv.Value;n=app.Slider_caiyangdian.Value;t=0:1/fs:(n-1)/fs;switchapp.ButtonGroup.SelectedObject.Textcase'正弦波'y1=a*sin(2*pi*f*t);stem(app.UIAxes_3,t,y1);10.3信號(hào)發(fā)生器界面的MATLABAppDesigner設(shè)計(jì)10.3.2信號(hào)發(fā)生器的回調(diào)設(shè)計(jì)case'sinc函數(shù)'y1=a*sinc(2*pi*f*t);stem(app.UIAxes_3,t,y1);case'指數(shù)函數(shù)'y1=a*exp(2*pi*f*t);stem(app.UIAxes_3,t,y1);end10.3信號(hào)發(fā)生器界面的MATLABAppDesigner設(shè)計(jì)10.3.3信號(hào)發(fā)生器運(yùn)行結(jié)果顯示在連續(xù)信號(hào)選項(xiàng)卡下,當(dāng)分別選擇sinc、square或triangle信號(hào)時(shí),并輸入相應(yīng)參數(shù),單擊確定按鈕,運(yùn)行結(jié)果如圖10-15、圖10-16、圖10-17所示。圖10-15

sinc信號(hào)波形

圖10-16square信號(hào)波形10-17triangle信號(hào)波形10.3信號(hào)發(fā)生器界面的MATLABAppDesigner設(shè)計(jì)10.3.3信號(hào)發(fā)生器運(yùn)行結(jié)果顯示在離散序列選項(xiàng)卡下,當(dāng)分別選擇正弦波、sinc函數(shù)或指數(shù)函數(shù)時(shí),并拖動(dòng)滑塊選擇幅值、頻率和采樣點(diǎn)信號(hào),單擊確定按鈕,運(yùn)行結(jié)果如圖10-18~圖10-20所示。圖10-18

正弦序列信號(hào)

圖10-19sinc序列信號(hào)10-20指數(shù)序列信號(hào)10.4序列基本運(yùn)算界面的MATLABAppDesigner設(shè)計(jì)

基于MATLABAppDesigner的序列基本運(yùn)算由序列相加相乘移位、序列平移、序列折疊和卷積這四部分組成。下面從界面布局設(shè)計(jì)、界面組件回調(diào)設(shè)計(jì)和界面運(yùn)行結(jié)果顯示三部分介紹。10.4.1序列基本運(yùn)算的界面布局設(shè)計(jì)序列基本運(yùn)算界面布局,共需要添加1個(gè)選項(xiàng)卡組、4個(gè)面板、2個(gè)單選按鈕組、1個(gè)編輯字段(數(shù)值)、12個(gè)編輯字段(文本)、4個(gè)按鈕和10個(gè)坐標(biāo)區(qū)組件,如圖10-21、圖10-22、圖10-23、圖10-24所示。圖10-21

序列相加、相乘選項(xiàng)卡

圖10-22

序列平移選項(xiàng)卡10.4序列基本運(yùn)算界面的MATLABAppDesigner設(shè)計(jì)10.4.1序列基本運(yùn)算的界面布局設(shè)計(jì)圖10-23序列折疊選項(xiàng)卡圖10-24序列卷積和選項(xiàng)卡10.4序列基本運(yùn)算界面的MATLABAppDesigner設(shè)計(jì)10.4.2序列基本運(yùn)算的回調(diào)設(shè)計(jì)1.序列相加、相乘選項(xiàng)卡在單選按鈕組組件選擇相加或相乘運(yùn)算,并輸入序列x1和序列x2,單擊【確定】按鈕,即可在坐標(biāo)區(qū)顯示序列x1、序列x2和相加或相乘后的序列結(jié)果。右擊該選項(xiàng)卡下的【確定】按鈕組件,選擇【回調(diào)】,選擇【添加ButtonPushedFcn回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:n1=str2num(app.n1EditField.Value);x1=str2num(app.x1EditField.Value);n2=str2num(app.n2EditField.Value);x2=str2num(app.x2EditField.Value);stem(app.UIAxes,n1,x1,"LineWidth",1);title(app.UIAxes,'x1序列');stem(app.UIAxes_2,n2,x2,"LineWidth",1);title(app.UIAxes_2,'x2序列');n=min(min(n1),min(n2)):max(max(n1),max(n2));y1=zeros(1,length(n));y2=y1;10.4序列基本運(yùn)算界面的MATLABAppDesigner設(shè)計(jì)10.4.2序列基本運(yùn)算的回調(diào)設(shè)計(jì)y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;switchapp.ButtonGroup.SelectedObject.Textcase'序列相加'y=y1+y2;title(app.UIAxes_3,'相加后序列');case'序列相乘'y=y1.*y2;title(app.UIAxes_3,'相乘后序列');endstem(app.UIAxes_3,n,y,"LineWidth",1);10.4序列基本運(yùn)算界面的MATLABAppDesigner設(shè)計(jì)10.4.2序列基本運(yùn)算的回調(diào)設(shè)計(jì)2.序列平移選項(xiàng)卡輸入原序列,選擇左移或右移操作,并輸入移位單位個(gè)數(shù),單擊【確定】按鈕,即可在坐標(biāo)區(qū)顯示原序列和移位后的序列。右擊該選項(xiàng)卡下的【確定】按鈕組件,選擇【回調(diào)】,選擇【添加Button_7PushedFcn回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:n1=str2num(app.nEditField.Value);x1=str2num(app.xEditField.Value);switchapp.ButtonGroup_2.SelectedObject.Textcase'左移'a=-app.danwei_EditField.Value;case'右移'a=app.danwei_EditField.Value;endn=n1+a;y=x1;stem(app.UIAxes2,n1,x1,"LineWidth",1);title(app.UIAxes2,'x1序列');stem(app.UIAxes2_2,n,y,"LineWidth",1);title(app.UIAxes2_2,'移位后序列');10.4序列基本運(yùn)算界面的MATLABAppDesigner設(shè)計(jì)10.4.2序列基本運(yùn)算的回調(diào)設(shè)計(jì)3.序列折疊選項(xiàng)卡輸入原序列,并輸入移位單位個(gè)數(shù),單擊【折疊】按鈕,即可在坐標(biāo)區(qū)顯示原序列和按照n=0翻轉(zhuǎn)的序列。右擊該選項(xiàng)卡下的【折疊】按鈕組件,選擇【回調(diào)】,選擇【添加Button_8PushedFcn回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:n1=str2num(app.nzhedieEditField.Value);x1=str2num(app.xzhedieEditField.Value);stem(app.UIAxes2_3,n1,x1,"LineWidth",1);title(app.UIAxes2_3,'x1序列');stem(app.UIAxes2_4,-n1,x1,"LineWidth",1);title(app.UIAxes2_4,'折疊后序列');10.4序列基本運(yùn)算界面的MATLABAppDesigner設(shè)計(jì)10.4.2序列基本運(yùn)算的回調(diào)設(shè)計(jì)4.序列卷積和選項(xiàng)卡輸入序列x1和序列x2,單擊【確定】按鈕,即可在坐標(biāo)區(qū)顯示序列x1、序列x2和卷積和結(jié)果。右擊該選項(xiàng)卡下的【確定】按鈕組件,選擇【回調(diào)】,選擇【添加Button_9PushedFcn回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:xn1=str2num(app.xn1EditField.Value);n1=str2num(app.n1EditField_2.Value);hn2=str2num(app.hn2EditField.Value);n2=str2num(app.n2EditField_2.Value);nyb=n1(1)+n2(1);%卷積的起始點(diǎn)nye=n1(length(xn1))+n2(length(hn2));%卷積的結(jié)束點(diǎn)ny=nyb:nye;y=conv(xn1,hn2);%實(shí)現(xiàn)卷積和stem(app.UIAxes_4,n1,xn1,"LineWidth",0.6,'color','b');title(app.UIAxes_4,'x(n)');stem(app.UIAxes_5,n2,hn2,"LineWidth",0.6,'color','b');title(app.UIAxes_5,'h(n)');stem(app.UIAxes_6,ny,y,"LineWidth",0.6,'color','r');title(app.UIAxes_6,'y(n)=x(n)*h(n)');10.4序列基本運(yùn)算界面的MATLABAppDesigner設(shè)計(jì)10.4.3運(yùn)行結(jié)果顯示1.序列相加、相乘選項(xiàng)卡選擇序列相加,輸入x1=[23457],n1=[01234],x2=[-122-2-4-2],n2=[123456],單擊【確定】按鈕,運(yùn)行結(jié)果如圖10-25所示。圖10-25

序列相加運(yùn)行結(jié)果10.4序列基本運(yùn)算界面的MATLABAppDesigner設(shè)計(jì)10.4.3運(yùn)行結(jié)果顯示

選擇序列相乘,輸入x1=[120113],n1=[-2-10123],x2=[32-342],n2=[01234],單擊【確定】按鈕,運(yùn)行結(jié)果如圖10-26所示。圖10-26序列相乘結(jié)果10.4序列基本運(yùn)算界面的MATLABAppDesigner設(shè)計(jì)10.4.3運(yùn)行結(jié)果顯示2.序列平移選項(xiàng)卡輸入x=[-34562],n=[-10123],選擇左移平移方向,輸入平移3個(gè)單位,單擊【確定】按鈕,運(yùn)行結(jié)果如圖10-27所示。圖10-27序列左移結(jié)果10.4序列基本運(yùn)算界面的MATLABAppDesigner設(shè)計(jì)10.4.3運(yùn)行結(jié)果顯示輸入x=[123123],n=[123456],選擇右移平移方向,輸入平移5個(gè)單位,單擊【確定】按鈕,運(yùn)行結(jié)果如圖10-28所示。圖10-28右移序列結(jié)果10.4序列基本運(yùn)算界面的MATLABAppDesigner設(shè)計(jì)10.4.3運(yùn)行結(jié)果顯示3.序列折疊選項(xiàng)卡輸入x=[-3-2-1123],n=[-101234],單擊【折疊】按鈕,運(yùn)行結(jié)果如圖10-29所示。圖10-29序列折疊結(jié)果10.4序列基本運(yùn)算界面的MATLABAppDesigner設(shè)計(jì)10.4.3運(yùn)行結(jié)果顯示4.序列卷積和選項(xiàng)卡輸入x1=[12345],n1=[01234],x2=[12345],n2=[12345],單擊【確定】按鈕,運(yùn)行結(jié)果如圖10-30所示。圖10-30卷積和結(jié)果10.5離散傅里葉變換的MATLABAppDesigner設(shè)計(jì)

基于MATLABAppDesigner的離散傅里傅里葉變換設(shè)計(jì)與實(shí)現(xiàn),分為界面布局設(shè)計(jì)、界面組件回調(diào)設(shè)計(jì)和界面運(yùn)行結(jié)果顯示三部分完成。1.離散傅里葉變換界面布局離散傅里葉變換的界面設(shè)計(jì),共需要添加1個(gè)標(biāo)簽、3個(gè)面板、73個(gè)編輯字段(數(shù)值)、3個(gè)編輯字段(文本)、3個(gè)按鈕、和6個(gè)坐標(biāo)區(qū)組件,如圖10-31所示。圖10-31

離散傅里葉變換界面布局10.5離散傅里葉變換的MATLABAppDesigner設(shè)計(jì)

2.離散傅里葉變換的回調(diào)設(shè)計(jì)在序列1面板中,當(dāng)輸入信號(hào)函數(shù)和N的數(shù)值,單擊【確定】按鈕,即可顯示原序列和N點(diǎn)DFT結(jié)果。右擊按鈕組件,選擇【回調(diào)】,選擇【添加Button_1PushedFcn回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:N1=app.NDFTEditField_1.Value;n=0:N1-1;x1n=eval(app.xh_EditField_1.Value);X1k=fft(x1n,N1);stem(app.UIAxes_11,n,x1n,'.');title(app.UIAxes_11,'序列x1(n)');xlabel(app.UIAxes_11,'k');ylabel(app.UIAxes_11,'x1(n)');stem(app.UIAxes_12,n,abs(X1k),'.');title(app.UIAxes_12,strcat(num2str(N1),'點(diǎn)DFT[x1(n)]'));xlabel(app.UIAxes_12,'k');ylabel(app.UIAxes_12,'|X1(k)|');在序列2面板和面板3中的【確定】按鈕的回調(diào)函數(shù)同理。10.5離散傅里葉變換的MATLABAppDesigner設(shè)計(jì)3.運(yùn)行結(jié)果顯示在序列1面板,輸入信號(hào)函數(shù):exp(j*pi*n/8),16點(diǎn)DFT,單擊【確定】按鈕;在序列2面板,輸入信號(hào)函數(shù):sin(n),128點(diǎn)DFT,單擊【確定】按鈕;在序列3面板,輸入信號(hào)函數(shù):cos(n),8點(diǎn)DFT,單擊【確定】按鈕。運(yùn)行結(jié)果如圖10-32所示。圖10-32

運(yùn)行結(jié)果界面10.6基于MATLABAppDesigner的IIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)

基于MATLABAppDesigner的IIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn),分為界面布局設(shè)計(jì)、界面組件回調(diào)設(shè)計(jì)和界面運(yùn)行結(jié)果顯示三部分完成。10.6.1IIR數(shù)字濾波器的界面設(shè)計(jì)IIR數(shù)字濾波器的界面設(shè)計(jì),分為基本參數(shù)選擇和圖形顯示兩個(gè)區(qū)域,共需要添加1個(gè)標(biāo)簽、3個(gè)面板、7個(gè)編輯字段(數(shù)值)、1個(gè)編輯字段(文本)、2個(gè)下拉框、3個(gè)按鈕、和8個(gè)坐標(biāo)區(qū)組件,如圖10-33所示。圖10-33

IIR數(shù)字濾波器的界面布局效果10.6基于MATLABAppDesigner的IIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)10.6.2IIR數(shù)字濾波器的回調(diào)設(shè)計(jì)1.輸入信號(hào)參數(shù)面板的【確定】按鈕分別輸入信號(hào)時(shí)域表達(dá)式、采樣頻率和采樣點(diǎn)數(shù),單擊確定按鈕,即可在坐標(biāo)區(qū)顯示原信號(hào)波形、原信號(hào)幅頻特性和原信號(hào)相頻特性。右擊按鈕組件,選擇【回調(diào)】,選擇【添加xinhao_ButtonPushedFcn回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:globalstNFs%原信號(hào)波形Fs=app.fs_EditField.Value;%獲取采樣頻率N=app.N_EditField.Value;%獲取采樣點(diǎn)數(shù)t=0:1/Fs:(N-1)/Fs;s=eval(app.s_EditField.Value);%獲取信號(hào)時(shí)域表達(dá)式plot(app.yxh_UIAxes,t,s);xlabel(app.yxh_UIAxes,'t(s)');ylabel(app.yxh_UIAxes,'幅值');10.6基于MATLABAppDesigner的IIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)10.6.2IIR數(shù)字濾波器的回調(diào)設(shè)計(jì)%濾波前幅頻特性f=(0:N-1)*Fs/N;s_f=abs(fft(s,length(s))/(length(s)/2));%幅值plot(app.yxhf_UIAxes,f,s_f);xlabel(app.yxhf_UIAxes,'f(hz)');ylabel(app.yxhf_UIAxes,'幅值');%濾波前相頻特性s_x=angle(fft(s,length(s))/(length(s)/2));%相位plot(app.yxhx_UIAxes,f,s_x);xlabel(app.yxhx_UIAxes,'f(hz)');ylabel(app.yxhx_UIAxes,'相位');10.6基于MATLABAppDesigner的IIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)10.6.2IIR數(shù)字濾波器的回調(diào)設(shè)計(jì)上述程序運(yùn)行結(jié)果如圖10-34和圖10-35所示。圖10-34

輸入信號(hào)參數(shù)部分圖10-35

原信號(hào)波形顯示部分10.6基于MATLABAppDesigner的IIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)10.6.2IIR數(shù)字濾波器的回調(diào)設(shè)計(jì)2.濾波器性質(zhì)下拉框?yàn)V波器性質(zhì)下拉框有Lowpass、Highpass、Bandpass和Bandstop選項(xiàng),當(dāng)選擇Lowpass或Highpass選項(xiàng)時(shí),F(xiàn)p2和Fst2編輯字段組件不能執(zhí)行編輯操作。右擊下拉框組件,選擇【回調(diào)】,選擇【添加DropDown_3ValueChanged回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:value_type=app.DropDown_3.Value;switchvalue_typecase'Bandpass'app.Fp2EditField.Enable='on';app.Fst2EditField.Enable='on';case'Bandstop'app.Fp2EditField.Enable='on';app.Fst2EditField.Enable='on';case'Lowpass'app.Fp2EditField.Enable='off';app.Fst2EditField.Enable='off';case'Highpass'app.Fp2EditField.Enable='off';app.Fst2EditField.Enable='off';end10.6基于MATLABAppDesigner的IIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)10.6.2IIR數(shù)字濾波器的回調(diào)設(shè)計(jì)運(yùn)行上述程序,當(dāng)選擇Lowpass或Highpass選項(xiàng)時(shí),效果圖如圖10-36所示。當(dāng)選擇Bandpass和Bandstop選項(xiàng)時(shí),效果圖如圖10-37所示。圖10-36選擇Lowpass或Highpass選項(xiàng)時(shí)效果圖

圖10-37選擇Bandpass和Bandstop選項(xiàng)時(shí)效果10.6基于MATLABAppDesigner的IIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)10.6.2IIR數(shù)字濾波器的回調(diào)設(shè)計(jì)3.Fp1、Fp2、Fst1和Fst2編輯字段(數(shù)值)組件當(dāng)輸入Fp1、Fp2、Fst1和Fst2數(shù)值后,判斷歸一化頻率是否在[0,1]范圍內(nèi),若不在該范圍內(nèi),則彈出報(bào)錯(cuò)對(duì)話框。右擊Fp1編輯字段(數(shù)值)組件,選擇【回調(diào)】,選擇【添加Fp1EditFieldValueChanged回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:fs=app.FsEditField.Value;fp1=app.Fp1EditField.Value;wp1=2*fp1/fs;if(wp1>=1)errordlg('wp1=2*fp1/fs,歸一化頻率不在【0,1】范圍內(nèi),請(qǐng)輸入正確的參數(shù)','錯(cuò)誤信息')end10.6基于MATLABAppDesigner的IIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)10.6.2IIR數(shù)字濾波器的回調(diào)設(shè)計(jì)Fp2編輯字段(數(shù)值)組件回調(diào)函數(shù)程序如下:fs=app.FsEditField.Value;fp2=app.Fp2EditField.Value;wp2=2*fp2/fs;if(wp2>=1)errordlg('wp2=2*fp2/fs,歸一化頻率不在【0,1】范圍內(nèi),請(qǐng)輸入正確的參數(shù)','錯(cuò)誤信息')endFst1編輯字段(數(shù)值)組件回調(diào)函數(shù)程序如下:fs=app.FsEditField.Value;fs1=app.Fst1EditField.Value;ws1=2*fs1/fs;if(ws1>=1)errordlg('ws1=2*fs1/fs,歸一化頻率不在【0,1】范圍內(nèi),請(qǐng)輸入正確的參數(shù)','錯(cuò)誤信息')end10.6基于MATLABAppDesigner的IIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)10.6.2IIR數(shù)字濾波器的回調(diào)設(shè)計(jì)Fst2編輯字段(數(shù)值)組件回調(diào)函數(shù)程序如下:fs=app.FsEditField.Value;fs2=app.Fst2EditField.Value;ws2=2*fs2/fs;if(ws2>=1)errordlg('ws2=2*fs2/fs,歸一化頻率不在【0,1】范圍內(nèi),請(qǐng)輸入正確的參數(shù)','錯(cuò)誤信息')end運(yùn)行程序,當(dāng)判斷歸一化頻率是否在[0,1]范圍內(nèi)時(shí)候,彈出如圖10-38所示對(duì)話框。圖10-38

報(bào)錯(cuò)對(duì)話框效果10.6基于MATLABAppDesigner的IIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)10.6.2IIR數(shù)字濾波器的回調(diào)設(shè)計(jì)4.濾波器類型選擇的【確定】按鈕分別選擇濾波器類型和濾波器性質(zhì)后,并按需輸入Fs、Rp、Rs、Fp1、Fst1、Fp2和Fst2參數(shù)后,單擊確定,即可顯示濾波器幅頻特性、濾波器相頻特性、濾波后波形、濾波后波形幅頻特性和濾波后波形相頻特性。右擊按鈕組件,選擇【回調(diào)】,選擇【添加zong_ButtonPushedFcn回調(diào)】,界面自動(dòng)跳轉(zhuǎn)到代碼視圖,在光標(biāo)定位處,輸入程序命令如下:globalstnwnNnNFsNn=128;Rp=app.RpEditField.Value;Rs=app.RsEditField.Value;fs=app.FsEditField.Value;fp1=app.Fp1EditField.Value;fp2=app.Fp2EditField.Value;fs1=app.Fst1EditField.Value;fs2=app.Fst2EditField.Value;wp1=2*fp1/fs;wp2=2*fp2/fs;ws1=2*fs1/fs;ws2=2*fs2/fs;10.6基于MATLABAppDesigner的IIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)10.6.2IIR數(shù)字濾波器的回調(diào)設(shè)計(jì)wp=[wp1,wp2];ws=[ws1,ws2];switchapp.DropDown_2.Valuecase'巴特沃斯濾波器'if(strcmp(app.DropDown_3.Value,'Highpass')||strcmp(app.DropDown_3.Value,'Lowpass'))[n,wn]=buttord(wp1,ws1,Rp,Rs);elseif(strcmp(app.DropDown_3.Value,'Bandpass')||strcmp(app.DropDown_3.Value,'Bandstop'))[n,wn]=buttord(wp,ws,Rp,Rs);endendswitchapp.DropDown_3.Valuecase'Lowpass'[b,a]=butter(n,wn);[h,f]=freqz(b,a,Nn,fs);case'Highpass'[b,a]=butter(n,wn,'high');[h,f]=freqz(b,a,Nn,fs);10.6基于MATLABAppDesigner的IIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)10.6.2IIR數(shù)字濾波器的回調(diào)設(shè)計(jì)case'Bandpass'[b,a]=butter(n,wn);[h,f]=freqz(b,a,Nn,fs);case'Bandstop'[b,a]=butter(n,wn,'stop');[h,f]=freqz(b,a,Nn,fs);endcase'切比雪夫Ⅰ濾波器'if(strcmp(app.DropDown_3.Value,'Highpass')||strcmp(app.DropDown_3.Value,'Lowpass'))[n,wn]=cheb1ord(wp1,ws1,Rp,Rs);elseif(strcmp(app.DropDown_3.Value,'Bandpass')||strcmp(app.DropDown_3.Value,'Bandstop'))[n,wn]=cheb1ord(wp,ws,Rp,Rs);endendswitchapp.DropDown_3.Value

10.6基于MATLABAppDesigner的IIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)10.6.2IIR數(shù)字濾波器的回調(diào)設(shè)計(jì)case'Lowpass'[b,a]=cheby1(n,Rp,wn);[h,f]=freqz(b,a,Nn,fs);c

溫馨提示

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

評(píng)論

0/150

提交評(píng)論