1function [m, ph, gd] = eq_compute_response(z, p, k, f, fs) 2 3%% 4% Copyright (c) 2016, Intel Corporation 5% All rights reserved. 6% 7% Redistribution and use in source and binary forms, with or without 8% modification, are permitted provided that the following conditions are met: 9% * Redistributions of source code must retain the above copyright 10% notice, this list of conditions and the following disclaimer. 11% * Redistributions in binary form must reproduce the above copyright 12% notice, this list of conditions and the following disclaimer in the 13% documentation and/or other materials provided with the distribution. 14% * Neither the name of the Intel Corporation nor the 15% names of its contributors may be used to endorse or promote products 16% derived from this software without specific prior written permission. 17% 18% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28% POSSIBILITY OF SUCH DAMAGE. 29% 30% Author: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> 31% 32 33switch nargin 34 case 3 35 b = z; % 1st arg 36 f = p; % 2nd arg 37 fs = k; % 3rd arg 38 h = freqz(b, 1, f, fs); 39 m = 20*log10(abs(h)); 40 ph = 180/pi*angle(h); 41 42 if length(b) == 1 43 gd = zeros(1, length(f)); 44 else 45 if exist('OCTAVE_VERSION', 'builtin') 46 % grpdelay() has some issue so better to not show a plot 47 gd = NaN * zeros(1, length(f)); 48 else 49 gd = 1/fs*grpdelay(b, 1, f, fs); 50 end 51 end 52 case 5 53 [b, a] = zp2tf(z, p, k); 54 h = freqz(b, a, f, fs); 55 m = 20*log10(abs(h)); 56 ph = 180/pi*angle(h); 57 58 if length(z) == 0 && length(p) == 0 59 gd = zeros(1, length(f)); 60 else 61 if exist('OCTAVE_VERSION', 'builtin') 62 % grpdelay() has some issue so better to not show a plot 63 gd = NaN * zeros(1, length(f)); 64 else 65 gd = 1/fs*grpdelay(b, a, f, fs); 66 end 67 end 68 otherwise 69 error('Incorrect input parameters'); 70end 71 72end 73