<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>dspLog</title>
	
	<link>http://www.dsplog.com</link>
	<description>Signal Processing for Communication</description>
	<lastBuildDate>Wed, 21 Oct 2009 00:56:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-nc/2.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/dsplogdotcom" type="application/rss+xml" /><feedburner:emailServiceId>dsplogdotcom</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>dspLog turns two! Happy Birthday!</title>
		<link>http://feedproxy.google.com/~r/dsplogdotcom/~3/J3ykDR7HVYo/</link>
		<comments>http://www.dsplog.com/2009/10/21/dsplog-turns-two-happy-birthday/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 00:56:12 +0000</pubDate>
		<dc:creator>Krishna Sankar</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.dsplog.com/?p=850</guid>
		<description>As on 21st October 2007, we moved from blogspot domain at  to the self hosted domain at http://www.dsplog.com. Over the last two years, the blog has grown quite a bit, and am reasonably happy with the progress. Let us look back at the positives and negatives over the last year.

The positives
Around the same time last [...]


Related posts:&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2008/08/03/feedback-summary-dsplog/' rel='bookmark' title='Permanent Link: Summary &amp;#8211; feedback on [dspLog], July 2008'&gt;Summary &amp;#8211; feedback on [dspLog], July 2008&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2008/10/24/happy-birthday-dsplog/' rel='bookmark' title='Permanent Link: Happy Birthday &amp;#8211; dspLog'&gt;Happy Birthday &amp;#8211; dspLog&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2009/08/21/matlab-or-c-for-viterbi-decoder/' rel='bookmark' title='Permanent Link: Matlab or C for Viterbi Decoder?'&gt;Matlab or C for Viterbi Decoder?&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/6lUDbCHyC8py_6NDILP3Adp9MME/0/da"><img src="http://feedads.g.doubleclick.net/~a/6lUDbCHyC8py_6NDILP3Adp9MME/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/6lUDbCHyC8py_6NDILP3Adp9MME/1/da"><img src="http://feedads.g.doubleclick.net/~a/6lUDbCHyC8py_6NDILP3Adp9MME/1/di" border="0" ismap="true"></img></a></p><p></p><p>As on 21st October 2007, we moved from <a href="http://dsplog.blogspot.com">blogspot domain</a> at  to the <a href="http://www.dsplog.com">self hosted domain</a> at http://www.dsplog.com. Over the last two years, the blog has grown quite a bit, and am reasonably happy with the progress. Let us look back at the positives and negatives over the last year.</p>
<p><span id="more-850"></span></p>
<h2>The positives</h2>
<p>Around the same time last year (i.e in October 2007), we had around 65+ posts and 300+ subscribers. As on today, we have</p>
<ul>
<li>100 posts</li>
<li>2200+ subscribers and</li>
<li>2600+ comments</li>
</ul>
<p>Some of the new topics which we discussed this year are</p>
<ul>
<li><a href="http://www.dsplog.com/tag/mimo">MIMO </a></li>
<li><a href="http://www.dsplog.com/tag/viterbi">Viterbi decoder</a></li>
</ul>
<p>As traffic statistics, we have around*</p>
<ul>
<li>40,000 page views per month</li>
<li>16,000 visits per month</li>
<li>Average visit time of 3 minutes, 40 seconds</li>
</ul>
<p>The top 5 countries based on the visitor location are*</p>
<ul>
<li>US</li>
<li>India</li>
<li>South Korea</li>
<li>United Kingdom</li>
<li>China</li>
</ul>
<p>The top 5 articles are*</p>
<ul>
<li><a title="BER for BPSK in AWGN from dsplog.com" href="http://www.dsplog.com/2007/08/05/bit-error-probability-for-bpsk-modulation/">Bit Error Probability for BPSK modulation</a></li>
<li><a title="BER for BPSK in Rayleigh channel from dsplog.com" href="http://www.dsplog.com/2008/08/10/ber-bpsk-rayleigh-channel/">BER for BPSK in Rayleigh channel</a></li>
<li><a title="Download free e-Book on error rates in AWGN" href="http://www.dsplog.com/2008/10/01/download-free-e-book/">Download free e-Book for error rates in AWGN</a></li>
<li><a title="comparing ber of BPSK, QPSK, 16QAM, 16PSK, 64QAM and so on" href="http://www.dsplog.com/2008/07/08/compare-bpsk-qpsk-4pam-16qam-16psk-64qam-32psk/">Compare BPSK, QPSK, 16QAM, 16PSK, 64QAM etc</a></li>
<li><a title="maximal ratio combining on dsplog.com" href="http://www.dsplog.com/2008/09/28/maximal-ratio-combining/">Maximal Ratio Combining</a></li>
</ul>
<p>* &#8211; based on Google Analytics data for September 2009</p>
<h2>The negatives</h2>
<p>My goal is to maintain around 4 posts per month, but over the last two months or so, it dropped to two posts or sometimes one posts per month. I will put efforts to improve on that aspect.</p>
<h2>Feedback</h2>
<p>I created a poll to collect your feedback on the <strong>aspect you like most in dspLog</strong>. You can <strong>chose any one</strong> from <em><strong>Articles/Matlab-C code/Comments/Web page template</strong></em>.</p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
<p><em><strong>Note:</strong> RSS/email subscribers need to visit the site for participating and seeing the results from the poll.</em></p>


<p>Related posts:<ol><li><a href='http://www.dsplog.com/2008/08/03/feedback-summary-dsplog/' rel='bookmark' title='Permanent Link: Summary &#8211; feedback on [dspLog], July 2008'>Summary &#8211; feedback on [dspLog], July 2008</a></li><li><a href='http://www.dsplog.com/2008/10/24/happy-birthday-dsplog/' rel='bookmark' title='Permanent Link: Happy Birthday &#8211; dspLog'>Happy Birthday &#8211; dspLog</a></li><li><a href='http://www.dsplog.com/2009/08/21/matlab-or-c-for-viterbi-decoder/' rel='bookmark' title='Permanent Link: Matlab or C for Viterbi Decoder?'>Matlab or C for Viterbi Decoder?</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=J3ykDR7HVYo:D5-fTQaqZ4g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=J3ykDR7HVYo:D5-fTQaqZ4g:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=J3ykDR7HVYo:D5-fTQaqZ4g:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=J3ykDR7HVYo:D5-fTQaqZ4g:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=J3ykDR7HVYo:D5-fTQaqZ4g:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=J3ykDR7HVYo:D5-fTQaqZ4g:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=J3ykDR7HVYo:D5-fTQaqZ4g:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=J3ykDR7HVYo:D5-fTQaqZ4g:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dsplogdotcom/~4/J3ykDR7HVYo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dsplog.com/2009/10/21/dsplog-turns-two-happy-birthday/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.dsplog.com/2009/10/21/dsplog-turns-two-happy-birthday/</feedburner:origLink></item>
		<item>
		<title>Quiz on IEEE 802.11a specifications</title>
		<link>http://feedproxy.google.com/~r/dsplogdotcom/~3/zqvVQz6Jmfs/</link>
		<comments>http://www.dsplog.com/2009/10/07/quiz-ieee-80211a-specifications/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 00:56:13 +0000</pubDate>
		<dc:creator>Krishna Sankar</dc:creator>
				<category><![CDATA[Quiz]]></category>
		<category><![CDATA[802.11a]]></category>
		<category><![CDATA[OFDM]]></category>

		<guid isPermaLink="false">http://www.dsplog.com/?p=807</guid>
		<description>The IEEE 802.11a specifications are used by many to understand a wireless communication link built using OFDM. In this post, I have put together a set of 10 multiple choice questions based on 802.11a specifications. The questions are on the building blocks in 802.11a specifications, preamble structure and so on. Upon completion of the quiz, [...]


Related posts:&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2008/03/03/frequency-offset-estimation-using-80211a-short-preamble/' rel='bookmark' title='Permanent Link: Frequency offset estimation using 802.11a short preamble'&gt;Frequency offset estimation using 802.11a short preamble&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2008/02/17/cylcic-prefix-in-orthogonal-frequency-division-multiplexing/' rel='bookmark' title='Permanent Link: Cylcic prefix in Orthogonal Frequency Division Multiplexing'&gt;Cylcic prefix in Orthogonal Frequency Division Multiplexing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2008/07/02/ofdm-papr-reduction-multiplication-by-j/' rel='bookmark' title='Permanent Link: Trying out PAPR reduction for OFDM by multiplication with j'&gt;Trying out PAPR reduction for OFDM by multiplication with j&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/oc75Ue3pZoES0HujqHVcVozaRuI/0/da"><img src="http://feedads.g.doubleclick.net/~a/oc75Ue3pZoES0HujqHVcVozaRuI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/oc75Ue3pZoES0HujqHVcVozaRuI/1/da"><img src="http://feedads.g.doubleclick.net/~a/oc75Ue3pZoES0HujqHVcVozaRuI/1/di" border="0" ismap="true"></img></a></p><p></p><p>The <a title="802.11a specifiation download link" href="http://standards.ieee.org/getieee802/download/802.11a-1999.pdf">IEEE 802.11a specifications</a> are used by many to understand a wireless communication link built using OFDM. In this post, I have put together a set of 10 multiple choice questions based on 802.11a specifications. The questions are on the building blocks in 802.11a specifications, preamble structure and so on. Upon completion of the quiz, you will be lead to a page showing the correct answers and their explanations.</p>
<p>Click here to download <a title="802.11a specifiation download link" href="http://standards.ieee.org/getieee802/download/802.11a-1999.pdf">IEEE 802.11a specifications</a>.</p>
<p><em><strong>Note:</strong> The quiz might not be visible on RSS reader or over email. Please visit the site to access the quiz.</em></p>
<p>Good luck!</p>
<p>
<div class="quiz-area single-page-quiz">
<form action="" method="post" class="quiz-form" id="quiz-4">
<div class='question' id='question-1'><div class='question-content'>The spacing between subcarriers in 802.11a specifications is</div><input type='hidden' name='question_id[]' value='4' /><input type='radio' name='answer-4' id='answer-id-106' class='answer' value='106'/><label for='answer-id-106'>100kHz  </label><br /><input type='radio' name='answer-4' id='answer-id-107' class='answer' value='107'/><label for='answer-id-107'>625kHz  </label><br /><input type='radio' name='answer-4' id='answer-id-108' class='answer' value='108'/><label for='answer-id-108'>312.5kHz  </label><br /><input type='radio' name='answer-4' id='answer-id-109' class='answer' value='109'/><label for='answer-id-109'>1MHz  </label><br /><input type='radio' name='answer-4' id='answer-id-110' class='answer' value='110'/><label for='answer-id-110'>312.5MHz  </label><br /></div><div class='question' id='question-2'><div class='question-content'>The duration of an OFDM symbol in 802.11a specification is </div><input type='hidden' name='question_id[]' value='5' /><input type='radio' name='answer-5' id='answer-id-165' class='answer' value='165'/><label for='answer-id-165'>0.8us  </label><br /><input type='radio' name='answer-5' id='answer-id-166' class='answer' value='166'/><label for='answer-id-166'>1.6us  </label><br /><input type='radio' name='answer-5' id='answer-id-167' class='answer' value='167'/><label for='answer-id-167'>2.4us  </label><br /><input type='radio' name='answer-5' id='answer-id-168' class='answer' value='168'/><label for='answer-id-168'>3.2us  </label><br /><input type='radio' name='answer-5' id='answer-id-169' class='answer' value='169'/><label for='answer-id-169'>4us  </label><br /></div><div class='question' id='question-3'><div class='question-content'>The coding scheme used in 802.11a specifications is</div><input type='hidden' name='question_id[]' value='6' /><input type='radio' name='answer-6' id='answer-id-116' class='answer' value='116'/><label for='answer-id-116'>Hamming Code   </label><br /><input type='radio' name='answer-6' id='answer-id-117' class='answer' value='117'/><label for='answer-id-117'>Convolutional code  </label><br /><input type='radio' name='answer-6' id='answer-id-118' class='answer' value='118'/><label for='answer-id-118'>Reed Solomon Code   </label><br /><input type='radio' name='answer-6' id='answer-id-119' class='answer' value='119'/><label for='answer-id-119'>Turbo code  </label><br /><input type='radio' name='answer-6' id='answer-id-120' class='answer' value='120'/><label for='answer-id-120'>LDPC code  </label><br /></div><div class='question' id='question-4'><div class='question-content'>The number of used subcarriers in 802.11a specification is

