Commit | Line | Data |
---|---|---|
5fae0077 AIL |
1 | function xCDKerr = splitstepfourier(x, D, lambda, z, Tsamp, gamma) |
2 | %% Simulate chromatic dispersion and Kerr effect, | |
3 | %% with attenuation and amplification. | |
f9a73e9e AIL |
4 | %% Params: |
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) | |
10 | %% Output: | |
5fae0077 | 11 | %% - xCDKerr: x after being dispersed. |
f9a73e9e AIL |
12 | |
13 | %% Convert everything to SI base units | |
14 | c = 299792458; % m/s | |
15 | D = D * 1e-6; % s/m^2 | |
16 | lambda = lambda * 1e-9; % m | |
17 | z = z * 1e3; % m | |
18 | ||
19 | gamma = gamma * 1e-3; % watt^-1 / m | |
5fae0077 AIL |
20 | dz = 1; % km |
21 | dz = dz * 1e3; % m | |
22 | stepnum = z / dz; | |
f9a73e9e | 23 | |
5fae0077 AIL |
24 | alpha = 0.2; % dB/km |
25 | alpha = alpha / 10 * log(10); % /km | |
26 | alpha = alpha * 1e-3; % /m | |
f9a73e9e | 27 | |
5fae0077 | 28 | hhz = 1j * gamma * dz; |
f9a73e9e | 29 | |
f9a73e9e | 30 | |
5fae0077 | 31 | xCDKerr = x .* exp(abs(x) .^ 2 .* hhz / 2 - alpha * dz / 4); |
f9a73e9e | 32 | |
f9a73e9e | 33 | for i = 1 : stepnum |
5fae0077 AIL |
34 | xDFT = fft(xCDKerr); |
35 | n = length(xCDKerr); | |
f9a73e9e AIL |
36 | fs = 1 / Tsamp; |
37 | ||
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)); | |
5fae0077 | 40 | xCDKerr = ifft(dispDFT); |
f9a73e9e | 41 | |
5fae0077 AIL |
42 | xCDKerr = xCDKerr .* exp(abs(xCDKerr) .^ 2 .* hhz - alpha * dz / 2); |
43 | if mod(i, 50) == 0 | |
44 | xCDKerr = xCDKerr * 10; % amplification | |
45 | end | |
f9a73e9e | 46 | end |
5fae0077 | 47 | xCDKerr = xCDKerr .* exp(-abs(xCDKerr) .^ 2 .* hhz / 2 + alpha * dz / 4); |
f9a73e9e AIL |
48 | end |
49 | %% References | |
50 | %% [1]: S.J. Savory, Digital filters for coherent optical receivers, 2008. |