Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Filter function in Matlab

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

0
voti

[1] Filter function in Matlab

Messaggioda Foto UtenteGia1988 » 13 dic 2013, 19:04

Ciao a tutti,
volevo chiedervi alcune delucidazioni sul comando filter in Matlab.
Dall'help ho capito che diciamo che mi implementa l'equazione alle differenze finite...ma come posso risolvere questo esercizio:

Indicare esattamente i valori assunti dal segnale w motivando analiticamente la risposta.

Codice: Seleziona tutto
N=20;
y=zeros(1,N);
y(1)=1;
for n=2:N
y(n)= 0.5^(n-1) - 0.25^(n-2);
end
      
b=[1 -3/4 1/8];
a=[1 -5/4 1/2];
w=filter(b,a,y);
Avatar utente
Foto UtenteGia1988
75 1 6
Frequentatore
Frequentatore
 
Messaggi: 172
Iscritto il: 30 ago 2011, 10:56

0
voti

[2] Re: Filter function in Matlab

Messaggioda Foto Utentesimo85 » 14 dic 2013, 12:36

Ciao Foto UtenteGia1988,

Se hai dubbi sulla funzione filter ti consiglio la lettura del capitolo Matlab Analysis of the Simplest Lowpass Filter del libro INTRODUCTION TO DIGITAL FILTERS WITH AUDIO APPLICATIONS di Julius O. Smith III, che puoi leggere online QUI (vedi anche le sotto sezioni! ;-) ) .

Ciao!
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[3] Re: Filter function in Matlab

Messaggioda Foto UtenteGia1988 » 14 dic 2013, 18:32

Grazie mille per il consiglio..
Quindi il mio segnale filtrato w sarà della forma:
w(n) - \frac{5}{4}w(n-1) + \frac{1}{2}w(n-2)=y(n)-\frac{3}{4}y(n-1) + \frac{1}{8}y(n-2)

ma per indicare esattamente i valori di w come faccio??
non credo devo calcolarmi i 18 elementi di y e quindi poi di w!!
non c'è un metodo più furbo?

che poi con matlab si vede subito che alla fine w e il vettore 1 0 0 0 ..... 0
Avatar utente
Foto UtenteGia1988
75 1 6
Frequentatore
Frequentatore
 
Messaggi: 172
Iscritto il: 30 ago 2011, 10:56

2
voti

[4] Re: Filter function in Matlab

Messaggioda Foto Utentedimaios » 17 dic 2013, 16:08

Esercizio interessante.
Infatti la simulazione indica che il risultato finale risulta essere \delta(n) per cui ti devi chiedere che relazione c'e' tra il processo che genera i dati y(n) ed il filtro G(z) descritto dai coefficienti espressi in a e b.
Fondamentalmente la domanda a cui rispondere si riferisce al caso in cui l'uscita di un sistema discreto a fronte di un ingresso discreto risulta essere l'impulso unitario discreto.
Ingegneria : alternativa intelligente alla droga.
Avatar utente
Foto Utentedimaios
30,2k 7 10 12
G.Master EY
G.Master EY
 
Messaggi: 3381
Iscritto il: 24 ago 2010, 14:12
Località: Behind the scenes

0
voti

[5] Re: Filter function in Matlab

Messaggioda Foto UtenteGia1988 » 17 dic 2013, 17:56

quindi..il procedimento è:

noti i coefficienti a e b ricavo la funzione di trasferimento del filtro
G(z)= \frac{\sum_{r=0}^{2}b_{r}z^{-r}}{\sum_{k=0}^{2}a_{k}z^{-k}}

ricavo Y(z) da
y(n)=\sum_{n=2}^{20}0.5^{(n-19)} - 0.25^{(n-2)}
con y(1)=1
e poi trovo W(z)=Y(z)G(z) e quindi w(n)

sbaglio in qualcosa?
Avatar utente
Foto UtenteGia1988
75 1 6
Frequentatore
Frequentatore
 
Messaggi: 172
Iscritto il: 30 ago 2011, 10:56

1
voti

[6] Re: Filter function in Matlab

Messaggioda Foto Utentedimaios » 17 dic 2013, 20:33

Come primo tentativo dovresti provare ad esprimere il processo di generazione dei dati y(n) in modo ricorsivo.
Ingegneria : alternativa intelligente alla droga.
Avatar utente
Foto Utentedimaios
30,2k 7 10 12
G.Master EY
G.Master EY
 
