Mercurial > hg > ltpda
diff m-toolbox/m/built_in_models/ssm/ssm_model_SMD.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/m/built_in_models/ssm/ssm_model_SMD.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,183 @@ +% SMD A statespace model of the Spring-Mass-Damper system +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DESCRIPTION: A statespace model of the Spring-Mass-Damper +% +% CALL: +% HARMONIC_OSC_1D = ssm(plist('built-in','SMD')) +% +% +% OUTPUTS: +% - SMD is an SSM object +% +% +% REFERENCES: +% +% +% +% INFO: +% <a href="matlab:utils.models.displayModelOverview('ssm_model_SMD')">Model Information</a> +% +% +% REFERENCES: +% +% +% VERSION: $Id: ssm_model_SMD.m,v 1.2 2011/04/29 09:48:34 marc1 Exp $ +% +% HISTORY: +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +function varargout = ssm_model_SMD(varargin) + + % Process inputs + [info, pl, constructorInfo, fcn] = utils.models.processModelInputs(varargin(:), mfilename, @getModelDescription, @getModelDocumentation, @getVersion, @versionTable); + if ~isempty(info) + varargout{1} = info; + return; + end + + % Build the object + out = fcn(pl); + + % Set the method version string in the minfo object + if ~isempty(constructorInfo) + % If this is a user-call via a constructor, then we add history + out = addHistoryStep(out, constructorInfo, pl); + end + + if nargout > 0 + varargout{1} = out; + varargout{2} = pl; + else + error('!!! Invalid number of output') + end +end + + +%-------------------------------------------------------------------------- +% AUTHORS EDIT THIS PART +%-------------------------------------------------------------------------- + +function desc = getModelDescription + desc = 'A built-in model that constructs a statespace model for the SMD.'; +end + +function doc = getModelDocumentation + doc = sprintf([... + '<br>It constructs a simple spring mass damper test system.<br>\n'... + ]); +end + +% default version is always the first one +function vt = versionTable() + + vt = {... + 'Standard', @versionStandard, ... + }; + +end + +% This is the standard SMD model +% +function varargout = versionStandard(varargin) + + if nargin == 1 && ischar(varargin{1}) + switch varargin{1} + case 'plist' + + % The plist for this version of this model + pl = plist(); + + pl = combine(pl, ssm.getDefaultPlist('from built-in model')); + + % set output + varargout{1} = pl; + + case 'description' + varargout{1} = sprintf([... + 'This is the standard model for the SMD.' + ]); + case 'info' + varargout{1} = []; + otherwise + error('unknown inputs'); + end + return; + end + + % build model + pl = varargin{1}; + %% parameters array + paramNames = {'SMD_W' 'SMD_C' 'SMD_S1' 'SMD_S2' 'SMD_B' 'SMD_D1'}; + paramValues = [0.2 0.5 0 0 1 0]; + paramUnits = unit('s^-1', 's^-1', '', 's', '', 's^2'); + paramDescriptions = {'Oscilator eigen-frequency' 'Oscilator damping factor'... + 'Gain sensing coefficient' 'Gain differential sensing coefficient' ... + 'Actuator gain' 'Actuation cross sensing coefficient'}; + + + + % If the user didn't give a 'param names' key to set parameter values, + % perhaps they gave individual parameter names + pl = ssm.modelHelper_processInputPlist(pl, ssm_model_SMD('plist','Standard')); + + % processing parameters and declaring variables depending on user needs + [sys.params, sys.numparams] = ssm.modelHelper_declareParameters(pl, paramNames, paramValues, paramDescriptions, paramUnits); + + % here computation of the system's matrices + sys.amats = {[0 1 ; -SMD_W*SMD_W -2*SMD_C*SMD_W]}; + sys.cmats = {[1+SMD_S1 SMD_S2]}; + sys.bmats = {[0;SMD_B] [0 0; 1 0]}; + sys.dmats = {SMD_D1 [0 1]}; + + sys.timestep = 0; + + sys.name = 'SRPINGMASSDAMPER'; + sys.description = 'standard spring-mass-damper test system'; + + inputnames = {'CMD' 'DIST_SMD'}; + inputdescription = {'force noise' 'observation noise'}; + inputvarnames = {{'F'} {'F' 'S'}}; + inputvarunits = {unit('kg m s^-2') [unit('kg m s^-2') unit('m')]}; + inputvardescription = []; + + ssnames = {'SMD'}; + ssdescription = {'TM position and speed'}; + ssvarnames = {{'x' 'xdot'}}; + ssvarunits={[unit('m') unit('m s^-1')]}; + ssvardescription = []; + + outputnames = {'SMD'}; + outputdescription = {'observed position'}; + outputvarnames ={{'OBS'}}; + outputvarunits={unit('m')}; + outputvardescription = []; + + %% Build input plist + sys.inputs = ssmblock.makeBlocksWithData(inputnames, inputdescription, inputvarnames, inputvarunits, inputvardescription); + sys.outputs = ssmblock.makeBlocksWithData(outputnames, outputdescription, outputvarnames, outputvarunits, outputvardescription); + sys.states = ssmblock.makeBlocksWithData(ssnames, ssdescription, ssvarnames, ssvarunits, ssvardescription); + + sys = ssm(sys); + + varargout{1} = sys; + +end + + +%-------------------------------------------------------------------------- +% AUTHORS SHOULD NOT NEED TO EDIT BELOW HERE +%-------------------------------------------------------------------------- + + +%-------------------------------------------------------------------------- +% Get Version +%-------------------------------------------------------------------------- +function v = getVersion + + v = '$Id: ssm_model_SMD.m,v 1.2 2011/04/29 09:48:34 marc1 Exp $'; + +end