Thomas Kolb
2e91fd7c42
All code is now licensed under GPLv3+. The documentation is licensed under CC BY-SA 4.0. This is now officially free software! \o/
70 lines
1.2 KiB
C
70 lines
1.2 KiB
C
/*
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*
|
|
* Copyright (C) 2024 Thomas Kolb
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <time.h>
|
|
|
|
#include <liquid/liquid.h>
|
|
|
|
#include "layer1/freq_est.h"
|
|
|
|
#include "utils.h"
|
|
|
|
int main(void)
|
|
{
|
|
#define N 63
|
|
float complex s1[N];
|
|
float complex s2[N];
|
|
float complex s3[N];
|
|
|
|
nco_crcf nco;
|
|
channel_cccf chan;
|
|
|
|
// ** Initialize **
|
|
|
|
srand(time(NULL));
|
|
|
|
nco = nco_crcf_create(LIQUID_NCO);
|
|
|
|
nco_crcf_set_frequency(nco, -0.08f);
|
|
nco_crcf_set_phase(nco, -1.37f);
|
|
|
|
chan = channel_cccf_create();
|
|
|
|
channel_cccf_add_awgn(chan, -80, 5);
|
|
|
|
// ** Generate signal **
|
|
|
|
for(size_t i = 0; i < N; i++) {
|
|
s1[i] = 1.0f;
|
|
}
|
|
|
|
// ** Mix up **
|
|
|
|
nco_crcf_mix_block_up(nco, s1, s2, N);
|
|
|
|
channel_cccf_execute_block(chan, s2, N, s3);
|
|
|
|
dump_array_cf(s1, N, 1.0f, "/tmp/freq_est_source.cpx");
|
|
dump_array_cf(s2, N, 1.0f, "/tmp/freq_est_mixed.cpx");
|
|
dump_array_cf(s3, N, 1.0f, "/tmp/freq_est_channelized.cpx");
|
|
|
|
|
|
// ** Estimate frequency **
|
|
|
|
float final_phase;
|
|
float est_freq = freq_est_data_free(s3, N, &final_phase);
|
|
|
|
fprintf(stderr, "Estimated frequency: %.6f rad/sample\n", est_freq);
|
|
fprintf(stderr, "Final phase: %.6f rad\n", final_phase);
|
|
|
|
// ** Cleanup **
|
|
|
|
nco_crcf_destroy(nco);
|
|
|
|
fprintf(stderr, "Done.\n");
|
|
}
|