<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="en" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="nlm-ta">Sensors</journal-id>
<journal-title>Sensors</journal-title>
<issn pub-type="epub">1424-8220</issn>
<publisher>
<publisher-name>Molecular Diversity Preservation International (MDPI)</publisher-name></publisher></journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3390/s120201529</article-id>
<article-id pub-id-type="publisher-id">sensors-12-01529</article-id>
<article-categories>
<subj-group>
<subject>Article</subject></subj-group></article-categories>
<title-group>
<article-title>An LDPC Decoder Architecture for Wireless Sensor Network Applications</article-title></title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Giancarlo Biroli</surname><given-names>Andrea Dario</given-names></name></contrib>
<contrib contrib-type="author">
<name><surname>Martina</surname><given-names>Maurizio</given-names></name><xref ref-type="corresp" rid="c1-sensors-12-01529"><sup>*</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Masera</surname><given-names>Guido</given-names></name></contrib>
<aff id="af1-sensors-12-01529">Dipartimento di Elettronica e Telecomunicazioni, Politecnico di Torino, Corso Duca degli Abruzzi 24, Torino 10129, Italy; E-Mails: <email>andreadariogiancarlo.biroli@studenti.polito.it</email> (A.D.G.B.); <email>guido.masera@polito.it</email> (G.M.)</aff></contrib-group>
<author-notes>
<corresp id="c1-sensors-12-01529">
<label>*</label>Author to whom correspondence should be addressed; E-Mail: <email>maurizio.martina@polito.it</email>; Tel.: +39-011-090-4205; Fax: +39-011-090-4217.</corresp></author-notes>
<pub-date pub-type="collection">
<year>2012</year></pub-date>
<pub-date pub-type="epub">
<day>6</day>
<month>2</month>
<year>2012</year></pub-date>
<volume>12</volume>
<issue>2</issue>
<fpage>1529</fpage>
<lpage>1543</lpage>
<history>
<date date-type="received">
<day>18</day>
<month>11</month>
<year>2011</year></date>
<date date-type="rev-recd">
<day>25</day>
<month>1</month>
<year>2012</year></date>
<date date-type="accepted">
<day>31</day>
<month>1</month>
<year>2012</year></date></history>
<permissions>
<copyright-statement>© 2012 by the authors; licensee MDPI, Basel, Switzerland</copyright-statement>
<copyright-year>2012</copyright-year>
<license>
<p>This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution license (<ext-link xlink:href="http://creativecommons.org/licenses/by/3.0/" ext-link-type="uri">http://creativecommons.org/licenses/by/3.0/</ext-link>).</p></license></permissions>
<abstract>
<p>The pervasive use of wireless sensors in a growing spectrum of human activities reinforces the need for devices with low energy dissipation. In this work, coded communication between a couple of wireless sensor devices is considered as a method to reduce the dissipated energy per transmitted bit with respect to uncoded communication. Different Low Density Parity Check (LDPC) codes are considered to this purpose and post layout results are shown for a low-area low-energy decoder, which offers percentage energy savings with respect to the uncoded solution in the range of 40%–80%, depending on considered environment, distance and bit error rate.</p></abstract>
<kwd-group>
<kwd>LDPC decoder architecture</kwd>
<kwd>wireless sensor networks</kwd>
<kwd>power consumption</kwd></kwd-group></article-meta></front>
<body>
<sec sec-type="intro">
<label>1.</label>
<title>Introduction</title>
<p>Wireless Sensor Networks (WSN) have gained growing research interest in the last years. The possibility to monitor different physical quantities even in dangerous and hard-to-reach areas has found applications in several fields, including medical, industrial and surveillance environments [<xref ref-type="bibr" rid="b1-sensors-12-01529">1</xref>]. WSNs are made of small nodes, where each node often relies on small size and light weight batteries. As a consequence, both energy consumption and area occupation are important aspects in the design of nodes. Although nodes feature a limited energy budget, they embody not only sensing but also computational and transmit/receive circuits. Thus, energy consumption issues are critical and ought to be minimized at every design level. As an example in [<xref ref-type="bibr" rid="b2-sensors-12-01529">2</xref>] several system level techniques, including modulation, Media Access Control (MAC) protocols and channel coding techniques are analyzed to achieve energy efficiency in WSNs.</p>
<p>In [<xref ref-type="bibr" rid="b3-sensors-12-01529">3</xref>] it is shown that in WSNs the transmission energy can be lowered accepting to receive error-affected data. In this case the receiver should embed error correction strategies to recover the original data. In particular, the amount of energy spent to perform error correction should be significantly lower than the energy saved at the transmitter side. As an example, in [<xref ref-type="bibr" rid="b4-sensors-12-01529">4</xref>,<xref ref-type="bibr" rid="b5-sensors-12-01529">5</xref>] an energy efficient error correction scheme for WSNs is proposed. In particular, in [<xref ref-type="bibr" rid="b5-sensors-12-01529">5</xref>] the physical layer of the IEEE 802.15.4 standard [<xref ref-type="bibr" rid="b6-sensors-12-01529">6</xref>] is augmented introducing interleaving and forward error correction. In [<xref ref-type="bibr" rid="b2-sensors-12-01529">2</xref>,<xref ref-type="bibr" rid="b3-sensors-12-01529">3</xref>] several classes of codes are investigated, including Reed–Solomon codes, convolutional codes, turbo codes and Low-Density-Parity-Check (LDPC) codes [<xref ref-type="bibr" rid="b7-sensors-12-01529">7</xref>,<xref ref-type="bibr" rid="b8-sensors-12-01529">8</xref>]. Experimental results in [<xref ref-type="bibr" rid="b3-sensors-12-01529">3</xref>] show that LDPC codes are good candidates for WSN applications as they feature a significant coding gain as compared with other codes. However, they consume about one order of magnitude more than simpler codes as the extended Hamming ones. Most of previous works proposing error correction codes for WSNs assume that networks contain at least two classes of nodes: sensing nodes and central nodes. Sensing nodes feature lower computational capabilities and available energy than central nodes. Thus, sensing nodes send coded information to a central node which performs the decoding operations. On the contrary, this work investigates homogeneous WSNs where each node can both transmit and receive coded information. A similar idea is proposed in [<xref ref-type="bibr" rid="b9-sensors-12-01529">9</xref>] with focus on turbo codes. In particular, in [<xref ref-type="bibr" rid="b9-sensors-12-01529">9</xref>] it is shown that the energy consumption of homogeneous WSN is reduced by about 70% resorting to turbo codes. In this work we show that even higher energy saving and smaller area can be achieved with LDPC codes. In particular, this work shows that small block length LDPC codes are adequate for typical throughput and data transmission requirements of WSNs.</p>
<p>The paper is structured as follows: Section 2 deals with LDPC coding and decoding algorithms whereas Section 3 concentrates on modeling the WSN environment. Section 4 details the proposed LDPC decoder architecture and Section 5 shows the experimental results. Finally, in Section 6 conclusions are drawn.</p></sec>
<sec>
<label>2.</label>
<title>Coding and Decoding Algorithms for LDPC Codes</title>
<p>LDPC codes are a class of linear block codes, characterized by a very sparse <italic>M</italic> × <italic>N</italic> parity-check matrix <bold>H</bold> where valid codewords <italic>x</italic> satisfy <bold>H</bold> · (<italic>x</italic>)′ = 0 and (·)′ represents the transposition operator. Each LDPC code can be represented as a bipartite graph, known as Tanner Graph [<xref ref-type="bibr" rid="b10-sensors-12-01529">10</xref>], containing two sets of nodes: Variable Nodes (VNs) and Check Nodes (CNs). VNs are associated to the <italic>N</italic> bits of the codeword, whereas CNs correspond to the <italic>M</italic> parity-check constraints. Edges in the graph correspond to ones in the <bold>H</bold> and most of decoding algorithms imply the exchange of information along the edges of the Tanner graph. The most common algorithm to decode LDPC codes is the <italic>Belief Propagation</italic> (BP) algorithm. The VNs receive the intrinsic information λ (likelihood functions <italic>i.e.</italic>, probabilities) from the channel and update it depending on the results of the parity check equations computed at the CNs. This process is iterated several times until either the maximum number of iterations is reached, or a convergence criterion is met. This criterion may be that a codeword was successfully decoded.</p>
<p>There are two main scheduling schemes for the BP [<xref ref-type="bibr" rid="b11-sensors-12-01529">11</xref>]: two-phase scheduling and layered scheduling [<xref ref-type="bibr" rid="b12-sensors-12-01529">12</xref>]. The latter nearly doubles the convergence speed as compared to two-phase scheduling. In a layered decoder, parity-check constraints are grouped in layers, each of which is associated to a component code. Then, layers are decoded in sequence by propagating extrinsic information from one layer to the following one [<xref ref-type="bibr" rid="b12-sensors-12-01529">12</xref>]. When all layers have been decoded, one iteration is complete and the overall process can be iteratively repeated up to the desired level of reliability.</p>
<p>Let <italic>S<sub>j</sub></italic> represent the Log-Likelihood-Ratio (LLR) of the bit in column <italic>j</italic> of <bold>H</bold>. Bit LLR <italic>S<sub>j</sub></italic> is initialized to the corresponding received soft value. Then, for each parity constraints <italic>m</italic> in a given layer, the following operations are executed:
<disp-formula id="FD1">
<label>(1)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mi mathvariant="italic">mj</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>old</mml:mtext>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">mj</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>old</mml:mtext>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD2">
<label>(2)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>A</mml:mi>
<mml:mi mathvariant="italic">mj</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:munder>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>∈</mml:mo>
<mml:msub>
<mml:mi>𝒩</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>≠</mml:mo>
<mml:mi>j</mml:mi></mml:mrow></mml:munder>
<mml:mrow>
<mml:mi mathvariant="normal">Ψ</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mi mathvariant="italic">mn</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD3">
<label>(3)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>s</mml:mi>
<mml:mi mathvariant="italic">mj</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:munder>
<mml:mo>∏</mml:mo>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>∈</mml:mo>
<mml:msub>
<mml:mi>𝒩</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>≠</mml:mo>
<mml:mi>j</mml:mi></mml:mrow></mml:munder>
<mml:mrow>
<mml:mtext>sgn</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mi mathvariant="italic">mn</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD4">
<label>(4)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">mj</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>new</mml:mtext>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>s</mml:mi>
<mml:mi mathvariant="italic">mj</mml:mi></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mi mathvariant="normal">Ψ</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>A</mml:mi>
<mml:mi mathvariant="italic">mj</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD5">
<label>(5)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>new</mml:mtext>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mi mathvariant="italic">mj</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">mj</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>new</mml:mtext>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:math></disp-formula>
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>old</mml:mtext>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> is the extrinsic information received from the previous layer and updated in <xref ref-type="disp-formula" rid="FD5">Equation (5)</xref> to be propagated to the succeeding layer. Term 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">mj</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>old</mml:mtext>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula>, pertaining to element (<italic>m,j</italic>) of <bold>H</bold>, is used to compute <xref ref-type="disp-formula" rid="FD1">Equation (1)</xref>; the same amount is then updated in <xref ref-type="disp-formula" rid="FD4">Equation (4)</xref>, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">mj</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>new</mml:mtext>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula>, and stored to be used again in the following iteration. In <xref ref-type="disp-formula" rid="FD2">Equations (2)</xref> and <xref ref-type="disp-formula" rid="FD3">(3)</xref> <italic>𝒩<sub>m</sub></italic> is the set of all bit indices that are connected to parity constraint <italic>m</italic>.</p>
<p>Unfortunately, the computation of <xref ref-type="disp-formula" rid="FD2">Equations (2)</xref> and <xref ref-type="disp-formula" rid="FD4">(4)</xref> is complex, as Ψ (·) is a non-linear function. According to [<xref ref-type="bibr" rid="b13-sensors-12-01529">13</xref>], <xref ref-type="disp-formula" rid="FD2">Equation (2)</xref> can be simplified with a limited Bit-Error-Rate (BER) performance loss as
<disp-formula id="FD6">
<label>(6)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">mj</mml:mi>
<mml:mi mathvariant="italic">new</mml:mi></mml:msubsup>
<mml:mo>≈</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:msup>
<mml:mi>s</mml:mi>
<mml:mo>′</mml:mo></mml:msup></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">mj</mml:mi></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:munder>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>∈</mml:mo>
<mml:msub>
<mml:mi>𝒩</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>\</mml:mo>
<mml:mi>j</mml:mi></mml:mrow></mml:munder>
<mml:mo stretchy="false">{</mml:mo>
<mml:mo stretchy="false">|</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Q</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:msub>
<mml:mo stretchy="false">|</mml:mo>
<mml:mo stretchy="false">}</mml:mo></mml:mrow></mml:math></disp-formula>usually referred to as <italic>normalized-min-sum</italic> approximation, where <italic>s′<sub>mj</sub></italic> = σ · <italic>s<sub>mj</sub></italic> and σ ≤ 1. For further details the reader can refer to [<xref ref-type="bibr" rid="b8-sensors-12-01529">8</xref>,<xref ref-type="bibr" rid="b10-sensors-12-01529">10</xref>].</p>
<p>A key concern in the design of high throughput LDPC code decoders comes from the communication structure that must be allocated to support message passing among VNs and CNs. Three approaches can be followed in the high level organization of the decoder:
<list list-type="order">
<list-item>
<p>Fully Parallel Architectures (FPA): separate processing units are allocated for each VN and CN and all messages are passed in parallel along dedicated routes.</p></list-item>
<list-item>
<p>Partially Parallel Architectures (PPA): more processing units work in parallel, serving all VNs and CNs within a number of cycles; suitable organization and hardware support is required to exchange messages.</p></list-item>
<list-item>
<p>Serial architectures (SA): a single processing instance is allocated for both VN and CN computations and nodes are served sequentially; messages are exchanged by means of a unique memory.</p></list-item></list></p>
<p>The first approach leads to very high throughput, large implementation cost and severe congestion problems in the routing of interconnects [<xref ref-type="bibr" rid="b14-sensors-12-01529">14</xref>]. For these reasons it is not adopted in practical implementations. The partially parallel architecture requires a large bandwidth between processing units and memories where messages are stored. Moreover, special attention is necessary to avoid collisions in the memory access [<xref ref-type="bibr" rid="b15-sensors-12-01529">15</xref>]. However, the partially parallel organization allows to precisely tune the wanted degree of parallelism with respect to the addressed throughput and it was proved to be the best solution for the implementation of efficient decoders [<xref ref-type="bibr" rid="b15-sensors-12-01529">15</xref>–<xref ref-type="bibr" rid="b19-sensors-12-01529">19</xref>]. The serial approach leads to low cost and low power implementations and it also offers a high level of flexibility with respect to the supported code. However serial architectures did not receive much attention, due to the fact that the sequential processing does not achieve large throughput. This solution is particularly suitable for software implementations on Digital Signal Processors [<xref ref-type="bibr" rid="b20-sensors-12-01529">20</xref>]. As throughput requirements in WSN applications are usually much lower than in wireless communications, the serial approach appears as the best solution to implement low cost and low energy decoding in a sensor node.</p></sec>
<sec>
<label>3.</label>
<title>Wireless Sensor Network Environment and Modeling</title>
<p>Required throughput and energy budget are important parameters to model the environment of a WSN. Although the throughput depends on the application, several recent works [<xref ref-type="bibr" rid="b21-sensors-12-01529">21</xref>–<xref ref-type="bibr" rid="b24-sensors-12-01529">24</xref>] as well as off-the-shelf products for the IEEE 802.15.4 standard target a throughput <italic>T</italic> of 250 kb/s. According to [<xref ref-type="bibr" rid="b3-sensors-12-01529">3</xref>] the amount of energy per bit saved due to the use of a correcting code (Δ<italic>E</italic>) can be expressed as
<disp-formula id="FD7">
<label>(7)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>E</mml:mi>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>E</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">TX</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>U</mml:mi></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>E</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">TX</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C</mml:mi></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mi mathvariant="italic">enc</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>E</mml:mi>
<mml:mi mathvariant="italic">dec</mml:mi></mml:msub></mml:mrow></mml:math></disp-formula>where <italic>E<sub>TX,U</sub></italic> and <italic>E<sub>TX,C</sub></italic> are the amounts of energy per information bit spent to transmit one bit in an uncoded and coded system respectively. <italic>E<sub>enc</sub></italic> and <italic>E<sub>dec</sub></italic> are the amounts of energy per bit spent by the LDPC encoder and decoder. Assuming a Binary-Phase-Shift-Keying (BPSK) modulation, each <italic>E</italic> term in <xref ref-type="disp-formula" rid="FD7">Equation (7)</xref> can be written as a function of the power consumption <italic>P</italic> and the throughput <italic>T</italic> of the corresponding task. For a fair comparison we assume that the throughput sustained by the transmitter is the same for both the uncoded and coded case. As a consequence, <xref ref-type="disp-formula" rid="FD7">Equation (7)</xref> can be rewritten as
<disp-formula id="FD8">
<label>(8)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>E</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">TX</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>U</mml:mi></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">TX</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C</mml:mi></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi mathvariant="italic">enc</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi mathvariant="italic">dec</mml:mi></mml:msub></mml:mrow>
<mml:mi>T</mml:mi></mml:mfrac></mml:mrow></mml:math></disp-formula></p>
<p>However, as shown in [<xref ref-type="bibr" rid="b25-sensors-12-01529">25</xref>] and [<xref ref-type="bibr" rid="b26-sensors-12-01529">26</xref>] the complexity and the power consumption of LDPC encoding is negligible with respect to decoding. As a consequence, in the following the <italic>P<sub>enc</sub></italic> term will be neglected. Moreover, as highlighted in [<xref ref-type="bibr" rid="b3-sensors-12-01529">3</xref>], each <italic>P<sub>TX</sub></italic> term can be written as a function of the path loss <italic>A</italic>(<italic>d</italic>) at a given distance <italic>d</italic>, the thermal noise <italic>N</italic><sub>0</sub> · <italic>B</italic> (where <italic>B</italic> is the signal bandwidth and <italic>N</italic><sub>0</sub> is the noise power spectral density), the Signal-to-Noise-Ratio (SNR) at the receiver and the receiver noise figure <italic>F</italic> :
<disp-formula id="FD9">
<label>(9)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi mathvariant="italic">TX</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>A</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mi>B</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mn>10</mml:mn></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>SNR</mml:mtext>
<mml:mo>+</mml:mo>
<mml:mi>F</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>/</mml:mo>
<mml:mn>10</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></disp-formula></p>
<p>According to [<xref ref-type="bibr" rid="b27-sensors-12-01529">27</xref>],
<disp-formula id="FD10">
<label>(10)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>A</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:mi>π</mml:mi></mml:mrow>
<mml:mi>λ</mml:mi></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>⋅</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mi>n</mml:mi></mml:msup></mml:mrow></mml:math></disp-formula>where λ is the wavelength of the corresponding carrier frequency <italic>f</italic> and <italic>n</italic> is the path loss exponent, where <italic>n</italic> = 2 and <italic>n</italic> = 4 are good approximations for free space and dense environment propagations respectively. Assuming the same <italic>A</italic>(<italic>d</italic>) and <italic>F</italic> values for both uncoded and coded systems, <xref ref-type="disp-formula" rid="FD8">Equation (8)</xref> can be rewritten as
<disp-formula id="FD11">
<label>(11)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>E</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>A</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mi>B</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mn>10</mml:mn></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mo>/</mml:mo>
<mml:mn>10</mml:mn></mml:mrow></mml:msup>
<mml:mo>⋅</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:msub>
<mml:mtext>SNR</mml:mtext>
<mml:mi>U</mml:mi></mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>10</mml:mn></mml:mrow></mml:msup>
<mml:mo>−</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:msub>
<mml:mtext>SNR</mml:mtext>
<mml:mi>C</mml:mi></mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>10</mml:mn></mml:mrow></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi mathvariant="italic">dec</mml:mi></mml:msub></mml:mrow>
<mml:mi>T</mml:mi></mml:mfrac></mml:mrow></mml:math></disp-formula>where SNR<italic><sub>U</sub></italic> and SNR<italic><sub>C</sub></italic> are the SNR at the receiver in the uncoded and coded systems respectively. Thus, given the curves representing the BER of one system as a function of the SNR, we obtain for each BER value the amounts SNR<italic><sub>U</sub></italic> and SNR<italic><sub>C</sub></italic> with SNR<italic><sub>G</sub></italic> = SNR<italic><sub>U</sub></italic> − SNR<italic><sub>C</sub></italic> representing the SNR gain achieved using error correction. So <xref ref-type="disp-formula" rid="FD11">Equation (11)</xref> can be rewritten as
<disp-formula id="FD12">
<label>(12)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>E</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>A</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mi>B</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mn>10</mml:mn></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mtext>SNR</mml:mtext></mml:mrow></mml:mrow>
<mml:mi>U</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:mi>F</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>/</mml:mo>
<mml:mn>10</mml:mn></mml:mrow></mml:msup>
<mml:mo>⋅</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mn>10</mml:mn></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mtext>SNR</mml:mtext></mml:mrow></mml:mrow>
<mml:mi>G</mml:mi></mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>10</mml:mn></mml:mrow></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi mathvariant="italic">dec</mml:mi></mml:msub></mml:mrow>
<mml:mi>T</mml:mi></mml:mfrac></mml:mrow></mml:math></disp-formula></p>
<p>The expression obtained in <xref ref-type="disp-formula" rid="FD12">Equation (12)</xref> will be used in Section 5 to show the effectiveness of the proposed LDPC architecture.</p></sec>
<sec sec-type="methods">
<label>4.</label>
<title>LDPC Decoder Architecture Design</title>
<p>LDPC codes are known to nearly achieve the Shannon limit when the block of data is very large (<italic>N</italic> → ∞) [<xref ref-type="bibr" rid="b10-sensors-12-01529">10</xref>]. However, in WSN applications the amount of bits exchanged by nodes is limited, leading to small <italic>N</italic> values. Nevertheless, in [<xref ref-type="bibr" rid="b28-sensors-12-01529">28</xref>,<xref ref-type="bibr" rid="b29-sensors-12-01529">29</xref>] it is shown that LDPC codes can achieve excellent performance even when <italic>N</italic> is small. In this work, we analyze the minimum <italic>N</italic> LDPC code from the IEEE 802.16e standard [<xref ref-type="bibr" rid="b30-sensors-12-01529">30</xref>], which corresponds to <italic>N</italic> = 576 coded bits and <italic>K</italic> = <italic>R · N</italic> = 288 uncoded bits (<italic>R</italic> = 0.5). Moreover, we considered the two best performing regular codes with <italic>N</italic> = 96 and <italic>N</italic> = 204 (<italic>K</italic> = 48, <italic>K</italic> = 102) respectively, taken from MacKay database [<xref ref-type="bibr" rid="b31-sensors-12-01529">31</xref>] and referred to as 96.33.966 and 204.33.484 (<italic>R</italic> = 0.5 for both).</p>
<p>In order to size the LDPC decoder architecture, finite precision analysis ought to be performed. Given that <italic>p<sub>S</sub></italic> and <italic>p<sub>R</sub></italic> are the number of bits to represent <italic>S<sub>j</sub></italic> and <italic>R<sub>mj</sub></italic> metrics respectively, as in <xref ref-type="disp-formula" rid="FD1">Equations (1</xref>–<xref ref-type="disp-formula" rid="FD6">6)</xref>, simulations have been carried out for <italic>p<sub>S</sub></italic> ∈ {5, 6} and <italic>p<sub>R</sub></italic> ∈ {3, 4}; normalized-min-sum approximation with σ = 0.875 has been employed. The performance of the three considered codes are shown in <xref ref-type="fig" rid="f1-sensors-12-01529">Figures 1</xref>–<xref ref-type="fig" rid="f3-sensors-12-01529">3</xref> both in the floating point and fixed point cases together with the performance of the corresponding uncoded system. Furthermore, it has been observed that targeting a BER of 10<sup>−4</sup> as in [<xref ref-type="bibr" rid="b3-sensors-12-01529">3</xref>,<xref ref-type="bibr" rid="b9-sensors-12-01529">9</xref>] and imposing a maximum of ten iterations (<italic>I</italic> = 10), the performance loss is negligible.</p>
<p>Due to the low throughput required, we assume that a fully serial processor architecture, which executes the decoding algorithm on one CN at the time, is a reasonable solution. In this case the throughput sustained by the architecture, defined as the number of decoded bits over the decoding time, is
<disp-formula id="FD13">
<label>(13)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>K</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi mathvariant="italic">clk</mml:mi></mml:msub></mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mtext>max</mml:mtext></mml:mrow></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:mi>D</mml:mi></mml:mrow></mml:mfrac>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>K</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi mathvariant="italic">clk</mml:mi></mml:msub></mml:mrow>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>R</mml:mi></mml:mfrac>
<mml:mo>⋅</mml:mo>
<mml:mi>K</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mtext>max</mml:mtext></mml:mrow></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:mi>D</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:math></disp-formula>where <italic>f<sub>clk</sub></italic> is the decoder clock frequency, <italic>I</italic> is the maximum number of iterations, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mtext>max</mml:mtext></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> is the maximum degree of a CN, <italic>i.e.</italic>, the maximum number of edges on a CN and <italic>D</italic> is the latency of the architecture. It is worth noting that <xref ref-type="disp-formula" rid="FD13">Equation (13)</xref> can be adapted to parallel and partially parallel architectures by substituting <italic>M</italic> with <italic>M/W</italic> where <italic>W</italic> is the number of rows (in <bold>H</bold>) processed in one clock cycle. The latency <italic>D</italic> in <xref ref-type="disp-formula" rid="FD13">Equation (13)</xref> can be minimized avoiding idle cycles between iterations, so that 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>D</mml:mi>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mtext>max</mml:mtext></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula>. Thus, the throughput can be approximated as
<disp-formula id="FD14">
<label>(14)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>K</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi mathvariant="italic">clk</mml:mi></mml:msub></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>R</mml:mi></mml:mfrac>
<mml:mo>⋅</mml:mo>
<mml:mi>K</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>⋅</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mtext>max</mml:mtext></mml:mrow></mml:msubsup></mml:mrow></mml:mfrac>
<mml:mo>≈</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi mathvariant="italic">clk</mml:mi></mml:msub></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:mi>R</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>⋅</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mtext>max</mml:mtext></mml:mrow></mml:msubsup></mml:mrow></mml:mfrac></mml:mrow></mml:math></disp-formula></p>
<p>As it can be observed, the throughput increases with <italic>R</italic> so low-rate codes are a conservative choice to achieve the target throughput. Moreover, if we fix <italic>N</italic> we observe that increasing the rate has the effect of reducing the BER performance of the code. Thus, we considered the <italic>N</italic> = 204, <italic>R</italic> = 0.5 code and tried to increase both <italic>N</italic> and <italic>R</italic>. From MacKay database [<xref ref-type="bibr" rid="b31-sensors-12-01529">31</xref>] we considered the following two high-rate codes where <italic>N</italic> &gt; 204: <italic>N</italic> = 273, <italic>R</italic> = 0.7 and <italic>N</italic> = 495, <italic>R</italic> = 0.87 referred to as 273.82.3.353 and 495.62.3.2915 respectively. As shown in <xref ref-type="fig" rid="f4-sensors-12-01529">Figure 4</xref> the BER performance of both codes is lower than the one obtained for <italic>N</italic> = 204, <italic>R</italic> = 0.5. Furthermore, codes with <italic>N</italic> &gt; 204 require a larger amount of memory than the <italic>N</italic> = 204, <italic>R</italic> = 0.5 code. From this analysis we infer that for the most complex code among the ones considered in this work, <italic>i.e.</italic>, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mtext>max</mml:mtext></mml:mrow></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mn>7</mml:mn></mml:mrow></mml:math></inline-formula> for the IEEE 802.16e <italic>N</italic> = 576, <italic>R</italic> = 0.5 code, and given the target throughput <italic>T</italic> = 250 kb/s and <italic>I</italic> = 10, <xref ref-type="disp-formula" rid="FD14">Equation (14)</xref> leads to <italic>f<sub>clk</sub></italic> ≥ 17.5 MHz. In this work we fix <italic>f<sub>clk</sub></italic> = 20 MHz as a conservative value. Thus, the proposed architecture, inspired by the data-path of the solution proposed in [<xref ref-type="bibr" rid="b32-sensors-12-01529">32</xref>], is made of four blocks as shown in the bottom part of <xref ref-type="fig" rid="f5-sensors-12-01529">Figure 5(a)</xref>: a processing element (PE) devoted to implement the computation described in <xref ref-type="disp-formula" rid="FD1">Equations (1</xref>–<xref ref-type="disp-formula" rid="FD6">6)</xref> with the normalized-min-sum approximation; <italic>S</italic> and <italic>R</italic> memories, where <italic>S<sub>j</sub></italic> and <italic>R<sub>mj</sub></italic> metrics are stored; and an address generator. As depicted in the upper part of <xref ref-type="fig" rid="f5-sensors-12-01529">Figure 5(a)</xref> the PE contains: (i) a subtractor to compute <italic>Q<sub>mj</sub></italic> <xref ref-type="disp-formula" rid="FD1">Equation (1)</xref>, (ii) a Minimum-Extractor-Unit (MEU), a compare block (CMP) and a multiplication by ±σ required to compute <italic>s<sub>mj</sub></italic> <xref ref-type="disp-formula" rid="FD3">Equation (3)</xref> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">mj</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>new</mml:mtext>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> with the normalized-min-sum approximation <xref ref-type="disp-formula" rid="FD6">Equation (6)</xref>, (iii) a synchronization FIFO with 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mtext>max</mml:mtext></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> locations, (iv) an adder to compute 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>new</mml:mtext>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> <xref ref-type="disp-formula" rid="FD5">Equation (5)</xref>.</p>
<p>The MEU, detailed in the upper part of <xref ref-type="fig" rid="f5-sensors-12-01529">Figure 5(b)</xref> is made of two parts. The first one computes −<italic>s<sub>mj</sub></italic> xoring the sign of <italic>Q<sub>mn</sub></italic> values, <italic>i.e.</italic>, the most significant bit (MSB) of <italic>Q<sub>mn</sub></italic>, and saving the result in a D-Flip-Flop (D-FF). The second part computes the absolute value of <italic>Q</italic><sub><italic>tj</italic></sub>. Then, since the min function in <xref ref-type="disp-formula" rid="FD6">Equation (6)</xref> is on <italic>𝒩<sub>m</sub>\j</italic>, the MEU finds the first two minimum values among the possible <italic>𝒩<sub>m</sub></italic> leaving to the CMP block to exclude the <italic>j</italic>-th one. The first two minimum values (<italic>M</italic><sub>1</sub> and <italic>M</italic><sub>2</sub>) are obtained by the means of two subtractors, three multiplexer and two registers that implement <xref ref-type="table" rid="t3-sensors-12-01529">Algorithm 1</xref>, where MPV is the Maximum Positive Value.</p>
<table-wrap id="t3-sensors-12-01529" position="anchor">
<label>Algorithm 1</label>
<caption>
<p>Algorithm to find the first two minimum values</p></caption>
<table frame="hsides" rules="groups">
<tbody>
<tr>
<td colspan="2" align="left" valign="top"><bold>Require:</bold> <italic>M</italic><sub>1</sub> ← MPV and <italic>M</italic><sub>2</sub> ← MPV</td></tr>
<tr>
<td align="left" valign="top">  1:</td>
<td align="left" valign="top"><bold>for</bold> <italic>t</italic> ∈ <italic>𝒩<sub>m</sub></italic> <bold>do</bold></td></tr>
<tr>
<td align="left" valign="top">  2:</td>
<td align="left" valign="top">  <bold>if</bold> |<italic>Q</italic><sub><italic>tj</italic></sub>| &lt; <italic>M</italic><sub>1</sub> <bold>then</bold></td></tr>
<tr>
<td align="left" valign="top">  3:</td>
<td align="left" valign="top">    <italic>M</italic><sub>2</sub> ← <italic>M</italic><sub>1</sub></td></tr>
<tr>
<td align="left" valign="top">  4:</td>
<td align="left" valign="top">    <italic>M</italic><sub>1</sub> ← |<italic>Q</italic><sub><italic>tj</italic></sub>|</td></tr>
<tr>
<td align="left" valign="top">  5:</td>
<td align="left" valign="top">  <bold>else if</bold> |<italic>Q</italic><sub><italic>tj</italic></sub>| &lt; <italic>M</italic><sub>2</sub> <bold>then</bold></td></tr>
<tr>
<td align="left" valign="top">  6:</td>
<td align="left" valign="top">    <italic>M</italic><sub>2</sub> ← |<italic>Q</italic><sub><italic>tj</italic></sub>|</td></tr>
<tr>
<td align="left" valign="top">  7:</td>
<td align="left" valign="top">  <bold>end if</bold></td></tr>
<tr>
<td align="left" valign="top">  8:</td>
<td align="left" valign="top"><bold>end for</bold></td></tr></tbody></table></table-wrap>
<p>The CMP block and the multiplication unit are shown in the bottom part of <xref ref-type="fig" rid="f5-sensors-12-01529">Figure 5(b)</xref>. The CMP block compares |<italic>Q<sub>mj</sub></italic>| with <italic>M</italic><sub>1</sub>. If they are equal, <italic>M</italic><sub>2</sub> is passed to the multiplication unit. The multiplication unit does not contain a real multiplier as σ = 0.875 = 1 − 1/8 requires only a subtractor and a hard-wired three-bit right shift (&gt;&gt; 3). In order to take into account the −<italic>s<sub>mj</sub></italic> term, two multiplexers, driven by −<italic>s<sub>mj</sub></italic> are added to obtain 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">mj</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>new</mml:mtext>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> as in <xref ref-type="disp-formula" rid="FD6">Equation (6)</xref>.</p></sec>
<sec sec-type="results">
<label>5.</label>
<title>Experimental Results</title>
<p>The proposed architecture has been described using VHDL language. The complete design flow, including synthesis, place and route has been performed with Synopsys Design Compiler and Cadence Encounter on a 90 nm CMOS standard cell technology with 9 levels of metal and supply voltage equal to 1 V. Post place and route simulations was run to obtain accurate capacitances and switching activities [<xref ref-type="bibr" rid="b33-sensors-12-01529">33</xref>], which are necessary for estimating the power consumption. Area and power consumption results for the three codes analyzed in Section 4 with <italic>p<sub>S</sub></italic> ∈ {5, 6}, <italic>p<sub>R</sub></italic> ∈ {3, 4} and <italic>f<sub>clk</sub></italic> = 20 MHz are shown in <xref ref-type="table" rid="t1-sensors-12-01529">Table 1</xref>.</p>
<p>It is worth noting that it is difficult to make a fair comparison of the proposed architectures with other solutions proposed in the literature because the target applications are different. However, for the sake of completeness in <xref ref-type="table" rid="t2-sensors-12-01529">Table 2</xref> several LDPC decoder architectures are compared with the most area demanding and power consuming solution among the proposed ones (<italic>N</italic> = 576, <italic>p<sub>S</sub></italic> = 6, <italic>p<sub>R</sub></italic> = 4, last row of <xref ref-type="table" rid="t1-sensors-12-01529">Table 1</xref>).</p>
<p>As it can be observed, most solutions proposed in the literature address partially parallel architectures designed for wireless communications and broadcasting applications. As a consequence, they are sized to obtain throughput of hundreds of Mb/s or even Gb/s with large blocks of data. On the contrary, the proposed serial architecture is specifically tailored for WSN applications where throughput and block length are much smaller, we assume here <italic>T</italic> ≤ 250 kb/s and <italic>N</italic> ≤ 576. Since the considered architectures have been designed on different technologies, we scale them all to the 90 nm technology node (<italic>A</italic><sub>90</sub>) for the sake of fairness. The scaling is obtained multiplying the area (fifth column in <xref ref-type="table" rid="t2-sensors-12-01529">Table 2</xref>) by (<italic>𝒡</italic>/90)<sup>2</sup>, where <italic>𝒡</italic> is the feature size shown in the fourth column of <xref ref-type="table" rid="t2-sensors-12-01529">Table 2</xref>. As expected, the proposed architecture is about one order of magnitude smaller than the other ones (fifth and sixth columns in <xref ref-type="table" rid="t2-sensors-12-01529">Table 2</xref>). On the contrary, partially parallel architectures consume less energy per bit and energy per bit per iteration than serial solutions (eleventh and twelfth columns in <xref ref-type="table" rid="t2-sensors-12-01529">Table 2</xref>). Assuming that area and energy consumption are the most important metrics to choose a decoder architecture for WSN applications, we introduce two figures of merit. The first one is the normalized area Φ<italic><sub>A</sub></italic>(<italic>k</italic>) = <italic>A</italic><sub>90</sub>(<italic>k</italic>)/ min<italic><sub>k</sub></italic>{<italic>A</italic><sub>90</sub>(<italic>k</italic>)} where <italic>A</italic><sub>90</sub>(<italic>k</italic>) is the area of the <italic>k</italic>-th architecture scaled to the 90 nm technology node. The second one is the normalized energy per bit per iteration Φ<italic><sub>E</sub></italic>(<italic>k</italic>) = <italic>E<sub>I</sub></italic>(<italic>k</italic>)/ min<italic><sub>k</sub></italic>{<italic>E<sub>I</sub></italic>(<italic>K</italic>)}. These two figures of merit represent how far an architecture is from the minimum area and minimum energy per bit per iterations ones respectively. Assuming that Φ<italic><sub>A</sub></italic> and Φ<italic><sub>E</sub></italic> are equally important, their product shows which architecture is more suited for WSN applications among the compared ones. As shown in the last column of <xref ref-type="table" rid="t2-sensors-12-01529">Table 2</xref> the proposed architecture is the one with minimum Φ = Φ<italic><sub>A</sub></italic> · Φ<italic><sub>E</sub></italic>. It is worth noting that as shown in the last two rows of <xref ref-type="table" rid="t2-sensors-12-01529">Table 2</xref> the proposed architecture shows better area and energy figures than the recently proposed turbo decoder architecture for WSN applications described in [<xref ref-type="bibr" rid="b9-sensors-12-01529">9</xref>].</p>
<p>As highlighted in [<xref ref-type="bibr" rid="b36-sensors-12-01529">36</xref>], several standards have been proposed for WSNs. It can be interestingly noted that most of them rely on the physical layer of the IEEE 802.15.4 standard. Thus, to evaluate the gain of the proposed architecture in a WSN environment we assume typical parameters taken from the IEEE 802.15.4 standard, namely <italic>f</italic> = 2.4 GHz and <italic>B</italic> = 80 MHz and we fix <italic>d</italic> = 50 m. Moreover, employing an ultra-low-power low-noise-amplifier, as the one proposed in [<xref ref-type="bibr" rid="b37-sensors-12-01529">37</xref>], we can fix <italic>F</italic> = 3.8 dB.</p>
<p>In the following we investigate the energy saving obtained for a path loss exponent equal to three and four respectively, to model either typical indoor environments and outdoor urban/suburban foliated areas [<xref ref-type="bibr" rid="b38-sensors-12-01529">38</xref>] or dense outdoor urban environments [<xref ref-type="bibr" rid="b39-sensors-12-01529">39</xref>]. From <xref ref-type="disp-formula" rid="FD12">Equation (12)</xref> the energy per bit required by an uncoded system ranges from tens of nJ/bit to few <italic>μ</italic>J/bit depending on the considered path loss exponent value. As a consequence, to obtain a more significant information we compute the percentage of saved energy per bit with respect to the energy per bit of an uncoded system (Δ<italic>E</italic>/<italic>E<sub>TX,U</sub></italic>) as a function of the BER. The percentage of saved energy as function of the BER for all the results shown in <xref ref-type="table" rid="t1-sensors-12-01529">Table 1</xref> is depicted in <xref ref-type="fig" rid="f6-sensors-12-01529">Figures 6</xref> and <xref ref-type="fig" rid="f7-sensors-12-01529">7</xref> for <italic>n</italic> = 3 and <italic>n</italic> = 4 respectively.</p>
<p>As it can be observed, both for <italic>n</italic> = 3 and <italic>n</italic> = 4 at a BER of 10<sup>−4</sup> the percentage of saved energy is more than the 50% and, in the best case, it achieves the 80%. It is worth pointing out that when a code reaches the error floor region, the percentage of saved energy is maximum and then it decreases. Thus, the best energy saving performance is achieved in the waterfall region of the code.</p></sec>
<sec sec-type="conclusions">
<label>6.</label>
<title>Conclusions</title>
<p>Notwithstanding continuous progresses in the capacity of batteries, minimizing the energy dissipation still is one of the key objectives in the design of most sensor devices. In particular, transmission energy is a relevant component of the overall energy budget of a wireless sensor. This paper explores the use of LDPC codes to protect sent information against channel errors, thus allowing for a lower transmission energy. The energy that is saved at the transmission side depends on the coding gain of the selected code: more powerful the code, larger the saved energy. However a decoder is required at the receiver side to reconstruct the original information. The node to node communication throughput is low in wireless sensor applications and this enables the design of a fully serial decoding architecture, with limited implementation complexity and extremely low dissipated power. The additional energy consumed by the decoder has been evaluated by means of logical synthesis and layout generation. Final results prove that percentage saving as high as 80% can be achieved with the coded approach with respect to the usual uncoded transmission.</p></sec></body>
<back>
<ref-list>
<title>References</title>
<ref id="b1-sensors-12-01529"><label>1.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Alkyldiz</surname><given-names>I.</given-names></name><name><surname>Su</surname><given-names>W.</given-names></name><name><surname>Sankarasubramaniam</surname><given-names>Y.</given-names></name><name><surname>Cayirci</surname><given-names>E.</given-names></name></person-group><article-title>Wireless sensor networks: A survey</article-title><source>Int. J. Comput. Telecommun. Netw</source><year>2008</year><volume>52</volume><fpage>292</fpage><lpage>422</lpage></citation></ref>
<ref id="b2-sensors-12-01529"><label>2.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Shih</surname><given-names>E.</given-names></name><name><surname>Cho</surname><given-names>S.</given-names></name><name><surname>Lee</surname><given-names>F.S.</given-names></name><name><surname>Calhoun</surname><given-names>B.H.</given-names></name><name><surname>Chandrakasan</surname><given-names>A.</given-names></name></person-group><article-title>Design considerations for energy-efficient radios in wireless microsensor networks</article-title><source>J. VLSI Signal Process</source><year>2004</year><volume>37</volume><fpage>77</fpage><lpage>94</lpage><pub-id pub-id-type="doi">10.1023/B:VLSI.0000017004.57230.91</pub-id></citation></ref>
<ref id="b3-sensors-12-01529"><label>3.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Howard</surname><given-names>S.L.</given-names></name><name><surname>Schlegel</surname><given-names>C.</given-names></name><name><surname>Iniewski</surname><given-names>K.</given-names></name></person-group><article-title>Error control coding in low-power wireless sensor networks: When is ECC energy-efficient?</article-title><source>EURASIP J. Wirel. Commun. Netw</source><year>2006</year><volume>2006</volume><fpage>1</fpage><lpage>14</lpage></citation></ref>
<ref id="b4-sensors-12-01529"><label>4.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Maunder</surname><given-names>R.G.</given-names></name><name><surname>Weddell</surname><given-names>A.S.</given-names></name><name><surname>Merrett</surname><given-names>G.V.</given-names></name><name><surname>Al-Hashimi</surname><given-names>B.M.</given-names></name><name><surname>Hanzo</surname><given-names>L.</given-names></name></person-group><article-title>Iterative decoding for redistributing energy consumption in wireless sensor networks</article-title><conf-name>Proceedings of the 17th IEEE International Conference on Computation, Communications and Networking</conf-name><conf-loc>Saint Paul, MN, USA</conf-loc><conf-date>3–7 August 2008</conf-date><fpage>1</fpage><lpage>6</lpage></citation></ref>
<ref id="b5-sensors-12-01529"><label>5.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Li</surname><given-names>L.</given-names></name><name><surname>Maunder</surname><given-names>R.G.</given-names></name><name><surname>Al-Hashimi</surname><given-names>B.M.</given-names></name><name><surname>Hanzo</surname><given-names>L.</given-names></name></person-group><article-title>An energy-efficient error correction scheme for IEEE 802.15.4 wireless sensor networks</article-title><source>IEEE Trans. Circuits Syst. II</source><year>2010</year><volume>57</volume><fpage>233</fpage><lpage>237</lpage><pub-id pub-id-type="doi">10.1109/TCSII.2010.2043379</pub-id></citation></ref>
<ref id="b6-sensors-12-01529"><label>6.</label><citation citation-type="other"><source>Wireless Medium Access Control (MAC) and Physical Layer (PHY) Specifications for Low-Rate Wireless Personal Area Networks (WPANs)</source><comment>IEEE Standard for Information technology, Telecommunications and information exchange between systems, Local and metropolitan area networks Specific requirements 2006; Part 15.4.</comment></citation></ref>
<ref id="b7-sensors-12-01529"><label>7.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Benedetto</surname><given-names>S.</given-names></name><name><surname>Biglieri</surname><given-names>E.</given-names></name></person-group><source>Principles of Digital Transmission: With Wireless Applications</source><publisher-name>Kluwer Academic</publisher-name><publisher-loc>Dordrecht, The Netherlands</publisher-loc><year>1999</year></citation></ref>
<ref id="b8-sensors-12-01529"><label>8.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Richardson</surname><given-names>T.</given-names></name><name><surname>Urbanke</surname><given-names>R.</given-names></name></person-group><source>Modern Coding Theory</source><publisher-name>Cambridge University Press</publisher-name><publisher-loc>Cambridge, UK</publisher-loc><year>2008</year></citation></ref>
<ref id="b9-sensors-12-01529"><label>9.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Li</surname><given-names>L.</given-names></name><name><surname>Maunder</surname><given-names>R.G.</given-names></name><name><surname>Al-Hashimi</surname><given-names>B.M.</given-names></name><name><surname>Hanzo</surname><given-names>L.</given-names></name></person-group><article-title>A low-complexity turbo decoder architecture for energy-efficient wireless sensor networks</article-title><source>IEEE Trans. VLSI Syst</source><year>2010</year><comment>in press.</comment></citation></ref>
<ref id="b10-sensors-12-01529"><label>10.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>MacKay</surname><given-names>D.J.C.</given-names></name></person-group><article-title>Good error-correcting codes based on very sparse matrices</article-title><source>IEEE Trans. Inf. Theory</source><year>1999</year><volume>45</volume><fpage>399</fpage><lpage>341</lpage><pub-id pub-id-type="doi">10.1109/18.748992</pub-id></citation></ref>
<ref id="b11-sensors-12-01529"><label>11.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Guilloud</surname><given-names>F.</given-names></name><name><surname>Boutillon</surname><given-names>E.</given-names></name><name><surname>Tousch</surname><given-names>J.</given-names></name><name><surname>Danger</surname><given-names>J.L.</given-names></name></person-group><article-title>Generic description and synthesis of LDPC decoders</article-title><source>IEEE Trans. Commun</source><year>2007</year><volume>55</volume><fpage>2084</fpage><lpage>2091</lpage><pub-id pub-id-type="doi">10.1109/TCOMM.2007.908517</pub-id></citation></ref>
<ref id="b12-sensors-12-01529"><label>12.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Hocevar</surname><given-names>D.E.</given-names></name></person-group><article-title>A reduced complexity decoder architecture via layered decoding of LDPC codes</article-title><conf-name>Proceedings of the IEEE Workshop on Signal Processing Systems (SIPS’ 04)</conf-name><conf-loc>Austin, TX, USA</conf-loc><conf-date>13–15 October 2004</conf-date><fpage>107</fpage><lpage>112</lpage></citation></ref>
<ref id="b13-sensors-12-01529"><label>13.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Chen</surname><given-names>J.</given-names></name><name><surname>Dholakia</surname><given-names>A.</given-names></name><name><surname>Eleftheriou</surname><given-names>E.</given-names></name><name><surname>Fossorier</surname><given-names>M.</given-names></name><name><surname>Hu</surname><given-names>X.Y.</given-names></name></person-group><article-title>Reduced-complexity decoding of LDPC codes</article-title><source>IEEE Trans. Commun</source><year>2005</year><volume>53</volume><fpage>1288</fpage><lpage>1299</lpage><pub-id pub-id-type="doi">10.1109/TCOMM.2005.852852</pub-id></citation></ref>
<ref id="b14-sensors-12-01529"><label>14.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Banksby</surname><given-names>A.J.</given-names></name><name><surname>Howland</surname><given-names>C.J.</given-names></name></person-group><article-title>A 690-mW 1-Gb/s 1024-b, rate-1/2 low-density parity-check code decoder</article-title><source>IEEE J. Solid-State Circuits</source><year>2002</year><volume>37</volume><fpage>404</fpage><lpage>412</lpage><pub-id pub-id-type="doi">10.1109/4.987093</pub-id></citation></ref>
<ref id="b15-sensors-12-01529"><label>15.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Quaglio</surname><given-names>F.</given-names></name><name><surname>Vacca</surname><given-names>F.</given-names></name><name><surname>Castellano</surname><given-names>C.</given-names></name><name><surname>Tarable</surname><given-names>A.</given-names></name><name><surname>Masera</surname><given-names>G.</given-names></name></person-group><article-title>Interconnection framework for high-throughput, flexible LDPC decoders</article-title><conf-name>Proceedings of the Design, Automation and Test in Europe (DATE ’06)</conf-name><conf-loc>Munich, Germany</conf-loc><conf-date>6–10 March 2006</conf-date><fpage>1</fpage><lpage>6</lpage></citation></ref>
<ref id="b16-sensors-12-01529"><label>16.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Moussa</surname><given-names>H.</given-names></name><name><surname>Baghdadi</surname><given-names>A.</given-names></name><name><surname>Jezequel</surname><given-names>M.</given-names></name></person-group><article-title>Binary de bruijn on-chip network for a flexible multiprocessor LDPC decoder</article-title><conf-name>Proceedings of the 45th Annual Design Automation Conference</conf-name><conf-loc>Anaheim, CA, USA</conf-loc><conf-date>9–13 June 2008</conf-date><fpage>429</fpage><lpage>434</lpage></citation></ref>
<ref id="b17-sensors-12-01529"><label>17.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Shih</surname><given-names>X.Y.</given-names></name><name><surname>Zhan</surname><given-names>C.Z.</given-names></name><name><surname>Wu</surname><given-names>A.Y.</given-names></name></person-group><article-title>A 7.39 mm<sup>2</sup> 76 mW (1944, 972) LDPC Decoder Chip for IEEE 802.11n Applications</article-title><conf-name>Proceedings of the IEEE Asian Solid-State Circuits Conference (A-SSCC ’08)</conf-name><conf-loc>Fukuoka, Japan</conf-loc><conf-date>3–5 November 2008</conf-date><fpage>301</fpage><lpage>304</lpage></citation></ref>
<ref id="b18-sensors-12-01529"><label>18.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Muller</surname><given-names>S.</given-names></name><name><surname>Schreger</surname><given-names>M.</given-names></name><name><surname>Kabutz</surname><given-names>M.</given-names></name><name><surname>Alles</surname><given-names>M.</given-names></name><name><surname>Kienle</surname><given-names>F.</given-names></name><name><surname>Wehn</surname><given-names>N.</given-names></name></person-group><article-title>A novel LDPC decoder for DVB-S2 IP</article-title><conf-name>Proceedings of the Design, Automation and Test in Europe Conference and Exhibition (DATE ’09)</conf-name><conf-loc>Nice, France</conf-loc><conf-date>20–24 April 2009</conf-date><fpage>1308</fpage><lpage>1313</lpage></citation></ref>
<ref id="b19-sensors-12-01529"><label>19.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Xiang</surname><given-names>B.</given-names></name><name><surname>Bao</surname><given-names>D.</given-names></name><name><surname>Huang</surname><given-names>S.</given-names></name><name><surname>Zeng</surname><given-names>X.</given-names></name></person-group><article-title>An 847-955 Mb/s 342-397 mW dual-path fully-overlapped QC-LDPC decoder for WiMAX system in 0.13 μm CMOS</article-title><source>IEEE J. Solid-State Circuits</source><year>2011</year><volume>46</volume><fpage>1416</fpage><lpage>1432</lpage><pub-id pub-id-type="doi">10.1109/JSSC.2011.2125030</pub-id></citation></ref>
<ref id="b20-sensors-12-01529"><label>20.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Lechner</surname><given-names>G.</given-names></name><name><surname>Sayir</surname><given-names>J.</given-names></name><name><surname>Rupp</surname><given-names>M.</given-names></name></person-group><article-title>Efficient DSP implementation of an LDPC decoder</article-title><conf-name>Proceedings of the IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP ’04)</conf-name><conf-loc>Montreal, QC, Canada</conf-loc><conf-date>17–21 May 2004</conf-date><fpage>665</fpage><lpage>668</lpage></citation></ref>
<ref id="b21-sensors-12-01529"><label>21.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Hanzalek</surname><given-names>Z.</given-names></name><name><surname>Jurcik</surname><given-names>P.</given-names></name></person-group><article-title>Energy efficient scheduling for cluster-tree wireless sensor networks with time-bounded data flows: Application to IEEE 802.15.4/ZigBee</article-title><source>IEEE Trans. Ind. Inf</source><year>2010</year><volume>6</volume><fpage>438</fpage><lpage>450</lpage><pub-id pub-id-type="doi">10.1109/TII.2010.2050144</pub-id></citation></ref>
<ref id="b22-sensors-12-01529"><label>22.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Chen</surname><given-names>J.</given-names></name><name><surname>Yu</surname><given-names>Q.</given-names></name><name><surname>Zhang</surname><given-names>Y.</given-names></name><name><surname>Chen</surname><given-names>H.H.</given-names></name><name><surname>Sun</surname><given-names>Y.</given-names></name></person-group><article-title>Feedback-based clock synchronization in wireless sensor networks: A control theoretic approach</article-title><source>IEEE Trans. Veh. Technol</source><year>2010</year><volume>59</volume><fpage>2963</fpage><lpage>2973</lpage><pub-id pub-id-type="doi">10.1109/TVT.2010.2049869</pub-id></citation></ref>
<ref id="b23-sensors-12-01529"><label>23.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Yoo</surname><given-names>S.</given-names></name><name><surname>Chong</surname><given-names>P.K.</given-names></name><name><surname>Kim</surname><given-names>D.</given-names></name><name><surname>Doh</surname><given-names>Y.</given-names></name><name><surname>Pham</surname><given-names>M.L.</given-names></name><name><surname>Choi</surname><given-names>E.</given-names></name><name><surname>Huh</surname><given-names>J.</given-names></name></person-group><article-title>Guaranteeing real-time services for industrial wireless sensor networks with IEEE 802.15.4</article-title><source>IEEE Trans. Ind. Electron</source><year>2010</year><volume>57</volume><fpage>3868</fpage><lpage>3876</lpage><pub-id pub-id-type="doi">10.1109/TIE.2010.2040630</pub-id></citation></ref>
<ref id="b24-sensors-12-01529"><label>24.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Chen</surname><given-names>L.</given-names></name><name><surname>Carpenter</surname><given-names>G.</given-names></name><name><surname>Greenberg</surname><given-names>S.</given-names></name><name><surname>Frolik</surname><given-names>J.</given-names></name><name><surname>Wang</surname><given-names>X.S.</given-names></name></person-group><article-title>An implementation of decentralized consensus building in sensor networks</article-title><source>IEEE Sens. J</source><year>2011</year><volume>11</volume><fpage>667</fpage><lpage>675</lpage><pub-id pub-id-type="doi">10.1109/JSEN.2010.2060189</pub-id></citation></ref>
<ref id="b25-sensors-12-01529"><label>25.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Lee</surname><given-names>C.</given-names></name></person-group><article-title>Design of encoder and decoder for LDPC codes using hybrid H-matrix</article-title><source>ETRI J</source><year>2005</year><volume>27</volume><fpage>557</fpage><lpage>562</lpage><pub-id pub-id-type="doi">10.4218/etrij.05.0905.0015</pub-id></citation></ref>
<ref id="b26-sensors-12-01529"><label>26.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Xie</surname><given-names>N.</given-names></name><name><surname>Dong</surname><given-names>G.</given-names></name><name><surname>Zhang</surname><given-names>T.</given-names></name></person-group><article-title>Using lossless data compression in data storage systems: Not for saving space</article-title><source>IEEE Trans. Comput</source><year>2011</year><volume>60</volume><fpage>335</fpage><lpage>345</lpage><pub-id pub-id-type="doi">10.1109/TC.2010.150</pub-id></citation></ref>
<ref id="b27-sensors-12-01529"><label>27.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Rappaport</surname><given-names>T.S.</given-names></name></person-group><source>Wireless Communications: Principles and Practice</source><publisher-name>Prentice Hall</publisher-name><publisher-loc>Upper Saddle River, NJ, USA</publisher-loc><year>1996</year></citation></ref>
<ref id="b28-sensors-12-01529"><label>28.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Sorokine</surname><given-names>V.</given-names></name><name><surname>Kschischang</surname><given-names>F.R.</given-names></name><name><surname>Pasupathy</surname><given-names>S.</given-names></name></person-group><article-title>Gallager codes for CDMA applications—Part I: Generalizations, constructions and performance bounds</article-title><source>IEEE Trans. Commun</source><year>2000</year><volume>48</volume><fpage>1660</fpage><lpage>1668</lpage></citation></ref>
<ref id="b29-sensors-12-01529"><label>29.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Sorokine</surname><given-names>V.</given-names></name><name><surname>Kschischang</surname><given-names>F.R.</given-names></name><name><surname>Pasupathy</surname><given-names>S.</given-names></name></person-group><article-title>Gallager codes for CDMA applications—Part II: Implementations, complexity and system capacity</article-title><source>IEEE Trans. Commun</source><year>2000</year><volume>48</volume><fpage>1818</fpage><lpage>1828</lpage></citation></ref>
<ref id="b30-sensors-12-01529"><label>30.</label><citation citation-type="book"><source>Air Interface for Fixed and Mobile Broadband Wireless Access Systems</source><publisher-name>The Institute of Electrical and Electronics Engineers Inc</publisher-name><publisher-loc>New York, NY, USA</publisher-loc><month>September</month><year>2000</year><comment>IEEE P802.16e/D12.</comment></citation></ref>
<ref id="b31-sensors-12-01529"><label>31.</label><citation citation-type="web"><person-group person-group-type="author"><collab>MacKay LDPC codes database</collab></person-group><year>2003</year><comment>Available online: <ext-link xlink:href="http://www.inference.phy.cam.ac.uk/mackay/codes/data.html" ext-link-type="uri">http://www.inference.phy.cam.ac.uk/mackay/codes/data.html</ext-link> (accessed on 29 January 2012).</comment></citation></ref>
<ref id="b32-sensors-12-01529"><label>32.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Dielissen</surname><given-names>J.</given-names></name><name><surname>Hekstra</surname><given-names>A.</given-names></name><name><surname>Berg</surname><given-names>V.</given-names></name></person-group><article-title>Low cost LDPC decoder for DVB-S2</article-title><conf-name>Proceedings of the Design, Automation and Test in Europe Conference and Exhibition (DATE ’06)</conf-name><conf-loc>Munich, Germany</conf-loc><conf-date>6–10 March 2006</conf-date><fpage>1</fpage><lpage>6</lpage></citation></ref>
<ref id="b33-sensors-12-01529"><label>33.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Pulimeno</surname><given-names>A.</given-names></name><name><surname>Graziano</surname><given-names>M.</given-names></name><name><surname>Piccinini</surname><given-names>G.</given-names></name></person-group><article-title>UDSM trends comparison: From technology roadmap to UltraSparc Niagara2</article-title><source>IEEE Trans. VLSI syst</source><year>2011</year><comment>in press.</comment></citation></ref>
<ref id="b34-sensors-12-01529"><label>34.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Shih</surname><given-names>X.Y.</given-names></name><name><surname>Zhan</surname><given-names>C.Z.</given-names></name><name><surname>Wu</surname><given-names>A.Y.</given-names></name></person-group><article-title>A 7.39 mm<sup>2</sup> 76 mW LDPC decoder chip for IEEE 802.11n applications</article-title><conf-name>Proceedings of the IEEE Asian Solid-State Circuits Conference</conf-name><conf-loc>Fukuoka, Japan</conf-loc><conf-date>3–5 November 2008</conf-date><fpage>301</fpage><lpage>304</lpage></citation></ref>
<ref id="b35-sensors-12-01529"><label>35.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Zhang</surname><given-names>Z.</given-names></name><name><surname>Anantharam</surname><given-names>V.</given-names></name><name><surname>Wainwright</surname><given-names>M.J.</given-names></name><name><surname>Nikolic</surname><given-names>B.</given-names></name></person-group><article-title>An efficient 10G BASE-T ethernet LDPC decoder design with low error floors</article-title><source>IEEE J. Solid-State Circuits</source><year>2010</year><volume>45</volume><fpage>843</fpage><lpage>855</lpage><pub-id pub-id-type="doi">10.1109/JSSC.2010.2042255</pub-id></citation></ref>
<ref id="b36-sensors-12-01529"><label>36.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Wagner</surname><given-names>R.S.</given-names></name></person-group><article-title>Standards-based wireless sensor networking protocols for spaceflight applications</article-title><conf-name>Proceedings of the IEEE Aerospace Conference</conf-name><conf-loc>Dallas, MT, USA</conf-loc><conf-date>6–13 March 2010</conf-date><fpage>1</fpage><lpage>7</lpage></citation></ref>
<ref id="b37-sensors-12-01529"><label>37.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Taris</surname><given-names>T.</given-names></name><name><surname>Mabrouki</surname><given-names>A.</given-names></name><name><surname>Kraimia</surname><given-names>H.</given-names></name><name><surname>Deval</surname><given-names>Y.</given-names></name><name><surname>Begueret</surname><given-names>J.</given-names></name></person-group><article-title>Reconfigurable ultra low power LNA for 2.4GHz wireless sensor networks</article-title><conf-name>Proceedings of the IEEE International Conference on Electronics, Circuits and Systems</conf-name><conf-loc>Athens, Greece</conf-loc><conf-date>12–15 December 2010</conf-date><fpage>74</fpage><lpage>77</lpage></citation></ref>
<ref id="b38-sensors-12-01529"><label>38.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Sydor</surname><given-names>J.</given-names></name></person-group><article-title>True broadband for the countryside</article-title><source>IEEE Commun. Eng</source><year>2004</year><volume>2</volume><fpage>32</fpage><lpage>36</lpage></citation></ref>
<ref id="b39-sensors-12-01529"><label>39.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Aguiar</surname><given-names>A.</given-names></name><name><surname>Gross</surname><given-names>J.</given-names></name></person-group><source>Wireless Channel Models</source><comment>Technical Report TKN-03-007,</comment><publisher-name>Telecommunications Networks Group, Technische Universitat Berlin</publisher-name><publisher-loc>Berlin, Germany</publisher-loc><year>2003</year></citation></ref></ref-list>
<sec sec-type="display-objects">
<title>Figures and Tables</title>
<fig id="f1-sensors-12-01529" position="float">
<label>Figure 1.</label>
<caption>
<p>BER performance of the <italic>N</italic> = 96 LDPC code.</p></caption>
<graphic xlink:href="sensors-12-01529f1.gif"/></fig>
<fig id="f2-sensors-12-01529" position="float">
<label>Figure 2.</label>
<caption>
<p>BER performance of the <italic>N</italic> = 204 LDPC code.</p></caption>
<graphic xlink:href="sensors-12-01529f2.gif"/></fig>
<fig id="f3-sensors-12-01529" position="float">
<label>Figure 3.</label>
<caption>
<p>BER performance of the <italic>N</italic> = 576 LDPC code.</p></caption>
<graphic xlink:href="sensors-12-01529f3.gif"/></fig>
<fig id="f4-sensors-12-01529" position="float">
<label>Figure 4.</label>
<caption>
<p>BER performance of the (<italic>N</italic> = 204, <italic>R</italic> = 0.5), (<italic>N</italic> = 273, <italic>R</italic> = 0.7) and (<italic>N</italic> = 495, <italic>R</italic> = 0.87) LDPC codes.</p></caption>
<graphic xlink:href="sensors-12-01529f4.gif"/></fig>
<fig id="f5-sensors-12-01529" position="float">
<label>Figure 5.</label>
<caption>
<p>Proposed decoder architecture: (<bold>a</bold>) general structure and PE detail; (<bold>b</bold>) MEU, CMP block and multiplication unit block schemes.</p></caption>
<graphic xlink:href="sensors-12-01529f5.gif"/></fig>
<fig id="f6-sensors-12-01529" position="float">
<label>Figure 6.</label>
<caption>
<p>Percentage of energy per bit saved as a function of the BER for <italic>n</italic> = 3.</p></caption>
<graphic xlink:href="sensors-12-01529f6.gif"/></fig>
<fig id="f7-sensors-12-01529" position="float">
<label>Figure 7.</label>
<caption>
<p>Percentage of energy per bit saved as a function of the BER for <italic>n</italic> = 4.</p></caption>
<graphic xlink:href="sensors-12-01529f7.gif"/></fig>
<table-wrap id="t1-sensors-12-01529" position="float">
<label>Table 1.</label>
<caption>
<p>Post place and route area and power consumption of the proposed architecture.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="middle"><bold><italic>N</italic></bold></th>
<th align="center" valign="middle"><bold><italic>p</italic></bold><italic><sub>S</sub></italic></th>
<th align="center" valign="middle"><bold><italic>p</italic></bold><italic><sub>R</sub></italic></th>
<th align="center" valign="middle"><bold>Area [<italic>μ</italic>m<sup>2</sup>]</bold></th>
<th align="center" valign="middle"><bold><italic>P</italic></bold><italic><sub>dec</sub></italic> <bold>[<italic>μ</italic>W]</bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top">96</td>
<td align="center" valign="top">5</td>
<td align="center" valign="top">3</td>
<td align="right" valign="top">66,046</td>
<td align="center" valign="top">359</td></tr>
<tr>
<td align="center" valign="top">96</td>
<td align="center" valign="top">5</td>
<td align="center" valign="top">4</td>
<td align="right" valign="top">67,994</td>
<td align="center" valign="top">373</td></tr>
<tr>
<td align="center" valign="top">96</td>
<td align="center" valign="top">6</td>
<td align="center" valign="top">3</td>
<td align="right" valign="top">67,752</td>
<td align="center" valign="top">363</td></tr>
<tr>
<td align="center" valign="top">96</td>
<td align="center" valign="top">6</td>
<td align="center" valign="top">4</td>
<td align="right" valign="top">69,720</td>
<td align="center" valign="top">379</td></tr>
<tr>
<td align="center" valign="top">204</td>
<td align="center" valign="top">5</td>
<td align="center" valign="top">3</td>
<td align="right" valign="top">86,165</td>
<td align="center" valign="top">445</td></tr>
<tr>
<td align="center" valign="top">204</td>
<td align="center" valign="top">5</td>
<td align="center" valign="top">4</td>
<td align="right" valign="top">88,670</td>
<td align="center" valign="top">458</td></tr>
<tr>
<td align="center" valign="top">204</td>
<td align="center" valign="top">6</td>
<td align="center" valign="top">3</td>
<td align="right" valign="top">88,283</td>
<td align="center" valign="top">448</td></tr>
<tr>
<td align="center" valign="top">204</td>
<td align="center" valign="top">6</td>
<td align="center" valign="top">4</td>
<td align="right" valign="top">90,613</td>
<td align="center" valign="top">459</td></tr>
<tr>
<td align="center" valign="top">576</td>
<td align="center" valign="top">5</td>
<td align="center" valign="top">3</td>
<td align="right" valign="top">125,257</td>
<td align="center" valign="top">648</td></tr>
<tr>
<td align="center" valign="top">576</td>
<td align="center" valign="top">5</td>
<td align="center" valign="top">4</td>
<td align="right" valign="top">131,681</td>
<td align="center" valign="top">670</td></tr>
<tr>
<td align="center" valign="top">576</td>
<td align="center" valign="top">6</td>
<td align="center" valign="top">3</td>
<td align="right" valign="top">128,146</td>
<td align="center" valign="top">663</td></tr>
<tr>
<td align="center" valign="top">576</td>
<td align="center" valign="top">6</td>
<td align="center" valign="top">4</td>
<td align="right" valign="top">133,934</td>
<td align="center" valign="top">674</td></tr></tbody></table></table-wrap>
<table-wrap id="t2-sensors-12-01529" position="float">
<label>Table 2.</label>
<caption>
<p>Comparison of different architectures.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="middle"><bold>Reference</bold></th>
<th align="center" valign="middle"><bold>Arch.</bold></th>
<th align="center" valign="middle"><bold><italic>N</italic></bold></th>
<th align="center" valign="middle"><bold>Tech. [nm]</bold></th>
<th align="center" valign="middle"><bold>Area [mm</bold><sup>2</sup><bold>]</bold></th>
<th align="center" valign="middle"><bold><italic>A</italic><sub>90</sub> [mm<sup>2</sup>]</bold></th>
<th align="center" valign="middle"><bold><italic>f</italic></bold><italic><sub>clk</sub></italic> <bold>[MHz]</bold></th>
<th align="center" valign="middle"><bold><italic>T</italic> [Mb/s]</bold></th>
<th align="center" valign="middle"><bold><italic>P</italic></bold><italic><sub>dec</sub></italic> <bold>[mW]</bold></th>
<th align="center" valign="middle"><bold><italic>I</italic></bold></th>
<th align="center" valign="middle"><bold><italic>E</italic> [pJ/b]</bold></th>
<th align="center" valign="middle"><bold><italic>E<sub>I</sub></italic> [pJ/b/it]</bold></th>
<th align="center" valign="middle"><bold>Φ</bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top">[<xref ref-type="bibr" rid="b14-sensors-12-01529">14</xref>]</td>
<td align="center" valign="top">FPA</td>
<td align="center" valign="top">1,024</td>
<td align="center" valign="top">160</td>
<td align="center" valign="top">52.5</td>
<td align="center" valign="top">16.6</td>
<td align="center" valign="top">64</td>
<td align="center" valign="top">1,000</td>
<td align="center" valign="top">690</td>
<td align="center" valign="top">64</td>
<td align="center" valign="top">690</td>
<td align="center" valign="top">11</td>
<td align="center" valign="top">404</td></tr>
<tr>
<td align="center" valign="top">[<xref ref-type="bibr" rid="b18-sensors-12-01529">18</xref>]</td>
<td align="center" valign="top">PPA</td>
<td align="center" valign="top">64,800</td>
<td align="center" valign="top">90</td>
<td align="center" valign="top">13.1</td>
<td align="center" valign="top">13.1</td>
<td align="center" valign="top">270</td>
<td align="center" valign="top">180</td>
<td align="center" valign="top">853</td>
<td align="center" valign="top">-</td>
<td align="center" valign="top">4,740</td>
<td align="center" valign="top">-</td>
<td align="center" valign="top">-</td></tr>
<tr>
<td align="center" valign="top">[<xref ref-type="bibr" rid="b19-sensors-12-01529">19</xref>]</td>
<td align="center" valign="top">PPA</td>
<td align="center" valign="top">2,304</td>
<td align="center" valign="top">130</td>
<td align="center" valign="top">4.8</td>
<td align="center" valign="top">2.3</td>
<td align="center" valign="top">214</td>
<td align="center" valign="top">955</td>
<td align="center" valign="top">397</td>
<td align="center" valign="top">10</td>
<td align="center" valign="top">416</td>
<td align="center" valign="top">42</td>
<td align="center" valign="top">141</td></tr>
<tr>
<td align="center" valign="top">[<xref ref-type="bibr" rid="b32-sensors-12-01529">32</xref>]</td>
<td align="center" valign="top">PPA</td>
<td align="center" valign="top">64,800</td>
<td align="center" valign="top">90</td>
<td align="center" valign="top">4.1</td>
<td align="center" valign="top">4.1</td>
<td align="center" valign="top">300</td>
<td align="center" valign="top">90</td>
<td align="center" valign="top">-</td>
<td align="center" valign="top">30</td>
<td align="center" valign="top">-</td>
<td align="center" valign="top">-</td>
<td align="center" valign="top">-</td></tr>
<tr>
<td align="center" valign="top">[<xref ref-type="bibr" rid="b34-sensors-12-01529">34</xref>]</td>
<td align="center" valign="top">PPA</td>
<td align="center" valign="top">1,944</td>
<td align="center" valign="top">130</td>
<td align="center" valign="top">7.4</td>
<td align="center" valign="top">3.5</td>
<td align="center" valign="top">111</td>
<td align="center" valign="top">250</td>
<td align="center" valign="top">76</td>
<td align="center" valign="top">8</td>
<td align="center" valign="top">304</td>
<td align="center" valign="top">38</td>
<td align="center" valign="top">197</td></tr>
<tr>
<td align="center" valign="top">[<xref ref-type="bibr" rid="b35-sensors-12-01529">35</xref>]</td>
<td align="center" valign="top">PPA</td>
<td align="center" valign="top">2,048</td>
<td align="center" valign="top">65</td>
<td align="center" valign="top">7.15</td>
<td align="center" valign="top">13.7</td>
<td align="center" valign="top">300</td>
<td align="center" valign="top">6,680</td>
<td align="center" valign="top">1,030</td>
<td align="center" valign="top">8</td>
<td align="center" valign="top">154</td>
<td align="center" valign="top">19</td>
<td align="center" valign="top">95</td></tr>
<tr>
<td colspan="13" align="center" valign="top">
<hr/></td></tr>
<tr>
<td align="center" valign="top">[<xref ref-type="bibr" rid="b9-sensors-12-01529">9</xref>]</td>
<td align="center" valign="top">SA <xref ref-type="table-fn" rid="tfn1-sensors-12-01529"><sup>(a)</sup></xref></td>
<td align="center" valign="top">6,144</td>
<td align="center" valign="top">90</td>
<td align="center" valign="top">0.35</td>
<td align="center" valign="top">0.35</td>
<td align="center" valign="top">333</td>
<td align="center" valign="top">1.03</td>
<td align="center" valign="top">4.17</td>
<td align="center" valign="top">5</td>
<td align="center" valign="top">4,049</td>
<td align="center" valign="top">810</td>
<td align="center" valign="top">198</td></tr>
<tr>
<td align="center" valign="top">This</td>
<td align="center" valign="top">SA</td>
<td align="center" valign="top">576</td>
<td align="center" valign="top">90</td>
<td align="center" valign="top">0.13</td>
<td align="center" valign="top">0.13</td>
<td align="center" valign="top">20</td>
<td align="center" valign="top">0.25</td>
<td align="center" valign="top">0.67</td>
<td align="center" valign="top">10</td>
<td align="center" valign="top">2,696</td>
<td align="center" valign="top">270</td>
<td align="center" valign="top">25</td></tr></tbody></table>
<table-wrap-foot><fn id="tfn1-sensors-12-01529">
<label>(a)</label>
<p>Serial turbo decoder architecture for WSN applications.</p></fn></table-wrap-foot></table-wrap></sec></back></article>
