OpenRTX/scripts/add_dc_offset.cpp
Niccolò Izzo 2d8c696a09 Complete M17 demodulator implementation
Make quantization work also on DC offset signal
Add samples plot code
Fix bug in buffer wrap around
Fix oob memory access in M17 modulator
Update tests with DC offset signal
Switch to 48KHz sample rate for Module17 and MD380
Add DC biasing script

TG-81
2022-05-27 21:48:46 +02:00

56 lines
1.8 KiB
C++

/*******************************************************************************
* *
* Convert a baseband from m17-cpp-mod to Module17/MD3x0 ADC input equivalent *
* *
******************************************************************************/
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
FILE *baseband_in = fopen(argv[1], "rb");
if (!baseband_in)
{
perror("Error in reading test baseband");
return -1;
}
// Get file size
fseek(baseband_in, 0L, SEEK_END);
long baseband_size = ftell(baseband_in);
unsigned baseband_samples = baseband_size / 2;
fseek(baseband_in, 0L, SEEK_SET);
printf("Baseband is %ld bytes!\n", baseband_size);
// Read data from input file
int16_t *baseband_buffer = (int16_t *) malloc(baseband_size);
if (!baseband_buffer)
{
perror("Error in memory allocation");
return -1;
}
size_t read_items = fread(baseband_buffer, 2, baseband_samples, baseband_in);
if (read_items != baseband_samples)
{
perror("Error in reading input file");
return -1;
}
fclose(baseband_in);
// Add DC bias
int16_t *filtered_buffer = (int16_t *) malloc(baseband_size);
for(size_t i = 0; i < baseband_samples; i++)
{
float elem = static_cast< float >(baseband_buffer[i]);
filtered_buffer[i] = static_cast< int16_t >((elem + 32768) / 16);
printf("%d\n", filtered_buffer[i]);
}
// Write back
FILE *baseband_out = fopen(argv[2], "wb");
fwrite(filtered_buffer, baseband_samples, 2, baseband_out);
fclose(baseband_out);
}