<?xml version="1.0"?>
<block>
    <name>LDPC Decoder Definition</name>
    <key>variable_ldpc_decoder_def</key>
    <import>from gnuradio import fec</import>
    <var_make>
#if int($ndim())==0 #
self.$(id) = $(id) = fec.ldpc_decoder.make($file, $sigma, $max_iter); #slurp
#else if int($ndim())==1 #
self.$(id) = $(id) = map( (lambda a: fec.ldpc_decoder.make($file, $sigma, $max_iter)), range(0,$dim1) ); #slurp
#else
self.$(id) = $(id) = map( (lambda b: map( ( lambda a: fec.ldpc_decoder.make($file, $sigma, $max_iter)), range(0,$dim2) ) ), range(0,$dim1)); #slurp
#end if</var_make>
    <make></make>

<!-- This definition below is weird, it seems required for the GRC to be happy, I'm confused. -->
    <param>
        <name>Ignore Me</name>
        <key>value</key>
        <value>"ok"</value>
        <type>raw</type>
        <hide>all</hide>
    </param>

    <param>
        <name>Parallelism</name>
        <key>ndim</key>
        <value>0</value>
        <type>enum</type>
        <option>
            <name>0</name>
            <key>0</key>
        </option>
        <option>
            <name>1</name>
            <key>1</key>
        </option>
        <option>
            <name>2</name>
            <key>2</key>
        </option>
    </param>

    <param>
        <name>Dimension 1</name>
        <key>dim1</key>
        <value>4</value>
        <type>int</type>
        <hide>#if (int($ndim()) >= 1) then 'none' else 'all' #</hide>
    </param>

    <param>
        <name>Dimension 2</name>
        <key>dim2</key>
        <value>4</value>
        <type>int</type>
        <hide>#if (int($ndim()) >= 2) then 'none' else 'all' #</hide>
    </param>

    <param>
        <name>AList File</name>
        <key>file</key>
        <type>file_open</type>
    </param>
    
    <param>
        <name>Sigma</name>
        <key>sigma</key>
        <value>0.5</value>
        <type>float</type>
    </param>

    <param>
        <name>Max Iterations</name>
        <key>max_iter</key>
        <value>50</value>
        <type>int</type>
    </param>

    <doc>
This is a soft-decision decoder that uses belief propagation (also known as message passing) that is described at:

www.cs.toronto.edu/~radford/ftp/LDPC-2012-02-11/decoding.html

Designed for a memoryless AWGN channel, it assumes a noise variance of the value specified for sigma.
    </doc>
</block>
