hamming
.
The amplitude values of the causal Hamming window
of length N samples is defined as
w[n] = 0.54 - 0.46 cos(2 pi n / (N - 1))for n = 0, 1, ..., N-1.
The group delay of a Hamming pulse of length N samples is (N-1)/2 samples.
The error surface is "basically a plot of the objective as a function of the variable that is being optimized" (page 118). Examples of error surfaces are in Fig. 6.17 on page 119.
The choice of mu has an analogy with the location of a single real-valued pole in a discrete-time LTI system. If we start the pole location at zero and move it towards the unit circle, i.e. toward a value of one, then the transition from passband to stopband will become more narrow. If the pole is on the unit circle, then impulse response will be a unit step function (which oscillates at zero frequency). If the pole moves outside the unit circle, the impulse response grows without bound.
In the update equation, a positive value of mu corresponds to finding the minimum of the objective function, and a negative value of mu corresponds to finding the maximum of the objective function. When mu is zero, no update to the initial guess is made during the iterations.
The problem statement refers to a parameter l which was set to 125 in idsys.m. Page 172 of Software Defined Radio has the following explanation: "The initial delay of 125 corresponds to half the length of the lowpass filter (0.5*fl) plus half the length of the correlator filter (0.5*M) plus half a symbol period (0.5*M), which accounts for the delay from the start of each pulse to its peak."
This problem uses 4-PAM encoding, i.e. 2 bits per symbol. The message to be sent is a string of ASCII characters. Since each ASCII character is eight bits, each ASCII character will correspond to four two-bit symbols.
In analyzing the results, it might be helpful to analyze the sequence of processing steps in the transmitter and receiver in the discrete-time frequency domain as follows.
The parameter M controls the number of samples per symbol. The duration of the discrete-time pulse shape is M samples. (More generally, it is proportionally to M.)
In continuous time, the wider the pulse, the narrower the bandwidth. For example, a rectangular pulse of T seconds in duration has a null bandwidth of 1/T in Hz or 2 pi / T in rad/s. A similar insight holds in discrete time. For example, a rectangular pulse of N samples in duration has a null bandwidth of 2 pi / N in rad/sample.
The Matlab simulation is in discrete time. The discrete-time index is implied in the Matlab code
t= 1/M : 1/M : length(x)/M;which can be rewritten as
n = 1 : length(x); t = n / M;M is both the number of samples per symbol and the sampling rate:
c(t) = cos(2 pi fc t)Letting t = n / M,
c[n] = cos(2 pi (fc / M) n)To prevent aliasing, M > 2 fc. With fc = 20, M > 40 would prevent aliasing and modulation by c[n] and demodulation by c[n] works properly. Even when aliasing occurs for M ≤ 40, modulation by c[n] and demodulation by c[n] works properly for most values of M.
Assuming that PAM symbols are equally likely, PAM symbol amplitudes will have an average value of zero. After pulse shaping, the baseband signal will also have an average value of zero. After upconversion, the bandpass signal will have zero content at the carrier frequency, which makes it difficult for the receiver to locate and track the carrier frequency.
In digital communication systems, it is common to use data scramblers to break up long strings of 0 and 1 bits. The spreads the energy in those symbol periods over the transmission band instead of being concentrated at zero frequency at baseband and the carrier frequency in bandpass transmission.
At the receiver, we can emphasize the frequency content around the carrier by applying the right static nonlinearity, such as a squaring block or an absolute value block. The nonlinearity will create a harmonic (or multiple harmonics) of the carrier frequency and each harmonic will have significant power present.
In this homework problem, the receiver is trying to extract information about the carrier frequency, and hence, we would like to apply the appropriate bandpass filter after the static nonlinearity. The center frequency of the bandpass filter will vary with the nonlinearity being applied. For a squaring block, the center frequency will be twice the carrier frequency.
You must run "pulrecsig.m" to generate to suppressed carrier signal defined in MATLAB variable rsc, and then run "pllpreprocess.m". The Software Receiver Design book describes this.
The "pulrecsig.m" script generates two upconverted signals.
One is a "suppressed carrier" signal rsc
;
i.e., there isn't any power at the carrier frequency.
The other is called a "large carrier" signal rlc
;
i.e., there is significant power at the carrier frequency.
The "pulrecsign.m" script then uses the fast Fourier transform (FFT)
to locate the carrier frequency by find the peak in the
magnitude spectra of the upconverted signals.
The FFT method finds the carrier frequency freqL
exactly for the large carrier signal and carrier frequency
freqS
approximately for the suppressed carrier
signal (with about 3.5% error).
The phase offset is computed by using the phase of the FFT
at the estimated carrier frequency value.
The FFT method yields large error in its phase offset estimates
for both upconverted signals.
freqL = 1000 phaseL = -0.3717 freqS = 1.0347e+003 phaseS = 1.9694If you are using the squaring block, then pllpreprocess.m will estimate twice the carrier frequency and twice the phase offset.