| import numpy as np |
| import pdb |
|
|
| class NoiseGenerator: |
| def __init__(self, noise_strength, correlation_factor=0.9): |
| self.noise_strength = noise_strength |
| self.correlation_factor = correlation_factor |
| self.previous_noise = None |
|
|
| def step(self, pred): |
| |
| |
| noise_seed = (np.random.rand(pred.shape[0], 1, pred.shape[2]) + 0.5) * np.random.choice([-1, 1], size=(pred.shape[0], 1, pred.shape[2])) |
| action_step = (pred[:, 1:] - pred[:, :-1]) |
| noise_step = noise_seed.repeat(action_step.shape[1], axis=1) * action_step * self.noise_strength |
|
|
| |
| if self.previous_noise is None: |
| self.previous_noise = noise_step |
| else: |
| |
| noise_step = self.correlation_factor * self.previous_noise + (1 - self.correlation_factor) * noise_step |
| self.previous_noise = noise_step |
|
|
| noise_cum = np.cumsum(noise_step, axis=1) |
|
|
| return noise_cum |
|
|