Post by haxorcize on May 10, 2011 18:03:25 GMT -5
Hey everybody,
I am a software engineer and an information security expert but as I like to study a lot of different things I've recently stumbled into the world of DSP.
I bought a USRP (that wasn't cheap , and I began my DSP studies.
Several partially-to-full-read books later I can say this subject is still pretty amazing, but difficult, especially for someone without electrical engineer background (even though I know the math and I like electronics so I understand most of the stuff).
Without further ado, I'll get to the question:
I would like to write a QAM64/QAM256 demodulator in software, using gnuradio in python/C++ (programming is not a problem), and eventually use it to demodulate DOCSIS packets.
My main problem is that GnuRadio doesn't have a ready implementation for a QAM demodulator (although it has tons of already-made great things!), so I got sucked into reading tons of books to perform this not-simple task.
The USRP is a software radio that I can tune and it gives me I/Q samples.
From what I understand - in order to get to a steady constellation I need to do:
[1] Carrier frequency recovery
[2] Carrier Phase recovery
[3] Sampling timing recovery
Then once I demodulate correctly ([1] and [2] assured that), and I sample correctly ([3] assured that) I should get a steady constellation, and all the hell that awaits me later is easier (differential decoding, source decoding, bit interleaving, and all that fun stuff).
My questions are:
[[1]] The fact that I already get I/Q from the USRP kinda confuses me. Do I simply get separated I's and Q's from the USRP local oscillator without any carrier freq/phase consideration? Then how do I recover them?
My current guess is that I need to interpolate to get back the original signal (since I have all the information according to nyquist) and then I must recover the freq/phase by myself with some adaptive algorithm? Something like 2 PLL's?
[[2]] Am I even using the right components ([1], [2], [3])? What am I missing? I just wish I could get to the bit level where I'm more comfortable
[[3]] Can I ignore equalization for now until at least I see some kind of a constellation? because It's already way too much to process
Thank you in advance!
I am a software engineer and an information security expert but as I like to study a lot of different things I've recently stumbled into the world of DSP.
I bought a USRP (that wasn't cheap , and I began my DSP studies.
Several partially-to-full-read books later I can say this subject is still pretty amazing, but difficult, especially for someone without electrical engineer background (even though I know the math and I like electronics so I understand most of the stuff).
Without further ado, I'll get to the question:
I would like to write a QAM64/QAM256 demodulator in software, using gnuradio in python/C++ (programming is not a problem), and eventually use it to demodulate DOCSIS packets.
My main problem is that GnuRadio doesn't have a ready implementation for a QAM demodulator (although it has tons of already-made great things!), so I got sucked into reading tons of books to perform this not-simple task.
The USRP is a software radio that I can tune and it gives me I/Q samples.
From what I understand - in order to get to a steady constellation I need to do:
[1] Carrier frequency recovery
[2] Carrier Phase recovery
[3] Sampling timing recovery
Then once I demodulate correctly ([1] and [2] assured that), and I sample correctly ([3] assured that) I should get a steady constellation, and all the hell that awaits me later is easier (differential decoding, source decoding, bit interleaving, and all that fun stuff).
My questions are:
[[1]] The fact that I already get I/Q from the USRP kinda confuses me. Do I simply get separated I's and Q's from the USRP local oscillator without any carrier freq/phase consideration? Then how do I recover them?
My current guess is that I need to interpolate to get back the original signal (since I have all the information according to nyquist) and then I must recover the freq/phase by myself with some adaptive algorithm? Something like 2 PLL's?
[[2]] Am I even using the right components ([1], [2], [3])? What am I missing? I just wish I could get to the bit level where I'm more comfortable
[[3]] Can I ignore equalization for now until at least I see some kind of a constellation? because It's already way too much to process
Thank you in advance!