0

かなり異なる質問があります。Linux Gentoo マシンで Matlab を使用しています。私はいくつかの Asus Xonar STX サウンドカードを手に入れました。PlayRecノンブロッキング オーディオ IO パッケージを使用して、高感度のオーディオ周波数アナライザーとして使用しようとしています。

これで、オーディオレコーダー関数を使用しようとして、Linux で 24 ビットを指定すると、Matlab は、24 ビットは Windows でのみサポートされていると言うことがわかりました。ただし、ALSA の文献は、これがオペレーティング システムまたは ALSA 自体の制限であることを意味するものではなく、実際のところ、Alsa では 24 ビット PCM デバイスを指定できるようです。また、PlayRec は PortAudio を使用し、Linux システムでは Alsa を使用します。

これで問題ありません。Playrec にはビット深度を指定する手段がなく、サンプル レートのみが指定されているようです。私は多くのテストを実行し、サウンドカードの伝達関数 (浮動小数点の戻り値と入力電圧の変換比) が何であるかを知っており、ピーク電圧が 3V で、ノイズが約 100uV であることを知っています。これにより、20*log10(3/100e-6) = 91dB が得られます。これは、24 ビットからではなく、16 ビットから見られると予想されるものに近いものです。

私の本当の質問はこれです: キャプチャした信号で実際に 24 ビットを取得していることを確認する方法はありますか?

そうでない場合は、サードパーティのプログラムを使用してそのデータを収集する場合でも、サウンド キャプチャ デバイスからの 16 ビット データのみに制限している ALSA または Matlab の固有の制限があります。

4

2 に答える 2

1

playrec が出力しているデータを観察すると、playrec('getRec', ...)常に単精度浮動小数点であることがわかります (Windows、MATLAB R2013b、最新の Playrecでテスト済み)。(Playrec で 1 ページを記録し、IDE のワークスペース ウィンドウを参照するかwhos('<variable_name_of_page>')、コマンド ラインで実行することで、自分で確認できます。

の 50 行pa_dll_playrec.h目を見ると、定義により単精度が選択されていることがわかります。

/* Format to be used for samples with PortAudio = 32bit */
typedef float SAMPLE;

残念ながら、これは正確なサンプル精度の問題を完全に解決するものではありません。PortAudio lib は、さまざまな形式の API からのサンプルを定義済みのものに変換するためです。したがって、実際に得ている精度を知りたい場合は、非常に実用的な解決策をお勧めします。32 ビットの浮動サンプル値の仮数を見ることです。fprintf('%+.32f\n', data)実際に使用されている小数点以下の桁数を調べるには、単純な方法で十分です。


編集:私はそれが間違っていたことに気づきました。しかし、ここに秘訣があります: オーディオ デバイスの空のチャンネルからオーディオを録音します。記録されたデータをプロットし、ノイズ フロアを拡大します。単純なゼロしか得られない場合は、デバイスが適切にアクティブ化されていない (または信号/ノイズ比が高すぎる) 可能性があります。外部インターフェイスを試すか、ゲインを少し上げてください)。記録されたデータの実際のビット解像度に応じて、サンプルに量子化ステップが表示されます。量子化器で最初に使用されたビット深度に応じて、これらのステップは大きくなったり小さくなったりします。以下に、同じオーディオ デバイスから個別に記録されたブロックの 16 ビット (左) と 24 ビット (右) の比較を示します。左と右側の ASIO:

16 ビット (左) と 24 ビット (右) オーディオのサンプル量子化の比較

違いは明らかです。これらの非常に低いレベルでは、16 ビットでは 3 つの値しか許可されませんが、24 ビットではより細かいステップが可能です。したがって、これは、実際のビット深度を決定する方法と、信号が 24 ビットで記録されているかどうかに関する質問に対する十分な回答です。サンプル ステップが 2^-15 より小さい場合、確率はかなり高くなります。

このトピックを調べてみると、現在選択されている録音デバイスの API に大きく依存し、量子化が実際に行われるビット深度に大きく依存することがわかりました。ASIO は常に 24 ビットを使用しているようですが、たとえば WASAPI は 16 ビットにフォールバックします。

于 2014-03-31T11:41:49.033 に答える
0

その信号を wav ファイルとして保存できる場合はfile、Linux のコマンド ラインから wav でコマンドを実行します。次のようなもの:
file x.wavファイルがエンコードされたサンプリングレートとビットが表示されます。出力は通常、16 ビット、16000Hz などです。

于 2011-06-02T19:13:18.230 に答える