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的re模块应用实例
Sep 26 Python
python基于socket实现网络广播的方法
Apr 29 Python
Python通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
使用python实现tcp自动重连
Jul 02 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
使用anaconda的pip安装第三方python包的操作步骤
Jun 11 Python
PyQt5实现QLineEdit添加clicked信号的方法
Jun 25 Python
django admin组件使用方法详解
Jul 19 Python
Python序列化与反序列化pickle用法实例
Nov 11 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
Jan 10 Python
Anaconda使用IDLE的实现示例
Sep 23 Python
Python趣味挑战之教你用pygame画进度条
May 31 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
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
深入解析php中的foreach问题
2013/06/30 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
动态读取JSON解析键值对的方法
2014/06/03 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
vue better-scroll插件使用详解
2018/01/25 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[01:10:58]KG vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
python模仿网页版微信发送消息功能
2018/02/24 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
关于Python turtle库使用时坐标的确定方法
2020/03/19 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
喝酒检查书范文
2014/02/23 职场文书
火箭队口号
2014/06/18 职场文书
新手上路标语
2014/06/20 职场文书
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
车辆年检委托书范本
2014/10/14 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
分家协议书范本
2016/03/22 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书