PREV CLASS NEXT CLASS |
|||
java.lang.Object
VisualSim.kernel.util.NamedObj
VisualSim.kernel.InstantiableNamedObj
VisualSim.kernel.Entity
VisualSim.kernel.ComponentEntity
VisualSim.actor.AtomicActor
VisualSim.actor.TypedAtomicActor
VisualSim.actor.lib.Transformer
VisualSim.actor.lib.comm.ViterbiDecoder
The Viterbi algorithm is an optimal way to decode convolutional and trellis codes. The code is specified jointly by the uncodedRate and polynomialArray parameters. To get a k/n code, set uncodedRate to k and give n integers in polynomialArray. See ConvolutionalCoder for details about the meaning of these parameters. On each firing, this actor will read n inputs and produce k outputs.
The decoder finds the most likely data sequence given noisy inputs by searching all possibilities and computing the distance between the codewords they produce and the observed noisy data. The sequence yielding the minimum distance is the decoded output.
There are two choices offered in this actor to compute the distance. If it the parameter softDecoding is set to be false, the input port will accept boolean tokens and compute the Hamming distance. If the parameter softDecoding is set to be true, the input port will accept double tokens and compute the Euclidean distance. The parameter constellation should be a double array of length 2. The first element specifies the amplitude of "false" input. The second element specifies the amplitude of "true" input. At this time, this actor can only handle binary antipodal constellations, but we expect to generalize this.
Soft decoding has lower probability of decoding error than hard decoding. But distance computation for hard decoding is easier, since it is based on bit operations. Moreover, hard decoding can be used when there is no direct observation of the noisy data, but only observations of a bit sequence that may have errors in it. With hard decoding, this actor serves the role of correcting errors. With soft decoding, it serves the role of reducing the likelyhood of errors.
There is some delay between the reading of input data and the production of decoded output data. That delay, which is called the trace-back depth or truncation depth of the decoder, is controlled by the delay parameter, which is required to be a positive integer. On the first delay firings of this actor, the outputs will be false. On each firing, the number of outputs produced is uncodedRate, so the output will have a prefix of delay*uncodedRate false-valued tokens before any decoded bits are produced. Larger values of delay generally reduce the probability of error. A good rule of thumb is to set delay to five times the highest order of all polynomials, provided that the convolutional code is a one that has good distance properties.
For more information on convolutional codes and Viterbi decoder, see the ConvolutionalCoder actor and Proakis, Digital Communications, Fourth Edition, McGraw-Hill, 2001, pp. 471-477 and pp. 482-485, or Barry, Lee and Messerschmitt, Digital Communication, Third Edition, Kluwer, 2004.
Nested classes inherited from class VisualSim.kernel.Entity |
VisualSim.kernel.Entity.ContainedObjectsIterator |
Field Summary |
|
VisualSim.data.expr.Parameter |
constellation |
VisualSim.data.expr.Parameter |
delay |
VisualSim.data.expr.Parameter |
polynomialArray |
VisualSim.data.expr.Parameter |
softDecoding |
VisualSim.data.expr.Parameter |
trellisDecoding |
VisualSim.data.expr.Parameter |
uncodedRate |
Fields inherited from class VisualSim.actor.lib.Transformer |
input, output |
Fields inherited from class VisualSim.actor.AtomicActor |
_stopRequested, Block_Documentation |
Fields inherited from class VisualSim.kernel.util.NamedObj |
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS |
Fields inherited from interface VisualSim.actor.Executable |
COMPLETED, NOT_READY, STOP_ITERATING |
Constructor Summary |
|
ViterbiDecoder(VisualSim.kernel.CompositeEntity container, java.lang.String name) |
Method Summary |
|
void |
attributeChanged(VisualSim.kernel.util.Attribute attribute) |
void |
fire() |
void |
initialize() |
boolean |
postfire() |
Methods inherited from class VisualSim.actor.TypedAtomicActor |
_addPort, attributeTypeChanged, clone, newPort, typeConstraintList |
Methods inherited from class VisualSim.actor.AtomicActor |
_createReceivers, clone, connectionsChanged, getDirector, getExecutiveDirector, getFunctionDependency, getManager, inputPortList, iterate, newReceiver, outputPortList, prefire, preinitialize, pruneDependencies, removeDependency, setContainer, stop, stopFire, terminate, wrapup |
Methods inherited from class VisualSim.kernel.ComponentEntity |
_adjustDeferrals, _checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, isAtomic, isOpaque, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName |
Methods inherited from class VisualSim.kernel.Entity |
_description, _exportMoMLContents, _removePort, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName, validateSettables |
Methods inherited from class VisualSim.kernel.InstantiableNamedObj |
_setParent, exportMoML, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition |
Methods inherited from class VisualSim.kernel.util.NamedObj |
_addAttribute, _attachText, _cloneFixAttributeFields, _debug, _debug, _debug, _debug, _debug, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _propagateValue, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, attributeList, attributeList, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, getAttribute, getAttributes, getChangeListeners, getClassName, getDerivedLevel, getDerivedList, getFullName, getModelErrorHandler, getName, getName, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, message, propagateValue, propagateValues, removeChangeListener, removeDebugListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setModelErrorHandler, setNormalDebugging, setPersistent, setSource, setVerboseDebugging, sortContainedObjects, toplevel, toString, workspace |
Methods inherited from class java.lang.Object |
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Methods inherited from interface VisualSim.actor.Actor |
getDirector, getExecutiveDirector, getFunctionDependency, getManager, inputPortList, newReceiver, outputPortList |
Methods inherited from interface VisualSim.actor.Executable |
iterate, prefire, preinitialize, stop, stopFire, terminate, wrapup |
Methods inherited from interface VisualSim.kernel.util.Nameable |
description, getContainer, getFullName, getName, getName, setName |
Methods inherited from interface VisualSim.kernel.util.Derivable |
getDerivedLevel, getDerivedList, propagateValue |
public VisualSim.data.expr.Parameter polynomialArray
public VisualSim.data.expr.Parameter uncodedRate
public VisualSim.data.expr.Parameter delay
public VisualSim.data.expr.Parameter softDecoding
public VisualSim.data.expr.Parameter constellation
public ViterbiDecoder(VisualSim.kernel.CompositeEntity container,
java.lang.String name)
throws VisualSim.kernel.util.NameDuplicationException,
VisualSim.kernel.util.IllegalActionException
public void attributeChanged(VisualSim.kernel.util.Attribute attribute)
throws VisualSim.kernel.util.IllegalActionException
public void fire()
throws VisualSim.kernel.util.IllegalActionException
public void initialize()
throws VisualSim.kernel.util.IllegalActionException
public boolean postfire()
throws VisualSim.kernel.util.IllegalActionException
PREV CLASS NEXT CLASS |
|||
Created with the Personal Edition of HelpNDoc: Easily create PDF Help documents