</div><input type='hidden' name='question_id[]' value='7' /><input type='radio' name='answer-7' id='answer-id-121' class='answer' value='121'/><label for='answer-id-121'>52  </label><br /><input type='radio' name='answer-7' id='answer-id-122' class='answer' value='122'/><label for='answer-id-122'>64  </label><br /><input type='radio' name='answer-7' id='answer-id-123' class='answer' value='123'/><label for='answer-id-123'>48  </label><br /><input type='radio' name='answer-7' id='answer-id-124' class='answer' value='124'/><label for='answer-id-124'>24  </label><br /><input type='radio' name='answer-7' id='answer-id-125' class='answer' value='125'/><label for='answer-id-125'>50  </label><br /></div><div class='question' id='question-5'><div class='question-content'>The modulation used in SIGNAL field in 802.11a specification is </div><input type='hidden' name='question_id[]' value='8' /><input type='radio' name='answer-8' id='answer-id-126' class='answer' value='126'/><label for='answer-id-126'>BPSK  </label><br /><input type='radio' name='answer-8' id='answer-id-127' class='answer' value='127'/><label for='answer-id-127'>D-BPSK (differential-BPSK)  </label><br /><input type='radio' name='answer-8' id='answer-id-128' class='answer' value='128'/><label for='answer-id-128'>QPSK  </label><br /><input type='radio' name='answer-8' id='answer-id-129' class='answer' value='129'/><label for='answer-id-129'>16QAM  </label><br /><input type='radio' name='answer-8' id='answer-id-130' class='answer' value='130'/><label for='answer-id-130'>64QAM  </label><br /></div><div class='question' id='question-6'><div class='question-content'>The acronym CCA in 802.11a specification stands for</div><input type='hidden' name='question_id[]' value='9' /><input type='radio' name='answer-9' id='answer-id-131' class='answer' value='131'/><label for='answer-id-131'>Cross Correlation Algorithm  </label><br /><input type='radio' name='answer-9' id='answer-id-132' class='answer' value='132'/><label for='answer-id-132'>Clear Channel Assessment  </label><br /><input type='radio' name='answer-9' id='answer-id-133' class='answer' value='133'/><label for='answer-id-133'>Cross Coupled Antenna  </label><br /><input type='radio' name='answer-9' id='answer-id-134' class='answer' value='134'/><label for='answer-id-134'>Co Channel Access  </label><br /></div><div class='question' id='question-7'><div class='question-content'>The number of short preambles used in 802.11a specification is </div><input type='hidden' name='question_id[]' value='10' /><input type='radio' name='answer-10' id='answer-id-160' class='answer' value='160'/><label for='answer-id-160'>1  </label><br /><input type='radio' name='answer-10' id='answer-id-161' class='answer' value='161'/><label for='answer-id-161'>2  </label><br /><input type='radio' name='answer-10' id='answer-id-162' class='answer' value='162'/><label for='answer-id-162'>3  </label><br /><input type='radio' name='answer-10' id='answer-id-163' class='answer' value='163'/><label for='answer-id-163'>8  </label><br /><input type='radio' name='answer-10' id='answer-id-164' class='answer' value='164'/><label for='answer-id-164'>10  </label><br /></div><div class='question' id='question-8'><div class='question-content'>The duration of the long preamble in 802.11a specification is </div><input type='hidden' name='question_id[]' value='11' /><input type='radio' name='answer-11' id='answer-id-140' class='answer' value='140'/><label for='answer-id-140'>3.2us  </label><br /><input type='radio' name='answer-11' id='answer-id-141' class='answer' value='141'/><label for='answer-id-141'>4us  </label><br /><input type='radio' name='answer-11' id='answer-id-142' class='answer' value='142'/><label for='answer-id-142'>6.4us  </label><br /><input type='radio' name='answer-11' id='answer-id-143' class='answer' value='143'/><label for='answer-id-143'>8us  </label><br /><input type='radio' name='answer-11' id='answer-id-144' class='answer' value='144'/><label for='answer-id-144'>10us  </label><br /></div><div class='question' id='question-9'><div class='question-content'>The number of TAIL bits in 802.11a specification is</div><input type='hidden' name='question_id[]' value='12' /><input type='radio' name='answer-12' id='answer-id-145' class='answer' value='145'/><label for='answer-id-145'>6  </label><br /><input type='radio' name='answer-12' id='answer-id-146' class='answer' value='146'/><label for='answer-id-146'>9  </label><br /><input type='radio' name='answer-12' id='answer-id-147' class='answer' value='147'/><label for='answer-id-147'>12  </label><br /><input type='radio' name='answer-12' id='answer-id-148' class='answer' value='148'/><label for='answer-id-148'>18  </label><br /><input type='radio' name='answer-12' id='answer-id-149' class='answer' value='149'/><label for='answer-id-149'>24  </label><br /></div><div class='question' id='question-10'><div class='question-content'>The transmitter center frequency tolerance in 802.11a specification is</div><input type='hidden' name='question_id[]' value='13' /><input type='radio' name='answer-13' id='answer-id-155' class='answer' value='155'/><label for='answer-id-155'>+/-10 ppm  </label><br /><input type='radio' name='answer-13' id='answer-id-156' class='answer' value='156'/><label for='answer-id-156'>+/-20 ppm  </label><br /><input type='radio' name='answer-13' id='answer-id-157' class='answer' value='157'/><label for='answer-id-157'>+/- 40 ppm  </label><br /><input type='radio' name='answer-13' id='answer-id-158' class='answer' value='158'/><label for='answer-id-158'>+/- 50 ppm  </label><br /><input type='radio' name='answer-13' id='answer-id-159' class='answer' value='159'/><label for='answer-id-159'>+/- 100 ppm  </label><br /></div><br />
<input type="button" id="next-question" value="Next &gt;"  /><br />

<input type="submit" name="action" id="action-button" value="Submit"  />
<input type="hidden" name="quiz_id" value="4" />
</form>
</div>

</p>


<p>Related posts:<ol><li><a href='http://www.dsplog.com/2008/03/03/frequency-offset-estimation-using-80211a-short-preamble/' rel='bookmark' title='Permanent Link: Frequency offset estimation using 802.11a short preamble'>Frequency offset estimation using 802.11a short preamble</a></li><li><a href='http://www.dsplog.com/2008/02/17/cylcic-prefix-in-orthogonal-frequency-division-multiplexing/' rel='bookmark' title='Permanent Link: Cylcic prefix in Orthogonal Frequency Division Multiplexing'>Cylcic prefix in Orthogonal Frequency Division Multiplexing</a></li><li><a href='http://www.dsplog.com/2008/07/02/ofdm-papr-reduction-multiplication-by-j/' rel='bookmark' title='Permanent Link: Trying out PAPR reduction for OFDM by multiplication with j'>Trying out PAPR reduction for OFDM by multiplication with j</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=zqvVQz6Jmfs:Wo1LlRcjPo8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=zqvVQz6Jmfs:Wo1LlRcjPo8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=zqvVQz6Jmfs:Wo1LlRcjPo8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=zqvVQz6Jmfs:Wo1LlRcjPo8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=zqvVQz6Jmfs:Wo1LlRcjPo8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=zqvVQz6Jmfs:Wo1LlRcjPo8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=zqvVQz6Jmfs:Wo1LlRcjPo8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=zqvVQz6Jmfs:Wo1LlRcjPo8:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dsplogdotcom/~4/zqvVQz6Jmfs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dsplog.com/2009/10/07/quiz-ieee-80211a-specifications/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.dsplog.com/2009/10/07/quiz-ieee-80211a-specifications/</feedburner:origLink></item>
		<item>
		<title>Hamming (7,4) code with hard decision decoding</title>
		<link>http://feedproxy.google.com/~r/dsplogdotcom/~3/BpHQHxwwiY4/</link>
		<comments>http://www.dsplog.com/2009/09/29/hamming-74-code-with-hard-decision-decoding/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 00:52:01 +0000</pubDate>
		<dc:creator>Krishna Sankar</dc:creator>
				<category><![CDATA[Error Rate]]></category>
		<category><![CDATA[AWGN]]></category>
		<category><![CDATA[BPSK]]></category>
		<category><![CDATA[Hamming]]></category>

		<guid isPermaLink="false">http://www.dsplog.com/?p=789</guid>
		<description>In previous posts, we have discussed convolutional codes with Viterbi decoding (hard decision, soft decision and with finite traceback). Let us know discuss a block coding scheme where a group of  information bits is mapped into  coded bits. Such codes are referred to as  codes. We will restrict the discussion to Hamming [...]


