第四课 分析软件

LabVIEW的Advanced Analysis软件库包括数值分析、信号处理、曲线拟合以及其他软件分析功能。该软件库是建立虚拟仪器系统的重要工具,除了具有数学处理功能外,还具有专为仪器工业设计的独特的信号处理与测量功能。

除了Advanced Analysis软件库,NI公司还提供一些附加的分析工具库,借助这些分析软件包,LabVIEW可以具有更加强大的分析功能。这些分析工具库包括:

  • 联合时频分析(Joint Time Frequency Analysis)工具箱:用于分析常规傅里叶变换不易处理的时-频特性。
  • G Math工具箱:提供了扩展的数学功能,如公式分析、求根植、画轮廓线等。
  • 数字滤波器设计工具箱

详细的情况请查阅相关资料。

在本课程中,用户可以学习如何建立一个简单实用的频谱分析仪,如何使用数字滤波器,如何执行简单的曲线拟合功能等。本课程需要使用LabVIEW完全开发系统。

在LABVIEW 5.0以前的版本,高级分析程序库被安排在函数模板的一个名为Advanced Analysis的子模板中。而现在流行的LabVIEW 5.1版则把它分成两个子模板。

  • 信号发生。
  • 时域信号。
  • 频域信号。
  • 测量。
  • 数字滤波器。
  • 窗函数。
  • 公式框节点。
  • 1D and 2D Evaluation。
  • 微积分(Calculus)。
  • 概率和统计。
  • 曲线拟合。
  • 线性代数。
  • Array Operations。
  • 优化处理。
  • Zeroes。
  • 数字函数。

该软件库可以为网络分析或仿真产生多种常用信号。它可以和NI公司的DAQ卡一起使用,以产生模拟输出信号。

在模拟电路范围,信号频率以Hz或周期来测量,但在数字系统中我们使用数字频率,它是模拟频率与采样频率之比,如下所示:

数字频率=模拟频率/采样频率

在许多信号产生子程序模块中,我们使用数字频率,因为难以确定采样频率。为了得到模拟频率输出,我们必须确定采样频率。如下面的练习所示:

目的:产生一个指定频率的正弦波。

img4.3.1.jpg

1.打开Generate Sine.vi程序。

2.前面板包含下列控制栏:采样点数、幅值、信号频率、初始相位、采样频率。

3.转入框图程序部分。

img4.3.2.jpg

1. 验证上述框图程序,它使用了下面的子程序:

Sine Wave VI子程序(在Analysis>Signal Generation子模板)。在本例中,它以采样频率100Hz,产生有200个采样点的 Hz正弦波。

2.注意查看框图,可以看到在连接到Sine Wave.VI程序之前,信号频率已经被采样频率相除。也就是说,Sine Wave需要输入信号的数字频率。

3.运行此程序,在前面板缺省值的情况下,将出现5Hz的正弦波。

在前面板把信号频率改为90Hz,再运行此程序。结果出现的信号频率却等于10Hz。

这种现象叫混频偏差(Aliasing),只在数字频率范围出现。著名的耐奎斯特采样理论已经说明,最高信号稳定频率等于采样频率的一半。在本例中,采样频率等于100Hz,所以最高信号频率为50Hz,如果输入频率大于50Hz,如本例中的90Hz,它将会偏差到((N×50)-90)Hz>0,即为(100-90)=10Hz,也就是说,采样频率为100Hz的数字系统不能区分10Hz和90Hz,20Hz和80Hz,51Hz和49Hz等等。

因此,在设计数字频谱系统时,我们必须保证不要让大于1/2采样频率的信号进入系统。一旦进入了,就没有办法清除它们。为了防止偏差出现,我们一般采用低通滤波器。在本例中,我们可以使用抗混频模拟低通滤波器滤除任何大于50Hz的信号。加了滤波器以后,当采样频率为100Hz的系统内出现10Hz信号时,我们就可以肯定它是10Hz而非90Hz。

