新聞中心

        EEPW首頁 > 設計應用 > 基于多語言混合編程的任意波形發生器軟件系統設計*

        基于多語言混合編程的任意波形發生器軟件系統設計*

        作者:滕友偉(中國電子科技集團公司第四十一研究所,青島 266555) 時間:2022-04-19 來源:電子產品世界 收藏
        編者按:任意波形發生器軟件系統以數字模擬和計算機技術為基礎,可以產生多種常用波形、數字/模擬調制波形、復雜任意波形,具有功能選件豐富、可擴展性強、波形編輯靈活、應用范圍廣等特點。本文介紹一種任意波形發生器系統軟件設計方案,實現用戶界面和邏輯單元分離,波形計算單元模塊化,信號生成插件靈活組裝。

        *本論文受到國家重點研發計劃項目(項目編號:2017YFF0106600)以及裝備預研領域基金重點項目(項目編號:61400030201)的資助。

        本文引用地址:http://www.104case.com/article/202204/433253.htm

        作者簡介:滕友偉(1987—),男,碩士,工程師,研究方向:信號處理。

        0   引言

        電子信息技術的高速發展帶來了被測試對象種類的不斷豐富和測試需求的不斷提高。具體表現在:海、陸、空、天多層次;部署的高密度、多頻譜、大帶寬;多種參數組合變化、多種工作體制;系統集成化與專用芯片協同發展;空間電磁環境日益復雜;以及對抗手段的不斷加強。[1-2]不僅可以產生常規激勵信號,還可以通過擴展功能插件實現外部計算單元和硬件平臺的無縫對接,真正實現從信號產生、數據處理到信號輸出的全過程。

        其中,波形計算單元即多種信號模擬插件,實現多種信號產生功能。波形文件具有統一的文件結構,實現波形數據的存儲和讀取。

        image.png

        1   軟件系統組成

        軟件結構如圖2所示,主要包括應用層、功能模塊層、驅動層和板級電路控制層。其中應用層為本軟件提供的用戶操作界面;功能模塊層為依據任意波形發生器功能劃分和硬件模塊,抽象出的采用模塊化設計的類封裝;驅動層是承上啟下的一層,實現PCIE、ISA等多種總線驅動控制和數據傳輸;板級控制層為各功能板卡的控制接口,接受來自驅動層的控制命令、波形數據,并反饋各電路的工作狀態。

        image.png

        采用上述4層軟件結構設計,不僅在物理結構將任意波形發生器邏輯做了清楚劃分,也為各功能模塊提供了自我保護和異常處理的有效途徑。

        2   開發語言及工具

        應用層采用Visual Studio 2013平臺中基于語言的WPF用戶界面框架設計[3]。WPF作為微軟推出的新一代用戶界面框架,提供了統一的編程模型、語言和框架,真正做到了分離界面設計和邏輯設計,便于協同開發。功能模塊層中的數據產生、任意波形生成及文件管理采用 R2014a開發平臺,軟件開發平臺以其豐富的函數庫、矩陣計算、數值分析,為信號、數據產生開發提供極大便利[4]。用戶層和功能模塊層采用XAML文件作為接口,這樣既實現分層隔離,也為方便錯誤的查找和定位。

        XAML接口文件提供了1 個信號產生所需的模塊傳入參數,如圖3所示的是一款噪聲信號接口文件,其中waveflag表示信號類型,sampleRate表示該信號的采樣速率等等。利用MLAPP.dll程序集實現,軟件啟動時執行Matlab引擎初始化并封裝為類,并提供執行接口。

        image.png

        引擎初始化方法如下:

        private MLApp.MLApp _matlab;

        private void Init()

        {

        Type ma t l abAppType = S y s t em.Type.

        GetTypeFromProgID(“Matlab.Application”);

        _ m a t l a b = S y s t e m . A c t i v a t o r .

        CreateInstance(matlabAppType) as MLApp.MLApp;

        Debug.Assert(_matlab != null);

        _matlab.Visible = 0;

        }

        接口設計如下:

        public void Execute(string matlabFolder, string

        command)

        {

        matlabFolder = “ cd( ‘ ” + matlabFolder

        + “’)”;

        _matlab.Execute(matlabFolder);

        Thread.Sleep(200);

        _matlab.Execute(“clear all”);

        _matlab.Execute(“close all”);

        _matlab.Execute(“clc”);

        Thread.Sleep(1000);

        _matlab.Execute(command);

        }

        驅動層采用Visual Studio 6.0和WinDriver10.0聯合開發設計[5-6],其中WinDriver為美國風河公司提供的專業驅動開發工具,具有豐富的底層驅動庫和設計樣例。Visual Studio 6.0開發工具采用高效的C/C++語言程序設計基礎算法,并將驅動層封裝為標準DLL庫以供調用。板級控制層設計采用C/C++程序設計語言,實現對實際電路及板卡的控制,響應驅動層下發的控制命令,將存儲功能層產生的波形數據存入DDR高速存儲陣列等。

        3   信號生成流程

        信號生成流程如圖4所示,第1步:用戶在操作軟件界面配置信號參數;第2步:MATLAB讀取接口文件并轉換為相應指令執行,生成波形數據;第3步:軟件將生成的波形數據以文件的形式存儲到硬盤;第4步:顯示控件讀取波形文件并顯示數據;第5步:輸出開關打開,儀器輸出信號。

        image.png

        圖5所示的是任意波形發生器生成數字調制ASK型信號并輸出測試的實際場景。對比顯示控件波形和示波器實測結果即可驗證正確性。

        4   結語

        目前任意波形發生器的發展方向有:①硬件設計平臺化,其主要性能依托于高速DAC芯片性能和寬帶放大芯片發展;②軟件設計采用模塊化插件設計,要求兼容多種開發語言和工具,方便升級、擴展和用戶二次開發。因此多采用多層次軟件設計,并減少互關聯。

        image.png

        圖5 ASK調制信號產生及輸出

        參考文獻:

        [1] 張學峰,胡長江.功能各異的各種任意波形發生器[J].國外電子測量技術,2000(4):17-18.

        [2] 劉豪.基于DDS的任意波形發生器的設計與實現[D].廣州:華南師范大學,2010.

        [3] 王鵬,崔靜.新一代界面技術WPF的架構及應用[J].成都紡織高等專科學校學報,2011(1):18-20.

        [4] 李志明.VC++與Matlab的[J].遙測遙控,1999(11):71-74.

        [5] WinDriver PCI/ISA/CardBus V9.01 User’s Manual[Z]. Jungo Ltd.,2008.

        [6] 武安河.Windows 2000/XP WDM設備驅動程序開發[M].北京:電子工業出版社,2003.

        (本文來源于《電子產品世界》雜志2020年9月期)



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 凤庆县| 仪征市| 乐陵市| 昂仁县| 城固县| 咸丰县| 渭源县| 溧水县| 广宁县| 奎屯市| 新竹县| 肃宁县| 论坛| 万全县| 乐清市| 灵宝市| 弥勒县| 越西县| 田东县| 颍上县| 正蓝旗| 贵南县| 蓝田县| 民权县| 兴隆县| 崇阳县| 昔阳县| 万宁市| 怀安县| 万源市| 襄樊市| 米泉市| 丰县| 嘉禾县| 清镇市| 清河县| 乌拉特中旗| 张北县| 赤峰市| 长岭县| 古交市|