/ / Agregando ruido a una señal en python - python

añadiendo ruido a una señal en python - python

Quiero agregar algo de ruido aleatorio a una señal de 100 bin que estoy simulando en Python, para hacerlo más realista.

En un nivel básico, mi primer pensamiento fue ir bin por bin y simplemente generar un número aleatorio entre un cierto rango y sumarlo o restarlo de la señal.

Esperaba (ya que esto es python) que podríaUna forma más inteligente de hacer esto a través de numpy o algo así. (Supongo que lo ideal sería que un número extraído de una distribución gaussiana y agregado a cada bandeja también sería mejor).

Gracias de antemano por cualquier respuesta.


Estoy justo en la etapa de planificación de mi código, por lo que no tengo nada que mostrar. Estaba pensando que podría haber una forma más sofisticada de generar el ruido.

En términos de salida, si tuviera 10 contenedores con los siguientes valores:

Bin 1: 1 Cubo 2: 4 Bin 3: 9 Papelera 4: 16 Papelera 5: 25 Bin 6: 25 Bin 7: 16 Bin 8: 9 Bin 9: 4 Papelera 10: 1

Simplemente me pregunté si había una función predefinida que podría agregar ruido para darme algo como:

Bin 1: 1.13 Contenedor 2: 4.21 Papelera 3: 8.79 Papelera 4: 16.08 Papelera 5: 24.97 Papelera 6: 25.14 Contenedor 7: 16.22 Contenedor 8: 8.90 Bandeja 9: 4.02 Contenedor 10: 0.91

Si no, solo iré bin-by-bin y agregaré un número seleccionado de una distribución gaussiana a cada uno.

Gracias.


En realidad, es una señal de un radiotelescopio que estoy simulando. Quiero poder elegir la relación señal / ruido de mi simulación.

Respuestas

61 para la respuesta № 1

Puede generar una matriz de ruido y agregarla a su señal

import numpy as np

noise = np.random.normal(0,1,100)

# 0 is the mean of the normal distribution you are choosing from
# 1 is the standard deviation of the normal distribution
# 100 is the number of elements you get in array noise

35 para la respuesta № 2

... Y para aquellos que, como yo, están muy temprano en su curva de aprendizaje,

import numpy as np
pure = np.linspace(-1, 1, 100)
noise = np.random.normal(0, 1, pure.shape)
signal = pure + noise

3 para la respuesta № 3

Para aquellos que desean agregar ruido a un conjunto de datos multidimensionales cargado dentro de un marco de datos de pandas o incluso a una bandeja de datos numpy, aquí hay un ejemplo:

import pandas as pd
# create a sample dataset with dimension (2,2)
# in your case you need to replace this with
# clean_signal = pd.read_csv("your_data.csv")
clean_signal = pd.DataFrame([[1,2],[3,4]], columns=list("AB"), dtype=float)
print(clean_signal)
"""
print output:
A    B
0  1.0  2.0
1  3.0  4.0
"""
import numpy as np
mu, sigma = 0, 0.1
# creating a noise with the same dimension as the dataset (2,2)
noise = np.random.normal(mu, sigma, [2,2])
print(noise)

"""
print output:
array([[-0.11114313,  0.25927152],
[ 0.06701506, -0.09364186]])
"""
signal = clean_signal + noise
print(signal)
"""
print output:
A         B
0  0.888857  2.259272
1  3.067015  3.906358
"""