I am receiving AM modulated data over USRP. I successfully receive the data using an IF frequency (i.e., offset from the carrier), apply a highpass to remove RXLO phase noise and then downmodulate the signal to DC to get I/Q samples (I apply additional filtering and processing). I am interested in the received data stream and the phase (i.e., the argument of the complex I/Q samples).

Now this is all straight forward if the data is coming in continuously. It works and I see the bits, buried in noise, rushing over my screen.

However, I am receiving the data asynchronously. So I first need to detect what is actually a transmission. Then decode the data and then process them.

What is the proper way to do this?

A simple power measurement of the signal does not seem robust to me since power- and noise levels are not static.


It sounds like you are talking about a "bursty" transmission. This is common in real-world communications systems (for example, WiFi and Bluetooth operate this way).

What you say is exactly right - relying on power levels alone is not a reliable way of detecting a transmission. A real-world bursty communications system solves this problem by inserting some amount of completely "known" signal into every transmission. This carries no payload information whatsoever - it is specified by the communications standard (so both the transmitter and the receiver know it) purely to aid reception.

In many cases, this known redundant signal is inserted somewhere at the start of the transmission, in which case you might see it referred to as a "preamble". (However, in unusual cases, like TETRA which is what the police radios use in much of Europe, a "midamble" is used instead). In other contexts, this kind of known signal might be referred to as a "pilot" or "training sequence".

Although it might seem wasteful to transmit this redundant signal, it turns out to be very useful - not only for detecting a transmission, but also for performing other tasks that improve the reception (such as timing synchronization, frequency correction, gain control and channel estimation).

Therefore, if you have control over the data that is being modulated, then you should try putting some known data at the front of every transmission. Then, at the receiver, (in the simplest case) you can correlate using this known sequence in order to reliably detect the transmission. There is quite a lot of study behind how to choose a sequence that will produce really reliable detections in different scenarios. You could read about M-sequences, Gold sequences, Hadamard codes, Barker codes and many more.

If you don't have control over the transmissions, then you need to find some information about them. If you really know nothing about their structure, and can't estimate anything, then unfortunately power level detection may be the best you can do.

| improve this answer | |
  • $\begingroup$ Hi Harry, this is very helpful. However, it relates to the situation when we have the bits already. Could you elaborate also on the following 2 points? a) How do we know WHEN to sample bits? I know about clock recovery, but what if just a few bits come at unpredictable time? b) I only found "Binary Slicer" in gnuradio which is basically "sign(.)". However, when the signal is very noisy, the output toggles rapidly between 0 and 1. $\endgroup$ – divB Dec 2 '19 at 7:28
  • $\begingroup$ To be clear, it relates to the situation when some information is known. The general idea is that the data payload should be large compared to the preamble, so you only need to know a small amount of information to recover a large amount of data. $\endgroup$ – Harry Dec 2 '19 at 16:51
  • $\begingroup$ The preamble could be modulated bits, but could also be some completely arbitrary waveform (with no representation as data bits). This is often the case in practice, since it gives us freedom to design a preamble with desirable properties. $\endgroup$ – Harry Dec 2 '19 at 16:53
  • $\begingroup$ We do not sample bits. We sample symbols, from which we determine bits. In a binary modulation system, there is one bit per symbol, but bits and symbols are not the same thing. $\endgroup$ – Harry Dec 2 '19 at 16:56
  • $\begingroup$ There are many methods to estimate the symbol timing. With a short bursty signal, you are unlikely to have much success unless you know something about the signal being transmitted. With a long continuous signal, you can use "blind" estimation techniques that will slowly converge to a good estimate. But with short bursty signals, these are much less effective. $\endgroup$ – Harry Dec 2 '19 at 16:58

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.