www.gusucode.com > sloptim工具箱matlab源码程序 > sloptim/sloptguis/@srocsddata/@tunedparameterdata/addCompensator.m
function addCompensator(this,Compensator) % ADDCOMPENSATOR method to add compensator to data object % % Author(s): A. Stothert 07-Oct-2005 % Copyright 2005-2007 The MathWorks, Inc. %Where to add new compensator idxComp = strcmp(this.CompensatorNames(:,2),Compensator.getIdentifier); if ~any(idxComp) idxComp = size(this.CompensatorNames,1)+1; end %Set compensator name this.CompensatorNames{idxComp,1} = Compensator.Name; this.CompensatorNames{idxComp,2} = Compensator.getIdentifier; %Add mask and pz parameters addP = Compensator.getMaskParameterSpec; if ~isempty(addP) %Have mask parameters to add this.MaskParameters = localAddParam(... this.MaskParameters, ... localCopyP(addP), ... getIdentifier(Compensator)); addP = []; end if Compensator.isTunable ZPKSpecs = Compensator.getZPKParameterSpec; kSpec = localCopyP(ZPKSpecs.GainSpec); this.KParameters = localAddParam(... this.KParameters,... kSpec,... getIdentifier(Compensator)); if ~isempty(ZPKSpecs.PZGroupSpec) addP = [addP; ZPKSpecs.PZGroupSpec]; end if ~isempty(addP) %Have PZ parameters to add this.PZParameters = localAddParam(... this.PZParameters, ... localCopyP(addP), ... getIdentifier(Compensator)); end end %Add listeners to keep data upto date L = addlistener(Compensator, 'Name', 'PostSet', ... @(es,ed)localCompNameChange(this, Compensator)); this.addListeners(L); %-------------------------------------------------------------------------- function Param = localAddParam(Param,newParam,CompId) for ct=numel(newParam):-1:1 newStruct(ct) = struct(... 'pSpec', newParam(ct), ... 'AbsMin', newParam(ct).Minimum, ... 'AbsMax', newParam(ct).Maximum, ... 'CompId', CompId); end Param = [Param; newStruct(:)]; %-------------------------------------------------------------------------- function outP = localCopyP(inP) %Helper function to copy vector of objects nP = numel(inP); outP = handle(nan(nP,1)); for ct = 1:nP outP(ct) = copy(inP(ct)); end %-------------------------------------------------------------------------- function localCompNameChange(this,Compensator) idx = strcmp(this.CompensatorNames(:,2),getIdentifier(Compensator)); if any(idx) this.CompensatorNames{idx,1} = Compensator.Name; end