1

サウンドの再生とシリアル ポート経由でのデータの受信を処理する標準 Linux-OS のタイミングに関して、より一般的な質問があります。

現時点では、FPGA から記録、エンコード、送信された USB-to-Serial Bridge (pl2303) 経由で到着する PCM 信号を読み取っています。

ここで、録音されたサウンドストリームの既知の位置に「ピーク」を作成する必要があり、既知の時点で録音されている同じマシンからサウンドファイルを再生する予定です。ピークは最大 50 ミリ秒のウィンドウ内で開始および停止する必要があり、その長さは最大 200 ミリ秒になる可能性があります...

さて、私の質問は次のとおりです。タイミングはどの程度正確であると期待できますか? 私は、いくつかのコンポーネントが「未知のラグ」、ジッターを追加することを知っています:

  • USB-to-Serial Bridge は、USB 側に送信する前にシリアル側から ~20 バイトを収集します (230400 ボーで、これは ~1ms になります)。
  • "`sleep 1; mpg123 $MP3FILE` &" を録音ソフトウェアの直前に呼び出すと、Linux カーネルはそれらを別の方法でスケジュールします (システムの負荷によっては、これにより数 10 ミリ秒かかる可能性があります?)
  • サウンドカード/ドライバーは、未知のラグをさらに追加する可能性があります...
  • 私の場合、「nice」や「sched_setscheduler」などのトリックは価値がありますか?
  • サウンドを再生する録音ソフトウェア内に追加のスレッドを構築することができました。こうすることで、タイミングはより正確になるかもしれませんが、やるべきことはもっとたくさんあります...

どうもありがとう。

とにかく試してみますが、今後の問題をよりよく理解し、解決するための背景知識を探しています。

4

2 に答える 2

0

それはまた私です... ある落ち着きのない夜の後、私は奇妙なタイミングの問題を解決しました... 私が投稿したものが 100% 再現可能ではなかったので、私の最初の編集は完全に正しいとは言えません。さらにいくつかのテストを実行した後、タイミングの精度を示す次のプロットを作成できます。

分析結果 http://mega2000.de/~mzenzes/pics4web/2010-05-28_13-37-08_timingexperiment.png

私は2つの異なるubuntu-kernelsを試しました:2.6.32-21-genericそして2.6.32-10-rt

RTスケジューリングを実現しようとしました:sudo chrt --fifo 99 ./experimenter.sh

そして、省電力オプションを変更しようとしました:echo {performance,conservative} | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

これにより、8 つの異なるテストが行​​われ、それぞれ 50 回の実行が行われました。数字は次のとおりです。

                                   mean(peakPos)  std(peakPos) 
rt-kernel-fifo99-ondemand          0.97           0.0212 
rt-kernel-fifo99-performance       0.99           0.0040 
rt-kernel-ondemand                 0.91           0.1423 
rt-kernel-performance              0.96           0.0078 
standard-kernel-fifo99-ondemand    0.68           0.0177 
standard-kernel-fifo99-performance 0.72           0.0142 
standard-kernel-ondemand           0.69           0.0749 
standard-kernel-performance        0.69           0.0147
于 2010-05-28T11:58:27.523 に答える
0

100% 確実ではありませんが、カーネル 2.6.x シリーズでは、カーネル 2.6.x シリーズでは、カーネルをよりスムーズにするオプションがあります。プリエンプティブルにすることで。

  • プロセッサーのタイプと機能に移動
  • プリエンプション モデル
  • プリエンプティブル カーネル (低レイテンシ デスクトップ) を選択します。

これにより、タイミングが合理化され、ジッターが少なくなるため、サウンドがよりスムーズに表示されます。

それを試して、カーネルを再コンパイルしてください。もちろん、各タスクスイッチのタイムスライスを短縮してさらにスムーズにするカーネルパッチはたくさんあります。

  1. プロセッサ速度 - どのプロセッサが使用されていますか?
  2. メモリ - RAM の容量は?
  3. ディスク入出力 - 速いほど楽しい

これら 3 つの要素を組み合わせて使用​​すると、スケジューラとマルチタスク機能に影響を与えます。レイテンシーが低いほど、よりきめ細かくなります。

ちなみに、リアルタイムでサウンドをキャプチャすることに特化した Linux ディストリビューションがあります。その名前は思い出せませんが、そのディストリビューションのカーネルには、サウンド キャプチャを非常にスムーズにするために大幅なパッチが適用されていました。

于 2010-05-21T11:00:07.627 に答える