I found this paper about measuring phase noise with just an ADC following by DSP.
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 @ -67dBcBut, 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