张青虎,高贵福,庞勇
(北京机电工程研究所,北京 100074)
在工程中经常使用MATLAB 进行随机振动数据时域和频域分析,利用MATLAB 绘图功能将振动时域数据曲线、振动功率谱密度曲线等通过图形窗口直观显示,并在图形窗口显示数据的测量工况、通道代号、通道名称、数据说明等相关数据描述参数。
随机振动数据本质上是数字信号的一种,可利用MATLAB 数字信号处理工具箱和函数,根据具体需要编制程序进行处理。MATLAB 软件的帮助文档对数字信号处理工具箱和函数有详细的说明,可供工程技术人员参考;也有大量相关教材和书籍[1]可供参阅。各行业的工程技术人员已经总结了利用MATLAB 进行随机振动数据分析的相关经验和程序[2]。
对于少量数据、通道数不多的情况,可以直接在MATLAB 程序代码中写入需要显示的数据描述参数。对于大量的、多通道振动数据,人工输入这类数据描述参数的工作量很大,效率很低,而且程序代码很臃肿、可读性差、容易出错。
本文介绍了一种方法,利用表格软件快速高效的输入编辑功能,将相关数据描述参数保存为表格文件,在MATLAB 数据分析程序中利用专用函数,自动读取表格文件,获取相关数据描述参数并在图形窗口显示,提高了随机振动数据分析工作的效率。
该方法可广泛应用于装备环境工程、振动工程、测量与数据处理等专业领域的随机振动数据及类似数据分析,提高数据分析及数据管理[5]的工作质量,减少大量数据处理过程中的人因错误率。
随机振动原始数据,是随机振动加速度随时间变化过程的时域数据,由振动传感器测量,经数据采集系统记录和保存,其保存文件格式一般有mat、txt、dat、csv、xls(含xlsx)等。
在MATLAB 中可以通过Import Data 工具手动导入数据文件,也可以通过dlmread、xlsread 等函数自动读取数据文件。
load(‘*.mat’)用于读取mat 格式的数据文件。 mat格式是MATLAB 自身的数据文件存储格式,可直接读取使用。
data = dlmread(‘*.txt’,’’,1,0) 用于读取基于ASCII 码的txt、dat 格式的数据文件。需要设置参数跳过数据头部的表头、文字说明等非数据部分。
data = xlsread(‘*.xlsx’,1) 用于读取csv、 xls(含xlsx)等表格格式的数据文件。需要设置读取页数和范围。
dlmread、xlsread 读取数据文件后,生成数据矩阵用于后续分析和绘图,同时保存为mat 格式文件方便再次使用。
对随机振动数据的时域处理,主要是对数据进行预处理,包括数据有效性的确认、零漂处理、滤波、异常数据剔除等。
对随机振动数据的频域处理,选取一定时间段的时域数据,计算其功率谱密度(PSD)及总均方根值(RMS)。可用pwelch 函数计算功率谱密度,用通用公式计算总均方根值(RMS)。
计算其功率谱密度(PSD)一般用pwelch 函数,调用格式如下:
其中输入参数: x-时域信号列向量,是前述数据data 经预处理后按时间范围截取得到的数据;window-窗函数;noverlap-重叠率;nfft-FFT 变换点数;fs-采样频率;
输出参数: Pxx -PSD 列向量,f-频率列向量;
计算总均方根值(RMS)函数如下:
其中:pxxc 为Pxx 在给定频率上下限范围内的值。
将功率谱密度(PSD)及总均方根值(RMS)分析结果生成数据矩阵用于后续分析和绘图,同时保存为mat格式文件方便再次使用。
根据环境数据信息化管理的要求,将原始数据和分析结果数据进行标准化存储。
利用MATLAB 绘图功能将时域数据曲线、功率谱密度曲线通过图形窗口直观显示,并在图形窗口显示数据的测量工况、通道代号、通道名称、数据说明等相关数据描述参数。
时域数据用线性坐标显示,可用plot 函数绘图;功率谱密度属于频域数据,需要用对数坐标显示,可用loglog 函数绘图。
通过MATLAB 的图形控制函数在图形窗口显示数据描述参数。例如:
xlabel(‘频率(Hz)')显示绘图横轴名称;
ylabel(‘PSD(g^2/Hz)’)显示绘图纵轴名称;
title(‘Title’)绘制图题;
legend(‘通道功率谱xxx','参考谱xxx')绘制数据曲线说明图例;
xlim([5 500])设置横轴坐标范围;
ylim([1e-12 1e0])设置纵轴坐标范围;
text(‘谱峰值1 xxxx’)在绘图制定位置添加文字说明;
最终绘图显示效果如图1 所示。
图1 随机振动PSD 图和时域图
为实现图形窗口显示数据描述参数的功能,可以编写MATLAB 代码利用图形控制函数来实现,也可以在绘图后手动编辑绘图窗口来添加。对于少量数据、通道数不多的情况,这两种方法具有简单、灵活的优势;而对于大量的、多通道振动数据的绘图显示,则需要寻求更加快速高效的方法。
对于少量数据、通道数不多的情况,可以直接在MATLAB 程序代码中写入需要显示的数据描述参数,甚至可以可以在绘图后手动编辑绘图窗口来添加。对于大量的、多通道振动数据,手动添加肯定是不可取的,而直接将数据描述参数写入程序代码来实现输入和显示,则工作量很大,效率很低,而且程序代码大量重复、臃肿低效、可读性差、容易出错。
如图2 所示,需要同时绘制9 个(实际工程中可多达几十个以上)测量通道的振动功率谱密度(PSD)曲线,以及一条振动参考谱曲线。不指定曲线名称时,图例中每条曲线被自动标识为data1、data2、data3……data9,可读性差。
图2 多通道汇总PSD 图
工程中测量得到的振动数据,除了每条数据中通道数量多,数据条数也很多。通常会在多种工况、多次试验中进行振动测量,每个工况、每次试验中也可能进行多次测量,或者将测量数据分成多段分别处理。可能需要处理数十条甚至数百条振动数据,每条数据中的通道名称和顺序是一致的,但是为了方便区分不同工况、试验、时段的数据,还需要在绘图中标识出每条数据的相关描述参数。通常将图2 中的图题即Title 替换为数据的工况、试验、时段等相关描述参数。
在绘图中手动添加需要的通道名称、工况、试验、时段等信息,费时费力,效率很低;而直接将数据描述参数写入程序代码,将导致代码臃肿、可读性差;而且MATLAB 代码编辑器并不擅长编辑大量字符串类型的数据描述参数,远不如专业文字或表格编辑器软件功能完善、方便高效。
因此,对于大量的、多通道振动数据的绘图显示,则需要寻求更加快速高效的方法。
经过大量振动数据分析的实践尝试和工程应用,形成了一种方法,利用表格软件快速高效的输入编辑功能,将相关数据描述参数保存为表格文件,在MATLAB 数据分析程序中利用专用函数,自动读取表格文件,获取相关数据描述参数并在图形窗口显示。
利用表格软件快速高效的输入编辑功能,将相关数据描述参数保存为表格文件。
Excel 是一种用于电子表格创建和编辑的专业软件,功能丰富,应用广泛,也可以方便地与MATLAB 软件实现交互。因此采用Excel 将相关数据描述参数保存为表格文件。
图3 为包含测量通道编号、分析通道编号、通达代号、通道名称等数据描述参数的表格文件。图4 为包含每条振动数据的工况、试验、时段等数据描述参数的表格文件。Excel 中自动扩展、自动填充等丰富的功能,便于快速高效的生成和编辑数据描述参数表格文件。将生成的表格文件以文件名“chnname.xlsx” 保存,上述两个表格分别为该文件中的Sheet1、Sheet2。
图3 数据描述参数表格文件(通道)
图4 数据描述参数表格文件(工况)
在MATLAB 数据分析程序中利用相关函数,自动读取表格文件,获取相关数据描述参数。
在振动数据分析程序中,使用xlsread 函数读取excel表格内容,其调用格式如下:
其中输入参数:filename-表格文件名称,sheet-表格文件中的页号(sheet);
输出参数:num-表格文件中的数字,txt-表格文件中的文字内容,raw-表格文件中的所有内容。
分别读取之前创建的表格文件 “chnname.xlsx” 中的Sheet1、Sheet2,从表格中约定的列读取信息,并按照通道序号生成通道名称数组CHNNAME,按照工况序号生成工况名称数组CASENAME 等,供下一步绘图显示使用。
将相关数据描述参数在图形窗口显示。
在振动分析和绘图程序中,按照通道序号读取通道名称数组CHNNAME 中对应的通道名称变量chnname,按照工况序号读取工况名称数组中的CASENAME 中对应的工况名称变量CaseName,调用title、legend、text 等图形控制函数在图形窗口的相应位置显示。
显示数据描述参数的多通道汇总时域图显示效果见图5,多通道汇总PSD 图显示效果见图6。
图5 显示数据描述参数的多通道汇总时域图
图6 显示数据描述参数的多通道汇总PSD 图
本文利用表格软件快速高效的输入编辑功能,将相关数据描述参数保存为表格文件,在MATLAB 数据分析程序中利用专用函数,自动读取表格文件,获取相关数据描述参数并在图形窗口显示,提高了随机振动数据分析工作的效率。
该方法可广泛应用于装备环境工程、振动工程、测量与数据处理等专业领域的随机振动数据及类似数据分析,提高数据分析及数据管理[5]的工作质量,减少大量数据处理过程中的人因错误率。