public class Noise extends Gaussian
If linearlyInterpolate is set to false, then this actor will hold the value of its output constant for the duration of an integration step. Thus, the output signal is piecewise constant. At each time step chosen by the solver, the value is given by a new independent Gaussian random number. This method has the advantage that samples at all times chosen by the solver are uncorrelated.
In both cases, whether linearlyInterpolate is true or false, if the solver holds its step size constant, then the resulting signal is statistically equivalent to filtered white noise. If linearlyInterpolate is true, then the power spectrum has the shape of a sinc squared. If it is false, then it has the shape of the absolute value of a sinc function. In the latter case, the power is infinite, so the approximation is not physically realizable. In the former case, the power is finite. In both cases, sampling the process at the rate of one over the step size yields a discrete-time white noise process.
It is worth explaining why we must approximate white noise. In general, it is not possible in any discretized approximation of a continuous random process to exactly simulate a white noise process. By definition, a white noise process is one where any two values at distinct times are uncorrelated. A naive attempt to simulate this might simply generate a new random number at each sample time at which the solver chooses to fire the actor. However, this cannot work in general. Specifically, the semantics of the continuous domain assumes that signals are piecewise continuous. The signal resulting from the above strategy will not be piecewise continuous. If the solver refines a step size and chooses a point close to a previously calculated point, the new value produced by such an actor would not be close to the previously value previously produced. This can result in the solver assuming that its step size is too large and reducing it until it can reduce it no more.
To demonstrate this effect, try connecting a GaussianActor to a LevelCrossingDetector actor under a ContinuousDirector. An execution of the model will immediately trigger an exception with a message like "The refined step size is less than the time resolution, at time..." Conceptually, with a true white noise process, the level crossing occurs at all times, and therefore the exception is, in fact, the correct response.
If you modify the above example by sending the output of the Gaussian actor directly to an Integrator, and then the output of the Integrator to the LevelCrossingDetector, then the exception disappears. The Integrator ensures that the signal is piecewise continuous. This might seem like a reasonable approximation to a Weiner process, but in fact it is problematic. In particular, at the times that the LevelCrossingDetector triggers, the Gaussian actor will actually produce two distinct random numbers at the same time (at different microsteps). This changes the statistics of the output in a very subtle way.
|Modifier and Type||Field and Description|
If true, linearly between random number for multistep solvers, and otherwise, perform zero-order hold.
_generatorSeed, _needNew, _needNewGenerator, _random, privateSeed, resetOnEachRun, seed
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _deferChangeRequests, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
|Constructor and Description|
Construct an actor with the given container and name.
|Modifier and Type||Method and Description|
Generate a new random number.
Produce a number that is linearly interpolated within the current integration step, if linearlyInterpolate is true, or the random number for the beginning of the integration step otherwise.
Initialize the random number generator with the seed, if it has been given.
Set a flag to cause a new random number to be generated the next time fire() is called.
_createGenerator, attributeChanged, clone
_containedTypeConstraints, _defaultTypeConstraints, _fireAt, _fireAt, attributeTypeChanged, clone, isBackwardTypeInferenceEnabled, newPort, typeConstraintList, typeConstraints
_actorFiring, _actorFiring, _declareDelayDependency, addActorFiringListener, addInitializable, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, preinitialize, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, setContainer, stop, stopFire, terminate, wrapup
_adjustDeferrals, _checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, isAtomic, isOpaque, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName
_addPort, _description, _exportMoMLContents, _removePort, _validateSettables, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName
_setParent, exportMoML, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition, isWithinClassDefinition
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _containedDecorators, _copyChangeRequestList, _debug, _debug, _debug, _debug, _debug, _executeChangeRequests, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _notifyHierarchyListenersAfterChange, _notifyHierarchyListenersBeforeChange, _propagateValue, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, addHierarchyListener, attributeDeleted, attributeList, attributeList, decorators, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, exportMoMLPlain, getAttribute, getAttributes, getChangeListeners, getClassName, getDecoratorAttribute, getDecoratorAttributes, getDerivedLevel, getDerivedList, getDisplayName, getFullName, getModelErrorHandler, getName, getName, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, lazyContainedObjectsIterator, message, notifyOfNameChange, propagateValue, propagateValues, removeAttribute, removeChangeListener, removeDebugListener, removeHierarchyListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, validateSettables, workspace
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
createReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
isFireFunctional, isStrict, iterate, stop, stopFire, terminate
addInitializable, preinitialize, removeInitializable, wrapup
description, getContainer, getDisplayName, getFullName, getName, getName, setName
public Parameter linearlyInterpolate
public Noise(CompositeEntity container, java.lang.String name) throws NameDuplicationException, IllegalActionException
public void fire() throws IllegalActionException
public void initialize() throws IllegalActionException
public boolean postfire() throws IllegalActionException
protected void _generateRandomNumber() throws IllegalActionException