2011-12-06 19 views
15

Ho una domanda MATLAB: Sto cercando di calcolare l'output di un sistema LTI e sono arrivato attraverso due diverse funzioni MATLAB che dovrebbero essere appropriate per il lavoro, filter e conv. Qual è la differenza tra loro due?Differenza tra filtro e conv in MATLAB

risposta

10

filter può gestire sistemi FIR e IIR, mentre conv accetta due input e restituisce la loro convoluzione. Quindi conv(h,x) e filter(h,1,x) darebbero lo stesso risultato. Il filtro 1 in indica che i coefficienti ricorsivi del filtro sono solo [1]. Ma se hai un filtro IIR, non puoi usare conv. filter può anche restituire gli stati del filtro, in modo che possa essere utilizzato nelle chiamate successive senza incorrere in transitori di filtro.

Vedere la documentazione conv e filter per dettagli.

+0

così da quanto ho letto, se si tratta di un sistema IIR e utilizzo 'conv', otterrò l'output corretto solo per una quantità di campioni uguale alla lunghezza di' h'. È corretto? – nikos

+2

Considera il filtro 'H (z) = [1 - 2z^-1 + z^-2]/[1 - z^-1]'. Se imposti l'input a 'x = [1 0 0 0]', otterrai i risultati '[1 -2 1 0]' con 'conv ([1, -2,1], x)' e ' [1 -1 0 0] 'con' filtro ([1, -2,1], [1, -1], x) '. – mtrw

+4

In realtà 'conv (b, x)' e 'filter (b, 1, x)' non sono ** esattamente ** uguali. 'filter' ti darà un output con la stessa lunghezza di' x', mentre 'conv' darà un output con lunghezza di' length (x) + length (b) -1'. – LWZ

8

conv(x,b) esegue la convoluzione completa. La lunghezza del risultato è length(x)+ length(b)-1. filter(b,[1],x) fornisce un'uscita della stessa lunghezza di x. Non scarica la linea del ritardo del filtro.

Assumere x è un vettore riga. Crea x0 = [x zeros(1,length(b)-1)]; ora filter(b,[1],x0) corrisponde a conv(x,b). Questo perché gli 0 aggiuntivi vengono utilizzati per svuotare la linea di ritardo.

Quale è più ragionevole? Dipende da ciò che ti serve!