diff --git a/.gitignore b/.gitignore index d192aa6..031dcd9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.raw *.py *.csv +*.o diff --git a/blocks/.gitignore b/blocks/.gitignore index 368962c..707a4e1 100644 --- a/blocks/.gitignore +++ b/blocks/.gitignore @@ -1,2 +1,3 @@ .depends *.o +/test diff --git a/blocks/generate-testdata.grc b/blocks/generate-testdata.grc index bcc9b67..1622f73 100644 --- a/blocks/generate-testdata.grc +++ b/blocks/generate-testdata.grc @@ -36,7 +36,7 @@ blocks: id: variable parameters: comment: '' - value: '1000000' + value: '1024000' states: bus_sink: false bus_source: false diff --git a/blocks/test.cpp b/blocks/test.cpp index 26af4e6..e187484 100644 --- a/blocks/test.cpp +++ b/blocks/test.cpp @@ -3,6 +3,8 @@ #include +#include + #include "costas-beacon-sync.h" #include "fft-beacon-finder.h" @@ -12,34 +14,42 @@ int main(int argc, char const* argv[]) { FILE* output = fopen("output.raw", "w"); FILE* input = fopen("input.raw", "r"); - FFTBeaconFinder finder(1000000); + FFTBeaconFinder finder(1024000); CostasBeaconSync sync(0.03, -0.1, 0.1); - bool locked = false; - int sample_count = 0; clock_t start_time = clock(); std::complex in_buffer[buffer_size]; - std::complex out_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++) { - std::complex coarse_synced = - finder.work(in_buffer[i]); - std::complex sync_correction = sync.work(coarse_synced); + 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] = coarse_synced * sync_correction; + out_buffer[i/2] = resampled * sync_correction; } sample_count += len; - fwrite(out_buffer, sizeof(std::complex), buffer_size, output); + fwrite(out_buffer, sizeof(std::complex), buffer_size/2, output); len = fread(&in_buffer, sizeof(std::complex), buffer_size, input); @@ -49,7 +59,7 @@ int main(int argc, char const* argv[]) { clock_t result = end_time - start_time; std::cout << "Processed " << sample_count << " samples (" - << sample_count / 1000000.0 << "s) " + << sample_count / 1024000.0 << "s) " << "in " << result / CLOCKS_PER_SEC << " s" << std::endl; fclose(input); diff --git a/blocks/view_waterfall.grc b/blocks/view_waterfall.grc index 7e2283e..d3ff557 100644 --- a/blocks/view_waterfall.grc +++ b/blocks/view_waterfall.grc @@ -36,7 +36,7 @@ blocks: id: variable parameters: comment: '' - value: '1000000' + value: '1024000' states: bus_sink: false bus_source: false @@ -97,7 +97,7 @@ blocks: ignoretag: 'True' maxoutbuf: '0' minoutbuf: '0' - samples_per_second: samp_rate + samples_per_second: samp_rate/2 type: complex vlen: '1' states: @@ -144,7 +144,7 @@ blocks: autoscale: 'False' average: '1.0' axislabels: 'True' - bw: samp_rate + bw: samp_rate/2 color1: '"blue"' color10: '"dark blue"' color2: '"red"' @@ -263,7 +263,7 @@ blocks: name: '""' nconnections: '1' size: '1024' - srate: samp_rate + srate: samp_rate/2 stemplot: 'False' style1: '1' style10: '1' @@ -320,7 +320,7 @@ blocks: alpha8: '1.0' alpha9: '1.0' axislabels: 'True' - bw: samp_rate + bw: samp_rate/2 color1: '0' color10: '0' color2: '0'