信号下的基本时域频域特征(上)

星期日, 16. 六月 2019 07:41下午
最近忙于项目,因此本期博客就简单梳理一下信号(笔者做的多数情况下是三相电流数据)下的基本时域和频域特征。
提取特征可以用tsfresh这个库来实现,但是这里还是采用了numpy。
该部分的程序代码笔者写了一个可以直接调用的类,见笔者git

1 时域特征

假设共有m条数据,每一条数据长度为n,第i条数据第j个数据点用\(z_{ij}\)表示,并且z为数组,不能是列表,否则以下一些程序会报错。以下主要从数学公式和python实现来叙述

(1) 含量纲的时域特征

含量纲的时域特征,笔者简单整理出了十个,其中包括最大值(maximum)、最小值(minimum)、极差(range)、均值(mean)、中位数(media)、众数(mode)、标准差(standard deviation)、均方根值(root mean square/rms)、均方值(mean square/ms)、k阶中心/原点矩。
导入所需要的库

import numpy as np

最大值

max(z_i)

max_z = np.max(z, axis=1)

最小值

min(z_i)

min_z = np.min(z, axis=1)   

极差

max(z_i)-min(z_i)

range_z = np.max(z, axis=1)-np.min(z, axis=1)

均值

\frac{1}{n}\sum_{j=0}^{n-1}z_{ij}

mean_z = np.mean(z, axis=1)

中位数

将一组数从小到大排序,出现在中间的数(当n为奇数时)或者中间两个数的均值(当n为偶数时)

media_z = np.median(z, axis=1)

众数

一组数从大到小排序,出现次数最多的数(当有多个数出现次数一样,取最小的数)

import scipy.stats
mode_z = scipy.stats.mode(z, axis=1)[0].reshape([-1])

标准差

\sqrt{\frac{1}{n}\sum_{j=0}^{n-1}(z_{ij}-\overline{z_i})^2}

std_z = np.std(z, axis=1)

均方根值

\sqrt{\frac{1}{n}\sum_{j=0}^{n-1}z_{ij}^2}

from sklearn.metrics import mean_squared_error
rms_z = [np.sqrt(mean_squared_error(zi, np.zeros(len(zi)))) for zi in z]
rms_z = np.array(rms_z)

均方值(二阶原点矩)

\frac{1}{n}\sum_{j=0}^{n-1}z_{ij}^2

from sklearn.metrics import mean_squared_error
ms_z = [mean_squared_error(zi, np.zeros(len(zi))) for zi in z]
ms_z = np.array(ms_z)

k阶中心矩/原点矩

k阶中心矩

\frac{1}{n}\sum_{j=0}^{n-1}(z_{ij}-\overline{z_i})^k

k阶原点矩

\frac{1}{n}\sum_{j=0}^{n-1}(z_{ij})^k

def k_order_moment(z, k, is_center=True, is_origin=True):
    """
    Calculate k-order center moment and k-order origin moment of z
    :param z: array_like
    :param k: int
    :param is_center: bool; whether calculate k-order center moment
    :param is_origin: bool; whether calculate k-order origin moment
    :return: tuple; return k-order center moment and k-order origin moment
    """
    if (is_center is False) and (is_origin is False):
        raise ValueError("At least one of is_center and is_origin is True")
    if (type(k) is not int) or (k < 0):
        raise TypeError("k must be a integrate and more than 0")
    if type(z) is list:
        z = np.array(z)
        
    mean_z = np.mean(z, axis=1)
    if is_origin is False:
        k_center = np.mean([(z[i]-mean_z[i])**k for i in range(z.shape[0])], axis=1)
        return (k_center, None)
    if is_center is False:
        k_origin = np.mean([z[i]**k for i in range(z.shape[0])], axis=1)
        return (None, k_origin)
    if is_center and is_origin:
        k_center = np.mean([(z[i] - mean_z[i]) ** k for i in range(z.shape[0])], axis=1)
        k_origin = np.mean([z[i] ** k for i in range(z.shape[0])], axis=1)
        return (k_center, k_origin)

