Added resampling
This commit is contained in:
parent
66665622bc
commit
9e5d2b0f96
|
@ -1,3 +1,4 @@
|
|||
*.raw
|
||||
*.py
|
||||
*.csv
|
||||
*.o
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
.depends
|
||||
*.o
|
||||
/test
|
||||
|
|
|
@ -36,7 +36,7 @@ blocks:
|
|||
id: variable
|
||||
parameters:
|
||||
comment: ''
|
||||
value: '1000000'
|
||||
value: '1024000'
|
||||
states:
|
||||
bus_sink: false
|
||||
bus_source: false
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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'
|
||||
|
|
Loading…
Reference in New Issue