On Wed, 2014-12-31 at 14:00 -0500, Andy Walls wrote: > 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?
An additional note: The "if" test doesn't work too well, if the preamble sequence is "101010101010...", since then the correlation will have peaks at the symbol spacing, d_sps. Maybe if((corr_mag[i] - corr_mag[i-d_sps/2]) > d_thresh) { would be better, since the correlation should sag at the half symbol? Regards, Andy _______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio