DSPRelated.com
Forums

I/Q modulation and phase noise sensitivity

Started by Peter Mairhofer July 27, 2015
Hi,

I am observing something that is very counter-intuitive to me: I/Q
modulation is very susceptible to phase noise?

In an experiment I plot "phase noise" vs. "SNR" and see a constant slope
of ~20dB/dec. I use a real baseband signal, multiply it by
cos(2*pi*fc*t) and then multiply it again by cos(2*pi*fc*t + phi(t))
where phi represents the phase noise. Finally, a simple image filter. I
can relate these results roughly with some analytical results.

Now I add I/Q modulation: "RF" signal is now calculated as:

xrf = real(xbb)*cos(2*pi*fc*t) - imag(xbb)*sin(2*pi*fc*t)

I only compare the I-component which is again obtained by:

xrf*cos(2*pi*fc*t + phi(t))

When I do the same plot now, the whole curve shifts by ~23dB, getting
significantly worse!

When I set phi=0 (no phase noise) and plot the error, I see the high
frequency Q component, attenuated by the filter. Exactly what I expect.

When I add slight amount of phase noise however there is an error
component which is significantly higher than the attenuated image! Even
if all signals are sinusoids, the error signal looks like a random
signal with some RF on top of it. A histogram shows that the error
signal is not Gaussian distributed, it could be Laplace distributed.

I would expect the curve to just flatten at some point (when the error
is limited by the image rejection). In the worst case, I would expect
the curve to shift by 3dB.

Some numbers as example (for simplicity, phi ~ N(0, (2*pi*fc*sigma)^2),
i.e. white PN spectrum and sigma represents phase jitter as one
parameter, fc=1GHz):

+--------+--------+--------+
| sigma  | no I/Q | I/Q    |
+--------+--------+--------+
| 100fs  | 86 dB  | 63 dB  |
| 1ps    | 66 dB  | 43 dB  |
| 10ps   | 46 dB  | 23 dB  |
| 100ps  | 26 dB  | 3.8 dB |
+--------+--------+--------+


What is going on here? On the one hand I can hardly imagine that I/Q
modulation makes everything so significantly worse. On the other hand I
would not see where an error could be. I change nothing but adding
"-imag(xbb)*sin(2*pi*fc*t)" to the RF...

Thank you,
Peter



PS: I could post a simple simulink model that shows the results.


Peter Mairhofer  <63832452@gmx.net> wrote:

>Some numbers as example (for simplicity, phi ~ N(0, (2*pi*fc*sigma)^2), >i.e. white PN spectrum and sigma represents phase jitter as one >parameter, fc=1GHz): > >+--------+--------+--------+ >| sigma | no I/Q | I/Q | >+--------+--------+--------+ >| 100fs | 86 dB | 63 dB | >| 1ps | 66 dB | 43 dB | >| 10ps | 46 dB | 23 dB | >| 100ps | 26 dB | 3.8 dB | >+--------+--------+--------+ > > >What is going on here? On the one hand I can hardly imagine that I/Q >modulation makes everything so significantly worse. On the other hand I >would not see where an error could be. I change nothing but adding >"-imag(xbb)*sin(2*pi*fc*t)" to the RF...
I'm not sure if this is related to your observations, but in this model (and also your previous most recent post) it appears you are not bandlimiting the phase jitter signal, and this may not be realistic -- an expression like N(0, (2*pi*fc*sigma)^2) implies injection of white noise that is flat up to 1/2 of whatever sample rate you are using in your simulation (presumably a few GHz). In reality phase noise is usually bandlimited by filters in the PLL loop. Steve
Hi Steve,

