孫慧萍,秦 坤,李 靜
( 1.山西大同大學(xué)物理與電子科學(xué)學(xué)院,山西大同037009;2.天津工業(yè)大學(xué)電子與信息工程學(xué)院,天津300387)
高校教育一般分為理工、文史、醫(yī)學(xué)等等。MATLAB作為高校工科生的必學(xué)課,在當(dāng)今的高等教育中起著非常重要的作用。隨著計(jì)算機(jī)在人們?nèi)粘I?、學(xué)習(xí)、娛樂(lè)以及研究中的應(yīng)用越來(lái)越普遍,計(jì)算機(jī)語(yǔ)言也就應(yīng)運(yùn)而生。本文主要研究了MATLAB 中的Simulink 組件、應(yīng)用以及傅里葉變換MATLAB仿真。
對(duì)于高校中的工科類學(xué)生來(lái)說(shuō),經(jīng)常會(huì)用很多軟件進(jìn)行大量的仿真實(shí)驗(yàn)。MATLAB 軟件是其中應(yīng)用很廣泛的軟件之一,它可以幫助大家學(xué)習(xí)很多知識(shí)理論[1]。Simulink 是MATLAB 中最重要的組件之一,它可以實(shí)現(xiàn)建模和仿真。人們應(yīng)用MATLAB來(lái)編寫(xiě)程序,程序一般都非常長(zhǎng)。而Simulink的操作則是更為簡(jiǎn)單的,它只需要通過(guò)鼠標(biāo)拖動(dòng)Simulink 工具箱中已有的程序,并將其連接就可以實(shí)現(xiàn)信號(hào)的輸出,結(jié)果清晰易懂[2-3]。例如,利用Simulink 輸出正弦信號(hào)。首先,在Simulink 的工具庫(kù)中拖出正弦信號(hào)與示波器如圖1所示:
圖1 模型圖
然后,直接用鼠標(biāo)拖拽箭頭將兩個(gè)器件連接起來(lái),運(yùn)行之后,雙擊示波器即可以出現(xiàn)波形,運(yùn)行結(jié)果如圖2所示:
圖2 運(yùn)行結(jié)果
圖2 是最為簡(jiǎn)單的連續(xù)正弦信號(hào)的仿真結(jié)果。但是,Simulink并不能對(duì)離散信號(hào)進(jìn)行仿真。
Simulink的應(yīng)用很多,還可以用來(lái)創(chuàng)建系統(tǒng),對(duì)系統(tǒng)所對(duì)應(yīng)的微分方程進(jìn)行求解,并繪制其波形[4-5]。例如:對(duì)微分方程d2y(t)/dt2+dy(t)/dt+y(t)=u(t)進(jìn)行求解的模型圖如圖3所示:
圖3 模型圖
當(dāng)u(t)等于108時(shí),仿真結(jié)果如圖4、圖5所示:
圖4 仿真結(jié)果
圖5 仿真結(jié)果
通過(guò)上面的仿真,可以明顯的看出利用Simulink 這一組件很容易就可以仿真出《信號(hào)與系統(tǒng)》這門課程中的微分方程。這樣可以通過(guò)Simulink這個(gè)組件來(lái)幫助學(xué)習(xí)類似《信號(hào)與系統(tǒng)》這門課程的課程??梢?jiàn),Simulink對(duì)于人們的學(xué)習(xí)是非常有幫助的。
所以,當(dāng)在學(xué)習(xí)類似《信號(hào)與系統(tǒng)》這門課程時(shí),可以最大限度地利用MATLAB 這一軟件幫助學(xué)習(xí)。MATLAB 中還有許多其他組件,都可以在一定程度上幫助人們對(duì)于系統(tǒng)進(jìn)行理解。所以,MATLAB 在高校理工科的教學(xué)過(guò)程中起到了巨大的作用。
在日常生活中,常常提到的信號(hào)包括模擬信號(hào)、離散信號(hào)。一般用x(t)來(lái)表示模擬信號(hào),變量t代表的是時(shí)間。離散信號(hào)用x(n)表示,其中變量n為整數(shù),并代表時(shí)間的離散時(shí)刻(離散時(shí)間信號(hào))。離散信號(hào)可以表述為:
通常在MATLAB 中,用向量x來(lái)表示一個(gè)長(zhǎng)度有限的序列。但是用一個(gè)向量來(lái)表示序列的時(shí)候,就沒(méi)有包含基準(zhǔn)采樣位置的信息。因此,要完全地表示x(n)就要用x和n兩個(gè)向量。序列x(n)={2,1,-1,5,1,4,3,7}, 在MATLAB 中就表示為下面的式子:
因?yàn)閮?nèi)存是有限的,所以MATLAB 無(wú)法表示無(wú)限序列。
傅里葉變換是離散時(shí)間系統(tǒng)的許多變換域方法中的一種。利用MATLAB 軟件對(duì)離散傅里葉變換進(jìn)行仿真,結(jié)果如下:
例如:計(jì)算離散傅里葉
解:設(shè)有限序列xn(n)的長(zhǎng)度為Nx,則按定義,求其N點(diǎn)傅里葉變換Xk(k)的程序?yàn)?/p>
clear,
xn=input('x=');Nx=
length(xn);N=Nx %取N為x的長(zhǎng)度
tic,n=[0:1:N-1];k=[0:1:N-1]; %設(shè)定 n 和 k 的行向量
WN=exp(-j*2*pi/N); %WN為因子
nk=n'*k;%產(chǎn)生一個(gè)含nk值的N*N維矩陣
WNnk=WN.^nk; %換算矩陣
Xk=xn*WNnk;toc
%DFT系數(shù)向量,離散傅里葉變換的結(jié)果
plot(abs(Xk)),grid %繪制幅頻特性圖
當(dāng)N 非常大時(shí),運(yùn)算速度比較低。這時(shí)可直接調(diào)用fft(快速離散傅里葉變換的函數(shù)),其調(diào)用式格式為X=fft(x,N)。
其中:x 是輸入的時(shí)間序列,N 是傅里葉變換的點(diǎn)數(shù)。若省略N,則自動(dòng)把x 的長(zhǎng)度作為N。當(dāng)N 取2的冪時(shí),變換速度最快,要提高fft 函數(shù)的運(yùn)行速度,程序應(yīng)編寫(xiě)為:
xn=input('x=');Nx=length(xn)
%取N為大于Nx而接近于Nx的2的冪
N=pow2(nextpow2(Nx));
tic,X=fft(xn,N);toc
Nx<N, x長(zhǎng)度不足N的部分,會(huì)自動(dòng)補(bǔ)0。
輸入 x=sin(0.1*[1:700])+randn(1,700);
即最后程序?yàn)椋?/p>
clear,
xn=input('x=');Nx=length(xn)
%取N為大于Nx而接近于Nx的2的冪
N=pow2(nextpow2(Nx));
tic,X=fft(xn,N);toc
plot(abs(X)),grid
仿真結(jié)果如圖6所示:
圖6 信號(hào)的fft的振幅頻率特性
圖6為利用快速傅里葉變換對(duì)信號(hào)進(jìn)行仿真的振幅頻率特性。圖中橫坐標(biāo)為頻率,縱坐標(biāo)為振幅,兩個(gè)較高的脈沖為有效信號(hào),其余為噪聲。整個(gè)頻譜圖大體上為對(duì)稱圖形,并以Nyquist 頻率為對(duì)稱軸。根據(jù)該頻譜圖可以很好地區(qū)分有效信號(hào)、噪聲。
本文先簡(jiǎn)單介紹了MATLAB 中的Simulink 組件,并以正弦信號(hào)為例,介紹了其仿真過(guò)程,最后用MATLAB 仿真離散傅立葉變換,結(jié)果很理想,為以后的研究奠定了一定的基礎(chǔ)。