Commit | Line | Data |
---|---|---|
5fae0077 AIL |
1 | function [xCDKerr, yCDKerr] = ... |
2 | ssf_pdm(x, y, D, lambda, z, Tsamp, gamma) | |
3 | %% Simulate chromatic dispersion and Kerr effect, | |
4 | %% with attenuation and amplification. | |
5 | %% Params: | |
6 | %% - x: input waveform (pulse-shaped) | |
7 | %% - D: dispersion coefficient (ps / (nm km)) | |
8 | %% - lambda: wavelength (nm) | |
9 | %% - z: length of fibre (km) | |
10 | %% - Tsamp: sampling time (s) | |
11 | %% Output: | |
12 | %% - xCDKerr: x after being dispersed. | |
13 | ||
14 | %% Convert everything to SI base units | |
15 | c = 299792458; % m/s | |
16 | D = D * 1e-6; % s/m^2 | |
17 | lambda = lambda * 1e-9; % m | |
18 | z = z * 1e3; % m | |
19 | ||
20 | gamma = gamma * 1e-3; % watt^-1 / m | |
21 | dz = 1; % km | |
22 | dz = dz * 1e3; % m | |
23 | stepnum = z / dz; | |
24 | ||
25 | alpha = 0.2; % dB/km | |
26 | alpha = alpha / 10 * log(10); % /km | |
27 | alpha = alpha * 1e-3; % /m | |
28 | ||
29 | hhz = 1j * (8/9) * gamma * dz; | |
30 | ||
31 | P = abs(x) .^ 2 + abs(y) .^ 2; | |
32 | ||
33 | xCDKerr = x .* exp(P .* hhz / 2 - alpha * dz / 4); | |
34 | yCDKerr = y .* exp(P .* hhz / 2 - alpha * dz / 4); | |
35 | ||
36 | for i = 1 : stepnum | |
37 | xDFT = fft(xCDKerr); | |
38 | yDFT = fft(yCDKerr); | |
39 | n = length(xCDKerr); | |
40 | fs = 1 / Tsamp; | |
41 | ||
42 | omega = (2*pi * fs / n * [(0 : floor((n-1)/2)), (-ceil((n-1)/2) : -1)]).'; | |
43 | dispDFT = exp(-1j * omega.^2 * D * lambda^2 * dz / (4 * pi * c)); | |
44 | ||
45 | xCDKerr = ifft(xDFT .* dispDFT); | |
46 | yCDKerr = ifft(yDFT .* dispDFT); | |
47 | ||
48 | P = abs(xCDKerr) .^ 2 + abs(yCDKerr) .^ 2; | |
49 | xCDKerr = xCDKerr .* exp(P .* hhz - alpha * dz / 2); | |
50 | yCDKerr = yCDKerr .* exp(P .* hhz - alpha * dz / 2); | |
51 | if mod(i, 50) == 0 | |
52 | xCDKerr = xCDKerr * 10; % amplification | |
53 | yCDKerr = yCDKerr * 10; | |
54 | end | |
55 | end | |
56 | P = abs(xCDKerr) .^ 2 + abs(yCDKerr) .^ 2; | |
57 | xCDKerr = xCDKerr .* exp(-P .* hhz / 2 + alpha * dz / 4); | |
58 | yCDKerr = yCDKerr .* exp(-P .* hhz / 2 + alpha * dz / 4); | |
59 | end | |
60 | %% References | |
61 | %% [1]: S.J. Savory, Digital filters for coherent optical receivers, 2008. |