I'm trying to use the correlate_and_sync block to get an initial timing estimate from a packet radio, but it doesn't seem to work at all. I decided to dig a bit deeper and try to figure out what it was doing. As it turns out, the sequence it correlates against seems to be completely wrong. Here's a simple test script to demonstrate the problem:
from gnuradio import digital
from gnuradio.filter import firdes
from pylab import *
preamble = [1,1,-1,-1] * 10
taps = firdes.root_raised_cosine(32, 32, 1, 0.35, 11*4*32)
corr_and_sync = digital.correlate_and_sync_cc(preamble, taps, 8, 32)
This produces a non-deterministic graph, but will often show wildly oscillating samples, with an amplitude as high as 1e31. Clearly something is amiss.
When I extend the preamble to be 64 symbols long, everything seems to work. However, when I change the filter it uses, it breaks again.
Any ideas what's going on?