common: Add pre and de emphasis, if the radio does not support it

Connect to the oscillator of the transmitter - good girl!
You need to enable pre emphasis in this case.

Connect to the discriminator of the receiver - good boy!
You need to enable de emphasis in this case.
This commit is contained in:
Andreas Eversberg
2016-04-23 18:50:11 +02:00
parent 5062628e52
commit 4356c93afa
20 changed files with 256 additions and 19 deletions

View File

@@ -32,13 +32,15 @@ sender_t *sender_head = NULL;
static sender_t **sender_tailp = &sender_head;
/* Init transceiver instance and link to list of transceivers. */
int sender_create(sender_t *sender, const char *sounddev, int samplerate, const char *write_wave, const char *read_wave, int kanal, int loopback, double loss_volume, int use_pilot_signal)
int sender_create(sender_t *sender, const char *sounddev, int samplerate, int pre_emphasis, int de_emphasis, const char *write_wave, const char *read_wave, int kanal, int loopback, double loss_volume, int use_pilot_signal)
{
int rc = 0;
PDEBUG(DSENDER, DEBUG_DEBUG, "Creating 'Sender' instance\n");
sender->samplerate = samplerate;
sender->pre_emphasis = pre_emphasis;
sender->de_emphasis = de_emphasis;
sender->kanal = kanal;
sender->loopback = loopback;
sender->loss_volume = loss_volume;
@@ -80,6 +82,10 @@ int sender_create(sender_t *sender, const char *sounddev, int samplerate, const
}
}
rc = init_emphasis(&sender->estate, samplerate);
if (rc < 0)
goto error;
*sender_tailp = sender;
sender_tailp = &sender->next;
@@ -151,6 +157,8 @@ void process_sender(sender_t *sender, int latspl)
jitter_load(&sender->audio, samples, count);
else
sender_send(sender, samples, count);
if (sender->pre_emphasis)
pre_emphasis(&sender->estate, samples, count);
switch (sender->use_pilot_signal) {
case 2:
/* tone if pilot signal is on */
@@ -201,6 +209,8 @@ void process_sender(sender_t *sender, int latspl)
return;
}
if (count) {
if (sender->de_emphasis)
de_emphasis(&sender->estate, samples, count);
if (sender->wave_play.fp)
wave_read(&sender->wave_play, samples, count);
if (sender->loopback != 1) {