在MATLAB中计算dB

时间:2013-07-23 17:16:24

标签: matlab audio signal-processing

我试图在MATLAB中获得纯信号和噪声信号的dB电平。我的计划的一部分如下所示:

Fs= 3000;
t = 0:1/Fs:3*(Fs-1)/Fs;
y = 10^(40/20)*sin(2*pi*500*t);
x = 10^(60/20)*randn(size(y));
rmsx = rms(x);
rmsy = rms(y);
ydb = mag2db(rmsy)
xdb  = mag2db(rmsx)

我得到的结果是x(噪声)= 60dB,但y(信号)= 36dB而不是40dB。

但是,如果我改为使用y的最大值而不是rms值,我获得40dB。对于使用最大值而不是rms值的噪声,我得到的dB为70。

哪种方式更好?在计算中使用rms值或最大值甚至是否重要?

另外,当我把声音作为声音播放时,@ 0dB我仍然会听到声音。

我理解dB是值和参考值之间的比率。但是有什么修改 我可以使代码使0dB =无音

1 个答案:

答案 0 :(得分:2)

通常的方法是将平均功率的含义附加到dB值。因此,请使用rms

对于噪音,你得到60分贝,因为randn的平均功率为1。

对于sin,理论有效值比峰值低3 dB,因此应该得到37 dB,而不是36 dB。根据正弦波的周期数,您的计算值可能会略有偏差。

max与噪音一起使用没有意义。由于nornal分布是无界的,你可以获得任意高的值。

对于参考,0 dB并不意味着没有音调。在音频中,0 dB通常表示“满量程”值,因此所有值通常都低于该值。