溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python實現(xiàn)信號時域統(tǒng)計特征提取代碼

發(fā)布時間:2020-09-18 21:09:31 來源:腳本之家 閱讀:386 作者:focusxy 欄目:開發(fā)技術

1.實驗數(shù)據(jù)需求

為了對采集的壓力實驗數(shù)據(jù)做特征工程,需要對信號進行時域的統(tǒng)計特征提取,包含了均值、均方根、偏度、峭度、波形因子、波峰因子、脈沖因子、峭度因子等,現(xiàn)用python對其進行實現(xiàn)。

2.python實現(xiàn)

其中的輸入?yún)?shù)含義:

① data:實驗數(shù)據(jù)的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實現(xiàn)信號時域統(tǒng)計特征提取代碼

補充拓展:python數(shù)據(jù)結構與算法--回溯算法詳解

回溯算法:一種優(yōu)先搜索算法(試探法);按優(yōu)條件向前搜索,以達目標;當試探到某步,發(fā)現(xiàn)原來選擇并不好(走不通),就退回重新選擇。

回溯算法的一般步驟:1:定義問題的解空間(搜索中動態(tài)生成);2:確定易搜索的解空間結構(一般為樹形結構或圖);3:以深度優(yōu)先的方式搜索解空間,搜索中用剪枝函數(shù)避免無效搜索。

剪枝函數(shù):1:用約束函數(shù)在擴展節(jié)點處減去不滿足約束條件的子樹;2:用限界函數(shù)減去不能得到最優(yōu)解的子樹。

回溯法:實戰(zhàn)

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):#回溯函數(shù)
   #combination目前已經(jīng)產(chǎn)生的組合,next_digits:輸入的下一個字符
   if len(next_digits)==0: #遞歸出口
    res.append(combination)
   else:
    for i in phone[next_digits[0]]:
     backtrack(combination+i,next_digits[1:]) #遞歸實現(xiàn)回溯
  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目前已經(jīng)產(chǎn)生的組合,nums為剩下的數(shù)組
   #遞歸出口
   #遞歸的結束一定 要有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:數(shù)字組合

輸入: 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目前已經(jīng)產(chǎn)生的組合,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: #約束函數(shù)(剪)
     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目前已經(jīng)產(chǎn)生的組合,nums為剩下的數(shù)組
   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 代表生成括號的對數(shù),請你寫出一個函數(shù),使其能夠生成所有可能的并且有效的括號組合。

例如,給出 n = 3,生成結果為:

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

class Solution:
 def generateParenthesis(self,n):
  
  res=[] #存放組合結果
  def backtrack(combination,left,right):
   #combination目前已經(jīng)產(chǎn)生的組合
   if len(combination)==2*n: #遞歸出口
    res.append(combination)
   #對于有效的括號,左邊先出
   if left<n:
    backtrack(combination+'(',left+1,right)#遞歸實現(xiàn)回溯
   if right<left:
    backtrack(combination+')',left,right+1)#遞歸實現(xiàn)回溯
     
  backtrack('',0,0) #初始化
  return res 
if __name__=='__main__':
 n=3
 solution=Solution()
 print(solution.generateParenthesis(n))

以上這篇python實現(xiàn)信號時域統(tǒng)計特征提取代碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI