我试图在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 =无音
答案 0 :(得分:2)
通常的方法是将平均功率的含义附加到dB值。因此,请使用rms
。
对于噪音,你得到60分贝,因为randn
的平均功率为1。
对于sin
,理论有效值比峰值低3 dB,因此应该得到37 dB,而不是36 dB。根据正弦波的周期数,您的计算值可能会略有偏差。
将max
与噪音一起使用没有意义。由于nornal分布是无界的,你可以获得任意高的值。
对于参考,0 dB并不意味着没有音调。在音频中,0 dB通常表示“满量程”值,因此所有值通常都低于该值。