2012-12-27 40 views
36

Tôi muốn thêm một số nhiễu ngẫu nhiên vào một số tín hiệu 100 bin mà tôi mô phỏng bằng Python - để làm cho nó thực tế hơn.thêm nhiễu vào tín hiệu trong python

Ở cấp độ cơ bản, suy nghĩ đầu tiên của tôi là đi bin theo thùng và chỉ tạo một số ngẫu nhiên giữa một phạm vi nhất định và cộng hoặc trừ số này khỏi tín hiệu.

Tôi đã hy vọng (vì đây là python) rằng có thể có một cách thông minh hơn để thực hiện điều này thông qua một thứ gì đó. (Tôi cho rằng lý tưởng là một con số được vẽ từ một phân phối gaussian và được thêm vào mỗi thùng cũng sẽ tốt hơn.)

Cảm ơn trước bất kỳ câu trả lời nào.


Tôi chỉ đang ở giai đoạn lập kế hoạch mã của mình, vì vậy tôi không có gì để hiển thị. Tôi chỉ nghĩ rằng có thể có một cách tinh vi hơn để tạo ra tiếng ồn.

Xét ra đầu ra, nếu tôi có 10 thùng với các giá trị sau:

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

tôi chỉ tự hỏi nếu có một chức năng được xác định trước rằng có thể thêm tiếng ồn để cho tôi một cái gì đó như:

Bin 1: 1,13 Bin 2: 4.21 Bin 3: 8.79 Bin 4: 16,08 Bin 5: 24.97 Bin 6: 25,14 Bin 7: 16,22 Bin 8: 8.90 Bin 9: 4,02 Bin 10: 0.91

Nếu không, tôi sẽ chỉ đi từng thùng và thêm một số được chọn từ phân phối gaussian cho từng phân đoạn.

Cảm ơn bạn.


Đây thực sự là tín hiệu từ kính viễn vọng vô tuyến mà tôi đang mô phỏng. Tôi muốn có thể cuối cùng chọn tỷ lệ tín hiệu để nhiễu của mô phỏng của tôi.

+2

Vui lòng chứng minh mã bạn đã thử hoặc một vấn đề cụ thể mà bạn đang gặp phải. Đầu vào mẫu và đầu ra mong muốn sẽ đi một chặng đường dài là tốt. –

+1

Loại tín hiệu nào? Bạn muốn giới thiệu loại tiếng ồn nào? "Thực tế" phụ thuộc vào loại tín hiệu. Tiếng ồn âm thanh không giống như tiếng ồn hình ảnh, ví dụ. –

Trả lời

51

Bạn có thể tạo một mảng tiếng ồn, và thêm nó vào tín hiệu của bạn

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

Trong một số hoàn cảnh, nó có thể làm cho ý nghĩa hơn để nhân tín hiệu của bạn bởi một mảng tiếng ồn (tập trung vào 1), thay vì thêm một mảng tiếng ồn, nhưng tất nhiên điều đó phụ thuộc vào bản chất của tiếng ồn mà bạn đang cố gắng để mô phỏng. –

31

... Và đối với những người - như tôi - là rất sớm trong đường cong học tập NumPy của họ,

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

Đối với những người muốn thêm tiếng ồn vào tập dữ liệu đa chiều được tải trong một khung dữ liệu gấu trúc hoặc thậm chí là một dải dữ liệu gọn gàng, đây là ví dụ:

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 
""" 
Các vấn đề liên quan