vpervendetta
13-02-2013, 19:21
Ciao, devo implementare un filtro su matlab e di preciso il filtro è un IIR, ho trovato una breve spiegazione su internet a riguardo che è questa:
Di seguito sono riportate le istruzioni utilizzate dal workspace di Matlab per filtrare il segnale di esempio:[b a]=butter(10,0.1,'low');freqz(b,a,100);segnale_filtrato=filtfilt(b,a,segnale);plot(segnale_filtrato,'r');La prima istruzione permette di ottenere i parametri a e b di un filtro modellizzato secondo Butterworth di ordine 10, frequenza di taglio normalizzata pari a 0.1 e di tipo passa-basso.
8
La seconda istruzione freqz permette di visualizzare la funzione di trasferimento del filtro, nell'immagine sottostante sono visualizzabili i grafici della fase e del modulo relativi al filtro di esempio:Con la terza istruzione avviene effettivamente l'operazione di filtraggio del segnale. Le ultime operazioni permettono di sovrappore e graficare il segnale prima e dopo il filtraggio sulla stessa figura.
Il mio problema è che non riesco a far funzionare il filtraggio, cioè la funzione segnale_filtrato=filtfilt(b,a,data), credo perche la mia matrice data è molto grande (19x77833) ma non ne sono sicuro, gli errori che mi da matlab sono:
??? Error using ==> filtfilt at 75
Data must have length more than 3 times filter order.
Error in ==> filtfilt at 57
y(:,i) = filtfilt(b,a,x(:,i));
Cosa può essere? Come posso risolvere il problema?
Di seguito sono riportate le istruzioni utilizzate dal workspace di Matlab per filtrare il segnale di esempio:[b a]=butter(10,0.1,'low');freqz(b,a,100);segnale_filtrato=filtfilt(b,a,segnale);plot(segnale_filtrato,'r');La prima istruzione permette di ottenere i parametri a e b di un filtro modellizzato secondo Butterworth di ordine 10, frequenza di taglio normalizzata pari a 0.1 e di tipo passa-basso.
8
La seconda istruzione freqz permette di visualizzare la funzione di trasferimento del filtro, nell'immagine sottostante sono visualizzabili i grafici della fase e del modulo relativi al filtro di esempio:Con la terza istruzione avviene effettivamente l'operazione di filtraggio del segnale. Le ultime operazioni permettono di sovrappore e graficare il segnale prima e dopo il filtraggio sulla stessa figura.
Il mio problema è che non riesco a far funzionare il filtraggio, cioè la funzione segnale_filtrato=filtfilt(b,a,data), credo perche la mia matrice data è molto grande (19x77833) ma non ne sono sicuro, gli errori che mi da matlab sono:
??? Error using ==> filtfilt at 75
Data must have length more than 3 times filter order.
Error in ==> filtfilt at 57
y(:,i) = filtfilt(b,a,x(:,i));
Cosa può essere? Come posso risolvere il problema?