Refactor global variables for signal processing

These are:
	device, sample rate, buffer, latency
Called now:
	dsp_device, dsp_samplerate, dsp_buffer, dsp_latency
Call audio device:
	call_device, call_samplerate, call_buffer
This commit is contained in:
Andreas Eversberg
2021-09-18 11:43:01 +02:00
parent de685b3cb6
commit 6fa74a1296
57 changed files with 379 additions and 368 deletions

View File

@@ -48,8 +48,8 @@ int fast_math = 0;
void *get_sender_by_empfangsfrequenz() { return NULL; }
static double frequency = 0.0;
static int samplerate = 100000;
static int latency = 30;
static int dsp_samplerate = 100000;
static int dsp_buffer = 30;
static const char *tx_wave_file = NULL;
static const char *rx_wave_file = NULL;
static const char *tx_audiodev = NULL;
@@ -114,7 +114,7 @@ void print_help(const char *arg0)
printf(" -f --frequency <frequency>\n");
printf(" Give frequency in Hertz.\n");
printf(" -s --samplerate <sample rate>\n");
printf(" Give signal processing sample rate in Hz. (default = %d)\n", samplerate);
printf(" Give signal processing sample rate in Hz. (default = %d)\n", dsp_samplerate);
printf(" This sample rate must be high enough for the signal's spectrum to fit.\n");
printf(" I will inform you, if this bandwidth is too low.\n");
printf(" -r --tx-wave-file <filename>\n");
@@ -194,7 +194,7 @@ static int handle_options(int short_option, int argi, char **argv)
frequency = atof(argv[argi]);
break;
case 's':
samplerate = atof(argv[argi]);
dsp_samplerate = atof(argv[argi]);
break;
case 'r':
tx_wave_file = options_strdup(argv[argi]);
@@ -297,7 +297,7 @@ int main(int argc, char *argv[])
radio_t radio;
struct termios term, term_orig;
int c;
int latspl;
int buffer_size;
debuglevel = 0;
@@ -322,7 +322,7 @@ int main(int argc, char *argv[])
fm_init(fast_math);
am_init(fast_math);
rc = sdr_configure(samplerate);
rc = sdr_configure(dsp_samplerate);
if (rc < 0)
return rc;
if (rc == 0) {
@@ -358,10 +358,10 @@ int main(int argc, char *argv[])
exit(0);
}
/* now we have latency and sample rate */
latspl = samplerate * latency / 1000;
/* now we have buffer size and sample rate */
buffer_size = dsp_samplerate * dsp_buffer / 1000;
rc = radio_init(&radio, latspl, samplerate, frequency, tx_wave_file, rx_wave_file, (tx) ? tx_audiodev : NULL, (rx) ? rx_audiodev : NULL, modulation, bandwidth, deviation, modulation_index, time_constant_us, volume, stereo, rds, rds2);
rc = radio_init(&radio, buffer_size, dsp_samplerate, frequency, tx_wave_file, rx_wave_file, (tx) ? tx_audiodev : NULL, (rx) ? rx_audiodev : NULL, modulation, bandwidth, deviation, modulation_index, time_constant_us, volume, stereo, rds, rds2);
if (rc < 0) {
fprintf(stderr, "Failed to initialize radio with given options, exitting!\n");
exit(0);
@@ -370,7 +370,7 @@ int main(int argc, char *argv[])
void *sdr = NULL;
float *sendbuff = NULL;
sendbuff = calloc(latspl * 2, sizeof(*sendbuff));
sendbuff = calloc(buffer_size * 2, sizeof(*sendbuff));
if (!sendbuff) {
fprintf(stderr, "No mem!\n");
goto error;
@@ -393,7 +393,7 @@ int main(int argc, char *argv[])
tx_frequencies[0] = frequency;
rx_frequencies[0] = frequency;
am[0] = 0;
sdr = sdr_open(NULL, tx_frequencies, rx_frequencies, am, 1, 0.0, samplerate, latspl, 0.0, 0.0, 0.0);
sdr = sdr_open(NULL, tx_frequencies, rx_frequencies, am, 1, 0.0, dsp_samplerate, buffer_size, 1.0, 0.0, 0.0, 0.0);
if (!sdr)
goto error;
sdr_start(sdr);
@@ -422,15 +422,15 @@ int main(int argc, char *argv[])
int tosend, got;
while (!quit) {
usleep(1000);
got = sdr_read(sdr, (void *)sendbuff, latspl, 0, NULL);
got = sdr_read(sdr, (void *)sendbuff, buffer_size, 0, NULL);
if (rx) {
got = radio_rx(&radio, sendbuff, got);
if (got < 0)
break;
}
tosend = sdr_get_tosend(sdr, latspl);
if (tosend > latspl / 10)
tosend = latspl / 10;
tosend = sdr_get_tosend(sdr, buffer_size);
if (tosend > buffer_size / 10)
tosend = buffer_size / 10;
if (tosend == 0) {
continue;
}

View File

@@ -38,14 +38,14 @@
static char freq_name[2][64];
int radio_init(radio_t *radio, int latspl, int samplerate, double frequency, const char *tx_wave_file, const char *rx_wave_file, const char *tx_audiodev, const char *rx_audiodev, enum modulation modulation, double bandwidth, double deviation, double modulation_index, double time_constant_us, double volume, int stereo, int rds, int rds2)
int radio_init(radio_t *radio, int buffer_size, int samplerate, double frequency, const char *tx_wave_file, const char *rx_wave_file, const char *tx_audiodev, const char *rx_audiodev, enum modulation modulation, double bandwidth, double deviation, double modulation_index, double time_constant_us, double volume, int stereo, int rds, int rds2)
{
int rc = -EINVAL;
clipper_init(CLIP_POINT);
memset(radio, 0, sizeof(*radio));
radio->latspl = latspl;
radio->buffer_size = buffer_size;
radio->volume = volume;
radio->stereo = stereo;
radio->rds = rds;
@@ -100,7 +100,7 @@ int radio_init(radio_t *radio, int latspl, int samplerate, double frequency, con
/* open audio device */
radio->tx_audio_samplerate = 48000;
radio->tx_audio_channels = (stereo) ? 2 : 1;
radio->tx_sound = sound_open(tx_audiodev, NULL, NULL, NULL, radio->tx_audio_channels, 0.0, radio->tx_audio_samplerate, radio->latspl, 1.0, 0.0, 2.0);
radio->tx_sound = sound_open(tx_audiodev, NULL, NULL, NULL, radio->tx_audio_channels, 0.0, radio->tx_audio_samplerate, radio->buffer_size, 1.0, 1.0, 0.0, 2.0);
if (!radio->tx_sound) {
rc = -EIO;
PDEBUG(DRADIO, DEBUG_ERROR, "Failed to open sound device!\n");
@@ -167,7 +167,7 @@ int radio_init(radio_t *radio, int latspl, int samplerate, double frequency, con
if (radio->tx_sound && !strcmp(tx_audiodev, rx_audiodev))
radio->rx_sound = radio->tx_sound;
else
radio->rx_sound = sound_open(rx_audiodev, NULL, NULL, NULL, radio->rx_audio_channels, 0.0, radio->rx_audio_samplerate, radio->latspl, 1.0, 0.0, 2.0);
radio->rx_sound = sound_open(rx_audiodev, NULL, NULL, NULL, radio->rx_audio_channels, 0.0, radio->rx_audio_samplerate, radio->buffer_size, 1.0, 1.0, 0.0, 2.0);
if (!radio->rx_sound) {
rc = -EIO;
PDEBUG(DRADIO, DEBUG_ERROR, "Failed to open sound device!\n");
@@ -310,8 +310,8 @@ int radio_init(radio_t *radio, int latspl, int samplerate, double frequency, con
}
/* audio buffers: how many sample for audio (rounded down) */
int tx_size = (int)((double)latspl / radio->tx_resampler[0].factor);
int rx_size = (int)((double)latspl / radio->rx_resampler[0].factor);
int tx_size = (int)((double)buffer_size / radio->tx_resampler[0].factor);
int rx_size = (int)((double)buffer_size / radio->rx_resampler[0].factor);
if (tx_size > rx_size)
radio->audio_buffer_size = tx_size;
else
@@ -324,7 +324,7 @@ int radio_init(radio_t *radio, int latspl, int samplerate, double frequency, con
}
/* signal buffers */
radio->signal_buffer_size = latspl;
radio->signal_buffer_size = buffer_size;
radio->signal_buffer = calloc(radio->signal_buffer_size * 3, sizeof(*radio->signal_buffer));
radio->signal_power_buffer = calloc(radio->signal_buffer_size, sizeof(*radio->signal_power_buffer));
if (!radio->signal_buffer || !radio->signal_power_buffer) {
@@ -334,9 +334,9 @@ int radio_init(radio_t *radio, int latspl, int samplerate, double frequency, con
}
/* temporary I/Q/carrier buffers, used while demodulating */
radio->I_buffer = calloc(latspl, sizeof(*radio->I_buffer));
radio->Q_buffer = calloc(latspl, sizeof(*radio->Q_buffer));
radio->carrier_buffer = calloc(latspl, sizeof(*radio->carrier_buffer));
radio->I_buffer = calloc(buffer_size, sizeof(*radio->I_buffer));
radio->Q_buffer = calloc(buffer_size, sizeof(*radio->Q_buffer));
radio->carrier_buffer = calloc(buffer_size, sizeof(*radio->carrier_buffer));
if (!radio->I_buffer || !radio->Q_buffer || !radio->carrier_buffer) {
PDEBUG(DRADIO, DEBUG_ERROR, "No memory!!\n");
rc = -ENOMEM;
@@ -438,8 +438,8 @@ int radio_tx(radio_t *radio, float *baseband, int signal_num)
sample_t *signal_samples[3];
uint8_t *signal_power;
if (signal_num > radio->latspl) {
PDEBUG(DRADIO, DEBUG_ERROR, "signal_num > latspl, please fix!.\n");
if (signal_num > radio->buffer_size) {
PDEBUG(DRADIO, DEBUG_ERROR, "signal_num > buffer_size, please fix!.\n");
abort();
}
@@ -611,8 +611,8 @@ int radio_rx(radio_t *radio, float *baseband, int signal_num)
sample_t *samples[3];
double p;
if (signal_num > radio->latspl) {
PDEBUG(DRADIO, DEBUG_ERROR, "signal_num > latspl, please fix!.\n");
if (signal_num > radio->buffer_size) {
PDEBUG(DRADIO, DEBUG_ERROR, "signal_num > buffer_size, please fix!.\n");
abort();
}

View File

@@ -24,7 +24,7 @@ enum audio_mode {
typedef struct radio {
/* modes */
int latspl; /* maximum number of samples */
int buffer_size; /* maximum number of samples */
enum modulation modulation; /* modulation type */
enum audio_mode tx_audio_mode; /* mode for audio source */
enum audio_mode rx_audio_mode; /* mode for audio sink */
@@ -81,7 +81,7 @@ typedef struct radio {
sample_t *carrier_buffer;
} radio_t;
int radio_init(radio_t *radio, int latspl, int samplerate, double frequency, const char *tx_wave_file, const char *rx_wave_file, const char *tx_audiodev, const char *rx_audiodev, enum modulation modulation, double bandwidth, double deviation, double modulation_index, double time_constant, double volume, int stereo, int rds, int rds2);
int radio_init(radio_t *radio, int buffer_size, int samplerate, double frequency, const char *tx_wave_file, const char *rx_wave_file, const char *tx_audiodev, const char *rx_audiodev, enum modulation modulation, double bandwidth, double deviation, double modulation_index, double time_constant, double volume, int stereo, int rds, int rds2);
void radio_exit(radio_t *radio);
int radio_start(radio_t *radio);
int radio_tx(radio_t *radio, float *baseband, int num);