Added adaptive CMA equalizer, "fixed" CD and phase noise
[4yp.git] / phaseNoiseCorr.m
CommitLineData
1eeb62fb
AIL
1function [rPhaseEq, phiests] = phaseNoiseCorr(r, M, blocksize)
2 %% phase noise correction
3 phiests = zeros(1, length(r));
4 rPhaseEq = zeros(1, length(r));
5 for l = 1:blocksize:length(r)
6 block = r(l : min(l + blocksize - 1, length(r)));
7
8 sum_M = sum(block .^ M);
5e9be3c4
AIL
9 %% if phase of 0 symbol is 0, use:
10 phi_est = angle(sum_M) / M;
11 %% if phase of 0 symbol is pi/M, use:
12 %% phi_est = angle(-sum_M) / M;
1eeb62fb
AIL
13
14 if l > 1
15 %% phase unwrapping
16 phi_prev = phiests(l - 1);
17 m = floor(0.5 + (phi_prev - phi_est) * M / (2 * pi));
18 phi_est = phi_est + m * 2 * pi / M;
19 end
20
21 phiests(l:min(l+blocksize-1, length(r))) = phi_est * ones(1, min(blocksize, length(r) - l+1));
22
23 block = block .* exp(j * -phi_est);
24 rPhaseEq(l : min(l + blocksize-1, length(r))) = block;
25 end
26end