In addition to hotpaw2's answer:
Presumably, the signal originated from a binary output on the transmitter end.
I'd say that is most probably wrong.
The typical digital transceiver based on complex baseband looks like this:
Binary data -(0/1)->
Symbol mapper =(complex-valued symbols)=>
pulse shaper =(complex-valued, "smooth" digital baseband signal)=>
synchronous dual-DAC =(I & Q signals)=>
I: mix with cos(2 pi f_RF) --\
subtract--> filters -(RF signal)-> Antenna
Q: mix with sin(2 pi f_RF) --/
On the transmitter end, you'll see some RF signal – and that is always analog, never binary.
I haven't found any helpful documentation on how to do the final piece of this.
You cannot have read very much, because every textbook I know introduces both, the direct conversion transmitter and the direct conversion receiver (note: these go by different names, also zero-if or quadrature receivers).
Since you're already getting complex samples, we may assume you're working with a receiver that works like this
Antenna -(RF signal)->
band-pass filter ->
multiply with cos(2 pi f_RF) -> low-pass filter -(I signal) ->
multiply with sin(2 pi f_RF) -> low-pass filter -(Q signal) ->
=(IQ signal pair)=> synchronous dual ADC =(digital complex baseband signal)=>
So, the analog part has been done for you.
Now, it's up to your PC software to do (not necessarily in this order, but all of these are typically necessary):
- estimation/correction of the difference in f_RF (no two physical oscillators are perfectly identical)
- estimation/correction of the difference in phase (i.e. the cos() of receiver and transmitter didn't "start" at the same time, and the signal was "in the air" for some non-zero amount of time due to limited speed of light)
- reversing the pulse shaping of the transmitter
- estimation/correction of the symbol rate (ie. how many digital samples is a single symbol long?)
- guessing which symbols got sent by the transmitter
- converting these symbols back to the bits they stood for
In reality, there's a few additional steps (channel coding, hardware imperfection corrections, equalizing, …).
Anyway, the order of these steps, and how exactly they're done depends completely on what kind of modulation scheme/waveform the transmitter produces; notice how you can't use a 3G mobile phone to get the bits your cordless landline phone sends, or use your WiFi card to receive digital TV, or use your CCTV receiver to receive satellite telephony.
Even for receivers for the same kind of signal, there's a lot of choices a SDR engineer makes – the type of timing recovery mechanism, for example, acceptable computational complexity when converting samples to symbols vs error rate when doing that, and a lot, lot more.
I realize this is most likely extremely simple,
Nope. It's the hardest problem, and pretty much the main problem, of digital communications technology, the science backing one of the biggest technical sectors of modern days. Building good receivers is hard, in general. There's a lot of tools to help you deal with that. But: even these tools require solid understanding of the theory behind digital communications before you can go out and write your own SDR receiver.
But don't despair:
There's a lot of "simple" systems that are relatively easy to receive, and a tutorial alone might get you pretty far. It's an exciting field of technology, and I wouldn't have spent a solid part of my life on that if it wasn't fun!
I've witnessed literally dozens of times how being able to actually get binary data out of something that is just a digital representation of an analog signal makes people a) happy and b) makes the understanding of the theory take giant leaps.
I'll encourage you to experiment with digital signals!
Based on your assumption, the transmitted signal was binary, I'll go ahead and take an audacious guess at what your profession is: Is it possible you are a Computer Science student?
I can see this signal world might be a bit daunting if you're coming from a background where you can safely assume that for
input==output, but that's simply not the case for digital communications.
In any case, no matter what you are, I'd recommend reading a bit on signal theory. The GNU Radio wiki has a page on recommended literature. Get one of the basic DSP books, and one of the basic Digital Comm books; some of them are freely available as PDF.
Parallely, take a 5-minute read of the introduction chapter of the GNU Radio guided Tutorials. These tutorials are meant to slowly, and carefully, and sequentially (don't skip a chapter) allow you to build a simple digital receiver. What they do is teach a tool, but they need to rely on some signal theoretic background, so they might be not that perfectly clear if you lack that.