#ifndef _INCLUDE_CONSTANTS_H_ #define _INCLUDE_CONSTANTS_H_ #include #ifdef __cplusplus extern "C" { #endif #define FT8_SYMBOL_PERIOD (0.160f) ///< FT8 symbol duration, defines tone deviation in Hz and symbol rate #define FT8_SLOT_TIME (15.0f) ///< FT8 slot period #define FT4_SYMBOL_PERIOD (0.048f) ///< FT4 symbol duration, defines tone deviation in Hz and symbol rate #define FT4_SLOT_TIME (7.5f) ///< FT4 slot period // Define FT8 symbol counts // FT8 message structure: // S D1 S D2 S // S - sync block (7 symbols of Costas pattern) // D1 - first data block (29 symbols each encoding 3 bits) #define FT8_ND (58) ///< Data symbols #define FT8_NN (79) ///< Total channel symbols (FT8_NS + FT8_ND) #define FT8_LENGTH_SYNC (7) ///< Length of each sync group #define FT8_NUM_SYNC (3) ///< Number of sync groups #define FT8_SYNC_OFFSET (36) ///< Offset between sync groups // Define FT4 symbol counts // FT4 message structure: // R Sa D1 Sb D2 Sc D3 Sd R // R - ramping symbol (no payload information conveyed) // Sx - one of four _different_ sync blocks (4 symbols of Costas pattern) // Dy - data block (29 symbols each encoding 2 bits) #define FT4_ND (87) ///< Data symbols #define FT4_NR (2) ///< Ramp symbols (beginning + end) #define FT4_NN (105) ///< Total channel symbols (FT4_NS + FT4_ND + FT4_NR) #define FT4_LENGTH_SYNC (4) ///< Length of each sync group #define FT4_NUM_SYNC (4) ///< Number of sync groups #define FT4_SYNC_OFFSET (33) ///< Offset between sync groups // Define LDPC parameters #define FTX_LDPC_N (174) ///< Number of bits in the encoded message (payload with LDPC checksum bits) #define FTX_LDPC_K (91) ///< Number of payload bits (including CRC) #define FTX_LDPC_M (83) ///< Number of LDPC checksum bits (FTX_LDPC_N - FTX_LDPC_K) #define FTX_LDPC_N_BYTES ((FTX_LDPC_N + 7) / 8) ///< Number of whole bytes needed to store 174 bits (full message) #define FTX_LDPC_K_BYTES ((FTX_LDPC_K + 7) / 8) ///< Number of whole bytes needed to store 91 bits (payload + CRC only) // Define CRC parameters #define FT8_CRC_POLYNOMIAL ((uint16_t)0x2757u) ///< CRC-14 polynomial without the leading (MSB) 1 #define FT8_CRC_WIDTH (14) typedef enum { FTX_PROTOCOL_FT4, FTX_PROTOCOL_FT8 } ftx_protocol_t; /// Costas 7x7 tone pattern for synchronization extern const uint8_t kFT8_Costas_pattern[7]; extern const uint8_t kFT4_Costas_pattern[4][4]; /// Gray code map to encode 8 symbols (tones) extern const uint8_t kFT8_Gray_map[8]; extern const uint8_t kFT4_Gray_map[4]; extern const uint8_t kFT4_XOR_sequence[10]; /// Parity generator matrix for (174,91) LDPC code, stored in bitpacked format (MSB first) extern const uint8_t kFTX_LDPC_generator[FTX_LDPC_M][FTX_LDPC_K_BYTES]; /// LDPC(174,91) parity check matrix, containing 83 rows, /// each row describes one parity check, /// each number is an index into the codeword (1-origin). /// The codeword bits mentioned in each row must xor to zero. /// From WSJT-X's ldpc_174_91_c_reordered_parity.f90. extern const uint8_t kFTX_LDPC_Nm[FTX_LDPC_M][7]; /// Mn from WSJT-X's bpdecode174.f90. Each row corresponds to a codeword bit. /// The numbers indicate which three parity checks (rows in Nm) refer to the codeword bit. /// The numbers use 1 as the origin (first entry). extern const uint8_t kFTX_LDPC_Mn[FTX_LDPC_N][3]; /// Number of rows (columns in C/C++) in the array Nm. extern const uint8_t kFTX_LDPC_Num_rows[FTX_LDPC_M]; #ifdef __cplusplus } #endif #endif // _INCLUDE_CONSTANTS_H_