# The Spectral Correlation Function for Rectangular-Pulse BPSK

In this post, I show the non-conjugate and conjugate spectral correlation functions (SCFs) for the rectangular-pulse BPSK signal we generated in a previous post. The theoretical SCF can be analytically determined for a rectangular-pulse BPSK signal with independent and identically distributed bits (see My Papers [6] for example or The Literature [R1]). The cycle frequencies are, of course, equal to those for the CAF for rectangular-pulse BPSK. In particular, for the non-conjugate SCF, we have cycle frequencies of $\alpha = k f_{bit}$ for all integers $k$, and for the conjugate SCF we have $\alpha = 2f_c \pm k f_{bit}$.

The simulated BPSK signal is used as input to the frequency-smoothing method of spectral correlation estimation (My Papers [6], The Literature [R1, R5]). The signal has bit rate of $f_{bit} = 100$ kHz and a carrier frequency of $f_c = 50$ kHz. (The simulated signal as a bit rate of $0.1$ and a carrier offset of $0.05$, and we have selected the somewhat arbitrary sampling rate of $1.0$ MHz.) The result is shown below:

Only the non-negative cycle frequencies are shown for the non-conjugate SCF due to symmetry of the SCF.

The theoretical SCF formula can be numerically evaluated using the parameters of our rectangular-pulse BPSK signal, and the result is plotted below:

The match is excellent!

At this point, we have generated a useful test signal, defined the basic temporal and spectral second-order parameters of cyclostationary signals, and shown that our formulas and estimates match for the test signal. We are prepared to begin study of more complex mathematical topics and, perhaps most usefully, study of the cyclostationarity properties of sophisticated real-world signals.

### Comparison to a Bandwidth-Efficient BPSK Signal

The rectangular-pulse BPSK signal has infinite bandwidth, and so theoretically has an infinite number of cycle frequencies. But most of them correspond to spectral correlation functions with very small maximum magnitudes. Most BPSK signals we’re likely to encounter in practice will be bandwidth-efficient signals, meaning their occupied bandwidth is not more than twice their symbol rate. A common pulse function is the square-root raised-cosine pulse, which is characterized by the pulse roll-off parameter $r \in [0, 1]$. For $r=0$, the occupied bandwidth of the signal is equal to the symbol rate, and the power spectrum for the signal is a rectangle. For $r=1$, the occupied bandwidth is twice the symbol rate, and the power spectrum smoothly varies from its peak to zero. See my post on the cyclostationarity of SRRC QAM/PSK signals for a lot more details. Also see the post on digital QAM and the gallery post.

Here, we’ll just compare to a single SRRC BPSK signal with $r = 0.3$:

## 10 thoughts on “The Spectral Correlation Function for Rectangular-Pulse BPSK”

1. Can you post the matlab code to plot these figures ?

2. Sorry for the late reply. The code that plots my SCFs and CAFs strongly depends, of course, on the format of the SCF or CAF to be plotted. We haven’t covered estimators yet. But if you can get your estimates or ideal functions in matrix form, so that each SCF estimate, for example, corresponds to all frequencies [-0.5, 0.5) regardless of the value of cycle frequency, then you can use waterfall.m in MATLAB to get plots similar to mine:

h = waterfall (fnc(1:subsamp:end)*fs/fsFac + fcarrier/fsFac, …
anc*fs/asFac, …
((abs(ync(:, 1:subsamp:end)))), zeros(size(ync(:, 1:subsamp:end))));
set (h, ‘edgecolor’, [0 0 0]);
set (h, ‘facecolor’, [0.9 0.9 0.95]);
grid on;
axis tight;
xlabel (‘f (Hz)’);
ylabel (‘\alpha (Hz)’);

Here fnc is the frequency vector, anc is the cycle-frequency vector, and the function to be plotted is the matrix ync. The extra zeros in the waterfall.m call force the color of the edges to be black, then I color the faces with the set() calls.

The subsamp integer controls how much I subsample the various functions, which is usually needed because MATLAB takes a long time to plot the surface if the sizes of fnc and anc are large.

I usually have to play around with the viewing angle when doing three-dimensional plots. For these plots I used

view (-150, 30);

Does that help?

This site uses Akismet to reduce spam. Learn how your comment data is processed.