如何使用pandas.date_range()生成精确匹配700Hz采样率的时间戳
700Hz采样率精确时间戳生成方案
问题本质
pd.date_range()的freq参数仅支持整数倍的固定时间偏移(最小精度到纳秒),而700Hz对应的单采样周期为1/700秒,是无限循环小数,无论换算到毫秒、微秒还是纳秒单位,都无法用整数值精确表示。用1.430615ms作为间隔属于近似值,采样点越多,累积的时间漂移越大。
推荐方案:基于偏移量直接计算(无累积误差)
不要硬凑freq的近似值,直接根据采样点序号计算每个点相对于起始时间的精确偏移,生成时间戳:
import pandas as pd from datetime import datetime import numpy as np # 大数据量时用numpy提升计算效率 start = datetime(2022, 1, 1, 0, 0) sample_count = len(labels) # 生成每个采样点的时间偏移:第i个点偏移i/700秒 time_offsets = pd.to_timedelta(np.arange(sample_count) / 700, unit="s") time_stamps_at_700 = start + time_offsets
这个方案的误差仅来自单个时间戳的浮点运算精度,不会随着采样点增多累积偏差,完全匹配700Hz的采样间隔。如果数据量很小(少于1万条),把np.arange(sample_count)换成range(sample_count)也可以,不需要额外导入numpy。
备选方案:纳秒级近似freq(短数据可用)
如果数据时长很短(比如10分钟以内,采样点少于42万),也可以用最接近真实间隔的纳秒级freq参数调用date_range,误差在可接受范围内:
time_stamps_at_700 = pd.date_range( start=datetime(2022, 1, 1, 0, 0), periods=len(labels), freq="1428571ns" # 对应1/700秒的纳秒近似值,单步误差约0.43纳秒 )
注意:该方案每100万采样点会累积约0.43毫秒的总误差,长时采集数据不建议使用。
精度校验
生成时间戳后可以用以下代码验证实际采样率是否符合预期:
actual_hz = 1 / time_stamps_at_700.diff().mean().total_seconds() print(f"实际平均采样率:{actual_hz:.6f}Hz")
内容的提问来源于stack exchange,提问作者brkgcmn
相关产品推荐
相关产品推荐

