--- 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