Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 在+;30分贝_Matlab_Audio - Fatal编程技术网

Matlab 在+;30分贝

Matlab 在+;30分贝,matlab,audio,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) 现在数组song的值比-1比1大得多,我听到了失真的声音。 是因为该值大于或高于我的

据我所知,当我使用命令将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)

现在数组song的值比-1比1大得多,我听到了失真的声音。
是因为该值大于或高于我的扬声器/耳机的质量吗?

失真是因为您的值超过+/-1。浮点值转换为ADC计数,其为+/-32768(对于16位ADC)或+/-8388608(对于右对齐的24位ADC)或+/-2147483648(对于左对齐的24位ADC)。对于16位ADC,这通常通过如下操作完成:adcSample=(short int)(32768.0*floatSample)。如果
floatSample
为>+1或<-1,这将导致短int型中的wrapparound,这就是您听到的失真。强制转换是必要的,因为ADC需要16位数字采样

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

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


正如Paul R在其评论中所指出的,我猜您在这里使用的是
dB
作为
dB SPL
的简写,指的是整个信号链产生的实际模拟声级。

大多数音频文件的“净空”非常小,假设它们已被正确录制,所以,如果你试着让声音更大,你只会得到剪辑和失真。而且你可能会对分贝感到困惑。dB只是一个比率,但它经常被用作相对于某些隐含参考的比率,例如,
dB SPL
通常用于声级,它表示相对于0 dB SPL参考压力的响度。我将尝试以110 dB播放原始文件。非常感谢。