请写一段python代码使其实现EMD分解重构降噪的功能
以下是一个使用EMD分解重构降噪的Python代码示例:
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import hilbert
def emd(signal, num_imfs):
imfs = []
residue = signal.copy()
for i in range(num_imfs):
imf = residue.copy()
while True:
maxima = np.maximum(imf, 0)
minima = np.minimum(imf, 0)
max_env = hilbert(maxima)
min_env = hilbert(-minima)
mean_env = (max_env + min_env) / 2
imf_prev = imf
imf = imf - mean_env
if np.sum(np.abs(imf - imf_prev)) < 0.01:
break
imfs.append(imf)
residue = residue - imf
return imfs, residue
def reconstruct(imfs, residue):
signal = residue.copy()
for imf in imfs:
signal += imf
return signal
def denoise(signal, num_imfs):
imfs, residue = emd(signal, num_imfs)
denoised_signal = reconstruct(imfs, residue)
return denoised_signal
# 示例用法
# 生成带噪声的信号
t = np.linspace(0, 1, 1000)
signal = np.sin(2 * np.pi * 5 * t) + np.sin(2 * np.pi * 10 * t) + np.random.normal(0, 0.2, 1000)
# 使用EMD分解重构降噪
denoised_signal = denoise(signal, num_imfs=2)
# 绘制原始信号和降噪后的信号
plt.figure(figsize=(10, 4))
plt.subplot(2, 1, 1)
plt.plot(t, signal)
plt.title('Original Signal')
plt.subplot(2, 1, 2)
plt.plot(t, denoised_signal)
plt.title('Denoised Signal')
plt.tight_layout()
plt.show()
上述代码首先定义了一个emd函数,用于执行EMD分解。然后定义了一个reconstruct函数,用于重构信号。最后定义了一个denoise函数,用于对信号进行降噪。示例用法中生成了一个带噪声的信号,并使用denoise函数对其进行降噪,然后绘制了原始信号和降噪后的信号。
原文地址: http://www.cveoy.top/t/topic/hYXc 著作权归作者所有。请勿转载和采集!