好的,我可以帮你实现这个需求。首先,确保你已经安装了pandasmatplotlibnumpy这些Python库。

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

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

# 读取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()

# 傅里叶变换
fft_values = np.fft.fft(voltage)
freq = np.fft.fftfreq(len(voltage), 1)  # 获取频率轴

# 添加白噪声信号
noise = np.random.normal(0, 0.1, len(voltage))
fft_values_noise = fft_values + noise

# 阈值设定,剔除噪声信号
threshold = 0.5
fft_values_filtered = fft_values_noise.copy()
fft_values_filtered[np.abs(fft_values_filtered) < threshold] = 0

# 绘制频域图
plt.figure(figsize=(10, 6))
plt.plot(freq, np.abs(fft_values_filtered))
plt.xlabel('Frequency')
plt.ylabel('Amplitude')
plt.title('Frequency Domain Plot')
plt.grid(True)
plt.show()

# 提取特征信号
time_domain_signal = np.fft.ifft(fft_values_filtered)

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

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

这段代码将首先绘制原始数据的时域图,然后进行傅里叶变换得到频域图,并添加白噪声信号。接着,根据设定的阈值剔除噪声信号,最后绘制提取后的时域图。

请注意,傅里叶变换后的频域图中的横坐标是频率而不是采样时间。如果你需要将频率转换为与采样时间对应的横坐标,可以使用 freq = np.fft.fftfreq(len(voltage), 1)

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

Python Excel 数据分析:时域-频域转换,噪声去除和特征信号提取

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

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