Square-Root Raised-Cosine PSK/QAM

Let’s look at a somewhat more realistic textbook signal: The PSK/QAM signal with independent and identically distributed symbols (IID) and a square-root raised-cosine (SRRC) pulse function. The SRRC pulse is used in many practical systems and in many theoretical and simulation studies. In this post, we’ll look at how the free parameter of the pulse function, called the roll-off parameter or excess bandwidth parameter, affects the power spectrum and the spectral correlation function.

The problem with the rectangular pulse-shaping function in PSK and QAM signals is that it is not bandwidth efficient. The PSD of the rectangular-pulse PSK signal has unlimited width because the PSD is proportional to the square of the pulse-function transform. That means the rectangular-pulse PSD is proportional to the square of the sinc() function

\displaystyle S(f) \propto \left| \frac{\sin(\pi f T_0)}{\pi f T_0} \right|^2,

where 1/T_0 is the symbol rate. The sinc() function does not have bounded support. This simply means that there is no interval [-F, F] such that S(f) is zero outside the interval.

In practice, this means that the rectangular-pulse PSK/QAM signal possesses energy that interferes with signals in nearby (relative to the carrier frequency) frequency bands.  Any duration-limited pulse function will possess this “infinite bandwidth” property, due to basic results in Fourier analysis: All duration-limited transformable functions have transforms with unbounded support.

So more sophisticated pulse functions must be sought. A popular one is the square-root raised-cosine pulse, which is related to the raised-cosine pulse.  These pulse functions are parameterized by a number R called the roll-off or excess bandwidth parameter. It lies on the interval [0, 1] and controls the bandwidth of the pulse transform, and therefore the bandwidth of the PSK/QAM signal as reflected by the PSD.

If the symbol rate is 1/T_0, then the occupied bandwidth of a SRRC PSK/QAM signal is given by \displaystyle B = (1 + R)/T_0. When R=1, the occupied bandwidth is 2/T_0, or twice the symbol rate, and when R=0, the occupied bandwidth is 1/T_0, or the symbol rate. All other valid values of R produce occupied bandwidths between these two extremes.

Here at the CSP blog we are interested in how the cyclic autocorrelation and spectral correlation function vary with R. We will see that the non-conjugate functions vanish for \alpha \neq 0 when R=0. That is, the symbol-rate harmonic non-conjugate cycle frequencies are no longer cycle frequencies when $\latex R=0$. For BPSK, when R=0 only the doubled-carrier conjugate cycle frequency remains.

Mathematically, recall that the non-conjugate spectral correlation function for QAM/PSK is proportional to a shifted product of pulse transforms. In particular, suppose the pulse function is p(t). It has Fourier transform P(f). The non-conjugate spectral correlation function for digital PSK/QAM has the property

\displaystyle S_s^\alpha (f) \propto P(f+\alpha/2)P^*(f-\alpha/2), \hfill (1)

assuming that the signal is at complex baseband (the carrier frequency is zero). Now, the transform P(f) has width (1+R)/T_0 and is restricted to the interval

\displaystyle [\frac{-(1+R)}{2T_0}\ \ \frac{(1+R)}{2T_0}]

(remember, the carrier is zero here).

First consider \alpha = 0, the PSD. We have

S_s^0(f) \propto | P(f) |^2, \hfill (2)

and no matter how narrow P(f) becomes, as long as it has some non-zero width, the PSD will not be zero for all frequencies. Next consider \alpha = 1/T_0, the non-conjugate symbol-rate feature,

S_s^{1/T_0} (f) \propto P(f+1/2T_0)P^*(f-1/2T_0). \hfill (3)

Here the pulse transform P(f) is shifted up by half the cycle frequency and down by half the cycle frequency and the two shifted transforms are multiplied together. If R=0, then the two shifted pulse transforms do not overlap, and the spectral correlation function is zero for all frequencies f for this cycle frequency. When R > 0, there is some overlap, and the function is not zero everywhere.  The situation for R=0 is illustrated here:


Generating SRRC Signals

If we had a way to numerically evaluate the pulse function p(t), we could convolve it with an impulse train to obtain the modulated SRRC signal. The impulse train contains impulses spaced by T_0 samples, and each is multiplied by a complex symbol value drawn from the appropriate constellation (BPSK, 16QAM, etc.). I do this for a rectangular pulse p(t) in this script.

The pulse function p(t) and its transform P(f) can be found on the web in various places. So one can program a function to create the pulse using C, MATLAB, etc. MATLAB also has a function to do this for us called rcosdesign.m. Here is a function that produces a SRRC BPSK signal by calling rcosdesign.m:

