gauss_markov_process.py
Go to the documentation of this file.
1 # Copyright (c) 2016 The UUV Simulator Authors.
2 # All rights reserved.
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 # http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 import numpy as np
16 
17 
18 class GaussMarkovProcess(object):
19  """Gauss-Markov process of first order
20  """
21  def __init__(self):
22  self._mean = 0
23  self._min = -1
24  self._max = 1
25  self._mu = 0
26  self._var = 0
27  self._noise_amp = 0
28  self._last_time_stamp = -1
29 
30  def __str__(self):
31  msg = 'Mean=%.3f\n' % self._mean
32  msg += 'Min. limit=%.3f\n' % self._min
33  msg += 'Max. limit=%.3f\n' % self._max
34  msg += 'Mu=%.3f\n' % self._mu
35  msg += 'Noise amplitude=%.3f\n' % self._noise_amp
36  return msg
37 
38  @property
39  def mean(self):
40  return self._mean
41 
42  @property
43  def min_value(self):
44  return self._min
45 
46  @property
47  def max_value(self):
48  return self._max
49 
50  @property
51  def mu(self):
52  return self._mu
53 
54  @property
55  def noise_amp(self):
56  return self._noise_amp
57 
58  def set_model(self, mean, min_value, max_value, mu, noise_amp):
59  assert min_value < max_value, 'Min. value must be smaller than max. value'
60  assert min_value < mean < max_value, 'Mean value must be in the interval delimited by min. and max. value'
61  assert mu >= 0, 'Mu must be greater or equal to zero'
62  assert noise_amp >= 0, 'Noise amplitude must be greater or equal to zero'
63 
64  self._mean = mean
65  self._min = min_value
66  self._max = max_value
67  self._mu = mu
68  self._noise_amp = noise_amp
69  self._var = mean
70 
71  def set_limits(self, min_value, max_value, mean=None):
72  assert min_value < max_value
73  if mean is not None:
74  assert min_value < mean < max_value
75  else:
76  assert min_value < self._mean < max_value
77 
78  self._min = min_value
79  self._max = max_value
80 
81  if mean is not None:
82  self._mean = mean
83  self._var = mean
84 
85  def set_mu(self, mu):
86  assert mu >= 0
87  self._mu = mu
88 
89  def set_noise_amp(self, noise_amp):
90  assert noise_amp >= 0
91  self._noise_amp = noise_amp
92 
93  def update(self, t):
94  if self._last_time_stamp == -1:
95  self._last_time_stamp = t
96 
97  step = t - self._last_time_stamp
98  if step <= 0:
99  return self._var
100 
101  random = np.random.rand() - 0.5
102  self._var = (1 - step * self._mu) * self._var + self._noise_amp * random
103 
104  self._var = min(self._var, self._max)
105  self._var = max(self._var, self._min)
106 
107  self._last_time_stamp = t
108  return self._var
def set_limits(self, min_value, max_value, mean=None)
def set_model(self, mean, min_value, max_value, mu, noise_amp)


uuv_plume_simulator
Author(s): Musa Morena Marcusso Manhaes
autogenerated on Mon Jun 10 2019 15:41:28