74 std::vector<std::pair<double, int> > peaks;
75 for(
int p = x; p < x + CARRYOVER_LENGTH -
LTS_LENGTH; p++)
77 std::complex<double> corr(0, 0);
79 for(
int s = 0; s < 64; s++)
82 power += std::norm(input[p+s].sample);
84 double corr_norm = std::abs(corr) / power;
85 if(corr_norm >
LTS_CORR_THRESHOLD) peaks.push_back(std::pair<double, int>(corr_norm, p));
88 std::sort(peaks.begin(), peaks.end());
89 std::reverse(peaks.begin(), peaks.end());
94 for(
int s = 0; s < std::min((
int)peaks.size(), 3) && !found; s+=jump)
96 for(
int t = s; t < std::min((
int)peaks.size(), s+jump) && !found; t++)
98 if(std::abs(peaks[s].second - peaks[t].second) == 64)
102 int lts_offset = std::min(peaks[s].second, peaks[t].second) - 32;
103 if(lts_offset < 0)
break;
105 input[lts_offset+24].tag =
LTS1;
106 input[lts_offset+24+64].tag =
LTS2;
108 std::complex<double> auto_corr_acc(0.0, 0.0);
111 auto_corr_acc += input[k].sample * std::conj(input[k+LTS_LENGTH].sample);
125 input[x].sample *= phase_correction;