From b86e88413d4c6ec428aaedb147f7675f28882fe4 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Fri, 14 Jul 2023 12:36:50 +0930 Subject: clang-format -i applied to src unittest misc --- src/fdmdv_demod.c | 380 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 194 insertions(+), 186 deletions(-) (limited to 'src/fdmdv_demod.c') diff --git a/src/fdmdv_demod.c b/src/fdmdv_demod.c index c671cd9..e3ef8a7 100644 --- a/src/fdmdv_demod.c +++ b/src/fdmdv_demod.c @@ -15,7 +15,6 @@ \*---------------------------------------------------------------------------*/ - /* Copyright (C) 2012 David Rowe @@ -34,216 +33,225 @@ */ #include +#include +#include #include #include #include -#include -#include #include "codec2_fdmdv.h" -#include "octave.h" -#include "freedv_api.h" - #include "debug_alloc.h" +#include "freedv_api.h" +#include "octave.h" /* lof of information we want to dump to Octave */ -#define MAX_FRAMES 50*60 /* 1 minute at 50 symbols/s */ - -int main(int argc, char *argv[]) -{ - FILE *fin, *fout; - struct FDMDV *fdmdv; - char *packed_bits; - int *rx_bits; - int *codec_bits; - COMP rx_fdm[FDMDV_MAX_SAMPLES_PER_FRAME]; - short rx_fdm_scaled[FDMDV_MAX_SAMPLES_PER_FRAME]; - int i, bit, byte, c; - int nin, nin_prev; - int sync_bit = 0, reliable_sync_bit; - int sync = 0; - int f; - FILE *foct = NULL; - struct MODEM_STATS stats; - COMP *rx_fdm_log; - int rx_fdm_log_col_index; - COMP *rx_symbols_log; - int sync_log[MAX_FRAMES]; - float rx_timing_log[MAX_FRAMES]; - float foff_log[MAX_FRAMES]; - int sync_bit_log[MAX_FRAMES]; - int rx_bits_log[FDMDV_BITS_PER_FRAME*MAX_FRAMES]; - float snr_est_log[MAX_FRAMES]; - float *rx_spec_log; - int max_frames_reached; - int bits_per_fdmdv_frame; - int bits_per_codec_frame; - int bytes_per_codec_frame; - int Nc; - - if (argc < 2) { - printf("usage: %s InputModemRawFile OutputBitFile [Nc [OctaveDumpFile]]\n", argv[0]); - printf("e.g %s hts1a_fdmdv.raw hts1a.c2\n", argv[0]); - exit(1); +#define MAX_FRAMES 50 * 60 /* 1 minute at 50 symbols/s */ + +int main(int argc, char *argv[]) { + FILE *fin, *fout; + struct FDMDV *fdmdv; + char *packed_bits; + int *rx_bits; + int *codec_bits; + COMP rx_fdm[FDMDV_MAX_SAMPLES_PER_FRAME]; + short rx_fdm_scaled[FDMDV_MAX_SAMPLES_PER_FRAME]; + int i, bit, byte, c; + int nin, nin_prev; + int sync_bit = 0, reliable_sync_bit; + int sync = 0; + int f; + FILE *foct = NULL; + struct MODEM_STATS stats; + COMP *rx_fdm_log; + int rx_fdm_log_col_index; + COMP *rx_symbols_log; + int sync_log[MAX_FRAMES]; + float rx_timing_log[MAX_FRAMES]; + float foff_log[MAX_FRAMES]; + int sync_bit_log[MAX_FRAMES]; + int rx_bits_log[FDMDV_BITS_PER_FRAME * MAX_FRAMES]; + float snr_est_log[MAX_FRAMES]; + float *rx_spec_log; + int max_frames_reached; + int bits_per_fdmdv_frame; + int bits_per_codec_frame; + int bytes_per_codec_frame; + int Nc; + + if (argc < 2) { + printf("usage: %s InputModemRawFile OutputBitFile [Nc [OctaveDumpFile]]\n", + argv[0]); + printf("e.g %s hts1a_fdmdv.raw hts1a.c2\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) + fin = stdin; + else if ((fin = fopen(argv[1], "rb")) == NULL) { + fprintf(stderr, "Error opening input modem sample file: %s: %s.\n", argv[1], + strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) + fout = stdout; + else if ((fout = fopen(argv[2], "wb")) == NULL) { + fprintf(stderr, "Error opening output bit file: %s: %s.\n", argv[2], + strerror(errno)); + exit(1); + } + + if (argc >= 4) { + Nc = atoi(argv[3]); + + if ((Nc < 2) || (Nc > FDMDV_NC_MAX)) { + fprintf(stderr, "Error number of carriers must be between 2 and %d\n", + FDMDV_NC_MAX); + exit(1); } - - if (strcmp(argv[1], "-") == 0) fin = stdin; - else if ( (fin = fopen(argv[1],"rb")) == NULL ) { - fprintf(stderr, "Error opening input modem sample file: %s: %s.\n", - argv[1], strerror(errno)); - exit(1); + } else + Nc = FDMDV_NC; + + fdmdv = fdmdv_create(Nc); + modem_stats_open(&stats); + + bits_per_fdmdv_frame = fdmdv_bits_per_frame(fdmdv); + bits_per_codec_frame = 2 * fdmdv_bits_per_frame(fdmdv); + bytes_per_codec_frame = (bits_per_codec_frame + 7) / 8; + + /* malloc some buffers that are dependent on Nc */ + + packed_bits = (char *)MALLOC(bytes_per_codec_frame); + assert(packed_bits != NULL); + rx_bits = (int *)MALLOC(sizeof(int) * bits_per_codec_frame); + assert(rx_bits != NULL); + codec_bits = (int *)MALLOC(2 * sizeof(int) * bits_per_fdmdv_frame); + assert(codec_bits != NULL); + + /* malloc some of the larger variables to prevent out of stack problems */ + + rx_fdm_log = + (COMP *)MALLOC(sizeof(COMP) * FDMDV_MAX_SAMPLES_PER_FRAME * MAX_FRAMES); + assert(rx_fdm_log != NULL); + rx_spec_log = (float *)MALLOC(sizeof(float) * MODEM_STATS_NSPEC * MAX_FRAMES); + assert(rx_spec_log != NULL); + rx_symbols_log = (COMP *)MALLOC(sizeof(COMP) * (Nc + 1) * MAX_FRAMES); + assert(rx_fdm_log != NULL); + + f = 0; + nin = FDMDV_NOM_SAMPLES_PER_FRAME; + rx_fdm_log_col_index = 0; + max_frames_reached = 0; + + while (fread(rx_fdm_scaled, sizeof(short), nin, fin) == nin) { + for (i = 0; i < nin; i++) { + rx_fdm[i].real = (float)rx_fdm_scaled[i] / FDMDV_SCALE; + rx_fdm[i].imag = 0; } + nin_prev = nin; + fdmdv_demod(fdmdv, rx_bits, &reliable_sync_bit, rx_fdm, &nin); - if (strcmp(argv[2], "-") == 0) fout = stdout; - else if ( (fout = fopen(argv[2],"wb")) == NULL ) { - fprintf(stderr, "Error opening output bit file: %s: %s.\n", - argv[2], strerror(errno)); - exit(1); - } - - if (argc >= 4) { - Nc = atoi(argv[3]); - - if ((Nc < 2) || (Nc > FDMDV_NC_MAX) ) { - fprintf(stderr, "Error number of carriers must be between 2 and %d\n", FDMDV_NC_MAX); - exit(1); - } - } - else - Nc = FDMDV_NC; - - fdmdv = fdmdv_create(Nc); - modem_stats_open(&stats); - - bits_per_fdmdv_frame = fdmdv_bits_per_frame(fdmdv); - bits_per_codec_frame = 2*fdmdv_bits_per_frame(fdmdv); - bytes_per_codec_frame = (bits_per_codec_frame+7)/8; + /* log data for optional Octave dump */ - /* malloc some buffers that are dependent on Nc */ + if (f < MAX_FRAMES) { + fdmdv_get_demod_stats(fdmdv, &stats); - packed_bits = (char*)MALLOC(bytes_per_codec_frame); assert(packed_bits != NULL); - rx_bits = (int*)MALLOC(sizeof(int)*bits_per_codec_frame); assert(rx_bits != NULL); - codec_bits = (int*)MALLOC(2*sizeof(int)*bits_per_fdmdv_frame); assert(codec_bits != NULL); + /* log modem states for later dumping to Octave log file */ - /* malloc some of the larger variables to prevent out of stack problems */ + memcpy(&rx_fdm_log[rx_fdm_log_col_index], rx_fdm, + sizeof(COMP) * nin_prev); + rx_fdm_log_col_index += nin_prev; - rx_fdm_log = (COMP*)MALLOC(sizeof(COMP)*FDMDV_MAX_SAMPLES_PER_FRAME*MAX_FRAMES); - assert(rx_fdm_log != NULL); - rx_spec_log = (float*)MALLOC(sizeof(float)*MODEM_STATS_NSPEC*MAX_FRAMES); - assert(rx_spec_log != NULL); - rx_symbols_log = (COMP*)MALLOC(sizeof(COMP)*(Nc+1)*MAX_FRAMES); - assert(rx_fdm_log != NULL); + for (c = 0; c < Nc + 1; c++) + rx_symbols_log[f * (Nc + 1) + c] = stats.rx_symbols[0][c]; + foff_log[f] = stats.foff; + rx_timing_log[f] = stats.rx_timing; + sync_log[f] = stats.sync; + sync_bit_log[f] = sync_bit; + memcpy(&rx_bits_log[bits_per_fdmdv_frame * f], rx_bits, + sizeof(int) * bits_per_fdmdv_frame); + snr_est_log[f] = stats.snr_est; - f = 0; - nin = FDMDV_NOM_SAMPLES_PER_FRAME; - rx_fdm_log_col_index = 0; - max_frames_reached = 0; + modem_stats_get_rx_spectrum(&stats, &rx_spec_log[f * MODEM_STATS_NSPEC], + rx_fdm, nin_prev); - while(fread(rx_fdm_scaled, sizeof(short), nin, fin) == nin) - { - for(i=0; i