From e484814c0ab0f9765a208ce6c1e3ba9cfe51ab72 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Wed, 3 Aug 2016 12:02:15 +0200 Subject: [PATCH] C-Netz: Add hack to increase voice deviation for some newer phone --- src/cnetz/dsp.c | 17 ++++++++++++++++- src/cnetz/main.c | 11 ++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/cnetz/dsp.c b/src/cnetz/dsp.c index cab2030..e2be69c 100644 --- a/src/cnetz/dsp.c +++ b/src/cnetz/dsp.c @@ -33,6 +33,8 @@ #include "telegramm.h" #include "dsp.h" +extern int voice_deviation; + /* test function to mirror received audio from ratio back to radio */ //#define TEST_SCRAMBLE /* test the audio quality after cascading two scramblers (TEST_SCRAMBLE must be defined) */ @@ -721,6 +723,18 @@ again: /* pre-emphasis is only used when scrambler is off, see FTZ 171 TR 60 Clause 4 */ if (cnetz->pre_emphasis && !cnetz->scrambler) pre_emphasis(&cnetz->estate, speech_buffer, speech_length); + /* change level */ + if (voice_deviation != 1) { + int sample, j; + for (j = 0; j < speech_length; j++) { + sample = speech_buffer[j] * voice_deviation; + if (sample > 32767) + sample = 32767; + if (sample < -32768) + sample = -32768; + speech_buffer[j] = sample; + } + } speech_pos = 0; } /* copy speech as long as we have something left in buffer */ @@ -791,7 +805,8 @@ void unshrink_speech(cnetz_t *cnetz, int16_t *speech_buffer, int count) y_last = cnetz->offset_y_last; factor = cnetz->offset_factor; for (i = 0; i < count; i++) { - x = (double)speech_buffer[i]; + /* change level */ + x = (double)speech_buffer[i] / voice_deviation; /* high-pass to remove low level frequencies, caused by level jump between audio chunks */ y = factor * (y_last + x - x_last); x_last = x; diff --git a/src/cnetz/main.c b/src/cnetz/main.c index d6fed8e..fa64476 100644 --- a/src/cnetz/main.c +++ b/src/cnetz/main.c @@ -49,6 +49,7 @@ const char *flip_polarity = "auto"; double noise = 0.0; int ms_power = 0; /* 0..3 */ int auth = 0; +int voice_deviation = 1; void print_help(const char *arg0) { @@ -79,6 +80,9 @@ void print_help(const char *arg0) printf(" Enable authentication on the base station. Since we cannot\n"); printf(" authenticate, because we don't know the secret key and the algorithm,\n"); printf(" we just accept any card. With this we get the vendor IDs of the phone.\n"); + printf(" -V --voice-deviation\n"); + printf(" For some unknown reason, Siemens C5 use double deviation for voice.\n"); + printf(" This option raises audio level on TX and lowers on RX.\n"); printf("\nstation-id: Give 7 digit station-id, you don't need to enter it for every\n"); printf(" start of this program.\n"); printf("\nPress 'i' key for dumping currently attached subscribers.\n"); @@ -98,10 +102,11 @@ static int handle_options(int argc, char **argv) {"noise", 1, 0, 'N'}, {"ms-power", 1, 0, 'P'}, {"authentication", 0, 0, 'A'}, + {"voice-deviation", 0, 0, 'V'}, {0, 0, 0, 0} }; - set_options_common("t:MS:F:N:P:A", long_options_special); + set_options_common("t:MS:F:N:P:AV", long_options_special); while (1) { int option_index = 0, c; @@ -169,6 +174,10 @@ static int handle_options(int argc, char **argv) auth = 1; skip_args += 1; break; + case 'V': + voice_deviation = 2; + skip_args += 1; + break; default: opt_switch_common(c, argv[0], &skip_args); }