基于Python的虚拟仪器技术研究及实现
先用QtDesigner生成整体GUI框架,保存为Form.ui文件。Windows下运行cmd,在C根目录调用pyuic4命令:pyuic4 Form.ui>Form.py,将PYQT生成的UI文件转成py文件,然后自定义start.py直接调用生成的py文件,运行start.py就可以显示创建的GUI界面。然后对GUI的每一个控件编辑其对应的信号与槽,比如在文中实例中的"关闭"按钮,调用connect()方法绑定点击按钮的"clicked()"信号与槽函数"close()",这样当我们鼠标点击"关闭"按钮的时候程序就会退出。与此类似,绑定其余按钮的功能。这里还可以调用:
PyQt4.QtCore.pyqtSignal(types[,name])
创建一个或多个重载绑定信号作为类属性。其中type确定信号的C++识别标志,类型可以是Python类型或C++类型名称的字符串,也可以是类型的一组列表,在列表情况下,每一项定义了不同重载方法,第一项为默认值。Name是信号的名称,如果省略则使用属性的类的名称,这只能作为一个关键字参数。
槽函数(slots)的设置是整个GUI的核心,基于Python面向对象的优势,我们可以调用各种父类,父类方法,自定义类,自定义方法等等作为槽函数与相应的信号相绑定,实现程序的重复利用,并且可以在后期较容易的扩展程序的功能,通过这种代码复用可以大大缩短虚拟仪器开发周期。
1.3 NumPy的数据处理
虚拟仪器一般都会带有显示屏幕,有的仪表显示数字,有的仪表则显示图形。通过软件的形式显示测量结果,一般需要对采集数据进行大量的数学运算,比如信号调幅、调频、滤波、数字信号处理等等,数据处理是虚拟仪器不可或缺的一部分,而且数据处理一般要求高效准确。NumPy相当于Matlab的Python版本,继承了Matlab的强大数据处理能力。NumPy提供两种基本的对象ndarray (N-dimensional arrayobie ct)和ufunc(universal function object)。ndarray是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。NumPy的核心是ndarray对象,它是一个封装好的,只能存储同个类型数据的多维数组。NumPy里,数组元素对数组元素的操作是用C写的,并预先编译好了以提高操作速度。NumPy不仅能保证足够快速的计算处理,还继承了Python语言代码简洁的特性。比如需要对一个给定的多维数组x进行FFT变换,只需调用np.fft.fft(x)就可以得到变换的结果。
2 方案设计与验证
基于上述的讨论,设计完成了一个虚拟频谱分析仪,该仪器的工作原理是通过设置仪器相关的参数对采集信号进行实时显示,而后通过滤波加窗等处理进行频域分析,得到幅值谱、相位谱、自相关函数、相干函数等的过程。仪器系统的处理流程如图2所示。
在仪器的波形显示部分,这里调用了Tabwidget控件,通过控制Tabchange()信号实现时域波形和频域波形的显示及切换。Tabwidget本身无法充当画布功能,也就是说不能直接在上面显示波形。因此,在Tabwidget的2个tab标签中分别嵌入一个QwtPlot控件,它可以提供一个二维的坐标图,让我们在上面绘制曲线、刻度值等我们想要表达的图形数据信息。调用setAxisTitlle(xBottom,String)方法和setAxisTitlle(vLeft,Str4ng)方法可以改变坐标轴横坐标及纵坐标的名称。同时还需要创建一个QwtPlotCurve用来控制QwtPlot上的曲线类型,它可以设定线的样式(实线或虚线)、线宽、颜色等。取得需要显示的波形数据后,通过setData()方法,先将数据给予QwtPlotCurve,然后由QwtPlot Curve通过调用attach()方法将波形绘制到QwtPlot上,最后通过QwtPlot类的repoh()方法将波形显示在GUI界面的Tabwidget控件中。
输入信号后,调用combobox控件的GetWindowText()方法取得采样频率,采样点数等参数信息,通过绑定"开始采样"的"clicked()"信号触发相关槽函数将波形显示在窗口上。这里放置了3个RadioButton,并把他们嵌入到Gmup Box里作为一个整体,通过他们的Checked属性,获取相应窗函数信息对信号进行加窗处理,分析。
仪器界面的效果图如图3所示。
3 结束语
Python是一门年轻、开源、充满活力的脚本编程语言。文中以Python为核心,结合PYQT把面向对象思想应用于虚拟仪器开发,使用户可以根据自身需求方便地修改程序以增减仪器的系统功能或规模,而且可以充分实现程序的重复利用。用Python开发虚拟仪器层次清晰,周期短,代码易修改。在一定程度上比LabvIEW具有更大的优势,具有广泛的研究前景。
- 虚拟仪器:在开放架构基础上创建用户定义的测试系统(09-19)
- 什么是虚拟仪器?(10-23)
- 基于虚拟仪器技术的短波电台自动测试系统(10-23)
- 宽带多媒体网关测试方法研究(10-27)
- 采用模块化仪器,对新兴音频和视频应用进行测试(02-19)
- 基于虚拟仪器技术的航空机载电子设备自动测试系统(03-03)