|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Sep 2016
Messaggi: 5
|
Filtrare un Segnale in matlab.
Buonasera, ho un segnale di accelerazione che registra su un file i valori lungo i 3 assi ogni 10ms, quindi la frequenza di campionamento dovrebbe essere 100Hz.
Ciò che vorrei chiedervi e se qualcuno potrebbe indicarmi come è possibile filtrare questo segnale. Poichè l'accelerometro mi da picchi molto alti in determinate situazioni, ma che costituiscono solo una piccola parte del segnale (questi sono quelli che mi interessano principalmente), io necessito di smussare e quindi filtrare tutti i valori di accelerazione che sono compresi diciamo tra 1m/s^2 e -1m/s^2. Ora, ho fatto la trasformata di Fourier di questo segnale attraverso il seguente codice: L = length(segnale); f = Fs*(0 : (L/2)) /L; %%Viene creato il dominio di Frequenza. Y = fft(segnale); %%Viene applicata la trasformata di Fourier P2 = abs(Y/L); P1 = P2(1:floor(L/2)+1); P1(2:end-1) = 2*P1(2:end-1); dOut = P1; plot(f,dOut) title('Single-Sided Amplitude Spectrum of Data(t)') xlabel('f (Hz)') ylabel('|P1(f)|') Quindi io vado ad analizzare tutto ciò che ricade tra 0 e 50Hz, in accordo al Teorema di Nyquist, per l'aliasing del segnale. A seguito di questa trasformata, come posso capire quale parte del mio segnale rappresenta il rumore, e quale parte invece i dati che non voglio "toccare"? E una volta determinata la frequenza in cui attenuare il rumore come è possibile creare un filtro che mi consenta di poter successivamente integrare il segnale? Link delle foto della trasformata di Fourier, e del Segnale Originale. Ultima modifica di pakopako : 11-05-2017 alle 17:44. Motivo: Inserimento Foto |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Sep 2016
Messaggi: 5
|
Ciao, Grazie per la risposta,
Metto i link delle immagini cosi magari si possono visualizzare: Questa riguarda il segnale originale. http://imgur.com/k3TJiZa Questa la trasformata di FFT http://imgur.com/e9Zn5kG Come si vede dal segnale vi sono molti valori che sono compresi tra -1 e 1, che costituiscono per la maggiore i dati del segnale stesso. Ciò che dovrei fare è effettuare l'integrazione di questo segnale. Tuttavia se lo effettuo su questo segnale così, non ottengo nulla poichè vi è molto rumore, e vorrei appunto filtrato, e il risultato che dovrei ottenere sostanzialmente dal segnale filtrato, e che i valori del segnale originale diciamo >2 e <-2 non dovrebbero cambiare, e attenuare tutti quelli più bassi, quindi la forma del segnale non mi deve cambiare di molto in corrispondenza dei picchi diciamo alti, non so se mi sono ben spiegato, Ora per applicare il filtro, non riesco a capire a quale frequenza effettuare il taglio, vedendo il risultato di fourier, ho pensato che le componenti con maggior rumore sono tra 10 e 15 Hz, e ho provato ad applicare un filtro passa-basso butter del 6 ordine con frequenza di taglio 15Hz/(100Hz/2). Ma è come se non mi cambiasse nulla, e cambiano solo i valori alti(>2 e <-2), che è esattamente l'opposto di quello che desidero. Quindi sicuramente sto sbagliando qualcosa, o mi manca altro per poter filtrare correttamente il segnale. Ultima modifica di pakopako : 12-05-2017 alle 11:00. |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Sep 2016
Messaggi: 5
|
Grazie ancora per la risposta.
In scala logaritmica il segnale dovrebbe uscire cosi: http://imgur.com/a/S7K3X Il mio problema è proprio che non riesco a capire come identificare il rumore dalla trasformata di Fourier, cioè io vorrei solo smussare i dati per poter effettuare l'integrazione perchè così giustamente non mi esce nulla. Perdonami ma non ho capito a cosa ti riferisci per rumore bianco. |
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Sep 2016
Messaggi: 5
|
Penso di esser riuscito a tirar fuori lo spettogramma, da questo cosa riesco a capire? quale parte del segnale ha rumore e quale non? e che tipo di filtraggio sarebbe opportuno?
Da quello che penso, come mi hai detto precedentemente sembra che il segnale sia davvero molto rumoroso. http://imgur.com/a/OfpNm Per fare lo spettogramma ho utilizzato: periodogram(x,rectwin(length(x)),length(x)) Ultima modifica di pakopako : 31-05-2017 alle 17:33. |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Sep 2016
Messaggi: 5
|
Perchè io di questo segnale devo effettuare una doppia integrazione, ma non mi serve lo spostamento finale, ma lo spostamento punto per punto, provo a fare un esempio di ciò che intendo:
Essendo il segnale di un'accelerazione verticale, se per esempio ho dei valori di accelerazione di 6 m/s^2, penso che lo spostamento verticale sia elevato rispetto ai punti in cui ho valori di accelerazione vicini allo 0, in cui mi apsetto uno spostamento quasi nulla. Il problema che applicando un filtro a media mobile, il segnale si è vero che si smussa, ma se effettuo l'integrazione di esso non ottengo nulla come risposta valida, non so se magari è sbagliata proprio la procedura d'integrazione allora, perchè al momento sto utilizzando a funzione cumtrapz(segnale) * dt; |
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Nov 2003
Città: Moro num pais tropical Abençoado por Deus Bonito por natureza
Messaggi: 102
|
Quote:
magari se informi quello possiamo capire se il segnale ha delle caratteristiche stimabili
__________________
TIRANNIDE indistintamente appellare si debbe ogni qualunque governo, in cui chi è preposto alla esecuzion delle leggi, può farle, distruggerle, infrangerle, interpretarle, impedirle, sospenderle; od anche soltanto deluderle, con sicurezza d'impunità. Vittorio Alfieri 1777 |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:34.



















