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

Clique aqui para baixar a tabela de variáveis

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;
(* ... *)