0001 function varargout = resp(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 ALGONAME = mfilename;
0029 VERSION = '$Id: resp.m,v 1.4 2007/07/18 13:58:45 ingo Exp $';
0030
0031 if nargin < 1
0032 error('### incorrect number of inputs.')
0033 end
0034
0035
0036 pzm = varargin{1};
0037 if ~isa(pzm, 'pzmodel')
0038 error('### first argument should be a pzmodel object.');
0039 end
0040
0041 name = get(pzm, 'name');
0042 gain = get(pzm, 'gain');
0043 poles = get(pzm, 'poles');
0044 zeros = get(pzm, 'zeros');
0045 np = length(poles);
0046 nz = length(zeros);
0047
0048
0049 pl = [];
0050 scale = [];
0051
0052 if nargin == 1
0053
0054 f1 = getlowerFreq(pzm)/10;
0055 f2 = getupperFreq(pzm)*10;
0056 nf = 10000;
0057 f = linspace(f1, f2, nf);
0058 scale = 'lin';
0059
0060 elseif nargin == 2
0061 if isa(varargin{2}, 'plist')
0062 pl = varargin{2};
0063 f = find(pl, 'f');
0064 f1 = find(pl, 'f1');
0065 f2 = find(pl, 'f2');
0066 nf = find(pl, 'nf');
0067 scale = find(pl, 'scale');
0068
0069 if ~isempty(f)
0070
0071 else
0072 if isempty(f1)
0073 f1 = getlowerFreq(pzm)/10;
0074 end
0075 if isempty(f2)
0076 f2 = getupperFreq(pzm)*10;
0077 end
0078 if isempty(nf)
0079 nf = 10000;
0080 end
0081 if isempty(scale)
0082 scale = 'lin';
0083 end
0084
0085 switch scale
0086 case {'lin', 'linear'}
0087 f = linspace(f1, f2, nf);
0088 case 'log'
0089 f = logspace(f1, f2, nf);
0090 end
0091
0092
0093 end
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109 else
0110 f = varargin{2};
0111 end
0112 elseif nargin == 4
0113 f1 = varargin{2};
0114 f2 = varargin{3};
0115 nf = varargin{4};
0116 f = linspace(f1, f2, nf);
0117 else
0118 error('### incorrect number of inputs.');
0119 end
0120
0121
0122
0123 f1 = f(1);
0124 f2 = f(end);
0125 nf = length(f);
0126 plo = plist();
0127 plo = append(plo, param('f1', f1));
0128 plo = append(plo, param('f2', f2));
0129 plo = append(plo, param('nf', nf));
0130 if ~isempty(scale)
0131 plo = append(plo, param('scale', scale));
0132 end
0133
0134
0135 r = gain;
0136 for j=1:np
0137 [f, pr] = resp(poles(j),f);
0138
0139 r = r .* pr;
0140 end
0141 for j=1:nz
0142 [f, zr] = resp(zeros(j),f);
0143
0144 r = r .* zr;
0145 end
0146
0147
0148
0149
0150 fs = fsdata(f, r, 1);
0151 fs = set(fs, 'name', sprintf('resp(%s)', pzm.name));
0152
0153
0154 h = history(ALGONAME, VERSION, plo);
0155
0156
0157 b = ao(fs, h);
0158
0159
0160 b = set(b, 'name', sprintf('resp(%s)', pzm.name));
0161
0162
0163 if nargout == 0
0164 figure
0165 plot(b)
0166 elseif nargout == 1
0167 varargout{1} = b;
0168 else
0169 error('### incorrect output arguments');
0170 end
0171
0172
0173