好的!对于哈尔小波变换,我们可以使用'pywt'库来进行处理。请确保你已经安装了'pandas'、'matplotlib'、'numpy'和'pywt'这些Python库。

下面是一个示例代码,可以实现你的需求:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import pywt

# 读取Excel文件并获取数据
data = pd.read_excel('your_file_path.xlsx')
time = data.iloc[:, 0].values
voltage = data.iloc[:, 1:5].values

# 绘制时域图
plt.figure(figsize=(10, 6))
plt.plot(time, voltage)
plt.xlabel('Time')
plt.ylabel('Voltage')
plt.title('Time Domain Plot')
plt.legend(['Voltage 1', 'Voltage 2', 'Voltage 3', 'Voltage 4'])
plt.grid(True)
plt.show()

# 哈尔小波变换
wavelet = pywt.Wavelet('haar')
coeffs = pywt.wavedec(voltage, wavelet)

# 添加白噪声信号
noise = np.random.normal(0, 0.1, voltage.shape)
coeffs_noise = [c + n for c, n in zip(coeffs, noise)]

# 阈值设定,剔除噪声信号
threshold = 0.5
coeffs_filtered = [np.where(np.abs(c) < threshold, 0, c) for c in coeffs_noise]

# 逆变换,提取特征信号
voltage_filtered = pywt.waverec(coeffs_filtered, wavelet)

# 绘制频域图
plt.figure(figsize=(10, 6))
freq = np.fft.fftfreq(len(voltage_filtered[0]), 1)
plt.plot(freq, np.abs(np.fft.fft(voltage_filtered[0])))
plt.xlabel('Frequency')
plt.ylabel('Amplitude')
plt.title('Frequency Domain Plot')
plt.grid(True)
plt.show()

# 绘制提取后的时域图
plt.figure(figsize=(10, 6))
plt.plot(time, voltage_filtered[0])
plt.xlabel('Time')
plt.ylabel('Voltage')
plt.title('Extracted Time Domain Signal')
plt.grid(True)
plt.show()

请将代码中的'your_file_path.xlsx'替换为你实际的Excel文件路径。代码将读取第一列作为采样时间,第2到第5列作为输出电压。

这段代码将首先绘制原始数据的时域图,然后通过哈尔小波变换将信号转换到频域,并添加白噪声信号。接着,根据设定的阈值剔除噪声信号,最后绘制提取后的时域图。

希望这段代码能满足你的要求!如果有任何问题,请随时提问。

Python 小波变换提取特征信号:降噪并可视化

原文地址: https://www.cveoy.top/t/topic/bOft 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录