On 2015-07-27 21:26, Steve Pope wrote:
> Peter Mairhofer <63832452@gmx.net> wrote: > >> Some numbers as example (for simplicity, phi ~ N(0, (2*pi*fc*sigma)^2), >> i.e. white PN spectrum and sigma represents phase jitter as one >> parameter, fc=1GHz): >> >> +--------+--------+--------+ >> | sigma | no I/Q | I/Q | >> +--------+--------+--------+ >> | 100fs | 86 dB | 63 dB | >> | 1ps | 66 dB | 43 dB | >> | 10ps | 46 dB | 23 dB | >> | 100ps | 26 dB | 3.8 dB | >> +--------+--------+--------+ >> >> >> What is going on here? On the one hand I can hardly imagine that I/Q >> modulation makes everything so significantly worse. On the other hand I >> would not see where an error could be. I change nothing but adding >> "-imag(xbb)*sin(2*pi*fc*t)" to the RF... > > I'm not sure if this is related to your observations, but in this > model (and also your previous most recent post) it appears you are > not bandlimiting the phase jitter signal, and this may not be > realistic -- an expression like N(0, (2*pi*fc*sigma)^2) implies > injection of white noise that is flat up to 1/2 of whatever sample rate > you are using in your simulation (presumably a few GHz). > In reality phase noise is usually bandlimited by filters in the PLL loop.
Thank you. Yes, I'm aware of that, I am currently doing this for simplicity. Because otherwise the samples would be correlated and my the model would get even more complicated. However, first, it is still implicitely bandlimited to the simulation step and second as noted by you (in my case fc*100). Second, I have also added an appropriate filter and it does not change to anything more meaningful. Independently one question though: To make sure, the PSD of the samples of phi(t) correspond to the "L" function that is usually used to define PN, the one which is measured in dBc/Hz (http://www.aextal.com/images/types-of-phase-noise.gif)? If yes, this would mean that I filter my phi(t) samples with a filter that starts e.g. with 2 poles (-40dB/dec), then has a zero (-20dB/dec) and then has another zero to get flat (just as an example)? Thanks, Peter
On Mon, 27 Jul 2015 22:05:12 +0200, Peter Mairhofer <63832452@gmx.net>
wrote:

