1第七章信号处理与分析6.1概述数字信号在我们周围无所不在。因为数字信号具有高保真、低噪声和便于信号处理的优点,所以得到了广泛的应用,例如电话公司使用数字信号传输语音,广播、电视和高保真音响系统也都在逐渐数字化。太空中的卫星将测得数据以数字信号的形式发送到地面接收站。对遥远星球和外部空间拍摄的照片也是采用数字方法处理,去除干扰,获得有用的信息。经济数据、人口普查结果、股票市场价格都可以采用数字信号的形式获得。因为数字信号处理具有这么多优点,在用计算机对模拟信号进行处理之前也常把它们先转换成数字信号。本章将介绍数字信号处理的基本知识,并介绍由上百个数字信号处理和分析的VI构成的LabVIEW分析软件库。目前,对于实时分析系统,高速浮点运算和数字信号处理已经变得越来越重要。这些系统被广泛应用到生物医学数据处理、语音识别、数字音频和图像处理等各种领域。数据分析的重要性在于,无法从刚刚采集的数据立刻得到有用的信息,如下图所示。必须消除噪音干扰、纠正设备故障而破坏的数据,或者补偿环境影响,如温度和湿度等。通过分析和处理数字信号,可以从噪声中分离出有用的信息,并用比原始数据更全面的表格显示这些信息。下图显示的是经过处理的数据曲线。2用于测量的虚拟仪器(VI)用于测量的虚拟仪器(VI)执行的典型的测量任务有:计算信号中存在的总的谐波失真。决定系统的脉冲响应或传递函数。估计系统的动态响应参数,例如上升时间、超调量等等。计算信号的幅频特性和相频特性。估计信号中含有的交流成分和直流成分。在过去,这些计算工作需要通过特定的实验工作台来进行,而用于测量的虚拟仪器可以使这些测量工作通过LabVIEW程序语言在台式机上进行。这些用于测量的虚拟仪器是建立在数据采集和数字信号处理的基础之上,有如下的特性:输入的时域信号被假定为实数值。输出数据中包含大小、相位,并且用合适的单位进行了刻度,可用来直接进行图形的绘制。计算出来的频谱是单边的(single_sided),范围从直流分量到Nyquist频率(二分之一取样频率)。(即没有负频率出现)需要时可以使用窗函数,窗是经过刻度地,因此每个窗提供相同的频谱幅度峰值,可以精确地限制信号的幅值。一般情况下,可以将数据采集VI的输出直接连接到测量VI的输入端。测量VI的输出又可以连接到绘图VI以得到可视的显示。有些测量VI用来进行时域到频域的转换,例如计算幅频特性和相频特性、功率谱、网路的传递函数等等。另一些测量VI可以刻度时域窗和对功率和频率进行估算。本章我们将介绍测量VI中常用的一些数字信号处理函数。LabVIEW的流程图编程方法和分析VI库的扩展工具箱使得分析软件的开发变得更加简单。LabVIEW分析VI通过一些可以互相连接的VI,提供了最先进的数据分析技术。你不必像在普通编程语言中那样关心分析步骤的具体细节,而可以集中注意力解决信号处理与分析方面的问题。LabVIEW6i版本中,有两个子模板涉及信号处理和数学,分别是Analyze子模板和Methematics子模板。这里主要涉及前者。进入Functions模板Analyze》SignalProcessing子模板。其中共有6个分析VI库。其中包括:①.SignalGeneration(信号发生):用于产生数字特性曲线和波形。②.TimeDomain(时域分析):用于进行频域转换、频域分析等。③.FrequencyDomain(频域分析):④.Measurement(测量函数):用于执行各种测量功能,例如单边FFT、频谱、比例加窗以及泄漏频谱、能量的估算。3⑤.DigitalFilters(数字滤波器):用于执行IIR、FIR和非线性滤波功能。⑥.Windowing(窗函数):用于对数据加窗。在后面几节中,你将学习如何使用分析库中的VI创建函数发生器和简单实用的频谱分析仪,如何使用数字滤波器,窗函数的作用以及不同类型窗函数的优点,怎样执行简单的曲线拟合功能,以及其他一些内容。可以在labview\examples\analysis目录中找到一些演示程序。6.2信号的产生本节将介绍怎样产生标准频率的信号,以及怎样创建模拟函数发生器。参考例子见examples\analysis\sigxmpl.llb。你还将学习怎样使用分析库中的信号发生VI产生各种类型的信号。信号产生的应用主要有:当无法获得实际信号时,(例如没有DAQ板卡来获得实际信号或者受限制无法访问实际信号),信号发生功能可以产生模拟信号测试程序。产生用于D/A转换的信号在LabVIEW6i中提供了波形函数,为制作函数发生器提供了方便。以WaveformWaveformGeneration中的基本函数发生器(BasicFunctionGenerator.vi)为例,其图标如下:其功能是建立一个输出波形,该波形类型有:正弦波、三角波、锯齿波和方波。这个VI会记住产生的前一波形的时间标志并且由此点开始使时间标志连续增长。它的输入参数有波形类型、样本数、起始相位、波形频率(单位:Hz)参数说明:offset:波形的直流偏移量,缺省值为0.0。数据类型DBLresetsignal:将波形相位重置为相位控制值且将时间标志置为0。缺省值为FALSE.signaltype:产生的波形的类型,缺省值为正弦波。frequency:波形频率(单位Hz),缺省值为10。amplitude:波形幅值,也称为峰值电压,缺省值为1.0。phase:波形的初始相位(单位度)缺省值为0.0.errorin:在该VI运行之前描述错误环境。缺省值为noerror.如果一个错误已经发生,该VI在errorout端返回错误代码。该VI仅在无错误时正常运行。错误簇包含如下参数。status:缺省值为FALSE,发生错误时变为TRUE。code:错误代码,缺省值为0。source:在大多数情况下是产生错误的VI或函数的名称,缺省值为一个空串。samplinginfo:一个包括采样信息的簇。共有Fs和#s两个参数。Fs:采样率,单位是样本数/秒,缺省值为1000。4#s:波形的样本数,缺省值为1000。dutycycle(%):占空比,对方波信号是反映一个周期内高低电平所占的比例,缺省值为50%。signalout:信号输出端phaseout:波形的相位,单位:度。errorout:错误信息。如果errorin指示一个错误,errorout包含同样的错误信息。否则,它描述该VI引起的错误状态。使用该VI制作的函数发生器如下,由框图可以看出,其中没有附加任何其他部件。6.3标准频率在模拟状态下,信号频率用Hz或者每秒周期数为单位。但是在数字系统中,通常使用数字频率,它是模拟频率和采样频率的比值,表达式如下:数字频率=模拟频率/采样频率这种数字频率被称为标准频率,单位是周期数/采样点。z有些信号发生VI使用输入频率控制量f,它的单位和标准频率的单位相同:周期数/每个采样点,范围从0到1,对应实际频率中的0到采样频率fs的全部频率。它还以1.0为周期,从而令标准频率中的1.1与0.1相等。例如某个信号的采样频率是奈奎斯特频率(fs/2),就表示每半个周期采样一次(也就是每个周期采样两次)。与之对应的标准频率是1/2周期数/采样点,也就是0.5周期数/采样点。标准频率的倒数1/f表示一个周期内采样的次数。如果你所使用的VI需要以标准频率作为输入,就必须把频率单位转换为标准单位:周期数/采样点。56.4数字信号处理6.4.1FFT变换信号的时域显示(采样点的幅值)可以通过离散傅立叶变换(DFT)的方法转换为频域显示。为了快速计算DFT,通常采用一种快速傅立叶变换(FFT)的方法。当信号的采样点数是2的幂时,就可以采用这种方法。FFT的输出都是双边的,它同时显示了正负频率的信息。通过只使用一半FFT输出采样点转换成单边FFT。FFT的采样点之间的频率间隔是fs/N,这里fs是采样频率。Analyze库中有两个可以进行FFT的VI,分别是RealFFTVI和ComplexFFTVI。这两个VI之间的区别在于,前者用于计算实数信号的FFT,而后者用于计算复数信号的FFT。它们的输出都是复数。大多数实际采集的信号都是实数,因此对于多数应用都使用RealFFTVI。当然也可以通过设置信号的虚部为0,使用ComplexFFTVI。使用ComplexFFTVI的一个实例是信号含有实部和虚部。这种信号通常出现在数据通信中,因为这时需要用复指数调制波形。计算每个FFT显示的频率分量的能量的方法是对频率分量的幅值平方。高级分析库中PowerSpectrumVI可以自动计算能量频谱。PowerSpectrumVI的输出单位是Vrms2。但是能量频谱不能提供任何相位信息。FFT和能量频谱可以用于测量静止或者动态信号的频率信息。FFT提供了信号在整个采样期间的平均频率信息。因此,FFT主要用于固定信号的分析(即信号在采样期间的频率变化不大)或者只需要求取每个频率分量的平均能量。2.流程图中的ArraySize函数用来根据样本数转换FFT的输出,得到频率分量的正确幅值。3.把该VI保存为LabVIEW\Activity目录中的FFT_2sided.vi。4.选择频率(Hz)=10,采样率=100,样本数=100。执行该VI。注意这时的时域图和频谱图。因为采样率=样本数=100,所以时域图中的正弦波的周期数与选择的频率相等,即可以显示10个周期。(如果把频率改成5,那么就会显示5个周期)6双边FFT5.检查频谱图可以看到有两个波峰,一个位于10Hz,另一个位于90Hz,90Hz处的波峰实际上是10Hz处的波峰的负值。因为图形同时显示了正负频率,所以被称为双边FFT。6.先后令频率=10、20(Hz),执行该VI。注意每种情况下频谱图中波峰位置的移动。观察频率等于10和20时的时域波形。注意哪种情况下的波形显示更好,并解释原因。7.因为fs=100Hz,所有只能采样频率低于50Hz的信号(奈奎斯特频率=fs/2)。把频率修改为48Hz,可以看到频谱图的波峰位于±48Hz。8.把频率改为52HZ,观察这时产生的图形与第5步产生的图形的区别。因为52大于奈奎斯特频率,所以混频偏差等于|100–52|=48Hz。9.把频率改成30和70Hz,执行该VI。观察这两种情况下图形是否相同,并解释原因。单边FFT10.按照下图修改流程图。上面已经知道因为FFT含有正负频率的信息,所以可以FFT具有重复信息。现在这样修改之后只显示一半的FFT采样点(正频率部分)。这样的方法叫做单边FFT。单边FFT只显示正频部分。注意要把正频分量的幅值乘以2才能得到正确的幅值。但是,直流分量保持不变。(若程序中考虑含直流分量的情况,应当增加一个分支或case结构。11.设置频率(Hz)=30,采样率=100,样本数=100,运行该VI。12.保存该VI为LabVIEW\Activity目录下的FFT_1sided.vi。13.把频率改为70Hz,执行该VI,观察这时产生的图形与第9步产生的图形的区别。练习6-1结束。6.4.2窗函数7计算机只能处理有限长度的信号,原信号x(t)要以T(采样时间或采样长度)截断,即有限化。有限化也称为加“矩形窗”或“不加窗”。矩形窗将信号突然截断,这在频域造成很宽的附加频率成分,这些附加频率成分在原信号x(t)中其实是不存在的。一般将这一问题称为有限化带来的泄露问题。泄露使得原来集中在f0上的能量分散到全部频率轴上。泄露带来许多问题:如①使频率曲线产生许多“皱纹”(Ripple),较大的皱纹可能与小的共振峰值混淆;②如信号为两幅值一大一小频率很接近的正弦波合成,幅值较小的一个信号可能被淹没。③f0附近曲线过于平缓,无法准确确定f0的值。为了减少泄露,人们尝试用过渡较为缓慢的、非矩形的窗口函数。常用的窗函数如下表所示。窗定义应用矩形窗(无窗)W[n]=1.0区分频域和振幅接近的信号瞬时信号宽度小于窗指数形窗W[n]=exp[n*lnf/N-1]f=终值瞬时