Windowsでリアルタイムの信号処理は可能ですか?


8

この質問は、リアルタイムオーディオ処理を実装するのに最適なプラットフォームを決定する方法に関連しています。、しかしWindowsに焦点を当てています。

データ取得ボードから入力を取得して(Matlabまたはカスタムプログラムのいずれかで)処理し、そのプログラムの結果を使用してUSB経由で接続されている外部デバイスを駆動できるようにしたいと考えています。私はWindowsでハードリアルタイム応答を取得することはほぼ不可能であることを知っています(3〜15ミリ秒の "ウィグル"(技術用語)があるため)。

この揺れ動く時間を減らす最も効果的な方法は何ですか?これは可能ですか?すぐに組み込みソリューションを探す必要がありますか?

回答:


4

WindowsはリアルタイムOSではないため、Windowsには真のリアルタイム処理機能がありません。

MicrosoftはWindows Vistaで新しいAPIを提供しました。これはとりわけ、Exclusive-Mode Streamsがリアルタイムに近いパフォーマンスを約束する厳密なパフォーマンスを対象としたものです。これは、ユーザーモードコンポーネントからオーディオハードウェアへの短くて排他的なパス、特定のマルチメディアスケジューリングなど、いくつかの強力な機能が連携して実現されます。これについてWikiを引用させてください:

オーディオプロフェッショナル向けに、新しいWaveRTポートドライバーが導入されました。これは、マルチメディアクラススケジューラーを使用してリアルタイムパフォーマンスを実現し、オーディオストリームの遅延を削減するオーディオアプリケーションをサポートします。その結果、ユーザーモードアプリケーションは、実行時にカーネルでコードを実行しなくても、オーディオのストリームを完全に制御できます。WaveRTにより、ユーザーモードアプリケーションは、内部オーディオハードウェアバッファーとサンプル位置カウンター(オーディオハードウェアDMAエンジンにマップされているメモリ内のデータ)に直接アクセスできます。これにより、アプリケーションは、ハードウェアがアクセスしているDMAメモリウィンドウの現在の位置をポーリングできます。WaveRTは、ASIO APIと同様に、ハードウェアで生成されたクロック通知イベントの概念もサポートしています。アプリケーションが現在の位置をポーリングしたくない場合は、ポーリングする必要がないようにします。ただし、WaveRTはPCI、PCI Express、またはオンボードオーディオデバイスでのみ機能します。プロフェッショナルオーディオ業界で普及しているUSBまたはFireWireインターフェイスでは機能しません。

この新しい操作モードは、満足のいくユーザーから報告されたような、低遅延オーディオ処理の刺激的な機会を開きました。

ASIOで4ミリ秒バッファー(+5ミリ秒の出力待ち時間)の半安定オーディオと比較して、2ミリ秒バッファー+ 0.5ミリ秒の待ち時間で完璧な安定したオーディオを取得します。

このリアルタイムの概算が適切かどうかによっては、Windowsが前述のタスクに適した環境である場合もあります。


9

ジッターを維持する必要がある場合(これが "小刻みに変化する"とはどういう意味かを前提としています)、1ms未満に抑える必要があります。Windowsは忘れてしまいます。入力から出力までの絶対待ち時間は重要ですか、それとも単なるジッタですか?

あなたはそれを時々管理するかもしれませんが、それを保証することはほとんどありません。期限に間に合わなかった場合の罰則は何ですか?それはスピーカーを爆破しますか?エンドストップに対してロボットアームを強く動かしますか?それとも、より害のないものですか?

出力がUSBであるという事実は、そこに余分なOSの相互作用がたくさんあるため、ジッターの問題に役立つ可能性は低く、バスのトポロジーは潜在的な遅延も妨げます-出力が一連の文字列の最後にある場合たとえば、いくつかのハブ。


はい、ジッタは私が到達していた用語でした、ありがとう。
jonsca

5

これが可能かどうかは、遅延要件、つまり入力と出力の間の合計遅延に依存します。出発点としては、ProTools、Sonar、Ableton、Cubaseなどの録音ソフトウェアを使用してデジタルオーディオワークステーションをセットアップすることから始めることができます。これらは、安価な(一種の)I / Oハードウェアで動作し、低遅延で最適化されたドライバーが付属しています。これらの一部には、独自の信号処理でループできる「プラグイン」インターフェースがあります。多くのホストでサポートされているSteinbergのVSTが一般的な形式です。以前はオープンで無料でしたが、現在ライセンスが必要な場合があります。

このhttp://www.kvraudio.com/wiki/は、そのようなことのための優れたリソースです。

Matlabで処理する場合は、独自のドライバーを作成する必要があります。私はそれがDLLとネイティブのJAVAインターフェースで行われるのを見てきました。audioplayer()およびaudiorecorder()を使用して何かをハッキングすることもできますが、これらはWindowsの割り込みやその他の処理に対処するためにかなり長い待ち時間を必要とする場合があります。本質的には、ある時間までトリガーされるコールバックでGUIコントロールをセットアップします。コールバックでは、すべての利用可能な入力を読み取り、それらを処理し、出力に押し込み、最高のものを期待します。

一般に、Windowsボックスを可能な限り「クリーン」に保つこと、つまり、ネットワーク接続(オーディオの処理中)、アンチウイルスソフトウェアがなく、最小限の起動アイテム、ソフトウェア、サービスのみを実行することが役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.