不同采样率传感器数据集的同图绘制及峰值对齐需求
不同采样率传感器数据对齐峰值并同图绘制方案
核心步骤拆解
- 数据预处理
- 分别读取两组传感器数据,提取时间戳和对应数值字段
- 补全缺失数据(比如用线性插值),确保每组数据的时间序列连续
- 定位特征峰值
- 用峰值检测工具(比如Python的
scipy.signal.find_peaks)找出两组数据中的标志性峰值(比如最大峰值、重复出现的特征峰值) - 记录每个峰值对应的时间戳和数值,优先选最清晰、无干扰的峰值作为对齐锚点
- 时间轴对齐与重采样
- 选取一对匹配的峰值,计算两组数据的时间差:
Δt = 组A峰值时间 - 组B峰值时间 - 将其中一组的所有时间戳调整
Δt,让两个峰值的时间戳重合 - 把对齐后的两组数据重采样到同一采样率(建议取两组中更高的采样率,用线性插值补充缺失值)
- 同图绘制对比
- 用绘图库(比如matplotlib)将两组数据绘制在同一坐标系,标注对齐后的峰值点,方便直观对比
代码示例(Python)
import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy.signal import find_peaks # 读取两组数据(替换为你的本地文件路径) df1 = pd.read_csv("sensor_data1.csv") df2 = pd.read_csv("sensor_data2.csv") # 预处理:补全缺失值 df1['value'] = df1['value'].interpolate() df2['value'] = df2['value'].interpolate() # 检测峰值(取数值前10%的峰值作为特征锚点) peaks1, _ = find_peaks(df1['value'], height=np.percentile(df1['value'], 90)) peaks2, _ = find_peaks(df2['value'], height=np.percentile(df2['value'], 90)) # 选取第一个最大峰值做对齐锚点 peak1_time = df1.iloc[peaks1[0]]['timestamp'] peak2_time = df2.iloc[peaks2[0]]['timestamp'] time_offset = peak1_time - peak2_time # 对齐时间轴 df2['aligned_timestamp'] = df2['timestamp'] + time_offset # 重采样到同一频率(以10ms为间隔,可根据实际调整) resampled_df1 = df1.set_index('timestamp').resample('10ms').mean().interpolate() resampled_df2 = df2.set_index('aligned_timestamp').resample('10ms').mean().interpolate() # 绘图展示 plt.figure(figsize=(12,6)) plt.plot(resampled_df1.index, resampled_df1['value'], label='传感器A', alpha=0.7) plt.plot(resampled_df2.index, resampled_df2['value'], label='传感器B', alpha=0.7) # 标注对齐后的峰值点 plt.scatter(peak1_time, df1.iloc[peaks1[0]]['value'], color='red', s=100, zorder=5) plt.scatter(peak1_time, df2.iloc[peaks2[0]]['value'], color='blue', s=100, zorder=5) plt.legend() plt.xlabel('时间') plt.ylabel('传感器数值') plt.title('对齐峰值后的传感器数据对比') plt.show()
注意事项
- 如果数据存在多个特征峰值,可以选取多对锚点做分段对齐,提升整体对齐精度
- 重采样时尽量避免过度平滑,防止丢失原始数据的细节特征
- 若峰值检测存在干扰,可先对数据做低通滤波处理,再进行峰值定位
内容的提问来源于stack exchange,提问作者thaneshwari
相关产品推荐
相关产品推荐

