2012-12-27 101 views
36

我想一些隨機噪聲添加到我在Python正在模擬一些100態信號 - 使之更加切合實際。增加噪聲的信號在python

在基本層面上,我首先想到的是二進制位去斌,只是產生在一定範圍之間的隨機數,並添加或從信號中減去這一點。

我希望(因爲這是蟒蛇),有可能更智能的方式通過numpy的什麼做到這一點。 (我想,理想情況下,從高斯分佈中抽取一個數字並添加到每個bin中會更好。)

在任何回覆前提前致謝。


我只是在規劃我的代碼的階段,所以我沒有任何東西可以顯示。我只是在想,可能會有更復雜的噪音產生方式。

在術語out輸出,如果我有10個箱具有以下值:

濱1:1 濱2:4 濱3:9 濱4:16 濱5:25 濱6 :25 斌7:16 斌8:9 斌9:4 斌10:1

是否有可能增加噪聲給我像一個預先定義的功能,我只是想知道:

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

如果不是,我將只是去bin-bin,並添加一個從高斯分佈中選擇一個號碼給每一個。

謝謝。


它實際上是我模擬的射電望遠鏡的信號。我希望能夠最終選擇的信號,我模擬的信噪比。

+2

請演示您嘗試過的代碼或遇到的特定問題。樣本輸入和期望的輸出也會有很長的路要走。 –

+1

什麼樣的信號呢?你想介紹什麼樣的噪音? 「現實」取決於信號的類型。例如,音頻噪聲與圖像噪聲不同。 –

回答

51

可以產生噪聲陣列,並將其添加到您的信號

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 
+5

在某些情況下,將信號乘以噪聲陣列(以1爲中心)可能更有意義,而不是添加噪聲陣列,但當然取決於您試圖模擬的噪聲的性質。 –

31

...對於那些誰 - 像我一樣 - 在他們的numpy的學習曲線非常早,

import numpy as np 
pure = np.linspace(-1, 1, 100) 
noise = np.random.normal(0, 1, pure.shape) 
signal = pure + noise 
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 
"""