Una mia curiosità:
parli di 1200 variabili !
Se fossero canali analogici, sarebbero moltissimi !
Sono 1200 valori campionati da un certo numero di canali ?
Prima li acquisisci tutti 1200 e poi li elebori ? o li elabori mentre li acquisisci?
li vuoi mediare a gruppi di n ( per esempio n da 2 a 10) con una media mobile?
Per nuvola di accettabilità , intendi la curva a campana detta Gaussiana definita da un valore medio "mu" e da una deviazione standard "sigma" ?
Se ben ricordo, entro 1 sigma ci sono il 60 % dei valori ed entro 3 sigma ce ne sono il 99 % ?
In una grande azienda anni fa parlavano del concetto di 6sigma, ossia di uno scarto ogni qualche milione.
postscriptum:
Ho cercato codesys nel web:
Se puoi programmare in "testo strutturato" non dovrebbe essere difficile.
Languages... CoDeSys V2.3
2.2.2
Structured Text (ST)...
The Structured Text consists of a series of instructions which, as determined in high level languages,
(
"IF..THEN..ELSE"
) or in loops (
WHILE..DO
) can be executed.
Example:
IF value < 7 THEN
WHILE
value < 8 DO
value:=value+1;
END_WHILE;
END_IF;
problema matematico su PLC CodeSYS
Moderatori:
PietroBaima,
Ianero
7 messaggi
• Pagina 1 di 1
0
voti
La media la fai su tutti i 1200 valori contemporaneamente?
Potresti fare la media grezza a gruppi di 30 valori, calcolata la media dei 30 valori scarti i (supponiamo) due estremi (che supponi dovuti a errori grossolani ), rifai la media raffinata sui 28 valori rimasti.
Volendo potresti ripetere il procedimento, nelle misure molto accurate di frequenze di generatori di frequenza campione fanno proprio cosi'.
dipende dal valore medio, potrebbe essere attorno allo zero con scarti positivi e negativi.
Fai un caso numerico effettivo.
Saluti
Potresti fare la media grezza a gruppi di 30 valori, calcolata la media dei 30 valori scarti i (supponiamo) due estremi (che supponi dovuti a errori grossolani ), rifai la media raffinata sui 28 valori rimasti.
Volendo potresti ripetere il procedimento, nelle misure molto accurate di frequenze di generatori di frequenza campione fanno proprio cosi'.
perché escluderli ?posso calcolare una media escludendo i valori prossimi allo zero
dipende dal valore medio, potrebbe essere attorno allo zero con scarti positivi e negativi.
Fai un caso numerico effettivo.
Saluti

0
voti
Non capisco se devi fare calcoli/filtraggi in realtime o in tempo differito dopo tutte le acquisizioni.
O vuoi filtrare un poco la sequenza di valori.
Il filtro numerico più semplice equivale a un filtro passa basso del primo ordine. Ed è il seguente:
coefficiente = 1/10 ; per esempio, deve essere parecchio minore di uno
valore grezzo = è il valore acquisito;
Valfiltrato = valfiltrato_precedente + ( valoregrezzo - valorefiltrato_precedente)* coefficiente;
valfiltratoprecedente = valfiltrato;
In alternativa fai una madia mobile su per esempio 10 valori.
O utilizzi tutti i valori grezzi meno quelli che sono maggiori di (per esempio) 1,2 * valore medio, o minori di 0,8*valore medio oppure > o < di uno scarto fisso. I valori scartati vengono sostituiti da quello precedente.
dipende da cosa ti serve / vuoi fare.................
O vuoi filtrare un poco la sequenza di valori.
Il filtro numerico più semplice equivale a un filtro passa basso del primo ordine. Ed è il seguente:
coefficiente = 1/10 ; per esempio, deve essere parecchio minore di uno
valore grezzo = è il valore acquisito;
Valfiltrato = valfiltrato_precedente + ( valoregrezzo - valorefiltrato_precedente)* coefficiente;
valfiltratoprecedente = valfiltrato;
In alternativa fai una madia mobile su per esempio 10 valori.
O utilizzi tutti i valori grezzi meno quelli che sono maggiori di (per esempio) 1,2 * valore medio, o minori di 0,8*valore medio oppure > o < di uno scarto fisso. I valori scartati vengono sostituiti da quello precedente.
dipende da cosa ti serve / vuoi fare.................
1
voti
Beh, per prima cosa cercherei di trovare la frequenza relativa di un certo valore (entro un certo +- epsilon)
Il valore che ha la frequenza relativa maggiore è il baricentro.
Poi si potrebbe fare una media pesata, assegnando o calcolando i relativi pesi ai relativi campioni a seconda del loro scostamento (percentuale o assoluto) dal baricentro prima trovato.

