Я хотел бы вычислить среднеквадратичную амплитуду гауссовского сигнала белого шума.
import matplotlib.pyplot as plt
import numpy as np
mean = 0
std = 1.0
t = 100
def zv(t):
return np.random.normal(mean, std, size = t)
def rms(x):
return np.sqrt(np.mean(zv(x)**2))
plt.plot(zv(t))
plt.plot(rms(t))
Сюжет zv(t)
работает, но я не знаю, почему сюжет rms(t)
просто пустой.
У вас есть комментарии?
С уважением
zv(t)
возвращает одномерный массив размера t
. В результате, когда вы берете среднее значение, это единственное значение. Вы можете убедиться в этом, распечатав значение rms(t)
. Если вы хотите создать график вдоль t
для rms
, вам нужно будет создать несколько образцов Монте-Карло. Например,
def zv(t):
n = 1000
return np.random.normal(mean, std, size = (n, t))
def rms(x):
return np.sqrt(np.mean(zv(x)**2, axis = 0))
Может быть, путем суммирования случайных величин и оценки среднеквадратичной амплитуды на каждом шаге?
Основываясь на подходе, при котором генерируются случайные числа, они независимы на каждом временном шаге, и я не ожидаю никаких изменений с t
. Возможно, вам потребуется предоставить другую генерацию случайных чисел, которая лучше представляет физику вашей проблемы.
но среднеквадратичное смещение случайного блуждания пропорционально квадратному корню временных шагов?
Это новый и другой вопрос, выходящий за рамки данной проблемы. Я могу только рассказать вам, как это работает в python, на основе предоставленного вами примера кода.
Большое спасибо - теперь это работает, но это выглядит очень похоже на график zv ... Я хотел исследовать, растет ли среднеквадратическая амплитуда пропорционально sqrt (t) - потому что среднеквадратичное смещение броуновского движения ведет себя как это