126 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			126 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								<HTML><HEAD>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<TITLE> Notes on Modifying the LDPC Programs </TITLE>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</HEAD><BODY>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<H1> Notes on Modifying the LDPC Programs </H1>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<P>Here are a few notes on how to modify the programs to add new types of
							 | 
						||
| 
								 | 
							
								channel, new decoding procedures, etc.  You should also look at the <A
							 | 
						||
| 
								 | 
							
								HREF="modules.html">module documentation</A>.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<H2> Adding a new type of channel </H2>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<P>Channels are involved in two programs: 
							 | 
						||
| 
								 | 
							
								<A HREF="channel.html#transmit"><B>transmit</B></A> and 
							 | 
						||
| 
								 | 
							
								<A HREF="decoding.html#decode"><B>decode</B></A>.  
							 | 
						||
| 
								 | 
							
								Adding another type of memoryless channel should be straightforward.
							 | 
						||
| 
								 | 
							
								Adding a channel with memory may involve more work.  Here are the
							 | 
						||
| 
								 | 
							
								steps needed if no major reorganizations are required:
							 | 
						||
| 
								 | 
							
								<OL>
							 | 
						||
| 
								 | 
							
								<LI> Decide on a syntax for specifying the new channel type and its
							 | 
						||
| 
								 | 
							
								     parameters, and on an internal name for the channel type.  Add
							 | 
						||
| 
								 | 
							
								     the internal name as a possibility in the enumerated <TT>channel_type</TT>
							 | 
						||
| 
								 | 
							
								     declared in <A HREF="channel.h"><TT>channel.h</TT></A>.  You
							 | 
						||
| 
								 | 
							
								     may also need to declare new global variables to store parameters of
							 | 
						||
| 
								 | 
							
								     the channel in <A HREF="channel.h"><TT>channel.h</TT></A> and
							 | 
						||
| 
								 | 
							
								     <A HREF="channel.c"><TT>channel.c</TT></A>.
							 | 
						||
| 
								 | 
							
								<LI> Modify the <TT>channel_parse</TT> and 
							 | 
						||
| 
								 | 
							
								     <TT>channel_usage</TT> procedures in 
							 | 
						||
| 
								 | 
							
								     <A HREF="channel.c"><TT>channel.c</TT></A> to
							 | 
						||
| 
								 | 
							
								     parse the specification of the new channel and display an appropriate 
							 | 
						||
| 
								 | 
							
								     usage message.
							 | 
						||
| 
								 | 
							
								<LI> Decide on how the new channel's output is represented in a file
							 | 
						||
| 
								 | 
							
								     (eg, for an erasure channel, what the symbol for an erasure is), and
							 | 
						||
| 
								 | 
							
								     update <A HREF="transmit.c"><TT>transmit.c</TT></A> to write the
							 | 
						||
| 
								 | 
							
								     new channel's output for each transmitted bit, after randomly generating 
							 | 
						||
| 
								 | 
							
								     any noise (see
							 | 
						||
| 
								 | 
							
								     the <A HREF="rand.html">documentation on random number generation</A>).
							 | 
						||
| 
								 | 
							
								<LI> Modify <A HREF="decode.c"><TT>decode.c</TT></A> in three places to 
							 | 
						||
| 
								 | 
							
								     accommodate the new channel.  The three sections of code to modify
							 | 
						||
| 
								 | 
							
								     allocate space for data from the channel, read data from the channel,
							 | 
						||
| 
								 | 
							
								     and set likelihood ratios based on the data read.  The setting of 
							 | 
						||
| 
								 | 
							
								     likelihood ratios is based on the assumption that the channel is 
							 | 
						||
| 
								 | 
							
								     memoryless (ie, data received for different bits is independent).
							 | 
						||
| 
								 | 
							
								     Adding a channel with memory would require changing this assumption,
							 | 
						||
| 
								 | 
							
								     which would involve modifications to the decoding procedures too.
							 | 
						||
| 
								 | 
							
								<LI> Document the new channel type in <A HREF="channel.html">channel.html</A>
							 | 
						||
| 
								 | 
							
								     and <A HREF="decoding.html">decoding.html</A>.
							 | 
						||
| 
								 | 
							
								</OL>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<H2> Adding a new decoding procedure </H2>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A new decoding method can be implemented as follows:
							 | 
						||
| 
								 | 
							
								<OL>
							 | 
						||
| 
								 | 
							
								<LI> Decide on a syntax for specifying the method and its parameters,
							 | 
						||
| 
								 | 
							
								     using the trailing arguments to the 
							 | 
						||
| 
								 | 
							
								     <A HREF="decoding.html#decode"><TT>decode</TT></A> program.  Pick an
							 | 
						||
| 
								 | 
							
								     internal name for the method, and add it as a possibility in the
							 | 
						||
| 
								 | 
							
								     enumerated <TT>decoding_method</TT> type in 
							 | 
						||
| 
								 | 
							
								     <A HREF="dec.h"><TT>dec.h</TT></A>.  You may also need to declare
							 | 
						||
| 
								 | 
							
								     new variables for the method's parameters in 
							 | 
						||
