Carrier Phase Tracking, Timing Synchronization, Equalization
Turing the received baseband waveform into bits The received baseband waveform is hard to figure out. Problems to solve include: Deal with the carrier frequency difference (the phase drift) Figure out when to take samples to avoid Inter-symbol interference Deal with multi-path As we will see, the solutions are just some heuristic algorithms that usually work. The constraint is that they can use only a very limited time to compute. Divide and conquer. Solve these problems one by one. http://www.gnuradio.org/trac/browser/gnuradio/trunk/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.cc?rev=7389
Carrier Phase Tracking First, let’s try to remove the frequency offset and turn the waveform into a waveform where the real component is none zero and the imaginary component is all zero. The idea is to use the decision, while assuming that the decisions are correct (may not be correct!) Use the current sample to figure out the difference. Current phase error is the phase difference between the current sample with the decision (assuming the decision is correct).
Carrier Phase Tracking First, get the phase error phase_error = (*this.*d_phase_error_detector)(sample); for BPSK, -arg(sample*conj(d_constellation[d_current_const_point])) Basically, if the sample falls in the x line, there is no phase error Im Re
Carrier Phase Tracking Then, adjust the phase based on the error value d_freq += d_beta*phase_error; d_phase += d_freq + d_alpha*phase_error; If error is positive, the phase will be increased, if the error is negative, the phase will be decreased That’s it.
Sample Time You need to take samples at the right time. Designed algorithms to figure out the right time to take the samples. The current implementation uses an optimized Mueller and Muller algorithm. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=392689
The Basic Idea The basic Mueller and Muller algorithm: u=a_{k-1} x_k – a_{k} x_{k-1}. u is the timing error. Consider the pulse shape. Recall that if the input is 1, the output is h(t), where h(t) is the impulse response of the low pass filter. (-h(t) if the input is -1). In this example, if off by a delta, x_{k-1} will be deducted by the impulse response at T+delta, which is negative, while x_{k} will be added by the impulse response at -T+delta, which is positive. k-1 k