Recovering a DSSS signal with poor clock synchronization I've run a lot of simulations and it seems like DSSS is just as noise resistant as people say it is. Resistant from jamming and even it seems some fading and narrow-band interference. I'm doing this simply by signal correlation - taking the FFT of the desired signal, and the FFT of the demodulated signal, multiplying in frequency space and IFFT'ing to look at the output in linear time.

I'm interested in running a VERY low data rate (&lt;100 bps) but moderately wide-band signal (~2.8 MHz bandwidth), as to minimize impact on the spectrum and being able to recover the signal in extremely poor quality. I'd also like to maintain a very high degree of signal orthogonality to other sources. This would mean a very long chip sequence (I'm hoping for 4096 or so).

I'd like to do this so all communications can pass over the DSSS path. Everything seems to work perfectly so long as the clocks remain perfectly (or almost perfectly synchronized).

If I have my clocks out by as little as 40 ppm, it seems to start confusing the end and beginning of the chunks. The only way around this I can think of is run several decoders, each at a slightly different chip frequency and seeing if any of the detectors get a match.

ACTUAL QUESTION: Is there any magical way to recover a DSSS signal with poor synchronization this that doesn't take a linear number of logical receivers over the frequency space?
The decorrelation versus clock (or more specifically frequency) error is a Sinc function with the the first nulls (main lobe) at 1/T where T is the length of your sequence. For example, if your sequence is 2 seconds long, the correlation will go to zero when the frequency offset is only 1/2 Hz! Thus you see the challenge with processing gain and frequency accuracy: If your frequency is accurate enough, you can correlate over a long duration and get a significant processing gain. The question is if you have more time or processing:
  if you have more time, then the approach is to step over the various possible frequency offsets during acquisition to find the clock offset (and then track once acquired)- so for example, if your duration was indeed 2 seconds as in my example, you would likely step by 1 Hz in the search process. If you have enough processing this can all be done in parallel, which I have done and posted at Matlab's fileexchange site at the link below:

https://www.mathworks.com/matlabcentral/fileexchange/26035-joint-frequency-and-delay-correlation

In actual implementation, you will want to do both carrier and code tracking once acquired.