如何模拟信噪比?

机器算法验证 r 模拟 信号处理
2022-04-11 23:19:55

我有一个模拟数据向量:

data = c(0.47, 0.45, 0.30, 1.15, 0.82, 0.38, 0.51, 1.36, 1.72, 0.36)

我一直在通过生成以 0 为中心的具有不同标准偏差的随机数来增加噪音:

noise = rnorm(10, mean = 0, sd = 0.1)
data_wNoise = data + noise

我一直在任意设置标准偏差(在 0.001 和 1.5 之间)。有没有更好的方法通过设置特定的信噪比来模拟这一点?我对数据中信号的功率一无所知。

1个回答

给定一个模型

Y=f(X)+ε

信噪比可以定义为(参考ESL10):

Var(f(X))Var(ε)

要生成具有特定信噪比的数据:

signal_to_noise_ratio = 4
data = c(0.47, 0.45, 0.30, 1.15, 0.82, 0.38, 0.51, 1.36, 1.72, 0.36)
noise = rnorm(data) # generate standard normal errors
k <- sqrt(var(data)/(signal_to_noise_ratio*var(noise)))
data_wNoise = data + k*noise