LINEAR_REG
Este bloco implementa o cálculo de regressão linear em um buffer de dados adquirido em um intervalo de tempo especificado. É fornecido um vetor do tipo REAL para servir como uma FIFO de dados. O bloco recebe um valor de tempo de aquisição (STME) e calcula o intervalo de aquisição dividindo-se o tempo de aquisição (STME) pelo nro. de elementos do buffer fornecido.
Desta forma, à cada intervalo de tempo um valor da entrada (INP) é inserido no buffer. Quando o buffer estiver completamente preenchido, os parâmetros de saída (A e B) são calculados. A partir deste instante, a cada inserção de um novo valor os parâmetros são recalculados e a saída (EVT) gera um pulso notificando este evento.
O calculo realizado utiliza o método de regressão denominado de “Least Square Method” define uma reta que minimiza o erro entre do valor adquirido e o valor calculado pela equação:
y = Ax + B
O bloco LINEAR_REG fornece os valores de A e B utilizados na equação acima.
Bloco
LINEAR_REG
+-------------+
REAL ----|INP EVT|---- BOOL
| |
REAL ----|XSTEP A|---- REAL
| |
TIME ----|STME B|---- REAL
| |
BOOL ----|CLR |
| |
REAL ----|BUF -------- |---- REAL
+-------------+
Importante
Apesar do parâmetro BUF ser do tipo ANY, o bloco necessita que o mesmo seja sempre um vetor do tipo REAL.
Parâmetros
Nome |
Parâmetro |
Tipo Dado |
V. Ini. |
Descrição |
INP |
Entrada |
REAL |
0.0 |
Entrada do sinal a ser amostrado |
XSTEP |
Entrada |
REAL |
1 |
Intervalo a ser utilizado no eixo X |
STME |
Entrada |
TIME |
T#3h |
Intervalo total para avaliação do dado |
CLR |
Entrada |
BOOL |
FALSE |
Inicializa o bloco |
EVT |
Saída |
BOOL |
FALSE |
Dado adquirido (Pulso) |
A |
Saída |
REAL |
0.0 |
Valor da constante A |
B |
Saída |
REAL |
0.0 |
Valor da constante B |
BUF |
Entrada/Saída |
ANY |
Buffer de valores |
Exemplo
Declaração de Variáveis
Nome |
Tipo |
Dimensão |
Descrição |
|---|---|---|---|
my_LREG |
HILS.LINEAR_REG |
Instancia do bloco LINEAR_REG |
|
my_BUF |
REAL |
[0..29] |
Buffer de valores de dados |
value |
REAL |
Valor do sinal a ser amostrado |
|
step |
REAL |
Intervalo a ser utilizado no eixo X |
|
stime |
TIME |
Intervalo total para avaliação do dado |
Código ST
(* Exemplo de utilização do LINEAR_REG *)
(* ... *)
value := 1.5; (* valor do sinal a ser amostrado *)
step := 1.0; (* Intervalo no eixo X *)
stime := T#10m; (* Intervalo total para avaliação do dado *)
my_LREG(
INP := value,
XSTEP := step,
STME := stime,
CLR := FALSE,
BUF := my_Buf
);
(* ... *)
if (my_LREG.EVT) then (* trata dado *)
(* trata my_LREG.A e my_LREG.B *)
(* ... *)
end_if;
(* ... *)