江弘杰 贾维敏

关键词: BB60C; 虚拟仪器; IQ数据采集; 存储方案; 函数库; 双缓冲技术

中图分类号: TN919?34; TP274                  文献标识码: A                   文章编号: 1004?373X(2019)02?0147?03

Design of IQ data acquisition and storage system based on BB60C

JIANG Hongjie, JIA Weimin

(Rocket Force University of Engineering, Xian 710025, China)

Abstract: An IQ data acquisition and storage scheme is designed taking the BB60C product of Signal Hound Company as the main hardware, so as to design a virtual instrument with high performance and broad application. Data acquisition relies on the API function library of the BB60C. Data storage relies on the SQL database. The double buffering technology is adopted to conduct batch data plotting by means of the Visual Studio control. A large quantity of data can be obtained conveniently and rapidly by means of the API function library, which has a high accuracy. The call of the SQL database can ensure the storage rate of the data. Some notes collected during the long?term development process, technologies that can be adopted, and part of core codes attached can facilitate the latter deep development and utilization of the module.

Keywords: BB60C; virtual instrument; IQ data acquisition; storage scheme; function library; double buffering technology

随着信息科学的不断发展,国内外不断涌现出各种各样的仪器用于数字信号处理。但是主流还是以虚拟仪器为主,厂家只是负责将硬件做得尽可能完善,具体功能交由程序员完成。而当前在该领域较为领先的是Signal Hound公司的BB60C产品,该产品具备数据处理精度高、开发域广、便携等优点,非常适用于工程中项目的开发[1?5]。

1  硬件构成及注意事项

鉴于精度要求,本文采用Signal Hound公司的BB60C产品作为硬件的主要模块,该模块相比于同类产品,主要有以下几点特性:

1) 采用USB 3.0连接,既能快速获得大量IQ数据[6],也能满足供电要求,无需单独供电;

2) 对应丰富易用的应用程序编程接口(API),便于开发员尽快熟悉;

3) 后续还可利用该模块进行频谱分析或频谱监测。

在搭建硬件平台时,首先在自己的电脑上安装对应系统的驱动,目前该公司提供的最新的驱动为CDM v2.12.00 WHQL Certified。要求计算机操作系统为Windows 7/8/10,以保证高速大量数据(高达每秒4×107个IQ样本)的处理速度。处理器要求至少为第三代或更新的英特尔i系列双/四核处理器。计算机自带USB 3.0接口。此外,若要进行存储操作,提前确保内存空间足够,避免发生不必要的错误。

2  软件设计

作为虚拟仪器,在某种程度上,软件的设计就能够决定整套系统的性能,因为硬件在生产定型之后,功能已经固化,而软件的设计才是产品最终的衡量标准[7?9]。

2.1  Visual C#开发环境设置

鉴于C#是微软主推的面向对象的语言,且据StackOverFlow的年度调查显示,C#语言的受欢迎程度仅次于Java语言,这里就选择C#进行软件开发。首先,为使软件可以调用API函数库,需要C#连接Signal Hound提供的动态链接库(bb_api.dll)和API库(bb_api.lib)。具体方法是:将提供的bb_api.dll、bb_api.lib以及ftd2xx.dll链接库拷贝至项目工程的bin子文件夹下的Debug子文件夹中。然后需要添加API头文件(bb_api.h),该过程需要在C#窗体应用程序中进行,在解决方案资源管理器中右击项目工程,选择添加现有项,然后将bb_api.h选中即可。

2.2  数据库存储与CSV文件

对于数据存储的操作方式有许多,这里主要介绍SQL,即Structured Query Language(结构化查询语言)。SQL是专门为数据库而建立的操作命令集,因此,它的功能强大、简单易学且使用方便,此外,现在几乎所有的数据库均支持SQL[10?12]。下面介绍的是Visual Studio(VS)连接SQL数据库并存储数据的过程。首先,需要下载安装数据库,然后以Windows身份验证方式登录SQL Server Management Studio,在添加个人登录名并在配置管理器中启用TCP/IP协议后,即可通过VS软件在数据库中新建个人的数据库并进行后续的存储操作。在这些动作完成后,可以通过打开SQL里面的表格,直观地看到操作后表格的内容。主要的存储操作包括:将SqlConnection类实例化后用open语句连接自己创建的数据库;分别将“create table”与“alter table”语句,写入SqlCommand命令字符串,以此实现表格的创建与数据的插入动作;鉴于每次都是批量数据的插入,调用SqlBulkCopy类,一次插入一个数组;存储完成后,关闭与数据库的连接,释放占用资源。

