import math
import numpy as np
from numpy import array, sign, zeros
from scipy.interpolate import interp1d
import scipy.signal
#输入信号序列即可(list)
def envelope_extraction(signal):
s = signal.astype(float )
q_u = np.zeros(s.shape)
q_l = np.zeros(s.shape)
#在插值值前加上第一个值。这将强制模型对上包络和下包络模型使用相同的起点。
#Prepend the first value of (s) to the interpolating values. This forces the model to use the same starting point for both the upper and lower envelope models.
u_x = [0,] #上包络的x序列
u_y = [s[0],] #上包络的y序列
l_x = [0,] #下包络的x序列
l_y = [s[0],] #下包络的y序列
# 检测波峰和波谷,并分别标记它们在u_x,u_y,l_x,l_中的位置。
#Detect peaks and troughs and mark their location in u_x,u_y,l_x,l_y respectively.
for k in range(1,len(s)-1):
if (sign(s[k]-s[k-1])==1) and (sign(s[k]-s[k+1])==1):