很抱歉造成了困扰。由于在某些版本的PyWavelets中,'complex_cwt'函数已被移除。

如果你遇到了这个问题,可以尝试使用'cwt'函数来计算连续小波变换。以下是更新后的代码:

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

# 读取Excel数据
data = pd.read_excel('your_excel_file.xlsx')

# 获取采样时间和输出电压列的数据
time = data.iloc[:, 0]  # 第一列采样时间
voltage = data.iloc[:, 1:5]  # 第2到5列输出电压

# 绘制时域图
plt.plot(time, voltage)
plt.xlabel('采样时间')
plt.ylabel('输出电压')
plt.legend(voltage.columns)  # 添加图例,显示每列的名称
plt.show()

# 小波变换
wavelet = 'db4'  # 选择小波函数
level = 5  # 小波变换的层数
coeffs = pywt.wavedec(voltage, wavelet, level=level)  # 进行小波变换

# 添加白噪声
noise_amplitude = 0.1  # 噪声振幅
noise = np.random.normal(0, noise_amplitude, size=voltage.shape)  # 生成白噪声
noisy_coeffs = [c + noise for c in coeffs]  # 加上噪声

# 设定阈值剔除噪声信号
threshold = 0.5 * np.max(np.abs(noisy_coeffs[-1]))  # 设置阈值为最后一层系数的最大值的一半
filtered_coeffs = [np.where(np.abs(c) > threshold, c, 0) for c in noisy_coeffs]  # 阈值剔除噪声信号

# 逆小波变换,得到特征信号
filtered_voltage = pywt.waverec(filtered_coeffs, wavelet)

# 计算时频域图
scales = np.arange(1, 128)  # 尺度范围
coefs, freqs = pywt.cwt(voltage.iloc[:, 0], scales, wavelet, sampling_period=time[1]-time[0])

# 绘制时频域图
plt.imshow(abs(coefs), extent=[time.min(), time.max(), scales.min(), scales.max()], cmap='jet', aspect='auto',
           vmax=abs(coefs).max(), vmin=-abs(coefs).max())
plt.colorbar(label='幅度')
plt.xlabel('时间')
plt.ylabel('尺度')
plt.title('时频域图')
plt.show()

请确保将'your_excel_file.xlsx'替换为实际的Excel文件路径。如果你想调整噪声振幅和阈值,请根据你的需求修改noise_amplitudethreshold的值。

非常抱歉给你带来了困扰。希望这次的更新能够解决问题。如果还有任何疑问,请随时提问。

PyWavelets 'complex_cwt' 函数移除解决方法 - 使用 'cwt' 函数计算连续小波变换

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

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