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

  

<强> 1。实验数据需求

  

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

  

<强> 2. python实现

  

其中的输入参数含义:

  

①数据:实验数据的DataFrame

  

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

  

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

        从熊猫进口系列   导入数学   pstf_list=[]   def psfeatureTime(数据,p1, p2):   #均值   数据(p1, p2) .mean df_mean=()   #方差   数据(p1, p2) .var df_var=()   #标准差   df_std=数据(p1, p2) . std ()   #均方根   df_rms=math.sqrt(战俘(df_mean 2) +战俘(df_std 2))   #偏度   数据(p1, p2) .skew df_skew=()   #峭度   数据(p1, p2) .kurt df_kurt=()   和=0   因为我在范围(p1, p2):   和+=math.sqrt (abs(数据[我]))   #波形因子   df_boxing=df_rms/(abs(数据(p1, p2)) .mean ())   #峰值因子   df_fengzhi=(max(数据(p1, p2)))/df_rms   #脉冲因子   df_maichong=(max(数据(p1, p2)))/(abs(数据(p1, p2)) .mean ())   #裕度因子   df_yudu=(max(数据(p1, p2)))/战俘(金额/(p2-p1)), (2)   featuretime_list=[df_mean df_rms、df_skew df_kurt, df_boxing, df_fengzhi, df_maichong, df_yudu]   返回featuretime_list      

<强> 3 .结果与说明

  

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

  

  

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

  

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

  

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

  

回溯法:实战

  

<强> 1:电话号码的字母组合

  

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

        类解决方案:   def letterCombination(自我,数字):      电话={' 2 ' (' a ', ' b ', ' c '],   “3”:[' d ', ' e ', ' f '],   “4”:[' g ', ' h ', '我'],      “5”(“j”、“k”、“l”),   “6”:[' m ', ' n ', ' o '],   “7”(“p”、“问”、“r”,“s”),   “8”:[' t ', ' u ', ' v '],   “9”:[' w ', ' x ', ' y ', ' z ']}      res=[] #存放组合结果   def回溯(组合,next_digits): #回溯函数   #结合目前已经产生的组合,next_digits:输入的下一个字符   如果len (next_digits)==0: #递归出口   res.append(组合)   其他:   我的电话(next_digits [0]]:   回溯(组合+我,next_digits[1:]) #递归实现回溯   如果数字:   回溯(数字)#初始化   返回res      

<强> 2:全排列

  

输入:[1,2,3]
  

  

输出:   

  

(
  (1、2、3),
  (1、3、2),
  (2,1,3),
  (2、3、1],
  (3、1、2),
  (3,2,1)
  ]
  

           类解决方案:   def排列(自我,num):      res=[] #存放组合结果   大?len (num)      def回溯(组合,num):   #结合目前已经产生的组合,num为剩下的数组   #递归出口   #递归的结束一定要有回报   如果len(组合)==大小:   res.append(组合)   返回#注意   因为我在范围(len (num)):   回溯(组合+ (num[我]],num[我]+ num [i + 1:]) #递归回溯      回溯([],num)   返回res      if __name__==癬_main__”:   num=(1、2、3)   解决方案=解决方案()   打印(solution.permute (num)      

<强> 3:数字组合

  

输入:候选人=(2、3、6、7),目标=7,

  

所求解集为:

  
  

(
  [7],
  (2,2,3)
  )

           类解决方案:   def combinationArray(自我,候选人,目标):      candidates.sort ()   res=[] #存放组合结果   大?len(候选人)      def回溯(组合,cur_sum j):   #结合目前已经产生的组合,cur_sum当前计算和,j用于控制求和的查找范围起的点   #递归出口   如果cur_sum>目标:   返回   如果cur_sum==目标:   res.append(组合)   因为我在范围(j、大小):# j避免重复   如果cur_sum +候选人[我]在目标:#约束函数(剪)   打破   j=我   回溯(组合+[候选人[我]],cur_sum +候选人[我],j) #递归回溯      回溯([],0,0)   返回res   if __name__==癬_main__”:   候选人=(2、3、6、7)   目标=7   解决方案=解决方案()   print (solution.combinationArray(候选人、目标)   

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