Il valore che ha la frequenza relativa maggiore è il baricentro.
Poi si potrebbe fare una media pesata, assegnando o calcolando i relativi pesi ai relativi campioni a seconda del loro scostamento (percentuale o assoluto) dal baricentro prima trovato.
Da soli conosciamo alcune cose.
In molti ne conosceremo molte di più.
In molti ne conosceremo molte di più.
0
voti
Questo è parente del metodo dello scarto quadratico medio.
Un altro lavoro che puoi fare (ma dipende da quanto "fine" deve essere il risultato e quanto tempo hai per farlo) è calcolare la media con tutti i valori, nessuno escluso, poi definire uno scarto semplice dalla media molto grande (per esempio +-60%) e togliere tutti i valori che sono più distanti di quella percentuale.
A questo punto puoi ricalcolare la media, senza quei valori, che sarà molto più vicina alla media vera, senza quegli outlier.
Puoi reiterare se vuoi per ottenere un risultato più fine.
Questo è il metodo più semplice che conosco, ma ve ne sono molti altri.
Un altro lavoro che puoi fare (ma dipende da quanto "fine" deve essere il risultato e quanto tempo hai per farlo) è calcolare la media con tutti i valori, nessuno escluso, poi definire uno scarto semplice dalla media molto grande (per esempio +-60%) e togliere tutti i valori che sono più distanti di quella percentuale.
A questo punto puoi ricalcolare la media, senza quei valori, che sarà molto più vicina alla media vera, senza quegli outlier.
Puoi reiterare se vuoi per ottenere un risultato più fine.
Questo è il metodo più semplice che conosco, ma ve ne sono molti altri.
-

PietroBaima
90,7k 7 12 13 - G.Master EY

