2021-12-28 16:13:04 +01:00
|
|
|
#include <cstdio>
|
|
|
|
#include <iostream>
|
2021-12-16 00:24:21 +01:00
|
|
|
|
2021-12-28 16:13:04 +01:00
|
|
|
#include <complex>
|
2021-12-16 00:24:21 +01:00
|
|
|
|
2022-01-03 16:04:09 +01:00
|
|
|
#include <liquid/liquid.h>
|
|
|
|
|
2021-12-16 00:24:21 +01:00
|
|
|
#include "costas-beacon-sync.h"
|
2021-12-28 16:13:04 +01:00
|
|
|
#include "fft-beacon-finder.h"
|
2021-12-16 00:24:21 +01:00
|
|
|
|
2021-12-28 18:52:13 +01:00
|
|
|
const size_t buffer_size = 4069;
|
|
|
|
|
2021-12-28 16:13:04 +01:00
|
|
|
int main(int argc, char const* argv[]) {
|
2021-12-16 00:24:21 +01:00
|
|
|
FILE* output = fopen("output.raw", "w");
|
|
|
|
FILE* input = fopen("input.raw", "r");
|
|
|
|
|
2022-01-03 16:04:09 +01:00
|
|
|
FFTBeaconFinder finder(1024000);
|
2021-12-28 16:13:04 +01:00
|
|
|
CostasBeaconSync sync(0.03, -0.1, 0.1);
|
|
|
|
|
|
|
|
int sample_count = 0;
|
|
|
|
clock_t start_time = clock();
|
2021-12-16 00:24:21 +01:00
|
|
|
|
2021-12-28 18:52:13 +01:00
|
|
|
std::complex<float> in_buffer[buffer_size];
|
2022-01-03 16:04:09 +01:00
|
|
|
std::complex<float> out_buffer[buffer_size/2];
|
|
|
|
|
|
|
|
firdecim_crcf decim = firdecim_crcf_create_kaiser(2,2,80);
|
|
|
|
|
2021-12-28 18:52:13 +01:00
|
|
|
|
|
|
|
size_t len =
|
|
|
|
fread(in_buffer, sizeof(std::complex<float>), buffer_size, input);
|
|
|
|
while (len > 0) {
|
2022-01-03 16:04:09 +01:00
|
|
|
for (size_t i = 0; i < len; i+=2) {
|
|
|
|
std::complex<float> coarse_synced[2];
|
|
|
|
coarse_synced[0] = finder.work(in_buffer[i]);
|
|
|
|
coarse_synced[1] = finder.work(in_buffer[i+1]);
|
|
|
|
|
|
|
|
std::complex<float> resampled;
|
|
|
|
firdecim_crcf_execute(decim, coarse_synced, &resampled);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::complex<float> sync_correction = sync.work(resampled);
|
2021-12-29 14:21:10 +01:00
|
|
|
if(!sync.has_lock()) {
|
|
|
|
//std::cout << "Resetting lock" << std::endl;
|
|
|
|
finder.reset_sync();
|
|
|
|
}
|
2022-01-03 16:04:09 +01:00
|
|
|
out_buffer[i/2] = resampled * sync_correction;
|
2021-12-28 18:52:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
sample_count += len;
|
|
|
|
|
2022-01-03 16:04:09 +01:00
|
|
|
fwrite(out_buffer, sizeof(std::complex<float>), buffer_size/2, output);
|
2021-12-16 00:24:21 +01:00
|
|
|
|
2021-12-28 18:52:13 +01:00
|
|
|
len =
|
|
|
|
fread(&in_buffer, sizeof(std::complex<float>), buffer_size, input);
|
2021-12-16 00:24:21 +01:00
|
|
|
};
|
|
|
|
|
2021-12-28 16:13:04 +01:00
|
|
|
clock_t end_time = clock();
|
|
|
|
clock_t result = end_time - start_time;
|
|
|
|
|
|
|
|
std::cout << "Processed " << sample_count << " samples ("
|
2022-01-03 16:04:09 +01:00
|
|
|
<< sample_count / 1024000.0 << "s) "
|
2021-12-28 16:13:04 +01:00
|
|
|
<< "in " << result / CLOCKS_PER_SEC << " s" << std::endl;
|
|
|
|
|
2021-12-16 00:24:21 +01:00
|
|
|
fclose(input);
|
|
|
|
fclose(output);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|