Diff of /doc/comms.txi [ca2812] .. [e9066d] Maximize Restore

  Switch to side-by-side view

--- a/doc/comms.txi
+++ b/doc/comms.txi
@@ -12,7 +12,7 @@
 @author Paul Kienzle
 @page
 @vskip 0pt plus 1filll
-Copyright @copyright{} 2003 
+Copyright @copyright{} 2003
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -80,7 +80,7 @@
 
 The signal creation functions here fall into to two classes. Those that
 treat discrete data and those that treat continuous data. The basic
-function to create discrete data is @dfn{randint}, that creates a 
+function to create discrete data is @dfn{randint}, that creates a
 random matrix of equi-probable integers in a desired range. For example
 
 @example
@@ -109,7 +109,7 @@
 to produce can either be a two element vector or an integer. In the case
 of a two element vector all elements within the defined range can be produced.
 In the case of an integer range @var{M}, @dfn{randint} returns the equi-probable
-integers in the range 
+integers in the range
 @tex
 $[0:2^m-1]$.
 @end tex
@@ -119,7 +119,7 @@
 
 The function @dfn{randsrc} differs from @dfn{randint} in that it allows
 a random set of symbols to be created with a given probability. The symbols
-can be real, complex or even characters. However characters and scalars 
+can be real, complex or even characters. However characters and scalars
 can not be mixed. For example
 
 @example
@@ -182,7 +182,7 @@
 
 @example
 octave:1> n = 15; k = 11; nsym = 100;
-octave:2> msg = randint(nsym,k);       ## Binary vector of message 
+octave:2> msg = randint(nsym,k);       ## Binary vector of message
 octave:3> code = encode(msg,n,k,"bch");
 octave:4> berrs = randerr(nsym,n,[0, 1; 0.7, 0.3]);
 octave:5> noisy = mod(code + berrs, 2) ## Add errors to coded message
@@ -191,7 +191,7 @@
 creates a vector @var{msg}, encodes it with a [15,11] BCH code, and then
 add either none or one error per symbol with the chances of an error being
 30%. As previously, @dfn{randerr} accepts a fourth argument as the seed of
-the random number generator allowing the same random set of data to be 
+the random number generator allowing the same random set of data to be
 reproduced.
 
 All of the above functions work on discrete random signals. The functions
@@ -204,7 +204,7 @@
 @end example
 
 Which creates a 10-by-10 matrix of noise with a root mean squared power
-of 0dBW relative to an impedance of 
+of 0dBW relative to an impedance of
 @tex
 $1\Omega$.
 @end tex
@@ -266,8 +266,8 @@
 
 which shows that with a complex return value that the total power is the
 same as a real vector, but that it is equally shared between the real and
-imaginary parts. As previously, @dfn{wgn} accepts a fourth numerical argument 
-as the seed of the random number generator allowing the same random set of 
+imaginary parts. As previously, @dfn{wgn} accepts a fourth numerical argument
+as the seed of the random number generator allowing the same random set of
 data to be reproduced. That is
 
 @example
@@ -297,7 +297,7 @@
 
 which adds noise with a 10dB signal-to-noise ratio to the measured power
 in the desired signal. By default @dfn{awgn} assumes that the desired
-signal is at 0dBW, and the noise is added relative to this assumed 
+signal is at 0dBW, and the noise is added relative to this assumed
 power. This behavior can be modified by the third argument to @dfn{awgn}.
 If the third argument is a numerical value, it is assumed to define the
 power in the input signal, otherwise if the third argument is the string
@@ -334,7 +334,7 @@
 It is important to be able to evaluate the performance of a
 communications system in terms of its bit-error and symbol-error
 rates. Two functions @dfn{biterr} and @dfn{symerr} exist within this
-package to calculate these values, both taking as arguments the 
+package to calculate these values, both taking as arguments the
 expected and the actually received data. The data takes the form
 of matrices or vectors, with each element representing a single
 symbol. They are compared in the following manner
@@ -381,7 +381,7 @@
 @dfn{eyediagram} and @dfn{scatterplot} have different appearance, the
 information presented is similar and so are their inputs. The difference
 between @dfn{eyediagram} and @dfn{scatterplot} is that @dfn{eyediagram}
-segments the data into time intervals and plots the in-phase and 
+segments the data into time intervals and plots the in-phase and
 quadrature components of the signal against this time interval. While
 @dfn{scatterplot} uses a parametric plot of quadrature versus in-phase
 components.
