I have heard that it is possible to detect a low power (ie not visible on a spectrum analyzer) DSSS-BPSK (direct sequence spread spectrum) signal even when you don't know the spreading code by computing the power spectral density of the incoming I/Q sampled datastream squared (ie PSD(x^2)). The dominant peak is the center frequency of the signal.

Why does this algorithm work and what is it called?

  • $\begingroup$ Why not ask the people from whom you have heard the stuff? The whole point of direct-sequence spread-spectrum is that even if one knows the carrier frequency, the signal cannot be demodulated if the spreading code is not known. $\endgroup$ – Dilip Sarwate Jan 28 '20 at 22:24
  • $\begingroup$ They don't know the why just the how... $\endgroup$ – random_dsp_guy Jan 28 '20 at 23:00
  • $\begingroup$ Well, the how is what is very surprising. Direct-sequence spread spectrum is one means of covert communication. The signal energy is spread over a wide band of frequencies, and the signal looks very much like noise except to a demodulator that knows the spreading sequence. So, unless you can reveal details of the how, I will continue to take your assertions with a large grain of salt. $\endgroup$ – Dilip Sarwate Jan 29 '20 at 0:21

Without disagreement to Dilip's valid comments, this is to show the corner case as to when you can detect the presence of DSSS. This is not demodulating the data but detecting the presence of a repeating DSSS signal that is buried well below the noise. Specifically this would occur when the sequence repeats such as done with the GPS C/A code signals (the PRN sequence is repeated 20 times for each data symbol). Such repetition can then be detected by computing an autocorrelation on the received sequence over the duration of repetition, revealing both the presence of a repeating signal and its repetition rate.

The plot below shows the auto-correlation for a GPS signal that is 14 dB below the noise floor, which is a strong but realistic terrestrial GPS signal. Further carrier offsets would need to be removed similar to as done in pre-correlation acquisition search algorithms. The impulse in the center is the impulse you would see if the GPS signal wasn't present (an impulse auto-correlation as expected for white-noise). It is the additional correlation peaks that reveal the presence of something more than white noise.


The time domain signal as received prior to the auto-correlation is plotted below. The GPS signal is only +/-1V in this plot, showing how "buried in noise" it is.

time domain signal

Certainly correlating to the actual sequence would provide a much clearer result as well as the opportunity for data demodulation. This is just showing that the presence of the signal can indeed be detected under this condition of repeating data bits.

In typical DSSS for covert communications, each epoch of the PRN sequence is encoded with an equiprobable data bit making such pattern detection impossible. If one were to send a long series of ones or zeros in the transmitted data prior to spreading, this would be a vulnerability in allowing for the presence of the signal to be detected. Further DSSS on its own, with codes generated from linear code generators (such as C/A code) are not to be considered secure.

  • $\begingroup$ Can you elaborate on why "codes generated from linear code generators (such as C/A code) are not to be considered secure" ? $\endgroup$ – random_dsp_guy Jan 29 '20 at 4:16
  • 2
    $\begingroup$ Because you only need a very short number of demodulated chips to determine the entire random sequence (with GPS it is 21 chips to then determine the 1023 chips generated since it is basically solving a linear equation of 10 equations and 10 unknowns-- you can fill that matrix and its result with 21 chips). This is similar to why the Mersenne Twister (most popular random number generator) is not to be used for cryptographic purposes. Even though it doesn't repeat for something like 2^19937, you can predict the entire sequence once you know 640 samples. $\endgroup$ – Dan Boschen Jan 29 '20 at 4:22
  • 1
    $\begingroup$ To solve you need to invert a matrix in GF(2), but thankfully the Berlekamp-Massey algorithm will do that for us very efficiently. $\endgroup$ – Dan Boschen Jan 29 '20 at 4:24
  • $\begingroup$ Could you share your matlab or python code used to generate the plots? $\endgroup$ – random_dsp_guy Mar 8 '20 at 18:21
  • 1
    $\begingroup$ @random_dsp_guy my GPS code generator is available on the Matlab Exchange site (search Boschen GPS and you should find it) $\endgroup$ – Dan Boschen Mar 8 '20 at 18:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.