0

据我所知,当我使用命令将 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> 还是因为我的扬声器/耳机的质量?

4

1 回答 1

1

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

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

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

正如 Paul R 在他的评论中指出的那样,我在这里猜测您在指代完整信号链产生的实际模拟声级时使用dB的是简写形式。dB SPL

于 2012-11-30T16:56:20.063 回答