第一篇:MATLAB實驗六《SIMULINK交互式仿真》
《計算機仿真及應(yīng)用》實驗教案
實驗六 SIMULINK交互式仿真
一、實驗?zāi)康?/p>
1、熟悉SIMULINK交互式仿真集成環(huán)境。
2、掌握連續(xù)時間系統(tǒng)建模的方法。
二、實驗主要儀器與設(shè)備
裝配有MATLAB7.6軟件的計算機
三、預(yù)習(xí)要求
做實驗前必須認(rèn)真復(fù)習(xí)第七章SIMULINK交互式仿真集成環(huán)境。
四、實驗內(nèi)容及實驗步驟
示的SIMULINK模塊庫瀏覽器。
《計算機仿真及應(yīng)用》實驗教案
圖7.2 SIMULINK模塊庫瀏覽器
4、開啟空白(新建)模型窗
單機Simulink模塊庫瀏覽器工具條上的圖標(biāo)“去的)。
5、從模塊庫復(fù)制所需模塊到空白(新建)模型窗(見圖7.3)
把連續(xù)模塊子庫中的積分器
”;或在選擇下拉菜單項{File:
New},引出如圖7.3所示的空白模型窗(注:窗中的模塊是后一個步驟復(fù)制進
《計算機仿真及應(yīng)用》實驗教案
7.3 制進庫模塊的新建模型窗
6、新建模型窗中的模型再復(fù)制
在該新建模型窗中,可以通過再復(fù)制,產(chǎn)生建模所需的2個積分模塊和2個增益 模塊。具體操作方法是:按住[Ctrl]鍵,用鼠標(biāo)“點亮并拖拉”積分模塊
見一個所需的增益模塊,可采用類似方法獲得。
7、模塊連接線的形成方法隨信號起始端位置不同而不同,具體如下。
起始端位于模塊輸出口的信號線生成法。使光標(biāo)靠近模塊輸出口;待光標(biāo)變 為“單線十字叉”時,按下鼠標(biāo)左鍵;移動十字叉,拖出一根“虛連線”;光標(biāo) 與另一個模塊輸出口靠近到一定程度,單十字叉變?yōu)殡p十字叉;放開鼠標(biāo)左鍵,”虛連線”便變?yōu)閹Ъ^的信號連線。
起始端位于其他信號線上的信號線生成法。使光標(biāo)置于已經(jīng)存在的其他信號線 之上;按下鼠標(biāo)右鍵,光標(biāo)變?yōu)椤皢尉€十字叉”;運動鼠標(biāo),引出”虛連線”;當(dāng) 鼠標(biāo)與待連接模塊輸入口靠得足夠近,單十字叉變?yōu)殡p十字叉;放開鼠標(biāo)右鍵,“虛連線”便變?yōu)閹Ъ^的信號連線。
雙擊相應(yīng)的信號線,給信號線作標(biāo)注,如x’’,x’,x等。
《計算機仿真及應(yīng)用》實驗教案
圖7.4
已構(gòu)建完成的新建模型窗
8、根據(jù)理論數(shù)學(xué)模型設(shè)置模塊參數(shù)
為使構(gòu)造的Simulink模型與理論數(shù)學(xué)模型一致,須對模塊進行如下參數(shù)設(shè)置。
設(shè)置增益模塊
《計算機仿真及應(yīng)用》實驗教案
修改求和模塊輸入口的代數(shù)符號:雙擊求和模塊,引出如圖7.1-6所示的參數(shù)設(shè)置窗; 把符號列表欄中的默認(rèn)符號(++)修改成代數(shù)符號(--);單擊【OK】鍵,完成設(shè)置;
圖7.6 改變輸出入口符號的求和模塊參數(shù)設(shè)置窗
據(jù)初始位移x(0)=0.05m對積分模塊
《計算機仿真及應(yīng)用》實驗教案
圖7.7 實現(xiàn)初始化位移0.05設(shè)置的Integrator1設(shè)置窗
9仿真運行參數(shù)采用默認(rèn)解算器“ode45”、默認(rèn)“變步長”和默認(rèn)仿真終止時間10.10把新建模型保存為exm070101.mdl.11試運行,以便發(fā)現(xiàn)問題加以改善。
雙擊
”仿真啟動鍵,使該模型運行;在示波器上呈現(xiàn)
圖7.8 坐標(biāo)范圍設(shè)置不當(dāng)時的信號
《計算機仿真及應(yīng)用》實驗教案
單擊Scope顯示窗上的縱坐標(biāo)范圍自動設(shè)置圖標(biāo)“”,示波器顯示窗改變?yōu)閳D7.9所
示。在顯示窗中,可以看到位移x(t)的變化曲線。同時可以發(fā)現(xiàn):縱坐標(biāo)的適當(dāng)范 圍大致在【-0.06,0.06】;仿真時間取【0,5】即可;顯示的曲線不夠光滑。
圖7.9 采用軸自動設(shè)置功能的信號顯示
12、據(jù)試運行結(jié)果,進行仿真參數(shù)的再設(shè)置
示波器縱坐標(biāo)設(shè)置:用鼠標(biāo)單擊示波器的黑色顯示屏,在彈出菜單中選擇Axes Properties,引出縱坐標(biāo)設(shè)置對話窗7.10所示;把縱坐標(biāo)的下限、上限分別設(shè)置為(-0.06)和(+0.06);單 擊【OK】,完成設(shè)置。
示波器時間顯示范圍的修改:單擊示波器的參數(shù)設(shè)置圖標(biāo)“
”,引出示波器參數(shù)設(shè)置窗;
在General卡片的Axes區(qū)的Time range欄中,填寫5或auto;單擊【OK】,完成設(shè)置。
圖7.10 對顯示屏的縱坐標(biāo)范圍進行設(shè)置
7.11 對示波器時間顯示范圍的設(shè)置
·仿真終止時間最簡捷的修改方法:在exam070101模型窗“仿真終止時 間”欄“
”中的默認(rèn)值10改變?yōu)?。
《計算機仿真及應(yīng)用》實驗教案
·顯示曲線的光滑化設(shè)置:選中exam070101模型窗的下拉菜單項SimulationConfiguration Parameters,引出仿真參數(shù)配置窗,如圖7.12所示;再在該窗左側(cè)的選擇欄中,選中Data Import/Export項,與之相應(yīng)的參數(shù)設(shè)置欄便出現(xiàn)在窗口的右側(cè);把右半窗下方Save options 區(qū)中Refine factor欄中的默認(rèn)值1改為5;單擊OK,完成設(shè)置。
7.12 通過仿真參數(shù)配置窗設(shè)置輸出光滑因子
《計算機仿真及應(yīng)用》實驗教案
完成以上修改后的模型窗如圖7.13所示。再運行exam070101,可得比較滿意的位移變化曲線(見圖7.14所示)。順便指出:模型運行后,在模塊輸出口的信號線上會出現(xiàn)double字樣。這 表示該信號是采用“雙精度”類型數(shù)據(jù)運算。如果用戶不希望這類標(biāo)識出現(xiàn),那么應(yīng)取消對下 拉菜單項FormatPort signal DisplaysPort Data Types的勾選。
圖7.13
仿真參數(shù)調(diào)整運行后的exam070101模型
在模型窗中,x’’,x’,x等信號名稱是模型創(chuàng)建者根據(jù)需要寫入的。標(biāo)識信號名稱的操作方法 是:用鼠標(biāo)雙擊信號附近的適當(dāng)位置后,就會出現(xiàn)一個虛線框,該虛線框中允許輸入任何 文字。
13、仿真結(jié)果顯示
原本比較稀疏的解計算器數(shù)據(jù),經(jīng)設(shè)定的“光滑因子”下的插值,增加了用于描繪曲線的 數(shù)據(jù)點數(shù),因此使示波器顯示出更為光滑的曲線,如圖7.14所示。
《計算機仿真及應(yīng)用》實驗教案
圖7.14 適當(dāng)?shù)仫@示仿真所得的位移變化曲線
五、實驗小結(jié)
第二篇:Matlab與Simulink仿真學(xué)習(xí)心得
Matlab與Simulink仿真學(xué)習(xí)心得
班級:07610 學(xué)號:072016 姓名:呂天雄
一 Matlab學(xué)習(xí)心得體會與編程實踐
<1>學(xué)習(xí)Matlab的心得體會
真正開始接觸Matlab是大二上就開始了,到現(xiàn)在已經(jīng)一年多了,在此之間,Matlab的確為我提供了很多便利。Matlab的確不愧成為是草稿紙上的語言。我們不必去為很簡單的顯示效果圖形去找一些什么其他軟件或者研究比較復(fù)雜的計算機圖形學(xué),一個plot或者別的函數(shù)往往就可以得到很滿意的效果。
其實最初開始學(xué)習(xí)matlab的時候感覺這個東西和C沒什么兩樣,但是后來具體到一些 東西,比如信號處理和數(shù)學(xué)建模上以后才感覺到使用matlab編寫程序去驗證結(jié)果比C要節(jié) 省很多時間,而且matlab寫東西基本都是按照自己的思路平鋪直敘很少去考慮什么函數(shù)的 嵌套調(diào)用或者指針等等很頭疼的東西。
關(guān)于matlab的學(xué)習(xí),我感覺其實百度和matlab自帶的help基本能夠解決絕大數(shù)問題,而且一些比較好的論壇比如004km.cn都會為你產(chǎn)生很大的幫助,關(guān)鍵是在于多動手實踐,多思考。但是matlab畢竟只是一個工具,原理和一些基本的編程素質(zhì)還是必須有的,否則matlab最多也只能是驗證一些別人的東西而已,根本幫不上什么忙的。
<2>遇到的一些問題的思考方式與解決辦法
最開始用matlab的時候是在大物實驗,實驗要求去根據(jù)測量得到的數(shù)據(jù)作出圖。但是 手動用鉛筆去畫確實很麻煩,所以用matlab確實可以省去很大的麻煩。但是第一次遇到問 的時候是有關(guān)極化坐標(biāo)下的曲線擬合。
首先是一個物理實驗的問題;在做一個關(guān)于光的偏振的實驗的時候,最后的結(jié)果要在一個極化坐標(biāo)下顯示出來;因為數(shù)據(jù)是離散的,所以顯示出來的圖像是一個折來折去的一個東東; 然后很自然的想法是對這個曲線進行插值處理。
但是極化坐標(biāo)下MATLAB并未提供插值處理的函數(shù),interp1這個函數(shù)只能在笛卡爾坐標(biāo)系,也就是直角坐標(biāo)系下使用。
然后就想到把極坐標(biāo)的數(shù)據(jù)轉(zhuǎn)換的直角坐標(biāo)系下,pol2cart可以實現(xiàn)這個想法,但是隨后而來,也就是最后導(dǎo)致整個問題失敗的關(guān)鍵也在這里。
pol2cart以后產(chǎn)生的一串?dāng)?shù)據(jù)中出現(xiàn)了重復(fù)的數(shù)據(jù),那么interp1這個東西也就無能為力了,因為interp1不能處理一串?dāng)?shù)據(jù)中有重復(fù)出現(xiàn)的情況。最后的處理辦法是把這些數(shù)據(jù)c os,sin這些東西變換一下后,使其大致規(guī)則,然后再用polar畫出極坐標(biāo)下的圖形。
接下來這個問題就有點超過我的范圍了,可能會有點敘述不清楚。問題可以概要為:人臉網(wǎng)格插值。
這是一個用三角形網(wǎng)格表示的一個人臉模型。需要通過插值使其變得光滑,當(dāng)然問題的復(fù)雜之處在于,插值會改變原本的網(wǎng)格結(jié)構(gòu)。
對于這個問題許多人都給出了解決的辦法,當(dāng)然是一些關(guān)于人臉識別技術(shù)和運動圖像處理的范疇之內(nèi)的。
主要有兩種,第一種是face—ls算法。這種算法是基于RBF(徑向插值函數(shù))和loop細(xì)分原則的一種算法,當(dāng)然其精確程度比較差點。但是速度挺好。原理是:基于網(wǎng)格上的點,產(chǎn)生出頂點的迭代函數(shù),從而產(chǎn)生出新的定點,進行細(xì)化。然后進行插值。也就是引進新的頂點。分為兩個過程內(nèi)部插值和邊緣插值。具體可以去看蘭州大學(xué)信息工程學(xué)院的學(xué)報。
第二種也就是基本的老辦法RBF。首先解釋一下什么叫做徑向插值 徑向基函數(shù)
主要是考慮多維空間的數(shù)據(jù)插值問題,徑向基函數(shù)在三維圖形的變形中常常被采用,用其來變分三維人臉的時候還應(yīng)結(jié)合人臉的固有特征。確定該方法來實現(xiàn)三維人臉變形是可行的,但要構(gòu)造好的基函數(shù),以及解這些高維方程的解仍是難點。插值方法:
假設(shè)大多數(shù)人臉的形狀都可以由一個拓?fù)湓妥兓脕?,那么,通過調(diào)整一個一般模型的構(gòu)造參數(shù)可以建立不同的面部模型。但是,這種參數(shù)模型僅僅局限于那些構(gòu)造參數(shù)已知的情況,并且對特定人臉參數(shù)的調(diào)整非常困難。在離散數(shù)據(jù)的多變量插值問題方面,徑向基函數(shù)(radial basis function,RBF)插值方法是一個行之有效的工具,所以也適用于類似人臉這樣高維曲面的近似或平滑插值?,F(xiàn)有的許多方法使用了基于RBF的插值技術(shù),將一般人臉網(wǎng)格變化到特定人臉的形狀。這種方法的優(yōu)點在于:(1)通過插值可以得到丟失的數(shù)據(jù)點,所以源網(wǎng)格和目標(biāo)網(wǎng)格不需要相同數(shù)目的結(jié)點;(2)如果選擇了合適的匹配點,數(shù)學(xué)上可以保證能夠?qū)⒃淳W(wǎng)格變形到目標(biāo)網(wǎng)格。
當(dāng)然我也不是很懂,只是理解了部分。這種方法的關(guān)鍵是找到一個很好的核函數(shù)來計算出新的頂點。
最后問題解決的方式是查著了一些圖書館的學(xué)報。然后而且在網(wǎng)上找到了部分代碼。然后做出來的。這是我校大四一個同學(xué)畢設(shè)中的一個東西。
其實這個事件最好的解決辦法是在3D-MAX中,不過因為沒能找到MATLAB與3D-MAX是怎么接口的,所以作罷了。
第三次遇到的問題是我在數(shù)學(xué)建模課上遇到的一個關(guān)于矩陣LU分解的問題:
Matlab作出的結(jié)果和手算的結(jié)果竟然不一樣。
10??1????1???1?
U=?1? ?一個矩陣 A=? 經(jīng)過三角分解為L=101????????11?因為1/?為一個極大數(shù) 則1—1/?可以看成—1/?;
設(shè)?=0.***000000001%10的負(fù)24次方
從而L*U=則最后一位1沒有了 變成了0
其中L=
U=Matlab 程序為
epusino=0.***000000001;U=[epusino 1;0-1/epusino];L=[1 0;1/epusino 1];L*U ans =
0.***
1.***
1.***
0 而直接用lu函數(shù)對矩陣A分解的結(jié)果為
A=[epusino 1;1 1] A =
0.0000
1.0000
1.0000
1.0000
>> [L,U]=lu(A)L =
0.0000
1.0000
1.0000
0
U =
0 我們老師當(dāng)時的解釋是這是由于我們所用matlab是破解版的緣故,破解版的計算精度 沒正版的高所以導(dǎo)致運算結(jié)果的錯誤,后來我看了一些LU這個函數(shù)的help文檔 psychologically lower triangular matrix"(i.e.a product of lower triangular and permutation matrices)in L。翻譯過來是L是一個心理上的下三角矩陣,其實是下三角矩陣和置換矩陣也就是最后的結(jié)論。P*A = L*U.。由此可見這并不是什么精度的問題導(dǎo)致的結(jié)果只是LU分解的矩陣意義和書本上的不同而已。
以下是我自己寫的一些程序的代碼
1:網(wǎng)絡(luò)隨機拓?fù)鋱D
目的是要生成一個度數(shù)隨機、權(quán)值隨機的拓?fù)鋱D。首先的理解是利用鄰接矩陣,先隨機生成一個矩陣,該矩陣為一個對稱矩陣。然后畫出這個矩陣就行了。
隨機拓?fù)鋱D10026516398191 ***0430 ***065
%產(chǎn)生數(shù)組A用來存放表示兩點之間權(quán)值的矩陣A,也就是臨接矩陣,那么兩點之間權(quán)值不為零元素的個數(shù)即為該點的度數(shù)
DEF=5;%設(shè)定一個東東 方便改變隨機點的個數(shù) A=rand(DEF,DEF);%產(chǎn)生DEF*DEF的隨機矩陣 for i=1:DEF A(i,i)=0%將對角線上的數(shù)置為0 end A=10*A;A=floor(A);%向下去整 for i=1:DEF for j=1:i A(j,i)=A(i,j)%將A矩陣變?yōu)橐粋€上三角或者下三角矩陣 end end x=100*rand(1,DEF);y=100*rand(1,DEF);%產(chǎn)生10個隨機的點 plot(x,y,'r+');
for i=1:DEF a=find(A(i,:)>0)%將A矩陣每行大于0的數(shù)的在該行的地址找出來放在a中
for j=1:length(a)
c=num2str(A(i,j));%將A中的權(quán)值轉(zhuǎn)化為字符型
if c~='0'%不顯示為0的值 因為A矩陣為零代表兩點不相連 text((x(i)+x(j))/2,(y(i)+y(j))/2,c,'Fontsize',18);%將權(quán)值顯示在兩點連線中間 end hold on;
line([x(i)x(a(j))],[y(i)y(a(j))]);%連線 end end
title('隨機拓?fù)鋱D');e=num2str(DEF);legend(e);%左上角顯示節(jié)點的個數(shù) for m=1:DEF A(m,m)=m;f=num2str(A(m,m));hold on;text((x(m)+x(m))/2,(y(m)+y(m))/2,f,'Fontsize',18);%將權(quán)值顯示在兩點連線中間 end 接下來是一個在信息安全課上寫的一個關(guān)于256色圖分層的程序,一副圖像有m*n個像素然后每個像素是一個8bit的二進制數(shù)據(jù)換算為十進制是0-255之間。要做的就是把每bit的信息提取出來。
I=imread('bupt副本.bmp');%讀入源圖像
I=double(I);%將圖像轉(zhuǎn)換為double類型便于MATLAB中的計算 %確定圖像的長寬 M=size(I,1);%長 N=size(I,2);%寬 l=M*N;%圖像長寬之積 for n=1:8;%剔除每層 for i=1:M
for j=1:N
B=numdec2bin(I(i,j),8);%先將每個像素轉(zhuǎn)換為8位2進制序列
B(n)=[];%刪除相應(yīng)位置的元素
y(i,j)=numbin2dec(B);%將剩下的7個元素轉(zhuǎn)換為10進制數(shù)放入y矩陣中
end end
y=uint8(y);%將10進制的矩陣轉(zhuǎn)換為無符號整形
subplot(4,2,9-n);%顯示n個圖像,每層是相應(yīng)的剔除該層的結(jié)果
imshow(y);%顯示這個圖像
title(strcat('去除第',num2str(9-n),'層后的結(jié)果'));%顯示標(biāo)題 end
附帶的兩個函數(shù):
function y=numdec2bin(x,n);%從函數(shù)將十進制數(shù)x轉(zhuǎn)化為n位二進制 y=zeros(1,n);a=x;i=n;while a>0 y(i)=mod(a,2);a=floor(a/2);i=i-1;end function y=numbin2dec(x)%將二進制數(shù)轉(zhuǎn)換為十進制數(shù) a=0;lx=length(x);for i=1:lx a=a+x(i)*2^(lx-i);end y=a;
去除第1層后的結(jié)果去除第2層后的結(jié)果去除第3層后的結(jié)果去除第4層后的結(jié)果去除第5層后的結(jié)果去除第6層后的結(jié)果去除第7層后的結(jié)果去除第8層后的結(jié)果
Matlab的RGB轉(zhuǎn)換為YCbCr之后轉(zhuǎn)換回來和原圖不符
這個是做JPEG圖像壓縮的時候遇到的一個問題,當(dāng)時的代碼是用C寫的但是結(jié)果不對,后來想到用matlab進行驗證結(jié)果發(fā)現(xiàn)通過公式轉(zhuǎn)換得到的圖是錯的。
原理:BMP圖像壓縮為JPEG的第一步是將RGB色彩空間通過這個公式映射到Y(jié)CbCr空間上。
Y=0.299 R + 0.587 G + 0.114 B Cb =0.3313G + 0.5 B + 128 Cr = 0.5 R0.0813 B + 128 然后再進行量化,DCT,編碼等等步驟。JPEG解壓時需要將YCbCr空間的圖像又轉(zhuǎn)化回來到RGB上。
R = Y + 1.402(Cr0.34414(Cb-128)128)
B = Y + 1.772(Cb-128)
但是通過書上給的公式和網(wǎng)上大部分公式卻發(fā)現(xiàn)根本轉(zhuǎn)化不會來。下面是寫的程序代碼以及測試得到的結(jié)果圖像。
clc,clear;Source=imread('hl.jpg');%讀入原始RGB圖像
figure(1);subplot(1,2,1);imshow(Source):title('original image');%顯示圖像 [r c d]=size(Source);%計算圖像大小 %------計算紅色分量并顯示分解圖------% R(:,:,1)=Source(:,:,1);R(:,:,2)=zeros(r,c);R(:,:,3)=zeros(r,c);R=uint8(R);whos;figure(2);subplot(1,3,1);imshow(R)title('Red Component');%-------計算綠色分量并顯示分解圖-------% G(:,:,2)=Source(:,:,2);G(:,:,1)=zeros(r,c);G(:,:,3)=zeros(r,c);G=uint8(G);figure(2);subplot(1,3,2);imshow(G)title('Green Component');%--------計算藍(lán)色分量并顯示分解圖-------% B(:,:,3)=Source(:,:,3);B(:,:,1)=zeros(r,c);B(:,:,2)=zeros(r,c);B=uint8(B);figure(2);subplot(1,3,3)imshow(B)title('Blue Component');%------------合成-------------% Comp(:,:,1)=R(:,:,1);Comp(:,:,2)=G(:,:,2);Comp(:,:,3)=B(:,:,3);figure(1);subplot(1,2,2);imshow(Comp):title('composition image');Y=0.229*R+0.587*G+0.114*B;Cb=0.5*B-0.1687*R-0.3313*G+128;Cr=0.5*R-0.4187*G-0.0813*B+128;red=Y+1.402*(Cr-128);green=Y-0.34414*(Cb-128)-0.71414*(Cr-128);blue=Y+1.772*(Cb-128);Comp2(:,:,1)=red(:,:,1);Comp2(:,:,2)=green(:,:,2);Comp2(:,:,3)=blue(:,:,3);figure(3);imshow(Comp2);title('RGB轉(zhuǎn)換為YCrCb后又轉(zhuǎn)換為RGB的圖像');RD=R(:,:,1)-red(:,:,1);GD=G(:,:,2)-green(:,:,2);BD=B(:,:,3)-blue(:,:,3);figure(4);subplot(1,3,1);imshow(RD);title('紅色分量差異');subplot(1,3,2);imshow(GD);title('綠色分量差異');subplot(1,3,3);imshow(BD);title('藍(lán)色分量差異');
然而可以通過figure(4)的圖像清楚看到R 和G分量轉(zhuǎn)換后恢復(fù) 與以前的差別很大。而且看了一下matlab自帶的rgb2ycbcr和ycbcr2rgb并且用了這兩個函數(shù)測試后圖像是一樣的。很是不解
實驗得到的圖為: original imagecomposition image
將源圖像分為RGB三個部分。
Red ComponentGreen ComponentBlue Component
將源圖像的RGB分量轉(zhuǎn)換到Y(jié)CbCr上后又轉(zhuǎn)化為RGB得到的三個分量差異的圖。
紅色分量差異綠色分量差異藍(lán)色分量差異 公式轉(zhuǎn)換的y分量公式轉(zhuǎn)換的cb分量公式轉(zhuǎn)換的Cr分量matlab函數(shù)轉(zhuǎn)換的y分量matlab函數(shù)轉(zhuǎn)換的Cb分量matlab函數(shù)轉(zhuǎn)換的Cr分量
從最后的結(jié)果可以看出原圖轉(zhuǎn)換到Y(jié)CbCr空間之后又轉(zhuǎn)化回來得到的圖像與原圖不符….RGB轉(zhuǎn)換為YCrCb后又轉(zhuǎn)換為RGB的圖像
以上只是我自己用Matlab做過的部分問題,還有一些比如場聲源定位Music算法仿真,DES加密算法。神經(jīng)網(wǎng)絡(luò)濾波器等等,鑒于代碼量太大,就不再敖述。二 Simulink學(xué)習(xí)心得與編程實踐
SIMILINK模塊庫按功能進行分類,包括以下8類子庫: Continuous(連續(xù)模塊)Discrete(離散模塊)
Function&Tables(函數(shù)和平臺模塊)Math(數(shù)學(xué)模塊)
Nonlinear(非線性模塊)
Signals&Systems(信號和系統(tǒng)模塊)Sinks(接收器模塊)Sources(輸入源模塊)
對于simulink來說其實沒什么好說的,需要什么就把什么拖到Model里面,連線之后設(shè)定參數(shù)。不是很麻煩的。但是重要的是對于系統(tǒng)的設(shè)計與仿真思想才是最重要的。而且里面的S-Function也是比較好的一個設(shè)計,用S-Function可以自定義一些組件,使自己的仿真看上去更加清晰與精簡。
Simulink的工作方式:
(1)模塊內(nèi)的參數(shù)值首先會送到Matlab中進行計算,得到的參數(shù)值會用來當(dāng)做以后需要調(diào)用的參數(shù)。
(2)模型系統(tǒng)中的各個層級將被平展開來,每一個子系統(tǒng)將被相應(yīng)的模塊所代替。(3)模塊按被處理的順序排列,此時代數(shù)回路結(jié)構(gòu)也被檢查出來,此種排列產(chǎn)生一個列表,以確保具有代數(shù)回路的模塊驅(qū)動輸入的模塊被更新后才更新。
(4)檢查塊之間的鏈接,是否每一個塊的輸出端口與它所連接的模塊輸入端口有相同的信號寬度。
現(xiàn)在可以準(zhǔn)備執(zhí)行仿真操作,仿真時使用數(shù)值迭代求的的結(jié)果,每種數(shù)值積分模型提供的連續(xù)狀態(tài)的微分能力。
Simulink中的模型都是分級的,因此可以通過自上而下或者自下而上的方式建立模型。定義了一個模型以后,就可以通過Simulink的菜單或者在Matlab的Command中輸入命令進行仿真。
關(guān)于學(xué)習(xí)的心得就寫到這里了,接下來是一些自己做的仿真。
1:觀察一個信號與積分之后的區(qū)別,目的是了解Scope的功能和用法。
仿真結(jié)果,左邊為原始信號,右邊為積分后的信號。
用XYGraph看到的對比
Rossler吸引子產(chǎn)生仿真:
Rossler 吸引子產(chǎn)生是服從下面這個方程的 1
212 331
仿真圖 ???(x?x)x??x?axx??b?x(x?c)xa?b?0.2c?5.7
仿真結(jié)果
LMS自適應(yīng)濾波器: 仿真圖:
遇到的問題
問題的解決辦法:
將Spectrum Scope中的buffer input打勾就行了。
仿真結(jié)果圖形:
1:Spectrum Scope的輸出圖形
2:Vector Scope的輸出結(jié)果
3:Scope的輸出結(jié)果圖形
第三篇:2021基于MATLAB Simulink的平面四連桿機構(gòu)仿真
基于MATLAB
Simulink的平面四連桿機構(gòu)仿真
基于MATLAB/Simulink的平面四連桿機構(gòu)仿真
一、題目及自由度分析
如圖1所示,該平面四桿機構(gòu)中有三根運動的均質(zhì)鋼桿,其中有兩根鋼桿的一端與接地點連接,第三根桿就與這兩根桿剩下的端點連接起來,兩個接地點就可認(rèn)為是第四桿,機構(gòu)中相關(guān)尺寸如圖2所示。
計算結(jié)構(gòu)自由度,三個運動桿被限制到平面內(nèi)運動,因此每個桿都有兩個移動和一個轉(zhuǎn)動,即在考慮約束之前,自由度為:
3×(2+1)=9
但是由于每個桿都受到約束,所以并不是每個自由度都是獨立的。在二維狀態(tài)下,剛體間的連接或者剛體與接地點的連接就會增加兩個約束。這樣就會使得剛體其中一端不能夠作為獨立的自由運動點,而是要受到鄰近剛體的約束。該題中有四個剛體--剛體或剛體—接地點的連接,這就隱含8個約束。
那么最后的自由度為9-8=1.雖然有四個轉(zhuǎn)動自由度,但是,其中三個都是非獨立的,只要確定其中一個,就可確定其余三個。
二、模型建立及參數(shù)設(shè)置
1應(yīng)用MATLAB/Simulink建立初始模型
2在初始模型的基礎(chǔ)上添加Joint
Sensor模塊
3依題意設(shè)置相關(guān)參數(shù)
⑴配置Ground模塊
由圖2可得系統(tǒng)的基本尺寸為:
①固定構(gòu)件長86.7厘米
②Ground_1表示接地點,在World
CS坐標(biāo)軸原點右邊43.3cm處
③Ground_2表示接地點,在World
CS坐標(biāo)軸原點左邊43.4cm處
④最下端的鉸處于X-Z平面內(nèi)原點以上4cm
圖5Ground_1模塊參數(shù)設(shè)置圖6Ground_2模塊參數(shù)設(shè)置
4配置Joint模塊
三個沒有接地的聯(lián)桿都是在X-Y平面內(nèi)的,所以Revolute軸必須是Z軸。
⑴依次打開Revolute參數(shù)對話框,保持默認(rèn)值,即Axis
of
rotation[x
y
z]默認(rèn)設(shè)置為[001],Reference
csys都是WORLD。
圖7Revolute坐標(biāo)設(shè)置
⑵根據(jù)連接情況依次設(shè)置Revolute參數(shù)對話框中的Connection
parameters參數(shù)
圖8Revolute模塊參數(shù)對話框Connection
parameters參數(shù)
圖9Revolute模塊參數(shù)對話框Connection
parameters參數(shù)
圖10Revolute模塊參數(shù)對話框Connection
parameters參數(shù)
圖11Revolute模塊參數(shù)對話框Connection
parameters參數(shù)5配置Body模塊
本題中Body模塊(即Bar)定位方式不是直接相對于WORLD坐標(biāo)系統(tǒng),而是采用相對坐標(biāo)形式,Bar1的CS1相對于Ground_1,Bar2的CS1相對于Bar1,以此類推。
以下為每個Body模塊的詳細(xì)參數(shù)設(shè)置,其中包括質(zhì)量(Mass)、慣性矩(Inertia)、重心坐標(biāo)原點、CS1坐標(biāo)原點、CS2坐標(biāo)原點和重心的方向。
圖12Bar1的模塊參數(shù)設(shè)置
圖13Bar2的模塊參數(shù)設(shè)置
圖14Bar3的模塊參數(shù)設(shè)置三、檢測運動,運行模型
圖15仿真結(jié)果動畫顯示
圖16Revolute2和Revolute3的轉(zhuǎn)角時程曲線
三、小結(jié)
目前較為主流的動力學(xué)仿真軟件是Adams,但鑒于本人對該軟件接觸較少,且MATLAB也具有該功能,故本題采用Simulink中的SimMechanics工具箱對平面四桿機構(gòu)進行建模仿真,并利用其可視化窗口進行系統(tǒng)運動可視化。
通過仿真結(jié)果可以看到,使用已有的計算機仿真軟件包Matlab/Simulink來建立機構(gòu)的仿真模型,仿真求解機構(gòu)力學(xué)和運動參數(shù),可以把用戶從復(fù)雜煩瑣的數(shù)學(xué)計算中解放出來,提高了求解速度,保證了求解精度。
第四篇:Matlab與Simulink系統(tǒng)仿真學(xué)習(xí)心得 馬楠
Matlab與Simulink系統(tǒng)仿真學(xué)習(xí)心得
班級:07610
學(xué)號:072019
姓名:馬楠
第一部分:Matlab學(xué)習(xí)心得以及實踐
Matlab是迄今為止我所見到過的功能最為強大實用范圍寬廣的軟件。的確Matlab適用于教學(xué),航天,網(wǎng)絡(luò)仿真等等。而且提供了很多功能強大的工具箱,并且最為突出的是它自帶的很全面細(xì)致的幫助文檔,無論你是初學(xué)者還是老手都會驚嘆于此,你也不必去花很多時間去熟悉那些繁雜的命令,并且很容易通過這些幫助文檔得到關(guān)于這些函數(shù)最精準(zhǔn)的用法。
Matlab是一個建立在矩陣操作上的軟件,我想要想真正懂得并理解Matlab與一般的語言比如C或者java的區(qū)別,那么你就應(yīng)該真正理解矩陣的思想。而且要熟悉Matlab對矩陣存儲的方式(在下文中我會詳細(xì)解釋與之相關(guān)的內(nèi)容),這樣對提高你的代碼執(zhí)行效率與易懂性都有很大的幫助。
但是Matlab究竟應(yīng)該怎么定位呢?一個編程軟件,一個數(shù)學(xué)工具,一個工具箱,一個開發(fā)引擎,一個仿真工具,一個虛擬現(xiàn)實軟件…… 的確要精準(zhǔn)的說出Matlab的作用很難,或許去定義這個東西到底是用來干什么的并不重要,It is just a tool。
關(guān)于Matlab的學(xué)習(xí)方法,我想與別的語言有很大不同,對于匯編或者C,我們應(yīng)當(dāng)很注重底層的一些操作,比如?;蛘哧犃写鎯?shù)據(jù)的方式,int或者double類型轉(zhuǎn)換的時候產(chǎn)生的數(shù)據(jù)丟失,或者指針方面很頭疼的一些東西,但是對于Matlab你根本不必去注重這些東西,也不必去清除的記得那個函數(shù)的具體調(diào)用方式,那個函數(shù)的內(nèi)容與結(jié)構(gòu)等等。你需要的只是相當(dāng)用一個筆記本寫下你一步一步實現(xiàn)目標(biāo)的步驟而已。一種草稿紙式的語言。你所學(xué)的東西很大部分都是為你要做的目標(biāo)來服務(wù)的,也許這就是當(dāng)初面向?qū)ο笫秸Z言產(chǎn)生的原因,但是Matlab就是這種語言的一個代表。
好了,就說到這里了,接下來是我自己學(xué)習(xí)中對Matlab的一些應(yīng)用中所遇到的問題以及思考方式和解決辦法。離散信號卷積:
N1=input('N1=');%輸入N1 N2=input('N2=');%輸入N2 k1=0:(N1-1);%定義序列f1的對應(yīng)序號向量 k2=0:(N2-1);% 序列f2的對應(yīng)序號向量 f1=ones(1,N1);%f1為階躍序列 f2=0.5*k2;%f2為斜坡序列
[f,k]=dconv(f1,f2,k1,k2)%求離散卷積
其中dconv函數(shù)的代碼為:
function [f,k]=dconv(f1,f2,k1,k2)
%The function of compute f=f1*f2 % f: 卷積和序列f(k)對應(yīng)的非零樣值向量 % k:
序列f(k)的對應(yīng)序號向量 % f1: 序列f1(k)非零樣值向量 % f2: 序列f2(k)的非零樣值向量 % k1: 序列f1(k)的對應(yīng)序號向量 % k2: 序列f2(k)的對應(yīng)序號向量 f=conv(f1,f2)
%計算序列f1與f2的卷積和f k0=k1(1)+k2(1);
%計算序列f非零樣值的起點位置 k3=length(f1)+length(f2)-2;
%計算卷積和f的非零樣值的寬度
k=k0:k0+k3
%確定卷積和f非零樣值的序號向量 subplot(2,2,1)stem(k1,f1)title('f1(k)')xlabel('k')ylabel('f1(k)')subplot(2,2,2)
%在子圖1繪序列f1(k)時域波形圖
stem(k2,f2)
%在圖2繪序列f2(k)時波形圖 title('f2(k)')xlabel('k')ylabel('f2(k)')subplot(2,2,3)stem(k,f);
%在子圖3繪序列f(k)的波形圖 title('f(k)f1(k)與f2(k)的卷積和f(k)')xlabel('k')ylabel('f(k)')h=get(gca,'position');
h(3)=2.5*h(3);set(gca,'position',h)%將第三個子圖的橫坐標(biāo)范圍擴為原來的2.5倍一次物理實驗中的數(shù)據(jù)處理,關(guān)于非線性電阻。
x=[12.042 11.844 11.644 11.444 11.244 11.043 10.843 10.645 10.447 10.240 10.054 9.843 9.640 9.447 8.950 8.448 7.946 7.441 6.940 6.444 5.942 5.446 4.946 4.445 3.944 3.447 2.942 2.442 2.246 2.045 1.846 1.643 1.464 1.252 1.038 0.849 0.642 0.448 0.208 0 ];y=[0.601 0.915 1.349 1.742 2.152 2.572 2.994 3.414 3.840 4.285 4.678 4.612 4.526 4.447 4.246 4.043 3.846 3.635 3.433 3.232 3.028 2.827 2.625 2.442 2.220 2.018 1.814 1.614 1.535 1.455 1.376 1.235 1.101 0.950 0.791 0.642 0.491 0.341 0.158 0.001]
p1=polyfit(x(1:11),y(1:11),1);p2=polyfit(x(11:31),y(11:31),1);p3=polyfit(x(31:end),y(31:end),1);Y1=vpa(poly2sym(p1,'x'),6)Y2=vpa(poly2sym(p2,'x'),6)Y3=vpa(poly2sym(p3,'x'),6)
x1=min(x(1:11)):0.1:max(x(1:11));x2=min(x(11:31)):0.1:max(x(11:31));x3=min(x(31:end)):0.1:max(x(31:end));y1=polyval(p1,x1);y2=polyval(p2,x2);y3=polyval(p3,x3);
plot(x,y,'o',x1,y1,x2,y2,x3,y3);xlabel('電壓值U/v');ylabel('電流值I/mA');title('非線性電阻伏安特性曲線');grid on 54.543.532.521.510.5002468101214
3:三維立體圖形燈光效果 [x,y]=meshgrid(-8:0.5:8);R=sqrt(x.^2+y.^2)+eps;z=sin(R)./R;surf(x,y,z,'FaceColor','interp','EdgeColor','none','FaceLighting','phong');axis tight;daspect([5 5 1]);camlight left view(-50,30)
10.80.60.40.204-0.2-8-6-4-202468-8-6-4-20268
4:地形模擬:
A=[ 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 20 0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.3 0.2 0.3 0.2 0.1 0.2 0.2 0.4 0.3 0.2 0.2 0.2 0.2 19 0.3 0.2 0.2 0.2 0.2 0.4 0.3 0.3 0.3 0.3 0.4 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.3 0.2 0.2 18 0.2 0.3 0.3 0.2 0.3 1 0.4 0.5 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.6 0.5 0.4 0.4 0.2 0.2 17 0.2 0.2 0.4 0.2 1 1.1 0.9 0.4 0.3 0.3 0.5 0.3 0.2 0.2 0.2 0.7 0.3 0.6 0.6 0.3 0.4 16 0.2 0.2 0.9 0.7 1 1 1 0.7 0.5 0.3 0.2 0.2 0.2 0.6 0.2 0.8 0.7 0.9 0.5 0.5 0.4 15 0.2 0.3 1 1 1 1.2 1 1.1 0.8 0.3 0.2 0.2 0.2 0.5 0.3 0.6 0.6 0.8 0.7 0.6 0.5 14 0.2 0.4 1 1 1.1 1.1 1.1 1.1 0.6 0.3 0.4 0.4 0.2 0.7 0.5 0.9 0.7 0.4 0.9 0.8 0.3 13 0.2 0.2 0.9 1.1 1.2 1.2 1.1 1.1 0.6 0.3 0.5 0.3 0.2 0.4 0.3 0.7 1 0.7 1.2 0.8 0.4 12 0.2 0.3 0.4 0.9 1.1 1 1.1 1.1 0.7 0.4 0.4 0.4 0.3 0.5 0.5 0.8 1.1 0.8 1.1 0.9 0.3 11 0.3 0.3 0.5 1.2 1.2 1.1 1 1.2 0.9 0.5 0.6 0.4 0.6 0.6 0.3 0.6 1.2 0.8 1 0.8 0.5 10 0.3 0.5 0.9 1.1 1.1 1 1.2 1 0.8 0.7 0.5 0.6 0.4 0.5 0.4 1 1.3 0.9 0.9 1 0.8 9 0.3 0.5 0.6 1.1 1.2 1 1 1.1 0.9 0.4 0.4 0.5 0.5 0.8 0.6 0.9 1 0.5 0.8 0.8 0.9 8 0.4 0.5 0.4 1 1.1 1.2 1 0.9 0.7 0.5 0.6 0.3 0.6 0.4 0.6 1 1 0.6 0.9 1 0.7 7 0.3 0.5 0.8 1.1 1.1 1 0.8 0.7 0.7 0.4 0.5 0.4 0.4 0.5 0.4 1.1 1.3 0.7 1 0.7 0.6 6 0.3 0.5 0.9 1.1 1 0.7 0.7 0.4 0.6 0.4 0.4 0.3 0.5 0.5 0.3 0.9 1.2 0.8 1 0.8 0.4 5 0.2 0.3 0.6 0.9 0.8 0.8 0.6 0.3 0.4 0.5 0.4 0.5 0.4 0.2 0.5 0.5 1.3 0.6 1 0.9 0.3 4 0.2 0.3 0.3 0.7 0.6 0.6 0.4 0.2 0.3 0.5 0.8 0.8 0.3 0.2 0.2 0.8 1.3 0.9 0.8 0.8 0.4 3 0.2 0.3 0.3 0.6 0.3 0.4 0.3 0.2 0.2 0.3 0.6 0.4 0.3 0.2 0.4 0.3 0.8 0.6 0.7 0.4 0.4 2 0.2 0.3 0.4 0.4 0.2 0.2 0.2 0.3 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.5 0.7 0.4 0.4 0.3 0.3 1 0.2 0.2 0.3 0.2 0.2 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.2 0.4 0.3 0.6 0.5 0.3 0.3 0.3 0.2 0 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.7 0.4 0.2 0.4 0.5 0.3];z=A(2:end,2:end)[x,y]=meshgrid(0:20,20:-1:0);surf(x,y,z)xlabel('x')[X,Y]=meshgrid(0:0.3:20,20:-0.3:0);Z=interp2(x,y,z,X,Y,'spline')figure surf(X,Y,Z)1.41.210.80.60.40.2020******161820x
1.41.210.80.60.40.20-0.220******161820
第二部分:Simulink學(xué)習(xí)心得以及實踐
Simulink是Matlab最重要的組件之一,它提供一個動態(tài)系統(tǒng)建模、仿真和綜合分析的集成環(huán)境。在該環(huán)境中,無需大量書寫程序,而只需要通過簡單直觀的鼠標(biāo)操作,就可構(gòu)造出復(fù)雜的系統(tǒng)。Simulink具有適應(yīng)面廣、結(jié)構(gòu)和流程清晰及仿真精細(xì)、貼近實際、效率高、靈活等優(yōu)點,并基于以上優(yōu)點Simulink已被廣泛應(yīng)用于控制理論和數(shù)字信號處理的復(fù)雜仿真和設(shè)計。同時有大量的第三方軟件和硬件可應(yīng)用于或被要求應(yīng)用于Simulink。
最開始的仿真是沒有圖形化輸入的,所謂模型化圖形輸入是指SIMULINK提供了一些按功能分類的基本的系統(tǒng)模塊,用戶只需要知道這些模塊的輸入輸出及模塊的功能,而不必考察模塊內(nèi)部是如何實現(xiàn)的,通過對這些基本模塊的調(diào)用,再將它們連接起來就可以構(gòu)成所需要的系統(tǒng)模型(以.mdl文件進行存?。M而進行仿真與分析。
現(xiàn)在來想其實要用Simulink去仿真一個系統(tǒng)不是很麻煩,只是實現(xiàn)一些拖拽或者參數(shù)設(shè)置什么的,但是要真正的去設(shè)計完善一個系統(tǒng)的確需要很多知識以及精力。我們必須了解這個系統(tǒng)的每一個步驟以及需要什么樣的組件與之匹配。而且在仿真出現(xiàn)錯誤之后去分析也是很麻煩的一件事情,我們必須有對系統(tǒng)詳細(xì)的分析和充分了解以及對Simulink每個組件充分的了解才能真正找到錯誤所在并且修正。所以學(xué)好計算機仿真重在理論知識。
接下來是一些自己做的Simulink仿真。
1:階躍信號的積分 仿真圖
仿真結(jié)果:
房屋產(chǎn)熱的一個實例
該問題是模擬一個戶外條件下一所房屋能夠產(chǎn)生的熱量的例子
這是仿真結(jié)果圖
第五篇:高頻電子線路Matlab仿真實驗-課程設(shè)計要求
高頻電子線路Matlab仿真實驗/課程設(shè)計要求
1.要求
每位同學(xué)根據(jù)教材附錄的matlab源碼獨立完成以下仿真要求,并將仿真代碼和仿真結(jié)果寫成實驗報告,由各班統(tǒng)一收齊并于5月31日前提交。
2.仿真題目
(1)線性頻譜搬移電路仿真
根據(jù)線性頻譜搬移原理,仿真普通調(diào)幅波。
基本要求:載波頻率為8kHz,調(diào)制信號頻率為400Hz,調(diào)幅度為0.3;畫出調(diào)制信號、載波信號、已調(diào)信號波形,以及對應(yīng)的頻譜圖。
擴展要求1:根據(jù)你的學(xué)號更改相應(yīng)參數(shù)和代碼完成仿真上述仿真;載波頻率改為學(xué)號的后5位,調(diào)制信號改為學(xué)號后3位,調(diào)幅度設(shè)為最后1位/10。(學(xué)號中為0的全部替換為1,例如學(xué)號2010101014,則載波為11114Hz,調(diào)制信號頻率為114,調(diào)幅度為0.4)。
擴展要求2:根據(jù)擴展要求1的條件,仿真設(shè)計相應(yīng)濾波器,并獲取DSB-SC和SSB的信號和頻譜。
(2)調(diào)頻信號仿真
根據(jù)調(diào)頻原理,仿真調(diào)頻波。
基本要求:載波頻率為30KHz,調(diào)制信號為1KHz,調(diào)頻靈敏度kf?2??3?103,仿真調(diào)制信號,瞬時角頻率,瞬時相位偏移的波形。擴展要求:調(diào)制信號改為1KHz的方波,其它條件不變,完成上述仿真。
3.說明
(1)仿真的基本要求每位同學(xué)都要完成,并且記入實驗基本成績。
(2)擴展要求可以選擇完成,但需要進行相應(yīng)的檢查才能獲得成績。
(3)適用范圍:通信工程2010級1、2班;微電子2010級1、2班
2012年5月