1 function xCDKerr = splitstepfourier(x, D, lambda, z, Tsamp, gamma)
2 %% Simulate chromatic dispersion and Kerr effect,
3 %% with attenuation and amplification.
5 %% - x: input waveform (pulse-shaped)
6 %% - D: dispersion coefficient (ps / (nm km))
7 %% - lambda: wavelength (nm)
8 %% - z: length of fibre (km)
9 %% - Tsamp: sampling time (s)
11 %% - xCDKerr: x after being dispersed.
13 %% Convert everything to SI base units
16 lambda = lambda * 1e-9; % m
19 gamma = gamma * 1e-3; % watt^-1 / m
25 alpha = alpha / 10 * log(10); % /km
26 alpha = alpha * 1e-3; % /m
28 hhz = 1j * gamma * dz;
31 xCDKerr = x .* exp(abs(x) .^ 2 .* hhz / 2 - alpha * dz / 4);
38 omega = (2*pi * fs / n * [(0 : floor((n-1)/2)), (-ceil((n-1)/2) : -1)]).';
39 dispDFT = xDFT .* exp(-1j * omega.^2 * D * lambda^2 * dz / (4 * pi * c));
40 xCDKerr = ifft(dispDFT);
42 xCDKerr = xCDKerr .* exp(abs(xCDKerr) .^ 2 .* hhz - alpha * dz / 2);
44 xCDKerr = xCDKerr * 10; % amplification
47 xCDKerr = xCDKerr .* exp(-abs(xCDKerr) .^ 2 .* hhz / 2 + alpha * dz / 4);
50 %% [1]: S.J. Savory, Digital filters for coherent optical receivers, 2008.