Domanda aggiungendo rumore a un segnale in python


Voglio aggiungere un po 'di rumore casuale a un segnale da 100 bin che sto simulando in Python - per renderlo più realistico.

A un livello base, il mio primo pensiero era quello di andare in bin by bin e generare un numero casuale tra un certo intervallo e aggiungere o sottrarre questo dal segnale.

Speravo (come questo è Python) che ci potrebbe essere un modo più intelligente per fare questo via numpy o qualcosa del genere. (Suppongo che idealmente un numero estratto da una distribuzione gaussiana e aggiunto a ciascun bin sia anche migliore).

Grazie in anticipo di eventuali risposte.


Sono solo nella fase di pianificazione del mio codice, quindi non ho nulla da mostrare. Stavo solo pensando che potrebbe esserci un modo più sofisticato di generare il rumore.

In termini di output, se avessi 10 contenitori con i seguenti valori:

Raccoglitore 1: 1 Raccoglitore 2: 4 Racc. 3: 9 Bin 4: 16 Racc. 5: 25 Racc. 6: 25 Bin 7: 16 Racc. 8: 9 Racc. 9: 4 Raccoglitore 10: 1

Mi chiedevo solo se esistesse una funzione predefinita che potrebbe aggiungere rumore per darmi qualcosa del tipo:

Raccoglitore 1: 1.13 Raccoglitore 2: 4.21 Raccoglitore 3: 8.79 Racc. 4: 16.08 Raccoglitore 5: 24,97 Racc. 6: 25.14 Bin 7: 16.22 Racc. 8: 8,90 Raccoglitore 9: 4.02 Bin 10: 0.91

In caso contrario, andrò semplicemente bin-by-bin e aggiungerò un numero selezionato da una distribuzione gaussiana a ciascuno.

Grazie.


In realtà è un segnale di un radiotelescopio che sto simulando. Voglio poter finalmente scegliere il rapporto segnale / rumore della mia simulazione.


44
2017-12-27 17:03


origine


risposte:


È possibile generare un array di disturbi e aggiungerlo al segnale

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

61
2017-12-27 17:09



... E per coloro che - come me - sono molto precoci nella loro curva di apprendimento numpy,

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

35
2017-10-03 15:11



Per coloro che vogliono aggiungere rumore al set di dati multidimensionale caricato all'interno di un dataframe panda o persino un ndarray numerico, ecco un esempio:

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
""" 

3
2017-09-07 10:24