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:
parent
290b365d67
commit
4de1e0188d
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue