我的采样频率应该是多少?

信息处理 fft 信号分析 频谱 过滤器设计
2022-02-24 02:22:11

我有一个加速度计,我正在x, y, z读取m/s^2. 我已经用 Python 编写了如下代码。

while True:
  x, y, z = sensor.accelerometer
  with open('data.txt', 'a+') as f:
    f.write('{},{},{}\n'.format(x, y, z))
    f.flush()
    f.close()
  time.sleep(0.1)

time.sleep(0.1)说要睡 1/10 秒,所以理论上,在 1 秒内,我应该有 10 个样本因此,我假设我的采样率为每秒 10 个样本。但是,我注意到我每秒没有得到 10 个样本。文件写入存在开销(实际上,我正在做的不仅仅是读取和写入加速度计数据)。事实上,在一秒钟内,我得到了每秒样本数的分布。

现在我已经记录了数据,我需要分析这些信号,但是通过很多信号处理示例,我看到采样频率是一个必需的参数。

我的问题是,我应该设置什么作为我的采样频率?

  • 我应该放10个吗?如果是这样,根据经验,我不会始终(如果有的话)每秒获得 10 个样本。
  • 如果我不使用 10,我有一个每秒样本数的分布,我应该只使用平均值吗?如果我使用每秒平均样本数作为采样频率,我是否需要在第二个间隔内删除样本?
  • 对于少于平均样本数的一秒间隔,我该怎么办?

感谢您对这些问题的任何帮助。

1个回答

很大程度上取决于您想从数据中推断出什么。

通常,如果您的采样率不均匀,则您的测量值应该带有准确的时间戳。

您的采样间隔越接近平均每秒 1/10 越好。

工程中使用的典型启发式方法是 1/10 规则,因此如果您的样本在 1/10 秒采样的 1/100 秒内,您可能可以假设它们是均匀采样的,但同样,这真的取决于什么你测量的目的是。

同样,如果您有时间戳,则有一些方法可以将您的测量值插入到统一的时间增量中。Matlab 中有一个时间序列类,它有一个用于此目的的方法,这是如何处理非均匀样本的示例。

如果您无法准确地为数据添加时间戳,则可以使用采样间隔的平均值。像所有解决问题的实际解决方案一样,您需要使用自己的判断来确定您所做的是否足够。

我们真的无法为你做出这样的判断。