赞
踩
时域计算代码相对简单,下列代码主要来自求助matlab时域分析程序-峰值、均方根、裕度、峭度_百度知道。不过原文中求“峭度因子”的方法不对,即“Kr = sum(y.^4)/sqrt(sum(y.^2)))”,求峭度直接用函数kurtosis就行。
- %x=0:0.1:2*pi;
- %y=sin(x); %信号
- y=normrnd(600,1,1000,1); %生成平均值为600,标准差为1的1000*1的矩阵
- plot(y);
- ma = max(y); %最大值
- mi = min(y); %最小值
- me = mean(y); %平均值
- pk = ma-mi; %峰-峰值
- av = mean(abs(y)); %绝对值的平均值(整流平均值)
- va = var(y); %方差
- st = std(y); %标准差
- ku = kurtosis(y); %峭度
- sk = skewness(y); %偏度
- rm = rms(y); %均方根
- S = rm/av; %波形因子
- C = pk/rm; %峰值因子
- I = pk/av; %脉冲因子
- xr = mean(sqrt(abs(y)))^2;
- L = pk/xr; %裕度因子
原始信号为平均值为600,标准差为1的数列:
计算结果为:
关于均方根、峰值因子、脉冲因子、裕度因子、峭度因子、波形因子和偏度等概念的理解可以参考我之前的文章信号的各种时域分析方法的理解(峰值因子、脉冲因子、裕度因子、峭度因子、波形因子和偏度等)
笔者最近在做这样一件事情。由于搞科研写论文时,对特征提取的需要往往是集中性的、多种类的、需求各异的,所以我把常用的特征值指标:
有量纲特征值8个——最大值、最小值、峰峰值、均值、方差、标准差、均方值、均方根值(RMS)
无量纲特征值6个——峭度、偏度、波形因子、峰值因子、脉冲因子、裕度因子
频域特征值5个——重心频率、均方频率、均方根频率、频率方差、频率标准差 (熵相关特征若干——这个后续补充。还会有其他常用、不常用的特征指标)
以上19种全都集中到一个封装函数里,实现一行代码完成特征提取。
比如提取数据“波形因子”就可以像这样写:
fea = genFeature(data,{'waveformF'}) %对data数据求波形因子
如果提取数据“最大值、最小值、峰峰值、均值、方差、标准差、均方值...”这全部19种特征,就可以这样写:
fea =genFeature(data,{'max','min','mean','peak','arv','var','std','kurtosis','skewness', 'rms','waveformF','peakF','impulseF','clearanceF'})%对data数据求波形因子
也就是说需要提取哪个特征,在函数中直接指定就可以了。输出的fea变量里就会得到相应的这些特征值,顺序也是与输入的排序保持一致的。
这个函数的介绍如下:
- function fea = genFeature(data,fs,featureNamesCell)
- % 时域信号特征提取
- % 输入:
- % data:待特征提取的时域信号
- % fs:采样频率,如果不提取频域特征,fs值可以设置为1
- % featureNamesCell:拟进行特征提取的特征名称,该变量为cell类型,其中包含的特征名称为字符串,特征名称需要在下边列表中:
- % 目前支持的特征(2021.10.29):
- % max :最大值
- % min :最小值
- % mean :平均值
- % peak :峰峰值
- % arv :整流平均值
- % var :方差
- % std :标准差
- % kurtosis :峭度
- % skewness :偏度
- % rms :均方根
- % waveformF :波形因子
- % peakF :峰值因子
- % impulseF :脉冲因子
- % clearanceF:裕度因子
- % FC:重心频率
- % MSF:均方频率
- % RMSF:均方根频率
- % VF:频率方差
- % RVF:频率标准差
- %
- % 输出:
- % fea:数据data的特征值数组,其特征值顺序与featureNamesCell一一对应
需要上边这个函数文件以及测试代码的同学,可以在下述链接中获取:
这个函数会持续更新,有哪些想要加进去的特征指标,同学们可以在评论区留言,笔者会考虑纳入到这个“特征提取指标全家桶”中。
文章如要转载请私信与我联系,并注明来源知乎专栏与信号处理有关的那些东东作者Mr.括号。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。