<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE document PUBLIC "-//CNX//DTD CNXML 0.5 plus MathML//EN" "http://cnx.rice.edu/cnxml/0.5/DTD/cnxml_mathml.dtd">
<document xmlns="http://cnx.rice.edu/cnxml" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:bib="http://bibtexml.sf.net/" id="m10181">

  <name>Convolutional Codes</name>
  <metadata>
  <md:version>2.7</md:version>
  <md:created>2001/07/11</md:created>
  <md:revised>2004/01/07 09:51:40.706 US/Central</md:revised>
  <md:authorlist>
    <md:author id="aaz">
      <md:firstname>Behnaam</md:firstname>
      
      <md:surname>Aazhang</md:surname>
      <md:email>aaz@ece.rice.edu</md:email>
    </md:author>
  </md:authorlist>

  <md:maintainerlist>
    <md:maintainer id="dinesh">
      <md:firstname>Dinesh</md:firstname>
      
      <md:surname>Rajan</md:surname>
      <md:email>dinesh@ece.rice.edu</md:email>
    </md:maintainer>
    <md:maintainer id="mohammad">
      <md:firstname>Mohammad</md:firstname>
      <md:othername>Jaber</md:othername>
      <md:surname>Borran</md:surname>
      <md:email>mohammad@ece.rice.edu</md:email>
    </md:maintainer>
    <md:maintainer id="aaz">
      <md:firstname>Behnaam</md:firstname>
      
      <md:surname>Aazhang</md:surname>
      <md:email>aaz@ece.rice.edu</md:email>
    </md:maintainer>
    <md:maintainer id="mrshawn">
      <md:firstname>Shawn</md:firstname>
      
      <md:surname>Stewart</md:surname>
      <md:email>mrshawn@alumni.rice.edu</md:email>
    </md:maintainer>
    <md:maintainer id="rha">
      <md:firstname>Roy</md:firstname>
      
      <md:surname>Ha</md:surname>
      <md:email>rha@rice.edu</md:email>
    </md:maintainer>
  </md:maintainerlist>
  
  <md:keywordlist>
    <md:keyword>channel coding</md:keyword>
    <md:keyword>convolutional code</md:keyword>
    <md:keyword>information theory</md:keyword>
  </md:keywordlist>

  <md:abstract>A description of channel coding using convolutional codes.</md:abstract>
</metadata>

  <content>

    <para id="para">
      Convolutional codes are one type of code used for 
      <cnxn document="m10174">channel coding</cnxn>.
      Another type of code used is
      <cnxn document="m10174" target="s1">block coding</cnxn>.
    </para>

    <section id="s1">
      <name>Convolutional codes</name>

      <para id="para0">
	In convolutional codes, each block of
	<m:math><m:ci>k</m:ci></m:math> bits is mapped into a block of
	<m:math><m:ci>n</m:ci></m:math> bits but these
	<m:math><m:ci>n</m:ci></m:math> bits are not only determined
	by the present <m:math><m:ci>k</m:ci></m:math> information
	bits but also by the previous information bits. This
	dependence can be captured by a finite state machine.
      </para>

      <example id="example1">
	<para id="para1">
	  A rate
	  <m:math display="inline">
	    <m:apply>
	      <m:divide/>
              <m:cn>1</m:cn> 
             <m:cn>2</m:cn>
	    </m:apply>
	  </m:math>
	  convolutional coder
	  <m:math display="inline">
	    <m:apply>
	      <m:eq/>
              <m:ci>k</m:ci>
              <m:cn>1</m:cn>
	    </m:apply>
	  </m:math>,
	  <m:math display="inline">
	    <m:apply>
	      <m:eq/>
              <m:ci>n</m:ci>
              <m:cn>2</m:cn>
	    </m:apply>
	  </m:math>
	  with memory length 2 and constraint length 3.
	</para>

	<figure id="fig1">
	  <media type="image/png" src="Figure7-55.png"/>
	</figure>

	<para id="para2">
	  Since the length of the shift register is 2, there are 4
	  different rates.  The behavior of the convolutional coder
	  can be captured by a 4 state machine. States: <code type="inline">00,
	  01, 10, 11</code>,
	</para>

	<para id="para3">
	  For example, arrival of information bit
	  <code type="inline">0</code> transitions from state
	  <code type="inline">10</code> to state <code type="inline">01</code>.
	</para>

	<para id="para4">
	  The encoding and the decoding process can be realized in
	  trellis structure.
	</para>

	<figure id="fig2">
	  <media type="image/png" src="Figure7-56.png"/>
	</figure>

	<para id="para5">
	  If the input sequence is
	</para>
	<code type="block">     1 1 0 0</code>
	<para id="para5a">
	  the output sequence would be
	</para>
	<code type="block">     11 10 10 11</code>
	<para id="para5b">
	  The transmitted codeword is then <code type="inline">11 10 10
	    11</code>.  If there is one error on the channel
	  <code type="inline">11 <emphasis>0</emphasis>0 10 11</code>
	</para>

	<figure id="fig3">
	  <media type="image/png" src="Figure7-57.png"/>
	</figure>

	<para id="para6">
	  Starting from state <code type="inline">00</code> the Hamming
	  distance between the possible paths and the received
	  sequence is measured.  At the end, the path with minimum
	  distance to the received sequence is chosen as the correct
	  trellis path.  The information sequence will then be
	  determined.
	</para>

      </example>

      <para id="para7">
	Convolutional coding lends itself to very efficient trellis
	based encoding and decoding.  They are very practical and
	powerful codes.
      </para>
    </section>

  </content>
</document>
