DSPRelated.com
Forums

Phase Unwarp - QPSK

Started by eslavko August 24, 2010
Hello..

I want to do some QPSK facility to simple microcontroller. It's seems to
work in real life. I do the (not simplified) Goertzl algorithm and in the
end I just use lookup table to calculate arctan.

So for now I got phase signal in range pi/-pi (in my case -128 to 127 8 bit
output) and as I intend to use difference modulation I got just fine result
if I do BPSK. (ie just subtract last phase from previous one) It work's
well.

But after checking signal's I discover that phase error is so small that I
can do QPSK and double bitrate. Now I hit problem as simple difference of
last sample isn't good enougth. I think I need some phase unwarping but
can't find just right solution.

I wan't to do just phase difference as phase slowly rotate (no pll
synchronizer)

So I has PHASE (8 bit signed) and PreviousPHASE. How to calculate
difference? (0/90/180/270)?!?



eslavko wrote:
> Hello.. > > I want to do some QPSK facility to simple microcontroller. It's seems to > work in real life. I do the (not simplified) Goertzl algorithm and in the > end I just use lookup table to calculate arctan. > > So for now I got phase signal in range pi/-pi (in my case -128 to 127 8 bit > output) and as I intend to use difference modulation I got just fine result > if I do BPSK. (ie just subtract last phase from previous one) It work's > well. > > But after checking signal's I discover that phase error is so small that I > can do QPSK and double bitrate. Now I hit problem as simple difference of > last sample isn't good enougth. I think I need some phase unwarping but > can't find just right solution. > > I wan't to do just phase difference as phase slowly rotate (no pll > synchronizer) > > So I has PHASE (8 bit signed) and PreviousPHASE. How to calculate > difference? (0/90/180/270)?!?
Idqpsk = Iprev I + Qprev Q Qdqpsk = Iprev Q - Qprev I Vladimir Vassilevsky DSP and Mixed Signal Design Consultant http://www.abvolt.com
>So I has PHASE (8 bit signed) and PreviousPHASE. How to calculate >difference? (0/90/180/270)?!?
temp = (PHASE - PreviousPHASE) + 00100000 temp(8,7) = 00 -> 0 temp(8,7) = 01 -> 90 temp(8,7) = 10 -> 180 temp(8,7) = 11 -> 270