python实现信号时域统计特征提取代码


Posted in Python onFebruary 26, 2020

1.实验数据需求

为了对采集的压力实验数据做特征工程,需要对信号进行时域的统计特征提取,包含了均值、均方根、偏度、峭度、波形因子、波峰因子、脉冲因子、峭度因子等,现用python对其进行实现。

2.python实现

其中的输入参数含义:

① data:实验数据的DataFrame

② p1:所截取实验信号的起始采样点位置

③ p2:所截取实验信号的终止采样点位置

from pandas import Series
import math
pstf_list=[]
def psfeatureTime(data,p1,p2):
 #均值
 df_mean=data[p1:p2].mean()
 #方差
 df_var=data[p1:p2].var()
 #标准差
 df_std=data[p1:p2].std()
 #均方根
 df_rms=math.sqrt(pow(df_mean,2) + pow(df_std,2))
 #偏度
 df_skew=data[p1:p2].skew()
 #峭度
 df_kurt=data[p1:p2].kurt()
 sum=0
 for i in range(p1,p2):
  sum+=math.sqrt(abs(data[i]))
 #波形因子
 df_boxing=df_rms / (abs(data[p1:p2]).mean())
 #峰值因子
 df_fengzhi=(max(data[p1:p2])) / df_rms
 #脉冲因子
 df_maichong=(max(data[p1:p2])) / (abs(data[p1:p2]).mean())
 #裕度因子
 df_yudu=(max(data[p1:p2])) / pow((sum/(p2-p1)),2)
 featuretime_list = [df_mean,df_rms,df_skew,df_kurt,df_boxing,df_fengzhi,df_maichong,df_yudu]
 return featuretime_list

3.结果与说明

python实现信号时域统计特征提取代码

补充拓展:python数据结构与算法--回溯算法详解

回溯算法:一种优先搜索算法(试探法);按优条件向前搜索,以达目标;当试探到某步,发现原来选择并不好(走不通),就退回重新选择。

回溯算法的一般步骤:1:定义问题的解空间(搜索中动态生成);2:确定易搜索的解空间结构(一般为树形结构或图);3:以深度优先的方式搜索解空间,搜索中用剪枝函数避免无效搜索。

剪枝函数:1:用约束函数在扩展节点处减去不满足约束条件的子树;2:用限界函数减去不能得到最优解的子树。

回溯法:实战

1:电话号码的字母组合

方法:回溯(适用于组合问题)

class Solution:
 def letterCombination(self,digits):
  
  phone={'2': ['a', 'b', 'c'],
     '3': ['d', 'e', 'f'],
     '4': ['g', 'h', 'i'],
     
     '5': ['j', 'k', 'l'],
     '6': ['m', 'n', 'o'],
     '7': ['p', 'q', 'r', 's'],
     '8': ['t', 'u', 'v'],
     '9': ['w', 'x', 'y', 'z']}
  
  res=[]#存放组合结果
  def backtrack(combination,next_digits):#回溯函数
   #combination目前已经产生的组合,next_digits:输入的下一个字符
   if len(next_digits)==0: #递归出口
    res.append(combination)
   else:
    for i in phone[next_digits[0]]:
     backtrack(combination+i,next_digits[1:]) #递归实现回溯
  if digits:
   backtrack('',digits) #初始化
  return res

2:全排列

输入: [1,2,3]

输出:

[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]

class Solution:
 def permute(self,nums):
  
  res=[] #存放组合结果
  size=len(nums)
  
  def backtrack(combination,nums):
   #combination目前已经产生的组合,nums为剩下的数组
   #递归出口
   #递归的结束一定 要有return
   if len(combination)==size:
    res.append(combination) 
    return #注意
   for i in range(len(nums)):
     backtrack(combination+[nums[i]],nums[:i]+nums[i+1:]) #递归回溯
  
  backtrack([],nums)
  return res
    
if __name__=='__main__':
 nums = [1,2,3]
 solution=Solution()
 print(solution.permute(nums))

3:数字组合

输入: candidates = [2,3,6,7], target = 7,

所求解集为:

[
[7],
[2,2,3]
]

class Solution:
 def combinationArray(self,candidates,target):
  
  candidates.sort()
  res=[] #存放组合结果
  size=len(candidates)
  
  def backtrack(combination,cur_sum,j):
   #combination目前已经产生的组合,cur_sum当前计算和,j用于控制求和的查找范围起点
   #递归出口
   if cur_sum>target:
    return 
   if cur_sum==target:
    res.append(combination)
   for i in range(j,size): #j避免重复
    if cur_sum+candidates[i]>target: #约束函数(剪)
     break
    j=i
    backtrack(combination+[candidates[i]],cur_sum+candidates[i],j)#递归回溯
    
  backtrack([],0,0)
  return res
if __name__=='__main__':
 candidates = [2,3,6,7]
 target = 7
 solution=Solution()
 print(solution.combinationArray(candidates,target))

4:

N皇后问题

