掌桥专利:专业的专利平台
掌桥专利
首页

MFCC提取的分布式流处理方法、系统、存储介质及计算机

文献发布时间:2023-06-19 18:58:26


MFCC提取的分布式流处理方法、系统、存储介质及计算机

技术领域

本发明涉及工业大数据和信号处理领域,用于机械设备振动信号、声音信号的实时处理,具体涉及MFCC提取的分布式流处理方法、系统、存储介质及计算机。

背景技术

MFCC,全称为Mel Frequency Cepstrum Coefficient,即梅尔频率倒谱系数,MFCC常用于声音信号的处理,也用于振动信号处理。在机械设备运维场景下,振动监测和声音监听是常用的技术手段,通过提取信号的MFCC,用于机械设备的异常检测和故障诊断。

目前已知的MFCC提取方法和技术,都是在振动数据或声音数据采集完成后进行离线分析的,MFCC提取算法需要对采集的信号进行分帧处理。当被监测设备数量增多,振动、声音传感器数量变得越来越庞大时,信号经过分帧后将形成巨量的矩阵,给离线特征提取工作带来巨大压力,而且由于特征提取滞后,难以满足需要实时分析MFCC的在线故障诊断场景。

发明内容

为了解决被监测设备数量较多时,振动、声音传感器数量变得越来越庞大时,信号经过分帧后将形成巨量的矩阵,给离线特征提取工作带来巨大压力,而且由于特征提取滞后,难以满足需要实时分析MFCC的在线故障诊断场景等技术问题,本发明提供MFCC提取的分布式流处理方法、系统、存储介质及计算机。

本发明解决上述技术问题的技术方案如下:

MFCC提取的分布式流处理方法,包括如下步骤:

并行获取多源信号原始数据流;其中,所述多源信号原始数据流的数据类型为String数据;

将所述多源信号原始数据流进行并行扁平映射,得到多源离散信号数据流;

对所述多源离散信号数据流进行数据流分窗操作,得到并行的连续不断的滑动窗口;

利用并行窗口处理函数在并行的连续不断的所述滑动窗口中提取梅尔频率倒谱系数,得到多源信号对应的梅尔频率倒谱系数数据流。

本发明的有益效果是:振动、声音等信号,每毫秒就产生很多个数据点,如果对数据点进行逐个发送,很有可能就会出现先发生的数据点后到达处理系统的情况,这样处理系统收到的数据就会出现乱序。所以本发明通过将多个毫秒采集的数据封装成一个String格式的片段来发送,片段内的信号数据点是按照原本发生顺序排列的,因此不会乱序,由于每个片段产生前后相差有多个毫秒,在网络传输正常时片段之间也不会产生乱序。当原始数据流的数据源有多个时,通过对数据流进行扁平映射以及分区分窗操作,让多源数据流的梅尔频率倒谱系数提取工作能够并行执行,提高梅尔频率倒谱系数的提取效率和及时性,避免了大批数据离线处理的滞后性以及数据处理量庞大而带来的数据处理压力。

在上述技术方案的基础上,本发明还可以做如下改进。

进一步,所述String数据至少包括时间戳、传感器ID、信号值以及分隔符,其中,所述传感器ID为所述原始数据流对应的传感器编号。

进一步,将所述多源原始数据流进行并行扁平映射,得到多源离散信号数据流,包括如下步骤:利用Flink流处理方法将所述多源原始数据流进行并行扁平映射,得到多源离散信号数据流。

采用上述进一步方案的有益效果是,Flink流处理具备的高吞吐、低延迟、分布式等特点,提高了数据处理效率。

进一步,对所述多源离散信号数据流进行数据流分窗操作,得到把并行的连续不断的滑动窗口,包括如下步骤:

将所述多源离散信号数据流按照传感器ID进行keyBy操作,得到键控数据流;其中,keyBy操作具体为将传感器ID相同的所述多源离散信号数据流发送到指定分区中;

对每一分区中的所述键控数据流进行数据流分窗操作,得到每个传感器对应的并行的连续不断的滑动窗口。

进一步,利用并行窗口处理函数在连续不断的所述滑动窗口中提取梅尔频率倒谱系数,得到梅尔频率倒谱系数数据流,包括如下步骤:

利用所述并行窗口处理函数将每个所述滑动窗口中的数据存储在一个对应的双精度数组中;

对每个所述双精度数组调用梅尔频率倒谱系数提取函数得到所述梅尔频率倒谱系数数据流。

