微波EDA網(wǎng)-關(guān)于我們 微波EDA網(wǎng)-出版的圖書(shū)專(zhuān)著 微波EDA網(wǎng)培訓(xùn)課程列表 射頻工程師養(yǎng)成培訓(xùn)學(xué)習(xí)教程
  • 1
  • 2
  • 3
  • 4
   
您現(xiàn)在的位置: 微波EDA網(wǎng) >> CST >> CST教程 >> 正文

CST與Matlab連接設(shè)置

文章來(lái)源: CST中國(guó)    錄入: mweda.com   

    這里說(shuō)明如何將CST 微波工作室(CST MWS)與MATLAB 一起使用。MATLAB 是以線(xiàn)性代數(shù)和矩陣數(shù)學(xué)為基礎(chǔ)的科學(xué)計(jì)算程序。COM(組件對(duì)象模型)和 ActiveX 用來(lái)通過(guò) CST MWS 的VBA 宏語(yǔ)言與 MATLAB 連接。CST MWS 與 MATLAB 連接的主要目的在于想利用MATLAB 的廣泛的數(shù)據(jù)處理、信號(hào)處理和圖 形處理能力。

    COM 和 ActiveX 接口允許兩個(gè)程序在工作后臺(tái)的數(shù)據(jù)傳遞和緊密結(jié)合。這里所描述的連接方法對(duì)CST 工作室的其他產(chǎn)品都適用,同樣也適用于將CST 工作室與任意其他以Windows 為基礎(chǔ)的第三方軟件相連接,比如: MATHCAD, MATHEMATICA, MAPLE 等。

    1. 背景

    假設(shè)用戶(hù)已經(jīng)熟悉與CST MWS VBA兼容的宏語(yǔ)言。如果用戶(hù)對(duì)宏語(yǔ)言不熟悉,可以參考 CST 微波工作室的Advanced Topics manual(高級(jí)用戶(hù)手冊(cè))。

    CST MWS 可以設(shè)置成控制MATLAB 或者是受MATLAB 控制。當(dāng)CST MWS 控制MATLAB 時(shí),CST MWS 是客戶(hù)系統(tǒng),MATLAB 是服務(wù)系統(tǒng),反之亦然。該用戶(hù)說(shuō)明主要是關(guān)于CST MWS 作為客戶(hù)系統(tǒng),MATLAB 作為服務(wù)系統(tǒng)。

    在 MATLAB 的主頁(yè)上可以得到更多的使用和編程方面的相關(guān)信息。MATLAB 中COM 對(duì)象技術(shù)的相關(guān)說(shuō)明也可以通過(guò)在MATLAB 命令窗口中輸入以下命令來(lái)獲得。

    h=actxserver(‘Matlab.Application’); invoke(h);

    命令窗口中會(huì)出現(xiàn)以下語(yǔ)句:

    Execute=String Execute(String) 
    GetCharArray=String GetChatArray(String,String) 
    GetFullMatrix=Void GetFullMatric(String,String,Variant(Pointer),Variant(Pointer)) 
    MaximizeCommandWindow=Void MaximizeCommandWindow() MinimizeCommandWindow=Void 
    MinimizeCommandWindow() PutCharArray=Void 
    PutCharArray(String,String,String) 
    PutFullMatrix=Void PutFullMatrix(String,String,SafeArray,SafeArray) 
    Quit=Void Quit()

    以上指令可以用于在 MATLAB 中發(fā)送、獲取和處理數(shù)據(jù)。該執(zhí)行方法可以用于 MATLAB 中任意語(yǔ)句,讓用戶(hù)感覺(jué)到與直接在MATLAB 的命令窗口中編程一樣。

    2. CST 與MATLAB連接例子說(shuō)明

    以下將通過(guò)一個(gè)具體的例子來(lái)說(shuō)明 CST 與 MATLAB 是如何連接的。該例子通過(guò)一個(gè)CST VBA宏MATLAB Data Exchange來(lái)實(shí)現(xiàn)。

    該宏主要是關(guān)于在CST MWS和 MATLAB之間交換數(shù)據(jù)。數(shù)據(jù)交換將CST 項(xiàng)目中的仿真結(jié)果S11 的數(shù)據(jù)線(xiàn)性地傳遞給 MATLAB,由MATLAB 計(jì)算S11 的dB 值,再將計(jì)算后的值送回到CST MWS,并在1D Result中畫(huà)出。

    3. 具體處理過(guò)程

    這個(gè)宏用來(lái)證明COM 對(duì)象方法的正確使用,同樣它們僅僅局限于一個(gè)端口/一種模式的結(jié)構(gòu)。很容易擴(kuò)展到任意端口、任意模式。你使用 CST MWS 的電腦上必須安裝MATLAB。這些宏都可以集成到任一個(gè)可仿真獲得S11 的CST MWS 的項(xiàng)目中。

    將該宏文件放置在項(xiàng)目目錄下的 Model\3D 文件夾中,這樣仿真完成后選擇菜單中的 Macros,最下方列出的局部宏就是“MATLAB Data Exchange”。

    選擇 MATLAB Data Exchange,CST MWS 將會(huì)啟動(dòng) MATLAB,在出現(xiàn)的 MATLAB 窗口中將會(huì)以dB 的形式顯示S11 的值。確保MATLAB 命令窗口依然開(kāi)著,點(diǎn)擊 MATLAB 的命令窗口,在命令行中輸入whos 命令顯示這些內(nèi)部變量。注意到這些變量在MATLAB 中以cst_data.mat 文件存儲(chǔ),該文件存在C:\Program Files\CST Matlab data 目錄下。返回 CST MWS 窗口中,在1DResults > Matlab > S11dB 中可以找到在MATLAB 中計(jì)算得到的S11dB值。

    點(diǎn)擊 CST MWS 的 Macros 菜單,在下拉菜單中選擇 Edit/Move/Delete VBA Macro 子菜單。從結(jié)果列表中選中MATLAB Data Exchange,并且選擇 edit。MATLAB Data Exchange 的VBA腳本將會(huì)在VBA editor 中出現(xiàn)。你可以滾動(dòng)察看應(yīng)用細(xì)節(jié)。腳本的第一部分標(biāo)志為 user defined settings(用戶(hù)定義的設(shè)置)。Matlab_visible 可以被設(shè)置為T(mén)ure 或者False,使得MATLAB命令窗口在計(jì)算結(jié)束時(shí)保持開(kāi)啟或者關(guān)閉狀態(tài)。

    User_path中包含了所有文件存儲(chǔ)的完整路徑和MATLAB 的設(shè)置路徑。Save_file_name文件中指定了MATLAB 數(shù)據(jù)存儲(chǔ)的.mat文件的名稱(chēng)。獨(dú)立的MATLAB腳本文件(.m文件)則能夠通過(guò) COM對(duì)象方法的執(zhí)行而運(yùn)行。

    4. 宏VBA代碼:

