ALSA采样率漂移与单调时钟

时间:2017-08-22 10:44:31

标签: clock alsa

我有一个使用ALSA以8Khz采样音频的应用程序。这是通过snd_pcm_hw_params()设置的,可以通过查看/ proc来确认:

Type_of_goal

随时间读取的样本数实际上是单调时钟。 如果我将读取的样本数与系统单调时钟进行比较,我会注意到随着时间的推移会有一个漂移。相对于单调时钟,采样时钟似乎大约每5小时丢失1秒。 我有代码在应用程序级别补偿这一点(即正确地将样本计数映射到挂钟时间)但我想知道我们是否可以或为什么我们不能在较低级别做得更好?

1 个答案:

答案 0 :(得分:0)

两种时钟均基于某种振荡器,可能会有一些小的误差。因此我们很可能以7999.5Khz而不是8Khz进行采样,并且随着时间的推移会出现错误。同样,系统时钟可能会有一些小错误。

系统时钟由NTP定期校正,因此可能允许更多错误,但即便如此,这种偏差似乎比我直观地影响要大得多。 但是,请参阅示例http://www.ntp.org/ntpfaq/NTP-s-sw-clocks-quality.htm

理论上,NTP可以生成漂移文件,您可以使用它来查看系统时钟的漂移率。

我原本以为知道有一些小错误。有些东西会试图通过在两个不同的错误采样率之间交换来自动更正自己,例如8000.5Khz& 7999.5Khz或偶尔丢弃样品。事实上,我认为这种事情是在硬件或固件级别完成的,以便在给定crystal已知错误的情况下稳定平均频率。 此外我还以为石英晶体最近被放入电路中,至少有温度补偿。