|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
matlab ed fft per segnale discreto
salve a tutti. Sto iniziando lo studio di matlab e tra tutorial vari, ho una domanda da porvi. Devo analizzare dei dati provenienti da un accelerometro che ad una frequenza di 25khz (per 1 secondo) mi fornisce una serie di 25k campioni di valori di accelerazione (parliamo di dati relativi al rilevamento di vibrazioni su un motore in rotazione). Devo riportare i dati in matlab (operazione fatta) ed analizzare lo spettro in frequenza e l'energia sulle varie bande in frequenza. Qualcuno ha un riferimento di codice al quale posso affidarmi?
ringrazio |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
grazie. sapresti linkarmi un esempio di codice che fa per me?
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
do un'occhiata. grazie
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
sono riuscito ad estrarre lo spettro in frequenza del segnale discreto passato alla fft come vettore. Dall'analisi visiva ho informazione da 0 a circa 13khz. Lo step successivo ora è quello di filtrare il segnale poichè dovrò effettuare uno studio solo su una determinata banda in frequenza e calcolarne l'energia. Come posso procedere alla costruzione di un filtro da applicare sul mio segnale in frequenza e come procedo con il calcolo della potenza sulle diverse bande?
grazie |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
ringrazio per la tua disponibilità e puntualità.
relativamente alla funzione che integra in un intervallo, nello specifico, mi diresti esattamente a cosa corrispondono delta_f e Xf? |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
perfetto!
avrei necessità di una dritta sui parametri da impostare: volendo tagliare a 12khz opto per un (FIR) passabasso e lascio l'ordine del filtro su "minimum order". Nel "density factor" ho un 20 di default (lascio?). Dopo di che nella schermata Frequency specifications ho un Fs che imposto a 25khz (freq di campionamento), un Fpass e un Fstop. Questi ultimi due? come banda passante lascio 12khz ? ci sarebbero problemi con le componenti continue considerando l'intervallo 0-12khz? grazie ancora |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
bene, inizio a carburare ;-)
ho settato il taglio (Fstop) a 12khz e la banda passante a 2khz. Con le impostazioni consigliate relative all'ordine automatico mi diceva che non poteva elaborare perchè il filtro deve essere almeno del 3 ordine. Per cui ho optato per la banda a 3khz (ora faccio delle prove settando in manuale 2khz e filtro del 3 ordine). Per quanto riguarda l'applicazione del filtro sulla mia serie di 25.000 campioni (1 secondo di campionamento) è corretto applicare: y=filter(VettoreDelNumeratoreFiltro, 1, SegnaleInFrequenzaDaFiltrare) e poi rappresentare y in una figura? ho notato che anche da 12 a 13khz c'è informazione filtrata. Non dovrebbe tagliare a 12 con un passabasso? anche se setto Fstop a 8-10khz ho sempre informazione fino a 13khz. Non mi torna qualcosa |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
in effetti nel segnale in frequenza ho informazione fino a circa 12500hz (considerando appunto Fs/2 nel calcolo della fft). Linko comunque due immagini matlab in modo da essere più chiaro.
segnale nel dominio del tempo https://www.dropbox.com/s/zwgozep8ed...tempo.fig?dl=0 segnale nel dominio della frequenza non filtrato https://www.dropbox.com/s/jhtv4757qw...uenza.fig?dl=0 non so se sbaglio, ma sto considerando Fstop frequenza di taglio (che voglio a 12khz e quindi voglio andare comunque a considerare quasi tutto il segnale), mentre come Fpass la banda passante, supposta a 2khz. Nel caso non hai matlab posto due jpg. Grazie ancora per l'infinita gentilezza e disponibilità |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
posto i tre segnali
nel tempo https://www.dropbox.com/s/dlm012nbv9...tempo.jpg?dl=0 in frequenza non filtrato https://www.dropbox.com/s/sp25rjgz8i...uenza.jpg?dl=0 filtro: https://www.dropbox.com/s/8qbhf8c6x4...iltro.jpg?dl=0 segnale filtrato: https://www.dropbox.com/s/w9vqrvm8ig...trato.jpg?dl=0 in effetti alzando l'ordine sembra filtrare, ma nel segnale filtrato comunque ho informazione dopo i 12.000 hz... mi daresti un parere in merito? ringrazio |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
a me interessa tutto il segnale da 0 a 12khz
mandando in run questo codice %stampa grafico segnale filtrato filtered=filter(Num,1,y_fft) figure %plot(f, filtered) plot(f,20*log10(abs(filtered))) xlim([0 13000]) xlabel('Frequenza (Hz)') ylabel('Ampiezza') title('Motore Good 1 - Visualizzazione segnale filtrato') ottengo: https://www.dropbox.com/s/v9ztdax22g...20log.jpg?dl=0 |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
mm...mi sto incartando.allora, questo è l'inizio del mio codice
m1;%vettore sequenza dei campioni Fs=25000; %frequenza campionamento bits=25000; %numero di campioni per secondo Nsamps = length(y); %numero totale dei campioni t = (1/Fs)*(1:Nsamps) %Prepare time data for plot %trasformata di fourier y_fft = abs(fft(m1)); %calcolo ampiezza fft y_fft = y_fft(1:Nsamps/2); %scarta la metà dei punti f = Fs*(0:Nsamps/2-1)/Nsamps; %preparazione freq data per funzione plot %stampa grafico nel dominio del tempo figure plot(t, m1) xlabel('Tempo (s)') ylabel('Ampiezza') title('Motore Good 1 - Visualizzazione nel dominio del tempo') %stampa grafico nel dominio del tempo logaritmico figure plot(t,20*log10(abs(m1))) xlabel('Tempo (s)') ylabel('Ampiezza') title('Motore Good 1 - Visualizzazione nel dominio del tempo - logaritmico') il grafico logaritmico che ottengo è questo: https://www.dropbox.com/s/4g76qxszyq...20log.jpg?dl=0 |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
il mio codice per il momento è questo:
m1;%vettore sequenza dei campioni Fs=25000; %frequenza campionamento bits=25000; %numero di campioni per secondo Nsamps = length(m1); %numero totale dei campioni t = (1/Fs)*(1:Nsamps); %Prepare time data for plot %trasformata di fourier y_fft = abs(fft(m1)); %calcolo ampiezza fft y_fft = y_fft(1:Nsamps/2); %scarta la metà dei punti f = Fs*(0:Nsamps/2-1)/Nsamps; %preparazione freq data per funzione plot filtered=conv(m1,Num); %filtraggio del segnale nel dominio del tempo X1=fft(m1); Y1=fft(filtered); len_x = length(X1); freq_X = (0:len_x-1)*Fs/len_x; len_y = length(X1); freq_Y = (0:len_y-1)*Fs/len_y; %stampa grafico nel dominio del tempo figure plot(t, m1) xlabel('Tempo (s)') ylabel('Ampiezza') title('Motore Good 1 - Visualizzazione nel dominio del tempo') %stampa grafico nel dominio del tempo filtrato figure plot(t, X1) xlabel('Tempo (s)') ylabel('Ampiezza') title('Motore Good 1 - Visualizzazione nel dominio del tempo') %stampa grafico nel dominio della frequenza figure plot(f, y_fft) xlim([0 13000]) xlabel('Frequenza (Hz)') ylabel('Ampiezza') title('Motore Good 1 - Visualizzazione nel dominio della frequenza') %stampa grafico nel dominio della frequenza del segnale filtrato X1 e Y1 figure plot(freq_X,20*log10(abs(X1)),freq_Y,20*log10(abs(Y1))); xlim([0 13000]) xlabel('Frequenza (Hz)') ylabel('Ampiezza') title('Motore Good 1 - Visualizzazione nel dominio della frequenza') mi da errore: >> fft_motore Warning: Imaginary parts of complex X and/or Y arguments ignored > In fft_motore at 32 Error using plot Vectors must be the same length. Error in fft_motore (line 47) plot(freq_X,20*log10(abs(X1)),freq_Y,20*log10(abs(Y1))); comunque sia il filtro sembra funzionare: https://www.dropbox.com/s/guutn2y8pn...trato.jpg?dl=0 |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
ho riguardato il codice e corretto qualcosa.
ora mi restituisce questi grafici, anche se mi da questo errore: Warning: Imaginary parts of complex X and/or Y arguments ignored segnale nel tempo non filtrato https://www.dropbox.com/s/b4boa5f447...trato.jpg?dl=0 segnale nel tempo filtrato https://www.dropbox.com/s/guutn2y8pn...trato.jpg?dl=0 segnale in frequenza non filtrato https://www.dropbox.com/s/7ukcvagqpw...trato.jpg?dl=0 segnale in frequenza filtrato https://www.dropbox.com/s/7ujwh00g0o...trato.jpg?dl=0 confronto logaritmico in frequenza https://www.dropbox.com/s/f5uj1i8ipg...tmico.jpg?dl=0 |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
per la mia analisi il filtro in questione può andare bene?
domanda: essendo misure rilevate da accelerometri, il valor medio purtroppo non è nullo (forse dovuto ad un cattivo posizionamento). Dovendo stimare diversi segnali, mi conviene calcolarlo di volta in volta a runtime e sottrarlo oppure conviene salvare dei vettori normalizzati e poi procedere? son diverse centinaia di segnali grazie il tuo aiuto è stato prezioso.. Ultima modifica di rackaef : 15-04-2015 alle 10:35. |
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Nov 2003
Città: Moro num pais tropical Abençoado por Deus Bonito por natureza
Messaggi: 102
|
solo per mia curiosità, stai facendo analisi degli spettri su motori elettrici (e non mi pare) o sono motori a combustione?
__________________
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 |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
Quote:
ma occorre tenere in considerazione il ritardo del filtro? in che modo? |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
ne dovrei tener conto in fase di convoluzione o prima/dopo ed in che modo?
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
io ho 25000 campioni del segnale originale e un vettore composto da 64 elementi del filtro.. il segnale filtrato risulta pari a 25063 elementi, in accordo a quanto da te esposto. Per tener conto del ritardo introdotto, devo scartare i primi 31 e gli ultimi 31?
|
|
|
|
|
|
#19 | |
|
Member
Iscritto dal: Nov 2003
Città: Moro num pais tropical Abençoado por Deus Bonito por natureza
Messaggi: 102
|
Quote:
A che serve uno spettro di accelerazione su motori elettrici spinto a frequenze cosi' alte? Se hai problemi dovuti al passaggio d barre danneggiate o cave allo statore dovresti avere frequenze sincrone pari al loro numero per la frequenza di rotazione e stiamo parlando di al piu' 2kHz... se arrivi a 5kHz massimo ne prendi anche la 2a armonica. Spiega dai che son curioso
__________________
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 |
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 481
|
i dati e le specifiche mi sono stati passati per un'analisi statistica e devo dunque attenermi a quanto richiesto per poter effettuare una classificazione di motori buoni e meno buoni a seconda dei dati. Sicuramente ci sono delle bande significative sulle quali concentrarsi per cui devo cercare un metodo per individuare delle zone particolarmente significative in frequenza sulle quali calibrare l'analisi. Ora sono alle prese con la funzione di classificazione matlab ossia un qualcosa del tipo class = classify(sample,training,group), anche se non conosco ancora bene come applicarla al meglio. Accettasi suggerimenti.. ;-)
p.s. auguroni!!! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:59.




















