From 8dd6ff2ee5df8db5da8d33c982b1c1c37d4fe006 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Tue, 1 Jul 2014 23:22:23 +0000 Subject: [PATCH] not needed any more git-svn-id: https://svn.code.sf.net/p/freetel/code@1733 01035d8c-6547-0410-b346-abe4f91aad63 --- rfmodem/CMakeLists.txt | 133 ------------- rfmodem/golay23.c | 428 ----------------------------------------- rfmodem/golay23.h | 44 ----- 3 files changed, 605 deletions(-) delete mode 100644 rfmodem/CMakeLists.txt delete mode 100644 rfmodem/golay23.c delete mode 100644 rfmodem/golay23.h diff --git a/rfmodem/CMakeLists.txt b/rfmodem/CMakeLists.txt deleted file mode 100644 index 0c609d6a..00000000 --- a/rfmodem/CMakeLists.txt +++ /dev/null @@ -1,133 +0,0 @@ -# -# Codec2 - Next-Generation Digital Voice for Two-Way Radio -# -# CMake configuration contributed by Richard Shaw (KF5OIM) -# Please report questions, comments, problems, or patches to the freetel -# mailing list: https://lists.sourceforge.net/lists/listinfo/freetel-codec2 -# - -cmake_minimum_required(VERSION 2.8) - -# -# Prevent in-source builds -# If an in-source build is attempted, you will still need to clean up a few -# files manually. -# -set(CMAKE_DISABLE_SOURCE_CHANGES ON) -set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) - -project(rfmodem) - - -# -# Set project version information. This should probably be done via external -# file at some point. -# -set(RFMODEM_VERSION_MAJOR 0) -set(RFMODEM_VERSION_MINOR 1) -# Set to patch level is needed, otherwise leave FALSE. -set(RFMODEM_VERSION_PATCH FALSE) -set(RFMODEM_VERSION "${RFMODEM_VERSION_MAJOR}.${RFMODEM_VERSION_MINOR}") -# Patch level version bumps should not change API/ABI. -set(SOVERSION "${RFMODEM_VERSION_MAJOR}.${RFMODEM_VERSION_MINOR}") -if(RFMODEM_VERSION_PATCH) - set(PROJECT_VERSION "${RFMODEM_VERSION}.${RFMODEM_VERSION_PATCH}") -endif(RFMODEM_VERSION_PATCH) -message(STATUS "codec2 version: ${RFMODEM_VERSION}") - -# Set default build type -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "Release") -endif(NOT CMAKE_BUILD_TYPE) -message(STATUS "Build type is: ${CMAKE_BUILD_TYPE}") - -# -# Setup Windows/MinGW specifics here. -# -if(MINGW) - message(STATUS "System is MinGW.") - foreach(RUNTIME - libgcc_s_sjlj-1.dll - libstdc++-6.dll) - message(STATUS "Checking for ${RUNTIME}") - find_library(${RUNTIME}_LIB ${RUNTIME}) - message(STATUS "runtime found: ${${RUNTIME}_LIB}") - list(APPEND CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ${${RUNTIME}_LIB}) - endforeach() -endif(MINGW) - - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall") - -# -# Default options -#a -option(BUILD_SHARED_LIBS - "Build shared library. Set to OFF for static library." ON) - - -# Math library is automatic on windows -#if(UNIX) -# set(CMAKE_REQUIRED_INCLUDES math.h) -# set(CMAKE_REQUIRED_LIBRARIES m) -#endif(UNIX) - -include(CheckIncludeFiles) -check_include_files("stdlib.h" HAVE_STDLIB_H) -check_include_files("stdio.h" HAVE_STRING_H) -check_include_files("assert.h" HAVE_ASSERT_H) - -#include(CheckFunctionExists) - -# -# rfmodem library -# -#add_subdirectory(src) - -set(RFMODEM_SRCS golay23.c) - -set(RFMODEM_PUBLIC_HEADERS golay23.h) - -add_library(rfmodem ${RFMODEM_SRCS}) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}) -target_link_libraries(rfmodem ${CMAKE_REQUIRED_LIBRARIES}) -set_target_properties(rfmodem PROPERTIES SOVERSION ${SOVERSION}) - -install(TARGETS rfmodem - LIBRARY DESTINATION lib${LIB_SUFFIX} - ARCHIVE DESTINATION lib${LIB_SUFFIX} - RUNTIME DESTINATION bin) - -install(FILES ${RFMODEM_PUBLIC_HEADERS} - DESTINATION include/rfmodem) - - -# -# Cpack NSIS installer configuration for Windows. -# See: http://nsis.sourceforge.net/Download -# -# *nix systems should use "make install" and/or appropriate -# distribution packaging tools. -# -if(WIN32) - include(InstallRequiredSystemLibraries) - set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Next-Generation Digital Voice for Two-Way Radio") - set(CPACK_PACKAGE_VENDOR "CMake") - set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README") - set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") - set(CPACK_PACKAGE_VERSION_MAJOR ${RFMODEM_VERSION_MAJOR}) - set(CPACK_PACKAGE_VERSION_MINOR ${RFMODEM_VERSION_MINOR}) - if(RFMODEM_VERSION_PATCH) - set(CPACK_PACKAGE_VERSION_PATCH ${RFMODEM_VERSION_PATCH}) - endif(RFMODEM_VERSION_PATCH) - set(CPACK_PACKAGE_INSTALL_DIRECTORY "Codec2") - # There is a bug in NSI that does not handle full unix paths properly. Make - # sure there is at least one set of four (4) backlasshes. - #set(CPACK_PACKAGE_ICON "${CMake_SOURCE_DIR}/Utilities/Release\\\\InstallIcon.bmp") - #set(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\MyExecutable.exe") - set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}") - set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\codec2.org") - set(CPACK_NSIS_MODIFY_PATH ON) - include(CPack) -endif(WIN32) diff --git a/rfmodem/golay23.c b/rfmodem/golay23.c deleted file mode 100644 index 84d4c281..00000000 --- a/rfmodem/golay23.c +++ /dev/null @@ -1,428 +0,0 @@ -/*---------------------------------------------------------------------------*\ - - FILE........: golay23.c - AUTHOR......: Robert Morelos-Zaragoza & David Rowe - DATE CREATED: 3 March 2013 - - To test: - - src$ gcc golay23.c -o golay23 -Wall -DGOLAY23_UNITTEST - src$ ./golay23 - -\*---------------------------------------------------------------------------*/ - -/* File: golay23.c - * Title: Encoder/decoder for a binary (23,12,7) Golay code - * Author: Robert Morelos-Zaragoza (robert@spectra.eng.hawaii.edu) - * Date: August 1994 - * - * The binary (23,12,7) Golay code is an example of a perfect code, that is, - * the number of syndromes equals the number of correctable error patterns. - * The minimum distance is 7, so all error patterns of Hamming weight up to - * 3 can be corrected. The total number of these error patterns is: - * - * Number of errors Number of patterns - * ---------------- ------------------ - * 0 1 - * 1 23 - * 2 253 - * 3 1771 - * ---- - * Total number of error patterns = 2048 = 2^{11} = number of syndromes - * -- - * number of redundant bits -------^ - * - * Because of its relatively low length (23), dimension (12) and number of - * redundant bits (11), the binary (23,12,7) Golay code can be encoded and - * decoded simply by using look-up tables. The program below uses a 16K - * encoding table and an 8K decoding table. - * - * For more information, suggestions, or other ideas on implementing error - * correcting codes, please contact me at (I'm temporarily in Japan, but - * below is my U.S. address): - * - * Robert Morelos-Zaragoza - * 770 S. Post Oak Ln. #200 - * Houston, Texas 77056 - * - * email: robert@spectra.eng.hawaii.edu - * - * Homework: Add an overall parity-check bit to get the (24,12,8) - * extended Golay code. - * - * COPYRIGHT NOTICE: This computer program is free for non-commercial purposes. - * You may implement this program for any non-commercial application. You may - * also implement this program for commercial purposes, provided that you - * obtain my written permission. Any modification of this program is covered - * by this copyright. - * - * == Copyright (c) 1994 Robert Morelos-Zaragoza. All rights reserved. == - */ - -#include "golay23.h" - -#include -#include -#include -#define X22 0x00400000 /* vector representation of X^{22} */ -#define X11 0x00000800 /* vector representation of X^{11} */ -#define MASK12 0xfffff800 /* auxiliary vector for testing */ -#define GENPOL 0x00000c75 /* generator polinomial, g(x) */ - -/* Global variables: - * - * pattern = error pattern, or information, or received vector - * encoding_table[] = encoding table - * decoding_table[] = decoding table - * data = information bits, i(x) - * codeword = code bits = x^{11}i(x) + (x^{11}i(x) mod g(x)) - * numerr = number of errors = Hamming weight of error polynomial e(x) - * position[] = error positions in the vector representation of e(x) - * recd = representation of corrupted received polynomial r(x) = c(x) + e(x) - * decerror = number of decoding errors - * a[] = auxiliary array to generate correctable error patterns - */ - -static int inited = 0; - -static int encoding_table[4096], decoding_table[2048]; -#ifdef GOLAY23_UNITTEST -static int position[23] = { 0x00000001, 0x00000002, 0x00000004, 0x00000008, - 0x00000010, 0x00000020, 0x00000040, 0x00000080, - 0x00000100, 0x00000200, 0x00000400, 0x00000800, - 0x00001000, 0x00002000, 0x00004000, 0x00008000, - 0x00010000, 0x00020000, 0x00040000, 0x00080000, - 0x00100000, 0x00200000, 0x00400000 }; -#endif -static int arr2int(int a[], int r) -/* - * Convert a binary vector of Hamming weight r, and nonzero positions in - * array a[1]...a[r], to a long integer \sum_{i=1}^r 2^{a[i]-1}. - */ -{ - int i; - long mul, result = 0, temp; - - for (i=1; i<=r; i++) { - mul = 1; - temp = a[i]-1; - while (temp--) - mul = mul << 1; - result += mul; - } - return(result); -} - -void nextcomb(int n, int r, int a[]) -/* - * Calculate next r-combination of an n-set. - */ -{ - int i, j; - - a[r]++; - if (a[r] <= n) - return; - j = r - 1; - while (a[j] == n - r + j) - j--; - for (i = r; i >= j; i--) - a[i] = a[j] + i - j + 1; - return; -} - -int get_syndrome(int pattern) -/* - * Compute the syndrome corresponding to the given pattern, i.e., the - * remainder after dividing the pattern (when considering it as the vector - * representation of a polynomial) by the generator polynomial, GENPOL. - * In the program this pattern has several meanings: (1) pattern = infomation - * bits, when constructing the encoding table; (2) pattern = error pattern, - * when constructing the decoding table; and (3) pattern = received vector, to - * obtain its syndrome in decoding. - */ -{ - int aux = X22; - - if (pattern >= X11) - while (pattern & MASK12) { - while (!(aux & pattern)) - aux = aux >> 1; - pattern ^= (aux/X11) * GENPOL; - } - return(pattern); -} - -/*---------------------------------------------------------------------------*\ - - FUNCTION....: golay23_init() - AUTHOR......: David Rowe - DATE CREATED: 3 March 2013 - - Call this once when you start your program to init the Golay tables. - -\*---------------------------------------------------------------------------*/ - -void golay23_init(void ) { - int i; - long temp; - int a[4]; - int pattern; - - /* - * --------------------------------------------------------------------- - * Generate ENCODING TABLE - * - * An entry to the table is an information vector, a 32-bit integer, - * whose 12 least significant positions are the information bits. The - * resulting value is a codeword in the (23,12,7) Golay code: A 32-bit - * integer whose 23 least significant bits are coded bits: Of these, the - * 12 most significant bits are information bits and the 11 least - * significant bits are redundant bits (systematic encoding). - * --------------------------------------------------------------------- - */ - for (pattern = 0; pattern < 4096; pattern++) { - temp = pattern << 11; /* multiply information by X^{11} */ - encoding_table[pattern] = temp + get_syndrome(temp);/* add redundancy */ - } - - /* - * --------------------------------------------------------------------- - * Generate DECODING TABLE - * - * An entry to the decoding table is a syndrome and the resulting value - * is the most likely error pattern. First an error pattern is generated. - * Then its syndrome is calculated and used as a pointer to the table - * where the error pattern value is stored. - * --------------------------------------------------------------------- - * - * (1) Error patterns of WEIGHT 1 (SINGLE ERRORS) - */ - decoding_table[0] = 0; - decoding_table[1] = 1; - temp = 1; - for (i=2; i<= 23; i++) { - temp *= 2; - decoding_table[get_syndrome(temp)] = temp; - } - /* - * (2) Error patterns of WEIGHT 2 (DOUBLE ERRORS) - */ - a[1] = 1; a[2] = 2; - temp = arr2int(a,2); - decoding_table[get_syndrome(temp)] = temp; - for (i=1; i<253; i++) { - nextcomb(23,2,a); - temp = arr2int(a,2); - decoding_table[get_syndrome(temp)] = temp; - } - /* - * (3) Error patterns of WEIGHT 3 (TRIPLE ERRORS) - */ - a[1] = 1; a[2] = 2; a[3] = 3; - temp = arr2int(a,3); - decoding_table[get_syndrome(temp)] = temp; - for (i=1; i<1771; i++) { - nextcomb(23,3,a); - temp = arr2int(a,3); - decoding_table[get_syndrome(temp)] = temp; - } - - inited = 1; -} - -/*---------------------------------------------------------------------------*\ - - FUNCTION....: golay23_encode() - AUTHOR......: David Rowe - DATE CREATED: 3 March 2013 - - Given 12 bits of data retiurns a 23 bit codeword for transmission - over the channel. - -\*---------------------------------------------------------------------------*/ - -int golay23_encode(int data) { - assert(inited); - - //printf("data: 0x%x\n", data); - assert(data <= 0xfff); - return encoding_table[data]; -} - -/*---------------------------------------------------------------------------*\ - - FUNCTION....: golay23_decode() - AUTHOR......: David Rowe - DATE CREATED: 3 March 2013 - - Given a 23 bit received codeword, returns the 12 bit corrected data. - -\*---------------------------------------------------------------------------*/ - -int golay23_decode(int received_codeword) { - assert(inited); - - //printf("syndrome: 0x%x\n", get_syndrome(received_codeword)); - return received_codeword ^= decoding_table[get_syndrome(received_codeword)]; -} - -int golay23_count_errors(int recd_codeword, int corrected_codeword) -{ - int errors = 0; - int diff, i; - - diff = recd_codeword ^ corrected_codeword; - for(i=0; i<23; i++) { - if (diff & 0x1) - errors++; - diff >>= 1; - } - - return errors; -} - -#ifdef GOLAY23_UNITTEST - -static int golay23_test(int error_pattern) { - int data; - int codeword; - int recd; - int pattern; - int decerror; - int i, tests; - - decerror = 0; - tests = 0; - - for (data = 0; data<(1<<12); data++) { - - codeword = golay23_encode(data); - recd = codeword ^ error_pattern; - recd = golay23_decode(recd); - pattern = (recd ^ codeword) >> 11; - for (i=0; i<12; i++) - if (pattern & position[i]) - decerror++; - if (decerror) { - printf("data: 0x%x codeword: 0x%x recd: 0x%x\n", data, codeword, recd); - printf("there were %d decoding errors\n", decerror); - exit(1); - } - tests++; - } - - return tests; -} - -int main(void) -{ - int i; - long temp; - long pattern; - int tests; - int a[4]; - int error_pattern; - - /* - * --------------------------------------------------------------------- - * Generate ENCODING TABLE - * - * An entry to the table is an information vector, a 32-bit integer, - * whose 12 least significant positions are the information bits. The - * resulting value is a codeword in the (23,12,7) Golay code: A 32-bit - * integer whose 23 least significant bits are coded bits: Of these, the - * 12 most significant bits are information bits and the 11 least - * significant bits are redundant bits (systematic encoding). - * --------------------------------------------------------------------- - */ - for (pattern = 0; pattern < 4096; pattern++) { - temp = pattern << 11; /* multiply information by X^{11} */ - encoding_table[pattern] = temp + get_syndrome(temp);/* add redundancy */ - } - - /* - * --------------------------------------------------------------------- - * Generate DECODING TABLE - * - * An entry to the decoding table is a syndrome and the resulting value - * is the most likely error pattern. First an error pattern is generated. - * Then its syndrome is calculated and used as a pointer to the table - * where the error pattern value is stored. - * --------------------------------------------------------------------- - * - * (1) Error patterns of WEIGHT 1 (SINGLE ERRORS) - */ - decoding_table[0] = 0; - decoding_table[1] = 1; - temp = 1; - for (i=2; i<= 23; i++) { - temp *= 2; - decoding_table[get_syndrome(temp)] = temp; - } - /* - * (2) Error patterns of WEIGHT 2 (DOUBLE ERRORS) - */ - a[1] = 1; a[2] = 2; - temp = arr2int(a,2); - decoding_table[get_syndrome(temp)] = temp; - for (i=1; i<253; i++) { - nextcomb(23,2,a); - temp = arr2int(a,2); - decoding_table[get_syndrome(temp)] = temp; - } - /* - * (3) Error patterns of WEIGHT 3 (TRIPLE ERRORS) - */ - a[1] = 1; a[2] = 2; a[3] = 3; - temp = arr2int(a,3); - decoding_table[get_syndrome(temp)] = temp; - for (i=1; i<1771; i++) { - nextcomb(23,3,a); - temp = arr2int(a,3); - decoding_table[get_syndrome(temp)] = temp; - } - - /* --------------------------------------------------------------------- - * Generate DATA - * --------------------------------------------------------------------- - */ - - /* Test all combinations of data and 1,2 or 3 errors */ - - tests = 0; - error_pattern = 1; - for (i=0; i< 23; i++) { - //printf("error_pattern: 0x%x\n", error_pattern); - tests += golay23_test(error_pattern); - error_pattern *= 2; - } - printf("%d 1 bit error tests performed OK!\n", tests); - - tests = 0; - a[1] = 1; a[2] = 2; - error_pattern = arr2int(a,2); - tests += golay23_test(error_pattern); - for (i=1; i<253; i++) { - nextcomb(23,2,a); - error_pattern = arr2int(a,2); - //printf("error_pattern: 0x%x\n", error_pattern); - tests += golay23_test(error_pattern); - } - printf("%d 2 bit error tests performed OK!\n", tests); - - tests = 0; - a[1] = 1; a[2] = 2; a[3] = 3; - error_pattern = arr2int(a,3); - tests += golay23_test(error_pattern); - for (i=1; i<1771; i++) { - nextcomb(23,3,a); - error_pattern = arr2int(a,3); - //printf("error_pattern: 0x%x\n", error_pattern); - tests += golay23_test(error_pattern); - } - printf("%d 3 bit error tests performed OK!\n", tests); - - return 0; -} -#endif diff --git a/rfmodem/golay23.h b/rfmodem/golay23.h deleted file mode 100644 index a916d29f..00000000 --- a/rfmodem/golay23.h +++ /dev/null @@ -1,44 +0,0 @@ -/*---------------------------------------------------------------------------*\ - - FILE........: golay23.h - AUTHOR......: David Rowe - DATE CREATED: 3 March 2013 - - Header file for Golay FEC. - -\*---------------------------------------------------------------------------*/ - -/* - Copyright (C) 2013 David Rowe - - All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License version 2.1, as - published by the Free Software Foundation. This program 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 General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . -*/ - -#ifndef __GOLAY23__ -#define __GOLAY23__ - -#ifdef __cplusplus -extern "C" { -#endif - -void golay23_init(void); -int golay23_encode(int data); -int golay23_decode(int received_codeword); -int golay23_count_errors(int recd_codeword, int corrected_codeword); - -#ifdef __cplusplus -} -#endif - -#endif -- 2.25.1