Вы можете сгенерировать два вектора, один для величины и другой для фазы. Затем вы используете оба, чтобы получить то, что вы хотите.
import numpy as np
import math
sigma_squred = 0.01 # Change to whatever value you want
num_elements = 10 # Size of the vector you want
magnitude = math.sqrt(sigma_squred) * np.random.randn(num_elements)
phase = 2 * np.pi * np.random.random_sample(num_elements)
# This will give you a vector with a Gaussian magnitude and a random phase between 0 and 2PI
noise = magnitude * np.exp(1j*phase)
Мне проще работать с одним вектором комплексных чисел, но, поскольку у вас есть отдельные значения x и y, вы можете получить noise_x
и noise_y
вектор с
noise_x = noise.real
noise_y = noise.imag
Примечание : Я предполагаю, что вы можете использовать библиотеку NumPy, которая значительно упрощает работу. Если это не так, вам понадобится цикл для генерации каждого элемента. Чтобы сгенерировать единичную выборку по величине, вы можете использовать random.gauss(0, sigma)
, тогда как 2*math.pi*random.random()
можно использовать для генерации выборки для фазы. Затем вы делаете то же, что и раньше, чтобы получить комплексное число, из которого вы можете получить действительную и мнимую части.