王 鑫,张惊雷
(天津市复杂控制理论及应用重点实验室,天津理工大学自动化学院 天津 300384)
虚拟仪器技术开创了测控领域的新时代,它是在以计算机为核心的平台上,利用其强大的资源设计开发具有虚拟面板,测试任务由软件算法实现的一种计算机仪器系统。
LabWindows/CVI是一种基于ANSI C的虚拟仪器开发环境,它将C语言的强大功能与灵活的使用方法带入到测试、测量和智能仪器等工程领域[1]。由于LabWindows/CVI拥有功能强大的图形显示控件、丰富的信号分析函数库和良好的开发环境,因此非常适合开发信号分析相关的应用系统。设计采用LabWindows/CVI多线程技术,主线程用于显示面板和响应用户各种初始化操作,其他各线程用于数据采集、显示、滤波、幅频分析、数据管理等模块的操作。实验证明系统波形刷新速度快、参数准确,满足了对实时性和准确性要求。
实时频谱分析仪包括传感器、信号调理、PCI-6221数据采集卡及装有LabWindows/CVI的计算机。系统方框图,如图1所示。传感器将测量对象的非电信号转换为电信号,经过信号调理模块达到合适的量程以满足PCI-6221数据采集卡的模拟输入要求。PCI-6221将输入的模拟电压经多通道A/D采集转换为离散的数字信号进入计算机开始运算处理。PCI-6221拥有16路16位AI通道,最高采样率250 kS/s,2路16位模拟输出 (833 kS/s),24路数字I/O线,32位计数器,关联 (Correlated)DIO (8条时钟线,1 MHz)。它是一款低价位多功能M系列数据采集(DAQ)板卡,经优化适用于该系统的应用。
图1 系统结构图
2.1多线程机制采集任务的实现
多线程机制数据采集任务分为用户界面控制、通道选择、数据采集和实时显示等。任务线程由基于LabWindows/CVI异步定时机制的多线程技术来实现,能够精确控制执行次线程回调函数的执行周期。以下将对其在LabWindows/CVI 2010版平台下的关键代码进行说明。
数据采集方案流程图如图2所示。
图2 数据采集方案流程图
程序开始之前首先要声明全局变量和宏定义。
static int timerid;//异步定时器句柄
static TaskHandlegTaskHandle=0;//采集任务句柄
static uInt32gNumChannels;//采集通道数
float64 *gData=NULL;//开辟数据存储空间
……//其他定义
然后开始执行通道设置程序。
NIDAQmx_NewPhysChanAICtrl(panelHandle,ChannelNum[i],1//获取通道信息
利用DAQmx提供的驱动库函数,创建模拟量采集任务。
DAQmxCreateTask("",&gTaskHandle);
DAQmxCreateAIVoltageChan(gTaskHandle,ChanV-alue[i],"",DAQmx_Val_Cfg_Default,-ampvalue,ampvalu-e,DAQmx_Val_Volts,NULL);
}//输入设置
DAQmxCfgSampClkTiming(gTaskHandle,"",rata,DAQmx_Val_Rising,DAQmx_Val_ContSamps,sampsPe-rChan);//采样率rata=10k Hz
DAQmxGetTaskAttribute(gTaskHandle,DAQmx_T-ask_NumChans,&gNumChannels);//获取通道数
DAQmxStartTask(gTaskHandle);//开始采集任务
DAQmxReadAnalogF64(gTaskHandle,sampsPerCh-an,1.0,DAQmx_Val_GroupByChannel,gData,sampsPerC-han,&numRead,0);//读取数据储存到数组gData.
2.2三步法巴特沃斯滤波器的软件实现
采用软件实现的数字滤波器主要有两种,无限冲击响应滤波器(IIR滤波器)和有限冲击响应滤波器(FIR滤波器)。IIR滤波器能更好的保留幅频特性,而FIR滤波器可以实现相位的不失真。根据以上特点比较,设计采用属于IIR滤波器的三步法巴特沃斯滤波器[2]。
在LabWindows/CVI中实现三步法巴特沃斯滤波器的代码如下:
IIRFilterPtr filterinformation;//定义滤波器系数结构体指针
filterinformation =AllocIIRFilterPtr (BANDPASS,order);//定义带通滤波器结构
然后在界面里通过设置滤波相关项目来定义滤波器具体参数,如图3左半部分中间位置所示。
图3 实时频谱分析仪界面
lowercutoff用于设置下限截止频率,highercutoff用于设置上限截止频率。filterinformation用于设置四种滤波器类型:
filterinformation =AllocIIRFilterPtr (Type,order);
Type里可以选择:LOWPASS低通滤波、HIGHPASS高通滤波、BANDPASS带通滤波、 BANDSTOP带阻滤波。滤波器阶数通过设置order来获得:
GetCtrlVal(panelHandle,PANEL_NUMERIC_ORDER,&order);
然后产生巴特沃斯滤波器系数:
Bw_CascadeCoef(wavepoint,lowercutoff,highercutoff,filterinformation);
然后对采集的gData数据进行滤波:
IIRCascadeFiltering(gData,wavepoint,filterinformation,gData);
最后释放滤波器结构,任务结束:
FreeIIRFilterPtr (filterinformation);
2.3基于离散傅里叶变换的频谱分析方法
信号的幅频分析[3]是用FFT将信号从时域波形转化到以频率f或ω频域波形为横坐标变量来描述信号的幅值、相位变化规律[4-5]。离散傅里叶变换(Discrete Fourier Transform,DFT)计算公式是
获得时域信号后,在LabWindows/CVI的信号分析库中可以用AutoPowerSpectrum函数获得信号的频谱图。计算公式是
频谱显示代码如下:
AutoPowerSpectrum(gData,wavepoint,(1/samprate),magnitude,&freqspace);
DeleteGraphPlot(panelHandle,PANEL_GRAPH,-1,VAL_IMMEDIATE_DRAW);
SetAxisRange(panelHandle,PANEL_GRAPH,VAL_NO_CHANGE,0.0,1.0,VAL_AUTOSCALE,0,5);//设置图谱显示类型
PlotWaveform (panelHandle,PANEL_GRAPH,magnitude,wavepoint/2,VAL_DOUBLE,1.0,0.0,0.0,freqspace,VAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_RED);//显示图谱
图3为频谱分析仪实时工作时的用户界面,左侧为参数设置,右侧对应实时显示在参数设定后的信号波形。
2.4数据储存与回放
在对原始信号进行实时分析时,为了将来完整、详尽的分析,需要对数据进行储存与回放,代码如下。
数据存储程序:
ArrayToFile("data.xls",wavesignal,VAL_DOUBLE,numRead*gNumChannels,gNumChannels,VAL_GROUPS_TOGETHER,VAL_GROUPS_AS_COLUMNS,VAL_SEP_BY_TAB,10,VAL_ASCII,VAL_APPEND);
ProcessSystemEvents();
free (wavesignal);
MessagePopup ("保存"," OK");
数据回放:
FileToArray("data.xls",savesignal,VAL_DOUBLE,numRead*gNumChannels,gNumChannels,VAL_GROUPS_TOGETHER,VAL_GROUPS_AS_COLUMNS,VAL_ASCII);
DeleteGraphPlot(panelHandle,PANEL_GRAPH,-1,VAL_IMMEDIATE_DRAW);//刷新
PlotY(panelHandle,PANEL_GRAPH,savesignal,wavepoint,VAL_DOUBLE,VAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_BLUE);//显示
free (savesignal);//释放内存,任务结束
文中在LabWindows/CVI 2010虚拟仪器软件平台下,利用专用信号分析函数库,开发了一种基于虚拟仪器的实时频谱分析仪。由于涉及硬件底层驱动开发,运用基于C语言的LabWindows/CVI要比其他开发平台执行效率更高、功能开发更灵活。该设计经过实验验证,数据更新速度快,频谱数据显示稳定准确,在测控领域具有显著的实际意义。
参考文献:
[1]谭秀萍,吴晓辉,范蟠果,等.LabWindows/CVI多线程技术在电负载系统中的应用.测控技术,2011(8):79-82.
[2]程乃平,席有猷,赵阳.基于Labwindows/CVI的虚拟频谱分析仪设计.电子测量技术,2009(7):109-111.
[3]邢志彩,王灵莉,王旭柱.基于LabWindows/CVI的傅里叶变换光谱测量的数据采集系统.微型机与应用,2011(10):1-4.
[4]马青亮,周伦彬,李振娜.基于LabWindows/CVI的信号分析仪的设计.中国测试,2009(6):50-53.
[5]胡宁,徐兵.基于LabVIEW的频谱分析仪的设计.计算机测量与控制,2013(5):1404-1407.