在Matlab播放声音+ 30dB

时间:2012-11-30 16:40:30

标签: matlab audio

据我所知,当我使用命令

将wav文件加载到matlab时

song = wavread('file.wav');

阵列歌曲的元素值为-1到1.此文件(和硬件)准备以80dB播放。我需要增加+ 30dB才能达到110dB。 我乘以sqrt(10)得+ 10dB,所以得到+ 30dB我做:

song = song*10*sqrt(10);

相同

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

现在阵列歌曲的值比-1到1的值大得多,我听到失真的声音。 是因为这个值大于< -1,1>或扬声器/耳机的质量?

1 个答案:

答案 0 :(得分:1)

失真是因为您的值超过+/- 1。浮点值转换为ADC计数,为+/- 32768(对于16位ADC)或+/- 8388608(对于右对齐24位ADC)或+/- 2147483648(对于左 - 只是24位ADC)。对于16位ADC,这通常通过C中的adcSample = (short int)(32768.0*floatSample);之类的操作来完成。如果floatSample是> +1或< -1这将导致short int cast中的环绕,这是你听到的失真。演员表是必要的,因为ADC需要16位数字样本。

您需要调整放大器/扬声器设置以获得所需的声级。

相反,您可以创建文件的副本,降低它30 dB,调整放大器/扬声器以80 dB播放新文件,然后播放相同放大器的原始文件/扬声器设置。这将导致原始文件以110 dB播放。

正如Paul R在评论中指出的那样,我在猜测你在提到完整信号链产生的实际模拟声级时,使用dB作为dB SPL的简写。