【问题标题】:How to calculate SNR of signals in MATLAB?如何在 MATLAB 中计算信号的 SNR?
【发布时间】:2013-04-19 10:00:51
【问题描述】:

我在计算 SNR 时遇到了一个非常简单但基本的问题:

有几个信号:

  • S1 = 无噪声的原始纯净信号。

  • N1 = 将添加到 S1 的高斯白噪声。

  • S2 = S1 + N1(执行降噪算法前的噪声信号)

  • S3 = 降噪信号(执行降噪算法后)

  • N2 = S3 - S1(执行降噪算法后的噪声量)

现在我想比较执行降噪算法前后的 SNR。

  1. 我应该为 SNR_before 考虑哪些信号!? S1/N1 还是 S2/N1

  2. 对于 SNR_after,我应该考虑哪些信号!? S3/N1 还是 S3/N2

  3. 我应该在 MATLAB 中使用哪些命令或函数来计算 SNR_before 和 SNR_after?

非常感谢您花时间帮助我。

【问题讨论】:

  • 哦,不,不,不是阶乘!!抱歉打了这么多分!!我只是说“?”仅此而已! ;)

标签: matlab signals noise


【解决方案1】:

我对之前计算snr的了解:

snrBeforeNoise = mean(signal.^2)/mean(noise.^2);

关于snr之后:

residual_noise = 信号 - noise_reduced_signal; snr_after = 均值(信号 .^ 2 )/均值(残差噪声 .^ 2 );

【讨论】:

  • 感谢丹尼的回复。但就我而言,我有几个让我感到困惑的选择!在算法之前,我应该考虑哪一个: S1/N1 或 S2/N1 ?在算法之后我应该考虑 S3/N1 还是 S3/N2 ?
  • 顺便说一下,为了计算 SNR,我们应该计算信号的功率,对吧!?那么“平均”是否正确!?
  • 对于之前,它是 s2/s1,因为 s2 是您的信号,包含噪声并且在降噪之前。
  • 更准确的做法是计算 s1/n1,但在大多数情况下,您没有 s1,只有 s2。但是,如果您的 SNR 较高,则可以忽略不计,您可以随时修复它,因为 s2/n1 等于 s1/n1 + 1(在线性计算中)。
  • 谢谢 wakjah。我肯定会使用 10*log10() 来计算 SNR,但只有在我明白该选择哪一个之后!
猜你喜欢
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
相关资源
最近更新 更多