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