Hi.

Can someone give me a brief clue about the threshold testing in the
correlate_and_sync block?

In the constructor:

      for(size_t i=0; i < d_symbols.size(); i++)
        corr += abs(d_symbols[i]*conj(d_symbols[i]));
      d_thresh = 0.9*corr*corr;

corr looks like the value (at offset 0) of the discrete autocorrelation
of the matched filter.

d_thresh looks like 90% of the value of the autocorrelation of the
matched filter squared.

So far this makes sense to me. 


Then in the work function (corr is a totally different array variable
here):

      // Calculate the correlation with the known symbol
      d_filter->filter(noutput_items, in, corr);

      // Find the magnitude squared of the correlation
      std::vector<float> corr_mag(noutput_items);
      volk_32fc_magnitude_squared_32f(&corr_mag[0], corr, noutput_items);

      int i = d_sps;
      while(i < noutput_items) {
        if((corr_mag[i] - corr_mag[i-d_sps]) > d_thresh) {

This "if" test confuses me slightly.  We check to see if the value of
the output of the matched filtering has crossed the threshold relative
to one symbol previous?  Why not just check relative to 0?

Regards,
Andy




_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to