进一步,所述梅尔频率倒谱系数提取函数包括主函数以及多个子函数,多个所述子函数分别为梅尔滤波器组函数、离散余弦变换函数、快速傅里叶变换函数以及海明窗口函数;

将所述双精度数组输入所述主函数,所述主函数通过调用多个所述子函数对所述双精度数组进行计算,得到梅尔频率倒谱系数。

为了解决上述技术问题,本发明还提供多源信号梅尔频率倒谱系数提取分布式流处理系统,其具体技术内容如下:

MFCC提取的分布式流处理系统,包括:

数据获取模块,用于并行获取多源信号原始数据流;其中,所述多源信号原始数据流的数据类型为String数据;

数据处理模块,用于将所述多源信号原始数据流进行并行扁平映射,得到多源离散信号数据流;对所述多源离散信号数据流进行数据流分窗操作,得到并行的连续不断的滑动窗口;利用并行窗口处理函数在连续不断的所述滑动窗口中提取梅尔频率倒谱系数,得到多源信号对应的梅尔频率倒谱系数数据流。

基于多源信号梅尔频率倒谱系数提取分布式流处理方法,本发明还提供一种存储介质,其技术内容如下:

一种存储介质,所述存储介质存储有计算机程序,所述计算机程序被计算机的处理器执行时,实现上述多源信号梅尔频率倒谱系数提取分布式流处理方法。

基于多源信号梅尔频率倒谱系数分布式流处理提取方法,本发明还提供一种计算机,其技术内容如下:

一种计算机,包括存储器以及处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,实现上述MFCC提取的分布式流处理方法。

附图说明

图1为本发明实施例1中一种MFCC提取的分布式流处理方法的流程框图;

图2为本发明实施例1中信号流扁平映射处理流程示意图;

图3为本发明实施例1中MFCC提取函数集的结构示意图;

图4为本发明实施例3中原始振动信号的曲线图;

图5为本发明实施例3中振动信号数据流记录图;

图6为本发明实施例3中Flink MFCC提取任务程序执行框图。

具体实施方式

以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。

实施例1

如图1所示,本实施例提供一种MFCC提取的分布式流处理方法,包括如下步骤:

S1、并行获取多源信号原始数据流;其中,所述原始数据流的数据类型为String数据;其中,所述String数据至少包括时间戳、传感器ID、信号值以及分隔符,所述传感器ID为所述原始数据流对应的传感器编号。对于振动信号和声音信号数据源而言,信号采集频率往往很高。以采集频率20kHz为例说明,每毫秒将生成20个点,为了避免信号经过网络传输带来的乱序问题,Kafka生产者采用循环打包若干毫秒的方式发送消息记录。Kafka是由Apache软件基金会开发的一个开源流处理平台,是一种高吞吐量的分布式发布订阅消息系统,由Scala和Java编写。

S2、将所述多源信号原始数据流进行并行扁平映射,得到多源离散信号数据流;具体为,利用Flink流处理方法将所述多源信号原始数据流进行并行扁平映射,得到多源离散信号数据流;大数据场景下,采用Kafka生产者作为数据源,Flink程序则从Kafka中拉取并消费数据。

S3、所述多源离散信号数据流对所述多源离散信号数据流进行数据流分窗操作,得到并行的连续不断的滑动窗口;具体步骤为:将所述多源离散信号数据流按照传感器ID进行keyBy操作,得到键控数据流;其中,keyBy操作具体为将传感器ID相同的所述多源离散信号数据流发送到指定的同一分区中;

对每一指定的分区中的所述键控数据流进行数据流分窗操作,得到并行的连续不断的滑动窗口。

S4、利用并行窗口处理函数在并行的连续不断的所述滑动窗口中提取梅尔频率倒谱系数,得到多源信号对应的梅尔频率倒谱系数数据流。具体步骤为:

利用并行窗口处理函数将每个所述滑动窗口中的数据存储在一个对应的双精度数组中;

对每个所述双精度数组调用梅尔频率倒谱系数提取函数得到所述梅尔频率倒谱系数数据流;

其中,所述梅尔频率倒谱系数提取函数包括主函数以及多个子函数,多个所述子函数分别为梅尔滤波器组函数、离散余弦变换函数、快速傅里叶变换函数以及海明窗口函数;

