% COEF generiert IIR-Tiefpass Koeffizienten für geradzahlige Ordnung % [b,a] = coef(fa,fg,Q,N) % % fa : Abtastfrequenz [Hz] % fg : Grenzfrequenz [Hz] fg <= fa/2 % Q : Polgüte (Q=1.0 für Butterworth) % N : Filterordnung (durch zwei teilbar) % Type : 'Lowpass', 'Highpass', 'Bandpass', 'Bandstop' % function [b,a] = coef(fa,fg,Q,N,Type) if (rem(N,2) > 0) error('Filterordnung muss z.Zt. noch durch zwei teilbar sein!'); end; if (strcmp(Type,'Bandstop')) TF = 4; end; TF sn = sin(2*pi*fg/fa); cs = cos(2*pi*fg/fa); ak = ones(N/2,3); bk = ones(N/2,3); a = 1; b = 1; if (strcmp(Type,'Lowpass')) for n = 1:N/2, Qp = 1/(2*sin(pi*(n-0.5)/N)) alpha = sn/(2*Q*Qp); a0 = 1+alpha; ak(n,2) = -2*cs/a0; ak(n,3) = (1-alpha)/a0; bk(n,1) = 0.5*(1-cs)/a0; bk(n,2) = (1-cs)/a0; bk(n,3) = 0.5*(1-cs)/a0; a = conv(a,ak(n,(1:3))); b = conv(b,bk(n,(1:3))); end; end; if (strcmp(Type,'Highpass')) for n = 1:N/2, Qp = 1/(2*sin(pi*(n-0.5)/N)) alpha = sn/(2*Q*Qp); a0 = 1+alpha; ak(n,2) = -2*cs/a0; ak(n,3) = (1-alpha)/a0; bk(n,1) = 0.5*(1+cs)/a0; bk(n,2) = -(1+cs)/a0; bk(n,3) = 0.5*(1+cs)/a0; a = conv(a,ak(n,(1:3))); b = conv(b,bk(n,(1:3))); end; end; if (strcmp(Type,'Bandpass')) for n = 1:N/2, Qp = 1/(2*sin(pi*(n-0.5)/N)) alpha = sn/(2*Q*Qp); a0 = 1+alpha; ak(n,2) = -2*cs/a0; ak(n,3) = (1-alpha)/a0; bk(n,1) = alpha/a0; bk(n,2) = 0; bk(n,3) = -alpha/a0; a = conv(a,ak(n,(1:3))); b = conv(b,bk(n,(1:3))); end; end;