aboutsummaryrefslogtreecommitdiffstats
path: root/src/bnetz
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2017-09-25 18:46:50 +0200
committerAndreas Eversberg <jolly@eversberg.eu>2017-10-12 19:46:30 +0200
commitba036de22680c5f46983f30144c23d212245842f (patch)
treef511133326644feb457810c524a2ff317aa945c3 /src/bnetz
parente84d7a082c20b591a06fdfd38ccdbe458e276631 (diff)
Add function to display measurements on screen
Use 'm' key to toggle display.
Diffstat (limited to 'src/bnetz')
-rw-r--r--src/bnetz/bnetz.c6
-rw-r--r--src/bnetz/bnetz.h7
-rw-r--r--src/bnetz/dsp.c27
3 files changed, 31 insertions, 9 deletions
diff --git a/src/bnetz/bnetz.c b/src/bnetz/bnetz.c
index d9ccf3d..fc09893 100644
--- a/src/bnetz/bnetz.c
+++ b/src/bnetz/bnetz.c
@@ -445,16 +445,16 @@ void bnetz_receive_tone(bnetz_t *bnetz, int bit)
}
/* A digit was received. */
-void bnetz_receive_telegramm(bnetz_t *bnetz, uint16_t telegramm, double level_avg, double level_dev, double quality_avg)
+void bnetz_receive_telegramm(bnetz_t *bnetz, uint16_t telegramm, double level_avg, double level_stddev, double quality_avg)
{
struct impulstelegramm *it;
int digit = 0;
/* drop any telegramm that is too bad */
- if (level_dev / level_avg > 0.2)
+ if (level_stddev / level_avg > 0.2)
return;
- PDEBUG_CHAN(DDSP, DEBUG_INFO, "RX Level: average=%.0f%% deviation=%.0f%% Quality: %.0f%%\n", level_avg * 100.0, level_dev / level_avg * 100.0, quality_avg * 100.0);
+ PDEBUG_CHAN(DDSP, DEBUG_INFO, "RX Level: average=%.0f%% standard deviation=%.0f%% Quality: %.0f%%\n", level_avg * 100.0, level_stddev / level_avg * 100.0, quality_avg * 100.0);
it = bnetz_telegramm2digit(telegramm);
if (it) {
diff --git a/src/bnetz/bnetz.h b/src/bnetz/bnetz.h
index 8f6cd64..608f067 100644
--- a/src/bnetz/bnetz.h
+++ b/src/bnetz/bnetz.h
@@ -75,6 +75,13 @@ typedef struct bnetz {
struct timer timer;
int trenn_count; /* count number of release messages */
+ /* display measurements */
+ dispmeasparam_t *dmp_tone_level;
+ dispmeasparam_t *dmp_tone_quality;
+ dispmeasparam_t *dmp_frame_level;
+ dispmeasparam_t *dmp_frame_stddev;
+ dispmeasparam_t *dmp_frame_quality;
+
/* dsp states */
enum dsp_mode dsp_mode; /* current mode: audio, durable tone 0 or 1, "Telegramm" */
fsk_t fsk; /* fsk modem instance */
diff --git a/src/bnetz/dsp.c b/src/bnetz/dsp.c
index e8b4a2d..8d830be 100644
--- a/src/bnetz/dsp.c
+++ b/src/bnetz/dsp.c
@@ -112,6 +112,12 @@ int dsp_init_sender(bnetz_t *bnetz)
bnetz->meter_phaseshift65536 = 65536.0 / ((double)bnetz->sender.samplerate / METERING_HZ);
PDEBUG(DDSP, DEBUG_DEBUG, "dial_phaseshift = %.4f\n", bnetz->meter_phaseshift65536);
+ bnetz->dmp_tone_level = display_measurements_add(&bnetz->sender, "Tone Level", "%.1f %%", DISPLAY_MEAS_LAST, DISPLAY_MEAS_LEFT, 0.0, 150.0, 100.0);
+ bnetz->dmp_tone_quality = display_measurements_add(&bnetz->sender, "Tone Quality", "%.1f %%", DISPLAY_MEAS_LAST, DISPLAY_MEAS_LEFT, 0.0, 100.0, 100.0);
+ bnetz->dmp_frame_level = display_measurements_add(&bnetz->sender, "Frame Level", "%.1f %% (last)", DISPLAY_MEAS_LAST, DISPLAY_MEAS_LEFT, 0.0, 150.0, 100.0);
+ bnetz->dmp_frame_stddev = display_measurements_add(&bnetz->sender, "Frame Stddev", "%.1f %% (last)", DISPLAY_MEAS_LAST, DISPLAY_MEAS_LEFT, 0.0, 100.0, 100.0);
+ bnetz->dmp_frame_quality = display_measurements_add(&bnetz->sender, "Frame Quality", "%.1f %% (last)", DISPLAY_MEAS_LAST, DISPLAY_MEAS_LEFT, 0.0, 100.0, 100.0);
+
return 0;
}
@@ -161,13 +167,17 @@ static void fsk_receive_tone(bnetz_t *bnetz, int bit, int goodtone, double level
/* Collect 16 data bits (digit) and check for sync mark '01110'. */
static void fsk_receive_bit(void *inst, int bit, double quality, double level)
{
- double level_avg, level_dev, quality_avg;
+ double level_avg, level_stddev, quality_avg;
bnetz_t *bnetz = (bnetz_t *)inst;
int i;
/* normalize FSK level */
level /= TX_PEAK_FSK;
+ /* update measurements */
+ display_measurements_update(bnetz->dmp_tone_level, level * 100.0 , 0.0);
+ display_measurements_update(bnetz->dmp_tone_quality, quality * 100.0, 0.0);
+
/* continuous tone detection */
if (level > 0.10 && quality > 0.10) {
fsk_receive_tone(bnetz, bit, 1, level, quality);
@@ -188,7 +198,7 @@ static void fsk_receive_bit(void *inst, int bit, double quality, double level)
return;
/* average level and quality */
- level_avg = level_dev = quality_avg = 0;
+ level_avg = level_stddev = quality_avg = 0;
for (i = 0; i < 16; i++) {
level_avg += bnetz->rx_telegramm_level[bnetz->rx_telegramm_qualidx];
quality_avg += bnetz->rx_telegramm_quality[bnetz->rx_telegramm_qualidx];
@@ -198,14 +208,19 @@ static void fsk_receive_bit(void *inst, int bit, double quality, double level)
level_avg /= 16.0; quality_avg /= 16.0;
for (i = 0; i < 16; i++) {
level = bnetz->rx_telegramm_level[bnetz->rx_telegramm_qualidx];
- level_dev += (level - level_avg) * (level - level_avg);
+ level_stddev += (level - level_avg) * (level - level_avg);
if (++bnetz->rx_telegramm_qualidx == 16)
bnetz->rx_telegramm_qualidx = 0;
}
- level_dev = sqrt(level_dev / 16.0);
+ level_stddev = sqrt(level_stddev / 16.0);
+
+ /* update measurements */
+ display_measurements_update(bnetz->dmp_frame_level, level_avg * 100.0 , 0.0);
+ display_measurements_update(bnetz->dmp_frame_stddev, level_stddev / level_avg * 100.0, 0.0);
+ display_measurements_update(bnetz->dmp_frame_quality, quality_avg * 100.0, 0.0);
- /* send telegramm */
- bnetz_receive_telegramm(bnetz, bnetz->rx_telegramm, level_avg, level_dev, quality_avg);
+ /* receive telegramm */
+ bnetz_receive_telegramm(bnetz, bnetz->rx_telegramm, level_avg, level_stddev, quality_avg);
}
/* Process received audio stream from radio unit. */