【问题标题】:Generate signal with noise intensity +4dB [duplicate]生成噪声强度+4dB的信号[重复]
【发布时间】:2015-07-07 06:28:22
【问题描述】:

假设我们有以下信号

fs=100;
ts=1/fs;
t=0:ts:2.93;
determ=40*sin(2*pi*10*t)+30*cos(2*pi*10.5*t);

我想用确定性分量产生 +4dB 的噪声,而不是信号/噪声功率,但反之亦然,噪声/信号功率应该是 +4dB,我该怎么做?我知道一般噪音是由此产生的

noise=randn(size(t));

但是如何计算噪声幅度? Here也是信噪比计算公式的一些帮助。

【问题讨论】:

  • 所以您的意思是 SNR 为 -4dB?
  • 是的,非常感谢您的回复
  • 那么你的信号功率是多少?因此,您的噪声功率需要是多少?因此,您需要什么方差?
  • 我的信号功率是994.5637,
  • 某人又开始作为一种习惯投票了

标签: matlab signal-processing


【解决方案1】:

在这个问题中你想设置噪声信号的幅度,因此首先尝试找到这个噪声信号的信噪比noise=randn(size(t));

SNR = 10*log10( mean(noise.^ 2)/mean(signal .^ 2) )

现在将噪声乘以增益因子(比如 a),得到 -4dB 比率。

-4   = 10*log10( mean(a^2*noise.^2)/mean(signal.^2) )
-4   = 10*log10( a^2*mean(noise.^2)/mean(signal.^2) )
-4   = 10*( log10(a^2) + log10( mean(noise.^2)/mean(signal.^2) ) )
-4   = 10*( log10(a^2) + SNR )
-0.4 = 2*log10(a) + SNR
-0.4-SNR = 2*log10(a)
a = 10^(-0.2-SNR/2)

result = a*noise;

希望这会有所帮助

编辑:为了更清楚,在上面的草稿之后我们有代码:

noise = randn(size(t)); SNR = 10*log10( mean(noise.^ 2)/mean(signal .^ 2) ); result = 10^(-0.2-SNR/2) * noise;

【讨论】:

  • 这毫无意义;你有一个同时包含 anoise 的方程,以及一个同时包含 -4 和 SNR 的方程。
  • @OliverCharlesworth 首先,您会发现 SNR(不等于 -4)和上面发现的噪声。然后更新噪声以获得 -4 作为新的 SNR 值。它在 MATLAB 上运行良好。我不确定你有什么不清楚的地方。
  • 因为它比这简单得多。我们知道信号功率,所以噪声功率需要比它高4dB。然后你就完成了(除了将功率转换为 RMS 幅度)。
  • @OliverCharlesworth 这就是我在那里所做的。在那里完成的所有计算(不是编码)都减少到只有 3 行代码,对你来说是不是很复杂?
  • 是的,你不必要地把它复杂化了。例如,我们知道 randn 生成方差为 1 的数据。
猜你喜欢
  • 2014-10-25
  • 2011-05-24
  • 2014-02-22
  • 1970-01-01
  • 2016-12-20
  • 2021-02-05
  • 2015-10-05
  • 2023-04-02
  • 2012-05-04
相关资源
最近更新 更多