(2) 无量纲的时域特征

无量纲的时域笔者主要列举了6个,分别为偏度(skewness),峰度(kurtosis),峰度因子(kurtosis factor)、波形因子(waveform factor)、脉冲因子(pulse factor)、裕度因子(margin factor)。

偏度(三阶标准矩)

E[(\frac{z_{ij}-\mu}{\sigma})^3]
\(\mu,\sigma\)为总体均值和标准差,不是样本均值和标准差!!!
偏度可通过下面两种方法计算:
方法1:
\frac {\frac{1}{n}\sum_{j=0}^{n-1}(z_{ij}-\overline{z_i})^3} {[\frac{1}{n-1}\sum_{j=0}^{n-1}(z_{ij}-\overline{z_i})^2]^{3/2}}
方法2:
\frac{\sqrt{n(n-1)}}{n-2} \left[\frac {\frac{1}{n}\sum_{j=0}^{n-1}(z_{ij}-\overline{z_i})^3} {[\frac{1}{n}\sum_{j=0}^{n-1}(z_{ij}-\overline{z_i})^2]^{3/2}} \right]
python和大多数软件采用方法2求偏度

import pandas as pd
skew_z = pd.DataFrame(z.transpose()).skew().values

峰度(四阶标准矩)

E[(\frac{z_{ij}-\mu}{\sigma})^4]
\mu,\sigma为总体均值和标准差,不是样本均值和标准差!!!
峰度同偏度一样也有两种方法计算:
方法1:
\frac {\frac{1}{n}\sum_{j=0}^{n-1}(z_{ij}-\overline{z_i})^4} {[\frac{1}{n}\sum_{j=0}^{n-1}(z_{ij}-\overline{z_i})^2]^{2}}-3= \frac{m_{4}}{m_{2}^2}-3

方法2(n>3):
\frac {n^2((n+1)m_4-3(n-1)m_2^2)} {(n-1)(n-2)(n-3)} \frac {(n-1)^2} {n^2m_2^2}
python和大多数软件采用方法2求峰度

import pandas as pd
kurt_z = pd.DataFrame(z.transpose()).kurt().values

峰度因子

\frac{max(z_i)}{\sqrt{\frac{1}{n}\sum_{j=0}^{n-1}z_{ij}^2}}

kurt_factor_z = max_z/rms_z

波形因子

\frac{\sqrt{\frac{1}{n}\sum_{j=0}^{n-1}z_{ij}^2}}{\frac{1}{n}\sum_{j=0}^{n-1}z_{ij}}

wave_factor_z = rms_z/mean_z

脉冲因子

\frac{max(z_i)}{|\frac{1}{n}\sum_{j=0}^{n-1}z_{ij}|}

pulse_factor_z = max_z/abs(mean_z)

裕度因子

\frac{max(z_i)}{\frac{1}{n}\sum_{j=0}^{n-1}z_{ij}^2}

margin_factor_z = max_z/ms_z
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容

  • www.dlworld.cn 听说你了解深度学习最常用的学习算法:Adam优化算法?-深度学习世界深度学习常常需要...
    hzyido阅读 56,044评论 0 24
  • 今天试着在一本新本子上做读书笔记,想做成图文并茂且言简意赅(字要少的)样子,结果在一面空白纸上怎么也下不去笔。 想...
    YUN_hoo阅读 442评论 0 1
  • 11月22日,沽市的小雪如期而至,大地披上了一层薄纱,犹如新娘的婚纱一样的美丽。小雪在自己中国农历节气里送给了自己...
    河畔的小妞阅读 167评论 0 0
  • 皆知鹅卵众无名,拼凑艳图翎角屏。 神具匠心巧思造,霸值千万叹天工。 (新韵,十一庚平)
    涂糊虫阅读 479评论 2 3
  • 五點半的台北黑暗依舊。 每天的早起蹓瑪吉已經習以為常, 而今天醒得特別早。 開車15分鐘就到的大湖公園, 是城市邊...
    leejayce阅读 237评论 2 1