| 
								 | 
							
								     <A HREF="dec.h"><TT>dec.h</TT></A> and <A HREF="dec.c"><TT>dec.c</TT></A>.
							 | 
						||
| 
								 | 
							
								<LI> Modify the argument parsing code in 
							 | 
						||
| 
								 | 
							
								     <A HREF="decode.c"><TT>decode.c</TT></A>
							 | 
						||
| 
								 | 
							
								     to handle specifications of the new method, and change the <TT>usage</TT>
							 | 
						||
| 
								 | 
							
								     procedure to display the syntax for specifying the new method.
							 | 
						||
| 
								 | 
							
								<LI> Write a setup procedure for your decoding method, putting it in 
							 | 
						||
| 
								 | 
							
								     <A HREF="dec.c"><TT>dec.c</TT></A>, with a declaration in 
							 | 
						||
| 
								 | 
							
								     <A HREF="dec.h"><TT>dec.h</TT></A>.  At a minimum, this procedure
							 | 
						||
| 
								 | 
							
								     should print headers for the table of detailed decoding information
							 | 
						||
| 
								 | 
							
								     when the <B>-T</B> option was specified.
							 | 
						||
| 
								 | 
							
								<LI> Write a decode procedure implementing your method, putting it in
							 | 
						||
| 
								 | 
							
								     <A HREF="dec.c"><TT>dec.c</TT></A>, with a declaration in 
							 | 
						||
| 
								 | 
							
								     <A HREF="dec.h"><TT>dec.h</TT></A>.  This procedure should output
							 | 
						||
| 
								 | 
							
								     detailed trace information when the <B>-T</B> option was specified.
							 | 
						||
| 
								 | 
							
								<LI> Modify <A HREF="decode.c"><TT>decode.c</TT></A> in the appropriate 
							 | 
						||
| 
								 | 
							
								     places to call the setup procedure and the decode procedure you wrote.
							 | 
						||
| 
								 | 
							
								<LI> Document the new decoding method in 
							 | 
						||
| 
								 | 
							
								     <A HREF="decoding.html">decoding.html</A> and 
							 | 
						||
| 
								 | 
							
								     <A HREF="decode-detail.html">decode-detail.html</A>.
							 | 
						||
| 
								 | 
							
								</OL>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<H2> Adding a new method of making a low-density parity-check matrix </H2>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<P>The <A HREF="pchk.html#make-ldpc"><B>make-ldpc</B></A> program can be
							 | 
						||
| 
								 | 
							
								changed to add a new method for generating a LDPC code by modifying
							 | 
						||
| 
								 | 
							
								<A HREF="make-ldpc.c"><TT>make-ldpc.c</TT></A>.  A radically different
							 | 
						||
| 
								 | 
							
								method might better be implemented by writing a new program of similar
							 | 
						||
| 
								 | 
							
								structure.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<H2> Adding a new encoding method </H2>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<P>A new heuristic for finding a sparse LU decomposition can be
							 | 
						||
| 
								 | 
							
								implemented by changing <A HREF="make-gen.c">make-gen.c</A> to allow
							 | 
						||
| 
								 | 
							
								the new heuristic to be specified on the command line, changing the <A
							 | 
						||
| 
								 | 
							
								HREF="mod2sparse.html#decomp"><B>mod2sparse_decomp</B></A> procedure
							 | 
						||
| 
								 | 
							
								in <A HREF="mod2sparse.c"><TT>mod2sparse.c</TT></A> to implement the
							 | 
						||
| 
								 | 
							
								heuristic, and documenting the new heuristic in <A
							 | 
						||
| 
								 | 
							
								HREF="encoding.html">encoding.html</A>, <A
							 | 
						||
| 
								 | 
							
								HREF="sparse-LU.html">sparse-LU.html</A>, and <A
							 | 
						||
| 
								 | 
							
								HREF="mod2sparse.html">mod2sparse.html</A>.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<P>To implement a completely new encoding method, you will first need
							 | 
						||
| 
								 | 
							
								to define a new file format for a generator matrix, modify <A
							 | 
						||
| 
								 | 
							
								HREF="make-gen.c">make-gen.c</A> appropriately to write out this new
							 | 
						||
| 
								 | 
							
								format, and modify the <TT>read_gen</TT> procedure in <A
							 | 
						||
| 
								 | 
							
								HREF="rcode.c"><TT>rcode.c</TT></A> to read this format.  You will
							 | 
						||
| 
								 | 
							
								need to implement the new method in a procedure in <A
							 | 
						||
| 
								 | 
							
								HREF="enc.c">enc.c</A>, and modify <A HREF="encode.c">encode.c</A> so
							 | 
						||
| 
								 | 
							
								that it will call this new procedure when the new method is used.  The
							 | 
						||
| 
								 | 
							
								<TT>enum_decode</TT> procedure in <A HREF="dec.c">dec.c</A> will also
							 | 
						||
| 
								 | 
							
								need to be modified so it can call the new encoding method.  Finally,
							 | 
						||
| 
								 | 
							
								you should document the new method in <A
							 | 
						||
| 
								 | 
							
								HREF="encoding.html">encoding.html</A>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<HR>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A HREF="index.html">Back to index for LDPC software</A>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</BODY></HTML>
							 |