I'm a little lost again

This commit is contained in:
2024-10-14 17:43:33 -04:00
parent 010e479f89
commit cfbbacdd0f
4 changed files with 72 additions and 28 deletions
+10 -4
View File
@@ -7,6 +7,7 @@
class PhaseDetector {
public:
PhaseDetector() {}
PhaseDetector(const std::vector<std::complex<double>>& _symbolMap) : symbolMap(_symbolMap) {}
uint8_t getSymbol(const std::complex<double>& input) {
@@ -38,8 +39,8 @@ private:
class CostasLoop {
public:
CostasLoop(const double _sample_rate, const std::vector<std::complex<double>>& _symbolMap)
: sample_rate(_sample_rate), k_factor(-5 / _sample_rate),
CostasLoop(const double _carrier_freq, const double _sample_rate, const std::vector<std::complex<double>>& _symbolMap, const double _vco_gain)
: carrier_freq(_carrier_freq), sample_rate(_sample_rate), vco_gain(_vco_gain), k_factor(-1 / (_sample_rate * _vco_gain)),
prev_in_iir(0), prev_out_iir(0), prev_in_vco(0), feedback(1.0, 0.0),
error_total(0), out_iir_total(0), in_vco_total(0),
srrc_filter(SRRCFilter(48, _sample_rate, 2400, 0.35)) {}
@@ -80,15 +81,19 @@ public:
prev_in_vco = in_vco;
// Generate feedback signal for next iteration
double feedback_real = std::cos(k_factor * in_vco);
double feedback_imag = -std::sin(k_factor * in_vco);
double feedback_real = std::cos(current_phase);
double feedback_imag = -std::sin(current_phase);
feedback = std::complex<double>(feedback_real, feedback_imag);
current_phase += 2 * M_PI * carrier_freq / sample_rate + k_factor * in_vco;
if (current_phase > 2 * M_PI) current_phase -= 2 * M_PI;
}
return output_signal;
}
private:
double carrier_freq;
double sample_rate;
double k_factor;
double prev_in_iir;
@@ -99,6 +104,7 @@ private:
double out_iir_total;
double in_vco_total;
SRRCFilter srrc_filter;
double vco_gain;
std::complex<double> limiter(const std::complex<double>& sample) const {
double limited_I = std::clamp(sample.real(), -1.0, 1.0);