Forums

DSP phase noise measurement with an SDR

Started by Andrew Holme January 25, 2017
I found this paper about measuring phase noise with just an ADC following by DSP.

http://jmfriedt.sequanux.org/phase_digital/grove_hein_tsc_direct_digital_PN_measurement.pdf

I tried a simplified single channel experiment using an FPGA eval board:

sig. gen. => ADC

I = nco.cos() * ADC
Q = nco.sin() * ADC
I_baseband = CIC_LPF_Decimate(I)
Q_baseband = CIC_LPF_Decimate(Q)
angle = CORDIC_arctan(I_baseband, Q_baseband)
spectrum = FFT(angle)

ADC rate was 1Msps.
Sig. gen. output frequency was 100 kHz.  
nco frequency was also 100 kHz to convert down to baseband.
Decimation was by R=4 down to 250ksps.
The final FFT step was performed on a PC.

I then put some FM modulation on the sig. gen. and checked the sideband levels on a spectrum analyzer:
carrier = 100kHz
fmod = 1kHz (sine)
peak deviation = 60Hz
1st sideband pair @ -30dBc
2nd sideband pair @ -67dBc

But, although the noise floor is down at -120dBc, the FFT plot only shows the first sideband pair at 1kHz.

I tried different fmod/deviation; but no matter what I do, the FFT only shows the fundamental (1st) sideband.

Why does the FFT not show 2nd and higher order sidebands, as the spectrum analyser does?

It occurred to me that I've just made a PM receiver and the output should be a pure sine wave!  But this method of phase noise measurement is widely used, so it must work??

Where is my error?

