2. 中国科学院国家天文台, 北京 100012;
3. 中国科学院云南天文台, 云南昆明 650011
2.National Astronomical Observatories, Chinese Academy of Sciences, Beijing 100012, China;
3.Yunnan Observatories, Chinese Academy of Sciences, Kunming 650011, China
为了推动太阳射电观测技术的发展,由我国天文学家提出明安图超宽频射电日像仪(MUSER,原名为中国射电频谱日像仪CSRH),可以在厘米-分米波段上对太阳同时进行高空间、高时间和高频率分辨率观测,以更好地研究太阳的动力学性质[1]。MUSER是国家天文台明安图观测站的重要组成部分[2],分为两个综合孔径阵列。第1期MUSER-I低频阵(0.4~2 GHz)由40面4.5 m天线成,在64个频率上成像;第2期MUSER-Ⅱ高频阵(2~15 GHz)由60面2 m天线组成,在528个频率上成像。
MUSER系统包括若干子系统,如数据采集系统、数据处理系统、观测状态实时监视系统和数据可视化展现系统等。数据采集系统对天线接收的射频信号经过模数转换后得到的数据进行采集,然后发送至数据处理系统。数据处理系统对数据进行预处理后,可进一步生成脏图,进行洁化,也可以根据需要保存为UVFITS或FITS-IDI等文件格式[3]。
随着MUSER硬件建设的完成,设计实现直观的观测状态监视与观测数据可视化展现系统成为当前的重要工作之一。通过快速图形化展现让观测人员随时直观地、方便地监控观测数据和仪器状态,对保障观测人员快速掌握望远镜工作状况与观测结果有明显的价值。
1 图形界面技术分析与选型微软公司的Windows操作系统,以其直观的用户界面,友好的人机交互方式,一直是我国应用最为广泛的操作系统。我国很多望远镜系统,在实现望远镜控制、实时仪器状态显示等功能时,都基于Windows操作系统。最为典型的如云南天文台1 m望远镜,澄江红外太阳望远镜等。主要原因在于Windows开发工具完整,编程相对简单,以Visual C++为代表的开发平台在天文领域有广泛的应用。
相比而言,国外类似的系统,其主要控制与显示环境均采用LINUX操作系统,通过X-WINDOW实现显示。如法国南茜与日本野边山的射电太阳日像仪系统。但是,由于X-WINDOW开发难度较大,国内天文软件一般都回避在X-WINDOW上进行开发。X-WINDOW是采用面向对象的思想,用C语言开发的一个工业标准图形用户界面软件系统,由XLIB和XToolkit工具箱组成。在开发中,需要全面掌握XLIB中的底层函数以及XToolkit工具箱,虽然XToolkit提供了封装很好的高级函数库和对象元集合,但整体来看,开发与调试的工作量都非常大[4]。
随着软件技术的发展,涌现了一些新的用户界面开发手段,这为天文望远镜前端的观测数据进行图形化实现提供了多种可能的选择,其中之一就是QT开发框架。QT是1991年发展起来的一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供了建立图形用户界面所需要的函数库。QT很容易扩展,并且允许真正地面向组件编程。基本上,QT同X-WINDOW上的Motif、Openwin、GTK等图形界面库和Windows平台上的MFC、OWL、VCL、ATL同类型。但QT是一个跨平台的C++ GUI应用构架,Linux中的KDE桌面环境就是建立在QT库的基础上。
显然,QT框架的出现,为天文望远镜的实时图形化展现提供了更好的支持。一方面,QT框架可以在不同的操作系统下运行,这意味着在天文望远镜软件系统开发中,可以不受具体操作系统的制约;另一方面,采用QT技术可以避免学习较难的MFC和XLIB编程,降低了学习曲线,加快了开发进程。
2 基于QT的多屏显示技术通常一台计算机只接一个显示器,通过平铺窗口的方法实现多幅图像同时显示。随着硬件成本的降低,为扩展显示区域,目前最常见的是多屏显示技术,即一台计算机接多个显示器以扩展显示桌面。该技术也被称作多监视器技术、多头技术或双头显示技术等[5]。
目前在Linux环境下的多屏幕显示技术,主流采用Linux自带的Xinerama扩展技术[6]。该技术能实现Linux环境的多屏显示,但是需要修改多屏配置文件并重新启动机器实现,极为繁琐。相比Linux自带的Xinerama扩展技术,Qt图形图像库提供了一套用以实现多屏显示的应用程序编程接口(Application Programming Interface,API),通过调用应用程序编程接口即可轻松实现Linux下的多屏显示而不必繁琐地像Xinerama扩展技术那样修改配置文件。
Qt多屏显示原理见图 1,计算机接入多个显示屏以后,将这些显示屏的物理显示空间并集起来成为一个虚拟显示屏。其中,主显示屏为Linux
|
| 图 1 Qt多屏显示原理 Fig. 1 An illustration of the the principle of the Multi-Monitor Display technique based on the Qt |
系统启动时显示桌面的显示器,其它显示屏依次设置名称为从显示屏1、从显示屏2和从显示屏3在虚拟显示屏中。虚拟显示屏坐标原点(0,0)位于主显屏左上角,其它从显示屏依位置不同相对于坐标原点作相应的坐标平移。MUSER中选用的显示屏是三星液晶显示屏,分辨率为1920 × 1080,因此虚拟显示屏的分辨率为7680 × 1080,在整个虚拟屏中主显示屏的坐标为(0,0),从显示屏1的坐标为(1920,0),从显示屏2和从显示屏3的坐标分别为(3840,0)、(5760,0)。
Qt多屏显示应用程序开发时面对的是虚拟显示屏。程序实现时利用Qt库中QApplication对象提供的desktop()方法获取虚拟显示屏。显示屏只有一个时,虚拟显示屏的大小即为所添加显示屏的大小,有多个显示屏时,虚拟显示屏的大小为所有显示屏的并集[7]。通过将MUSER需要进行可视化图形展现的多个图像指定显示到虚拟显示屏中对应各个显示屏的坐标位置上即可实现观测数据可视化图像多屏显示。
3 系统需求分析MUSER观测数据的实时展现是监视系统的关键组成部分,用以实现对低频阵与高频阵观测数据的实时展现,总体框架见图 2。观测数据的实时展现包括4部分:互相关图、自相关图、脏图、设备状态图。
|
| 图 2 MUSER项目总体框架图 Fig. 2 A block diagram showing the framework of the MUSER |
为了有效地对观测数据进行实时监控,由数据处理系统定时处理完成的数据通过网络发送到数据监控系统,数据监控系统再通过图形化的方式将数据进行展现。根据观测的要求,在一定的间隔时间内(如低频阵间隔为5 s,高频阵为1 min)可以显示低频阵64个频率的观测数据以及高频阵528个频率的观测数据。实现时,为尽可能降低硬件开销,采用一机多屏的显示模式,即一台机器同时接4个显示器。
4 多屏显示实现 4.1 硬件支持MUSER项目采用的显示服务器安装了Nvidia NVS440显卡,Nvidia NVS440显卡支持两个显示输出口,每个输出口可外接2个显示屏,共可外接4个显示屏。
4.2 多屏配置服务器安装的操作系统为CentOS Linux,版本为6.5。该操作系统支持图形化界面操作,可通过图形化界面在Nvidia X Server Setting的X Server Display Configuration选项中对Nvidia NVS440显卡进行多屏配置。外接显示屏数量会显示在X Server Display Configuration中的display选项中,默认情况下显示屏是关闭的,display选项不展现显示屏的信息,通过在display选项中选定显示屏选择enable选项打开显示屏,可展现显示屏的分辨率和大小等信息。在display选项中拖动显示屏的位置可以设定外接显示屏在虚拟显示屏中的位置。
4.3 编程实现QT提供的QtGui库中QApplictaion对象提供了一个desktop()方法,通过该方法可以获取一个虚拟显示屏对象。该对象封装了许多方法,其中numScreens()方法可获取外接显示屏的数量,primaryScreen()方法可获取主显示屏在虚拟显示屏中的索引号。在虚拟显示屏中默认的主显示屏的索引号为0,其余从显示屏索引号依次在虚拟显示屏中的相对主显示屏索引号从左往右递增。此外,虚拟显示屏对象还提供了用以获取虚拟显示屏中指定索引号的外接显示屏以及外接显示屏物理信息的方法screen(screenIndex)和screenGeometry(screenIndex),其中参数screenIndex为外接显示屏在虚拟显示屏中的索引号。
编码实现时,通过QApplictaion对象提供的desktop()方法创建一个虚拟显示屏对象dtop。调用dtop对象中的primaryScreen()方法获取主显示屏索引号,调用screenGeometry(screenIndex)方法获取虚拟显示屏中索引号为screenIndex的外接显示屏的物理信息,如分辨率,该显示屏在虚拟显示屏中的位置等,将其保存到一个列表screenList[]中。创建基于QtGui.QMainWindow的应用程序,设置该应用程序显示窗口大小为列表screenList[screenIndex]中索引号screenIndex的显示屏的分辨率。接着使用dtop对象的screen(screenIndex)方法获取虚拟显示屏中索引号为screenIndex的显示屏,并获取该显示屏的窗口部件QWidget对象。将创建的窗口应用程序添加到该QWidget对象中,通过show()方法显示。以同样的方法创建基于显示屏数量的QtGui.QMainWindow的应用程序,即可实现多屏显示。实现多屏显示的关键代码如下:
|
import sys from PyQt4 import QtGui,QtCore import window as win; #QtGui.QMainWindow应用程序 if__name__==′__main__′: app=QtGui.QApplication(sys.argv) dtop=QtGui.QApplication.desktop(); #获取虚拟显示屏对象dtop screenList=[]; #显示屏信息列表 windowList=[]; #创建应用程序列表 screenCount=dtop.numScreens(); #获取外接显示屏数量 screenPrim=dtop.primaryScreen(); #获取主显示屏 for i in range(screenCount): screen=screenData(); #自定义类,用以封装显示屏信息 screen.setScreenNum(i); screen.rect=dtop.screenGeometry(screenPrim+i); #获取显示屏的信息 screenList.append(screen); #将显示屏信息保存到列表 for i in range(screenCount): window=win.MainWindow(imageType[i]); #创建QtGui.QMainWindow应用程序 #imageType为自定义图像类型列表 window.resize(screenList[i].rect.width(),screenList[i].rect.height()); #设置该应用程序窗口大小 windowList.append(window); #将应用程序保存到列表 for i in range(screenCount): widget=dtop.screen(i); #获取显示屏的QWidegt对象 layout=QtGui.QGridLayout(); layout.addWidget(windowList[i]); widget.setLayout(layout); #将应用程序添加到QWidegt对象 windowList[i].show(); #将应用程序显示在显示屏 sys.exit(app.exec_()) |
在MUSER中,为了直观地判断观测数据,参考日本野边山射电日像仪系统的方法,设计实现了两种图形显示方式,分别监控可见度数据的互相关数据与自相关数据,并通过多屏显示方式将自相关数据和互相关数据显示出来。通过互相关数据,可以直观地查看各基线的情况;自相关图可以直观地显示各个天线数据接收的好坏。
5.1 自相关与互相关图互相关图结构设计如图 3,X轴与Y轴均表示天线,图的左下角表示幅值,右上角表示相位值。自相关图结构设计如图 4,X轴表示天线,Y轴表示功率值大小。
|
| 图 3 互相关图结构示意图 Fig. 3 An illustration of the structure of a cross-correlation diagram, which shows cross correlations between signals detected by different antennas |
|
| 图 4 自相关图结构示意图 Fig. 4 An illustration of the structure of an auto-correlation diagram, which shows auto-correlations of signals detected by single antennas |
根据设计的结构以及相关计算方法通过QtGui库绘画类对象QImag和QPixmap绘制自相关与互相关图如图 5、图 6。在互相关图中一个互相关点的颜色从黑色到白色范围内变化,以表示基线的好坏(极值黑色表示正常,极值白色表示损坏)。自相关图的功率值以柱状形式表示,图中每一根柱状条长度表示一根天线的功率值,柱状条越高功率值越大。
|
| 图 5 互相关图 Fig. 5 An example for cross-correlation diagrams in actual observation (cf. Fig.3) |
|
| 图 6 自相关图 Fig. 6 An example for auto-correlation diagrams in actual observation (cf. Fig.4) |
MUSER数据监视系统通过一种消息中间件技术,即ZeroMQ(http://www.zeromq.org)接收来自数据处理系统发送的可见度数据。可见度数据以数据帧形式发送,一帧可见度数据有16个通道,一个通道可生成一张自相关图或者互相关图,一帧可见度数据可生成16张自相关图或者互相关图。一帧可见度数据的自相关图或者互相关图以窗口的形式在屏幕上显示,利用多线程同时创建显示自相关和互相关图的显示窗口应用程序即实现多屏显示。
5.3 多屏显示效果与性能分析以互相关和自相关图为例进行实验得到多屏显示效果如图 7。采用QT技术实现MUSER-I观测数据多屏的图形化显示能在3 s内将一帧可见度数据相关计算并通过多屏显示,远远小于数据处理系统每5 s发送一帧数据的时间间隔[8]。一帧可见度数据包含16个通道,即能在3 s实现16张相关图的显示,每一张相关图绘制并显示的时间为0.187 5 s,满足MUSER数据监视系统实时性要求。同时,每一帧数据生成的16幅自相关图和互相关图能实时地在多屏上显示,方便观测人员直观地对数据进行分析和判断。
|
| 图 7 多屏显示 Fig. 7 A picture of the Multi-Monitor Display |
本文详细描述了基于QT技术对MUSER获得的观测数据进行多屏图形化展现的方法。显然,利用QT能实时有效地绘制可见度数据的相关图并直观地通过多屏显示,实验结果表明,QT框架效率较高,绘制一帧可见度数据16张相关图像并在多屏上显示只需要3 s左右,能够满足MUSER监视系统实时性要求,系统原型已经在明安图观测站投入运行,取得了良好的应用效果。
此外,QT的开发过程较为简单,完成的代码可以在不同的操作系统中执行,并得到同样的显示效果,这有利于望远镜监控系统的开发。
| [1] | 颜毅华, 张坚, 陈志军, 等. 关于太阳厘米-分米波段频谱日像仪研究进展[J]. 天文研究与技术——国家天文台台刊, 2006, 3(2): 91-98. Yan Yihua, Zhang Jian, Chen Zhijun, et al. Progress on Chinese radioheliograph in cm-dm wavebands[J]. Astronomical Research & Technology——Publications of National Astronomical Observatories of China, 2006, 3(2): 91-98. |
| [2] | 高姣姣, 王锋, 戴伟, 等. 面向射电日像仪的随机组结构剖析与文件设计[J]. 天文研究与技术——国家天文台台刊, 2013, 10(4): 365-371. Gao Jiaojiao, Wang Feng, Dai Wei, et al. An analysis of the radom-group data format and a design of the data file structure for a solar radio heligraph[J]. Astronomical Research & Technology——Publications of National Astronomical Observatories of China, 2013, 10(4): 365-371. |
| [3] | 梅盈, 刘东浩, 王锋, 等. 中国频谱射电日像仪FITS-IDI文件格式研究[J]. 天文研究与技术——国家天文台台刊, 2014, 11(4): 388-395. Mei Ying, Liu Donghao, Wang Feng, et al. A study of the FITS-IDI format for the Chinese Spectral Radio Heligraph[J]. Astronomical Research & Technology——Publications of National Astronomical Observatories of China, 2014, 11(4): 388-395. |
| [4] | 邵才瑞, 张福明, 李洪奇. 用C++开发X-Window/Motif用户界面的OOP技术[J]. 计算机工程, 2000, 26(5): 87-89. Shao Caifu, Zhang Fuming, Li Hongqi. The OOP techniques for designing X-Window/Motif user interface with C++[J]. Computer Engineering, 2000, 26(5): 87-89. |
| [5] | 林刚, 张锋, 张登福. 多屏显示技术及其在图像处理系统中的应用[J]. 计算机应用研究, 2002(4): 154-155. Lin Gang, Zhang Feng, Zhang Dengfu. The technique of multi-monitor and its application in image processing system[J]. Application Research of Computers, 2002(4): 154-155. |
| [6] | 霍明旭,丁扣宝. Linux下进行带Xinerama扩展的多屏显示的应用与开发[J]. 江南大学学报: 自然科学版, 2006, 5(2): 166-170. Huo Mingxu, Ding Koubao. The application development of the multihead display with Xinerama under Linux[J]. Journal of Southern Yangtze University: Natural Science Edition, 2006, 5(2): 166-170. |
| [7] | Mark S. Rapid GUI programming with Python and Qt (prentice hall open source software development) [M]. London: Prentice Hall, 2007. |
| [8] | 马荣庭, 刘飞, 邓辉, 等. CSRH-I观测数据接收子系统的设计与实现[J]. 天文研究与技术, 2015, 12(1): 63-69. Ma Rongting, Liu Fei, Deng Hui, et al. The design and implementation of a data-receiving subsystem of the CSRH-I[J]. Astronomical Research & Technology, 2015, 12(1): 63-69. |



