ViterbiDecoder

Parent Previous Next

Package 

 Class 

Tree 

Deprecated 

Index 

Help 


 PREV CLASS   NEXT CLASS

FRAMES    NO FRAMES     All Classes


SUMMARY: NESTED | FIELD | CONSTR | METHOD

DETAIL: FIELD | CONSTR | METHOD



VisualSim.actor.lib.comm
Class ViterbiDecoder

java.lang.Object
 extended byVisualSim.kernel.util.NamedObj
     extended byVisualSim.kernel.InstantiableNamedObj
         extended byVisualSim.kernel.Entity
             extended byVisualSim.kernel.ComponentEntity
                 extended byVisualSim.actor.AtomicActor
                     extended byVisualSim.actor.TypedAtomicActor
                         extended byVisualSim.actor.lib.Transformer
                             extended byVisualSim.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 Class Summary

 

Nested classes inherited from class VisualSim.kernel.Entity

VisualSim.kernel.Entity.ContainedObjectsIterator

 

Field Summary

 VisualSim.data.expr.Parameter

constellation
          The constellation for soft decoding.

 VisualSim.data.expr.Parameter

delay
          Integer defining the trace back depth of the viterbi decoder.

 VisualSim.data.expr.Parameter

polynomialArray
          An array of integers defining polynomials with binary coefficients.

 VisualSim.data.expr.Parameter

softDecoding
          Boolean defining the decoding mode.

 VisualSim.data.expr.Parameter

trellisDecoding
          Boolean defining whether the decoder will do trellis decoding.

 VisualSim.data.expr.Parameter

uncodedRate
          Integer defining the number of bits produced at the output in each firing.

 

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)
          Construct an actor with the given container and name.


 

Method Summary

 void

attributeChanged(VisualSim.kernel.util.Attribute attribute)
          If the attribute being changed is softDecoding or trellisDecoding, set input port and constellation type to be complex if trellisDecoding is true; else if softDecoding is true, set them to double type; otherwise set the input port to type boolean.

 void

fire()
          Read n inputs and produce k outputs, where n is the number of integers in polynomialArray and k is the value of the uncodedRate parameter.

 void

initialize()
          Initialize the actor.

 boolean

postfire()
          Record the datum in buffers into their temporary versions.

 

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

 

Field Detail

polynomialArray

public VisualSim.data.expr.Parameter polynomialArray


uncodedRate

public VisualSim.data.expr.Parameter uncodedRate


delay

public VisualSim.data.expr.Parameter delay


softDecoding

public VisualSim.data.expr.Parameter softDecoding


constellation

public VisualSim.data.expr.Parameter constellation

Constructor Detail

ViterbiDecoder

public ViterbiDecoder(VisualSim.kernel.CompositeEntity container,
                     java.lang.String name)
              throws VisualSim.kernel.util.NameDuplicationException,
                     VisualSim.kernel.util.IllegalActionException

Method Detail

attributeChanged

public void attributeChanged(VisualSim.kernel.util.Attribute attribute)
                     throws VisualSim.kernel.util.IllegalActionException


fire

public void fire()
         throws VisualSim.kernel.util.IllegalActionException


initialize

public void initialize()
               throws VisualSim.kernel.util.IllegalActionException


postfire

public boolean postfire()
                throws VisualSim.kernel.util.IllegalActionException


Package 

 Class 

Tree 

Deprecated 

Index 

Help 


 PREV CLASS   NEXT CLASS

FRAMES    NO FRAMES     All Classes


SUMMARY: NESTED | FIELD | CONSTR | METHOD

DETAIL: FIELD | CONSTR | METHOD



Created with the Personal Edition of HelpNDoc: Easily create PDF Help documents