Por que essa transformação bilinear manual produz resultados diferentes dos da Matlab?

10

Eu tenho um filtro Butterworth de primeira ordem com a frequência de corte . Sua função de transferência é entãoωc

H(s)=ωcs+ωc

Usando a transformada bilinear para encontrar um (como é chamada essa função?), ReceboH(z)

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

No entanto, não consigo conciliar esse resultado com o que o Matlab está fazendo. Parece errado, não importa o valor da . Assumo que e abaixo estão os coeficientes de .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

O que estou entendendo mal?

Andreas
fonte
O MATLAB não usa conversão de analógico para digital. Ele projeta o filtro digitalmente, portanto, a ideia de transformação bilinear pode não ser aplicável.
Phonon
11
@Phonon: Esta resposta parece indicar que o Matlab usa a transformação bilinear de alguma forma.
Andreas
Tarde para o jogo aqui, mas todas as funções maiúsculas H de z / s / \ omega são geralmente chamadas de função de transferência. Quando o argumento é tempo ou amostras, é chamado de resposta ao impulso e geralmente é em minúsculas, h. Portanto, a função de transferência é a transformação (Z, Fourier, Laplace, dependendo da aplicação) da resposta ao impulso.
Emanuel Landeholm

Respostas:

10

Algumas coisas:

Antes de fazer a substituição , você precisa pré - aquecer a frequência de corte fazendo a substituição:s=2Tz1z+1

ωc,w=2Ttan(ωcT2)

onde é a frequência de corte distorcida. Isso é necessário porque a transformação bilinear mapeia o plano da metade esquerda no domínio Laplace (usado no design do filtro analógico) para o círculo unitário no domínio maneira não linear. Portanto, à medida que você se aproxima da taxa de Nyquist (frequências digitais de ), a aproximação ao protótipo do filtro analógico se torna imprecisa.ωc,wz±π

Além disso, o segundo parâmetro que você está passando para a butterfunção é a freqüência de corte normalizada, não provar o intervalo . A frequência normalizada usada por essa função está no intervalo e é igual à razão entre a frequência de corte desejada e a taxa de Nyquist:T(0,1)

ωn=ωc2πfs2

ωn=ωcπfs

ωn=ωcTπ
Jason R
fonte
Obrigado! Agora eu recebo os coeficientes certos. Aqui, substitui por na expressão por . Isso funcionou porque eu sei onde a frequência de corte afeta o filtro Butterworth. E se eu tivesse um filtro geral e soubesse os pólos (e zeros) de ? Como eu saberia quais valores substituir? o m e g a c , w H ( z ) H ( s )ωcomegac,wH(z)H(s)
Andreas
Porque suponho que a transformação bilinear de um racional possa ser feita sabendo apenas a frequência da amostra, não a frequência de corte (normalizada)? H(s)
Andreas
Você pode usar a conversão bilinear para mapear qualquer sistema domain em uma aproximação no domínio . O pré-aquecimento não é necessário, mas a ressalva de que o sistema de tempo discreto resultante é apenas uma aproximação ao sistema analógico se aplica. O pré-aquecimento de todas as frequências de interesse permite "esticar" o mapeamento para que a região da banda de frequência de que você mais gosta tenha o mínimo de distorção possível do filtro de protótipo. zsz
Jason R
5

Ao abrir o código para a butterfunção do MATLAB , vemos que ele usa pré-distorção de frequência :

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