Messaggi: 3381
Iscritto il: 24 ago 2010, 14:12
Località: Behind the scenes

0
voti

[7] Re: Filter function in Matlab

Messaggioda Foto UtenteGia1988 » 18 dic 2013, 1:35

E in che modo posso scrivere y(n)?
Avatar utente
Foto UtenteGia1988
75 1 6
Frequentatore
Frequentatore
 
Messaggi: 172
Iscritto il: 30 ago 2011, 10:56

2
voti

[8] Re: Filter function in Matlab

Messaggioda Foto Utentedimaios » 19 dic 2013, 10:46

Foto UtenteGia1988 non ho purtroppo molto tempo a disposizione per cui ti faccio vedere una possibilita' risolutiva e poi pensi ad eventuali alternative.

La funzione di trasferimento nel dominio discreto del tuo sistema risulta essere :

G(z) = \frac{ z^2 - 0.75 z + 0.125 }{z^2 - 1.25 z + 0.5}

In Matlab la trovi con lo script :

Codice: Seleziona tutto
b=[1 -3/4 1/8];
a=[1 -5/4 1/2];
Gz = tf( b , a , 1 )


Indaghiamo sul meccanismo di generazione dei dati di ingresso y(n).





Come vedi e' definito dal campione n=1 e non dal campione n=0.

In particolare hai definito :

y(n) = 1 per n = 1

e poi :
y(n)= 0.5^{n-1} - 0.25^{n-2} per n \ge 2


Scriviamo il segnale in forma compatta come :

y(n)=  \delta(n-1) +  \left [ 0.5^{n-1} - 0.25^{n-2}  \right ] \cdot 1(n-2)

Questo segnale risulta diverso da zero solo per n \ge 1.

A questo punto facciamo la Z-Trasformata di y(n)

N.B. L'ho fatto fare a Worlfram Alpha ma tu devi svilupparti i calcoli a mano altrimenti non hai la percezione di quanto tempo ci voglia in una condizione reale sotto esame.

z-Transform.png
z-Transform.png (20.6 KiB) Osservato 6219 volte


Y(z) = \frac{8z^2 - 10 z + 4}{8 z^3 - 6z^2 + z}

Che si puo' anche scrivere :

Y(z) = z^{-1} \frac{z^2 - 1.25 z + 0.5}{z^2 - 0.75 z + 0.125}

A questo punto filtriamo il segnale y(n) facendolo passare attraverso il filtro G(z).




Abbiamo che :

W(z) = G(z) \cdot Y(z)

Che risulta essere :


W(z) = \frac{ z^2 - 0.75 z + 0.125 }{z^2 - 1.25 z + 0.5} \cdot z^{-1} \frac{z^2 - 1.25 z + 0.5}{z^2 - 0.75 z + 0.125} = z^{-1}


Da cui si ha :

w(n) = \delta(n-1)

Ovvero un impulso discreto centrato nel punto n=1.

Il ritardo di un passo dipende dal fatto che il segnale y(n) inizia da n=1 e non da n=0.

Nella realta' questo e' un problema legato al fatto che Matlab accetta gli indici dei vettori a partire da 1 e non da 0 per cui il segnale e' stato definito a partire da 1.

Il meccanismo di generazione dei dati di y(n) contiene l'inverso della funzione di trasferimento del filtro per cui si elidono ( cancellazione brutale ..... ).

In pratica applichi un filtro ed il suo inverso ottenendo l'impulso discreto.

Lascio a te sviluppare i calcoli effettuati dal Wolfram Alpha ed alcune considerazioni sulla posizione dei poli e degli zeri della funzione di trasferimento G(z).


L'esercizio e' interessante perche' il meccanismo di generazione dei dati di y(n) e' di fatto un filtro lineare IIR anche se non esplicitamente visibile dalla scrittura iniziale.

Il fatto che la convoluzione con il filtro G(z) desse in uscita un'impulso lasciava presagire che la dinamica di y(n) fosse frequenzialmente l' "inverso" di G(z).
Ingegneria : alternativa intelligente alla droga.
Avatar utente
Foto Utentedimaios
30,2k 7 10 12
G.Master EY
G.Master EY
 
Messaggi: 3381
Iscritto il: 24 ago 2010, 14:12
Località: Behind the scenes


Torna a Programmi applicativi: simulatori, CAD ed altro

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti