基于多语言混合编程的任意波形发生器软件系统设计*
编者按:任意波形发生器软件系统以数字模拟和计算机技术为基础,可以产生多种常用波形、数字/模拟调制波形、复杂任意波形,具有功能选件丰富、可扩展性强、波形编辑灵活、应用范围广等特点。本文介绍一种任意波形发生器系统软件设计方案,实现用户界面和逻辑单元分离,波形计算单元模块化,信号生成插件灵活组装。
*本论文受到国家重点研发计划项目(项目编号:2017YFF0106600)以及装备预研领域基金重点项目(项目编号:61400030201)的资助。
作者简介:滕友伟(1987—),男,硕士,工程师,研究方向:信号处理。
0 引言
电子信息技术的高速发展带来了被测试对象种类的不断丰富和测试需求的不断提高。具体表现在:海、陆、空、天多层次;部署的高密度、多频谱、大带宽;多种参数组合变化、多种工作体制;系统集成化与专用芯片协同发展;空间电磁环境日益复杂;以及对抗手段的不断加强。任意波形发生器[1-2]不仅可以产生常规激励信号,还可以通过扩展功能插件实现外部计算单元和任意波形发生器硬件平台的无缝对接,真正实现从信号产生、数据处理到信号输出的全过程。
其中,波形计算单元即多种信号模拟插件,实现多种信号产生功能。波形文件具有统一的文件结构,实现波形数据的存储和读取。
1 软件系统组成
本任意波形发生器软件结构如图2所示,主要包括应用层、功能模块层、驱动层和板级电路控制层。其中应用层为本软件提供的用户操作界面;功能模块层为依据任意波形发生器功能划分和硬件模块,抽象出的采用模块化设计的类封装;驱动层是承上启下的一层,实现PCIE、ISA等多种总线驱动控制和数据传输;板级控制层为各功能板卡的控制接口,接受来自驱动层的控制命令、波形数据,并反馈各电路的工作状态。
采用上述4层软件结构设计,不仅在物理结构将任意波形发生器逻辑做了清楚划分,也为各功能模块提供了自我保护和异常处理的有效途径。
2 开发语言及工具
应用层采用Visual Studio 2013平台中基于C#语言的WPF用户界面框架设计[3]。WPF作为微软推出的新一代用户界面框架,提供了统一的编程模型、语言和框架,真正做到了分离界面设计和逻辑设计,便于协同开发。功能模块层中的数据产生、任意波形生成及文件管理采用MATLAB R2014a开发平台,MATLAB软件开发平台以其丰富的函数库、矩阵计算、数值分析,为信号、数据产生开发提供极大便利[4]。用户层和功能模块层采用XAML文件作为接口,这样既实现分层隔离,也为方便错误的查找和定位。
XAML接口文件提供了1 个信号产生所需的MATLAB模块传入参数,如图3所示的是一款噪声信号接口文件,其中waveflag表示信号类型,sampleRate表示该信号的采样速率等等。利用MLAPP.dll程序集实现,软件启动时执行Matlab引擎初始化并封装为类,并提供执行接口。
引擎初始化方法如下:
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步:输出开关打开,仪器输出信号。
图5所示的是任意波形发生器生成数字调制ASK型信号并输出测试的实际场景。对比显示控件波形和示波器实测结果即可验证正确性。
4 结语
目前任意波形发生器的发展方向有:①硬件设计平台化,其主要性能依托于高速DAC芯片性能和宽带放大芯片发展;②软件设计采用模块化插件设计,要求兼容多种开发语言和工具,方便升级、扩展和用户二次开发。因此多采用多层次软件设计,并减少互关联。
图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月期)
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码