@@ -394,7 +394,7 @@
 In this case the signal is assumed to be real and represented by the vector
 @var{x}.
 @item A complex vector
-In this case the in-phase and quadrature components of the signal are 
+In this case the in-phase and quadrature components of the signal are
 assumed to be the real and imaginary parts of the signal.
 @item A matrix with two columns
 In this case the first column represents the in-phase and the second the
@@ -499,7 +499,7 @@
 octave:7> [i,z] = quantiz(y, table, codes);
 @end example
 
-If a training signal is known that well represents the expected signals, 
+If a training signal is known that well represents the expected signals,
 the quantization levels can be optimized using the @dfn{lloyds} function.
 For example the above example can be continued
 
@@ -532,7 +532,7 @@
 @section Dynamic Range Compression
 
 The final source coding function is @dfn{compand} which is used to
-compress and expand the dynamic range of a signal. For instance 
+compress and expand the dynamic range of a signal. For instance
 consider a logarithm quantized by a linear partitioning. Such a
 partitioning is very poor for this large dynamic range. @dfn{compand}
 can then be used to compress the signal prior to quantization, with
@@ -603,7 +603,7 @@
 @item A non-binary vector
 In this case each element of the vector represents a message or codeword
 in an integer format. The bits of the message or codeword are represented
-by the bits of the vector elements with the least-significant bit 
+by the bits of the vector elements with the least-significant bit
 representing the first element in the message or codeword.
 @end table
 
@@ -620,7 +620,7 @@
 The functions within this toolbox will return data in the same format
 to which it is given. It should be noted that internally the binary
 matrix format is used, and thus if the message or codeword length is
-large it is preferable to use the binary format to avoid internal 
+large it is preferable to use the binary format to avoid internal
 rounding errors.
 
 @node Binary Block Codes, BCH Codes, Data Formats, Block Coding
@@ -630,7 +630,7 @@
 
 @table @asis
 @item Generator Matrix
-A @var{k}-by-@var{n} matrix @var{G} to generate the codewords @var{C} from 
+A @var{k}-by-@var{n} matrix @var{G} to generate the codewords @var{C} from
 the messages @var{T} by the matrix multiplication
 @tex
 $ {\bf C} = {\bf T} {\bf G}$.
@@ -650,16 +650,16 @@
 then an error has been detected. @var{S} can be used with the syndrome
 table to correct this error
 @item Syndrome Table
-A 2^@var{k}-by-@var{n} matrix @var{ST} with the relationship of the error 
+A 2^@var{k}-by-@var{n} matrix @var{ST} with the relationship of the error
 vectors to the non-zero parities of the received symbols. That is, if
-the received symbol is represented as 
+the received symbol is represented as
 @tex
 $ {\bf R} = ( {\bf T} + {\bf E} )\ mod\ 2$,
 @end tex
 @ifnottex
-@var{R} = mod(@var{T} + @var{E}, 2), 
+@var{R} = mod(@var{T} + @var{E}, 2),
 @end ifnottex
-then the error vector @var{E} is 
+then the error vector @var{E} is
 @tex
 ${\bf ST}({\bf S})$.
 @end tex
@@ -765,7 +765,7 @@
 @end example
 
 It should be noted that for large values of @var{n}, the generator,
-parity check and syndrome table matrices are very large. There is 
+parity check and syndrome table matrices are very large. There is
 therefore an internal limitation on the size of the block codes that
 can be created that limits the codeword length @var{n} to less than 64.
 Which is still excessively large for the syndrome table, so use caution
@@ -821,7 +821,7 @@
 [par, gen] = hammgen(4);
 code1 = code2 = zeros(100,15)
 for i=1:100
-  msg = get_msg(i);        
+  msg = get_msg(i);
   code1(i,:) = encode(msg, n, k, 'linear', gen);  # This is faster
   code2(i,:) = encode(msg, n, k, 'hamming');      # than this !!!
 end
@@ -846,7 +846,7 @@
 
 @center Table 2: Table of valid BCH codes with codeword length less than 511.
 
