Commit | Line | Data |
---|---|---|
f9a73e9e | 1 | function [rPhaseEq, phiests] = phaseNoiseCorr(r, M, phoffset, blocksize) |
1eeb62fb AIL |
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); | |
f9a73e9e | 9 | phi_est = angle(sum_M .* exp(j * M * phoffset)) / M; |
1eeb62fb AIL |
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 |