⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dfdd5.m

📁 AFD - Advanced Filter Design using MATLABMiroslav D. Lutovac, Dejan V. Tosicversion 1.00 released 15
💻 M
字号:
function [nD1,dD1,n,a,e,fp] = dfdd5(speck,ninc,filtype)

% dfdd5.m  DFD Design alternative D5
% 20:09  7/3/99
%
%   Authors: Dejan V. Tosic, Miroslav D. Lutovac, 1999.03.07
%                 tosic@telekom.etf.bg.ac.yu
%                 lutovac@galeb.etf.bg.ac.yu
%
%   Copyright (c) 1999 by Tosic & Lutovac
%   $Revision: 1.0 $  $Date: 1999/03/07 03:07:42 $
%
%   References:
%        Miroslav D. Lutovac, Dejan V. Tosic, Brian L. Evans
%           Advanced Filter Design for Signal Processing
%                   Using MATLAB and Mathematica

%  calls:
%% dfdnell.m, dfdhp.m, dfdsimsp.m

if filtype == 'l'
 Fp = speck(1);
 Fs = speck(2);
 Kp = speck(3);
 Ks = speck(4);
 n = dfdnminq(Fp, Fs, Kp, Ks);
 n  = n + ninc;
 [a,fn] = dfdxminq(n, Fp, Fs, Kp, Ks);
 if a > 10000
   [a,fn] = dfdxmq2(n, Fp, Fs, Kp, Ks);
 end
 e  = 1/sqrt(dfdl(n,a));
 fp = atan(tan(pi*Fp)/fn)/pi;
 [nD1,dD1] = dfdhp(n,a,e,fp);
end

if filtype == 'h'
 Fp = 0.5 - speck(2);
 Fs = 0.5 - speck(1);
 Kp = speck(3);
 Ks = speck(4);
 n = dfdnminq(Fp, Fs, Kp, Ks);
 n  = n + ninc;
 [a,fn] = dfdxminq(n, Fp, Fs, Kp, Ks);
 if a > 10000
   [a,fn] = dfdxmq2(n, Fp, Fs, Kp, Ks);
 end
 e  = 1/sqrt(dfdl(n,a));
 fp = atan(tan(pi*Fp)/fn)/pi;
 [nD1,dD1] = dfdhp(n,a,e,fp);
 ndHd = max(size(dD1))-1:-1:0;
 ndHm = (-ones(size(dD1))).^ndHd;
 dD1 = dD1 .* ndHm;
 nD1 = nD1 .* ndHm;
end

if filtype == 'b'
 speck = dfdsimsp(speck);
 Fs1 = speck(1);
 Fp1 = speck(2);
 Fp2 = speck(3);
 Fs2 = speck(4);
 Ks1 = speck(5);
 Kpb = speck(6);
 Ks2 = speck(7);
 Fp = Fs1;
 Fs = atan(tan(pi*Fs1) * (tan(pi*Fs2)-tan(pi*Fs1)) / ...
                        (tan(pi*Fp2)-tan(pi*Fp1)) )/pi;
 Kp = Kpb;
 Ks = max([Ks1 Ks2]);
 n = dfdnminq(Fp, Fs, Kp, Ks);
 n  = n + ninc;
 [a,fn] = dfdxminq(n, Fp, Fs, Kp, Ks);
 if a > 10000
   [a,fn] = dfdxmq2(n, Fp, Fs, Kp, Ks);
 end
 e  = 1/sqrt(dfdl(n,a));
 fp = atan(tan(pi*Fp)/fn)/pi;
 k = tan(pi*Fp)* cot(pi*(Fp2-Fp1));
 g = (k-1)/(k+1);
 b = - 2*k*cos(pi*(Fp2+Fp1)) /((1+k)*cos(pi*(Fp2-Fp1)));
 [nD1,dD1] = dfdhb(n,a,e,fp,k,g,b);
end

if filtype == 'r'
 speck = dfdsimsp(speck);
 Fp1 = speck(1);
 Fs1 = speck(2);
 Fs2 = speck(3);
 Fp2 = speck(4);
 Kp1 = speck(5);
 Ksr = speck(6);
 Kp2 = speck(7);
 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;
 n = dfdnminq(Fp, Fs, Kp, Ks);
 n  = n + ninc;
 [a,fn] = dfdxminq(n, Fp, Fs, Kp, Ks);
 if a > 10000
   [a,fn] = dfdxmq2(n, Fp, Fs, Kp, Ks);
 end
 e  = 1/sqrt(dfdl(n,a));
 fp = atan(tan(pi*Fp)/fn)/pi;
 k = tan(pi*Fp)* tan(pi*(Fp2-Fp1));
 g = (1-k)/(k+1);
 b = - 2* cos(pi*(Fp2+Fp1)) /((1+k)*cos(pi*(Fp2-Fp1)));
 [nD1,dD1] = dfdhr(n,a,e,fp,k,g,b);
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -