Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
mpa
libs
pucrio-tecgraf
Commits
4943d523
Commit
4943d523
authored
Sep 09, 2021
by
Bernardo Quaresma Dias
Browse files
Inclusão de lib-filtro 1_0
INSTMPA-1330
parent
e83f9f6c
Changes
1
Hide whitespace changes
Inline
Side-by-side
lib-filtro-1_0.mpam
0 → 100644
View file @
4943d523
include 'lib-math-1_2.mpam'
func{ id = "filtro_calc_fator_proporcional_erro", name = "Filtro: Calcular Fator Proporcional ao Erro", group = "Filtro",
description = [[Calcula um fator proporcional para filtro em função do erro atual e o erro típico para a variável.]],
parameters = {
{ name = "Entrada Atual", type = "REAL" },
{ name = "Saída Anterior", type = "REAL" },
{ name = "Erro Típico", type = "REAL" },
},
results = {
{ name = "Fator", type = "REAL" },
},
code = [===[ function(in_1, out_0, erro_ref)
local erro = abs( (out_0) - in_1)
local erro_prop = erro/(2*sqrt(2)*erro_ref)
local erro_erf = math_calc_erf(erro_prop)
return (erro_erf*2)/sqrt(pi)
end ]===],
}
func{ id = "filtro_converter_fator_proporcional", name = "Filtro: Converter Fator Proporcional", group = "Filtro",
description = [[Converte o valor calculado para o fator proporcional para contante de tempo.]],
parameters = {
{ name = "Fator Proporcional", type = "REAL" },
{ name = "Tempo de Amostragem", type = "REAL" }
},
results = {
{ name = "Constante de Tempo", type = "REAL" },
},
code = [===[ function(alpha, ts)
return -ts/math.log(1-alpha)
end ]===],
}
func{ id = "filtro_executar", name = "Filtro: Executar", group = "Filtro",
description = [[
Executa o filtro sobre o valor do processo, saída anterior e fator.
f(x_1) = (1-fator)*y_0 + fator*x_1
Onde:
. fator é a proporção que o valor atual influi no valor filtrado.
. x_1 é o valor da entrada atual.
. y_0 é o valor do filtro calculado na exeção anterior.
Se um delta de tempo for informado, o fator será considerado como contante de tempo e
A função executada será:
f(x_1) = (x_1*dt+fator*y_0)/(dt+fator)
Onde:
. dt é a diferença de tempo, em segundos, entre a avaliação anterior e a atual,
. fator é a constante de tempo do processo em segundos
. y_0 é o valor do filtro calculado na avaliação anterior.
Se nenhum valor anterior for informado o próprio valor atual é retornado
]],
parameters = {
{ name = "Entrada Atual", type = "REAL" },
{ name = "Saída Anterior", type = "REAL" },
{ name = "Fator", type = "REAL" },
{ name = "Delta de Tempo", type = "REAL" },
},
results = {
{ name = "Valor Filtrado", type = "REAL" },
},
code = [===[ function(x_1, y_0, fator, dt)
if y_0 == nil then
return x_1
elseif dt then
fator = limitar(fator, 1)
return (x_1*dt + fator*y_0)/(fator+dt)
else
fator = limitar(fator, 0.05, 1)
return (1-fator)*y_0 + fator*x_1
end
end ]===],
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment