qo100-trx-prototypes/blocks/test.cpp

60 lines
1.6 KiB
C++

#include <cstdio>
#include <iostream>
#include <complex>
#include "costas-beacon-sync.h"
#include "fft-beacon-finder.h"
const size_t buffer_size = 4069;
int main(int argc, char const* argv[]) {
FILE* output = fopen("output.raw", "w");
FILE* input = fopen("input.raw", "r");
FFTBeaconFinder finder(1000000);
CostasBeaconSync sync(0.03, -0.1, 0.1);
bool locked = false;
int sample_count = 0;
clock_t start_time = clock();
std::complex<float> in_buffer[buffer_size];
std::complex<float> out_buffer[buffer_size];
size_t len =
fread(in_buffer, sizeof(std::complex<float>), buffer_size, input);
while (len > 0) {
for (size_t i = 0; i < len; i++) {
std::complex<float> coarse_synced =
finder.work(in_buffer[i]);
std::complex<float> sync_correction = sync.work(coarse_synced);
if(!sync.has_lock()) {
//std::cout << "Resetting lock" << std::endl;
finder.reset_sync();
}
out_buffer[i] = coarse_synced * sync_correction;
}
sample_count += len;
fwrite(out_buffer, sizeof(std::complex<float>), buffer_size, output);
len =
fread(&in_buffer, sizeof(std::complex<float>), buffer_size, input);
};
clock_t end_time = clock();
clock_t result = end_time - start_time;
std::cout << "Processed " << sample_count << " samples ("
<< sample_count / 1000000.0 << "s) "
<< "in " << result / CLOCKS_PER_SEC << " s" << std::endl;
fclose(input);
fclose(output);
return 0;
}