摘 要:MATLAB和LabVIEW是目前流行于工程技术领域的工具软件。LabVIEW的优点是能够将信号顺利地采集进来并进行自动化分析和处理,但其分析信号能力有局限和缺陷。MATLAB分析计算能力很强,但与外部设备交换信息能力却很差。将二者结合起来混合编程,取长补短,充分发挥各自的优势,可设计出功能比较完善的信号处理系统。为此,研究了在LabVIEW中调用MATLAB进行信号处理的方法。详述了各种方法的使用流程、注意事项,并总结了各种方法使用的不同领域和优缺点。
关键词: MATLAB;LabVIEW;信号处理;数据采集;动态链接库
系统是由若干互相有着某种联系的单元组成的一个能够完成某种功能的整体。信号作用于某系统的响应如何,需要以某种方式去分析。系统分析需要经过3个过程:(1)建模,以理论为基础,对所要研究的对象创建一个数学模型;(2)分析该模型;(3)做出合理的物理解释。分析过程很关键,方式方法很多,工具也很多,MATLAB和LabVIEW是常用的两个软件分析平台。
MATLAB的科学计算能力、图像处理和数值分析能力都比较强。LabVIEW是用于编制虚拟仪器的图形化编程工具。自然界各种信号信息的监测,机器、车辆等故障的诊断,还有许多即时动态信号的监控,需要先将信号尽量不失真地采集进来,这一点LabVIEW很容易完成。对采集信号作用于系统模型复杂分析计算最好用MATLAB去完成。为了直观、方便观察,可用LabVIEW做一个界面[1]。
1 MATLAB在LabVIEW中调用的实现
LabVIEW和MATLAB混合编程的实现主要有以下几种方法。
1.1 调用MATLAB script节点算法
LabVIEW提供了各类脚本节点与外部实现通信和交换信息。LabVIEW中可通过MATLAB script节点调用MATLAB的脚本程序(即M文件)。
1.1.1 调用MATLAB script节点过程
从LabVIEW中函数选版选用过程为:函数→数学→脚本与公式→脚本节点→MATLAB script节点。拖曳出节点,放在程序框图面板中,用工具选版按需要调节大小;按程序需要为该节点添加输入输出变量。LabVIEW可通过输入变量向脚本中输入所要处理的信号,运行脚本后的结果通过输出变量送到LabVIEW的输出控件,显示出处理的数据或者波形图,直观清楚,就像实际的仪器面板一样。具体方法为:右键单击脚本边框,从弹出的菜单中选择添加输入或输出,随即在边框出现一个小方框,一般习惯输入在左边,输出在右边。添加之后,各变量需要命名,用Labeling工具依据脚本程序中的变量依次命名,注意选择合适的数据类型,否则运行会出错[2]。
1.1.2 向MATLAB脚本节点输入脚本程序
向MATLAB脚本节点输入脚本程序有两种方法:
(1)用Operating或Labeling工具直接向MATLAB脚本节点编写脚本程序。
(2)从MATLAB中导入。可以先在MATLAB环境下编程运行调试好程序后,再用右键单击MATLAB脚本节点,打开快捷菜单,然后选择Import,从对话框中选择需要导入的文件即可[3]。
1.1.3 保存MATLAB脚本程序
右键单击MATLAB脚本节点,从打开的菜单中选择Export,在打开的Name the script对话框中输入需要保存的文件名,点击save,以MATLAB文本文件扩展名.m保存脚本程序[3]。
1.1.4 调用过程的注意事项
在LabVIEW中调用MATLAB要注意以下几点:
(1)LabVIEW是通过Activex技术来调用MATLAB脚本节点的,MATLAB脚本只适用于Windows操作系统。
(2)使用MATLAB脚本时需要调用MATLAB服务器,所以计算机上要装有MATLAB 6.5以上的版本。
(3)调用调试过程中的数据类型要匹配,否则运行会出错[4]。
这种方法不用复杂的编程,操作也简单,对于初学者比较容易掌握,但对计算机操作系统要求较高,两个软件都需要正确全面安装各个组件,否则无法正常调用。
1.2 应用COM 组件调用MATLAB
MATLAB中M语言开发的算法可以用COM技术自动转变为独立的COM组件对象,可在任何支持COM对象的应用程序中使用。LabVIEW在其相关的函数选版→互连接口→ActiveX模块中提供了一组与该组件操作相关的子VI,实现对COM对象具体的操作。
这种方法适用于规模较大的应用程序,编程有些复杂,要求使用者对MATLAB工具包和LabVIEW的子程序应用特别熟练[5]。
1.3 应用动态链接库技术调用MATLAB
在LabVIEW编程界面下利用动态链接库技术调用MATLAB,步骤为:
(1)在MATLAB编程界面下用m文件翻译器Matcom将源文件翻译为cpp代码,同时编译为dll文件。
(2)在LabVIEW编程界面下用调用库函数CLF(CallLibrary Function)节点,进行动态链接库函数的调用。
这种方法适合对C语言等编程很熟练的高手,因为在LabVIEW动态链接库需要用C语言等编程。
2 LabVIEW中调用MATLAB进行信号处理的实现
2.1 信号分析的处理过程
LabVIEW与MATLAB协同工作,在分析处理信号过程中,LabVIEW负责数据采集,同时设计用户图形界面;MATLAB在后台主要完成大型计算、数据分析、细节处理,提供给LabVIEW调用,其工作过程如图1所示。
2.2 调用MATLAB script节点法对信号进行滤波
实际的信号很容易被干扰,特别是传感器输出的模拟信号,如汽车油门开度传感器、水温传感器、真空度传感器等。采集到原始信号后,必须对其进行滤除处理,除去干扰信号,才能正确使用。
混有干扰的信号直接滤波效果较差,在时域上也很难看出是什么特征的,但如果变换到频域之后,就很容易看出特征了。因此,将原始有干扰的信号先进行FFT变换,将时域变换到频域,再进行滤波处理,最后再反变换还原信号,其效果很好。LabVIEW信号处理模块有不少滤波节点可以完成滤波功能,图2就是用LabVIEW处理信号的程序框图,可以看到过程比较复杂,处理后显示的信号也较差。
上述过程在MATLAB中由几个函数运算就可完成,图3是LabVIEW调用MATLAB script节点,对信号变换滤波处理的程序框图。按照MATLAB程序中要求的信息分别在脚本节点外框上添加输入变量和输出变量(一般习惯把输入变量放在左边,输出变量放在右边),同时修改数据类型,使二者匹配。将LabVIEW采集到的信息送给MATLAB script节点,导入事先在MATLAB中调试好的程序,在LabVIEW中运行即可。输出信号可通过输出变量用相应的显示控件在前面板显示,处理过程中许多需要设定的参数都可以在前面板以按钮方式设置,数据可任意改变,就像一个实际仪器一样,操作简单、数据可靠。该程序还可以打包成可安装文件,在任何平台上使用。
图4是程序运行后显示的波形。由图4(a)、(b)可知,原始信号是一个混杂有干扰的信号,其频谱在低频处有一个模值特别高的点,这一点就是原信号的数据,这是需要保留的点;而在高频部分还有很多模值相对较小的点,这些就是干扰信号,是要去除的数据。对数据进行低通滤波,把高频的信号去掉,得到滤波后信号的频谱图,如图4(c)、(d)所示。由图可知,高频部分的杂波已经被清除。如要了解时域的波形上有什么变化,可以对频域信号进行反傅里叶变换,得到经过低通滤波后的时域波形,恢复后的波形是去除干扰后很好的正弦波。
2.3 调用MATLAB script节点法对信号进行滤波程序
程序如下:
close all;%先关闭所有图片
Adc=2;%直流分量幅度
Fs=256;%采样频率(Hz)
N=256;%采样点数
t=0:1/Fs:N/Fs;%采样时刻
plot(t,S);%显示原始信号
title('原始信号');
hold on
figure;
Y=fft(S,256);%对信号进行256点的FFT
Ayy=abs(Y);%取模
plot(Ayy);%显示取模后的FFT信号
title('原始信号频谱图');
hold on
figure;
RY=real(Y);%提取FFT后数据的实部
IY=imag(Y);%提取FFT后数据的虚部
RY(10:N-10)=0;%理想低通滤波
IY(10:N-10)=0;
plot(RY);
title('滤波后信号的频谱图');
hold on
figure;
YY=RY+1i*IY;%滤波后重新组合实部和虚部
SS=real(ifft(YY));%进行反傅里叶变换
figure
plot(SS,'r');%显示滤波后的信号,
并与原始信号进行对比
title('滤波后的信号');
hold on
plot(S)
MATLAB具有强大的数值分析和处理能力,还拥有众多的专业工具箱,因此在LabVIEW中调用MATLAB来解决问题过程简单易行,并能够扩展LabVIEW的功能,极大地拓宽了虚拟仪器的开发范围。将LabVIEW与MATLAB有机地结合起来,在大型的测试系统与仿真过程中是非常有利的。
参考文献
[1] 刘卫国,陈昭平.MATLAB程序设计与应用[M].北京:高等教育出版社,2002.
[2] 刘君华.基于LabVIEW的虚拟仪器设计与应用[M].北京:高等教育出版社,2002.
[3] 石博强.LabVIEW6.1编程技术实用教程[M].北京:中国铁道出版社,2002.
[4] BISHOP R H.LabVIEW 6i实用教程[M].乔瑞萍,译.北京:电子工业出版社,2002.
[5] 王沫然.MATLAB与科学计算(第二版)[M].北京:电子工业出版社,2003.