| 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. |