Table Of ContentERROR CODING
FOR ENGINEERS
THE KLUWER INTERNATIONAL SERIES
IN ENGINEERING AND COMPUTER SCIENCE
ERROR CODING
FOR ENGINEERS
A. Houghton
Synectic Systems, Ltd., United Kingdom
SPRINGER. SCIENCE+BUSINESS MEDIA, LLC
Library of Congress Cataloging-in-Publication Data
Houghton, A.
Error coding for engineers / A. Houghton.
p.cm. - (The Kluwer international series in engineering and computer science; SECS 641)
Includes bibliographical references and index.
ISBN 978-1-4613-5589-2 ISBN 978-1-4615-1509-8 (eBook)
DOI 10.1007/978-1-4615-1509-8
1. Signal processing. 2. Error-correcting codes (Information theory) 1. Title. II. Series.
TK5102.9 .H69 2001
005.7'2--dc21
2001038560
Copyright © 2001 by Springer Science+Business Media New York
Originally published by Kluwer Academic Publishers in 2001
Softcover reprint ofthe hardcover Ist edition 2001
AII rights reserved. No part of this publication may be reproduced, stored in a
retrieval system or transmitted in any form or by any means, mechanical, photo
copying, recording, or otherwise, without the prior written permission of the
publisher.
Printed on acid-free paper.
Table of Contents
Preface IX
1. Introduction 1
1.1 Messages Need Space 1
1.2 The Hamming Bound 4
1.3 The Gilbert Bound 6
1.4 Where Do Errors Come From? 7
1.5 ABrief History of Error Coding 12
1.6 Summary 13
2. A Little Maths 15
2.1 Polynomials and Finite Fields 16
2.2 Manipulating Field Elements 19
2.3 Summary 24
3. Error Detection 25
3.1 The Horizontal and Vertical Parity Check 25
3.2 The Cyc1ic Redundancy Check 27
3.3 Longhand Ca1culation of the CRC 28
3.4 Performance 31
3.5 Hardware Implementation 32
3.6 Table-Based Ca1culation of the CRC 35
3.7 Discussion 39
4. Error Correction by Parity 41
4.1 Correcting a Single Bit 43
4.2 Extending the Message Size 45
5. Error Correction Using the CRC 49
5.1 A Hardware Error Locator 52
5.2 Multiple Bit Errors 53
5.3 Expurgated Codes 54
5.4 The Perfect Golay Code 56
5.5 Fire Codes 63
6. Reed-Muller Codes 67
6.1 Constructing a Generator Matrix For RM Codes 67
6.2 Encoding with the Hadamard Matrix 74
6.3 Discussion 77
7. Reed-Solomon Codes 79
7.1 Introduction to the Time Domain 79
7.2 Calculation of the Check Symbols for One Error 80
7.3 Correcting Two Symbols 83
7.4 Error Correction in the Frequency Domain 88
7.5 Recursive Extension 91
7.6 The Berlekamp-Massey Algorithm 97
7.7 The Fomey Algorithm 100
7.8 Mixed-Domain Error Coding 101
7.9 Higher Dimensional Data Structures 107
7.10 Discussion 118
8. Augmenting Error Coding 119
8.1 Erasure 119
8.2 Punctured Codes 121
8.3 Interleaving 125
8.4 Error Forecasting 130
8.5 Discussion 131
9. Convolutional Coding 133
9.1 Error Correction with Convolutional Codes 135
9.2 Finding the Correct Path 136
9.3 Decoding with Soft Decisions 138
9.4 Performance of Convolutional Codes 140
9.5 Concatenated Codes 141
9.6 Iterative Decoding 142
9.7 Turbo Coding 143
9.8 Discussion 144
vi
10. Hardware 147
10.1 Reducing Elements 147
10.2 Multiplication 149
10.3 Division 153
10.4 Logs and Exponentials 158
10.5 Reciprocal 160
10.6 Discussion 164
11. Bit Error Rates 165
11.1 The Gaussian Normal Function 165
11.2 Estimating the Bit Error Rate 166
11.3 Applications 172
11.4 Discussion 176
12. Exercises 177
12.1 Parity Exercises 177
12.2 CRC Exercises 178
12.3 Finite Field Algebra 180
12.4 Convolutional Codes 183
12.5 OtherCodes 183
12.6 Solutions to Parity Exercises 184
12.7 Solutions to CRC Exercises 186
12.8 Solutions to Finite Field Algebra 192
12.9 Solutions to Convolutional Coding 202
12.10 Solutions to Other Codes 203
12.11 Closing Remarks 208
12.12 Bibliography 208
AppendixA Primitive Polynomials 211
Appendix B The Golay Code 219
Appendix C Solving for Two Errors 223
Appendix D Solving some Key Equations 229
AppendixF Software Library 233
Index 245
vii
Preface
Error coding is the art of encoding messages so that errors can be detected
and, if appropriate, corrected after transmission or storage. A full
appreciation of error coding requires a good background in whole number
maths, symbols and abstract ideas. However, the mechanics of error coding
are often quite easy to grasp with the assistance of a few good examples.
This book is about the mechanics. In other words, if you're interested in
implementing error coding schemes but have no idea what a finite field is,
then this book may help you. The material covered starts with simple coding
schemes which are often rather inefficient and, as certain concepts are
established, progresses to more sophisticated techniques.
Error coding is a bit like the suspension in a car. Mostly it's unseen, but the
thing would be virtually useless without it. In truth, error coding underpins
nearly all modem digital systems and without it, they simply couldn't work.
Probably like some car suspensions, the elegance of error coding schemes is
often amazing. While it's a bit early to talk about things like efficiency, two
schemes of similar efficiency might yield vastly different performance and,
in this way, error coding is rather 'holistic'; it can't be treated properly
outside of the context for which it is required. WeIl, more of this later. For
now, if you're interested in whole number maths (which is actually really
good fun), have a problem which requires error coding, are an undergraduate
studying DSP or communications, but you don't have a formal background in
maths, then this could be the book for you. Principally, you will require a
working knowledge ofbinary; the rest can be picked up along the way.
x
Chapter 1
INTRODUCTION
The chapter deals with an overview of error coding, not especially in terms
of what' s been achieved over the years or what is the current state of the
subject, but in pragmatic terms of what' s undemeath it that makes it work.
The maths which surrounds error coding serves two key purposes; one, it
shows us what can theoretically be achieved by error coding and what we
might reasonable have to do to get there and, two, it provides mechanisms
for implementing practical coding schemes. Both of these aspects are,
without doubt daunting for anyone whose principal background is not maths
yet, for the engineer who needs to implement error coding, many of the
practical aspects of error coding are tractable.
1.1 Messages Need Space
Space is at the heart of all error coding so it seems like a good place to
start. If I transmit an 8-bit number to you by some means, outside of any
context, you can have absolutely no idea whether or not what you receive is
what I sent. At best, if you were very clever and knew something about the
quality of the channel which I used to send the byte (an 8-bit number) to
you, you could work out how likely it is that the number is correct. In fact,
quite a lot of low-speed communication works on the basis that the channel
is good enough that most of the time there are no errors. The reason that you
A. Houghton, Error Coding for Engineers
© Kluwer Academic Publishers 2001