From 4de1e0188d41c29477a5705e13dddea84a195e7b Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Sun, 12 Feb 2017 07:31:29 +0100 Subject: [PATCH] C-Netz: Add low pass filter to eliminate high frequency noise This improves the FSK decoding quite allot, especially with SDR. --- src/cnetz/cnetz.h | 1 + src/cnetz/dsp.c | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/cnetz/cnetz.h b/src/cnetz/cnetz.h index b5295fe..b9b434a 100644 --- a/src/cnetz/cnetz.h +++ b/src/cnetz/cnetz.h @@ -88,6 +88,7 @@ typedef struct cnetz { /* dsp states */ enum dsp_mode dsp_mode; /* current mode: audio, "Telegramm", .... */ + filter_t lp; /* low pass filter to eliminate noise above 5280 Hz */ fsk_fm_demod_t fsk_demod; /* demod process */ double fsk_deviation; /* deviation of FSK signal on sound card */ sample_t fsk_ramp_up[256]; /* samples of upward ramp shape */ diff --git a/src/cnetz/dsp.c b/src/cnetz/dsp.c index 84b6a30..8e7f291 100644 --- a/src/cnetz/dsp.c +++ b/src/cnetz/dsp.c @@ -44,7 +44,7 @@ extern int voice_deviation; #define PI M_PI #define MAX_DEVIATION 4000.0 -#define MAX_MODULATION 5280.0 +#define MAX_MODULATION 3000.0 #define DBM0_DEVIATION 4000.0 /* deviation of dBm0 at 1 kHz */ #define COMPANDOR_0DB 1.0 /* A level of 0dBm (1.0) shall be unaccected */ #define FSK_DEVIATION (2500.0 / DBM0_DEVIATION) /* no emphasis */ @@ -124,6 +124,9 @@ int dsp_init_sender(cnetz_t *cnetz, int measure_speed, double clock_speed[2]) cnetz->fsk_deviation = FSK_DEVIATION; dsp_init_ramp(cnetz); + /* init low pass filter for received signal */ + filter_lowpass_init(&cnetz->lp, MAX_MODULATION, cnetz->sender.samplerate, 2); + /* create speech buffer */ cnetz->dsp_speech_buffer = calloc(sizeof(sample_t), cnetz->sender.samplerate); /* buffer is greater than sr/1.1, just to be secure */ if (!cnetz->dsp_speech_buffer) { @@ -582,8 +585,10 @@ void sender_receive(sender_t *sender, sample_t *samples, int length) return; #endif - if (cnetz->dsp_mode != DSP_MODE_OFF) + if (cnetz->dsp_mode != DSP_MODE_OFF) { + filter_process(&cnetz->lp, samples, length); fsk_fm_demod(&cnetz->fsk_demod, samples, length); + } return; }