ptolemy.actor.lib.comm
Class HammingCoder
java.lang.Object
ptolemy.kernel.util.NamedObj
ptolemy.kernel.InstantiableNamedObj
ptolemy.kernel.Entity
ptolemy.kernel.ComponentEntity
ptolemy.actor.AtomicActor
ptolemy.actor.TypedAtomicActor
ptolemy.actor.lib.Transformer
ptolemy.actor.lib.comm.HammingCoder
- All Implemented Interfaces:
- java.io.Serializable, java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable
public class HammingCoder
- extends Transformer
Encode the information symbols into Hamming code.
Let k denotes parameter uncodedRate and n denotes
parameter codedRate. During each firing, the actor consumes
k bits and encode them into a block of code with length n.
The rate of the code is k/n.
For a Hamming code, k and n must satisfy the following:
n = 2m - 1
k = 2m - 1 - m;
where m is any positive integer. Note m = n - k.
It is called the order of the Hamming code. The lowest order is m = 2,
and (n, k) = (3, 1).
The generator matrix G is defined as:
Gk*n = [Ik | Pk*(n-k) ]
where P is called the parity matrix.
The subscript of a matrix indicates its dimension.
The parity check matrix H is defined as:
H(n-k)*n = [PT | In-k ]
Each column of H must be one of the non-zero n = 2m - 1
combinations of m bits.
To generate a Hamming code, the k information bits is considered
as a row vector X. Its Hamming code is
Y = X * G.
Hence Y is a row vector of length n. The result is
then sent to the output port in sequence.
For more information on Hamming codes, see Proakis, Digital
Communications, Fourth Edition, McGraw-Hill, 2001, pp. 416-424.
- Since:
- Ptolemy II 3.0
- Version:
- $Id: HammingCoder.java 57040 2010-01-27 20:52:32Z cxh $
- Author:
- Ye Zhou
- See Also:
- Serialized Form
- Accepted Rating:
- Proposed Rating:
Fields inherited from class ptolemy.kernel.util.NamedObj |
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS |
Constructor Summary |
HammingCoder(CompositeEntity container,
java.lang.String name)
Construct an actor with the given container and name. |
Method Summary |
void |
attributeChanged(Attribute attribute)
If the attribute being changed is uncodedRate or
uncodedRate, then verify that it is a positive integer. |
java.lang.Object |
clone(Workspace workspace)
Clone the actor into the specified workspace. |
void |
fire()
If the attributes has changed, check the validity of
uncodedRate and codedRate. |
Methods inherited from class ptolemy.actor.AtomicActor |
_actorFiring, _actorFiring, addActorFiringListener, addInitializable, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, initialize, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, postfire, prefire, preinitialize, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, setContainer, stop, stopFire, terminate, wrapup |
Methods inherited from class ptolemy.kernel.ComponentEntity |
_adjustDeferrals, _checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, isAtomic, isOpaque, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName |
Methods inherited from class ptolemy.kernel.Entity |
_description, _exportMoMLContents, _removePort, _validateSettables, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName |
Methods inherited from class ptolemy.kernel.util.NamedObj |
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _debug, _debug, _debug, _debug, _debug, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _propagateValue, _recordDecoratedAttributes, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, attributeList, attributeList, 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, propagateValue, propagateValues, removeChangeListener, removeDebugListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, validateSettables, workspace |
Methods inherited from class java.lang.Object |
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
uncodedRate
public Parameter uncodedRate
- Integer defining the uncode block size. It should be a positive
integer. Its default value is the integer 4.
codedRate
public Parameter codedRate
- Integer defining the Hamming code block size.
This parameter should be a non-negative integer.
Its default value is the integer 7.
_inputRate
private Parameter _inputRate
_outputRate
private Parameter _outputRate
_uncodeSizeValue
private int _uncodeSizeValue
_codeSizeValue
private int _codeSizeValue
_order
private int _order
_parityMatrix
private int[][] _parityMatrix
_parameterInvalid
private transient boolean _parameterInvalid
HammingCoder
public HammingCoder(CompositeEntity container,
java.lang.String name)
throws NameDuplicationException,
IllegalActionException
- Construct an actor with the given container and name.
The output and trigger ports are also constructed.
- Parameters:
container
- The container.name
- The name of this actor.
- Throws:
IllegalActionException
- If the entity cannot be contained
by the proposed container.
NameDuplicationException
- If the container already has an
actor with this name.
attributeChanged
public void attributeChanged(Attribute attribute)
throws IllegalActionException
- If the attribute being changed is uncodedRate or
uncodedRate, then verify that it is a positive integer.
Set the tokenConsumptionRate and tokenProductionRate.
- Overrides:
attributeChanged
in class NamedObj
- Parameters:
attribute
- The attribute that changed.
- Throws:
IllegalActionException
- If codedRate
or uncodedRate is not positive.
clone
public java.lang.Object clone(Workspace workspace)
throws java.lang.CloneNotSupportedException
- Clone the actor into the specified workspace.
- Overrides:
clone
in class AtomicActor
- Parameters:
workspace
- The workspace for the new object.
- Returns:
- A new actor.
- Throws:
java.lang.CloneNotSupportedException
- If a derived class contains
an attribute that cannot be cloned.- See Also:
NamedObj.exportMoML(Writer, int, String)
,
NamedObj.setDeferringChangeRequests(boolean)
fire
public void fire()
throws IllegalActionException
- If the attributes has changed, check the validity of
uncodedRate and codedRate. Generate the parity matrix.
Read "uncodedRate" number of tokens from the input port
and compute the parities. Send the parities in sequence to the
output port.
- Specified by:
fire
in interface Executable
- Overrides:
fire
in class AtomicActor
- Throws:
IllegalActionException
- Not thrown in this base class.