diff --git a/lib/ldpc/COPYRIGHT b/lib/ldpc/COPYRIGHT new file mode 100755 index 000000000..9cd0d7f65 --- /dev/null +++ b/lib/ldpc/COPYRIGHT @@ -0,0 +1,15 @@ +Except as otherwise specified, all program code and documentation in this +directory is copyright (c) 1995-2012 by Radford M. Neal. + +Permission is granted for anyone to copy, use, modify, and distribute +these programs and accompanying documents for any purpose, provided +this copyright notice is retained and prominently displayed, and note +is made of any changes made to these programs. These programs and +documents are distributed without any warranty, express or implied. +As the programs were written for research purposes only, they have not +been tested to the degree that would be advisable in any important +application. All use of these programs is entirely at the user's own +risk. + +Some routines in the module rand.c are taken from the GNU C Library, +and are copyrighted as described there and in the file LGPL. diff --git a/lib/ldpc/LDPC-install b/lib/ldpc/LDPC-install new file mode 100755 index 000000000..0ca12aceb --- /dev/null +++ b/lib/ldpc/LDPC-install @@ -0,0 +1,28 @@ +#!/bin/sh + +# Copy the LPDC programs to the directory specified. The program file +# might be the name of the program, or (eg, on Cygwin) the name of the +# program with .exe appended. + +if [ x$1 == x -o x$2 != x ]; then + echo Usage: LDPC-install bin-directory + exit 1 +fi + +echo Installing LPDC programs in $1 + +mkdir -p $1 + +for prog in make-pchk alist-to-pchk pchk-to-alist \ + make-ldpc print-pchk make-gen print-gen \ + rand-src encode transmit decode extract verify; do + if [ -f $prog ]; then + cp $prog $1 + elif [ -f $prog.exe ]; then + cp $prog.exe $1 + else + echo No program $prog to install + fi +done + +echo Done diff --git a/lib/ldpc/LGPL b/lib/ldpc/LGPL new file mode 100755 index 000000000..7106bb0ae --- /dev/null +++ b/lib/ldpc/LGPL @@ -0,0 +1,463 @@ +The following is the license under which the portions of the GNU C +library used in the rand.c module is distributed. Note that this +license does not apply to the rest of this software. + + +GNU LESSER GENERAL PUBLIC LICENSE +Version 2.1, February 1999 + +Copyright (C) 1991, 1999 Free Software Foundation, Inc. +59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts +as the successor of the GNU Library Public License, version 2, hence +the version number 2.1.] + +Preamble + +The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + +This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + +When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + +To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + +For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + +We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + +To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + +Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + +Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + +When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + +We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + +For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + +In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + +Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + +The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + +GNU LESSER GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + +A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + +The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + +"Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of e Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + +1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + +You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + +2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + +a) The modified work must itself be a software library. + +b) You must cause the files modified to carry prominent notices +stating that you changed the files and the date of any change. + +c) You must cause the whole of the work to be licensed at no +charge to all third parties under the terms of this License. + +d) If a facility in the modified Library refers to a function or a +table of data to be supplied by an application program that uses +the facility, other than as an argument passed when the facility +is invoked, then you must make a good faith effort to ensure that, +in the event an application does not supply such function or +table, the facility still operates, and performs whatever part of +its purpose remains meaningful. + +(For example, a function in a library to compute square roots has +a purpose that is entirely well-defined independent of the +application. Therefore, Subsection 2d requires that any +application-supplied function or table used by this function must +be optional: if the application does not supply it, the square +root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + +3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + +Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + +This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + +4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + +If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + +5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + +However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + +When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + +If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + +Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + +6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + +You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + +a) Accompany the work with the complete corresponding +machine-readable source code for the Library including whatever +changes were used in the work (which must be distributed under +Sections 1 and 2 above); and, if the work is an executable linked +with the Library, with the complete machine-readable "work that +uses the Library", as object code and/or source code, so that the +user can modify the Library and then relink to produce a modified +executable containing the modified Library. (It is understood +that the user who changes the contents of definitions files in the +Library will not necessarily be able to recompile the application +to use the modified definitions.) + +b) Use a suitable shared library mechanism for linking with the +Library. A suitable mechanism is one that (1) uses at run time a +copy of the library already present on the user's computer system, +rather than copying library functions into the executable, and (2) +will operate properly with a modified version of the library, if +the user installs one, as long as the modified version is +interface-compatible with the version that the work was made with. + +c) Accompany the work with a written offer, valid for at +least three years, to give the same user the materials +specified in Subsection 6a, above, for a charge no more +than the cost of performing this distribution. + +d) If distribution of the work is made by offering access to copy +from a designated place, offer equivalent access to copy the above +specified materials from the same place. + +e) Verify that the user has already received a copy of these +materials or that you have already sent this user a copy. + +For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + +It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + +7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + +a) Accompany the combined library with a copy of the same work +based on the Library, uncombined with any other library +facilities. This must be distributed under the terms of the +Sections above. + +b) Give prominent notice with the combined library of the fact +that part of it is a work based on the Library, and explaining +where to find the accompanying uncombined form of the same work. + +8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + +9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + +10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + +11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + +12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + +13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + +14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + +NO WARRANTY + +15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + +END OF TERMS AND CONDITIONS diff --git a/lib/ldpc/Makefile b/lib/ldpc/Makefile new file mode 100755 index 000000000..13c372303 --- /dev/null +++ b/lib/ldpc/Makefile @@ -0,0 +1,116 @@ +# MAKEFILE FOR LDPC PROGRAMS & ASSOCIATED UTILITIES. + +# Copyright (c) 1995-2012 by Radford M. Neal. +# +# Permission is granted for anyone to copy, use, modify, and distribute +# these programs and accompanying documents for any purpose, provided +# this copyright notice is retained and prominently displayed, and note +# is made of any changes made to these programs. These programs and +# documents are distributed without any warranty, express or implied. +# As the programs were written for research purposes only, they have not +# been tested to the degree that would be advisable in any important +# application. All use of these programs is entirely at the user's own +# risk. + + +# NOTE: The natural random numbers in "randfile" are accessed by the +# 'rand' module via a path to this directory. Change the definition of +# RAND_FILE in the compilation command for rand.c below if this is not +# appropriate. + +# NOTE: This makefile is trivial, simply recompiling everything from +# scratch every time. Since this takes only about 5 seconds on a modern +# PC, there's no point in putting in dependency-based rules, which just +# make things more complex and error-prone. + + +COMPILE = cc -c -O # Command to compile a module from .c to .o +LINK = cc # Command to link a program + + +# MAKE ALL THE MAIN PROGRAMS. First makes the modules used. + +progs: modules + $(COMPILE) make-pchk.c + $(LINK) make-pchk.o mod2sparse.o mod2dense.o mod2convert.o \ + rcode.o alloc.o intio.o open.o -lm -o make-pchk + $(COMPILE) alist-to-pchk.c + $(LINK) alist-to-pchk.o mod2sparse.o mod2dense.o mod2convert.o \ + rcode.o alloc.o intio.o open.o -lm -o alist-to-pchk + $(COMPILE) pchk-to-alist.c + $(LINK) pchk-to-alist.o mod2sparse.o mod2dense.o mod2convert.o \ + rcode.o alloc.o intio.o open.o -lm -o pchk-to-alist + $(COMPILE) make-ldpc.c + $(LINK) make-ldpc.o mod2sparse.o mod2dense.o mod2convert.o \ + rcode.o rand.o alloc.o intio.o open.o distrib.o -lm -o make-ldpc + $(COMPILE) print-pchk.c + $(LINK) print-pchk.o mod2sparse.o mod2dense.o mod2convert.o \ + rcode.o rand.o alloc.o intio.o open.o -lm -o print-pchk + $(COMPILE) make-gen.c + $(LINK) make-gen.o mod2sparse.o mod2dense.o mod2convert.o \ + rcode.o alloc.o intio.o open.o -lm -o make-gen + $(COMPILE) print-gen.c + $(LINK) print-gen.o mod2sparse.o mod2dense.o mod2convert.o \ + rcode.o rand.o alloc.o intio.o open.o -lm -o print-gen + $(COMPILE) rand-src.c + $(LINK) rand-src.o rand.o open.o -lm -o rand-src + $(COMPILE) encode.c + $(LINK) encode.o mod2sparse.o mod2dense.o mod2convert.o \ + enc.o rcode.o rand.o alloc.o intio.o blockio.o open.o -lm -o encode + $(COMPILE) transmit.c + $(LINK) transmit.o channel.o rand.o open.o -lm -o transmit + $(COMPILE) decode.c + $(LINK) decode.o channel.o mod2sparse.o mod2dense.o mod2convert.o \ + enc.o check.o \ + rcode.o rand.o alloc.o intio.o blockio.o dec.o open.o -lm -o decode + $(COMPILE) extract.c + $(LINK) extract.o mod2sparse.o mod2dense.o mod2convert.o \ + rcode.o alloc.o intio.o blockio.o open.o -lm -o extract + $(COMPILE) verify.c + $(LINK) verify.o mod2sparse.o mod2dense.o mod2convert.o check.o \ + rcode.o alloc.o intio.o blockio.o open.o -lm -o verify + + +# MAKE THE TEST PROGRAMS. First makes the modules used. + +tests: modules + $(COMPILE) mod2dense-test.c + $(LINK) mod2dense-test.o mod2dense.o alloc.o intio.o \ + -lm -o mod2dense-test + $(COMPILE) mod2sparse-test.c + $(LINK) mod2sparse-test.o mod2sparse.o alloc.o intio.o \ + -lm -o mod2sparse-test + $(COMPILE) mod2convert-test.c + $(LINK) mod2convert-test.o mod2convert.o mod2dense.o mod2sparse.o \ + alloc.o intio.o rand.o open.o -lm -o mod2convert-test + $(COMPILE) rand-test.c + $(LINK) rand-test.o rand.o -lm -o rand-test + + +# MAKE THE MODULES USED BY THE PROGRAMS. + +modules: + $(COMPILE) rcode.c + $(COMPILE) channel.c + $(COMPILE) dec.c + $(COMPILE) enc.c + $(COMPILE) alloc.c + $(COMPILE) intio.c + $(COMPILE) blockio.c + $(COMPILE) check.c + $(COMPILE) open.c + $(COMPILE) mod2dense.c + $(COMPILE) mod2sparse.c + $(COMPILE) mod2convert.c + $(COMPILE) distrib.c + $(COMPILE) -DRAND_FILE=\"`pwd`/randfile\" rand.c + + +# CLEAN UP ALL PROGRAMS AND REMOVE ALL FILES PRODUCED BY TESTS AND EXAMPLES. + +clean: + rm -f core *.o *.exe ex-*.* test-file \ + make-pchk alist-to-pchk pchk-to-alist \ + make-ldpc print-pchk make-gen print-gen \ + rand-src encode transmit decode extract verify \ + mod2dense-test mod2sparse-test mod2convert-test rand-test diff --git a/lib/ldpc/README b/lib/ldpc/README new file mode 100755 index 000000000..dd34af58a --- /dev/null +++ b/lib/ldpc/README @@ -0,0 +1,6 @@ +This is a collection of programs and modules, written in C, that +support research and education concerning Low Density Parity Check +(LDPC) codes. + +See index.html in this directory for an index to the documentation. +Copyright information can be found there, and in the file COPYRIGHT. diff --git a/lib/ldpc/alist-to-pchk.c b/lib/ldpc/alist-to-pchk.c new file mode 100755 index 000000000..21831ded1 --- /dev/null +++ b/lib/ldpc/alist-to-pchk.c @@ -0,0 +1,168 @@ +/* ALIST-TO-PCHK.C - Convert a parity check matrix from alist format. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include +#include +#include + +#include "alloc.h" +#include "intio.h" +#include "open.h" +#include "mod2sparse.h" +#include "mod2dense.h" +#include "mod2convert.h" +#include "rcode.h" + + +void bad_alist_file(void); +void usage(void); + + +/* MAIN PROGRAM. */ + +int main +( int argc, + char **argv +) +{ + char *alist_file, *pchk_file; + FILE *af, *pf; + int mxrw, mxcw; + int *rw, *cw; + int i, j, k; + int tot, trans; + int nxt; + + trans = 0; + + for (;;) + { + if (argc>1 && strcmp(argv[1],"-t")==0) + { trans = 1; + argc -= 1; + argv += 1; + } + else + { break; + } + } + + if (argc!=3) + { usage(); + } + + pchk_file = argv[2]; + alist_file = argv[1]; + + af = open_file_std(alist_file,"r"); + + if (af==NULL) + { fprintf(stderr,"Can't open alist file: %s\n",alist_file); + exit(1); + } + + if (fscanf(af,"%d",&M)!=1 || M<1 + || fscanf(af,"%d",&N)!=1 || N<1 + || fscanf(af,"%d",&mxrw)!=1 || mxrw<0 || mxrw>N + || fscanf(af,"%d",&mxcw)!=1 || mxcw<0 || mxcw>M) + { bad_alist_file(); + } + + rw = (int *) chk_alloc (M, sizeof *rw); + + for (i = 0; iN) + { bad_alist_file(); + } + } + + cw = (int *) chk_alloc (N, sizeof *cw); + + for (j = 0; jM) + { bad_alist_file(); + } + } + + H = mod2sparse_allocate(M,N); + + do { if (fscanf(af,"%d",&nxt)!=1) nxt = -1; } while (nxt==0); + + tot = 0; + + for (i = 0; iN || mod2sparse_find(H,i,nxt-1)) + { bad_alist_file(); + } + mod2sparse_insert(H,i,nxt-1); + tot += 1; + do { if (fscanf(af,"%d",&nxt)!=1) nxt = -1; } while (nxt==0); + } + } + + for (j = 0; jM || !mod2sparse_find(H,nxt-1,j)) + { bad_alist_file(); + } + tot -= 1; + do { if (fscanf(af,"%d",&nxt)!=1) nxt = -1; } while (nxt==0); + } + } + + if (tot!=0 || nxt!=-1 || !feof(af)) + { bad_alist_file(); + } + + if (trans) + { mod2sparse *HT; + HT = H; + H = mod2sparse_allocate(N,M); + mod2sparse_transpose(HT,H); + } + + pf = open_file_std(pchk_file,"wb"); + if (pf==NULL) + { fprintf(stderr,"Can't create parity check file: %s\n",pchk_file); + exit(1); + } + + intio_write(pf,('P'<<8)+0x80); + + if (ferror(pf) || !mod2sparse_write(pf,H) || fclose(pf)!=0) + { fprintf(stderr,"Error writing to parity check file %s\n",pchk_file); + exit(1); + } + + return 0; +} + + +/* COMPLAIN THAT ALIST FILE IS BAD. */ + +void bad_alist_file() +{ fprintf(stderr,"Alist file doesn't have the right format\n"); + exit(1); +} + + +/* PRINT USAGE MESSAGE AND EXIT. */ + +void usage(void) +{ fprintf(stderr,"Usage: alist-to-pchk [ -t ] alist-file pchk-file\n"); + exit(1); +} diff --git a/lib/ldpc/alloc.c b/lib/ldpc/alloc.c new file mode 100755 index 000000000..f289ceb84 --- /dev/null +++ b/lib/ldpc/alloc.c @@ -0,0 +1,42 @@ +/* ALLOC.C - Routine to allocate memory and complain if it doesn't work. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include + +#include "alloc.h" + + +/* ALLOCATE SPACE AND CHECK FOR ERROR. Calls 'calloc' to allocate space, + and then displays an error message and exits if the space couldn't be + found. */ + +void *chk_alloc +( unsigned n, /* Number of elements */ + unsigned size /* Size of each element */ +) +{ + void *p; + + p = calloc(n,size); + + if (p==0) + { fprintf(stderr,"Ran out of memory (while trying to allocate %d bytes)\n", + n*size); + exit(1); + } + + return p; +} diff --git a/lib/ldpc/alloc.h b/lib/ldpc/alloc.h new file mode 100755 index 000000000..aa1fb1738 --- /dev/null +++ b/lib/ldpc/alloc.h @@ -0,0 +1,18 @@ +/* ALLOC.H - Interface to memory allocation procedure. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + + +void *chk_alloc (unsigned, unsigned); /* Calls 'calloc' and exits with error + if it fails */ diff --git a/lib/ldpc/blockio.c b/lib/ldpc/blockio.c new file mode 100755 index 000000000..c9d08632a --- /dev/null +++ b/lib/ldpc/blockio.c @@ -0,0 +1,85 @@ +/* BLOCKIO.C - Routines to read/write blocks of bits from/to a text file. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include + +#include "blockio.h" + + +int blockio_flush = 0; /* Should blocks written be immediately flushed? */ + + +/* READ A BLOCK OF BITS. The bits must be given as '0' or '1' characters, + with whitespace allowed (but not required) between bits. Returns 0 if + a block is read successfully, and EOF if eof or an error occurs. If + EOF is returned, a warning will be printed if a partial block had already + been read. */ + +int blockio_read +( FILE *f, /* File to read from */ + char *b, /* Place to store bits read */ + int l /* Length of block */ +) +{ + int i, c; + + for (i = 0; i0) + { fprintf(stderr, + "Warning: Short block (%d long) at end of input file ignored\n",i); + } + return EOF; + } + } while (c==' ' || c=='\t' || c=='\n' || c=='\r'); + + if (c!='0' && c!='1') + { fprintf(stderr,"Bad character in binary file (not '0' or '1')\n"); + exit(1); + } + + b[i] = c=='1'; + } + + return 0; +} + + +/* WRITE A BLOCK OF BITS. Bits are written as '0' and '1' characters, with + no spaces between them, followed by a newline. */ + +void blockio_write +( FILE *f, /* File to write to */ + char *b, /* Block of bits to write */ + int l /* Length of block */ +) +{ + int i; + + for (i = 0; i +#include +#include +#include + +#include "channel.h" + + +/* GLOBAL VARIABLES. Declared in channel.h. */ + +channel_type channel; /* Type of channel */ + +double error_prob; /* Error probability for BSC */ +double std_dev; /* Noise standard deviation for AWGN */ +double lwidth; /* Width of noise distribution for AWLN */ + + +/* PARSE A COMMAND-LINE SPECIFICATION OF A CHANNEL. Takes a pointer to an + argument list and an argument count; returns the number of arguments that + make up a channel specification at this point in the command line. Returns + zero if the argument list does not start with a channel specification. + Returns -1 if there seems to be a channel specification here, but it's + invalid. + + Sets the variables declared in channel.h to the type and parameters of + the channel. + */ + +int channel_parse +( char **argv, /* Pointer to argument list */ + int argc /* Number of arguments in list */ +) +{ + char junk; + + if (argc==0) return 0; + + if (strcmp(argv[0],"bsc")==0 || strcmp(argv[0],"BSC")==0) + { + channel = BSC; + if (argc<2 || sscanf(argv[1],"%lf%c",&error_prob,&junk)!=1 + || error_prob<=0 || error_prob>=1) + { return -1; + } + else + { return 2; + } + } + else if (strcmp(argv[0],"awgn")==0 || strcmp(argv[0],"AWGN")==0) + { + channel = AWGN; + if (argc<2 || sscanf(argv[1],"%lf%c",&std_dev,&junk)!=1 + || std_dev<=0) + { return -1; + } + else + { return 2; + } + } + else if (strcmp(argv[0],"awln")==0 || strcmp(argv[0],"AWLN")==0) + { + channel = AWLN; + if (argc<2 || sscanf(argv[1],"%lf%c",&lwidth,&junk)!=1 + || lwidth<=0) + { return -1; + } + else + { return 2; + } + } + else + { + return 0; + } +} + + +/* PRINT USAGE MESSAGE REGARDING CHANNEL SPECIFICATIONS. */ + +void channel_usage(void) +{ + fprintf(stderr, + "Channel: bsc error-probability | awgn standard-deviation | awln width\n"); +} diff --git a/lib/ldpc/channel.h b/lib/ldpc/channel.h new file mode 100755 index 000000000..0522e856d --- /dev/null +++ b/lib/ldpc/channel.h @@ -0,0 +1,32 @@ +/* CHANNEL.H - Declarations regarding channels. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + + +/* TYPES OF CHANNEL, AND CHANNEL PARAMETERS. The global variables declared + here are located in channel.c. */ + +typedef enum { BSC, AWGN, AWLN } channel_type; + +extern channel_type channel; /* Type of channel */ + +extern double error_prob; /* Error probability for BSC */ +extern double std_dev; /* Noise standard deviation for AWGN */ +extern double lwidth; /* Width of noise distributoin for AWLN */ + + +/* PROCEDURES TO DO WITH CHANNELS. */ + +int channel_parse (char **, int); +void channel_usage (void); diff --git a/lib/ldpc/channel.html b/lib/ldpc/channel.html new file mode 100755 index 000000000..ad5129195 --- /dev/null +++ b/lib/ldpc/channel.html @@ -0,0 +1,182 @@ + + + Transmission Through a Simulated Channel + + + + +

Transmission Through a Simulated Channel

+ +

Once a codeword has been found to represent a source message, it +can be sent through a channel, with the result that certain +data is received as the output of the channel, which will be related +to the codeword sent, but with random noise. This software currently +handles only memoryless binary channels, for which each bit sent +through the channel results in a separate piece of data being +received, and the noise affecting one bit is independent of the noise +affecting other bits. + +

For a Binary Symmetric Channel (BSC), each bit sent +results in a bit being received. The bit received differs from the +bit sent with some error probability, p, which is the same for +0 bits and for 1 bits. In other words, the probability distribution +for the bit received given the bit sent is as follows: +

+P(receive 1 | send 1) = P(receive 0 | send 0) = 1-p
+P(receive 1 | send 0) = P(receive 0 | send 1) = p +
+ +

For an Additive White Gaussian Noise (AWGN) channel, the +data received at each time is equal to the data sent plus Gaussian +noise with mean zero and some standard deviation, s, +independently for each bit. For this software, the data sent is -1 +for a 0 bit and +1 for a 1 bit. In other words, the distribution +of the received data given the bit sent is as follows: +

+data received | send 1 ~ N(+1,s2)
+data received | send 0 ~ N(-1,s2) +
+ +

It is typically assumed that the standard deviation of the noise +varies with the rate at which bits are sent, increasing in proportion +to the square root of the rate. The error rate obtained from sending +unencoded bits at rate R will then be the same as is obtained +using a code that repeats each bit n times, and sends these +bits at rate nR (assuming optimal decoding of each bit by +thresholding the sum of the n channel outputs corresponding to +that bit). Another way of looking at this scaling for s is +that when bits are send at a lower rate, the receiver will be +accumulating the channel output for a longer time, with the result +that the amount of noise will decrease (relative to the signal) as a +result of averaging. + +

To account for this, it is common to compare codes for AWGN +channels in terms of their bit error rate and the value of +

+Eb / N0 += 1 / 2Rs2 +
+at which they operate, where R=K/N is the rate +of the code, and s is the noise level at which the code +achieves the quoted bit error rate. Hence, a code operating at a lower +rate is allowed to assume a lower noise level to make the comparison fair. +It is common to quote +Eb / +N0 in decibels (db), equal to +10 log10(Eb +/ N0). + +

The Additive White Logistic Noise (AWLN) channel is similar +to the AWGN channel, except that the noise comes from a logistic rather +than a Gaussian distribution. The probability density function for the +noise is +

+(1/w) exp(-n/w) / [1 + exp(-n/w)]2 +
+where n is the amount of noise, and w is a width parameter +for the distribution, analogous to the s parameter for +Gaussian noise. (However, w is not equal to the standard deviation +for the logistic distribution, which is +sqrt(pi2/3)w.) Note: Although I've +named this channel in analogy with the AWGN channel, it does not share +the properties discussed above regarding how noise levels would be expected +to change when the data rate changes. + + +


transmit: Transmit bits through a +simulated channel. + +
+transmit encoded-file|n-zeros received-file seed channel
+
+
+where channel is one of the following: +
+bsc error-probability
+
+awgn standard-deviation
+
+awln width
+
+
+
+ +

Simulates the transmission of the bits in +encoded-file through a channel, with the received data +being stored in received-file. Typically, +encoded-file will have been produced by the encode program, but it could +also come from rand-src +or another program. If newlines separate blocks in +encoded-file, these block boundaries will be preserved +in received-file. + +

Alternatively, a count of zeros to transmit can be given, rather +than a encoded-file. This count can be the product of the +block size and the number of blocks, written with x +separating these numbers, with no spaces. The +received-file will mark the block boundaries with +newlines, assuming a block size of one if a simple bit count is given. +Note that zero messages are sufficient for assessing the performance +of a linear code with a symmetrical channel and a symmetrical decoding +algorithm. Warning: Ties, messages that lead to floating-point +overflow, and program bugs can easily make a decoding algorithm +non-symmetrical, so it's best not to test exclusively on zero +messages. Indeed, it is best not to do this at all unless you +really need to avoid the time needed to generate and encode random +messages. + +

The transmission will be corrupted by random noise, which will be +generated pseudo-randomly based on seed. The actual +random seed used will be seed times 10 plus 3, so that +the stream of pseudo-random numbers will not be the same as any that +might have been used by another program. + +

The fourth argument specifies the type of channel, currently either +bsc (or BSC) for the Binary Symmetric Channel, or +awgn (or AWGN) for the Additive White Gaussian +Noise channel, or awln (or AWLN) for the Additive White +Logistic Noise channel. The channel type is followed by an argument +specifying the characteristics of the channel, as follows: +

+

BSC: The probability that a bit will be flipped by noise - ie, the + probability that the bit received is an error. + +

AWGN: The standard deviation of the Gaussian noise that is added to the + encodings of the bits. + +

AWLN: The width parameter of the logistic distribution for the noise + that is added to the encodings of the bits. +

+ +See the description of channel transmission +for more details. + +

Examples: The command: +

    +
  • transmit 10x3 rec 1 bsc 0.1 +
+will simulate the transmission of 30 zero bits (3 blocks of size 10) through +a Binary Symmetric Channel with error probability of 0.1. The result will +be to store something like the following in the file rec: +
+0000000000
+1000000000
+0100000000
+
+If an AWGN channel is used instead, as follows: +
    +
  • transmit 10x3 rec 1 awgn 0.5 +
+then the file rec will contain data such as: +
+ -1.36 -0.86 -0.80 -1.19 -1.18 -0.64 -0.31 -1.16 -1.56 -0.79
+ -2.20 -1.62 -0.53 -1.29 -1.08 -2.05 -0.75 -1.22 -0.81 -0.52
+ -0.86 -0.34 -1.10 -1.30 -1.10 -1.20 -0.37 -1.07 -0.22 -1.46
+
+ +
+ +Back to index for LDPC software + + diff --git a/lib/ldpc/check.c b/lib/ldpc/check.c new file mode 100755 index 000000000..e22b1dd9b --- /dev/null +++ b/lib/ldpc/check.c @@ -0,0 +1,177 @@ +/* CHECK.C - Compute parity checks and other stats on decodings. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include +#include + +#include "mod2sparse.h" +#include "check.h" + + + +/* COMPUTE PARITY CHECKS. Returns the number of parity checks violated by + dblk. The results of all the parity checks are stored in pchk. */ + +int check +( mod2sparse *H, /* Parity check matrix */ + char *dblk, /* Guess for codeword */ + char *pchk /* Place to store parity checks */ +) +{ + int M, i, c; + + M = mod2sparse_rows(H); + + mod2sparse_mulvec (H, dblk, pchk); + + c = 0; + for (i = 0; i1); + } + + return changed; +} + + +/* COMPUTE THE EXPECTED NUMBER OF PARITY CHECK ERRORS. Computes the + expected number of parity check errors with respect to the distribution + given by the bit probabilities passed, with bits assumed to be independent. + */ + +double expected_parity_errors +( mod2sparse *H, /* Parity check matrix */ + double *bpr /* Bit probabilities */ +) +{ + mod2entry *f; + double ee, p; + int M, i, j; + + M = mod2sparse_rows(H); + + ee = 0; + + for (i = 0; i0) + { ll -= bpr[j]*log(1+1/lratio[j]); + } + if (bpr[j]<1) + { ll -= (1-bpr[j])*log(1+lratio[j]); + } + } + + return ll; +} + + +/* COMPUTE ENTROPY FROM BIT PROBABILITIES. Computes the entropy of the + distribution given by the bit probabilities, on the assumption that + bits are independent. + */ + +double entropy +( double *bpr, /* Bit probabilities */ + int N /* Length of codeword */ +) +{ + double e; + int j; + + e = 0; + for (j = 0; j0 && bpr[j]<1) + { e -= bpr[j]*log(bpr[j]) + (1-bpr[j])*log(1-bpr[j]); + } + } + + return e/log(2.0); +} diff --git a/lib/ldpc/check.h b/lib/ldpc/check.h new file mode 100755 index 000000000..7ac005446 --- /dev/null +++ b/lib/ldpc/check.h @@ -0,0 +1,25 @@ +/* CHECK.H - Interface to procedure for computing parity checks, etc. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +int check (mod2sparse *, char *, char *); + +double changed (double *, char *, int); + +double expected_parity_errors (mod2sparse *, double *); + +double loglikelihood (double *, char *, int); +double expected_loglikelihood (double *, double *, int); + +double entropy (double *, int); diff --git a/lib/ldpc/dec.c b/lib/ldpc/dec.c new file mode 100755 index 000000000..fa4f8f939 --- /dev/null +++ b/lib/ldpc/dec.c @@ -0,0 +1,385 @@ +/* DEC.C - Decoding procedures. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + + +/* NOTE: See decoding.html for general documentation on the decoding methods */ + + +#include +#include +#include + +#include "alloc.h" +#include "mod2sparse.h" +#include "mod2dense.h" +#include "mod2convert.h" +#include "rand.h" +#include "rcode.h" +#include "check.h" +#include "dec.h" +#include "enc.h" + + +/* GLOBAL VARIABLES. Declared in dec.h. */ + +decoding_method dec_method; /* Decoding method to use */ + +int table; /* Trace option, 2 for a table of decoding details */ +int block_no; /* Number of current block, from zero */ + +int max_iter; /* Maximum number of iteratons of decoding to do */ +char *gen_file; /* Generator file for Enum_block and Enum_bit */ + + +/* DECODE BY EXHAUSTIVE ENUMERATION. Decodes by trying all possible source + messages (and hence all possible codewords, unless the parity check matrix + was redundant). If the last argument is 1, it sets dblk to the most likely + entire block; if this argument is 0, each bit of dblk is set to the most + likely value for that bit. The marginal probabilities of each bit being 1 + are returned in bitpr. + + The function value returned is the total number of codewords tried (which + will be the same for all blocks). The return valued is "unsigned" because + it might conceivably be as big as 2^31. + + The parity check matrix and other data are taken from the global variables + declared in rcode.h. + + The number of message bits should not be greater than 31 for this procedure. + The setup procedure immediately below checks this, reads the generator file, + and outputs headers for the detailed trace file, if required. + */ + +void enum_decode_setup(void) +{ + read_gen(gen_file,0,0); + + if (N-M>31) + { fprintf(stderr, +"Trying to decode messages with %d bits by exhaustive enumeration is absurd!\n", + N-M); + exit(1); + } + + if (table==2) + { printf(" block decoding likelihood\n"); + } +} + +unsigned enum_decode +( double *lratio, /* Likelihood ratios for bits */ + char *dblk, /* Place to stored decoded message */ + double *bitpr, /* Place to store marginal bit probabilities */ + int max_block /* Maximize probability of whole block being correct? */ +) +{ + mod2dense *u, *v; + double lk, maxlk, tpr; + double *bpr, *lk0, *lk1; + char sblk[31]; + char *cblk; + unsigned d; + int i, j; + + if (N-M>31) abort(); + + /* Allocate needed space. */ + + bpr = bitpr; + if (bpr==0 && max_block==0) + { bpr = chk_alloc (N, sizeof *bpr); + } + + cblk = chk_alloc (N, sizeof *cblk); + + if (type=='d') + { u = mod2dense_allocate(N-M,1); + v = mod2dense_allocate(M,1); + } + + if (type=='m') + { u = mod2dense_allocate(M,1); + v = mod2dense_allocate(M,1); + } + + lk0 = chk_alloc (N, sizeof *lk0); + lk1 = chk_alloc (N, sizeof *lk1); + + /* Pre-compute likelihoods for bits. */ + + for (j = 0; j=0; i--) + { sblk[i] = (d>>i)&1; + } + + /* Find full codeword for this message. */ + + switch (type) + { case 's': + { sparse_encode (sblk, cblk); + break; + } + case 'd': + { dense_encode (sblk, cblk, u, v); + break; + } + case 'm': + { mixed_encode (sblk, cblk, u, v); + break; + } + } + + /* Compute likelihood for this decoding. */ + + lk = 1; + for (j = 0; jmaxlk) + { for (j = 0; j=0.5; + } + } + + /* Free space. */ + + if (bpr!=0 && bpr!=bitpr) free(bpr); + free(cblk); + free(lk0); + free(lk1); + + return 1<<(N-M); +} + + +/* DECODE USING PROBABILITY PROPAGATION. Tries to find the most probable + values for the bits of the codeword, given a parity check matrix (H), and + likelihood ratios (lratio) for each bit. If max_iter is positive, up to + that many iterations of probability propagation are done, stopping before + then if the tentative decoding is a valid codeword. If max_iter is + negative, abs(max_iter) iterations are done, regardless of whether a + codeword was found earlier. + + Returns the number of iterations done (as an "unsigned" for consistency + with enum_decode). Regardless of whether or not a valid codeword was + reached, the bit vector from thresholding the bit-by-bit probabilities is + stored in dblk, and the resulting parity checks are stored in pchk (all + will be zero if the codeword is valid). The final probabilities for each + bit being a 1 are stored in bprb. + + The setup procedure immediately below outputs headers for the detailed trace + file, if required. +*/ + +void prprp_decode_setup (void) +{ + if (table==2) + { printf( + " block iter changed perrs loglik Eperrs Eloglik entropy\n"); + } +} + +unsigned prprp_decode +( mod2sparse *H, /* Parity check matrix */ + double *lratio, /* Likelihood ratios for bits */ + char *dblk, /* Place to store decoding */ + char *pchk, /* Place to store parity checks */ + double *bprb /* Place to store bit probabilities */ +) +{ + int N, n, c; + + N = mod2sparse_cols(H); + + /* Initialize probability and likelihood ratios, and find initial guess. */ + + initprp(H,lratio,dblk,bprb); + + /* Do up to abs(max_iter) iterations of probability propagation, stopping + early if a codeword is found, unless max_iter is negative. */ + + for (n = 0; ; n++) + { + c = check(H,dblk,pchk); + + if (table==2) + { printf("%7d %5d %8.1f %6d %+9.2f %8.1f %+9.2f %7.1f\n", + block_no, n, changed(lratio,dblk,N), c, loglikelihood(lratio,dblk,N), + expected_parity_errors(H,bprb), expected_loglikelihood(lratio,bprb,N), + entropy(bprb,N)); + } + + if (n==max_iter || n==-max_iter || (max_iter>0 && c==0)) + { break; + } + + iterprp(H,lratio,dblk,bprb); + } + + return n; +} + + +/* INITIALIZE PROBABILITY PROPAGATION. Stores initial ratios, probabilities, + and guess at decoding. */ + +void initprp +( mod2sparse *H, /* Parity check matrix */ + double *lratio, /* Likelihood ratios for bits */ + char *dblk, /* Place to store decoding */ + double *bprb /* Place to store bit probabilities, 0 if not wanted */ +) +{ + mod2entry *e; + int N; + int j; + + N = mod2sparse_cols(H); + + for (j = 0; jpr = lratio[j]; + e->lr = 1; + } + if (bprb) bprb[j] = 1 - 1/(1+lratio[j]); + dblk[j] = lratio[j]>=1; + } +} + + +/* DO ONE ITERATION OF PROBABILITY PROPAGATION. */ + +void iterprp +( mod2sparse *H, /* Parity check matrix */ + double *lratio, /* Likelihood ratios for bits */ + char *dblk, /* Place to store decoding */ + double *bprb /* Place to store bit probabilities, 0 if not wanted */ +) +{ + double pr, dl, t; + mod2entry *e; + int N, M; + int i, j; + + M = mod2sparse_rows(H); + N = mod2sparse_cols(H); + + /* Recompute likelihood ratios. */ + + for (i = 0; ilr = dl; + dl *= 2/(1+e->pr) - 1; + } + dl = 1; + for (e = mod2sparse_last_in_row(H,i); + !mod2sparse_at_end(e); + e = mod2sparse_prev_in_row(e)) + { t = e->lr * dl; + e->lr = (1-t)/(1+t); + dl *= 2/(1+e->pr) - 1; + } + } + + /* Recompute probability ratios. Also find the next guess based on the + individually most likely values. */ + + for (j = 0; jpr = pr; + pr *= e->lr; + } + if (isnan(pr)) + { pr = 1; + } + if (bprb) bprb[j] = 1 - 1/(1+pr); + dblk[j] = pr>=1; + pr = 1; + for (e = mod2sparse_last_in_col(H,j); + !mod2sparse_at_end(e); + e = mod2sparse_prev_in_col(e)) + { e->pr *= pr; + if (isnan(e->pr)) + { e->pr = 1; + } + pr *= e->lr; + } + } +} diff --git a/lib/ldpc/dec.h b/lib/ldpc/dec.h new file mode 100755 index 000000000..6623937c5 --- /dev/null +++ b/lib/ldpc/dec.h @@ -0,0 +1,43 @@ +/* DEC.H - Interface to decoding procedures. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + + +/* DECODING METHOD, ITS PARAMETERS, AND OTHER VARIABLES. The global variables + declared here are located in dec.c. */ + +typedef enum +{ Enum_block, Enum_bit, Prprp +} decoding_method; + +extern decoding_method dec_method; /* Decoding method to use */ + +extern int table; /* Trace option, 2 for a table of decoding details */ +extern int block_no; /* Number of current block, from zero */ + +extern int max_iter; /* Maximum number of iteratons of decoding to do */ +extern char *gen_file; /* Generator file for Enum_block and Enum_bit */ + + +/* PROCEDURES RELATING TO DECODING METHODS. */ + +void enum_decode_setup (void); +unsigned enum_decode (double *, char *, double *, int); + +void prprp_decode_setup (void); +unsigned prprp_decode +(mod2sparse *, double *, char *, char *, double *); + +void initprp (mod2sparse *, double *, char *, double *); +void iterprp (mod2sparse *, double *, char *, double *); diff --git a/lib/ldpc/decode-detail.html b/lib/ldpc/decode-detail.html new file mode 100755 index 000000000..f829febac --- /dev/null +++ b/lib/ldpc/decode-detail.html @@ -0,0 +1,99 @@ + + + Detailed Decoding Trace Information + + + + +

Detailed Decoding Trace Information

+ +The -T option to decode +causes a detailed trace of information on the process of decoding to +be written to standard output, in a multi-column format, with the first +line containing the headers for each column. This format is suitable +for reading into S-Plus or R. + +The first column is always the number of the block being decoded; +several lines may be output for each block. The other columns vary +with the decoding method used, as described below. + + +

Enum-bit and Enum-block decoding methods

+ +For source messages with K bits, 2K lines are output +for each block, containing the following information: +
+ + + + + + + + + + +
block The number of the block, from zero
decoding A possible decoding for the message bits, expressed as a hexadecimal + number. The other bits are determined by the message bits.
likelihood The likelihood for this decoding (ie, the probability of obtaining + the data received if this was the message sent).
+
+ +For these methods, the number of "iterations" (output with the +-t option) is always 2K. + + +

Prprp decoding method

+ +Each block results in one line of output for the initial state (based +on individual likelihood ratios), and one line for each subsequent +iteration, containing the following information: +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
block The number of the block, from zero
iter The number of an iteration, zero for the initial state.
changed The number of bits in the decoding that differ from the bit that would + be chosen based just on the likelihood ratio for that bit. Bits whose + likelihood ratios are exactly one contribute 0.5 to this + count. (Likelihood ratios of exactly one can arise when the output + of an AWGN channel rounds to exactly 0.00.)
perrs The number of parity check errors in the current tentative + decoding.
loglik The log likelihood of the current tentative decoding.
Eperrs The expected number of parity check errors in a decoding found + by randomly picking a value for each bit, independently, according + to the current bit probabilities.
Eloglik The expected log likelihood of a decoding found by randomly picking + a value for each bit, independently, according to the current bit + probabilities. +
entropy The entropy (in bits) of the distribution defined by the current bit + probablities, assumed to apply to bits independently.
+
+ +The number of "iterations" (output with the -t option) is +the obvious count of probability propagation iterations. The +initial state does not count as an iteration. + +
+ +Back to decoding documentation
+Back to index for LDPC software + + diff --git a/lib/ldpc/decode.c b/lib/ldpc/decode.c new file mode 100755 index 000000000..a82e5c9cc --- /dev/null +++ b/lib/ldpc/decode.c @@ -0,0 +1,384 @@ +/* DECODE.C - Decode blocks of received data. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include +#include +#include + +#include "rand.h" +#include "alloc.h" +#include "blockio.h" +#include "open.h" +#include "mod2sparse.h" +#include "mod2dense.h" +#include "mod2convert.h" +#include "channel.h" +#include "rcode.h" +#include "check.h" +#include "dec.h" + + +void usage(void); + + +/* MAIN PROGRAM. */ + +int main +( int argc, + char **argv +) +{ + char *pchk_file, *rfile, *dfile, *pfile; + char **meth; + FILE *rf, *df, *pf; + + char *dblk, *pchk; + double *lratio; + double *bitpr; + + double *awn_data; /* Places to store channel data */ + int *bsc_data; + + unsigned iters; /* Unsigned because can be huge for enum */ + double tot_iter; /* Double because can be huge for enum */ + double chngd, tot_changed; /* Double because can be fraction if lratio==1*/ + + int tot_valid; + char junk; + int valid; + + int i, j, k; + + /* Look at initial flag arguments. */ + + table = 0; + blockio_flush = 0; + + while (argc>1) + { + if (strcmp(argv[1],"-t")==0) + { if (table!=0) usage(); + table = 1; + } + else if (strcmp(argv[1],"-T")==0) + { if (table!=0) usage(); + table = 2; + } + else if (strcmp(argv[1],"-f")==0) + { if (blockio_flush!=0) usage(); + blockio_flush = 1; + } + else + { break; + } + + argc -= 1; + argv += 1; + } + + /* Look at arguments up to the decoding method specification. */ + + if (!(pchk_file = argv[1]) + || !(rfile = argv[2]) + || !(dfile = argv[3])) + { usage(); + } + + if (argv[4]==0 || argv[5]==0) usage(); + + k = channel_parse(argv+4,argc-4); + if (k<=0) + { pfile = argv[4]; + k = channel_parse(argv+5,argc-5); + if (k<=0) usage(); + meth = argv+5+k; + } + else + { pfile = 0; + meth = argv+4+k; + } + + /* Look at the specification of the decoding method, which starts at meth and + continues to the end of the command line (marked by a zero pointer). */ + + if (!meth[0]) usage(); + + if (strcmp(meth[0],"prprp")==0) + { dec_method = Prprp; + if (!meth[1] || sscanf(meth[1],"%d%c",&max_iter,&junk)!=1 || meth[2]) + { usage(); + } + } + else if (strcmp(meth[0],"enum-block")==0) + { dec_method = Enum_block; + if (!(gen_file = meth[1]) || meth[2]) usage(); + } + else if (strcmp(meth[0],"enum-bit")==0) + { dec_method = Enum_bit; + if (!(gen_file = meth[1]) || meth[2]) usage(); + } + else + { usage(); + } + + /* Check that we aren't overusing standard input or output. */ + + if ((strcmp(pchk_file,"-")==0) + + (strcmp(rfile,"-")==0) > 1) + { fprintf(stderr,"Can't read more than one stream from standard input\n"); + exit(1); + } + if ((table>0) + + (strcmp(dfile,"-")==0) + + (pfile!=0 && strcmp(pfile,"-")==0) > 1) + { fprintf(stderr,"Can't send more than one stream to standard output\n"); + exit(1); + } + + /* Read parity check file. */ + + read_pchk(pchk_file); + + if (N<=M) + { fprintf(stderr, + "Number of bits (%d) should be greater than number of checks (%d)\n",N,M); + exit(1); + } + + /* Open file of received data. */ + + rf = open_file_std(rfile,"r"); + if (rf==NULL) + { fprintf(stderr,"Can't open file of received data: %s\n",rfile); + exit(1); + } + + /* Create file for decoded data. */ + + df = open_file_std(dfile,"w"); + if (df==NULL) + { fprintf(stderr,"Can't create file for decoded data: %s\n",dfile); + exit(1); + } + + /* Create file for bit probabilities, if specified. */ + + if (pfile) + { pf = open_file_std(pfile,"w"); + if (pf==NULL) + { fprintf(stderr,"Can't create file for bit probabilities: %s\n",pfile); + exit(1); + } + } + + /* Allocate space for data from channel. */ + + switch (channel) + { case BSC: + { bsc_data = chk_alloc (N, sizeof *bsc_data); + break; + } + case AWGN: case AWLN: + { awn_data = chk_alloc (N, sizeof *awn_data); + break; + } + default: + { abort(); + } + } + + /* Allocate other space. */ + + dblk = chk_alloc (N, sizeof *dblk); + lratio = chk_alloc (N, sizeof *lratio); + pchk = chk_alloc (M, sizeof *pchk); + bitpr = chk_alloc (N, sizeof *bitpr); + + /* Print header for summary table. */ + + if (table==1) + { printf(" block iterations valid changed\n"); + } + + /* Do the setup for the decoding method. */ + + switch (dec_method) + { case Prprp: + { prprp_decode_setup(); + break; + } + case Enum_block: case Enum_bit: + { enum_decode_setup(); + break; + } + default: abort(); + } + + /* Read received blocks, decode, and write decoded blocks. */ + + tot_iter = 0; + tot_valid = 0; + tot_changed = 0; + + for (block_no = 0; ; block_no++) + { + /* Read block from received file, exit if end-of-file encountered. */ + + for (i = 0; i0) + { fprintf(stderr, + "Warning: Short block (%d long) at end of received file ignored\n",i); + } + goto done; + } + if (c<1 || channel==BSC && bsc_data[i]!=0 && bsc_data[i]!=1) + { fprintf(stderr,"File of received data is garbled\n"); + exit(1); + } + } + + /* Find likelihood ratio for each bit. */ + + switch (channel) + { case BSC: + { for (i = 0; i= 2^31 */ + fflush(stdout); + } + + /* Write decoded block. */ + + blockio_write(df,dblk,N); + + /* Write bit probabilities, if asked to. */ + + if (pfile) + { for (j = 0; j + + Decoding Received Blocks + + + + +

Decoding Received Blocks

+ +Transmitted codewords are decoded from the received data on the basis +of the likelihood of the possible codewords, which is the +probability of receiving the data that was actually received if the +codeword is question were the one that was sent. This software +presently deals only with memoryless channels, in which the noise is +independent from bit to bit. For such a channel, the likelihood +factorizes into a product of likelihoods for each bit. + +For decoding purposes, all that matters is the relative likelihood +for a bit to be 1 versus 0. This is captured by the likelihood +ratio in favour of a 1, which is P(data | bit is 1) / P(data | +bit is 0). + +

For a Binary Symmetric Channel with error probability p, +the likelihood ratio in favour of a 1 bit is as follows: +

+ If the received data was +1: (1-p) / p
+ If the received data was -1: p / (1-p) +
+For an Additive White Gaussian Noise channel, with signals of +1 for a 1 bit +and or -1 for a 0 bit, and with noise standard deviation s, the +likelihood ratio in favour of a 1 bit when data y was received is +
+ exp ( 2y / s2 ) +
+For an Additive White Logistic Noise channel, the corresponding +likelihood ratio is +d1/d0, +where +d1=e1 +/ (1+e1)2 and +d0=e0 +/ (1+e0)2, +with e1=exp(-(y-1)/w) and +e0=exp(-(y+1)/w). +
+ +

It is usual to consider codewords to be equally likely a +priori. This is reasonable if the source messages are all equally +likely (any source redundancy being ignored, or remove by a +preliminary data compression stage), provided that the mapping from +source messages to codewords is onto. Decoding can then be done using +only the parity check matrix defining the codewords, without reference +to the generator matrix defining the mapping from source messages to +codewords. Note that the condition that this mapping be onto isn't +true with this software in the atypical case where the code is defined +by a parity check matrix with redundant rows; see the discussion of linear dependence in parity check matrices. +This minor complication is mostly ignored here, except by the exhaustive +enumeration decoding methods. + +

Assuming equal a priori probabilities for codewords, the +probability of correctly decoding an entire codeword is minimized by +picking the codeword with the highest likelihood. One might instead +wish to decode each bit to the value that is most probable. This +minimizes the bit error rate, but is not in general guaranteed to lead +a decoding for each block to the most probable complete codeword; +indeed, the decoding may not be a codeword at all. Minimizing the bit +error rate seems nevertheless to be the most sensible objective, +unless block boundaries have some significance in a wider context. + +

Optimal decoding by either criterion is infeasible for general +linear codes when messages are more than about 20 or 30 bits in +length. The fundamental advantage of Low Density Parity Check codes +is that good (though not optimal) decodings can be obtained by methods +such as probability propagation, described next. + +

Decoding by probability propagation

+ +

The probability propagation algorithm was originally devised by +Robert Gallager in the early 1960's and later reinvented by David +MacKay and myself. It can be seen as an instance of the sum-product +algorithm for inference on factor graphs, and as an instance of belief +propagation in probabilistic networks. See the references for details. Below, I give a fairly +intuitive description of the algorithm. + +

The algorithm uses only the parity check matrix for the code, whose +columns correspond to codeword bits, and whose rows correspond to +parity checks, and the likelihood ratios for the bits derived from the +data. It aims to find the probability of each bit of the transmitted +codeword being 1, though the results of the algorithm are in general +only approximate. + +

The begin, information about each bit of the codeword derived from +the received data for that bit alone is expressed as a probability +ratio, the probability of the bit being 1 divided by the +probability of the bit being 0. This probability ratio is equal to +the likelihood ratio (see above) for that bit, since 0 and 1 are +assumed to be equally likely a priori. As the algorithm +progresses, these probability ratios will be modified to take account +of information obtained from other bits, in conjunction with the +requirement that the parity checks be satisfied. To avoid double +counting of information, for every bit, the algorithm maintains a +separate probability ratio for each parity check that that bit +participates in, giving the probability for that bit to be 1 versus 0 +based only on information derived from other parity checks, +along with the data received for the bit. + +

For each parity check, the algorithm maintains separate +likelihood ratios (analogous to, but distinct from, the +likelihood ratios based on received data), for every bit that +participates in that parity check. These ratios give the probability +of that parity check being satisfied if the bit in question is 1 +divided by the probability of the check being satisfied if the bit is +0, taking account of the probabilities of each of the other +bits participating in this check being 1, as derived from the +probability ratios for these bits with respect to this check. + +

The algorithm alternates between recalculating the likelihood +ratios for each check, which are stored in the lr fields of the +parity check matrix entries, and recalculating the probability ratios +for each bit, which are stored in the pr fields of the entries +in the sparse matrix representation of the parity check matrix. (See +the documentation on representation of +sparse matrices for details on these entries.) + +

Recalculating the likelihood ratio for a check with respect to some +bit may appear time consuming, requiring that all possible +combinations of values for the other bits participating in the check +be considered. Fortunately, there is a short cut. One can calculate +

+ t + = product of [ 1 / (1+pi) + - pi / + (1+pi) ] + = product of [ 2 / (1+pi) - 1 ] +
+where the product is over the probability ratios +pi for the other bits participating +in this check. Factor i in this product is equal to probability +of bit i being 0 minus the probability that it is 1. The terms +in the expansion of this product (in the first form above) correspond to +possible combinations of values for the other bits, with the result that +t will be the probability of the check being satisfied if the bit +in question is 0 minus the probability if the bit in question is 1. The +likelihood ratio for this check with respect to the bit in question can then +be calculated as (1-t)/(1+t). + +

For a particular check, the product above differs for different +bits, with respect to which we wish to calculate a likelihood ratio, +only in that for each bit the factor corresponding to that bit is left +out. We can calculate all these products easily by ordering the bits +arbitrarily, computing running products of the factor for the first +bit, the factors for the first two bits, etc., and also running +products of the factor for the last bit, the factors for the last two +bits, etc. Multiplying the running product of the factors up to +i-1 by the running product of the factors from i+1 on +gives the product needed for bit i. The second form of the +factors above is used, as it requires less computation, and is still +well defined even if some ratios are infinite. + +

To recalculate the probability ratio for a bit with respect to a +check, all that is need is to multiply together the likelihood ratio +for this bit derived from the received data (see above), and the +current values of the likelihood ratios for all the other +checks that this bit participates in, with respect to this bit. To +save time, these products are computed by combining forward and +backward products, similarly to the method used for likelihood ratios. + +

By including likelihood ratios from all checks, a similar +calculation produces the current probability ratio for the bit to be 1 +versus 0 based on all information that has propagated to the bit so +far. This ratio can be thresholded at one to produce the current best +guess as to whether this bit is a 1 or a 0. + +

The hope is that this algorithm will eventually converge to a state +where these bit probabilities give a near-optimal decoding. This is +does not always occur, but the algorithm behaves well enough to +produce very good results at rates approaching (though not yet +reaching) the theoretical Shannon limit. + + +


decode: Decode blocks of received data +into codewords. + +
+decode [ -f ] [ -t | -T ] pchk-file received-file decoded-file [ bp-file ] channel method
+
+
+where channel is one of: +
+bsc error-probability
+
+awgn standard-deviation
+
+awln width
+
+and method is one of: +
+enum-block gen-file
+
+enum-bit gen-file
+
+prprp [-]max-iterations
+
+
+
+ +

Decodes the blocks in received-file, which are +assumed to be have been received through the specified channel. The +results written to decoded-file are the specified +decoding method's guesses as to what bits were sent through the +channel, given what was received. The probability of each bit being a +1, as judged by the decoding method being used, is written to +bp-file, if given. + +

A newline is output at the end of each block written to +decoded-file and bp-file. Newlines in +received-file are ignored. A warning is displayed on +standard error if the number of bits in received-file +is not a multiple of the block length. + +

A summary is displayed on standard error, giving the total number +of blocks decoded, the number of blocks that decoded to valid +codewords, the average number of iterations of the decoding algorithm +used, and the percent of bits that were changed from the values one +would guess for them based just on their individual likelihood ratios. + +

If the -t option is given, a line of information regarding each block +decoded is written to standard output, preceded by a line of headers. +The information for each block is as follows: +

+ + + + + + + + + + + + + +
block The number of the block, from zero
iterations The number of "iterations" used in decoding. What exactly an iteration + is depends on the decoding method used (see + here).
valid Has the value 1 if the decoding is a valid codeword, 0 if not.
changed The number of bits in the decoding that differ from the bit that would + be chosen based just on the likelihood ratio for that bit. Bits whose + likelihood ratios are exactly one contribute 0.5 to this count.
+
+The file produced is is suitable for +reading into the S-Plus or R statistics packages, with a command such as +
+data <- read.table(file,header=T)
+
+ +

If instead the -T option is given, detailed information on +the process of decoding each block will be written to standard output. +For a description, see the documentation +on detailed decoding trace information. + +

The type of channel that is assumed is specified after the file +name arguments. This may currently be either bsc (or +BSC) for the Binary Symmetric Channel, or awgn (or +AWGN) for the Additive White Gaussian Noise channel, or +awln (or AWLN) for the Additive White Logistic Noise +channel. The channel type is followed by an argument specifying the +assumed characteristics of the channel, as follows: +

+

BSC: The probability that a bit will be flipped by noise - ie, the + probability that the bit received is an error. + +

AWGN: The standard deviation of the Gaussian noise added to the + encodings of the bits. + +

AWLN: The width parameter of the logistic distribution for the noise + that is added to the encodings of the bits. +

+See the description of channel transmission +for more about these channels. + +

Following the channel specification is a specification of the +decoding method to use. The enum-block and enum-bit +methods find the optimal decoding by exhaustive enumeration of +codewords derived from all possible source messages. They differ in +that enum-block decodes to the most likely codeword, whereas +enum-bit decodes to the bits that are individually most +probable. These methods require that a file containing a +representation of a generator matrix be given, to allow enumeration of +codewords. If the parity check matrix has no redundant rows, any +valid generator matrix will give the same decoding (except perhaps if +there is a tie). If redundant rows exist, the generator matrix should +specify the same set of message bits as the generator matrix that was +used for the actual encoding, since the redundancy will lead to some +codeword bits being fixed at zero (see linear +dependence in parity check matrices). + +

The prprp decoding method decodes using probability propagation. The maximum number of +iterations of probability propagation to do is given following +prprp. If a minus sign precedes this number, the maximum +number of iterations is always done. If no minus sign is present, the +algorithm stops once the tentative decoding, based on bit-by-bit +probabilities, is a valid codeword. Note that continuing to the +maximum number of iterations will usually result in +at least slightly different bit probabilities (written to +bp-file if specified), and could conceivably change +the decoding compared to stopping at the first valid codeword, or +result in a failure to decode to a valid codeword even though one was +found earlier. + +

If the -f option is given, output to decoded-file +is flushed after each block. This allows one to use decode as a server, +reading blocks to decode from a named pipe, and writing the decoded block +to another named pipe. + + +


extract: Extract the message bits from a block. + +
+extract gen-file decoded-file extracted-file
+
+ +

Given a file of codewords in decoded-file (usually, +decoded blocks output by decode), and a +generator matrix from gen-file (needed only to +determine where the message bits are located in a codeword), this +program writes the message bits extracted from these codewords to the +file extracted-file. + +

A newline is output at the end of each block written to +extracted-file. Newlines in +decoded-file are ignored. A warning is displayed on +standard error if the number of bits in decoded-file +is not a multiple of the block length. + +


+ +Back to index for LDPC software + + diff --git a/lib/ldpc/dep-H.html b/lib/ldpc/dep-H.html new file mode 100755 index 000000000..b80b2a5c2 --- /dev/null +++ b/lib/ldpc/dep-H.html @@ -0,0 +1,85 @@ + + + Linear Dependence in Parity Check Matrices + + + + +

Linear Dependence in Parity Check Matrices

+ +

If a code is specified by means of a M by N parity +check matrix, H, in which some rows are linearly dependent - a +situation that is usually avoided - it would be possible to map more +than the usual K=N-M message bits into a codeword, since one or +more rows of H could have been deleted without affecting which +bit vectors are codewords. + +

However, this software does not increase the number of message bits +in this case, but instead produces a generator matrix in which some +rows are all zero, which will cause some bits of the codeword to +always be zero, regardless of the source message. Referring to the description of generator matrix +representations, this is accomplished by partially computing +what would normally be A-1 (for a +dense or mixed representations) or the L and U matrices +(for a sparse representation), even though singularity prevents this +computation from being carried out fully. + +

Example: The parity check matrix created below is redundant, +since the 10100 row is equal to the sum of the 11000 and 01100 rows. +

    +
  • make-pchk dep.pchk 4 5 0:0 0:1 1:1 1:2 2:0 2:2 3:3 3:4 +
  • print-pchk -d dep.pchk + +Parity check matrix in dep.pchk (dense format): + + 1 1 0 0 0 + 0 1 1 0 0 + 1 0 1 0 0 + 0 0 0 1 1 + +
  • make-gen dep.pchk dep.gen dense +Note: Parity check matrix has 1 redundant checks +Number of 1s per check in Inv(A) X B is 0.2 +
  • print-gen dep.gen + +Generator matrix (dense representation): + +Column order (message bits at end): + + 0 1 3 2 4 + +Inv(A) X B: + + 0 + 0 + 1 + 0 +
+The generator matrix above can be used to encode message blocks containing +one bit. This message bit is copied unchanged to the last bit (numbered 4) +of the codeword, and the first four bits of the codeword are set by multiplying +this message bit (seen as a vector of length one) by +A-1B, shown above, and then +storing the results in positions given by the column ordering. +The result is that bit 3 of the codeword produced is +also set to the message bit, and bits 0, 1, and 2 are set to zero. + +

Which bits are used for message bits, and which bits are fixed at +zero, depends on arbitrary choices in the algorithm, which may differ +from one encoding method to another. No attempt is made to make the +best choice. + +

Note that codeword bits that are always zero can arise even when H +does not have linearly dependent rows. For example, if a row of H +has just one 1 in it, the codeword bit at that position must be zero in any +codeword. The way the software handles parity check matrices with less +than M independent rows is equivalent to adding additional rows +to H in which only one bit is 1, in order to produce M +independent checks. + +


+ +Back to index for LDPC software + + diff --git a/lib/ldpc/distrib.c b/lib/ldpc/distrib.c new file mode 100755 index 000000000..879c54adf --- /dev/null +++ b/lib/ldpc/distrib.c @@ -0,0 +1,188 @@ +/* DISTRIB.C - Procedures for handling distributions over numbers. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal and Peter Junteng Liu. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include +#include +#include + +#include "alloc.h" +#include "distrib.h" + + +/* CREATE A DISTRIBUTION AS SPECIFIED IN A STRING. Space for the distribution + is allocated; the string is not freed. + + The string must consist either of a single positive integer, representing + the distribution over just that number, or have a form such as the + following: + + 5x2/3.5x1/1.5x4 + + This specifies a distribution over 3 numbers, 2, 1, and 4, specified by + the second number in each pair, with proportions of 0.5, 0.35, and 0.15, + respectively, specified by the first number in each pair. The actual + proportions are found by dividing the first number in each pair by the sum + of these numbers. + + The distrib type represents the distribution list. It stores a pointer to + an array of distrib_entry elements along with the length of this array. + Each distrib_entry contains a (number,proportion) pair. +*/ + +distrib *distrib_create +( char *c /* String describing distribution over numbers */ +) +{ + distrib *d; + char *str, *tstr; + int i, n, scan_num, size; + double prop, sum; + char junk; + + /* Check for special case of a single number. */ + + if (sscanf(c,"%d%c",&n,&junk)==1 && n>0) + { tstr = chk_alloc ( (int)(4.1+log10(n)), sizeof(*tstr)); + sprintf(tstr,"1x%d",n); + d = distrib_create(tstr); + free(tstr); + return d; + } + + /* Initial scan of string for size and proper usage. */ + + str = c; + size = 0; + sum = 0; + + d = chk_alloc(1, sizeof *d); + + for (;;) + { + scan_num = sscanf(str, "%lgx%d%c", &prop, &n, &junk); + + if ((scan_num!=2 && scan_num!=3) || prop<=0 || n<=0) + { return 0; + } + if (scan_num==3 && junk!='/') + { return 0; + } + + size += 1; + sum += prop; + + if (scan_num==2) + { break; + } + else + { str = (char*)strchr(str, '/') + 1; + } + } + + /* Allocate memory for the list and fill it in */ + + d->size = size; + d->list = chk_alloc (size, sizeof(distrib_entry)); + + i = 0; + str = c; + + for (;;) + { + scan_num = sscanf(str, "%lgx%d%c", &prop, &n, &junk); + + d->list[i].prop = prop/sum; + d->list[i].num = n; + i += 1; + + if (scan_num==2) + { break; + } + else if (scan_num==3) + { str = (char*)strchr(str, '/') + 1; + } + else + { abort(); + } + } + + return d; +} + + +/* FREE SPACE OCCUPIED A DISTRIBUTION LIST. */ + +void distrib_free +( distrib *d /* List to free */ +) +{ free(d->list); + free(d); +} + + +/* RETURN THE MAXIMUM NUMBER IN A DISTRIBUTION LIST. Returns 0 if the list + pointer is 0. */ + +int distrib_max +( distrib *d /* List to examine */ +) +{ + int i; + int cur; + + if (d==0) return 0; + + cur = 0; + + for (i = 1; isize; i++) + { if (d->list[i].num > d->list[cur].num) + { cur = i; + } + } + + return d->list[cur].num; +} + + +/* TEST PROGRAM. */ + +#ifdef TEST_DISTRIB + +main +( int argc, + char **argv +) +{ + distrib *d; + int i, j; + + for (i = 1; ilist[]). */ + +typedef struct distrib_entry +{ int num; /* A positive number */ + double prop; /* Proportion for this number */ +} distrib_entry; + +typedef struct distrib +{ struct distrib_entry *list; /* The list of numbers and proportions */ + int size; /* Number of entries in the list */ +} distrib; + + +/* MACROS TO ACCESS ELEMENTS OF A DISTRIBUTION LIST. Note that indexes for + entries start at 0. */ + +#define distrib_num(d,i) \ + ((d)->list[i].num) /* The number for the i'th entry */ + +#define distrib_prop(d,i) \ + ((d)->list[i].prop) /* The i'th entry's proportion [probability] */ + +#define distrib_size(d) \ + ((d)->size) /* The length of the list (integer) */ + + +/* PROCEDURES FOR DISTRIBUTION LISTS. */ + +distrib *distrib_create (char *); +void distrib_free (distrib *); + +int distrib_max(distrib *); diff --git a/lib/ldpc/enc.c b/lib/ldpc/enc.c new file mode 100755 index 000000000..0ff1520a7 --- /dev/null +++ b/lib/ldpc/enc.c @@ -0,0 +1,154 @@ +/* ENC.C - Encoding procedures. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include +#include + +#include "rand.h" +#include "alloc.h" +#include "mod2sparse.h" +#include "mod2dense.h" +#include "mod2convert.h" +#include "rcode.h" +#include "enc.h" + + +/* The procedures in this module obtain the generator matrix to use for + encoding from the global variables declared in rcode.h */ + + +/* ENCODE A BLOCK USING A SPARSE REPRESENTATION OF THE GENERATOR MATRIX. */ + +void sparse_encode +( char *sblk, + char *cblk +) +{ + int i, j; + + mod2entry *e; + char *x, *y; + + x = chk_alloc (M, sizeof *x); + y = chk_alloc (M, sizeof *y); + + /* Multiply the vector of source bits by the systematic columns of the + parity check matrix, giving x. Also copy these bits to the coded block. */ + + for (i = 0; i +#include +#include +#include + +#include "rand.h" +#include "alloc.h" +#include "blockio.h" +#include "open.h" +#include "mod2sparse.h" +#include "mod2dense.h" +#include "mod2convert.h" +#include "rcode.h" +#include "enc.h" + +void usage(void); + + +/* MAIN PROGRAM. */ + +int main +( int argc, + char **argv +) +{ + char *source_file, *encoded_file; + char *pchk_file, *gen_file; + mod2dense *u, *v; + + FILE *srcf, *encf; + char *sblk, *cblk, *chks; + int i, n; + + /* Look at initial flag arguments. */ + + blockio_flush = 0; + + while (argc>1) + { + if (strcmp(argv[1],"-f")==0) + { if (blockio_flush!=0) usage(); + blockio_flush = 1; + } + else + { break; + } + + argc -= 1; + argv += 1; + } + + /* Look at remaining arguments. */ + + if (!(pchk_file = argv[1]) + || !(gen_file = argv[2]) + || !(source_file = argv[3]) + || !(encoded_file = argv[4]) + || argv[5]) + { usage(); + } + + if ((strcmp(pchk_file,"-")==0) + + (strcmp(gen_file,"-")==0) + + (strcmp(source_file,"-")==0) > 1) + { fprintf(stderr,"Can't read more than one stream from standard input\n"); + exit(1); + } + + /* Read parity check file */ + + read_pchk(pchk_file); + + if (N<=M) + { fprintf(stderr, + "Can't encode if number of bits (%d) not greater than number of checks (%d)\n", + N,M); + exit(1); + } + + /* Read generator matrix file. */ + + read_gen(gen_file,0,0); + + /* Allocate needed space. */ + + if (type=='d') + { u = mod2dense_allocate(N-M,1); + v = mod2dense_allocate(M,1); + } + + if (type=='m') + { u = mod2dense_allocate(M,1); + v = mod2dense_allocate(M,1); + } + + /* Open source file. */ + + srcf = open_file_std(source_file,"r"); + if (srcf==NULL) + { fprintf(stderr,"Can't open source file: %s\n",source_file); + exit(1); + } + + /* Create encoded output file. */ + + encf = open_file_std(encoded_file,"w"); + if (encf==NULL) + { fprintf(stderr,"Can't create file for encoded data: %s\n",encoded_file); + exit(1); + } + + sblk = chk_alloc (N-M, sizeof *sblk); + cblk = chk_alloc (N, sizeof *cblk); + chks = chk_alloc (M, sizeof *chks); + + /* Encode successive blocks. */ + + for (n = 0; ; n++) + { + /* Read block from source file. */ + + if (blockio_read(srcf,sblk,N-M)==EOF) + { break; + } + + /* Compute encoded block. */ + + switch (type) + { case 's': + { sparse_encode (sblk, cblk); + break; + } + case 'd': + { dense_encode (sblk, cblk, u, v); + break; + } + case 'm': + { mixed_encode (sblk, cblk, u, v); + break; + } + } + + /* Check that encoded block is a code word. */ + + mod2sparse_mulvec (H, cblk, chks); + + for (i = 0; i + + Encoding Message Blocks + + + + +

Encoding Message Blocks

+ +To use a code to send messages, we must define a mapping from a bit +vector, s, of length K, representing a source message, +to a codeword, x, of length N>K. We will +consider only linear mappings, which can be written in the form +x=GTs, where G +is a generator matrix. For a code with parity check matrix +H, whose codewords satisfy Hx=0, the generator +matrix must satisfy HGT=0. +This software assumes that the number of rows in the parity check +matrix, M, is equal to N-K, as would normally be the +case. + +

This software deals only with systematic encodings, in which +the K bits of s are copied unchanged to some subset of +the N bits of x (the message bits), and the +remaining M=N-K check bits of x are then set so +as to make the result a codeword. For a linear code, a systematic +encoding scheme always exists, for some choice of which bits of a +codeword are message bits. It is conventional to rearrange the order +of the bits in a codeword so that the message bits come first. The +first K columns of the K by N generator matrix +will then be the identity matrix. + +

However, this software does not assume that the message bits +come first, since different encoding methods prefer different +locations for the message bits. Instead, a vector of indexes of where +each message bit is located within a codeword is recorded in a file +along with a representation of the part of the generator matrix that +produces the check bits. More than one such generator matrix file can +be created for a single parity check file, in which the locations of +the message bits may be different. Decoding of a received message +into a codeword (with decode) does not depend on +knowing which are the message bits, though this does need to be known +in order to reconstruct the original message (with extract). + +

This software stores representations of generator matrices in files +in a format that is not human-readable (except by using the print-gen program). However, these +files are readable on a machine with a different architecture +than they were written on. + + +

Generator matrix representations

+ +

For simplicity of exposition, it will be assumed for the next few +paragraphs that the message bits are located at the end of the +codeword, so a codeword can be divided into M check bits, +c, followed by K message bits, s. + +

On the above assumption, the parity check matrix, H, can be divided +into an M by M matrix A occupying +the first M columns of H and an M by K matrix +B occupying the remaining columns of H. The requirement that +a codeword, x, satisfy all parity checks (ie, that Hx=0) +can then be written as +

+ Ac + Bs = 0 +
+Provided that A is non-singular, it follows that +
+ c = A-1Bs +
+A may be singular for some choices of which codeword bits are message +bits, but a choice for which A is non-singular always exists if the +rows of H are linearly independent. It is possible, however, that the +rows of H are not linearly independent (ie, some rows are redundant). +This is an exceptional +and not particularly interesting case, which is mostly ignored in the +descriptions below; see the discussion of linear +dependence in parity check matrices for the details. + +

The equation c = A-1Bs +defines what the check bits should be, but actual computation of these +check bits can be done in several ways, three of which are implemented +in this software. Each method involves a different representation of +the generator matrix. (Note that none of these methods involves the +explicit representation of the matrix G mentioned above.) + +

In the dense representation, the M by K matrix +A-1B is computed, and stored +in a dense format (see the dense modulo-2 +matrix package). A message is encoded by multiplying the +source bits, s, by this matrix to obtain the required check bits. + +

In the mixed representation, the M by M matrix +A-1 is computed and stored in a dense +format, and the M by K matrix B, the right +portion of the parity check matrix, is also stored, in a sparse format +(see the sparse modulo-2 matrix package). +To encode a message, the source vector s is first multiplied on +the left by B, an operation which can be done very quickly if +B is sparse (as it will be for LDPC codes). The result is then +multiplied on the left by A-1. If +M<K, the total time may be less than when using the +dense representation above. + +

The sparse representation goes further, and avoids +explicitly computing A-1, which tends +to be dense even if H is sparse. Instead, a LU +decomposition of A is found, consisting of a lower +triangular matrix L and an upper triangular matrix U for +which LU=A. The effect of multiplying Bs=z by +A-1 can then be obtained by +

+ Solving Ly=z for y using forward substitution.
+ Solving Uc=y for c using backward substitution. +
+Both of these operations will be fast if L and U are +sparse. Heuristics are used to try to achieve this, by rearranging the +rows and columns of H in the process of selecting A and +finding its LU decomposition. + + +


make-gen: Make a generator matrix from +a parity check matrix. + +
+make-gen pchk-file gen-file method
+
+
+where method is one of the following: +
+sparse [ first | mincol | minprod ] [ abandon-num abandon-when ]
+
+dense [ other-gen-file  ]
+
+mixed [ other-gen-file  ]
+
+
+
+ +

Finds a generator matrix for the code whose parity check matrix is +in pchk-file, and writes a representation of this +generator matrix to gen-file. The remaining arguments +specify what representation of the generator matrix is to be used (see +the description above), and the method to be +used in finding it. A message regarding the density of 1s in the +resulting representation is displayed on standard error. For a sparse +representation, a smaller number of 1s will produce faster encoding. + +

All representations include a specification for how the columns of +the parity check matrix should be re-ordered so that the message bits +come last. References to columns of the parity check matrix below +refer to their order after this reordering. For the dense and +mixed representations, an other-gen-file may be +specified, in which case the ordering of columns will be the same as +the ordering stored in that file (which must produce a non-singular +A matrix; redundant rows of H are not allowed with this +option). Otherwise, make-gen decides on an appropriate +ordering of columns itself. Note that the column rearrangement is +recorded as part of the representation of the generator matrix; the +parity check matrix as stored in its file is not altered. + +

The dense representation consists of a dense representation +of the matrix A-1B, where +A is the matrix consisting of the first M columns (after +reordering) of the parity check matrix, and B is the remaining +columns. If H contains redundant rows, there is an additional +reordering of columns of A in order create the same effect as +if the redundant rows came last. + +

The mixed representation consists of a dense representation +of the matrix A-1, where A is +the matrix consisting of the first M columns (after reordering) +of the parity check matrix. The remaining columns of the parity check +matrix, making up the matrix B, are also part of the +representation, but are not written to gen-file, since +they can be obtained from pchk-file. As for mixed +representations, an additional reordering of columns of A may +be needed if H has redundant rows. + +

A sparse representation consists of sparse representations +of the L and U matrices, whose product is A, the +first M columns of the parity check matrix (whose columns and +rows may both have been reordered). The matrix B, consisting +of the remaining columns of the parity check matrix, is also part of +the representation, but it is not written to gen-file, +since it can be obtained from pchk-file. + +

If a sparse representation is chosen, arguments after +sparse specify what heuristic is used when reordering columns +and rows in order to try to make L and U as sparse as +possible. The default if no heuristic is specified is +minprod. If the abandon-num and +abandon-when options are given, some information is +discarded in order to speed up the process of finding L and +U, at a possible cost in terms of how good a result is +obtained. For details on these heuristics, see the descriptions of sparse LU decomposition methods. + +

Example: A dense representation of a generator matrix for the +Hamming code created by the example for make-pchk can be created as follows: +

    +
  • make-gen ham7.pchk ham7.gen dense +Number of 1s per check in Inv(A) X B is 3.0 +
+ + +


print-gen: Print a representation of a +generator matrix. + +
+print-gen [ -d ] gen-file
+
+ +

Prints in human-readable form the representation of the generator +matrix that is stored in gen-file. The -d +option causes the matrices involved to be printed in a dense format, +even if they are stored in the file in a sparse format. See the description above for details of generator matrix +representations. Note that the L matrix for a sparse representation +will be lower triangular only after the rows are rearranged, and the U +matrix will be upper triangular only after the columns are rearranged. +The matrix B that is part of the sparse +and mixed representations is not printed, since it is not stored +in the gen-file, but is rather a subset of columns +of the parity check matrix. + +

Example: The generator matrix for the +Hamming code created by the example for make-gen can be printed as follows: +

    +
  • print-gen ham7.gen + +Generator matrix (dense representation): + +Column order: + + 0 1 2 3 4 5 6 + +Inv(A) X B: + + 1 1 1 0 + 1 1 0 1 + 0 1 1 1 +
+For this example, the columns did not need to be rearranged, and hence the +message bits will be in positions 3, 4, 5, and 6 of a codeword. + +


encode: Encode message blocks as codewords + +
+encode [ -f ] pchk-file gen-file source-file encoded-file
+
+ +Encodes message blocks of length K, read from +source-file, as codewords of length N, which +are written to encoded-file, replacing any previous +data in this file. Here, N is the number of columns in the +parity check matrix in pchk-file, and +K=N-M, where M is the number of rows in the +parity check matrix. The generator matrix used, from +gen-file, determines which bits of the codeword are +set to the message bits, and how the remaining check bits are +computed. The generator matrix is created from +pchk-file using
make-gen. + +

A newline is output at the end of each block written to +encoded-file. Newlines in source-file +are ignored. + +

If the -f option is given, output to encoded-file +is flushed after each block. This allows one to use encode as a server, +reading blocks to encode from a named pipe, and writing the encoded block +to another named pipe. + +


+ +Back to index for LDPC software + + diff --git a/lib/ldpc/ex-dep b/lib/ldpc/ex-dep new file mode 100755 index 000000000..3acebedca --- /dev/null +++ b/lib/ldpc/ex-dep @@ -0,0 +1,60 @@ +#!/bin/sh + +# Examples of a how a parity check matrix with dependent rows is handled. + +set -e # Stop if an error occurs +set -v # Echo commands as they are read + +# CODE 1 + +make-pchk ex-dep.pchk 4 6 0:0 0:5 3:1 3:2 +print-pchk -d ex-dep.pchk +echo 00011011 >ex-dep.src + +# SPARSE REPRESENTATION + +make-gen ex-dep.pchk ex-dep.gen sparse +print-gen -d ex-dep.gen +encode ex-dep.pchk ex-dep.gen ex-dep.src ex-dep.enc; cat ex-dep.enc +verify ex-dep.pchk ex-dep.enc ex-dep.gen ex-dep.src + +# DENSE REPRESENTATION + +make-gen ex-dep.pchk ex-dep.gen dense +print-gen -d ex-dep.gen +encode ex-dep.pchk ex-dep.gen ex-dep.src ex-dep.enc; cat ex-dep.enc +verify ex-dep.pchk ex-dep.enc ex-dep.gen ex-dep.src + +# MIXED REPRESENTATION + +make-gen ex-dep.pchk ex-dep.gen mixed +print-gen -d ex-dep.gen +encode ex-dep.pchk ex-dep.gen ex-dep.src ex-dep.enc; cat ex-dep.enc +verify ex-dep.pchk ex-dep.enc ex-dep.gen ex-dep.src + +# CODE 2 + +make-pchk ex-dep.pchk 4 5 0:0 0:1 1:1 1:2 2:0 2:2 3:3 3:4 +print-pchk -d ex-dep.pchk +echo 01 >ex-dep.src + +# SPARSE REPRESENTATION + +make-gen ex-dep.pchk ex-dep.gen sparse +print-gen -d ex-dep.gen +encode ex-dep.pchk ex-dep.gen ex-dep.src ex-dep.enc; cat ex-dep.enc +verify ex-dep.pchk ex-dep.enc ex-dep.gen ex-dep.src + +# DENSE REPRESENTATION + +make-gen ex-dep.pchk ex-dep.gen dense +print-gen -d ex-dep.gen +encode ex-dep.pchk ex-dep.gen ex-dep.src ex-dep.enc; cat ex-dep.enc +verify ex-dep.pchk ex-dep.enc ex-dep.gen ex-dep.src + +# MIXED REPRESENTATION + +make-gen ex-dep.pchk ex-dep.gen mixed +print-gen -d ex-dep.gen +encode ex-dep.pchk ex-dep.gen ex-dep.src ex-dep.enc; cat ex-dep.enc +verify ex-dep.pchk ex-dep.enc ex-dep.gen ex-dep.src diff --git a/lib/ldpc/ex-dep-out b/lib/ldpc/ex-dep-out new file mode 100755 index 000000000..c4df520a7 --- /dev/null +++ b/lib/ldpc/ex-dep-out @@ -0,0 +1,224 @@ + +# CODE 1 + +make-pchk ex-dep.pchk 4 6 0:0 0:5 3:1 3:2 +print-pchk -d ex-dep.pchk + +Parity check matrix in ex-dep.pchk (dense format): + + 1 0 0 0 0 1 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + 0 1 1 0 0 0 + +echo 00011011 >ex-dep.src + +# SPARSE REPRESENTATION + +make-gen ex-dep.pchk ex-dep.gen sparse +Note: Parity check matrix has 2 redundant checks +Number of 1s per check in L is 0.8, U is 0.5, B is 0.2, total is 1.5 +print-gen -d ex-dep.gen + +Generator matrix in ex-dep.gen (sparse representation): + +Column order (message bits at end): + + 5 2 1 3 4 0 + +Row order: + + 0 3 2 1 + +L: + + 1 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 1 0 0 + +U: + + 0 0 0 0 0 1 + 0 1 1 0 0 0 + 0 0 0 0 0 0 + 0 0 0 0 0 0 + +encode ex-dep.pchk ex-dep.gen ex-dep.src ex-dep.enc; cat ex-dep.enc +Encoded 4 blocks, source block size 2, encoded block size 6 +000000 +100001 +000010 +100011 +verify ex-dep.pchk ex-dep.enc ex-dep.gen ex-dep.src +Block counts: tot 4, with chk errs 0, with src errs 0, both 0 +Bit error rate (on message bits only): 0.000e+00 + +# DENSE REPRESENTATION + +make-gen ex-dep.pchk ex-dep.gen dense +Note: Parity check matrix has 2 redundant checks +Number of 1s per check in Inv(A) X B is 0.2 +print-gen -d ex-dep.gen + +Generator matrix in ex-dep.gen (dense representation): + +Column order (message bits at end): + + 0 1 2 3 4 5 + +Inv(A) X B: + + 0 1 + 0 0 + 0 0 + 0 0 + +encode ex-dep.pchk ex-dep.gen ex-dep.src ex-dep.enc; cat ex-dep.enc +Encoded 4 blocks, source block size 2, encoded block size 6 +000000 +100001 +000010 +100011 +verify ex-dep.pchk ex-dep.enc ex-dep.gen ex-dep.src +Block counts: tot 4, with chk errs 0, with src errs 0, both 0 +Bit error rate (on message bits only): 0.000e+00 + +# MIXED REPRESENTATION + +make-gen ex-dep.pchk ex-dep.gen mixed +Note: Parity check matrix has 2 redundant checks +Number of 1s per check in Inv(A) is 0.5, in B is 0.2, total is 0.8 +print-gen -d ex-dep.gen + +Generator matrix in ex-dep.gen (mixed representation): + +Column order (message bits at end): + + 0 1 2 3 4 5 + +Inv(A): + + 1 0 0 0 + 0 0 0 1 + 0 0 0 0 + 0 0 0 0 + +encode ex-dep.pchk ex-dep.gen ex-dep.src ex-dep.enc; cat ex-dep.enc +Encoded 4 blocks, source block size 2, encoded block size 6 +000000 +100001 +000010 +100011 +verify ex-dep.pchk ex-dep.enc ex-dep.gen ex-dep.src +Block counts: tot 4, with chk errs 0, with src errs 0, both 0 +Bit error rate (on message bits only): 0.000e+00 + +# CODE 2 + +make-pchk ex-dep.pchk 4 5 0:0 0:1 1:1 1:2 2:0 2:2 3:3 3:4 +print-pchk -d ex-dep.pchk + +Parity check matrix in ex-dep.pchk (dense format): + + 1 1 0 0 0 + 0 1 1 0 0 + 1 0 1 0 0 + 0 0 0 1 1 + +echo 01 >ex-dep.src + +# SPARSE REPRESENTATION + +make-gen ex-dep.pchk ex-dep.gen sparse +Note: Parity check matrix has 1 redundant checks +Number of 1s per check in L is 1.0, U is 1.2, B is 0.5, total is 2.8 +print-gen -d ex-dep.gen + +Generator matrix in ex-dep.gen (sparse representation): + +Column order (message bits at end): + + 4 1 2 3 0 + +Row order: + + 3 0 1 2 + +L: + + 0 1 0 0 + 0 1 1 0 + 0 0 1 0 + 1 0 0 0 + +U: + + 0 0 0 1 1 + 0 1 0 0 0 + 0 0 1 0 0 + 0 0 0 0 0 + +encode ex-dep.pchk ex-dep.gen ex-dep.src ex-dep.enc; cat ex-dep.enc +Encoded 2 blocks, source block size 1, encoded block size 5 +00000 +11100 +verify ex-dep.pchk ex-dep.enc ex-dep.gen ex-dep.src +Block counts: tot 2, with chk errs 0, with src errs 0, both 0 +Bit error rate (on message bits only): 0.000e+00 + +# DENSE REPRESENTATION + +make-gen ex-dep.pchk ex-dep.gen dense +Note: Parity check matrix has 1 redundant checks +Number of 1s per check in Inv(A) X B is 0.2 +print-gen -d ex-dep.gen + +Generator matrix in ex-dep.gen (dense representation): + +Column order (message bits at end): + + 0 1 3 2 4 + +Inv(A) X B: + + 0 + 0 + 1 + 0 + +encode ex-dep.pchk ex-dep.gen ex-dep.src ex-dep.enc; cat ex-dep.enc +Encoded 2 blocks, source block size 1, encoded block size 5 +00000 +00011 +verify ex-dep.pchk ex-dep.enc ex-dep.gen ex-dep.src +Block counts: tot 2, with chk errs 0, with src errs 0, both 0 +Bit error rate (on message bits only): 0.000e+00 + +# MIXED REPRESENTATION + +make-gen ex-dep.pchk ex-dep.gen mixed +Note: Parity check matrix has 1 redundant checks +Number of 1s per check in Inv(A) is 1.0, in B is 0.2, total is 1.2 +print-gen -d ex-dep.gen + +Generator matrix in ex-dep.gen (mixed representation): + +Column order (message bits at end): + + 0 1 3 2 4 + +Inv(A): + + 1 1 0 0 + 0 1 0 0 + 0 0 0 1 + 0 0 0 0 + +encode ex-dep.pchk ex-dep.gen ex-dep.src ex-dep.enc; cat ex-dep.enc +Encoded 2 blocks, source block size 1, encoded block size 5 +00000 +00011 +verify ex-dep.pchk ex-dep.enc ex-dep.gen ex-dep.src +Block counts: tot 2, with chk errs 0, with src errs 0, both 0 +Bit error rate (on message bits only): 0.000e+00 diff --git a/lib/ldpc/ex-ham7a b/lib/ldpc/ex-ham7a new file mode 100755 index 000000000..7ccc08097 --- /dev/null +++ b/lib/ldpc/ex-ham7a @@ -0,0 +1,38 @@ +#!/bin/sh + +# Example of decoding a (7,4) Hamming code using exhaustive enumeration and +# probability propagation, with an Additive White Gaussian Noise channel with +# noise standard deviation of 0.5, for which Eb/N0 = 5.44 dB. +# +# Testing is done by transmitting zero blocks, which is sufficient because +# both the channel and the decoding procedure are symmetrical. WARNING: But +# things can easily become non-symmetrical with bugs, so this technique should +# be used with caution, and only when necessary for performance reasons. +# Decoding is done three times, once minimizing block error probability, once +# minimizing bit error probability, and once by up to 200 iterations of +# probability propagation. + +set -e # Stop if an error occurs +set -v # Echo commands as they are read + +make-pchk ex-ham7a.pchk 3 7 0:0 0:3 0:4 0:5 1:1 1:3 1:4 1:6 2:2 2:4 2:5 2:6 +make-gen ex-ham7a.pchk ex-ham7a.gen dense +transmit 7x100000 ex-ham7a.rec 1 awgn 0.5 + +# DECODE BY ENUMERATION TO MINIMIZE BLOCK ERROR PROBABILITY + +decode ex-ham7a.pchk ex-ham7a.rec ex-ham7a.dec-blk awgn 0.5 \ + enum-block ex-ham7a.gen +verify ex-ham7a.pchk ex-ham7a.dec-blk ex-ham7a.gen + +# DECODE BY ENUMERATION TO MINIMIZE BIT ERROR PROBABILITY + +decode ex-ham7a.pchk ex-ham7a.rec ex-ham7a.dec-bit awgn 0.5 \ + enum-bit ex-ham7a.gen +verify ex-ham7a.pchk ex-ham7a.dec-bit ex-ham7a.gen + +# DECODE BY PROBABILITY PROPAGATION + +decode ex-ham7a.pchk ex-ham7a.rec ex-ham7a.dec-prp awgn 0.5 \ + prprp 200 +verify ex-ham7a.pchk ex-ham7a.dec-prp ex-ham7a.gen diff --git a/lib/ldpc/ex-ham7a-out b/lib/ldpc/ex-ham7a-out new file mode 100755 index 000000000..eaa4ea522 --- /dev/null +++ b/lib/ldpc/ex-ham7a-out @@ -0,0 +1,33 @@ + +make-pchk ex-ham7a.pchk 3 7 0:0 0:3 0:4 0:5 1:1 1:3 1:4 1:6 2:2 2:4 2:5 2:6 +make-gen ex-ham7a.pchk ex-ham7a.gen dense +Number of 1s per check in Inv(A) X B is 3.0 +transmit 7x100000 ex-ham7a.rec 1 awgn 0.5 +Transmitted 700000 bits + +# DECODE BY ENUMERATION TO MINIMIZE BLOCK ERROR PROBABILITY + +decode ex-ham7a.pchk ex-ham7a.rec ex-ham7a.dec-blk awgn 0.5 \ + enum-block ex-ham7a.gen +Decoded 100000 blocks, 100000 valid. Average 16.0 iterations, 2% bit changes +verify ex-ham7a.pchk ex-ham7a.dec-blk ex-ham7a.gen +Block counts: tot 100000, with chk errs 0, with src errs 186, both 0 +Bit error rate (on message bits only): 7.950e-04 + +# DECODE BY ENUMERATION TO MINIMIZE BIT ERROR PROBABILITY + +decode ex-ham7a.pchk ex-ham7a.rec ex-ham7a.dec-bit awgn 0.5 \ + enum-bit ex-ham7a.gen +Decoded 100000 blocks, 99988 valid. Average 16.0 iterations, 2% bit changes +verify ex-ham7a.pchk ex-ham7a.dec-bit ex-ham7a.gen +Block counts: tot 100000, with chk errs 12, with src errs 186, both 7 +Bit error rate (on message bits only): 7.775e-04 + +# DECODE BY PROBABILITY PROPAGATION + +decode ex-ham7a.pchk ex-ham7a.rec ex-ham7a.dec-prp awgn 0.5 \ + prprp 200 +Decoded 100000 blocks, 99927 valid. Average 0.3 iterations, 2% bit changes +verify ex-ham7a.pchk ex-ham7a.dec-prp ex-ham7a.gen +Block counts: tot 100000, with chk errs 73, with src errs 276, both 52 +Bit error rate (on message bits only): 1.290e-03 diff --git a/lib/ldpc/ex-ham7b b/lib/ldpc/ex-ham7b new file mode 100755 index 000000000..3bdd4a60f --- /dev/null +++ b/lib/ldpc/ex-ham7b @@ -0,0 +1,21 @@ +#!/bin/sh + +# Example of coding using a (7,4) Hamming code, with transmission through +# a Binary Symmetric Channel with error probability of 0.05. +# +# This example shows how random source messages can be encoded as codewords, +# transmitted through the simulated channel, decoded, and the message bits +# extracted from the codewords. The final result is in ex-ham7b.ext, which can +# be compared to ex-ham7b.src. + +set -e # Stop if an error occurs +set -v # Echo commands as they are read + +make-pchk ex-ham7b.pchk 3 7 0:0 0:3 0:4 0:5 1:1 1:3 1:4 1:6 2:2 2:4 2:5 2:6 +make-gen ex-ham7b.pchk ex-ham7b.gen dense +rand-src ex-ham7b.src 1 4x1000 +encode ex-ham7b.pchk ex-ham7b.gen ex-ham7b.src ex-ham7b.enc +transmit ex-ham7b.enc ex-ham7b.rec 1 bsc 0.05 +decode ex-ham7b.pchk ex-ham7b.rec ex-ham7b.dec bsc 0.05 enum-bit ex-ham7b.gen +verify ex-ham7b.pchk ex-ham7b.dec ex-ham7b.gen ex-ham7b.src +extract ex-ham7b.gen ex-ham7b.dec ex-ham7b.ext diff --git a/lib/ldpc/ex-ham7b-out b/lib/ldpc/ex-ham7b-out new file mode 100755 index 000000000..37ecfc493 --- /dev/null +++ b/lib/ldpc/ex-ham7b-out @@ -0,0 +1,15 @@ + +make-pchk ex-ham7b.pchk 3 7 0:0 0:3 0:4 0:5 1:1 1:3 1:4 1:6 2:2 2:4 2:5 2:6 +make-gen ex-ham7b.pchk ex-ham7b.gen dense +Number of 1s per check in Inv(A) X B is 3.0 +rand-src ex-ham7b.src 1 4x1000 +encode ex-ham7b.pchk ex-ham7b.gen ex-ham7b.src ex-ham7b.enc +Encoded 1000 blocks, source block size 4, encoded block size 7 +transmit ex-ham7b.enc ex-ham7b.rec 1 bsc 0.05 +Transmitted 7000 bits +decode ex-ham7b.pchk ex-ham7b.rec ex-ham7b.dec bsc 0.05 enum-bit ex-ham7b.gen +Decoded 1000 blocks, 1000 valid. Average 16.0 iterations, 4% bit changes +verify ex-ham7b.pchk ex-ham7b.dec ex-ham7b.gen ex-ham7b.src +Block counts: tot 1000, with chk errs 0, with src errs 47, both 0 +Bit error rate (on message bits only): 2.000e-02 +extract ex-ham7b.gen ex-ham7b.dec ex-ham7b.ext diff --git a/lib/ldpc/ex-ldpc-encode b/lib/ldpc/ex-ldpc-encode new file mode 100755 index 000000000..7165e4823 --- /dev/null +++ b/lib/ldpc/ex-ldpc-encode @@ -0,0 +1,45 @@ +#!/bin/sh + +# Example of how an LDPC code can be encoded using using sparse, +# dense, and mixed representations of the generator matrix. The dense +# and mixed representations are based on the same set of message bits +# as the sparse method with minprod heuristic. This allows the correctness +# of these methods to be checked by verifying that they all produce the same +# result when encoding random messages. The results are also checked by +# 'verify'. +# +# A (400,200) LDPC code with 3 checks per bit is used for the test. + +set -e # Stop if an error occurs +set -v # Echo commands as they are read + +make-ldpc ex-ldpc-encode.pchk 200 400 1 evenboth 3 + +make-gen ex-ldpc-encode.pchk ex-ldpc-encode.genf sparse first +make-gen ex-ldpc-encode.pchk ex-ldpc-encode.genc sparse mincol +make-gen ex-ldpc-encode.pchk ex-ldpc-encode.genp sparse minprod +make-gen ex-ldpc-encode.pchk ex-ldpc-encode.gend dense ex-ldpc-encode.genp +make-gen ex-ldpc-encode.pchk ex-ldpc-encode.genm mixed ex-ldpc-encode.genp + +rand-src ex-ldpc-encode.src 1 200x10 + +encode ex-ldpc-encode.pchk ex-ldpc-encode.genf ex-ldpc-encode.src \ + ex-ldpc-encode.encf +encode ex-ldpc-encode.pchk ex-ldpc-encode.genc ex-ldpc-encode.src \ + ex-ldpc-encode.encc +encode ex-ldpc-encode.pchk ex-ldpc-encode.genp ex-ldpc-encode.src \ + ex-ldpc-encode.encp +encode ex-ldpc-encode.pchk ex-ldpc-encode.gend ex-ldpc-encode.src \ + ex-ldpc-encode.encd +encode ex-ldpc-encode.pchk ex-ldpc-encode.genm ex-ldpc-encode.src \ + ex-ldpc-encode.encm + +cmp ex-ldpc-encode.encp ex-ldpc-encode.encd +cmp ex-ldpc-encode.encp ex-ldpc-encode.encm + +verify ex-ldpc-encode.pchk ex-ldpc-encode.encf ex-ldpc-encode.genf \ + ex-ldpc-encode.src +verify ex-ldpc-encode.pchk ex-ldpc-encode.encc ex-ldpc-encode.genc \ + ex-ldpc-encode.src +verify ex-ldpc-encode.pchk ex-ldpc-encode.encp ex-ldpc-encode.genp \ + ex-ldpc-encode.src diff --git a/lib/ldpc/ex-ldpc-encode-out b/lib/ldpc/ex-ldpc-encode-out new file mode 100755 index 000000000..0dc1a1cf8 --- /dev/null +++ b/lib/ldpc/ex-ldpc-encode-out @@ -0,0 +1,47 @@ + +make-ldpc ex-ldpc-encode.pchk 200 400 1 evenboth 3 + +make-gen ex-ldpc-encode.pchk ex-ldpc-encode.genf sparse first +Number of 1s per check in L is 6.4, U is 6.4, B is 3.0, total is 15.8 +make-gen ex-ldpc-encode.pchk ex-ldpc-encode.genc sparse mincol +Number of 1s per check in L is 3.0, U is 3.3, B is 3.0, total is 9.3 +make-gen ex-ldpc-encode.pchk ex-ldpc-encode.genp sparse minprod +Number of 1s per check in L is 2.4, U is 3.2, B is 3.0, total is 8.6 +make-gen ex-ldpc-encode.pchk ex-ldpc-encode.gend dense ex-ldpc-encode.genp +Number of 1s per check in Inv(A) X B is 69.2 +make-gen ex-ldpc-encode.pchk ex-ldpc-encode.genm mixed ex-ldpc-encode.genp +Number of 1s per check in Inv(A) is 64.7, in B is 3.0, total is 67.7 + +rand-src ex-ldpc-encode.src 1 200x10 + +encode ex-ldpc-encode.pchk ex-ldpc-encode.genf ex-ldpc-encode.src \ + ex-ldpc-encode.encf +Encoded 10 blocks, source block size 200, encoded block size 400 +encode ex-ldpc-encode.pchk ex-ldpc-encode.genc ex-ldpc-encode.src \ + ex-ldpc-encode.encc +Encoded 10 blocks, source block size 200, encoded block size 400 +encode ex-ldpc-encode.pchk ex-ldpc-encode.genp ex-ldpc-encode.src \ + ex-ldpc-encode.encp +Encoded 10 blocks, source block size 200, encoded block size 400 +encode ex-ldpc-encode.pchk ex-ldpc-encode.gend ex-ldpc-encode.src \ + ex-ldpc-encode.encd +Encoded 10 blocks, source block size 200, encoded block size 400 +encode ex-ldpc-encode.pchk ex-ldpc-encode.genm ex-ldpc-encode.src \ + ex-ldpc-encode.encm +Encoded 10 blocks, source block size 200, encoded block size 400 + +cmp ex-ldpc-encode.encp ex-ldpc-encode.encd +cmp ex-ldpc-encode.encp ex-ldpc-encode.encm + +verify ex-ldpc-encode.pchk ex-ldpc-encode.encf ex-ldpc-encode.genf \ + ex-ldpc-encode.src +Block counts: tot 10, with chk errs 0, with src errs 0, both 0 +Bit error rate (on message bits only): 0.000e+00 +verify ex-ldpc-encode.pchk ex-ldpc-encode.encc ex-ldpc-encode.genc \ + ex-ldpc-encode.src +Block counts: tot 10, with chk errs 0, with src errs 0, both 0 +Bit error rate (on message bits only): 0.000e+00 +verify ex-ldpc-encode.pchk ex-ldpc-encode.encp ex-ldpc-encode.genp \ + ex-ldpc-encode.src +Block counts: tot 10, with chk errs 0, with src errs 0, both 0 +Bit error rate (on message bits only): 0.000e+00 diff --git a/lib/ldpc/ex-ldpc36-1000a b/lib/ldpc/ex-ldpc36-1000a new file mode 100755 index 000000000..19c4ba080 --- /dev/null +++ b/lib/ldpc/ex-ldpc36-1000a @@ -0,0 +1,50 @@ +#!/bin/sh + +# Example of a (2000,1000) LDPC code with 3 checks per bit and 6 bits per +# check, tested on Additive White Gaussian Noise channels with noise standard +# deviations varying from 0.80 to 0.95. +# +# Testing is done by transmitting random messages, which is safer (though +# slower) than using only zero messages. Decoding is done using a maximum +# of 250 iterations of probability propagation. + +set -e # Stop if an error occurs +set -v # Echo commands as they are read + +make-ldpc ex-ldpc36-1000a.pchk 1000 2000 1 evenboth 3 no4cycle +make-gen ex-ldpc36-1000a.pchk ex-ldpc36-1000a.gen dense +rand-src ex-ldpc36-1000a.src 1 1000x100 +encode ex-ldpc36-1000a.pchk ex-ldpc36-1000a.gen ex-ldpc36-1000a.src \ + ex-ldpc36-1000a.enc + +# NOISE STANDARD DEVIATION 0.80, Eb/N0 = 1.94 dB + +transmit ex-ldpc36-1000a.enc ex-ldpc36-1000a.rec 1 awgn 0.80 +decode ex-ldpc36-1000a.pchk ex-ldpc36-1000a.rec ex-ldpc36-1000a.dec awgn 0.80\ + prprp 250 +verify ex-ldpc36-1000a.pchk ex-ldpc36-1000a.dec ex-ldpc36-1000a.gen \ + ex-ldpc36-1000a.src + +# NOISE STANDARD DEVIATION 0.85, Eb/N0 = 1.41 dB + +transmit ex-ldpc36-1000a.enc ex-ldpc36-1000a.rec 1 awgn 0.85 +decode ex-ldpc36-1000a.pchk ex-ldpc36-1000a.rec ex-ldpc36-1000a.dec awgn 0.85\ + prprp 250 +verify ex-ldpc36-1000a.pchk ex-ldpc36-1000a.dec ex-ldpc36-1000a.gen \ + ex-ldpc36-1000a.src + +# NOISE STANDARD DEVIATION 0.90, Eb/N0 = 0.92 dB + +transmit ex-ldpc36-1000a.enc ex-ldpc36-1000a.rec 1 awgn 0.90 +decode ex-ldpc36-1000a.pchk ex-ldpc36-1000a.rec ex-ldpc36-1000a.dec awgn 0.90\ + prprp 250 +verify ex-ldpc36-1000a.pchk ex-ldpc36-1000a.dec ex-ldpc36-1000a.gen \ + ex-ldpc36-1000a.src + +# NOISE STANDARD DEVIATION 0.95, Eb/N0 = 0.45 dB + +transmit ex-ldpc36-1000a.enc ex-ldpc36-1000a.rec 1 awgn 0.95 +decode ex-ldpc36-1000a.pchk ex-ldpc36-1000a.rec ex-ldpc36-1000a.dec awgn 0.95\ + prprp 250 +verify ex-ldpc36-1000a.pchk ex-ldpc36-1000a.dec ex-ldpc36-1000a.gen \ + ex-ldpc36-1000a.src diff --git a/lib/ldpc/ex-ldpc36-1000a-out b/lib/ldpc/ex-ldpc36-1000a-out new file mode 100755 index 000000000..418ed5c96 --- /dev/null +++ b/lib/ldpc/ex-ldpc36-1000a-out @@ -0,0 +1,57 @@ + +make-ldpc ex-ldpc36-1000a.pchk 1000 2000 1 evenboth 3 no4cycle +Eliminated 24 cycles of length four by moving checks within column +make-gen ex-ldpc36-1000a.pchk ex-ldpc36-1000a.gen dense +Number of 1s per check in Inv(A) X B is 400.3 +rand-src ex-ldpc36-1000a.src 1 1000x100 +encode ex-ldpc36-1000a.pchk ex-ldpc36-1000a.gen ex-ldpc36-1000a.src \ + ex-ldpc36-1000a.enc +Encoded 100 blocks, source block size 1000, encoded block size 2000 + +# NOISE STANDARD DEVIATION 0.80, Eb/N0 = 1.94 dB + +transmit ex-ldpc36-1000a.enc ex-ldpc36-1000a.rec 1 awgn 0.80 +Transmitted 200000 bits +decode ex-ldpc36-1000a.pchk ex-ldpc36-1000a.rec ex-ldpc36-1000a.dec awgn 0.80\ + prprp 250 +Decoded 100 blocks, 100 valid. Average 10.8 iterations, 11% bit changes +verify ex-ldpc36-1000a.pchk ex-ldpc36-1000a.dec ex-ldpc36-1000a.gen \ + ex-ldpc36-1000a.src +Block counts: tot 100, with chk errs 0, with src errs 0, both 0 +Bit error rate (on message bits only): 0.000e+00 + +# NOISE STANDARD DEVIATION 0.85, Eb/N0 = 1.41 dB + +transmit ex-ldpc36-1000a.enc ex-ldpc36-1000a.rec 1 awgn 0.85 +Transmitted 200000 bits +decode ex-ldpc36-1000a.pchk ex-ldpc36-1000a.rec ex-ldpc36-1000a.dec awgn 0.85\ + prprp 250 +Decoded 100 blocks, 88 valid. Average 52.2 iterations, 12% bit changes +verify ex-ldpc36-1000a.pchk ex-ldpc36-1000a.dec ex-ldpc36-1000a.gen \ + ex-ldpc36-1000a.src +Block counts: tot 100, with chk errs 12, with src errs 12, both 12 +Bit error rate (on message bits only): 7.490e-03 + +# NOISE STANDARD DEVIATION 0.90, Eb/N0 = 0.92 dB + +transmit ex-ldpc36-1000a.enc ex-ldpc36-1000a.rec 1 awgn 0.90 +Transmitted 200000 bits +decode ex-ldpc36-1000a.pchk ex-ldpc36-1000a.rec ex-ldpc36-1000a.dec awgn 0.90\ + prprp 250 +Decoded 100 blocks, 19 valid. Average 209.4 iterations, 11% bit changes +verify ex-ldpc36-1000a.pchk ex-ldpc36-1000a.dec ex-ldpc36-1000a.gen \ + ex-ldpc36-1000a.src +Block counts: tot 100, with chk errs 81, with src errs 81, both 81 +Bit error rate (on message bits only): 6.529e-02 + +# NOISE STANDARD DEVIATION 0.95, Eb/N0 = 0.45 dB + +transmit ex-ldpc36-1000a.enc ex-ldpc36-1000a.rec 1 awgn 0.95 +Transmitted 200000 bits +decode ex-ldpc36-1000a.pchk ex-ldpc36-1000a.rec ex-ldpc36-1000a.dec awgn 0.95\ + prprp 250 +Decoded 100 blocks, 1 valid. Average 248.0 iterations, 9% bit changes +verify ex-ldpc36-1000a.pchk ex-ldpc36-1000a.dec ex-ldpc36-1000a.gen \ + ex-ldpc36-1000a.src +Block counts: tot 100, with chk errs 99, with src errs 99, both 99 +Bit error rate (on message bits only): 1.055e-01 diff --git a/lib/ldpc/ex-ldpc36-5000a b/lib/ldpc/ex-ldpc36-5000a new file mode 100755 index 000000000..f791e0568 --- /dev/null +++ b/lib/ldpc/ex-ldpc36-5000a @@ -0,0 +1,44 @@ +#!/bin/sh + +# Example of a (10000,5000) LDPC code with 3 checks per bit and 6 bits per +# check, tested on Additive White Gaussian Noise channels with noise standard +# deviations varying from 0.80 to 0.95. +# +# Testing is done by transmitting random messages, with pipes used so that +# intermediate files are avoided. Decoding is done using a maximum of 250 +# iterations of probability propagation. + +set -e # Stop if an error occurs +set -v # Echo commands as they are read + +make-ldpc ex-ldpc36-5000a.pchk 5000 10000 2 evenboth 3 no4cycle +make-gen ex-ldpc36-5000a.pchk ex-ldpc36-5000a.gen dense +rand-src ex-ldpc36-5000a.src 1 5000x100 + +# NOISE STANDARD DEVIATION 0.80, Eb/N0 = 1.94 dB + +encode ex-ldpc36-5000a.pchk ex-ldpc36-5000a.gen ex-ldpc36-5000a.src - \ + | transmit - - 1 awgn 0.80 \ + | decode ex-ldpc36-5000a.pchk - - awgn 0.80 prprp 250 \ + | verify ex-ldpc36-5000a.pchk - ex-ldpc36-5000a.gen ex-ldpc36-5000a.src + +# NOISE STANDARD DEVIATION 0.85, Eb/N0 = 1.41 dB + +encode ex-ldpc36-5000a.pchk ex-ldpc36-5000a.gen ex-ldpc36-5000a.src - \ + | transmit - - 1 awgn 0.85 \ + | decode ex-ldpc36-5000a.pchk - - awgn 0.85 prprp 250 \ + | verify ex-ldpc36-5000a.pchk - ex-ldpc36-5000a.gen ex-ldpc36-5000a.src + +# NOISE STANDARD DEVIATION 0.90, Eb/N0 = 0.92 dB + +encode ex-ldpc36-5000a.pchk ex-ldpc36-5000a.gen ex-ldpc36-5000a.src - \ + | transmit - - 1 awgn 0.90 \ + | decode ex-ldpc36-5000a.pchk - - awgn 0.90 prprp 250 \ + | verify ex-ldpc36-5000a.pchk - ex-ldpc36-5000a.gen ex-ldpc36-5000a.src + +# NOISE STANDARD DEVIATION 0.95, Eb/N0 = 0.45 dB + +encode ex-ldpc36-5000a.pchk ex-ldpc36-5000a.gen ex-ldpc36-5000a.src - \ + | transmit - - 1 awgn 0.95 \ + | decode ex-ldpc36-5000a.pchk - - awgn 0.95 prprp 250 \ + | verify ex-ldpc36-5000a.pchk - ex-ldpc36-5000a.gen ex-ldpc36-5000a.src diff --git a/lib/ldpc/ex-ldpc36-5000a-out b/lib/ldpc/ex-ldpc36-5000a-out new file mode 100755 index 000000000..f7bae5b91 --- /dev/null +++ b/lib/ldpc/ex-ldpc36-5000a-out @@ -0,0 +1,54 @@ + +make-ldpc ex-ldpc36-5000a.pchk 5000 10000 2 evenboth 3 no4cycle +Eliminated 25 cycles of length four by moving checks within column +make-gen ex-ldpc36-5000a.pchk ex-ldpc36-5000a.gen dense +Number of 1s per check in Inv(A) X B is 2068.3 +rand-src ex-ldpc36-5000a.src 1 5000x100 + +# NOISE STANDARD DEVIATION 0.80, Eb/N0 = 1.94 dB + +encode ex-ldpc36-5000a.pchk ex-ldpc36-5000a.gen ex-ldpc36-5000a.src - \ + | transmit - - 1 awgn 0.80 \ + | decode ex-ldpc36-5000a.pchk - - awgn 0.80 prprp 250 \ + | verify ex-ldpc36-5000a.pchk - ex-ldpc36-5000a.gen ex-ldpc36-5000a.src +Encoded 100 blocks, source block size 5000, encoded block size 10000 +Transmitted 1000000 bits +Decoded 100 blocks, 100 valid. Average 11.1 iterations, 11% bit changes +Block counts: tot 100, with chk errs 0, with src errs 0, both 0 +Bit error rate (on message bits only): 0.000e+00 + +# NOISE STANDARD DEVIATION 0.85, Eb/N0 = 1.41 dB + +encode ex-ldpc36-5000a.pchk ex-ldpc36-5000a.gen ex-ldpc36-5000a.src - \ + | transmit - - 1 awgn 0.85 \ + | decode ex-ldpc36-5000a.pchk - - awgn 0.85 prprp 250 \ + | verify ex-ldpc36-5000a.pchk - ex-ldpc36-5000a.gen ex-ldpc36-5000a.src +Encoded 100 blocks, source block size 5000, encoded block size 10000 +Transmitted 1000000 bits +Decoded 100 blocks, 95 valid. Average 33.7 iterations, 12% bit changes +Block counts: tot 100, with chk errs 5, with src errs 5, both 5 +Bit error rate (on message bits only): 2.706e-03 + +# NOISE STANDARD DEVIATION 0.90, Eb/N0 = 0.92 dB + +encode ex-ldpc36-5000a.pchk ex-ldpc36-5000a.gen ex-ldpc36-5000a.src - \ + | transmit - - 1 awgn 0.90 \ + | decode ex-ldpc36-5000a.pchk - - awgn 0.90 prprp 250 \ + | verify ex-ldpc36-5000a.pchk - ex-ldpc36-5000a.gen ex-ldpc36-5000a.src +Encoded 100 blocks, source block size 5000, encoded block size 10000 +Transmitted 1000000 bits +Decoded 100 blocks, 2 valid. Average 246.2 iterations, 10% bit changes +Block counts: tot 100, with chk errs 98, with src errs 98, both 98 +Bit error rate (on message bits only): 7.650e-02 + +# NOISE STANDARD DEVIATION 0.95, Eb/N0 = 0.45 dB + +encode ex-ldpc36-5000a.pchk ex-ldpc36-5000a.gen ex-ldpc36-5000a.src - \ + | transmit - - 1 awgn 0.95 \ + | decode ex-ldpc36-5000a.pchk - - awgn 0.95 prprp 250 \ + | verify ex-ldpc36-5000a.pchk - ex-ldpc36-5000a.gen ex-ldpc36-5000a.src +Encoded 100 blocks, source block size 5000, encoded block size 10000 +Transmitted 1000000 bits +Decoded 100 blocks, 0 valid. Average 250.0 iterations, 9% bit changes +Block counts: tot 100, with chk errs 100, with src errs 100, both 100 +Bit error rate (on message bits only): 1.092e-01 diff --git a/lib/ldpc/ex-ldpcvar-5000a b/lib/ldpc/ex-ldpcvar-5000a new file mode 100755 index 000000000..e8995e54c --- /dev/null +++ b/lib/ldpc/ex-ldpcvar-5000a @@ -0,0 +1,46 @@ +#!/bin/sh + +# Example of a (10000,5000) LDPC code with varying numbers of check per bit, +# tested on Additive White Gaussian Noise channels with noise standard +# deviations varying from 0.80 to 0.95. The code has 20% columns with two +# check bits, 70% columns with three check bits, and 10% columns with seven +# check bits. +# +# Testing is done by transmitting random messages, with pipes used so that +# intermediate files are avoided. Decoding is done using a maximum of 250 +# iterations of probability propagation. + +set -e # Stop if an error occurs +set -v # Echo commands as they are read + +make-ldpc ex-ldpcvar-5000a.pchk 5000 10000 2 evenboth 2x2/7x3/1x7 no4cycle +make-gen ex-ldpcvar-5000a.pchk ex-ldpcvar-5000a.gen dense +rand-src ex-ldpcvar-5000a.src 1 5000x100 + +# NOISE STANDARD DEVIATION 0.80, Eb/N0 = 1.94 dB + +encode ex-ldpcvar-5000a.pchk ex-ldpcvar-5000a.gen ex-ldpcvar-5000a.src - \ + | transmit - - 1 awgn 0.80 \ + | decode ex-ldpcvar-5000a.pchk - - awgn 0.80 prprp 250 \ + | verify ex-ldpcvar-5000a.pchk - ex-ldpcvar-5000a.gen ex-ldpcvar-5000a.src + +# NOISE STANDARD DEVIATION 0.85, Eb/N0 = 1.41 dB + +encode ex-ldpcvar-5000a.pchk ex-ldpcvar-5000a.gen ex-ldpcvar-5000a.src - \ + | transmit - - 1 awgn 0.85 \ + | decode ex-ldpcvar-5000a.pchk - - awgn 0.85 prprp 250 \ + | verify ex-ldpcvar-5000a.pchk - ex-ldpcvar-5000a.gen ex-ldpcvar-5000a.src + +# NOISE STANDARD DEVIATION 0.90, Eb/N0 = 0.92 dB + +encode ex-ldpcvar-5000a.pchk ex-ldpcvar-5000a.gen ex-ldpcvar-5000a.src - \ + | transmit - - 1 awgn 0.90 \ + | decode ex-ldpcvar-5000a.pchk - - awgn 0.90 prprp 250 \ + | verify ex-ldpcvar-5000a.pchk - ex-ldpcvar-5000a.gen ex-ldpcvar-5000a.src + +# NOISE STANDARD DEVIATION 0.95, Eb/N0 = 0.45 dB + +encode ex-ldpcvar-5000a.pchk ex-ldpcvar-5000a.gen ex-ldpcvar-5000a.src - \ + | transmit - - 1 awgn 0.95 \ + | decode ex-ldpcvar-5000a.pchk - - awgn 0.95 prprp 250 \ + | verify ex-ldpcvar-5000a.pchk - ex-ldpcvar-5000a.gen ex-ldpcvar-5000a.src diff --git a/lib/ldpc/ex-ldpcvar-5000a-out b/lib/ldpc/ex-ldpcvar-5000a-out new file mode 100755 index 000000000..3cdb2081e --- /dev/null +++ b/lib/ldpc/ex-ldpcvar-5000a-out @@ -0,0 +1,54 @@ + +make-ldpc ex-ldpcvar-5000a.pchk 5000 10000 2 evenboth 2x2/7x3/1x7 no4cycle +Eliminated 46 cycles of length four by moving checks within column +make-gen ex-ldpcvar-5000a.pchk ex-ldpcvar-5000a.gen dense +Number of 1s per check in Inv(A) X B is 1437.1 +rand-src ex-ldpcvar-5000a.src 1 5000x100 + +# NOISE STANDARD DEVIATION 0.80, Eb/N0 = 1.94 dB + +encode ex-ldpcvar-5000a.pchk ex-ldpcvar-5000a.gen ex-ldpcvar-5000a.src - \ + | transmit - - 1 awgn 0.80 \ + | decode ex-ldpcvar-5000a.pchk - - awgn 0.80 prprp 250 \ + | verify ex-ldpcvar-5000a.pchk - ex-ldpcvar-5000a.gen ex-ldpcvar-5000a.src +Encoded 100 blocks, source block size 5000, encoded block size 10000 +Transmitted 1000000 bits +Decoded 100 blocks, 100 valid. Average 11.3 iterations, 11% bit changes +Block counts: tot 100, with chk errs 0, with src errs 0, both 0 +Bit error rate (on message bits only): 0.000e+00 + +# NOISE STANDARD DEVIATION 0.85, Eb/N0 = 1.41 dB + +encode ex-ldpcvar-5000a.pchk ex-ldpcvar-5000a.gen ex-ldpcvar-5000a.src - \ + | transmit - - 1 awgn 0.85 \ + | decode ex-ldpcvar-5000a.pchk - - awgn 0.85 prprp 250 \ + | verify ex-ldpcvar-5000a.pchk - ex-ldpcvar-5000a.gen ex-ldpcvar-5000a.src +Encoded 100 blocks, source block size 5000, encoded block size 10000 +Transmitted 1000000 bits +Decoded 100 blocks, 100 valid. Average 18.0 iterations, 12% bit changes +Block counts: tot 100, with chk errs 0, with src errs 0, both 0 +Bit error rate (on message bits only): 0.000e+00 + +# NOISE STANDARD DEVIATION 0.90, Eb/N0 = 0.92 dB + +encode ex-ldpcvar-5000a.pchk ex-ldpcvar-5000a.gen ex-ldpcvar-5000a.src - \ + | transmit - - 1 awgn 0.90 \ + | decode ex-ldpcvar-5000a.pchk - - awgn 0.90 prprp 250 \ + | verify ex-ldpcvar-5000a.pchk - ex-ldpcvar-5000a.gen ex-ldpcvar-5000a.src +Encoded 100 blocks, source block size 5000, encoded block size 10000 +Transmitted 1000000 bits +Decoded 100 blocks, 65 valid. Average 119.8 iterations, 12% bit changes +Block counts: tot 100, with chk errs 35, with src errs 35, both 35 +Bit error rate (on message bits only): 2.438e-02 + +# NOISE STANDARD DEVIATION 0.95, Eb/N0 = 0.45 dB + +encode ex-ldpcvar-5000a.pchk ex-ldpcvar-5000a.gen ex-ldpcvar-5000a.src - \ + | transmit - - 1 awgn 0.95 \ + | decode ex-ldpcvar-5000a.pchk - - awgn 0.95 prprp 250 \ + | verify ex-ldpcvar-5000a.pchk - ex-ldpcvar-5000a.gen ex-ldpcvar-5000a.src +Encoded 100 blocks, source block size 5000, encoded block size 10000 +Transmitted 1000000 bits +Decoded 100 blocks, 0 valid. Average 250.0 iterations, 9% bit changes +Block counts: tot 100, with chk errs 100, with src errs 100, both 100 +Bit error rate (on message bits only): 1.017e-01 diff --git a/lib/ldpc/ex-wrong-model b/lib/ldpc/ex-wrong-model new file mode 100755 index 000000000..a8304c6c8 --- /dev/null +++ b/lib/ldpc/ex-wrong-model @@ -0,0 +1,124 @@ +#!/bin/sh + +# These tests investigate what happens when the wrong model is used for +# decoding. A (1800,1000) LDPC code with 3 check per bit is used. +# Testing is done by transmitting random messages. Decoding is done using +# a maximum of 100 iterations of probability propagation. +# +# The first set of tests compares decoding of messages sent through an +# AWGN channel using the correct AWGN model with sigma=0.90 to decoding +# using AWGN models with incorrect values for sigma and to decoding +# using AWLN models with varying width parameters for the logistic noise +# distribution. +# +# A second set of tests compares decoding of messages sent through an +# AWLN channel using the correct AWLN model with width=0.50 to decoding +# using AWLN models with incorrect values for width and to decoding +# using AWGN models with varying sigma parameters. + +set -e # Stop if an error occurs +set -v # Echo commands as they are read + +make-ldpc ex-wrong-model.pchk 1000 1800 1 evenboth 3 no4cycle +make-gen ex-wrong-model.pchk ex-wrong-model.gen dense +rand-src ex-wrong-model.src 1 800x1000 +encode ex-wrong-model.pchk ex-wrong-model.gen ex-wrong-model.src \ + ex-wrong-model.enc + +# FIRST SET OF TESTS, TRANSMITTING THROUGH AWGN CHANNEL WITH SIGMA=0.90 + +transmit ex-wrong-model.enc ex-wrong-model.rec 1 awgn 0.90 + +# DECODING WITH CORRECT AWGN NOISE MODEL, SIGMA=0.90 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 0.90 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# DECODING WITH AWGN NOISE MODEL, SIGMA=0.95 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 0.95 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# DECODING WITH AWGN NOISE MODEL, SIGMA=0.85 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 0.85 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# DECODING WITH AWLN NOISE MODEL, WIDTH=0.40 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.40 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# DECODING WITH AWLN NOISE MODEL, WIDTH=0.45 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.45 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# DECODING WITH AWLN NOISE MODEL, WIDTH=0.50 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.50 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# DECODING WITH AWLN NOISE MODEL, WIDTH=0.55 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.55 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# DECODING WITH AWLN NOISE MODEL, WIDTH=0.60 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.60 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# DECODING WITH AWLN NOISE MODEL, WIDTH=0.65 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.65 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# SECOND SET OF TESTS, TRANSMITTING THROUGH AWLN CHANNEL WITH WIDTH=0.50 + +transmit ex-wrong-model.enc ex-wrong-model.rec 1 awln 0.50 + +# DECODING WITH CORRECT AWLN NOISE MODEL, WIDTH=0.50 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.50 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# DECODING WITH AWLN NOISE MODEL, WIDTH=0.55 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.55 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# DECODING WITH AWLN NOISE MODEL, WIDTH=0.45 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.45 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# DECODING WITH AWGN NOISE MODEL, SIGMA=0.80 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 0.80 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# DECODING WITH AWGN NOISE MODEL, SIGMA=0.85 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 0.85 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# DECODING WITH AWGN NOISE MODEL, SIGMA=0.90 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 0.90 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# DECODING WITH AWGN NOISE MODEL, SIGMA=0.95 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 0.95 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# DECODING WITH AWGN NOISE MODEL, SIGMA=1.00 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 1.00 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src + +# DECODING WITH AWGN NOISE MODEL, SIGMA=1.05 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 1.05 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src diff --git a/lib/ldpc/ex-wrong-model-out b/lib/ldpc/ex-wrong-model-out new file mode 100755 index 000000000..cde814c92 --- /dev/null +++ b/lib/ldpc/ex-wrong-model-out @@ -0,0 +1,163 @@ + +make-ldpc ex-wrong-model.pchk 1000 1800 1 evenboth 3 no4cycle +Eliminated 19 cycles of length four by moving checks within column +make-gen ex-wrong-model.pchk ex-wrong-model.gen dense +Number of 1s per check in Inv(A) X B is 318.6 +rand-src ex-wrong-model.src 1 800x1000 +encode ex-wrong-model.pchk ex-wrong-model.gen ex-wrong-model.src \ + ex-wrong-model.enc +Encoded 1000 blocks, source block size 800, encoded block size 1800 + +# FIRST SET OF TESTS, TRANSMITTING THROUGH AWGN CHANNEL WITH SIGMA=0.90 + +transmit ex-wrong-model.enc ex-wrong-model.rec 1 awgn 0.90 +Transmitted 1800000 bits + +# DECODING WITH CORRECT AWGN NOISE MODEL, SIGMA=0.90 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 0.90 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 910 valid. Average 25.8 iterations, 13% bit changes +Block counts: tot 1000, with chk errs 90, with src errs 89, both 89 +Bit error rate (on message bits only): 6.484e-03 + +# DECODING WITH AWGN NOISE MODEL, SIGMA=0.95 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 0.95 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 909 valid. Average 25.7 iterations, 13% bit changes +Block counts: tot 1000, with chk errs 91, with src errs 91, both 91 +Bit error rate (on message bits only): 6.540e-03 + +# DECODING WITH AWGN NOISE MODEL, SIGMA=0.85 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 0.85 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 900 valid. Average 27.7 iterations, 13% bit changes +Block counts: tot 1000, with chk errs 100, with src errs 100, both 100 +Bit error rate (on message bits only): 7.604e-03 + +# DECODING WITH AWLN NOISE MODEL, WIDTH=0.40 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.40 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 755 valid. Average 42.3 iterations, 13% bit changes +Block counts: tot 1000, with chk errs 245, with src errs 245, both 245 +Bit error rate (on message bits only): 1.884e-02 + +# DECODING WITH AWLN NOISE MODEL, WIDTH=0.45 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.45 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 827 valid. Average 34.7 iterations, 13% bit changes +Block counts: tot 1000, with chk errs 173, with src errs 172, both 172 +Bit error rate (on message bits only): 1.306e-02 + +# DECODING WITH AWLN NOISE MODEL, WIDTH=0.50 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.50 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 849 valid. Average 31.7 iterations, 13% bit changes +Block counts: tot 1000, with chk errs 151, with src errs 151, both 151 +Bit error rate (on message bits only): 1.069e-02 + +# DECODING WITH AWLN NOISE MODEL, WIDTH=0.55 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.55 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 855 valid. Average 32.3 iterations, 13% bit changes +Block counts: tot 1000, with chk errs 145, with src errs 145, both 145 +Bit error rate (on message bits only): 1.022e-02 + +# DECODING WITH AWLN NOISE MODEL, WIDTH=0.60 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.60 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 790 valid. Average 40.0 iterations, 13% bit changes +Block counts: tot 1000, with chk errs 210, with src errs 210, both 210 +Bit error rate (on message bits only): 1.452e-02 + +# DECODING WITH AWLN NOISE MODEL, WIDTH=0.65 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.65 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 540 valid. Average 63.3 iterations, 11% bit changes +Block counts: tot 1000, with chk errs 460, with src errs 460, both 460 +Bit error rate (on message bits only): 3.247e-02 + +# SECOND SET OF TESTS, TRANSMITTING THROUGH AWLN CHANNEL WITH WIDTH=0.50 + +transmit ex-wrong-model.enc ex-wrong-model.rec 1 awln 0.50 +Transmitted 1800000 bits + +# DECODING WITH CORRECT AWLN NOISE MODEL, WIDTH=0.50 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.50 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 914 valid. Average 25.1 iterations, 12% bit changes +Block counts: tot 1000, with chk errs 86, with src errs 86, both 86 +Bit error rate (on message bits only): 6.130e-03 + +# DECODING WITH AWLN NOISE MODEL, WIDTH=0.55 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.55 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 907 valid. Average 25.6 iterations, 12% bit changes +Block counts: tot 1000, with chk errs 93, with src errs 93, both 93 +Bit error rate (on message bits only): 6.474e-03 + +# DECODING WITH AWLN NOISE MODEL, WIDTH=0.45 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awln 0.45 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 893 valid. Average 27.5 iterations, 12% bit changes +Block counts: tot 1000, with chk errs 107, with src errs 107, both 107 +Bit error rate (on message bits only): 7.744e-03 + +# DECODING WITH AWGN NOISE MODEL, SIGMA=0.80 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 0.80 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 702 valid. Average 44.9 iterations, 12% bit changes +Block counts: tot 1000, with chk errs 298, with src errs 298, both 298 +Bit error rate (on message bits only): 2.245e-02 + +# DECODING WITH AWGN NOISE MODEL, SIGMA=0.85 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 0.85 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 765 valid. Average 39.4 iterations, 12% bit changes +Block counts: tot 1000, with chk errs 235, with src errs 235, both 235 +Bit error rate (on message bits only): 1.693e-02 + +# DECODING WITH AWGN NOISE MODEL, SIGMA=0.90 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 0.90 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 808 valid. Average 35.7 iterations, 12% bit changes +Block counts: tot 1000, with chk errs 192, with src errs 192, both 192 +Bit error rate (on message bits only): 1.374e-02 + +# DECODING WITH AWGN NOISE MODEL, SIGMA=0.95 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 0.95 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 814 valid. Average 34.6 iterations, 12% bit changes +Block counts: tot 1000, with chk errs 186, with src errs 186, both 186 +Bit error rate (on message bits only): 1.291e-02 + +# DECODING WITH AWGN NOISE MODEL, SIGMA=1.00 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 1.00 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 808 valid. Average 35.6 iterations, 12% bit changes +Block counts: tot 1000, with chk errs 192, with src errs 192, both 192 +Bit error rate (on message bits only): 1.320e-02 + +# DECODING WITH AWGN NOISE MODEL, SIGMA=1.05 + +decode ex-wrong-model.pchk ex-wrong-model.rec - awgn 1.05 prprp 100 \ + | verify ex-wrong-model.pchk - ex-wrong-model.gen ex-wrong-model.src +Decoded 1000 blocks, 771 valid. Average 40.7 iterations, 11% bit changes +Block counts: tot 1000, with chk errs 229, with src errs 228, both 228 +Bit error rate (on message bits only): 1.524e-02 diff --git a/lib/ldpc/examples.html b/lib/ldpc/examples.html new file mode 100755 index 000000000..bc94faed1 --- /dev/null +++ b/lib/ldpc/examples.html @@ -0,0 +1,87 @@ + + + Examples of LDPC Program Usage + + + + +

Examples of LDPC Program Usage

+ +

Below, are some command files containing examples of the use of +the LDPC programs, together with the output I +obtained for these examples. Output on other machines might +conceivably be slightly different, due to different round-off errors. +The run-examples script runs all the example +scripts and compares their output with the outputs that I obtained (on +a Pentium machine). + +

ex-ham7b, +output in ex-ham7b-out +

+A (7,4) Hamming code used with a BSC. +Demonstrates encoding of random messages and decoding to minimize +bit error rate by exhaustive enumeration. +
+ +

ex-ham7a, +output in ex-ham7a-out +

+A (7,4) Hamming code used with an AWGN channel. Tested using zero messages. +Decoded by exhaustive enumeration to minimize either block or bit error rate, +and by probability propagation. +
+ +

ex-dep, +output in ex-dep-out +

+Examples of how parity check matrices with linearly dependent rows (ie, +redundant parity checks) are handled. This is probably not of +great interest to most users. +
+ +

ex-ldpc-encode, +output in ex-ldpc-encode-out +

+Encodes messages with an LDPC code using sparse, dense, and mixed +representations of the generator matrix. +
+ +

ex-ldpc36-1000a, +output in ex-ldpc36-1000a-out +

+A (2000,1000) LDPC code with 3 checks per bit and 6 bits per check. +Three encoding methods are tried out, and the code is +tested on an AWGN channel at various noise levels, using random messages. +
+ +

ex-ldpc36-5000a, +output in ex-ldpc36-5000a-out +

+A (10000,5000) LDPC code with 3 checks per bit and 6 bits per check. +Tested on an AWGN channel at various noise levels, using random messages. +Pipes are used to avoid creating lots of files. +
+ +

ex-ldpcvar-5000a, +output in ex-ldpcvar-5000a-out +

+A (10000,5000) LDPC code with the number of checks per bit varying from 2 to 7. +Tested on an AWGN channel at various noise levels, using random messages. +Pipes are used to avoid creating lots of files. Performance is better than +for the code above in which the number of checks is the same for all bits. +
+ +

ex-wrong-model, +output in ex-wrong-model-out +

+Tests what happens when messages are decoded using the wrong noise +model, including using the right type of model but with the wrong +noise level, and using the wrong type of model (ie, using an AWLN model +for messages transmitted through an AWGN channel, or vice versa). +
+ +
+ +Back to index for LDPC software + + diff --git a/lib/ldpc/extract.c b/lib/ldpc/extract.c new file mode 100755 index 000000000..f969f8970 --- /dev/null +++ b/lib/ldpc/extract.c @@ -0,0 +1,112 @@ +/* EXTRACT.C - Extract message bits from coded blocks. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include +#include +#include + +#include "alloc.h" +#include "blockio.h" +#include "open.h" +#include "mod2sparse.h" +#include "mod2dense.h" +#include "mod2convert.h" +#include "rcode.h" + +void usage(void); + + +/* MAIN PROGRAM. */ + +int main +( int argc, + char **argv +) +{ + char *gen_file, *coded_file, *ext_file; + FILE *codef, *extf; + char *cblk; + int i; + + /* Look at arguments. */ + + if (!(gen_file = argv[1]) + || !(coded_file = argv[2]) + || !(ext_file = argv[3]) + || argv[4]) + { usage(); + } + + if ((strcmp(gen_file,"-")==0) + (strcmp(coded_file,"-")==0) > 1) + { fprintf(stderr,"Can't read more than one stream from standard input\n"); + exit(1); + } + + /* Read generator matrix file, up to the point of finding out which + are the message bits. */ + + read_gen(gen_file,1,1); + + /* Open decoded file. */ + + codef = open_file_std(coded_file,"r"); + if (codef==NULL) + { fprintf(stderr,"Can't open coded file: %s\n",coded_file); + exit(1); + } + + /* Open file to write extracted message bits to. */ + + extf = open_file_std(ext_file,"w"); + if (extf==NULL) + { fprintf(stderr,"Can't create file for extracted bits: %s\n",ext_file); + exit(1); + } + + cblk = chk_alloc (N, sizeof *cblk); + + for (;;) + { + /* Read block from coded file. */ + + if (blockio_read(codef,cblk,N)==EOF) break; + + /* Extract message bits and write to file, followed by newline to mark + block boundary. */ + + for (i = M; i + + Github Facilities + + + +

Github Facilities

+ +

Starting with the Version of 2012-02-11, the source code repository +for this software is hosted by Github, +and is located at http://github.com/radfordneal/LDPC-codes. +This repository includes the annotated log of changes made since the +Version of 2006-02-08. + +

You can use the facilities at Github to obtain the source-code +repository, report bugs, and contribute to the wiki. + +

Obtaining the source repository, and modifying it

+ +

To obtain a copy of the source-code repository, issue the following +command (in a Unix/Linux/Cygwin environment that has git installed): +

+git clone git://github.com/radfordneal/LDPC-codes
+
+This will retrieve the current state of the software, storing it +in the directory LDPC-codes, which you should ensure does not +exist before issuing this command above. + +

Note that if all you want to do is compile and use the current +version, you can instead download the source without development +history as described in the installation +instructions. + +

The LDPC-codes directory created by the git clone +command is a git repository, which can be manipulated with the various +forms of the git command, which are documented, for example, +here. + +

Each stable version of the software is a separate branch of the +repository. The documentation on the most recent stable version is in +the "gh-pages" branch. The current development version is on the +"master" branch. The are other branches for each stable version that +was released. + +

You can make local changes to your copy of the repository, and use +the modified software. If you wish, you can ask me +(radfordneal@gmail.com) to include your changes in a new release, or, +if you register as a Github user, you can set +up your own fork of the software for you and other people to use. + + +

Reporting Bugs

+ +You can use the Github "Issues" facility to report bugs in the +software. You have to register as a Github +user to do this (which is free). You can then go here and +click on "New issue" to report a bug. You can also use this facility +to suggest new features or other revisions. I may not have time to +implement them, but perhaps someone else will. + +
+ +Back to index for LDPC software + + diff --git a/lib/ldpc/index.html b/lib/ldpc/index.html new file mode 100755 index 000000000..11aa1248e --- /dev/null +++ b/lib/ldpc/index.html @@ -0,0 +1,89 @@ + + + Software for Low Density Parity Check Codes + + + + +

Software for Low Density Parity Check Codes

+ +

Version in development. + +

This collection of programs and modules, written in C, is intended +to support research and education concerning Low Density Parity Check +(LDPC) codes. (Note, however, that the copyright notice no longer +restricts use to these purposes). These error-correcting codes were +invented by Robert Gallager in the early 1960's, and re-invented and +shown to have very good performance by David MacKay and myself in the +mid-1990's. The decoding algorithm for LDPC codes is related to that +used for Turbo codes, and to probabilistic inference methods used in +other fields. Variations on LDPC and Turbo codes are currently the +best practical codes known, in terms of their ability to transmit data +at rates approaching channel capacity with very low error probability. + +

This and past versions of the software are available here, +from Radford Neal's +web page. The source code for this software is also hosted at Github, +where there is a copy +of these documentation pages for the latest release. Github also +provides facilities for bug reporting and discussion. + +

Index to Documentation

+ +Download and installation instructions +
+ How to get and compile the programs and modules. +
+Github facilities +
+ How to get the source repository, report bugs, etc. +
+Release notes +
+ A log of changes made in each release of this software. +
+Software and program usage documentation +
+ General documentation on the methods implemented, and details of + program usage. +
+Examples of program usage +
+ Examples using simple Hamming codes, and using more interesting LDPC codes. +
+How to modify the programs +
+ Notes on how to add new channel types, new decoding methods, etc. +
+Module documentation +
+ Modules used by the programs for modulo-2 matrix + operations and random number generation. +
+References +
+ Classic and more recent papers on LDPC codes and related topics. +
+ +

Copyright and Lack of Warranty

+ +

Except as otherwise specified, all of this software and +documentation is copyright © 1995-2012 by Radford M. Neal. + +

Permission is granted for anyone to copy, use, modify, and distribute +these programs and accompanying documents for any purpose, provided +this copyright notice is retained and prominently displayed, and note +is made of any changes made to these programs. These programs and +documents are distributed without any warranty, express or implied. +As the programs were written for research purposes only, they have not +been tested to the degree that would be advisable in any important +application. All use of these programs is entirely at the user's own +risk. + +

Some routines in the module rand.c are taken from the GNU C Library, +and are copyrighted as described there and in the file LGPL. + + + diff --git a/lib/ldpc/install.html b/lib/ldpc/install.html new file mode 100755 index 000000000..f6966ab58 --- /dev/null +++ b/lib/ldpc/install.html @@ -0,0 +1,82 @@ + + + Installing the LDPC Software + + + +

Installing the LDPC Software

+ +The LDPC software is written in C, and may well work with any C +compiler, though it has been tested only with gcc, in Unix and Linux +environments, and in the Cygwin +Unix-like environment that runs under Microsoft Windows. The +installation instructions below assume that you are using a Unix-like +system. + +

All the software, including the documentation you are viewing here, +is contained in a tar file, which you can download by clicking one +of the options below: +

+ Tar + file of LDPC software (0.9 Megabytes)
+ Gzipped + tar file of LDPC software (0.4 Megabytes) +
+ +

Once you obtain the tar file (and uncompress it with gunzip if +necessary), you should extract the files with the following Unix command: +

+tar xf LDPC-yyyy-mm-dd.tar
+
+This will create a source directory called LDPC-yyyy-mm-dd, and place +all the source, documentation, and other files in this directory. + +

If you prefer for this directory to be called something else, +rename it now, before compiling the programs, since the file +randfile in this directory, containing natural random numbers, +is accessed according to its path when the programs were compiled. + +

Once the tar command above has finished, you should change into the +newly-created directory, and type +

+make
+
+If all goes well, this should compile all the programs (except for some +test programs, which can be compiled with make test). You +may want to edit the file Makefile before running make +in order to change compilation options, such as the optimization level. + +

You can run the programs from this source directory, or you can copy +them to some other directory by running the LDPC-install +shell file. For instance, to install them in a bin directory in your +home directory, do the following: +

+./LDPC-install $HOME/bin
+
+ +

The source directory contains a copy of all the HTML files +documenting the software, such as the one you are reading now, with +the file index.html being the starting point. It is best to +use this local copy when referring to the documentation, rather than +get it off the web, since that is faster and also insures that the +documentation is for the version that you are using. Just tell your +browser to open the URL +

+file:path-to-software/index.html
+
+where path-to-software is the full path (starting with "/") +to the directory where you've put the software. + +

The command +

+make clean
+
+will remove all the compiled programs, as well as the files created when +the examples are run, and core, if it +exists. + +
+ +Back to index for LDPC software + + diff --git a/lib/ldpc/intio.c b/lib/ldpc/intio.c new file mode 100755 index 000000000..bfa8db9f3 --- /dev/null +++ b/lib/ldpc/intio.c @@ -0,0 +1,110 @@ +/* INTIO.C - Routines to read and write integers one byte at a time. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include + +#include "intio.h" + + +/* READ AN INTEGER ONE BYTE AT A TIME. Four bytes are read, ordered from + low to high order. These are considered to represent a signed integer, + in two's complement form. The value returned is this integer, converted + to whatever a C "int" is. The conversion should work as long as an "int" + is at least four bytes, even if it's not in two's complement representation + (except for the largest two's complement negative integer). + + If an error or eof is encountered, zero is returned. The caller can + check for these events using feof and ferror. + + The file read from should have been opened as "binary". +*/ + +int intio_read +( FILE *f /* File to read from */ +) +{ + unsigned char b[4]; + int top; + int i; + + for (i = 0; i<4; i++) + { if (fread(&b[i],1,1,f) != 1) return 0; + } + + top = b[3]>127 ? (int)b[3] - 256 : b[3]; + + return (top<<24) + (b[2]<<16) + (b[1]<<8) + b[0]; +} + + +/* WRITE AN INTEGER ONE BYTE AT A TIME. Four bytes are written, ordered from + low to high order. These are considered to represent a signed integer, + in two's complement form. This should work as long as the integer passed + can be represented in four bytes, even if a C "int" is longer than this. + + The file written to should have been opened as "binary". +*/ + +void intio_write +( FILE *f, /* File to write to */ + int v /* Value to write to file */ +) +{ + unsigned char b; + int i; + + for (i = 0; i<3; i++) + { b = v&0xff; + fwrite(&b,1,1,f); + v >>= 8; + } + + b = v>0 ? v : v+256; + fwrite(&b,1,1,f); +} + + +/* TEST PROGRAM. */ + +#ifdef TEST_INTIO + +main(void) +{ + FILE *f; + f = fopen("test","wb"); + intio_write(f,334); + intio_write(f,-40000); + intio_write(f,0x8fffffff); + intio_write(f,-0x8fffffff); + fclose(f); + f = fopen("test","rb"); + if (intio_read(f)!=334 + || intio_read(f)!=-40000 + || intio_read(f)!=0x8fffffff + || intio_read(f)!=-0x8fffffff) + { fprintf(stderr,"got back bad data\n"); + exit(1); + } + if (intio_read(f)!=0 || !feof(f) || ferror(f)) + { fprintf(stderr,"eof not handled correctly\n"); + exit(1); + } + fclose(f); + fprintf(stderr,"OK\n"); + exit(0); +} + +#endif diff --git a/lib/ldpc/intio.h b/lib/ldpc/intio.h new file mode 100755 index 000000000..03979d0ce --- /dev/null +++ b/lib/ldpc/intio.h @@ -0,0 +1,17 @@ +/* INTIO.H - Interface for reading and writing integers one byte at a time. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +int intio_read (FILE *); /* Read an integer */ +void intio_write (FILE *, int); /* Write an integer */ diff --git a/lib/ldpc/jtmode_codes/144-72-evenboth-3.results.rtf b/lib/ldpc/jtmode_codes/144-72-evenboth-3.results.rtf new file mode 100644 index 000000000..8dd3b7446 --- /dev/null +++ b/lib/ldpc/jtmode_codes/144-72-evenboth-3.results.rtf @@ -0,0 +1,3995 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 +{\fonttbl\f0\fnil\fcharset0 Menlo-Regular;} +{\colortbl;\red255\green255\blue255;} +\margl1440\margr1440\vieww22580\viewh8400\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs30 \cf0 \CocoaLigature0 Stevens-MacBook-Air:LDPC-codes-master sfranke$ ldpc-144-72-search\ +\ +for i in `seq 1 1000`;\ +do\ + seed=$i\ + echo seed $seed\ +make-ldpc ldpc-144-72.pchk 72 144 $seed evenboth 3 no4cycle\ +make-gen ldpc-144-72.pchk ldpc-144-72.gen dense\ +rand-src ldpc-144-72.src 2 72x100000\ +encode ldpc-144-72.pchk ldpc-144-72.gen ldpc-144-72.src \\\ + ldpc-144-72.enc\ +\ +\ +# NOISE STANDARD DEVIATION 0.80, Eb/N0 = 1.94 dB\ +\ +transmit ldpc-144-72.enc ldpc-144-72.rec 1 awgn 0.80\ +decode ldpc-144-72.pchk ldpc-144-72.rec ldpc-144-72.dec awgn 0.80\\\ + prprp 250\ +verify ldpc-144-72.pchk ldpc-144-72.dec ldpc-144-72.gen \\\ + ldpc-144-72.src \ +\ +\ +done\ +seq 1 1000\ +seed 1\ +Eliminated 39 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79230 valid. Average 58.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20770, with src errs 20936, both 20741\ +Total good frames: 79035 Total undetected errors: 195\ +Bit error rate (on message bits only): 2.035e-02\ +seed 2\ +Eliminated 44 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78842 valid. Average 59.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21158, with src errs 21182, both 21107\ +Total good frames: 78767 Total undetected errors: 75\ +Bit error rate (on message bits only): 2.034e-02\ +seed 3\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79636 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20364, with src errs 20402, both 20319\ +Total good frames: 79553 Total undetected errors: 83\ +Bit error rate (on message bits only): 2.009e-02\ +seed 4\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79563 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20437, with src errs 20463, both 20397\ +Total good frames: 79497 Total undetected errors: 66\ +Bit error rate (on message bits only): 1.988e-02\ +seed 5\ +Eliminated 28 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80016 valid. Average 56.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19984, with src errs 20083, both 19952\ +Total good frames: 79885 Total undetected errors: 131\ +Bit error rate (on message bits only): 1.987e-02\ +seed 6\ +Eliminated 40 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79204 valid. Average 58.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20796, with src errs 20819, both 20764\ +Total good frames: 79149 Total undetected errors: 55\ +Bit error rate (on message bits only): 2.028e-02\ +seed 7\ +Eliminated 43 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79599 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20401, with src errs 20411, both 20362\ +Total good frames: 79550 Total undetected errors: 49\ +Bit error rate (on message bits only): 1.969e-02\ +seed 8\ +Eliminated 25 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80060 valid. Average 56.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19940, with src errs 19925, both 19889\ +Total good frames: 80024 Total undetected errors: 36\ +Bit error rate (on message bits only): 1.965e-02\ +seed 9\ +Eliminated 28 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79911 valid. Average 56.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20089, with src errs 20132, both 20040\ +Total good frames: 79819 Total undetected errors: 92\ +Bit error rate (on message bits only): 1.981e-02\ +seed 10\ +Eliminated 28 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 33.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79435 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20565, with src errs 21049, both 20530\ +Total good frames: 78916 Total undetected errors: 519\ +Bit error rate (on message bits only): 2.055e-02\ +seed 11\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78802 valid. Average 59.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21198, with src errs 21219, both 21155\ +Total good frames: 78738 Total undetected errors: 64\ +Bit error rate (on message bits only): 2.045e-02\ +seed 12\ +Eliminated 34 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79426 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20574, with src errs 20674, both 20554\ +Total good frames: 79306 Total undetected errors: 120\ +Bit error rate (on message bits only): 2.036e-02\ +seed 13\ +Eliminated 41 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79574 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20426, with src errs 20531, both 20396\ +Total good frames: 79439 Total undetected errors: 135\ +Bit error rate (on message bits only): 2.003e-02\ +seed 14\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79932 valid. Average 56.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20068, with src errs 20624, both 20029\ +Total good frames: 79337 Total undetected errors: 595\ +Bit error rate (on message bits only): 2.000e-02\ +seed 15\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80087 valid. Average 56.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19913, with src errs 19927, both 19874\ +Total good frames: 80034 Total undetected errors: 53\ +Bit error rate (on message bits only): 1.980e-02\ +seed 16\ +Eliminated 38 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 26.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79432 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20568, with src errs 20581, both 20501\ +Total good frames: 79352 Total undetected errors: 80\ +Bit error rate (on message bits only): 1.983e-02\ +seed 17\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79384 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20616, with src errs 20652, both 20572\ +Total good frames: 79304 Total undetected errors: 80\ +Bit error rate (on message bits only): 2.026e-02\ +seed 18\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79266 valid. Average 58.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20734, with src errs 20799, both 20680\ +Total good frames: 79147 Total undetected errors: 119\ +Bit error rate (on message bits only): 2.031e-02\ +seed 19\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 33.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79656 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20344, with src errs 20393, both 20320\ +Total good frames: 79583 Total undetected errors: 73\ +Bit error rate (on message bits only): 2.002e-02\ +seed 20\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79526 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20474, with src errs 20556, both 20423\ +Total good frames: 79393 Total undetected errors: 133\ +Bit error rate (on message bits only): 2.024e-02\ +seed 21\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79335 valid. Average 58.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20665, with src errs 20734, both 20617\ +Total good frames: 79218 Total undetected errors: 117\ +Bit error rate (on message bits only): 2.005e-02\ +seed 22\ +Eliminated 22 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79857 valid. Average 56.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20143, with src errs 20112, both 20071\ +Total good frames: 79816 Total undetected errors: 41\ +Bit error rate (on message bits only): 1.974e-02\ +seed 23\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79896 valid. Average 56.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20104, with src errs 20130, both 20068\ +Total good frames: 79834 Total undetected errors: 62\ +Bit error rate (on message bits only): 2.010e-02\ +seed 24\ +Eliminated 29 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79606 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20394, with src errs 20497, both 20347\ +Total good frames: 79456 Total undetected errors: 150\ +Bit error rate (on message bits only): 2.007e-02\ +seed 25\ +Eliminated 29 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79646 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20354, with src errs 20379, both 20307\ +Total good frames: 79574 Total undetected errors: 72\ +Bit error rate (on message bits only): 1.992e-02\ +seed 26\ +Eliminated 41 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79350 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20650, with src errs 20721, both 20597\ +Total good frames: 79226 Total undetected errors: 124\ +Bit error rate (on message bits only): 2.015e-02\ +seed 27\ +Eliminated 43 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 33.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78968 valid. Average 59.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21032, with src errs 21145, both 20991\ +Total good frames: 78814 Total undetected errors: 154\ +Bit error rate (on message bits only): 2.035e-02\ +seed 28\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 26.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79319 valid. Average 58.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20681, with src errs 20680, both 20611\ +Total good frames: 79250 Total undetected errors: 69\ +Bit error rate (on message bits only): 1.989e-02\ +seed 29\ +Eliminated 29 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79615 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20385, with src errs 20411, both 20351\ +Total good frames: 79555 Total undetected errors: 60\ +Bit error rate (on message bits only): 2.010e-02\ +seed 30\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79695 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20305, with src errs 20371, both 20267\ +Total good frames: 79591 Total undetected errors: 104\ +Bit error rate (on message bits only): 2.005e-02\ +seed 31\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79485 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20515, with src errs 20547, both 20474\ +Total good frames: 79412 Total undetected errors: 73\ +Bit error rate (on message bits only): 1.987e-02\ +seed 32\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79282 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20718, with src errs 20740, both 20671\ +Total good frames: 79213 Total undetected errors: 69\ +Bit error rate (on message bits only): 2.017e-02\ +seed 33\ +Eliminated 28 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79443 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20557, with src errs 20566, both 20512\ +Total good frames: 79389 Total undetected errors: 54\ +Bit error rate (on message bits only): 1.989e-02\ +seed 34\ +Eliminated 29 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 26.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79668 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20332, with src errs 20326, both 20275\ +Total good frames: 79617 Total undetected errors: 51\ +Bit error rate (on message bits only): 1.978e-02\ +seed 35\ +Eliminated 40 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79406 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20594, with src errs 20633, both 20559\ +Total good frames: 79332 Total undetected errors: 74\ +Bit error rate (on message bits only): 2.005e-02\ +seed 36\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 33.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79619 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20381, with src errs 20414, both 20344\ +Total good frames: 79549 Total undetected errors: 70\ +Bit error rate (on message bits only): 1.999e-02\ +seed 37\ +Eliminated 20 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80004 valid. Average 56.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19996, with src errs 20114, both 19959\ +Total good frames: 79849 Total undetected errors: 155\ +Bit error rate (on message bits only): 1.982e-02\ +seed 38\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79978 valid. Average 56.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20022, with src errs 20045, both 19975\ +Total good frames: 79908 Total undetected errors: 70\ +Bit error rate (on message bits only): 1.965e-02\ +seed 39\ +Eliminated 44 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79321 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20679, with src errs 20736, both 20636\ +Total good frames: 79221 Total undetected errors: 100\ +Bit error rate (on message bits only): 2.030e-02\ +seed 40\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79614 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20386, with src errs 20380, both 20344\ +Total good frames: 79578 Total undetected errors: 36\ +Bit error rate (on message bits only): 1.976e-02\ +seed 41\ +Eliminated 40 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79141 valid. Average 58.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20859, with src errs 20934, both 20807\ +Total good frames: 79014 Total undetected errors: 127\ +Bit error rate (on message bits only): 2.037e-02\ +seed 42\ +Eliminated 25 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79943 valid. Average 56.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20057, with src errs 20125, both 20006\ +Total good frames: 79824 Total undetected errors: 119\ +Bit error rate (on message bits only): 2.000e-02\ +seed 43\ +Eliminated 39 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79278 valid. Average 58.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20722, with src errs 20772, both 20684\ +Total good frames: 79190 Total undetected errors: 88\ +Bit error rate (on message bits only): 2.008e-02\ +seed 44\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79128 valid. Average 58.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20872, with src errs 20877, both 20778\ +Total good frames: 79029 Total undetected errors: 99\ +Bit error rate (on message bits only): 2.026e-02\ +seed 45\ +Eliminated 23 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80077 valid. Average 56.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19923, with src errs 20046, both 19885\ +Total good frames: 79916 Total undetected errors: 161\ +Bit error rate (on message bits only): 1.990e-02\ +seed 46\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79598 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20402, with src errs 20402, both 20329\ +Total good frames: 79525 Total undetected errors: 73\ +Bit error rate (on message bits only): 1.994e-02\ +seed 47\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79236 valid. Average 58.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20764, with src errs 20816, both 20727\ +Total good frames: 79147 Total undetected errors: 89\ +Bit error rate (on message bits only): 2.037e-02\ +seed 48\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79396 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20604, with src errs 20623, both 20559\ +Total good frames: 79332 Total undetected errors: 64\ +Bit error rate (on message bits only): 2.009e-02\ +seed 49\ +Eliminated 34 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79445 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20555, with src errs 20650, both 20499\ +Total good frames: 79294 Total undetected errors: 151\ +Bit error rate (on message bits only): 2.000e-02\ +seed 50\ +Had to place 1 checks in rows unevenly\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79413 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20587, with src errs 20595, both 20532\ +Total good frames: 79350 Total undetected errors: 63\ +Bit error rate (on message bits only): 1.996e-02\ +seed 51\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78928 valid. Average 59.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21072, with src errs 21107, both 21036\ +Total good frames: 78857 Total undetected errors: 71\ +Bit error rate (on message bits only): 2.054e-02\ +seed 52\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79337 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20663, with src errs 20691, both 20626\ +Total good frames: 79272 Total undetected errors: 65\ +Bit error rate (on message bits only): 2.026e-02\ +seed 53\ +Eliminated 25 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79690 valid. Average 57.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20310, with src errs 20380, both 20272\ +Total good frames: 79582 Total undetected errors: 108\ +Bit error rate (on message bits only): 1.999e-02\ +seed 54\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79476 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20524, with src errs 20521, both 20465\ +Total good frames: 79420 Total undetected errors: 56\ +Bit error rate (on message bits only): 2.017e-02\ +seed 55\ +Eliminated 34 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79621 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20379, with src errs 20400, both 20337\ +Total good frames: 79558 Total undetected errors: 63\ +Bit error rate (on message bits only): 1.999e-02\ +seed 56\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79515 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20485, with src errs 20498, both 20454\ +Total good frames: 79471 Total undetected errors: 44\ +Bit error rate (on message bits only): 2.007e-02\ +seed 57\ +Eliminated 29 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79393 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20607, with src errs 20711, both 20563\ +Total good frames: 79245 Total undetected errors: 148\ +Bit error rate (on message bits only): 2.026e-02\ +seed 58\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79521 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20479, with src errs 20527, both 20450\ +Total good frames: 79444 Total undetected errors: 77\ +Bit error rate (on message bits only): 1.993e-02\ +seed 59\ +Eliminated 21 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79830 valid. Average 57.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20170, with src errs 20197, both 20131\ +Total good frames: 79764 Total undetected errors: 66\ +Bit error rate (on message bits only): 1.990e-02\ +seed 60\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 26.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79537 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20463, with src errs 20459, both 20396\ +Total good frames: 79474 Total undetected errors: 63\ +Bit error rate (on message bits only): 1.982e-02\ +seed 61\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79701 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20299, with src errs 20492, both 20257\ +Total good frames: 79466 Total undetected errors: 235\ +Bit error rate (on message bits only): 1.994e-02\ +seed 62\ +Eliminated 50 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79176 valid. Average 58.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20824, with src errs 20885, both 20786\ +Total good frames: 79077 Total undetected errors: 99\ +Bit error rate (on message bits only): 2.054e-02\ +seed 63\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 33.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79354 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20646, with src errs 20659, both 20595\ +Total good frames: 79290 Total undetected errors: 64\ +Bit error rate (on message bits only): 2.029e-02\ +seed 64\ +Eliminated 24 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79905 valid. Average 56.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20095, with src errs 20145, both 20054\ +Total good frames: 79814 Total undetected errors: 91\ +Bit error rate (on message bits only): 1.977e-02\ +seed 65\ +Eliminated 40 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79584 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20416, with src errs 20493, both 20352\ +Total good frames: 79443 Total undetected errors: 141\ +Bit error rate (on message bits only): 1.970e-02\ +seed 66\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80025 valid. Average 56.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19975, with src errs 20026, both 19953\ +Total good frames: 79952 Total undetected errors: 73\ +Bit error rate (on message bits only): 1.959e-02\ +seed 67\ +Eliminated 38 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79295 valid. Average 58.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20705, with src errs 20726, both 20663\ +Total good frames: 79232 Total undetected errors: 63\ +Bit error rate (on message bits only): 1.997e-02\ +seed 68\ +Eliminated 28 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79830 valid. Average 57.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20170, with src errs 20637, both 20130\ +Total good frames: 79323 Total undetected errors: 507\ +Bit error rate (on message bits only): 2.003e-02\ +seed 69\ +Eliminated 40 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79275 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20725, with src errs 21215, both 20671\ +Total good frames: 78731 Total undetected errors: 544\ +Bit error rate (on message bits only): 2.033e-02\ +seed 70\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79290 valid. Average 58.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20710, with src errs 21250, both 20672\ +Total good frames: 78712 Total undetected errors: 578\ +Bit error rate (on message bits only): 2.043e-02\ +seed 71\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79510 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20490, with src errs 20568, both 20430\ +Total good frames: 79372 Total undetected errors: 138\ +Bit error rate (on message bits only): 1.985e-02\ +seed 72\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79453 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20547, with src errs 20568, both 20505\ +Total good frames: 79390 Total undetected errors: 63\ +Bit error rate (on message bits only): 2.000e-02\ +seed 73\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79036 valid. Average 59.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20964, with src errs 21042, both 20898\ +Total good frames: 78892 Total undetected errors: 144\ +Bit error rate (on message bits only): 2.014e-02\ +seed 74\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79782 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20218, with src errs 20229, both 20186\ +Total good frames: 79739 Total undetected errors: 43\ +Bit error rate (on message bits only): 1.994e-02\ +seed 75\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79444 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20556, with src errs 21122, both 20521\ +Total good frames: 78843 Total undetected errors: 601\ +Bit error rate (on message bits only): 2.003e-02\ +seed 76\ +Eliminated 40 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79282 valid. Average 58.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20718, with src errs 20743, both 20682\ +Total good frames: 79221 Total undetected errors: 61\ +Bit error rate (on message bits only): 2.033e-02\ +seed 77\ +Eliminated 38 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79224 valid. Average 58.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20776, with src errs 20869, both 20724\ +Total good frames: 79079 Total undetected errors: 145\ +Bit error rate (on message bits only): 2.014e-02\ +seed 78\ +Eliminated 27 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79359 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20641, with src errs 20680, both 20586\ +Total good frames: 79265 Total undetected errors: 94\ +Bit error rate (on message bits only): 2.010e-02\ +seed 79\ +Eliminated 48 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79380 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20620, with src errs 20688, both 20575\ +Total good frames: 79267 Total undetected errors: 113\ +Bit error rate (on message bits only): 2.024e-02\ +seed 80\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79753 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20247, with src errs 20333, both 20209\ +Total good frames: 79629 Total undetected errors: 124\ +Bit error rate (on message bits only): 1.999e-02\ +seed 81\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78765 valid. Average 59.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21235, with src errs 21321, both 21175\ +Total good frames: 78619 Total undetected errors: 146\ +Bit error rate (on message bits only): 2.047e-02\ +seed 82\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79365 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20635, with src errs 20671, both 20594\ +Total good frames: 79288 Total undetected errors: 77\ +Bit error rate (on message bits only): 2.007e-02\ +seed 83\ +Eliminated 28 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79580 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20420, with src errs 20460, both 20379\ +Total good frames: 79499 Total undetected errors: 81\ +Bit error rate (on message bits only): 2.017e-02\ +seed 84\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79528 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20472, with src errs 20506, both 20433\ +Total good frames: 79455 Total undetected errors: 73\ +Bit error rate (on message bits only): 1.963e-02\ +seed 85\ +Eliminated 38 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79219 valid. Average 58.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20781, with src errs 20795, both 20733\ +Total good frames: 79157 Total undetected errors: 62\ +Bit error rate (on message bits only): 1.996e-02\ +seed 86\ +Eliminated 38 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79217 valid. Average 58.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20783, with src errs 20816, both 20730\ +Total good frames: 79131 Total undetected errors: 86\ +Bit error rate (on message bits only): 2.012e-02\ +seed 87\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79690 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20310, with src errs 20346, both 20257\ +Total good frames: 79601 Total undetected errors: 89\ +Bit error rate (on message bits only): 1.983e-02\ +seed 88\ +Eliminated 29 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 35.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79548 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20452, with src errs 20518, both 20408\ +Total good frames: 79438 Total undetected errors: 110\ +Bit error rate (on message bits only): 2.016e-02\ +seed 89\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79699 valid. Average 57.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20301, with src errs 20308, both 20265\ +Total good frames: 79656 Total undetected errors: 43\ +Bit error rate (on message bits only): 2.009e-02\ +seed 90\ +Eliminated 39 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 33.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79587 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20413, with src errs 20440, both 20371\ +Total good frames: 79518 Total undetected errors: 69\ +Bit error rate (on message bits only): 2.004e-02\ +seed 91\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79650 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20350, with src errs 20375, both 20298\ +Total good frames: 79573 Total undetected errors: 77\ +Bit error rate (on message bits only): 1.994e-02\ +seed 92\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79354 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20646, with src errs 20728, both 20594\ +Total good frames: 79220 Total undetected errors: 134\ +Bit error rate (on message bits only): 2.003e-02\ +seed 93\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 26.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79352 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20648, with src errs 20643, both 20580\ +Total good frames: 79289 Total undetected errors: 63\ +Bit error rate (on message bits only): 2.010e-02\ +seed 94\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79548 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20452, with src errs 20513, both 20407\ +Total good frames: 79442 Total undetected errors: 106\ +Bit error rate (on message bits only): 1.976e-02\ +seed 95\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79672 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20328, with src errs 20344, both 20291\ +Total good frames: 79619 Total undetected errors: 53\ +Bit error rate (on message bits only): 2.032e-02\ +seed 96\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79368 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20632, with src errs 20697, both 20553\ +Total good frames: 79224 Total undetected errors: 144\ +Bit error rate (on message bits only): 1.983e-02\ +seed 97\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79855 valid. Average 57.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20145, with src errs 20163, both 20105\ +Total good frames: 79797 Total undetected errors: 58\ +Bit error rate (on message bits only): 2.001e-02\ +seed 98\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79282 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20718, with src errs 20720, both 20665\ +Total good frames: 79227 Total undetected errors: 55\ +Bit error rate (on message bits only): 2.019e-02\ +seed 99\ +Eliminated 41 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79886 valid. Average 56.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20114, with src errs 20174, both 20073\ +Total good frames: 79785 Total undetected errors: 101\ +Bit error rate (on message bits only): 1.952e-02\ +seed 100\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79441 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20559, with src errs 20570, both 20506\ +Total good frames: 79377 Total undetected errors: 64\ +Bit error rate (on message bits only): 1.988e-02\ +seed 101\ +Eliminated 22 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80007 valid. Average 56.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19993, with src errs 20441, both 19943\ +Total good frames: 79509 Total undetected errors: 498\ +Bit error rate (on message bits only): 1.980e-02\ +seed 102\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79766 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20234, with src errs 20232, both 20180\ +Total good frames: 79714 Total undetected errors: 52\ +Bit error rate (on message bits only): 1.998e-02\ +seed 103\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79266 valid. Average 58.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20734, with src errs 20782, both 20696\ +Total good frames: 79180 Total undetected errors: 86\ +Bit error rate (on message bits only): 2.015e-02\ +seed 104\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79221 valid. Average 58.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20779, with src errs 20848, both 20734\ +Total good frames: 79107 Total undetected errors: 114\ +Bit error rate (on message bits only): 2.026e-02\ +seed 105\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79582 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20418, with src errs 20446, both 20373\ +Total good frames: 79509 Total undetected errors: 73\ +Bit error rate (on message bits only): 1.990e-02\ +seed 106\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79555 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20445, with src errs 20524, both 20418\ +Total good frames: 79449 Total undetected errors: 106\ +Bit error rate (on message bits only): 1.994e-02\ +seed 107\ +Eliminated 25 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79905 valid. Average 56.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20095, with src errs 20081, both 20018\ +Total good frames: 79842 Total undetected errors: 63\ +Bit error rate (on message bits only): 1.959e-02\ +seed 108\ +Eliminated 47 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78851 valid. Average 59.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21149, with src errs 21146, both 21066\ +Total good frames: 78771 Total undetected errors: 80\ +Bit error rate (on message bits only): 2.020e-02\ +seed 109\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79414 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20586, with src errs 20608, both 20551\ +Total good frames: 79357 Total undetected errors: 57\ +Bit error rate (on message bits only): 2.017e-02\ +seed 110\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79230 valid. Average 58.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20770, with src errs 21240, both 20705\ +Total good frames: 78695 Total undetected errors: 535\ +Bit error rate (on message bits only): 1.998e-02\ +seed 111\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79212 valid. Average 58.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20788, with src errs 20806, both 20751\ +Total good frames: 79157 Total undetected errors: 55\ +Bit error rate (on message bits only): 2.038e-02\ +seed 112\ +Eliminated 27 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79803 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20197, with src errs 20223, both 20162\ +Total good frames: 79742 Total undetected errors: 61\ +Bit error rate (on message bits only): 1.987e-02\ +seed 113\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79365 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20635, with src errs 20715, both 20586\ +Total good frames: 79236 Total undetected errors: 129\ +Bit error rate (on message bits only): 1.996e-02\ +seed 114\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79506 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20494, with src errs 20525, both 20452\ +Total good frames: 79433 Total undetected errors: 73\ +Bit error rate (on message bits only): 2.013e-02\ +seed 115\ +Eliminated 44 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78872 valid. Average 59.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21128, with src errs 21543, both 21073\ +Total good frames: 78402 Total undetected errors: 470\ +Bit error rate (on message bits only): 2.058e-02\ +seed 116\ +Eliminated 34 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79348 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20652, with src errs 20690, both 20616\ +Total good frames: 79274 Total undetected errors: 74\ +Bit error rate (on message bits only): 2.040e-02\ +seed 117\ +Eliminated 44 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79723 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20277, with src errs 20312, both 20234\ +Total good frames: 79645 Total undetected errors: 78\ +Bit error rate (on message bits only): 1.971e-02\ +seed 118\ +Eliminated 45 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79125 valid. Average 58.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20875, with src errs 20921, both 20831\ +Total good frames: 79035 Total undetected errors: 90\ +Bit error rate (on message bits only): 2.054e-02\ +seed 119\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79601 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20399, with src errs 20907, both 20358\ +Total good frames: 79052 Total undetected errors: 549\ +Bit error rate (on message bits only): 1.977e-02\ +seed 120\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79729 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20271, with src errs 20344, both 20237\ +Total good frames: 79622 Total undetected errors: 107\ +Bit error rate (on message bits only): 2.008e-02\ +seed 121\ +Eliminated 45 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79057 valid. Average 58.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20943, with src errs 20907, both 20871\ +Total good frames: 79021 Total undetected errors: 36\ +Bit error rate (on message bits only): 2.011e-02\ +seed 122\ +Eliminated 44 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79323 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20677, with src errs 20696, both 20639\ +Total good frames: 79266 Total undetected errors: 57\ +Bit error rate (on message bits only): 2.009e-02\ +seed 123\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78774 valid. Average 59.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21226, with src errs 21228, both 21162\ +Total good frames: 78708 Total undetected errors: 66\ +Bit error rate (on message bits only): 2.018e-02\ +seed 124\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79469 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20531, with src errs 20532, both 20477\ +Total good frames: 79414 Total undetected errors: 55\ +Bit error rate (on message bits only): 1.997e-02\ +seed 125\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79721 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20279, with src errs 20379, both 20235\ +Total good frames: 79577 Total undetected errors: 144\ +Bit error rate (on message bits only): 1.976e-02\ +seed 126\ +Eliminated 27 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79775 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20225, with src errs 20276, both 20175\ +Total good frames: 79674 Total undetected errors: 101\ +Bit error rate (on message bits only): 1.984e-02\ +seed 127\ +Eliminated 40 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79193 valid. Average 58.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20807, with src errs 20916, both 20771\ +Total good frames: 79048 Total undetected errors: 145\ +Bit error rate (on message bits only): 2.053e-02\ +seed 128\ +Eliminated 46 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78999 valid. Average 59.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21001, with src errs 21077, both 20949\ +Total good frames: 78871 Total undetected errors: 128\ +Bit error rate (on message bits only): 2.013e-02\ +seed 129\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79552 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20448, with src errs 20498, both 20402\ +Total good frames: 79456 Total undetected errors: 96\ +Bit error rate (on message bits only): 2.006e-02\ +seed 130\ +Eliminated 40 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79684 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20316, with src errs 20342, both 20277\ +Total good frames: 79619 Total undetected errors: 65\ +Bit error rate (on message bits only): 1.984e-02\ +seed 131\ +Eliminated 45 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78142 valid. Average 61.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21858, with src errs 21867, both 21800\ +Total good frames: 78075 Total undetected errors: 67\ +Bit error rate (on message bits only): 2.053e-02\ +seed 132\ +Eliminated 25 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79855 valid. Average 56.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20145, with src errs 20140, both 20089\ +Total good frames: 79804 Total undetected errors: 51\ +Bit error rate (on message bits only): 1.998e-02\ +seed 133\ +Eliminated 22 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79963 valid. Average 56.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20037, with src errs 20092, both 19996\ +Total good frames: 79867 Total undetected errors: 96\ +Bit error rate (on message bits only): 2.004e-02\ +seed 134\ +Eliminated 52 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 26.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78994 valid. Average 58.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21006, with src errs 21090, both 20939\ +Total good frames: 78843 Total undetected errors: 151\ +Bit error rate (on message bits only): 2.001e-02\ +seed 135\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79472 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20528, with src errs 20531, both 20478\ +Total good frames: 79419 Total undetected errors: 53\ +Bit error rate (on message bits only): 1.998e-02\ +seed 136\ +Eliminated 39 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79559 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20441, with src errs 20449, both 20387\ +Total good frames: 79497 Total undetected errors: 62\ +Bit error rate (on message bits only): 1.986e-02\ +seed 137\ +Eliminated 25 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80061 valid. Average 56.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19939, with src errs 19940, both 19899\ +Total good frames: 80020 Total undetected errors: 41\ +Bit error rate (on message bits only): 1.967e-02\ +seed 138\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79871 valid. Average 57.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20129, with src errs 20249, both 20101\ +Total good frames: 79723 Total undetected errors: 148\ +Bit error rate (on message bits only): 1.982e-02\ +seed 139\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79359 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20641, with src errs 20742, both 20602\ +Total good frames: 79219 Total undetected errors: 140\ +Bit error rate (on message bits only): 2.023e-02\ +seed 140\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79448 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20552, with src errs 20547, both 20490\ +Total good frames: 79391 Total undetected errors: 57\ +Bit error rate (on message bits only): 2.040e-02\ +seed 141\ +Eliminated 40 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79311 valid. Average 58.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20689, with src errs 20772, both 20639\ +Total good frames: 79178 Total undetected errors: 133\ +Bit error rate (on message bits only): 2.010e-02\ +seed 142\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79797 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20203, with src errs 20226, both 20155\ +Total good frames: 79726 Total undetected errors: 71\ +Bit error rate (on message bits only): 1.969e-02\ +seed 143\ +Eliminated 27 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79497 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20503, with src errs 20535, both 20476\ +Total good frames: 79438 Total undetected errors: 59\ +Bit error rate (on message bits only): 1.994e-02\ +seed 144\ +Eliminated 38 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79044 valid. Average 59.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20956, with src errs 20979, both 20905\ +Total good frames: 78970 Total undetected errors: 74\ +Bit error rate (on message bits only): 2.031e-02\ +seed 145\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79202 valid. Average 58.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20798, with src errs 20836, both 20762\ +Total good frames: 79128 Total undetected errors: 74\ +Bit error rate (on message bits only): 2.020e-02\ +seed 146\ +Eliminated 49 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78878 valid. Average 59.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21122, with src errs 21292, both 21074\ +Total good frames: 78660 Total undetected errors: 218\ +Bit error rate (on message bits only): 2.032e-02\ +seed 147\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79491 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20509, with src errs 20565, both 20477\ +Total good frames: 79403 Total undetected errors: 88\ +Bit error rate (on message bits only): 2.004e-02\ +seed 148\ +Eliminated 34 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79250 valid. Average 58.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20750, with src errs 20841, both 20705\ +Total good frames: 79114 Total undetected errors: 136\ +Bit error rate (on message bits only): 2.018e-02\ +seed 149\ +Eliminated 25 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79627 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20373, with src errs 20408, both 20333\ +Total good frames: 79552 Total undetected errors: 75\ +Bit error rate (on message bits only): 2.006e-02\ +seed 150\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79715 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20285, with src errs 20337, both 20247\ +Total good frames: 79625 Total undetected errors: 90\ +Bit error rate (on message bits only): 1.985e-02\ +seed 151\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79302 valid. Average 58.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20698, with src errs 21168, both 20643\ +Total good frames: 78777 Total undetected errors: 525\ +Bit error rate (on message bits only): 2.047e-02\ +seed 152\ +Eliminated 19 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80020 valid. Average 56.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19980, with src errs 20020, both 19945\ +Total good frames: 79945 Total undetected errors: 75\ +Bit error rate (on message bits only): 1.968e-02\ +seed 153\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79054 valid. Average 58.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20946, with src errs 20953, both 20898\ +Total good frames: 78999 Total undetected errors: 55\ +Bit error rate (on message bits only): 2.031e-02\ +seed 154\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 25.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78902 valid. Average 59.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21098, with src errs 21131, both 21001\ +Total good frames: 78772 Total undetected errors: 130\ +Bit error rate (on message bits only): 2.014e-02\ +seed 155\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79894 valid. Average 56.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20106, with src errs 20154, both 20063\ +Total good frames: 79803 Total undetected errors: 91\ +Bit error rate (on message bits only): 1.983e-02\ +seed 156\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 33.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79831 valid. Average 57.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20169, with src errs 20192, both 20133\ +Total good frames: 79772 Total undetected errors: 59\ +Bit error rate (on message bits only): 1.992e-02\ +seed 157\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78895 valid. Average 59.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21105, with src errs 21185, both 21051\ +Total good frames: 78761 Total undetected errors: 134\ +Bit error rate (on message bits only): 2.045e-02\ +seed 158\ +Eliminated 29 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79512 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20488, with src errs 20492, both 20443\ +Total good frames: 79463 Total undetected errors: 49\ +Bit error rate (on message bits only): 2.017e-02\ +seed 159\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79571 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20429, with src errs 20416, both 20336\ +Total good frames: 79491 Total undetected errors: 80\ +Bit error rate (on message bits only): 1.997e-02\ +seed 160\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 26.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79345 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20655, with src errs 20654, both 20582\ +Total good frames: 79273 Total undetected errors: 72\ +Bit error rate (on message bits only): 1.986e-02\ +seed 161\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79532 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20468, with src errs 20487, both 20427\ +Total good frames: 79472 Total undetected errors: 60\ +Bit error rate (on message bits only): 1.994e-02\ +seed 162\ +Eliminated 39 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79449 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20551, with src errs 20546, both 20485\ +Total good frames: 79388 Total undetected errors: 61\ +Bit error rate (on message bits only): 1.985e-02\ +seed 163\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79591 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20409, with src errs 20437, both 20370\ +Total good frames: 79524 Total undetected errors: 67\ +Bit error rate (on message bits only): 2.039e-02\ +seed 164\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 33.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79763 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20237, with src errs 20272, both 20207\ +Total good frames: 79698 Total undetected errors: 65\ +Bit error rate (on message bits only): 1.990e-02\ +seed 165\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79761 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20239, with src errs 20245, both 20190\ +Total good frames: 79706 Total undetected errors: 55\ +Bit error rate (on message bits only): 2.008e-02\ +seed 166\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79309 valid. Average 58.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20691, with src errs 20694, both 20627\ +Total good frames: 79242 Total undetected errors: 67\ +Bit error rate (on message bits only): 2.030e-02\ +seed 167\ +Eliminated 23 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79727 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20273, with src errs 20296, both 20245\ +Total good frames: 79676 Total undetected errors: 51\ +Bit error rate (on message bits only): 2.005e-02\ +seed 168\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79814 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20186, with src errs 20623, both 20130\ +Total good frames: 79321 Total undetected errors: 493\ +Bit error rate (on message bits only): 1.998e-02\ +seed 169\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79927 valid. Average 56.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20073, with src errs 20152, both 20030\ +Total good frames: 79805 Total undetected errors: 122\ +Bit error rate (on message bits only): 1.980e-02\ +seed 170\ +Eliminated 43 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79377 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20623, with src errs 20633, both 20577\ +Total good frames: 79321 Total undetected errors: 56\ +Bit error rate (on message bits only): 1.994e-02\ +seed 171\ +Eliminated 24 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79956 valid. Average 56.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20044, with src errs 20489, both 19984\ +Total good frames: 79451 Total undetected errors: 505\ +Bit error rate (on message bits only): 1.996e-02\ +seed 172\ +Eliminated 38 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78742 valid. Average 59.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21258, with src errs 21361, both 21222\ +Total good frames: 78603 Total undetected errors: 139\ +Bit error rate (on message bits only): 2.051e-02\ +seed 173\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79474 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20526, with src errs 20541, both 20468\ +Total good frames: 79401 Total undetected errors: 73\ +Bit error rate (on message bits only): 2.024e-02\ +seed 174\ +Had to place 1 checks in rows unevenly\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79564 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20436, with src errs 20461, both 20395\ +Total good frames: 79498 Total undetected errors: 66\ +Bit error rate (on message bits only): 1.995e-02\ +seed 175\ +Eliminated 34 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79542 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20458, with src errs 20488, both 20421\ +Total good frames: 79475 Total undetected errors: 67\ +Bit error rate (on message bits only): 2.009e-02\ +seed 176\ +Eliminated 49 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79093 valid. Average 58.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20907, with src errs 20947, both 20837\ +Total good frames: 78983 Total undetected errors: 110\ +Bit error rate (on message bits only): 2.040e-02\ +seed 177\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79832 valid. Average 57.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20168, with src errs 20170, both 20123\ +Total good frames: 79785 Total undetected errors: 47\ +Bit error rate (on message bits only): 2.000e-02\ +seed 178\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79908 valid. Average 57.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20092, with src errs 20127, both 20050\ +Total good frames: 79831 Total undetected errors: 77\ +Bit error rate (on message bits only): 1.979e-02\ +seed 179\ +Eliminated 24 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79551 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20449, with src errs 20459, both 20400\ +Total good frames: 79492 Total undetected errors: 59\ +Bit error rate (on message bits only): 2.006e-02\ +seed 180\ +Eliminated 23 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79891 valid. Average 56.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20109, with src errs 20146, both 20071\ +Total good frames: 79816 Total undetected errors: 75\ +Bit error rate (on message bits only): 2.001e-02\ +seed 181\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79827 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20173, with src errs 20228, both 20129\ +Total good frames: 79728 Total undetected errors: 99\ +Bit error rate (on message bits only): 1.978e-02\ +seed 182\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79601 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20399, with src errs 20392, both 20341\ +Total good frames: 79550 Total undetected errors: 51\ +Bit error rate (on message bits only): 1.986e-02\ +seed 183\ +Eliminated 34 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79752 valid. Average 57.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20248, with src errs 20382, both 20214\ +Total good frames: 79584 Total undetected errors: 168\ +Bit error rate (on message bits only): 2.007e-02\ +seed 184\ +Eliminated 41 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78986 valid. Average 59.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21014, with src errs 21130, both 20974\ +Total good frames: 78830 Total undetected errors: 156\ +Bit error rate (on message bits only): 2.016e-02\ +seed 185\ +Eliminated 29 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79717 valid. Average 57.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20283, with src errs 20295, both 20255\ +Total good frames: 79677 Total undetected errors: 40\ +Bit error rate (on message bits only): 1.988e-02\ +seed 186\ +Eliminated 29 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79791 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20209, with src errs 20225, both 20169\ +Total good frames: 79735 Total undetected errors: 56\ +Bit error rate (on message bits only): 2.001e-02\ +seed 187\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79404 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20596, with src errs 20626, both 20561\ +Total good frames: 79339 Total undetected errors: 65\ +Bit error rate (on message bits only): 2.020e-02\ +seed 188\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79833 valid. Average 57.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20167, with src errs 20193, both 20110\ +Total good frames: 79750 Total undetected errors: 83\ +Bit error rate (on message bits only): 1.964e-02\ +seed 189\ +Eliminated 41 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79578 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20422, with src errs 20446, both 20381\ +Total good frames: 79513 Total undetected errors: 65\ +Bit error rate (on message bits only): 1.993e-02\ +seed 190\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79979 valid. Average 56.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20021, with src errs 20071, both 19964\ +Total good frames: 79872 Total undetected errors: 107\ +Bit error rate (on message bits only): 1.967e-02\ +seed 191\ +Eliminated 29 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79377 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20623, with src errs 20644, both 20575\ +Total good frames: 79308 Total undetected errors: 69\ +Bit error rate (on message bits only): 2.000e-02\ +seed 192\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79656 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20344, with src errs 20366, both 20298\ +Total good frames: 79588 Total undetected errors: 68\ +Bit error rate (on message bits only): 1.985e-02\ +seed 193\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79358 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20642, with src errs 20641, both 20570\ +Total good frames: 79287 Total undetected errors: 71\ +Bit error rate (on message bits only): 1.990e-02\ +seed 194\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 25.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79295 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20705, with src errs 20710, both 20651\ +Total good frames: 79236 Total undetected errors: 59\ +Bit error rate (on message bits only): 2.017e-02\ +seed 195\ +Eliminated 44 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78672 valid. Average 59.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21328, with src errs 21793, both 21275\ +Total good frames: 78154 Total undetected errors: 518\ +Bit error rate (on message bits only): 2.037e-02\ +seed 196\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 33.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79651 valid. Average 57.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20349, with src errs 20434, both 20306\ +Total good frames: 79523 Total undetected errors: 128\ +Bit error rate (on message bits only): 2.010e-02\ +seed 197\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79535 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20465, with src errs 20562, both 20423\ +Total good frames: 79396 Total undetected errors: 139\ +Bit error rate (on message bits only): 1.985e-02\ +seed 198\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79923 valid. Average 56.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20077, with src errs 20103, both 20043\ +Total good frames: 79863 Total undetected errors: 60\ +Bit error rate (on message bits only): 1.976e-02\ +seed 199\ +Eliminated 23 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79725 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20275, with src errs 20303, both 20246\ +Total good frames: 79668 Total undetected errors: 57\ +Bit error rate (on message bits only): 1.977e-02\ +seed 200\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79603 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20397, with src errs 20431, both 20357\ +Total good frames: 79529 Total undetected errors: 74\ +Bit error rate (on message bits only): 2.000e-02\ +seed 201\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79563 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20437, with src errs 20531, both 20405\ +Total good frames: 79437 Total undetected errors: 126\ +Bit error rate (on message bits only): 1.999e-02\ +seed 202\ +Eliminated 28 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79760 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20240, with src errs 20348, both 20212\ +Total good frames: 79624 Total undetected errors: 136\ +Bit error rate (on message bits only): 2.011e-02\ +seed 203\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79741 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20259, with src errs 20350, both 20204\ +Total good frames: 79595 Total undetected errors: 146\ +Bit error rate (on message bits only): 1.990e-02\ +seed 204\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79430 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20570, with src errs 20611, both 20530\ +Total good frames: 79349 Total undetected errors: 81\ +Bit error rate (on message bits only): 2.027e-02\ +seed 205\ +Eliminated 28 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79833 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20167, with src errs 20211, both 20135\ +Total good frames: 79757 Total undetected errors: 76\ +Bit error rate (on message bits only): 1.995e-02\ +seed 206\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79332 valid. Average 58.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20668, with src errs 20756, both 20606\ +Total good frames: 79182 Total undetected errors: 150\ +Bit error rate (on message bits only): 1.981e-02\ +seed 207\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79632 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20368, with src errs 20529, both 20328\ +Total good frames: 79431 Total undetected errors: 201\ +Bit error rate (on message bits only): 2.007e-02\ +seed 208\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80136 valid. Average 56.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19864, with src errs 19863, both 19819\ +Total good frames: 80092 Total undetected errors: 44\ +Bit error rate (on message bits only): 1.981e-02\ +seed 209\ +Eliminated 39 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79207 valid. Average 58.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20793, with src errs 20814, both 20737\ +Total good frames: 79130 Total undetected errors: 77\ +Bit error rate (on message bits only): 2.005e-02\ +seed 210\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78944 valid. Average 59.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21056, with src errs 21017, both 20973\ +Total good frames: 78900 Total undetected errors: 44\ +Bit error rate (on message bits only): 1.998e-02\ +seed 211\ +Had to place 1 checks in rows unevenly\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79547 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20453, with src errs 20492, both 20424\ +Total good frames: 79479 Total undetected errors: 68\ +Bit error rate (on message bits only): 2.016e-02\ +seed 212\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79299 valid. Average 58.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20701, with src errs 20713, both 20646\ +Total good frames: 79232 Total undetected errors: 67\ +Bit error rate (on message bits only): 1.987e-02\ +seed 213\ +Eliminated 24 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79673 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20327, with src errs 20397, both 20283\ +Total good frames: 79559 Total undetected errors: 114\ +Bit error rate (on message bits only): 2.024e-02\ +seed 214\ +Eliminated 41 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79439 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20561, with src errs 20607, both 20527\ +Total good frames: 79359 Total undetected errors: 80\ +Bit error rate (on message bits only): 2.005e-02\ +seed 215\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79536 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20464, with src errs 20499, both 20422\ +Total good frames: 79459 Total undetected errors: 77\ +Bit error rate (on message bits only): 1.985e-02\ +seed 216\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79160 valid. Average 58.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20840, with src errs 20888, both 20795\ +Total good frames: 79067 Total undetected errors: 93\ +Bit error rate (on message bits only): 2.015e-02\ +seed 217\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79526 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20474, with src errs 20489, both 20427\ +Total good frames: 79464 Total undetected errors: 62\ +Bit error rate (on message bits only): 2.026e-02\ +seed 218\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79266 valid. Average 58.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20734, with src errs 20736, both 20690\ +Total good frames: 79220 Total undetected errors: 46\ +Bit error rate (on message bits only): 1.996e-02\ +seed 219\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79364 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20636, with src errs 20660, both 20588\ +Total good frames: 79292 Total undetected errors: 72\ +Bit error rate (on message bits only): 2.018e-02\ +seed 220\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78971 valid. Average 59.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21029, with src errs 21087, both 20998\ +Total good frames: 78882 Total undetected errors: 89\ +Bit error rate (on message bits only): 2.023e-02\ +seed 221\ +Eliminated 41 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79290 valid. Average 58.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20710, with src errs 21255, both 20672\ +Total good frames: 78707 Total undetected errors: 583\ +Bit error rate (on message bits only): 2.036e-02\ +seed 222\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79819 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20181, with src errs 20277, both 20140\ +Total good frames: 79682 Total undetected errors: 137\ +Bit error rate (on message bits only): 1.981e-02\ +seed 223\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79287 valid. Average 58.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20713, with src errs 20713, both 20651\ +Total good frames: 79225 Total undetected errors: 62\ +Bit error rate (on message bits only): 2.019e-02\ +seed 224\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79005 valid. Average 59.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20995, with src errs 21013, both 20961\ +Total good frames: 78953 Total undetected errors: 52\ +Bit error rate (on message bits only): 2.050e-02\ +seed 225\ +Eliminated 39 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79052 valid. Average 58.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20948, with src errs 20973, both 20907\ +Total good frames: 78986 Total undetected errors: 66\ +Bit error rate (on message bits only): 2.019e-02\ +seed 226\ +Eliminated 21 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79819 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20181, with src errs 20226, both 20136\ +Total good frames: 79729 Total undetected errors: 90\ +Bit error rate (on message bits only): 1.985e-02\ +seed 227\ +Eliminated 39 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79087 valid. Average 58.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20913, with src errs 20950, both 20843\ +Total good frames: 78980 Total undetected errors: 107\ +Bit error rate (on message bits only): 2.051e-02\ +seed 228\ +Eliminated 41 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79286 valid. Average 58.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20714, with src errs 20735, both 20667\ +Total good frames: 79218 Total undetected errors: 68\ +Bit error rate (on message bits only): 2.038e-02\ +seed 229\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80265 valid. Average 56.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19735, with src errs 19806, both 19678\ +Total good frames: 80137 Total undetected errors: 128\ +Bit error rate (on message bits only): 1.953e-02\ +seed 230\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79828 valid. Average 57.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20172, with src errs 20635, both 20126\ +Total good frames: 79319 Total undetected errors: 509\ +Bit error rate (on message bits only): 1.982e-02\ +seed 231\ +Eliminated 21 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80034 valid. Average 56.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19966, with src errs 20457, both 19938\ +Total good frames: 79515 Total undetected errors: 519\ +Bit error rate (on message bits only): 1.984e-02\ +seed 232\ +Eliminated 23 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79648 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20352, with src errs 20434, both 20309\ +Total good frames: 79523 Total undetected errors: 125\ +Bit error rate (on message bits only): 1.989e-02\ +seed 233\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79575 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20425, with src errs 20477, both 20382\ +Total good frames: 79480 Total undetected errors: 95\ +Bit error rate (on message bits only): 1.984e-02\ +seed 234\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79445 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20555, with src errs 20569, both 20493\ +Total good frames: 79369 Total undetected errors: 76\ +Bit error rate (on message bits only): 1.987e-02\ +seed 235\ +Eliminated 24 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79754 valid. Average 57.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20246, with src errs 20240, both 20202\ +Total good frames: 79716 Total undetected errors: 38\ +Bit error rate (on message bits only): 1.973e-02\ +seed 236\ +Eliminated 25 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79857 valid. Average 57.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20143, with src errs 20193, both 20111\ +Total good frames: 79775 Total undetected errors: 82\ +Bit error rate (on message bits only): 1.989e-02\ +seed 237\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79844 valid. Average 57.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20156, with src errs 20192, both 20121\ +Total good frames: 79773 Total undetected errors: 71\ +Bit error rate (on message bits only): 2.013e-02\ +seed 238\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79818 valid. Average 57.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20182, with src errs 20222, both 20157\ +Total good frames: 79753 Total undetected errors: 65\ +Bit error rate (on message bits only): 1.994e-02\ +seed 239\ +Eliminated 43 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79332 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20668, with src errs 20682, both 20625\ +Total good frames: 79275 Total undetected errors: 57\ +Bit error rate (on message bits only): 2.011e-02\ +seed 240\ +Eliminated 38 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79212 valid. Average 58.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20788, with src errs 20826, both 20749\ +Total good frames: 79135 Total undetected errors: 77\ +Bit error rate (on message bits only): 2.009e-02\ +seed 241\ +Eliminated 22 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79829 valid. Average 56.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20171, with src errs 20180, both 20130\ +Total good frames: 79779 Total undetected errors: 50\ +Bit error rate (on message bits only): 1.998e-02\ +seed 242\ +Eliminated 43 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79294 valid. Average 58.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20706, with src errs 20712, both 20656\ +Total good frames: 79238 Total undetected errors: 56\ +Bit error rate (on message bits only): 1.997e-02\ +seed 243\ +Had to place 1 checks in rows unevenly\ +Eliminated 24 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79682 valid. Average 57.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20318, with src errs 20318, both 20273\ +Total good frames: 79637 Total undetected errors: 45\ +Bit error rate (on message bits only): 2.010e-02\ +seed 244\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79459 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20541, with src errs 20574, both 20507\ +Total good frames: 79392 Total undetected errors: 67\ +Bit error rate (on message bits only): 1.995e-02\ +seed 245\ +Eliminated 29 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79700 valid. Average 57.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20300, with src errs 20757, both 20262\ +Total good frames: 79205 Total undetected errors: 495\ +Bit error rate (on message bits only): 2.010e-02\ +seed 246\ +Eliminated 27 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 33.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79816 valid. Average 57.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20184, with src errs 20229, both 20147\ +Total good frames: 79734 Total undetected errors: 82\ +Bit error rate (on message bits only): 1.976e-02\ +seed 247\ +Eliminated 44 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79073 valid. Average 58.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20927, with src errs 20911, both 20866\ +Total good frames: 79028 Total undetected errors: 45\ +Bit error rate (on message bits only): 2.023e-02\ +seed 248\ +Eliminated 52 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79343 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20657, with src errs 20658, both 20609\ +Total good frames: 79294 Total undetected errors: 49\ +Bit error rate (on message bits only): 2.000e-02\ +seed 249\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79683 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20317, with src errs 20345, both 20276\ +Total good frames: 79614 Total undetected errors: 69\ +Bit error rate (on message bits only): 1.997e-02\ +seed 250\ +Eliminated 22 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79779 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20221, with src errs 20303, both 20188\ +Total good frames: 79664 Total undetected errors: 115\ +Bit error rate (on message bits only): 2.001e-02\ +seed 251\ +Eliminated 23 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79848 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20152, with src errs 20217, both 20105\ +Total good frames: 79736 Total undetected errors: 112\ +Bit error rate (on message bits only): 1.968e-02\ +seed 252\ +Eliminated 25 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79637 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20363, with src errs 20387, both 20322\ +Total good frames: 79572 Total undetected errors: 65\ +Bit error rate (on message bits only): 1.995e-02\ +seed 253\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79828 valid. Average 57.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20172, with src errs 20202, both 20143\ +Total good frames: 79769 Total undetected errors: 59\ +Bit error rate (on message bits only): 1.985e-02\ +seed 254\ +Eliminated 25 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79994 valid. Average 56.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20006, with src errs 20065, both 19960\ +Total good frames: 79889 Total undetected errors: 105\ +Bit error rate (on message bits only): 1.950e-02\ +seed 255\ +Eliminated 18 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80411 valid. Average 55.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19589, with src errs 19630, both 19547\ +Total good frames: 80328 Total undetected errors: 83\ +Bit error rate (on message bits only): 1.954e-02\ +seed 256\ +Eliminated 49 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79388 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20612, with src errs 21139, both 20563\ +Total good frames: 78812 Total undetected errors: 576\ +Bit error rate (on message bits only): 2.040e-02\ +seed 257\ +Eliminated 19 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80063 valid. Average 56.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19937, with src errs 19982, both 19901\ +Total good frames: 79982 Total undetected errors: 81\ +Bit error rate (on message bits only): 1.963e-02\ +seed 258\ +Eliminated 40 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79533 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20467, with src errs 20537, both 20422\ +Total good frames: 79418 Total undetected errors: 115\ +Bit error rate (on message bits only): 1.994e-02\ +seed 259\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79807 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20193, with src errs 20229, both 20151\ +Total good frames: 79729 Total undetected errors: 78\ +Bit error rate (on message bits only): 1.959e-02\ +seed 260\ +Eliminated 28 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79837 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20163, with src errs 20196, both 20130\ +Total good frames: 79771 Total undetected errors: 66\ +Bit error rate (on message bits only): 2.004e-02\ +seed 261\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79765 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20235, with src errs 20330, both 20178\ +Total good frames: 79613 Total undetected errors: 152\ +Bit error rate (on message bits only): 2.002e-02\ +seed 262\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79534 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20466, with src errs 20484, both 20429\ +Total good frames: 79479 Total undetected errors: 55\ +Bit error rate (on message bits only): 2.018e-02\ +seed 263\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79060 valid. Average 58.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20940, with src errs 21028, both 20899\ +Total good frames: 78931 Total undetected errors: 129\ +Bit error rate (on message bits only): 2.015e-02\ +seed 264\ +Eliminated 45 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78878 valid. Average 59.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21122, with src errs 21151, both 21052\ +Total good frames: 78779 Total undetected errors: 99\ +Bit error rate (on message bits only): 2.048e-02\ +seed 265\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79512 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20488, with src errs 20609, both 20438\ +Total good frames: 79341 Total undetected errors: 171\ +Bit error rate (on message bits only): 2.024e-02\ +seed 266\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79709 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20291, with src errs 20290, both 20235\ +Total good frames: 79654 Total undetected errors: 55\ +Bit error rate (on message bits only): 1.975e-02\ +seed 267\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79249 valid. Average 58.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20751, with src errs 20848, both 20707\ +Total good frames: 79108 Total undetected errors: 141\ +Bit error rate (on message bits only): 2.024e-02\ +seed 268\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 33.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79937 valid. Average 56.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20063, with src errs 20077, both 20026\ +Total good frames: 79886 Total undetected errors: 51\ +Bit error rate (on message bits only): 1.973e-02\ +seed 269\ +Eliminated 25 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79153 valid. Average 58.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20847, with src errs 20837, both 20788\ +Total good frames: 79104 Total undetected errors: 49\ +Bit error rate (on message bits only): 2.027e-02\ +seed 270\ +Eliminated 24 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79133 valid. Average 58.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20867, with src errs 20920, both 20839\ +Total good frames: 79052 Total undetected errors: 81\ +Bit error rate (on message bits only): 2.036e-02\ +seed 271\ +Eliminated 27 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79914 valid. Average 56.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20086, with src errs 20120, both 20038\ +Total good frames: 79832 Total undetected errors: 82\ +Bit error rate (on message bits only): 1.963e-02\ +seed 272\ +Eliminated 40 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79665 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20335, with src errs 20382, both 20308\ +Total good frames: 79591 Total undetected errors: 74\ +Bit error rate (on message bits only): 1.999e-02\ +seed 273\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79481 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20519, with src errs 20549, both 20495\ +Total good frames: 79427 Total undetected errors: 54\ +Bit error rate (on message bits only): 2.047e-02\ +seed 274\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79662 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20338, with src errs 20359, both 20298\ +Total good frames: 79601 Total undetected errors: 61\ +Bit error rate (on message bits only): 1.997e-02\ +seed 275\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79446 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20554, with src errs 20644, both 20513\ +Total good frames: 79315 Total undetected errors: 131\ +Bit error rate (on message bits only): 2.012e-02\ +seed 276\ +Eliminated 40 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78823 valid. Average 59.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21177, with src errs 21204, both 21128\ +Total good frames: 78747 Total undetected errors: 76\ +Bit error rate (on message bits only): 2.042e-02\ +seed 277\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79632 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20368, with src errs 20391, both 20328\ +Total good frames: 79569 Total undetected errors: 63\ +Bit error rate (on message bits only): 2.005e-02\ +seed 278\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79578 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20422, with src errs 20416, both 20342\ +Total good frames: 79504 Total undetected errors: 74\ +Bit error rate (on message bits only): 1.985e-02\ +seed 279\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79802 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20198, with src errs 20243, both 20167\ +Total good frames: 79726 Total undetected errors: 76\ +Bit error rate (on message bits only): 1.976e-02\ +seed 280\ +Eliminated 28 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79559 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20441, with src errs 20465, both 20395\ +Total good frames: 79489 Total undetected errors: 70\ +Bit error rate (on message bits only): 2.002e-02\ +seed 281\ +Eliminated 24 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79676 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20324, with src errs 20398, both 20290\ +Total good frames: 79568 Total undetected errors: 108\ +Bit error rate (on message bits only): 2.007e-02\ +seed 282\ +Eliminated 39 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79230 valid. Average 58.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20770, with src errs 20860, both 20724\ +Total good frames: 79094 Total undetected errors: 136\ +Bit error rate (on message bits only): 2.009e-02\ +seed 283\ +Eliminated 49 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79639 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20361, with src errs 20402, both 20328\ +Total good frames: 79565 Total undetected errors: 74\ +Bit error rate (on message bits only): 2.004e-02\ +seed 284\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79496 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20504, with src errs 20516, both 20467\ +Total good frames: 79447 Total undetected errors: 49\ +Bit error rate (on message bits only): 2.036e-02\ +seed 285\ +Eliminated 25 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79270 valid. Average 58.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20730, with src errs 20746, both 20668\ +Total good frames: 79192 Total undetected errors: 78\ +Bit error rate (on message bits only): 2.022e-02\ +seed 286\ +Eliminated 34 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79486 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20514, with src errs 20599, both 20474\ +Total good frames: 79361 Total undetected errors: 125\ +Bit error rate (on message bits only): 2.001e-02\ +seed 287\ +Eliminated 29 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79444 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20556, with src errs 20555, both 20498\ +Total good frames: 79387 Total undetected errors: 57\ +Bit error rate (on message bits only): 2.003e-02\ +seed 288\ +Had to place 1 checks in rows unevenly\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79476 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20524, with src errs 20563, both 20495\ +Total good frames: 79408 Total undetected errors: 68\ +Bit error rate (on message bits only): 2.010e-02\ +seed 289\ +Eliminated 43 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79454 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20546, with src errs 20980, both 20491\ +Total good frames: 78965 Total undetected errors: 489\ +Bit error rate (on message bits only): 1.986e-02\ +seed 290\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79758 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20242, with src errs 20339, both 20196\ +Total good frames: 79615 Total undetected errors: 143\ +Bit error rate (on message bits only): 1.986e-02\ +seed 291\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79761 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20239, with src errs 20272, both 20187\ +Total good frames: 79676 Total undetected errors: 85\ +Bit error rate (on message bits only): 1.987e-02\ +seed 292\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79215 valid. Average 58.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20785, with src errs 20825, both 20722\ +Total good frames: 79112 Total undetected errors: 103\ +Bit error rate (on message bits only): 1.998e-02\ +seed 293\ +Eliminated 49 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79491 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20509, with src errs 20625, both 20463\ +Total good frames: 79329 Total undetected errors: 162\ +Bit error rate (on message bits only): 1.990e-02\ +seed 294\ +Eliminated 38 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79054 valid. Average 58.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20946, with src errs 20955, both 20895\ +Total good frames: 78994 Total undetected errors: 60\ +Bit error rate (on message bits only): 2.044e-02\ +seed 295\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79569 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20431, with src errs 20484, both 20375\ +Total good frames: 79460 Total undetected errors: 109\ +Bit error rate (on message bits only): 2.024e-02\ +seed 296\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79985 valid. Average 56.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20015, with src errs 20061, both 19975\ +Total good frames: 79899 Total undetected errors: 86\ +Bit error rate (on message bits only): 1.979e-02\ +seed 297\ +Had to place 1 checks in rows unevenly\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79602 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20398, with src errs 20429, both 20357\ +Total good frames: 79530 Total undetected errors: 72\ +Bit error rate (on message bits only): 2.013e-02\ +seed 298\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78977 valid. Average 59.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21023, with src errs 21430, both 20966\ +Total good frames: 78513 Total undetected errors: 464\ +Bit error rate (on message bits only): 2.043e-02\ +seed 299\ +Eliminated 34 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79285 valid. Average 58.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20715, with src errs 20742, both 20653\ +Total good frames: 79196 Total undetected errors: 89\ +Bit error rate (on message bits only): 1.989e-02\ +seed 300\ +Eliminated 27 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79698 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20302, with src errs 20421, both 20255\ +Total good frames: 79532 Total undetected errors: 166\ +Bit error rate (on message bits only): 1.983e-02\ +seed 301\ +Eliminated 17 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79900 valid. Average 56.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20100, with src errs 20129, both 20071\ +Total good frames: 79842 Total undetected errors: 58\ +Bit error rate (on message bits only): 1.989e-02\ +seed 302\ +Eliminated 24 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79536 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20464, with src errs 20471, both 20417\ +Total good frames: 79482 Total undetected errors: 54\ +Bit error rate (on message bits only): 1.992e-02\ +seed 303\ +Eliminated 47 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79026 valid. Average 59.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20974, with src errs 21000, both 20933\ +Total good frames: 78959 Total undetected errors: 67\ +Bit error rate (on message bits only): 2.042e-02\ +seed 304\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79558 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20442, with src errs 20563, both 20412\ +Total good frames: 79407 Total undetected errors: 151\ +Bit error rate (on message bits only): 1.988e-02\ +seed 305\ +Eliminated 27 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79590 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20410, with src errs 20430, both 20364\ +Total good frames: 79524 Total undetected errors: 66\ +Bit error rate (on message bits only): 1.999e-02\ +seed 306\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79647 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20353, with src errs 20361, both 20305\ +Total good frames: 79591 Total undetected errors: 56\ +Bit error rate (on message bits only): 2.014e-02\ +seed 307\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79494 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20506, with src errs 20520, both 20469\ +Total good frames: 79443 Total undetected errors: 51\ +Bit error rate (on message bits only): 1.999e-02\ +seed 308\ +Eliminated 29 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79789 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20211, with src errs 20254, both 20181\ +Total good frames: 79716 Total undetected errors: 73\ +Bit error rate (on message bits only): 1.990e-02\ +seed 309\ +Eliminated 38 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78928 valid. Average 59.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21072, with src errs 21164, both 21034\ +Total good frames: 78798 Total undetected errors: 130\ +Bit error rate (on message bits only): 2.034e-02\ +seed 310\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79434 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20566, with src errs 20601, both 20532\ +Total good frames: 79365 Total undetected errors: 69\ +Bit error rate (on message bits only): 2.007e-02\ +seed 311\ +Eliminated 27 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79849 valid. Average 56.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20151, with src errs 20158, both 20098\ +Total good frames: 79789 Total undetected errors: 60\ +Bit error rate (on message bits only): 1.983e-02\ +seed 312\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79060 valid. Average 58.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20940, with src errs 20986, both 20883\ +Total good frames: 78957 Total undetected errors: 103\ +Bit error rate (on message bits only): 2.019e-02\ +seed 313\ +Eliminated 27 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79726 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20274, with src errs 20295, both 20224\ +Total good frames: 79655 Total undetected errors: 71\ +Bit error rate (on message bits only): 1.987e-02\ +seed 314\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79601 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20399, with src errs 20421, both 20348\ +Total good frames: 79528 Total undetected errors: 73\ +Bit error rate (on message bits only): 1.977e-02\ +seed 315\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79418 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20582, with src errs 20582, both 20523\ +Total good frames: 79359 Total undetected errors: 59\ +Bit error rate (on message bits only): 1.989e-02\ +seed 316\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79264 valid. Average 58.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20736, with src errs 20746, both 20684\ +Total good frames: 79202 Total undetected errors: 62\ +Bit error rate (on message bits only): 2.024e-02\ +seed 317\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79501 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20499, with src errs 20558, both 20445\ +Total good frames: 79388 Total undetected errors: 113\ +Bit error rate (on message bits only): 1.976e-02\ +seed 318\ +Eliminated 24 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79684 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20316, with src errs 20323, both 20256\ +Total good frames: 79617 Total undetected errors: 67\ +Bit error rate (on message bits only): 1.995e-02\ +seed 319\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79108 valid. Average 58.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20892, with src errs 20931, both 20853\ +Total good frames: 79030 Total undetected errors: 78\ +Bit error rate (on message bits only): 2.026e-02\ +seed 320\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79769 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20231, with src errs 20259, both 20201\ +Total good frames: 79711 Total undetected errors: 58\ +Bit error rate (on message bits only): 1.993e-02\ +seed 321\ +Eliminated 23 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79933 valid. Average 56.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20067, with src errs 20104, both 20028\ +Total good frames: 79857 Total undetected errors: 76\ +Bit error rate (on message bits only): 1.974e-02\ +seed 322\ +Eliminated 46 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79574 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20426, with src errs 20480, both 20388\ +Total good frames: 79482 Total undetected errors: 92\ +Bit error rate (on message bits only): 1.991e-02\ +seed 323\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79312 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20688, with src errs 21168, both 20643\ +Total good frames: 78787 Total undetected errors: 525\ +Bit error rate (on message bits only): 2.026e-02\ +seed 324\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79658 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20342, with src errs 20358, both 20277\ +Total good frames: 79577 Total undetected errors: 81\ +Bit error rate (on message bits only): 1.976e-02\ +seed 325\ +Eliminated 24 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80169 valid. Average 56.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19831, with src errs 20324, both 19805\ +Total good frames: 79650 Total undetected errors: 519\ +Bit error rate (on message bits only): 1.985e-02\ +seed 326\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79631 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20369, with src errs 20439, both 20304\ +Total good frames: 79496 Total undetected errors: 135\ +Bit error rate (on message bits only): 1.997e-02\ +seed 327\ +Eliminated 43 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 26.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79410 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20590, with src errs 20626, both 20530\ +Total good frames: 79314 Total undetected errors: 96\ +Bit error rate (on message bits only): 1.955e-02\ +seed 328\ +Eliminated 47 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79234 valid. Average 58.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20766, with src errs 20895, both 20715\ +Total good frames: 79054 Total undetected errors: 180\ +Bit error rate (on message bits only): 2.008e-02\ +seed 329\ +Eliminated 39 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79462 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20538, with src errs 20607, both 20498\ +Total good frames: 79353 Total undetected errors: 109\ +Bit error rate (on message bits only): 1.995e-02\ +seed 330\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79486 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20514, with src errs 20525, both 20462\ +Total good frames: 79423 Total undetected errors: 63\ +Bit error rate (on message bits only): 2.013e-02\ +seed 331\ +Eliminated 39 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79328 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20672, with src errs 20697, both 20632\ +Total good frames: 79263 Total undetected errors: 65\ +Bit error rate (on message bits only): 2.012e-02\ +seed 332\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79186 valid. Average 58.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20814, with src errs 20847, both 20728\ +Total good frames: 79067 Total undetected errors: 119\ +Bit error rate (on message bits only): 1.971e-02\ +seed 333\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79562 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20438, with src errs 20538, both 20398\ +Total good frames: 79422 Total undetected errors: 140\ +Bit error rate (on message bits only): 2.014e-02\ +seed 334\ +Eliminated 27 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 33.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80011 valid. Average 56.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19989, with src errs 20013, both 19957\ +Total good frames: 79955 Total undetected errors: 56\ +Bit error rate (on message bits only): 1.969e-02\ +seed 335\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79478 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20522, with src errs 20554, both 20484\ +Total good frames: 79408 Total undetected errors: 70\ +Bit error rate (on message bits only): 2.000e-02\ +seed 336\ +Eliminated 39 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79543 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20457, with src errs 20466, both 20409\ +Total good frames: 79486 Total undetected errors: 57\ +Bit error rate (on message bits only): 2.002e-02\ +seed 337\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79764 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20236, with src errs 20235, both 20191\ +Total good frames: 79720 Total undetected errors: 44\ +Bit error rate (on message bits only): 1.986e-02\ +seed 338\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79293 valid. Average 58.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20707, with src errs 20710, both 20652\ +Total good frames: 79235 Total undetected errors: 58\ +Bit error rate (on message bits only): 1.996e-02\ +seed 339\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79730 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20270, with src errs 20313, both 20233\ +Total good frames: 79650 Total undetected errors: 80\ +Bit error rate (on message bits only): 1.992e-02\ +seed 340\ +Eliminated 23 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79881 valid. Average 56.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20119, with src errs 20147, both 20083\ +Total good frames: 79817 Total undetected errors: 64\ +Bit error rate (on message bits only): 2.003e-02\ +seed 341\ +Eliminated 39 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79255 valid. Average 58.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20745, with src errs 20745, both 20687\ +Total good frames: 79197 Total undetected errors: 58\ +Bit error rate (on message bits only): 2.010e-02\ +seed 342\ +Eliminated 39 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79477 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20523, with src errs 20529, both 20470\ +Total good frames: 79418 Total undetected errors: 59\ +Bit error rate (on message bits only): 2.013e-02\ +seed 343\ +Eliminated 34 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79490 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20510, with src errs 20533, both 20465\ +Total good frames: 79422 Total undetected errors: 68\ +Bit error rate (on message bits only): 1.989e-02\ +seed 344\ +Eliminated 25 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79906 valid. Average 56.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20094, with src errs 20198, both 20056\ +Total good frames: 79764 Total undetected errors: 142\ +Bit error rate (on message bits only): 1.989e-02\ +seed 345\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79490 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20510, with src errs 20531, both 20453\ +Total good frames: 79412 Total undetected errors: 78\ +Bit error rate (on message bits only): 1.992e-02\ +seed 346\ +Eliminated 24 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 33.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79572 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20428, with src errs 20439, both 20379\ +Total good frames: 79512 Total undetected errors: 60\ +Bit error rate (on message bits only): 2.019e-02\ +seed 347\ +Had to place 1 checks in rows unevenly\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79614 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20386, with src errs 20419, both 20348\ +Total good frames: 79543 Total undetected errors: 71\ +Bit error rate (on message bits only): 2.004e-02\ +seed 348\ +Eliminated 21 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79889 valid. Average 56.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20111, with src errs 20161, both 20080\ +Total good frames: 79808 Total undetected errors: 81\ +Bit error rate (on message bits only): 1.985e-02\ +seed 349\ +Eliminated 34 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 25.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79246 valid. Average 58.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20754, with src errs 20757, both 20691\ +Total good frames: 79180 Total undetected errors: 66\ +Bit error rate (on message bits only): 2.002e-02\ +seed 350\ +Eliminated 28 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79187 valid. Average 58.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20813, with src errs 20814, both 20746\ +Total good frames: 79119 Total undetected errors: 68\ +Bit error rate (on message bits only): 2.017e-02\ +seed 351\ +Eliminated 27 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79619 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20381, with src errs 20484, both 20350\ +Total good frames: 79485 Total undetected errors: 134\ +Bit error rate (on message bits only): 2.028e-02\ +seed 352\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79719 valid. Average 57.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20281, with src errs 20274, both 20200\ +Total good frames: 79645 Total undetected errors: 74\ +Bit error rate (on message bits only): 2.016e-02\ +seed 353\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79465 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20535, with src errs 20535, both 20490\ +Total good frames: 79420 Total undetected errors: 45\ +Bit error rate (on message bits only): 2.027e-02\ +seed 354\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 33.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79383 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20617, with src errs 20641, both 20568\ +Total good frames: 79310 Total undetected errors: 73\ +Bit error rate (on message bits only): 2.000e-02\ +seed 355\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79578 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20422, with src errs 20454, both 20378\ +Total good frames: 79502 Total undetected errors: 76\ +Bit error rate (on message bits only): 1.975e-02\ +seed 356\ +Eliminated 28 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79674 valid. Average 57.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20326, with src errs 20358, both 20282\ +Total good frames: 79598 Total undetected errors: 76\ +Bit error rate (on message bits only): 2.002e-02\ +seed 357\ +Eliminated 41 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79572 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20428, with src errs 20443, both 20384\ +Total good frames: 79513 Total undetected errors: 59\ +Bit error rate (on message bits only): 2.020e-02\ +seed 358\ +Had to place 1 checks in rows unevenly\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 26.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79688 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20312, with src errs 20315, both 20249\ +Total good frames: 79622 Total undetected errors: 66\ +Bit error rate (on message bits only): 1.983e-02\ +seed 359\ +Eliminated 23 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79940 valid. Average 56.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20060, with src errs 20075, both 20002\ +Total good frames: 79867 Total undetected errors: 73\ +Bit error rate (on message bits only): 1.954e-02\ +seed 360\ +Eliminated 38 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79572 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20428, with src errs 20485, both 20385\ +Total good frames: 79472 Total undetected errors: 100\ +Bit error rate (on message bits only): 2.009e-02\ +seed 361\ +Eliminated 41 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79495 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20505, with src errs 20512, both 20464\ +Total good frames: 79447 Total undetected errors: 48\ +Bit error rate (on message bits only): 2.018e-02\ +seed 362\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79338 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20662, with src errs 20666, both 20599\ +Total good frames: 79271 Total undetected errors: 67\ +Bit error rate (on message bits only): 2.010e-02\ +seed 363\ +Eliminated 41 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78532 valid. Average 60.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21468, with src errs 21475, both 21411\ +Total good frames: 78468 Total undetected errors: 64\ +Bit error rate (on message bits only): 2.048e-02\ +seed 364\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79474 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20526, with src errs 20527, both 20475\ +Total good frames: 79422 Total undetected errors: 52\ +Bit error rate (on message bits only): 1.998e-02\ +seed 365\ +Eliminated 38 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79569 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20431, with src errs 20486, both 20394\ +Total good frames: 79477 Total undetected errors: 92\ +Bit error rate (on message bits only): 2.004e-02\ +seed 366\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79881 valid. Average 56.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20119, with src errs 20132, both 20082\ +Total good frames: 79831 Total undetected errors: 50\ +Bit error rate (on message bits only): 1.996e-02\ +seed 367\ +Eliminated 40 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78996 valid. Average 59.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21004, with src errs 21087, both 20953\ +Total good frames: 78862 Total undetected errors: 134\ +Bit error rate (on message bits only): 2.015e-02\ +seed 368\ +Eliminated 40 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79466 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20534, with src errs 20520, both 20469\ +Total good frames: 79415 Total undetected errors: 51\ +Bit error rate (on message bits only): 2.011e-02\ +seed 369\ +Eliminated 49 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 77447 valid. Average 62.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 22553, with src errs 22592, both 22511\ +Total good frames: 77366 Total undetected errors: 81\ +Bit error rate (on message bits only): 2.136e-02\ +seed 370\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79777 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20223, with src errs 20245, both 20178\ +Total good frames: 79710 Total undetected errors: 67\ +Bit error rate (on message bits only): 2.023e-02\ +seed 371\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79821 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20179, with src errs 20179, both 20134\ +Total good frames: 79776 Total undetected errors: 45\ +Bit error rate (on message bits only): 1.974e-02\ +seed 372\ +Eliminated 38 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78710 valid. Average 59.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21290, with src errs 21317, both 21249\ +Total good frames: 78642 Total undetected errors: 68\ +Bit error rate (on message bits only): 2.074e-02\ +seed 373\ +Eliminated 45 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79094 valid. Average 58.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20906, with src errs 21000, both 20851\ +Total good frames: 78945 Total undetected errors: 149\ +Bit error rate (on message bits only): 2.006e-02\ +seed 374\ +Eliminated 34 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79644 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20356, with src errs 20387, both 20302\ +Total good frames: 79559 Total undetected errors: 85\ +Bit error rate (on message bits only): 1.983e-02\ +seed 375\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79434 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20566, with src errs 20573, both 20510\ +Total good frames: 79371 Total undetected errors: 63\ +Bit error rate (on message bits only): 1.998e-02\ +seed 376\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79501 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20499, with src errs 20613, both 20456\ +Total good frames: 79344 Total undetected errors: 157\ +Bit error rate (on message bits only): 2.024e-02\ +seed 377\ +Eliminated 46 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78991 valid. Average 59.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21009, with src errs 21081, both 20957\ +Total good frames: 78867 Total undetected errors: 124\ +Bit error rate (on message bits only): 2.022e-02\ +seed 378\ +Eliminated 46 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79224 valid. Average 58.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20776, with src errs 21233, both 20746\ +Total good frames: 78737 Total undetected errors: 487\ +Bit error rate (on message bits only): 2.042e-02\ +seed 379\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79534 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20466, with src errs 20504, both 20424\ +Total good frames: 79454 Total undetected errors: 80\ +Bit error rate (on message bits only): 2.017e-02\ +seed 380\ +Eliminated 25 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79449 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20551, with src errs 20523, both 20487\ +Total good frames: 79413 Total undetected errors: 36\ +Bit error rate (on message bits only): 2.015e-02\ +seed 381\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79702 valid. Average 57.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20298, with src errs 20340, both 20248\ +Total good frames: 79610 Total undetected errors: 92\ +Bit error rate (on message bits only): 2.000e-02\ +seed 382\ +Eliminated 41 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79349 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20651, with src errs 20752, both 20597\ +Total good frames: 79194 Total undetected errors: 155\ +Bit error rate (on message bits only): 2.026e-02\ +seed 383\ +Eliminated 23 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79628 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20372, with src errs 20377, both 20310\ +Total good frames: 79561 Total undetected errors: 67\ +Bit error rate (on message bits only): 2.000e-02\ +seed 384\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79764 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20236, with src errs 20253, both 20185\ +Total good frames: 79696 Total undetected errors: 68\ +Bit error rate (on message bits only): 1.971e-02\ +seed 385\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 34.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79752 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20248, with src errs 20276, both 20215\ +Total good frames: 79691 Total undetected errors: 61\ +Bit error rate (on message bits only): 2.003e-02\ +seed 386\ +Eliminated 38 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79659 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20341, with src errs 20386, both 20307\ +Total good frames: 79580 Total undetected errors: 79\ +Bit error rate (on message bits only): 1.982e-02\ +seed 387\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79402 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20598, with src errs 20613, both 20551\ +Total good frames: 79340 Total undetected errors: 62\ +Bit error rate (on message bits only): 2.039e-02\ +seed 388\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 33.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79946 valid. Average 56.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20054, with src errs 20069, both 20005\ +Total good frames: 79882 Total undetected errors: 64\ +Bit error rate (on message bits only): 1.980e-02\ +seed 389\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79838 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20162, with src errs 20253, both 20128\ +Total good frames: 79713 Total undetected errors: 125\ +Bit error rate (on message bits only): 1.985e-02\ +seed 390\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78889 valid. Average 59.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21111, with src errs 21199, both 21046\ +Total good frames: 78736 Total undetected errors: 153\ +Bit error rate (on message bits only): 1.994e-02\ +seed 391\ +Eliminated 40 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79438 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20562, with src errs 20588, both 20528\ +Total good frames: 79378 Total undetected errors: 60\ +Bit error rate (on message bits only): 2.006e-02\ +seed 392\ +Eliminated 20 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79733 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20267, with src errs 20267, both 20221\ +Total good frames: 79687 Total undetected errors: 46\ +Bit error rate (on message bits only): 2.017e-02\ +seed 393\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79552 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20448, with src errs 20471, both 20394\ +Total good frames: 79475 Total undetected errors: 77\ +Bit error rate (on message bits only): 1.998e-02\ +seed 394\ +Eliminated 48 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78941 valid. Average 59.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21059, with src errs 21535, both 21029\ +Total good frames: 78435 Total undetected errors: 506\ +Bit error rate (on message bits only): 2.086e-02\ +seed 395\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79423 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20577, with src errs 20587, both 20535\ +Total good frames: 79371 Total undetected errors: 52\ +Bit error rate (on message bits only): 2.023e-02\ +seed 396\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79170 valid. Average 58.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20830, with src errs 20838, both 20774\ +Total good frames: 79106 Total undetected errors: 64\ +Bit error rate (on message bits only): 1.999e-02\ +seed 397\ +Eliminated 29 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79692 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20308, with src errs 20313, both 20260\ +Total good frames: 79639 Total undetected errors: 53\ +Bit error rate (on message bits only): 1.990e-02\ +seed 398\ +Eliminated 22 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 33.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80037 valid. Average 56.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19963, with src errs 20020, both 19929\ +Total good frames: 79946 Total undetected errors: 91\ +Bit error rate (on message bits only): 2.006e-02\ +seed 399\ +Eliminated 28 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79928 valid. Average 56.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20072, with src errs 20608, both 20041\ +Total good frames: 79361 Total undetected errors: 567\ +Bit error rate (on message bits only): 2.017e-02\ +seed 400\ +Eliminated 23 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80296 valid. Average 55.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19704, with src errs 19804, both 19678\ +Total good frames: 80170 Total undetected errors: 126\ +Bit error rate (on message bits only): 1.975e-02\ +seed 401\ +Eliminated 24 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79715 valid. Average 57.3 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20285, with src errs 20348, both 20230\ +Total good frames: 79597 Total undetected errors: 118\ +Bit error rate (on message bits only): 2.027e-02\ +seed 402\ +Eliminated 28 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79649 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20351, with src errs 20361, both 20313\ +Total good frames: 79601 Total undetected errors: 48\ +Bit error rate (on message bits only): 2.007e-02\ +seed 403\ +Eliminated 44 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79458 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20542, with src errs 20543, both 20492\ +Total good frames: 79407 Total undetected errors: 51\ +Bit error rate (on message bits only): 2.033e-02\ +seed 404\ +Eliminated 39 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79238 valid. Average 58.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20762, with src errs 20802, both 20713\ +Total good frames: 79149 Total undetected errors: 89\ +Bit error rate (on message bits only): 2.027e-02\ +seed 405\ +Eliminated 23 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79742 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20258, with src errs 20284, both 20217\ +Total good frames: 79675 Total undetected errors: 67\ +Bit error rate (on message bits only): 2.004e-02\ +seed 406\ +Eliminated 27 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 26.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79799 valid. Average 57.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20201, with src errs 20208, both 20164\ +Total good frames: 79755 Total undetected errors: 44\ +Bit error rate (on message bits only): 2.002e-02\ +seed 407\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79565 valid. Average 57.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20435, with src errs 20521, both 20388\ +Total good frames: 79432 Total undetected errors: 133\ +Bit error rate (on message bits only): 2.005e-02\ +seed 408\ +Eliminated 50 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79304 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20696, with src errs 20704, both 20647\ +Total good frames: 79247 Total undetected errors: 57\ +Bit error rate (on message bits only): 2.015e-02\ +seed 409\ +Eliminated 19 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79949 valid. Average 56.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20051, with src errs 20126, both 20005\ +Total good frames: 79828 Total undetected errors: 121\ +Bit error rate (on message bits only): 1.972e-02\ +seed 410\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79479 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20521, with src errs 20544, both 20480\ +Total good frames: 79415 Total undetected errors: 64\ +Bit error rate (on message bits only): 2.003e-02\ +seed 411\ +Eliminated 29 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79814 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20186, with src errs 20212, both 20146\ +Total good frames: 79748 Total undetected errors: 66\ +Bit error rate (on message bits only): 1.971e-02\ +seed 412\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79308 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20692, with src errs 20784, both 20645\ +Total good frames: 79169 Total undetected errors: 139\ +Bit error rate (on message bits only): 2.017e-02\ +seed 413\ +Eliminated 41 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.4\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79907 valid. Average 56.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20093, with src errs 20103, both 20059\ +Total good frames: 79863 Total undetected errors: 44\ +Bit error rate (on message bits only): 1.983e-02\ +seed 414\ +Eliminated 26 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79705 valid. Average 57.4 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20295, with src errs 20378, both 20237\ +Total good frames: 79564 Total undetected errors: 141\ +Bit error rate (on message bits only): 1.974e-02\ +seed 415\ +Had to place 1 checks in rows unevenly\ +Eliminated 23 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79436 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20564, with src errs 20600, both 20507\ +Total good frames: 79343 Total undetected errors: 93\ +Bit error rate (on message bits only): 2.027e-02\ +seed 416\ +Eliminated 35 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80047 valid. Average 56.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19953, with src errs 20010, both 19917\ +Total good frames: 79954 Total undetected errors: 93\ +Bit error rate (on message bits only): 1.972e-02\ +seed 417\ +Eliminated 28 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79772 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20228, with src errs 20279, both 20187\ +Total good frames: 79680 Total undetected errors: 92\ +Bit error rate (on message bits only): 1.994e-02\ +seed 418\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79680 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20320, with src errs 20347, both 20280\ +Total good frames: 79613 Total undetected errors: 67\ +Bit error rate (on message bits only): 2.018e-02\ +seed 419\ +Eliminated 48 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.7\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79777 valid. Average 57.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20223, with src errs 20259, both 20183\ +Total good frames: 79701 Total undetected errors: 76\ +Bit error rate (on message bits only): 1.984e-02\ +seed 420\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.1\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79432 valid. Average 58.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20568, with src errs 21147, both 20525\ +Total good frames: 78810 Total undetected errors: 622\ +Bit error rate (on message bits only): 2.010e-02\ +seed 421\ +Eliminated 32 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.0\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79608 valid. Average 57.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20392, with src errs 20413, both 20348\ +Total good frames: 79543 Total undetected errors: 65\ +Bit error rate (on message bits only): 2.001e-02\ +seed 422\ +Eliminated 34 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79558 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20442, with src errs 20472, both 20383\ +Total good frames: 79469 Total undetected errors: 89\ +Bit error rate (on message bits only): 1.986e-02\ +seed 423\ +Eliminated 42 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79513 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20487, with src errs 20535, both 20454\ +Total good frames: 79432 Total undetected errors: 81\ +Bit error rate (on message bits only): 1.988e-02\ +seed 424\ +Eliminated 31 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 27.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79998 valid. Average 56.5 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20002, with src errs 20446, both 19966\ +Total good frames: 79518 Total undetected errors: 480\ +Bit error rate (on message bits only): 1.972e-02\ +seed 425\ +Eliminated 21 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80143 valid. Average 56.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19857, with src errs 19903, both 19810\ +Total good frames: 80050 Total undetected errors: 93\ +Bit error rate (on message bits only): 1.970e-02\ +seed 426\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79353 valid. Average 58.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20647, with src errs 21098, both 20601\ +Total good frames: 78856 Total undetected errors: 497\ +Bit error rate (on message bits only): 2.012e-02\ +seed 427\ +Eliminated 25 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79792 valid. Average 57.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20208, with src errs 20236, both 20176\ +Total good frames: 79732 Total undetected errors: 60\ +Bit error rate (on message bits only): 2.003e-02\ +seed 428\ +Eliminated 44 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 78987 valid. Average 59.1 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 21013, with src errs 21471, both 20960\ +Total good frames: 78476 Total undetected errors: 511\ +Bit error rate (on message bits only): 2.043e-02\ +seed 429\ +Eliminated 34 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79477 valid. Average 57.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20523, with src errs 20570, both 20491\ +Total good frames: 79398 Total undetected errors: 79\ +Bit error rate (on message bits only): 2.004e-02\ +seed 430\ +Eliminated 28 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80108 valid. Average 56.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19892, with src errs 19887, both 19843\ +Total good frames: 80064 Total undetected errors: 44\ +Bit error rate (on message bits only): 1.965e-02\ +seed 431\ +Eliminated 41 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.8\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79590 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20410, with src errs 20501, both 20365\ +Total good frames: 79454 Total undetected errors: 136\ +Bit error rate (on message bits only): 1.996e-02\ +seed 432\ +Eliminated 33 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.9\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79035 valid. Average 59.0 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20965, with src errs 21044, both 20890\ +Total good frames: 78881 Total undetected errors: 154\ +Bit error rate (on message bits only): 2.012e-02\ +seed 433\ +Eliminated 36 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 31.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79183 valid. Average 58.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20817, with src errs 20822, both 20765\ +Total good frames: 79126 Total undetected errors: 57\ +Bit error rate (on message bits only): 2.002e-02\ +seed 434\ +Eliminated 45 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79065 valid. Average 58.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20935, with src errs 20927, both 20871\ +Total good frames: 79009 Total undetected errors: 56\ +Bit error rate (on message bits only): 2.013e-02\ +seed 435\ +Eliminated 34 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 26.2\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79337 valid. Average 58.2 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20663, with src errs 20673, both 20610\ +Total good frames: 79274 Total undetected errors: 63\ +Bit error rate (on message bits only): 1.987e-02\ +seed 436\ +Eliminated 16 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.6\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 80343 valid. Average 55.8 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 19657, with src errs 19747, both 19615\ +Total good frames: 80211 Total undetected errors: 132\ +Bit error rate (on message bits only): 1.962e-02\ +seed 437\ +Eliminated 40 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 28.3\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79101 valid. Average 58.9 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20899, with src errs 20904, both 20820\ +Total good frames: 79017 Total undetected errors: 84\ +Bit error rate (on message bits only): 2.041e-02\ +seed 438\ +Eliminated 24 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 32.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79545 valid. Average 57.6 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20455, with src errs 20470, both 20424\ +Total good frames: 79499 Total undetected errors: 46\ +Bit error rate (on message bits only): 1.994e-02\ +seed 439\ +Eliminated 37 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 29.5\ +Encoded 100000 blocks, source block size 72, encoded block size 144\ +Transmitted 14400000 bits\ +Decoded 100000 blocks, 79482 valid. Average 57.7 iterations, 10% bit changes\ +Block counts: tot 100000, with chk errs 20518, with src errs 20607, both 20484\ +Total good frames: 79359 Total undetected errors: 123\ +Bit error rate (on message bits only): 2.012e-02\ +seed 440\ +Eliminated 30 cycles of length four by moving checks within column\ +Number of 1s per check in Inv(A) X B is 30.2\ +Encoded 100000 blocks, source block size 72, encoded block size 14400000\ +} \ No newline at end of file diff --git a/lib/ldpc/jtmode_codes/ldpc-144-72 b/lib/ldpc/jtmode_codes/ldpc-144-72 new file mode 100755 index 000000000..8a0cf9089 --- /dev/null +++ b/lib/ldpc/jtmode_codes/ldpc-144-72 @@ -0,0 +1,59 @@ +#!/bin/sh +# this script characterizes a single code over a narrow range of Eb/No +# note relationship between noise standard deviation, sigma, and Eb/No: +# Ps/Pn = 1/(2*sigma^2) +# Ps/Pn = (Es/tau_s)/(W*No)=(Eb/R)/(tau_s*W*No)=(Eb/No)*(1/(tau_s*R*W)) +# If pulses are sent at Nyquist signaling limit, then: 1/tau_s=2*W -> tau_s*W=1/2 +# so Eb/No=(1/2*sigma^2)*(2*R) = + +set -e # Stop if an error occurs +set -v # Echo commands as they are read + +#make-ldpc ldpc-144-72.pchk 80 160 12 evenboth 6x3/4x4 no4cycle +#make-ldpc ldpc-144-72.pchk 72 144 33 evenboth 6x3/4x4 no4cycle +#make-ldpc ldpc-144-72.pchk 72 144 8 evenboth 3 no4cycle +cp ldpc-144-72-6x3-4x4-sf1.pchk ldpc-144-72.pchk +make-gen ldpc-144-72.pchk ldpc-144-72.gen dense +rand-src ldpc-144-72.src 1 72x1000000 +encode ldpc-144-72.pchk ldpc-144-72.gen ldpc-144-72.src \ + ldpc-144-72.enc + +# NOISE STANDARD DEVIATION 0.75, Eb/N0 = 2.50 dB + +transmit ldpc-144-72.enc ldpc-144-72.rec 1 awgn 0.75 +decode ldpc-144-72.pchk ldpc-144-72.rec ldpc-144-72.dec awgn 0.75\ + prprp 250 +verify ldpc-144-72.pchk ldpc-144-72.dec ldpc-144-72.gen \ + ldpc-144-72.src + +# NOISE STANDARD DEVIATION 0.80, Eb/N0 = 1.94 dB + +transmit ldpc-144-72.enc ldpc-144-72.rec 1 awgn 0.80 +decode ldpc-144-72.pchk ldpc-144-72.rec ldpc-144-72.dec awgn 0.80\ + prprp 250 +verify ldpc-144-72.pchk ldpc-144-72.dec ldpc-144-72.gen \ + ldpc-144-72.src + +# NOISE STANDARD DEVIATION 0.85, Eb/N0 = 1.41 dB + +transmit ldpc-144-72.enc ldpc-144-72.rec 1 awgn 0.85 +decode ldpc-144-72.pchk ldpc-144-72.rec ldpc-144-72.dec awgn 0.85\ + prprp 250 +verify ldpc-144-72.pchk ldpc-144-72.dec ldpc-144-72.gen \ + ldpc-144-72.src + +# NOISE STANDARD DEVIATION 0.90, Eb/N0 = 0.92 dB + +transmit ldpc-144-72.enc ldpc-144-72.rec 1 awgn 0.90 +decode ldpc-144-72.pchk ldpc-144-72.rec ldpc-144-72.dec awgn 0.90\ + prprp 250 +verify ldpc-144-72.pchk ldpc-144-72.dec ldpc-144-72.gen \ + ldpc-144-72.src + +# NOISE STANDARD DEVIATION 0.95, Eb/N0 = 0.45 dB + +transmit ldpc-144-72.enc ldpc-144-72.rec 1 awgn 0.95 +decode ldpc-144-72.pchk ldpc-144-72.rec ldpc-144-72.dec awgn 0.95\ + prprp 250 +verify ldpc-144-72.pchk ldpc-144-72.dec ldpc-144-72.gen \ + ldpc-144-72.src diff --git a/lib/ldpc/jtmode_codes/ldpc-144-72-6x3-4x4-sf1.pchk b/lib/ldpc/jtmode_codes/ldpc-144-72-6x3-4x4-sf1.pchk new file mode 100644 index 000000000..92dee5fc6 Binary files /dev/null and b/lib/ldpc/jtmode_codes/ldpc-144-72-6x3-4x4-sf1.pchk differ diff --git a/lib/ldpc/jtmode_codes/ldpc-144-72-search b/lib/ldpc/jtmode_codes/ldpc-144-72-search new file mode 100755 index 000000000..812ed0d86 --- /dev/null +++ b/lib/ldpc/jtmode_codes/ldpc-144-72-search @@ -0,0 +1,34 @@ +#!/bin/sh + +# Example of a (144,72) LDPC code with 3 checks per bit and 6 bits per +# check, tested on Additive White Gaussian Noise channels with noise standard +# deviations varying from 0.80 to 0.95. +# +# Testing is done by transmitting random messages, which is safer (though +# slower) than using only zero messages. Decoding is done using a maximum +# of 250 iterations of probability propagation. + +set -e # Stop if an error occurs +set -v # Echo commands as they are read + +for i in `seq 1 1000`; +do + seed=$i + echo seed $seed +make-ldpc ldpc-144-72.pchk 72 144 $seed evenboth 6x3/4x4 no4cycle +make-gen ldpc-144-72.pchk ldpc-144-72.gen dense +rand-src ldpc-144-72.src 2 72x100000 +encode ldpc-144-72.pchk ldpc-144-72.gen ldpc-144-72.src \ + ldpc-144-72.enc + + +# NOISE STANDARD DEVIATION 0.80, Eb/N0 = 1.94 dB + +transmit ldpc-144-72.enc ldpc-144-72.rec 1 awgn 0.80 +decode ldpc-144-72.pchk ldpc-144-72.rec ldpc-144-72.dec awgn 0.80\ + prprp 50 +verify ldpc-144-72.pchk ldpc-144-72.dec ldpc-144-72.gen \ + ldpc-144-72.src + + +done \ No newline at end of file diff --git a/lib/ldpc/jtmode_codes/ldpc-144-72-sf1.results.rtf b/lib/ldpc/jtmode_codes/ldpc-144-72-sf1.results.rtf new file mode 100644 index 000000000..cfc514dcb --- /dev/null +++ b/lib/ldpc/jtmode_codes/ldpc-144-72-sf1.results.rtf @@ -0,0 +1,85 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 +{\fonttbl\f0\fnil\fcharset0 Menlo-Regular;} +{\colortbl;\red255\green255\blue255;} +\margl1440\margr1440\vieww21500\viewh8400\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs30 \cf0 \CocoaLigature0 Stevens-MacBook-Air:LDPC-codes-master sfranke$ ldpc-144-72\ +\ +#make-ldpc ldpc-144-72.pchk 80 160 12 evenboth 6x3/4x4 no4cycle\ +#make-ldpc ldpc-144-72.pchk 72 144 33 evenboth 6x3/4x4 no4cycle\ +#make-ldpc ldpc-144-72.pchk 72 144 8 evenboth 3 no4cycle\ +cp ldpc-144-72-6x3-4x4-sf1.pchk ldpc-144-72.pchk\ +make-gen ldpc-144-72.pchk ldpc-144-72.gen dense\ +Number of 1s per check in Inv(A) X B is 29.4\ +rand-src ldpc-144-72.src 1 72x1000000\ +encode ldpc-144-72.pchk ldpc-144-72.gen ldpc-144-72.src \\\ + ldpc-144-72.enc\ +Encoded 1000000 blocks, source block size 72, encoded block size 144\ +\ +# NOISE STANDARD DEVIATION 0.75, Eb/N0 = 2.50 dB\ +\ +transmit ldpc-144-72.enc ldpc-144-72.rec 1 awgn 0.75\ +Transmitted 144000000 bits\ +decode ldpc-144-72.pchk ldpc-144-72.rec ldpc-144-72.dec awgn 0.75\\\ + prprp 250\ +Decoded 1000000 blocks, 912331 valid. Average 28.0 iterations, 9% bit changes\ +verify ldpc-144-72.pchk ldpc-144-72.dec ldpc-144-72.gen \\\ + ldpc-144-72.src \ +Block counts: tot 1000000, with chk errs 87669, with src errs 87561, both 87506\ +Total good frames: 912276 Total undetected errors: 55\ +Bit error rate (on message bits only): 8.969e-03\ +\ +# NOISE STANDARD DEVIATION 0.80, Eb/N0 = 1.94 dB\ +\ +transmit ldpc-144-72.enc ldpc-144-72.rec 1 awgn 0.80\ +Transmitted 144000000 bits\ +decode ldpc-144-72.pchk ldpc-144-72.rec ldpc-144-72.dec awgn 0.80\\\ + prprp 250\ +Decoded 1000000 blocks, 747691 valid. Average 69.4 iterations, 10% bit changes\ +verify ldpc-144-72.pchk ldpc-144-72.dec ldpc-144-72.gen \\\ + ldpc-144-72.src \ +Block counts: tot 1000000, with chk errs 252309, with src errs 251953, both 251862\ +Total good frames: 747600 Total undetected errors: 91\ +Bit error rate (on message bits only): 2.627e-02\ +\ +# NOISE STANDARD DEVIATION 0.85, Eb/N0 = 1.41 dB\ +\ +transmit ldpc-144-72.enc ldpc-144-72.rec 1 awgn 0.85\ +Transmitted 144000000 bits\ +decode ldpc-144-72.pchk ldpc-144-72.rec ldpc-144-72.dec awgn 0.85\\\ + prprp 250\ +Decoded 1000000 blocks, 513359 valid. Average 126.8 iterations, 10% bit changes\ +verify ldpc-144-72.pchk ldpc-144-72.dec ldpc-144-72.gen \\\ + ldpc-144-72.src \ +Block counts: tot 1000000, with chk errs 486641, with src errs 485965, both 485838\ +Total good frames: 513232 Total undetected errors: 127\ +Bit error rate (on message bits only): 5.295e-02\ +\ +# NOISE STANDARD DEVIATION 0.90, Eb/N0 = 0.92 dB\ +\ +transmit ldpc-144-72.enc ldpc-144-72.rec 1 awgn 0.90\ +Transmitted 144000000 bits\ +decode ldpc-144-72.pchk ldpc-144-72.rec ldpc-144-72.dec awgn 0.90\\\ + prprp 250\ +Decoded 1000000 blocks, 287970 valid. Average 181.4 iterations, 9% bit changes\ +verify ldpc-144-72.pchk ldpc-144-72.dec ldpc-144-72.gen \\\ + ldpc-144-72.src \ +Block counts: tot 1000000, with chk errs 712030, with src errs 711238, both 711123\ +Total good frames: 287855 Total undetected errors: 115\ +Bit error rate (on message bits only): 8.316e-02\ +\ +# NOISE STANDARD DEVIATION 0.95, Eb/N0 = 0.45 dB\ +\ +transmit ldpc-144-72.enc ldpc-144-72.rec 1 awgn 0.95\ +Transmitted 144000000 bits\ +decode ldpc-144-72.pchk ldpc-144-72.rec ldpc-144-72.dec awgn 0.95\\\ + prprp 250\ +Decoded 1000000 blocks, 130537 valid. Average 219.2 iterations, 8% bit changes\ +verify ldpc-144-72.pchk ldpc-144-72.dec ldpc-144-72.gen \\\ + ldpc-144-72.src\ +Block counts: tot 1000000, with chk errs 869463, with src errs 868761, both 868683\ +Total good frames: 130459 Total undetected errors: 78\ +Bit error rate (on message bits only): 1.110e-01\ +Stevens-MacBook-Air:LDPC-codes-master sfranke$ \ +} \ No newline at end of file diff --git a/lib/ldpc/jtmode_codes/search_144-72-6x3-4x4.txt b/lib/ldpc/jtmode_codes/search_144-72-6x3-4x4.txt new file mode 100644 index 000000000..da2a140ba --- /dev/null +++ b/lib/ldpc/jtmode_codes/search_144-72-6x3-4x4.txt @@ -0,0 +1,8953 @@ +Stevens-MacBook-Air:LDPC-codes-master sfranke$ ldpc-144-72-search + +for i in `seq 1 1000`; +do + seed=$i + echo seed $seed +make-ldpc ldpc-144-72.pchk 72 144 $seed evenboth 6x3/4x4 no4cycle +make-gen ldpc-144-72.pchk ldpc-144-72.gen dense +rand-src ldpc-144-72.src 2 72x100000 +encode ldpc-144-72.pchk ldpc-144-72.gen ldpc-144-72.src \ + ldpc-144-72.enc + + +# NOISE STANDARD DEVIATION 0.80, Eb/N0 = 1.94 dB + +transmit ldpc-144-72.enc ldpc-144-72.rec 1 awgn 0.80 +decode ldpc-144-72.pchk ldpc-144-72.rec ldpc-144-72.dec awgn 0.80\ + prprp 50 +verify ldpc-144-72.pchk ldpc-144-72.dec ldpc-144-72.gen \ + ldpc-144-72.src + + +done +seq 1 1000 +seed 1 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73592 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26408, with src errs 26317, both 26305 +Total good frames: 73580 Total undetected errors: 12 +Bit error rate (on message bits only): 2.635e-02 +seed 2 +Eliminated 103 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73828 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26172, with src errs 26024, both 26019 +Total good frames: 73823 Total undetected errors: 5 +Bit error rate (on message bits only): 2.573e-02 +seed 3 +Eliminated 76 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73858 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26142, with src errs 26034, both 26013 +Total good frames: 73837 Total undetected errors: 21 +Bit error rate (on message bits only): 2.605e-02 +seed 4 +Eliminated 133 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73707 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26293, with src errs 26179, both 26161 +Total good frames: 73689 Total undetected errors: 18 +Bit error rate (on message bits only): 2.605e-02 +seed 5 +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73556 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26444, with src errs 26360, both 26329 +Total good frames: 73525 Total undetected errors: 31 +Bit error rate (on message bits only): 2.653e-02 +seed 6 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73504 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26496, with src errs 26411, both 26388 +Total good frames: 73481 Total undetected errors: 23 +Bit error rate (on message bits only): 2.660e-02 +seed 7 +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73602 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26398, with src errs 26335, both 26318 +Total good frames: 73585 Total undetected errors: 17 +Bit error rate (on message bits only): 2.650e-02 +seed 8 +Eliminated 72 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74149 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25851, with src errs 25742, both 25726 +Total good frames: 74133 Total undetected errors: 16 +Bit error rate (on message bits only): 2.561e-02 +seed 9 +Eliminated 76 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73875 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26125, with src errs 26013, both 26000 +Total good frames: 73862 Total undetected errors: 13 +Bit error rate (on message bits only): 2.623e-02 +seed 10 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74174 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25826, with src errs 25785, both 25695 +Total good frames: 74084 Total undetected errors: 90 +Bit error rate (on message bits only): 2.547e-02 +seed 11 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72883 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27117, with src errs 27024, both 27008 +Total good frames: 72867 Total undetected errors: 16 +Bit error rate (on message bits only): 2.680e-02 +seed 12 +Eliminated 61 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73930 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26070, with src errs 25964, both 25953 +Total good frames: 73919 Total undetected errors: 11 +Bit error rate (on message bits only): 2.616e-02 +seed 13 +Eliminated 62 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73971 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26029, with src errs 25908, both 25899 +Total good frames: 73962 Total undetected errors: 9 +Bit error rate (on message bits only): 2.595e-02 +seed 14 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73197 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26803, with src errs 26679, both 26665 +Total good frames: 73183 Total undetected errors: 14 +Bit error rate (on message bits only): 2.622e-02 +seed 15 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73442 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26558, with src errs 26428, both 26422 +Total good frames: 73436 Total undetected errors: 6 +Bit error rate (on message bits only): 2.607e-02 +seed 16 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73618 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26382, with src errs 26288, both 26277 +Total good frames: 73607 Total undetected errors: 11 +Bit error rate (on message bits only): 2.622e-02 +seed 17 +Eliminated 65 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74106 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25894, with src errs 25801, both 25788 +Total good frames: 74093 Total undetected errors: 13 +Bit error rate (on message bits only): 2.581e-02 +seed 18 +Eliminated 71 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74289 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25711, with src errs 25608, both 25587 +Total good frames: 74268 Total undetected errors: 21 +Bit error rate (on message bits only): 2.585e-02 +seed 19 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73376 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26624, with src errs 26544, both 26530 +Total good frames: 73362 Total undetected errors: 14 +Bit error rate (on message bits only): 2.659e-02 +seed 20 +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73988 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26012, with src errs 25913, both 25902 +Total good frames: 73977 Total undetected errors: 11 +Bit error rate (on message bits only): 2.586e-02 +seed 21 +Eliminated 59 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73621 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26379, with src errs 26312, both 26299 +Total good frames: 73608 Total undetected errors: 13 +Bit error rate (on message bits only): 2.660e-02 +seed 22 +Had to place 1 checks in rows unevenly +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74036 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25964, with src errs 25848, both 25832 +Total good frames: 74020 Total undetected errors: 16 +Bit error rate (on message bits only): 2.593e-02 +seed 23 +Eliminated 76 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73378 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26622, with src errs 26536, both 26527 +Total good frames: 73369 Total undetected errors: 9 +Bit error rate (on message bits only): 2.675e-02 +seed 24 +Eliminated 138 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72719 valid. Average 18.7 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27281, with src errs 27164, both 27141 +Total good frames: 72696 Total undetected errors: 23 +Bit error rate (on message bits only): 2.699e-02 +seed 25 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74037 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25963, with src errs 25890, both 25854 +Total good frames: 74001 Total undetected errors: 36 +Bit error rate (on message bits only): 2.598e-02 +seed 26 +Eliminated 119 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72813 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27187, with src errs 27112, both 27101 +Total good frames: 72802 Total undetected errors: 11 +Bit error rate (on message bits only): 2.733e-02 +seed 27 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74187 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25813, with src errs 25706, both 25697 +Total good frames: 74178 Total undetected errors: 9 +Bit error rate (on message bits only): 2.594e-02 +seed 28 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73518 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26482, with src errs 26408, both 26370 +Total good frames: 73480 Total undetected errors: 38 +Bit error rate (on message bits only): 2.627e-02 +seed 29 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73346 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26654, with src errs 26520, both 26509 +Total good frames: 73335 Total undetected errors: 11 +Bit error rate (on message bits only): 2.606e-02 +seed 30 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73339 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26661, with src errs 26570, both 26561 +Total good frames: 73330 Total undetected errors: 9 +Bit error rate (on message bits only): 2.676e-02 +seed 31 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73439 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26561, with src errs 26447, both 26430 +Total good frames: 73422 Total undetected errors: 17 +Bit error rate (on message bits only): 2.626e-02 +seed 32 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73462 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26538, with src errs 26481, both 26444 +Total good frames: 73425 Total undetected errors: 37 +Bit error rate (on message bits only): 2.657e-02 +seed 33 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73442 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26558, with src errs 26457, both 26455 +Total good frames: 73440 Total undetected errors: 2 +Bit error rate (on message bits only): 2.704e-02 +seed 34 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72911 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27089, with src errs 27003, both 26992 +Total good frames: 72900 Total undetected errors: 11 +Bit error rate (on message bits only): 2.701e-02 +seed 35 +Eliminated 80 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73694 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26306, with src errs 26266, both 26226 +Total good frames: 73654 Total undetected errors: 40 +Bit error rate (on message bits only): 2.679e-02 +seed 36 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73815 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26185, with src errs 26083, both 26073 +Total good frames: 73805 Total undetected errors: 10 +Bit error rate (on message bits only): 2.612e-02 +seed 37 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73393 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26607, with src errs 26492, both 26476 +Total good frames: 73377 Total undetected errors: 16 +Bit error rate (on message bits only): 2.639e-02 +seed 38 +Eliminated 135 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72806 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27194, with src errs 27104, both 27085 +Total good frames: 72787 Total undetected errors: 19 +Bit error rate (on message bits only): 2.698e-02 +seed 39 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73930 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26070, with src errs 25946, both 25917 +Total good frames: 73901 Total undetected errors: 29 +Bit error rate (on message bits only): 2.573e-02 +seed 40 +Eliminated 109 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73387 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26613, with src errs 26872, both 26500 +Total good frames: 73015 Total undetected errors: 372 +Bit error rate (on message bits only): 2.649e-02 +seed 41 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73327 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26673, with src errs 26610, both 26589 +Total good frames: 73306 Total undetected errors: 21 +Bit error rate (on message bits only): 2.691e-02 +seed 42 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73583 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26417, with src errs 26329, both 26307 +Total good frames: 73561 Total undetected errors: 22 +Bit error rate (on message bits only): 2.676e-02 +seed 43 +Eliminated 69 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73988 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26012, with src errs 25895, both 25885 +Total good frames: 73978 Total undetected errors: 10 +Bit error rate (on message bits only): 2.577e-02 +seed 44 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73509 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26491, with src errs 26391, both 26376 +Total good frames: 73494 Total undetected errors: 15 +Bit error rate (on message bits only): 2.594e-02 +seed 45 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73627 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26373, with src errs 26292, both 26278 +Total good frames: 73613 Total undetected errors: 14 +Bit error rate (on message bits only): 2.624e-02 +seed 46 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73261 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26739, with src errs 26638, both 26618 +Total good frames: 73241 Total undetected errors: 20 +Bit error rate (on message bits only): 2.607e-02 +seed 47 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73175 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26825, with src errs 26730, both 26724 +Total good frames: 73169 Total undetected errors: 6 +Bit error rate (on message bits only): 2.668e-02 +seed 48 +Had to place 1 checks in rows unevenly +Eliminated 67 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73839 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26161, with src errs 26094, both 26070 +Total good frames: 73815 Total undetected errors: 24 +Bit error rate (on message bits only): 2.639e-02 +seed 49 +Eliminated 108 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73495 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26505, with src errs 26416, both 26396 +Total good frames: 73475 Total undetected errors: 20 +Bit error rate (on message bits only): 2.586e-02 +seed 50 +Eliminated 109 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73351 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26649, with src errs 26549, both 26530 +Total good frames: 73332 Total undetected errors: 19 +Bit error rate (on message bits only): 2.673e-02 +seed 51 +Eliminated 128 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72679 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27321, with src errs 27239, both 27197 +Total good frames: 72637 Total undetected errors: 42 +Bit error rate (on message bits only): 2.648e-02 +seed 52 +Eliminated 129 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 33.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73390 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26610, with src errs 26540, both 26530 +Total good frames: 73380 Total undetected errors: 10 +Bit error rate (on message bits only): 2.677e-02 +seed 53 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73995 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26005, with src errs 25899, both 25880 +Total good frames: 73976 Total undetected errors: 19 +Bit error rate (on message bits only): 2.580e-02 +seed 54 +Eliminated 66 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74401 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25599, with src errs 25519, both 25503 +Total good frames: 74385 Total undetected errors: 16 +Bit error rate (on message bits only): 2.582e-02 +seed 55 +Eliminated 114 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73664 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26336, with src errs 26248, both 26233 +Total good frames: 73649 Total undetected errors: 15 +Bit error rate (on message bits only): 2.602e-02 +seed 56 +Had to place 1 checks in rows unevenly +Eliminated 127 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73883 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26117, with src errs 26199, both 26009 +Total good frames: 73693 Total undetected errors: 190 +Bit error rate (on message bits only): 2.574e-02 +seed 57 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74100 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25900, with src errs 25796, both 25782 +Total good frames: 74086 Total undetected errors: 14 +Bit error rate (on message bits only): 2.562e-02 +seed 58 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73920 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26080, with src errs 25943, both 25931 +Total good frames: 73908 Total undetected errors: 12 +Bit error rate (on message bits only): 2.581e-02 +seed 59 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73755 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26245, with src errs 26159, both 26142 +Total good frames: 73738 Total undetected errors: 17 +Bit error rate (on message bits only): 2.572e-02 +seed 60 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73662 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26338, with src errs 26264, both 26244 +Total good frames: 73642 Total undetected errors: 20 +Bit error rate (on message bits only): 2.609e-02 +seed 61 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73745 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26255, with src errs 26146, both 26141 +Total good frames: 73740 Total undetected errors: 5 +Bit error rate (on message bits only): 2.645e-02 +seed 62 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73822 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26178, with src errs 26093, both 26070 +Total good frames: 73799 Total undetected errors: 23 +Bit error rate (on message bits only): 2.630e-02 +seed 63 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73532 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26468, with src errs 26375, both 26362 +Total good frames: 73519 Total undetected errors: 13 +Bit error rate (on message bits only): 2.602e-02 +seed 64 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74215 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25785, with src errs 25706, both 25695 +Total good frames: 74204 Total undetected errors: 11 +Bit error rate (on message bits only): 2.589e-02 +seed 65 +Eliminated 123 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72900 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27100, with src errs 27003, both 26985 +Total good frames: 72882 Total undetected errors: 18 +Bit error rate (on message bits only): 2.667e-02 +seed 66 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73633 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26367, with src errs 26290, both 26277 +Total good frames: 73620 Total undetected errors: 13 +Bit error rate (on message bits only): 2.626e-02 +seed 67 +Eliminated 72 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73262 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26738, with src errs 26651, both 26636 +Total good frames: 73247 Total undetected errors: 15 +Bit error rate (on message bits only): 2.675e-02 +seed 68 +Eliminated 126 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73397 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26603, with src errs 26508, both 26499 +Total good frames: 73388 Total undetected errors: 9 +Bit error rate (on message bits only): 2.621e-02 +seed 69 +Eliminated 110 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73799 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26201, with src errs 26077, both 26057 +Total good frames: 73779 Total undetected errors: 20 +Bit error rate (on message bits only): 2.563e-02 +seed 70 +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73479 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26521, with src errs 26428, both 26422 +Total good frames: 73473 Total undetected errors: 6 +Bit error rate (on message bits only): 2.653e-02 +seed 71 +Eliminated 143 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73304 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26696, with src errs 26572, both 26559 +Total good frames: 73291 Total undetected errors: 13 +Bit error rate (on message bits only): 2.602e-02 +seed 72 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73912 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26088, with src errs 25994, both 25979 +Total good frames: 73897 Total undetected errors: 15 +Bit error rate (on message bits only): 2.573e-02 +seed 73 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74048 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25952, with src errs 25851, both 25835 +Total good frames: 74032 Total undetected errors: 16 +Bit error rate (on message bits only): 2.559e-02 +seed 74 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73322 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26678, with src errs 26574, both 26559 +Total good frames: 73307 Total undetected errors: 15 +Bit error rate (on message bits only): 2.666e-02 +seed 75 +Eliminated 116 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73100 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26900, with src errs 26806, both 26791 +Total good frames: 73085 Total undetected errors: 15 +Bit error rate (on message bits only): 2.660e-02 +seed 76 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73795 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26205, with src errs 26115, both 26104 +Total good frames: 73784 Total undetected errors: 11 +Bit error rate (on message bits only): 2.629e-02 +seed 77 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73790 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26210, with src errs 26128, both 26108 +Total good frames: 73770 Total undetected errors: 20 +Bit error rate (on message bits only): 2.646e-02 +seed 78 +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73427 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26573, with src errs 26483, both 26457 +Total good frames: 73401 Total undetected errors: 26 +Bit error rate (on message bits only): 2.635e-02 +seed 79 +Eliminated 104 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73969 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26031, with src errs 25948, both 25906 +Total good frames: 73927 Total undetected errors: 42 +Bit error rate (on message bits only): 2.569e-02 +seed 80 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73437 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26563, with src errs 26461, both 26454 +Total good frames: 73430 Total undetected errors: 7 +Bit error rate (on message bits only): 2.649e-02 +seed 81 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74181 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25819, with src errs 25716, both 25710 +Total good frames: 74175 Total undetected errors: 6 +Bit error rate (on message bits only): 2.558e-02 +seed 82 +Had to place 1 checks in rows unevenly +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73586 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26414, with src errs 26322, both 26307 +Total good frames: 73571 Total undetected errors: 15 +Bit error rate (on message bits only): 2.628e-02 +seed 83 +Eliminated 103 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 24.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74117 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25883, with src errs 25760, both 25728 +Total good frames: 74085 Total undetected errors: 32 +Bit error rate (on message bits only): 2.505e-02 +seed 84 +Eliminated 121 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73171 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26829, with src errs 26710, both 26696 +Total good frames: 73157 Total undetected errors: 14 +Bit error rate (on message bits only): 2.640e-02 +seed 85 +Eliminated 122 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73894 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26106, with src errs 25985, both 25967 +Total good frames: 73876 Total undetected errors: 18 +Bit error rate (on message bits only): 2.563e-02 +seed 86 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72979 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27021, with src errs 26941, both 26896 +Total good frames: 72934 Total undetected errors: 45 +Bit error rate (on message bits only): 2.650e-02 +seed 87 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73459 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26541, with src errs 26442, both 26418 +Total good frames: 73435 Total undetected errors: 24 +Bit error rate (on message bits only): 2.601e-02 +seed 88 +Eliminated 106 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73887 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26113, with src errs 26038, both 26025 +Total good frames: 73874 Total undetected errors: 13 +Bit error rate (on message bits only): 2.598e-02 +seed 89 +Had to place 1 checks in rows unevenly +Eliminated 108 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72501 valid. Average 18.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27499, with src errs 27383, both 27360 +Total good frames: 72478 Total undetected errors: 23 +Bit error rate (on message bits only): 2.627e-02 +seed 90 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73193 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26807, with src errs 26729, both 26712 +Total good frames: 73176 Total undetected errors: 17 +Bit error rate (on message bits only): 2.648e-02 +seed 91 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73725 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26275, with src errs 26174, both 26166 +Total good frames: 73717 Total undetected errors: 8 +Bit error rate (on message bits only): 2.662e-02 +seed 92 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73500 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26500, with src errs 26411, both 26392 +Total good frames: 73481 Total undetected errors: 19 +Bit error rate (on message bits only): 2.615e-02 +seed 93 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73245 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26755, with src errs 26685, both 26661 +Total good frames: 73221 Total undetected errors: 24 +Bit error rate (on message bits only): 2.694e-02 +seed 94 +Eliminated 103 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72691 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27309, with src errs 27199, both 27182 +Total good frames: 72674 Total undetected errors: 17 +Bit error rate (on message bits only): 2.670e-02 +seed 95 +Eliminated 111 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73029 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26971, with src errs 26875, both 26860 +Total good frames: 73014 Total undetected errors: 15 +Bit error rate (on message bits only): 2.649e-02 +seed 96 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73305 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26695, with src errs 26575, both 26564 +Total good frames: 73294 Total undetected errors: 11 +Bit error rate (on message bits only): 2.664e-02 +seed 97 +Eliminated 74 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73807 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26193, with src errs 26103, both 26095 +Total good frames: 73799 Total undetected errors: 8 +Bit error rate (on message bits only): 2.624e-02 +seed 98 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73265 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26735, with src errs 26662, both 26647 +Total good frames: 73250 Total undetected errors: 15 +Bit error rate (on message bits only): 2.670e-02 +seed 99 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73207 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26793, with src errs 26715, both 26708 +Total good frames: 73200 Total undetected errors: 7 +Bit error rate (on message bits only): 2.709e-02 +seed 100 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73471 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26529, with src errs 26417, both 26407 +Total good frames: 73461 Total undetected errors: 10 +Bit error rate (on message bits only): 2.621e-02 +seed 101 +Eliminated 73 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74094 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25906, with src errs 25813, both 25800 +Total good frames: 74081 Total undetected errors: 13 +Bit error rate (on message bits only): 2.588e-02 +seed 102 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73894 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26106, with src errs 26011, both 25994 +Total good frames: 73877 Total undetected errors: 17 +Bit error rate (on message bits only): 2.611e-02 +seed 103 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73676 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26324, with src errs 26224, both 26205 +Total good frames: 73657 Total undetected errors: 19 +Bit error rate (on message bits only): 2.649e-02 +seed 104 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73947 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26053, with src errs 26355, both 25929 +Total good frames: 73521 Total undetected errors: 426 +Bit error rate (on message bits only): 2.565e-02 +seed 105 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73977 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26023, with src errs 25918, both 25902 +Total good frames: 73961 Total undetected errors: 16 +Bit error rate (on message bits only): 2.617e-02 +seed 106 +Had to place 1 checks in rows unevenly +Eliminated 107 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73501 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26499, with src errs 26386, both 26361 +Total good frames: 73476 Total undetected errors: 25 +Bit error rate (on message bits only): 2.630e-02 +seed 107 +Had to place 1 checks in rows unevenly +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73802 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26198, with src errs 26083, both 26042 +Total good frames: 73761 Total undetected errors: 41 +Bit error rate (on message bits only): 2.587e-02 +seed 108 +Eliminated 130 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73941 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26059, with src errs 25959, both 25950 +Total good frames: 73932 Total undetected errors: 9 +Bit error rate (on message bits only): 2.592e-02 +seed 109 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73864 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26136, with src errs 26021, both 26009 +Total good frames: 73852 Total undetected errors: 12 +Bit error rate (on message bits only): 2.570e-02 +seed 110 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 24.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74479 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25521, with src errs 25409, both 25351 +Total good frames: 74421 Total undetected errors: 58 +Bit error rate (on message bits only): 2.504e-02 +seed 111 +Eliminated 110 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73577 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26423, with src errs 26313, both 26276 +Total good frames: 73540 Total undetected errors: 37 +Bit error rate (on message bits only): 2.589e-02 +seed 112 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73811 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26189, with src errs 26062, both 26048 +Total good frames: 73797 Total undetected errors: 14 +Bit error rate (on message bits only): 2.627e-02 +seed 113 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73521 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26479, with src errs 26452, both 26378 +Total good frames: 73447 Total undetected errors: 74 +Bit error rate (on message bits only): 2.657e-02 +seed 114 +Eliminated 139 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72900 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27100, with src errs 27020, both 27009 +Total good frames: 72889 Total undetected errors: 11 +Bit error rate (on message bits only): 2.659e-02 +seed 115 +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74285 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25715, with src errs 25608, both 25597 +Total good frames: 74274 Total undetected errors: 11 +Bit error rate (on message bits only): 2.525e-02 +seed 116 +Eliminated 104 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73439 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26561, with src errs 26475, both 26465 +Total good frames: 73429 Total undetected errors: 10 +Bit error rate (on message bits only): 2.656e-02 +seed 117 +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74062 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25938, with src errs 25822, both 25797 +Total good frames: 74037 Total undetected errors: 25 +Bit error rate (on message bits only): 2.565e-02 +seed 118 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73980 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26020, with src errs 25877, both 25865 +Total good frames: 73968 Total undetected errors: 12 +Bit error rate (on message bits only): 2.561e-02 +seed 119 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73272 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26728, with src errs 26670, both 26644 +Total good frames: 73246 Total undetected errors: 26 +Bit error rate (on message bits only): 2.692e-02 +seed 120 +Eliminated 128 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74040 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25960, with src errs 25857, both 25844 +Total good frames: 74027 Total undetected errors: 13 +Bit error rate (on message bits only): 2.557e-02 +seed 121 +Eliminated 71 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73839 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26161, with src errs 26047, both 26034 +Total good frames: 73826 Total undetected errors: 13 +Bit error rate (on message bits only): 2.592e-02 +seed 122 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72997 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27003, with src errs 26909, both 26890 +Total good frames: 72978 Total undetected errors: 19 +Bit error rate (on message bits only): 2.699e-02 +seed 123 +Eliminated 115 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73440 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26560, with src errs 26450, both 26438 +Total good frames: 73428 Total undetected errors: 12 +Bit error rate (on message bits only): 2.664e-02 +seed 124 +Eliminated 110 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73056 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26944, with src errs 26844, both 26822 +Total good frames: 73034 Total undetected errors: 22 +Bit error rate (on message bits only): 2.641e-02 +seed 125 +Eliminated 111 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72780 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27220, with src errs 27104, both 27087 +Total good frames: 72763 Total undetected errors: 17 +Bit error rate (on message bits only): 2.716e-02 +seed 126 +Eliminated 120 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73044 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26956, with src errs 26893, both 26849 +Total good frames: 73000 Total undetected errors: 44 +Bit error rate (on message bits only): 2.645e-02 +seed 127 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73808 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26192, with src errs 26141, both 26065 +Total good frames: 73732 Total undetected errors: 76 +Bit error rate (on message bits only): 2.573e-02 +seed 128 +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73617 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26383, with src errs 26303, both 26270 +Total good frames: 73584 Total undetected errors: 33 +Bit error rate (on message bits only): 2.590e-02 +seed 129 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73708 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26292, with src errs 26167, both 26159 +Total good frames: 73700 Total undetected errors: 8 +Bit error rate (on message bits only): 2.586e-02 +seed 130 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73995 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26005, with src errs 25881, both 25865 +Total good frames: 73979 Total undetected errors: 16 +Bit error rate (on message bits only): 2.588e-02 +seed 131 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73255 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26745, with src errs 26643, both 26633 +Total good frames: 73245 Total undetected errors: 10 +Bit error rate (on message bits only): 2.663e-02 +seed 132 +Eliminated 104 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73507 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26493, with src errs 26376, both 26363 +Total good frames: 73494 Total undetected errors: 13 +Bit error rate (on message bits only): 2.641e-02 +seed 133 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73869 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26131, with src errs 26023, both 26012 +Total good frames: 73858 Total undetected errors: 11 +Bit error rate (on message bits only): 2.609e-02 +seed 134 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73824 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26176, with src errs 26102, both 26075 +Total good frames: 73797 Total undetected errors: 27 +Bit error rate (on message bits only): 2.603e-02 +seed 135 +Eliminated 138 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73279 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26721, with src errs 26659, both 26637 +Total good frames: 73257 Total undetected errors: 22 +Bit error rate (on message bits only): 2.679e-02 +seed 136 +Eliminated 124 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73163 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26837, with src errs 26760, both 26744 +Total good frames: 73147 Total undetected errors: 16 +Bit error rate (on message bits only): 2.723e-02 +seed 137 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73682 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26318, with src errs 26232, both 26211 +Total good frames: 73661 Total undetected errors: 21 +Bit error rate (on message bits only): 2.663e-02 +seed 138 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73575 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26425, with src errs 26333, both 26318 +Total good frames: 73560 Total undetected errors: 15 +Bit error rate (on message bits only): 2.568e-02 +seed 139 +Eliminated 63 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74124 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25876, with src errs 25779, both 25768 +Total good frames: 74113 Total undetected errors: 11 +Bit error rate (on message bits only): 2.619e-02 +seed 140 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73778 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26222, with src errs 26131, both 26096 +Total good frames: 73743 Total undetected errors: 35 +Bit error rate (on message bits only): 2.581e-02 +seed 141 +Eliminated 69 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73892 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26108, with src errs 25993, both 25981 +Total good frames: 73880 Total undetected errors: 12 +Bit error rate (on message bits only): 2.614e-02 +seed 142 +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73373 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26627, with src errs 26556, both 26539 +Total good frames: 73356 Total undetected errors: 17 +Bit error rate (on message bits only): 2.654e-02 +seed 143 +Had to place 1 checks in rows unevenly +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74120 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25880, with src errs 25777, both 25756 +Total good frames: 74099 Total undetected errors: 21 +Bit error rate (on message bits only): 2.576e-02 +seed 144 +Eliminated 110 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73661 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26339, with src errs 26226, both 26211 +Total good frames: 73646 Total undetected errors: 15 +Bit error rate (on message bits only): 2.576e-02 +seed 145 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 33.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73674 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26326, with src errs 26220, both 26208 +Total good frames: 73662 Total undetected errors: 12 +Bit error rate (on message bits only): 2.621e-02 +seed 146 +Eliminated 117 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73644 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26356, with src errs 26256, both 26245 +Total good frames: 73633 Total undetected errors: 11 +Bit error rate (on message bits only): 2.581e-02 +seed 147 +Eliminated 107 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73170 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26830, with src errs 26711, both 26690 +Total good frames: 73149 Total undetected errors: 21 +Bit error rate (on message bits only): 2.569e-02 +seed 148 +Eliminated 115 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74057 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25943, with src errs 25859, both 25839 +Total good frames: 74037 Total undetected errors: 20 +Bit error rate (on message bits only): 2.584e-02 +seed 149 +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74056 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25944, with src errs 25840, both 25830 +Total good frames: 74046 Total undetected errors: 10 +Bit error rate (on message bits only): 2.605e-02 +seed 150 +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73965 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26035, with src errs 25954, both 25944 +Total good frames: 73955 Total undetected errors: 10 +Bit error rate (on message bits only): 2.594e-02 +seed 151 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73278 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26722, with src errs 26641, both 26630 +Total good frames: 73267 Total undetected errors: 11 +Bit error rate (on message bits only): 2.657e-02 +seed 152 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74000 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26000, with src errs 25958, both 25921 +Total good frames: 73963 Total undetected errors: 37 +Bit error rate (on message bits only): 2.603e-02 +seed 153 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73594 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26406, with src errs 26297, both 26283 +Total good frames: 73580 Total undetected errors: 14 +Bit error rate (on message bits only): 2.626e-02 +seed 154 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73745 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26255, with src errs 26133, both 26098 +Total good frames: 73710 Total undetected errors: 35 +Bit error rate (on message bits only): 2.582e-02 +seed 155 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73512 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26488, with src errs 26405, both 26397 +Total good frames: 73504 Total undetected errors: 8 +Bit error rate (on message bits only): 2.652e-02 +seed 156 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74309 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25691, with src errs 25588, both 25580 +Total good frames: 74301 Total undetected errors: 8 +Bit error rate (on message bits only): 2.576e-02 +seed 157 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73985 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26015, with src errs 25903, both 25898 +Total good frames: 73980 Total undetected errors: 5 +Bit error rate (on message bits only): 2.583e-02 +seed 158 +Eliminated 65 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 23.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73930 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26070, with src errs 26015, both 25934 +Total good frames: 73849 Total undetected errors: 81 +Bit error rate (on message bits only): 2.587e-02 +seed 159 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73621 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26379, with src errs 26297, both 26280 +Total good frames: 73604 Total undetected errors: 17 +Bit error rate (on message bits only): 2.633e-02 +seed 160 +Eliminated 126 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72551 valid. Average 18.7 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27449, with src errs 27356, both 27309 +Total good frames: 72504 Total undetected errors: 47 +Bit error rate (on message bits only): 2.714e-02 +seed 161 +Eliminated 74 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73262 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26738, with src errs 26659, both 26654 +Total good frames: 73257 Total undetected errors: 5 +Bit error rate (on message bits only): 2.704e-02 +seed 162 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73171 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26829, with src errs 26719, both 26713 +Total good frames: 73165 Total undetected errors: 6 +Bit error rate (on message bits only): 2.652e-02 +seed 163 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73495 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26505, with src errs 26412, both 26400 +Total good frames: 73483 Total undetected errors: 12 +Bit error rate (on message bits only): 2.679e-02 +seed 164 +Eliminated 136 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 33.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73277 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26723, with src errs 27095, both 26638 +Total good frames: 72820 Total undetected errors: 457 +Bit error rate (on message bits only): 2.637e-02 +seed 165 +Eliminated 80 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74047 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25953, with src errs 25877, both 25828 +Total good frames: 73998 Total undetected errors: 49 +Bit error rate (on message bits only): 2.579e-02 +seed 166 +Eliminated 72 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73488 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26512, with src errs 26427, both 26420 +Total good frames: 73481 Total undetected errors: 7 +Bit error rate (on message bits only): 2.661e-02 +seed 167 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73842 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26158, with src errs 26071, both 26016 +Total good frames: 73787 Total undetected errors: 55 +Bit error rate (on message bits only): 2.549e-02 +seed 168 +Eliminated 128 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73067 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26933, with src errs 26814, both 26800 +Total good frames: 73053 Total undetected errors: 14 +Bit error rate (on message bits only): 2.632e-02 +seed 169 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73484 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26516, with src errs 26422, both 26412 +Total good frames: 73474 Total undetected errors: 10 +Bit error rate (on message bits only): 2.643e-02 +seed 170 +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73337 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26663, with src errs 26573, both 26558 +Total good frames: 73322 Total undetected errors: 15 +Bit error rate (on message bits only): 2.618e-02 +seed 171 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74535 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25465, with src errs 25329, both 25302 +Total good frames: 74508 Total undetected errors: 27 +Bit error rate (on message bits only): 2.535e-02 +seed 172 +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73481 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26519, with src errs 26438, both 26417 +Total good frames: 73460 Total undetected errors: 21 +Bit error rate (on message bits only): 2.697e-02 +seed 173 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74002 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25998, with src errs 25890, both 25866 +Total good frames: 73978 Total undetected errors: 24 +Bit error rate (on message bits only): 2.508e-02 +seed 174 +Eliminated 104 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73448 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26552, with src errs 26399, both 26388 +Total good frames: 73437 Total undetected errors: 11 +Bit error rate (on message bits only): 2.595e-02 +seed 175 +Eliminated 114 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74016 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25984, with src errs 25883, both 25876 +Total good frames: 74009 Total undetected errors: 7 +Bit error rate (on message bits only): 2.590e-02 +seed 176 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72967 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27033, with src errs 26926, both 26909 +Total good frames: 72950 Total undetected errors: 17 +Bit error rate (on message bits only): 2.667e-02 +seed 177 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74404 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25596, with src errs 25474, both 25463 +Total good frames: 74393 Total undetected errors: 11 +Bit error rate (on message bits only): 2.566e-02 +seed 178 +Eliminated 64 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74184 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25816, with src errs 25707, both 25691 +Total good frames: 74168 Total undetected errors: 16 +Bit error rate (on message bits only): 2.584e-02 +seed 179 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73392 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26608, with src errs 26501, both 26484 +Total good frames: 73375 Total undetected errors: 17 +Bit error rate (on message bits only): 2.634e-02 +seed 180 +Eliminated 127 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73376 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26624, with src errs 26530, both 26506 +Total good frames: 73352 Total undetected errors: 24 +Bit error rate (on message bits only): 2.627e-02 +seed 181 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74338 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25662, with src errs 25562, both 25548 +Total good frames: 74324 Total undetected errors: 14 +Bit error rate (on message bits only): 2.577e-02 +seed 182 +Eliminated 107 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73533 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26467, with src errs 26546, both 26340 +Total good frames: 73327 Total undetected errors: 206 +Bit error rate (on message bits only): 2.634e-02 +seed 183 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73515 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26485, with src errs 26401, both 26381 +Total good frames: 73495 Total undetected errors: 20 +Bit error rate (on message bits only): 2.624e-02 +seed 184 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73794 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26206, with src errs 26107, both 26089 +Total good frames: 73776 Total undetected errors: 18 +Bit error rate (on message bits only): 2.578e-02 +seed 185 +Had to place 1 checks in rows unevenly +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74045 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25955, with src errs 25837, both 25825 +Total good frames: 74033 Total undetected errors: 12 +Bit error rate (on message bits only): 2.602e-02 +seed 186 +Eliminated 106 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73771 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26229, with src errs 26146, both 26117 +Total good frames: 73742 Total undetected errors: 29 +Bit error rate (on message bits only): 2.623e-02 +seed 187 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74216 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25784, with src errs 25664, both 25643 +Total good frames: 74195 Total undetected errors: 21 +Bit error rate (on message bits only): 2.550e-02 +seed 188 +Had to place 1 checks in rows unevenly +Eliminated 126 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73446 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26554, with src errs 26450, both 26437 +Total good frames: 73433 Total undetected errors: 13 +Bit error rate (on message bits only): 2.590e-02 +seed 189 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73537 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26463, with src errs 26393, both 26378 +Total good frames: 73522 Total undetected errors: 15 +Bit error rate (on message bits only): 2.685e-02 +seed 190 +Eliminated 115 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 34.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73028 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26972, with src errs 26881, both 26871 +Total good frames: 73018 Total undetected errors: 10 +Bit error rate (on message bits only): 2.699e-02 +seed 191 +Eliminated 112 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73813 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26187, with src errs 26096, both 26084 +Total good frames: 73801 Total undetected errors: 12 +Bit error rate (on message bits only): 2.588e-02 +seed 192 +Eliminated 111 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72974 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27026, with src errs 26907, both 26895 +Total good frames: 72962 Total undetected errors: 12 +Bit error rate (on message bits only): 2.622e-02 +seed 193 +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73876 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26124, with src errs 26055, both 26009 +Total good frames: 73830 Total undetected errors: 46 +Bit error rate (on message bits only): 2.577e-02 +seed 194 +Eliminated 67 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73873 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26127, with src errs 26026, both 26016 +Total good frames: 73863 Total undetected errors: 10 +Bit error rate (on message bits only): 2.616e-02 +seed 195 +Eliminated 72 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73538 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26462, with src errs 26385, both 26369 +Total good frames: 73522 Total undetected errors: 16 +Bit error rate (on message bits only): 2.638e-02 +seed 196 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73773 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26227, with src errs 26114, both 26102 +Total good frames: 73761 Total undetected errors: 12 +Bit error rate (on message bits only): 2.552e-02 +seed 197 +Had to place 1 checks in rows unevenly +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73455 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26545, with src errs 26458, both 26446 +Total good frames: 73443 Total undetected errors: 12 +Bit error rate (on message bits only): 2.571e-02 +seed 198 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73588 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26412, with src errs 26286, both 26269 +Total good frames: 73571 Total undetected errors: 17 +Bit error rate (on message bits only): 2.540e-02 +seed 199 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74359 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25641, with src errs 25556, both 25503 +Total good frames: 74306 Total undetected errors: 53 +Bit error rate (on message bits only): 2.550e-02 +seed 200 +Eliminated 114 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73140 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26860, with src errs 26761, both 26749 +Total good frames: 73128 Total undetected errors: 12 +Bit error rate (on message bits only): 2.643e-02 +seed 201 +Eliminated 104 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73156 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26844, with src errs 26750, both 26732 +Total good frames: 73138 Total undetected errors: 18 +Bit error rate (on message bits only): 2.669e-02 +seed 202 +Eliminated 140 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73237 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26763, with src errs 26681, both 26665 +Total good frames: 73221 Total undetected errors: 16 +Bit error rate (on message bits only): 2.660e-02 +seed 203 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73860 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26140, with src errs 26041, both 26002 +Total good frames: 73821 Total undetected errors: 39 +Bit error rate (on message bits only): 2.593e-02 +seed 204 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74636 valid. Average 17.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25364, with src errs 25289, both 25245 +Total good frames: 74592 Total undetected errors: 44 +Bit error rate (on message bits only): 2.535e-02 +seed 205 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74326 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25674, with src errs 25584, both 25567 +Total good frames: 74309 Total undetected errors: 17 +Bit error rate (on message bits only): 2.543e-02 +seed 206 +Had to place 1 checks in rows unevenly +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73558 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26442, with src errs 26342, both 26330 +Total good frames: 73546 Total undetected errors: 12 +Bit error rate (on message bits only): 2.609e-02 +seed 207 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73516 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26484, with src errs 26375, both 26356 +Total good frames: 73497 Total undetected errors: 19 +Bit error rate (on message bits only): 2.669e-02 +seed 208 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73464 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26536, with src errs 26435, both 26420 +Total good frames: 73449 Total undetected errors: 15 +Bit error rate (on message bits only): 2.649e-02 +seed 209 +Had to place 1 checks in rows unevenly +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73301 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26699, with src errs 26580, both 26554 +Total good frames: 73275 Total undetected errors: 26 +Bit error rate (on message bits only): 2.605e-02 +seed 210 +Eliminated 80 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74287 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25713, with src errs 25609, both 25588 +Total good frames: 74266 Total undetected errors: 21 +Bit error rate (on message bits only): 2.561e-02 +seed 211 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74212 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25788, with src errs 25675, both 25655 +Total good frames: 74192 Total undetected errors: 20 +Bit error rate (on message bits only): 2.594e-02 +seed 212 +Eliminated 112 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73871 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26129, with src errs 26017, both 26004 +Total good frames: 73858 Total undetected errors: 13 +Bit error rate (on message bits only): 2.570e-02 +seed 213 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73293 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26707, with src errs 26606, both 26585 +Total good frames: 73272 Total undetected errors: 21 +Bit error rate (on message bits only): 2.658e-02 +seed 214 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73676 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26324, with src errs 26232, both 26211 +Total good frames: 73655 Total undetected errors: 21 +Bit error rate (on message bits only): 2.617e-02 +seed 215 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73688 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26312, with src errs 26206, both 26190 +Total good frames: 73672 Total undetected errors: 16 +Bit error rate (on message bits only): 2.589e-02 +seed 216 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73907 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26093, with src errs 26002, both 25992 +Total good frames: 73897 Total undetected errors: 10 +Bit error rate (on message bits only): 2.635e-02 +seed 217 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73423 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26577, with src errs 26485, both 26472 +Total good frames: 73410 Total undetected errors: 13 +Bit error rate (on message bits only): 2.653e-02 +seed 218 +Eliminated 139 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73822 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26178, with src errs 26102, both 26091 +Total good frames: 73811 Total undetected errors: 11 +Bit error rate (on message bits only): 2.576e-02 +seed 219 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74060 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25940, with src errs 25850, both 25836 +Total good frames: 74046 Total undetected errors: 14 +Bit error rate (on message bits only): 2.609e-02 +seed 220 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73869 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26131, with src errs 26056, both 26035 +Total good frames: 73848 Total undetected errors: 21 +Bit error rate (on message bits only): 2.644e-02 +seed 221 +Eliminated 119 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72043 valid. Average 19.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27957, with src errs 27877, both 27855 +Total good frames: 72021 Total undetected errors: 22 +Bit error rate (on message bits only): 2.735e-02 +seed 222 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73434 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26566, with src errs 26485, both 26469 +Total good frames: 73418 Total undetected errors: 16 +Bit error rate (on message bits only): 2.666e-02 +seed 223 +Eliminated 106 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72596 valid. Average 18.7 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27404, with src errs 27288, both 27271 +Total good frames: 72579 Total undetected errors: 17 +Bit error rate (on message bits only): 2.690e-02 +seed 224 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73460 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26540, with src errs 26439, both 26424 +Total good frames: 73445 Total undetected errors: 15 +Bit error rate (on message bits only): 2.652e-02 +seed 225 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73317 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26683, with src errs 26607, both 26600 +Total good frames: 73310 Total undetected errors: 7 +Bit error rate (on message bits only): 2.627e-02 +seed 226 +Eliminated 69 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73690 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26310, with src errs 26211, both 26203 +Total good frames: 73682 Total undetected errors: 8 +Bit error rate (on message bits only): 2.660e-02 +seed 227 +Eliminated 104 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73292 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26708, with src errs 26623, both 26611 +Total good frames: 73280 Total undetected errors: 12 +Bit error rate (on message bits only): 2.672e-02 +seed 228 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73501 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26499, with src errs 26425, both 26412 +Total good frames: 73488 Total undetected errors: 13 +Bit error rate (on message bits only): 2.614e-02 +seed 229 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73629 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26371, with src errs 26309, both 26276 +Total good frames: 73596 Total undetected errors: 33 +Bit error rate (on message bits only): 2.601e-02 +seed 230 +Eliminated 108 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73233 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26767, with src errs 26668, both 26656 +Total good frames: 73221 Total undetected errors: 12 +Bit error rate (on message bits only): 2.683e-02 +seed 231 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73520 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26480, with src errs 26382, both 26375 +Total good frames: 73513 Total undetected errors: 7 +Bit error rate (on message bits only): 2.672e-02 +seed 232 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73768 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26232, with src errs 26136, both 26123 +Total good frames: 73755 Total undetected errors: 13 +Bit error rate (on message bits only): 2.609e-02 +seed 233 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73844 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26156, with src errs 26063, both 26021 +Total good frames: 73802 Total undetected errors: 42 +Bit error rate (on message bits only): 2.615e-02 +seed 234 +Eliminated 122 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73291 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26709, with src errs 26653, both 26567 +Total good frames: 73205 Total undetected errors: 86 +Bit error rate (on message bits only): 2.602e-02 +seed 235 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72918 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27082, with src errs 26999, both 26977 +Total good frames: 72896 Total undetected errors: 22 +Bit error rate (on message bits only): 2.682e-02 +seed 236 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73925 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26075, with src errs 25967, both 25953 +Total good frames: 73911 Total undetected errors: 14 +Bit error rate (on message bits only): 2.558e-02 +seed 237 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73831 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26169, with src errs 26060, both 26052 +Total good frames: 73823 Total undetected errors: 8 +Bit error rate (on message bits only): 2.597e-02 +seed 238 +Had to place 1 checks in rows unevenly +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73736 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26264, with src errs 26160, both 26149 +Total good frames: 73725 Total undetected errors: 11 +Bit error rate (on message bits only): 2.558e-02 +seed 239 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73632 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26368, with src errs 26289, both 26280 +Total good frames: 73623 Total undetected errors: 9 +Bit error rate (on message bits only): 2.676e-02 +seed 240 +Eliminated 80 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73269 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26731, with src errs 26656, both 26639 +Total good frames: 73252 Total undetected errors: 17 +Bit error rate (on message bits only): 2.662e-02 +seed 241 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73319 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26681, with src errs 26582, both 26561 +Total good frames: 73298 Total undetected errors: 21 +Bit error rate (on message bits only): 2.651e-02 +seed 242 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73029 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26971, with src errs 26897, both 26885 +Total good frames: 73017 Total undetected errors: 12 +Bit error rate (on message bits only): 2.719e-02 +seed 243 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73497 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26503, with src errs 26395, both 26377 +Total good frames: 73479 Total undetected errors: 18 +Bit error rate (on message bits only): 2.627e-02 +seed 244 +Eliminated 70 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73816 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26184, with src errs 26090, both 26079 +Total good frames: 73805 Total undetected errors: 11 +Bit error rate (on message bits only): 2.607e-02 +seed 245 +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73157 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26843, with src errs 26739, both 26731 +Total good frames: 73149 Total undetected errors: 8 +Bit error rate (on message bits only): 2.635e-02 +seed 246 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73740 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26260, with src errs 26137, both 26126 +Total good frames: 73729 Total undetected errors: 11 +Bit error rate (on message bits only): 2.565e-02 +seed 247 +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73778 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26222, with src errs 26122, both 26116 +Total good frames: 73772 Total undetected errors: 6 +Bit error rate (on message bits only): 2.608e-02 +seed 248 +Eliminated 107 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73671 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26329, with src errs 26243, both 26227 +Total good frames: 73655 Total undetected errors: 16 +Bit error rate (on message bits only): 2.612e-02 +seed 249 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73629 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26371, with src errs 26310, both 26286 +Total good frames: 73605 Total undetected errors: 24 +Bit error rate (on message bits only): 2.640e-02 +seed 250 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73592 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26408, with src errs 26315, both 26299 +Total good frames: 73576 Total undetected errors: 16 +Bit error rate (on message bits only): 2.605e-02 +seed 251 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74016 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25984, with src errs 25883, both 25868 +Total good frames: 74001 Total undetected errors: 15 +Bit error rate (on message bits only): 2.588e-02 +seed 252 +Eliminated 109 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74432 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25568, with src errs 25477, both 25454 +Total good frames: 74409 Total undetected errors: 23 +Bit error rate (on message bits only): 2.515e-02 +seed 253 +Eliminated 70 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73745 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26255, with src errs 26192, both 26186 +Total good frames: 73739 Total undetected errors: 6 +Bit error rate (on message bits only): 2.631e-02 +seed 254 +Eliminated 76 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73532 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26468, with src errs 26361, both 26342 +Total good frames: 73513 Total undetected errors: 19 +Bit error rate (on message bits only): 2.634e-02 +seed 255 +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73553 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26447, with src errs 26365, both 26358 +Total good frames: 73546 Total undetected errors: 7 +Bit error rate (on message bits only): 2.659e-02 +seed 256 +Eliminated 113 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73593 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26407, with src errs 26322, both 26309 +Total good frames: 73580 Total undetected errors: 13 +Bit error rate (on message bits only): 2.604e-02 +seed 257 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73885 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26115, with src errs 26038, both 26002 +Total good frames: 73849 Total undetected errors: 36 +Bit error rate (on message bits only): 2.620e-02 +seed 258 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73060 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26940, with src errs 26855, both 26825 +Total good frames: 73030 Total undetected errors: 30 +Bit error rate (on message bits only): 2.690e-02 +seed 259 +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73183 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26817, with src errs 26745, both 26731 +Total good frames: 73169 Total undetected errors: 14 +Bit error rate (on message bits only): 2.682e-02 +seed 260 +Eliminated 111 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73924 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26076, with src errs 25977, both 25965 +Total good frames: 73912 Total undetected errors: 12 +Bit error rate (on message bits only): 2.580e-02 +seed 261 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73988 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26012, with src errs 25939, both 25928 +Total good frames: 73977 Total undetected errors: 11 +Bit error rate (on message bits only): 2.645e-02 +seed 262 +Had to place 1 checks in rows unevenly +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74323 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25677, with src errs 25515, both 25495 +Total good frames: 74303 Total undetected errors: 20 +Bit error rate (on message bits only): 2.509e-02 +seed 263 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73148 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26852, with src errs 26761, both 26736 +Total good frames: 73123 Total undetected errors: 25 +Bit error rate (on message bits only): 2.608e-02 +seed 264 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73636 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26364, with src errs 26259, both 26243 +Total good frames: 73620 Total undetected errors: 16 +Bit error rate (on message bits only): 2.616e-02 +seed 265 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74100 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25900, with src errs 25812, both 25789 +Total good frames: 74077 Total undetected errors: 23 +Bit error rate (on message bits only): 2.621e-02 +seed 266 +Eliminated 72 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73332 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26668, with src errs 26584, both 26572 +Total good frames: 73320 Total undetected errors: 12 +Bit error rate (on message bits only): 2.689e-02 +seed 267 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73742 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26258, with src errs 26163, both 26142 +Total good frames: 73721 Total undetected errors: 21 +Bit error rate (on message bits only): 2.598e-02 +seed 268 +Had to place 1 checks in rows unevenly +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73628 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26372, with src errs 26282, both 26274 +Total good frames: 73620 Total undetected errors: 8 +Bit error rate (on message bits only): 2.667e-02 +seed 269 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73743 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26257, with src errs 26172, both 26160 +Total good frames: 73731 Total undetected errors: 12 +Bit error rate (on message bits only): 2.606e-02 +seed 270 +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74280 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25720, with src errs 25600, both 25587 +Total good frames: 74267 Total undetected errors: 13 +Bit error rate (on message bits only): 2.556e-02 +seed 271 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73246 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26754, with src errs 27053, both 26656 +Total good frames: 72849 Total undetected errors: 397 +Bit error rate (on message bits only): 2.647e-02 +seed 272 +Eliminated 119 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73488 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26512, with src errs 26420, both 26410 +Total good frames: 73478 Total undetected errors: 10 +Bit error rate (on message bits only): 2.626e-02 +seed 273 +Eliminated 110 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73705 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26295, with src errs 26222, both 26183 +Total good frames: 73666 Total undetected errors: 39 +Bit error rate (on message bits only): 2.570e-02 +seed 274 +Eliminated 111 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73469 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26531, with src errs 26431, both 26415 +Total good frames: 73453 Total undetected errors: 16 +Bit error rate (on message bits only): 2.635e-02 +seed 275 +Eliminated 62 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73912 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26088, with src errs 26005, both 25973 +Total good frames: 73880 Total undetected errors: 32 +Bit error rate (on message bits only): 2.596e-02 +seed 276 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73924 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26076, with src errs 25965, both 25955 +Total good frames: 73914 Total undetected errors: 10 +Bit error rate (on message bits only): 2.584e-02 +seed 277 +Eliminated 68 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73912 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26088, with src errs 25995, both 25979 +Total good frames: 73896 Total undetected errors: 16 +Bit error rate (on message bits only): 2.639e-02 +seed 278 +Eliminated 64 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73811 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26189, with src errs 26137, both 26086 +Total good frames: 73760 Total undetected errors: 51 +Bit error rate (on message bits only): 2.643e-02 +seed 279 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73456 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26544, with src errs 26416, both 26407 +Total good frames: 73447 Total undetected errors: 9 +Bit error rate (on message bits only): 2.631e-02 +seed 280 +Eliminated 117 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73081 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26919, with src errs 26802, both 26792 +Total good frames: 73071 Total undetected errors: 10 +Bit error rate (on message bits only): 2.659e-02 +seed 281 +Had to place 1 checks in rows unevenly +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74117 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25883, with src errs 25787, both 25776 +Total good frames: 74106 Total undetected errors: 11 +Bit error rate (on message bits only): 2.564e-02 +seed 282 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73856 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26144, with src errs 26050, both 26027 +Total good frames: 73833 Total undetected errors: 23 +Bit error rate (on message bits only): 2.568e-02 +seed 283 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73590 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26410, with src errs 26326, both 26304 +Total good frames: 73568 Total undetected errors: 22 +Bit error rate (on message bits only): 2.630e-02 +seed 284 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73538 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26462, with src errs 26377, both 26354 +Total good frames: 73515 Total undetected errors: 23 +Bit error rate (on message bits only): 2.626e-02 +seed 285 +Eliminated 121 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74091 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25909, with src errs 25767, both 25750 +Total good frames: 74074 Total undetected errors: 17 +Bit error rate (on message bits only): 2.525e-02 +seed 286 +Eliminated 109 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73424 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26576, with src errs 26424, both 26417 +Total good frames: 73417 Total undetected errors: 7 +Bit error rate (on message bits only): 2.603e-02 +seed 287 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73909 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26091, with src errs 25993, both 25984 +Total good frames: 73900 Total undetected errors: 9 +Bit error rate (on message bits only): 2.584e-02 +seed 288 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74153 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25847, with src errs 25756, both 25748 +Total good frames: 74145 Total undetected errors: 8 +Bit error rate (on message bits only): 2.613e-02 +seed 289 +Eliminated 111 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73501 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26499, with src errs 26424, both 26405 +Total good frames: 73482 Total undetected errors: 19 +Bit error rate (on message bits only): 2.597e-02 +seed 290 +Had to place 1 checks in rows unevenly +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74153 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25847, with src errs 25736, both 25726 +Total good frames: 74143 Total undetected errors: 10 +Bit error rate (on message bits only): 2.568e-02 +seed 291 +Eliminated 103 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73703 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26297, with src errs 26291, both 26191 +Total good frames: 73603 Total undetected errors: 100 +Bit error rate (on message bits only): 2.628e-02 +seed 292 +Eliminated 119 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73808 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26192, with src errs 26101, both 26082 +Total good frames: 73789 Total undetected errors: 19 +Bit error rate (on message bits only): 2.624e-02 +seed 293 +Eliminated 117 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72853 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27147, with src errs 27062, both 26998 +Total good frames: 72789 Total undetected errors: 64 +Bit error rate (on message bits only): 2.626e-02 +seed 294 +Eliminated 110 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73455 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26545, with src errs 26512, both 26438 +Total good frames: 73381 Total undetected errors: 74 +Bit error rate (on message bits only): 2.603e-02 +seed 295 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74229 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25771, with src errs 25678, both 25665 +Total good frames: 74216 Total undetected errors: 13 +Bit error rate (on message bits only): 2.574e-02 +seed 296 +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72624 valid. Average 18.7 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27376, with src errs 27292, both 27289 +Total good frames: 72621 Total undetected errors: 3 +Bit error rate (on message bits only): 2.710e-02 +seed 297 +Eliminated 117 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73225 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26775, with src errs 26683, both 26675 +Total good frames: 73217 Total undetected errors: 8 +Bit error rate (on message bits only): 2.643e-02 +seed 298 +Had to place 1 checks in rows unevenly +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73838 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26162, with src errs 26040, both 26028 +Total good frames: 73826 Total undetected errors: 12 +Bit error rate (on message bits only): 2.608e-02 +seed 299 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73806 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26194, with src errs 26109, both 26089 +Total good frames: 73786 Total undetected errors: 20 +Bit error rate (on message bits only): 2.594e-02 +seed 300 +Eliminated 107 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73474 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26526, with src errs 26469, both 26458 +Total good frames: 73463 Total undetected errors: 11 +Bit error rate (on message bits only): 2.615e-02 +seed 301 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73407 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26593, with src errs 26488, both 26479 +Total good frames: 73398 Total undetected errors: 9 +Bit error rate (on message bits only): 2.624e-02 +seed 302 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73787 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26213, with src errs 26141, both 26123 +Total good frames: 73769 Total undetected errors: 18 +Bit error rate (on message bits only): 2.609e-02 +seed 303 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73976 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26024, with src errs 25927, both 25910 +Total good frames: 73959 Total undetected errors: 17 +Bit error rate (on message bits only): 2.620e-02 +seed 304 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73654 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26346, with src errs 26223, both 26203 +Total good frames: 73634 Total undetected errors: 20 +Bit error rate (on message bits only): 2.580e-02 +seed 305 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73386 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26614, with src errs 26517, both 26510 +Total good frames: 73379 Total undetected errors: 7 +Bit error rate (on message bits only): 2.622e-02 +seed 306 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74098 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25902, with src errs 25787, both 25768 +Total good frames: 74079 Total undetected errors: 19 +Bit error rate (on message bits only): 2.548e-02 +seed 307 +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73643 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26357, with src errs 26229, both 26212 +Total good frames: 73626 Total undetected errors: 17 +Bit error rate (on message bits only): 2.616e-02 +seed 308 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73533 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26467, with src errs 26347, both 26329 +Total good frames: 73515 Total undetected errors: 18 +Bit error rate (on message bits only): 2.646e-02 +seed 309 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73596 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26404, with src errs 26306, both 26287 +Total good frames: 73577 Total undetected errors: 19 +Bit error rate (on message bits only): 2.591e-02 +seed 310 +Had to place 1 checks in rows unevenly +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74001 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25999, with src errs 25943, both 25886 +Total good frames: 73944 Total undetected errors: 57 +Bit error rate (on message bits only): 2.566e-02 +seed 311 +Eliminated 107 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73431 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26569, with src errs 26481, both 26470 +Total good frames: 73420 Total undetected errors: 11 +Bit error rate (on message bits only): 2.656e-02 +seed 312 +Eliminated 73 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73720 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26280, with src errs 26182, both 26164 +Total good frames: 73702 Total undetected errors: 18 +Bit error rate (on message bits only): 2.615e-02 +seed 313 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73952 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26048, with src errs 25938, both 25918 +Total good frames: 73932 Total undetected errors: 20 +Bit error rate (on message bits only): 2.585e-02 +seed 314 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73526 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26474, with src errs 26410, both 26378 +Total good frames: 73494 Total undetected errors: 32 +Bit error rate (on message bits only): 2.619e-02 +seed 315 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73462 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26538, with src errs 26417, both 26403 +Total good frames: 73448 Total undetected errors: 14 +Bit error rate (on message bits only): 2.652e-02 +seed 316 +Eliminated 69 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74168 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25832, with src errs 25804, both 25730 +Total good frames: 74094 Total undetected errors: 74 +Bit error rate (on message bits only): 2.604e-02 +seed 317 +Had to place 1 checks in rows unevenly +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73717 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26283, with src errs 26210, both 26195 +Total good frames: 73702 Total undetected errors: 15 +Bit error rate (on message bits only): 2.643e-02 +seed 318 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73361 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26639, with src errs 26533, both 26524 +Total good frames: 73352 Total undetected errors: 9 +Bit error rate (on message bits only): 2.616e-02 +seed 319 +Eliminated 70 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73991 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26009, with src errs 25916, both 25897 +Total good frames: 73972 Total undetected errors: 19 +Bit error rate (on message bits only): 2.559e-02 +seed 320 +Eliminated 67 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74057 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25943, with src errs 25834, both 25824 +Total good frames: 74047 Total undetected errors: 10 +Bit error rate (on message bits only): 2.579e-02 +seed 321 +Eliminated 65 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74006 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25994, with src errs 25895, both 25880 +Total good frames: 73991 Total undetected errors: 15 +Bit error rate (on message bits only): 2.581e-02 +seed 322 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73550 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26450, with src errs 26360, both 26351 +Total good frames: 73541 Total undetected errors: 9 +Bit error rate (on message bits only): 2.651e-02 +seed 323 +Eliminated 106 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73633 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26367, with src errs 26274, both 26252 +Total good frames: 73611 Total undetected errors: 22 +Bit error rate (on message bits only): 2.628e-02 +seed 324 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74758 valid. Average 17.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25242, with src errs 25130, both 25104 +Total good frames: 74732 Total undetected errors: 26 +Bit error rate (on message bits only): 2.478e-02 +seed 325 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73689 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26311, with src errs 26224, both 26214 +Total good frames: 73679 Total undetected errors: 10 +Bit error rate (on message bits only): 2.632e-02 +seed 326 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73661 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26339, with src errs 26259, both 26247 +Total good frames: 73649 Total undetected errors: 12 +Bit error rate (on message bits only): 2.587e-02 +seed 327 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73717 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26283, with src errs 26192, both 26184 +Total good frames: 73709 Total undetected errors: 8 +Bit error rate (on message bits only): 2.678e-02 +seed 328 +Eliminated 110 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74054 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25946, with src errs 25842, both 25822 +Total good frames: 74034 Total undetected errors: 20 +Bit error rate (on message bits only): 2.538e-02 +seed 329 +Eliminated 69 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74017 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25983, with src errs 25881, both 25870 +Total good frames: 74006 Total undetected errors: 11 +Bit error rate (on message bits only): 2.604e-02 +seed 330 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74146 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25854, with src errs 25735, both 25715 +Total good frames: 74126 Total undetected errors: 20 +Bit error rate (on message bits only): 2.567e-02 +seed 331 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73332 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26668, with src errs 26557, both 26535 +Total good frames: 73310 Total undetected errors: 22 +Bit error rate (on message bits only): 2.631e-02 +seed 332 +Eliminated 116 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74252 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25748, with src errs 25628, both 25617 +Total good frames: 74241 Total undetected errors: 11 +Bit error rate (on message bits only): 2.541e-02 +seed 333 +Eliminated 70 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73414 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26586, with src errs 26469, both 26457 +Total good frames: 73402 Total undetected errors: 12 +Bit error rate (on message bits only): 2.624e-02 +seed 334 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73516 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26484, with src errs 26404, both 26395 +Total good frames: 73507 Total undetected errors: 9 +Bit error rate (on message bits only): 2.644e-02 +seed 335 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74587 valid. Average 17.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25413, with src errs 25329, both 25314 +Total good frames: 74572 Total undetected errors: 15 +Bit error rate (on message bits only): 2.537e-02 +seed 336 +Eliminated 112 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73227 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26773, with src errs 26674, both 26660 +Total good frames: 73213 Total undetected errors: 14 +Bit error rate (on message bits only): 2.641e-02 +seed 337 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73534 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26466, with src errs 26359, both 26339 +Total good frames: 73514 Total undetected errors: 20 +Bit error rate (on message bits only): 2.573e-02 +seed 338 +Had to place 1 checks in rows unevenly +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73942 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26058, with src errs 25976, both 25966 +Total good frames: 73932 Total undetected errors: 10 +Bit error rate (on message bits only): 2.640e-02 +seed 339 +Had to place 1 checks in rows unevenly +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73986 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26014, with src errs 25895, both 25888 +Total good frames: 73979 Total undetected errors: 7 +Bit error rate (on message bits only): 2.564e-02 +seed 340 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73472 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26528, with src errs 26462, both 26444 +Total good frames: 73454 Total undetected errors: 18 +Bit error rate (on message bits only): 2.652e-02 +seed 341 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73421 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26579, with src errs 26483, both 26473 +Total good frames: 73411 Total undetected errors: 10 +Bit error rate (on message bits only): 2.681e-02 +seed 342 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73695 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26305, with src errs 26224, both 26212 +Total good frames: 73683 Total undetected errors: 12 +Bit error rate (on message bits only): 2.622e-02 +seed 343 +Eliminated 115 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73424 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26576, with src errs 26459, both 26445 +Total good frames: 73410 Total undetected errors: 14 +Bit error rate (on message bits only): 2.607e-02 +seed 344 +Eliminated 104 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72930 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27070, with src errs 26961, both 26951 +Total good frames: 72920 Total undetected errors: 10 +Bit error rate (on message bits only): 2.707e-02 +seed 345 +Eliminated 104 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73564 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26436, with src errs 26328, both 26309 +Total good frames: 73545 Total undetected errors: 19 +Bit error rate (on message bits only): 2.557e-02 +seed 346 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73871 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26129, with src errs 26031, both 26014 +Total good frames: 73854 Total undetected errors: 17 +Bit error rate (on message bits only): 2.613e-02 +seed 347 +Eliminated 67 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74017 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25983, with src errs 25862, both 25855 +Total good frames: 74010 Total undetected errors: 7 +Bit error rate (on message bits only): 2.611e-02 +seed 348 +Eliminated 70 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73589 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26411, with src errs 26351, both 26334 +Total good frames: 73572 Total undetected errors: 17 +Bit error rate (on message bits only): 2.654e-02 +seed 349 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73290 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26710, with src errs 26608, both 26596 +Total good frames: 73278 Total undetected errors: 12 +Bit error rate (on message bits only): 2.642e-02 +seed 350 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73883 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26117, with src errs 26012, both 26000 +Total good frames: 73871 Total undetected errors: 12 +Bit error rate (on message bits only): 2.548e-02 +seed 351 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74307 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25693, with src errs 25549, both 25541 +Total good frames: 74299 Total undetected errors: 8 +Bit error rate (on message bits only): 2.553e-02 +seed 352 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73502 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26498, with src errs 26415, both 26379 +Total good frames: 73466 Total undetected errors: 36 +Bit error rate (on message bits only): 2.634e-02 +seed 353 +Eliminated 121 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73317 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26683, with src errs 26609, both 26589 +Total good frames: 73297 Total undetected errors: 20 +Bit error rate (on message bits only): 2.656e-02 +seed 354 +Eliminated 146 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72194 valid. Average 18.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27806, with src errs 27789, both 27710 +Total good frames: 72115 Total undetected errors: 79 +Bit error rate (on message bits only): 2.760e-02 +seed 355 +Eliminated 74 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73484 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26516, with src errs 26434, both 26422 +Total good frames: 73472 Total undetected errors: 12 +Bit error rate (on message bits only): 2.663e-02 +seed 356 +Eliminated 113 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73627 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26373, with src errs 26282, both 26244 +Total good frames: 73589 Total undetected errors: 38 +Bit error rate (on message bits only): 2.565e-02 +seed 357 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74528 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25472, with src errs 25395, both 25358 +Total good frames: 74491 Total undetected errors: 37 +Bit error rate (on message bits only): 2.534e-02 +seed 358 +Had to place 1 checks in rows unevenly +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73134 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26866, with src errs 26729, both 26707 +Total good frames: 73112 Total undetected errors: 22 +Bit error rate (on message bits only): 2.633e-02 +seed 359 +Had to place 1 checks in rows unevenly +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73463 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26537, with src errs 26463, both 26426 +Total good frames: 73426 Total undetected errors: 37 +Bit error rate (on message bits only): 2.624e-02 +seed 360 +Eliminated 114 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73310 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26690, with src errs 26616, both 26595 +Total good frames: 73289 Total undetected errors: 21 +Bit error rate (on message bits only): 2.652e-02 +seed 361 +Eliminated 129 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72886 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27114, with src errs 27013, both 26992 +Total good frames: 72865 Total undetected errors: 21 +Bit error rate (on message bits only): 2.649e-02 +seed 362 +Eliminated 68 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73845 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26155, with src errs 26069, both 26059 +Total good frames: 73835 Total undetected errors: 10 +Bit error rate (on message bits only): 2.611e-02 +seed 363 +Had to place 1 checks in rows unevenly +Eliminated 116 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73156 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26844, with src errs 26763, both 26749 +Total good frames: 73142 Total undetected errors: 14 +Bit error rate (on message bits only): 2.701e-02 +seed 364 +Eliminated 72 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74101 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25899, with src errs 25818, both 25770 +Total good frames: 74053 Total undetected errors: 48 +Bit error rate (on message bits only): 2.555e-02 +seed 365 +Eliminated 71 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73683 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26317, with src errs 26394, both 26210 +Total good frames: 73499 Total undetected errors: 184 +Bit error rate (on message bits only): 2.650e-02 +seed 366 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73837 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26163, with src errs 26030, both 26004 +Total good frames: 73811 Total undetected errors: 26 +Bit error rate (on message bits only): 2.604e-02 +seed 367 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73799 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26201, with src errs 26052, both 26039 +Total good frames: 73786 Total undetected errors: 13 +Bit error rate (on message bits only): 2.564e-02 +seed 368 +Eliminated 64 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74073 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25927, with src errs 25852, both 25809 +Total good frames: 74030 Total undetected errors: 43 +Bit error rate (on message bits only): 2.609e-02 +seed 369 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74146 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25854, with src errs 25773, both 25764 +Total good frames: 74137 Total undetected errors: 9 +Bit error rate (on message bits only): 2.600e-02 +seed 370 +Had to place 1 checks in rows unevenly +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73696 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26304, with src errs 26227, both 26204 +Total good frames: 73673 Total undetected errors: 23 +Bit error rate (on message bits only): 2.607e-02 +seed 371 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74132 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25868, with src errs 25780, both 25764 +Total good frames: 74116 Total undetected errors: 16 +Bit error rate (on message bits only): 2.554e-02 +seed 372 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73925 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26075, with src errs 25991, both 25980 +Total good frames: 73914 Total undetected errors: 11 +Bit error rate (on message bits only): 2.631e-02 +seed 373 +Eliminated 123 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73023 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26977, with src errs 26857, both 26843 +Total good frames: 73009 Total undetected errors: 14 +Bit error rate (on message bits only): 2.574e-02 +seed 374 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73394 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26606, with src errs 26453, both 26439 +Total good frames: 73380 Total undetected errors: 14 +Bit error rate (on message bits only): 2.535e-02 +seed 375 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72854 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27146, with src errs 27020, both 27006 +Total good frames: 72840 Total undetected errors: 14 +Bit error rate (on message bits only): 2.650e-02 +seed 376 +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73838 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26162, with src errs 26087, both 26080 +Total good frames: 73831 Total undetected errors: 7 +Bit error rate (on message bits only): 2.634e-02 +seed 377 +Eliminated 109 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73147 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26853, with src errs 26764, both 26752 +Total good frames: 73135 Total undetected errors: 12 +Bit error rate (on message bits only): 2.656e-02 +seed 378 +Had to place 1 checks in rows unevenly +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73510 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26490, with src errs 26415, both 26403 +Total good frames: 73498 Total undetected errors: 12 +Bit error rate (on message bits only): 2.627e-02 +seed 379 +Eliminated 70 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74635 valid. Average 17.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25365, with src errs 25259, both 25242 +Total good frames: 74618 Total undetected errors: 17 +Bit error rate (on message bits only): 2.529e-02 +seed 380 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73348 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26652, with src errs 26548, both 26541 +Total good frames: 73341 Total undetected errors: 7 +Bit error rate (on message bits only): 2.636e-02 +seed 381 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74255 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25745, with src errs 25566, both 25555 +Total good frames: 74244 Total undetected errors: 11 +Bit error rate (on message bits only): 2.503e-02 +seed 382 +Eliminated 71 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73702 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26298, with src errs 26224, both 26209 +Total good frames: 73687 Total undetected errors: 15 +Bit error rate (on message bits only): 2.692e-02 +seed 383 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74058 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25942, with src errs 25833, both 25818 +Total good frames: 74043 Total undetected errors: 15 +Bit error rate (on message bits only): 2.591e-02 +seed 384 +Eliminated 104 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73403 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26597, with src errs 26515, both 26508 +Total good frames: 73396 Total undetected errors: 7 +Bit error rate (on message bits only): 2.630e-02 +seed 385 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73773 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26227, with src errs 26135, both 26129 +Total good frames: 73767 Total undetected errors: 6 +Bit error rate (on message bits only): 2.637e-02 +seed 386 +Had to place 1 checks in rows unevenly +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73790 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26210, with src errs 26143, both 26126 +Total good frames: 73773 Total undetected errors: 17 +Bit error rate (on message bits only): 2.614e-02 +seed 387 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73877 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26123, with src errs 26041, both 26029 +Total good frames: 73865 Total undetected errors: 12 +Bit error rate (on message bits only): 2.588e-02 +seed 388 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73692 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26308, with src errs 26240, both 26226 +Total good frames: 73678 Total undetected errors: 14 +Bit error rate (on message bits only): 2.656e-02 +seed 389 +Eliminated 55 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73954 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26046, with src errs 25935, both 25919 +Total good frames: 73938 Total undetected errors: 16 +Bit error rate (on message bits only): 2.630e-02 +seed 390 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73691 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26309, with src errs 26205, both 26185 +Total good frames: 73671 Total undetected errors: 20 +Bit error rate (on message bits only): 2.594e-02 +seed 391 +Eliminated 59 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73569 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26431, with src errs 26343, both 26335 +Total good frames: 73561 Total undetected errors: 8 +Bit error rate (on message bits only): 2.684e-02 +seed 392 +Eliminated 183 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72317 valid. Average 18.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27683, with src errs 27575, both 27563 +Total good frames: 72305 Total undetected errors: 12 +Bit error rate (on message bits only): 2.682e-02 +seed 393 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73516 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26484, with src errs 26393, both 26382 +Total good frames: 73505 Total undetected errors: 11 +Bit error rate (on message bits only): 2.557e-02 +seed 394 +Eliminated 129 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72842 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27158, with src errs 27007, both 26989 +Total good frames: 72824 Total undetected errors: 18 +Bit error rate (on message bits only): 2.629e-02 +seed 395 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73932 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26068, with src errs 25964, both 25955 +Total good frames: 73923 Total undetected errors: 9 +Bit error rate (on message bits only): 2.576e-02 +seed 396 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73677 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26323, with src errs 26227, both 26215 +Total good frames: 73665 Total undetected errors: 12 +Bit error rate (on message bits only): 2.632e-02 +seed 397 +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73911 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26089, with src errs 26010, both 26001 +Total good frames: 73902 Total undetected errors: 9 +Bit error rate (on message bits only): 2.633e-02 +seed 398 +Had to place 1 checks in rows unevenly +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72917 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27083, with src errs 26971, both 26962 +Total good frames: 72908 Total undetected errors: 9 +Bit error rate (on message bits only): 2.677e-02 +seed 399 +Had to place 1 checks in rows unevenly +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73253 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26747, with src errs 26627, both 26608 +Total good frames: 73234 Total undetected errors: 19 +Bit error rate (on message bits only): 2.633e-02 +seed 400 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73777 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26223, with src errs 26142, both 26137 +Total good frames: 73772 Total undetected errors: 5 +Bit error rate (on message bits only): 2.658e-02 +seed 401 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73672 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26328, with src errs 26224, both 26204 +Total good frames: 73652 Total undetected errors: 20 +Bit error rate (on message bits only): 2.605e-02 +seed 402 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73846 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26154, with src errs 26058, both 26047 +Total good frames: 73835 Total undetected errors: 11 +Bit error rate (on message bits only): 2.615e-02 +seed 403 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73694 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26306, with src errs 26229, both 26214 +Total good frames: 73679 Total undetected errors: 15 +Bit error rate (on message bits only): 2.619e-02 +seed 404 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73534 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26466, with src errs 26337, both 26325 +Total good frames: 73522 Total undetected errors: 12 +Bit error rate (on message bits only): 2.566e-02 +seed 405 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73671 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26329, with src errs 26223, both 26211 +Total good frames: 73659 Total undetected errors: 12 +Bit error rate (on message bits only): 2.631e-02 +seed 406 +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73407 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26593, with src errs 26524, both 26504 +Total good frames: 73387 Total undetected errors: 20 +Bit error rate (on message bits only): 2.635e-02 +seed 407 +Eliminated 111 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 33.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73201 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26799, with src errs 26757, both 26683 +Total good frames: 73127 Total undetected errors: 74 +Bit error rate (on message bits only): 2.607e-02 +seed 408 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73269 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26731, with src errs 26621, both 26610 +Total good frames: 73258 Total undetected errors: 11 +Bit error rate (on message bits only): 2.668e-02 +seed 409 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74405 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25595, with src errs 25504, both 25485 +Total good frames: 74386 Total undetected errors: 19 +Bit error rate (on message bits only): 2.530e-02 +seed 410 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73317 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26683, with src errs 26564, both 26553 +Total good frames: 73306 Total undetected errors: 11 +Bit error rate (on message bits only): 2.617e-02 +seed 411 +Eliminated 119 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73659 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26341, with src errs 26225, both 26215 +Total good frames: 73649 Total undetected errors: 10 +Bit error rate (on message bits only): 2.566e-02 +seed 412 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73645 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26355, with src errs 26261, both 26252 +Total good frames: 73636 Total undetected errors: 9 +Bit error rate (on message bits only): 2.620e-02 +seed 413 +Eliminated 80 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73794 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26206, with src errs 26116, both 26090 +Total good frames: 73768 Total undetected errors: 26 +Bit error rate (on message bits only): 2.628e-02 +seed 414 +Eliminated 108 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73449 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26551, with src errs 26440, both 26428 +Total good frames: 73437 Total undetected errors: 12 +Bit error rate (on message bits only): 2.557e-02 +seed 415 +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73864 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26136, with src errs 26026, both 26023 +Total good frames: 73861 Total undetected errors: 3 +Bit error rate (on message bits only): 2.608e-02 +seed 416 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73864 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26136, with src errs 26066, both 26056 +Total good frames: 73854 Total undetected errors: 10 +Bit error rate (on message bits only): 2.624e-02 +seed 417 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73294 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26706, with src errs 26619, both 26611 +Total good frames: 73286 Total undetected errors: 8 +Bit error rate (on message bits only): 2.655e-02 +seed 418 +Eliminated 112 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73186 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26814, with src errs 26725, both 26709 +Total good frames: 73170 Total undetected errors: 16 +Bit error rate (on message bits only): 2.681e-02 +seed 419 +Eliminated 110 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73954 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26046, with src errs 25948, both 25934 +Total good frames: 73940 Total undetected errors: 14 +Bit error rate (on message bits only): 2.551e-02 +seed 420 +Eliminated 126 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73896 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26104, with src errs 26002, both 25993 +Total good frames: 73887 Total undetected errors: 9 +Bit error rate (on message bits only): 2.568e-02 +seed 421 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73297 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26703, with src errs 26615, both 26600 +Total good frames: 73282 Total undetected errors: 15 +Bit error rate (on message bits only): 2.699e-02 +seed 422 +Eliminated 69 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73979 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26021, with src errs 25920, both 25903 +Total good frames: 73962 Total undetected errors: 17 +Bit error rate (on message bits only): 2.577e-02 +seed 423 +Had to place 1 checks in rows unevenly +Eliminated 73 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73889 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26111, with src errs 26032, both 26023 +Total good frames: 73880 Total undetected errors: 9 +Bit error rate (on message bits only): 2.601e-02 +seed 424 +Eliminated 115 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73368 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26632, with src errs 26492, both 26476 +Total good frames: 73352 Total undetected errors: 16 +Bit error rate (on message bits only): 2.610e-02 +seed 425 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74242 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25758, with src errs 25683, both 25662 +Total good frames: 74221 Total undetected errors: 21 +Bit error rate (on message bits only): 2.578e-02 +seed 426 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73748 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26252, with src errs 26360, both 26172 +Total good frames: 73560 Total undetected errors: 188 +Bit error rate (on message bits only): 2.644e-02 +seed 427 +Eliminated 73 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74078 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25922, with src errs 25815, both 25796 +Total good frames: 74059 Total undetected errors: 19 +Bit error rate (on message bits only): 2.585e-02 +seed 428 +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73693 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26307, with src errs 26197, both 26178 +Total good frames: 73674 Total undetected errors: 19 +Bit error rate (on message bits only): 2.603e-02 +seed 429 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73715 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26285, with src errs 26175, both 26161 +Total good frames: 73701 Total undetected errors: 14 +Bit error rate (on message bits only): 2.606e-02 +seed 430 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73656 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26344, with src errs 26261, both 26227 +Total good frames: 73622 Total undetected errors: 34 +Bit error rate (on message bits only): 2.617e-02 +seed 431 +Had to place 1 checks in rows unevenly +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73490 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26510, with src errs 26400, both 26390 +Total good frames: 73480 Total undetected errors: 10 +Bit error rate (on message bits only): 2.681e-02 +seed 432 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72895 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27105, with src errs 27022, both 26986 +Total good frames: 72859 Total undetected errors: 36 +Bit error rate (on message bits only): 2.668e-02 +seed 433 +Had to place 1 checks in rows unevenly +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73333 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26667, with src errs 26545, both 26524 +Total good frames: 73312 Total undetected errors: 21 +Bit error rate (on message bits only): 2.615e-02 +seed 434 +Eliminated 76 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73970 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26030, with src errs 25937, both 25916 +Total good frames: 73949 Total undetected errors: 21 +Bit error rate (on message bits only): 2.571e-02 +seed 435 +Eliminated 119 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72883 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27117, with src errs 27021, both 27011 +Total good frames: 72873 Total undetected errors: 10 +Bit error rate (on message bits only): 2.621e-02 +seed 436 +Had to place 1 checks in rows unevenly +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74169 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25831, with src errs 25744, both 25729 +Total good frames: 74154 Total undetected errors: 15 +Bit error rate (on message bits only): 2.557e-02 +seed 437 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73731 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26269, with src errs 26184, both 26168 +Total good frames: 73715 Total undetected errors: 16 +Bit error rate (on message bits only): 2.621e-02 +seed 438 +Eliminated 80 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73956 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26044, with src errs 25977, both 25967 +Total good frames: 73946 Total undetected errors: 10 +Bit error rate (on message bits only): 2.643e-02 +seed 439 +Had to place 1 checks in rows unevenly +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73534 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26466, with src errs 26335, both 26326 +Total good frames: 73525 Total undetected errors: 9 +Bit error rate (on message bits only): 2.610e-02 +seed 440 +Had to place 1 checks in rows unevenly +Eliminated 76 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73504 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26496, with src errs 26415, both 26394 +Total good frames: 73483 Total undetected errors: 21 +Bit error rate (on message bits only): 2.606e-02 +seed 441 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74032 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25968, with src errs 25880, both 25866 +Total good frames: 74018 Total undetected errors: 14 +Bit error rate (on message bits only): 2.606e-02 +seed 442 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73819 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26181, with src errs 26119, both 26098 +Total good frames: 73798 Total undetected errors: 21 +Bit error rate (on message bits only): 2.589e-02 +seed 443 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73887 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26113, with src errs 26013, both 25999 +Total good frames: 73873 Total undetected errors: 14 +Bit error rate (on message bits only): 2.588e-02 +seed 444 +Eliminated 116 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72988 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27012, with src errs 26889, both 26865 +Total good frames: 72964 Total undetected errors: 24 +Bit error rate (on message bits only): 2.620e-02 +seed 445 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73529 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26471, with src errs 26404, both 26377 +Total good frames: 73502 Total undetected errors: 27 +Bit error rate (on message bits only): 2.653e-02 +seed 446 +Had to place 1 checks in rows unevenly +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73116 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26884, with src errs 26807, both 26780 +Total good frames: 73089 Total undetected errors: 27 +Bit error rate (on message bits only): 2.663e-02 +seed 447 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73402 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26598, with src errs 26536, both 26505 +Total good frames: 73371 Total undetected errors: 31 +Bit error rate (on message bits only): 2.664e-02 +seed 448 +Eliminated 65 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74210 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25790, with src errs 26102, both 25686 +Total good frames: 73794 Total undetected errors: 416 +Bit error rate (on message bits only): 2.600e-02 +seed 449 +Had to place 1 checks in rows unevenly +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73656 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26344, with src errs 26250, both 26232 +Total good frames: 73638 Total undetected errors: 18 +Bit error rate (on message bits only): 2.577e-02 +seed 450 +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73868 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26132, with src errs 26038, both 26031 +Total good frames: 73861 Total undetected errors: 7 +Bit error rate (on message bits only): 2.646e-02 +seed 451 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73769 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26231, with src errs 26149, both 26130 +Total good frames: 73750 Total undetected errors: 19 +Bit error rate (on message bits only): 2.585e-02 +seed 452 +Eliminated 106 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73937 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26063, with src errs 25949, both 25934 +Total good frames: 73922 Total undetected errors: 15 +Bit error rate (on message bits only): 2.591e-02 +seed 453 +Eliminated 103 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73782 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26218, with src errs 26147, both 26133 +Total good frames: 73768 Total undetected errors: 14 +Bit error rate (on message bits only): 2.610e-02 +seed 454 +Eliminated 110 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72683 valid. Average 18.7 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27317, with src errs 27257, both 27216 +Total good frames: 72642 Total undetected errors: 41 +Bit error rate (on message bits only): 2.672e-02 +seed 455 +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73523 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26477, with src errs 26543, both 26368 +Total good frames: 73348 Total undetected errors: 175 +Bit error rate (on message bits only): 2.644e-02 +seed 456 +Had to place 1 checks in rows unevenly +Eliminated 109 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73634 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26366, with src errs 26243, both 26231 +Total good frames: 73622 Total undetected errors: 12 +Bit error rate (on message bits only): 2.567e-02 +seed 457 +Eliminated 109 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73397 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26603, with src errs 26496, both 26476 +Total good frames: 73377 Total undetected errors: 20 +Bit error rate (on message bits only): 2.627e-02 +seed 458 +Eliminated 76 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74011 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25989, with src errs 25896, both 25882 +Total good frames: 73997 Total undetected errors: 14 +Bit error rate (on message bits only): 2.627e-02 +seed 459 +Eliminated 108 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73621 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26379, with src errs 26299, both 26281 +Total good frames: 73603 Total undetected errors: 18 +Bit error rate (on message bits only): 2.613e-02 +seed 460 +Eliminated 74 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74049 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25951, with src errs 25869, both 25858 +Total good frames: 74038 Total undetected errors: 11 +Bit error rate (on message bits only): 2.573e-02 +seed 461 +Eliminated 123 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73229 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26771, with src errs 26687, both 26654 +Total good frames: 73196 Total undetected errors: 33 +Bit error rate (on message bits only): 2.634e-02 +seed 462 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73817 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26183, with src errs 26156, both 26076 +Total good frames: 73737 Total undetected errors: 80 +Bit error rate (on message bits only): 2.554e-02 +seed 463 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73492 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26508, with src errs 26413, both 26403 +Total good frames: 73482 Total undetected errors: 10 +Bit error rate (on message bits only): 2.640e-02 +seed 464 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73820 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26180, with src errs 26100, both 26084 +Total good frames: 73804 Total undetected errors: 16 +Bit error rate (on message bits only): 2.607e-02 +seed 465 +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73644 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26356, with src errs 26239, both 26214 +Total good frames: 73619 Total undetected errors: 25 +Bit error rate (on message bits only): 2.597e-02 +seed 466 +Eliminated 70 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74204 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25796, with src errs 25683, both 25675 +Total good frames: 74196 Total undetected errors: 8 +Bit error rate (on message bits only): 2.585e-02 +seed 467 +Eliminated 113 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72960 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27040, with src errs 26922, both 26907 +Total good frames: 72945 Total undetected errors: 15 +Bit error rate (on message bits only): 2.590e-02 +seed 468 +Eliminated 114 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73131 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26869, with src errs 26774, both 26764 +Total good frames: 73121 Total undetected errors: 10 +Bit error rate (on message bits only): 2.660e-02 +seed 469 +Eliminated 106 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73739 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26261, with src errs 26169, both 26161 +Total good frames: 73731 Total undetected errors: 8 +Bit error rate (on message bits only): 2.608e-02 +seed 470 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73569 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26431, with src errs 26362, both 26351 +Total good frames: 73558 Total undetected errors: 11 +Bit error rate (on message bits only): 2.649e-02 +seed 471 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73997 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26003, with src errs 25925, both 25911 +Total good frames: 73983 Total undetected errors: 14 +Bit error rate (on message bits only): 2.618e-02 +seed 472 +Eliminated 109 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73313 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26687, with src errs 26596, both 26582 +Total good frames: 73299 Total undetected errors: 14 +Bit error rate (on message bits only): 2.662e-02 +seed 473 +Had to place 1 checks in rows unevenly +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74200 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25800, with src errs 25784, both 25702 +Total good frames: 74118 Total undetected errors: 82 +Bit error rate (on message bits only): 2.576e-02 +seed 474 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73139 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26861, with src errs 26804, both 26792 +Total good frames: 73127 Total undetected errors: 12 +Bit error rate (on message bits only): 2.679e-02 +seed 475 +Eliminated 110 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73596 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26404, with src errs 26300, both 26288 +Total good frames: 73584 Total undetected errors: 12 +Bit error rate (on message bits only): 2.641e-02 +seed 476 +Eliminated 62 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73683 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26317, with src errs 26234, both 26222 +Total good frames: 73671 Total undetected errors: 12 +Bit error rate (on message bits only): 2.651e-02 +seed 477 +Eliminated 76 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73522 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26478, with src errs 26336, both 26325 +Total good frames: 73511 Total undetected errors: 11 +Bit error rate (on message bits only): 2.637e-02 +seed 478 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73738 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26262, with src errs 26166, both 26148 +Total good frames: 73720 Total undetected errors: 18 +Bit error rate (on message bits only): 2.629e-02 +seed 479 +Eliminated 70 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74240 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25760, with src errs 25669, both 25661 +Total good frames: 74232 Total undetected errors: 8 +Bit error rate (on message bits only): 2.562e-02 +seed 480 +Eliminated 136 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72473 valid. Average 18.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27527, with src errs 27479, both 27403 +Total good frames: 72397 Total undetected errors: 76 +Bit error rate (on message bits only): 2.644e-02 +seed 481 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74329 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25671, with src errs 25585, both 25571 +Total good frames: 74315 Total undetected errors: 14 +Bit error rate (on message bits only): 2.571e-02 +seed 482 +Eliminated 107 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73526 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26474, with src errs 26581, both 26360 +Total good frames: 73305 Total undetected errors: 221 +Bit error rate (on message bits only): 2.599e-02 +seed 483 +Eliminated 106 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73445 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26555, with src errs 26478, both 26440 +Total good frames: 73407 Total undetected errors: 38 +Bit error rate (on message bits only): 2.619e-02 +seed 484 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73980 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26020, with src errs 25955, both 25942 +Total good frames: 73967 Total undetected errors: 13 +Bit error rate (on message bits only): 2.617e-02 +seed 485 +Eliminated 65 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74020 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25980, with src errs 25871, both 25855 +Total good frames: 74004 Total undetected errors: 16 +Bit error rate (on message bits only): 2.610e-02 +seed 486 +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73785 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26215, with src errs 26093, both 26081 +Total good frames: 73773 Total undetected errors: 12 +Bit error rate (on message bits only): 2.630e-02 +seed 487 +Eliminated 112 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73521 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26479, with src errs 26342, both 26332 +Total good frames: 73511 Total undetected errors: 10 +Bit error rate (on message bits only): 2.557e-02 +seed 488 +Eliminated 112 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73671 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26329, with src errs 26325, both 26234 +Total good frames: 73580 Total undetected errors: 91 +Bit error rate (on message bits only): 2.631e-02 +seed 489 +Eliminated 104 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73250 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26750, with src errs 26660, both 26644 +Total good frames: 73234 Total undetected errors: 16 +Bit error rate (on message bits only): 2.656e-02 +seed 490 +Eliminated 103 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73538 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26462, with src errs 26347, both 26339 +Total good frames: 73530 Total undetected errors: 8 +Bit error rate (on message bits only): 2.621e-02 +seed 491 +Eliminated 114 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74112 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25888, with src errs 25762, both 25738 +Total good frames: 74088 Total undetected errors: 24 +Bit error rate (on message bits only): 2.553e-02 +seed 492 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73760 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26240, with src errs 26134, both 26125 +Total good frames: 73751 Total undetected errors: 9 +Bit error rate (on message bits only): 2.642e-02 +seed 493 +Eliminated 122 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73315 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26685, with src errs 26558, both 26546 +Total good frames: 73303 Total undetected errors: 12 +Bit error rate (on message bits only): 2.628e-02 +seed 494 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73299 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26701, with src errs 26622, both 26575 +Total good frames: 73252 Total undetected errors: 47 +Bit error rate (on message bits only): 2.638e-02 +seed 495 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73653 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26347, with src errs 26254, both 26230 +Total good frames: 73629 Total undetected errors: 24 +Bit error rate (on message bits only): 2.609e-02 +seed 496 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73615 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26385, with src errs 26280, both 26269 +Total good frames: 73604 Total undetected errors: 11 +Bit error rate (on message bits only): 2.643e-02 +seed 497 +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73675 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26325, with src errs 26203, both 26192 +Total good frames: 73664 Total undetected errors: 11 +Bit error rate (on message bits only): 2.555e-02 +seed 498 +Eliminated 72 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74030 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25970, with src errs 25850, both 25828 +Total good frames: 74008 Total undetected errors: 22 +Bit error rate (on message bits only): 2.574e-02 +seed 499 +Eliminated 109 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73730 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26270, with src errs 26170, both 26157 +Total good frames: 73717 Total undetected errors: 13 +Bit error rate (on message bits only): 2.562e-02 +seed 500 +Eliminated 74 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73720 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26280, with src errs 26195, both 26184 +Total good frames: 73709 Total undetected errors: 11 +Bit error rate (on message bits only): 2.629e-02 +seed 501 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73691 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26309, with src errs 26198, both 26182 +Total good frames: 73675 Total undetected errors: 16 +Bit error rate (on message bits only): 2.572e-02 +seed 502 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73414 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26586, with src errs 26527, both 26502 +Total good frames: 73389 Total undetected errors: 25 +Bit error rate (on message bits only): 2.652e-02 +seed 503 +Eliminated 144 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73149 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26851, with src errs 26742, both 26710 +Total good frames: 73117 Total undetected errors: 32 +Bit error rate (on message bits only): 2.617e-02 +seed 504 +Eliminated 112 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73124 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26876, with src errs 26807, both 26783 +Total good frames: 73100 Total undetected errors: 24 +Bit error rate (on message bits only): 2.668e-02 +seed 505 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73792 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26208, with src errs 26094, both 26081 +Total good frames: 73779 Total undetected errors: 13 +Bit error rate (on message bits only): 2.603e-02 +seed 506 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73894 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26106, with src errs 25986, both 25979 +Total good frames: 73887 Total undetected errors: 7 +Bit error rate (on message bits only): 2.587e-02 +seed 507 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73954 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26046, with src errs 25927, both 25903 +Total good frames: 73930 Total undetected errors: 24 +Bit error rate (on message bits only): 2.604e-02 +seed 508 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74252 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25748, with src errs 25826, both 25625 +Total good frames: 74051 Total undetected errors: 201 +Bit error rate (on message bits only): 2.579e-02 +seed 509 +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74591 valid. Average 17.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25409, with src errs 25292, both 25282 +Total good frames: 74581 Total undetected errors: 10 +Bit error rate (on message bits only): 2.520e-02 +seed 510 +Eliminated 74 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73892 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26108, with src errs 26032, both 26020 +Total good frames: 73880 Total undetected errors: 12 +Bit error rate (on message bits only): 2.633e-02 +seed 511 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73312 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26688, with src errs 26603, both 26583 +Total good frames: 73292 Total undetected errors: 20 +Bit error rate (on message bits only): 2.690e-02 +seed 512 +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74093 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25907, with src errs 25781, both 25764 +Total good frames: 74076 Total undetected errors: 17 +Bit error rate (on message bits only): 2.544e-02 +seed 513 +Eliminated 124 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73607 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26393, with src errs 26265, both 26249 +Total good frames: 73591 Total undetected errors: 16 +Bit error rate (on message bits only): 2.581e-02 +seed 514 +Eliminated 129 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73187 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26813, with src errs 26671, both 26656 +Total good frames: 73172 Total undetected errors: 15 +Bit error rate (on message bits only): 2.577e-02 +seed 515 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73604 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26396, with src errs 26293, both 26283 +Total good frames: 73594 Total undetected errors: 10 +Bit error rate (on message bits only): 2.638e-02 +seed 516 +Eliminated 122 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73854 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26146, with src errs 26047, both 26030 +Total good frames: 73837 Total undetected errors: 17 +Bit error rate (on message bits only): 2.573e-02 +seed 517 +Eliminated 135 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73417 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26583, with src errs 26509, both 26494 +Total good frames: 73402 Total undetected errors: 15 +Bit error rate (on message bits only): 2.646e-02 +seed 518 +Eliminated 74 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 33.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73783 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26217, with src errs 26142, both 26131 +Total good frames: 73772 Total undetected errors: 11 +Bit error rate (on message bits only): 2.661e-02 +seed 519 +Eliminated 107 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74113 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25887, with src errs 25843, both 25748 +Total good frames: 74018 Total undetected errors: 95 +Bit error rate (on message bits only): 2.533e-02 +seed 520 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73433 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26567, with src errs 26464, both 26447 +Total good frames: 73416 Total undetected errors: 17 +Bit error rate (on message bits only): 2.644e-02 +seed 521 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73807 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26193, with src errs 26112, both 26097 +Total good frames: 73792 Total undetected errors: 15 +Bit error rate (on message bits only): 2.610e-02 +seed 522 +Eliminated 106 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74030 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25970, with src errs 25865, both 25840 +Total good frames: 74005 Total undetected errors: 25 +Bit error rate (on message bits only): 2.496e-02 +seed 523 +Eliminated 120 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73843 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26157, with src errs 26474, both 26054 +Total good frames: 73423 Total undetected errors: 420 +Bit error rate (on message bits only): 2.492e-02 +seed 524 +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73256 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26744, with src errs 26657, both 26636 +Total good frames: 73235 Total undetected errors: 21 +Bit error rate (on message bits only): 2.633e-02 +seed 525 +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74417 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25583, with src errs 25463, both 25448 +Total good frames: 74402 Total undetected errors: 15 +Bit error rate (on message bits only): 2.535e-02 +seed 526 +Had to place 1 checks in rows unevenly +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73726 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26274, with src errs 26224, both 26192 +Total good frames: 73694 Total undetected errors: 32 +Bit error rate (on message bits only): 2.633e-02 +seed 527 +Eliminated 103 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72640 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27360, with src errs 27274, both 27261 +Total good frames: 72627 Total undetected errors: 13 +Bit error rate (on message bits only): 2.708e-02 +seed 528 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73490 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26510, with src errs 26428, both 26406 +Total good frames: 73468 Total undetected errors: 22 +Bit error rate (on message bits only): 2.588e-02 +seed 529 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73512 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26488, with src errs 26402, both 26391 +Total good frames: 73501 Total undetected errors: 11 +Bit error rate (on message bits only): 2.643e-02 +seed 530 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74272 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25728, with src errs 25643, both 25608 +Total good frames: 74237 Total undetected errors: 35 +Bit error rate (on message bits only): 2.538e-02 +seed 531 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73831 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26169, with src errs 26057, both 26040 +Total good frames: 73814 Total undetected errors: 17 +Bit error rate (on message bits only): 2.567e-02 +seed 532 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73759 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26241, with src errs 26164, both 26150 +Total good frames: 73745 Total undetected errors: 14 +Bit error rate (on message bits only): 2.627e-02 +seed 533 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73744 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26256, with src errs 26133, both 26124 +Total good frames: 73735 Total undetected errors: 9 +Bit error rate (on message bits only): 2.567e-02 +seed 534 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74139 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25861, with src errs 25775, both 25757 +Total good frames: 74121 Total undetected errors: 18 +Bit error rate (on message bits only): 2.578e-02 +seed 535 +Eliminated 65 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73921 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26079, with src errs 25957, both 25945 +Total good frames: 73909 Total undetected errors: 12 +Bit error rate (on message bits only): 2.569e-02 +seed 536 +Eliminated 69 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74069 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25931, with src errs 25844, both 25823 +Total good frames: 74048 Total undetected errors: 21 +Bit error rate (on message bits only): 2.579e-02 +seed 537 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73323 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26677, with src errs 26591, both 26572 +Total good frames: 73304 Total undetected errors: 19 +Bit error rate (on message bits only): 2.637e-02 +seed 538 +Eliminated 73 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73512 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26488, with src errs 26375, both 26355 +Total good frames: 73492 Total undetected errors: 20 +Bit error rate (on message bits only): 2.609e-02 +seed 539 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73110 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26890, with src errs 26781, both 26750 +Total good frames: 73079 Total undetected errors: 31 +Bit error rate (on message bits only): 2.605e-02 +seed 540 +Eliminated 114 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73341 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26659, with src errs 26517, both 26508 +Total good frames: 73332 Total undetected errors: 9 +Bit error rate (on message bits only): 2.636e-02 +seed 541 +Eliminated 108 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73119 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26881, with src errs 26780, both 26770 +Total good frames: 73109 Total undetected errors: 10 +Bit error rate (on message bits only): 2.684e-02 +seed 542 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73591 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26409, with src errs 26315, both 26305 +Total good frames: 73581 Total undetected errors: 10 +Bit error rate (on message bits only): 2.647e-02 +seed 543 +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73453 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26547, with src errs 26467, both 26453 +Total good frames: 73439 Total undetected errors: 14 +Bit error rate (on message bits only): 2.635e-02 +seed 544 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74188 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25812, with src errs 25712, both 25699 +Total good frames: 74175 Total undetected errors: 13 +Bit error rate (on message bits only): 2.578e-02 +seed 545 +Eliminated 114 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73226 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26774, with src errs 26683, both 26663 +Total good frames: 73206 Total undetected errors: 20 +Bit error rate (on message bits only): 2.642e-02 +seed 546 +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73851 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26149, with src errs 26076, both 26068 +Total good frames: 73843 Total undetected errors: 8 +Bit error rate (on message bits only): 2.645e-02 +seed 547 +Had to place 1 checks in rows unevenly +Eliminated 70 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73746 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26254, with src errs 26157, both 26134 +Total good frames: 73723 Total undetected errors: 23 +Bit error rate (on message bits only): 2.610e-02 +seed 548 +Had to place 1 checks in rows unevenly +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73069 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26931, with src errs 26855, both 26783 +Total good frames: 72997 Total undetected errors: 72 +Bit error rate (on message bits only): 2.598e-02 +seed 549 +Eliminated 63 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74217 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25783, with src errs 25653, both 25638 +Total good frames: 74202 Total undetected errors: 15 +Bit error rate (on message bits only): 2.584e-02 +seed 550 +Eliminated 109 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73917 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26083, with src errs 25980, both 25960 +Total good frames: 73897 Total undetected errors: 20 +Bit error rate (on message bits only): 2.562e-02 +seed 551 +Eliminated 110 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72916 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27084, with src errs 27003, both 26991 +Total good frames: 72904 Total undetected errors: 12 +Bit error rate (on message bits only): 2.680e-02 +seed 552 +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74028 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25972, with src errs 25869, both 25850 +Total good frames: 74009 Total undetected errors: 19 +Bit error rate (on message bits only): 2.562e-02 +seed 553 +Eliminated 115 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73162 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26838, with src errs 26774, both 26755 +Total good frames: 73143 Total undetected errors: 19 +Bit error rate (on message bits only): 2.675e-02 +seed 554 +Eliminated 112 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74064 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25936, with src errs 25859, both 25836 +Total good frames: 74041 Total undetected errors: 23 +Bit error rate (on message bits only): 2.564e-02 +seed 555 +Had to place 1 checks in rows unevenly +Eliminated 63 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74133 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25867, with src errs 25776, both 25766 +Total good frames: 74123 Total undetected errors: 10 +Bit error rate (on message bits only): 2.591e-02 +seed 556 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73776 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26224, with src errs 26131, both 26112 +Total good frames: 73757 Total undetected errors: 19 +Bit error rate (on message bits only): 2.571e-02 +seed 557 +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73119 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26881, with src errs 26806, both 26782 +Total good frames: 73095 Total undetected errors: 24 +Bit error rate (on message bits only): 2.628e-02 +seed 558 +Eliminated 108 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 24.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73930 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26070, with src errs 26118, both 25915 +Total good frames: 73727 Total undetected errors: 203 +Bit error rate (on message bits only): 2.478e-02 +seed 559 +Eliminated 115 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73041 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26959, with src errs 26930, both 26856 +Total good frames: 72967 Total undetected errors: 74 +Bit error rate (on message bits only): 2.672e-02 +seed 560 +Eliminated 110 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73557 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26443, with src errs 26354, both 26330 +Total good frames: 73533 Total undetected errors: 24 +Bit error rate (on message bits only): 2.667e-02 +seed 561 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73663 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26337, with src errs 26234, both 26226 +Total good frames: 73655 Total undetected errors: 8 +Bit error rate (on message bits only): 2.622e-02 +seed 562 +Eliminated 73 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73693 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26307, with src errs 26205, both 26189 +Total good frames: 73677 Total undetected errors: 16 +Bit error rate (on message bits only): 2.612e-02 +seed 563 +Eliminated 132 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73442 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26558, with src errs 26463, both 26445 +Total good frames: 73424 Total undetected errors: 18 +Bit error rate (on message bits only): 2.626e-02 +seed 564 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73883 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26117, with src errs 26001, both 25989 +Total good frames: 73871 Total undetected errors: 12 +Bit error rate (on message bits only): 2.557e-02 +seed 565 +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73705 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26295, with src errs 26572, both 26193 +Total good frames: 73326 Total undetected errors: 379 +Bit error rate (on message bits only): 2.616e-02 +seed 566 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74078 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25922, with src errs 25820, both 25808 +Total good frames: 74066 Total undetected errors: 12 +Bit error rate (on message bits only): 2.582e-02 +seed 567 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73569 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26431, with src errs 26349, both 26332 +Total good frames: 73552 Total undetected errors: 17 +Bit error rate (on message bits only): 2.637e-02 +seed 568 +Had to place 1 checks in rows unevenly +Eliminated 80 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73827 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26173, with src errs 26085, both 26073 +Total good frames: 73815 Total undetected errors: 12 +Bit error rate (on message bits only): 2.625e-02 +seed 569 +Had to place 1 checks in rows unevenly +Eliminated 125 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73585 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26415, with src errs 26270, both 26264 +Total good frames: 73579 Total undetected errors: 6 +Bit error rate (on message bits only): 2.594e-02 +seed 570 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74206 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25794, with src errs 25710, both 25693 +Total good frames: 74189 Total undetected errors: 17 +Bit error rate (on message bits only): 2.584e-02 +seed 571 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73318 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26682, with src errs 26570, both 26557 +Total good frames: 73305 Total undetected errors: 13 +Bit error rate (on message bits only): 2.640e-02 +seed 572 +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73685 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26315, with src errs 26246, both 26211 +Total good frames: 73650 Total undetected errors: 35 +Bit error rate (on message bits only): 2.592e-02 +seed 573 +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72870 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27130, with src errs 27085, both 27037 +Total good frames: 72822 Total undetected errors: 48 +Bit error rate (on message bits only): 2.683e-02 +seed 574 +Eliminated 106 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73008 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26992, with src errs 26884, both 26874 +Total good frames: 72998 Total undetected errors: 10 +Bit error rate (on message bits only): 2.720e-02 +seed 575 +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74228 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25772, with src errs 25638, both 25622 +Total good frames: 74212 Total undetected errors: 16 +Bit error rate (on message bits only): 2.534e-02 +seed 576 +Eliminated 125 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73275 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26725, with src errs 26611, both 26602 +Total good frames: 73266 Total undetected errors: 9 +Bit error rate (on message bits only): 2.625e-02 +seed 577 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74022 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25978, with src errs 25876, both 25861 +Total good frames: 74007 Total undetected errors: 15 +Bit error rate (on message bits only): 2.574e-02 +seed 578 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73308 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26692, with src errs 26573, both 26566 +Total good frames: 73301 Total undetected errors: 7 +Bit error rate (on message bits only): 2.635e-02 +seed 579 +Eliminated 115 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73775 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26225, with src errs 26117, both 26104 +Total good frames: 73762 Total undetected errors: 13 +Bit error rate (on message bits only): 2.644e-02 +seed 580 +Eliminated 129 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73833 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26167, with src errs 26097, both 26083 +Total good frames: 73819 Total undetected errors: 14 +Bit error rate (on message bits only): 2.597e-02 +seed 581 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73202 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26798, with src errs 26714, both 26693 +Total good frames: 73181 Total undetected errors: 21 +Bit error rate (on message bits only): 2.641e-02 +seed 582 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73272 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26728, with src errs 27050, both 26631 +Total good frames: 72853 Total undetected errors: 419 +Bit error rate (on message bits only): 2.659e-02 +seed 583 +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73711 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26289, with src errs 26173, both 26159 +Total good frames: 73697 Total undetected errors: 14 +Bit error rate (on message bits only): 2.577e-02 +seed 584 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73810 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26190, with src errs 26079, both 26060 +Total good frames: 73791 Total undetected errors: 19 +Bit error rate (on message bits only): 2.621e-02 +seed 585 +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73960 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26040, with src errs 25916, both 25888 +Total good frames: 73932 Total undetected errors: 28 +Bit error rate (on message bits only): 2.539e-02 +seed 586 +Had to place 1 checks in rows unevenly +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73896 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26104, with src errs 26011, both 26003 +Total good frames: 73888 Total undetected errors: 8 +Bit error rate (on message bits only): 2.595e-02 +seed 587 +Eliminated 70 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74611 valid. Average 17.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25389, with src errs 25261, both 25245 +Total good frames: 74595 Total undetected errors: 16 +Bit error rate (on message bits only): 2.479e-02 +seed 588 +Eliminated 74 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73489 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26511, with src errs 26414, both 26403 +Total good frames: 73478 Total undetected errors: 11 +Bit error rate (on message bits only): 2.580e-02 +seed 589 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73435 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26565, with src errs 26444, both 26428 +Total good frames: 73419 Total undetected errors: 16 +Bit error rate (on message bits only): 2.577e-02 +seed 590 +Eliminated 67 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74325 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25675, with src errs 25589, both 25562 +Total good frames: 74298 Total undetected errors: 27 +Bit error rate (on message bits only): 2.590e-02 +seed 591 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73799 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26201, with src errs 26090, both 26076 +Total good frames: 73785 Total undetected errors: 14 +Bit error rate (on message bits only): 2.602e-02 +seed 592 +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74060 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25940, with src errs 25864, both 25856 +Total good frames: 74052 Total undetected errors: 8 +Bit error rate (on message bits only): 2.651e-02 +seed 593 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73880 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26120, with src errs 26029, both 26009 +Total good frames: 73860 Total undetected errors: 20 +Bit error rate (on message bits only): 2.598e-02 +seed 594 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73483 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26517, with src errs 26430, both 26423 +Total good frames: 73476 Total undetected errors: 7 +Bit error rate (on message bits only): 2.623e-02 +seed 595 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73844 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26156, with src errs 26050, both 26037 +Total good frames: 73831 Total undetected errors: 13 +Bit error rate (on message bits only): 2.604e-02 +seed 596 +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73597 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26403, with src errs 26263, both 26248 +Total good frames: 73582 Total undetected errors: 15 +Bit error rate (on message bits only): 2.612e-02 +seed 597 +Eliminated 104 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73773 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26227, with src errs 26114, both 26102 +Total good frames: 73761 Total undetected errors: 12 +Bit error rate (on message bits only): 2.584e-02 +seed 598 +Eliminated 120 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73609 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26391, with src errs 26621, both 26226 +Total good frames: 73214 Total undetected errors: 395 +Bit error rate (on message bits only): 2.522e-02 +seed 599 +Eliminated 107 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72366 valid. Average 18.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27634, with src errs 27535, both 27526 +Total good frames: 72357 Total undetected errors: 9 +Bit error rate (on message bits only): 2.691e-02 +seed 600 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74439 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25561, with src errs 25483, both 25435 +Total good frames: 74391 Total undetected errors: 48 +Bit error rate (on message bits only): 2.499e-02 +seed 601 +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74207 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25793, with src errs 25698, both 25649 +Total good frames: 74158 Total undetected errors: 49 +Bit error rate (on message bits only): 2.490e-02 +seed 602 +Eliminated 76 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74509 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25491, with src errs 25389, both 25372 +Total good frames: 74492 Total undetected errors: 17 +Bit error rate (on message bits only): 2.566e-02 +seed 603 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73163 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26837, with src errs 26745, both 26722 +Total good frames: 73140 Total undetected errors: 23 +Bit error rate (on message bits only): 2.600e-02 +seed 604 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73507 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26493, with src errs 26397, both 26380 +Total good frames: 73490 Total undetected errors: 17 +Bit error rate (on message bits only): 2.644e-02 +seed 605 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73432 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26568, with src errs 26456, both 26446 +Total good frames: 73422 Total undetected errors: 10 +Bit error rate (on message bits only): 2.658e-02 +seed 606 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73806 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26194, with src errs 26101, both 26087 +Total good frames: 73792 Total undetected errors: 14 +Bit error rate (on message bits only): 2.607e-02 +seed 607 +Eliminated 71 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73737 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26263, with src errs 26232, both 26154 +Total good frames: 73659 Total undetected errors: 78 +Bit error rate (on message bits only): 2.626e-02 +seed 608 +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74088 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25912, with src errs 25835, both 25811 +Total good frames: 74064 Total undetected errors: 24 +Bit error rate (on message bits only): 2.595e-02 +seed 609 +Eliminated 127 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73430 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26570, with src errs 26464, both 26449 +Total good frames: 73415 Total undetected errors: 15 +Bit error rate (on message bits only): 2.595e-02 +seed 610 +Eliminated 64 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74113 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25887, with src errs 25861, both 25792 +Total good frames: 74044 Total undetected errors: 69 +Bit error rate (on message bits only): 2.593e-02 +seed 611 +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73401 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26599, with src errs 26492, both 26483 +Total good frames: 73392 Total undetected errors: 9 +Bit error rate (on message bits only): 2.658e-02 +seed 612 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73925 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26075, with src errs 25986, both 25978 +Total good frames: 73917 Total undetected errors: 8 +Bit error rate (on message bits only): 2.582e-02 +seed 613 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73384 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26616, with src errs 26557, both 26519 +Total good frames: 73346 Total undetected errors: 38 +Bit error rate (on message bits only): 2.644e-02 +seed 614 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74026 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25974, with src errs 25884, both 25868 +Total good frames: 74010 Total undetected errors: 16 +Bit error rate (on message bits only): 2.611e-02 +seed 615 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73985 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26015, with src errs 25949, both 25913 +Total good frames: 73949 Total undetected errors: 36 +Bit error rate (on message bits only): 2.621e-02 +seed 616 +Had to place 1 checks in rows unevenly +Eliminated 63 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74065 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25935, with src errs 25914, both 25823 +Total good frames: 73974 Total undetected errors: 91 +Bit error rate (on message bits only): 2.575e-02 +seed 617 +Eliminated 112 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72953 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27047, with src errs 26921, both 26907 +Total good frames: 72939 Total undetected errors: 14 +Bit error rate (on message bits only): 2.620e-02 +seed 618 +Had to place 1 checks in rows unevenly +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74000 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26000, with src errs 25896, both 25890 +Total good frames: 73994 Total undetected errors: 6 +Bit error rate (on message bits only): 2.602e-02 +seed 619 +Eliminated 71 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74259 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25741, with src errs 26077, both 25652 +Total good frames: 73834 Total undetected errors: 425 +Bit error rate (on message bits only): 2.589e-02 +seed 620 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73105 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26895, with src errs 26805, both 26791 +Total good frames: 73091 Total undetected errors: 14 +Bit error rate (on message bits only): 2.634e-02 +seed 621 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73917 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26083, with src errs 26054, both 25976 +Total good frames: 73839 Total undetected errors: 78 +Bit error rate (on message bits only): 2.606e-02 +seed 622 +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73635 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26365, with src errs 26281, both 26273 +Total good frames: 73627 Total undetected errors: 8 +Bit error rate (on message bits only): 2.639e-02 +seed 623 +Eliminated 146 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72443 valid. Average 18.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27557, with src errs 27442, both 27425 +Total good frames: 72426 Total undetected errors: 17 +Bit error rate (on message bits only): 2.666e-02 +seed 624 +Eliminated 110 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73390 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26610, with src errs 26533, both 26517 +Total good frames: 73374 Total undetected errors: 16 +Bit error rate (on message bits only): 2.667e-02 +seed 625 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73154 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26846, with src errs 26726, both 26705 +Total good frames: 73133 Total undetected errors: 21 +Bit error rate (on message bits only): 2.618e-02 +seed 626 +Eliminated 61 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73911 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26089, with src errs 26021, both 26007 +Total good frames: 73897 Total undetected errors: 14 +Bit error rate (on message bits only): 2.652e-02 +seed 627 +Eliminated 122 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73970 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26030, with src errs 25897, both 25890 +Total good frames: 73963 Total undetected errors: 7 +Bit error rate (on message bits only): 2.552e-02 +seed 628 +Eliminated 76 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73937 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26063, with src errs 25946, both 25938 +Total good frames: 73929 Total undetected errors: 8 +Bit error rate (on message bits only): 2.577e-02 +seed 629 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73882 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26118, with src errs 26017, both 26002 +Total good frames: 73867 Total undetected errors: 15 +Bit error rate (on message bits only): 2.582e-02 +seed 630 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73612 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26388, with src errs 26292, both 26284 +Total good frames: 73604 Total undetected errors: 8 +Bit error rate (on message bits only): 2.598e-02 +seed 631 +Eliminated 128 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73254 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26746, with src errs 26688, both 26658 +Total good frames: 73224 Total undetected errors: 30 +Bit error rate (on message bits only): 2.672e-02 +seed 632 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73459 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26541, with src errs 26455, both 26445 +Total good frames: 73449 Total undetected errors: 10 +Bit error rate (on message bits only): 2.644e-02 +seed 633 +Eliminated 113 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73455 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26545, with src errs 26455, both 26430 +Total good frames: 73430 Total undetected errors: 25 +Bit error rate (on message bits only): 2.605e-02 +seed 634 +Eliminated 112 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73408 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26592, with src errs 26477, both 26466 +Total good frames: 73397 Total undetected errors: 11 +Bit error rate (on message bits only): 2.655e-02 +seed 635 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73562 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26438, with src errs 26327, both 26315 +Total good frames: 73550 Total undetected errors: 12 +Bit error rate (on message bits only): 2.597e-02 +seed 636 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73976 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26024, with src errs 25933, both 25925 +Total good frames: 73968 Total undetected errors: 8 +Bit error rate (on message bits only): 2.572e-02 +seed 637 +Eliminated 119 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73073 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26927, with src errs 26828, both 26820 +Total good frames: 73065 Total undetected errors: 8 +Bit error rate (on message bits only): 2.677e-02 +seed 638 +Eliminated 73 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73473 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26527, with src errs 26432, both 26416 +Total good frames: 73457 Total undetected errors: 16 +Bit error rate (on message bits only): 2.632e-02 +seed 639 +Eliminated 119 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73781 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26219, with src errs 26112, both 26103 +Total good frames: 73772 Total undetected errors: 9 +Bit error rate (on message bits only): 2.539e-02 +seed 640 +Eliminated 122 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73749 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26251, with src errs 26143, both 26129 +Total good frames: 73735 Total undetected errors: 14 +Bit error rate (on message bits only): 2.570e-02 +seed 641 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73623 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26377, with src errs 26296, both 26288 +Total good frames: 73615 Total undetected errors: 8 +Bit error rate (on message bits only): 2.633e-02 +seed 642 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73563 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26437, with src errs 26327, both 26318 +Total good frames: 73554 Total undetected errors: 9 +Bit error rate (on message bits only): 2.601e-02 +seed 643 +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73654 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26346, with src errs 26214, both 26201 +Total good frames: 73641 Total undetected errors: 13 +Bit error rate (on message bits only): 2.567e-02 +seed 644 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74128 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25872, with src errs 25798, both 25788 +Total good frames: 74118 Total undetected errors: 10 +Bit error rate (on message bits only): 2.603e-02 +seed 645 +Eliminated 72 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74023 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25977, with src errs 25881, both 25868 +Total good frames: 74010 Total undetected errors: 13 +Bit error rate (on message bits only): 2.583e-02 +seed 646 +Eliminated 114 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73234 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26766, with src errs 26679, both 26671 +Total good frames: 73226 Total undetected errors: 8 +Bit error rate (on message bits only): 2.663e-02 +seed 647 +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73756 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26244, with src errs 26166, both 26125 +Total good frames: 73715 Total undetected errors: 41 +Bit error rate (on message bits only): 2.582e-02 +seed 648 +Eliminated 117 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73700 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26300, with src errs 26206, both 26175 +Total good frames: 73669 Total undetected errors: 31 +Bit error rate (on message bits only): 2.576e-02 +seed 649 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74101 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25899, with src errs 25790, both 25777 +Total good frames: 74088 Total undetected errors: 13 +Bit error rate (on message bits only): 2.617e-02 +seed 650 +Eliminated 70 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73749 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26251, with src errs 26174, both 26158 +Total good frames: 73733 Total undetected errors: 16 +Bit error rate (on message bits only): 2.622e-02 +seed 651 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73603 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26397, with src errs 26325, both 26309 +Total good frames: 73587 Total undetected errors: 16 +Bit error rate (on message bits only): 2.658e-02 +seed 652 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73714 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26286, with src errs 26207, both 26190 +Total good frames: 73697 Total undetected errors: 17 +Bit error rate (on message bits only): 2.692e-02 +seed 653 +Eliminated 70 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73999 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26001, with src errs 25896, both 25883 +Total good frames: 73986 Total undetected errors: 13 +Bit error rate (on message bits only): 2.610e-02 +seed 654 +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73899 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26101, with src errs 26007, both 25999 +Total good frames: 73891 Total undetected errors: 8 +Bit error rate (on message bits only): 2.554e-02 +seed 655 +Had to place 1 checks in rows unevenly +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73658 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26342, with src errs 26223, both 26205 +Total good frames: 73640 Total undetected errors: 18 +Bit error rate (on message bits only): 2.614e-02 +seed 656 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74422 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25578, with src errs 25445, both 25436 +Total good frames: 74413 Total undetected errors: 9 +Bit error rate (on message bits only): 2.503e-02 +seed 657 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73784 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26216, with src errs 26131, both 26112 +Total good frames: 73765 Total undetected errors: 19 +Bit error rate (on message bits only): 2.592e-02 +seed 658 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73300 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26700, with src errs 26613, both 26605 +Total good frames: 73292 Total undetected errors: 8 +Bit error rate (on message bits only): 2.668e-02 +seed 659 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74216 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25784, with src errs 25660, both 25642 +Total good frames: 74198 Total undetected errors: 18 +Bit error rate (on message bits only): 2.494e-02 +seed 660 +Eliminated 104 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73008 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26992, with src errs 26902, both 26886 +Total good frames: 72992 Total undetected errors: 16 +Bit error rate (on message bits only): 2.648e-02 +seed 661 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72956 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27044, with src errs 26941, both 26925 +Total good frames: 72940 Total undetected errors: 16 +Bit error rate (on message bits only): 2.673e-02 +seed 662 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73993 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26007, with src errs 25896, both 25885 +Total good frames: 73982 Total undetected errors: 11 +Bit error rate (on message bits only): 2.573e-02 +seed 663 +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73600 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26400, with src errs 26278, both 26266 +Total good frames: 73588 Total undetected errors: 12 +Bit error rate (on message bits only): 2.572e-02 +seed 664 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73614 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26386, with src errs 26309, both 26293 +Total good frames: 73598 Total undetected errors: 16 +Bit error rate (on message bits only): 2.603e-02 +seed 665 +Had to place 1 checks in rows unevenly +Eliminated 58 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73941 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26059, with src errs 25988, both 25974 +Total good frames: 73927 Total undetected errors: 14 +Bit error rate (on message bits only): 2.644e-02 +seed 666 +Eliminated 111 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73288 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26712, with src errs 26619, both 26598 +Total good frames: 73267 Total undetected errors: 21 +Bit error rate (on message bits only): 2.644e-02 +seed 667 +Had to place 1 checks in rows unevenly +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73749 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26251, with src errs 26139, both 26121 +Total good frames: 73731 Total undetected errors: 18 +Bit error rate (on message bits only): 2.565e-02 +seed 668 +Eliminated 67 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73696 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26304, with src errs 26174, both 26167 +Total good frames: 73689 Total undetected errors: 7 +Bit error rate (on message bits only): 2.643e-02 +seed 669 +Eliminated 70 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74488 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25512, with src errs 25464, both 25368 +Total good frames: 74392 Total undetected errors: 96 +Bit error rate (on message bits only): 2.536e-02 +seed 670 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74083 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25917, with src errs 25814, both 25803 +Total good frames: 74072 Total undetected errors: 11 +Bit error rate (on message bits only): 2.565e-02 +seed 671 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73569 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26431, with src errs 26348, both 26321 +Total good frames: 73542 Total undetected errors: 27 +Bit error rate (on message bits only): 2.648e-02 +seed 672 +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74168 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25832, with src errs 25734, both 25724 +Total good frames: 74158 Total undetected errors: 10 +Bit error rate (on message bits only): 2.598e-02 +seed 673 +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74195 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25805, with src errs 25866, both 25689 +Total good frames: 74018 Total undetected errors: 177 +Bit error rate (on message bits only): 2.570e-02 +seed 674 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74199 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25801, with src errs 25691, both 25671 +Total good frames: 74179 Total undetected errors: 20 +Bit error rate (on message bits only): 2.492e-02 +seed 675 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74889 valid. Average 17.7 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25111, with src errs 24992, both 24973 +Total good frames: 74870 Total undetected errors: 19 +Bit error rate (on message bits only): 2.512e-02 +seed 676 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73583 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26417, with src errs 26300, both 26261 +Total good frames: 73544 Total undetected errors: 39 +Bit error rate (on message bits only): 2.596e-02 +seed 677 +Eliminated 60 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74109 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25891, with src errs 25767, both 25760 +Total good frames: 74102 Total undetected errors: 7 +Bit error rate (on message bits only): 2.603e-02 +seed 678 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73060 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26940, with src errs 26829, both 26813 +Total good frames: 73044 Total undetected errors: 16 +Bit error rate (on message bits only): 2.651e-02 +seed 679 +Eliminated 112 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73366 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26634, with src errs 26569, both 26539 +Total good frames: 73336 Total undetected errors: 30 +Bit error rate (on message bits only): 2.671e-02 +seed 680 +Eliminated 80 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73922 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26078, with src errs 25977, both 25961 +Total good frames: 73906 Total undetected errors: 16 +Bit error rate (on message bits only): 2.563e-02 +seed 681 +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73364 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26636, with src errs 26560, both 26533 +Total good frames: 73337 Total undetected errors: 27 +Bit error rate (on message bits only): 2.692e-02 +seed 682 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73840 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26160, with src errs 26053, both 26041 +Total good frames: 73828 Total undetected errors: 12 +Bit error rate (on message bits only): 2.613e-02 +seed 683 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73059 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26941, with src errs 26840, both 26828 +Total good frames: 73047 Total undetected errors: 12 +Bit error rate (on message bits only): 2.631e-02 +seed 684 +Eliminated 103 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73488 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26512, with src errs 26416, both 26396 +Total good frames: 73468 Total undetected errors: 20 +Bit error rate (on message bits only): 2.634e-02 +seed 685 +Eliminated 120 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73543 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26457, with src errs 26347, both 26334 +Total good frames: 73530 Total undetected errors: 13 +Bit error rate (on message bits only): 2.607e-02 +seed 686 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73858 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26142, with src errs 26015, both 25987 +Total good frames: 73830 Total undetected errors: 28 +Bit error rate (on message bits only): 2.564e-02 +seed 687 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73042 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26958, with src errs 26896, both 26881 +Total good frames: 73027 Total undetected errors: 15 +Bit error rate (on message bits only): 2.717e-02 +seed 688 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73933 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26067, with src errs 26333, both 25929 +Total good frames: 73529 Total undetected errors: 404 +Bit error rate (on message bits only): 2.592e-02 +seed 689 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73252 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26748, with src errs 26653, both 26628 +Total good frames: 73227 Total undetected errors: 25 +Bit error rate (on message bits only): 2.686e-02 +seed 690 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73684 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26316, with src errs 26206, both 26195 +Total good frames: 73673 Total undetected errors: 11 +Bit error rate (on message bits only): 2.624e-02 +seed 691 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 33.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73665 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26335, with src errs 26240, both 26231 +Total good frames: 73656 Total undetected errors: 9 +Bit error rate (on message bits only): 2.641e-02 +seed 692 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73801 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26199, with src errs 26098, both 26080 +Total good frames: 73783 Total undetected errors: 18 +Bit error rate (on message bits only): 2.566e-02 +seed 693 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73626 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26374, with src errs 26340, both 26255 +Total good frames: 73541 Total undetected errors: 85 +Bit error rate (on message bits only): 2.598e-02 +seed 694 +Had to place 1 checks in rows unevenly +Eliminated 66 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73739 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26261, with src errs 26177, both 26166 +Total good frames: 73728 Total undetected errors: 11 +Bit error rate (on message bits only): 2.628e-02 +seed 695 +Eliminated 133 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72804 valid. Average 18.7 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27196, with src errs 27098, both 27073 +Total good frames: 72779 Total undetected errors: 25 +Bit error rate (on message bits only): 2.609e-02 +seed 696 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73531 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26469, with src errs 26398, both 26387 +Total good frames: 73520 Total undetected errors: 11 +Bit error rate (on message bits only): 2.633e-02 +seed 697 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73530 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26470, with src errs 26383, both 26376 +Total good frames: 73523 Total undetected errors: 7 +Bit error rate (on message bits only): 2.627e-02 +seed 698 +Eliminated 111 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72643 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27357, with src errs 27260, both 27245 +Total good frames: 72628 Total undetected errors: 15 +Bit error rate (on message bits only): 2.656e-02 +seed 699 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73600 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26400, with src errs 26320, both 26303 +Total good frames: 73583 Total undetected errors: 17 +Bit error rate (on message bits only): 2.605e-02 +seed 700 +Eliminated 67 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74350 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25650, with src errs 25584, both 25554 +Total good frames: 74320 Total undetected errors: 30 +Bit error rate (on message bits only): 2.578e-02 +seed 701 +Eliminated 103 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73903 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26097, with src errs 25915, both 25887 +Total good frames: 73875 Total undetected errors: 28 +Bit error rate (on message bits only): 2.525e-02 +seed 702 +Had to place 1 checks in rows unevenly +Eliminated 67 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73714 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26286, with src errs 26201, both 26187 +Total good frames: 73700 Total undetected errors: 14 +Bit error rate (on message bits only): 2.634e-02 +seed 703 +Eliminated 60 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74556 valid. Average 17.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25444, with src errs 25363, both 25350 +Total good frames: 74543 Total undetected errors: 13 +Bit error rate (on message bits only): 2.581e-02 +seed 704 +Had to place 1 checks in rows unevenly +Eliminated 109 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73727 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26273, with src errs 26185, both 26178 +Total good frames: 73720 Total undetected errors: 7 +Bit error rate (on message bits only): 2.635e-02 +seed 705 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73536 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26464, with src errs 26366, both 26362 +Total good frames: 73532 Total undetected errors: 4 +Bit error rate (on message bits only): 2.670e-02 +seed 706 +Eliminated 121 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73957 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26043, with src errs 25913, both 25886 +Total good frames: 73930 Total undetected errors: 27 +Bit error rate (on message bits only): 2.486e-02 +seed 707 +Eliminated 104 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73522 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26478, with src errs 26378, both 26365 +Total good frames: 73509 Total undetected errors: 13 +Bit error rate (on message bits only): 2.583e-02 +seed 708 +Had to place 1 checks in rows unevenly +Eliminated 132 cycles of length four by moving checks within column +Couldn't eliminate all cycles of length four in 10 passes +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73135 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26865, with src errs 27171, both 26750 +Total good frames: 72714 Total undetected errors: 421 +Bit error rate (on message bits only): 2.607e-02 +seed 709 +Eliminated 121 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73412 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26588, with src errs 26506, both 26498 +Total good frames: 73404 Total undetected errors: 8 +Bit error rate (on message bits only): 2.681e-02 +seed 710 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73593 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26407, with src errs 26318, both 26306 +Total good frames: 73581 Total undetected errors: 12 +Bit error rate (on message bits only): 2.640e-02 +seed 711 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73688 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26312, with src errs 26218, both 26205 +Total good frames: 73675 Total undetected errors: 13 +Bit error rate (on message bits only): 2.588e-02 +seed 712 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73267 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26733, with src errs 26626, both 26617 +Total good frames: 73258 Total undetected errors: 9 +Bit error rate (on message bits only): 2.575e-02 +seed 713 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73733 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26267, with src errs 26164, both 26148 +Total good frames: 73717 Total undetected errors: 16 +Bit error rate (on message bits only): 2.574e-02 +seed 714 +Eliminated 74 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73904 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26096, with src errs 26037, both 26024 +Total good frames: 73891 Total undetected errors: 13 +Bit error rate (on message bits only): 2.647e-02 +seed 715 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73494 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26506, with src errs 26390, both 26385 +Total good frames: 73489 Total undetected errors: 5 +Bit error rate (on message bits only): 2.591e-02 +seed 716 +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73380 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26620, with src errs 26519, both 26505 +Total good frames: 73366 Total undetected errors: 14 +Bit error rate (on message bits only): 2.635e-02 +seed 717 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73816 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26184, with src errs 26120, both 26113 +Total good frames: 73809 Total undetected errors: 7 +Bit error rate (on message bits only): 2.655e-02 +seed 718 +Eliminated 108 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73683 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26317, with src errs 26244, both 26170 +Total good frames: 73609 Total undetected errors: 74 +Bit error rate (on message bits only): 2.601e-02 +seed 719 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74452 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25548, with src errs 25467, both 25448 +Total good frames: 74433 Total undetected errors: 19 +Bit error rate (on message bits only): 2.549e-02 +seed 720 +Eliminated 107 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73407 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26593, with src errs 26511, both 26505 +Total good frames: 73401 Total undetected errors: 6 +Bit error rate (on message bits only): 2.676e-02 +seed 721 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73616 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26384, with src errs 26308, both 26300 +Total good frames: 73608 Total undetected errors: 8 +Bit error rate (on message bits only): 2.655e-02 +seed 722 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73779 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26221, with src errs 26074, both 26064 +Total good frames: 73769 Total undetected errors: 10 +Bit error rate (on message bits only): 2.586e-02 +seed 723 +Eliminated 73 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73995 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26005, with src errs 25959, both 25908 +Total good frames: 73944 Total undetected errors: 51 +Bit error rate (on message bits only): 2.601e-02 +seed 724 +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73836 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26164, with src errs 26074, both 26055 +Total good frames: 73817 Total undetected errors: 19 +Bit error rate (on message bits only): 2.612e-02 +seed 725 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73892 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26108, with src errs 25996, both 25986 +Total good frames: 73882 Total undetected errors: 10 +Bit error rate (on message bits only): 2.620e-02 +seed 726 +Eliminated 119 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73621 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26379, with src errs 26260, both 26250 +Total good frames: 73611 Total undetected errors: 10 +Bit error rate (on message bits only): 2.592e-02 +seed 727 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73725 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26275, with src errs 26199, both 26185 +Total good frames: 73711 Total undetected errors: 14 +Bit error rate (on message bits only): 2.600e-02 +seed 728 +Eliminated 112 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73623 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26377, with src errs 26288, both 26271 +Total good frames: 73606 Total undetected errors: 17 +Bit error rate (on message bits only): 2.600e-02 +seed 729 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73548 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26452, with src errs 26357, both 26347 +Total good frames: 73538 Total undetected errors: 10 +Bit error rate (on message bits only): 2.620e-02 +seed 730 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73358 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26642, with src errs 26545, both 26537 +Total good frames: 73350 Total undetected errors: 8 +Bit error rate (on message bits only): 2.600e-02 +seed 731 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73407 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26593, with src errs 26502, both 26497 +Total good frames: 73402 Total undetected errors: 5 +Bit error rate (on message bits only): 2.654e-02 +seed 732 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73129 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26871, with src errs 26783, both 26777 +Total good frames: 73123 Total undetected errors: 6 +Bit error rate (on message bits only): 2.685e-02 +seed 733 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74085 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25915, with src errs 25824, both 25791 +Total good frames: 74052 Total undetected errors: 33 +Bit error rate (on message bits only): 2.573e-02 +seed 734 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73597 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26403, with src errs 26331, both 26315 +Total good frames: 73581 Total undetected errors: 16 +Bit error rate (on message bits only): 2.622e-02 +seed 735 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74347 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25653, with src errs 25534, both 25518 +Total good frames: 74331 Total undetected errors: 16 +Bit error rate (on message bits only): 2.574e-02 +seed 736 +Eliminated 123 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73782 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26218, with src errs 26075, both 26057 +Total good frames: 73764 Total undetected errors: 18 +Bit error rate (on message bits only): 2.528e-02 +seed 737 +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74018 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25982, with src errs 25916, both 25869 +Total good frames: 73971 Total undetected errors: 47 +Bit error rate (on message bits only): 2.568e-02 +seed 738 +Eliminated 108 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73874 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26126, with src errs 26033, both 26008 +Total good frames: 73849 Total undetected errors: 25 +Bit error rate (on message bits only): 2.612e-02 +seed 739 +Eliminated 132 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72936 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27064, with src errs 26930, both 26920 +Total good frames: 72926 Total undetected errors: 10 +Bit error rate (on message bits only): 2.647e-02 +seed 740 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74441 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25559, with src errs 25436, both 25423 +Total good frames: 74428 Total undetected errors: 13 +Bit error rate (on message bits only): 2.536e-02 +seed 741 +Eliminated 109 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72895 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27105, with src errs 27020, both 27014 +Total good frames: 72889 Total undetected errors: 6 +Bit error rate (on message bits only): 2.681e-02 +seed 742 +Eliminated 71 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74103 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25897, with src errs 25766, both 25752 +Total good frames: 74089 Total undetected errors: 14 +Bit error rate (on message bits only): 2.609e-02 +seed 743 +Eliminated 67 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74305 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25695, with src errs 25590, both 25582 +Total good frames: 74297 Total undetected errors: 8 +Bit error rate (on message bits only): 2.605e-02 +seed 744 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73098 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26902, with src errs 26813, both 26800 +Total good frames: 73085 Total undetected errors: 13 +Bit error rate (on message bits only): 2.633e-02 +seed 745 +Eliminated 68 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73660 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26340, with src errs 26222, both 26211 +Total good frames: 73649 Total undetected errors: 11 +Bit error rate (on message bits only): 2.617e-02 +seed 746 +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73260 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26740, with src errs 26640, both 26627 +Total good frames: 73247 Total undetected errors: 13 +Bit error rate (on message bits only): 2.637e-02 +seed 747 +Eliminated 115 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73682 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26318, with src errs 26184, both 26172 +Total good frames: 73670 Total undetected errors: 12 +Bit error rate (on message bits only): 2.567e-02 +seed 748 +Eliminated 107 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73980 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26020, with src errs 25919, both 25911 +Total good frames: 73972 Total undetected errors: 8 +Bit error rate (on message bits only): 2.575e-02 +seed 749 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73683 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26317, with src errs 26209, both 26198 +Total good frames: 73672 Total undetected errors: 11 +Bit error rate (on message bits only): 2.635e-02 +seed 750 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73710 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26290, with src errs 26199, both 26181 +Total good frames: 73692 Total undetected errors: 18 +Bit error rate (on message bits only): 2.613e-02 +seed 751 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74184 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25816, with src errs 25718, both 25700 +Total good frames: 74166 Total undetected errors: 18 +Bit error rate (on message bits only): 2.545e-02 +seed 752 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73458 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26542, with src errs 26424, both 26409 +Total good frames: 73443 Total undetected errors: 15 +Bit error rate (on message bits only): 2.620e-02 +seed 753 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74118 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25882, with src errs 25798, both 25771 +Total good frames: 74091 Total undetected errors: 27 +Bit error rate (on message bits only): 2.571e-02 +seed 754 +Eliminated 107 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73899 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26101, with src errs 25991, both 25984 +Total good frames: 73892 Total undetected errors: 7 +Bit error rate (on message bits only): 2.588e-02 +seed 755 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73795 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26205, with src errs 26134, both 26117 +Total good frames: 73778 Total undetected errors: 17 +Bit error rate (on message bits only): 2.645e-02 +seed 756 +Eliminated 114 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73567 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26433, with src errs 26511, both 26345 +Total good frames: 73401 Total undetected errors: 166 +Bit error rate (on message bits only): 2.664e-02 +seed 757 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73927 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26073, with src errs 25946, both 25930 +Total good frames: 73911 Total undetected errors: 16 +Bit error rate (on message bits only): 2.562e-02 +seed 758 +Eliminated 104 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73257 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26743, with src errs 26640, both 26632 +Total good frames: 73249 Total undetected errors: 8 +Bit error rate (on message bits only): 2.657e-02 +seed 759 +Eliminated 107 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73562 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26438, with src errs 26369, both 26354 +Total good frames: 73547 Total undetected errors: 15 +Bit error rate (on message bits only): 2.631e-02 +seed 760 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74664 valid. Average 17.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25336, with src errs 25242, both 25234 +Total good frames: 74656 Total undetected errors: 8 +Bit error rate (on message bits only): 2.547e-02 +seed 761 +Eliminated 55 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74010 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25990, with src errs 25890, both 25878 +Total good frames: 73998 Total undetected errors: 12 +Bit error rate (on message bits only): 2.585e-02 +seed 762 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73640 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26360, with src errs 26229, both 26219 +Total good frames: 73630 Total undetected errors: 10 +Bit error rate (on message bits only): 2.589e-02 +seed 763 +Eliminated 73 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73906 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26094, with src errs 26015, both 25989 +Total good frames: 73880 Total undetected errors: 26 +Bit error rate (on message bits only): 2.592e-02 +seed 764 +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74096 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25904, with src errs 25754, both 25740 +Total good frames: 74082 Total undetected errors: 14 +Bit error rate (on message bits only): 2.527e-02 +seed 765 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74226 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25774, with src errs 25681, both 25669 +Total good frames: 74214 Total undetected errors: 12 +Bit error rate (on message bits only): 2.595e-02 +seed 766 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73867 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26133, with src errs 25996, both 25982 +Total good frames: 73853 Total undetected errors: 14 +Bit error rate (on message bits only): 2.552e-02 +seed 767 +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74006 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25994, with src errs 26421, both 25876 +Total good frames: 73461 Total undetected errors: 545 +Bit error rate (on message bits only): 2.585e-02 +seed 768 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73590 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26410, with src errs 26320, both 26294 +Total good frames: 73564 Total undetected errors: 26 +Bit error rate (on message bits only): 2.602e-02 +seed 769 +Eliminated 124 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74197 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25803, with src errs 25722, both 25711 +Total good frames: 74186 Total undetected errors: 11 +Bit error rate (on message bits only): 2.571e-02 +seed 770 +Eliminated 115 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73616 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26384, with src errs 26263, both 26244 +Total good frames: 73597 Total undetected errors: 19 +Bit error rate (on message bits only): 2.593e-02 +seed 771 +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73937 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26063, with src errs 25940, both 25931 +Total good frames: 73928 Total undetected errors: 9 +Bit error rate (on message bits only): 2.600e-02 +seed 772 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73773 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26227, with src errs 26143, both 26132 +Total good frames: 73762 Total undetected errors: 11 +Bit error rate (on message bits only): 2.583e-02 +seed 773 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74132 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25868, with src errs 25746, both 25720 +Total good frames: 74106 Total undetected errors: 26 +Bit error rate (on message bits only): 2.570e-02 +seed 774 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74600 valid. Average 17.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25400, with src errs 25255, both 25241 +Total good frames: 74586 Total undetected errors: 14 +Bit error rate (on message bits only): 2.505e-02 +seed 775 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73745 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26255, with src errs 26160, both 26123 +Total good frames: 73708 Total undetected errors: 37 +Bit error rate (on message bits only): 2.587e-02 +seed 776 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73431 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26569, with src errs 26466, both 26456 +Total good frames: 73421 Total undetected errors: 10 +Bit error rate (on message bits only): 2.572e-02 +seed 777 +Had to place 1 checks in rows unevenly +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73364 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26636, with src errs 26549, both 26539 +Total good frames: 73354 Total undetected errors: 10 +Bit error rate (on message bits only): 2.641e-02 +seed 778 +Eliminated 49 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74217 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25783, with src errs 25698, both 25692 +Total good frames: 74211 Total undetected errors: 6 +Bit error rate (on message bits only): 2.593e-02 +seed 779 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73661 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26339, with src errs 26230, both 26222 +Total good frames: 73653 Total undetected errors: 8 +Bit error rate (on message bits only): 2.637e-02 +seed 780 +Eliminated 107 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73825 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26175, with src errs 26079, both 26070 +Total good frames: 73816 Total undetected errors: 9 +Bit error rate (on message bits only): 2.594e-02 +seed 781 +Eliminated 71 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73550 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26450, with src errs 26352, both 26335 +Total good frames: 73533 Total undetected errors: 17 +Bit error rate (on message bits only): 2.637e-02 +seed 782 +Eliminated 136 cycles of length four by moving checks within column +Couldn't eliminate all cycles of length four in 10 passes +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72641 valid. Average 18.7 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27359, with src errs 27268, both 27257 +Total good frames: 72630 Total undetected errors: 11 +Bit error rate (on message bits only): 2.687e-02 +seed 783 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73522 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26478, with src errs 26576, both 26362 +Total good frames: 73308 Total undetected errors: 214 +Bit error rate (on message bits only): 2.645e-02 +seed 784 +Eliminated 70 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73416 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26584, with src errs 26484, both 26472 +Total good frames: 73404 Total undetected errors: 12 +Bit error rate (on message bits only): 2.586e-02 +seed 785 +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74240 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25760, with src errs 25642, both 25637 +Total good frames: 74235 Total undetected errors: 5 +Bit error rate (on message bits only): 2.567e-02 +seed 786 +Eliminated 113 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73930 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26070, with src errs 25992, both 25976 +Total good frames: 73914 Total undetected errors: 16 +Bit error rate (on message bits only): 2.621e-02 +seed 787 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74019 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25981, with src errs 25850, both 25827 +Total good frames: 73996 Total undetected errors: 23 +Bit error rate (on message bits only): 2.568e-02 +seed 788 +Eliminated 108 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73439 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26561, with src errs 26470, both 26458 +Total good frames: 73427 Total undetected errors: 12 +Bit error rate (on message bits only): 2.640e-02 +seed 789 +Eliminated 70 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73595 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26405, with src errs 26325, both 26307 +Total good frames: 73577 Total undetected errors: 18 +Bit error rate (on message bits only): 2.625e-02 +seed 790 +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73604 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26396, with src errs 26310, both 26278 +Total good frames: 73572 Total undetected errors: 32 +Bit error rate (on message bits only): 2.592e-02 +seed 791 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73779 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26221, with src errs 26120, both 26093 +Total good frames: 73752 Total undetected errors: 27 +Bit error rate (on message bits only): 2.586e-02 +seed 792 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73767 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26233, with src errs 26130, both 26125 +Total good frames: 73762 Total undetected errors: 5 +Bit error rate (on message bits only): 2.617e-02 +seed 793 +Eliminated 69 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74760 valid. Average 17.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25240, with src errs 25124, both 25103 +Total good frames: 74739 Total undetected errors: 21 +Bit error rate (on message bits only): 2.509e-02 +seed 794 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73697 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26303, with src errs 26200, both 26188 +Total good frames: 73685 Total undetected errors: 12 +Bit error rate (on message bits only): 2.642e-02 +seed 795 +Eliminated 124 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73894 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26106, with src errs 26024, both 26010 +Total good frames: 73880 Total undetected errors: 14 +Bit error rate (on message bits only): 2.552e-02 +seed 796 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73911 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26089, with src errs 25967, both 25953 +Total good frames: 73897 Total undetected errors: 14 +Bit error rate (on message bits only): 2.613e-02 +seed 797 +Eliminated 80 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74122 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25878, with src errs 25790, both 25785 +Total good frames: 74117 Total undetected errors: 5 +Bit error rate (on message bits only): 2.586e-02 +seed 798 +Eliminated 67 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73786 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26214, with src errs 26133, both 26122 +Total good frames: 73775 Total undetected errors: 11 +Bit error rate (on message bits only): 2.647e-02 +seed 799 +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73493 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26507, with src errs 26435, both 26427 +Total good frames: 73485 Total undetected errors: 8 +Bit error rate (on message bits only): 2.660e-02 +seed 800 +Eliminated 116 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73426 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26574, with src errs 26460, both 26442 +Total good frames: 73408 Total undetected errors: 18 +Bit error rate (on message bits only): 2.686e-02 +seed 801 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73484 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26516, with src errs 26400, both 26385 +Total good frames: 73469 Total undetected errors: 15 +Bit error rate (on message bits only): 2.608e-02 +seed 802 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73199 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26801, with src errs 26719, both 26692 +Total good frames: 73172 Total undetected errors: 27 +Bit error rate (on message bits only): 2.638e-02 +seed 803 +Eliminated 112 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73364 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26636, with src errs 26588, both 26550 +Total good frames: 73326 Total undetected errors: 38 +Bit error rate (on message bits only): 2.624e-02 +seed 804 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 25.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73906 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26094, with src errs 25980, both 25974 +Total good frames: 73900 Total undetected errors: 6 +Bit error rate (on message bits only): 2.563e-02 +seed 805 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73570 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26430, with src errs 26355, both 26343 +Total good frames: 73558 Total undetected errors: 12 +Bit error rate (on message bits only): 2.672e-02 +seed 806 +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73807 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26193, with src errs 26138, both 26090 +Total good frames: 73759 Total undetected errors: 48 +Bit error rate (on message bits only): 2.633e-02 +seed 807 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73354 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26646, with src errs 26538, both 26506 +Total good frames: 73322 Total undetected errors: 32 +Bit error rate (on message bits only): 2.596e-02 +seed 808 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74118 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25882, with src errs 25795, both 25784 +Total good frames: 74107 Total undetected errors: 11 +Bit error rate (on message bits only): 2.593e-02 +seed 809 +Had to place 1 checks in rows unevenly +Eliminated 70 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73792 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26208, with src errs 26111, both 26095 +Total good frames: 73776 Total undetected errors: 16 +Bit error rate (on message bits only): 2.609e-02 +seed 810 +Eliminated 63 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74532 valid. Average 17.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25468, with src errs 25369, both 25357 +Total good frames: 74520 Total undetected errors: 12 +Bit error rate (on message bits only): 2.551e-02 +seed 811 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73913 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26087, with src errs 25987, both 25973 +Total good frames: 73899 Total undetected errors: 14 +Bit error rate (on message bits only): 2.614e-02 +seed 812 +Eliminated 120 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73567 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26433, with src errs 26343, both 26325 +Total good frames: 73549 Total undetected errors: 18 +Bit error rate (on message bits only): 2.630e-02 +seed 813 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73412 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26588, with src errs 26644, both 26465 +Total good frames: 73233 Total undetected errors: 179 +Bit error rate (on message bits only): 2.628e-02 +seed 814 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73657 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26343, with src errs 26294, both 26271 +Total good frames: 73634 Total undetected errors: 23 +Bit error rate (on message bits only): 2.620e-02 +seed 815 +Eliminated 106 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73499 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26501, with src errs 26394, both 26376 +Total good frames: 73481 Total undetected errors: 18 +Bit error rate (on message bits only): 2.652e-02 +seed 816 +Had to place 1 checks in rows unevenly +Eliminated 129 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72971 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27029, with src errs 26949, both 26938 +Total good frames: 72960 Total undetected errors: 11 +Bit error rate (on message bits only): 2.672e-02 +seed 817 +Eliminated 72 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74030 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25970, with src errs 25888, both 25880 +Total good frames: 74022 Total undetected errors: 8 +Bit error rate (on message bits only): 2.605e-02 +seed 818 +Eliminated 103 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73383 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26617, with src errs 26511, both 26499 +Total good frames: 73371 Total undetected errors: 12 +Bit error rate (on message bits only): 2.662e-02 +seed 819 +Eliminated 109 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73635 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26365, with src errs 26273, both 26259 +Total good frames: 73621 Total undetected errors: 14 +Bit error rate (on message bits only): 2.594e-02 +seed 820 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73958 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26042, with src errs 25949, both 25931 +Total good frames: 73940 Total undetected errors: 18 +Bit error rate (on message bits only): 2.618e-02 +seed 821 +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73457 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26543, with src errs 26479, both 26397 +Total good frames: 73375 Total undetected errors: 82 +Bit error rate (on message bits only): 2.650e-02 +seed 822 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73918 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26082, with src errs 25969, both 25952 +Total good frames: 73901 Total undetected errors: 17 +Bit error rate (on message bits only): 2.593e-02 +seed 823 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73020 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26980, with src errs 26893, both 26878 +Total good frames: 73005 Total undetected errors: 15 +Bit error rate (on message bits only): 2.706e-02 +seed 824 +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73436 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26564, with src errs 26484, both 26478 +Total good frames: 73430 Total undetected errors: 6 +Bit error rate (on message bits only): 2.679e-02 +seed 825 +Eliminated 130 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72853 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27147, with src errs 27033, both 27019 +Total good frames: 72839 Total undetected errors: 14 +Bit error rate (on message bits only): 2.657e-02 +seed 826 +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73484 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26516, with src errs 26410, both 26399 +Total good frames: 73473 Total undetected errors: 11 +Bit error rate (on message bits only): 2.654e-02 +seed 827 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73905 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26095, with src errs 26009, both 26000 +Total good frames: 73896 Total undetected errors: 9 +Bit error rate (on message bits only): 2.612e-02 +seed 828 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73743 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26257, with src errs 26127, both 26123 +Total good frames: 73739 Total undetected errors: 4 +Bit error rate (on message bits only): 2.587e-02 +seed 829 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73951 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26049, with src errs 25954, both 25931 +Total good frames: 73928 Total undetected errors: 23 +Bit error rate (on message bits only): 2.604e-02 +seed 830 +Eliminated 115 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73076 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26924, with src errs 26827, both 26809 +Total good frames: 73058 Total undetected errors: 18 +Bit error rate (on message bits only): 2.616e-02 +seed 831 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74453 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25547, with src errs 25488, both 25443 +Total good frames: 74408 Total undetected errors: 45 +Bit error rate (on message bits only): 2.527e-02 +seed 832 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73772 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26228, with src errs 26126, both 26107 +Total good frames: 73753 Total undetected errors: 19 +Bit error rate (on message bits only): 2.580e-02 +seed 833 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73074 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26926, with src errs 26840, both 26828 +Total good frames: 73062 Total undetected errors: 12 +Bit error rate (on message bits only): 2.638e-02 +seed 834 +Eliminated 111 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73875 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26125, with src errs 26031, both 26009 +Total good frames: 73853 Total undetected errors: 22 +Bit error rate (on message bits only): 2.572e-02 +seed 835 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73671 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26329, with src errs 26225, both 26210 +Total good frames: 73656 Total undetected errors: 15 +Bit error rate (on message bits only): 2.589e-02 +seed 836 +Eliminated 74 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73416 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26584, with src errs 26469, both 26462 +Total good frames: 73409 Total undetected errors: 7 +Bit error rate (on message bits only): 2.631e-02 +seed 837 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73147 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26853, with src errs 26763, both 26756 +Total good frames: 73140 Total undetected errors: 7 +Bit error rate (on message bits only): 2.644e-02 +seed 838 +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74176 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25824, with src errs 26162, both 25738 +Total good frames: 73752 Total undetected errors: 424 +Bit error rate (on message bits only): 2.629e-02 +seed 839 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73332 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26668, with src errs 26554, both 26544 +Total good frames: 73322 Total undetected errors: 10 +Bit error rate (on message bits only): 2.634e-02 +seed 840 +Eliminated 110 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73324 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26676, with src errs 26571, both 26567 +Total good frames: 73320 Total undetected errors: 4 +Bit error rate (on message bits only): 2.616e-02 +seed 841 +Eliminated 121 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72977 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27023, with src errs 26932, both 26927 +Total good frames: 72972 Total undetected errors: 5 +Bit error rate (on message bits only): 2.671e-02 +seed 842 +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73844 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26156, with src errs 26068, both 26046 +Total good frames: 73822 Total undetected errors: 22 +Bit error rate (on message bits only): 2.640e-02 +seed 843 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73559 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26441, with src errs 26313, both 26303 +Total good frames: 73549 Total undetected errors: 10 +Bit error rate (on message bits only): 2.616e-02 +seed 844 +Had to place 1 checks in rows unevenly +Eliminated 73 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74092 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25908, with src errs 25826, both 25817 +Total good frames: 74083 Total undetected errors: 9 +Bit error rate (on message bits only): 2.613e-02 +seed 845 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74007 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25993, with src errs 25909, both 25893 +Total good frames: 73991 Total undetected errors: 16 +Bit error rate (on message bits only): 2.563e-02 +seed 846 +Had to place 1 checks in rows unevenly +Eliminated 104 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74026 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25974, with src errs 25833, both 25819 +Total good frames: 74012 Total undetected errors: 14 +Bit error rate (on message bits only): 2.514e-02 +seed 847 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74266 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25734, with src errs 25659, both 25645 +Total good frames: 74252 Total undetected errors: 14 +Bit error rate (on message bits only): 2.590e-02 +seed 848 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73700 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26300, with src errs 26255, both 26211 +Total good frames: 73656 Total undetected errors: 44 +Bit error rate (on message bits only): 2.607e-02 +seed 849 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73111 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26889, with src errs 26811, both 26798 +Total good frames: 73098 Total undetected errors: 13 +Bit error rate (on message bits only): 2.677e-02 +seed 850 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74142 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25858, with src errs 26208, both 25763 +Total good frames: 73697 Total undetected errors: 445 +Bit error rate (on message bits only): 2.571e-02 +seed 851 +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73146 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26854, with src errs 26749, both 26721 +Total good frames: 73118 Total undetected errors: 28 +Bit error rate (on message bits only): 2.705e-02 +seed 852 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73421 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26579, with src errs 26484, both 26474 +Total good frames: 73411 Total undetected errors: 10 +Bit error rate (on message bits only): 2.682e-02 +seed 853 +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74238 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25762, with src errs 25670, both 25651 +Total good frames: 74219 Total undetected errors: 19 +Bit error rate (on message bits only): 2.573e-02 +seed 854 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73579 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26421, with src errs 26331, both 26318 +Total good frames: 73566 Total undetected errors: 13 +Bit error rate (on message bits only): 2.644e-02 +seed 855 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73052 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26948, with src errs 26858, both 26851 +Total good frames: 73045 Total undetected errors: 7 +Bit error rate (on message bits only): 2.686e-02 +seed 856 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73524 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26476, with src errs 26369, both 26358 +Total good frames: 73513 Total undetected errors: 11 +Bit error rate (on message bits only): 2.609e-02 +seed 857 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73716 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26284, with src errs 26174, both 26163 +Total good frames: 73705 Total undetected errors: 11 +Bit error rate (on message bits only): 2.596e-02 +seed 858 +Eliminated 114 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74052 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25948, with src errs 25849, both 25821 +Total good frames: 74024 Total undetected errors: 28 +Bit error rate (on message bits only): 2.561e-02 +seed 859 +Eliminated 106 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73652 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26348, with src errs 26323, both 26250 +Total good frames: 73579 Total undetected errors: 73 +Bit error rate (on message bits only): 2.651e-02 +seed 860 +Eliminated 72 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74013 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25987, with src errs 25886, both 25877 +Total good frames: 74004 Total undetected errors: 9 +Bit error rate (on message bits only): 2.595e-02 +seed 861 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74054 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25946, with src errs 25818, both 25809 +Total good frames: 74045 Total undetected errors: 9 +Bit error rate (on message bits only): 2.579e-02 +seed 862 +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74143 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25857, with src errs 25776, both 25726 +Total good frames: 74093 Total undetected errors: 50 +Bit error rate (on message bits only): 2.558e-02 +seed 863 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73128 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26872, with src errs 26798, both 26780 +Total good frames: 73110 Total undetected errors: 18 +Bit error rate (on message bits only): 2.651e-02 +seed 864 +Eliminated 86 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73160 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26840, with src errs 26765, both 26747 +Total good frames: 73142 Total undetected errors: 18 +Bit error rate (on message bits only): 2.687e-02 +seed 865 +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74385 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25615, with src errs 25485, both 25469 +Total good frames: 74369 Total undetected errors: 16 +Bit error rate (on message bits only): 2.530e-02 +seed 866 +Eliminated 117 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73325 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26675, with src errs 26602, both 26587 +Total good frames: 73310 Total undetected errors: 15 +Bit error rate (on message bits only): 2.644e-02 +seed 867 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74112 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25888, with src errs 25826, both 25775 +Total good frames: 74061 Total undetected errors: 51 +Bit error rate (on message bits only): 2.591e-02 +seed 868 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73513 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26487, with src errs 26404, both 26391 +Total good frames: 73500 Total undetected errors: 13 +Bit error rate (on message bits only): 2.642e-02 +seed 869 +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74073 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25927, with src errs 25773, both 25759 +Total good frames: 74059 Total undetected errors: 14 +Bit error rate (on message bits only): 2.589e-02 +seed 870 +Eliminated 76 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73958 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26042, with src errs 25935, both 25918 +Total good frames: 73941 Total undetected errors: 17 +Bit error rate (on message bits only): 2.587e-02 +seed 871 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74238 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25762, with src errs 25656, both 25647 +Total good frames: 74229 Total undetected errors: 9 +Bit error rate (on message bits only): 2.575e-02 +seed 872 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73951 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26049, with src errs 25957, both 25947 +Total good frames: 73941 Total undetected errors: 10 +Bit error rate (on message bits only): 2.611e-02 +seed 873 +Eliminated 88 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74357 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25643, with src errs 25532, both 25521 +Total good frames: 74346 Total undetected errors: 11 +Bit error rate (on message bits only): 2.552e-02 +seed 874 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74282 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25718, with src errs 25606, both 25590 +Total good frames: 74266 Total undetected errors: 16 +Bit error rate (on message bits only): 2.489e-02 +seed 875 +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74195 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25805, with src errs 25687, both 25664 +Total good frames: 74172 Total undetected errors: 23 +Bit error rate (on message bits only): 2.568e-02 +seed 876 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74037 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25963, with src errs 25835, both 25820 +Total good frames: 74022 Total undetected errors: 15 +Bit error rate (on message bits only): 2.556e-02 +seed 877 +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74137 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25863, with src errs 25760, both 25744 +Total good frames: 74121 Total undetected errors: 16 +Bit error rate (on message bits only): 2.542e-02 +seed 878 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73883 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26117, with src errs 26052, both 26037 +Total good frames: 73868 Total undetected errors: 15 +Bit error rate (on message bits only): 2.622e-02 +seed 879 +Eliminated 118 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73496 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26504, with src errs 26395, both 26384 +Total good frames: 73485 Total undetected errors: 11 +Bit error rate (on message bits only): 2.614e-02 +seed 880 +Eliminated 110 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73741 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26259, with src errs 26133, both 26119 +Total good frames: 73727 Total undetected errors: 14 +Bit error rate (on message bits only): 2.581e-02 +seed 881 +Had to place 1 checks in rows unevenly +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73373 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26627, with src errs 26550, both 26510 +Total good frames: 73333 Total undetected errors: 40 +Bit error rate (on message bits only): 2.592e-02 +seed 882 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73792 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26208, with src errs 26155, both 26119 +Total good frames: 73756 Total undetected errors: 36 +Bit error rate (on message bits only): 2.637e-02 +seed 883 +Eliminated 91 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73493 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26507, with src errs 26410, both 26397 +Total good frames: 73480 Total undetected errors: 13 +Bit error rate (on message bits only): 2.585e-02 +seed 884 +Eliminated 118 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72053 valid. Average 19.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27947, with src errs 27916, both 27808 +Total good frames: 71945 Total undetected errors: 108 +Bit error rate (on message bits only): 2.743e-02 +seed 885 +Eliminated 68 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73304 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26696, with src errs 26609, both 26594 +Total good frames: 73289 Total undetected errors: 15 +Bit error rate (on message bits only): 2.695e-02 +seed 886 +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73894 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26106, with src errs 25998, both 25984 +Total good frames: 73880 Total undetected errors: 14 +Bit error rate (on message bits only): 2.601e-02 +seed 887 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73612 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26388, with src errs 26290, both 26279 +Total good frames: 73601 Total undetected errors: 11 +Bit error rate (on message bits only): 2.618e-02 +seed 888 +Eliminated 111 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73711 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26289, with src errs 26171, both 26150 +Total good frames: 73690 Total undetected errors: 21 +Bit error rate (on message bits only): 2.589e-02 +seed 889 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73497 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26503, with src errs 26391, both 26374 +Total good frames: 73480 Total undetected errors: 17 +Bit error rate (on message bits only): 2.604e-02 +seed 890 +Eliminated 118 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72374 valid. Average 18.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27626, with src errs 27556, both 27512 +Total good frames: 72330 Total undetected errors: 44 +Bit error rate (on message bits only): 2.742e-02 +seed 891 +Eliminated 72 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74230 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25770, with src errs 25655, both 25641 +Total good frames: 74216 Total undetected errors: 14 +Bit error rate (on message bits only): 2.539e-02 +seed 892 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73875 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26125, with src errs 26027, both 26014 +Total good frames: 73862 Total undetected errors: 13 +Bit error rate (on message bits only): 2.601e-02 +seed 893 +Eliminated 119 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73763 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26237, with src errs 26090, both 26071 +Total good frames: 73744 Total undetected errors: 19 +Bit error rate (on message bits only): 2.545e-02 +seed 894 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73377 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26623, with src errs 26506, both 26494 +Total good frames: 73365 Total undetected errors: 12 +Bit error rate (on message bits only): 2.611e-02 +seed 895 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73649 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26351, with src errs 26248, both 26238 +Total good frames: 73639 Total undetected errors: 10 +Bit error rate (on message bits only): 2.592e-02 +seed 896 +Had to place 1 checks in rows unevenly +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73728 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26272, with src errs 26179, both 26171 +Total good frames: 73720 Total undetected errors: 8 +Bit error rate (on message bits only): 2.631e-02 +seed 897 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73510 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26490, with src errs 26385, both 26365 +Total good frames: 73490 Total undetected errors: 20 +Bit error rate (on message bits only): 2.588e-02 +seed 898 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73630 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26370, with src errs 26284, both 26274 +Total good frames: 73620 Total undetected errors: 10 +Bit error rate (on message bits only): 2.649e-02 +seed 899 +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74071 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25929, with src errs 25862, both 25844 +Total good frames: 74053 Total undetected errors: 18 +Bit error rate (on message bits only): 2.606e-02 +seed 900 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73774 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26226, with src errs 26089, both 26070 +Total good frames: 73755 Total undetected errors: 19 +Bit error rate (on message bits only): 2.517e-02 +seed 901 +Eliminated 128 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73260 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26740, with src errs 26624, both 26610 +Total good frames: 73246 Total undetected errors: 14 +Bit error rate (on message bits only): 2.616e-02 +seed 902 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73643 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26357, with src errs 26271, both 26248 +Total good frames: 73620 Total undetected errors: 23 +Bit error rate (on message bits only): 2.611e-02 +seed 903 +Eliminated 81 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73801 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26199, with src errs 26109, both 26093 +Total good frames: 73785 Total undetected errors: 16 +Bit error rate (on message bits only): 2.575e-02 +seed 904 +Eliminated 79 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73955 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26045, with src errs 25941, both 25919 +Total good frames: 73933 Total undetected errors: 22 +Bit error rate (on message bits only): 2.567e-02 +seed 905 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72861 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27139, with src errs 27054, both 27037 +Total good frames: 72844 Total undetected errors: 17 +Bit error rate (on message bits only): 2.654e-02 +seed 906 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73757 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26243, with src errs 26125, both 26113 +Total good frames: 73745 Total undetected errors: 12 +Bit error rate (on message bits only): 2.611e-02 +seed 907 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74004 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25996, with src errs 25918, both 25904 +Total good frames: 73990 Total undetected errors: 14 +Bit error rate (on message bits only): 2.553e-02 +seed 908 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73664 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26336, with src errs 26243, both 26230 +Total good frames: 73651 Total undetected errors: 13 +Bit error rate (on message bits only): 2.605e-02 +seed 909 +Eliminated 66 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73557 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26443, with src errs 26363, both 26348 +Total good frames: 73542 Total undetected errors: 15 +Bit error rate (on message bits only): 2.636e-02 +seed 910 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73928 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26072, with src errs 26019, both 25983 +Total good frames: 73892 Total undetected errors: 36 +Bit error rate (on message bits only): 2.627e-02 +seed 911 +Eliminated 64 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74160 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25840, with src errs 25754, both 25744 +Total good frames: 74150 Total undetected errors: 10 +Bit error rate (on message bits only): 2.596e-02 +seed 912 +Eliminated 73 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74243 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25757, with src errs 25727, both 25653 +Total good frames: 74169 Total undetected errors: 74 +Bit error rate (on message bits only): 2.555e-02 +seed 913 +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73900 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26100, with src errs 26003, both 25988 +Total good frames: 73885 Total undetected errors: 15 +Bit error rate (on message bits only): 2.612e-02 +seed 914 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73144 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26856, with src errs 26772, both 26748 +Total good frames: 73120 Total undetected errors: 24 +Bit error rate (on message bits only): 2.621e-02 +seed 915 +Eliminated 109 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73592 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26408, with src errs 26307, both 26297 +Total good frames: 73582 Total undetected errors: 10 +Bit error rate (on message bits only): 2.574e-02 +seed 916 +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73743 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26257, with src errs 26161, both 26149 +Total good frames: 73731 Total undetected errors: 12 +Bit error rate (on message bits only): 2.629e-02 +seed 917 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74386 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25614, with src errs 25504, both 25491 +Total good frames: 74373 Total undetected errors: 13 +Bit error rate (on message bits only): 2.583e-02 +seed 918 +Eliminated 72 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74347 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25653, with src errs 25555, both 25534 +Total good frames: 74326 Total undetected errors: 21 +Bit error rate (on message bits only): 2.546e-02 +seed 919 +Eliminated 119 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73431 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26569, with src errs 26469, both 26447 +Total good frames: 73409 Total undetected errors: 22 +Bit error rate (on message bits only): 2.585e-02 +seed 920 +Eliminated 94 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73490 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26510, with src errs 26421, both 26409 +Total good frames: 73478 Total undetected errors: 12 +Bit error rate (on message bits only): 2.676e-02 +seed 921 +Had to place 1 checks in rows unevenly +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74271 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25729, with src errs 25623, both 25609 +Total good frames: 74257 Total undetected errors: 14 +Bit error rate (on message bits only): 2.520e-02 +seed 922 +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74091 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25909, with src errs 25815, both 25799 +Total good frames: 74075 Total undetected errors: 16 +Bit error rate (on message bits only): 2.573e-02 +seed 923 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73180 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26820, with src errs 26742, both 26718 +Total good frames: 73156 Total undetected errors: 24 +Bit error rate (on message bits only): 2.639e-02 +seed 924 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74211 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25789, with src errs 25667, both 25655 +Total good frames: 74199 Total undetected errors: 12 +Bit error rate (on message bits only): 2.588e-02 +seed 925 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73427 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26573, with src errs 26495, both 26454 +Total good frames: 73386 Total undetected errors: 41 +Bit error rate (on message bits only): 2.643e-02 +seed 926 +Eliminated 103 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73442 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26558, with src errs 26628, both 26462 +Total good frames: 73276 Total undetected errors: 166 +Bit error rate (on message bits only): 2.663e-02 +seed 927 +Eliminated 80 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74191 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25809, with src errs 25689, both 25675 +Total good frames: 74177 Total undetected errors: 14 +Bit error rate (on message bits only): 2.580e-02 +seed 928 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73561 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26439, with src errs 26352, both 26336 +Total good frames: 73545 Total undetected errors: 16 +Bit error rate (on message bits only): 2.657e-02 +seed 929 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73283 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26717, with src errs 26659, both 26637 +Total good frames: 73261 Total undetected errors: 22 +Bit error rate (on message bits only): 2.660e-02 +seed 930 +Eliminated 109 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73983 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26017, with src errs 25915, both 25896 +Total good frames: 73964 Total undetected errors: 19 +Bit error rate (on message bits only): 2.603e-02 +seed 931 +Had to place 1 checks in rows unevenly +Eliminated 98 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73103 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26897, with src errs 26839, both 26822 +Total good frames: 73086 Total undetected errors: 17 +Bit error rate (on message bits only): 2.650e-02 +seed 932 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74339 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25661, with src errs 25478, both 25463 +Total good frames: 74324 Total undetected errors: 15 +Bit error rate (on message bits only): 2.532e-02 +seed 933 +Eliminated 75 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74286 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25714, with src errs 25593, both 25580 +Total good frames: 74273 Total undetected errors: 13 +Bit error rate (on message bits only): 2.580e-02 +seed 934 +Eliminated 101 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73146 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26854, with src errs 26766, both 26755 +Total good frames: 73135 Total undetected errors: 11 +Bit error rate (on message bits only): 2.636e-02 +seed 935 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73604 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26396, with src errs 26293, both 26278 +Total good frames: 73589 Total undetected errors: 15 +Bit error rate (on message bits only): 2.616e-02 +seed 936 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72992 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27008, with src errs 26906, both 26898 +Total good frames: 72984 Total undetected errors: 8 +Bit error rate (on message bits only): 2.645e-02 +seed 937 +Eliminated 52 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74434 valid. Average 17.9 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25566, with src errs 25492, both 25481 +Total good frames: 74423 Total undetected errors: 11 +Bit error rate (on message bits only): 2.581e-02 +seed 938 +Eliminated 68 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 32.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73913 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26087, with src errs 25985, both 25974 +Total good frames: 73902 Total undetected errors: 11 +Bit error rate (on message bits only): 2.606e-02 +seed 939 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73836 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26164, with src errs 26019, both 26008 +Total good frames: 73825 Total undetected errors: 11 +Bit error rate (on message bits only): 2.551e-02 +seed 940 +Eliminated 107 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73693 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26307, with src errs 26216, both 26203 +Total good frames: 73680 Total undetected errors: 13 +Bit error rate (on message bits only): 2.595e-02 +seed 941 +Eliminated 92 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73553 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26447, with src errs 26346, both 26329 +Total good frames: 73536 Total undetected errors: 17 +Bit error rate (on message bits only): 2.602e-02 +seed 942 +Eliminated 121 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73855 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26145, with src errs 26018, both 25999 +Total good frames: 73836 Total undetected errors: 19 +Bit error rate (on message bits only): 2.575e-02 +seed 943 +Eliminated 80 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73914 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26086, with src errs 25994, both 25985 +Total good frames: 73905 Total undetected errors: 9 +Bit error rate (on message bits only): 2.624e-02 +seed 944 +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73941 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26059, with src errs 25992, both 25973 +Total good frames: 73922 Total undetected errors: 19 +Bit error rate (on message bits only): 2.565e-02 +seed 945 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73774 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26226, with src errs 26122, both 26106 +Total good frames: 73758 Total undetected errors: 16 +Bit error rate (on message bits only): 2.629e-02 +seed 946 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73432 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26568, with src errs 26448, both 26441 +Total good frames: 73425 Total undetected errors: 7 +Bit error rate (on message bits only): 2.619e-02 +seed 947 +Eliminated 110 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73252 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26748, with src errs 26636, both 26623 +Total good frames: 73239 Total undetected errors: 13 +Bit error rate (on message bits only): 2.620e-02 +seed 948 +Eliminated 106 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73576 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26424, with src errs 26352, both 26320 +Total good frames: 73544 Total undetected errors: 32 +Bit error rate (on message bits only): 2.574e-02 +seed 949 +Eliminated 115 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 26.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73682 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26318, with src errs 26193, both 26170 +Total good frames: 73659 Total undetected errors: 23 +Bit error rate (on message bits only): 2.572e-02 +seed 950 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73845 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26155, with src errs 26064, both 26046 +Total good frames: 73827 Total undetected errors: 18 +Bit error rate (on message bits only): 2.566e-02 +seed 951 +Eliminated 85 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 33.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73271 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26729, with src errs 26655, both 26646 +Total good frames: 73262 Total undetected errors: 9 +Bit error rate (on message bits only): 2.657e-02 +seed 952 +Eliminated 103 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73607 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26393, with src errs 26277, both 26263 +Total good frames: 73593 Total undetected errors: 14 +Bit error rate (on message bits only): 2.617e-02 +seed 953 +Eliminated 109 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.8 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73443 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26557, with src errs 26482, both 26468 +Total good frames: 73429 Total undetected errors: 14 +Bit error rate (on message bits only): 2.630e-02 +seed 954 +Eliminated 105 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74022 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25978, with src errs 25890, both 25866 +Total good frames: 73998 Total undetected errors: 24 +Bit error rate (on message bits only): 2.564e-02 +seed 955 +Eliminated 123 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73394 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26606, with src errs 26493, both 26475 +Total good frames: 73376 Total undetected errors: 18 +Bit error rate (on message bits only): 2.575e-02 +seed 956 +Eliminated 120 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73960 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26040, with src errs 25948, both 25935 +Total good frames: 73947 Total undetected errors: 13 +Bit error rate (on message bits only): 2.593e-02 +seed 957 +Eliminated 83 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72969 valid. Average 18.6 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27031, with src errs 26929, both 26920 +Total good frames: 72960 Total undetected errors: 9 +Bit error rate (on message bits only): 2.697e-02 +seed 958 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73673 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26327, with src errs 26260, both 26241 +Total good frames: 73654 Total undetected errors: 19 +Bit error rate (on message bits only): 2.625e-02 +seed 959 +Had to place 1 checks in rows unevenly +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74052 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25948, with src errs 25855, both 25832 +Total good frames: 74029 Total undetected errors: 23 +Bit error rate (on message bits only): 2.556e-02 +seed 960 +Eliminated 99 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73507 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26493, with src errs 26405, both 26386 +Total good frames: 73488 Total undetected errors: 19 +Bit error rate (on message bits only): 2.613e-02 +seed 961 +Had to place 1 checks in rows unevenly +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73554 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26446, with src errs 26383, both 26368 +Total good frames: 73539 Total undetected errors: 15 +Bit error rate (on message bits only): 2.686e-02 +seed 962 +Eliminated 87 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74002 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25998, with src errs 25880, both 25865 +Total good frames: 73987 Total undetected errors: 15 +Bit error rate (on message bits only): 2.573e-02 +seed 963 +Eliminated 93 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73952 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26048, with src errs 25975, both 25951 +Total good frames: 73928 Total undetected errors: 24 +Bit error rate (on message bits only): 2.617e-02 +seed 964 +Eliminated 102 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73015 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26985, with src errs 26876, both 26860 +Total good frames: 72999 Total undetected errors: 16 +Bit error rate (on message bits only): 2.665e-02 +seed 965 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73674 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26326, with src errs 26221, both 26205 +Total good frames: 73658 Total undetected errors: 16 +Bit error rate (on message bits only): 2.610e-02 +seed 966 +Eliminated 77 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73204 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26796, with src errs 26712, both 26704 +Total good frames: 73196 Total undetected errors: 8 +Bit error rate (on message bits only): 2.669e-02 +seed 967 +Eliminated 59 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74042 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25958, with src errs 25888, both 25851 +Total good frames: 74005 Total undetected errors: 37 +Bit error rate (on message bits only): 2.625e-02 +seed 968 +Eliminated 112 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 72411 valid. Average 18.8 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 27589, with src errs 27509, both 27491 +Total good frames: 72393 Total undetected errors: 18 +Bit error rate (on message bits only): 2.727e-02 +seed 969 +Eliminated 95 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73650 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26350, with src errs 26237, both 26229 +Total good frames: 73642 Total undetected errors: 8 +Bit error rate (on message bits only): 2.600e-02 +seed 970 +Eliminated 96 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73272 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26728, with src errs 26662, both 26644 +Total good frames: 73254 Total undetected errors: 18 +Bit error rate (on message bits only): 2.649e-02 +seed 971 +Had to place 1 checks in rows unevenly +Eliminated 106 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73598 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26402, with src errs 26316, both 26288 +Total good frames: 73570 Total undetected errors: 28 +Bit error rate (on message bits only): 2.591e-02 +seed 972 +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 30.9 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73916 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26084, with src errs 26057, both 25978 +Total good frames: 73837 Total undetected errors: 79 +Bit error rate (on message bits only): 2.592e-02 +seed 973 +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 33.4 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73846 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26154, with src errs 26071, both 26059 +Total good frames: 73834 Total undetected errors: 12 +Bit error rate (on message bits only): 2.647e-02 +seed 974 +Eliminated 100 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.3 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73797 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26203, with src errs 26130, both 26114 +Total good frames: 73781 Total undetected errors: 16 +Bit error rate (on message bits only): 2.635e-02 +seed 975 +Eliminated 107 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 27.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74239 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25761, with src errs 25646, both 25634 +Total good frames: 74227 Total undetected errors: 12 +Bit error rate (on message bits only): 2.535e-02 +seed 976 +Eliminated 84 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.0 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73761 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26239, with src errs 26135, both 26123 +Total good frames: 73749 Total undetected errors: 12 +Bit error rate (on message bits only): 2.587e-02 +seed 977 +Eliminated 69 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73075 valid. Average 18.5 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26925, with src errs 26816, both 26803 +Total good frames: 73062 Total undetected errors: 13 +Bit error rate (on message bits only): 2.701e-02 +seed 978 +Eliminated 90 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73905 valid. Average 18.1 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26095, with src errs 26021, both 26006 +Total good frames: 73890 Total undetected errors: 15 +Bit error rate (on message bits only): 2.640e-02 +seed 979 +Eliminated 89 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.1 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74117 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25883, with src errs 25793, both 25779 +Total good frames: 74103 Total undetected errors: 14 +Bit error rate (on message bits only): 2.593e-02 +seed 980 +Eliminated 67 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 31.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 74125 valid. Average 18.0 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 25875, with src errs 25813, both 25772 +Total good frames: 74084 Total undetected errors: 41 +Bit error rate (on message bits only): 2.611e-02 +seed 981 +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 28.6 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73631 valid. Average 18.2 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26369, with src errs 26265, both 26253 +Total good frames: 73619 Total undetected errors: 12 +Bit error rate (on message bits only): 2.608e-02 +seed 982 +Eliminated 78 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.5 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73474 valid. Average 18.3 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26526, with src errs 26439, both 26427 +Total good frames: 73462 Total undetected errors: 12 +Bit error rate (on message bits only): 2.676e-02 +seed 983 +Had to place 1 checks in rows unevenly +Eliminated 82 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.7 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits +Decoded 100000 blocks, 73267 valid. Average 18.4 iterations, 10% bit changes +Block counts: tot 100000, with chk errs 26733, with src errs 26631, both 26619 +Total good frames: 73255 Total undetected errors: 12 +Bit error rate (on message bits only): 2.634e-02 +seed 984 +Had to place 1 checks in rows unevenly +Eliminated 97 cycles of length four by moving checks within column +Number of 1s per check in Inv(A) X B is 29.2 +Encoded 100000 blocks, source block size 72, encoded block size 144 +Transmitted 14400000 bits + + [Restored] +Last login: Sun Jan 24 11:00:59 on ttys000 +Stevens-MacBook-Air:LDPC-codes-master sfranke$ diff --git a/lib/ldpc/make-gen.c b/lib/ldpc/make-gen.c new file mode 100755 index 000000000..4c9480470 --- /dev/null +++ b/lib/ldpc/make-gen.c @@ -0,0 +1,350 @@ +/* MAKE-GEN.C - Make generator matrix from parity-check matrix. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include +#include + +#include "alloc.h" +#include "intio.h" +#include "open.h" +#include "mod2sparse.h" +#include "mod2dense.h" +#include "mod2convert.h" +#include "rcode.h" + +typedef enum { Sparse, Dense, Mixed } make_method; /* Ways of making it */ + +void make_dense_mixed (FILE *, make_method, char *); /* Procs to make it */ +void make_sparse (FILE *, mod2sparse_strategy, int, int); +void usage(void); + + +/* MAIN PROGRAM. */ + +int main +( int argc, + char **argv +) +{ + char *pchk_file, *gen_file, *other_gen_file; + mod2sparse_strategy strategy; + int abandon_when, abandon_number; + make_method method; + char *meth; + char junk; + FILE *f; + + /* Look at arguments. */ + + if (!(pchk_file = argv[1]) + || !(gen_file = argv[2]) + || !(meth = argv[3])) + { usage(); + } + + if (strcmp(meth,"sparse")==0) + { method = Sparse; + strategy = Mod2sparse_minprod; + abandon_number = 0; + if (argv[4]) + { if (strcmp(argv[4],"first")==0) strategy = Mod2sparse_first; + else if (strcmp(argv[4],"mincol")==0) strategy = Mod2sparse_mincol; + else if (strcmp(argv[4],"minprod")==0) strategy = Mod2sparse_minprod; + else + { usage(); + } + if (argv[5]) + { if (sscanf(argv[5],"%d%c",&abandon_number,&junk)!=1 || abandon_number<=0 + || !argv[6] + || sscanf(argv[6],"%d%c",&abandon_when,&junk)!=1 || abandon_when<=0 + || argv[7]) + { usage(); + } + } + } + } + else if (strcmp(meth,"dense")==0) + { method = Dense; + other_gen_file = argv[4]; + if (other_gen_file && argv[5]) + { usage(); + } + } + else if (strcmp(meth,"mixed")==0) + { method = Mixed; + other_gen_file = argv[4]; + if (other_gen_file && argv[5]) + { usage(); + } + } + else + { usage(); + } + + /* Read parity check matrix. */ + + read_pchk(pchk_file); + + if (N<=M) + { fprintf(stderr, + "Can't encode if number of bits (%d) isn't greater than number of checks (%d)\n",N,M); + exit(1); + } + + /* Create generator matrix file. */ + + f = open_file_std(gen_file,"wb"); + if (f==NULL) + { fprintf(stderr,"Can't create generator matrix file: %s\n",gen_file); + exit(1); + } + + /* Allocate space for row and column permutations. */ + + cols = chk_alloc (N, sizeof *cols); + rows = chk_alloc (M, sizeof *rows); + + /* Create generator matrix with specified method. */ + + switch (method) + { case Sparse: + { make_sparse(f,strategy,abandon_number,abandon_when); + break; + } + case Dense: case Mixed: + { make_dense_mixed(f,method,other_gen_file); + break; + } + default: abort(); + } + + /* Check for error writing file. */ + + if (ferror(f) || fclose(f)!=0) + { fprintf(stderr,"Error writing to generator matrix file\n"); + exit(1); + } + + return 0; +} + + +/* MAKE DENSE OR MIXED REPRESENTATION OF GENERATOR MATRIX. */ + +void make_dense_mixed +( FILE *f, + make_method method, + char *other_gen_file +) +{ + mod2dense *DH, *A, *A2, *AI, *B; + int i, j, c, c2, n; + int *rows_inv; + + DH = mod2dense_allocate(M,N); + AI = mod2dense_allocate(M,M); + B = mod2dense_allocate(M,N-M); + G = mod2dense_allocate(M,N-M); + + mod2sparse_to_dense(H,DH); + + /* If another generator matrix was specified, invert using the set of + columns it specifies. */ + + if (other_gen_file) + { + read_gen(other_gen_file,1,0); + + A = mod2dense_allocate(M,M); + mod2dense_copycols(DH,A,cols); + + if (!mod2dense_invert(A,AI)) + { fprintf(stderr, + "Couldn't invert sub-matrix with column order given in other file\n"); + exit(1); + } + + mod2dense_copycols(DH,B,cols+M); + } + + /* If no other generator matrix was specified, invert using whatever + selection of rows/columns is needed to get a non-singular sub-matrix. */ + + if (!other_gen_file) + { + A = mod2dense_allocate(M,N); + A2 = mod2dense_allocate(M,N); + + n = mod2dense_invert_selected(DH,A2,rows,cols); + mod2sparse_to_dense(H,DH); /* DH was destroyed by invert_selected */ + + if (n>0) + { fprintf(stderr,"Note: Parity check matrix has %d redundant checks\n",n); + } + + rows_inv = chk_alloc (M, sizeof *rows_inv); + + for (i = 0; i0) + { fprintf(stderr, + "Note: Have %d dependent columns, but this could be due to abandonment.\n",n); + fprintf(stderr, + " Try again with lower abandonment number.\n"); + exit(1); + } + + /* Compute and print number of 1s. */ + + cL = cU = cB = 0; + + for (i = 0; i +#include +#include +#include + +#include "rand.h" +#include "alloc.h" +#include "intio.h" +#include "open.h" +#include "mod2sparse.h" +#include "mod2dense.h" +#include "mod2convert.h" +#include "rcode.h" +#include "distrib.h" + + +/* METHODS FOR CONSTRUCTING CODES. */ + +typedef enum +{ Evencol, /* Uniform number of bits per column, with number specified */ + Evenboth /* Uniform (as possible) over both columns and rows */ +} make_method; + + +void make_ldpc (int, make_method, distrib *, int); +int *column_partition (distrib *, int); +void usage (void); + + +/* MAIN PROGRAM. */ + +int main +( int argc, + char **argv +) +{ + make_method method; + char *file, **meth; + int seed, no4cycle; + distrib *d; + char junk; + FILE *f; + + /* Look at initial arguments. */ + + if (!(file = argv[1]) + || !argv[2] || sscanf(argv[2],"%d%c",&M,&junk)!=1 || M<=0 + || !argv[3] || sscanf(argv[3],"%d%c",&N,&junk)!=1 || N<=0 + || !argv[4] || sscanf(argv[4],"%d%c",&seed,&junk)!=1) + { usage(); + } + + /* Look at the arguments specifying the method for producing the code. */ + + meth = argv+5; + + if (!meth[0]) usage(); + + no4cycle = 0; + + if (strcmp(meth[0],"evencol")==0 || strcmp(meth[0],"evenboth")==0) + { method = strcmp(meth[0],"evencol")==0 ? Evencol : Evenboth; + if (!meth[1]) + { usage(); + } + d = distrib_create(meth[1]); + if (d==0) + { usage(); + } + if (meth[2]) + { if (strcmp(meth[2],"no4cycle")==0) + { no4cycle = 1; + if (meth[3]) + { usage(); + } + } + else + { usage(); + } + } + } + else + { usage(); + } + + /* Check for some problems. */ + + if (distrib_max(d)>M) + { fprintf(stderr, + "At least one checks per bit (%d) is greater than total checks (%d)\n", + distrib_max(d), M); + exit(1); + } + + if (distrib_max(d)==M && N>1 && no4cycle) + { fprintf(stderr, + "Can't eliminate cycles of length four with this many checks per bit\n"); + exit(1); + } + + /* Make the parity check matrix. */ + + make_ldpc(seed,method,d,no4cycle); + + /* Write out the parity check matrix. */ + + f = open_file_std(file,"wb"); + if (f==NULL) + { fprintf(stderr,"Can't create parity check file: %s\n",file); + exit(1); + } + + intio_write(f,('P'<<8)+0x80); + + if (ferror(f) || !mod2sparse_write(f,H) || fclose(f)!=0) + { fprintf(stderr,"Error writing to parity check file %s\n",file); + exit(1); + } + + return 0; +} + + +/* PRINT USAGE MESSAGE AND EXIT. */ + +void usage(void) +{ fprintf(stderr,"Usage: make-ldpc pchk-file n-checks n-bits seed method\n"); + fprintf(stderr,"Method: evencol checks-per-col [ \"no4cycle\" ]\n"); + fprintf(stderr," or: evencol checks-distribution [ \"no4cycle\" ]\n"); + fprintf(stderr," or: evenboth checks-per-col [ \"no4cycle\" ]\n"); + fprintf(stderr," or: evenboth checks-distribution [ \"no4cycle\" ]\n"); + exit(1); +} + + +/* CREATE A SPARSE PARITY-CHECK MATRIX. Of size M by N, stored in H. */ + +void make_ldpc +( int seed, /* Random number seed */ + make_method method, /* How to make it */ + distrib *d, /* Distribution list specified */ + int no4cycle /* Eliminate cycles of length four? */ +) +{ + mod2entry *e, *f, *g, *h; + int added, uneven, elim4, all_even, n_full, left; + int i, j, k, t, z, cb_N; + int *part, *u; + + rand_seed(10*seed+1); + + H = mod2sparse_allocate(M,N); + part = column_partition(d,N); + + /* Create the initial version of the parity check matrix. */ + + switch (method) + { + case Evencol: + { + z = 0; + left = part[z]; + + for (j = 0; jdistrib_size(d)) + { abort(); + } + left = part[z]; + } + for (k = 0; k=0; k--) + { u[k] = k%M; + } + + uneven = 0; + t = 0; + z = 0; + left = part[z]; + + for (j = 0; jdistrib_size(d)) + { abort(); + } + left = part[z]; + } + + for (k = 0; k0) + { fprintf(stderr,"Had to place %d checks in rows unevenly\n",uneven); + } + + break; + } + + default: abort(); + } + + /* Add extra bits to avoid rows with less than two checks. */ + + added = 0; + + for (i = 0; i1) + { do + { j = rand_int(N); + } while (j==mod2sparse_col(e)); + mod2sparse_insert(H,i,j); + added += 1; + } + } + + if (added>0) + { fprintf(stderr, + "Added %d extra bit-checks to make row counts at least two\n", + added); + } + + /* Add extra bits to try to avoid problems with even column counts. */ + + n_full = 0; + all_even = 1; + for (z = 0; z1 && added<2) + { int a; + for (a = 0; added+a<2; a++) + { do + { i = rand_int(M); + j = rand_int(N); + } while (mod2sparse_find(H,i,j)); + mod2sparse_insert(H,i,j); + } + fprintf(stderr, + "Added %d extra bit-checks to try to avoid problems from even column counts\n", + a); + } + + /* Eliminate cycles of length four, if asked, and if possible. */ + + if (no4cycle) + { + elim4 = 0; + + for (t = 0; t<10; t++) + { k = 0; + for (j = 0; j0) + { fprintf(stderr, + "Eliminated %d cycles of length four by moving checks within column\n", + elim4); + } + + if (t==10) + { fprintf(stderr, + "Couldn't eliminate all cycles of length four in 10 passes\n"); + } + } +} + + +/* PARTITION THE COLUMNS ACCORDING TO THE SPECIFIED PROPORTIONS. It + may not be possible to do this exactly. Returns a pointer to an + array of integers containing the numbers of columns corresponding + to the entries in the distribution passed. */ + +int *column_partition +( distrib *d, /* List of proportions and number of check-bits */ + int n /* Total number of columns to partition */ +) +{ + double *trunc; + int *part; + int cur, used; + int i, j; + + trunc = chk_alloc (distrib_size(d), sizeof(double)); + part = chk_alloc (distrib_size(d), sizeof(int)); + + used = 0; + for (i = 0; in) + { abort(); + } + + while (usedtrunc[cur]) + { cur = j; + } + } + part[cur] += 1; + used += 1; + trunc[cur] = -1; + } + + free(trunc); + return part; +} diff --git a/lib/ldpc/make-pchk.c b/lib/ldpc/make-pchk.c new file mode 100755 index 000000000..7459ca9b8 --- /dev/null +++ b/lib/ldpc/make-pchk.c @@ -0,0 +1,93 @@ +/* MAKE-PCHK.C - Make a parity check matrix explicitly. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include +#include +#include + +#include "alloc.h" +#include "intio.h" +#include "open.h" +#include "mod2sparse.h" +#include "mod2dense.h" +#include "mod2convert.h" +#include "rcode.h" + + +void usage(void); + + +/* MAIN PROGRAM. */ + +int main +( int argc, + char **argv +) +{ + char **bit_specs; + char *file; + FILE *f; + int i, j, k; + char junk; + + if (!(file = argv[1]) + || !argv[2] || sscanf(argv[2],"%d%c",&M,&junk)!=1 || M<=0 + || !argv[3] || sscanf(argv[3],"%d%c",&N,&junk)!=1 || N<=0) + { usage(); + } + + bit_specs = argv+4; + + if (bit_specs[0]==0) + { usage(); + } + + H = mod2sparse_allocate(M,N); + + for (k = 0; bit_specs[k]!=0; k++) + { if (sscanf(bit_specs[k],"%d:%d%c",&i,&j,&junk)!=2 || i<0 || j<0) + { usage(); + } + if (i>=M || j>=N) + { fprintf(stderr,"Bit %d:%d is out of range\n",i,j); + exit(1); + } + mod2sparse_insert(H,i,j); + } + + f = open_file_std(file,"wb"); + if (f==NULL) + { fprintf(stderr,"Can't create parity check file: %s\n",file); + exit(1); + } + + intio_write(f,('P'<<8)+0x80); + + if (ferror(f) || !mod2sparse_write(f,H) || fclose(f)!=0) + { fprintf(stderr,"Error writing to parity check file %s\n",file); + exit(1); + } + + return 0; +} + + +/* PRINT USAGE MESSAGE AND EXIT. */ + +void usage(void) +{ fprintf(stderr,"Usage: make-pchk pchk-file n-checks n-bits row:col ...\n"); + exit(1); +} diff --git a/lib/ldpc/mod2convert-test-out b/lib/ldpc/mod2convert-test-out new file mode 100755 index 000000000..430eec0b4 --- /dev/null +++ b/lib/ldpc/mod2convert-test-out @@ -0,0 +1,9 @@ + +Creating sparse matrix. +Converting from sparse to dense. +Converting back to dense again. +Testing for equality of two sparse matrices: OK. +Converting to dense once again. +Testing for equality of two dense matrices: OK. + +DONE WITH TESTS. diff --git a/lib/ldpc/mod2convert-test.c b/lib/ldpc/mod2convert-test.c new file mode 100755 index 000000000..eac257ff5 --- /dev/null +++ b/lib/ldpc/mod2convert-test.c @@ -0,0 +1,80 @@ +/* MOD2CONVERT-TEST. C - Program to test mod2convert module. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + + +/* Correct output for this program is saved in the file mod2convert-test-out */ + + +#include +#include +#include + +#include "mod2dense.h" +#include "mod2sparse.h" +#include "mod2convert.h" +#include "rand.h" + +#define Rows 40 /* Dimensions of matrix to use in test */ +#define Cols 13 + +#define N 100 /* Number of bits to set in test matrix (some may be + duplicates, leading to fewer 1's in matrix */ + +main(void) +{ + mod2sparse *sm1, *sm2; + mod2dense *dm1, *dm2; + int i; + + sm1 = mod2sparse_allocate(Rows,Cols); + sm2 = mod2sparse_allocate(Rows,Cols); + + dm1 = mod2dense_allocate(Rows,Cols); + dm2 = mod2dense_allocate(Rows,Cols); + + printf("\nCreating sparse matrix.\n"); + fflush(stdout); + + for (i = 0; i +#include +#include + +#include "mod2dense.h" +#include "mod2sparse.h" +#include "mod2convert.h" + + +/* CONVERT A MOD2 MATRIX FROM SPARSE TO DENSE FORM. */ + +void mod2sparse_to_dense +( mod2sparse *m, /* Sparse matrix to convert */ + mod2dense *r /* Place to store result */ +) +{ + mod2entry *e; + int i; + + if (mod2sparse_rows(m)>mod2dense_rows(r) + || mod2sparse_cols(m)>mod2dense_cols(r)) + { fprintf(stderr, + "mod2sparse_to_dense: Dimension of result matrix is less than source\n"); + exit(1); + } + + mod2dense_clear(r); + + for (i = 0; imod2sparse_rows(r) + || mod2dense_cols(m)>mod2sparse_cols(r)) + { fprintf(stderr, + "mod2dense_to_sparse: Dimension of result matrix is less than source\n"); + exit(1); + } + + mod2sparse_clear(r); + + for (i = 0; i + + Modulo-2 Matrix Sparse/Dense Conversion + + + + +

Modulo-2 Matrix Sparse/Dense Conversion

+ +

The routines below convert modulo-2 matrices between the form used by +the routines for dense modulo-2 matrices +and the form used by the routines for sparse +modulo-2 matrices. + +

Header files required: +mod2sparse.h mod2dense.h mod2convert.h + + +


mod2sparse_to_dense: +Convert a modulo-2 matrix from sparse to dense form. + +
+void mod2sparse_to_dense 
+( mod2sparse *m,  /* Sparse matrix to convert */
+  mod2dense *r    /* Place to store result */
+)
+
+ +The dense matrix, r, must already have been allocated, and must have at +least as many rows and columns as m, the sparse matrix to be converted. + + +


mod2dense_to_sparse: +Convert a modulo-2 matrix from dense to sparse form. + +
+void mod2dense_to_sparse 
+( mod2dense *m,  /* Dense matrix to convert */
+  mod2sparse *r  /* Place to store result */
+)
+
+ +The sparse matrix, r, must already have been allocated, and must have at +least as many rows and columns as m, the dense matrix to be converted. + + +
+ +Back to index for LDPC software + + diff --git a/lib/ldpc/mod2dense-test-out b/lib/ldpc/mod2dense-test-out new file mode 100755 index 000000000..e38525b6c --- /dev/null +++ b/lib/ldpc/mod2dense-test-out @@ -0,0 +1,699 @@ + +PART 1: + +Matrix m1: + + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 + +Matrix m2, as read from file. Should be same as m1 above. + + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 + +Test of equality of m1 & m2 (should be 1): 1 + +Matrix m3, copied from m1 above. + + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 + +Test of equality of m1 & m3 (should be 1): 1 + +Matrix m3 again, should now be all zeros. + + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +Test of equality of m1 & m3 (should be 0): 0 + + +PART 2: + +Transpose of m1. + + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + +PART 3: + +Matrix s0. + + 0 0 0 0 0 0 0 + 0 0 0 1 1 0 0 + 1 0 0 0 0 0 0 + 0 1 0 0 0 0 0 + 0 0 0 0 0 0 0 + +Matrix s1. + + 0 0 0 0 0 0 0 + 0 0 0 1 0 1 0 + 0 0 0 0 0 0 0 + 1 1 0 0 0 0 1 + 0 0 0 0 0 0 0 + +Matrix s2. + + 1 0 0 0 + 0 1 0 0 + 0 0 0 0 + 0 0 0 0 + 0 0 0 0 + 0 1 1 1 + 0 0 0 0 + +Sum of s0 and s1. + + 0 0 0 0 0 0 0 + 0 0 0 0 1 1 0 + 1 0 0 0 0 0 0 + 1 0 0 0 0 0 1 + 0 0 0 0 0 0 0 + +Product of s1 and s2. + + 0 0 0 0 + 0 1 1 1 + 0 0 0 0 + 1 1 0 0 + 0 0 0 0 + +Above matrix with (1,2) cleared. + + 0 0 0 0 + 0 1 0 1 + 0 0 0 0 + 1 1 0 0 + 0 0 0 0 + + +PART 4: + +Matrix s1. + + 0 0 0 1 0 + 0 1 0 0 1 + 1 0 0 0 0 + 0 1 1 0 0 + 1 0 1 0 0 + +Matrix s3, the inverse of s1 (return code 1). + + 0 0 1 0 0 + 0 0 1 1 1 + 0 0 1 0 1 + 1 0 0 0 0 + 0 1 1 1 1 + +Original matrix times inverse (should be identity). + + 1 0 0 0 0 + 0 1 0 0 0 + 0 0 1 0 0 + 0 0 0 1 0 + 0 0 0 0 1 + +Inverse times original matrix (should be identity). + + 1 0 0 0 0 + 0 1 0 0 0 + 0 0 1 0 0 + 0 0 0 1 0 + 0 0 0 0 1 + +Inverse of inverse (should be same as original s1). + 0 0 0 1 0 + 0 1 0 0 1 + 1 0 0 0 0 + 0 1 1 0 0 + 1 0 1 0 0 + +Test of equality with original (should be 1): 1 + +Matrix s1. + + 0 0 0 0 1 0 0 + 0 1 0 0 0 0 1 + 1 0 0 0 0 0 0 + 0 1 1 0 0 0 0 + 1 0 1 0 0 0 0 + +Matrix s3, from invert_selected applied to s1 (return code 0). + + 0 0 0 0 1 0 0 + 1 0 1 0 0 0 1 + 1 0 0 0 0 0 0 + 1 0 0 0 0 0 1 + 1 1 1 0 0 0 1 + + row ordering returned: 0 1 2 3 4 + + column ordering returned: 4 1 0 2 6 5 3 + +Columns extracted in order from original matrix. + + 1 0 0 0 0 + 0 1 0 0 1 + 0 0 1 0 0 + 0 1 0 1 0 + 0 0 1 1 0 + +Inverse of above calculated using mod2dense_inverse (return code 1) + + 1 0 0 0 0 + 0 0 1 1 1 + 0 0 1 0 0 + 0 0 1 0 1 + 0 1 1 1 1 + +Columns extracted in order from s3 (should also be inverse of above). + + 1 0 0 0 0 + 0 0 1 1 1 + 0 0 1 0 0 + 0 0 1 0 1 + 0 1 1 1 1 + +Matrix s1. + + 1 1 0 0 0 0 0 + 0 1 1 0 0 0 0 + 1 0 1 0 0 0 0 + 0 0 0 1 1 0 0 + 0 0 0 0 0 0 0 + +Matrix s3, from invert_selected applied to s1 (return code 2). + + 1 1 0 0 0 0 0 + 0 1 0 0 0 0 0 + 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 + + row ordering returned: 0 1 3 4 2 + + column ordering returned: 0 1 3 2 4 5 6 + +Matrix s4, from copying rows in order from s3. + + 1 1 0 0 0 0 0 + 0 1 0 0 0 0 0 + 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 + +PART 5: + +Matrix s1. + + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 + 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 + 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 + +Matrix s3, the inverse of s1 (return code 1). + + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 1 1 0 1 1 0 0 0 0 1 1 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 1 + 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 + 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 + 0 0 0 0 1 0 0 0 1 0 0 1 1 0 0 0 0 1 1 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 1 + 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 + +Original matrix times inverse (should be identity). + + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + +Inverse times original matrix (should be identity). + + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + +Inverse of inverse (should be same as original s1). + + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 + 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 + 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 + +Test of equality with original (should be 1): 1 + + +PART 6: + +Matrix s1. + + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +Result of forcibly inverting s1 (needed to alter 7 elements). + + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +Altered elements at these indexes: + + 3 3 + 7 7 + 15 15 + 21 21 + 23 23 + 29 29 + 32 12 + +Inverse of inverse of altered matrix. + + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + + +DONE WITH TESTS. diff --git a/lib/ldpc/mod2dense-test.c b/lib/ldpc/mod2dense-test.c new file mode 100755 index 000000000..f38ad54f0 --- /dev/null +++ b/lib/ldpc/mod2dense-test.c @@ -0,0 +1,560 @@ +/* MOD2DENSE-TEST. C - Program to test mod2dense module. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + + +/* Correct output for this program is saved in the file mod2dense-test-out */ + + +#include +#include +#include + +#include "mod2dense.h" + + +main(void) +{ + mod2dense *m1, *m2, *m3, *m4; + mod2dense *s0, *s1, *s2, *s3, *s4, *s5; + int a_row[35], a_col[35]; + int code; + int i, j; + FILE *f; + + + printf("\nPART 1:\n\n"); + + /* Set up m1 with bits on a diagonal plus a few more set to 1. */ + + m1 = mod2dense_allocate(35,40); + + mod2dense_clear(m1); + + for (i = 0; i<35; i++) mod2dense_set(m1,i,i,1); + + mod2dense_set(m1,2,3,1); + mod2dense_set(m1,34,4,1); + mod2dense_set(m1,10,38,1); + + /* Print m1. */ + + printf("Matrix m1:\n\n"); + mod2dense_print(stdout,m1); + printf("\n"); fflush(stdout); + + /* Store m1 in a file. */ + + f = fopen("test-file","wb"); + if (f==0) + { fprintf(stderr,"Can't create test-file\n"); + exit(1); + } + + if (!mod2dense_write(f,m1)) + { printf("Error from mod2dense_write\n"); + } + + fclose(f); + + /* Read matrix written above back into m2. */ + + f = fopen("test-file","rb"); + if (f==0) + { fprintf(stderr,"Can't open test-file\n"); + exit(1); + } + + m2 = mod2dense_read(f); + + if (m2==0) + { printf("Error from mod2dense_read\n"); + exit(1); + } + + /* Print m2, along with result of equality test. */ + + printf("Matrix m2, as read from file. Should be same as m1 above.\n\n"); + mod2dense_print(stdout,m2); + printf("\n"); fflush(stdout); + + printf("Test of equality of m1 & m2 (should be 1): %d\n\n", + mod2dense_equal(m1,m2)); + + /* Copy m1 to m3. */ + + m3 = mod2dense_allocate(mod2dense_rows(m1),mod2dense_cols(m1)); + + mod2dense_copy(m1,m3); + + /* Print m3, along with result of equality test. */ + + printf("Matrix m3, copied from m1 above.\n\n"); + mod2dense_print(stdout,m3); + printf("\n"); fflush(stdout); + + printf("Test of equality of m1 & m3 (should be 1): %d\n\n", + mod2dense_equal(m1,m3)); + + /* Clear m3. */ + + mod2dense_clear(m3); + + /* Print m3 again. */ + + printf("Matrix m3 again, should now be all zeros.\n\n"); + mod2dense_print(stdout,m3); + printf("\n"); fflush(stdout); + + printf("Test of equality of m1 & m3 (should be 0): %d\n\n", + mod2dense_equal(m1,m3)); + + + printf("\nPART 2:\n\n"); + + /* Compute transpose of m1. */ + + m4 = mod2dense_allocate(mod2dense_cols(m1),mod2dense_rows(m1)); + + mod2dense_transpose(m1,m4); + + /* Print transpose. */ + + printf("Transpose of m1.\n\n"); + mod2dense_print(stdout,m4); + printf("\n"); fflush(stdout); + + /* Free space for m1, m2, and m3. */ + + mod2dense_free(m1); + mod2dense_free(m2); + mod2dense_free(m3); + + + printf("\nPART 3:\n\n"); + + /* Allocate some small matrices. */ + + s0 = mod2dense_allocate(5,7); + s1 = mod2dense_allocate(5,7); + s2 = mod2dense_allocate(7,4); + s3 = mod2dense_allocate(5,4); + s4 = mod2dense_allocate(5,7); + + /* Set up the contents of s0, s1, and s2. */ + + mod2dense_clear(s0); + mod2dense_clear(s1); + mod2dense_clear(s2); + + mod2dense_set(s0,1,3,1); + mod2dense_set(s0,1,4,1); + mod2dense_set(s0,2,0,1); + mod2dense_set(s0,3,1,1); + + mod2dense_set(s1,1,3,1); + mod2dense_set(s1,1,5,1); + mod2dense_set(s1,3,0,1); + mod2dense_set(s1,3,1,1); + mod2dense_set(s1,3,6,1); + + mod2dense_set(s2,5,1,1); + mod2dense_set(s2,5,2,1); + mod2dense_set(s2,5,3,1); + mod2dense_set(s2,0,0,1); + mod2dense_set(s2,1,1,1); + + /* Print s0, s1, and s2. */ + + printf("Matrix s0.\n\n"); + mod2dense_print(stdout,s0); + printf("\nMatrix s1.\n\n"); + mod2dense_print(stdout,s1); + printf("\nMatrix s2.\n\n"); + mod2dense_print(stdout,s2); + printf("\n"); fflush(stdout); + + /* Add s0 and s1, storing the result in s4, then print s4. */ + + mod2dense_add(s0,s1,s4); + + printf("Sum of s0 and s1.\n\n"); + mod2dense_print(stdout,s4); + printf("\n"); fflush(stdout); + + /* Multiply s1 and s2, storing the product in s3, and then print s3. */ + + mod2dense_multiply(s1,s2,s3); + + printf("Product of s1 and s2.\n\n"); + mod2dense_print(stdout,s3); + printf("\n"); fflush(stdout); + + /* Try clearing a bit in s3, then printing the result. */ + + mod2dense_set(s3,1,2,0); + + printf("Above matrix with (1,2) cleared.\n\n"); + mod2dense_print(stdout,s3); + printf("\n"); fflush(stdout); + + /* Free space for s0, s1, s2, s3, and s4. */ + + mod2dense_free(s0); + mod2dense_free(s1); + mod2dense_free(s2); + mod2dense_free(s3); + mod2dense_free(s4); + + + printf("\nPART 4:\n\n"); + + /* Set up a small square matrix, s1. Also copy it to s2. */ + + s1 = mod2dense_allocate(5,5); + s2 = mod2dense_allocate(5,5); + + mod2dense_clear(s1); + + mod2dense_set(s1,0,3,1); + mod2dense_set(s1,1,4,1); + mod2dense_set(s1,1,1,1); + mod2dense_set(s1,2,0,1); + mod2dense_set(s1,3,1,1); + mod2dense_set(s1,3,2,1); + mod2dense_set(s1,4,2,1); + mod2dense_set(s1,4,0,1); + + mod2dense_copy(s1,s2); + + /* Print s1. */ + + printf("Matrix s1.\n\n"); + mod2dense_print(stdout,s1); + printf("\n"); fflush(stdout); + + /* Compute inverse of s1, storing it in s3. */ + + s3 = mod2dense_allocate(5,5); + + code = mod2dense_invert(s1,s3); + + /* Print inverse (s3). */ + + printf("Matrix s3, the inverse of s1 (return code %d).\n\n",code); + mod2dense_print(stdout,s3); + printf("\n"); fflush(stdout); + + /* Compute and print product of inverse and original matrix, both ways. */ + + mod2dense_multiply(s2,s3,s1); + printf("Original matrix times inverse (should be identity).\n\n"); + mod2dense_print(stdout,s1); + + mod2dense_multiply(s3,s2,s1); + printf("\nInverse times original matrix (should be identity).\n\n"); + mod2dense_print(stdout,s1); + printf("\n"); fflush(stdout); + + /* Compute and print inverse of inverse, and do equality check. */ + + mod2dense_invert(s3,s1); + + printf("Inverse of inverse (should be same as original s1).\n"); + mod2dense_print(stdout,s1); + printf("\n"); fflush(stdout); + + printf("Test of equality with original (should be 1): %d\n\n", + mod2dense_equal(s1,s2)); + + /* Free s1, s2, and s3. */ + + mod2dense_free(s1); + mod2dense_free(s2); + mod2dense_free(s3); + + /* Set up a rectangular matrix like s1 above, but with two zero columns. + Copy to s4 as well. */ + + s1 = mod2dense_allocate(5,7); + + mod2dense_clear(s1); + + mod2dense_set(s1,0,4,1); + mod2dense_set(s1,1,6,1); + mod2dense_set(s1,1,1,1); + mod2dense_set(s1,2,0,1); + mod2dense_set(s1,3,1,1); + mod2dense_set(s1,3,2,1); + mod2dense_set(s1,4,2,1); + mod2dense_set(s1,4,0,1); + + s4 = mod2dense_allocate(5,7); + mod2dense_copy(s1,s4); + + /* Print s1. */ + + printf("Matrix s1.\n\n"); + mod2dense_print(stdout,s1); + printf("\n"); fflush(stdout); + + /* Compute inverse of sub-matrix of s1, storing it in s3. Print results. */ + + s3 = mod2dense_allocate(5,7); + + code = mod2dense_invert_selected(s1,s3,a_row,a_col); + + printf("Matrix s3, from invert_selected applied to s1 (return code %d).\n\n", + code); + + mod2dense_print(stdout,s3); + + printf("\n row ordering returned:"); + for (i = 0; i<5; i++) printf(" %d",a_row[i]); + printf("\n"); + + printf("\n column ordering returned:"); + for (j = 0; j<7; j++) printf(" %d",a_col[j]); + printf("\n"); + + printf("\n"); fflush(stdout); + + printf("Columns extracted in order from original matrix.\n\n"); + + s2 = mod2dense_allocate(5,5); + mod2dense_copycols(s4,s2,a_col); + mod2dense_print(stdout,s2); + printf("\n"); fflush(stdout); + + s5 = mod2dense_allocate(5,5); + code = mod2dense_invert(s2,s5); + + printf( + "Inverse of above calculated using mod2dense_inverse (return code %d)\n\n", + code); + + mod2dense_print(stdout,s5); + printf("\n"); fflush(stdout); + + printf( + "Columns extracted in order from s3 (should also be inverse of above).\n\n"); + mod2dense_copycols(s3,s2,a_col); + mod2dense_print(stdout,s2); + printf("\n"); fflush(stdout); + + /* Try out mod2dense_invert_selected again. */ + + mod2dense_clear(s1); + + mod2dense_set(s1,0,0,1); + mod2dense_set(s1,0,1,1); + mod2dense_set(s1,1,1,1); + mod2dense_set(s1,1,2,1); + mod2dense_set(s1,2,0,1); + mod2dense_set(s1,2,2,1); + mod2dense_set(s1,3,3,1); + mod2dense_set(s1,3,4,1); + + printf("Matrix s1.\n\n"); + mod2dense_print(stdout,s1); + printf("\n"); fflush(stdout); + + code = mod2dense_invert_selected(s1,s3,a_row,a_col); + + printf("Matrix s3, from invert_selected applied to s1 (return code %d).\n\n", + code); + + mod2dense_print(stdout,s3); + + printf("\n row ordering returned:"); + for (i = 0; i<5; i++) printf(" %d",a_row[i]); + printf("\n"); + printf("\n column ordering returned:"); + for (j = 0; j<7; j++) printf(" %d",a_col[j]); + printf("\n"); + + printf("\n"); fflush(stdout); + + printf("Matrix s4, from copying rows in order from s3.\n\n"); + + mod2dense_copyrows(s3,s4,a_row); + + mod2dense_print(stdout,s4); + + free(s1); + free(s2); + free(s3); + free(s4); + free(s5); + + + printf("\nPART 5:\n\n"); + + /* Set up a larger square matrix, s1. Also copy it to s2. */ + + s1 = mod2dense_allocate(35,35); + s2 = mod2dense_allocate(35,35); + + mod2dense_clear(s1); + + for (i = 0; i<35; i++) mod2dense_set(s1,i,i,1); + + mod2dense_set(s1,10,3,1); + mod2dense_set(s1,11,4,1); + mod2dense_set(s1,11,11,1); + mod2dense_set(s1,12,20,1); + mod2dense_set(s1,13,31,1); + mod2dense_set(s1,23,12,1); + mod2dense_set(s1,24,12,1); + mod2dense_set(s1,14,10,1); + mod2dense_set(s1,2,20,1); + mod2dense_set(s1,3,31,1); + mod2dense_set(s1,3,12,1); + mod2dense_set(s1,24,2,1); + mod2dense_set(s1,24,0,1); + mod2dense_set(s1,5,3,1); + mod2dense_set(s1,18,3,1); + mod2dense_set(s1,17,11,1); + mod2dense_set(s1,32,23,1); + mod2dense_set(s1,9,24,1); + mod2dense_set(s1,19,11,1); + mod2dense_set(s1,11,30,1); + mod2dense_set(s1,21,27,1); + mod2dense_set(s1,21,22,1); + mod2dense_set(s1,23,33,1); + mod2dense_set(s1,24,23,1); + mod2dense_set(s1,24,25,1); + mod2dense_set(s1,30,34,1); + mod2dense_set(s1,31,10,1); + mod2dense_set(s1,33,17,1); + mod2dense_set(s1,33,18,1); + mod2dense_set(s1,34,8,1); + mod2dense_set(s1,34,11,1); + mod2dense_set(s1,34,3,1); + mod2dense_set(s1,34,24,1); + mod2dense_set(s1,25,34,1); + mod2dense_set(s1,13,34,1); + + mod2dense_set(s1,3,3,0); + mod2dense_set(s1,11,11,0); + mod2dense_set(s1,23,23,0); + mod2dense_set(s1,24,24,0); + + mod2dense_copy(s1,s2); + + /* Print s1. */ + + printf("Matrix s1.\n\n"); + mod2dense_print(stdout,s1); + printf("\n"); fflush(stdout); + + /* Compute inverse of s1, storing it in s3. */ + + s3 = mod2dense_allocate(35,35); + + code = mod2dense_invert(s1,s3); + + /* Print inverse (s3). */ + + printf("Matrix s3, the inverse of s1 (return code %d).\n\n",code); + mod2dense_print(stdout,s3); + printf("\n"); fflush(stdout); + + /* Compute and print product of inverse and original matrix, both ways. */ + + mod2dense_multiply(s2,s3,s1); + printf("Original matrix times inverse (should be identity).\n\n"); + mod2dense_print(stdout,s1); + + mod2dense_multiply(s3,s2,s1); + printf("\nInverse times original matrix (should be identity).\n\n"); + mod2dense_print(stdout,s1); + printf("\n"); fflush(stdout); + + /* Compute and print inverse of inverse, and do equality check. */ + + mod2dense_invert(s3,s1); + + printf("Inverse of inverse (should be same as original s1).\n\n"); + mod2dense_print(stdout,s1); + printf("\n"); fflush(stdout); + + printf("Test of equality with original (should be 1): %d\n\n", + mod2dense_equal(s1,s2)); + + /* Free s1, s2, and s3. */ + + mod2dense_free(s1); + mod2dense_free(s2); + mod2dense_free(s3); + + + printf("\nPART 6:\n\n"); + + /* Set up a largish square matrix, s1. Also copy it to s2. */ + + s1 = mod2dense_allocate(35,35); + s2 = mod2dense_allocate(35,35); + + mod2dense_clear(s1); + + for (i = 0; i<10; i++) + { if (i!=3 && i!=7) + { mod2dense_set(s1,i,i,1); + } + } + for (i = 10; i<35; i++) + { if (i!=15 && i!=21 && i!=32) + { mod2dense_set(s1,i,34-(i-10),1); + } + } + + /* Print s1. */ + + printf("Matrix s1.\n\n"); + mod2dense_print(stdout,s1); + printf("\n"); fflush(stdout); + + /* Forcibly invert s1, storing inverse in s3. */ + + s3 = mod2dense_allocate(35,35); + + code = mod2dense_forcibly_invert(s1,s3,a_row,a_col); + + /* Print inverse, and list of altered elements. */ + + printf("Result of forcibly inverting s1 (needed to alter %d elements).\n\n", + code); + mod2dense_print(stdout,s3); + printf("\n"); fflush(stdout); + + printf("Altered elements at these indexes:\n\n"); + + for (i = 0; i +#include +#include + +#include "alloc.h" +#include "intio.h" +#include "mod2dense.h" + + +/* ALLOCATE SPACE FOR A DENSE MOD2 MATRIX. */ + +mod2dense *mod2dense_allocate +( int n_rows, /* Number of rows in matrix */ + int n_cols /* Number of columns in matrix */ +) +{ + mod2dense *m; + int j; + + if (n_rows<=0 || n_cols<=0) + { fprintf(stderr,"mod2dense_allocate: Invalid number of rows or columns\n"); + exit(1); + } + + m = chk_alloc (1, sizeof *m); + + m->n_rows = n_rows; + m->n_cols = n_cols; + + m->n_words = (n_rows+mod2_wordsize-1) >> mod2_wordsize_shift; + + m->col = chk_alloc (m->n_cols, sizeof *m->col); + + m->bits = chk_alloc(m->n_words*m->n_cols, sizeof *m->bits); + + for (j = 0; jn_cols; j++) + { m->col[j] = m->bits + j*m->n_words; + } + + return m; +} + + +/* FREE SPACE OCCUPIED BY A DENSE MOD2 MATRIX. */ + +void mod2dense_free +( mod2dense *m /* Matrix to free */ +) +{ free(m->bits); + free(m->col); + free(m); +} + + +/* CLEAR A DENSE MOD2 MATRIX. */ + +void mod2dense_clear +( mod2dense *r +) +{ + int k, j; + + for (j = 0; jn_words; k++) + { r->col[j][k] = 0; + } + } + +} + + +/* COPY A DENSE MOD2 MATRIX. */ + +void mod2dense_copy +( mod2dense *m, /* Matrix to copy */ + mod2dense *r /* Place to store copy of matrix */ +) +{ + int k, j; + + if (mod2dense_rows(m)>mod2dense_rows(r) + || mod2dense_cols(m)>mod2dense_cols(r)) + { fprintf(stderr,"mod2dense_copy: Destination matrix is too small\n"); + exit(1); + } + + for (j = 0; jn_words; k++) + { r->col[j][k] = m->col[j][k]; + } + for ( ; kn_words; k++) + { r->col[j][k] = 0; + } + } + + for ( ; jn_words; k++) + { r->col[j][k] = 0; + } + } +} + + +/* COPY ROWS OF A DENSE MOD2 MATRIX. */ + +void mod2dense_copyrows +( mod2dense *m, /* Matrix to copy */ + mod2dense *r, /* Place to store copy of matrix */ + int *rows /* Indexes of rows to copy, from 0 */ +) +{ + int i, j; + + if (mod2dense_cols(m)>mod2dense_cols(r)) + { fprintf(stderr, + "mod2dense_copyrows: Destination matrix has fewer columns than source\n"); + exit(1); + } + + mod2dense_clear(r); + + for (i = 0; i=mod2dense_rows(m)) + { fprintf(stderr,"mod2dense_copyrows: Row index out of range\n"); + exit(1); + } + for (j = 0; jmod2dense_rows(r)) + { fprintf(stderr, + "mod2dense_copycols: Destination matrix has fewer rows than source\n"); + exit(1); + } + + for (j = 0; j=mod2dense_cols(m)) + { fprintf(stderr,"mod2dense_copycols: Column index out of range\n"); + exit(1); + } + for (k = 0; kn_words; k++) + { r->col[j][k] = m->col[cols[j]][k]; + } + for ( ; kn_words; k++) + { r->col[j][k] = 0; + } + } +} + + +/* PRINT A DENSE MOD2 MATRIX IN HUMAN-READABLE FORM. */ + +void mod2dense_print +( FILE *f, + mod2dense *m +) +{ + int i, j; + + for (i = 0; in_rows); + if (ferror(f)) return 0; + + intio_write(f,m->n_cols); + if (ferror(f)) return 0; + + for (j = 0; jn_words; k++) + { intio_write(f,m->col[j][k]); + if (ferror(f)) return 0; + } + } + + return 1; +} + + +/* READ A DENSE MOD2 MATRIX STORED IN MACHINE-READABLE FORM FROM A FILE. */ + +mod2dense *mod2dense_read +( FILE *f +) +{ + int n_rows, n_cols; + mod2dense *m; + int j, k; + + n_rows = intio_read(f); + if (feof(f) || ferror(f) || n_rows<=0) return 0; + + n_cols = intio_read(f); + if (feof(f) || ferror(f) || n_cols<=0) return 0; + + m = mod2dense_allocate(n_rows,n_cols); + + for (j = 0; jn_words; k++) + { m->col[j][k] = intio_read(f); + if (feof(f) || ferror(f)) + { mod2dense_free(m); + return 0; + } + } + } + + return m; +} + + +/* GET AN ELEMENT FROM A DENSE MOD2 MATRIX. */ + +int mod2dense_get +( mod2dense *m, /* Matrix to get element from */ + int row, /* Row of element (starting with zero) */ + int col /* Column of element (starting with zero) */ +) +{ + if (row<0 || row>=mod2dense_rows(m) || col<0 || col>=mod2dense_cols(m)) + { fprintf(stderr,"mod2dense_get: row or column index out of bounds\n"); + exit(1); + } + + return mod2_getbit (m->col[col][row>>mod2_wordsize_shift], + row&mod2_wordsize_mask); +} + + +/* SET AN ELEMENT IN A DENSE MOD2 MATRIX. */ + +void mod2dense_set +( mod2dense *m, /* Matrix to modify element of */ + int row, /* Row of element (starting with zero) */ + int col, /* Column of element (starting with zero) */ + int value /* New value of element (0 or 1) */ +) +{ + mod2word *w; + + if (row<0 || row>=mod2dense_rows(m) || col<0 || col>=mod2dense_cols(m)) + { fprintf(stderr,"mod2dense_set: row or column index out of bounds\n"); + exit(1); + } + + w = &m->col[col][row>>mod2_wordsize_shift]; + + *w = value ? mod2_setbit1(*w,row&mod2_wordsize_mask) + : mod2_setbit0(*w,row&mod2_wordsize_mask); +} + + +/* FLIP AN ELEMENT OF A DENSE MOD2 MATRIX. */ + +int mod2dense_flip +( mod2dense *m, /* Matrix to flip element in */ + int row, /* Row of element (starting with zero) */ + int col /* Column of element (starting with zero) */ +) +{ + mod2word *w; + int b; + + if (row<0 || row>=mod2dense_rows(m) || col<0 || col>=mod2dense_cols(m)) + { fprintf(stderr,"mod2dense_flip: row or column index out of bounds\n"); + exit(1); + } + + b = 1 ^ mod2_getbit (m->col[col][row>>mod2_wordsize_shift], + row&mod2_wordsize_mask); + + w = &m->col[col][row>>mod2_wordsize_shift]; + + *w = b ? mod2_setbit1(*w,row&mod2_wordsize_mask) + : mod2_setbit0(*w,row&mod2_wordsize_mask); + + return b; +} + + +/* COMPUTE THE TRANSPOSE OF A DENSE MOD2 MATRIX. */ + +void mod2dense_transpose +( mod2dense *m, /* Matrix to compute transpose of (left unchanged) */ + mod2dense *r /* Result of transpose operation */ +) +{ + mod2word w, v, *p; + int k1, j1, i2, j2; + + if (mod2dense_rows(m)!=mod2dense_cols(r) + || mod2dense_cols(m)!=mod2dense_rows(r)) + { fprintf(stderr, + "mod2dense_transpose: Matrices have incompatible dimensions\n"); + exit(1); + } + + if (r==m) + { fprintf(stderr, + "mod2dense_transpose: Result matrix is the same as the operand\n"); + exit(1); + } + + mod2dense_clear(r); + + for (j1 = 0; j1> mod2_wordsize_shift; + v = 1 << (j1 & mod2_wordsize_mask); + + p = m->col[j1]; + k1 = 0; + + for (j2 = 0; j2col[j2][i2] |= v; + } + w >>= 1; + k1 -= 1; + } + } +} + + +/* ADD TWO DENSE MOD2 MATRICES. */ + +void mod2dense_add +( mod2dense *m1, /* Left operand of add */ + mod2dense *m2, /* Right operand of add */ + mod2dense *r /* Place to store result of add */ +) +{ + int j, k; + + if (mod2dense_rows(m1)!=mod2dense_rows(r) + || mod2dense_cols(m1)!=mod2dense_cols(r) + || mod2dense_rows(m2)!=mod2dense_rows(r) + || mod2dense_cols(m2)!=mod2dense_cols(r)) + { fprintf(stderr,"mod2dense_add: Matrices have different dimensions\n"); + exit(1); + } + + for (j = 0; jn_words; k++) + { r->col[j][k] = m1->col[j][k] ^ m2->col[j][k]; + } + } +} + + +/* MULTIPLY TWO DENSE MOD2 MATRICES. + + The algorithm used runs faster if the second matrix (right operand of the + multiply) is sparse, but it is also appropriate for dense matrices. This + procedure could be speeded up a bit by replacing the call of mod2dense_get + with in-line code that avoids division, but this doesn't seem worthwhile + at the moment. +*/ + +void mod2dense_multiply +( mod2dense *m1, /* Left operand of multiply */ + mod2dense *m2, /* Right operand of multiply */ + mod2dense *r /* Place to store result of multiply */ +) +{ + int i, j, k; + + if (mod2dense_cols(m1)!=mod2dense_rows(m2) + || mod2dense_rows(m1)!=mod2dense_rows(r) + || mod2dense_cols(m2)!=mod2dense_cols(r)) + { fprintf(stderr, + "mod2dense_multiply: Matrices have incompatible dimensions\n"); + exit(1); + } + + if (r==m1 || r==m2) + { fprintf(stderr, + "mod2dense_multiply: Result matrix is the same as one of the operands\n"); + exit(1); + } + + mod2dense_clear(r); + + for (j = 0; jn_words; k++) + { r->col[j][k] ^= m1->col[i][k]; + } + } + } + } +} + + +/* SEE WHETHER TWO DENSE MOD2 MATRICES ARE EQUAL. */ + +int mod2dense_equal +( mod2dense *m1, + mod2dense *m2 +) +{ + int k, j, w; + mod2word m; + + if (mod2dense_rows(m1)!=mod2dense_rows(m2) + || mod2dense_cols(m1)!=mod2dense_cols(m2)) + { fprintf(stderr,"mod2dense_equal: Matrices have different dimensions\n"); + exit(1); + } + + w = m1->n_words; + + /* Form a mask that has 1s in the lower bit positions corresponding to + bits that contain information in the last word of a matrix column. */ + + m = (1 << (mod2_wordsize - (w*mod2_wordsize-m1->n_rows))) - 1; + + for (j = 0; jcol[j][k] != m2->col[j][k]) return 0; + } + + if ((m1->col[j][k]&m) != (m2->col[j][k]&m)) return 0; + } + + return 1; +} + + +/* INVERT A DENSE MOD2 MATRIX. */ + +int mod2dense_invert +( mod2dense *m, /* The matrix to find the inverse of (destroyed) */ + mod2dense *r /* Place to store the inverse */ +) +{ + mod2word *s, *t; + int i, j, k, n, w, k0, b0; + + if (mod2dense_rows(m)!=mod2dense_cols(m)) + { fprintf(stderr,"mod2dense_invert: Matrix to invert is not square\n"); + exit(1); + } + + if (r==m) + { fprintf(stderr, + "mod2dense_invert: Result matrix is the same as the operand\n"); + exit(1); + } + + n = mod2dense_rows(m); + w = m->n_words; + + if (mod2dense_rows(r)!=n || mod2dense_cols(r)!=n) + { fprintf(stderr, + "mod2dense_invert: Matrix to receive inverse has wrong dimensions\n"); + exit(1); + } + + mod2dense_clear(r); + for (i = 0; i> mod2_wordsize_shift; + b0 = i & mod2_wordsize_mask; + + for (j = i; jcol[j][k0],b0)) break; + } + + if (j==n) return 0; + + if (j!=i) + { + t = m->col[i]; + m->col[i] = m->col[j]; + m->col[j] = t; + + t = r->col[i]; + r->col[i] = r->col[j]; + r->col[j] = t; + } + + for (j = 0; jcol[j][k0],b0)) + { s = m->col[j]; + t = m->col[i]; + for (k = k0; kcol[j]; + t = r->col[i]; + for (k = 0; kn_words; + + n2 = mod2dense_cols(m); + + if (mod2dense_rows(r)!=n || mod2dense_cols(r)!=n2) + { fprintf(stderr, +"mod2dense_invert_selected2: Matrix to receive inverse has wrong dimensions\n"); + exit(1); + } + + mod2dense_clear(r); + + for (i = 0; i> mod2_wordsize_shift; + b0 = rows[i] & mod2_wordsize_mask; + + for (j = i; jcol[cols[j]][k0],b0)) break; + } + + if (jcol[j][k0],b0)) + { s = m->col[j]; + t = m->col[c]; + for (k = 0; kcol[j]; + t = r->col[c]; + for (k = 0; kcol[cols[j]]; + for (k = 0; kn_words; + + if (mod2dense_rows(r)!=n || mod2dense_cols(r)!=n) + { fprintf(stderr, + "mod2dense_forcibly_invert: Matrix to receive inverse has wrong dimensions\n"); + exit(1); + } + + mod2dense_clear(r); + for (i = 0; i> mod2_wordsize_shift; + b0 = i & mod2_wordsize_mask; + + for (j = i; jcol[j][k0],b0)) break; + } + + if (j==n) + { j = i; + mod2dense_set(m,i,j,1); + a_row[i] = i; + } + + if (j!=i) + { + t = m->col[i]; + m->col[i] = m->col[j]; + m->col[j] = t; + + t = r->col[i]; + r->col[i] = r->col[j]; + r->col[j] = t; + + u = a_col[i]; + a_col[i] = a_col[j]; + a_col[j] = u; + } + + for (j = 0; jcol[j][k0],b0)) + { s = m->col[j]; + t = m->col[i]; + for (k = k0; kcol[j]; + t = r->col[i]; + for (k = 0; k /* Has the definition of uint32_t used below */ + +/* PACKING OF BITS INTO WORDS. Bits are packed into 32-bit words, with + the low-order bit coming first. */ + +typedef uint32_t mod2word; /* Data type that holds packed bits. If uint32_t + doesn't exist, change it to unsigned long */ + +#define mod2_wordsize 32 /* Number of bits that fit in a mod2word. Can't + be increased without changing intio module */ + +#define mod2_wordsize_shift 5 /* Amount to shift by to divide by wordsize */ +#define mod2_wordsize_mask 0x1f /* What to AND with to produce mod wordsize */ + +/* Extract the i'th bit of a mod2word. */ + +#define mod2_getbit(w,i) (((w)>>(i))&1) + +/* Make a word like w, but with the i'th bit set to 1 (if it wasn't already). */ + +#define mod2_setbit1(w,i) ((w)|(1<<(i))) + +/* Make a word like w, but with the i'th bit set to 0 (if it wasn't already). */ + +#define mod2_setbit0(w,i) ((w)&(~(1<<(i)))) + + +/* STRUCTURE REPRESENTING A DENSE MATRIX. These structures are dynamically + allocated using mod2dense_allocate (or by other procedures that call + mod2dense_allocate). They should be freed with mod2dense_free when no + longer required. + + Direct access to this structure should be avoided except in low-level + routines. Use the macros and procedures defined below instead. */ + +typedef struct +{ + int n_rows; /* Number of rows in the matrix */ + int n_cols; /* Number of columns in the matrix */ + + int n_words; /* Number of words used to store a column of bits */ + + mod2word **col; /* Pointer to array of pointers to columns */ + + mod2word *bits; /* Pointer to storage block for bits in this matrix + (pieces of this block are pointed to from col) */ +} mod2dense; + + +/* MACROS. */ + +#define mod2dense_rows(m) ((m)->n_rows) /* Get the number of rows or columns */ +#define mod2dense_cols(m) ((m)->n_cols) /* in a matrix */ + + +/* PROCEDURES. */ + +mod2dense *mod2dense_allocate (int, int); +void mod2dense_free (mod2dense *); + +void mod2dense_clear (mod2dense *); +void mod2dense_copy (mod2dense *, mod2dense *); +void mod2dense_copyrows (mod2dense*, mod2dense *, int *); +void mod2dense_copycols (mod2dense*, mod2dense *, int *); + +void mod2dense_print (FILE *, mod2dense *); +int mod2dense_write (FILE *, mod2dense *); +mod2dense *mod2dense_read (FILE *); + +int mod2dense_get (mod2dense *, int, int); +void mod2dense_set (mod2dense *, int, int, int); +int mod2dense_flip(mod2dense *, int, int); + +void mod2dense_transpose (mod2dense *, mod2dense *); +void mod2dense_add (mod2dense *, mod2dense *, mod2dense *); +void mod2dense_multiply (mod2dense *, mod2dense *, mod2dense *); + +int mod2dense_equal (mod2dense *, mod2dense *); + +int mod2dense_invert (mod2dense *, mod2dense *); +int mod2dense_forcibly_invert (mod2dense *, mod2dense *, int *, int *); +int mod2dense_invert_selected (mod2dense *, mod2dense *, int *, int *); diff --git a/lib/ldpc/mod2dense.html b/lib/ldpc/mod2dense.html new file mode 100755 index 000000000..2b8313873 --- /dev/null +++ b/lib/ldpc/mod2dense.html @@ -0,0 +1,487 @@ + + + Dense Modulo-2 Matrix Routines + + + + +

Dense Modulo-2 Matrix Routines

+ +

This module implements operations on matrices in which the elements +are all 0 or 1, with addition and multiplication being done modulo 2. +The matrices are stored with consecutive bits of a column packed into +32-bit words, and the procedures are implemented where possible using +bit operations on these words. + +

This is an appropriate representation when the matrices are dense +(ie, 0s and 1s are about equally frequent). Matrices in which most +elements are 0s may be better handled with the sparse modulo-2 matrix routines. Matrices +can be converted between these two formats using the module-2 matrix conversion routines. + +

All procedures in this module display an error message on standard +error and terminate the program if passed an invalid argument +(indicative of a programming error), or if memory cannot be allocated. +Errors from invalid contents of a file result in an error code being +returned to the caller, with no message being printed by this module. + + +

Representation of dense matrices

+ +

This module represents a matrix by a pointer to a structure of type +mod2dense. This structure records the number of rows and +columns in the matrix, and contains an array of pointers to where the +bits making up each column are stored. These bits are packed 32 per +word. When possible, bits in a column are manipulated 32 bits at a +time, which operations such as adding one column to another much +faster than the corresponding operations on rows. The pointer +structure also allows the columns of a matrix to easily be rearranged, +which may be necessary when doing matrix inversion. + + +

Header files required: +mod2dense.h + + + +


+
Dimension Macros
+
+ +
The following macros take a pointer to a mod2dense structure as their +argument, and return the number of rows or the number of columns in +the matrix pointed to, which will have been fixed when the matrix was +created with mod2dense_allocate: +
+mod2dense_rows(m)   /* Returns the number of rows in m */
+
+mod2dense_cols(m)   /* Returns the number of columns in m */
+
+ + + +


+
Allocating and Freeing Dense Modulo-2 Matrices
+
+ + +
mod2dense_allocate: +Allocate space for a dense module-2 matrix.
+ +
+mod2dense *mod2dense_allocate 
+( int n_rows,    /* Number of rows in matrix */
+  int n_cols     /* Number of columns in matrix */
+)
+
+ +Allocates space for a matrix with the given number of rows and +columns, and returns a pointer to it. If there is not enough memory +available, a message is displayed on standard error and the program is +terminated. The matrix should be freed with mod2dense_free once it is no longer in use. + +


mod2dense_free: +Free the space occupied by a dense module-2 matrix. + +
+void mod2dense_free 
+( mod2dense *m   /* Pointer to matrix to free */
+)
+
+ +Frees the space occupied by the matrix for re-use. The pointer passed +should no longer be used. + + + +


+
Copying and Clearing Dense Modulo-2 Matrices
+
+ +
mod2dense_clear: +Set all elements of a matrix to zero.
+ +
+void mod2dense_clear
+( mod2dense *m   /* Pointer to matrix to clear */
+)
+
+ +Sets all of the elements of the matrix passed to 0. + +


mod2dense_copy: +Copy the contents of one matrix to another. + +
+void mod2dense_copy
+( mod2dense *m   /* Pointer to matrix to copy from */
+  mod2dense *r   /* Pointer to matrix to receive data */
+)
+
+ +Copies the contents of the first matrix passed, m, to the +second matrix passed, r, which must already have been +allocated, and must have at least as many rows and columns as the +first. If r is larger than m, its elements that have +row or column indexes greater than the dimension of m are set +to zeros. + + +


mod2dense_copyrows: +Copy selected rows from one matrix to another. + +
+void mod2dense_copyrows
+( mod2dense *m,   /* Pointer to matrix to copy columns from */
+  mod2dense *r,   /* Pointer to matrix in which to store data */
+  int *rows       /* Indexes of rows, numbered from 0 */
+)
+
+ +Copies selected rows of the first matrix, m, to the second +matrix, r, which must already have been allocated, and which +must have at least as many columns as m. The indexes of the +rows to copy are given in order as an array of length the same as +the number of rows in r; duplicates are allowed. Row +indexes start at 0. These rows are copied to r, with the +row indexed by the first entry in rows going to the first +row of r, and so forth. If r has more columns than +m, the extra entries in each row are set to zeros. + + +


mod2dense_copycols: +Copy selected columns from one matrix to another. + +
+void mod2dense_copycols
+( mod2dense *m,   /* Pointer to matrix to copy columns from */
+  mod2dense *r,   /* Pointer to matrix in which to store data */
+  int *cols       /* Indexes of columns, numbered from 0 */
+)
+
+ +Copies selected columns of the first matrix, m, to the second +matrix, r, which must already have been allocated, and which +must have at least as many rows as m. The indexes of the +columns to copy are given in order as an array of length the same as +the number of columns in r; duplicates are allowed. Column +indexes start at 0. These columns are copied to r, with the +column indexed by the first entry in cols going to the first +column of r, and so forth. If r has more rows than +m, the extra entries in each column are set to zeros. + + + +


+
Input and Output of Dense Modulo-2 Matrices
+
+ +
mod2dense_print: +Print a dense modulo-2 matrix in human-readable form.
+ +
+void mod2dense_print
+( FILE *f,       /* File to print to */
+  mod2dense *m   /* Pointer to matrix to print */
+)
+
+ +The matrix is printed on standard output as "0" and "1" characters, +each preceded by a space, with one line of "0"s and "1"s for each row +of the matrix. + +


mod2dense_write: +Write a dense modulo-2 matrix to a file in machine-readable format. + +
+int mod2dense_write
+( FILE *f,       /* File to write data to */
+  mod2dense *m   /* Pointer to matrix write out */
+)
+
+ +Writes a machine-readable representation the dense matrix m to +the file f. The file should have been opened in binary mode +(with a "b" in the mode passed to fopen). The contents written will +not be text, and will not be human-readable. Other binary data may +precede or follow the data for the matrix written. + +

The data written to the file consists of the number of rows and the +number of columns, followed by the bits in each column, packed into +32-bit words. The data should be readable by mod2dense_read even on a machine with a +different byte-ordering. + +

The value returned by mod2dense_write is one if the +operation was successful, zero if an error of some sort occurred. + +


mod2dense_read: +Read a dense modulo-2 matrix from a file. + +
+mod2dense *mod2dense_read
+( FILE *f,       /* File to read data from */
+)
+
+ +Reads a dense modulo-2 matrix from the file f. This file +should have been opened in binary mode (with a "b" in the mode passed +to fopen). The contents of the file at the point when +mod2dense_read is called should have been written by mod2dense_write. Other binary data may +precede or follow this data. + +

The value returned is a pointer to the matrix read, for which space +will have been allocated by mod2dense_read, or zero if an +error occurred (either an error reading the file, or data not in the +right format). + + + +


+
Elementary Operations on Dense Modulo-2 Matrices
+
+ +
mod2dense_get: +Get an element of a dense modulo-2 matrix.
+ +
+int mod2dense_get  
+( mod2dense *m,   /* Pointer to matrix to get element from */
+  int row,        /* Row of element (indexed from zero) */
+  int col         /* Column of element (indexed from zero) */
+)
+
+ +Returns the value (0 or 1) of the element in the given row and column +of the matrix m. + +


mod2dense_set: +Set an element of a dense modulo-2 matrix. + +
+void mod2dense_set
+( mod2dense *m,   /* Pointer to matrix to get element from */
+  int row,        /* Row of element (indexed from zero) */
+  int col,        /* Column of element (indexed from zero) */
+  int value       /* New value of element (0 or 1) */
+)
+
+ +Set the element in the given row and column of the matrix m to +the specified value. + +


mod2dense_flip: +Flip an element of a dense modulo-2 matrix. + +
+int mod2dense_flip
+( mod2dense *m,   /* Pointer to matrix to get element from */
+  int row,        /* Row of element (indexed from zero) */
+  int col         /* Column of element (indexed from zero) */
+)
+
+ +Flips the value of the element in the given row and column of the +matrix m, changing it to 0 if it was 1, and to 1 if it was 0. +Returns the new value of this element. + + + +


+
Dense Modulo-2 Matrix Arithmetic and Comparison
+
+ +
mod2dense_transpose: +Compute the transpose of a dense modulo-2 matrix.
+ +
+void mod2dense_transpose
+( mod2dense *m,   /* Matrix to compute transpose of */
+  mod2dense *r    /* Result of transpose operation */
+)
+
+ +Stores the transpose of its first argument, m, in the matrix +pointed to by its second argument, r, which must already have +been allocated, and which must have as many rows as m has +columns, and as many columns as m has rows. The two matrices +m and r must not be the same (ie, the two pointers +passed must be different). + +


mod2dense_add: +Add two dense modulo-2 matrices. + +
+void mod2dense_add
+( mod2dense *m1,  /* Left operand of add */
+  mod2dense *m2,  /* Right operand of add */
+  mod2dense *r    /* Place to store result of add */
+)
+
+ +Adds matrices m1 and m2, storing the result in the +matrix pointed to by r. All three matrices must have the same +numbers of rows and columns. It is permissible for r to be the +same as m1 and/or m2. Neither of the first two matrices is +changed by this procedure (unless they are the same as r). + + +


mod2dense_multiply: +Multiply two dense modulo-2 matrices. + +
+void mod2dense_multiply 
+( mod2dense *m1,  /* Left operand of multiply */
+  mod2dense *m2,  /* Right operand of multiply */
+  mod2dense *r    /* Place to store result of multiply */
+)
+
+ +Does a matrix multiplication of m1 by m2, and stores the +result in the matrix pointed to by r. The matrices must have +compatible numbers of rows and columns. Neither of the first two +matrices is changed by this procedure. The result matrix, r, +must not be the same as either m1 or m2. + +

The algorithm used runs faster if m2 contains mostly 0s, but +it is also appropriate for matrices with many 1s. + +


mod2dense_equal: +Check whether two dense modulo-2 matrices are equal. + +
+int mod2dense_equal
+( mod2dense *m1, /* Pointers to the two matrices */
+  mod2dense *m2  /*   to compare                 */
+)
+
+ +Returns one if every element of m1 is equal to the +corresponding element of m2, and otherwise returns zero. The +two matrices must have the same number of rows and the same number of +columns. + + +


+
Dense Modulo-2 Matrix Inversion
+
+ +
mod2dense_invert: +Invert a dense modulo-2 matrix.
+ +
+int mod2dense_invert
+( mod2dense *m,   /* Matrix to find inverse of (destroyed) */
+  mod2dense *r    /* Place to store the inverse */
+)
+
+ +

Inverts the first matrix passed, m, and stores its inverse in +the second matrix, r. The contents of m are destroyed +by this operation, though it remains a valid matrix for storing into +later. The matrix m must have the same number of rows as +columns. The matrix r must already have been allocated, and +must have the same number of rows and columns as m. The +two matrices passed must not be the same. + +

The value returned is one if the inversion was successful and zero +if the matrix turned out to be singular (in which case the contents of +both the original matrix and the result matrix will be garbage). + +

The algorithm used is based on inverting M by transforming the equation +MI = M to the equation MR = I using column operations, at which point R +is the inverse of M. The representation of matrices used allows easy +swapping of columns as needed by fiddling pointers. + +


mod2dense_forcibly_invert: +Forcibly invert a matrix by changing bits if necessary. + +
+int mod2dense_forcibly_invert
+( mod2dense *m,   /* Matrix to find inverse of (destroyed) */
+  mod2dense *r,   /* Place to store the inverse */
+  int *a_row,     /* Place to store row indexes of altered elements */
+  int *a_col      /* Place to store column indexes of altered elements */
+)
+
+ +

Inverts the first matrix passed, m, and stores its inverse +in the second matrix, r, proceeding with the inversion even if +m is singular, by changing some elements as necessary. The +contents of m are destroyed by this operation, though it +remains a valid matrix for storing into later. The matrix m +must have the same number of rows as columns. The matrix r +must already have been allocated, and must have the same number of +rows and columns as m. The two matrices passed must not be the +same. + +

The value returned is the number of elements of m that had +to be changed to make inversion possible (zero, if the original matrix +was non-singular). The row and column indexes of the elements of the +original matrix that were changed are stored in the arrays passed as +the last two elements. These arrays must have as many elements as the +dimension of the matrix. (This is so even if it is known that fewer +elements than this will be changed, as these arrays are also used as +temporary storage by this routine.) + +

See mod2dense_invert for the algorithm used. + +


mod2dense_invert_selected: +Invert a matrix with columns selected from a bigger matrix. + +
+int mod2dense_invert_selected 
+( mod2dense *m,   /* Matrix from which a submatrix is inverted (destroyed) */
+  mod2dense *r,   /* Place to store the inverse */
+  int *rows,      /* Place to store indexes of rows used and not used */
+  int *cols       /* Place to store indexes of columns used and not used */
+)
+
+ +

Inverts a matrix obtained by selecting certain columns from the +first matrix passed, m, which must have at least as many +columns as rows. The second matrix passed, r, must already +exist, and must have the same number of rows and columns as m. +The result of inverting the sub-matrix of m is stored in the +corresponding columns of r, with the other columns being set to +garbage (or zero, see below). Normally, one would extract just the +relevant columns afterwards using mod2dense_copycols.) The contents of +m are destroyed (though it remains a valid matrix for storing +into later. The two matrices passed must not be the same. + +

The indexes of the columns selected are stored, in order, in the last +argument, cols, followed by the columns not selected (in +arbitrary order). The argument rows is set to the indexes of +the rows used, which will be simply the indexes from zero up if the +matrix is invertible, and will otherwise give an ordering that allows +the inversion to proceed as far as possible. + +

The value returned is zero if an invertible matrix was found, and +is otherwise the number of columns/rows that are redundant (ie, the +amount by which matrix falls short of being of full rank). If +inversion fails, partial results are stored in the columns and rows of +r identified by the initial portions of cols and +rows, such that if these rows and columns were extracted in +their new order, they would constitute the inverse of the +corresponding re-ordered submatrix of m. The remaining portion +of cols up to the number of rows in m will contain +indexes of columns of r that are selected arbitrarily; these +columns will, however, be set to contain all zeros. + +

Note that when the first matrix is square, and non-singular, the +result is NOT in general the same as that obtained by calling mod2dense_invert, since that procedure +orders the columns of the inverse so that it applies to the original +ordering of the columns of the first matrix. + +

See mod2dense_invert for the algorithm used. + +


+ +Back to index for LDPC software + + diff --git a/lib/ldpc/mod2sparse-test-out b/lib/ldpc/mod2sparse-test-out new file mode 100755 index 000000000..5d17ddecf --- /dev/null +++ b/lib/ldpc/mod2sparse-test-out @@ -0,0 +1,431 @@ + +PART 1: + +Matrix m1: + + 0: 0 + 1: 1 + 2: 2 3 + 3: 3 + 4: 4 + 5: 5 + 6: 6 + 7: 7 + 8: 8 + 9: 9 +10: 10 38 +11: 11 +12: 12 +13: 13 +14: 14 +15: 15 +16: 16 +17: 17 +18: 18 +19: 19 +20: 20 +21: 21 +22: 22 +23: 23 +24: 24 +25: 25 +26: 26 +27: 27 +28: 28 +29: 29 +30: 30 +31: 31 +32: 32 +33: 33 +34: 4 34 + +Matrix m2, as read from file. Should be same as m1 above. + + 0: 0 + 1: 1 + 2: 2 3 + 3: 3 + 4: 4 + 5: 5 + 6: 6 + 7: 7 + 8: 8 + 9: 9 +10: 10 38 +11: 11 +12: 12 +13: 13 +14: 14 +15: 15 +16: 16 +17: 17 +18: 18 +19: 19 +20: 20 +21: 21 +22: 22 +23: 23 +24: 24 +25: 25 +26: 26 +27: 27 +28: 28 +29: 29 +30: 30 +31: 31 +32: 32 +33: 33 +34: 4 34 + +Test of equality of m1 & m2 (should be 1): 1 + +Matrix m3, copied from m1 above. + + 0: 0 + 1: 1 + 2: 2 3 + 3: 3 + 4: 4 + 5: 5 + 6: 6 + 7: 7 + 8: 8 + 9: 9 +10: 10 38 +11: 11 +12: 12 +13: 13 +14: 14 +15: 15 +16: 16 +17: 17 +18: 18 +19: 19 +20: 20 +21: 21 +22: 22 +23: 23 +24: 24 +25: 25 +26: 26 +27: 27 +28: 28 +29: 29 +30: 30 +31: 31 +32: 32 +33: 33 +34: 4 34 + +Test of equality of m1 & m3 (should be 1): 1 + +Matrix m3 again, should now be all zeros. + + 0: + 1: + 2: + 3: + 4: + 5: + 6: + 7: + 8: + 9: +10: +11: +12: +13: +14: +15: +16: +17: +18: +19: +20: +21: +22: +23: +24: +25: +26: +27: +28: +29: +30: +31: +32: +33: +34: + +Test of equality of m1 & m3 (should be 0): 0 + + +PART 2: + +Transpose of m1. + + 0: 0 + 1: 1 + 2: 2 + 3: 2 3 + 4: 4 34 + 5: 5 + 6: 6 + 7: 7 + 8: 8 + 9: 9 +10: 10 +11: 11 +12: 12 +13: 13 +14: 14 +15: 15 +16: 16 +17: 17 +18: 18 +19: 19 +20: 20 +21: 21 +22: 22 +23: 23 +24: 24 +25: 25 +26: 26 +27: 27 +28: 28 +29: 29 +30: 30 +31: 31 +32: 32 +33: 33 +34: 34 +35: +36: +37: +38: 10 +39: + +Matrix m1 after adding rows 2 and 12 and 3 to 10. + + 0: 0 + 1: 1 + 2: 2 3 + 3: 3 + 4: 4 + 5: 5 + 6: 6 + 7: 7 + 8: 8 + 9: 9 +10: 2 10 12 38 +11: 11 +12: 12 +13: 13 +14: 14 +15: 15 +16: 16 +17: 17 +18: 18 +19: 19 +20: 20 +21: 21 +22: 22 +23: 23 +24: 24 +25: 25 +26: 26 +27: 27 +28: 28 +29: 29 +30: 30 +31: 31 +32: 32 +33: 33 +34: 4 34 + +Matrix m1 after further adding column 34 to 0. + + 0: 0 + 1: 1 + 2: 2 3 + 3: 3 + 4: 4 + 5: 5 + 6: 6 + 7: 7 + 8: 8 + 9: 9 +10: 2 10 12 38 +11: 11 +12: 12 +13: 13 +14: 14 +15: 15 +16: 16 +17: 17 +18: 18 +19: 19 +20: 20 +21: 21 +22: 22 +23: 23 +24: 24 +25: 25 +26: 26 +27: 27 +28: 28 +29: 29 +30: 30 +31: 31 +32: 32 +33: 33 +34: 0 4 34 + + +PART 3: + +Matrix s0. + +0: +1: 3 4 +2: 0 +3: 1 +4: + +Matrix s1. + +0: +1: 3 5 +2: +3: 0 1 6 +4: + +Matrix s2. + +0: 0 +1: 1 +2: +3: +4: +5: 1 2 3 +6: + +Maxtrix s1 times unpacked vector ( 1 0 0 1 0 1 0 ). + +( 0 0 0 1 0 ) + +Sum of s0 and s1. + +0: +1: 4 5 +2: 0 +3: 0 6 +4: + +Product of s1 and s2. + +0: +1: 1 2 3 +2: +3: 0 1 +4: + +Tried to find (1,2), actually found: (1,2) + +Above matrix with (1,2) cleared. + +0: +1: 1 3 +2: +3: 0 1 +4: + +Tried to find (1,1), actually found: (1,1) + +Matrix with (1,1) cleared as well. + +0: +1: 3 +2: +3: 0 1 +4: + + +PART 4: + +Matrix s1. + +0: 3 5 +1: 1 6 +2: 0 +3: 1 2 +4: 0 2 +5: 6 + +LU decomposition (returned value was 0). + +L= +0: 3 +1: 1 +2: 0 +3: 1 2 +4: 0 2 4 +5: + +U= +0: 0 +1: 1 6 +2: 2 6 +3: 3 +4: 6 + +cols: 0 1 2 3 6 5 4 +rows: 2 1 3 0 4 5 + +Product of L and U. + +0: 3 +1: 1 6 +2: 0 +3: 1 2 +4: 0 2 +5: + +Solution of Ly=x with x from ( 0 1 1 0 1 0 ) according to rows selected. + + 1 1 1 0 1 + +Returned value from forward_sub was 1 + +Solution of Uz=y. + + 1 0 0 0 0 0 1 + +Returned value from backward_sub was 1 + + +PART 5: + +Matrix m1: + +0: 3 +1: 1 +2: 2 +3: 0 + +Matrix m2, copyrows of m1 in order 3,1,2,0 (should be identity) + +0: 0 +1: 1 +2: 2 +3: 3 + +Matrix m3, copycols of m1 in order 3,1,2,0 (should be identity) + +0: 0 +1: 1 +2: 2 +3: 3 + + +DONE WITH TESTS. diff --git a/lib/ldpc/mod2sparse-test.c b/lib/ldpc/mod2sparse-test.c new file mode 100755 index 000000000..04c26250a --- /dev/null +++ b/lib/ldpc/mod2sparse-test.c @@ -0,0 +1,378 @@ +/* MOD2SPARSE-TEST. C - Program to test mod2sparse module. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + + +/* Correct output for this program is saved in the file mod2sparse-test-out */ + + +#include +#include +#include + +#include "mod2sparse.h" + + +main(void) +{ + mod2sparse *m1, *m2, *m3, *m4; + mod2sparse *s0, *s1, *s2, *s3, *s4; + mod2sparse *L, *U; + mod2entry *e; + int rows[5], cols[7]; + int i, j; + FILE *f; + + + printf("\nPART 1:\n\n"); + + /* Set up m1 with bits on a diagonal plus a few more set to 1. */ + + m1 = mod2sparse_allocate(35,40); + + mod2sparse_clear(m1); + + for (i = 0; i<35; i++) mod2sparse_insert(m1,i,i); + + mod2sparse_insert(m1,2,3); + mod2sparse_insert(m1,34,4); + mod2sparse_insert(m1,10,38); + + /* Print m1. */ + + printf("Matrix m1:\n\n"); + mod2sparse_print(stdout,m1); + printf("\n"); fflush(stdout); + + /* Store m1 in a file. */ + + f = fopen("test-file","wb"); + if (f==0) + { fprintf(stderr,"Can't create test-file\n"); + exit(1); + } + + if (!mod2sparse_write(f,m1)) + { printf("Error from mod2sparse_write\n"); + } + + fclose(f); + + /* Read matrix written above back into m2. */ + + f = fopen("test-file","rb"); + if (f==0) + { fprintf(stderr,"Can't open test-file\n"); + exit(1); + } + + m2 = mod2sparse_read(f); + + if (m2==0) + { printf("Error from mod2sparse_read\n"); + exit(1); + } + + /* Print m2, along with result of equality test. */ + + printf("Matrix m2, as read from file. Should be same as m1 above.\n\n"); + mod2sparse_print(stdout,m2); + printf("\n"); fflush(stdout); + + printf("Test of equality of m1 & m2 (should be 1): %d\n\n", + mod2sparse_equal(m1,m2)); + + /* Copy m1 to m3. */ + + m3 = mod2sparse_allocate(mod2sparse_rows(m1),mod2sparse_cols(m1)); + + mod2sparse_copy(m1,m3); + + /* Print m3, along with result of equality test. */ + + printf("Matrix m3, copied from m1 above.\n\n"); + mod2sparse_print(stdout,m3); + printf("\n"); fflush(stdout); + + printf("Test of equality of m1 & m3 (should be 1): %d\n\n", + mod2sparse_equal(m1,m3)); + + /* Clear m3. */ + + mod2sparse_clear(m3); + + /* Print m3 again. */ + + printf("Matrix m3 again, should now be all zeros.\n\n"); + mod2sparse_print(stdout,m3); + printf("\n"); fflush(stdout); + + printf("Test of equality of m1 & m3 (should be 0): %d\n\n", + mod2sparse_equal(m1,m3)); + + + printf("\nPART 2:\n\n"); + + /* Compute transpose of m1. */ + + m4 = mod2sparse_allocate(mod2sparse_cols(m1),mod2sparse_rows(m1)); + + mod2sparse_transpose(m1,m4); + + /* Print transpose. */ + + printf("Transpose of m1.\n\n"); + mod2sparse_print(stdout,m4); + printf("\n"); fflush(stdout); + + /* Add rows and columns in m1. */ + + mod2sparse_add_row(m1,10,m1,2); + mod2sparse_add_row(m1,10,m1,12); + mod2sparse_add_row(m1,10,m1,3); + printf("Matrix m1 after adding rows 2 and 12 and 3 to 10.\n\n"); + mod2sparse_print(stdout,m1); + printf("\n"); fflush(stdout); + printf("Matrix m1 after further adding column 34 to 0.\n\n"); + mod2sparse_add_col(m1,0,m1,34); + mod2sparse_print(stdout,m1); + printf("\n"); fflush(stdout); + + /* Free space for m1, m2, and m3. */ + + mod2sparse_free(m1); + mod2sparse_free(m2); + mod2sparse_free(m3); + + + printf("\nPART 3:\n\n"); + + /* Allocate some small matrices. */ + + s0 = mod2sparse_allocate(5,7); + s1 = mod2sparse_allocate(5,7); + s2 = mod2sparse_allocate(7,4); + s3 = mod2sparse_allocate(5,4); + s4 = mod2sparse_allocate(5,7); + + /* Set up the contents of s0, s1, and s2. */ + + mod2sparse_clear(s0); + mod2sparse_clear(s1); + mod2sparse_clear(s2); + + mod2sparse_insert(s0,1,3); + mod2sparse_insert(s0,1,4); + mod2sparse_insert(s0,2,0); + mod2sparse_insert(s0,3,1); + + mod2sparse_insert(s1,1,3); + mod2sparse_insert(s1,1,5); + mod2sparse_insert(s1,3,0); + mod2sparse_insert(s1,3,1); + mod2sparse_insert(s1,3,6); + + mod2sparse_insert(s2,5,1); + mod2sparse_insert(s2,5,2); + mod2sparse_insert(s2,5,3); + mod2sparse_insert(s2,0,0); + mod2sparse_insert(s2,1,1); + + /* Print s0, s1, and s2. */ + + printf("Matrix s0.\n\n"); + mod2sparse_print(stdout,s0); + printf("\nMatrix s1.\n\n"); + mod2sparse_print(stdout,s1); + printf("\nMatrix s2.\n\n"); + mod2sparse_print(stdout,s2); + printf("\n"); fflush(stdout); + + /* Multiply s1 by vector (1 1 0 1 0 1 0). */ + + { char u[7] = { 1, 0, 0, 1, 0, 1, 0 }; + char v[5]; + int i; + printf("Maxtrix s1 times unpacked vector ( 1 0 0 1 0 1 0 ).\n\n("); + mod2sparse_mulvec(s1,u,v); + for (i = 0; i<5; i++) printf(" %d",v[i]); + printf(" )\n\n"); + } + + /* Add s0 and s1, storing the result in s4, then print s4. */ + + mod2sparse_add(s0,s1,s4); + + printf("Sum of s0 and s1.\n\n"); + mod2sparse_print(stdout,s4); + printf("\n"); fflush(stdout); + + /* Multiply s1 and s2, storing the product in s3, and then print s3. */ + + mod2sparse_multiply(s1,s2,s3); + + printf("Product of s1 and s2.\n\n"); + mod2sparse_print(stdout,s3); + printf("\n"); fflush(stdout); + + /* Try clearing a bit in s3, then printing the result. */ + + e = mod2sparse_find(s3,1,2); + printf("Tried to find (1,2), actually found: (%d,%d)\n\n", + mod2sparse_row(e), mod2sparse_col(e)); + + mod2sparse_delete(s3,e); + + printf("Above matrix with (1,2) cleared.\n\n"); + mod2sparse_print(stdout,s3); + printf("\n"); fflush(stdout); + + /* Try clearing another bit in s3, then printing the result. */ + + e = mod2sparse_find(s3,1,1); + printf("Tried to find (1,1), actually found: (%d,%d)\n\n", + mod2sparse_row(e), mod2sparse_col(e)); + + mod2sparse_delete(s3,e); + + printf("Matrix with (1,1) cleared as well.\n\n"); + mod2sparse_print(stdout,s3); + printf("\n"); fflush(stdout); + + /* Free space for s0, s1, s2, s3, and s4. */ + + mod2sparse_free(s0); + mod2sparse_free(s1); + mod2sparse_free(s2); + mod2sparse_free(s3); + mod2sparse_free(s4); + + + printf("\nPART 4:\n\n"); + + /* Set up a small rectangular matrix, s1. */ + + s1 = mod2sparse_allocate(6,7); + + mod2sparse_clear(s1); + + mod2sparse_insert(s1,0,3); + mod2sparse_insert(s1,0,5); + mod2sparse_insert(s1,1,6); + mod2sparse_insert(s1,1,1); + mod2sparse_insert(s1,2,0); + mod2sparse_insert(s1,3,1); + mod2sparse_insert(s1,3,2); + mod2sparse_insert(s1,4,2); + mod2sparse_insert(s1,4,0); + mod2sparse_insert(s1,5,6); + + /* Print s1. */ + + printf("Matrix s1.\n\n"); + mod2sparse_print(stdout,s1); + printf("\n"); fflush(stdout); + + /* Compute and print LU decomposition. */ + + L = mod2sparse_allocate(6,5); + U = mod2sparse_allocate(5,7); + + i = mod2sparse_decomp(s1,5,L,U,rows,cols,Mod2sparse_first,0,0); + + printf("LU decomposition (returned value was %d).\n\n",i); + printf("L=\n"); + mod2sparse_print(stdout,L); + printf("\nU=\n"); + mod2sparse_print(stdout,U); + printf("\n"); + + printf("cols:"); + for (j = 0; j<7; j++) printf(" %d",cols[j]); + printf("\n"); + printf("rows:"); + for (i = 0; i<6; i++) printf(" %d",rows[i]); + printf("\n\n"); + fflush(stdout); + + /* Compute and print product of L and U. Should match s1 for the + sub-matrix found. */ + + s2 = mod2sparse_allocate(6,7); + mod2sparse_multiply(L,U,s2); + + printf("Product of L and U.\n\n"); + mod2sparse_print(stdout,s2); + printf("\n"); + fflush(stdout); + + /* Solve system by forward and backward substitution. */ + + { char x[6] = { 0, 1, 1, 0, 1, 0 }; + static char y[5], z[7]; + int i, r; + + r = mod2sparse_forward_sub (L, rows, x, y); + printf( +"Solution of Ly=x with x from ( 0 1 1 0 1 0 ) according to rows selected.\n\n"); + for (i = 0; i<5; i++) printf(" %d",y[i]); + printf("\n\nReturned value from forward_sub was %d\n\n",r); + fflush(stdout); + + r = mod2sparse_backward_sub (U, cols, y, z); + printf("Solution of Uz=y.\n\n"); + for (i = 0; i<7; i++) printf(" %d",z[i]); + printf("\n\nReturned value from backward_sub was %d\n\n",r); + fflush(stdout); + } + + printf("\nPART 5:\n\n"); + + m1 = mod2sparse_allocate(4,4); + m2 = mod2sparse_allocate(4,4); + m3 = mod2sparse_allocate(4,4); + + mod2sparse_insert(m1,0,3); + mod2sparse_insert(m1,1,1); + mod2sparse_insert(m1,2,2); + mod2sparse_insert(m1,3,0); + + printf("Matrix m1:\n\n"); + + mod2sparse_print(stdout,m1); + printf("\n"); fflush(stdout); + + printf("Matrix m2, copyrows of m1 in order 3,1,2,0 (should be identity)\n\n"); + + { int rows[] = { 3, 1, 2, 0 }; + mod2sparse_copyrows(m1,m2,rows); + } + + mod2sparse_print(stdout,m2); + printf("\n"); fflush(stdout); + + printf("Matrix m3, copycols of m1 in order 3,1,2,0 (should be identity)\n\n"); + + { int cols[] = { 3, 1, 2, 0 }; + mod2sparse_copycols(m1,m3,cols); + } + + mod2sparse_print(stdout,m3); + printf("\n"); fflush(stdout); + + + printf("\nDONE WITH TESTS.\n"); + + exit(0); +} diff --git a/lib/ldpc/mod2sparse.c b/lib/ldpc/mod2sparse.c new file mode 100755 index 000000000..66e66799d --- /dev/null +++ b/lib/ldpc/mod2sparse.c @@ -0,0 +1,1361 @@ +/* MOD2SPARSE.C - Procedures for handling sparse mod2 matrices. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + + +/* NOTE: See mod2sparse.html for documentation on these procedures. */ + + +#include +#include +#include + +#include "alloc.h" +#include "intio.h" +#include "mod2sparse.h" + + +/* ALLOCATE AN ENTRY WITHIN A MATRIX. This local procedure is used to + allocate a new entry, representing a non-zero element, within a given + matrix. Entries in this matrix that were previously allocated and + then freed are re-used. If there are no such entries, a new block + of entries is allocated. */ + +static mod2entry *alloc_entry +( mod2sparse *m +) +{ + mod2block *b; + mod2entry *e; + int k; + + if (m->next_free==0) + { + b = chk_alloc (1, sizeof *b); + + b->next = m->blocks; + m->blocks = b; + + for (k = 0; kentry[k].left = m->next_free; + m->next_free = &b->entry[k]; + } + } + + e = m->next_free; + m->next_free = e->left; + + e->pr = 0; + e->lr = 0; + + return e; +} + + +/* ALLOCATE SPACE FOR A SPARSE MOD2 MATRIX. */ + +mod2sparse *mod2sparse_allocate +( int n_rows, /* Number of rows in matrix */ + int n_cols /* Number of columns in matrix */ +) +{ + mod2sparse *m; + mod2entry *e; + int i, j; + + if (n_rows<=0 || n_cols<=0) + { fprintf(stderr,"mod2sparse_allocate: Invalid number of rows or columns\n"); + exit(1); + } + + m = chk_alloc (1, sizeof *m); + + m->n_rows = n_rows; + m->n_cols = n_cols; + + m->rows = chk_alloc (n_rows, sizeof *m->rows); + m->cols = chk_alloc (n_cols, sizeof *m->cols); + + m->blocks = 0; + m->next_free = 0; + + for (i = 0; irows[i]; + e->left = e->right = e->up = e->down = e; + e->row = e->col = -1; + } + + for (j = 0; jcols[j]; + e->left = e->right = e->up = e->down = e; + e->row = e->col = -1; + } + + return m; +} + + +/* FREE SPACE OCCUPIED BY A SPARSE MOD2 MATRIX. */ + +void mod2sparse_free +( mod2sparse *m /* Matrix to free */ +) +{ + mod2block *b; + + free(m->rows); + free(m->cols); + + while (m->blocks!=0) + { b = m->blocks; + m->blocks = b->next; + free(b); + } +} + + +/* CLEAR A SPARSE MATRIX TO ALL ZEROS. */ + +void mod2sparse_clear +( mod2sparse *r +) +{ + mod2block *b; + mod2entry *e; + int i, j; + + for (i = 0; irows[i]; + e->left = e->right = e->up = e->down = e; + } + + for (j = 0; jcols[j]; + e->left = e->right = e->up = e->down = e; + } + + while (r->blocks!=0) + { b = r->blocks; + r->blocks = b->next; + free(b); + } +} + + +/* COPY A SPARSE MATRIX. */ + +void mod2sparse_copy +( mod2sparse *m, /* Matrix to copy */ + mod2sparse *r /* Place to store copy of matrix */ +) +{ + mod2entry *e, *f; + int i; + + if (mod2sparse_rows(m)>mod2sparse_rows(r) + || mod2sparse_cols(m)>mod2sparse_cols(r)) + { fprintf(stderr,"mod2sparse_copy: Destination matrix is too small\n"); + exit(1); + } + + mod2sparse_clear(r); + + for (i = 0; irow,e->col); + f->lr = e->lr; + f->pr = e->pr; + e = mod2sparse_next_in_row(e); + } + } +} + + +/* COPY ROWS OF A SPARSE MOD2 MATRIX. */ + +void mod2sparse_copyrows +( mod2sparse *m, /* Matrix to copy */ + mod2sparse *r, /* Place to store copy of matrix */ + int *rows /* Indexes of rows to copy, from 0 */ +) +{ + mod2entry *e; + int i; + + if (mod2sparse_cols(m)>mod2sparse_cols(r)) + { fprintf(stderr, + "mod2sparse_copyrows: Destination matrix has fewer columns than source\n"); + exit(1); + } + + mod2sparse_clear(r); + + for (i = 0; i=mod2sparse_rows(m)) + { fprintf(stderr,"mod2sparse_copyrows: Row index out of range\n"); + exit(1); + } + e = mod2sparse_first_in_row(m,rows[i]); + while (!mod2sparse_at_end(e)) + { mod2sparse_insert(r,i,e->col); + e = mod2sparse_next_in_row(e); + } + } +} + + +/* COPY COLUMNS OF A SPARSE MOD2 MATRIX. */ + +void mod2sparse_copycols +( mod2sparse *m, /* Matrix to copy */ + mod2sparse *r, /* Place to store copy of matrix */ + int *cols /* Indexes of columns to copy, from 0 */ +) +{ + mod2entry *e; + int j; + + if (mod2sparse_rows(m)>mod2sparse_rows(r)) + { fprintf(stderr, + "mod2sparse_copycols: Destination matrix has fewer rows than source\n"); + exit(1); + } + + mod2sparse_clear(r); + + for (j = 0; j=mod2sparse_cols(m)) + { fprintf(stderr,"mod2sparse_copycols: Column index out of range\n"); + exit(1); + } + e = mod2sparse_first_in_col(m,cols[j]); + while (!mod2sparse_at_end(e)) + { mod2sparse_insert(r,e->row,j); + e = mod2sparse_next_in_col(e); + } + } +} + + +/* PRINT A SPARSE MOD2 MATRIX IN HUMAN-READABLE FORM. */ + +void mod2sparse_print +( FILE *f, + mod2sparse *m +) +{ + int rdigits, cdigits; + mod2entry *e; + int i; + + rdigits = mod2sparse_rows(m)<=10 ? 1 + : mod2sparse_rows(m)<=100 ? 2 + : mod2sparse_rows(m)<=1000 ? 3 + : mod2sparse_rows(m)<=10000 ? 4 + : mod2sparse_rows(m)<=100000 ? 5 + : 6; + + cdigits = mod2sparse_cols(m)<=10 ? 1 + : mod2sparse_cols(m)<=100 ? 2 + : mod2sparse_cols(m)<=1000 ? 3 + : mod2sparse_cols(m)<=10000 ? 4 + : mod2sparse_cols(m)<=100000 ? 5 + : 6; + + for (i = 0; in_rows); + if (ferror(f)) return 0; + + intio_write(f,m->n_cols); + if (ferror(f)) return 0; + + for (i = 0; i=n_rows) break; + } + else + { col = v-1; + if (col>=n_cols) break; + if (row==-1) break; + mod2sparse_insert(m,row,col); + } + } + + /* Error if we get here. */ + + mod2sparse_free(m); + return 0; +} + + +/* LOOK FOR AN ENTRY WITH GIVEN ROW AND COLUMN. */ + +mod2entry *mod2sparse_find +( mod2sparse *m, + int row, + int col +) +{ + mod2entry *re, *ce; + + if (row<0 || row>=mod2sparse_rows(m) || col<0 || col>=mod2sparse_cols(m)) + { fprintf(stderr,"mod2sparse_find: row or column index out of bounds\n"); + exit(1); + } + + /* Check last entries in row and column. */ + + re = mod2sparse_last_in_row(m,row); + if (mod2sparse_at_end(re) || mod2sparse_col(re)col) + { return 0; + } + if (mod2sparse_col(re)==col) + { return re; + } + + if (mod2sparse_at_end(ce) || mod2sparse_row(ce)>row) + { return 0; + } + if (mod2sparse_row(ce)==row) + { return ce; + } + + re = mod2sparse_next_in_row(re); + ce = mod2sparse_next_in_col(ce); + } +} + + +/* INSERT AN ENTRY WITH GIVEN ROW AND COLUMN. */ + +mod2entry *mod2sparse_insert +( mod2sparse *m, + int row, + int col +) +{ + mod2entry *re, *ce, *ne; + + if (row<0 || row>=mod2sparse_rows(m) || col<0 || col>=mod2sparse_cols(m)) + { fprintf(stderr,"mod2sparse_insert: row or column index out of bounds\n"); + exit(1); + } + + /* Find old entry and return it, or allocate new entry and insert into row. */ + + re = mod2sparse_last_in_row(m,row); + + if (!mod2sparse_at_end(re) && mod2sparse_col(re)==col) + { return re; + } + + if (mod2sparse_at_end(re) || mod2sparse_col(re)right; + } + else + { + re = mod2sparse_first_in_row(m,row); + + for (;;) + { + if (!mod2sparse_at_end(re) && mod2sparse_col(re)==col) + { return re; + } + + if (mod2sparse_at_end(re) || mod2sparse_col(re)>col) + { break; + } + + re = mod2sparse_next_in_row(re); + } + } + + ne = alloc_entry(m); + + ne->row = row; + ne->col = col; + + ne->left = re->left; + ne->right = re; + ne->left->right = ne; + ne->right->left = ne; + + /* Insert new entry into column. If we find an existing entry here, + the matrix must be garbled, since we didn't find it in the row. */ + + ce = mod2sparse_last_in_col(m,col); + + if (!mod2sparse_at_end(ce) && mod2sparse_row(ce)==row) + { fprintf(stderr,"mod2sparse_insert: Garbled matrix\n"); + exit(1); + } + + if (mod2sparse_at_end(ce) || mod2sparse_row(ce)down; + } + else + { + ce = mod2sparse_first_in_col(m,col); + + for (;;) + { + if (!mod2sparse_at_end(ce) && mod2sparse_row(ce)==row) + { fprintf(stderr,"mod2sparse_insert: Garbled matrix\n"); + exit(1); + } + + if (mod2sparse_at_end(ce) || mod2sparse_row(ce)>row) + { break; + } + + ce = mod2sparse_next_in_col(ce); + } + } + + ne->up = ce->up; + ne->down = ce; + ne->up->down = ne; + ne->down->up = ne; + + /* Return the new entry. */ + + return ne; +} + + +/* DELETE AN ENTRY FROM A SPARSE MATRIX. */ + +void mod2sparse_delete +( mod2sparse *m, + mod2entry *e +) +{ + if (e==0) + { fprintf(stderr,"mod2sparse_delete: Trying to delete a null entry\n"); + exit(1); + } + + if (e->row<0 || e->col<0) + { fprintf(stderr,"mod2sparse_delete: Trying to delete a header entry\n"); + exit(1); + } + + e->left->right = e->right; + e->right->left = e->left; + + e->up->down = e->down; + e->down->up = e->up; + + e->left = m->next_free; + m->next_free = e; +} + + +/* TEST WHETHER TWO SPARSE MATRICES ARE EQUAL. */ + +int mod2sparse_equal +( mod2sparse *m1, + mod2sparse *m2 +) +{ + mod2entry *e1, *e2; + int i; + + if (mod2sparse_rows(m1)!=mod2sparse_rows(m2) + || mod2sparse_cols(m1)!=mod2sparse_cols(m2)) + { fprintf(stderr,"mod2sparse_equal: Matrices have different dimensions\n"); + exit(1); + } + + for (i = 0; i=mod2sparse_rows(m)) + { fprintf(stderr,"mod2sparse_count_row: row index out of bounds\n"); + exit(1); + } + + count = 0; + + for (e = mod2sparse_first_in_row(m,row); + !mod2sparse_at_end(e); + e = mod2sparse_next_in_row(e)) + { count += 1; + } + + return count; +} + + +/* COUNT ENTRIES IN A COLUMN. */ + +int mod2sparse_count_col +( mod2sparse *m, + int col +) +{ + mod2entry *e; + int count; + + if (col<0 || col>=mod2sparse_cols(m)) + { fprintf(stderr,"mod2sparse_count_col: column index out of bounds\n"); + exit(1); + } + + count = 0; + + for (e = mod2sparse_first_in_col(m,col); + !mod2sparse_at_end(e); + e = mod2sparse_next_in_col(e)) + { count += 1; + } + + return count; +} + + +/* ADD TO A ROW. */ + +void mod2sparse_add_row +( mod2sparse *m1, /* Matrix containing row to add to */ + int row1, /* Index in this matrix of row to add to */ + mod2sparse *m2, /* Matrix containing row to add from */ + int row2 /* Index in this matrix of row to add from */ +) +{ + mod2entry *f1, *f2, *ft; + + if (mod2sparse_cols(m1)=mod2sparse_rows(m1) + || row2<0 || row2>=mod2sparse_rows(m2)) + { fprintf (stderr,"mod2sparse_add_row: row index out of range\n"); + exit(1); + } + + f1 = mod2sparse_first_in_row(m1,row1); + f2 = mod2sparse_first_in_row(m2,row2); + + while (!mod2sparse_at_end(f1) && !mod2sparse_at_end(f2)) + { if (mod2sparse_col(f1)>mod2sparse_col(f2)) + { mod2sparse_insert(m1,row1,mod2sparse_col(f2)); + f2 = mod2sparse_next_in_row(f2); + } + else + { ft = mod2sparse_next_in_row(f1); + if (mod2sparse_col(f1)==mod2sparse_col(f2)) + { mod2sparse_delete(m1,f1); + f2 = mod2sparse_next_in_row(f2); + } + f1 = ft; + } + } + + while (!mod2sparse_at_end(f2)) + { mod2sparse_insert(m1,row1,mod2sparse_col(f2)); + f2 = mod2sparse_next_in_row(f2); + } +} + + +/* ADD TO A COLUMN. */ + +void mod2sparse_add_col +( mod2sparse *m1, /* Matrix containing column to add to */ + int col1, /* Index in this matrix of column to add to */ + mod2sparse *m2, /* Matrix containing column to add from */ + int col2 /* Index in this matrix of column to add from */ +) +{ + mod2entry *f1, *f2, *ft; + + if (mod2sparse_rows(m1)=mod2sparse_cols(m1) + || col2<0 || col2>=mod2sparse_cols(m2)) + { fprintf (stderr,"mod2sparse_add_col: Column index out of range\n"); + exit(1); + } + + f1 = mod2sparse_first_in_col(m1,col1); + f2 = mod2sparse_first_in_col(m2,col2); + + while (!mod2sparse_at_end(f1) && !mod2sparse_at_end(f2)) + { if (mod2sparse_row(f1)>mod2sparse_row(f2)) + { mod2sparse_insert(m1,mod2sparse_row(f2),col1); + f2 = mod2sparse_next_in_col(f2); + } + else + { ft = mod2sparse_next_in_col(f1); + if (mod2sparse_row(f1)==mod2sparse_row(f2)) + { mod2sparse_delete(m1,f1); + f2 = mod2sparse_next_in_col(f2); + } + f1 = ft; + } + } + + while (!mod2sparse_at_end(f2)) + { mod2sparse_insert(m1,mod2sparse_row(f2),col1); + f2 = mod2sparse_next_in_col(f2); + } +} + + +/* FIND AN LU DECOMPOSITION OF A SPARSE MATRIX. */ + +int mod2sparse_decomp +( mod2sparse *A, /* Input matrix, M by N */ + int K, /* Size of sub-matrix to find LU decomposition of */ + mod2sparse *L, /* Matrix in which L is stored, M by K */ + mod2sparse *U, /* Matrix in which U is stored, K by N */ + int *rows, /* Array where row indexes are stored, M long */ + int *cols, /* Array where column indexes are stored, N long */ + mod2sparse_strategy strategy, /* Strategy to follow in picking rows/columns */ + int abandon_number, /* Number of columns to abandon at some point */ + int abandon_when /* When to abandon these columns */ +) +{ + int *rinv, *cinv, *acnt, *rcnt; + mod2sparse *B; + int M, N; + + mod2entry *e, *f, *fn, *e2; + int i, j, k, cc, cc2, cc3, cr2, pr; + int found, nnf; + + M = mod2sparse_rows(A); + N = mod2sparse_cols(A); + + if (mod2sparse_cols(L)!=K || mod2sparse_rows(L)!=M + || mod2sparse_cols(U)!=N || mod2sparse_rows(U)!=K) + { fprintf (stderr, + "mod2sparse_decomp: Matrices have incompatible dimensions\n"); + exit(1); + } + + if (abandon_number>N-K) + { fprintf(stderr,"Trying to abandon more columns than allowed\n"); + exit(1); + } + + rinv = chk_alloc (M, sizeof *rinv); + cinv = chk_alloc (N, sizeof *cinv); + + if (abandon_number>0) + { acnt = chk_alloc (M+1, sizeof *acnt); + } + + if (strategy==Mod2sparse_minprod) + { rcnt = chk_alloc (M, sizeof *rcnt); + } + + mod2sparse_clear(L); + mod2sparse_clear(U); + + /* Copy A to B. B will be modified, then discarded. */ + + B = mod2sparse_allocate(M,N); + mod2sparse_copy(A,B); + + /* Count 1s in rows of B, if using minprod strategy. */ + + if (strategy==Mod2sparse_minprod) + { for (i = 0; i=i) + { found = 1; + goto out_first; + } + e = mod2sparse_next_in_col(e); + } + } + + out_first: + break; + } + + case Mod2sparse_mincol: + { + found = 0; + + for (j = i; j=i) + { found = 1; + cc = cc2; + e = e2; + k = j; + break; + } + e2 = mod2sparse_next_in_col(e2); + } + } + } + + break; + } + + case Mod2sparse_minprod: + { + found = 0; + + for (j = i; j=i) + { cr2 = rcnt[mod2sparse_row(e2)]; + if (!found || cc2==1 || (cc2-1)*(cr2-1)i) + { mod2sparse_add_row(B,k,B,mod2sparse_row(e)); + if (strategy==Mod2sparse_minprod) + { rcnt[k] = mod2sparse_count_row(B,k); + } + mod2sparse_insert(L,k,i); + } + else if (rinv[k]0 && i==abandon_when) + { + for (k = 0; kk || cc3==k && cc>0) + { if (cc3==k) cc -= 1; + for (;;) + { f = mod2sparse_first_in_col(B,j); + if (mod2sparse_at_end(f)) break; + mod2sparse_delete(B,f); + } + cc2 += 1; + } + } + + if (cc2!=abandon_number) abort(); + + if (strategy==Mod2sparse_minprod) + { for (j = 0; j0) free(acnt); + + return nnf; +} + + +/* SOLVE A LOWER-TRIANGULAR SYSTEM BY FORWARD SUBSTITUTION. */ + +int mod2sparse_forward_sub +( mod2sparse *L, /* Matrix that is lower triangular after reordering */ + int *rows, /* Array of indexes (from 0) of rows for new order */ + char *x, /* Vector on right of equation, also reordered */ + char *y /* Place to store solution */ +) +{ + int K, i, j, ii, b, d; + mod2entry *e; + + K = mod2sparse_cols(L); + + /* Make sure that L is lower-triangular, after row re-ordering. */ + + for (i = 0; ii) + { fprintf(stderr, + "mod2sparse_forward_sub: Matrix is not lower-triangular\n"); + exit(1); + } + } + + /* Solve system by forward substitution. */ + + for (i = 0; ii) + { fprintf(stderr, + "mod2sparse_backward_sub: Matrix is not upper-triangular\n"); + exit(1); + } + } + + /* Solve system by backward substitution. */ + + for (i = K-1; i>=0; i--) + { + ii = cols ? cols[i] : i; + + /* Look at bits in this row, forming inner product with partial + solution, and seeing if the diagonal is 1. */ + + d = 0; + b = 0; + + for (e = mod2sparse_first_in_row(U,i); + !mod2sparse_at_end(e); + e = mod2sparse_next_in_row(e)) + { + j = mod2sparse_col(e); + + if (j==ii) + { d = 1; + } + else + { b ^= z[j]; + } + } + + /* Check for no solution if the diagonal isn't 1. */ + + if (!d && b!=y[i]) + { return 0; + } + + /* Set bit of solution, zero if arbitrary. */ + + z[ii] = b^y[i]; + } + + return 1; +} diff --git a/lib/ldpc/mod2sparse.h b/lib/ldpc/mod2sparse.h new file mode 100755 index 000000000..23d8d79f2 --- /dev/null +++ b/lib/ldpc/mod2sparse.h @@ -0,0 +1,147 @@ +/* MOD2SPARSE.H - Interface to module for handling sparse mod2 matrices. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + + +/* This module implements operations on sparse matrices of mod2 elements + (bits, with addition and multiplication being done modulo 2). + + All procedures in this module display an error message on standard + error and terminate the program if passed an invalid argument (indicative + of a programming error), or if memory cannot be allocated. Errors from + invalid contents of a file result in an error code being returned to the + caller, with no message being printed by this module. +*/ + + +/* DATA STRUCTURES USED TO STORE A SPARSE MATRIX. Non-zero entries (ie, 1s) + are represented by nodes that are doubly-linked both by row and by column, + with the headers for these lists being kept in arrays. Nodes are allocated + in blocks to reduce time and space overhead. Freed nodes are kept for + reuse in the same matrix, rather than being freed for other uses, except + that they are all freed when the matrix is cleared to all zeros by the + mod2sparse_clear procedure, or copied into by mod2sparse_copy. + + Direct access to these structures should be avoided except in low-level + routines. Use the macros and procedures defined below instead. */ + +typedef struct mod2entry /* Structure representing a non-zero entry, or + the header for a row or column */ +{ + int row, col; /* Row and column indexes of this entry, starting + at 0, and with -1 for a row or column header */ + + struct mod2entry *left, *right, /* Pointers to entries adjacent in row */ + *up, *down; /* and column, or to headers. Free */ + /* entries are linked by 'left'. */ + + double pr, lr; /* Probability and likelihood ratios - not used */ + /* by the mod2sparse module itself */ +} mod2entry; + +#define Mod2sparse_block 10 /* Number of entries to block together for + memory allocation */ + +typedef struct mod2block /* Block of entries allocated all at once */ +{ + struct mod2block *next; /* Next block that has been allocated */ + + mod2entry entry[Mod2sparse_block]; /* Entries in this block */ + +} mod2block; + +typedef struct /* Representation of a sparse matrix */ +{ + int n_rows; /* Number of rows in the matrix */ + int n_cols; /* Number of columns in the matrix */ + + mod2entry *rows; /* Pointer to array of row headers */ + mod2entry *cols; /* Pointer to array of column headers */ + + mod2block *blocks; /* Blocks that have been allocated */ + mod2entry *next_free; /* Next free entry */ + +} mod2sparse; + + +/* MACROS TO GET AT ELEMENTS OF A SPARSE MATRIX. The 'first', 'last', 'next', + and 'prev' macros traverse the elements in a row or column. Moving past + the first/last element gets one to a header element, which can be identified + using the 'at_end' macro. Macros also exist for finding out the row + and column of an entry, and for finding out the dimensions of a matrix. */ + +#define mod2sparse_first_in_row(m,i) ((m)->rows[i].right) /* Find the first */ +#define mod2sparse_first_in_col(m,j) ((m)->cols[j].down) /* or last entry in */ +#define mod2sparse_last_in_row(m,i) ((m)->rows[i].left) /* a row or column */ +#define mod2sparse_last_in_col(m,j) ((m)->cols[j].up) + +#define mod2sparse_next_in_row(e) ((e)->right) /* Move from one entry to */ +#define mod2sparse_next_in_col(e) ((e)->down) /* another in any of the four */ +#define mod2sparse_prev_in_row(e) ((e)->left) /* possible directions */ +#define mod2sparse_prev_in_col(e) ((e)->up) + +#define mod2sparse_at_end(e) ((e)->row<0) /* See if we've reached the end */ + +#define mod2sparse_row(e) ((e)->row) /* Find out the row or column index */ +#define mod2sparse_col(e) ((e)->col) /* of an entry (indexes start at 0) */ + +#define mod2sparse_rows(m) ((m)->n_rows) /* Get the number of rows or columns*/ +#define mod2sparse_cols(m) ((m)->n_cols) /* in a matrix */ + + +/* POSSIBLE LU DECOMPOSITION STRATEGIES. For use with mod2sparse_decomp. */ + +typedef enum +{ Mod2sparse_first, + Mod2sparse_mincol, + Mod2sparse_minprod +} mod2sparse_strategy; + + +/* PROCEDURES TO MANIPULATE SPARSE MATRICES. */ + +mod2sparse *mod2sparse_allocate (int, int); +void mod2sparse_free (mod2sparse *); + +void mod2sparse_clear (mod2sparse *); +void mod2sparse_copy (mod2sparse *, mod2sparse *); +void mod2sparse_copyrows (mod2sparse *, mod2sparse *, int *); +void mod2sparse_copycols (mod2sparse *, mod2sparse *, int *); + +void mod2sparse_print (FILE *, mod2sparse *); +int mod2sparse_write (FILE *, mod2sparse *); +mod2sparse *mod2sparse_read (FILE *); + +mod2entry *mod2sparse_find (mod2sparse *, int, int); +mod2entry *mod2sparse_insert (mod2sparse *, int, int); +void mod2sparse_delete (mod2sparse *, mod2entry *); + +void mod2sparse_transpose (mod2sparse *, mod2sparse *); +void mod2sparse_add (mod2sparse *, mod2sparse *, mod2sparse *); +void mod2sparse_multiply (mod2sparse *, mod2sparse *, mod2sparse *); +void mod2sparse_mulvec (mod2sparse *, char *, char *); + +int mod2sparse_equal (mod2sparse *, mod2sparse *); + +int mod2sparse_count_row (mod2sparse *, int); +int mod2sparse_count_col (mod2sparse *, int); + +void mod2sparse_add_row (mod2sparse *, int, mod2sparse *, int); +void mod2sparse_add_col (mod2sparse *, int, mod2sparse *, int); + +int mod2sparse_decomp (mod2sparse *, int, mod2sparse *, mod2sparse *, + int *, int *, mod2sparse_strategy, int, int); + +int mod2sparse_forward_sub (mod2sparse *, int *, char *, char *); +int mod2sparse_backward_sub (mod2sparse *, int *, char *, char *); diff --git a/lib/ldpc/mod2sparse.html b/lib/ldpc/mod2sparse.html new file mode 100755 index 000000000..1681d4a7e --- /dev/null +++ b/lib/ldpc/mod2sparse.html @@ -0,0 +1,719 @@ + + + Sparse Modulo-2 Matrix Routines + + + + +

Sparse Modulo-2 Matrix Routines

+ +

This module implements operations on matrices in which the elements +are all 0 or 1, with addition and multiplication being done modulo 2. +The matrices are represented by doubly-linked lists of entries +representing the elements in each row and column that are 1s, with +other elements being assumed to be zero. + +

This is an appropriate representation when the matrices are sparse +(ie, 0s are much more frequent that 1s). Matrices in which 0s and 1s +are about equally likely may be better handled with the dense modulo-2 matrix routines. Matrices +can be converted between these two formats using the module-2 matrix conversion routines. + +

All procedures in this module display an error message on standard +error and terminate the program if passed an invalid argument (indicative +of a programming error), or if memory cannot be allocated. Errors from +invalid contents of a file result in an error code being returned to the +caller, with no message being printed by this module. + + +

Representation of sparse matrices

+ +

This module represents a non-zero element of a matrix (which must have +the value 1, since these are modulo-2 matrices) by a node of type +mod2entry, which contains the row and column of the element, +pointers to the next non-zero elements above and below in its column +and to the left and the right in its row, and two double-precision +floating-point numbers called pr and lr, which are +of no significance to this module, but which are used by the routines +for decoding LDPC codes by probability +propagation. + +

The mod2sparse type represents a matrix. It records the +number of rows and columns in the matrix, and contains arrays of +pointers to the mod2entry structures for the first non-zero +element in each row and the first non-zero element in each column. + +

Matrices must be created by the mod2sparse_allocate procedure, which +returns a pointer to a mod2sparse structure. When a matrix +is no longer needed, the space it occupies can be freed with mod2sparse_free. Elements within a matrix, +represented by mod2entry nodes, are allocated as needed, and +if deleted, they will be reused for new elements within the same +matrix. The space they occupy is not reusable for other matrices or +other purposes until the entire matrix is either freed, with mod2sparse_free, or cleared to all zeros, +with mod2sparse_clear, or used as +the result matrix for copying or arithmetic operations. + + +

Header files required: +mod2sparse.h + + + +


+
Dimension Macros
+
+ +
The following macros take a pointer to a mod2sparse structure as their +argument, and return the number of rows or the number of columns in +the matrix pointed to, which will have been fixed when the matrix was +created with mod2sparse_allocate: +
+mod2sparse_rows(m)   /* Returns the number of rows in m */
+
+mod2sparse_cols(m)   /* Returns the number of columns in m */
+
+ + + +


+
Traversal Macros
+
+ +
The following macros are used to move around a sparse matrix by +following the pointers from one non-zero element to the next or +previous non-zero element in the same row or column. If such a +movement takes one beyond the last or before first entry in a row or +column, or if one tries to find the first or last non-zero entry in a +row or column that has no non-zero entries, the entry returned will be +a special one that can be identified using the +mod2sparse_at_end macro. If one is already at this special +entry, moving further wraps one around to the first or last entry. + +

The macros for finding the first or last entry in a row or column +take as their arguments a pointer to the matrix (mod2sparse +*) and a row or column index, starting at zero. The other macros +take as their arguments a pointer to an entry (mod2entry *) +within some matrix. + +

+mod2sparse_first_in_row(m,i) /* Returns the first entry in row i of m */
+mod2sparse_first_in_col(m,j) /* Returns the first entry in column j of m */
+
+mod2sparse_last_in_row(m,i)  /* Returns the last entry in row i of m */
+mod2sparse_last_in_col(m,j)  /* Returns the last entry in column j of m */
+
+mod2sparse_next_in_row(e)    /* Returns the entry after e in its row */
+mod2sparse_next_in_col(e)    /* Returns the entry after e in its column */
+
+mod2sparse_prev_in_row(e)    /* Returns the entry before e in its row */
+mod2sparse_prev_in_col(e)    /* Returns the entry before e in its col */
+
+mod2sparse_row(e)            /* Returns the row index of entry e */
+mod2sparse_col(e)            /* Returns the column index of entry e */
+
+mod2sparse_at_end(e)         /* Returns 1 if e is a special entry obtained 
+                                by moving past the end, returns 0 otherwise */
+
+ + + +


+
Allocating and Freeing Sparse Modulo-2 Matrices
+
+ + +
mod2sparse_allocate: +Allocate space for a sparse module-2 matrix.
+ +
+mod2sparse *mod2sparse_allocate 
+( int n_rows,     /* Number of rows in matrix */
+  int n_cols      /* Number of columns in matrix */
+)
+
+ +Allocates space for a matrix with the given number of rows and +columns, and returns a pointer to it. The matrix will initially +be all zero. + +

If there is not enough memory available, a message is displayed on +standard error and the program is terminated. The matrix should be +freed with mod2sparse_free once it is no +longer in use. + +


mod2sparse_free: +Free the space occupied by a sparse module-2 matrix. + +
+void mod2sparse_free 
+( mod2sparse *m   /* Pointer to matrix to free */
+)
+
+ +Frees the space occupied by the matrix for re-use. The pointer passed +should not be used afterward. Note that space for the individual matrix +elements (but not the matrix as a whole) is also freed when mod2sparse_clear is called, or the matrix +is used as the destination for other operations. + + + +


+
Copying and Clearing Sparse Modulo-2 Matrices
+
+ +
mod2sparse_clear: +Set all elements of a matrix to zero.
+ +
+void mod2sparse_clear
+( mod2sparse *m   /* Pointer to matrix to clear */
+)
+
+ +Sets all of the elements of the matrix passed to 0. The space occupied +by the previous non-zero elements is freed for use in other matrices, or +other purposes. The matrix itself is not freed, however. To do that, +use mod2sparse_free. + + +


mod2sparse_copy: +Copy the contents of one matrix to another. + +
+void mod2sparse_copy
+( mod2sparse *m   /* Pointer to matrix to copy from */
+  mod2sparse *r   /* Pointer to matrix to receive data */
+)
+
+ +Copies the contents of the first matrix passed, m, to the +second matrix passed, r, which must already have been +allocated, and must have at least as many rows and columns as the +first. If r is larger than m, its elements that have +row or column indexes greater than the dimension of m are set +to zeros. + +

The space occupied by the previous non-zero entries of r is +freed for general use (which may include being reused immediately for +the copies of the entries in m). + + +


mod2sparse_copyrows: +Copy selected rows from one matrix to another. + +
+void mod2sparse_copyrows
+( mod2sparse *m,  /* Pointer to matrix to copy rows from */
+  mod2sparse *r,  /* Pointer to matrix in which to store data */
+  int *rows       /* Indexes of rows, numbered from 0 */
+)
+
+ +Copies selected rows of the first matrix, m, to the second +matrix, r, which must already have been allocated, and which +must have at least as many columns as m. The indexes of the +rows to copy are given in order as an array of length the same as +the number of rows in r; duplicates are allowed. Row +indexes start at 0. These rows are copied to r, with the +row indexed by the first entry in rows going to the +first row of r, and so forth. If r has more columns than +m, the extra entries in each row are set to zeros. + +

The space occupied by the previous non-zero entries of r is +freed for general use (which may include being reused immediately for +the copies of the entries in m). + + +


mod2sparse_copycols: +Copy selected columns from one matrix to another. + +
+void mod2sparse_copycols
+( mod2sparse *m,  /* Pointer to matrix to copy columns from */
+  mod2sparse *r,  /* Pointer to matrix in which to store data */
+  int *cols       /* Indexes of columns, numbered from 0 */
+)
+
+ +Copies selected columns of the first matrix, m, to the second +matrix, r, which must already have been allocated, and which +must have at least as many rows as m. The indexes of the +columns to copy are given in order as an array of length the same as +the number of columns in r; duplicates are allowed. Column +indexes start at 0. These columns are copied to r, with the +column indexed by the first entry in cols going to the +first column of r, and so forth. If r has more rows than +m, the extra entries in each column are set to zeros. + +

The space occupied by the previous non-zero entries of r is +freed for general use (which may include being reused immediately for +the copies of the entries in m). + + + +


+
Input and Output of Sparse Modulo-2 Matrices
+
+ +
mod2sparse_print: +Print a sparse modulo-2 matrix in human-readable form.
+ +
+void mod2sparse_print
+( FILE *f,        /* File to print to */
+  mod2sparse *m   /* Pointer to matrix to print */
+)
+
+ +The matrix is printed on standard output with one line of output per row, +of the form +
+row: col col col ...
+
+where row is the index of the row, and the col entries are +the indexes of columns that are non-zero in that row. Row and column +indexes start at zero. Rows with no entries are printed with no column +indexes after the colon. The number of columns is not indicated in the output. + +


mod2sparse_write: +Write a sparse modulo-2 matrix to a file in machine-readable format. + +
+int mod2sparse_write
+( FILE *f,        /* File to write data to */
+  mod2sparse *m   /* Pointer to matrix write out */
+)
+
+ +Writes a machine-readable representation the sparse matrix m to +the file f. The file should have been opened in binary mode +(with a "b" in the mode passed to fopen). The contents written will +not be text, and will not be human-readable. Other binary data may +precede or follow the data for the matrix written. + +

The data written to the file starts with the number of rows and the +number of columns. Following this are negative integers giving row +indexes (starting at 1), which apply until the next row index, and +positive integers giving column indexes (starting at 1) for a non-zero +entry in the matrix. The data should be readable by mod2sparse_read even on a machine with a +different byte-ordering. + +

The value returned by mod2sparse_write is one if the +operation was successful, zero if an error of some sort occurred. + +


mod2sparse_read: +Read a sparse modulo-2 matrix from a file. + +
+mod2sparse *mod2sparse_read
+( FILE *f,        /* File to read data from */
+)
+
+ +Reads a sparse modulo-2 matrix from the file f. This file +should have been opened in binary mode (with a "b" in the mode passed +to fopen). The contents of the file at the point when +mod2sparse_read is called should have been written by mod2sparse_write. Other binary data may +precede or follow this data. + +

The value returned is a pointer to the matrix read, for which space +will have been allocated by mod2sparse_read, or zero if an +error occurred (either an error reading the file, or data not in the +right format). + + + +


+
Elementary Operations on Sparse Modulo-2 Matrices
+
+ +
mod2sparse_find: +Look for an entry at a given row and column.
+ +
+mod2entry *mod2sparse_find
+( mod2sparse *m,  /* Matrix in which to look for entry */
+  int row,        /* Row index (from 0) */
+  int col         /* Column index (from 0) */
+)
+
+ +Looks for an entry at the given row and column in the matrix m, +representing a non-zero element (ie, one with value 1). Returns a +pointer to this entry if it exists, or zero (a null pointer) if it +does not exist (ie, if that element of the matrix has value 0). + +

The search strategy is to first look at the end of the row and the +end of the column. The entry might be found at one of these two +places, or it might be determinable from these end entries that no +entry exists at the given row and column. Otherwise, searches are +done from the start of the row and the start of the column, in +parallel, until an entry with the given row and column are found, or +until it can be determined that such an entry does not exist. +Searching in parallel ensures that the operation will be fast if +either the row is sparse or the column is sparse. + +


mod2sparse_insert: +Insert an entry at a given row and column. + +
+mod2entry *mod2sparse_insert
+( mod2sparse *m,  /* Matrix in which to insert an entry */
+  int row,        /* Row index (from 0) */
+  int col         /* Column index (from 0) */
+)
+
+ +Adds a new entry (representing an element with value 1) at the given +row and column position in the matrix m. If such an entry +already exists, nothing is done (this is not considered to be an +error). The new (or existing) entry is returned as the value of +this procedure. + +

The search strategy is to first look at the end of the row for an +existing entry or for the place where the new entry belongs. If this +fails, the row is searched from the beginning. If an existing entry +is found, it is returned. Otherwise, a new entry is created, it is +inserted in its correct place in the row, and it is inserted in its +correct place in its column, once again by first looking at the end, +and then if required searching from the beginning. + +

The effect of this strategy is that a sparse matrix can be efficiently +created by either adding entries in increasing order by row and column or in +decreasing order by row and column. + +


mod2sparse_delete: +Delete an entry from a sparse modulo-2 matrix. + +
+void mod2sparse_delete
+( mod2sparse *m,  /* Matrix in which to delete an entry */
+  mod2entry *e    /* Entry to delete - MUST be in m */
+)
+
+ +Deletes the entry e from the sparse matrix m, which +effectively sets to zero the element of the matrix that this entry +corresponded to. The entry is freed for future use in the same +matrix, but not (immediately, at least) for use in other matrices, or +generally. The pointer to this entry should not be used again once +it is deleted. + +

The time required for this operation does not depend on how many +entries are currently in the matrix. + +

Warning: It is an error if e is not an entry of +m. This error is not currently diagnosed, but doing this may +cause serious problems, as it may lead later to entries for m +being erroneously freed when the matrix to which e properly +belongs is freed. + + +


+
Sparse Modulo-2 Matrix Arithmetic and Comparison
+
+ +
mod2sparse_transpose: +Compute the transpose of a sparse modulo-2 matrix.
+ +
+void mod2sparse_transpose
+( mod2sparse *m,  /* Matrix to compute transpose of */
+  mod2sparse *r   /* Result of transpose operation */
+)
+
+ +Stores the transpose of its first argument, m, in the matrix +pointed to by its second argument, r, which must already have +been allocated, and which must have as many rows as m has +columns, and as many columns as m has rows. The two matrices +m and r must not be the same (ie, the two pointers +passed must be different). + +

The space occupied by the previous non-zero entries of r is +freed for general use. + +


mod2sparse_add: +Add two sparse modulo-2 matrices. + +
+void mod2sparse_add
+( mod2sparse *m1, /* Left operand of add */
+  mod2sparse *m2, /* Right operand of add */
+  mod2sparse *r   /* Place to store result of add */
+)
+
+ +Adds matrices m1 and m2, storing the result in the +matrix pointed to by r. All three matrices must have the same +numbers of rows and columns. It is permissible for r to be the +same as m1 and/or m2. Neither of the first two matrices is +changed by this procedure (unless they are the same as r). + +

The space occupied by the previous non-zero entries of r is +freed for general use. + + +


mod2sparse_multiply: +Multiply two sparse modulo-2 matrices. + +
+void mod2sparse_multiply 
+( mod2sparse *m1, /* Left operand of multiply */
+  mod2sparse *m2, /* Right operand of multiply */
+  mod2sparse *r   /* Place to store result of multiply */
+)
+
+ +Does a matrix multiplication of m1 by m2, and stores the +result in the matrix pointed to by r. The matrices must have +compatible numbers of rows and columns. Neither of the first two +matrices is changed by this procedure. The result matrix, r, +must not be the same as either m1 or m2. + +

The space occupied by the previous non-zero entries of r is +freed for general use. + +


mod2sparse_mulvec: +Multiply a vector by a sparse modulo-2 matrix. + +
+void mod2sparse_mulvec
+( mod2sparse *m,  /* Pointer to matrix to multiply by, M rows, N columns */
+  char *u,        /* Pointer to unpacked vector to multiply, N long */
+  char *v         /* Pointer to unpacked result vector, M long */
+)
+
+ +Multiplies the vector u on the left by the sparse modulo-2 +matrix m, storing the result in v. Both u and +v are modulo-2 vectors, but are stored unpacked, with one bit +per char. Any non-zero value in u is equivalent to '1'. +The vectors u and v must not overlap. + +


mod2sparse_equal: +Check whether two sparse modulo-2 matrices are equal. + +
+int mod2sparse_equal
+( mod2sparse *m1, /* Pointers to the two matrices */
+  mod2sparse *m2  /*   to compare                 */
+)
+
+ +Returns one if every element of m1 is equal to the +corresponding element of m2, and otherwise returns zero. The +two matrices must have the same number of rows and the same number of +columns. + + + +


+
Row/Column Operations on Sparse Modulo-2 Matrices +
+ +
mod2sparse_count_row: +Count the number of 1s in a row of a sparse matrix.
+ +
+int mod2sparse_count_row
+( mod2sparse *m,  /* Pointer to matrix */
+  int row         /* Index of row to count (from 0) */
+)
+
+ +Returns the number of 1s in the given row of the matrix, by counting +the number of entries in that row. + +


mod2sparse_count_col: +Count the number of 1s in a column of a sparse matrix. + +
+int mod2sparse_count_col
+( mod2sparse *m,  /* Pointer to matrix */
+  int col         /* Index of column to count (from 0) */
+)
+
+ +Returns the number of 1s in the given column of the matrix, by counting +the number of entries in that column. + +


mod2sparse_add_row: +Add a row to a row of a sparse matrix. + +
+void mod2sparse_add_row
+( mod2sparse *m1, /* Matrix containing row to add to */
+  int row1,       /* Index in this matrix of row to add to */
+  mod2sparse *m2, /* Matrix containing row to add from */
+  int row2        /* Index in this matrix of row to add from */
+)
+
+ +Modifies the row with index row1 in the matrix m1 by +adding to that row the row with index row2 in the matrix +m2. The matrix m1 must have at least as many columns as +m2. This operation is performed by inserting entries into the +row of m1 at positions where they exist in the row of m2 +but not in the row of m1, and deleting entries in the row of +m1 that exist in the same position in the row of m2. +The matrix m2 is not modified. + +


mod2sparse_add_col: +Add a column to a column of a sparse matrix. + +
+void mod2sparse_add_col
+( mod2sparse *m1, /* Matrix containing column to add to */
+  int col1,       /* Index in this matrix of col to add to */
+  mod2sparse *m2, /* Matrix containing column to add from */
+  int col2        /* Index in this matrix of column to add from */
+)
+
+ +Modifies the column with index col1 in the matrix m1 by +adding to that column the column with index col2 in the matrix +m2. The matrix m1 must have at least as many rows as +m2. This operation is performed by inserting entries into the +column of m1 at positions where they exist in the column of +m2 but not in the column of m1, and deleting entries in +the column of m1 that exist in the same position in the column +of m2. The matrix m2 is not modified. + + + +


+
LU Decomposition of Sparse Modulo-2 Matrices
+
+ +
mod2sparse_decomp: +Find an LU decomposition of a sparse modulo-2 (sub-)matrix.
+ +
+int mod2sparse_decomp
+( mod2sparse *A,      /* Matrix to find LU decomposition within, M by N */
+  int K,              /* Size of sub-matrix to find LU decomposition of */
+  mod2sparse *L,      /* Matrix in which L is stored, M by K */
+  mod2sparse *U,      /* Matrix in which U is stored, K by N */
+  int *rows,          /* Array where row indexes are stored, M long */
+  int *cols,          /* Array where column indexes are stored, N long */
+  mod2sparse_strategy strategy, /* Strategy to follow in picking rows/columns */
+  int abandon_number, /* Number of columns to abandon at some point */
+  int abandon_when    /* When to abandon these columns */
+)
+
+ +

Takes as input a matrix, A, having M rows and +N columns, and an integer K. Finds an LU decomposition +of a K by K sub-matrix of A. The decomposition +is stored in the matrix L, with M rows and K +columns, and the matrix U, with K rows and N +columns. The product of L and U will be equal to the +K by K submatrix of A obtained by taking only +rows and columns that are given in the first K elements of the +rows and cols arrays, which are set by this procedure, +with this sub-matrix distributed over the original M rows and +N columns. Furthermore, the ordering of the row and column +indexes in these arrays will be set so that if the rows of L +and the columns of U were rearranged in this order, L +would be lower triangular, with zeros in rows past row K, and +U would be upper triangular, with zeros in columns past column +K. The rows array is M long, and the cols +array is N long. The elements in both arrays after the first +K contain the indexes of the rows and columns not selected to +be part of the sub-matrix of A, in arbitrary order. + +

The rows and columns of A are selected in order to try to +make the LU decomposition as sparse as possible, using the strategy +identified by the strategy, abandon_number, and +abandon_when parameters. The possible strategies are +Mod2sparse_first, Mod2sparse_mincol, and +Mod2sparse_minprod. If abandon_number is greater than +zero, it is possible that the matrix will appear to have linearly +dependent rows when it actually does not. See the discussion of sparse LU decomposition +methods for details about these strategies. + +

If A is not of rank K or more, L will contain +some number less than K of non-zero columns, and U will +contain an equal number of non-zero rows. The entries in the +rows and cols arrays for the extra zero rows or columns +will be arbitrary (but valid). The number of extra zero columns is +returned as the value of this procedure (hence a return value of zero +indicates that a K by K sub-matrix of full rank was +found). + +

The matrix A is not altered. The previous contents of +L and U are cleared. + +


mod2sparse_forward_sub: +Solve a lower-triangular system by forward substitution. + +
+int mod2sparse_forward_sub
+( mod2sparse *L,  /* Matrix that is lower triangular after reordering */
+  int *rows,      /* Array of indexes (from 0) of rows for new order */
+  char *x,        /* Vector on right of equation, also reordered */
+  char *y         /* Place to store solution */
+)
+
+ +

Solves the system of equations Ly=x for y by +forward substitution, based on L being lower triangular after +its rows are reordered according to the given index array. The +vectors x and y are stored unpacked, one bit per +character. If L is M by K, then x should +be M long, but only the K bits indexed by rows +are looked at. The solution vector, y, must be K long. +Only K rows of L are used, as also determined by the +K indexes in the rows argument. If rows is null, +the first K rows of L and the first K elements of +x are used. + +

If the matrix L does not have 1s on its diagonal (after row +rearrangement), there may be no solution, depending on what x +is. If no solution exists, this procedure returns zero, otherwise it +returns one. Any arbitrary bits in the solution are set to zero. + +


mod2sparse_backward_sub: +Solve an upper-triangular system by backward substitution. + +
+int mod2sparse_backward_sub
+( mod2sparse *U,  /* Matrix that is upper triangular after reordering */
+  int *cols,      /* Array of indexes (from 0) of columns for new order */
+  char *y,        /* Vector on right of equation */
+  char *z         /* Place to store solution, also reordered */
+)
+
+ +

Solves Uz=y for z by backward substitution, +based on U being upper triangular after its columns are +reordered according to the given index array. The vectors y +and z are stored unpacked, one bit per character. If U +is K by N, then the solution vector, z, should be +N long, but only the K bits indexed by cols are +set. The vector y must be K long. Only K columns +of U are used, as also determined by the K indexes in +the cols argument. The other columns of U must be zero +(this is not checked, but is necessary for the method used to work). +If cols is null, the first K columns of U and the +first K elements of z are used. + +

If the matrix U does not have 1s on its diagonal (after +column rearrangement) there may be no solution, depending on what y +is. If no solution exists, this procedure returns zero, otherwise it +returns one. Any arbitrary bits in the solution are set to zero. + +


+ +Back to index for LDPC software + + diff --git a/lib/ldpc/modify.html b/lib/ldpc/modify.html new file mode 100755 index 000000000..209b3ea7e --- /dev/null +++ b/lib/ldpc/modify.html @@ -0,0 +1,125 @@ + + + Notes on Modifying the LDPC Programs + + + + +

Notes on Modifying the LDPC Programs

+ +

Here are a few notes on how to modify the programs to add new types of +channel, new decoding procedures, etc. You should also look at the module documentation. + +

Adding a new type of channel

+ +

Channels are involved in two programs: +transmit and +decode. +Adding another type of memoryless channel should be straightforward. +Adding a channel with memory may involve more work. Here are the +steps needed if no major reorganizations are required: +

    +
  1. Decide on a syntax for specifying the new channel type and its + parameters, and on an internal name for the channel type. Add + the internal name as a possibility in the enumerated channel_type + declared in channel.h. You + may also need to declare new global variables to store parameters of + the channel in channel.h and + channel.c. +
  2. Modify the channel_parse and + channel_usage procedures in + channel.c to + parse the specification of the new channel and display an appropriate + usage message. +
  3. Decide on how the new channel's output is represented in a file + (eg, for an erasure channel, what the symbol for an erasure is), and + update transmit.c to write the + new channel's output for each transmitted bit, after randomly generating + any noise (see + the documentation on random number generation). +
  4. Modify decode.c in three places to + accommodate the new channel. The three sections of code to modify + allocate space for data from the channel, read data from the channel, + and set likelihood ratios based on the data read. The setting of + likelihood ratios is based on the assumption that the channel is + memoryless (ie, data received for different bits is independent). + Adding a channel with memory would require changing this assumption, + which would involve modifications to the decoding procedures too. +
  5. Document the new channel type in channel.html + and decoding.html. +
+ +

Adding a new decoding procedure

+ +A new decoding method can be implemented as follows: +
    +
  1. Decide on a syntax for specifying the method and its parameters, + using the trailing arguments to the + decode program. Pick an + internal name for the method, and add it as a possibility in the + enumerated decoding_method type in + dec.h. You may also need to declare + new variables for the method's parameters in + dec.h and dec.c. +
  2. Modify the argument parsing code in + decode.c + to handle specifications of the new method, and change the usage + procedure to display the syntax for specifying the new method. +
  3. Write a setup procedure for your decoding method, putting it in + dec.c, with a declaration in + dec.h. At a minimum, this procedure + should print headers for the table of detailed decoding information + when the -T option was specified. +
  4. Write a decode procedure implementing your method, putting it in + dec.c, with a declaration in + dec.h. This procedure should output + detailed trace information when the -T option was specified. +
  5. Modify decode.c in the appropriate + places to call the setup procedure and the decode procedure you wrote. +
  6. Document the new decoding method in + decoding.html and + decode-detail.html. +
+ +

Adding a new method of making a low-density parity-check matrix

+ +

The make-ldpc program can be +changed to add a new method for generating a LDPC code by modifying +make-ldpc.c. A radically different +method might better be implemented by writing a new program of similar +structure. + + +

Adding a new encoding method

+ +

A new heuristic for finding a sparse LU decomposition can be +implemented by changing make-gen.c to allow +the new heuristic to be specified on the command line, changing the mod2sparse_decomp procedure +in mod2sparse.c to implement the +heuristic, and documenting the new heuristic in encoding.html, sparse-LU.html, and mod2sparse.html. + +

To implement a completely new encoding method, you will first need +to define a new file format for a generator matrix, modify make-gen.c appropriately to write out this new +format, and modify the read_gen procedure in rcode.c to read this format. You will +need to implement the new method in a procedure in enc.c, and modify encode.c so +that it will call this new procedure when the new method is used. The +enum_decode procedure in dec.c will also +need to be modified so it can call the new encoding method. Finally, +you should document the new method in encoding.html + +

+ +


+ +Back to index for LDPC software + + diff --git a/lib/ldpc/modules.html b/lib/ldpc/modules.html new file mode 100755 index 000000000..93228ffe3 --- /dev/null +++ b/lib/ldpc/modules.html @@ -0,0 +1,89 @@ + + + Modules Used in LDPC Programs + + + + +

Modules Used in LDPC Programs

+ +You may need to familiarize yourself with the modules documented here +in order to modify the LDPC programs. +These modules may also be useful for other purposes. + +

Click on the title of a module below for general information, or on +specific routines for detailed documentation. + +

Dense modulo-2 matrix routines: +

+Dimension macros:    mod2dense_rows  mod2dense_cols
+
+Allocation:          Copy/Clear:         Input/Output:    Elementary ops:
+
+mod2dense_allocate   mod2dense_clear     mod2dense_print  mod2dense_get
+mod2dense_free       mod2dense_copy      mod2dense_write  mod2dense_set
+                     mod2dense_copyrows  mod2dense_read   mod2dense_flip
+                     mod2dense_copycols
+
+Matrix arithmetic:   Matrix inversion:
+
+mod2dense_transpose  mod2dense_invert
+mod2dense_add        mod2dense_forcibly_invert
+mod2dense_multiply   mod2dense_invert_selected
+mod2dense_equal
+
+ +

Sparse modulo-2 matrix routines: +

+Dimension macros:    mod2sparse_rows  mod2sparse_cols
+
+Traversal macros:    mod2sparse_first_in_row  mod2sparse_next_in_row  ...
+
+Allocation:          Copy/Clear:         Input/Output:     Elementary ops:
+
+mod2sparse_allocate  mod2sparse_clear    mod2sparse_print  mod2sparse_find
+mod2sparse_free      mod2sparse_copy     mod2sparse_write  mod2sparse_insert
+                     mod2sparse_copyrows mod2sparse_read   mod2sparse_delete
+                     mod2sparse_copycols
+
+Matrix arithmetic:   Row/Column ops:       LU decomposition:
+
+mod2sparse_transpose mod2sparse_count_row  mod2sparse_decomp
+mod2sparse_add       mod2sparse_count_col  mod2sparse_forward_sub
+mod2sparse_multiply  mod2sparse_add_row    mod2sparse_backward_sub
+mod2sparse_mulvec    mod2sparse_add_col
+mod2sparse_equal
+
+Discussion of sparse LU decomposition methods. +
+ +

Modulo-2 matrix sparse/dense conversion: +

+mod2sparse_to_dense
+mod2dense_to_sparse
+
+ +

Random variate generation routines: +

+Set/Get state:   Uniform:       Discrete:         Continuous:
+
+rand_seed        rand_uniform   rand_int          rand_gaussian
+rand_get_state   rand_uniopen   rand_pickd        rand_logistic
+rand_use_state                  rand_pickf        rand_cauchy
+                                rand_poisson      rand_gamma
+                                rand_permutation  rand_exp
+                                                  rand_beta
+
+ +

Each of the modules above has a test program, called +module-test. These programs are compiled by the command +

+make tests 
+
+See the source files for these test programs for further information. + +
+ +Back to index for LDPC software + + diff --git a/lib/ldpc/open.c b/lib/ldpc/open.c new file mode 100755 index 000000000..8e850681d --- /dev/null +++ b/lib/ldpc/open.c @@ -0,0 +1,50 @@ +/* OPEN.C - Routine for opening file that might be stdin/stdout. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include +#include + +#include "open.h" + + +/* OPEN A FILE THAT MIGHT BE STANDARD INPUT OR OUTPUT. If the file name + given is "-", this procedure just returns stdin or stdout, depending on + whether the mode is for reading or writing. Otherwise, fopen is called. +*/ + +FILE *open_file_std +( char *fname, /* Name of file to open, or "-" for stdin/stdout */ + char *mode /* Mode for opening: eg, "r" or "w" */ +) +{ + if (strcmp(fname,"-")==0) + { switch (mode[0]) + { case 'r': + { return stdin; + } + case 'w': + { return stdout; + } + default: + { fprintf(stderr,"Bad mode passed to open_file_std: %s\n",mode); + exit(1); + } + } + } + else + { return fopen(fname,mode); + } +} diff --git a/lib/ldpc/open.h b/lib/ldpc/open.h new file mode 100755 index 000000000..2cb88b267 --- /dev/null +++ b/lib/ldpc/open.h @@ -0,0 +1,16 @@ +/* OPEN.H - Interface to routine for opening file that might be stdin/stdout. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +FILE *open_file_std (char *, char *); diff --git a/lib/ldpc/pchk-to-alist.c b/lib/ldpc/pchk-to-alist.c new file mode 100755 index 000000000..9670105ae --- /dev/null +++ b/lib/ldpc/pchk-to-alist.c @@ -0,0 +1,166 @@ +/* ALIST-TO-PCHK.C - Convert a parity check matrix to alist format. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include +#include +#include + +#include "alloc.h" +#include "open.h" +#include "mod2sparse.h" +#include "mod2dense.h" +#include "mod2convert.h" +#include "rcode.h" + + +void usage(void); + + +/* MAIN PROGRAM. */ + +int main +( int argc, + char **argv +) +{ + char *alist_file, *pchk_file; + FILE *af, *pf; + int mxrw, mxcw; + int *rw, *cw; + int i, j, k; + mod2entry *e; + int trans; + int nozeros; + int last; + + trans = 0; + nozeros = 0; + + for (;;) + { + if (argc>1 && strcmp(argv[1],"-t")==0) + { trans = 1; + argc -= 1; + argv += 1; + } + else if (argc>1 && strcmp(argv[1],"-z")==0) + { nozeros = 1; + argc -= 1; + argv += 1; + } + else + { break; + } + } + + if (argc!=3) + { usage(); + } + + pchk_file = argv[1]; + alist_file = argv[2]; + + read_pchk(pchk_file); + + if (trans) + { mod2sparse *HT; + HT = H; + H = mod2sparse_allocate(N,M); + mod2sparse_transpose(HT,H); + M = mod2sparse_rows(H); + N = mod2sparse_cols(H); + } + + af = open_file_std(alist_file,"wb"); + + if (af==NULL) + { fprintf(stderr,"Can't create alist file: %s\n",alist_file); + exit(1); + } + + fprintf(af,"%d %d\n",M,N); + + rw = (int *) chk_alloc (M, sizeof *rw); + mxrw = 0; + + for (i = 0; imxrw) + { mxrw = rw[i]; + } + } + + cw = (int *) chk_alloc (N, sizeof *cw); + mxcw = 0; + + for (j = 0; jmxcw) + { mxcw = cw[j]; + } + } + + fprintf(af,"%d %d\n",mxrw,mxcw); + + for (i = 0; i + + Creating a Parity Check Matrix + + + + +

Creating a Parity Check Matrix

+ +

This software deals only with linear block codes for binary (ie, +modulo-2, GF(2)) vectors. The set of valid codewords for a linear +code can be specified by giving a parity check matrix, +H, with M rows and N columns. The valid +codewords are the vectors, x, of length N, for which +Hx=0, where all arithmetic is done modulo-2. Each row +of H represents a parity check on a subset of the bits in +x; all these parity checks must be satisfied for x to be +a codeword. Note that the parity check matrix for a given code (ie, +for a given set of valid codewords) is not unique, even after +eliminating rows of H that are redundant because they are +linear combinations of other rows. + +

This software stores parity check matrices in files in a sparse +format. These parity-check files are not human-readable +(except by using the print-pchk +program). However, they are readable on a machine with a +different architecture than they were written on. + +

Some LDPC software by David MacKay and others uses the +alist +format for parity check matrices. Two programs for converting +between this format and the format for sparse parity check matrices +used by this software are provided. + + +

Methods for constructing LDPC codes

+ +

This software is primarily intended for experimentation with Low +Density Parity Check (LDPC) codes. These codes can be constructed by +various methods, which generally involve some random selection of +where to put 1s in a parity check matrix. Any such method for +constructing LDPC codes will have the property that it produces parity +check matrices in which the number of 1s in a column is approximately +the same (perhaps on average) for any size parity check matrix. For a +given code rate, these matrices therefore become increasingly sparse +as the length of a codeword, and hence the number of parity checks, +increases. + +

Many methods for constructing LDPC matrices are described in the +references. Two simple methods are currently +implemented by this software, both of which operate according to the +following scheme: +

    +
  1. Create a preliminary parity check matrix by one of the methods. +
  2. Add 1s to the parity check matrix in order to avoid rows that have no + 1s in them, and hence are redundant, or which have only one 1 in them, + in which case the corresponding codeword bits will always be zero. + The places within such a row to add these 1s are selected randomly. +
  3. If the preliminary parity check matrix constructed in step (1) had + an even number of 1s in each column, add further 1s to avoid the problem + that this will cause the rows to add to zero, and hence at least + one check will be redundant. Up to two 1s are added (since it is also + undesirable for the sum of the rows to have only one 1 in it), at + positions selected randomly from the entire matrix. However, the + number of 1s to add in this step is reduced by the number already added + in step (2). (Note that although redundant checks are not disastrous, + they are better avoided; see the discussion of linear + dependence in parity check matrices.) +
  4. If requested, try to eliminate + situations where a pair of columns both have 1s in a particular pair of + rows, which correspond to cycles of length four in the factor graph of + the parity check matrix. When such a situation is detected, one of the + 1s involved is moved randomly within its column. This continues until + no such situations remain, or until 10 passes over all columns have + failed to eliminate all such situations. +
+ +

The evencol method is the simplest way of performing step +(1) of the above procedure. For each column of the parity check +matrix, independently, it places a specified number of 1s in positions +selected uniformly at random, with the only constraint being that +these 1s be in distinct rows. Note that despite the name, the columns +do not have to have the same number of 1s - a distribution over +several values for the number of 1s in a column can be specified +instead. Such codes with different-weight columns are sometimes +better than codes in which every column has the same weight. + +

The evenboth method also puts a specified number of 1s in +each column, but it tries as well to keep the numbers of 1s in the +rows approximately the same. Initially, it creates indicators for all +the 1s that will be required, and assigns these 1s to rows as evenly +as it can, favouring earlier rows if an exactly even split is not +possible. It then assigns 1s to successive columns by selecting +randomly, without replacement, from this initial supply of 1s, subject +only to the constraint that the 1s assigned to a column must be in +distinct rows. If at some point it is impossible to put the required +number of 1s in a column by picking from the 1s remaining, a 1 is set +in that column without reference to other columns, creating a possible +unevenness. + +

Note that regardless of how evenly 1s are distributed in the +preliminary parity check matrix created in step (1), steps (2) and (3) +can make the numbers of 1s in the both rows and columns be uneven, and +step (4), if done, can make the numbers of 1s in rows be uneven. + + +


make-pchk: Make a parity check +matrix by explicit specification. + +
+make-pchk pchk-file n-checks n-bits row:col ...
+
+ +

Creates a file named pchk-file in +which it stores a parity check matrix with n-checks +rows and n-bits columns. This parity check matrix +consists of all 0s except for 1s at the row:col +positions listed. Rows and columns are numbered starting at zero. +This program is intended primarily for testing and demonstration +purposes. + +

Example: The well-known Hamming code with codewords of +length N=7 and with M=3 parity checks can be can be +created as follows: +

    +
  • make-pchk ham7.pchk 3 7 0:0 0:3 0:4 0:5 1:1 1:3 1:4 1:6 2:2 2:4 2:5 2:6 +
+ + +


alist-to-pchk: Convert a parity +check matrix from alist format to the sparse matrix format used by +this software. + +
+alist-to-pchk [ -t ] alist-file pchk-file
+
+ +

Converts a parity check matrix in +alist +format stored in the file named alist-file to +the sparse matrix format used by this software, storing it in the +file named pchk-file. + +

If the -t option is given, the transpose of the parity check +matrix in alist-file is stored in the +pchk-file. + +

Any zeros indexes in the alist file are ignored, so that alist files +with zero padding (as required in the specification) are accepted, +but files without this zero padding are also accepted. Newlines +are ignored by alist-to-pchk, so no error is reported if +the set of indexes in a row or column description are not those +on a single line. + + +


pchk-to-alist: Convert a parity +check matrix to alist format. + +
+pchk-to-alist [ -t ] [ -z ] pchk-file alist-file
+
+ +

Converts a parity check matrix stored in the sparse matrix format +used by this software, in the file named pchk-file, to +the alist +format, storing it in the file named alist-file. + +

If the -t option is given, the transpose of the parity check +matrix is converted to alist format. + +

If the number of 1s is not +the same for each row or each column, the alist format specification +says that the list of indexes of 1s for each row or column should +be padded with zeros to the maximum number of indexes. By default, +pchk-to-alist does this, but output of these 0s can be +suppressed by specifying the -z option. (The alist-to-pchk +program will accept alist files produced with or without the -z +option.) + + +


print-pchk: Print a parity check matrix. + +
+print-pchk [ -d ] [ -t ] pchk-file
+
+ +

Prints a human-readable representation of the parity check matrix stored +in pchk-file. +The -d option causes the matrix to be printed in a dense +format, even though parity check matrices are always stored in the +file in a sparse format. If the -t option is present, what is +printed is the transpose of the parity check matrix. + +

The sparse display format consists of one line for every row of the +matrix, consisting of the row number, a colon, and the column numbers +at which 1s are located (possibly none). Row and columns numbers +start at zero. No attempt is made to wrap long lines. + +

The dense display is the obvious array of 0s and 1s. Long lines +are not wrapped. + +

Example: The parity check matrix for the Hamming code created +by the example for make-pchk would print +as follows: +

    +
  • print-pchk ham7.pchk + +Parity check matrix in ham7.pchk (sparse format): + +0: 0 3 4 5 +1: 1 3 4 6 +2: 2 4 5 6 + +
  • print-pchk -d ham7.pchk + +Parity check matrix in ham7.pchk (dense format): + + 1 0 0 1 1 1 0 + 0 1 0 1 1 0 1 + 0 0 1 0 1 1 1 +
+ + +


make-ldpc: Make a low density parity +check matrix, by random generation. + +
+make-ldpc pchk-file n-checks n-bits seed method
+
+
+where method is one of the following: +
+evencol checks-per-col [ no4cycle ]
+
+evencol checks-distribution [ no4cycle ]
+
+evenboth checks-per-col [ no4cycle ]
+
+evenboth checks-distribution [ no4cycle ]
+
+
+
+ +

Creates a Low Density Parity Check matrix with +n-checks rows and n-bits columns. The +parity check matrix will be generated pseudo-randomly by the indicated +method, using a pseudo-random number stream determined by seed. +The actual random number seed used is 10 times seed plus 1, +so as to avoid using the same stream as any of the other programs. + +

Two methods are currently available for creating the LDPC matrix, +specified by evencol or evenboth. Both methods +produce a matrix in which the number of 1s in each column is +approximately checks-per-col, or varies from column +to column according the the checks-distribution. +The evenboth method also tries to make the number of checks per row be +approximately uniform; if this is not achieved, a message saying that +how many bits were placed unevenly is displayed on standard error. + +

For both methods, the no4cycle option will cause cycles of +length four in the factor graph representation of the code to be +eliminated (if possible). A message is displayed on standard error if +this is not achieved. + +

A checks-distribution has the form +

+propxcount/propxcount/...
+
+Here, prop is a proportion of columns that have the +associated count. The proportions need not sum to one, +since they will be automatically normalized. For example, 0.3x4/0.2x5 +specifies that 60% of the columns will contain four 1s and 40% will +contain five 1s. + +

See the discussion above for more details +on how these methods construct LDPC matrices. + +

Example 1: The make-ldpc command below creates +a 20 by 40 low density parity check matrix with three 1s per +column and six 1s per row, using random seed 1. The matrix +is then printed in sparse format +using print-pchk. +

    +
  • make-ldpc ldpc.pchk 20 40 1 evenboth 3 +
  • print-pchk ldpc.pchk + +Parity check matrix in ldpc.pchk (sparse format): + + 0: 10 14 18 27 38 39 + 1: 2 3 5 11 27 30 + 2: 15 19 20 21 24 26 + 3: 2 4 25 28 32 38 + 4: 7 9 12 22 33 34 + 5: 5 6 21 22 26 32 + 6: 1 4 13 24 25 28 + 7: 1 14 28 29 30 36 + 8: 11 13 22 23 32 37 + 9: 6 8 13 20 31 33 +10: 0 3 24 29 31 38 +11: 7 12 15 16 17 23 +12: 3 16 29 34 35 39 +13: 0 8 10 18 36 37 +14: 6 11 18 20 35 39 +15: 0 7 14 16 25 37 +16: 2 4 9 19 30 31 +17: 5 9 10 17 19 23 +18: 8 15 17 21 26 27 +19: 1 12 33 34 35 36 +
+ +

Example 2: The two make-ldpc commands +below both create a 20 by 40 low density parity check matrix with 30% +of columns with two 1s, 60% of columns with three 1s, and 10% of +columns with seven 1s. The transpose of the parity check matrix +is then printed in sparse format. +

    +
  • make-ldpc ldpc.pchk 20 40 1 evenboth 0.3x2/0.6x3/0.1x7 +
  • make-ldpc ldpc.pchk 20 40 1 evenboth 3x2/6x3/1x7 +
  • print-pchk -t ldpc.pchk + +Transpose of parity check matrix in ldpc.pchk (sparse format): + + 0: 13 16 + 1: 9 18 + 2: 1 10 + 3: 3 15 + 4: 4 14 + 5: 14 17 + 6: 4 5 + 7: 1 8 + 8: 0 4 + 9: 9 14 +10: 5 8 +11: 6 16 +12: 2 12 19 +13: 3 17 18 +14: 2 16 17 +15: 2 11 18 +16: 12 13 19 +17: 7 13 18 +18: 2 5 11 +19: 10 12 14 +20: 1 8 16 +21: 10 18 19 +22: 3 6 17 +23: 7 11 12 +24: 1 2 19 +25: 0 6 7 +26: 5 8 15 +27: 1 4 7 +28: 6 13 19 +29: 3 4 11 +30: 3 8 17 +31: 4 5 9 +32: 0 10 15 +33: 7 11 13 +34: 8 12 19 +35: 0 2 10 +36: 0 5 9 11 15 17 18 +37: 0 1 2 6 7 14 16 +38: 0 1 3 9 12 13 15 +39: 3 6 9 10 14 15 16 +
+ +
+ +Back to index for LDPC software + + + diff --git a/lib/ldpc/print-gen.c b/lib/ldpc/print-gen.c new file mode 100755 index 000000000..53d339e71 --- /dev/null +++ b/lib/ldpc/print-gen.c @@ -0,0 +1,139 @@ +/* PRINT-CODE.C - Print a Low Density Parity Check code's matrices. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include +#include +#include + +#include "rand.h" +#include "alloc.h" +#include "open.h" +#include "mod2sparse.h" +#include "mod2dense.h" +#include "mod2convert.h" +#include "rcode.h" + +void usage(void); + + +/* MAIN PROGRAM. */ + +int main +( int argc, + char **argv +) +{ + char *gen_file; + int dprint; + int i, j; + + dprint = 0; + if (argc>1 && strcmp(argv[1],"-d")==0) + { dprint = 1; + argc -= 1; + argv += 1; + } + + if (!(gen_file = argv[1]) || argv[2]) + { usage(); + } + + read_gen(gen_file,0,1); + + switch (type) + { + case 's': + { + printf("\nGenerator matrix in %s (sparse representation):\n\n",gen_file); + + printf("Column order (message bits at end):\n"); + for (j = 0; j +#include +#include +#include + +#include "rand.h" +#include "alloc.h" +#include "open.h" +#include "mod2sparse.h" +#include "mod2dense.h" +#include "mod2convert.h" +#include "rcode.h" + +void usage(void); + + +/* MAIN PROGRAM. */ + +int main +( int argc, + char **argv +) +{ + mod2dense *D; + mod2sparse *T; + + char *pchk_file; + int dprint, trans; + + dprint = 0; + trans = 0; + + for (;;) + { + if (argc>1 && strcmp(argv[1],"-d")==0) + { dprint = 1; + argc -= 1; + argv += 1; + } + else if (argc>1 && strcmp(argv[1],"-t")==0) + { trans = 1; + argc -= 1; + argv += 1; + } + else + { break; + } + } + + if (!(pchk_file = argv[1]) || argv[2]) + { usage(); + } + + read_pchk(pchk_file); + + if (trans) + { T = mod2sparse_allocate(N,M); + mod2sparse_transpose(H,T); + } + + if (dprint) + { if (trans) + { D = mod2dense_allocate(N,M); + mod2sparse_to_dense(T,D); + printf("\nTranspose of parity check matrix in %s (dense format):\n\n", + pchk_file); + mod2dense_print(stdout,D); + } + else + { D = mod2dense_allocate(M,N); + mod2sparse_to_dense(H,D); + printf("\nParity check matrix in %s (dense format):\n\n",pchk_file); + mod2dense_print(stdout,D); + } + } + else /* sparse */ + { if (trans) + { printf("\nTranspose of parity check matrix in %s (sparse format):\n\n", + pchk_file); + mod2sparse_print(stdout,T); + } + else + { printf("\nParity check matrix in %s (sparse format):\n\n",pchk_file); + mod2sparse_print(stdout,H); + } + } + + printf("\n"); + + return 0; +} + + +/* PRINT USAGE MESSAGE AND EXIT. */ + +void usage(void) +{ fprintf(stderr,"Usage: print-pchk [ -d ] [ -t ] pchk-file\n"); + exit(1); +} diff --git a/lib/ldpc/progs.html b/lib/ldpc/progs.html new file mode 100755 index 000000000..8bb50d35e --- /dev/null +++ b/lib/ldpc/progs.html @@ -0,0 +1,80 @@ + + + Programs for Low Density Parity Check Codes + + + + +

Programs for Low Density Parity Check Codes

+ +Programs are available for creating LDPC codes, encoding messages, +simulating transmission through a channel, and decoding the received +message. There are links here to the general documentation on each of +these operations, and to the detailed documentation on the relevant +programs. + +

The programs names below are followed by the form of arguments they +take; a similar usage message is displayed when a program is run with +no arguments. In these descriptions, things to be entered literally +are in roman font, descriptions of something to be supplied are in +italic. Arguments in square brackets are optional. A vertical bar +separates alternatives. Dots represent indefinite repetition. + +

Many of the arguments are file names, which can be a dash ("-") in +order to specify that standard input or standard output is to be used. +(However, you can't use standard input or output for more than one thing.) + +

Click on a main title below for general information on that aspect +of the software, or on the name of a program for detailed information. + +

Creating a parity check matrix for a code: +

+make-pchk pchk-file n-checks n-bits row:col ...
+
+alist-to-pchk [ -t ] alist-file pchk-file
+
+pchk-to-alist [ -t ] [ -z ] pchk-file alist-file
+
+print-pchk [ -d ] [ -t ] pchk-file
+
+make-ldpc pchk-file n-checks n-bits seed method
+
+ +

Encoding message blocks as codewords: +

+make-gen pchk-file gen-file method
+
+print-gen [ -d ] gen-file 
+
+encode [ -f ] pchk-file gen-file source-file encoded-file
+
+ +

Transmitting bits through a simulated channel: +

+transmit encoded-file|n-zeros received-file seed channel
+
+ +

Decoding received blocks: +

+decode [ -f ] [ -t | -T ] pchk-file received-file decoded-file [ bp-file ] channel method
+
+extract gen-file decoded-file extracted-file
+
+ +

Support programs: +

+rand-src source-file seed n-bits
+
+verify [ -t ] pchk-file decoded-file [ gen-file [ source-file ] ]
+
+ +See also the discussions of linear dependence in +parity check matrices and of sparse LU +decomposition methods, and the examples +of program usage. + +
+ +Back to index for LDPC software + + diff --git a/lib/ldpc/rand-src.c b/lib/ldpc/rand-src.c new file mode 100755 index 000000000..31a2410dc --- /dev/null +++ b/lib/ldpc/rand-src.c @@ -0,0 +1,86 @@ +/* RAND-SRC.C - Generate random message bits. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include +#include + +#include "open.h" +#include "rand.h" + +void usage(void); + + +/* MAIN PROGRAM. */ + +int main +( int argc, + char **argv +) +{ + int seed, bs, nb; + char *file, *n_bits; + char junk; + int i, j; + FILE *f; + + if (!(file = argv[1]) + || !argv[2] || sscanf(argv[2],"%d%c",&seed,&junk)!=1 + || !(n_bits = argv[3]) + || argv[4]) + { usage(); + } + + if (sscanf(n_bits,"%d%c",&nb,&junk)==1) + { if (nb<=0) usage(); + bs = 1; + } + else if (sscanf(n_bits,"%dx%d%c",&bs,&nb,&junk)==2) + { if (nb<=0 || bs<=0) usage(); + } + else + { usage(); + } + + f = open_file_std(file,"w"); + if (f==NULL) + { fprintf(stderr,"Can't create source file: %s\n",file); + exit(1); + } + + rand_seed(10*seed+2); + + for (i = 0; i +#include +#include +#include + +#include "rand.h" + + +#define Max_bins 1000 /* Maximum number of histogram bins */ + +static void usage (void); + + +/* MAIN PROGRAM. */ + +main +( int argc, + char **argv +) +{ + int seed, sample_size, bins, np; + double low, high; + char *generator; + double p1, p2; + + double mean, variance; + double tmean, tvariance; + int undef_mean, undef_variance; + + int count[Max_bins]; + int under, over; + + char **ap; + double x; + int i, n; + + bins = 0; + + if (argc<5) usage(); + + if ((seed = atoi(argv[1]))==0 && strcmp(argv[1],"0")!=0) usage(); + + generator = argv[2]; + + if (strcmp(generator,"uniform")==0) np = 0; + else if (strcmp(generator,"uniopen")==0) np = 0; + else if (strcmp(generator,"int")==0) np = 1; + else if (strcmp(generator,"poisson")==0) np = 1; + else if (strcmp(generator,"gaussian")==0) np = 0; + else if (strcmp(generator,"exp")==0) np = 0; + else if (strcmp(generator,"cauchy")==0) np = 0; + else if (strcmp(generator,"gamma")==0) np = 1; + else if (strcmp(generator,"beta")==0) np = 2; + else + { fprintf(stderr,"Unknown generator: %s\n",generator); + exit(1); + } + + ap = argv+3; + + if (np>0) + { if (*ap==0 || (p1 = atof(*ap++))<=0) usage(); + } + if (np>1) + { if (*ap==0 || (p2 = atof(*ap++))<=0) usage(); + } + + if (*ap==0 || strcmp(*ap++,"/")!=0) usage(); + + if (*ap==0 || (sample_size = atoi(*ap++))<=0) usage(); + + if (*ap!=0) + { low = atof(*ap++); + if (*ap==0) usage(); + high = atof(*ap++); + if (high<=low) usage(); + if (*ap==0 || (bins = atoi(*ap++))<=0) usage(); + if (bins>Max_bins) + { fprintf(stderr,"Too many histogram bins\n"); + exit(1); + } + } + + if (*ap!=0) usage(); + + printf("\nTest of %s(",generator); + if (np>0) printf("%.4f",p1); + if (np>1) printf(",%.4f",p2); + printf(") generator using sample of size %d with seed %d\n\n", + sample_size, seed); + + undef_mean = undef_variance = 0; + + if (strcmp(generator,"uniform")==0) + { tmean = 0.5; + tvariance = 1.0/12.0; + } + else if (strcmp(generator,"uniopen")==0) + { tmean = 0.5; + tvariance = 1.0/12.0; + } + else if (strcmp(generator,"int")==0) + { tmean = (p1-1)/2; + tvariance = p1*p1/3.0 - p1/2.0 + 1/6.0 - tmean*tmean; + } + else if (strcmp(generator,"poisson")==0) + { tmean = p1; + tvariance = p1; + } + else if (strcmp(generator,"gaussian")==0) + { tmean = 0; + tvariance = 1; + } + else if (strcmp(generator,"exp")==0) + { tmean = 1; + tvariance = 1; + } + else if (strcmp(generator,"cauchy")==0) + { undef_mean = 1; + undef_variance = 1; + } + else if (strcmp(generator,"gamma")==0) + { tmean = p1; + tvariance = p1; + } + else if (strcmp(generator,"beta")==0) + { tmean = p1 / (p1+p2); + tvariance = (p1*p2) / ((p1+p2)*(p1+p2)*(p1+p2+1)); + } + else + { abort(); + } + + mean = 0; + variance = 0; + + if (bins>0) + { for (i = 0; i0) + { if (x=bins) + { over += 1; + } + else + { count[i] += 1; + } + } + } + } + + mean /= sample_size; + variance /= sample_size; + variance -= mean*mean; + + printf("Sample mean: %.4f",mean); + if (undef_mean) + { printf(" (true value: undefined)\n"); + } + else + { printf(" (true value: %.4f)\n",tmean); + } + + printf("Sample variance: %.4f",variance); + if (undef_variance) + { printf(" (true value: undefined)\n"); + } + else + { printf(" (true value: %.4f)\n",tvariance); + } + printf("\n"); + + if (bins!=0) + { printf("Histogram:\n"); + printf(" under : %8d %.5f\n\n", + under, (double)under / sample_size); + for (i = 0; i +#include +#include +#include +#include + +#include "rand.h" + + +static long int this_nrand48 (unsigned short int [3]); + /* Local version of nrand48 */ + + +/* This module uses the 'this_nrand48' pseudo-random number generator from the + GNU C library, included below, but renamed to 'this_nrand48'. The + output of this generator is combined with a file of real random numbers. + + Many of the methods used in this module may be found in the following + reference: + + Devroye, L. (1986) Non-Uniform Random Variate Generation, + New York: Springer-Verlag. + + The methods used here are not necessarily the fastest available. They're + selected to be reasonably fast while also being easy to write. +*/ + + +/* CONSTANT PI. Defined here if not in . */ + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + + +/* TABLES OF REAL RANDOM NUMBERS. A file of 100000 real random numbers + (NOT pseudo-random) is used in conjunction with pseudo-random numbers + for extra insurance. These are employed in the form of five tables + of 5000 32-bit integers. + + The file must be located at the path given by RAND_FILE, which should + be defined on the "cc" command line. */ + +#define Table_size 5000 /* Number of words in each table */ + +static int rn[N_tables][Table_size]; /* Random number tables */ + + +/* STATE OF RANDOM NUMBER GENERATOR. */ + +static int initialized = 0; /* Has module been initialized? */ + +static rand_state state0; /* Default state structure */ + +static rand_state *state; /* Pointer to current state */ + + +/* INITIALIZE MODULE. Sets things up using the default state structure, + set as if rand_seed had been called with a seed of one. */ + +static void initialize (void) +{ + int i, j, k, w; + char b; + FILE *f; + + if (!initialized) + { + f = fopen(RAND_FILE,"rb"); + + if (f==NULL) + { fprintf(stderr,"Can't open file of random numbers (%s)\n",RAND_FILE); + exit(1); + } + + for (i = 0; iseed = seed; + + state->state48[0] = seed>>16; + state->state48[1] = seed&0xffff; + state->state48[2] = rn[0][(seed&0x7fffffff)%Table_size]; + + for (j = 0; jptr[j] = seed%Table_size; + seed /= Table_size; + } +} + + +/* SET STATE STRUCTURE TO USE. */ + +void rand_use_state +( rand_state *st +) +{ + if (!initialized) initialize(); + + state = st; +} + + +/* RETURN POINTER TO CURRENT STATE. */ + +rand_state *rand_get_state (void) +{ + if (!initialized) initialize(); + + return state; +} + + +/* GENERATE RANDOM 31-BIT INTEGER. Not really meant for use outside this + module. */ + +int rand_word(void) +{ + int v; + int j; + + if (!initialized) initialize(); + + v = this_nrand48(state->state48); + + for (j = 0; jptr[j]]; + } + + for (j = 0; jptr[j]==Table_size-1; j++) + { state->ptr[j] = 0; + } + + if (jptr[j] += 1; + } + + return v & 0x7fffffff; +} + + +/* GENERATE UNIFORMLY FROM [0,1). */ + +double rand_uniform (void) +{ + return (double)rand_word() / (1.0+(double)0x7fffffff); +} + + +/* GENERATE UNIFORMLY FORM (0,1). */ + +double rand_uniopen (void) +{ + return (0.5+(double)rand_word()) / (1.0+(double)0x7fffffff); +} + + +/* GENERATE RANDOM INTEGER FROM 0, 1, ..., (n-1). */ + +int rand_int +( int n +) +{ + return (int) (n * rand_uniform()); +} + + +/* GENERATE INTEGER FROM 0, 1, ..., (n-1), WITH GIVEN DISTRIBUTION. */ + +int rand_pickd +( double *p, + int n +) +{ + double t, r; + int i; + + t = 0; + for (i = 0; i0) return i; + } + + abort(); +} + + +/* SAME PROCEDURE AS ABOVE, BUT WITH FLOAT ARGUMENT. */ + +int rand_pickf +( float *p, + int n +) +{ + double t, r; + int i; + + t = 0; + for (i = 0; i0) return i; + } + + abort(); +} + + +/* GENERATE RANDOM PERMUTATION OF INTEGERS FROM 1 TO N. */ + +void rand_permutation +( int *perm, /* Place to store permutation */ + int n /* Number of integers to permute */ +) +{ + int i, j, t; + + for (i = 0; i10000) + { v = (int) (lambda + rand_gaussian()*sqrt(lambda) + 0.5); + } + else + { v = 0; + for (;;) + { lambda -= rand_exp(); + if (lambda<=0) break; + v += 1; + } + } + return v; +} + + +/* GAUSSIAN GENERATOR. Done by using the Box-Muller method, but only one + of the variates is retained (using both would require saving more state). + See Devroye, p. 235. + + As written, should never deliver exactly zero, which may sometimes be + helpful. */ + +double rand_gaussian (void) +{ + double a, b; + + a = rand_uniform(); + b = rand_uniopen(); + + return cos(2.0*M_PI*a) * sqrt(-2.0*log(b)); +} + + +/* EXPONENTIAL GENERATOR. See Devroye, p. 29. Written so as to never + return exactly zero. */ + +double rand_exp (void) +{ + return -log(rand_uniopen()); +} + + +/* LOGISTIC GENERATOR. Just inverts the CDF. */ + +double rand_logistic (void) +{ double u; + u = rand_uniopen(); + return log(u/(1-u)); +} + + +/* CAUCHY GENERATOR. See Devroye, p. 29. */ + +double rand_cauchy (void) +{ + return tan (M_PI * (rand_uniopen()-0.5)); +} + + +/* GAMMA GENERATOR. Generates a positive real number, r, with density + proportional to r^(a-1) * exp(-r). See Devroye, p. 410 and p. 420. + Things are fiddled to avoid ever returning a value that is very near + zero. */ + +double rand_gamma +( double a +) +{ + double b, c, X, Y, Z, U, V, W; + + if (a<0.00001) + { X = a; + } + + else if (a<=1) + { + U = rand_uniopen(); + X = rand_gamma(1+a) * pow(U,1/a); + } + + else if (a<1.00001) + { X = rand_exp(); + } + + else + { + b = a-1; + c = 3*a - 0.75; + + for (;;) + { + U = rand_uniopen(); + V = rand_uniopen(); + + W = U*(1-U); + Y = sqrt(c/W) * (U-0.5); + X = b+Y; + + if (X>=0) + { + Z = 64*W*W*W*V*V; + + if (Z <= 1 - 2*Y*Y/X || log(Z) <= 2 * (b*log(X/b) - Y)) break; + } + } + } + + return X<1e-30 && X=1.0); + + return r; +} + + +/* ROUTINES FROM THE GNU C LIBRARY. These were modified to extract + only the routines used here, and to allow them to be included in + this module without any possible name conflict with other modules. + Inclusion here ensures that these routines are always available, and + operate in exactly the same way on all systems. The routines as copied + below are still easily useable by other programs by simply inserting + this source code into an appropriate source file. + + The following is the copyright notice for these routines: + + Copyright (C) 1995, 1996, 1997, 2002 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , August 1995. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. + + The GNU Lesser General Public License is included with these source + files in the file LGPL. */ + +#include +#include +#include + +struct this_drand48_data + { + unsigned short int x[3]; /* Current state. */ + unsigned short int old_x[3]; /* Old state. */ + unsigned short int c; /* Additive const. in congruential formula. */ + unsigned short int init; /* Flag for initializing. */ + unsigned long long int a; /* Factor in congruential formula. */ + }; + +/* Global state for non-reentrant functions. */ + +struct this_drand48_data libc_this_drand48_data; + +static int this_nrand48_r (unsigned short int xsubi[3], + struct this_drand48_data *buffer, + long int *result); + +/* Internal function to compute next state of the generator. */ + +static int this_drand48_iterate (unsigned short int xsubi[3], + struct this_drand48_data *buffer); + +static long int this_nrand48 (xsubi) + unsigned short int xsubi[3]; +{ + long int result; + + (void) this_nrand48_r (xsubi, &libc_this_drand48_data, &result); + + return result; +} + +static int this_nrand48_r (xsubi, buffer, result) + unsigned short int xsubi[3]; + struct this_drand48_data *buffer; + long int *result; +{ + /* Compute next state. */ + if (this_drand48_iterate (xsubi, buffer) < 0) + return -1; + + /* Store the result. */ + if (sizeof (unsigned short int) == 2) + *result = xsubi[2] << 15 | xsubi[1] >> 1; + else + *result = xsubi[2] >> 1; + + return 0; +} + +static int this_drand48_iterate (xsubi, buffer) + unsigned short int xsubi[3]; + struct this_drand48_data *buffer; +{ + uint64_t X; + uint64_t result; + + /* Initialize buffer, if not yet done. */ + if (!buffer->init) + { + buffer->a = 0x5deece66dull; + buffer->c = 0xb; + buffer->init = 1; + } + + /* Do the real work. We choose a data type which contains at least + 48 bits. Because we compute the modulus it does not care how + many bits really are computed. */ + + X = (uint64_t) xsubi[2] << 32 | (uint32_t) xsubi[1] << 16 | xsubi[0]; + + result = X * buffer->a + buffer->c; + + xsubi[0] = result & 0xffff; + xsubi[1] = (result >> 16) & 0xffff; + xsubi[2] = (result >> 32) & 0xffff; + + return 0; +} diff --git a/lib/ldpc/rand.h b/lib/ldpc/rand.h new file mode 100755 index 000000000..bb896d406 --- /dev/null +++ b/lib/ldpc/rand.h @@ -0,0 +1,54 @@ +/* RAND.H - Interface to random number generation procedures. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + + +/* STATE OF RANDOM NUMBER GENERATOR. */ + +#define N_tables 5 /* Number of tables of real random numbers */ + +typedef struct +{ int seed; /* Seed state derives from */ + int ptr[N_tables]; /* Pointers for tables of real random numbers */ + unsigned short state48[3]; /* State of 'rand48' pseudo-random generator */ +} rand_state; + + +/* BASIC PSEUDO-RANDOM GENERATION PROCEDURES. */ + +void rand_seed (int); /* Initialize current state structure by seed */ + +void rand_use_state (rand_state *); /* Start using given state structure */ +rand_state *rand_get_state (void); /* Return pointer to current state */ + +int rand_word (void); /* Generate random 31-bit positive integer */ + + +/* GENERATORS FOR VARIOUS DISTRIBUTIONS. */ + +double rand_uniform (void); /* Uniform from [0,1) */ +double rand_uniopen (void); /* Uniform from (0,1) */ + +int rand_int (int); /* Uniform from 0, 1, ... (n-1) */ +int rand_pickd (double *, int); /* From 0 ... (n-1), with given distribution */ +int rand_pickf (float *, int); /* Same as above, but with floats */ +void rand_permutation (int *, int); /* Random permutation */ + +int rand_poisson (double); /* Poisson with given mean */ +double rand_gaussian (void); /* Gaussian with mean zero and unit variance */ +double rand_logistic (void); /* Logistic centred at zero with unit width */ +double rand_cauchy (void); /* Cauchy centred at zero with unit width */ +double rand_gamma (double); /* Gamma with given shape parameter */ +double rand_exp (void); /* Exponential with mean one */ +double rand_beta (double, double); /* Beta with given parameters */ diff --git a/lib/ldpc/rand.html b/lib/ldpc/rand.html new file mode 100755 index 000000000..5754b86a6 --- /dev/null +++ b/lib/ldpc/rand.html @@ -0,0 +1,306 @@ + + + Random Variate Generation Routines + + + + +

Random Variate Generation Routines

+ +

This module provides facilities for basic pseudo-random number generation, +and for generation of random variates from various common distributions. + +

All the random generation procedures use the same underlying +"stream" of random numbers. This stream is generated using the +nrand48 pseudo-random generation procedure found on most Unix +systems, with the output being combined with a limited supply of real +random numbers from the file "randfile" in the source +directory for this software, in order to reduce the chances that the +pseudo-random numbers aren't random enough. + +

A pseudo-random number stream is determined by an integer +seed, which is typically set by the user for each experimental +run (eg, to 1, 2, 3, etc. for successive runs). The state of the +random number stream can be saved in a structure of type +rand_state, and later restored. For example, the state could +be saved in a file at the end of a run, and restored if it is later +decided that the run should be continued for longer. + +

The methods for generating random variates from various distributions +are mostly taken from the following reference: +

+ Devroye, L. (1986) Non-Uniform Random Variate Generation, + New York: Springer-Verlag. +
+The methods used here are not necessarily the fastest available. They were +selected to be reasonably fast while also being easy to write. + +

Header file required: rand.h + + + +


+
Setting and saving the state
+
+ + +
rand_seed: +Set the state from an integer seed.
+ +
+void rand_seed
+( int seed;  /* Seed to set state based on */
+)
+
+ +

Sets the random number generator to a state that is determined from +the integer seed. Setting the seed the same on two occasions, +and then calling exactly the same sequence of random generation +procedures, should produce exactly the same sequence of random +variates. (Note: this may not be true, however, if computers with +different architectures are used on the two occasions.) + +

Sequential seeds should produce streams that are pretty much +independent (unlike the situation for some pseudo-random number +generators). Setting the seed randomly according to the time or day, +or some such, without recording what it was, is not +recommended, since the results are then not reproducible. + +


rand_get_state: +Get a pointer to the current state. + +
+rand_state *rand_get_state (void)
+
+ +Returns a pointer to the current state of the random number generator, +which is a structure of type rand_state. The only use for this +pointer is to use it to save a copy of the current state someplace. + + +


rand_use_state: +Set the state to use from now on. + +
+void rand_use_state 
+( rand_state *state  /* Pointer to a previously saved state */
+)
+
+ +Sets the random number generator to the state pointed to by the argument. +This state must be valid. The only way to get a valid state is by using +rand_get_state. + + + +


+
Generating uniform random variates
+
+ + +
rand_uniform: +Generate uniformly from [0,1).
+ +
+double rand_uniform (void)
+
+ +Returns a random number that is uniformly distributed between 0 and 1, +with a value of exactly 0 being possible, but with a value of exactly 1 +not being possible. + +


rand_uniopen: +Generate uniformly from (0,1). + +
+double rand_uniopen (void)
+
+ +Returns a random number that is uniformly distributed between 0 and 1, +with neither a value of exactly 0 nor a value of exactly 1 +being possible. + + + +


+
Generating discrete random variates
+
+ + +
rand_int: +Pick an integer uniformly from 0 to n-1.
+ +
+int rand_int 
+( int n  /* Number of integers (from 0) to pick from */
+)
+
+ +

Randomly picks an integer from the set { 0, 1, ..., n-1 }, +with each integer being equally probable. The probabilities may +become somewhat unequal, however, if n is very large, +approaching 231. + + +


rand_pickd: Pick an integer from 0 +to n-1 with given probabilities (as doubles). + +
+int rand_pickd
+( double *p,  /* Array of probabilities, of length n */
+  int n       /* Number of integers (from 0) to pick from */
+)
+
+ +

Randomly picks an integer from the set { 0, 1, ..., n-1 }, +with probabilities given by the array of double-precision numbers +passed as the first argument. These numbers need not sum to one, but they +must be non-negative, and must not all be zero. The actual +probabilities used are obtained by dividing each number in this array +by the sum of all the numbers. + +

If one of the probabilities is exactly zero, it is guaranteed that +the corresponding integer will not be picked. + + +


rand_pickf: Pick an integer from 0 +to n-1 with given probabilities (as floats). + +
+int rand_pickf
+( float *p,  /* Array of probabilities, of length n */
+  int n      /* Number of integers (from 0) to pick from */
+)
+
+ +

This procedure is the same as rand_pickd +except that the array giving the probabilities is an array of single-precision +floating point numbers, rather than double-precision. + + +


rand_poisson: +Generate a non-negative integer from a Poisson distribution. + +
+int rand_poisson
+( double lambda  /* Mean of the Poisson distribution */
+)
+
+ +

Generates a non-negative integer from the Poisson distribution with mean +lambda. + + +


rand_permutation: Generate a random +permutation of integers from 1 to n. + +
+int rand_permutation
+( int *perm,  /* Place to store the permutation */
+  int n       /* Number of integers to permute */
+)
+
+ +

Stores a random permutation of the integers from 1 to n in the +array perm, which must be at least n long. All permutations are +equally likely. + + + +


+
Generating continuous random variates
+
+ + +
rand_gaussian: +Generate a standard Gaussian (normal) random variate.
+ +
+double rand_gaussian (void)
+
+ +

Generates a random value drawn from the Gaussian (normal) distribution +with mean zero and standard deviation one, whose density function is +proportional to exp(-x2/2), with x +being any real value. + + +


rand_logistic: +Generate a logistic random variate. + +
+double rand_logistic (void)
+
+ +

Generates a random value drawn from the logistic distribution with +location parameter zero and width parameter one, whose density +function is proportional to +exp(-x) / [1 + exp(-x)]2, +with x being any real value. + + +


rand_cauchy: +Generate a Cauchy random variate. + +
+double rand_cauchy (void)
+
+ +

Generates a random value drawn from the Cauchy distribution with centre +at zero and width one, whose density function is proportional to +1 / (1+x2), with x being any real value. + + +


rand_gamma: +Generate a gamma-distributed random variate. + +
+double rand_gamma
+( double A   /* Shape parameter */
+)
+
+ +

Generates a random value drawn from the gamma distribution with +positive shape parameter A, whose density function is proportional +to xA-1 exp(-x), with x +being any positive real. This procedure will never return a value that is +exactly zero. + + +


rand_exp: +Generate an exponentially-distributed random variate. + +
+double rand_exponential (void)
+
+ +

Generates a random value drawn from the exponential distribution with +mean one, whose density function is exp(-x), with x being +any positive real. This procedure will never return a value that is +exactly zero. + +

Note: This is a common special case of the gamma distribution. + + +


rand_beta: +Generate a beta-distributed random variate. + +
+double rand_beta
+( double A,  /* Parameters of distribution */
+  double B
+)
+
+ +

Generates a random value drawn from the beta distribution with positive +parameters A and B, whose density function is proportional +to xA-1(1-x)B-1, +with x being any real in the interval (0,1). This procedure +will never return a value that is exactly zero or exactly one. + + +


+ +Back to index for LDPC software + + diff --git a/lib/ldpc/randfile b/lib/ldpc/randfile new file mode 100755 index 000000000..3d33d61e2 Binary files /dev/null and b/lib/ldpc/randfile differ diff --git a/lib/ldpc/rcode.c b/lib/ldpc/rcode.c new file mode 100755 index 000000000..3ccf20c51 --- /dev/null +++ b/lib/ldpc/rcode.c @@ -0,0 +1,200 @@ +/* RCODE.C - Procedures to read parity check and generator matrices. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include +#include + +#include "alloc.h" +#include "intio.h" +#include "open.h" +#include "mod2sparse.h" +#include "mod2dense.h" +#include "mod2convert.h" +#include "rcode.h" + + +/* VARIABLES DECLARED IN RCODE.H. These global variables are set to + representations of the parity check and generator matrices by read_pchk + and read_gen. */ + +mod2sparse *H; /* Parity check matrix */ + +int M; /* Number of rows in parity check matrix */ +int N; /* Number of columns in parity check matrix */ + +char type; /* Type of generator matrix representation (s/d/m) */ +int *cols; /* Ordering of columns in generator matrix */ + +mod2sparse *L, *U; /* Sparse LU decomposition, if type=='s' */ +int *rows; /* Ordering of rows in generator matrix (type 's') */ + +mod2dense *G; /* Dense or mixed representation of generator matrix, + if type=='d' or type=='m' */ + + +/* READ PARITY CHECK MATRIX. Sets the H, M, and N global variables. If an + error is encountered, a message is displayed on standard error, and the + program is terminated. */ + +void read_pchk +( char *pchk_file +) +{ + FILE *f; + + f = open_file_std(pchk_file,"rb"); + if (f==NULL) + { fprintf(stderr,"Can't open parity check file: %s\n",pchk_file); + exit(1); + } + + if (intio_read(f)!=('P'<<8)+0x80) + { fprintf(stderr,"File %s doesn't contain a parity check matrix\n",pchk_file); + exit(1); + } + + H = mod2sparse_read(f); + + if (H==0) + { fprintf(stderr,"Error reading parity check matrix from %s\n",pchk_file); + exit(1); + } + + M = mod2sparse_rows(H); + N = mod2sparse_cols(H); + + fclose(f); +} + + +/* READ GENERATOR MATRIX. The parity check matrix must have already been + read, unless the last argument is set to 1. The generator matrix must be + compatible with the parity check matrix, if it has been read. If the + second argument is 1, only the column ordering (the last N-M of which are + the indexes of the message bits) is read, into the 'cols' global variable. + Otherwise, everything is read, into the global variables appropriate + to the representation. The 'type' global variable is set to a letter + indicating which represention is used. + + If an error is encountered, a message is displayed on standard error, + and the program is terminated. */ + +void read_gen +( char *gen_file, /* Name of generator matrix file */ + int cols_only, /* Read only column ordering? */ + int no_pchk_file /* No parity check file used? */ +) +{ + int M2, N2; + FILE *f; + int i; + + f = open_file_std(gen_file,"rb"); + if (f==NULL) + { fprintf(stderr,"Can't open generator matrix file: %s\n",gen_file); + exit(1); + } + + if (intio_read(f)!=('G'<<8)+0x80) + { fprintf(stderr,"File %s doesn't contain a generator matrix\n",gen_file); + exit(1); + } + + if (fread (&type, 1, 1, f) != 1) goto error; + + M2 = intio_read(f); + N2 = intio_read(f); + + if (feof(f) || ferror(f)) goto error; + + if (no_pchk_file) + { M = M2; + N = N2; + } + else + { if (M2!=M || N2!=N) + { fprintf(stderr, + "Generator matrix and parity-check matrix are incompatible\n"); + exit(1); + } + } + + cols = chk_alloc (N, sizeof *cols); + rows = chk_alloc (M, sizeof *rows); + + for (i = 0; i + + References on Low Density Parity Check Codes + + + + +

References on Low Density Parity Check Codes

+ +Robert Gallager's original work on low density parity check codes was published +as the following book, based his doctoral dissertation, and a related paper: +
+

Gallager, R. G. (1963) Low Density Parity Check Codes, + Cambridge, MA: MIT Press. +

Gallager, R. G. (1962) ``Low-density parity-check codes'', IRE + Transactions on Information Theory, vol. IT-8, pp. 21-28. +

+ +More recent work on these codes by David MacKay and myself was published +as follows: +
+

MacKay, D. J. C. and Neal, R. M. (1996) ``Near Shannon limit performance + of low density parity check codes'', Electronics Letters, + vol. 32, pp. 1645-1646. Reprinted with printing errors corrected + in vol. 33, pp. 457-458. +

MacKay, D. J. C. (1999) ``Good error-correcting codes based on very + sparse matrices'', IEEE Transactions on Information Theory, + vol. 45, pp. 399-431. +

+ +The decoding algorithms described in the above references can visualized +in terms of a ``factor graph'' representation of the code, as described +in the following paper: +
+

Kschischang, F. R., Frey, B. J., and Loeliger, H.-A. (1998) ``Factor graphs +and the sum-product algorithm'', IEEE Transactions on Information +Theory, vol. 47, pp. 498-519. +

+ +I presented the application of sparse matrix techniques to encoding of +LDPC codes at the IMA workshop on Codes, Systems and Graphical Models, +Minneapolis, 1999. You can view the slides of this talk here. Note: Due to a bug in the +program I used then, the results shown for the minimal product heuristic in +these slides are somewhat worse than the actual performance. For instance, +the number of bit operations per check bit for for M=3200 with +3 checks per bit is actually around 12.7, not the value around 17 shown +on one of the slides. + +

Text and references to many more recent and classical papers can be +obtained via the IMA workshop's +web page. + +


+ +Back to index for LDPC software + + diff --git a/lib/ldpc/release.html b/lib/ldpc/release.html new file mode 100755 index 000000000..558e7cda8 --- /dev/null +++ b/lib/ldpc/release.html @@ -0,0 +1,244 @@ + + +Release Notes for LDPC-codes Software + + + + +

Release Notes for LDPC-codes Software

+ +These notes describe all the stable public releases of this software. Old +and future releases can be obtained via +
+ +http://www.cs.toronto.edu/~radford/ldpc.software.html +
+The current development version is now maintained at +
+ +http://github.com/radfordneal/LDPC-code +
+ +

Version of 2012-02-11.

+This version has a few bug fixes and some minor new features. The major +change is that a source repository for the software is now hosted +at github.com, making it easier for people to create and release +their own versions of this software. +
    +
  1. Changed the copyright notice (in the file COPYRIGHT, and elsewhere) + to remove the requirement that my web site be referenced. (Nowadays, + I think users should have no problem finding the sources using a + search engine.) +
  2. Included a copy of the nrand48 routine from the GNU C library + in the rand.c module, to ensure that it is always available + and always the same. (This isn't so on some versions of cygwin.) +
  3. Added a -f option to encode and decode that forces flushing + after writing each block. Useful for allowing encode or + decode to be used as a server, reading and writing blocks + from named pipes. +
  4. Added a -z option for pchk-to-alist to suppress output of 0 + row and column indexes that pad up to the maximum number used. +
  5. Documented the previously undocumented -t options for pchk-to-alist + and alist-to-pchk. +
  6. Changed alist-to-pchk so that it no longer requires zero indexes + that pad out to the maximum needed for a row or column (thanks + to Monica Kolb for suggesting this). +
  7. Changed mod2word type in mod2dense.c to uint32_t, to avoid + wasted space when long is 64 bits (thanks to Mathieu Cunche + and Vincent Roca for suggesting this). +
  8. Fixed bug in distrib.c affecting distributions with a single + number (thanks to Mike Vicuna for pointing it out). +
  9. Fixed bug in -t option for pchk-to-alist (thanks to Andrea Fontana + for reporting this). +
  10. Fixed references in the documentation to mod2sparse_multvec + that should be to mod2sparse_mulvec (thanks to Andrea Fontana + for reporting this). +
+ + +

Version of 2006-02-08.

+ +The copyright notice has been changed in this release to no longer +restrict use to purposes of research or education. The new copyright +notice can be read here. It is now +possible to create LDPC codes with varying numbers of checks per bit +(an extension based on work by Peter Junteng Liu). New programs for +converting to and from the alist +format for parity check matrices, used by David MacKay and others, +have also been added. + +

The following new features have been added: +

    +
  1. The make-ldpc program can + new create LDPC codes with varying numbers of checks per bit. The + examples now include a code of this sort. +
  2. New programs pchk-to-alist + and alist-to-pchk have + been added, which convert to and from alist + format. +
  3. A run-examples script has been + added, which runs all the examples and + compares with the saved output that I obtained. +
+ + +

Version of 2001-11-18.

+ +This is a minor release, whose main purpose is fixing bug (1) below. +Also, this release has been tested and found to work with the cygwin Unix environment that runs +under Microsoft Windows. + +

The following new feature has been added: +

    +
  1. A new -t option has been added to + print-pchk, which + causes it to print the transpose of the parity check matrix. +
+ +The following program module change was made: +
    + +
  1. The behaviour of mod2dense_invert_selected + has been changed when the matrix has dependent rows. The result returned + contains the inverse of a sub-matrix in its initial columns. The contents + of the remaining columns up to the number of rows was previously undefined, + but these columns are now set to contain zeros. This was done to fix + bug (1) below. +
+ +The following bugs were fixed: +
    +
  1. A bug has been fixed in + make-gen + which sometimes + produced invalid `dense' or `mixed' generator matrices when the parity + check matrix had redundant rows. + The `sparse' generator matrices were not affected. The output of the + ex-dep example has changed slightly as a + result. +
  2. The open mode for reading the file of random numbers has been changed from + "r" to "rb", for compatibility with non-Unix systems. +
  3. mod2sparse_copy has + been fixed so that it copies the lr and pr fields + of entries. +
  4. The "set -v -e" in the command files for the examples has + been replaced by two commands, "set -e" and "set -v", since some + shells can't set two options at once. +
+ +A few minor fixes to the documentation have also been made. + + +

Version of 2001-05-04.

+ +Changes and new features regarding programs and associated +documentation and examples: +
    +
  1. Warnings have been added to the documentation about the dangers of + using zero codewords for testing (due to the possibility of the decoder + accidently being non-symmetric). The examples have been changed to + not use zero codewords, except for + ex-ham7a, which still + demonstrates this facility. +
  2. Decoding by probability propagation has been changed so that if + a probability ratio gets set to NaN ("not a number", the result of + infinite but conflicting evidence from different sources), the probability + ratio is changed to 1, in hopes that something sensible may result. +
  3. The decoding procedures have been changed to decode a bit to a 1 if + there is a tie, so that any resulting asymmetry in decoding will + make zero decoding less, rather than more, likely. See point (1) above. +
  4. All programs now allow a file name argument to be "-", which specifies + standard input or standard output, as appropriate. The + ex-ldpc36-5000a example has been + changed to use this facility in order to avoid creating lots of files. +
  5. Channels with noise from a logistic distribution (AWLN) have been + implemented. For details, + see the channel documentation. +
  6. The make-gen program for "dense" or "mixed" options was modified + so that when some parity checks are redundant, others are not declared + redundant when they aren't. This makes the result compatible with + what is obtained with the "sparse" option. The example in the + discussion of linear dependence in parity check + matrices has changed slightly as a result. +
  7. The messages displayed by the decode + program have changed slightly: The block size is no longer displayed, + and the percentage of bits changed is now shown. The data output + when the -t option is specified now includes the number of + bits changed in each block. +
  8. A new -T option to decode + for displaying + detailed information on decoding + has been added. +
  9. Doing a make clean will now remove the files created + by running the examples. +
  10. The files created by the examples now + start with "ex-" and contain a ".", to make them easier to + identify for cleanup, and the saved output file now ends in + "-out" rather than ".out". +
  11. The scripts for the examples now use the -v option of set + rather than -x, so that the command lines are echoed + faithfully as they are read. +
  12. Two new examples have been added: + ex-dep demonstrates what happens when parity check matrices + have redundant row, and ex-wrong-model investigates what + happens when the wrong model is used to decode. +
+Changes and new features regarding program modules and other internals: +
    +
  1. Instructions have been added on + how to modify the programs, and some + code has been reorganized to facilitate modifications. +
  2. The makefile has been made trivial, simply recompiling everything + from scratch every time. This is simpler and less error prone + than putting in dependencies. + Compiling all the programs takes only about five seconds on a + modern PC. +
  3. The + mod2dense_invert_selected + procedure has been changed + to take an additional argument in which a permutation of rows is + returned. This extension is needed in order for the result when + the matrix is not of full rank to include as many rows as possible, + as needed for the above modification of make-gen. +
  4. New routines + mod2dense_copyrows and + mod2sparse_copyrows have + been added, analogous to the previous routines for copying columns. +
  5. The decoding procedures have been changed to always return the bit + probabilities (previously, one could pass a null pointer to suppress + this). This makes things simpler, and facilitates the production of + detailed trace output when the -T option is used. +
+ +The following bugs were fixed: +
    +
  1. A problem with print-gen prevented the -d option from working + in most cases. The documentation was also fixed to note what + the L and U matrices printed will look like. +
  2. The documentation for + mod2sparse_copycols and + mod2dense_copycols + was ambiguous. It has been clarified. The dense and sparse + implementations were inconsistent. The sparse version has been changed + to match the dense version, which was and is the only version actually + used in the LDPC software. +
  3. In decode.c, a variable declared to be float was printed + using "%f", which strangely didn't work with one compiler. + It's now declared as double. +
+ +There were also numerous minor cleanups of program code and documentation. + +

Version of 2000-03-19.

+ +This was the first public release. + +
+ +Back to index for LDPC software + + diff --git a/lib/ldpc/run-examples b/lib/ldpc/run-examples new file mode 100755 index 000000000..7d8859e3f --- /dev/null +++ b/lib/ldpc/run-examples @@ -0,0 +1,12 @@ +#!/bin/sh + +# Run all the examples, and check the output against the corresponding -out +# file. Note that slight differences are possible when the examples are +# run on different machines, due to slightly different round-off errors. + +for e in `ls ex-* | grep -v "\\." | grep -v .-out` +do + echo Running $e: + $e 2>&1 | diff ${e}-out - + echo " " +done diff --git a/lib/ldpc/sparse-LU.html b/lib/ldpc/sparse-LU.html new file mode 100755 index 000000000..12874aaaf --- /dev/null +++ b/lib/ldpc/sparse-LU.html @@ -0,0 +1,90 @@ + + + Sparse LU Decomposition Methods + + + + +

Sparse LU Decomposition Methods

+ +

The sparse modulo-2 matrix LU decomposition routine mod2sparse_decomp (which +is used by the make-gen +program when it is asked to create a sparse generator matrix) tries to +find an sub-matrix of a matrix (for make-gen, the parity +check matrix), and an ordering of rows and columns for this +sub-matrix, that leads to the lower-triangular matrix L and the +upper-triangular matrix U making up the LU decomposition being +as sparse as possible. Finding an optimal solution is too difficult, +so instead a heuristic strategy is used. + +

The overall algorithm finds L and U a column at a +time, from left to right (as reordered, in the case of U). As +this is done, a copy, B, of the original matrix is modified. +To create column i of L and U, some element with +value 1 in B whose row and column indexes, after reordering, +are both greater than i is found. The row and column of this +element are considered to come next in the reordering, and the +contents of the column containing this element is copied to L +and U (upper elements going to U, lower to L). +The row containing this element is then added to some later rows so as +to clear the lower part of this column to zeros. + +

At the first step of this process - selecting an element with value +1 from the later rows and columns - there will often be several +possibilities. Different choices can lead to the final result being +more or less sparse. The possible strategies for picking an element +are identified by the constants Mod2sparse_first, +Mod2sparse_mincol, and Mod2sparse_minprod. These +strategies operate as follows: + +

Mod2sparse_first +

+Select the first element with value 1 that is encountered in a top +to bottom, left to right search. +
+ +

Mod2sparse_mincol +

+Select the first element with value 1 that is contained in a column +of B that has the smallest number of 1s of any column. +
+ +

Mod2sparse_minprod +

+Select an element with value 1 for which the product of the number of +1s in that row of B minus one times the number of 1s in that +column of B minus one is as small as possible. +
+ +

The abandon_number and abandon_when parameters can +modify the basic strategy. If abandon_number is greater than +zero, then after abandon_when columns have been selected, +abandon_number of the remaining columns are abandoned as +candidates for possible future selection, the abandoned columns being +those with the greatest number of entries. Abandoning such columns +saves space and time, but may make the final result less sparse than +it would otherwise be, and can possibly result in the matrix appearing +to have lower rank than it actually has. + +

The methods described here are fairly straightforward adaptations +of standard methods for sparse square matrices of reals, as described, for +example, in +

+ I. S. Duff, A. M. Erisman, J. K. Reid (1986) Direct Methods for + Sparse Matrices, Oxford: Clarendon Press. +
+In the coding context, however, we are interested in matrices of +modulo-2 elements, and it is enough to find a sparse LU decomposition +of any square sub-matrix that can be obtained by selecting columns of +the rectangular parity check matrix. I talked about the application +of sparse matrix methods to encoding of LDPC codes at the 1999 IMA +workshop on Codes, Systems and Graphical Models (see the references). + + +
+ +Back to index for LDPC software + + diff --git a/lib/ldpc/sparse-encode.pdf b/lib/ldpc/sparse-encode.pdf new file mode 100755 index 000000000..30629f31a Binary files /dev/null and b/lib/ldpc/sparse-encode.pdf differ diff --git a/lib/ldpc/support.html b/lib/ldpc/support.html new file mode 100755 index 000000000..921881abd --- /dev/null +++ b/lib/ldpc/support.html @@ -0,0 +1,100 @@ + + + Support Programs + + + + +

Support Programs

+ +The following programs provide support for testing and performance +assessment. + + +


rand-src: Generate random message bits. + +
+rand-src source-file seed n-bits
+
+ +

Creates a file of random messages bits called +source-file, which is suitable for testing the +correctness and performance of other programs. The bits in the file +are independent, and are equally likely to be 0 or 1. They are +generated pseudo-randomly based on seed. The actual +random number seed used will be seed times 10 plus 2, +so that the stream of pseudo-random numbers will not be the same as +any that might have been used by another program. + +

The n-bits argument specifies the number of bits to +produce. It can be a single number, or it can consist of a block size +and a number of blocks, written with x separating these +numbers, with no spaces. Each block is written as a single line, with +the bits in the block represented by the characters '0' and '1', with +no intervening spaces. If the bit count is given by a single number, +the block size is assumed to be one. + +

Example: The following command produces a file containing +3 blocks, each consisting of 15 random bits, produced using the pseudo-random +number stream identified by the seed of 17: +

    +
  • rand-src rsrc 17 15x3 +
+The contents of the file rsrc after this command might be something +like the following: +
+111011000110000
+010010110010111
+100000000000111
+
+ + +


verify: Verify that decoded blocks are +codewords, and that they match the source. + +
+verify [ -t ] pchk-file decoded-file [ gen-file [ source-file ] ]
+
+ +

Checks whether or not the blocks in decoded-file +are codewords, according to the parity check matrix in +pchk-file. If gen-file is specified, +the message bits of the blocks are also checked against the +corresponding blocks of source-file, or against zero +if source-file is not given. (Normally, one would +leave out source-file only if the transmit command was used +with an argument specifying that zeros are to be transmitted, rather +than a file of encoded data.) + +

A summary of the results is displayed on standard error, giving the +total numbers of blocks, the number with parity check errors, and, if +gen-file was specified, the number of blocks with +source errors and the number with errors of both kinds. If +gen-file was specified, a second +summary line displays the bit error rate from +comparing the decoded message bits with the true message bits (zeros +if no source file was given). + +

If the -t option is given, block-by-block results are +printed on standard output in two or three columns, giving the block +number (from zero), the number of parity check errors for that block, +and the number of errors in source bits. The last column is omitted +if gen-file is not specified. The columns are +preceded by a line of headers, so the file is suitable for reading +into the S-Plus or R statistics packages, with a command such as +

+data <- read.table(file,header=T)
+
+ +

Warning messages are displayed on standard error if the number of +bits in decoded-file is not a multiple of the block +length, or if source-file is too short. Newlines +in these files are ignored, even though they would normally occur +at the ends of blocks. + +


+ +Back to index for LDPC software + + diff --git a/lib/ldpc/transmit.c b/lib/ldpc/transmit.c new file mode 100755 index 000000000..14657d686 --- /dev/null +++ b/lib/ldpc/transmit.c @@ -0,0 +1,170 @@ +/* TRANSMIT.C - Simulate transmission of bits through a channel. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include +#include +#include + +#include "channel.h" +#include "open.h" +#include "rand.h" + +void usage(void); + + +/* MAIN PROGRAM. */ + +int main +( int argc, + char **argv +) +{ + char *tfile, *rfile; + FILE *tf, *rf; + int block_size, n_bits; + char junk; + int seed; + int cnt; + int n, b; + + /* Look at arguments. The arguments specifying the channel are looked + at by channel_parse in channel.c */ + + if (!(tfile = argv[1]) + || !(rfile = argv[2]) + || !argv[3] || sscanf(argv[3],"%d%c",&seed,&junk)!=1) + { usage(); + } + + n = channel_parse(argv+4,argc-4); + if (n<=0 || argc-4-n!=0) + { usage(); + } + + /* See if the source is all zeros or a file. */ + + if (sscanf(tfile,"%d%c",&n_bits,&junk)==1 && n_bits>0) + { block_size = 1; + tf = NULL; + } + else if (sscanf(tfile,"%dx%d%c",&block_size,&n_bits,&junk)==2 + && block_size>0 && n_bits>0) + { n_bits *= block_size; + tf = NULL; + } + else + { tf = open_file_std(tfile,"r"); + if (tf==NULL) + { fprintf(stderr,"Can't open encoded file to transmit: %s\n",tfile); + exit(1); + } + } + + /* Open output file. */ + + rf = open_file_std(rfile,"w"); + if (rf==NULL) + { fprintf(stderr,"Can't create file for received data: %s\n",rfile); + exit(1); + } + + /* Set random seed to avoid duplications with other programs. */ + + rand_seed(10*seed+3); + + /* Transmit bits. */ + + for (cnt = 0; ; cnt++) + { + /* Get next bit to transmit. */ + + if (tf) /* Data comes from a file */ + { + for (;;) + { b = getc(tf); + if (b!=' ' && b!='\t' && b!='\n' && b!='\r') + { break; + } + putc(b,rf); + } + + if (b==EOF) break; + + if (b!='0' && b!='1') + { fprintf(stderr,"Bad character (code %d) file being transmitted\n",b); + exit(1); + } + } + + else /* Data is all zeros */ + { + if (cnt>0 && cnt%block_size==0) + { putc('\n',rf); + } + + if (cnt==n_bits) break; + + b = '0'; + } + + b = b=='1'; + + /* Produce the channel output for this transmitted bit. */ + + switch (channel) + { case BSC: + { int bsc_noise; + bsc_noise = rand_uniform() < error_prob; + fprintf (rf, "%d", b^bsc_noise); + break; + } + case AWGN: + { double awgn_noise; + awgn_noise = std_dev * rand_gaussian(); + fprintf (rf, " %+5.2f", b ? 1+awgn_noise : -1+awgn_noise); + break; + } + case AWLN: + { double awln_noise; + awln_noise = lwidth * rand_logistic(); + fprintf (rf, " %+5.2f", b ? 1+awln_noise : -1+awln_noise); + break; + } + default: + { abort(); + } + } + } + + fprintf(stderr,"Transmitted %d bits\n",cnt); + + if (ferror(rf) || fclose(rf)!=0) + { fprintf(stderr,"Error writing received bits to %s\n",rfile); + exit(1); + } + + return 0; +} + + +/* PRINT USAGE MESSAGE AND EXIT. */ + +void usage(void) +{ fprintf(stderr, + "Usage: transmit encoded-file|n-zeros received-file seed channel\n"); + channel_usage(); + exit(1); +} diff --git a/lib/ldpc/verify.c b/lib/ldpc/verify.c new file mode 100755 index 000000000..e52f79d86 --- /dev/null +++ b/lib/ldpc/verify.c @@ -0,0 +1,254 @@ +/* VERIFY.C - Verify encoded or decoded blocks. */ + +/* Copyright (c) 1995-2012 by Radford M. Neal. + * + * Permission is granted for anyone to copy, use, modify, and distribute + * these programs and accompanying documents for any purpose, provided + * this copyright notice is retained and prominently displayed, and note + * is made of any changes made to these programs. These programs and + * documents are distributed without any warranty, express or implied. + * As the programs were written for research purposes only, they have not + * been tested to the degree that would be advisable in any important + * application. All use of these programs is entirely at the user's own + * risk. + */ + +#include +#include +#include +#include + +#include "alloc.h" +#include "blockio.h" +#include "open.h" +#include "mod2sparse.h" +#include "mod2dense.h" +#include "mod2convert.h" +#include "rcode.h" +#include "check.h" + +void usage(void); + + +/* MAIN PROGRAM. */ + +int main +( int argc, + char **argv +) +{ + char *coded_file, *source_file; + char *pchk_file, *gen_file; + int table; + + char *sblk, *cblk, *chks; + int seof, ceof; + int srcerr, chkerr, bit_errs; + int i, n; + FILE *srcf, *codef; + + int tot_srcerrs, tot_chkerrs, tot_botherrs, tot_undeterrs, tot_good; + + /* Look at arguments. */ + + table = 0; + if (argc>1 && strcmp(argv[1],"-t")==0) + { table = 1; + argc -= 1; + argv += 1; + } + + if (argc<3 || argc>5) usage(); + + if (!(pchk_file = argv[1]) + || !(coded_file = argv[2])) + { usage(); + } + + gen_file = 0; + source_file = 0; + + if (argv[3]) + { gen_file = argv[3]; + if (argv[4]) + { source_file = argv[4]; + if (argv[5]) + { usage(); + } + } + } + + if ((strcmp(pchk_file,"-")==0) + + (strcmp(coded_file,"-")==0) + + (source_file!=0 && strcmp(source_file,"-")==0) + + (gen_file!=0 && strcmp(gen_file,"-")==0) > 1) + { fprintf(stderr,"Can't read more than one stream from standard input\n"); + exit(1); + } + + /* Read parity check file. */ + + read_pchk(pchk_file); + + if (N<=M) + { fprintf(stderr, + "Number of bits (%d) should be greater than number of checks (%d)\n",N,M); + exit(1); + } + + /* Read generator matrix file, if given, up to the point of finding + out which are the message bits. */ + + if (gen_file!=0) + { read_gen(gen_file,1,0); + } + + /* Open coded file to check. */ + + codef = open_file_std(coded_file,"r"); + if (codef==NULL) + { fprintf(stderr,"Can't open coded file: %s\n",coded_file); + exit(1); + } + + /* Open source file to verify against, if given. */ + + if (source_file!=0) + { + srcf = open_file_std(source_file,"r"); + if (srcf==NULL) + { fprintf(stderr,"Can't open source file: %s\n",source_file); + exit(1); + } + } + + sblk = chk_alloc (N-M, sizeof *sblk); + cblk = chk_alloc (N, sizeof *cblk); + chks = chk_alloc (M, sizeof *chks); + + /* Print header for table. */ + + if (table) + { if (gen_file!=0) + { printf(" block chkerrs srcerrs\n"); + } + else + { printf(" block chkerrs\n"); + } + } + + /* Verify successive blocks. */ + + tot_srcerrs = 0; + tot_chkerrs = 0; + tot_botherrs = 0; + tot_undeterrs = 0; + tot_good = 0; + + bit_errs = 0; + + seof = 0; + ceof = 0; + + for (n = 0; ; n++) + { + /* Read block from coded file. */ + + if (blockio_read(codef,cblk,N)==EOF) + { ceof = 1; + } + + /* Read block from source file, if given. */ + + if (source_file!=0 && !ceof && !seof) + { if (blockio_read(srcf,sblk,N-M)==EOF) + { fprintf(stderr,"Warning: Not enough source blocks (only %d)\n",n); + seof = 1; + } + } + + /* Stop if end of received file. */ + + if (ceof) break; + + /* Check that received block is a code word, and if not find the number of + parity check errors. */ + + chkerr = check(H,cblk,chks); + + /* Check against source block, if provided, or against zeros, if + the generator matrix was provided but no source file. */ + + if (gen_file!=0) + { srcerr = 0; + if (source_file!=0 && !seof) + { for (i = M; i