python - 如何在信号数据中添加 5% 的高斯噪声

标签 python numpy signal-processing gaussian

我想向多变量数据添加 5% 的高斯噪声。 这是方法

import numpy as np 
mu, sigma = 0, np.std(data)*0.05 
noise = np.random.normal(mu, sigma, data.shape)
noise.shape

这是信号。这是添加 5% 高斯噪声的正确方法吗 enter image description here

最佳答案

我认为您走在正确的轨道上,噪声本质上是加性的,如果您查看 (SNR) 信噪比计算

信噪比 = 20 * log(p_s)/(p_n)

不过是

SNR = 20 (log(p_s) - log(p_n))

所以我们基本上是从信号(有噪声)中减去噪声的功率

为整个信号添加噪声

我会像你发布的那样做

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(137)
t = np.linspace(0, 10, 100)
p = np.sin(t)
percentage = 0.05
n = np.random.normal(0, p.std(), t.size) * percentage
pn = p + n

fig = plt.figure()

ax1 = fig.add_subplot(211)
ax1.set_title('Noise added to entire signal')
ax1.plot(t, p, label='pure signal')
ax1.plot(t, pn, label='signal+noise')

ax2 = fig.add_subplot(212)
ax2.plot(t, pn - p, label='added noise', c='r')
plt.legend()

fig = plt.figure()

ax1 = fig.add_subplot(211)
ax1.set_title('Noise added to part of the signal')
ax1.plot(t, p, label='pure signal')
random_indices = np.random.randint(0, t.size, int(t.size*percentage))

pr = p.copy()
pr[random_indices] += n[random_indices]
ax1.plot(t, pr, label='signal+noise')

ax2 = fig.add_subplot(212)
ax2.plot(t, pr - p, label='added noise', c='r')
plt.legend()
plt.show()

enter image description here

enter image description here

注意事项

我注意到的一个有趣的事情是 np.random.normal 对于非常小的方差值主要采样正值,所以最好缩放 5%,即采样后的方差更高的方差值

关于python - 如何在信号数据中添加 5% 的高斯噪声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64074698/

相关文章:

python - 使用 Pandas value_counts() 添加 'rest' 组

python - numpy 中的小计

python - 为什么将大小为 1 的维度插入 numpy 数组会使其 'contiguous' 标志无效?

python - 2 个 numpy 数组之间的排序和索引

matlab - matlab中的新手互相关

python - 使用矩阵乘法用numpy计算L2距离

python - 如何使用 plotnine 库在 Python 中绘制函数图

c# - 我需要帮助弄清楚这种FFT方法

Python SQL数据库查询给出 "Too few parameters"错误

R 中用于超大型数据集处理和机器学习的推荐包