Commit 4943d523 authored by Bernardo Quaresma Dias's avatar Bernardo Quaresma Dias
Browse files

Inclusão de lib-filtro 1_0

INSTMPA-1330
parent e83f9f6c
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
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment