function [plan_up,plan_down]=setupPSDplan(plan, psd_up, psd_down, method, nosignal,capval); %% =========================================================================== %setupPSDplan - Generate a PSD description from a simple list % % Parameter: plan PSD mask description % Parameter: psd_up PSD-mask for upstream % Parameter: psd_down PSD-mask for downstream % Parameter: method Interpolation method ('Linear' or 'Log-Linear') % Parameter: nosignal Signal level when not sending % Parameter: capval Maximum signal level % Returns: plan_up PSD plan for upstream % Returns: plan_down PSD plan for downstream % % Example(s): % [tmp_upstream,tmp_downstream]= setupPSDplan({... % fmin 'u' .138e6 'd' 2.0e6 'u' 4.3e6, 'd' 7.1e6 ... % 'u' 10.1e6 'd' 14.35e6 'u' fmax }, ... % upstream_val, downstream_val, 'Log-Linear', -120); % % Algorithmic details: % % Reference: %% =========================================================================== %% =========================================================================== % Copyright (C) 1999 by Telia Research AB, Lulea, Sweden; All rights reserved. % Project : FSAN duplex model % Author(s) : Tomas Nordstrom (Tomas.B.Nordstrom@@Telia.se) % : Daniel Bengtsson (Daniel.J.Bengtsson@Telia.se) % : Frank Sjöberg % % CVS: $Id: setupPSDplan.m,v 1.4 2000/04/06 13:45:52 uvan Exp $ %% =========================================================================== % Change History % 1999-01-14 (ToNo) Created % 1999-07-27 (FS) Modified from setupPSDplan to handle non-flat PSD % 2000-04-06 (UvAn) Changed default value for "nosignal" to -140 %% =========================================================================== global ex; if nargin<3, error('Not enough input arguments.'); end if nargin<4 method = 'Linear'; % Default interpolation method is linear end; if nargin<5, nosignal=-140; % Default value; old value -> nosignal=ex.param.backgroundNoise; end if nargin<6, capval=0; end plen=length(plan); if plen<3, error('setupPSDplan must have length > 3'); end; if ischar(plan{1}) | ischar(plan{plen}), error('Start and stop setupPSDplan with a frequency.'); end; plan_up=[]; plan_down=[]; for i=1:2:plen-2, start=plan{i}; direction=plan{i+1}; stop=plan{i+2}; if ischar(start) | ischar(stop), error('Frequencies should be around a direction.'); end; if stopcapval; level(bigindex)=capval.*ones(1,sum(bigindex)); % cap the top data(2:2:length(data))=level; idx(1) = max(find(freq<=f(1))); idx(2) = min(find(freq>=f(2)))-1; for nn =1:2 switch method case 'Linear' tmp=(f(nn)-freq(idx(nn)))/(freq(idx(nn)+1)-freq(idx(nn))); case 'Log-Linear' tmp=(log(f(nn))-log(freq(idx(nn))))/(log(freq(idx(nn)+1))-log(freq(idx(nn)))); otherwise fprintf('Undefined Interpolation'); break; end; PSD(nn) = level(idx(nn))+(level(idx(nn)+1)-level(idx(nn)))*tmp; end; PSD = [f(1) PSD(1) data(idx(1)*2+1:idx(2)*2) f(2) PSD(2)];