ulixxes Posted November 10, 2012 Report Posted November 10, 2012 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,
Livio Orsini Posted November 10, 2012 Report Posted November 10, 2012 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
ulixxes Posted November 11, 2012 Author Report Posted November 11, 2012 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.
Livio Orsini Posted November 11, 2012 Report Posted November 11, 2012 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.
ulixxes Posted November 12, 2012 Author Report Posted November 12, 2012 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)
Beatrice_Ru Posted November 27, 2012 Report Posted November 27, 2012 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.
Federico Milan Posted December 3, 2012 Report Posted December 3, 2012 (edited) 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 Edited December 10, 2012 by Federico Milan
Beatrice_Ru Posted December 10, 2012 Report Posted December 10, 2012 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/
Federico Milan Posted December 10, 2012 Report Posted December 10, 2012 Ottimo link, penso sia veramente interessante come materiale.
Henon Posted June 10, 2013 Report Posted June 10, 2013 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.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now