C-Netz: Add low pass filter to eliminate high frequency noise
This improves the FSK decoding quite allot, especially with SDR.
This commit is contained in:
@@ -88,6 +88,7 @@ typedef struct cnetz {
|
|||||||
|
|
||||||
/* dsp states */
|
/* dsp states */
|
||||||
enum dsp_mode dsp_mode; /* current mode: audio, "Telegramm", .... */
|
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 */
|
fsk_fm_demod_t fsk_demod; /* demod process */
|
||||||
double fsk_deviation; /* deviation of FSK signal on sound card */
|
double fsk_deviation; /* deviation of FSK signal on sound card */
|
||||||
sample_t fsk_ramp_up[256]; /* samples of upward ramp shape */
|
sample_t fsk_ramp_up[256]; /* samples of upward ramp shape */
|
||||||
|
@@ -44,7 +44,7 @@ extern int voice_deviation;
|
|||||||
#define PI M_PI
|
#define PI M_PI
|
||||||
|
|
||||||
#define MAX_DEVIATION 4000.0
|
#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 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 COMPANDOR_0DB 1.0 /* A level of 0dBm (1.0) shall be unaccected */
|
||||||
#define FSK_DEVIATION (2500.0 / DBM0_DEVIATION) /* no emphasis */
|
#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;
|
cnetz->fsk_deviation = FSK_DEVIATION;
|
||||||
dsp_init_ramp(cnetz);
|
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 */
|
/* 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 */
|
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) {
|
if (!cnetz->dsp_speech_buffer) {
|
||||||
@@ -582,8 +585,10 @@ void sender_receive(sender_t *sender, sample_t *samples, int length)
|
|||||||
return;
|
return;
|
||||||
#endif
|
#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);
|
fsk_fm_demod(&cnetz->fsk_demod, samples, length);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user