此外,若是存储次数不高的话,完全可以通过StreamWriter语句,将数据保存为.CSV文件(逗号分隔值文件格式)。该文件是以纯文本形式存储表格数据,且对数据量没用要求,因此对于存储操作或者后期查看数据都非常方便。

2.3  双缓冲技术与Measurement Studio

在采集完数据后,需要将数据以表格的形式表现在窗体内。最简单的操作就是将工具箱内的PictureBox直接拉到界面上,然后在PictureBox上按比例画坐标轴并绘图。由于每次绘制数据多且绘制次数频繁,往往会造成闪烁现象,这时就需要用到双缓冲技术,即把图形先绘制到缓冲区,然后一次性绘制到PictureBox上。具体操作分为5步:引用BufferedGraphicsContext类并实例化;调用BufferedGraphicsContext.Allocate方法创建BufferedGraphics类的实例;通过设置BufferedGraphics.Graphics属性,将图形绘制到图形缓冲区;缓冲完成后,调用BufferedGraphics.Render方法将缓冲区的内容绘制到PictureBox上;绘图完成后,对BufferedGraphics的实例对象调用Dispose方法,以此释放系统资源[13?15]。

上述方法思路简单,但是绘图操作较为复杂,在实践过程中,还可尝试使用NI公司专门开发的Measurement Studio编程平台。该工具可以通过插入的方式内嵌到VS软件中,然后通过在工具箱内以添加选项卡的方式,将图表插入窗体,具体的使用方法可通过例程学习熟悉,这里就不再多做介绍。

2.4  多线程数据采集与存储软件设计

IQ数据的实时高速获取与存储,一方面要求系统不停获取由API函数输出的数据;另一方面又要尽快将数据以图像的形式展现在界面上,或者将数据存储到数据库中,这些动作必须同时进行,否则会造成数据溢出丢失。为此,利用Thread语句定义多个线程,各线程相互之间互相配合,流程见图1。

图1中,主线程IQ_data_process用于获取IQ数据,IQ_paint_process线程用于每次获取数据后立刻将其绘制到界面上,IQ_save_process线程用于存储模式下,数据及时存储于数据库中,鉴于绘图线程与存储线程占用过多内存,建议两者不要同时进行。

2.5  软件实现

鉴于篇幅所限,这里给出程序中的部分核心代码。

1) 调用bb_api.h头文件,获取IQ数据

status = bb_api.bbGetIQUnpacked(id, iqData, iqCount, triggers, triggerCount, purge, ref dataRemaining, ref sampleLoss, ref sec, ref nano);                         //其中iqData为所需的IQ数组

2) 数据库建表完成后,批量存储数据

using(SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(group[0], SqlBulkCopyOptions.UseInternalTransaction))

//group[0]为连接SQL字符串

{      try      {

sqlBulkCopy.DestinationTableName = group[1];

//group[1]为表名

sqlBulkCopy.BatchSize = batchSize;   //一次事务插入的行数

for (int i = 0; i < sourceDataTable.Columns.Count; i++)

{

sqlBulkCopy.ColumnMappings.Add(sourceDataTable.Columns[i].ColumnName, sourceDataTable.Columns[i].ColumnName);

//将数据先写入sqlBulkCopy中

}          sqlBulkCopy.WriteToServer(sourceDataTable);

//将数据写入SQL服务器

}       catch (Exception ex)

{

MessageBox.Show(ex.ToString());           //异常抛出

}     }

3) 双缓冲技术绘图

BufferedGraphicsContext current = BufferedGraphicsManager.Current;        //获得对 BufferedGraphicsContext 类的实例的引用

BufferedGraphics bg;

bg = current.Allocate(pictureBox1.CreateGraphics(), pictureBox1.DisplayRectangle);         //创建 BufferedGraphics 类的实例

Graphics g = bg.Graphics;         //将图形绘制到图形缓冲区

PaintImage(g);                                                 //绘图

bg.Render(pictureBox1.CreateGraphics());

//完成图形缓冲区中的绘制后,将缓冲区的内容呈现到

指定的绘图图面pictureBox1

bg.Dispose();    //完成呈现图形之后,对实例释放系统资源

3  性能评估

为了验证该系统的性能,对数据采集、数据库存储以及画图显示功能进行了测试和分析。在测试中,使用自行设计的信号源(简单的锯齿波信号),模拟硬件接收到的信号。将该信号分别接入示波器与设计的软件后,发现软件显示的图像与示波器显示的图像并无差异,证明数据采集以及信号显示并无问题。而后,在一段时间内(30 s内),打开数据库存储线程,同时对示波器进行录像,数据库存储完成后,调用存储的数据进行画图,并与录像进行对比,结果仍一样。由此,可以判定该系统在IQ数据采集与存储方面可以正常工作。但是由于缺少大存储介质,无法验证对于长时间的数据存储是否会发生故障。

