なんか取りこぼしているぽい

Raspberry Pi に USB で繋いだ PCM2902 で、音声データ取込のレートが一定しない件ですが、他のファイル I/O を /dev/null 宛に変更すると、以下のように安定することが分かりました*1。これなら、だいたい 100ppm くらいに収まっています。

.......................................:    993 156000 Wed Jul 30 16:34:19 JST 2014
........................................:   2007 160000 Wed Jul 30 16:34:29 JST 2014
........................................:   3025 160000 Wed Jul 30 16:34:39 JST 2014
........................................:   4049 160000 Wed Jul 30 16:34:49 JST 2014
........................................:   5062 160000 Wed Jul 30 16:34:59 JST 2014
........................................:   6083 160000 Wed Jul 30 16:35:09 JST 2014
........................................:   7101 160000 Wed Jul 30 16:35:19 JST 2014
........................................:   8122 160000 Wed Jul 30 16:35:29 JST 2014
........................................:   9139 160000 Wed Jul 30 16:35:39 JST 2014
........................................:  11158 160000 Wed Jul 30 16:35:49 JST 2014
........................................:  12176 160000 Wed Jul 30 16:35:59 JST 2014
........................................:  13195 160000 Wed Jul 30 16:36:09 JST 2014
........................................:  14211 160000 Wed Jul 30 16:36:19 JST 2014
........................................:  15231 160000 Wed Jul 30 16:36:29 JST 2014
........................................:  16248 160000 Wed Jul 30 16:36:39 JST 2014
........................................:  17268 160000 Wed Jul 30 16:36:49 JST 2014
........................................:  18289 160000 Wed Jul 30 16:36:59 JST 2014
........................................:  19306 160000 Wed Jul 30 16:37:09 JST 2014
........................................:  20323 160000 Wed Jul 30 16:37:19 JST 2014

PCM の音声取り込みは、USB 先のデバイスによる(CPU から見て)外部同期(A/D コンバータの基準クロック)で動いているはずなので、CPU 側の都合でレートが変動するのはおかしいです*2。想像ですが、USB 辺りでパケットを取りこぼしているのではないかと。48kHz サンプリングでぽろぽろ落としているので、16kHz サンプリングで全く落とさないということではないのかも知れません。
ま、あまり深追いをしてもしょうがないので、また、この程度の取りこぼし(1000ppm 程度)ならば今回の目的にはそれほど影響ないので、とりあえずそのまま設計を続けようかと思っています。いずれ私の知らないところで直るでしょう。(^^)

*1:点々の隣の最初の数字が、NTP ウォール時刻とのずれ(us)。単調にずれるのは A/D コンバータの基準クロックと一致していないからだが、このずれが大きすぎたり、アプリの負荷でずれ方が大きくなるのは、変! 仮に一時的にジャンプしても、また戻ってくるのが正解。

*2:ジッタがあるのはしょうがないですが。