跳到主要内容

显示

本书在 图形化显示数据 一节,详细介绍了 LabVIEW 显示波形数据的方法。这一节,主要介绍在显示测试测量数据中的一些特殊方法。

中断的曲线

有时候需要绘制中间断开的曲线。比如某个信号,在 0~1 秒有信号,在 1~2 秒无信号,在 2~3 秒间又恢复信号。希望在 1~2 秒间不要把它的曲线显示出来。

简单地把在 1~2 秒间的波形数据的值设置为 0 是不能满足这个要求的。如果简单地设置为 0,波形图会在 Y 轴等于 0 的地方绘制出一条水平直线。应该借助 "NaN" 数值()来设置曲线不显示部分的数据。NaN 是 Not a Number 的缩写,表示它不是一个数值。如果波形中某个点的数据值为 NaN,那么在波形图上是不会绘制这一点的。

因此,实现上文提及的功能,只要在程序中把小于 0 的部分设置为 NaN 即可,画出正弦曲线大于 0 的部分,而隐藏小于 0 的部分。它的程序框图如下:

运行结果如下:

扩展这一用法,还可以绘制出“可以变换颜色”的曲线。比如,曲线大于 0 的部分用红色,小于 0 的部分用绿色。实现的基本思路是:向波形图传入两条独立的曲线(红、绿)。红色曲线保留 >0>0 的数据,其余填 NaN;绿色曲线保留 <0<0 的数据,其余填 NaN。

如果只是简单地按正负号判断并填入 NaN,你会发现红色和绿色曲线在跨越 0 刻度线时是断开不连贯的(中间缺少一根线段)。因为 NaN 强制打断了连线逻辑。要实现真正的“无缝多色曲线”,你必须在算法中找到(或插值计算出)跨越 0 刻度的那个精确交界点,并将这个交界点的坐标同时追加到红色曲线的末尾和绿色曲线的开头。只有这样,两条曲线才能在视觉上完美“首尾相连”。

大量数据的显示

有些数据采集设备的采样频率非常高,在很短的时间内就可以采集几 M 甚至几 G 的数据。在程序中查看这些数据时,直接把全部数据显示在波形图中肯定不是一个好方法。因为数据太多,把它们全部绘制出来相当耗费时间。

实际上,一个屏幕是无法显示太多数据的。以 1024×768 的屏幕为例,如果全部用来显示波形图,横向也只有 1024 个点,也就是说最多只能显示出一条曲线的 1024 个点。所以一次把所有数据都装入波形图是没有意义的。为了提高程序效率,每次只应该把相当于显示分辨率的数据传给波形图让其绘制出来。

为了保持原有波形的形状不变,同时提升程序的响应速度,用于显示的数据应当进行降采样(Decimation)。初学者常犯的错误是“每隔 N 个点抽取一个点”来组成新数据。这种方法极其危险!根据奈奎斯特采样定理,不经过低通滤波的直接抽取会导致严重的频率混叠(Aliasing)。这会使屏幕上显示的缩略波形发生畸变,甚至完全丢失短暂的毛刺或峰值警告信号。

正确的显示降采样方法是极值包络法 (Min-Max Decimation)。将原始数据按照屏幕像素数(比如分为 1000 个区间),然后在每一个区间内,计算并提取出最大值(Max)和最小值(Min),用这两个值代表这个区间。 这样,无论你怎样缩放全局视图,信号的真实物理包络(最高峰和最低谷)以及任何突发的噪声毛刺都会被 100% 完美保留在屏幕上,且数据量大幅降低。

下面的程序,仅仅用简单采样演示一下:某一采集到的原始数据有 100,000 个点,在屏幕上,波形图控件每次可以显示 200 个点。那就可以在原始数据中,每隔 500 个点抽取出一个点,组成一组新的数据:

images_2/image75.png

显示大量数据是导致程序效率低下的一个主要因素。在硬盘上读取大量数据,重采样同样是比较耗时的工作。如果硬盘上保存有一个大数据文件,且经常需要装入内存并显示出来,不妨把这个文件重采样后的缩减版也保存下来。这样每次要显示数据全图时,可以直接装入缩减版的文件,省去了读入大文件和重采样的时间。

数据被重采样缩减后,虽然还保持着原数据的总体外观,但细节部分已经丢失了。若用户需要使用波形图的放大工具试图放大波形图某一部分查看波形的细节处,就不能继续使用这个缩减版的数据了,它无法显示波形的细节。这时,程序必须重新计算数据显示的区域和波形分辨率,重新生成一组重采样缩略数据。

比如需要被显示的数据采样频率为 10,000,即每秒钟采集 10,000 个点。原数据长度是 10 秒钟,共有 100,000 个点。波形图每次可以显示 200 个点。开始显示数据全图时,每隔 500 个点抽取出一个点,组成一组新的数据。新的一组数据采样率为 20,数据的时间跨度还是 10 秒钟,由 200 个点组成。

假如用户在观察了波形全图后,决定选取波形中第 3 秒和第 4 秒之间的数据进行观察。放大后需要显示的数据长度为 2 秒,对应于原始数据的第 3,000~5,000 个点。这 2000 个点也不需要全部在波形图上显示,可以对它们进行重采样,采样频率为 100。这样,重采样的数据还是有 200 个点,表示原数据第 3、4 秒的内容。

高速数据的显示

有的测试程序要求一边采集数据一边把采集到的数据显示出来,供用户随时观察。如果硬件采集数据的速度不高,数据变化频率也不够快,可以直接使用波形图表控件把采集到的数据显示出来。

