Commit | Line | Data |
---|---|---|
f9a73e9e | 1 | function [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 | |
24 | h = sqrt(j * c * Tsamp^2 / (D * lambda^2 * z)) * ... | |
25 | exp(-j * pi * c * Tsamp^2 * k .^ 2 / (D * lambda^2 * z)); | |
26 | ||
27 | yCDComp = upfirdn(y, h); | |
28 | yCDComp = yCDComp(N:end); % truncate filter transients | |
29 | end | |
30 | %% References | |
31 | %% [1]: S.J. Savory, Digital filters for coherent optical receivers, 2008. |