#include #include #include #include #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(1024000); CostasBeaconSync sync(0.03, -0.1, 0.1); int sample_count = 0; clock_t start_time = clock(); std::complex in_buffer[buffer_size]; std::complex out_buffer[buffer_size/2]; firdecim_crcf decim = firdecim_crcf_create_kaiser(2,2,80); size_t len = fread(in_buffer, sizeof(std::complex), buffer_size, input); while (len > 0) { for (size_t i = 0; i < len; i+=2) { std::complex coarse_synced[2]; coarse_synced[0] = finder.work(in_buffer[i]); coarse_synced[1] = finder.work(in_buffer[i+1]); std::complex resampled; firdecim_crcf_execute(decim, coarse_synced, &resampled); std::complex sync_correction = sync.work(resampled); if(!sync.has_lock()) { //std::cout << "Resetting lock" << std::endl; finder.reset_sync(); } out_buffer[i/2] = resampled * sync_correction; } sample_count += len; fwrite(out_buffer, sizeof(std::complex), buffer_size/2, output); len = fread(&in_buffer, sizeof(std::complex), buffer_size, input); }; clock_t end_time = clock(); clock_t result = end_time - start_time; std::cout << "Processed " << sample_count << " samples (" << sample_count / 1024000.0 << "s) " << "in " << result / CLOCKS_PER_SEC << " s" << std::endl; fclose(input); fclose(output); return 0; }