0

コマンドでwavファイルをmatlabにロードすると、私が知る限り:

song = wavread('file.wav');

配列 song には、-1 から 1 までの値を持つ要素があります。このファイル (およびハードウェア) は、80dB で再生するように準備されています。110dB を達成するには +30dB を追加する必要があります。sqrt(10) を掛けて +10dB を計算するので、+30dB を得るには次のようにします。

song = song*10*sqrt(10);これはと同じです

song = song*sqrt(10)*sqrt(10)*sqrt(10);

配列 song の値が -1 から 1 よりもはるかに大きくなり、歪んだ音が聞こえるようになりました。この値が <-1,1> より大きいか、スピーカー/ヘッドフォンの品質が原因ですか?

4

1 に答える 1

1

歪みは、値が +/-1 を超えているためです。float 値は ADC カウントに変換され、+/-32768 (16 ビット ADC の場合) または +/-8388608 (右詰めの 24 ビット ADC の場合) または +/-2147483648 (左詰めの場合) のいずれかになります。正当化された 24 ビット ADC)。16 ビット ADC の場合、これは通常adcSample = (short int)(32768.0*floatSample);、Cのような操作によって実現されます。 floatSampleis > +1 または < -1 の場合、短い int キャストでラップアラウンドが発生し、これが聞こえる歪みになります。ADC は 16 ビットのデジタル サンプルを想定しているため、キャストが必要です。

アンプ/スピーカーの設定を調整して、希望するサウンド レベルを得る必要があります。

逆に、ファイルのコピーを作成し、それを 30 dB下げ、新しいファイルを 80 dB で再生するようにアンプ/スピーカーを調整してから、元のファイルを同じアンプ/スピーカー設定で再生することができます。これにより、元のファイルが 110 dB で再生されます。

Paul R が彼のコメントで述べたように、完全なシグナル チェーンによって生成される実際のアナログ サウンド レベルを参照するときにdB、省略表現として使用していると推測しています。dB SPL

于 2012-11-30T16:56:20.063 に答える