Added resampling

This commit is contained in:
Sebastian 2022-01-03 16:04:09 +01:00
parent 66665622bc
commit 9e5d2b0f96
5 changed files with 29 additions and 17 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
*.raw
*.py
*.csv
*.o

1
blocks/.gitignore vendored
View File

@ -1,2 +1,3 @@
.depends
*.o
/test

View File

@ -36,7 +36,7 @@ blocks:
id: variable
parameters:
comment: ''
value: '1000000'
value: '1024000'
states:
bus_sink: false
bus_source: false

View File

@ -3,6 +3,8 @@
#include <complex>
#include <liquid/liquid.h>
#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<float> in_buffer[buffer_size];
std::complex<float> out_buffer[buffer_size];
std::complex<float> out_buffer[buffer_size/2];
firdecim_crcf decim = firdecim_crcf_create_kaiser(2,2,80);
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);
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);
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<float>), buffer_size, output);
fwrite(out_buffer, sizeof(std::complex<float>), buffer_size/2, output);
len =
fread(&in_buffer, sizeof(std::complex<float>), 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);

View File

@ -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'