Vai al contenuto
PLC Forum


Filtro Digitale


ulixxes

Messaggi consigliati

Salve a tutti,

per un mio progetto dovrei analizzare un segnale corrispondente al peso di un contenitore che via via si svuota per poi riempirsi nuovamente ad intervalli regolari.

La velocità con cui si svuota è piuttosto regolare, ma purtroppo, essendo il materiale costituito da granaglie discrete, sul segnale è presente un certo ripple che per me è molto fastidioso in quanto causa successive elaborazioni viene molto amplificato.

Per eliminarlo finora ho provato ad usare semplici filtri passabasso, che però non vanno bene in quanto nel riempimento, che a differenza dello svuotamento è molto veloce, causano un forte ritardo nell'inseguimento del segnale (per cui devo "staccare" il controllo per diversi secondi per evitare problemi in questa fase).

Ho verificato l'uso di filtri LMS, ma non sembrano attenuare molto questo disturbo.

Qualcuno saprebbe suggerirmi un qualche filtro per trattare questi disturbi?

Il peso passa da 15000 a 4000 nell'arco di 10-15 minuti, per poi ritornare a 15000 in pochi secondi, il ripple è dell'ordine del 2-3% del segnale.

Grazie a tutti,

Link al commento
Condividi su altri siti


Potresti provare ad usare un filtro tipo "finestra scorrevole".

E' essenzialmente un passa basso ma, a differenza del passa basso tradizionale offre numerosi vantaggi. Puoi anche cambiare tempo di aggiornamento "al volo".

E' adattissimo a questo tipo di misure perchè non si limita a tagliare il disturbo ma lo media. l

Link al commento
Condividi su altri siti

Grazie della risposta.

Non li conoscevo, o meglio: ho visto che esistevano, ma non avevo capito che fossero utili in simili situazioni.

Proverò ad applicarli ed eventualmente se a qualcuno interessa, vi dico i risultati.

Link al commento
Condividi su altri siti

Proverò ad applicarli ed eventualmente se a qualcuno interessa, vi dico i risultati.

Riportare i risultati è il modo migliore per "sdebitarsi" per l'eventuale aiuto ricevuto.

Se ci dici anche con quale Hw e con quale linguaggio effettui la tua misura completi le informazioni. Magari potrebbe arrivare anche qualche suggerimento più mirato.

Link al commento
Condividi su altri siti

Salve, certamente.

Il valore mi è passato in seriale 485 una volta al secondo da un dispositivo che legge una cella di carico (TD RS 485), mentre per quanto riguarda l'elaborazione/controllo in questa prima fase prototipale ho utilizzato una scheda hobbistica (Arduino) programmata in C, che comunque sia ha fatto il suo dovere.

Una volta chiuso il lavoro legato a questo filtro, passero a qualcosa di livello industriale, probabilmente PLC (e quindi programmato in ST), a meno che non riesca a trovare un qualche dispositivo embedded sufficientemente robusto e continuare a lavorare in C (in parte per riutilizzare il lavoro già fatto, in parte perchè questo è di gran lunga il mio linguaggio preferito)

Link al commento
Condividi su altri siti

  • 3 weeks later...

puoi usare un piccolo buffer di lettura, creando un piccolo ritardo temporale.

Questo ritardo temporale puo' essere molto piccolo, visto che hai un microcontrollore (se ottimizzi il codice puo' essere moltr veloce)

Con questo ritardo puoi analizzare il tuo segnale usando la traformata di Fourier (nel periodo di Ritardo lo dividendi in periodo di 2*Pi_Greek ).

Successivamente devi eseguire l'anti-Trasformata di Fourier, eliminando la parte di Dominio con le frequenze piu' alte, e usando

solo le frequenze piu' basse.

Con il tuo Arduino puoi usare un Algoritmo FFT (Fast Fourier Trasform) con il quale puoi esegure la Trasformata di Fourier,

che l'Anti-Trasformata di Fourier.\

In questo modo ottieni un segnale che puo' essere filtrato in maniera ottimale.

Link al commento
Condividi su altri siti

Federico Milan

Secondo me un media mobile potrebbe aiutare, ma se c'è bisogno di precisione e visto che disponi di un PC, probabilmente Kalman potrebbe fare al caso tuo, visto che il modello lo conosci.

ciao

Modificato: da Federico Milan
Link al commento
Condividi su altri siti

Ha Perfettamente ragione Federico

potresti usare il filtro di Kalman.

ti allego una serie di documentazioni con relativi esempi in Fortran e Basic

per implementare il tuo filtro Kalman.

Se sai usare il C++ , penso che non avrai nessun problema vedendo il odice in Fortran.

http://iaac.technion.ac.il/workshops/2010/KFhandouts/

Link al commento
Condividi su altri siti

  • 5 months later...

Anche se non molto prestante puoi usare un Filtro di tipo FIR (Finite Impulse Response)

Ma a livello di computazione è molto veloce, ed il risultato può essere Buono.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...