RESP returns the complex response of the zero object. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DESCRIPTION: RESP returns the complex response of the zero object. CALL: [f,r] = resp(p, f); % compute response for vector f [f,r] = resp(p, f1, f2, nf); % compute response from f1 to f2 % in nf steps. [f,r] = resp(p, pl); % compute response from parameter list. PARAMETERS: 'f' - a vector of frequencies to evaluate at or 'f1' - start frequency 'f2' - stop frequency 'nf' - number of evaluation frequencies 'scale' - spacing of frequencies: 'lin' or 'log' VERSION: $Id: resp.m,v 1.3 2007/07/18 13:58:45 ingo Exp $ HISTORY: 03-04-2007 Hewitson Creation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0001 function [f,r] = resp(varargin) 0002 % RESP returns the complex response of the zero object. 0003 % 0004 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0005 % 0006 % DESCRIPTION: RESP returns the complex response of the zero object. 0007 % 0008 % CALL: [f,r] = resp(p, f); % compute response for vector f 0009 % [f,r] = resp(p, f1, f2, nf); % compute response from f1 to f2 0010 % % in nf steps. 0011 % [f,r] = resp(p, pl); % compute response from parameter list. 0012 % 0013 % PARAMETERS: 'f' - a vector of frequencies to evaluate at 0014 % or 0015 % 'f1' - start frequency 0016 % 'f2' - stop frequency 0017 % 'nf' - number of evaluation frequencies 0018 % 'scale' - spacing of frequencies: 'lin' or 'log' 0019 % 0020 % VERSION: $Id: resp.m,v 1.3 2007/07/18 13:58:45 ingo Exp $ 0021 % 0022 % HISTORY: 03-04-2007 Hewitson 0023 % Creation 0024 % 0025 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0026 0027 if nargin < 1 0028 error('### incorrect number of inputs.') 0029 end 0030 0031 % look at inputs 0032 p = varargin{1}; 0033 if ~isa(p, 'zero') 0034 error('### first argument should be a zero object.'); 0035 end 0036 % Now look at the zero 0037 f0 = get(p, 'f'); 0038 Q = get(p, 'q'); 0039 0040 % check inputs 0041 if nargin == 1 0042 0043 f = linspace(f0/10, 10*f0, 1000); 0044 0045 elseif nargin == 2 0046 if isa(varargin{2}, 'plist') 0047 pl = varargin{2}; 0048 f = find(pl, 'f'); 0049 f1 = find(pl, 'f1'); 0050 f2 = find(pl, 'f2'); 0051 nf = find(pl, 'nf'); 0052 scale = find(pl, 'scale'); 0053 0054 if ~isempty(f) 0055 % nothing 0056 elseif ~isempty(f1) && ~isempty(f2) && ~isempty(nf) 0057 if isempty(scale) || strcmp(scale, 'lin') 0058 f = linspace(f1, f2, nf); 0059 elseif strcmp(scale, 'log') 0060 f = logspace(f1, f2, nf); 0061 else 0062 error('### unknown scale option for zero response.'); 0063 end 0064 else 0065 error('### unknown parameter list for zero response.'); 0066 end 0067 0068 else 0069 f = varargin{2}; 0070 end 0071 elseif nargin == 4 0072 f1 = varargin{2}; 0073 f2 = varargin{3}; 0074 nf = varargin{4}; 0075 f = linspace(f1, f2, nf); 0076 else 0077 error('### incorrect number of inputs.'); 0078 end 0079 0080 0081 if Q>0.5 0082 re = 1 - (f.^2./f0^2); 0083 im = f ./ (f0*Q); 0084 r = complex(re, im); 0085 else 0086 re = 1; 0087 im = f./f0; 0088 r = complex(re, im); 0089 end 0090 0091 0092 0093 % END