Related posts:&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2009/01/14/soft-viterbi/' rel='bookmark' title='Permanent Link: Soft Input Viterbi decoder'&gt;Soft Input Viterbi decoder&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2009/01/04/viterbi/' rel='bookmark' title='Permanent Link: Viterbi decoder'&gt;Viterbi decoder&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2009/07/27/viterbi-with-finite-survivor-state-memory/' rel='bookmark' title='Permanent Link: Viterbi with finite survivor state memory'&gt;Viterbi with finite survivor state memory&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/RrLhYHyb0l2WoRXYAUeFGRtaO98/0/da"><img src="http://feedads.g.doubleclick.net/~a/RrLhYHyb0l2WoRXYAUeFGRtaO98/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/RrLhYHyb0l2WoRXYAUeFGRtaO98/1/da"><img src="http://feedads.g.doubleclick.net/~a/RrLhYHyb0l2WoRXYAUeFGRtaO98/1/di" border="0" ismap="true"></img></a></p><p></p><p>In previous posts, we have discussed <a title="convolutional code on dsplog.com" href="http://www.dsplog.com/20http://www.dsplog.com/04/convolutional-code/">convolutional codes</a> with Viterbi decoding (<a title="hard decision Viterbi on dsplog.com" href="http://www.dsplog.com/20http://www.dsplog.com/04/viterbi/">hard decision</a>, <a title="soft decision Viterbi on dsplog.com" href="http://www.dsplog.com/20http://www.dsplog.com/14/soft-viterbi/">soft decision</a> and <a title="Viterbi with finite traceback memory" href="http://www.dsplog.com/20http://www.dsplog.com/27/viterbi-with-finite-survivor-state-memory/">with finite traceback</a>). Let us know discuss a block coding scheme where a group of <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?k" border="0" alt="" width="16" height="13" align="absmiddle" /> information bits is mapped into <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?n" border="0" alt="" align="absmiddle" /> coded bits. Such codes are referred to as <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?(n,k)" border="0" alt="" align="absmiddle" /> codes. We will restrict the discussion to Hamming <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?(7,4)" border="0" alt="" align="absmiddle" /> codes, where 4 information bits are mapped into 7 coded bits. The performance with and without coding is compared using <a title="BER for BPSK in AWGN from dsplog.com" href="http://www.dsplog.com/20http://www.dsplog.com/05/bit-error-probability-for-bpsk-modulation/">BPSK modulation in AWGN</a> only scenario.</p>
<p><span id="more-789"></span></p>
<h2>Hamming (7,4) codes</h2>
<p>With a <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?(7,4)" border="0" alt="" align="absmiddle" /> Hamming code, we have 4 information bits and we need to add 3 parity bits to form the 7 coded bits. The can be seven valid combinations of the three bit parity matrix (excluding the all zero combination) i.e. <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\(001), (010), (011), (100), (101), (110), (111)" border="0" alt="" align="absmiddle" />.</p>
<p>The coding operation can be denoted in matrix algebra as follows:</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?c = mG" border="0" alt="" align="absmiddle" /></p>
<p>where,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?m" border="0" alt="" align="absmiddle" /> is the message sequence of dimension <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?[1\mbox{ x }k]" border="0" alt="" align="absmiddle" />,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?G" border="0" alt="" align="absmiddle" /> is the coding matrix of dimension <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?[k\mbox{ x }n]" border="0" alt="" align="absmiddle" />,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?c" border="0" alt="" align="absmiddle" /> is the coded sequence of dimension <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?[1\mbox{ x }n]" border="0" alt="" align="absmiddle" />.</p>
<p>Using the example provided in chapter eight (example 8.1-1) of <a href="http://www.amazon.chttp://www.dsplog.com/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FDigital-Communications-John-Proakis%2Fdp%2F0072321113&amp;tag=dl04-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325">Digital Communications by John Proakis</a> , let the coding matrix <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?G" border="0" alt="" align="absmiddle" /> be,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?G = \left[\begin{array}{cccc}1 &amp; 0 &amp; 0 &amp; 0 &amp; 1 &amp; 0 &amp; 1\\ \\                                    0 &amp; 1 &amp; 0 &amp; 0 &amp; 1 &amp; 1 &amp; 1 \\  \\                                 0 &amp; 0 &amp; 1 &amp; 0 &amp; 1 &amp; 1 &amp; 0 \\ \\                                  0 &amp; 0 &amp; 0 &amp; 1 &amp; 0 &amp; 1 &amp; 1 \end{array}\right]" border="0" alt="" align="absmiddle" />.</p>
<p>This matrix can be thought of as,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?G=\left[ I_k|P\right]" border="0" alt="" align="absmiddle" /> ,</p>
<p>where,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?I_k" border="0" alt="" align="absmiddle" /> is a <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?[k\mbox{ x }k]" border="0" alt="" align="absmiddle" /> identity matrix and</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?P" border="0" alt="" align="absmiddle" /> is a <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?[k\mbox{ x }(n-k)]" border="0" alt="" align="absmiddle" /> the parity check matrix.</p>
<p>Since <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?I_k" border="0" alt="" align="absmiddle" /> an identity matrix, the first <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?k" border="0" alt="" width="16" height="13" align="absmiddle" /> coded bits are identical to source message bits and the remaining  <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?(n-k)" border="0" alt="" align="absmiddle" /> bits form the parity check matrix.</p>
<p>This type of code matrix <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?G" border="0" alt="" align="absmiddle" /> where the raw message bits are send as is is called <strong>systematic code</strong>.</p>
<p>Assuming that the message sequence is <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?m%20=%20\left[\begin{array}m_0%20&amp;%20m_1%20&amp;%20m_2%20&amp;%20m_3%20&amp;\end{array}\right]" border="0" alt="" align="absmiddle" />, then the coded output sequence is :</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?c = \left[\begin{array}m_0 &amp; m_1 &amp; m_2 &amp; m_3 &amp; p_0 &amp; p_1 &amp; p_2\end{array}\right]" border="0" alt="" align="absmiddle" />, where</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?p_0 = m_0 \oplus m_1 \oplus m_2 " border="0" alt="" align="absmiddle" />,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?p_1 = m_1 \oplus m_2 \oplus m_3 " border="0" alt="" align="absmiddle" />,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?p_2 = m_0 \oplus m_1 \oplus m_3 " border="0" alt="" align="absmiddle" />.</p>
<p>The operator <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\oplus" border="0" alt="" align="absmiddle" /> denotes exclusive-OR (XOR) operator.</p>
<p><!--   		BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"Arial"; font-size:x-small } --></p>
<table border="0" cellspacing="0" frame="void" rules="none">
<colgroup>
<col width="49"></col>
<col width="40"></col>
<col width="43"></col>
<col width="40"></col>
<col width="38"></col>
<col width="28"></col>
<col width="33"></col>
<col width="35"></col>
</colgroup>
<tbody>
<tr>
<td style="border: 1px solid #000000;" width="49" height="17" align="center"><strong>Sl No</strong></td>
<td style="border: 1px solid #000000;" width="40" align="center"><strong>m0</strong></td>
<td style="border: 1px solid #000000;" width="43" align="center"><strong>m1</strong></td>
<td style="border: 1px solid #000000;" width="40" align="center"><strong>m2</strong></td>
<td style="border: 1px solid #000000;" width="38" align="center"><strong>m3</strong></td>
<td style="border: 1px solid #000000;" width="28" align="center"><strong>p0</strong></td>
<td style="border: 1px solid #000000;" width="33" align="center"><strong>p1</strong></td>
<td style="border: 1px solid #000000;" width="35" align="center"><strong>p2</strong></td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>0</strong></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>1</strong></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>2</strong></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>3</strong></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>4</strong></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>5</strong></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>6</strong></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>7</strong></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>8</strong></td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>9</strong></td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>10</strong></td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>11</strong></td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>12</strong></td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>13</strong></td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>14</strong></td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>15</strong></td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
</tr>
</tbody>
</table>
<p><strong>Table: Coded output sequence for all possible input sequence</strong></p>
<h2>Hamming Decoding</h2>
<h3>Minimum distance</h3>
<p><a title="wiki entry on Hamming distance" href="http://en.wikipedia.org/wiki/Hamming_distance">Hamming distance</a> computes the number of differing positions when comparing two code words. For the coded output sequence listed in the table above, we can see that the minimum separation between a pair of code words <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?d_{min}" border="0" alt="" align="absmiddle" /> is 3.</p>
<p>If an error of weight <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?d_{min}" border="0" alt="" align="absmiddle" /> occurs, it is possible to transform one code word to another valid code word and the error cannot be detected. So, the number of errors which can be detected is <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?d_{min}-1" border="0" alt="" align="absmiddle" />.</p>
<p>To determine the error correction capability, let us visualize that we can have <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?2^k" border="0" alt="" align="absmiddle" /> valid code words from possible <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?2^n" border="0" alt="" align="absmiddle" /> values. If each code word is visualized as a sphere of radius <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?t" border="0" alt="" align="absmiddle" />, then the largest value of  <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?t" border="0" alt="" align="absmiddle" /> which does not result in overlap between the sphere is,<br />
<img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?t = \lfloor \frac{1}{2}(d_{min}-1) \rfloor" border="0" alt="" align="absmiddle" /></p>
<p>where,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\lfloor x \rfloor" border="0" alt="" align="absmiddle" /> is the the largest integer in <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?x" border="0" alt="" align="absmiddle" />.</p>
<p>Any code word that lies with in the sphere is decoded into the valid code word at the center of the sphere.</p>
<p><strong>So the error correction capability of code with <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?d_{min}" border="0" alt="" align="absmiddle" /> distance is  <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?t = \lfloor \frac{1}{2}(d_{min}-1) \rfloor" border="0" alt="" align="absmiddle" />.</strong></p>
<p>In our example, as <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?d_{min}=3" border="0" alt="" align="absmiddle" />, we can correct up-to <strong>1 error</strong>.</p>
<h3>Parity Check Matrix</h3>
<p>For any linear block code of <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?(n,k)" border="0" alt="" align="absmiddle" />dimension, there exists a dual code of dimension  <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?[(n-k)\mbox{%20x%20}n]" border="0" alt="" align="absmiddle" />.  Any code word <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?c" border="0" alt="" align="absmiddle" /> is orthogonal to any row of the dual code. For the chosen coding matrix <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?G" border="0" alt="" align="absmiddle" />, the dual code <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?H" border="0" alt="" align="absmiddle" />is,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?H=\left[\begin{array}1&amp; 1 &amp;1 &amp;0 &amp;1 &amp;0 &amp;0 \\ 0&amp; 1&amp; 1&amp; 1&amp; 0 &amp;1 &amp;0 \\ 1&amp; 1&amp; 0&amp; 1&amp; 0&amp; 0&amp; 1 \end{array}\right]" border="0" alt="" align="absmiddle" />.</p>
<p>It can be seen that modulo-2 multiplication of the coding matrix <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?G" border="0" alt="" align="absmiddle" /> with the transpose of the dual code matrix <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?H" border="0" alt="" align="absmiddle" /> is all zeros i.e</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?GH^T = \left[\begin{array} 0 &amp; 0 &amp; 0 \\ 0 &amp; 0 &amp; 0  \\ 0 &amp; 0 &amp; 0 \\ 0 &amp; 0 &amp; 0\end{array}\right]" border="0" alt="" align="absmiddle" />.</p>
<p>This dual code <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?H" border="0" alt="" align="absmiddle" /> is also known as parity check matrix.</p>
<h3>Maximum Likelihood decoding</h3>
<p>A simple method to perform maximum likelihood decoding is to compare the received coded sequence with all possible <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?2^k" border="0" alt="" align="absmiddle" /> coded sequences, count the number of differences and choose the code word which has the minimum number of errors.</p>
<p>As stated in Chapter 8.1-5 of <a href="http://www.amazon.chttp://www.dsplog.com/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FDigital-Communications-John-Proakis%2Fdp%2F0072321113&amp;tag=dl04-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325">Digital Communications by John Proakis</a>, a more efficient way (with identical performance) is to use the parity check matrix <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?H" border="0" alt="" align="absmiddle" />.</p>
<p>Let the system model be,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?y=mG + e" border="0" alt="" align="absmiddle" />, where</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?y" border="0" alt="" align="absmiddle" /> is the received code word of dimension <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?[1\mbox{ x } n]" border="0" alt="" align="absmiddle" />,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?m" border="0" alt="" align="absmiddle" /> is the raw message bits of dimension <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?[1\mbox{ x } k]" border="0" alt="" align="absmiddle" />,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?G" border="0" alt="" align="absmiddle" /> is the raw message bits <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?[k\mbox{ x } n]" border="0" alt="" align="absmiddle" />,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?e" border="0" alt="" align="absmiddle" /> is the error locations of dimension  <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?[1\mbox{ x } n]" border="0" alt="" align="absmiddle" />.</p>
<p>Multiplying the received code word with the parity check matrix,<br />
<img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\begin{array}{lll}yH^T &amp; = &amp; (mG+e)H^T\\ &amp; = &amp; mGH^T + eH^T \\ &amp; = &amp; eH^T \end{array}" border="0" alt="" align="absmiddle" />.</p>
<p><strong>The term <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?eH^T" border="0" alt="" align="absmiddle" /> is called the syndrome of the error pattern and is of dimension <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?[1\mbox{ x } (n-k)]" border="0" alt="" align="absmiddle" />. </strong>As the term <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?mGH^T= \left[\begin{array}0 &amp; 0 &amp; 0 \end{array}\right]" border="0" alt="" align="absmiddle" />, the syndrome is affected only by the error sequence.</p>
<p>Lets assume that the message sequence</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?m= \left[\begin{array}0 &amp; 0 &amp; 0 &amp; 0\end{array}\right]" border="0" alt="" align="absmiddle" />.</p>
<p>The code output sequence is</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?c= \left[\begin{array}0 &amp; 0 &amp; 0 &amp; 0 &amp; 0 &amp; 0 &amp; 0\end{array}\right]" border="0" alt="" align="absmiddle" /></p>
<p>Let us find the error syndrome for all possible one bit error locations.</p>
<p><!--   		BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"Arial"; font-size:x-small } --></p>
<table border="0" cellspacing="0" frame="void" rules="none">
<colgroup>
<col width="46"></col>
<col width="33"></col>
<col width="33"></col>
<col width="33"></col>
<col width="33"></col>
<col width="33"></col>
<col width="33"></col>
<col width="33"></col>
<col width="12"></col>
<col width="33"></col>
<col width="33"></col>
<col width="33"></col>
</colgroup>
<tbody>
<tr>
<td style="border: 1px solid #000000;" width="46" height="17" align="center"><strong>Sl N0</strong></td>
<td style="border: 1px solid #000000;" width="33" align="center"><strong>c0</strong></td>
<td style="border: 1px solid #000000;" width="33" align="center"><strong>c1</strong></td>
<td style="border: 1px solid #000000;" width="33" align="center"><strong>c2</strong></td>
<td style="border: 1px solid #000000;" width="33" align="center"><strong>c3</strong></td>
<td style="border: 1px solid #000000;" width="33" align="center"><strong>c4</strong></td>
<td style="border: 1px solid #000000;" width="33" align="center"><strong>c5</strong></td>
<td style="border: 1px solid #000000;" width="33" align="center"><strong>c6</strong></td>
<td style="border: 1px solid #000000;" width="12" align="center"><strong><br />
</strong></td>
<td style="border: 1px solid #000000;" width="33" align="center"><strong>s0</strong></td>
<td style="border: 1px solid #000000;" width="33" align="center"><strong>s1</strong></td>
<td style="border: 1px solid #000000;" width="33" align="center"><strong>s2</strong></td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>0</strong></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center"></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>1</strong></td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center"></td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>2</strong></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center"></td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>3</strong></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center"></td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>4</strong></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center"></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">1</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>5</strong></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center"></td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>6</strong></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center"></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center">0</td>
</tr>
<tr>
<td style="border: 1px solid #000000;" height="17" align="center"><strong>7</strong></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
<td style="border: 1px solid #000000;" align="center"></td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">0</td>
<td style="border: 1px solid #000000;" align="center">1</td>
</tr>
</tbody>
</table>
<p><strong>Table: Syndrome for all possible one bit error locations</strong></p>
<p>Observations</p>
<p>1. If there are no errors (first row), the syndrome takes all zero values</p>
<p>2. For the one bit error, the syndrome takes one among the valid 7 non-zero values.</p>
<p>3. If we have more than one error locations, then also the syndrome will fall into one of the 8 valid syndrome sequence and hence cannot be corrected.</p>
<h2>Simulation Model</h2>
<p>The Matlab/Octave script performs the following</p>
<p>(a) Generate random binary sequence of 0&#8217;s and 1&#8217;s.</p>
<p>(b) Group them into four bits, add three parity bits and convert them to 7 coded bits using Hamming (7,4) systematic code</p>
<p>(c) Add White Gaussian Noise</p>
<p>(d) Perform hard decision decoding</p>
<p>(e) Compute the error syndrome for groups of 7 bits,  correct the single bit errors</p>
<p>(f) Count the number of errors</p>
<p>(g) Repeat for multiple values of <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\frac{E_b}{N_0}" border="0" alt="" align="absmiddle" /> and plot the simulation results.</p>
<p>Click here to download Note: There is a file embedded within this post, please visit this post to download the file.</p>
<p><img class="alignnone size-full wp-image-794" title="BER plot for Hamming (7,4) code with hard decision decoding in AWGN" src="http://www.dsplog.com/db-install/wp-content/uploads/2009/09/ber_plot_hamming_7_4_code_hard_decode_in_awgn.png" alt="BER plot for Hamming (7,4) code with hard decision decoding in AWGN" width="448" height="336" /></p>
<p><strong>Figure: BER plot for Hamming (7,4) code with hard decision decoding in AWGN</strong></p>
<p><strong>Observations</strong></p>
<p>1. For <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\frac{E_b}{N_0}" border="0" alt="" align="absmiddle" /> above 6dB, the Hamming (7,4) code starts showing improved bit error rate.</p>
<h2>Reference</h2>
<p><a href="http://www.amazon.chttp://www.dsplog.com/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FDigital-Communications-John-Proakis%2Fdp%2F0072321113&amp;tag=dl04-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325">Digital Communications by John Proakis</a></p>
<h2><strong><br />
</strong></h2>


