不同采样率双数据集峰对齐绘图及无丢峰采样优化问询
解决不同采样率数据集的峰对齐问题
核心思路是以峰的位置为锚点,先定位峰坐标再进行对齐插值,利用峰数量一致的前提实现精准匹配,同时保留原始数据的所有特征。
具体步骤:
提取峰的时间坐标
用峰值检测工具(比如Python的scipy.signal.find_peaks)分别找出两个数据集的峰位置。如果原始数据没有时间戳,就用采样率换算:时间 = 采样点索引 / 采样率。因为峰数量一致,直接按顺序一一对应两个数据集的峰(第1个峰对应第1个,以此类推)。构建统一的对齐时间轴
可以选择其中一个数据集的峰时间作为基准,或者取对应峰时间的平均值作为对齐后的峰坐标。然后把两个原始数据集的所有时间点、对齐后的峰点合并,排序后生成覆盖全范围的统一时间轴——这样既保证峰对齐,又不会丢失原始数据的细节。插值重采样到统一轴
用三次样条插值(比线性插值更贴合原始曲线)将两个数据集映射到统一时间轴上。插值时要基于原始所有采样点,不能只保留峰点,否则会丢失峰之间的波形特征。
示例代码:import numpy as np from scipy.interpolate import interp1d from scipy.signal import find_peaks # 假设输入数据:data1/fs1 对应第一个数据集,data2/fs2 对应第二个 t1 = np.arange(len(data1)) / fs1 t2 = np.arange(len(data2)) / fs2 # 检测峰的位置并转换为时间戳 peaks1_idx, _ = find_peaks(data1) peaks2_idx, _ = find_peaks(data2) peaks1_t = t1[peaks1_idx] peaks2_t = t2[peaks2_idx] # 生成对齐后的峰时间(这里取对应峰的平均时间,也可以直接用其中一方的时间) aligned_peaks_t = (peaks1_t + peaks2_t) / 2 # 构建包含所有关键节点的统一时间轴 combined_t = np.unique(np.concatenate([t1, t2, aligned_peaks_t])) combined_t.sort() # 插值得到对齐后的数据集 f1 = interp1d(t1, data1, kind='cubic', fill_value="extrapolate") f2 = interp1d(t2, data2, kind='cubic', fill_value="extrapolate") aligned_data1 = f1(combined_t) aligned_data2 = f2(combined_t)验证对齐效果
绘制插值后的两个数据集,检查每个峰的位置是否重合;也可以计算对应峰的时间差,确保误差在可接受范围内。如果峰仍有偏移,直接改用其中一个数据集的峰时间作为基准即可。
内容的提问来源于stack exchange,提问作者thaneshwari
相关产品推荐
相关产品推荐