4  结  语

本文介绍的数据采集与存储方案主要是基于BB60C硬件的软件开发方案,在达到硬件每秒处理产生4×107个IQ样本的基本要求的基础上,完成数据的显示与存储功能,后期经FFT变换,即可用于频谱分析。文中对于开发过程进行详细的描述,并给出了核心代码,便于后续开发。

参考文献

[1] 杨宇宸,向海生.一种高速数据采集系统的设计与实现[J].雷达科学与技术,2016,14(5):526?530.

YANG Yuchen, XIANG Haisheng. Design and implementation of high speed data acquisition system [J]. Radar science and technology, 2016, 14(5): 526?530.

[2] 连杰,田小超.基于STM32的高精度、大容量、多通道同步数据采集存储系统的设计[J].电子制作,2015(7):28.

LIAN Jie, TIAN Xiaochao. Design of high precision, large capacity and multi?channel synchronous data acquisition and storage system based on STM32 [J]. Practical electronics, 2015(7): 28.

[3] 韦伟.基于FPGA的高速数据采集与存储设备的实现[D].西安:西安电子科技大学,2014.

WEI Wei. Implementation of high speed data acquisition and storage equipment based on FPGA [D]. Xian: Xidian University, 2014.

[4] 王杨云逗,李斌,亓亮.基于单片机的高精度海量数据采集与存储系统[J].现代电子技术,2013,36(8):128?129.

WANG Yangyundou, LI Bin, QI Liang. High accuracy mass data acquisition and storage system based on single chip microcomputer [J]. Modern electronics technique, 2013, 36(8): 128?129.

[5] 汪志刚.大容量数据采集存储系统的研究与实现[D].成都:电子科技大学,2010.

WANG Zhigang. Research and implementation of large capacity data acquisition and storage system [D]. Chengdu: University of Electronic Science and Technology of China, 2010.

[6] National Instruments. What is I/Q data? [EB/OL]. [2018?09?12]. http://www.ni.com/tutorial/4805/en/.

[7] 李欣,谢宏.虚拟仪器技术在通信原理教学中的应用[J].实验室研究与探索,2014,33(5):155?159.

LI Xin, XIE Hong. Application of virtual instrument technology in communication principle teaching [J]. Research and exploration in laboratory, 2014, 33(5): 155?159.

[8] 王超,李可,杜奔新.虚拟仪器技术在实验室的应用研究[J].实验技术与管理,2013,30(12):105?107.

WANG Chao, LI Ke, DU Benxin. Research on application of virtual instrument technology in laboratories [J]. Experimental technology and management, 2013, 30(12): 105?107.

[9] 伍星华,王旭.国内虚拟仪器技术的应用研究现状及展望[J].现代科学仪器,2011(4):112?116.

WU Xinghua, WANG Xu. Present situation and prospect of application research on domestic virtual instrument technology [J]. Modern scientific instruments, 2011(4): 112?116.

[10] 王岩.基于SQL数据库的性能优化探讨[J].通讯世界,2015(22):221.

WANG Yan. Research on performance optimization based on SQL database [J]. Telecom world, 2015(22): 221.

[11] 余鹏.基于SQL数据库的性能优化研究[J].中国科技信息,2014(2):76?77.

YU Peng. Research on performance optimization based on SQL database [J]. Chinese science and technology information, 2014(2): 76?77.

[12] 肖念.浅析SQL数据库的设计[J].计算机光盘软件与应用,2013,16(6):201?202.

XIAO Nian. Analysis of the design of SQL database [J]. Computer CD software and applications, 2013, 16(6): 201?202.

[13] 江建国,温少营,张瑞楠.基于双缓冲技术的GDI+无闪烁绘图[J].计算机应用,2012,32(z2):136?139.

JIANG Jianguo, WEN Shaoying, ZHANG Ruinan. Flicker?free GDI+ drawing based on double buffering [J]. Journal of computer applications, 2012, 32(S2): 136?139.

[14] 周建伙,顾申申.基于Visual C#和Measurement Studio混合编程的数据采集分析和绘图软件[J].工业控制计算机,2015,28(9):24?25.

ZHOU Jianhuo, GU Shenshen. Data collection and graphing software based on Visual C# and Measurement Studio [J]. Industrial control computer, 2015, 28(9): 24?25.

[15] 张兵,杨岳.基于Visual C#和Measurement Studio融合的虚拟示波器设计开发[J].企业技术开发,2010,29(1):6?7.

ZHANG Bing, YANG Yue. The virtual oscilloscope development based on the integration of Visual C# and Measurement Studio [J]. Technological development of enterprise, 2010, 29(1): 6?7.