lmd分解的python代码
LMD分解是一种信号分解方法,可以将一个时域信号分解成多个组成成分,每个组成成分都有不同的频带和能量。LMD分解的Python代码如下:
```python
import numpy as np
from scipy.signal import hilbert
投资什么好 def lmd_decomposition(signal, N, alpha):
'''
对信号进行LMD分解。
:param signal: 待分解信号。
:param N: 最大分解层数。
:param alpha: 阈值参数。
:return: 分解后的组成成分。
'''
# 信号长度
要字开头的成语 n = len(signal)
# 原始信号为第一层
h = signal
h_all = []
h_all.append(h)
# 分解层数
layer = 1
鄙人
# 分解
while layer <= N:
# Hilbert变换
g = hilbert(h)
# 取出幅度值
amplitude = np.abs(g)
# 计算每个局部极大值点的平均值
mean_amplitude = []
for i in range(1, n):
if (amplitude[i] > amplitude[i - 1]) and (amplitude[i] > amplitude[i + 1]):
mean_amplitude.append((amplitude[i - 1] + amplitude[i] + amplitude[i + 1]) / 3)
机票退票扣多少手续费 mean_amplitude = np.array(mean_amplitude)幼儿简单手工
# 计算每个局部极大值点的平均值的均值
mean_mean_amplitude = np.mean(mean_amplitude)
# 计算每个局部极大值点的平均值的标准差
std_mean_amplitude = np.std(mean_amplitude)
# 判断是否需要分解
if (std_mean_amplitude / mean_mean_amplitude) > alpha:
# 求出envelope
envelope = np.zeros(n)
for i in range(1, n - 1):
if (amplitude[i] > amplitude[i - 1]) and (amplitude[i] > amplitude[i + 1]):
envelope[i] = amplitude[i]
# 对envelope进行一次LMD分解
h1 = lmd_decomposition(envelope, N, alpha)
# 对原始信号减去envelope进行一次LMD分解
h2 = lmd_decomposition(h - envelope, N, alpha)
# 将分解后的组成成分合并
h_all += h1 + h2
break
el:
最大风力
# 分解
赣州旅游攻略 h = h - g.imag
h_all.append(g.imag)
品质管理七大手法 layer += 1
return h_all
```
该代码使用了numpy和scipy库,主要实现了LMD分解的核心算法。在函数中,输入待分解信号、最大分解层数和阈值参数,输出分解后的组成成分。其中,对于每个局部极大值点,计算其邻近三个点幅度值的平均值,然后计算所有局部极大值点的平均值的均值和标准差,根据阈值参数判断是否需要进行分解。如果需要分解,则将原始信号减去其envelope作为新的信号进行分解,直到不再需要分解为止。最终,将分解后的所有组成成分合并输出。