- Messaggi: 12207
- Iscritto il: 12 ago 2012, 1:20
- Località: Londra
2
voti
Ho provato a farti un esempio di codice scritto in Mathematica.
Ho scritto il codice per essere comprensibile.
Mi genero un vettore di 1200 elementi a caso, di valori fra -1 e 1.
Aggiungo degli outlier.
Per non farmi dire che sto barando con le medie li aggiungo positivi fra 0 e 7 con cadenza 29
e negativi fra -3 e 0 con cadenza 17, in modo da non avere sovrapposizioni e con una media non simmetrica.
Calcolo due medie parziali, in questo modo:
Se il valore puntuale del vettore è superiore alla media lo sommo in un accumulatore, tenendo a mente quanti ne considero.
Se il valore puntuale del vettore è inferiore alla media lo sommo in un accumulatore, tenendo a mente quanti ne considero.
Faccio poi due medie dividendo gli accumulatori per i valori considerati.
Capisci che posso reiterare il metodo prendendo come nuova media la media fra il massimo e il minimo, che con l'aumentare delle iterazioni tenderà a zero, perché la media della distribuzione casuale fra -1 e 1 è appunto zero, se togli gli outlier.
Oppure puoi barare alla grande moltiplicando il massimo e il minimo per una tolleranza, al di fuori della quale elimini il valore.
In ogni caso hai poi un nuovo vettore migliore del precedente.
Ottengo questo grafico, dove all'interno della fascia ci sono i valori che considero accettabili.
Se reiteri il procedimento aumenti in precisione.
Ho scritto il codice per essere comprensibile.
Mi genero un vettore di 1200 elementi a caso, di valori fra -1 e 1.
Aggiungo degli outlier.
Per non farmi dire che sto barando con le medie li aggiungo positivi fra 0 e 7 con cadenza 29
e negativi fra -3 e 0 con cadenza 17, in modo da non avere sovrapposizioni e con una media non simmetrica.
Calcolo due medie parziali, in questo modo:
Se il valore puntuale del vettore è superiore alla media lo sommo in un accumulatore, tenendo a mente quanti ne considero.
Se il valore puntuale del vettore è inferiore alla media lo sommo in un accumulatore, tenendo a mente quanti ne considero.
Faccio poi due medie dividendo gli accumulatori per i valori considerati.
Capisci che posso reiterare il metodo prendendo come nuova media la media fra il massimo e il minimo, che con l'aumentare delle iterazioni tenderà a zero, perché la media della distribuzione casuale fra -1 e 1 è appunto zero, se togli gli outlier.
Oppure puoi barare alla grande moltiplicando il massimo e il minimo per una tolleranza, al di fuori della quale elimini il valore.
In ogni caso hai poi un nuovo vettore migliore del precedente.
- Codice: Seleziona tutto
S = 1200;
(* Costruisco un vettore di S elementi pseudocasuali fra -1 e 1 e \
aggiungo degli outlier positivi fra 0 e 7 e negativi fra -3 e 0 *)
x = ConstantArray[0, S];
Table[x[[n]] = RandomReal[{-1, 1}], {n, 1, S}];
Table[x[[n]] = RandomReal[{-3, 0}], {n, 1, S, 17}];
Table[x[[n]] = RandomReal[{0, 7}], {n, 1, S, 29}];
(* Calcolo la media aritmetica del vettore*)
M = Mean [x];
(* Calcolo due medie parziali, in questo modo:
Se il valore puntuale del vettore è superiore alla media lo sommo in \
un accumulatore, tenendo a mente quanti ne considero
Se il valore puntuale del vettore è inferiore alla media lo sommo \
in un accumulatore, tenendo a mente quanti ne considero faccio poi due medie dividendo gli accumulatori per i valori \
considerati.
*)
n = 0;
i = 0;
k = 0;
xmax = 0;
xmin = 0;
While[
n < S,
If[x[[n]] > M, xmax += x[[n]]; i++];
If[x[[n]] < M, xmin += x[[n]]; k++];
n++];
xmax /= i;
xmin /= k;
(* disegno il grafico*)
Show[ListLinePlot[x],
ListLinePlot[ConstantArray[xmax, S], PlotStyle -> {Red},
Filling -> 0, FillingStyle -> {Opacity[0.2]}],
ListLinePlot[ConstantArray[xmin, S], PlotStyle -> {Red},
Filling -> 0, FillingStyle -> {Opacity[0.2]}]]
Ottengo questo grafico, dove all'interno della fascia ci sono i valori che considero accettabili.
Se reiteri il procedimento aumenti in precisione.
-

PietroBaima
90,7k 7 12 13 - G.Master EY

- Messaggi: 12207
- Iscritto il: 12 ago 2012, 1:20
- Località: Londra
2
voti
Questo il grafico che ottengo alla seconda (arancio) e alla terza (verde) iterazione:
-

PietroBaima
90,7k 7 12 13 - G.Master EY

- Messaggi: 12207
- Iscritto il: 12 ago 2012, 1:20
- Località: Londra
7 messaggi
• Pagina 1 di 1
Chi c’è in linea
Visitano il forum: Nessuno e 6 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)



pigreco]=π