TIA
On Wednesday, January 25, 2017 at 3:55:50 AM UTC-5, Andrew Holme wrote:
> I found this paper about measuring phase noise with just an ADC following by DSP. > > http://jmfriedt.sequanux.org/phase_digital/grove_hein_tsc_direct_digital_PN_measurement.pdf > > I tried a simplified single channel experiment using an FPGA eval board: > > sig. gen. => ADC > > I = nco.cos() * ADC > Q = nco.sin() * ADC > I_baseband = CIC_LPF_Decimate(I) > Q_baseband = CIC_LPF_Decimate(Q) > angle = CORDIC_arctan(I_baseband, Q_baseband) > spectrum = FFT(angle) > > ADC rate was 1Msps. > Sig. gen. output frequency was 100 kHz. > nco frequency was also 100 kHz to convert down to baseband. > Decimation was by R=4 down to 250ksps. > The final FFT step was performed on a PC. > > I then put some FM modulation on the sig. gen. and checked the sideband levels on a spectrum analyzer: > carrier = 100kHz > fmod = 1kHz (sine) > peak deviation = 60Hz > 1st sideband pair @ -30dBc > 2nd sideband pair @ -67dBc > > But, although the noise floor is down at -120dBc, the FFT plot only shows the first sideband pair at 1kHz. > > I tried different fmod/deviation; but no matter what I do, the FFT only shows the fundamental (1st) sideband. > > Why does the FFT not show 2nd and higher order sidebands, as the spectrum analyser does? > > It occurred to me that I've just made a PM receiver and the output should be a pure sine wave! But this method of phase noise measurement is widely used, so it must work?? > > Where is my error? > > TIA
DSP is one of those things where: If you don't get it nobody can explain it to you and when you do get it nobody needs to explain it to you
On Wednesday, January 25, 2017 at 12:36:41 PM UTC, djloc...@gmail.com wrote:
> On Wednesday, January 25, 2017 at 3:55:50 AM UTC-5, Andrew Holme wrote: > > I found this paper about measuring phase noise with just an ADC following by DSP. > > > > http://jmfriedt.sequanux.org/phase_digital/grove_hein_tsc_direct_digital_PN_measurement.pdf > > > > I tried a simplified single channel experiment using an FPGA eval board: > > > > sig. gen. => ADC > > > > I = nco.cos() * ADC > > Q = nco.sin() * ADC > > I_baseband = CIC_LPF_Decimate(I) > > Q_baseband = CIC_LPF_Decimate(Q) > > angle = CORDIC_arctan(I_baseband, Q_baseband) > > spectrum = FFT(angle) > > > > ADC rate was 1Msps. > > Sig. gen. output frequency was 100 kHz. > > nco frequency was also 100 kHz to convert down to baseband. > > Decimation was by R=4 down to 250ksps. > > The final FFT step was performed on a PC. > > > > I then put some FM modulation on the sig. gen. and checked the sideband levels on a spectrum analyzer: > > carrier = 100kHz > > fmod = 1kHz (sine) > > peak deviation = 60Hz > > 1st sideband pair @ -30dBc > > 2nd sideband pair @ -67dBc > > > > But, although the noise floor is down at -120dBc, the FFT plot only shows the first sideband pair at 1kHz. > > > > I tried different fmod/deviation; but no matter what I do, the FFT only shows the fundamental (1st) sideband. > > > > Why does the FFT not show 2nd and higher order sidebands, as the spectrum analyser does? > > > > It occurred to me that I've just made a PM receiver and the output should be a pure sine wave! But this method of phase noise measurement is widely used, so it must work?? > > > > Where is my error? > > > > TIA > > DSP is one of those things where: > > If you don't get it nobody can explain it to you and when you do get it nobody needs to explain it to you
One of my colleagues pointed out that it might have something to do with the fundamental difference between magnitude, as displayed by a spectrum analyser, and power spectral density of phase, as computed by the DSP. I thought it was possible to view phase noise on a spectrum analyser (albeit perhaps not with such a low noise floor) but does it only work for signals of a certain class e.g. noise-like? My test signal in this case comprised discrete spurs (FM sidebands) rather than a continuous power density. I could modify the DSP to compute a complex FFT of I, Q, or, sqrt(I^2+Q^2) and perhaps then it would agree with the spectrum analyser. So the DSP is working correctly, in displaying true PSD of phase, and my mistake was not realising the difference between this and what the SA shows. My remaining slight confusion is how to know what is valid when viewing phase noise on an SA. For instance, the DSP and the SA both show a -65 dBc spur at the 50 Hz power line frequency; and the amplitude of the 1st FM sidebands agree; but the 2nd FM sidebands shown by the SA are not valid ??
> > I thought it was possible to view phase noise on a spectrum analyser (albeit perhaps not with such a low noise floor) but does it only work for signals of a certain class e.g. noise-like? My test signal in this case comprised discrete spurs (FM sidebands) rather than a continuous power density. >
Awesome question! I think you have figured it out. Your DSP method contains a phase demodulation so the spectrum you see is the original modulating tone alone. This is the spectrum on the MODULATING signal. The SA on the other hand shows the MODULATED signal which for FM and PM also contains the high order sidebands. Now in practice, we very often use a simple SA and look at the MODULATED spectrum directly and call that phase noise but as you see, it is not exactly correct. But usually the first order sideband is very low and the higher order sidebands are very very low so for all practical purposes, it is the phase noise. So your DSP method is correct. The SA is approximately correct and is often used in practice. The SA method has another error, in that it shows also the AM component which is not technically part of phase noise. Again in practice, the AM component is usually much less than the PM component and the error is small. Mark
On Wednesday, January 25, 2017 at 1:14:41 PM UTC-5, mako...@yahoo.com wrote:
> > > > I thought it was possible to view phase noise on a spectrum analyser (albeit perhaps not with such a low noise floor) but does it only work for signals of a certain class e.g. noise-like? My test signal in this case comprised discrete spurs (FM sidebands) rather than a continuous power density. > > > > Awesome question! > > I think you have figured it out. > > Your DSP method contains a phase demodulation so the spectrum you see is the original modulating tone alone. This is the spectrum on the MODULATING signal. > > The SA on the other hand shows the MODULATED signal which for FM and PM also contains the high order sidebands. > > Now in practice, we very often use a simple SA and look at the MODULATED spectrum directly and call that phase noise but as you see, it is not exactly correct. But usually the first order sideband is very low and the higher order sidebands are very very low so for all practical purposes, it is the phase noise. > > So your DSP method is correct. The SA is approximately correct and is often used in practice. The SA method has another error, in that it shows also the AM component which is not technically part of phase noise. Again in practice, the AM component is usually much less than the PM component and the error is small. > > Mark
PS ask this question at comp.dsp and you may get a better answer.
On Wed, 25 Jan 2017 00:55:47 -0800 (PST), Andrew Holme
<ajholme@hotmail.com> wrote:

>I found this paper about measuring phase noise with just an ADC following by DSP. > >http://jmfriedt.sequanux.org/phase_digital/grove_hein_tsc_direct_digital_PN_measurement.pdf > >I tried a simplified single channel experiment using an FPGA eval board: > >sig. gen. => ADC > >I = nco.cos() * ADC >Q = nco.sin() * ADC >I_baseband = CIC_LPF_Decimate(I) >Q_baseband = CIC_LPF_Decimate(Q) >angle = CORDIC_arctan(I_baseband, Q_baseband) >spectrum = FFT(angle) > >ADC rate was 1Msps. >Sig. gen. output frequency was 100 kHz. >nco frequency was also 100 kHz to convert down to baseband. >Decimation was by R=4 down to 250ksps. >The final FFT step was performed on a PC. > >I then put some FM modulation on the sig. gen. and checked the sideband levels on a spectrum analyzer: >carrier = 100kHz >fmod = 1kHz (sine) >peak deviation = 60Hz >1st sideband pair @ -30dBc >2nd sideband pair @ -67dBc > >But, although the noise floor is down at -120dBc, the FFT plot only shows the first sideband pair at 1kHz. > >I tried different fmod/deviation; but no matter what I do, the FFT only shows the fundamental (1st) sideband. > >Why does the FFT not show 2nd and higher order sidebands, as the spectrum analyser does? > >It occurred to me that I've just made a PM receiver and the output should be a pure sine wave! But this method of phase noise measurement is widely used, so it must work?? > >Where is my error? > >TIA
You may be seeing the equivalent of FM capture effect. The big signals, passed through a comparator (or an ADC, same thing) wipe out the little ones. What happens if you delete the 1st sb and keep the 2nd? And play with the sb level? Maybe a nonlinearity will become visible. -- John Larkin Highland Technology, Inc picosecond timing precision measurement jlarkin att highlandtechnology dott com http://www.highlandtechnology.com
On Wednesday, January 25, 2017 at 6:14:41 PM UTC, mako...@yahoo.com wrote:
> Now in practice, we very often use a simple SA and look at the MODULATED spectrum directly and call that phase noise but as you see, it is not exactly correct. But usually the first order sideband is very low and the higher order sidebands are very very low so for all practical purposes, it is the phase noise.
Thank you! That is exactly what I was missing. It makes sense to me now.
On Wed, 25 Jan 2017 00:55:47 -0800, Andrew Holme wrote:

