1. 微波EDA網-關于我們 微波EDA網-出版的圖書專著 微波EDA網培訓課程列表 射頻工程師養成培訓學習教程
      • 1
      • 2
      • 3
      • 4
         
      您現在的位置: 微波EDA網 >> CST >> CST教程 >> 正文

      CST與Matlab連接設置

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

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

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

          1. 背景

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

          CST MWS 可以設置成控制MATLAB 或者是受MATLAB 控制。當CST MWS 控制MATLAB 時,CST MWS 是客戶系統,MATLAB 是服務系統,反之亦然。該用戶說明主要是關于CST MWS 作為客戶系統,MATLAB 作為服務系統。

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

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

          命令窗口中會出現以下語句:

          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 中發送、獲取和處理數據。該執行方法可以用于 MATLAB 中任意語句,讓用戶感覺到與直接在MATLAB 的命令窗口中編程一樣。

          2. CST 與MATLAB連接例子說明

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

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

          3. 具體處理過程

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

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

          選擇 MATLAB Data Exchange,CST MWS 將會啟動 MATLAB,在出現的 MATLAB 窗口中將會以dB 的形式顯示S11 的值。確保MATLAB 命令窗口依然開著,點擊 MATLAB 的命令窗口,在命令行中輸入whos 命令顯示這些內部變量。注意到這些變量在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 子菜單。從結果列表中選中MATLAB Data Exchange,并且選擇 edit。MATLAB Data Exchange 的VBA腳本將會在VBA editor 中出現。你可以滾動察看應用細節。腳本的第一部分標志為 user defined settings(用戶定義的設置)。Matlab_visible 可以被設置為Ture 或者False,使得MATLAB命令窗口在計算結束時保持開啟或者關閉狀態。

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

          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微波工作室教學培訓視頻教程

        CST中文視頻教程,資深專家講解,視頻操作演示,從基礎講起,循序漸進,并結合最新工程案例,幫您快速學習掌握CST的設計應用...【詳細介紹

      推薦課程

      射頻工程師學習培訓教程

      国产在线视频凹凸分类| 亚洲色无码一区二区三区| 精品久久久久久中文字幕无码软件 | 最近中文字幕在线中文视频| 亚洲另类欧美日韩| 热re99久久国产精品| 国产va免费高清在线观看| 精精国产xxxx视频在线播放| 啊灬啊灬啊灬快灬深用口述 | 国产精品免费看久久久| heyzo亚洲精品日韩| 好爽~好大~不要| youjizcom亚洲| 国内自拍青青草| linmm视频在线观看| 国产黄a三级三级看三级| www.伊人.com| 国产老熟女网站| 99资源在线观看| 国产精品国产三级国产专播下| 99在线视频免费| 国产精品一区在线观看你懂的| 顶级欧美熟妇高潮xxxxx| 国产污视频在线观看| 2018国产大陆天天弄| 国产成人免费片在线观看| 色妞色综合久久夜夜| 哒哒哒免费视频观看在线www | youjizz护士| 国产精品无码不卡一区二区三区 | 麻豆一二三四区乱码| 国产人成视频在线观看| 西西人体www44rt大胆高清| 国产成人AAAAA级毛片| 美女扒开尿口给男人看的让| 国产亚洲综合激情校园小说| 精品一区二区三区波多野结衣| 午夜毛片不卡免费观看视频| 永久域名在线观看视频| 亚洲女初尝黑人巨高清| 日本暴力喉深到呕吐hd|