Working Kerr effect; PDM; speedups; removed unused files
[4yp.git] / ssf_pdm.m
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.