-
Notifications
You must be signed in to change notification settings - Fork 0
/
voltage.py
68 lines (56 loc) · 2.43 KB
/
voltage.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#-*- coding: utf-8 -*-
# kalman1.py
# written by Greg Czerniak (email is greg {aT] czerniak [dOt} info )
#
# Implements a single-variable linear Kalman filter.
#
# Note: This code is part of a larger tutorial "Kalman Filters for Undergrads"
# located at http://greg.czerniak.info/node/5.
# --------------------------------------------------------------------------------------------#
# OBS: ALGORITMO MODIFICADO POR ALYNNE FERREIRA E MATEUS RODRIGUES #
# quantidade de números, nome do arquivo com os valores verdadeiros, nome do arquivo com erro #
# #
# argv[1] - quantidade de valores #
# argv[2] - arquico com valor real #
# argv[3] - arquivo de entrada (com erros) #
# --------------------------------------------------------------------------------------------#
import random
import numpy
import pylab
import sys
class Voltmeter:
def __init__(self,_truevoltage,_noiselevel):
self.truevoltage = _truevoltage
self.noiselevel = _noiselevel
def GetVoltage(self):
return self.truevoltage
def GetVoltageWithNoise(self):
return random.gauss(self.GetVoltage(),self.noiselevel)
numsteps = int(sys.argv[1])
A = numpy.matrix([1])# matriz de transicao de estado
H = numpy.matrix([1]) # matriz de observacao
B = numpy.matrix([0]) # matriz de controle
Q = numpy.matrix([0.00001]) # erro estimado no processo
R = numpy.matrix([0.1]) # erro estimado nas medidas
xhat = numpy.matrix([3]) # estimativa inicial do estado
P = numpy.matrix([1]) # estimativa de covariância inicial
voltmeter = Voltmeter(1.25,0.25)
measuredvoltage = []
truevoltage = []
for i in range(numsteps):
measured = voltmeter.GetVoltageWithNoise()
measuredvoltage.append(measured)
truevoltage.append(voltmeter.GetVoltage())
#gravando em arquivos
## valores reais
arq = open('%s.txt' %sys.argv[2],'w')
for i in range (len(measuredvoltage)):
arq.write(str("1.25"))
arq.write('\n')
arq.close()
## valores com erro
arq = open('%s.txt' %sys.argv[3],'w')
for i in range (len(measuredvoltage)):
arq.write(str(round(measuredvoltage[i],2)))
arq.write('\n')
arq.close()