function [bpsk] = make_bpsk_srrc (num_syms, samples_per_sym, rolloff)
% function [bpsk] = make_bpsk_srrc (num_syms, samples_per_sym, rolloff)
% Create a BPSK signal with independent and identically distributed bits
% and a pulse function that is a square-root raised cosine pulse with
% roll-off parameter rolloff. The symbol (bit) rate is Rb =
% 1/samples_per_sym and the carrier frequency is zero. No noise is added.
% The calling program can frequency shift the returned signal to implement
% a carrier frequency and add noise as desired.
% The Nyquist bandwidth for a signal with rate Rb is Rb. The occupied
% bandwidth of the generated signal is (1 + rolloff)Rb, so that when
% rolloff is zero, the signal occupies its Nyquist bandwidth and when
% rolloff is one, the signal occupies twice its Nyquist bandwidth.
% num_syms and samples_per_sym must be positive integers.
% Chad M. Spooner
% May 2016

% Error checking.

if (nargin < 3)
   fprintf (‘make_bpsk_srrc: Insufficient arguments to function\n’);
   help make_bpsk_srrc;

if ( (rolloff < 0) || (rolloff > 1.0) )
   fprintf (‘make_bpsk_srrc: rolloff parameter must lie in [0.0, 1.0]\n’);
   help make_bpsk_srrc;

if (round(num_syms) ~= num_syms)
   fprintf (‘make_bpsk_srrc: num_syms must be a positive integer\n’);
   help make_bpsk_srrc;

if (round(samples_per_sym) ~= samples_per_sym)
   fprintf (‘make_bpsk_srrc: samples_per_sym must be a positive integer\n’);
   help make_bpsk_srrc;

% Create a random bit sequence.

bit_seq = randi([0 1], [1 num_syms]);

% Convert the {0, 1} bits into {-1, 1} symbols.

sym_seq = 2*bit_seq – 1;
zero_mat = zeros((samples_per_sym – 1), num_syms);
sym_seq = [sym_seq ; zero_mat];
sym_seq = reshape(sym_seq, 1, samples_per_sym*num_syms);

% Create the pulse function.

p_of_t = rcosdesign (rolloff, 30, samples_per_sym);

% Convolve bit sequence with pulse function.

s_of_t = filter(p_of_t, [1], sym_seq);

% Plot time-domain waveform.

hp = plot(real(s_of_t(1:400)));
hold on;
set(hp, ‘linewidth’, 2);
hp = plot(imag(s_of_t(1:400)), ‘-g’);
set(hp, ‘linewidth’, 2);
grid on;
hold off;
xlabel(‘Sample Index’);
ylabel(‘Signal Amplitude’);
title(‘Time-Domain Plot of SRRC-Pulse BPSK’);
set(gca, ‘ylim’, [-0.6 0.6]);
legend (‘Real Part’, ‘Imag Part’);
print -djpeg99 ‘srrc_bpsk_time_domain.jpg’

% Save the created signal.

% write_binary (‘srrc_bpsk_matlab.tim’, 2, s_of_t);

bpsk = s_of_t;


This script can be found (as a .doc file, just rename to an m-file locally) here. In the remainder of this post, I present some power spectra and spectral correlation functions for SRRC BPSK signals generated using the MATLAB and C methods, as well as some ideal functions from theory.

Power Spectra and Spectral Correlation Functions

The ideal spectral correlation function can be computed for SRRC PSK/QAM, and is readily numerically evaluated. In the six graphs that follow, the symbol rate for the SRRC BPSK signal is 1/T_0 = 1/5 and the carrier offset is zero. The ideal PSDs as a function of roll-off R and frequency f are shown here:


The corresponding estimated PSDs from the CSP blog’s C-language communication-signal simulator are shown next:


and the estimated PSDs for the MATLAB generator are:


The sequence of plots for the non-conjugate SCF for \alpha = 1/T_0 are shown next:




The measured functions differ somewhat from the ideal, but they generally agree. The difference of most concern is for the MATLAB-based case of R=0. But perhaps the Mathworks did not sufficiently test the rather degenerate case of R=0, or I’m somehow using it incorrectly.

There are practical signals, by the way, that correspond to R=0, such as the duobinary signals (The Literature [R44]). However, the transmitted symbols are no longer IID. Also, as mentioned in my introductory post on higher-order cyclostationarity, such duobinary signals do possess exploitable higher-order features.

Finally, let’s look at a sequence of complete estimated spectral correlation functions as a function of the roll-off R. Here the symbol rate is 1/T_0 = 1/5 and the carrier frequency is 0.05.








The bottom line for CSP is that as the excess bandwidth (SRRC roll-off parameter) becomes smaller and smaller in order to force the transmitted signal into an ever-more-narrow frequency slot, the ability of CSP detectors to reliably detect the non-conjugate symbol-rate feature steadily decreases. Eventually, when the excess bandwidth is zero (SRRC roll-off parameter is zero), the BPSK signal looks like conventional AM, and the non-BPSK SRRC QAM/PSK signals are stationary of order two. They all still have higher-order cyclostationarity, though!

13 thoughts on “Square-Root Raised-Cosine PSK/QAM

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s