Working Kerr effect; PDM; speedups; removed unused files
[4yp.git] / phaseNoiseCorr.m
1 function [rPhaseEq, phiests] = phaseNoiseCorr(r, M, phoffset, 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);
9     phi_est = angle(sum_M .* exp(j * M * phoffset)) / M;
10
11     if l > 1
12       %% phase unwrapping
13       phi_prev = phiests(l - 1);
14       m = floor(0.5 + (phi_prev - phi_est) * M / (2 * pi));
15       phi_est = phi_est + m * 2 * pi / M;
16     end
17
18     phiests(l:min(l+blocksize-1, length(r))) = phi_est * ones(1, min(blocksize, length(r) - l+1));
19
20     block = block .* exp(j * -phi_est);
21     rPhaseEq(l : min(l + blocksize-1, length(r))) = block;
22   end
23 end