sexta-feira, 21 de maio de 2021

Projetando um filtro passa-baixas do tipo Chebyshev Inverso "no braço".

Filtro PB de 6a. ordem do tipo Chebyshev inverso. 

Um filtro do tipo passa-baixas usando a aproximação Chebyshev inversa é plano na banda de passagem e apresenta zeros na banda de rejeição. Consideramos os seguintes parâmetros para o projeto do filtro:

  • ap: atenuação na banda de passagem (em dB, em geral, 1 < ap < 3)
  • as: atenuação na banda de rejeição (em dB, em geral, as > 20)
  • wp: final da banda de passagem (em rad/s)
  • ws: início da banda de rejeição (em rad/s)

O passo a passo inicial (sem maiores detalhes teóricos) é dado a seguir:

O código Scilab completo é:

----------------------------------------------------------------

clear; clc; xdel(winsid());

function fs=fss(v, w)  ///// resposta em frequência
s = w*%i; sk = s; p = max(size(v)); fs = v(p) + v(p-1)*s; for k=(p-2):-1:1 sk = s.*sk; fs = fs + v(k)*sk; end endfunction //////// Chebyshev inverso as = 40; ap = 3; ws = 1.5; wp = 1; ei = 1/sqrt(10^(as/10)-1); sqx = sqrt((10^(as/10)-1)/(10^(ap/10)-1)); ni = acosh(sqx)/acosh(ws/wp); disp(ni); ni = round(ni + 0.5); Di = asinh(1/ei)/ni; M = fix(ni/2)-1; DD = 1; NN = 1; p=0.95*ws/wp; for m=0:M fm =%pi*(2*m+1)/(2*ni); ssm = -sinh(Di)*sin(fm); wsm = cosh(Di)*cos(fm); sm = ssm/(ssm*ssm + wsm*wsm); wm = -wsm/(ssm*ssm + wsm*wsm); szm = 0; wzm = sec(fm); B1m = -2*sm; B2m = sm*sm + wm*wm; A1m = 0; A2m = wzm*wzm; NN = convol(NN,[1, p*A1m, p*p*A2m]); DD = convol(DD,[1, p*B1m, p*p*B2m]); end /// Ordem impar: if abs(fix(ni/2)-round(ni/2))>0.1 then disp('impar'); DD = convol(DD,[1 p/sinh(Di)]); end w = 0:0.01:11.9; Ns = fss(NN,w); Ds = fss(DD,w); Hs = Ns./Ds; Hsa = abs(Hs); G = max(Hsa); Hsa = Hsa/G; Hsad = 20*log10(Hsa + 1e-12); plot(w,Hsad); xgrid; w1 = [0 wp wp]; g1 = [-ap -ap -as]; w2 = [0 ws ws w($)]; g2 = [0.01 0.01 -as -as]; plot(w1,g1,'m',w2,g2,'m'); title(['Ordem = ',string(ni)]);
Alguns resultados:


Nenhum comentário:

Postar um comentário