matlab - 在 +30分贝的Matlab中播放声音

  显示原文与译文双语对照的内容
0 0

就我所知,当我使用命令向matlab加载wav文件时:

song = wavread('file.wav');

array 歌曲具有从 -1到 1的元素值。 这里文件( 和硬件) 准备使用 80 dB 。 我需要添加 +30 dB来实现 110 dB 。 我通过 sqrt(10), 乘以 +10来获得 dB,以便获得 +30 dB:

song = song*10*sqrt(10);,它与

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

现在 array 歌曲值的值大于 -1到 1,我听到了扭曲的声音。 是由于此值大于 <-1,1> 或者扬声器/耳机的质量?

时间: 原作者:

0 0

失真是因为你的值超过+/-1. 浮点值转换为ADC计数,它们分别是+/-32768 ( 用于 16位 ADC ) 或者+/-8388608 ( 右对齐 24-bit ADC ) 或者+/-2147483648 ( 用于左 justfied 24-bit ADC ) 。 对于 16位 ADC,这通常是由这样的操作完成 adcSample = (short int)(32768.0*floatSample); 如果 floatSample 是> +1或者 <-1,这将导致短整数转换中出现重叠,这是你所听到的失真。 由于ADC需要 16位 数字采样,所以强制转换是必需的。

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

相反,你可以创建一个文件副本,低 it,调整放大器/扬声器,在dB播放新文件,然后播放原来的文件,然后播放同一个放大器/扬声器设置。 这将导致在 110 dB播放原始文件。

就像他在评论中提到的,在参考完整信号链产生的模拟声音水平时,我猜想这里是你使用作为 dB SPL的shorthand 。

原作者:
...