Problemi con funzione di trasferimento

Salve a tutti, ho un problema con una funzione di trafserimento relativa ad un filtro digitale. La funzione =E8 la seguente:

H(z)=3D (z^-1 + a*z^-1 + b*z^-3)/(1 + z^-1 - z^-2 - z^-3)

In realt=E0 i termini al denomminatore dovrebbero essere tutti moltiplicati per una certa costante solo che ho notato differenze nella risposta del filtro a seconda che la costante sia moltiplicata per tutto il denominatore (cio=E9 k*denominatore) o sia presente in ogni singolo termine del denominatore (k + k*z^-1 - k*z^-2 - k*z^-3). Come =E8 possibile?

Grazie, Claudio

Reply to
minum
Loading thread data ...

ha scritto

Potrebbe dipendere dalla precisione utilizzata per i calcoli e per la rappresentazione dei coefficienti. Ricordo di aver studiato a suo tempo gli effetti della precisione utilizzata per i calcoli e per la rappresentazione dei coefficienti in filtri di questo tipo, solo che è passato troppo tempo, non ci ho più avuto a che fare e non mi ricordo quasi niente. Come stai lavorando?

Reply to
Marco

ata

sto

e non

Sto usando Matlab per implementare la funzione di trasferimento e per applicare il filtro a un segnale di tipo impulsivo. Quello che mi chiedo =E8 se =E8 possibile che cambiando solo la posizione di una costante pu=F2 cambiare drasticamente la risposta del filtro. Non vorrei ci fosse qualche implicazione puramente matematica sul fatto di considerare o meno la costante nel denominatore.

Reply to
Minum

"Minum" ha scritto

Se usi Matlab non hai alcun problema per la precisione dei calcoli. Il problema sta da un'altra parte. Magari se posti il codice Matlab si può cercare di capire se hai sbagliato qualcosa. Cosa intendi esattamente per differenze nella risposta del filtro?

Reply to
Marco

A parte il problema della precisione sollevato da Marco, sei sicuro che la formula l'hai scritta correttamente? Puoi dare qualche dettaglio in piu', per favore (il codice della funzione nei due casi e magari le curve di risposta).

Reply to
Darwin

La funzione di trasferimento la implemento con l'istruzione filter a cui passo il numeratore e il denominatore sotto forma di vettori. Il filtro mi serve per avere una risposta di un sistema digitale di tipo rettangolare ad un impulso. Ho la funzione di trasferimento di un amplificatore e mi sono ricavato la funzione di trasferimento di un filtro digitale da mettere in coda in modo che la risposta complessiva del sistema sia rettangolare. Il numeratore e il denomanatore dell'amplificatore sono (sotto forma di vettori con potenze decrescenti di z^-1 cioe 0, z^-1, z^-2):

num =3D [0.1729 0.34579 0.1729] den =3D [1 -0.53011 0.22169]

mentre quelli del mio filtro sono:

num =3D [0 1 -0.53011 0.22169 0 0 -1 0.53011 -0.22169] den =3D [1 1 -1 -1]

La costante che mi sballa tutto al denominatore =E8 : 0.1729

Con questo filtro la risposta ad un impulso =E8 un rettangolo con 5 campioni.

Reply to
Minum

Non sono un virtuoso di Matlab, ma non =E8 che stai confondendo una costante moltiplicativa con una normalizzazione? Ovvero 2*x^3 non =E8 lo stesso che (2*x)^3... Il tutto detto cosi' al volo senza entrare troppo nel dettaglio nel tuo caso.

Per favore, posta il codice nei due casi. Una funzione minimale che si possa far girare senza dover riscrivere tutto.

Reply to
Darwin

Scrivendo il codice da mandare sono riuscito a trovare la sorgente dell'errore. Per implementare i filtri digitali in Matlab mi sono scritto una mia funzione "filt2" da usare al posto di filter. Mi sono reso conto che la mia funzione non =E8 corretta, infatti usando filter =E8 tutto a posto. Adesso dovr=F2 mettermi a cercare l'errore nel mio codice. Grazie della disponibilit=E0. Claudio

Reply to
Minum

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.