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(ノイズ) = 60dB ですが、y(信号) = 40dB ではなく 36dB です。

ただし、代わりに y の rms 値の代わりに最大値を使用すると、40dB が得られます。また、rms 値の代わりに最大値を使用したノイズについては、70 の dB が得られます。

どちらがより良い方法ですか?計算で実効値または最大値を使用するか、それとも問題になりますか?

また、信号をサウンドとして再生すると、@0dB はまだトーンを取得しています。

dB は値と基準値の比率であることを理解しています。しかし、0dB = トーンなしになるように、コードにどのような変更を加えることができますか?

4

1 に答える 1

2

dB値に平均電力の意味を持たせるのが通常の方法です。を使用しますrms

randn平均電力が 1であるため、ノイズの場合は 60 dB になります。

理論上の rms 値はピーク値より 3 dB 低いためsin、36 dB ではなく 37 dB になるはずです。正弦波のサイクル数によっては、計算値がわずかに異なる場合があります。

ノイズで使用maxしても意味がありません。正規分布は無制限であるため、任意の高い値を取得できます。

参考までに、0 dB はトーンがないことを意味するものではありません。オーディオでは、0 dB は通常「フルスケール」値を表すため、通常、すべての値はそれより下です。

于 2013-07-23T18:58:41.657 に答える