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