diff options
Diffstat (limited to 'src/modem_stats.h')
| -rw-r--r-- | src/modem_stats.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/modem_stats.h b/src/modem_stats.h new file mode 100644 index 0000000..fbc80f7 --- /dev/null +++ b/src/modem_stats.h @@ -0,0 +1,89 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: modem_stats.h + AUTHOR......: David Rowe + DATE CREATED: June 2015 + + Common structure for returning demod stats from fdmdv and cohpsk modems. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 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 <http://www.gnu.org/licenses/>. +*/ + +#ifndef __MODEM_STATS__ +#define __MODEM_STATS__ + +#include "comp.h" + +#ifdef __cplusplus + extern "C" { +#endif + +#define MODEM_STATS_NC_MAX 50 +#define MODEM_STATS_NR_MAX 320 +#define MODEM_STATS_ET_MAX 8 +#define MODEM_STATS_EYE_IND_MAX 160 +#define MODEM_STATS_NSPEC 512 +#define MODEM_STATS_MAX_F_HZ 4000 +#define MODEM_STATS_MAX_F_EST 4 + +struct MODEM_STATS { + int Nc; + float snr_est; /* estimated SNR of rx signal in dB (3 kHz noise BW) */ +#ifndef __EMBEDDED__ + COMP rx_symbols[MODEM_STATS_NR_MAX][MODEM_STATS_NC_MAX+1]; + /* latest received symbols, for scatter plot */ +#endif + int nr; /* number of rows in rx_symbols */ + int sync; /* demod sync state */ + float foff; /* estimated freq offset in Hz */ + float rx_timing; /* estimated optimum timing offset in samples */ + float clock_offset; /* Estimated tx/rx sample clock offset in ppm */ + float sync_metric; /* number between 0 and 1 indicating quality of sync */ + int pre, post; /* preamble/postamble det counters for burst data */ + int uw_fails; /* Failed to detect Unique word (burst data) */ + + /* FSK eye diagram traces */ + /* Eye diagram plot -- first dim is trace number, second is the trace idx */ +#ifndef __EMBEDDED__ + float rx_eye[MODEM_STATS_ET_MAX][MODEM_STATS_EYE_IND_MAX]; + int neyetr; /* How many eye traces are plotted */ + int neyesamp; /* How many samples in the eye diagram */ + + /* optional for FSK modems - est tone freqs */ + + float f_est[MODEM_STATS_MAX_F_EST]; +#endif + + /* Buf for FFT/waterfall */ + +#ifndef __EMBEDDED__ + float fft_buf[2*MODEM_STATS_NSPEC]; + void *fft_cfg; +#endif +}; + +void modem_stats_open(struct MODEM_STATS *f); +void modem_stats_close(struct MODEM_STATS *f); +void modem_stats_get_rx_spectrum(struct MODEM_STATS *f, float mag_spec_dB[], COMP rx_fdm[], int nin); + +#ifdef __cplusplus +} +#endif + +#endif |
