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正则表达式介绍
Aug 06 Python
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
Jun 04 Python
Python实现把utf-8格式的文件转换成gbk格式的文件
Jan 22 Python
Python+selenium实现截图图片并保存截取的图片
Jan 05 Python
异步任务队列Celery在Django中的使用方法
Jun 07 Python
Python读取VOC中的xml目标框实例
Mar 10 Python
Jupyter Notebook输出矢量图实例
Apr 14 Python
在python里使用await关键字来等另外一个协程的实例
May 04 Python
基于PyInstaller各参数的含义说明
Mar 04 Python
Python 如何安装Selenium
May 06 Python
如何用 Python 子进程关闭 Excel 自动化中的弹窗
May 07 Python
使用python求解迷宫问题的三种实现方法
Mar 17 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 FPDF类库应用实现代码
2009/03/20 PHP
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
php中的curl使用入门教程和常见用法实例
2014/04/10 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
PHP 超级全局变量相关总结
2020/06/30 PHP
greybox——不开新窗口看新的网页
2007/02/20 Javascript
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
javascript 日期时间 转换的方法
2013/02/21 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
2013/09/16 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
jQuery实现自动滚动到页面顶端的方法
2015/05/22 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
vue swipe自定义组件实现轮播效果
2019/07/03 Javascript
解决vue中el-tab-pane切换的问题
2020/07/19 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
2020/08/04 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
JavaScript封装单向链表的示例代码
2020/09/17 Javascript
python 日期操作类代码
2018/05/05 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
python实现五子棋人机对战游戏
2020/03/25 Python
Python数据相关系数矩阵和热力图轻松实现教程
2020/06/16 Python
Bealls Florida百货商店:生活服饰、家居装饰和鞋子
2018/02/23 全球购物
夏威夷咖啡公司:Hawaii Coffee Company
2019/09/19 全球购物
香奈儿美国官网:CHANEL美国
2020/05/20 全球购物
医院护士的求职信范文
2013/12/26 职场文书
新品发布会主持词
2014/04/02 职场文书
公司副总经理任命书
2014/06/05 职场文书
新教师培训方案
2014/06/08 职场文书
五一促销活动总结
2014/07/01 职场文书
中学感恩教育活动总结
2015/05/05 职场文书
销售人员管理制度
2015/08/06 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android