Python 提取 Excel 数据特征信号:多项式拟合、白噪声滤除
使用 Python 提取 Excel 数据特征信号:多项式拟合、白噪声滤除
本文将介绍如何使用 Python 从 Excel 表格中读取采样时间和输出电压数据,并利用多项式拟合、添加白噪声、设定阈值等方法提取特征信号。
代码实现
为了实现多项式拟合、加入白噪声、设定阈值以及剔除噪声信号,我们需要使用 pandas、numpy 和 matplotlib 库。请确保你已经安装了这些库。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from numpy.polynomial import Polynomial
# 读取 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()
# 多项式拟合
degree = 5 # 拟合多项式的次数
fit_params = []
for i in range(voltage.shape[1]):
p = Polynomial.fit(time, voltage[:, i], degree)
fit_params.append(p.convert().coef)
# 添加白噪声信号
noise = np.random.normal(0, 0.1, voltage.shape)
voltage_noise = voltage + noise
# 提取特征信号
threshold = 0.5 # 设定阈值
voltage_filtered = voltage_noise.copy()
for i in range(voltage_filtered.shape[1]):
p = Polynomial.fit(time, voltage_noise[:, i], degree)
fitted_signal = p(time)
residual = np.abs(voltage_noise[:, i] - fitted_signal)
voltage_filtered[residual < threshold, i] = fitted_signal[residual < threshold]
# 绘制提取后的时域图
plt.figure(figsize=(10, 6))
plt.plot(time, voltage_filtered)
plt.xlabel('Time')
plt.ylabel('Voltage')
plt.title('Extracted Time Domain Signal')
plt.legend(['Voltage 1', 'Voltage 2', 'Voltage 3', 'Voltage 4'])
plt.grid(True)
plt.show()
请将代码中的 your_file_path.xlsx 替换为你实际的 Excel 文件路径。代码将读取第一列作为采样时间,第 2 到第 5 列作为输出电压。
这段代码将首先绘制原始数据的时域图,然后使用多项式拟合方法拟合每个输出电压信号。接着,添加高斯白噪声信号,并设定阈值来剔除噪声信号。最后,绘制提取后的时域图。
希望这段代码能满足你的要求!如果有任何问题,请随时提问。
原文地址: http://www.cveoy.top/t/topic/b0Fa 著作权归作者所有。请勿转载和采集!