(练习4-1结束)

在许多应用场合,需要计算信号的频谱,Advanced Analysis程序库有许多这方面的功能模块程序。下面的例子讲述使用Amplitude and Phase Spectrum VI子程序来测量两个频率分量。

目的:计算一个信号的频谱分量。

img4.4.1.jpg

1.打开Compute Frequency Spectrum VI程序。输入信号混合了两个正弦波,一个为2Hz,另一个为10Hz。采样频率为100Hz,采样点为200个 10Hz的信号幅值为2伏。2Hz的信号幅值为1伏。

2.切换到框图程序。

1.框图程序如下次图所示,它使用了下面的子程序:

Amplitude and Phase Spectrum VI子程序(在Analysis>Measurement子模板)。在本例中,它计算信号的幅度有效值(RMS)。

img4.4.2.jpg

2.运行程序。频谱图显示两个峰值,一个在2Hz,另一个在10Hz。2Hz波形电压有效值为0.717伏,10Hz波形电压有效值为1.414伏,分别对应其峰值1伏和2伏。

(练习4-2结束)

数字滤波器用于改变或消除不需要的波形。它是应用最广泛的信号处理工具之一。两种数字滤波器分别是:FIR(有限脉冲响应)和IIR(无限脉冲响应)滤波器。FIR滤波器可以看成一般移动平均值,它也可以被设计成线性相位滤波器。IIR滤波器有很好的幅值响应,但是无线性相位响应。

带通指的是滤波器的某一设定的频率范围,在这个频率范围的波形可以以最小的失真通过滤波器。通常,这个带通范围内的波形幅度既不增大也不缩小,我们称它为单位增益(0dB)。带阻指的是滤波器使某一频率范围的波形不能通过。 理想情况下,数字滤波器有单位增益的带通,完全不能通过的带阻,并且从带通到带阻的过滤带宽为零。在实际情况下,则不能满足上述条件。特别是从带通到带阻总有一个过渡过程,在一些情况下,使用者应精确说明过渡带宽。

在有些应用场合,在带通范围内放大系数不等于单位增益是允许的。这种带通范围内的增益变化叫作带通纹波。另一方面,带阻衰减也不可能是无穷大,我们必须定义一个满意值。带通纹波和带阻衰减都是以分贝(dB)为单位,定义如下:

dB=20×log({A_o(f)} / {A_i(f)})

其中,Ao(f)和Ai(f)是某个频率等于f的信号进出滤波器的幅度值。

例如,假设带通纹波为-0.02dB,则有:

-0.02=20×log({A_o(f)}/{A_i(f)})

{A_o(f)}/{A_i(f)}=10^{-0.001}=0.9977

可以看到,输入/输出波形幅度是几乎相同的。

假设带阻衰减等于-60dB,则有:

-60=20×log({A_o(f)}/{A_i(f)})

{A_o(f)}/{A_i(f)}=10^{-3}=0.001

输出幅值仅是输入幅值的千分之一。

衰减值用分贝表示时经常不加负号,我们已经设定它为负值。

目的:用数字滤波器消除不需要的频率分量

img4.5.1.jpg

1.打开Low Pass Filter.vi程序。这个程序设计了一个低通巴特沃斯滤波器,从输入信号中滤除10Hz分量。

2.转换到框图程序。

img4.5.2.jpg

1.验证主框图程序,它使用了下面的子程序: Butterworth Filter VI子程序(在Analysis>Filters子目录)。在本例中,采用巴特沃斯滤波器,指定滤波器阶数与截止频率,滤除输入正弦波中的高频分量,把输出波形在屏幕上显示。

2.运行该程序,改变滤波器阶数,观察滤波器的效果。

(练习4-3结束)

