微波EDA網(wǎng)-關(guān)于我們 微波EDA網(wǎng)-出版的圖書專著 微波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è)置

文章來源: CST中國    錄入: mweda.com   

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

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

    1. 背景

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

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

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

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

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

    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 中任意語句,讓用戶感覺到與直接在MATLAB 的命令窗口中編程一樣。

    2. CST 與MATLAB連接例子說明

    以下將通過一個具體的例子來說明 CST 與 MATLAB 是如何連接的。該例子通過一個CST VBA宏MATLAB Data Exchange來實現(xiàn)。

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

    3. 具體處理過程

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

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

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

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

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

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

推薦課程

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