Pourquoi cette transformation bilinéaire manuelle donne-t-elle des résultats différents de ceux de Matlab?

10

J'ai un filtre Butterworth de premier ordre avec la fréquence de coupure . Sa fonction de transfert est alorsωc

H(s)=ωcs+ωc

En utilisant la transformée bilinéaire pour trouver un (comment s'appelle cette fonction?), J'obtiensH(z)

H(z)=ωc2Tz-1z+1+ωc=ωcz+ωc(2T+ωc)z+ωc-2T

Cependant, je ne peux pas concilier ce résultat avec ce que fait Matlab. Il semble mal, peu importe quelle valeur de . Je suppose que et ci-dessous sont les coefficients de H ( z ) .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

Qu'est-ce que je comprends mal?

Andreas
la source
MATLAB n'utilise pas de conversion analogique-numérique. Il conçoit le filtre numériquement, donc l'idée de transformation bilinéaire peut ne pas être applicable.
Phonon
1
@ Phonon: Cette réponse semble indiquer que Matlab utilise la transformation bilinéaire d'une manière ou d'une autre.
Andreas
Tard dans le jeu ici, mais toutes les fonctions majuscules H de z / s / \ omega sont généralement appelées la fonction de transfert. Lorsque l'argument est le temps ou les échantillons, cela s'appelle la réponse impulsionnelle et il est généralement en minuscule, h. La fonction de transfert est donc la transformée (Z, Fourier, Laplace selon l'application) de la réponse impulsionnelle.
Emanuel Landeholm

Réponses:

10

Quelques choses:

Avant d'effectuer la substitution , vous devezprécalerla fréquence de coupure en effectuant la substitution:s=2Tz-1z+1

ωc,w=2Tbronzer(ωcT2)

est la fréquence de coupure déformée. Cela est nécessaire car la transformation bilinéaire mappe le demi-plan gauche du domaine de Laplace (utilisé dans la conception de filtres analogiques) sur le cercle unitaire du domaine z de manière non linéaire. Par conséquent, à l'approche du taux de Nyquist (fréquences numériques de ± π ), l'approximation du prototype de filtre analogique devient inexacte.ωc,wz±π

Par ailleurs, le second paramètre que vous êtes de passage à la butterfonction est la fréquence de coupure normalisée, et non l'intervalle d' échantillonnage . La fréquence normalisée utilisée par cette fonction est dans l'intervalle ( 0 , 1 ) et est égale au rapport de la fréquence de coupure souhaitée au taux de Nyquist:T(0,1)

ωn=ωc2πFs2

ωn=ωcπFs

ωn=ωcTπ
Jason R
la source
ωcomegunec,wH(z)H(s)
H(s)
sz
5

Lors de l'ouverture du code de la butterfonction de MATLAB , nous voyons qu'il utilise la pré-déformation de fréquence :

%# step 1: get analog, pre-warped frequencies
if ~analog,
    fs = 2;
    u = 2*fs*tan(pi*Wn/fs);
else
    u = Wn;
end
Phonon
la source