<p>Related posts:<ol><li><a href='http://www.dsplog.com/2009/01/14/soft-viterbi/' rel='bookmark' title='Permanent Link: Soft Input Viterbi decoder'>Soft Input Viterbi decoder</a></li><li><a href='http://www.dsplog.com/2009/01/04/viterbi/' rel='bookmark' title='Permanent Link: Viterbi decoder'>Viterbi decoder</a></li><li><a href='http://www.dsplog.com/2009/07/27/viterbi-with-finite-survivor-state-memory/' rel='bookmark' title='Permanent Link: Viterbi with finite survivor state memory'>Viterbi with finite survivor state memory</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=BpHQHxwwiY4:rHrSMaBth3I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=BpHQHxwwiY4:rHrSMaBth3I:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=BpHQHxwwiY4:rHrSMaBth3I:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=BpHQHxwwiY4:rHrSMaBth3I:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=BpHQHxwwiY4:rHrSMaBth3I:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=BpHQHxwwiY4:rHrSMaBth3I:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=BpHQHxwwiY4:rHrSMaBth3I:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=BpHQHxwwiY4:rHrSMaBth3I:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dsplogdotcom/~4/BpHQHxwwiY4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dsplog.com/2009/09/29/hamming-74-code-with-hard-decision-decoding/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.dsplog.com/2009/09/29/hamming-74-code-with-hard-decision-decoding/</feedburner:origLink></item>
		<item>
		<title>OCW: Communication System Design</title>
		<link>http://feedproxy.google.com/~r/dsplogdotcom/~3/G4VTKjVR5Yg/</link>
		<comments>http://www.dsplog.com/2009/08/25/ocw-communication-system-design/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 00:32:03 +0000</pubDate>
		<dc:creator>Krishna Sankar</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[ocw]]></category>

		<guid isPermaLink="false">http://www.dsplog.com/?p=742</guid>
		<description>While browsing through the web for materials on the wireless communication and implementation, found this rich set of articles as part of MIT OPEN COURSEWARE program. The course is from Vladimir Stojanovic, course materials for 6.973 Communication System Design, Spring 2006. MIT OpenCourseWare (http://ocw.mit.edu/), Massachusetts Institute of Technology.
I quickly browsed through the articles. Most of [...]


Related posts:&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2007/07/01/example-of-cascaded-integrator-comb-filter-in-matlab/' rel='bookmark' title='Permanent Link: Example of Cascaded Integrator Comb filter in Matlab'&gt;Example of Cascaded Integrator Comb filter in Matlab&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2009/01/14/soft-viterbi/' rel='bookmark' title='Permanent Link: Soft Input Viterbi decoder'&gt;Soft Input Viterbi decoder&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2007/02/26/objective/' rel='bookmark' title='Permanent Link: Objective'&gt;Objective&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/2BEDJLDgiqOKLwBS6x-8CDXsQeA/0/da"><img src="http://feedads.g.doubleclick.net/~a/2BEDJLDgiqOKLwBS6x-8CDXsQeA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/2BEDJLDgiqOKLwBS6x-8CDXsQeA/1/da"><img src="http://feedads.g.doubleclick.net/~a/2BEDJLDgiqOKLwBS6x-8CDXsQeA/1/di" border="0" ismap="true"></img></a></p><p></p><p>While browsing through the web for materials on the wireless communication and implementation, found this rich set of articles as part of MIT OPEN COURSEWARE program. The course is from <strong><em>Vladimir Stojanovic, course materials for 6.973 Communication System Design, Spring 2006. MIT OpenCourseWare (http://ocw.mit.edu/), Massachusetts Institute of Technology</em></strong>.</p>
<p><span id="more-742"></span>I quickly browsed through the articles. Most of the contents are heavy, and I guess suited for a practicing communication system design engineer. You may check out the material using the links given below. I have added some of the material to my study list. Wish me luck. <img src='http://www.dsplog.com/db-install/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Course Description</h2>
<blockquote><p>This course presents a top-down approach to communications system design. The course will cover communication theory, algorithms and implementation architectures for essential blocks in modern physical-layer communication systems (coders and decoders, filters, multi-tone modulation, synchronization sub-systems). The course is hands-on, with a project component serving as a vehicle for study of different communication techniques, architectures and implementations. This year, the project is focused on WLAN transceivers. At the end of the course, students will have gone through the complete WLAN System-On-a-Chip design process, from communication theory, through algorithm and architecture all the way to the synthesized standard-cell RTL chip representation.</p></blockquote>
<h2>Topics</h2>
<p>The course will focus on four major categories as outlined below:</p>
<ol>
<li>
<div>Introduction to digital communications</div>
<ul>
<li>
<div>Modulation and detection, vector channel representation</div>
</li>
<li>
<div>Equalization</div>
</li>
<li>
<div>Multi-channel systems (modulation methods, waterfiling, bit loading)</div>
</li>
<li>
<div>Practical examples including 802.11a</div>
</li>
<li>
<div>Coding – sequence detection, gap, convolutional and block codes</div>
</li>
</ul>
</li>
<li>
<div>ASIC design fundamentals</div>
<ul>
<li>
<div>ASIC design flow, tools, system-on-a-chip design issues</div>
</li>
<li>
<div>Micro-architectures and transformations (parallelism, pipelining, folding, time-multiplexing)</div>
</li>
<li>
<div>Hardware description languages: introduction to Bluespec™ and Verilog® review</div>
</li>
</ul>
</li>
<li>
<div>Theory and building blocks</div>
<ul>
<li>
<div>Fast fourier transform (theory, fast algorithms and VLSI implementations)</div>
</li>
<li>
<div>Convolutional and Trellis codes, and Viterbi algorithm (theory, algorithms and VLSI implementations)</div>
</li>
<li>
<div>Synchronization (phase and frequency tracking loops, algorithms and VLSI implementations)</div>
</li>
<li>
<div>Block codes (Hamming, BCH, Reed-Solomon), basic theory and VLSI implementations</div>
</li>
</ul>
</li>
<li>
<div>Wireless channel fundamentals</div>
<ul>
<li>
<div>Properties and modeling (fading, Doppler effect,&#8230;)</div>
</li>
<li>
<div>Channel estimation (theory and VLSI implementations)</div>
</li>
</ul>
</li>
</ol>
<h2>Lecture Notes</h2>
<table border="0" summary="See table caption for summary.">
<thead>
<tr>
<th scope="col">No #</th>
<th scope="col">Topics</th>
</tr>
</thead>
<p><!-- END TABLE HEADER --></p>
<tbody>
<tr>
<td>L1</td>
<td>Course overview (<a href="http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/0C738C93-60A7-4C68-BF5E-464C39038FEC/0/lecture_1.pdf">PDF</a>)</td>
</tr>
<tr>
<td>L2</td>
<td>Introduction to practical digital communications (<a href="http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/14B5C928-4EF8-4F36-B0A0-904B1CFC049F/0/lecture_2.pdf">PDF</a>) (Courtesy of John Cioffi. Used with permission.)</td>
</tr>
<tr>
<td>L3</td>
<td>Multi-tone systems (<a href="http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/DB36E4B3-CFA3-48E3-944B-299AA16A4009/0/lecture_3.pdf">PDF</a>)</td>
</tr>
<tr>
<td>L4</td>
<td>802.11a transceiver architecture (<a href="http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/37522B22-0273-4DBD-B4D4-42600C70B6C7/0/lecture_4.pdf">PDF</a>)</td>
</tr>
<tr>
<td>L5</td>
<td>ASIC design (<a href="http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/10C74F04-4CC2-444C-9CDF-EBB9892D6A21/0/lecture_5.pdf">PDF &#8211; 3.2 MB</a>)</td>
</tr>
<tr>
<td>L6</td>
<td>Micro-architectures and transformations (<a href="http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/C8CBBF59-A6C2-49F6-B9DF-72852D2CA262/0/lecture_6.pdf">PDF &#8211; 1.2 MB</a>)</td>
</tr>
<tr>
<td>L7</td>
<td>Bluespec™ overview (<a href="http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/BED327A8-27CA-4A12-9F6B-01CCF2294B95/0/lecture_7.pdf">PDF</a>) (Courtesy of Arvind. Used with permission.)</td>
</tr>
<tr>
<td>L8</td>
<td>Fast fourier transform: theory and algorithms (<a href="http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/C7293F0B-B5FA-4DDF-A3BE-1BD815035FBB/0/lecture_8.pdf">PDF</a>)</td>
</tr>
<tr>
<td>L9</td>
<td>Fast fourier transform: practical aspects and basic architectures (<a href="http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/B55FE871-F6C8-43C8-B5D1-89D861742AB3/0/lecture_9.pdf">PDF</a>)</td>
</tr>
<tr>
<td>L10</td>
<td>Fast fourier transform: advanced VLSI architectures (<a href="http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/3127BF0C-1F8A-46F4-9AF7-AFD5CD0DA3F0/0/lecture_10.pdf">PDF &#8211; 3.0 MB</a>)</td>
</tr>
</tbody>
<tbody>
<tr>
<td>L11</td>
<td>Convolutional codes (<a href="http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/8B59F562-4A70-44A2-8550-91A83E10BA5E/0/lecture_11.pdf">PDF</a>)</td>
</tr>
<tr>
<td>L12</td>
<td>Trellis codes (<a href="http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/AE0A4BD5-1F6D-4EE7-BAF1-4705F1D029B0/0/lecture_12.pdf">PDF</a>)</td>
</tr>
<tr>
<td>L13</td>
<td>Viterbi algorithm</td>
</tr>
<tr>
<td>L14</td>
<td>Viterbi algorithm (cont.) (<a href="http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/9A86BA46-AF46-4EE3-AF3B-797B61DA202A/0/lecture_14.pdf">PDF</a>)</td>
</tr>
<tr>
<td>L15</td>
<td>Viterbi algorithm (cont.) (<a href="http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/4231A5A1-70D9-4D62-BE89-D925A9AC56D8/0/lecture_15.pdf">PDF</a>)</td>
</tr>
<tr>
<td>L16</td>
<td>Viterbi algorithm (cont.) (<a href="http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/B936638C-6C96-4D04-B15A-1603E0E704F7/0/lecture_16.pdf">PDF</a>)</td>
</tr>
<tr>
<td>L17</td>
<td>Synchronization introduction</td>
</tr>
<tr>
<td>L18</td>
<td>Synchronization OFDM</td>
</tr>
<tr>
<td>L19</td>
<td>Synchronization: implementations</td>
</tr>
<tr>
<td>L20</td>
<td>Wireless channels</td>
</tr>
</tbody>
<tbody>
<tr>
<td>L21</td>
<td>Channel estimation</td>
</tr>
<tr>
<td>L22</td>
<td>Block codes: introduction</td>
</tr>
<tr>
<td>L23</td>
<td>Block codes: code classes and Reed-Solomon codes</td>
</tr>
<tr>
<td>L24</td>
<td>Block codes: implementations</td>
</tr>
</tbody>
</table>
<h2>Important links</h2>
<p><a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/CourseHome/index.htm">Course Home</a></p>
<p><a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/Syllabus/index.htm">Syllabus</a></p>
<p><a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/Readings/index.htm">Reading list</a></p>
<p><a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/LectureNotes/index.htm">Lecture Notes</a></p>
<p><a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/Assignments/index.htm">Assignments</a><a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/Exams/index.htm"></a></p>
<p><a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/Exams/index.htm">Exams</a></p>
<p><a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-973Spring-2006/DownloadthisCourse/index.htm">Download Course Materials</a></p>
<h2>Reference</h2>
<p>Vladimir Stojanovic, course materials for 6.973 Communication System Design, Spring 2006. MIT OpenCourseWare (http://ocw.mit.edu/), Massachusetts Institute of Technology.</p>


<p>Related posts:<ol><li><a href='http://www.dsplog.com/2007/07/01/example-of-cascaded-integrator-comb-filter-in-matlab/' rel='bookmark' title='Permanent Link: Example of Cascaded Integrator Comb filter in Matlab'>Example of Cascaded Integrator Comb filter in Matlab</a></li><li><a href='http://www.dsplog.com/2009/01/14/soft-viterbi/' rel='bookmark' title='Permanent Link: Soft Input Viterbi decoder'>Soft Input Viterbi decoder</a></li><li><a href='http://www.dsplog.com/2007/02/26/objective/' rel='bookmark' title='Permanent Link: Objective'>Objective</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=G4VTKjVR5Yg:dWOUi947_xA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=G4VTKjVR5Yg:dWOUi947_xA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=G4VTKjVR5Yg:dWOUi947_xA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=G4VTKjVR5Yg:dWOUi947_xA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=G4VTKjVR5Yg:dWOUi947_xA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=G4VTKjVR5Yg:dWOUi947_xA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=G4VTKjVR5Yg:dWOUi947_xA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=G4VTKjVR5Yg:dWOUi947_xA:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dsplogdotcom/~4/G4VTKjVR5Yg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dsplog.com/2009/08/25/ocw-communication-system-design/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.dsplog.com/2009/08/25/ocw-communication-system-design/</feedburner:origLink></item>
		<item>
		<title>Matlab or C for Viterbi Decoder?</title>
		<link>http://feedproxy.google.com/~r/dsplogdotcom/~3/l_h313CVIDw/</link>
		<comments>http://www.dsplog.com/2009/08/21/matlab-or-c-for-viterbi-decoder/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 00:21:53 +0000</pubDate>
		<dc:creator>Krishna Sankar</dc:creator>
				<category><![CDATA[Error Rate]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Viterbi]]></category>

		<guid isPermaLink="false">http://www.dsplog.com/?p=659</guid>
		<description>Are you bothered by speed of the speed of the simulations which you develop in Matlab/Octave? I was not bothered much, till I ran into the Viterbi decoder. If you recall, the Matlab/Octave simulation script for BER computation with hard soft decision Viterbi algorithm provided in post Viterbi with finite survivor state memory took around [...]


Related posts:&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2009/01/14/soft-viterbi/' rel='bookmark' title='Permanent Link: Soft Input Viterbi decoder'&gt;Soft Input Viterbi decoder&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2009/01/04/viterbi/' rel='bookmark' title='Permanent Link: Viterbi decoder'&gt;Viterbi decoder&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2009/07/27/viterbi-with-finite-survivor-state-memory/' rel='bookmark' title='Permanent Link: Viterbi with finite survivor state memory'&gt;Viterbi with finite survivor state memory&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/gZO2SO_VxeJVkBxMMe6qHb693kw/0/da"><img src="http://feedads.g.doubleclick.net/~a/gZO2SO_VxeJVkBxMMe6qHb693kw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/gZO2SO_VxeJVkBxMMe6qHb693kw/1/da"><img src="http://feedads.g.doubleclick.net/~a/gZO2SO_VxeJVkBxMMe6qHb693kw/1/di" border="0" ismap="true"></img></a></p><p></p><p>Are you bothered by speed of the speed of the simulations which you develop in Matlab/Octave? I was not bothered much, till I ran into the Viterbi decoder. If you recall, the Matlab/Octave simulation script for BER computation with hard soft decision Viterbi algorithm provided in post <a title="post on hard/soft decision Viterbi in dsplog.com" href="http://www.dsplog.com/2009/07/27/viterbi-with-finite-survivor-state-memory/">Viterbi with finite survivor state memory</a> <strong>took around 10 hours to run</strong>.</p>
<p><span id="more-659"></span> I knew C was much faster, so I coded the simulation again in C. Of Course, coding in C was much more difficult. I missed many functions (like conv(), rand(), randn() etc), the plotting capabilities and the statistical analysis capabilities of Matlab/Octave.</p>
<p>To have a graphical debug environment for C, I installed <a title="KDbg - A Graphical debugger Interface" href="http://www.kdbg.org/">KDbg</a>. I already had the <a title="GCC - the GNU compiler" href="http://gcc.gnu.org/">gcc</a> compiler installed, and I was all set to go. <strong>The C code, executed in 14 seconds !!!</strong></p>
<pre class="html">home@home-desktop:$ gcc -g -lm script_ber_bpsk_convolutional_code_viterbi_decode.c
script_ber_bpsk_convolutional_code_viterbi_decode.c: In function ‘main’:
script_ber_bpsk_convolutional_code_viterbi_decode.c:54: warning: incompatible implicit declaration of built-in function ‘exp10’
home@home-desktop:$ date;./a.out; date
Fri Aug 21 05:35:09 IST 2009
|BER for BPSK in AWGN with hard/soft Viterbi decoder
|----------------------------------------------
|Eb/N0 | BER (sim) | BER (sim) | BER (theory) |
| (dB) | (hard)    | (soft)    | (uncoded)    |
|----------------------------------------------
|  0   | 0.198044  | 0.096864  | 0.078650     |
|  1   | 0.128787  | 0.045707  | 0.056282     |
|  2   | 0.072306  | 0.017853  | 0.037506     |
|  3   | 0.032038  | 0.005107  | 0.022878     |
|  4   | 0.011104  | 0.001269  | 0.012501     |
|  5   | 0.002886  | 0.000277  | 0.005954     |
|  6   | 0.000696  | 0.000054  | 0.002388     |
|  7   | 0.000100  | 0.000005  | 0.000773     |
|  8   | 0.000014  | 0.000000  | 0.000191     |
|  9   | 0.000000  | 0.000000  | 0.000034     |
Fri Aug 21 05:35:24 IST 2009
home@home-desktop:$</pre>
<p>Please click here to download the <a href="http://www.dsplog.com/db-install/wp-content/uploads/2009/08/script_ber_bpsk_convolutional_code_viterbi_decode.c">C code for simulating BER for BPSK with convolutional coding with hard/soft decision Viterbi having finite survivor state memory</a>.</p>
<h2>Poll</h2>
<p>I created a poll to collect your feedback on the choice of programming language. You can <strong>chose any two</strong> from <em><strong>Matlab/Octave/C/Scilab/Simulink/Others</strong></em>. If you chose &#8220;Others&#8221;, please specify some more details of the programming language in the Comments section.</p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
<p><em><strong>Note:</strong> RSS/email subscribers need to visit the site for participating and seeing the results from the poll.</em></p>


<p>Related posts:<ol><li><a href='http://www.dsplog.com/2009/01/14/soft-viterbi/' rel='bookmark' title='Permanent Link: Soft Input Viterbi decoder'>Soft Input Viterbi decoder</a></li><li><a href='http://www.dsplog.com/2009/01/04/viterbi/' rel='bookmark' title='Permanent Link: Viterbi decoder'>Viterbi decoder</a></li><li><a href='http://www.dsplog.com/2009/07/27/viterbi-with-finite-survivor-state-memory/' rel='bookmark' title='Permanent Link: Viterbi with finite survivor state memory'>Viterbi with finite survivor state memory</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=l_h313CVIDw:piPK6FFb2Ug:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=l_h313CVIDw:piPK6FFb2Ug:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=l_h313CVIDw:piPK6FFb2Ug:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=l_h313CVIDw:piPK6FFb2Ug:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=l_h313CVIDw:piPK6FFb2Ug:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=l_h313CVIDw:piPK6FFb2Ug:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=l_h313CVIDw:piPK6FFb2Ug:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=l_h313CVIDw:piPK6FFb2Ug:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dsplogdotcom/~4/l_h313CVIDw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dsplog.com/2009/08/21/matlab-or-c-for-viterbi-decoder/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		<feedburner:origLink>http://www.dsplog.com/2009/08/21/matlab-or-c-for-viterbi-decoder/</feedburner:origLink></item>
		<item>
		<title>Inter Carrier Interference (ICI) in OFDM due to frequency offset</title>
		<link>http://feedproxy.google.com/~r/dsplogdotcom/~3/BBU_pfHjrZU/</link>
		<comments>http://www.dsplog.com/2009/08/08/effect-of-ici-in-ofdm/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 00:04:31 +0000</pubDate>
		<dc:creator>Krishna Sankar</dc:creator>
				<category><![CDATA[Receiver]]></category>
		<category><![CDATA[ICI]]></category>
		<category><![CDATA[OFDM]]></category>

		<guid isPermaLink="false">http://www.dsplog.com/?p=689</guid>
		<description>In this post, let us evaluate the impact of frequency offset resulting in Inter Carrier Interference (ICI) while receiving an OFDM modulated symbol. We will first discuss the OFDM transmission and reception, the effect of frequency offset and later we will define the loss of orthogonality and resulting signal to noise ratio (SNR) loss due [...]


Related posts:&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2008/03/03/frequency-offset-estimation-using-80211a-short-preamble/' rel='bookmark' title='Permanent Link: Frequency offset estimation using 802.11a short preamble'&gt;Frequency offset estimation using 802.11a short preamble&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2008/06/10/ofdm-bpsk-bit-error/' rel='bookmark' title='Permanent Link: BPSK BER with OFDM modulation'&gt;BPSK BER with OFDM modulation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2008/02/03/understanding-an-ofdm-transmission/' rel='bookmark' title='Permanent Link: Understanding an OFDM transmission'&gt;Understanding an OFDM transmission&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/n1eKdxJGiKzuAEqpuwg9ZcL8ebo/0/da"><img src="http://feedads.g.doubleclick.net/~a/n1eKdxJGiKzuAEqpuwg9ZcL8ebo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/n1eKdxJGiKzuAEqpuwg9ZcL8ebo/1/da"><img src="http://feedads.g.doubleclick.net/~a/n1eKdxJGiKzuAEqpuwg9ZcL8ebo/1/di" border="0" ismap="true"></img></a></p><p></p><p>In this post, let us evaluate the impact of frequency offset resulting in Inter Carrier Interference (ICI) while receiving an OFDM modulated symbol. We will first discuss the OFDM transmission and reception, the effect of frequency offset and later we will define the loss of orthogonality and resulting signal to noise ratio (SNR) loss due to the presence of frequency offset. The analysis is accompanied by Matlab/Octave simulation scripts.</p>
<h2><span id="more-689"></span>OFDM transmission</h2>
<p>As discussed in the post on Understanding an OFDM transmission,  for sending an OFDM modulated symbol, we use multiple sinusoidals with frequency separation <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\frac{1}{T}" border="0" alt="" align="absmiddle" /> is used, where <img src="../../cgi-bin/mimetex.cgi?T" border="0" alt="" align="absmiddle" /> is the symbol period. The information <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?a_k" border="0" alt="" align="absmiddle" /> to be send on each subcarrier <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?k" border="0" alt="" align="absmiddle" /> is multiplied by the corresponding carrier <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?g_k(t)=e^{\frac{j2\pi kt}{T}}" border="0" alt="" align="absmiddle" /> and the sum of such modulated sinusoidals form the transmit signal. Mathematically, the transmit signal is,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\begin{eqnarray}s(t) &amp;= &amp;a_0g_0(t) + a_1g_1(t)+\ldots+a_{K-1}g_{K-1}(t)\\ &amp; = &amp;\sum_{0}^{K-1}a_kg_k(t) \\&amp;=&amp;\frac{1}{\sqrt{T}}\underbrace{\sum_{0}^{K-1}a_ke^{\frac{j2\pi kt}{T}}}\ w(t) \end{eqnarray}" border="0" alt="" align="absmiddle" /></p>
<p>The interpretation of the above equation is as follows:<br />
(a) Each information signal <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?a_k" border="0" alt="" align="absmiddle" /> multiplies the sinusoidal having frequency of <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\frac{k}{T}" border="0" alt="" align="absmiddle" />.<br />
(b) Sum of all such modulated sinusoidals are added and the resultant signal is sent out as <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?s(t)" border="0" alt="" align="absmiddle" />.</p>
<h2>OFDM reception</h2>
<p>In an OFDM receiver, we will multiply the received signal with a bank of correlators and integrate over the period <img src="../../cgi-bin/mimetex.cgi?T" border="0" alt="" align="absmiddle" />. The correlator to extract information send on subcarrier  <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?k" border="0" alt="" align="absmiddle" /> is<img src="../../cgi-bin/mimetex.cgi?c_m(t)=\frac{1}{\sqrt{T}}e^{-\frac{j2\pi%20mt}{T}}" border="0" alt="" align="absmiddle" />.</p>
<p>The integral,<br />
<img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\begin{eqnarray}\frac{1}{\sqrt{T}}\int_Ts(t)e^{-\frac{j2\pi%20mt}{T}} &amp; = &amp; a_k,&amp; m=k\\ &amp; = &amp; 0, &amp; m\ne k\end{eqnarray}" border="0" alt="" align="absmiddle" />,</p>
<p>where<br />
<img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?m" border="0" alt="" align="absmiddle" /> takes values from <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?0" border="0" alt="" align="absmiddle" /> till <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?K-1" border="0" alt="" align="absmiddle" />.</p>
<h2>Frequency offset</h2>
<p>In a typical wireless communication system, the signal to be transmitted is upconverted to a carrier frequency prior to transmission. The receiver is expected to tune to the same carrier frequency for down-converting the signal to baseband, prior to demodulation.</p>
<p><a title="Signal Up/Down conversion" href="http://www.dsplog.com/db-install/wp-content/uploads/2008/03/signal_up_down_conversion.png"><img src="http://www.dsplog.com/db-install/wp-content/uploads/2008/03/signal_up_down_conversion.png" alt="Signal Up/Down conversion" width="384" height="255" /></a></p>
<p><strong>Figure: Up/down conversion</strong></p>
<p><img title="More..." src="http://www.dsplog.com/db-install/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /></p>
<p>However, due to device impairments the carrier frequency of the receiver need not be same as the carrier frequency of the transmitter. When this happens, the received baseband signal, instead of being centered at DC (0MHz), will be centered at a frequency <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?f_{\delta}" border="0" alt="" align="absmiddle" />, where<br />
<img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?f_%7B%5Cdelta%7D%20=%20f_%7BTx%7D%20-%20f_%7BRx%7D" border="0" alt="" align="absmiddle" />.</p>
<p>The baseband representation is (ignoring noise),</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?y%28t%29%20=%20s%28t%29e%5E%7Bj2%5Cpi%20f_%7B%5Cdelta%7Dt%7D" border="0" alt="" align="absmiddle" />, where</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?y(t)" border="0" alt="" align="absmiddle" /> is the  received signal</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?s(t)" border="0" alt="" align="absmiddle" /> is the transmitted signal and</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?f_{\delta}" border="0" alt="" align="absmiddle" /> is the frequency offset.</p>
<h2>Effect of frequency offset in OFDM receiver</h2>
<p>Let us assume that the frequency offset <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?f_{\delta}" border="0" alt="" align="absmiddle" /> is a fraction of subcarrier spacing <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?1/T" border="0" alt="" align="absmiddle" /> i.e.<br />
<img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?f_{\delta}=\frac{\delta}{T}" border="0" alt="" align="absmiddle" />.</p>
<p>Also, for simplifying the equations, lets us assume that the transmitted symbols on all subcarriers,  <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?a_k=1" border="0" alt="" align="absmiddle" /></p>
<p>The received signal is,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?y(t) = s(t)e^{\frac{j2\pi\delta }{T}t}" border="0" alt="" align="absmiddle" />.</p>
<p>The output of the correlator for sub-carrier <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?m" border="0" alt="" align="absmiddle" /> is,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\begin{eqnarray}\frac{1}{\sqrt{T}}\int_Ty(t)e^{-\frac{j2\pi%20mt}{T}} &amp; = &amp; \frac{1}{T}\int_{T}e^{\frac{j2\pi (k+\delta-m)}{T}t},&amp; m=\in \{0,...,K-1\}\\ &amp; = &amp;  \frac{1}{j2\pi (k+\delta-m)}(e^{j2\pi (k+\delta-m)}-1) &amp; \end{eqnarray}" border="0" alt="" align="absmiddle" />.</p>
<p>For  <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\delta=0" border="0" alt="" align="absmiddle" />,</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\begin{array}{rrr}\frac{1}{j2\pi(k+\delta-m)}(e^{j2\pi%20(k+\delta-m)}-1)&amp;=1, &amp;m=k\\ \frac{1}{j2\pi(k+\delta-m)}(e^{j2\pi%20(k+\delta-m)}-1)&amp;=0, &amp;m \ne k\\\end{array}" border="0" alt="" align="absmiddle" /></p>
<p>The integral reduces to the OFDM receiver with no impairments case.</p>
<p>However for non zero values of <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\delta" border="0" alt="" align="absmiddle" />, we can see that the amplitude of the correlation with subcarrier <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?m" border="0" alt="" align="absmiddle" /> includes</p>
<ul>
<li>distortion due to frequency offset between actual frequency <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\frac{m+\delta}{T}" border="0" alt="" align="absmiddle" /> and the desired frequency <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\frac{m}{T}" border="0" alt="" align="absmiddle" />.</li>
<li>distortion due to interference with other subcarriers with with desired frequency <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\frac{m}{T}" border="0" alt="" align="absmiddle" />. This term is also known as <strong>Inter Carrier Interference (ICI)</strong>.</li>
</ul>
<h2>Simulation Model</h2>
<p>Click here to download the <a href="http://www.dsplog.com/db-install/wp-content/uploads/2009/08/script_frequency_offset_ofdm.m">Matlab/Octave script for computing RMS error with frequency offset</a>. The script performs the following:</p>
<p>1. Generates an OFDM symbol with all subcarriers modulated with <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?a_k=1" border="0" alt="" align="absmiddle" />.</p>
<p>2. Introduce frequency offset and add noise to result in <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\frac{E_b}{N_0}" border="0" alt="" align="absmiddle" />=30dB.</p>
<p>3. Perform demodulation at the receiver.</p>
<p>4. Find the difference between the desired and actual constellation.</p>
<p>5. Compute the rms value of error across all subcarriers.</p>
<p>6. Repeat this for different values of frequency offset.</p>
<p><img class="alignnone size-full wp-image-712" title="Plot of the magnitude of error vs frequency offset in OFDM" src="http://www.dsplog.com/db-install/wp-content/uploads/2009/08/error_magnitude_vs_frequency_offset_ofdm.png" alt="Plot of the magnitude of error vs frequency offset in OFDM" width="448" height="336" /></p>
<p><strong>Figure: Error Magnitude vs frequency offset for OFDM</strong></p>
<h2>Observations</h2>
<p>The theoretical results are computed by <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\sum_m\frac{1}{j2\pi (k+\delta-m)}e^{j2\pi (k+\delta-m)}" border="0" alt="" align="absmiddle" />.</p>
<p>Quite likely the simulated results are slightly better than theoretical results because the simulated results are computed using average error for all subcarriers (and the subcarriers at the edge undergo lower distortion).</p>


<p>Related posts:<ol><li><a href='http://www.dsplog.com/2008/03/03/frequency-offset-estimation-using-80211a-short-preamble/' rel='bookmark' title='Permanent Link: Frequency offset estimation using 802.11a short preamble'>Frequency offset estimation using 802.11a short preamble</a></li><li><a href='http://www.dsplog.com/2008/06/10/ofdm-bpsk-bit-error/' rel='bookmark' title='Permanent Link: BPSK BER with OFDM modulation'>BPSK BER with OFDM modulation</a></li><li><a href='http://www.dsplog.com/2008/02/03/understanding-an-ofdm-transmission/' rel='bookmark' title='Permanent Link: Understanding an OFDM transmission'>Understanding an OFDM transmission</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=BBU_pfHjrZU:ROyFewoJKvA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=BBU_pfHjrZU:ROyFewoJKvA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=BBU_pfHjrZU:ROyFewoJKvA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=BBU_pfHjrZU:ROyFewoJKvA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=BBU_pfHjrZU:ROyFewoJKvA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=BBU_pfHjrZU:ROyFewoJKvA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=BBU_pfHjrZU:ROyFewoJKvA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=BBU_pfHjrZU:ROyFewoJKvA:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dsplogdotcom/~4/BBU_pfHjrZU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dsplog.com/2009/08/08/effect-of-ici-in-ofdm/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://www.dsplog.com/2009/08/08/effect-of-ici-in-ofdm/</feedburner:origLink></item>
		<item>
		<title>Viterbi with finite survivor state memory</title>
		<link>http://feedproxy.google.com/~r/dsplogdotcom/~3/cOoXbC5t73s/</link>
		<comments>http://www.dsplog.com/2009/07/27/viterbi-with-finite-survivor-state-memory/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 00:26:16 +0000</pubDate>
		<dc:creator>Krishna Sankar</dc:creator>
				<category><![CDATA[Error Rate]]></category>
		<category><![CDATA[AWGN]]></category>
		<category><![CDATA[BPSK]]></category>
		<category><![CDATA[Viterbi]]></category>

		<guid isPermaLink="false">http://www.dsplog.com/?p=668</guid>
		<description>In the post on Viterbi decoder and soft input Viterbi decoder, we discussed a convolutional encoding scheme with rate 1/2, constraint length  and having generator polynomial  and having generator polynomial . If the number of uncoded bits is , then the number of coded bits at the output of the convolutional encoder is [...]


Related posts:&lt;ol&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2009/01/04/viterbi/' rel='bookmark' title='Permanent Link: Viterbi decoder'&gt;Viterbi decoder&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2009/08/21/matlab-or-c-for-viterbi-decoder/' rel='bookmark' title='Permanent Link: Matlab or C for Viterbi Decoder?'&gt;Matlab or C for Viterbi Decoder?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.dsplog.com/2009/01/14/soft-viterbi/' rel='bookmark' title='Permanent Link: Soft Input Viterbi decoder'&gt;Soft Input Viterbi decoder&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/hZmF0F1avf1NNI6RdJ13nqxtDoc/0/da"><img src="http://feedads.g.doubleclick.net/~a/hZmF0F1avf1NNI6RdJ13nqxtDoc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/hZmF0F1avf1NNI6RdJ13nqxtDoc/1/da"><img src="http://feedads.g.doubleclick.net/~a/hZmF0F1avf1NNI6RdJ13nqxtDoc/1/di" border="0" ismap="true"></img></a></p><p></p><p>In the post on <a title="hard decision Viterbi decoder on dsplog.com" href="http://www.dsplog.com/2009/01/04/viterbi/">Viterbi decoder</a> and <a title="soft input Viterbi decoding in dspLog.com" href="http://www.dsplog.com/2009/01/14/soft-viterbi/">soft input Viterbi decoder</a>, we discussed a convolutional encoding scheme with rate 1/2, constraint length <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?K=3" border="0" alt="" align="absmiddle" /> and having generator polynomial <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?K=3" border="0" alt="" align="absmiddle" /> and having generator polynomial <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?\left[%207,%205\right]_8" border="0" alt="" align="absmiddle" />. If the number of uncoded bits is <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?N" border="0" alt="" align="absmiddle" />, then the number of coded bits at the output of the convolutional encoder is <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?2(N+K-1)" border="0" alt="" align="absmiddle" /> . Decoding the convolutionaly encoded bits by Viterbi algorithm consisted of the following steps.</p>
<p><span id="more-668"></span>1. For group of two bits, compute Hamming distance or Euclidean distance (for hard decision or soft decision respectively)</p>
<p>2. For each of the <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?2^{K-1}=4" border="0" alt="" align="absmiddle" /> states, compute the path metric knowing the following.</p>
<ul>
<li>Each state can be reached from only two previous states (out of the 4 possible states).</li>
<li>For each possible transition, compute the branch metric by adding the path metric of the previous state to the Hamming/Euclidean distance of the transition</li>
<li>Select the branch metric which is minimum among the two values and store it as the path metric for the current state</li>
</ul>
<p>3. Store the survivor predecessor state for each state.</p>
<p>4. Once we have processed <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?2(N+K-1)" border="0" alt="" align="absmiddle" /> received bits, we know that the convolution encoder has reached state 00.  We start traceback from state 00, and given that we know the current and previous state, the <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?N" border="0" alt="" align="absmiddle" /> input bits can be decoded.</p>
<p>However, when the number of input uncoded bits <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?N" border="0" alt="" align="absmiddle" />is large, the memory requirements for a survivor state matrix  of dimension <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?(2^{K-1})\mbox{  x  }  (N+K-1)" border="0" alt="" align="absmiddle" /> becomes impossible to manage.</p>
<h2>Traceback with finite survivor memory</h2>
<p>To be able to decode with finite survivor memory, lets say we need to start the traceback at some time instant <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?D+TB" border="0" alt="" align="absmiddle" /> , where</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?D" border="0" alt="" align="absmiddle" /> is the decoding depth and</p>
<p><img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?TB" border="0" alt="" align="absmiddle" /> is the traceback depth.</p>
<p>The sequence of events are as follows:</p>
<ul>
<li>At time instant <img src="http://www.dsplog.com/cgi-bin/mimetex.cgi?D+TB" border="0" alt="" align="absmiddle" />, we start the traceback and continue tracing back through the survivor path <img src="../../cgi-bin/mimetex.cgi?TB" border="0" alt="" align="absmiddle" /> times. Once we are done with the traceback, we start estimating the <img src="../../cgi-bin/mimetex.cgi?D" border="0" alt="" align="absmiddle" /> decoded bits knowing the current state and previous state.</li>
<li>Similarly, we again start the traceback at time <img src="../../cgi-bin/mimetex.cgi?2D+TB" border="0" alt="" align="absmiddle" />, do traceback <img src="../../cgi-bin/mimetex.cgi?TB" border="0" alt="" align="absmiddle" /> times and then decode bits from  <img src="../../cgi-bin/mimetex.cgi?2D" border="0" alt="" align="absmiddle" /> to  <img src="../../cgi-bin/mimetex.cgi?D" border="0" alt="" align="absmiddle" />.</li>
<li>Once we reach the end of the input sequence at time instance  <img src="../../cgi-bin/mimetex.cgi?N+K-1" border="0" alt="" align="absmiddle" />, we know that trellis has converged to state00 and then we do demodulation with traceback.</li>
</ul>
<p><img class="alignnone size-full wp-image-670" title="Viterbi traceback with finite survivor memory" src="http://www.dsplog.com/db-install/wp-content/uploads/2009/07/viterbi_traceback.png" alt="Viterbi traceback with finite survivor memory" width="491" height="293" /></p>
<p><strong>Figure: Viterbi traceback with finite survivor memory</strong></p>
<p>Given that<strong> </strong>traceback speed is equal to storing the speed incoming coded bits, we can implement the above algorithm with a memory of <img src="../../cgi-bin/mimetex.cgi?D+2TB" border="0" alt="" align="absmiddle" />. <em><strong></strong></em></p>
<p><em><strong>Note:</strong> The literature of different architectures for survivor state management is vast and is not explored in this post.</em></p>
<h3>Selecting start state for traceback<em><br />
</em></h3>
<p>At time instant <img src="../../cgi-bin/mimetex.cgi?D+TB" border="0" alt="" align="absmiddle" />, there are multiple ways to select the state to</p>
<ul>
<li>Always start from a defined state (for example state 00)</li>
<li>Start from the state which has the minimum path metric</li>
</ul>
<p>From simulations, can identify the minimum value of traceback depth (<img src="../../cgi-bin/mimetex.cgi?TB" border="0" alt="" align="absmiddle" />), which results in performance comparable to infinite survivor path memory case. From simulations shown in the post on <a title="hard decision Viterbi decoder on dsplog.com" href="http://www.dsplog.com/2009/01/04/viterbi/">hard decision Viterbi decoder</a>, we know that at <img src="../../cgi-bin/mimetex.cgi?\frac{E_b}{N_0}=4\mbox{dB}" border="0" alt="" align="absmiddle" />, results in a bit error rate of <img src="../../cgi-bin/mimetex.cgi?10^{-2}" border="0" alt="" align="absmiddle" /></p>
<p><strong><img class="alignnone size-full wp-image-671" title="BER_vs_traceback_viterbi_decode_ebno_4db" src="http://www.dsplog.com/db-install/wp-content/uploads/2009/07/ber_vs_traceback_viterbi_decode_ebno_4db.png" alt="BER_vs_traceback_viterbi_decode_ebno_4db" width="448" height="336" /></strong></p>
<p><strong>Figure: BER vs traceback depth at Eb/N0 = 4dB<br />
</strong></p>
<p>From simulations it has been observed that doing traceback  depth of around 15 ensures that the obtained BER with finite survivor state memory is close to the BER with infinite survivor state memory. Note that <img src="../../cgi-bin/mimetex.cgi?TB=15" border="0" alt="" align="absmiddle" /> corresponds to around 5 times the constraint length of <img src="../../cgi-bin/mimetex.cgi?K=3" border="0" alt="" align="absmiddle" />.</p>
<p>Additionally, as expected starting traceback with from the state with minimum pathmetric shows better performance than always starting at state 00.</p>
<h2>Simulation results</h2>
<p>Click here to download <a href="http://www.dsplog.com/db-install/wp-content/uploads/2009/07/script_bpsk_ber_vs_traceback_viterbi_decode.m">Matlab/Octave script for simulating bit error rate vs traceback for Eb/N0 = 4dB.</a></p>
<p>Click here to download <a href="http://www.dsplog.com/db-install/wp-content/uploads/2009/07/script_bpsk_ber_awgn_convolutional_code_soft_viterbi_decode_with_traceback.m">Matlab/Octave script for simulating BER for BPSK with convolotional coding with hard/soft decision Viterbi decoding and with finite survivor state memory</a></p>
<p><em>Warning: This simulation took around 10hrs to complete. Am thinking that I will move to C code for simulations involving lots of for-loops</em>.</p>
<p><img class="alignnone size-full wp-image-677" title="BER plot for BPSK with convolutional coding with finite survivor state memory" src="http://www.dsplog.com/db-install/wp-content/uploads/2009/07/ber_plot_bpsk_viterbi_decode_finite_traceback.png" alt="BER plot for BPSK with convolutional coding with finite survivor state memory" width="448" height="336" /></p>
<p><strong>Figure: BER for BPSK with convolutional coding with finite survivor state memory</strong></p>
<h2>Reference</h2>
<p><a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FDigital-Communication-John-R-Barry%2Fdp%2F0792375483&amp;tag=dl04-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325">Digital Communication: Third Edition, by John R. Barry, Edward A. Lee, David G. Messerschmitt</a></p>
<p><a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FDigital-Communications-John-Proakis%2Fdp%2F0072321113&amp;tag=dl04-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325">Digital Communications by John Proakis</a><img style="border: medium none  ! important; margin: 0px ! important;" src="https://www.assoc-amazon.com/e/ir?t=dl04-20&amp;l=ur2&amp;o=1" border="0" alt="" width="1" height="1" /></p>


<p>Related posts:<ol><li><a href='http://www.dsplog.com/2009/01/04/viterbi/' rel='bookmark' title='Permanent Link: Viterbi decoder'>Viterbi decoder</a></li><li><a href='http://www.dsplog.com/2009/08/21/matlab-or-c-for-viterbi-decoder/' rel='bookmark' title='Permanent Link: Matlab or C for Viterbi Decoder?'>Matlab or C for Viterbi Decoder?</a></li><li><a href='http://www.dsplog.com/2009/01/14/soft-viterbi/' rel='bookmark' title='Permanent Link: Soft Input Viterbi decoder'>Soft Input Viterbi decoder</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=cOoXbC5t73s:8HGKc_eBMW8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=cOoXbC5t73s:8HGKc_eBMW8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=cOoXbC5t73s:8HGKc_eBMW8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=cOoXbC5t73s:8HGKc_eBMW8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=cOoXbC5t73s:8HGKc_eBMW8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=cOoXbC5t73s:8HGKc_eBMW8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dsplogdotcom?a=cOoXbC5t73s:8HGKc_eBMW8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/dsplogdotcom?i=cOoXbC5t73s:8HGKc_eBMW8:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dsplogdotcom/~4/cOoXbC5t73s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dsplog.com/2009/07/27/viterbi-with-finite-survivor-state-memory/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.dsplog.com/2009/07/27/viterbi-with-finite-survivor-state-memory/</feedburner:origLink></item>
	</channel>
</rss>
