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.
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)
12 %% - xCDKerr: x after being dispersed.
14 %% Convert everything to SI base units
17 lambda = lambda * 1e-9; % m
20 gamma = gamma * 1e-3; % watt^-1 / m
26 alpha = alpha / 10 * log(10); % /km
27 alpha = alpha * 1e-3; % /m
29 hhz = 1j * (8/9) * gamma * dz;
31 P = abs(x) .^ 2 + abs(y) .^ 2;
33 xCDKerr = x .* exp(P .* hhz / 2 - alpha * dz / 4);
34 yCDKerr = y .* exp(P .* hhz / 2 - alpha * dz / 4);
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));
45 xCDKerr = ifft(xDFT .* dispDFT);
46 yCDKerr = ifft(yDFT .* dispDFT);
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);
52 xCDKerr = xCDKerr * 10; % amplification
53 yCDKerr = yCDKerr * 10;
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);
61 %% [1]: S.J. Savory, Digital filters for coherent optical receivers, 2008.