虽然在LabVIEW中使用数字滤波器很简便,但还是需要你对数字信号处理的理论有一个基本了解。为此,VI公司提供了一个附加的工具软件,叫作数字滤波器设计工具箱(Digital Filter Design Toolkit)。该软件用LabVIEW开发,有很好的交互式图形用户界面。可以把所设计的滤波器集成到LabVIEW、LabWindows/CVI或者其他的编程环境。

曲线拟合的目的是找出一系列的参数a0, a1, … …,通过这些参数最好地模拟实验结果。下列是LabVIEW的各种曲线拟合类型:

  • 线性拟合 – 把实验数据拟合为一条直线y[i]=a0+a1*X[i]
  • 指数拟合 – 把数据拟合为指数曲线y[i]=a0*exp(al*X[i])
  • 多项式拟合 – 把数据拟合为多项式函数: y[i]=a0+a1*X[I]+a2*X[i]^2…
  • 通用多项式拟合 – 与多项式拟合相同,但可以选择不同的算法,以获得更好的精度和准确性。
  • 通用线性拟合 – 公式为y[i]=a0+a1*f1(X[i])+a2*f2(X[i])…,这里y[i]是参数a0, a1, a2…等的线性组合。通用线性拟合也可以选择不同的算法来提高精度和准确度。例如:y=a0+a1*sin(X)是一个线性拟合。因为y与参数a0, a1有着线性关系。同样道理,多项式拟合也总是属于线性拟合,但是它可以采用一些特殊算法以提高拟合处理的速度和精度。
  • General Levenberg-Marquardt拟合 – 把数据拟合为公式y[i]=f(X[i], a0, a1, a2…)。其中a0, a1, a2…是参数。这种方法是最通用的方法,它不需要y与a0, a1, a2…有线性关系。它可用于线性或非线性拟合,但一般用于非线性拟合,因为对于线性曲线的处理采用通用线性拟合方法更加快捷。这种方法不能保证结果一定正确,所以,有必要验证拟合结果。

目的:对指数关系数据进行线性拟合

img4.6.1.jpg

1.打开Linear Curve Fit.vi程序。这个例子假设我们收集了10对实验数据t和y,我们有理由相信它们之间有线性关系。

2.切换到框图程序。

img4.6.2.jpg

1.验证框图程序,它使用了如下的子程序:

Linear Fit子程序(在Analysis>Curve Fitting子模板)。在本例中,它把实验数据拟合为一条直线,求出系数a和b,以满足y[i]=a+b*t[i];以及实验结果和拟合结果之间的误差的均方根值。

2.输入数据是一个两维数组,是采用DAQ卡采集数据时的通用格式。我们用Index Array子程序可以分解得到两个一维数组y[i]与t[i]。

3.“MSE”表示误差均方根值,误差越小,拟合结果越好。

4.运行该程序。曲线将显示实验数据和拟合结果。

(练习4-4结束)

目的:对指数数据执行多项式拟合

img4.6.3.jpg

1.打开Polynomial Fit.vi程序。这个例子假设实验数据之间为多项式关系: y[i]=a0+a1*t[i]+a2*t[i]^2…

2.当多项式为一阶时,有两个参数,结果是一个线性拟合,与前一个例子相同。当阶数为二阶时,结果是一个二阶多项式带三个参数,多项式参数存放于数组a[i]。

3.切转到框图程序。

img4.6.4.jpg

1.验证框图程序,它使用了如下的子程序:

General Polynomial Fit.vi子程序(在Analysis>Curve Fitting子目录)在本例中,把实验数据拟合为二阶多项式曲线,返回结果为拟合数据,多项式系数以及拟合误差的均方根值。

2.本例使用多项式拟合,求出了多项式系数a0,a1,a2等。一般情况下,我们总是尽可能使用最低阶的多项式。

3.运行程序。将显示实验数据和拟合结果的数据。

(练习4-4结束)

  • home/whyx/labview/chp4.txt
  • 最后更改: 2008/03/04 15:52
  • (外部编辑)