<< Chapter < Page | Chapter >> Page > |
If the are too noisy, the stepsize can be decreased (or the length of the average, if present, can be increased), although these will inevitably slow theconvergence of the algorithm.
The algorithm
[link] is easy to implement,
though it requiressamples of the waveform
at three different points:
,
, and
.
One possibility is to straightforwardly sample three times. Sincesampling is done by hardware, this is a hardware intensive solution.
Alternatively, the values can be interpolated. Recall from thesampling theorem that a waveform can be reconstructed exactly at
any point, as long as it is sampled faster than twice thehighest frequency. This is useful since the
values at
and at
can be interpolated from the nearby samples
.
Recall that interpolation was discussed in
[link] ,
and the M
atlab routine
interpsinc.m
makes it easy to implement
bandlimited interpolation and reconstruction.Of course, this requires extra calculations, and so is a more “software
intensive” solution. This strategy is diagrammed in
[link] .
The following code prepares the transmitted signal
that will be used subsequently to simulate the timing recovery methods.The user specifies the signal constellation (default is 4-PAM),
the number of data points
n
, and the oversampling factor
m
. The channel is allowed to be
nonunity, and a square-root raised cosine pulsewith width
2*l+1
and rolloff
beta
is used as the
default transmit (pulse shaping) filter.An initial timing offset is specified in
toffset
, and the
code implements this delay with an offset in the
srrc.m
function. The matched filter is implemented using
the same SRRC (but without the time delay).Thus, the timing offset is not known at the
receiver.
n=10000; % number of data points
m=2; % oversampling factorbeta=0.3; % rolloff parameter for srrc
l=50; % 1/2 length of pulse shape (in symbols)chan=[1]; % T/m "channel"toffset=-0.3; % initial timing offset
pulshap=srrc(l,beta,m,toffset); % srrc pulse shape with timing offsets=pam(n,4,5); % random data sequence with var=5
sup=zeros(1,n*m); % upsample the data by placing...sup(1:m:n*m)=s; % ... m-1 zeros between each data point
hh=conv(pulshap,chan); % ... and pulse shaper=conv(hh,sup); % ... to get received signal
matchfilt=srrc(l,beta,m,0); % matched filter = srrc pulse shapex=conv(r,matchfilt); % convolve signal with matched filter
clockrecDD.m
(part 1) prepare transmitted signal
(download file)
The goal of the timing recovery in
clockrecDD.m
is to find
(the negative of) the value of
toffset
using only the
received signal—that is, to have
tau
converge
to
-toffset
. The adaptive element is implemented
in
clockrecDD.m
using the iterative cluster
variance algorithm
[link] .
The algorithm is initialized with an offset estimateof
tau=0
and stepsize
mu
.
The received signal is sampled at
m
times the
symbol rate, and the
while
loop runs though the
data, incrementing
i
once for each symbol
(and incrementing
tnow
by
m
for each symbol).
The offsets
tau
and
tau+m
are indistinguishable from the point of
view of the algorithm.The update term contains the interpolated value
xs
as well as two other interpolated values to the left and right
that are used to approximate the derivative term.
Notification Switch
Would you like to follow the 'Software receiver design' conversation and receive update notifications?