APP下载

基于LabWindows/CVI的实时频谱分析仪

2014-03-22张惊雷

仪表技术与传感器 2014年9期
关键词:沃斯虚拟仪器分析仪

王 鑫,张惊雷

(天津市复杂控制理论及应用重点实验室,天津理工大学自动化学院 天津 300384)

0 引言

虚拟仪器技术开创了测控领域的新时代,它是在以计算机为核心的平台上,利用其强大的资源设计开发具有虚拟面板,测试任务由软件算法实现的一种计算机仪器系统。

LabWindows/CVI是一种基于ANSI C的虚拟仪器开发环境,它将C语言的强大功能与灵活的使用方法带入到测试、测量和智能仪器等工程领域[1]。由于LabWindows/CVI拥有功能强大的图形显示控件、丰富的信号分析函数库和良好的开发环境,因此非常适合开发信号分析相关的应用系统。设计采用LabWindows/CVI多线程技术,主线程用于显示面板和响应用户各种初始化操作,其他各线程用于数据采集、显示、滤波、幅频分析、数据管理等模块的操作。实验证明系统波形刷新速度快、参数准确,满足了对实时性和准确性要求。

1 硬件结构

实时频谱分析仪包括传感器、信号调理、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 软件设计

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);//释放内存,任务结束

4 结束语

文中在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.

猜你喜欢

沃斯虚拟仪器分析仪
Sievers分析仪(苏伊士)
一种用于深空探测的Chirp变换频谱分析仪设计与实现
安迪·高兹沃斯——塑造自然的艺术家
PCB 刻制机功能开发及在虚拟仪器实验室建设中的应用
量一量你的热爱
虚拟仪器及其在电工电子实验中的应用
一种基于虚拟仪器的电控柴油机实验台的设计
虚拟仪器技术在农业装备测控中的应用
全血细胞分析仪配套操作台使用体会
雨天