1

私は、48kの周波数でオーディオデータを保持するベクトルを持っています。データは整数で構成され、最大値は約4kです。ベクトルタイプは<1x768000double>です。このベクトルタイプでプレーヤーを作成すると、次のようになります。

a1 = audioplayer(A,48000);
a1.play();

結果として得られるオーディオは、SNR値が1より小さいなど、非常にノイズが多くなります(つまり、ノイズの量が聞きたいものよりも多くなります)。

ただし、データをint16にキャストして、次のようにサウンドを再生すると、次のようになります。

a2 = audioplayer(int16(A),48000);
a2.play();

結果として得られるオーディオは非常に滑らかで、SNRは7〜8程度です(測定または計算されていないため、ノイズはほとんど検出できませんが、確実です)。

だからここに私の質問があります:matlabでaudioplayerを使用しているときのdoubleとint16の違いは何ですか?

PS:あなたが望むなら私はAを提供することができます。

PS2:Aには、通常どおり、音声とビットノイズ(特殊なタイプではなく、マイクの不良などが原因である可能性があります)が含まれています。

4

1 に答える 1

1

APIで答えを見つけました。オーディオプレーヤーのAPIによると、入力がダブルタイプの場合、-1から1までの値を受け入れます。私が最初にダブルタイプで使用したとき、値を-1から1の間で適切にスケーリングせず、単にそれらを再生しようとしました。Aの元の値を使用するだけでなく、再生する前にスケーリングすると問題が修正されます。

a3 = audioplayer(A/max(abs(A)),48000);
a3.play();

ベクトルを適切にスケーリングします。それは同じくらい良いです

a2 = audioplayer(int16(A),48000);
a2.play();
于 2013-03-18T15:35:15.060 に答える