2012-11-30 47 views
0

據我知道當我加載wav文件與命令把MATLAB:在+播放聲音在Matlab30分貝

song = wavread('file.wav');

陣列歌曲具有值的元素是從-1到1。此文件(和硬件)準備播放80dB。我需要增加+ 30dB來達到110dB。 我做10分貝由開方(10)相乘,所以要得到+30分貝我做的:

song = song*10*sqrt(10);這是一樣的

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

現在陣列歌曲的值具有遠大於值-1到1,我聽到扭曲的聲音。 是因爲這個值大於< -1,1>或我的揚聲器/耳機的質量?

+0

大多數音頻文件只有非常小的「空間」,假設它們已經被正確錄製,所以如果你試圖讓它們響亮,你會得到剪輯和失真。 –

+2

你也可能對dB感到困惑。 dB只是一個*比率*,但它通常用作相對於某個暗示參考的比率,例如, 「dB SPL」通常用於聲級,它表示相對於0 dB SPL的參考壓力的響度。 –

回答

1

失真是因爲您的值超過+/- 1。浮點值被轉換爲ADC計數,這些計數爲+/- 32768(對於16位ADC)或+/- 8388608(對於右對齊的24位ADC)或+/- 2147483648(對於左對齊ADC)剛剛完成的24位ADC)。對於16位ADC,這通常通過C中的adcSample = (short int)(32768.0*floatSample);等操作來完成。如果floatSample> +1或< -1,則會導致短整型轉換中的環繞,這是您聽到的失真。演員陣容是必要的,因爲ADC需要16位數字樣本。

您需要調整功放/揚聲器設置以獲得所需的聲級。相反,您可以創建一個文件副本,降低它30分貝,調整你的放大器/揚聲器播放80分貝的新文件,然後以相同的放大器/揚聲器設置播放原始文件。這將導致原始文件以110 dB播放。

正如Paul R在他的評論中指出的那樣,我在此猜測,當使用dB作爲dB SPL的簡寫時,指的是完整信號鏈產生的實際模擬聲級。

+0

我會嘗試播放110dB的原始文件。謝謝。 –