-@multitable @columnfractions .083 .083 .083 .083 .083 .083 .083 .083 .083 .083 .083 .083 
+@multitable @columnfractions .083 .083 .083 .083 .083 .083 .083 .083 .083 .083 .083 .083
 @item  N  @tab  K  @tab  T  @tab  N  @tab  K  @tab  T  @tab  N  @tab  K  @tab  T  @tab  N  @tab  K  @tab  T
 @item   7 @tab   4 @tab   1 @tab 127 @tab  36 @tab  15 @tab 255 @tab  45 @tab  43 @tab 511 @tab 268 @tab  29
 @item  15 @tab  11 @tab   1 @tab 127 @tab  29 @tab  21 @tab 255 @tab  37 @tab  45 @tab 511 @tab 259 @tab  30
@@ -879,7 +879,7 @@
 @item 127 @tab  64 @tab  10 @tab 255 @tab  71 @tab  29 @tab 511 @tab 304 @tab  25 @tab 511 @tab  28 @tab 111
 @item 127 @tab  57 @tab  11 @tab 255 @tab  63 @tab  30 @tab 511 @tab 295 @tab  26 @tab 511 @tab  19 @tab 119
 @item 127 @tab  50 @tab  13 @tab 255 @tab  55 @tab  31 @tab 511 @tab 286 @tab  27 @tab 511 @tab  10 @tab 127
-@item 127 @tab  43 @tab  14 @tab 255 @tab  47 @tab  42 @tab 511 @tab 277 @tab  28 @tab     @tab     @tab 
+@item 127 @tab  43 @tab  14 @tab 255 @tab  47 @tab  42 @tab 511 @tab 277 @tab  28 @tab     @tab     @tab
 @end multitable
 
 @end iftex
@@ -889,7 +889,7 @@
 @end ifnottex
 The first returned column of @dfn{bchpoly} is the codeword length,
 the second the message length and the third the error correction capability
-of the code. Called with one argument, @dfn{bchpoly} returns similar 
+of the code. Called with one argument, @dfn{bchpoly} returns similar
 output, but only for the specified codeword length. In this manner codes
 with codeword length greater than 511 can be found.
 
@@ -914,7 +914,7 @@
 @end example
 
 show that the generator polynomial of a [15,7] BCH code with the default
-primitive polynomial is 
+primitive polynomial is
 
 @tex
 $$ 1 + x^4 + x^6 + x^7 + x^8 $$
@@ -939,7 +939,7 @@
   1  1  1  0  1  0  0  0  1
 @end example
 
-It is recommend not to convert the generator polynomials created by 
+It is recommend not to convert the generator polynomials created by
 @dfn{bchpoly} into generator and parity check matrices with the
 BCH codes, as the underlying BCH software is faster than the generic
 coding software and can treat significantly longer codes.
@@ -947,7 +947,7 @@
 As well as using the @dfn{encode} and @dfn{decode} functions previously
 discussed, the user can directly use the low-level BCH functions
 @dfn{bchenco} and @dfn{bchdeco}. In this case the messages must be
-in the format of a binary matrix with @var{k} columns 
+in the format of a binary matrix with @var{k} columns
 
 @example
 octave:1> n = 31;
@@ -973,16 +973,16 @@
 @node Representation of Reed-Solomon Messages, Creating and Decoding Messages, , Reed-Solomon Codes
 @subsection Representation of Reed-Solomon Messages
 
