📄 dfdorder.m
字号:
function [nmin,nmax,nincmin,nincmax] = dfdorder(speck,filnumb)
% dfdorder.m DFD order range (nmin,nmax)
% 0:25 8/3/99
%
% Authors: Dejan V. Tosic, Miroslav D. Lutovac, 1999.03.08
% tosic@telekom.etf.bg.ac.yu
% lutovac@galeb.etf.bg.ac.yu
%
% Copyright (c) 1999 by Tosic & Lutovac
% $Revision: 1.0 $ $Date: 1999/03/08 03:07:42 $
%
% References:
% Miroslav D. Lutovac, Dejan V. Tosic, Brian L. Evans
% Advanced Filter Design for Signal Processing
% Using MATLAB and Mathematica
if filnumb==1 | filnumb==2
Fp = speck(1);
Fs = speck(2);
Kp = speck(3);
Ks = speck(4);
elseif filnumb==3
Fs1 = speck(1);
Fp1 = speck(2);
Fp2 = speck(3);
Fs2 = speck(4);
Ks1 = speck(5);
Kpb = speck(6);
Ks2 = speck(7);
B = Fp2 - Fp1;
Fr = sqrt(Fp1*Fp2);
Fp = Fs1;
Fs = Fp*(Fs2-Fs1)/B;
Kp = Kpb;
Ks = max([Ks1 Ks2]);
elseif filnumb==4
Fp1 = speck(1);
Fs1 = speck(2);
Fs2 = speck(3);
Fp2 = speck(4);
Kp1 = speck(5);
Ksr = speck(6);
Kp2 = speck(7);
errorFrequency = tan(pi*Fp1) * tan(pi*Fp2)- tan(pi*Fs1) * tan(pi*Fs2);
Fp1p = atan(tan(pi*Fs1) * tan(pi*Fs2) / tan(pi*Fp2) )/pi;
Fp2p = atan(tan(pi*Fs1) * tan(pi*Fs2) / tan(pi*Fp1) )/pi;
if abs(errorFrequency) > 1/10^9
if Fp1p > Fp1
Fp1 = Fp1p;
else
Fp2 = Fp2p;
end
end
% B = Fs2 - Fs1;
% Fr = sqrt(Fs1*Fs2);
Fp = Fp1;
Fs = atan(tan(pi*Fp1) * (tan(pi*Fp2)-tan(pi*Fp1)) / ...
(tan(pi*Fs2)-tan(pi*Fs1)) )/pi;
Kp = min([Kp1 Kp2]);
Ks = Ksr;
else
error('DFD ERROR: Unsupported filter type.');
end
k = tan(pi*Fp)/tan(pi*Fs);
L = Ks/Kp;
num = ellipke(1-1/L^2)/ellipke(1/L^2);
den = ellipke(1 - k^2)/ellipke(k^2);
nellip = ceil(num/den);
ncheb = ceil(acosh(L)/acosh(1/k));
nmin = nellip;
nmax = min([2*nmin,ncheb-1]);
if nmax < nmin
nmax = nmin;
end
nincmin = 0;
nincmax = nmax - nmin;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -