samer@1
|
1 function so=design(sig,p,q)
|
samer@1
|
2 f1=rate(sig.source);
|
samer@1
|
3 f2=rate(sig);
|
samer@1
|
4 if isfield(sig.opts,'passband')
|
samer@1
|
5 relpass=2*sig.opts.passband/min(f1,f2);
|
samer@1
|
6 elseif isfield(sig.opts,'relpass')
|
samer@1
|
7 relpass=sig.opts.relpass;
|
samer@1
|
8 elseif isfield(sig.opts,'reltrans')
|
samer@1
|
9 relpass=(1-sig.opts.reltrans);
|
samer@1
|
10 else
|
samer@1
|
11 relpass=nan;
|
samer@1
|
12 end
|
samer@1
|
13
|
samer@1
|
14 if isnan(relpass) && ~isfield(sig.opts,'order')
|
samer@1
|
15 so=dsp.FIRRateConverter(p,q,mfilt.firsrc(p,q).Numerator);
|
samer@1
|
16 else
|
samer@1
|
17 tw = max(0.01,1-relpass)*min(f1,f2)/2;
|
samer@1
|
18 if isfield(sig.opts,'astop')
|
samer@1
|
19 fsrc=fdesign.rsrc(p,q,'Nyquist',max(p,q),'TW,Ast',tw,sig.opts.astop,p*f1);
|
samer@1
|
20 else
|
samer@1
|
21 if isfield(sig.opts,'order'), order = sig.opts.order; else order = 12; end
|
samer@1
|
22 fsrc=fdesign.rsrc(p,q,'Nyquist',max(p,q),'N,TW',2*order*max(p,q),tw,p*f1);
|
samer@1
|
23 end
|
samer@1
|
24 so=design(fsrc,'kaiserwin','SystemObject',true);
|
samer@1
|
25 end
|
samer@1
|
26 end
|