0

我试图在 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(noise) = 60dB,但 y(signal) = 36dB 而不是 40dB。

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

哪个是更好的方法?在计算中使用 rms 值或最大值,甚至有关系吗?

此外,当我将信号作为声音播放时,@0dB 我仍然会听到音调。

我理解 dB 是值和参考值之间的比率。但是我可以对代码进行哪些修改,使 0dB = 无音调

4

1 回答 1

2

通常的方法是将平均功率的含义附加到 dB 值。所以使用rms.

对于噪音,您会得到 60 dB,因为randn平均功率为 1。

因为sin理论 rms 值比峰值低 3 dB,所以你应该得到 37 dB,而不是 36 dB。根据正弦曲线的周期数,您的计算值可能会略有偏差。

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

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

于 2013-07-23T18:58:41.657 回答