>Hi Steve, > >On 2015-07-27 21:26, Steve Pope wrote: >> Peter Mairhofer <63832452@gmx.net> wrote: >> >>> Some numbers as example (for simplicity, phi ~ N(0, (2*pi*fc*sigma)^2), >>> i.e. white PN spectrum and sigma represents phase jitter as one >>> parameter, fc=1GHz): >>> >>> +--------+--------+--------+ >>> | sigma | no I/Q | I/Q | >>> +--------+--------+--------+ >>> | 100fs | 86 dB | 63 dB | >>> | 1ps | 66 dB | 43 dB | >>> | 10ps | 46 dB | 23 dB | >>> | 100ps | 26 dB | 3.8 dB | >>> +--------+--------+--------+ >>> >>> >>> What is going on here? On the one hand I can hardly imagine that I/Q >>> modulation makes everything so significantly worse. On the other hand I >>> would not see where an error could be. I change nothing but adding >>> "-imag(xbb)*sin(2*pi*fc*t)" to the RF... >> >> I'm not sure if this is related to your observations, but in this >> model (and also your previous most recent post) it appears you are >> not bandlimiting the phase jitter signal, and this may not be >> realistic -- an expression like N(0, (2*pi*fc*sigma)^2) implies >> injection of white noise that is flat up to 1/2 of whatever sample rate >> you are using in your simulation (presumably a few GHz). >> In reality phase noise is usually bandlimited by filters in the PLL loop. > >Thank you. > >Yes, I'm aware of that, I am currently doing this for simplicity. >Because otherwise the samples would be correlated and my the model would >get even more complicated. > >However, first, it is still implicitely bandlimited to the simulation >step and second as noted by you (in my case fc*100). Second, I have also >added an appropriate filter and it does not change to anything more >meaningful. > >Independently one question though: To make sure, the PSD of the samples >of phi(t) correspond to the "L" function that is usually used to define >PN, the one which is measured in dBc/Hz >(http://www.aextal.com/images/types-of-phase-noise.gif)? >If yes, this would mean that I filter my phi(t) samples with a filter >that starts e.g. with 2 poles (-40dB/dec), then has a zero (-20dB/dec) >and then has another zero to get flat (just as an example)? > > >Thanks, >Peter
There is a lot of literature out there about phase noise modeling and it is not a trivial thing to get right. Since you seem to be asking why your results are so strange and you seem to not be using typical models, I would suggest your results are so strange because you're not using typical models. Phase noise is not a white process. Its main component is 1/f noise which is not that hard to model, but it can be difficult to calibrate the model. It is fairly well known how a phase noise model frequency response should translate to phase noise rms degrees or rms radians, so usually getting that calibration right is the first thing to do. If you're not there, there's either something wrong with your model or your calibration or your interpretation or something. I'm having a hard time following your descriptions, so I can't point to anything specific to look at. Eric Jacobsen Anchor Hill Communications http://www.anchorhill.com
On 2015-07-27 21:26, Steve Pope wrote:
> Peter Mairhofer <63832452@gmx.net> wrote: >> Some numbers as example (for simplicity, phi ~ N(0, (2*pi*fc*sigma)^2), >> i.e. white PN spectrum and sigma represents phase jitter as one >> parameter, fc=1GHz): >> >> +--------+--------+--------+ >> | sigma | no I/Q | I/Q | >> +--------+--------+--------+ >> | 100fs | 86 dB | 63 dB | >> | 1ps | 66 dB | 43 dB | >> | 10ps | 46 dB | 23 dB | >> | 100ps | 26 dB | 3.8 dB | >> +--------+--------+--------+ >> >> >> What is going on here? On the one hand I can hardly imagine that I/Q >> modulation makes everything so significantly worse. On the other hand I >> would not see where an error could be. I change nothing but adding >> "-imag(xbb)*sin(2*pi*fc*t)" to the RF... > > I'm not sure if this is related to your observations, but in this > model (and also your previous most recent post) it appears you are > not bandlimiting the phase jitter signal, and this may not be > realistic -- an expression like N(0, (2*pi*fc*sigma)^2) implies > injection of white noise that is flat up to 1/2 of whatever sample rate > you are using in your simulation (presumably a few GHz). > In reality phase noise is usually bandlimited by filters in the PLL loop.
The numbers above have been obtained with non-white phase noise (band-limited to fc/20), my bad. Would this not have been the case, the results are only off by 6dB (as expected). But, if someone should be interested, to the actual problem: Interestingly, this is indeed the case! Assuming no I/Q (perfect cos demodulation) the performance is significantly better, as shown in the table above. The reason is that the phase noise goes through exp(j...) which is a cos and a sine. Since noise is small, the result is near 1 for the cos with a small variance. The sin however has high derivative near zero crossing which blows up noise - a factor of 250 in standard deviation, resulting in 48 dB degradation! (The numbers above differ "only" by 23dB because my simulation is limited by other factors). It is very interesting that a similar performance can still be achieved if the phase noise is *white*. Then also the sin of the PN is white and the baseband filter (which always exists) can filter out the noise, reducing the noise variance. However, if the PN is colored and has already low bandwidth, the variance of the sin of the noise is the same but filtering does not help because it is low bandwidth, not filtering the noise. I find this remarkable. Conventional baseband models (e.g. the MATLAB script from Markus Nentwig) take this into account by calculating exp(i*noise). Peter
Peter, just so that you are aware, in the context of single-carrier modulation with sequential phase+timing(+freq) tracking the challenge of phase noise is addressed indirectly. In the sense of, "If we are given the spectra of a specific phase noise, how will it affect our system (in baseband)?" The solution is typically linearization and/or small angle approximation. 

Back to the original problem, when it comes to "what does phase noise look like" then the reference is usually from the oscillator folks. And it's definitely not white in all cases. 

Maybe I'm repeating what you already know, but I want to make sure you don't miss anything.
Hi Julius,

On 2015-07-31 13:34, julius wrote:
> Peter, just so that you are aware, in the context of single-carrier > modulation with sequential phase+timing(+freq) tracking the challenge > of phase noise is addressed indirectly. In the sense of, "If we are > given the spectra of a specific phase noise, how will it affect our > system (in baseband)?"
Thanks for the remark. I am not entirely sure if I get what you are saying.
> The solution is typically linearization and/or > small angle approximation.
... or, if the phase noise spectrum is given by "pnoise", then the baseband noise is just given by exp(1i*pnoise). But, as said, this contains cos and sin terms.
> Back to the original problem, when it comes to "what does phase noise > look like" then the reference is usually from the oscillator folks. > And it's definitely not white in all cases.
Absolutely! White is just a first step simplification for me. I still find it remarkable that under the assumption of white noise there would be no degradation (I would have expected the opposite) or by using cos alone too. Peter
Hi Peter,

>Now I add I/Q modulation: "RF" signal is now calculated as: > >xrf = real(xbb)*cos(2*pi*fc*t) - imag(xbb)*sin(2*pi*fc*t) > >I only compare the I-component which is again obtained by: > >xrf*cos(2*pi*fc*t + phi(t))
After the modulation step, the information about your original baseband signal is in both I and Q so you need to calculate both. xrfI = real(xbb).*cos(2*pi*fc*t)-imag(xbb).*sin(2*pi*fc*t) xrfQ = real(xbb).*sin(2*pi*fc*t)+imag(xbb).*cos(2*pi*fc*t) If the imaginary part of xbb is 0, let's just call it "x" (your original real signal), that will simplify to: xrfI = x.*cos(2*pi*fc*t) xrfQ = x.*sin(2*pi*fc*t) The demodulation for the I-part will then be: I = xrfI.*cos(2*pi*fc*t+phi)+xrfQ.*sin(2*pi*fc*t+phi) However, if phi is not 0, your original signal will not only be in I but in both I and Q, so we need to calculate Q as well: Q = -xrfI.*sin(2*pi*fc*t+phi)+xrfQ.*cos(2*pi*fc*t+phi); To get your real signal back from the complex representation (if needed), one way is to use the following: I-imag(hilbert(Q)) This is essentially an SSB (single sideband) demodulator. Regards, Tobias --------------------------------------- Posted through http://www.DSPRelated.com
On 2015-08-01 13:44, sm0svx wrote:
> Hi Peter,
Thanks for your reply. I don't want to give up the idea that I made some fundamental mistake in my code ;-)
>> Now I add I/Q modulation: "RF" signal is now calculated as: >> >> xrf = real(xbb)*cos(2*pi*fc*t) - imag(xbb)*sin(2*pi*fc*t) >> >> I only compare the I-component which is again obtained by: >> >> xrf*cos(2*pi*fc*t + phi(t)) > > After the modulation step, the information about your original baseband > signal is in both I and Q so you need to calculate both. > > xrfI = real(xbb).*cos(2*pi*fc*t)-imag(xbb).*sin(2*pi*fc*t) > xrfQ = real(xbb).*sin(2*pi*fc*t)+imag(xbb).*cos(2*pi*fc*t)
This is the main part I do not understand. Why are there two separate I and Q *RF* signals? I and Q only exist in baseband but the RF signal is real only ... xrfI corresponds to the actual RF signal, see https://en.wikipedia.org/wiki/Quadrature_amplitude_modulation#Transmitter What is xrfQ ?
> If the imaginary part of xbb is 0, let's just call it "x" (your original > real signal), that will simplify to: > > xrfI = x.*cos(2*pi*fc*t) > xrfQ = x.*sin(2*pi*fc*t) > > The demodulation for the I-part will then be: > > I = xrfI.*cos(2*pi*fc*t+phi)+xrfQ.*sin(2*pi*fc*t+phi)
Similar to above: https://en.wikipedia.org/wiki/Quadrature_amplitude_modulation#Receiver The I component is I = xrfI.*cos(2*pi*fc*t+phi) and the Q component is Q = -xrfI.*sin(2*pi*fc*t+phi)
> However, if phi is not 0, your original signal will not only be in I but > in both I and Q, so we need to calculate Q as well: > > Q = -xrfI.*sin(2*pi*fc*t+phi)+xrfQ.*cos(2*pi*fc*t+phi);
See above, is this not Q = -xrfI.*sin(2*pi*fc*t+phi) ?
> To get your real signal back from the complex representation (if needed), > one way is to use the following:
By "complex representation" you mean the 2 real baseband signals I and Q?
> I-imag(hilbert(Q))
If I change my code as follows, result get worse by precicely 3dB (but maybe because I got something wrong before): % complex baseband signal, for simplicity I=Q xt0_I = ones(size(tt)); xt0_Q = ones(size(tt)); % ideal modulation to RF xrf = (xt0.*cos(wc*tt) - xt0.*sin(wc*tt)); % demodulate from RF with phase noise xt1_I = (cos(wc*tt + wc*noise)).*xrf*2; xt1_Q = -(sin(wc*tt + wc*noise)).*xrf*2; xt1 = xt1_I - imag(hilbert(xt1_Q)); error between xt1 and xt0_I is now 3dB worse than error between xt1_I and xt0_Q. Thanks again! Peter
Peter Mairhofer  <63832452@gmx.net> wrote:

>On 2015-08-01 13:44, sm0svx wrote:
>> (Peter wrote)
>>> Now I add I/Q modulation: "RF" signal is now calculated as: >>> >>> xrf = real(xbb)*cos(2*pi*fc*t) - imag(xbb)*sin(2*pi*fc*t) >>> >>> [snip]
>> After the modulation step, the information about your original baseband >> signal is in both I and Q so you need to calculate both.
>> xrfI = real(xbb).*cos(2*pi*fc*t)-imag(xbb).*sin(2*pi*fc*t) >> xrfQ = real(xbb).*sin(2*pi*fc*t)+imag(xbb).*cos(2*pi*fc*t)
>This is the main part I do not understand. Why are there two separate I >and Q *RF* signals?
In the usual case you would not need (or want) to do this, and your first equation above is the one you want to use.
>I and Q only exist in baseband but the RF signal is real only ...
Steve