当数据采集速度特别快时,比如采样率达到每秒上万个点。如果还是把所有采集到的数据都传递给波形图表控件,就相当于每秒显示几万个点。图像刷新的速率如此之快,人眼根本无法分辨出每一幅图像。为了降低图像的刷新速度,在显示时可以降低用于显示的数据的采样率。比如降低到每秒 10 个点左右,再在波形图表控件中显示。这样,波形的移动速度就不会太快,观察者就可以看清楚了。

这个处理方法与处理大量静态数据的显示方法是类似的。它们的缺点也是相同的,就是无法显示波形的细节部分。而实际上,一个程序之所以采用高采样率采集数据就是为了观察采集波形的细节部分。如果被采集的信号是无规律的,那么可以每次以原采样率显示一小段数据,比如 0.001 秒钟内的信号。图像停留 1 秒钟,等观察者可以看清楚它,再显示刚刚采集到的 0.001 秒钟的信号。这种方法虽然可以显示图像的细节,但是观察者实际只能看到 0.1% 的数据,其它 99.9% 的数据都没有被显示出来。

大多数时候,被观测的信号都是有规律的周期信号。由于周期信号是重复的,如果能够保证每次在波形图控件上绘制的信号,都从信号不同周期的同一位置开始显示,那么实际上每次显示的图像都和上一副图像几乎是相同的。这样,就可以提高图像刷新速度,而图像仍然会保持稳定的形状不会有无规则的闪动。如果每秒钟刷新 20 帧图像,显示的数据就可以比上一种方法多 20 倍。这样一来,既可以显示波形的细节部分,又可以显示更多的数据。这也正是示波器的工作方式:

采用示波器方式显示信号图像,使图像稳定演示的关键点是需要每一帧图像都必须从某个信号周期的同一位置开始显示。可以通过设置触发点来保证每次得到每个周期的同一点。在得到触发点后,再在触发点后截取一段相同长度的波形。

示波器使图像稳定演示的关键在于:触发机制(Triggering)。它可以使用软件触发,也可以通过硬件触发。

  • 软件触发(事后截取): 如上图声卡例子所示,对于低速信号,我们可以先采集一大块数据进入内存,然后通过软件算法(如寻找阈值交叉点)在数组中定位,再截取显示。这种方法灵活但极为消耗 CPU 资源,当数据量巨大时会引发卡顿。
  • 硬件触发(高速采集的标准方案): 当采样率极高(如几 MS/s)时,必须依靠数据采集卡内部的硬件触发功能。在 LabVIEW(如 DAQmx)中配置好触发通道、触发电平和边沿后,硬件会自动侦测信号并在满足条件时才将规定长度的数据流(包含预触发数据)送入电脑内存。软件端只需不断“读取”并直接“显示”,即可实现完美的波形稳定,且对 CPU 零负担。这就是专业数字示波器的核心工作原理。

下图是利用声卡来采集声音信号并显示出来的一个简单示波器。首先,它从声卡读取声音信号,然后根据设定的触发电平找到触发点,并在触发点后截取一段波形进行显示。

在测试此 VI 时,同时使用扬声器产生了一个方波,再利用声卡示波器把声音信号显示出来。下图是声卡示波器的显示效果。在这个波形图中,原始的方波信号也被合成进去了。图中不规则的周期信号是声卡示波器麦克风采集进来的声音信号。这里由于音响系统效果较差,所以信号从扬声器发出,再经麦克风采集回来后,已经完全变形了。但还是可以看出,这个信号是受方波信号激励产生的。调整方波的频率幅值等,采集到的信号也会相应改变。

用鼠标在波形图控件上选取一条曲线

有时,用户需要使用鼠标对波形图控件上的曲线进行一些复杂的操作。那么,程序首先就要知道用户鼠标点击的是哪条曲线。实现这一功能,可以利用波形图控件的方法 "根据位置获取曲线",这个方法的输入参数是一个坐标位置,若输入坐标点的附近有曲线经过,就返回这条曲线的索引,否则返回 - 1。

下面使用一个示例程序来介绍如何利用这一方法获取鼠标点击的曲线。程序的功能为:当鼠标点击波形图控件的某一条曲线时,该曲线变粗。

image

上图是实现了这一功能的程序的框图。程序启动后,首先画出两条随机数据的曲线。当用户在波形图上点击时,调用 "根据位置获取曲线(GetPlotAtPos)" 方法。如果返回值不等于 -1,说明点中了某条曲线。

此时,通过属性节点修改该曲线的线宽。关键步骤如下:

  1. 向波形图的 “活动曲线 (Active Plot)” 属性写入刚才获取到的曲线索引值。
  2. 将属性节点向下拖拽展开,紧接着向 “曲线 -> 线宽 (Plot.LineWidth)” 属性写入 2(加粗)。
  3. 向其它未被选中的曲线索引写入线宽 1(恢复原状)。

程序运行效果如图下图所示(Plot0 曲线被加粗):

image

时频联合谱图

如果安装了 “Advanced Signal Processing Toolkit” 工具包,信号处理会变得更加容易。这个工具包包含了针对时序信号分析、时频联合分析以及小波分析所需的各种函数和工具。

例如 图形化显示数据 提到的时频分析运算过程,使用 "Advanced Signal Processing Toolkit" 工具中的一个 "STFT Spectrogram"Express VI 就可以完成。工具包中还提供了其它 LabVIEW 中没有的时频联合分析方法,如 Gabor Spectrogram、Adapt Spectrogram 等。此外,使用此工具还可以对得到的时频联合谱图做进一步处理,如把谱图上某一区域的信号分离出来。

images/image474.png

images/image475.png