git-svn-id: http://moon:8086/svn/matlab/trunk@153 801c6759-fa7c-4059-a304-17956f83a07c
72 lines
1.7 KiB
Matlab
Executable File
72 lines
1.7 KiB
Matlab
Executable File
% 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;
|