git-svn-id: http://moon:8086/svn/matlab/trunk@153 801c6759-fa7c-4059-a304-17956f83a07c
34 lines
788 B
Matlab
Executable File
34 lines
788 B
Matlab
Executable File
% IIRTPC generiert IIR-Tiefpass Koeffizienten für geradzahlige Ordnung
|
|
% [b,a] = iirtpc(fa,fg,Q,N)
|
|
%
|
|
% fa : Abtastfrequenz [Hz]
|
|
% fg : Grenzfrequenz [Hz] fg <= fa/2
|
|
% Q : Polgüte (Resonanz)
|
|
% N : Filterordnung (durch zwei teilbar)
|
|
%
|
|
function [b,a] = iirtpc(fa,fg,Q,N)
|
|
|
|
if (rem(N,2) > 0)
|
|
error('Filterordnung muss z.Zt. noch durch zwei teilbar sein!');
|
|
end;
|
|
|
|
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;
|
|
|
|
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;
|