/ / добавяне на шум към сигнал в Python - Python

добавяне на шум към сигнал в Python - python

Искам да добавям произволен шум към сигнал от 100 бин, който симулирам в Python - да го направя по-реалистичен.

На основно ниво първата ми мисъл беше да отида в кошчето с бин и просто да генерира произволен номер между определен диапазон и да го добавя или изважда от сигнала.

Надявах се (тъй като това е питон), че може да имапо-интелигентен начин да направите това чрез мръсотия или нещо такова. (Предполагам, че в идеалния случай число, съставено от гаусовото разпространение и добавено към всеки контейнер би било по-добре също.)

Благодарим ви предварително за отговорите.


Аз съм само на етап планиране на моя код, така че нямам какво да ви покажа. Просто си мислех, че може да има по-сложен начин за генериране на шума.

От гледна точка на продукцията, ако имах 10 кошчета със следните стойности:

Bin 1: 1 Бин 2: 4 Бин 3: 9 Бин 4: 16 Бин 5: 25 Бин 6: 25 Бин 7: 16 Бин 8: 9 Бинг 9: 4 Бин 10: 1

Просто се чудех дали има предварително зададена функция, която може да придаде шум, за да ми даде нещо като:

Bin 1: 1.13 Котел 2: 4.21 Bin 3: 8.79 Bin 4: 16.08 Bin 5: 24.97 Bin 6: 25.14 Bin 7: 16.22 Кол. 8: 8.90 Bin 9: 4.02 Кол. 10: 0.91

Ако не, аз просто ще отида на бин-по-бин и добавете номер, избран от Gaussian разпределение на всеки един.

Благодаря ти.


Това всъщност е сигнал от радио телескоп, че аз съм симулиране.Искам да бъде в състояние в крайна сметка да изберат съотношението сигнал / шум на моята симулация.

Отговори:

61 за отговор № 1

Можете да генерирате шумов масив и да го добавите към сигнала си

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 за отговор № 2

... И за онези, които - като мен - са много рано в изтръпната им крива на обучение,

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

3 за отговор № 3

За тези, които искат да добавят шум към многоизмерния набор от данни, заредени в рамките на панда с данни или дори с numpy ndarray, ето един пример:

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