-The Reed-Solomon coder used in this package is based on code written by 
+The Reed-Solomon coder used in this package is based on code written by
 Phil Karn (http://www.ka9q.net/code/fec). This code was originally written
 in C and has been converted for use as an Octave oct-file.
 
 Reed-Solomon codes are based on Galois Fields of even characteristics
 GF(2^M). Many of the properties of Galois Fields are therefore important
-when considering Reed-Solomon coders. 
+when considering Reed-Solomon coders.
 
 The representation of the symbols of the Reed-Solomon code differs from
-the other block codes, in that the other block codes use a binary 
+the other block codes, in that the other block codes use a binary
 representation, while the Reed-Solomon code represents each m-bit symbol
 by an integer. The elements of the message and codeword must be elements
 of the Galois Field corresponding to the Reed-Solomon code. Thus to
@@ -996,7 +996,7 @@
 msg =
 GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-Array elements = 
+Array elements =
 
   5  0  6  3  2
   4  1  3  1  2
@@ -1005,7 +1005,7 @@
 code =
 GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-Array elements = 
+Array elements =
 
   5  0  6  3  2  3  5
   4  1  3  1  2  6  3
@@ -1067,7 +1067,7 @@
 @end example
 @end ifnottex
 
-where @var{t} is @code{(@var{n}-@var{k})/2}, A is the primitive element 
+where @var{t} is @code{(@var{n}-@var{k})/2}, A is the primitive element
 of the Galois Field, @var{b} is the first consecutive root, and @var{s}
 is the step between roots. Generator polynomial of this form are constructed
 by @dfn{rsgenpoly} and can be passed to both @dfn{rsenc} and @dfn{rsdec}.
@@ -1101,7 +1101,7 @@
   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1
 @end example
 
-This is an interesting example in that it demonstrates many of the 
+This is an interesting example in that it demonstrates many of the
 additional arguments of the Reed-Solomon functions. In particular
 this example approximates the CCSDS standard Reed-Solomon coder,
 lacking only the dual-basis lookup tables used in this standard.
@@ -1112,7 +1112,7 @@
 The example creates 17 message blocks and adds between 1 and 17 error
 symbols to these block. As can be seen @var{nerr} gives the number of
 errors corrected. In the case of 17 introduced errors @var{nerr}
-equals -1, indicating a decoding failure. This is normal as the 
+equals -1, indicating a decoding failure. This is normal as the
 correction ability of this code is up to 16 error symbols. Comparing
 the input message and the decoding it can be seen that as expected,
 only the case of 17 errors has not been correctly decoded.
@@ -1122,10 +1122,10 @@
 
 In general the codeword length of the Reed-Solomon coder is chosen so
 that it is related directly to the order of the Galois Field by the
-formula @code{@var{n} = 2^@var{m} = 1}. Although, the underlying 
+formula @code{@var{n} = 2^@var{m} = 1}. Although, the underlying
 Reed-Solomon coding must operate over valid codeword length, there
 are sometimes reasons to assume that the codeword length will be shorter.
-In this case the message is padded with zeros before coding, and the 
+In this case the message is padded with zeros before coding, and the
 zeros are stripped from the returned block. For example consider the
 shortened [6,4] Reed-Solomon below
 
@@ -1137,7 +1137,7 @@
 msg =
 GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-Array elements = 
+Array elements =
 
   7  0  2  5
   1  5  7  1
@@ -1146,7 +1146,7 @@
 code =
 GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-Array elements = 
+Array elements =
 
   7  0  2  5  2  3
   1  5  7  1  0  2
@@ -1196,7 +1196,7 @@
 
 The elements of the Galois Field GF(2^M) are represented as the values
 0 to 2^M -1 by Octave. The first two elements represent the zero and unity
-values of the Galois Field and are unique in all fields. The element 
+values of the Galois Field and are unique in all fields. The element
 represented by 2 is the primitive element of the field and all elements can
 be represented as combinations of the primitive element and unity as follows
 
@@ -1220,7 +1220,7 @@
 This code was written as a challenge by Paul Kienzle (octave forge) to
 convert a Reed-Solomon coder I had in Octave to be compatible with
 Matlab communications toolbox R13. This forced the need to have a complete
-library of functions over the even Galois Fields. Although this code 
+library of functions over the even Galois Fields. Although this code
 was written to be compatible with the equivalent Matlab code, I did not
 have access to a version of Matlab with R13 installed, and thus this code
 is based on Matlab documentation only. No compatibility testing has been
@@ -1248,13 +1248,13 @@
 b =
 GF(2^4) array. Primitive Polynomial = D^4+D+1 (decimal 19)
 
-Array elements = 
+Array elements =
 
   0  1  2  3  4  5  6  7
 @end example
 
-This creates an array @var{b} with 8 elements that Octave recognizes as a 
-Galois Field. The field is created with the default primitive polynomial for 
+This creates an array @var{b} with 8 elements that Octave recognizes as a
+Galois Field. The field is created with the default primitive polynomial for
 the field GF(2^4). It can be verified that a variable is in fact a Galois
 Field with the functions @code{isgalois} or @code{whos}.
 
@@ -1273,7 +1273,7 @@
  rwd  galois                        1      8  b
 @end example
 
-It is also possible to create a Galois Field with an arbitrary primitive 
+It is also possible to create a Galois Field with an arbitrary primitive
 polynomial. However, if the polynomial is not a primitive polynomial of
 the field, and error message is returned. For instance.
 
@@ -1283,7 +1283,7 @@
 b =
 GF(2^4) array. Primitive Polynomial = D^4+D^3+1 (decimal 25)
 
-Array elements = 
+Array elements =
 
   0  1  2  3  4  5  6  7
 
@@ -1305,7 +1305,7 @@
 The function @code{gf(@var{a},@var{m})} creates a Galois Field using the default primitive
 polynomial. However there exists many possible primitive polynomials for most
 Galois Fields. Two functions exist for identifying primitive polynomials,
-@dfn{isprimitive} and @dfn{primpoly}. @code{primpoly(@var{m},@var{opt})} is 
+@dfn{isprimitive} and @dfn{primpoly}. @code{primpoly(@var{m},@var{opt})} is
 used to identify the primitive polynomials of the fields GF(2^M). For example
 
 @example
@@ -1319,7 +1319,7 @@
 @end example
 
 identifies the default primitive polynomials of the field GF(2^M), which
-is the same as @code{primpoly(4,"min")}. All of the primitive polynomials 
+is the same as @code{primpoly(4,"min")}. All of the primitive polynomials
 of a field can be identified with the function @code{primpoly(@var{m},"all")}.
 For example
 
@@ -1336,9 +1336,9 @@
   19  25
 @end example
 
-while @code{primpoly(@var{m},"max")} returns the maximum primitive polynomial 
+while @code{primpoly(@var{m},"max")} returns the maximum primitive polynomial
 of the field, which for the case above is 25. The function @dfn{primpoly}
-can also be used to identify the primitive polynomials having only a 
+can also be used to identify the primitive polynomials having only a
 certain number of non-zero terms. For instance
 
 @example
@@ -1378,9 +1378,9 @@
 @end example
 
 @code{isprimitive(@var{a})} identifies whether the elements of @var{a} can
-be used as primitive polynomials of the Galois Fields GF(2^M). Consider 
-as an example the fields GF(2^4). The primitive polynomials of these fields 
-must have an order m and so their integer representation must be between 
+be used as primitive polynomials of the Galois Fields GF(2^M). Consider
+as an example the fields GF(2^4). The primitive polynomials of these fields
+must have an order m and so their integer representation must be between
 16 and 31. Therefore @dfn{isprimitive} can be used in a similar manner to
 @dfn{primpoly} as follows
 
@@ -1399,7 +1399,7 @@
 Once a variable has been defined as a Galois Field, the parameters of the
 field of this structure can be obtained by adding a suffix to the variable.
 Valid suffixes are '.m', '.prim_poly' and '.x', which return the order of the
-Galois Field, its primitive polynomial and the data the variable contains 
+Galois Field, its primitive polynomial and the data the variable contains
 respectively. For instance
 
 @example
@@ -1411,7 +1411,7 @@
 ans = 19
 octave:5> c = b.x;
 octave:6> whos
- 
+
 *** local user variables:
 
 prot  type                       rows   cols  name
@@ -1450,12 +1450,12 @@
 that many of the internal functions of Octave, such as @dfn{roots}, can
 not accept Galois Fields as an input. This package therefore uses Octave
 classes to @emph{overload} the internal Octave functions with equivalent
-functions that work with Galois Fields, so that the standard function names 
-can be used. 
-
-The version of the function that is chosen is determined by the first 
-argument of the function. This is a temporary situation until the 
-Galois Field class constructor can be rewritten to allow the use of the 
+functions that work with Galois Fields, so that the standard function names
+can be used.
+
+The version of the function that is chosen is determined by the first
+argument of the function. This is a temporary situation until the
+Galois Field class constructor can be rewritten to allow the use of the
 @code{superiorto} function to define the galois class with a higher
 precedence. So, considering the @dfn{filter} function,
 if the first argument is a @emph{Matrix}, then the normal version of
@@ -1490,9 +1490,9 @@
 
 @table @asis
 @item Concatenation
-For versions of Octave prior to 2.1.58, the concatenation of Galois arrays 
-returns a Matrix type. That is @code{[gf([1, 0],m) gf(1, m)]} returns a 
-matrix went it should return another Galois array. The workaround is to 
+For versions of Octave prior to 2.1.58, the concatenation of Galois arrays
+returns a Matrix type. That is @code{[gf([1, 0],m) gf(1, m)]} returns a
+matrix went it should return another Galois array. The workaround is to
 explicitly convert the returned value back to the correct Galois field using
 @code{gf([gf([1, 0],m) gf(1,m)],m)}.
 
@@ -1528,7 +1528,7 @@
 @example
 octave:2> x = a.x; m = a.m; p = a.prim_poly;
 octave:3> save a.mat x m p;
-@end example  
+@end example
 
 @item Logarithm of zero does not return NaN
 The logarithm of zero in a Galois field is not defined. However, to avoid
@@ -1544,7 +1544,7 @@
 a =
 GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-Array elements = 
+Array elements =
 
   7  0  1  3  2  6  4  5
 @end example
@@ -1555,7 +1555,7 @@
 
 @item Speed
 The code was written piece-meal with no attention to optimum code. Now
-that I have something working I should probably go back and tidy the 
+that I have something working I should probably go back and tidy the
 code up, optimizing it at the same time.
 
 @end table
@@ -1585,7 +1585,7 @@
 a =
 GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-Array elements = 
+Array elements =
 
   0  1  2  3  4  5  6  7
   7  6  5  4  3  2  1  0
@@ -1594,7 +1594,7 @@
 b =
 GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-Array elements = 
+Array elements =
 
   0  1  2  3  4  5  6  7
 @end example
@@ -1610,7 +1610,7 @@
 a =
 GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-Array elements = 
+Array elements =
 
   0  0  0  0  0  0  0  0
   1  1  1  1  1  1  1  1
@@ -1652,7 +1652,7 @@
 same field.
 
 As Octave supports concatenation of typed matrices only for version
-2.1.58 and later, matrix concatenation will force the Galois array back 
+2.1.58 and later, matrix concatenation will force the Galois array back
 to a normal matrix for earlier version. For instance for Octave 2.1.58
 and later.
 
@@ -1664,7 +1664,7 @@
 *** local user variables:
 
   Prot Name       Size  Bytes  Class
-  ==== ====       ====  =====  ===== 
+  ==== ====       ====  =====  =====
    rwd a          2x8      64  galois
    rwd b          2x16    128  galois
 
@@ -1733,7 +1733,7 @@
 Unary plus. This operator has no effect on the operand.
 
 @item -@var{x}
-Unary minus. Note that in a Galois Field this operator also has no effect 
+Unary minus. Note that in a Galois Field this operator also has no effect
 on the operand.
 
 @item !@var{x}
@@ -1763,7 +1763,7 @@
 @end example
 
 is valid, while
- 
+
 @example
 octave:1> a = gf([0:7],3);
 octave:2> b = a + [1:8];
@@ -1776,7 +1776,7 @@
 @item @var{x} + @var{y}
 Addition. If both operands are Galois arrays or matrices, the number of rows
 and columns must both agree.  If one operand is a is a Galois array with a
-single element or a scalar, its value is added to all the elements of the 
+single element or a scalar, its value is added to all the elements of the
 other operand. The @code{+} operator on a Galois Field is equivalent to an
 exclusive-or on normal integers.
 
@@ -1809,7 +1809,7 @@
 @noindent
 but it is computed without forming the inverse of @var{y'}.
 
-If the matrix is singular then an error occurs. If the matrix is 
+If the matrix is singular then an error occurs. If the matrix is
 under-determined, then a particular solution is found (but not minimum
 norm). If the solution is over-determined, then an attempt is made
 to find a solution, but this is not guaranteed to work.
@@ -1827,7 +1827,7 @@
 @noindent
 but it is computed without forming the inverse of @var{x}.
 
-If the matrix is singular then an error occurs. If the matrix is 
+If the matrix is singular then an error occurs. If the matrix is
 under-determined, then a particular solution is found (but not minimum
 norm). If the solution is over-determined, then an attempt is made
 to find a solution, but this is not guaranteed to work.
@@ -1877,13 +1877,13 @@
   0  1  0  0  0  0  0  0
 @end example
 
-To test if any or all of the values in a Galois array are non-zero, the 
+To test if any or all of the values in a Galois array are non-zero, the
 functions @dfn{any} and @dfn{all} can be used as normally.
 
 In addition the comparison operators @code{>}, @code{>=}, @code{<} and
 @code{<=} are available. As elements of the Galois Field are modulus
 2^@var{m}, all elements of the field are both greater than and less than
-all others at the same time.Thus these comparison operators don't make 
+all others at the same time.Thus these comparison operators don't make
 that much sense and are only included for completeness. The comparison is
 done relative to the integer value of the Galois Field elements.
 
@@ -1920,7 +1920,7 @@
 sumpoly =
 GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-Array elements = 
+Array elements =
 
   2  4  4  3
 @end example
@@ -1937,7 +1937,7 @@
 mulpoly =
 GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-Array elements = 
+Array elements =
 
   2  0  6  0  2
 @end example
@@ -1950,14 +1950,14 @@
 poly =
 GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-Array elements = 
+Array elements =
 
   2  4  5  1
 
 remd =
 GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-Array elements = 
+Array elements =
 
   0  0  0  0  0
 @end example
@@ -1975,7 +1975,7 @@
 y0 =
 GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-Array elements = 
+Array elements =
 
   1  2  0
 
@@ -1984,7 +1984,7 @@
 y1 =
 GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-Array elements = 
+Array elements =
 
   1  2  0
 @end example
@@ -1999,7 +1999,7 @@
 root1 =
 GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-Array elements = 
+Array elements =
 
   2
   5
@@ -2015,7 +2015,7 @@
 check1 =
 GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-Array elements = 
+Array elements =
 
   0
   0
@@ -2032,7 +2032,7 @@
 root3 =
 GF(2^3) array. Primitive Polynomial = D^3+D^2+1 (decimal 13)
 
-Array elements = 
+Array elements =
 
   5
 @end example
@@ -2052,14 +2052,14 @@
 b =
 GF(2) array.
 
-Array elements = 
+Array elements =
 
   1  0  1  1
 @end example
 
 Note that the minimum polynomial of the primitive element is the primitive
 polynomial. Elements of GF(2^M) sharing the same minimum polynomial form a
-partitioning of the field. This partitioning can be found with the 
+partitioning of the field. This partitioning can be found with the
 @dfn{cosets} function as follows
 
 @example
@@ -2069,21 +2069,21 @@
   [1,1] =
   GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-  Array elements = 
+  Array elements =
 
     1
 
   [2,1] =
   GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-  Array elements = 
+  Array elements =
 
     2  4  6
 
   [3,1] =
   GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
 
-  Array elements = 
+  Array elements =
 
     3  5  7
 
@@ -2108,7 +2108,7 @@
 
 such that @code{@var{p} * @var{a} = @var{l} * @var{u}}. The matrix @var{p}
 contains row permutations of @var{a}, such that @var{l} and @var{u} are
-strictly upper and low triangular. The Galois array @var{a} can be 
+strictly upper and low triangular. The Galois array @var{a} can be
 rectangular.
 
 All other linear algebra operations within this package are based on this
@@ -2154,7 +2154,7 @@
 
 Signal processing functions such as filtering, convolution, de-convolution
 and Fourier transforms can be performed over Galois Fields. For instance
-the @dfn{filter} function can be used with Galois vectors in the same 
+the @dfn{filter} function can be used with Galois vectors in the same
 manner as usual. For instance
 
 @example
@@ -2165,7 +2165,7 @@
 y =
 GF(2^2) array. Primitive Polynomial = D^2+D+1 (decimal 7)
 
-Array elements = 
+Array elements =
 
   1  0  3  0  2  3  1  0  1  3  3  1  0  1  3  3  1  0  1  3  3
 @end example
@@ -2173,7 +2173,7 @@
 gives the impulse response of the filter defined by @var{a} and @var{b}.
 
 Two equivalent ways are given to perform the convolution of two Galois
-vectors. Firstly the function @dfn{conv} can be used, or alternatively 
+vectors. Firstly the function @dfn{conv} can be used, or alternatively
 the function @dfn{convmtx} can be used. The first of these function is
 identical to the convolution function over real vectors, and has been
 described in the section about multiplying two Galois polynomials.
@@ -2200,9 +2200,9 @@
 functions to perform Fourier transforms over a Galois field. Three
 functions are available, @dfn{fft}, @dfn{ifft} and @dfn{dftmtx}. The
 first two functions use the third to perform their work. Given an element
-@var{a} of the Galois field GF(2^M), @dfn{dftmtx} returns the @code{2^M - 1} 
-square matrix used in the Fourier transforms with respect to @var{a}. The 
-minimum polynomial of @var{a} must be primitive in GF(2^M). In the case of 
+@var{a} of the Galois field GF(2^M), @dfn{dftmtx} returns the @code{2^M - 1}
+square matrix used in the Fourier transforms with respect to @var{a}. The
+minimum polynomial of @var{a} must be primitive in GF(2^M). In the case of
 the @dfn{fft} function @dfn{dftmtx} is called with the primitive element of
 the Galois Field as an argument. As an example