SatDump 2.0.0-alpha-520736c72
Loading...
Searching...
No Matches
pll_carrier_tracking.h
1#pragma once
2
3#include "common/dsp/complex.h"
4#include "dsp/block_simple.h"
5
6namespace satdump
7{
8 namespace ndsp
9 {
10 class PLLCarrierTrackingBlock : public BlockSimple<complex_t, complex_t>
11 {
12 private:
13 float p_loop_bw = 0.01;
14 float p_freq_max = 1;
15 float p_freq_min = -1;
16
17 private:
18 float d_max_freq, d_min_freq;
19 float d_damping, d_loop_bw;
20 float d_alpha, d_beta;
21 float d_phase, d_freq;
22
23 public:
24 uint32_t process(complex_t *input, uint32_t nsamples, complex_t *output);
25
26 public:
27 PLLCarrierTrackingBlock();
28 ~PLLCarrierTrackingBlock();
29
30 void init()
31 {
32 d_damping = sqrtf(2.0f) / 2.0f;
33
34 float denom = (1.0 + 2.0 * d_damping * d_loop_bw + d_loop_bw * d_loop_bw);
35 d_alpha = (4 * d_damping * d_loop_bw) / denom;
36 d_beta = (4 * d_loop_bw * d_loop_bw) / denom;
37 }
38
39 nlohmann::ordered_json get_cfg_list()
40 {
41 nlohmann::ordered_json p;
42 add_param_simple(p, "loop_bw", "float");
43 add_param_simple(p, "freq_max", "float");
44 add_param_simple(p, "freq_min", "float");
45 return p;
46 }
47
48 nlohmann::json get_cfg(std::string key)
49 {
50 if (key == "loop_bw")
51 return p_loop_bw;
52 else if (key == "freq_max")
53 return p_freq_max;
54 else if (key == "freq_min")
55 return p_freq_min;
56 else
57 throw satdump_exception(key);
58 }
59
60 cfg_res_t set_cfg(std::string key, nlohmann::json v)
61 {
62 if (key == "loop_bw")
63 {
64 p_loop_bw = v;
65 init();
66 }
67 else if (key == "freq_max")
68 {
69 p_freq_max = v;
70 init();
71 }
72 else if (key == "freq_min")
73 {
74 p_freq_min = v;
75 init();
76 }
77 else
78 throw satdump_exception(key);
79 return RES_OK;
80 }
81 };
82 } // namespace ndsp
83} // namespace satdump
cfg_res_t
set_cfg status.
Definition block.h:241
uint32_t process(complex_t *input, uint32_t nsamples, complex_t *output)
Simplified "work" function, called automatically by work(). This takes away all boilerplate work usua...
Definition pll_carrier_tracking.cpp:16
nlohmann::json get_cfg(std::string key)
Get parameters of the block as JSON.
Definition pll_carrier_tracking.h:48
void init()
Applies current parameters to the block. This is called automatically once in start(),...
Definition pll_carrier_tracking.h:30
cfg_res_t set_cfg(std::string key, nlohmann::json v)
Set parameters of the block from JSON, including potentially IO configurations for blocks that may ha...
Definition pll_carrier_tracking.h:60
nlohmann::ordered_json get_cfg_list()
Get parameters LIST of the block's parameters. This does not contain actual values,...
Definition pll_carrier_tracking.h:39