Perché questa trasformazione bilineare manuale produce risultati diversi da quelli di Matlab?


10

Ho un filtro Butterworth del primo ordine con la frequenza di taglio . La sua funzione di trasferimento è quindiωc

H(s)=ωcs+ωc

Usando la trasformata bilineare per trovare una (come si chiama quella funzione?), OttengoH(z)

H(z)=ωc2Tz1z+1+ωc=ωcz+ωc(2T+ωc)z+ωc2T

Tuttavia, non riesco a conciliare questo risultato con quello che sta facendo Matlab. Sembra sbagliato, non importa quale sia il valore di . Presumo che e sotto siano i coefficienti di .TBAH(z)

>> [B,A] = butter(1,0.5)
B = 0.5000    0.5000
A = 1.0000   -0.0000
>> [B,A] = butter(1,0.6)
B = 0.5792    0.5792
A = 1.0000    0.1584
>> [B,A] = butter(1,0.7)
B = 0.6625    0.6625
A = 1.0000    0.3249
>> [B,A] = butter(1,0.8)
B = 0.7548    0.7548
A = 1.0000    0.5095

Cosa sto fraintendendo?


MATLAB non utilizza la conversione da analogico a digitale. Progetta il filtro in modo digitale, pertanto l'idea di trasformazione bilineare potrebbe non essere applicabile.
Phonon,

1
@Phonon: questa risposta sembra indicare che Matlab utilizza la trasformazione bilineare in qualche modo.
Andreas,

In ritardo qui, ma tutte le funzioni maiuscole H di z / s / \ omega sono generalmente chiamate funzione di trasferimento. Quando l'argomento è tempo o campioni, si chiama risposta all'impulso ed è solitamente minuscolo, h. Quindi la funzione di trasferimento è la trasformazione (Z, Fourier, Laplace a seconda dell'applicazione) della risposta all'impulso.
Emanuel Landeholm,

Risposte:


10

Un paio di cose:

Prima di effettuare la sostituzione , è necessario preordinare la frequenza di taglio effettuando la sostituzione:s=2Tz1z+1

ωc,w=2Ttan(ωcT2)

dove è la frequenza di taglio deformata. Ciò è necessario perché la trasformata bilineare mappa il piano della metà sinistra nel dominio di Laplace (usato nella progettazione del filtro analogico) al cerchio unitario nel dominio in modo non lineare. Pertanto, quando ci si avvicina alla frequenza di Nyquist (frequenze digitali di ), l'approssimazione al prototipo del filtro analogico diventa imprecisa.ωc,wz±π

Inoltre, il secondo parametro che si passa alla butterfunzione è la frequenza di taglio normalizzata, non l'intervallo di campionamento . La frequenza normalizzata utilizzata da quella funzione è nell'intervallo ed è uguale al rapporto tra la frequenza di taglio desiderata e la frequenza di Nyquist:T(0,1)

ωn=ωc2πfs2

ωn=ωcπfs

ωn=ωcTπ

Grazie! Ora ottengo i giusti coefficienti. Qui, ho sostituito con nell'espressione per . Questo ha funzionato perché so dove la frequenza di taglio influisce sul filtro Butterworth. E se avessi un filtro generale e conoscessi i poli (e gli zero) di ? Come faccio a sapere quali valori sostituire? o m e g a c , w H ( z ) H ( s )ωcomegac,wH(z)H(s)
Andreas,

Perché suppongo che la trasformazione bilineare di una razionale possa essere fatta conoscendo solo la frequenza di campionamento, non la frequenza di taglio (normalizzata)? H(s)
Andreas,

È possibile utilizzare la trasformazione bilineare per mappare qualsiasi sistema -domain in un'approssimazione nel dominio . Non è necessario il prewarping, ma si applica l'avvertenza secondo cui il sistema a tempo discreto risultante è solo un'approssimazione al sistema analogico. Preformare eventuali frequenze di interesse consente di "allungare" la mappatura in modo che la regione della banda di frequenza a cui tieni di più abbia la minor distorsione possibile dal filtro prototipo. zsz
Jason R,

5

Quando apriamo il codice per la butterfunzione MATLAB , vediamo che usa la pre-warping in frequenza :

%# step 1: get analog, pre-warped frequencies
if ~analog,
    fs = 2;
    u = 2*fs*tan(pi*Wn/fs);
else
    u = Wn;
end
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.