2011-07-20 14 views
1

私はXAudio2を使ってPCM形式の波をサウンドカードに送信しようとしています。私はこの問題について考えさせる問題に遭遇しました。 440Hzの正弦波のMATLABを使って.csvファイルを作成し、最初に1KHz(1秒間)でサンプリングしました。サウンドカードのサンプルレートを確認/変更するにはどうすればよいですか?

私のC++プログラムは、そのファイルをロードし、そのバッファをサウンドカードに送ります。問題は、出力が歪められ(クリップされ)、正弦波のようには聞こえなかったことです。それでサウンドカードは1kHzのサンプリングレートが好きではないかもしれないと思ったので、私はそれを2倍にして、突然すべてうまくいった。

これが本当に問題であることを確認する方法はありますか?

答えて

3

1kHzのサンプリングレートでのナイキスト周波数はわずか500Hzです。私は驚くことではないが、それはひどく聞こえた。サンプルレートが1kHzで、500Hzのサウンドを演奏したとします。あなたの出力は方形波になります。あなたが十分なサンプルを持っていないので、+ - + + - +の間には何もありません。ナイキスト周波数に近づくと、その波を複製する能力が低下します。このような低い周波数で聞こえます。

いずれの場合でも、サウンドカードを低サンプルレートで使用することは考えられません。ソフトウェアドライバがあなたのためにリサンプリングして、どんな種類のアーティファクトがスローされているのかを知っている人は、はるかに多いです。11.025Hz以上の妥当なものを試してみてください。これは44.1kHz( "CD"のサンプルレート)を4で割ったもので、多くのサウンドカードが直接サポートしています。ほとんどのカードは22.05kHzで動作します。

+0

理論的には、2x440Hzより上の数ヘルツは、440Hzの波を再構築するのに十分なはずですか? –

+0

@Deli、確かに、非常に壊れた響きの方法で。スピーカーから適切な周波数が得られますが、方形波のように聞こえます。スコープに置いて見てください。次に、スペクトルプロットを見て、生成しているすべての高調波を確認します。 – Brad