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