将所述双精度数组输入所述主函数,所述主函数通过调用多个所述子函数对所述双精度数组进行计算,得到梅尔频率倒谱系数。调用Mel滤波器组生成函数,构造出Mel滤波器组;然后,调用DCT系数矩阵生成函数,得到DCT系数;接着对所述双精度数组进行快速傅里叶变换,得到频谱结果;最后,对频谱结果滤波,即用Mel滤波器组乘以频谱结果后,求对数并乘以DCT系数,得到梅尔频率倒谱系数。

如图2所示,多源信号原始数据由对应的Kafka分区发送,这样利用Flink流处理程序就能以并行的方式从数据源读取数据,数据读取后形成的原始数据流是一条条String格式的数据,然后需要将String格式的数据进行扁平映射。采用Flink的flapMap算子来实现这一转换操作,核心是自定义的FlatMapFunction。flapMap算子的主要步骤是:按照分隔符将String格式的记录划分成字符串数组Array[String];循环遍历字符串数组Array[String],从所述字符串数组Array[String]的第3个元素即第1个信号值开始,每次循环都发送出包装成如下样例类(caseclass)格式的数据:

case class VibElement(ts:Long,sensorId:Int,acc:Double)

其中,ts为原始记录的时间戳,sensorId为原始记录的传感器ID,acc为离散的信号值。

如图3所示,对扁平映射转换后得到的数据流,按照传感器ID进行keyBy操作,形成键控数据流KeyedStream,后续分窗及窗口处理均针对不同的传感器数据流进行独立并行操作。其中,keyBy主要作用是把具有相同key的数据发送到相同的分区中;数据本来是分布在不同的slot即分区中,keyBy会把相同key的数据拉到相同的slot即分区中。

分窗操作采取计数滑动窗口,窗口长度即数据元素个数、滑动步长为分窗操作的两个参数。在信号MFCC提取应用中,窗口长度一般设置为256,滑动步长设置为128。

当每个窗口收集完成所有数据时,将数据存储在一个Double类型的数组中,然后对这个Double类型的数组调用MFCC提取函数,得到DenseVector[Double]类型的MFCC。为了辨识该条MFCC数据所属的传感器ID以及信号窗口的时间戳,将最终提取结果包装成如下类型的样例类输出:

case class MfccResult(startts:Long,endts:Long,

sensorId:Int,mfcc:DenseVector[Double])

其中,startts从该窗口的第1条数据中提取,为窗口起始时间戳,endts从该窗口的最后1条数据中提取,为窗口截止时间戳,sensorId即键控数据流所带的key标记。这里时间戳均为事件时间,即传感器信号的采集时间。

如图4所示,Scala是大数据技术常用的开发语言,为了能供信号流特征提取的Flink主程序直接调用,提供用Scala开发的MFCC提取函数集,MFCC提取函数集包括主函数、Mel滤波器组生成函数、DCT函数、FFT函数、Hamming窗口函数。DCT函数为上述的离散余弦变换系数矩阵生成函数,FFT函数为快速傅里叶变换函数,Hamming窗口函数为海明窗口函数,Mel滤波器组生成函数为梅尔滤波器组生成函数,Mel滤波器组为梅尔滤波器组。

主函数的流程、输入输出以及函数调用关系如下:

①主函数的设计:

主函数的输入为Array[Double]类型的数组x,此外还包括采样率fs、Mel滤波器阶数p、FFT变换长度N,这三个参数的数据类型均为I nt即整型数据类型,其中p一般设为24。FFT表示快速傅里叶变换,数组x表示上述双精度数组。

主函数的输出为MFCC,MFCC的格式为p/2的DenseVector[Doub le]类型。

主函数的主要流程是:首先,调用Mel滤波器组生成函数,构造出Mel滤波器组;然后,调用DCT系数矩阵生成函数,得到DCT系数;接着对数组x进行快速傅里叶变换,得到频谱结果;最后,对频谱结果滤波即用滤波器组乘以频谱,求对数并乘以DCT系数,得到MFCC系数。

②Me l滤波器组生成函数,把从主函数输入的三个参数fs、p、N传递给该函数,采用常规的Mel滤波器组生成方法得到DenseMatr ix[Double]类型的Me l滤波器组,该矩阵的尺寸为:

p×(N/2+1)

其中,DCT系数矩阵生成函数用于把从主函数输入的参数p作为该函数的输入,采用常规的DCT系数生成方法得到DenseMatr ix[Doub le]类型的DCT系数矩阵,该矩阵的尺寸为p/2×p。其中,DCT系数为离散余弦变换系数。