Option Explicit 
Sub Main
'User defined settings
Dim matlab_visible As Boolean
Dim user_path, save_file_name As String
matlab_visible = True 'True to keep
Matlab command window open, False to not display it
user_path = "C:\Program Files\
CST Matlab data" 'path that Matlab opens to and any data is saved to
save_file_name = "cst_data" 'name of .mat file matlab saves all data to
'variable defn
'------------------------------------------------------------------------------------
'Matlab variables
Dim matlab As Object
Dim Result As String
Dim sendA(2) As Double
'set up variables
Dim NumPorts, NumModes, NumFre
q, NumEng, NumTime As Integer
Dim factorA, factorB As Double
Dim j, i As Integer
'Result variables
Dim eng_obj, sig_in_obj, si
g_out_obj As Object
Dim file_nameA As String
Dim freqs() As Double
Dim times() As Double
Dim eng_time() As Double
Dim eng_A() As Double
Dim T_stop As Double
Dim sig_in() As Double
Dim sig_out() As Double
Dim MImag() As Double
Dim NumSamp As Integer
Dim Fmin, Fmax As Double
Dim S11dBD() As Double
Dim freqD() As Double
'MWS problem information
NumPorts = Solver.GetNumberOfPorts
NumModes = Solver.GetNumberOfPorts
factorA = Units.GetFrequencyUnitToSI
factorB = Units.GetTimeUnitToSI
NumSamp = Solver.GetNFsteps
Fmin = Solver.GetFmin
Fmax = Solver.GetFmax
'--------------------------------------------------------------------------------------------
'Retrieve MWS data
'------------------------------------------------------------------------------------
Set S11A = Result1D("a1(1)1(1)")
NumFreq = Solver.GetNFsteps
ReDim S11B(NumFreq-1)
ReDim freq(NumFreq-1)
ReDim S11dB(NumFreq-1)
ReDim MImag(NumFreq-1)
For j = 0 To NumFreq-1
freq(j) = S11A.GetX(j)/factorA
S11B(j) = S11A.GetY(j)
Next j
'Matlab COM/ActiveX interaction
'------------------------------------------------------------------------------------
'1) create COM object and initiate Matlab as an activeX server
Set matlab = CreateObject("Matlab.Application")
If matlab_visible Then
Result = matlab.Execute("h=actxser
ver('Matlab.Application');set(h,'visible',1);")
End If
'2) send all MWS data to Matlab using
Automation methods (see app note for listing)
Call matlab.PutCharArray("user_path","base",user_path)
Call matlab.PutCharArray("save_file_name","base",save_file_name)
Call matlab.PutFullMat
rix("S11","base",S11B,MImag)
Call matlab.PutFullMatri
x("freq","base",freq,MImag)
'3) use execute command to control Matlab engine
Result = matlab.Execute("cd(user_path)")
Result = matlab.Execu
te("S11dB=20.*log10(abs(S11));")
Result = matlab.Execu
te("plot(freq,S11dB);grid on;")
Result = matlab.Execute("title('S-pa
rameters from CST Microwave Studio');")
Result = matlab.Execute("xlabel('Freq, GHz.');")
Result = matlab.Execute("ylabel('S11, dB');")
Result = matlab.Execute("eval(['save ',save_file_name,';']);")
'4) retreive all data from Matlab to display in MWS
Call matlab.GetFullMat
rix("S11dB","base",S11dB,MImag)
'display or store Matlab data in MWS form
'------------------------------------------------------------------------------------
'1) write any data you wish to display to a file
fileA = "matlab_output.txt"
Open fileA For Output As #1
For j = 0 To NumFreq-1
Print #1,CStr(freq(j)) & " " & CStr(S11dB(j))
Next j
Close #1
'2) insert Matlab data into result tree
With ResultTree
.Reset
.Name "1D Results\Matlab\S11 dB"
.Type "XYSignal"
.Subtype "Linear"
.Title "S11 in dB computed in Matlab"
.Xlabel "Frequency, Hz"
.Ylabel "dB"
.File fileA
.Add
End With
End Sub

  • CST微波工作室教學(xué)培訓(xùn)視頻教程

    CST中文視頻教程,資深專(zhuān)家講解,視頻操作演示,從基礎(chǔ)講起,循序漸進(jìn),并結(jié)合最新工程案例,幫您快速學(xué)習(xí)掌握CST的設(shè)計(jì)應(yīng)用...【詳細(xì)介紹

推薦課程

射頻工程師學(xué)習(xí)培訓(xùn)教程

主站蜘蛛池模板: 亚洲欧美另类色图| 国产伦精品一区二区三区| 一本久久综合亚洲鲁鲁五月天| 日韩黄色免费观看| 亚洲日韩精品欧美一区二区| 男女边摸边做激情视频免费| 国产2021中文天码字幕| 黄色网址免费在线| 国产精品亚洲а∨无码播放麻豆| 99在线精品免费视频| 小唐璜情史在线播放| 丰满少妇人妻久久久久久| 日韩精品无码专区免费播放| 亚洲国产精品无码专区在线观看| 激情黄+色+成+人| 免费黄色网址在线观看| 肥臀熟女一区二区三区| 国产卡1卡2卡三卡在线| 欧美一级黄视频| 国产精品成熟老女人视频| 99久久人妻无码精品系列| 娇BBB搡BBBB揉BBBB| 两腿之间的私密图片| 无限韩国视频免费播放| 久久精品久久久久观看99水蜜桃| 欧美任你躁免费精品一区| 亚洲狠狠婷婷综合久久久久 | 久久成人免费播放网站| 校花哭着扒开屁股浣肠于柔 | 高清亚洲综合色成在线播放放| 国产特级毛片aaaaaa高潮流水| 4408私人影院| 国产视频一区在线| 99heicom视频| 夜夜爽一区二区三区精品| √天堂中文www官网| 影视先锋AV资源噜噜| 中国精品白嫩bbwbbw| 扒开双腿猛进入喷水高潮视频| 久久国产亚洲精品无码| 日韩欧美亚洲中字幕在线播放|