> I found this paper about measuring phase noise with just an ADC > following by DSP. > > http://jmfriedt.sequanux.org/phase_digital/
grove_hein_tsc_direct_digital_PN_measurement.pdf
> > I tried a simplified single channel experiment using an FPGA eval board: > > sig. gen. => ADC > > I = nco.cos() * ADC Q = nco.sin() * ADC I_baseband = CIC_LPF_Decimate(I) > Q_baseband = CIC_LPF_Decimate(Q) > angle = CORDIC_arctan(I_baseband, Q_baseband) > spectrum = FFT(angle) > > ADC rate was 1Msps. > Sig. gen. output frequency was 100 kHz. > nco frequency was also 100 kHz to convert down to baseband. > Decimation was by R=4 down to 250ksps. > The final FFT step was performed on a PC. > > I then put some FM modulation on the sig. gen. and checked the sideband > levels on a spectrum analyzer: > carrier = 100kHz fmod = 1kHz (sine) > peak deviation = 60Hz 1st sideband pair @ -30dBc 2nd sideband pair @ > -67dBc > > But, although the noise floor is down at -120dBc, the FFT plot only > shows the first sideband pair at 1kHz. > > I tried different fmod/deviation; but no matter what I do, the FFT only > shows the fundamental (1st) sideband. > > Why does the FFT not show 2nd and higher order sidebands, as the > spectrum analyser does? > > It occurred to me that I've just made a PM receiver and the output > should be a pure sine wave! But this method of phase noise measurement > is widely used, so it must work?? > > Where is my error? > > TIA
Oh Lordy, you should have gotten a better answer before now, even though this isn't the DSP group. To a first-order approximation, phase noise shows up as noise which is quadrature to the carrier. Mathematically, this is because d/dp cos(w*t + p) = -p * sin(w*t + p) However, this is still only an approximation -- the real situation is that you get something hugely complicated. If p(t) is a sine wave, then the spectrum is calculated with a Bessel function, if it's something more complicated then people mumble in front of a white board for a while then dive for a simulator. The notion behind just using the quadrature part of the off-carrier noise as a measurement of phase noise is that phase noise is (we sincerely hope, at least) very small. With the 'p' term in the above equation small, we expect second- and higher-order effects to vanish. This make sense now? -- Tim Wescott Control systems, embedded software and circuit design I'm looking for work! See my website if you're interested http://www.wescottdesign.com
On Wed, 25 Jan 2017 00:55:47 -0800, Andrew Holme wrote:
> Why does the FFT not show 2nd and higher order sidebands, as the > spectrum analyser does? > > It occurred to me that I've just made a PM receiver and the output > should be a pure sine wave! But this method of phase noise measurement > is widely used, so it must work?? > > Where is my error?
There are no errors. By definition, the phase noise is one half of the one-sided spectral density of the instantaneous phase departure from a nominal phase. What you got doing the downconversion and then computing the phase of the resulting signal is the instantaneous phase departure from the NCO phase. Its (scaled) spectrum *is* the phase noise. What you see on a spectrum analyzer is the signal *power spectrum*. As pointed out by others, if you have a carrier with a weak frequency modulation then the signal power spectrum and the phase deviation spectrum are similar. The modulation index, h, of your test signal is not quite small, as it is 60/1000. As you likely already know, the amplitude of the "modulation sidebands" in the power spectrum is given by the Bessel functions of the first kind; for the n-th sideband the amplitude is given by An = bessel_j(n, h) For your signal A0 = 20*log10(besselj(0, 60/1000)) = -0.0078191 dB (the carrier) A1 = 20*log10(besselj(1, 60/1000)) = -30.461 dB A2 = 20*log10(besselj(2, 60/1000)) = -66.938 dB which agrees quite well with what the spectrum analyzer shows. note that for small h, bessel_j(1, h) ~= h/2, bessel_j(1, h) ~= h^2/8 and higher orders decrease even faster. For more than you ever wanted to know about phase noise and friends you could also ask the time-nuts mailing list, http://www.leapsecond.com/time-nuts.htm