- DSP log - http://www.dsplog.com -

Transmit spectrum with phase noise

Posted By Krishna Sankar On August 28, 2012 @ 6:07 am In Analog | No Comments

The earlier posts on phase noise discussed about phase noise in oscillators [1], conversion of phase noise profile to jitter [2] and the impact of phase noise on the error vector magnitude (evm) [3]. This post discuss the impact of phase noise on the spectrum of the transmit waveform.  A simple random QPSK modulated symbols, oversampled and passed through a root raised cosine filtering is used for the simulation.

## System Model

Consider a simple system model having both phase noise and thermal noise as show below.

Figure: System model with phase and thermal noise

The received symbol $y$is, $y=e^{j\phi}x + n$, where $\phi$is the phase distortion in radians, $x$ is the transmit symbol and $n$ is the contribution due to thermal noise The phase $\phi$is Gaussian distributed with zero mean and variance $\phi_{rms}^2$ radians^2 having a probability density function as, $p(\phi)=\frac{1}{\sqrt{2\pi\phi^2_{rms}}}e^{-\frac{\phi^2}{2\phi^2_{rms}}}$. From the post on phase noise on the error vector magnitude (evm) [3], we know that the $\Large{\begin{array}{lll}evm&=&\sqrt{\frac{N_0}{E_s}+2-2e^{-\frac{\phi^2_{rms}}{2}}\end{array}$

Es/N0 = 40dB

 Phase Noise (deg, rms) EVM, dB 0 -40.00 1 -33.93 2 -28.80 3 -25.46 4 -23.03 5 -21.13

Table : Resultant EVM with phase noise and thermal noise

Further, from the post on phase noise in oscillators [1], it is also known that the phase noise will cause skirts in the spectrum of the carrier.

Figure : Spectrum on the transmit waveform with random QPSK symbols, root raised cosine filtering (oversampling by 4), Es/N0 = 40dB and different RMS phase noise. ObservationsAs can be seen from the above plot, the phase noise elevates the out-of band emissions in the transmit spectrum (from -40dB in the no phase noise case to -21.13dB for the 5 degree rms phase) So it is important to have a lower phase noise to meet the spectral mask specification in addition to minimize the impact on error vector magnitude.

## Matlab/Octave code

Attached script computes the transmit spectrum of a QPSK modulated symbol versus Es/N0 for different values of rms phase noise.

% Script for simulating the transmit spectrum of a QPSK
% modulated symbol affected by phase noise and thermal noise
% ----------------------------------------------------------

clear;close all;
N = 10^5; % number of symbols
os = 4; % oversampling factor

Es_N0_dB = 40;
phi_rms_deg_vec = [0:1:5];

% root raised cosine filter
t_by_Ts = [-4:1/os:4];
beta = 0.5;
ht = (sin(pi*t_by_Ts*(1-beta)) + 4*beta*t_by_Ts.*cos(pi*t_by_Ts*(1+beta)))./(pi*t_by_Ts.*(1-(4*beta*t_by_Ts).^2));
ht((length(t_by_Ts)-1)/2+1) = 1 -beta + 4*beta/pi;
ht([-os/(4*beta) os/(4*beta)]+(length(t_by_Ts)-1)/2+1) = beta/sqrt(2)*((1+2/pi)*sin(pi/(4*beta))+(1-2/pi)*cos(pi/(4*beta)));
ht = ht/sqrt(os);

for ii = 1:length(Es_N0_dB)
for jj = 1:length(phi_rms_deg_vec)

% Transmitter
ip_re = rand(1,N)>0.5; % generating 0,1 with equal probability
ip_im = rand(1,N)>0.5; % generating 0,1 with equal probability
s = 1/sqrt(2)*(2*ip_re-1 + j*(2*ip_im-1)); % QPSK modulation

% Pulse shaping
s_os = [s ; zeros(os-1,length(s))];
s_os = s_os(:).';
s_os = conv(ht,s_os);
s_os = s_os(1:os*N);

% Thermal and Phase Noise addition
n = 1/sqrt(2)*[randn(1,N*os) + j*randn(1,N*os)]; % thermal noise
phi = phi_rms_deg_vec(jj)*(pi/180)*randn(1,N*os)*sqrt(os); % phase noise
y = s_os.*exp(j*phi) + 10^(-Es_N0_dB(ii)/20)*n;

% computing the transmit spectrum
[Pxx1(jj,:) W2 ] = pwelch(y,[],[],1024,'twosided');

% matched filtering
y_mf_out = conv(y,fliplr(ht));
y_mf_out = y_mf_out(length(ht):os:end);

% error vector
error_vec = (y_mf_out-s);
evm(ii,jj)  = error_vec*error_vec';
theory_evm(ii,jj) =  10^(-Es_N0_dB(ii)/10) + 2 - 2*exp(-(phi_rms_deg_vec(jj)*pi/180).^2/2);

end
end

figure;
plot([-512:511]/1024,10*log10(fftshift(Pxx1)));
xlabel('frequency, Hz'); ylabel('amplitude, dB');
legend('0 deg rms','1 deg rms', '2 deg rms', '3 deg rms', '4 deg rms', '5 deg rms');
title('spectrum Es/N0 = 40dB, root raised cosine filtering and different rms phase noise');
axis([-0.5 0.5 -50 5]); grid on;

URL to article: http://www.dsplog.com/2012/08/28/transmit-spectrum-phase-noise/

URLs in this post:

[1] phase noise in oscillators: http://www.dsplog.com/2012/06/08/oscillator-phase-noise/

[2] conversion of phase noise profile to jitter: http://www.dsplog.com/2012/06/22/phase-noise-psd-to-jitter/

[3] phase noise on the error vector magnitude (evm): http://www.dsplog.com/2012/07/09/evm-phase-noise/