FFT函数用于把从主函数输入的数组x作为该函数的输入,采用常规的FFT变换方法得到Array[Doubl e]类型的输出,在FFT函数中,首先要对x进行Hammi ng窗过滤。

Hamming窗口过滤函数用于把从FFT函数中输入的数组x作为该函数的输入,采用常规的Hamming窗口构建方法得到同样长度的数组,作为滤波后的结果。

本发明实施例通过将原始数据流的数据设定为Str ing数据,振动、声音等信号,每毫秒就产生很多个数据点,如果对数据点进行逐个发送,很有可能就会出现先发生的数据点后到达处理系统的情况,这样处理系统收到的数据就会出现乱序。所以本发明通过将多个毫秒采集的数据封装成一个String格式的片段来发送,片段内的信号数据点是按照原本发生顺序排列的,因此不会乱序,由于每个片段产生前后相差有多个毫秒,在网络传输正常时片段之间也不会产生乱序。当原始数据流的数据源有多个时,通过对数据流进行扁平映射以及分窗操作,让多源数据流的梅尔频率倒谱系数提取工作能够并行执行,提高梅尔频率倒谱系数的提取效率和及时性,避免了大批数据离线处理的滞后性以及数据处理量庞大而带来的数据处理压力。Flink流处理具备的高吞吐、低延迟、分布式等特点,提高了数据处理效率。不同于现有技术中离线的梅尔频率倒谱系数特征提取,本发明实施例是在流式处理范式下提取梅尔频率倒谱系数,提取过程中不需要分帧操作。

实施例2

基于实施例1,本实施例提供一种MFCC提取的分布式流处理系统,包括数据获取模块以及数据处理模块;

数据获取模块用于并行获取多源信号原始数据流;其中,所述原始数据流的数据类型为String数据;具体数据获取方式为:采用Kafka生产者作为数据源,持续发送String格式的多源信号原始数据流,Flink程序则从Kafka中拉取并消费数据。

数据处理模块,用于将所述多源信号原始数据流进行并行扁平映射,得到多源离散信号数据流;对所述多源离散信号数据流进行数据流分窗操作,得到并行的连续不断的滑动窗口;利用并行窗口处理函数在并行的连续不断的所述滑动窗口中提取梅尔频率倒谱系数,得到多源信号对应的梅尔频率倒谱系数数据流。

其中,将所述原始数据流进行并行扁平映射,得到多源离散信号数据流;具体为,利用Flink流处理的flatMap算子将所述原始数据流进行并行扁平映射,得到多源离散信号数据流。

所述多源离散信号数据流对所述多源离散信号数据流进行数据流分窗操作,得到并行的连续不断的滑动窗口;具体步骤为:将所述多源离散信号数据流按照传感器ID进行keyBy操作,得到键控数据流;其中,keyBy操作具体为将传感器ID相同的所述多源离散信号数据流发送到指定的同一分区中;

对每一指定的分区中的所述键控数据流进行数据流分窗操作,得到并行的连续不断的滑动窗口。

利用并行窗口处理函数在并行的连续不断的所述滑动窗口中提取梅尔频率倒谱系数,得到多源信号对应的梅尔频率倒谱系数数据流。具体步骤为:

利用窗口函数将每个所述滑动窗口中的数据存储在一个对应的双精度数组中;

对每个所述双精度数组调用梅尔频率倒谱系数提取函数得到所述梅尔频率倒谱系数数据流;

其中,所述梅尔频率倒谱系数提取函数包括主函数以及多个子函数,多个所述子函数分别为梅尔滤波器组函数、离散余弦变换函数、快速傅里叶变换函数以及海明窗口函数;

将所述双精度数组输入所述主函数,所述主函数通过调用多个所述子函数对所述双精度数组进行计算,得到梅尔频率倒谱系数。

实施例3

基于实施例1,本实施例提供一种MFCC提取的分布式流处理方法或一种MFCC提取的分布式流处理系统的实验验证过程以及验证结果。具体实验过程及验证结果如下:

以振动传感器采集的加速度信号为实例来对本发明提出的方法和系统进行验证。在本实例中,一共布置了4个振动传感器来实时采集设备的振动信号,信号的采样频率为20kHz,图4为1s内的振动信号曲线图。

通过Kafka生产者并行发布4个传感器的信号流,每8ms产生1条记录,该记录包含160个采样点,得到如图5所示的数据流记录。

