Working Kerr effect; PDM; speedups; removed unused files
[4yp.git] / CDCompensation.m
CommitLineData
f9a73e9e 1function [yCDComp, kstart] = CDCompensation(y, D, lambda, z, Tsamp)
1eeb62fb
AIL
2 %% Chromatic dispersion compensation.
3 %% Params:
4 %% - y: received waveform with CD
5 %% - D: dispersion coefficient (ps / (nm km))
6 %% - lambda: wavelength (nm)
7 %% - z: length of fibre (km)
8 %% - Tsamp: sampling time (s)
9 %% Output:
10 %% - yCDComp: y after performing CD compensation
11
12 %% Convert everything to SI base units
13 c = 299792458; % m/s
14 D = D * 1e-6; % s/m^2
15 lambda = lambda * 1e-9; % m
16 z = z * 1e3; % m
17
18 %% Implementing Eq. (9) in [1].
19 N = 2 * floor(abs(D) * lambda^2 * z / (2 * c * Tsamp^2)) + 1;
20 k = -floor(N / 2) : floor(N / 2);
f9a73e9e 21 kstart = -floor(N/2);
1eeb62fb
AIL
22
23 % h: FIR filter
5fae0077
AIL
24 h = exp(-j * pi * c * Tsamp^2 * k .^ 2 / (D * lambda^2 * z));
25
26 len_fft = max(length(y), length(h));
27 H = fft(h, len_fft);
28 Y = fft(y, len_fft);
29
30 yCDComp = ifft(H.' .* Y);
31 l = (length(h) - 1) / 2;
32 if l > 0
33 yCDComp = [yCDComp(l:end); yCDComp(1:l-1)];
34 else
35 yCDComp = [yCDComp(end); yCDComp(1:end-1)];
36 end
1eeb62fb 37
1eeb62fb
AIL
38end
39%% References
40%% [1]: S.J. Savory, Digital filters for coherent optical receivers, 2008.