samer@1: function so=design(sig,p,q) samer@1: f1=rate(sig.source); samer@1: f2=rate(sig); samer@1: if isfield(sig.opts,'passband') samer@1: relpass=2*sig.opts.passband/min(f1,f2); samer@1: elseif isfield(sig.opts,'relpass') samer@1: relpass=sig.opts.relpass; samer@1: elseif isfield(sig.opts,'reltrans') samer@1: relpass=(1-sig.opts.reltrans); samer@1: else samer@1: relpass=nan; samer@1: end samer@1: samer@1: if isnan(relpass) && ~isfield(sig.opts,'order') samer@1: so=dsp.FIRRateConverter(p,q,mfilt.firsrc(p,q).Numerator); samer@1: else samer@1: tw = max(0.01,1-relpass)*min(f1,f2)/2; samer@1: if isfield(sig.opts,'astop') samer@1: fsrc=fdesign.rsrc(p,q,'Nyquist',max(p,q),'TW,Ast',tw,sig.opts.astop,p*f1); samer@1: else samer@1: if isfield(sig.opts,'order'), order = sig.opts.order; else order = 12; end samer@1: fsrc=fdesign.rsrc(p,q,'Nyquist',max(p,q),'N,TW',2*order*max(p,q),tw,p*f1); samer@1: end samer@1: so=design(fsrc,'kaiserwin','SystemObject',true); samer@1: end samer@1: end