class Solution: 
 def solveNqueen(self,n):
  
  res=[] #存放结果组合,对于N皇后问题,这里存放的是其放在每一行对应的列下标  
  def backtrack(combination):
    if len(combination)==n:
     res.append(combination)
     return
    for j in range(n):
     if combination:
      #排除当前行,列和对应的两个对角线。
      if j not in combination and j!=combination[-1]+1 and j!=combination[-1]-1:#约束条件
       backtrack(combination+[j]) #递归回溯
      else:
       continue 
     else:
     backtrack(combination+[j])     
             
  backtrack([]) #回溯初始化
  
  #转化为需要的格式
  output=[["." * k + "Q" + "." * (n - k - 1) for k in i] for i in res] #列表生成器
  return output
  
if __name__=='__main__':
 n=4
 solution=Solution()
 print(solution.solveNqueen(n))

5:子集

[1,2,3]的子集[[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]]

class Solution(object):
 def subsets(self, nums):
  """
  :type nums: List[int]
  :rtype: List[List[int]]
  """
  res=[]#存放组合结果
  size=len(nums)
  
  def backtrack(combination,nums):
   #combination目前已经产生的组合,nums为剩下的数组
   if len(combination)<=size:
    res.append(combination)
   #递归出口
   #递归的结束一定 要有return
   if len(combination)==size:
    return 
   
   for i in range(len(nums)):
    backtrack(combination+[nums[i]],nums[i+1:]) #递归回溯
   
  backtrack([],nums)
  return res
 
if __name__=='__main__':
 nums=[1,2,3]
 solution=Solution()
 print(solution.subsets(nums))

6:

字母大小写的全排列

给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。

输入: S = "a1b2"

输出: ["a1b2", "a1B2", "A1b2", "A1B2"]

class Solution:
 def letterpermute(self,S):
  
  res=[]
  size=len(S)
  
  def backtrack(combination,S):
   
   if len(combination)==size:
    res.append(''.join(combination))
    return 
   
   for i in range(len(S)):
    if "a"<=S[i]<= "z" or "A"<=S[i]<= "Z":
     for j in range(2):
      if j==0:
       backtrack(combination+[S[i].lower()],S[i+1:])
      if j==1:
       backtrack(combination+[S[i].upper()],S[i+1:])
      
    else:
     backtrack(combination+[S[i]],S[i+1:])
     
     
  backtrack([],S)
  return res   
 
if __name__=='__main__':
 S=[i for i in "1B2"]
 solution=Solution()
 print(solution.letterpermute(S))

7:生成括号

括号生成:给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 n = 3,生成结果为:

[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]

class Solution:
 def generateParenthesis(self,n):
  
  res=[] #存放组合结果
  def backtrack(combination,left,right):
   #combination目前已经产生的组合
   if len(combination)==2*n: #递归出口
    res.append(combination)
   #对于有效的括号,左边先出
   if left<n:
    backtrack(combination+'(',left+1,right)#递归实现回溯
   if right<left:
    backtrack(combination+')',left,right+1)#递归实现回溯
     
  backtrack('',0,0) #初始化
  return res 
if __name__=='__main__':
 n=3
 solution=Solution()
 print(solution.generateParenthesis(n))

以上这篇python实现信号时域统计特征提取代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python入门及进阶笔记 Python 内置函数小结
Aug 09 Python
python简单文本处理的方法
Jul 10 Python
Python自定义类的数组排序实现代码
Aug 28 Python
Python入门之三角函数sin()函数实例详解
Nov 08 Python
python定时利用QQ邮件发送天气预报的实例
Nov 17 Python
Django contenttypes 框架详解(小结)
Aug 13 Python
在Python文件中指定Python解释器的方法
Feb 18 Python
pygame实现打字游戏
Feb 19 Python
通过 Django Pagination 实现简单分页功能
Nov 11 Python
Python OpenCV读取显示视频的方法示例
Feb 20 Python
结束运行python的方法
Jun 16 Python
解决pytorch 损失函数中输入输出不匹配的问题
Jun 05 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
Feb 26 #Python
python实现逆滤波与维纳滤波示例
Feb 26 #Python
Python全面分析系统的时域特性和频率域特性
Feb 26 #Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
Feb 26 #Python
Python中os模块功能与用法详解
Feb 26 #Python
Python中sys模块功能与用法实例详解
Feb 26 #Python
Python线程threading模块用法详解
Feb 26 #Python
You might like
php 显示指定路径下的图片
2009/10/29 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
JS定时器实例
2013/04/17 Javascript
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
js获取控件位置以及不同浏览器中的差别介绍
2013/08/08 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
老生常谈JavaScript 正则表达式语法
2016/08/20 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
2016/10/27 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
jquery实现自定义图片裁剪功能【推荐】
2017/03/08 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
vue自定义指令的创建和使用方法实例分析
2018/12/04 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
js判断密码强度的方法
2020/03/18 Javascript
python使用7z解压apk包的方法
2015/04/18 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
python time.strptime格式化实例详解
2021/02/03 Python
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
咖啡书吧创业计划书
2014/01/13 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
社区服务活动小结
2014/07/08 职场文书
我爱幼儿园演讲稿
2014/09/11 职场文书
2015年暑假生活总结
2015/07/13 职场文书
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js