Design of the Virtual Signal Analyzer on LabWindows/CVI Platform
张 扬 肖世德
(西南交通大学机械工程学院,四川 成都 610031)
LabWindows/CVI平台下虚拟信号分析仪的设计
Design of the Virtual Signal Analyzer on LabWindows/CVI Platform
张扬肖世德
(西南交通大学机械工程学院,四川 成都610031)
摘要:针对目前传统信号分析仪功能单一、修改不易、使用不便等缺点,以LabWindows/CVI为平台,研究开发了一种多功能虚拟信号分析仪。设计时把人机交互界面的响应处理和信号采集与显示分开成两个线程运行,大大缩短用户操作的等待时间,提高了系统运行效率。该信号分析仪具备伪随机信号产生、双通道信号采集、时域分析、频谱分析、互相关函数计算等功能。实验测试表明,该虚拟信号分析仪基本功能完全实现,信号分析结果正确,说明了推广发展虚拟仪器的可行性和必要性。
关键词:虚拟仪器集成电路通信C语言信号处理时域频域测量仪器滤波干扰傅里叶变换
Abstract:Aiming at the disadvantages of traditional single analyzers, e.g., unitary function, uneasy to revise, and inconvenient to use, with LabWindows/CVI as the platform, the multi-function virtual signal analyzer has been researched and developed. In the design, the response processing of man machine interactive interface and signal acquisition and display are separated into two threads for running, thus the waiting time of user operation is shortened, and the system operating efficiency is enhanced. The signal analyzer offers multiple functions, including random signal generation, dual-channel signal acquisition, time domain analysis, spectral analysis, correlation function calculation, etc. The experimental tests show that the virtual signal analyzer fully realizes the basic functions, the results of signal analysis are correct, thus the feasibility and necessity of developing virtual instruments are illustrated.
Keywords:Virtual instrumentIntegrated circuitCommunicationC languageSignal processingTime domainFrequency domain
Measuring instrumentFilteringInterferenceFourier transform
0引言
虚拟仪器技术是伴随着集成电路、计算机技术和通信技术的迅速发展而产生的。它通过软件将仪器与计算机有机地融合为一体,从而把计算机强大的数据计算处理能力和仪器硬件的测量、控制能力结合在一起,大大减少了仪器硬件成本,并且显著缩小了仪器体积[1]。与传统的固定仪器相比,用户可以根据需求,灵活地对虚拟仪器进行功能设计、维护和系统升级。
目前能够用于虚拟仪器系统开发且比较成熟的开发工具可以分为两类:第一类是通用的可视化编程软件,主要有Microsoft公司的Visual C++和Visual Basic等;第二类是专用于虚拟仪器开发的编程软件,主要有NI公司图形化的编程环境LabVIEW和文本语言的编程环境LabWindows/CVI,以及NI公司和Microsoft合作开发的Measurement Studio等[2-8]。
多功能虚拟信号分析仪设计所采用的LabWindows/CVI是以ANSIC为核心的交互式C语言开发平台,它将功能强大、使用灵活的C语言平台与用于数据采集分析和显示的测控专业工具有机地结合起来。利用集成化开发环境、交互式编程方法、函数面板和丰富的库函数大大增强C语言的功能,为C语言的开发设计人员编写检测系统、自动测试环境、数据采集系统、过程监控系统等应用软件提供了一个理想的软件开发环境。
1信号采集与处理的关键技术
信号处理是指对信号进行某种加工变换或运算(如滤波、变换、估计、识别等)。广义的信号处理可把信号分析也包括在内。信号处理包括时域和频域处理。时域处理中最典型的是波形分析,例如示波器就是一种最通用的波形分析和测量仪器。把信号从时域变换到频域进行分析和处理,可以获得更多的信息。
因此频域处理更为重要。信号处理主要是滤波,把信号中感兴趣的部分(有效信号)提取出来,抑制(削弱或滤除)不感兴趣的部分(干扰或噪声)[5-6]。
1.1信号时域处理的关键技术
时域分析是对信号的时域波形的分析,从记录的信号中提取各种有用的信息或将记录的信号转换成所需要的形式。通过不同的时域处理方法,可以确定实测波形的幅值和时间历程。通常时域分析包括信号参数测试(峰值、有效值、均值等)、自相关、微积分、抽取等分析算法。
1.1.1自相关分析
在测试结果的分析中,相关是一个非常重要的概念[3]。相关是指变量之间的线性关系。变量x、y之间相关程度可以用相关系数ρxy来表示:
(1)
式中:E为数学期望;μx、μy分别为x、y的均值;σx、σy分别为x、y的标准差。
设x(t)是某各态历经过程的一个记录样本(所谓各态历经过程是指样本的集合平均等于时间平均),x(t+τ)是x(t)时移τ后的样本。x(t)的自相关函数定义为:
(2)
设x(t)、x(t+τ)的相关系数为ρx(t)x(t+τ),简写作ρx(τ)。因为x(t+τ)、x(t)具有相同的均差和标准差,所以:
(3)
将式(3)的分母移项到等式的左边,就可以得到:
(4)
在实际测量中,只能得到信号x(t)的N个采样值x(n),所以必须通过这N个点采样值来估计信号的自相关函数r(m),计算:
(5)
由于只有N个值,因此对于每一个固定的延迟,可以利用的数据只有N-1-|m|个。根据式(5)则可得到实际计算中使用的算法为:
(6)
LabWindows/CVI所使用的计算公式与式(6)略有不同,LabWindows/CVI中自相关函数的计算公式为:
(7)
1.1.2互相关分析
两个随机信号x(t)和y(t)的互相关函数Rxy(τ)定义为:
(8)
由于:
(9)
因为|ρxy|≤1,故有μxμy-σxσy≤Rxy(τ)≤μxμy+σxσy。对于多数随机过程,若x(t)和y(t)之间没有同频率的周期成分,那么当时移τ很大时彼此无关,即ρxy(τ→∞)→0,Rxy(τ→∞)→μxμy。
互相关函数有重要的应用,它是在噪声背景下提取有用信息的一个非常有效的手段。设噪声信号的N个采样序列为x(n)、y(n),LabWindows/CVI中使用的互相关函数算法为:
(10)
1.2信号频域处理的关键技术
1.2.1 快速傅里叶变换(FFT)
对于离散时间周期信号,其傅里叶级数形式如下:
(11)
(12)
(13)
(14)
式(13)、(14)为离散傅里叶变换对,在时频域均为有限长且都是离散的。
由上述可知,X(k)将是x(n)的傅里叶变换或是对其傅里叶变换的某种程度上的近似。
分裂基算法是最好的快速傅里叶变换算法,该算法的基本思路是对偶序号输出使用基2算法,对奇序号输出使用基4算法。算法推导如下。
对于N=2M点DFT,对k的偶序号项用频率抽取(DIF)基2的FFT算法,即:
(15)
对k的奇序号项用基4的算法,即:
(16)
(17)
式中:r=0,1,2,…,N/4-1。式(15)、(16)、(17)构成了分裂基算法的L型算法结构。
1.2.2自功率谱密度分析
一个信号可以从时域描述,也可以从频域来描述,这两种描述是存在一个对应关系的。功率谱分析能够提供信号的频域信息,是研究平稳随机过程的重要方法。对于遍历随机过程的一个样本序列,这个序列只是无穷多个可能的随机序列中的一个,因此这个序列实际上不能真正代表整个随机过程。但是不管选取哪个序列,通过该序列计算得到的自相关函数总是相同的,即由某一个序列计算得到的自相关函数能够作为对过程本质的描述。因此,可从自相关函数出发考虑信号的功率谱问题。
信号x(t)的自功率谱密度定义为其自相关函数的傅里叶变换。设x(t)的自相关函数为Rx(τ),则x(t)的自功率谱密度为:
(18)
同时有:
(19)
自功率谱密度简称自功率谱或自谱。
若τ=0,根据式(2)自相关函数Rx(τ)和式(18)自功率谱Px(f)的定义,可以得到:
(20)
(21)
Px(f)表示了信号的功率沿频率轴的分布,故称Px(f)为自功率谱密度函数。
经典谱估计的基本方法:在实际应用中,由于只能获得测量信号的有限长观察序列,因此只能用所得的有限长序列来估计信号的功率谱,这就产生了谱估计。经典谱估计的方法有直接法和间接法两种。直接法又称周期图法。设x(n)为时域信号的N点采样序列,x(k)是采样序列的傅里叶变换,则用周期图法估计的信号功率谱为:
(22)
(23)
1.2.3互功率谱密度分析
互功率谱密度分析类似于自功率谱密度,如果信号x(t)和y(t)的互相关函数Rxy(τ)满足傅里叶变换的条件:
(24)
则信号x(t)和y(t)的互功率谱密度函数定义为:
(25)
对于一个单输入单输出的线性系统,设系统的频率响应为H(f),若其输入为x(t),输出为y(t),则有:
Pxy(f)=H(f)Px(f)
(26)
故由输入信号的自功率谱和输入输出的互功率谱就可以直接得到系统的频率响应函数。所得到的H(f)不仅含有幅频特性,而且含有相频特性。
对于N点离散序列x(n)、y(n),设其傅里叶变换为X(k)、Y(k),LabWindows/CVI使用的互谱计算公式为:
(27)
2虚拟信号分析仪的设计
本文设计的双通道多功能虚拟信号分析仪共由两大部分组成:硬件部分和软件部分。
2.1硬件部分
系统硬件采用某公司的STM32F4开发板。使用STM32F407ZGT6内部ADC对信号进行采样。由于外部输入信号可能有负压部分,因此需要对信号进行平移。输入级采用1 MΩ下拉电阻接同相放大器的结构(下拉电阻在原理图上未画出),使输入阻抗约为1 MΩ。经过缓冲结构后,将信号与参考源产生的1.5 V直流电压相加,结构采用同相加法器,如图1所示。
图1 输入缓冲和信号平移电路图
为了在缓冲级能够处理直流信号和负压信号,运放部分需要采用双电源供电,而开发板提供的电压只有+5 V和+3.3 V两种。由于这里需要的电流较小、噪声小,所以采用反向电荷泵来产生-3.3 V的电压,采用的芯片为TPS60400,仅需3个外部1 F电容即可以产生-3.3 V,使得整体电路简单方便。具体电路如图2所示。
图2 电荷泵电路图
参考源采用TL431产生2.495 V的电压,通过两个电阻分压产生1.5 V的参考电压,经过运放缓冲给加法器提供参考。具体电路如图3所示。
图3 参考源电路图
2.2 软件部分
软件部分按功能划分为上位机和下位机。上位机负责数据处理与人机交互,下位机负责信号采样。上位机和下位机之间采用开发板自带的USB串口通信。
2.2.1上位机部分
上位机共有两个线程。第一线程利用中断的方法,主要对面板的按键和文本输入框等控件进行响应,以获取用户的设置信息。第二线程的软件流程图如图4所示,主要负责数据的采集和信号的显示[7,9]。
图4 第二线程流程图
2.2.2串口通信
波特率设置为115 200 bit/s,信号位8位,1位终止位,无校验。上位机的串口设置为1~15,检测不到串口时会有提示,此时检查连线,若连线正常,打开控制面板→设备管理器,查看开发板的端口号是否在1~15内,若不在,修改端口号。
2.2.3下位机部分
(1)下位机的主函数流程图如图5所示,主函数主要执行两个任务,一是各模块的初始化(系统时钟、ADC、定时器、串口),二是循环检测串口是否接收到数据。为了防止误收数据,设定采样率必须以“SR”(SampleRate)开头,后跟两个8位数据有效,并且为了防止设置的采样率过高,与0x1fff按位与,使设定的采样率不大于4 096个/s。
图5 主函数流程图
(2)ADC采用PB0(ADC1通道8)PC4(ADC1通道14),具体设定如下。
//先初始化PB0(ADC1通道8)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
//PB0 通道8
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
//模拟输入
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
//不带上下拉
GPIO_Init(GPIOB, &GPIO_InitStructure);
//初始化
//再初始化PC4(ADC1通道14)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
//PC4 通道14
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
//模拟输入
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
//不带上下拉
GPIO_Init(GPIOC, &GPIO_InitStructure);
//初始化
(3)串口的端口配置和初始化设置如下。
//USART1端口配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
//GPIOA9与GPIOA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
//复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//速度50 MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
//推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
//上拉
GPIO_Init(GPIOA,&GPIO_InitStructure);
//初始化PA9,PA10
//USART1初始化设置
USART_InitStructure.USART_BaudRate = bound;
//波特率设置
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
//字长为8位数据格式
USART_InitStructure.USART_StopBits = USART_StopBits_1;
//一个停止位
USART_InitStructure.USART_Parity = USART_Parity_No;
//无奇偶校验位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
//无硬件数据流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
//收发模式
USART_Init(USART1, &USART_InitStructure);
//初始化串口1
(4)系统时钟采用168 MHz即可满足要求,定时器的设定时间公式为:
Tout=[(arr+1)×(psc+1)]/Tclk
式中:Tclk为TIM3的输入时钟频率,MHz;Tout为TIM3溢出时间,μs。
为了使采样率从1~4 096之间步进1时,有采样间隔时间的改变,设置分频系数(psc)为839,这样采样率与定时器计数个数(arr)之间的关系为arr=100 000/SR-1。因此需要改变采样率时,只需要根据公式计算出arr的值并修改定时器中断时间即可。这里为了分辨X通道和Y通道的数据,在两组数据发送前,发送“X”和“Y”以作区分。ADC采样为12位数据,因此传递数据时需要先发高8位再发低8位。定时器中断流程图如图6所示。
图6 定时器中断流程图
3系统功能测试
将温度传感器LM35输出端接入X通道,此时信号分析仪经测试得到该信号平均值为0.252 V,有效值也为0.252 V,万用表测得传感器LM35输出电压为219 mV。
将两个温度传感器LM35输出端分别接入X和Y通道,信号分析仪经测试得到X通道信号平均值为0.249 V,有效值为0.250 V,万用表测得连接X通道的传感器LM35输出电压为221 mV;Y通道信号平均值为0.232 V,有效值为0.233 V,万用表测得连接Y通道的传感器LM35输出电压为228 mV。
使用函数发生器产生一个该信号分析仪量程内的正弦波,分别连接到示波器和本信号分析仪输入端,两者显示效果相近,测试结果符合预期要求。
4结束语
传统仪器功能相对单一,并且不容易进行扩展。为顺应仪器发展的趋势,需要进行虚拟仪器的研究设计。在LabWindows/CVI环境下,通过硬件电路设计及上位机和下位机软件的编写,开发完成了虚拟信号分析仪,尤其是采用多线程数据采集技术,在响应用户操作方面取得了比较明显的效果。通过测试,该仪器能够完成数据采集、实现信号时域波形显示、相关性计算以及统计信息实时显示线性振幅谱等功能,结果正确可靠,表明了推广发展虚拟仪器的可行之性。
参考文献
[1] 马青亮,周伦彬,李振娜. 基于LabWindows/CVI的信号分析仪的设计[J]. 中国测试, 2009,35(6):50-53.
[2] 马青亮. 基于LabWindows/CVI的信号分析仪的研究[D]. 广州:广东工业大学,2008.
[3] 周林,栗秋华,张凤.基于虚拟仪器的信号频域分析与处理系统的设计与实现[J].现代科学仪器,2006(6):44-47.
[4] 周浩敏. 信号处理技术基础[M]. 北京:北京航空航天大学出版社,2004:35-37.
[5] 詹惠琴,古军,袁亮. 虚拟仪器设计[M]. 北京:高等教育出版社,2008:163-167.
[6] 奥本海姆. 信号与系统[M].西安:西安交通大学出版社,1997:371-374.
[7] 陈莉,林圳杰.基于LabWindows/CVL多线程研究与工程应用[J].工业控制技术,2006(10):92-94.
[8] 崔红梅,麻硕士,裴喜春,等.基于LabWindows/CVI平台的虚拟数字信号分析仪的研究与开发[J].计量技术,2005(11): 24-26.
[9] 李改利,王红军,赵建辉. LabWindows/CVI平台下数据共享技术研究[J]. 机械工业学院学报, 2007(3):20-22.
中图分类号:TH7;TP311
文献标志码:A
DOI:10.16086/j.cnki.issn1000-0380.201602023
修改稿收到日期:2015-05-18。
第一作者张扬(1987-),男,现为西南交通大学机械工程专业在读硕士研究生;主要从事信号分析与虚拟仪器的研究。