<< Chapter < Page | Chapter >> Page > |
To be precise, the goal of the optimization is to find so as to maximize
which can be optimized using an adaptive element
The updates proceed in the same direction as the gradient (rather than minus the gradient) becausethe goal is to maximize, to find the that leads to the largest value of (rather than the smallest).The derivative of can be approximated to swap the differentiation and averaging operations
The derivative of can be approximated numerically. One way of doing this is to use [link] , which is valid for small . Substituting [link] and [link] into [link] and evaluating at gives the algorithm
where the stepsize . As usual, the small stepsize algorithm acts as a lowpass filter tosmooth the estimates of , and it is common to remove the explicit outer averaging operation, leading to
If is noisy, then can be decreased (or the length of the average, if present, can be increased), although these will inevitably slow theconvergence of the algorithm.
Using the algorithm [link] is similar to implementing the cluster variance scheme [link] , and a “software intensive” solution is diagrammed in [link] . This uses interpolation (resampling) to reconstructthe values of at and at from nearby samples . As suggested by [link] , the same idea can be implemented in analog, hybrid,or digital form.
The following program implements the timing recovery algorithm
using the recursive output power maximization algorithm
[link] .
The user specifies the transmitted signal, channel,and pulse shaping exactly as in part 1 of
clockrecDD.m
.
An initial timing offset
toffset
is specified, and the algorithm
in
clockrecOP.m
tries to find (the negative of)
this value using only the received signal.
tnow=l*m+1; tau=0; xs=zeros(1,n); % initialize variables
tausave=zeros(1,n); tausave(1)=tau; i=0;mu=0.05; % algorithm stepsize
delta=0.1; % time for derivativewhile tnow<length(x)-l*m % run iteration
i=i+1; xs(i)=interpsinc(x,tnow+tau,l); % interpolated value at tnow+tau
x_deltap=interpsinc(x,tnow+tau+delta,l); % get value to the right x_deltam=interpsinc(x,tnow+tau-delta,l); % get value to the left
dx=x_deltap-x_deltam; % calculate numerical derivative tau=tau+mu*dx*xs(i); % alg update (energy)
tnow=tnow+m; tausave(i)=tau; % save for plottingend
clockrecOP.m
clock recovery maximizing output power
(download file)
Typical output of the program is plotted in
[link] .
For this plot, the message was drawn from a 2-PAM binary signal,which is recovered nicely by the algorithm, as shown in the
top plot. The bottom plot shows thetrajectory of the offset estimation as it converges to the
“unknown” value at
-toffset
.
Notification Switch
Would you like to follow the 'Software receiver design' conversation and receive update notifications?