测试项与测试方法;

采用4个振动信号数据源对MFCC提取流处理方法和系统进行测试,主要测试项及其测试方法见表1:

表1测试项及测试方法

测试过程及结果;

MFCC提取分布式流处理功能测试如下:

运行Kafka生产者程序,并行发送4个振动传感器采集的振动信号数据,每个传感器每8ms均发送160条采样点,将每个传感器每8ms发送的采样点表示为1次记录,持续发送20000次记录,数据流持续时长大约为2.7分钟,测试在此期间能否正常提取并输出MFCC提取结果数据流。

按照256长度、128滑动步长的计数窗口,每个传感器的振动采样点为3200000个,提取的MFCC结果的个数累计为:

测试结果显示:

数据流生成和MFCC特征提取保持同步,信号发送至处理系统的瞬间,MFCC特征提取计算任务就触发并完成了;经过反复多次测试,特征提取结果与离线处理结果完全一致,表明程序设计与运行的正确性;每个传感器MFCC提取结果的条数均为24999,证明数据处理的完整性为100%。

MFCC特征提取延迟时间测试:

为了测试特征提取延迟时间,在同一台主机上运行Kafka生产者程序和Flink特征提取流处理主程序,通过MFCC特征处理完成瞬时的计算机系统时间减去窗口截止的事件时间,得到每次生成MFCC的延迟时间,共得到四个传感器特征提取的延迟时间数据样本99996个,相关统计结果见表2。

表2延迟时间测试结果

由于测试数据经历了从本地主机运行的Kafka生产者程序发送到Kafka集群,再由本地主机运行的Flink主程序从Kafka集群拉取数据。经过实测,每个窗口的特征提取本身的处理时间非常短,且小于1ms;因此,延迟时间大部分是网络传输所引入的,即便如此平均30多毫秒的整体延迟也充分证明通过流处理来提取MFCC特征是非常高效的,也就是说从多源信号原始数据产生到对应的MFCC特征输出之间延迟时间是极短的。

特征提取程序在计算机集群中的测试:

如图6所示,将FlinkMFCC提取程序及其第三方依赖打包,部署至Hadoop集群。通过“./bin/yarn-session.sh-nmmfccflinktest-d”命令,为执行Flink任务开启一个Yarn会话。然后通过“./bin/flinkrun-corg.atcsu.mfcc.VibMFCCRealTime/opt/program/FlinkMFCC-1.0.0.jar”命令,提交Flink任务。运行Kafka生产者程序,生成多源振动信号原始数据。在集群模式下,程序正常运行,MFCC实时提取结果正确。

本发明实施例通过实验验证了测试结果和本地单机测试结果一致,表明计算机集群处理模式下能对多源信号原始数据流进行正确提取MFCC特征,数据产生即完成处理,且数据处理完整率也为100%。因此,本发明能够让多源数据流的梅尔频率倒谱系数提取工作能够实时且并行执行,提高梅尔频率倒谱系数的提取效率和及时性,避免了大批数据离线处理的滞后性以及数据处理量庞大而带来的数据处理压力。

实施例4

基于实施例1,本实施例提供一种存储介质,所述存储介质存储有计算机程序,所述计算机程序被计算机的处理器执行时,实现上述MFCC提取的分布式流处理方法。存储介质指存储数据的载体。比如软盘、光盘、DVD、硬盘、闪存、U盘、CF卡、SD卡、MMC卡、SM卡、记忆棒(Memory Stick)、xD卡等。存储介质还可以是基于闪存即Nandflash的,比如U盘、CF卡、SD卡、SDHC卡、MMC卡、SM卡、记忆棒、xD卡等。

本发明实施通过将程序存储于存储介质中,能够通过处理器来执行程序实现上述MFCC提取的分布式流处理方法,提高数据处理效率。

实施例5

基于实施例1,本实施例提供一种计算机,包括存储器以及处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,实现上述所述的MFCC提取的分布式流处理方法。通过运行或执行存储在存储器内的软件程序和/或模块,以及调用存储在存储器内的数据,执行终端的各种功能和处理数据,从而对终端进行整体监控,例如实现上述MFCC提取的分布式流处理方法。处理器可以为一个或多个,处理器还可以被实现为计算设备的组合。

本发明实施例通过利用计算机实现上述MFCC提取的分布式流处理方法对应的程序或应用模块,提高数据处理效率。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的构思和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

技术分类

06120115757858