Working Kerr effect; PDM; speedups; removed unused files
[4yp.git] / ssf_pdm.m
diff --git a/ssf_pdm.m b/ssf_pdm.m
new file mode 100644 (file)
index 0000000..55511fe
--- /dev/null
+++ b/ssf_pdm.m
@@ -0,0 +1,61 @@
+function [xCDKerr, yCDKerr] = ...
+         ssf_pdm(x, y, D, lambda, z, Tsamp, gamma)
+  %% Simulate chromatic dispersion and Kerr effect,
+  %% with attenuation and amplification.
+  %% Params:
+  %%  - x: input waveform (pulse-shaped)
+  %%  - D: dispersion coefficient (ps / (nm km))
+  %%  - lambda: wavelength (nm)
+  %%  - z: length of fibre (km)
+  %%  - Tsamp: sampling time (s)
+  %% Output:
+  %%  - xCDKerr: x after being dispersed.
+
+  %% Convert everything to SI base units
+  c = 299792458; % m/s
+  D = D * 1e-6; % s/m^2
+  lambda = lambda * 1e-9; % m
+  z = z * 1e3; % m
+
+  gamma = gamma * 1e-3; % watt^-1 / m
+  dz = 1; % km
+  dz = dz * 1e3; % m
+  stepnum = z / dz;
+
+  alpha = 0.2; % dB/km
+  alpha = alpha / 10 * log(10); % /km
+  alpha = alpha * 1e-3; % /m
+
+  hhz = 1j * (8/9) * gamma * dz;
+
+  P = abs(x) .^ 2 + abs(y) .^ 2;
+
+  xCDKerr = x .* exp(P .* hhz / 2 - alpha * dz / 4);
+  yCDKerr = y .* exp(P .* hhz / 2 - alpha * dz / 4);
+
+  for i = 1 : stepnum
+    xDFT = fft(xCDKerr);
+    yDFT = fft(yCDKerr);
+    n = length(xCDKerr);
+    fs = 1 / Tsamp;
+
+    omega = (2*pi * fs / n * [(0 : floor((n-1)/2)), (-ceil((n-1)/2) : -1)]).';
+    dispDFT = exp(-1j * omega.^2 * D * lambda^2 * dz / (4 * pi * c));
+
+    xCDKerr = ifft(xDFT .* dispDFT);
+    yCDKerr = ifft(yDFT .* dispDFT);
+
+    P = abs(xCDKerr) .^ 2 + abs(yCDKerr) .^ 2;
+    xCDKerr = xCDKerr .* exp(P .* hhz - alpha * dz / 2);
+    yCDKerr = yCDKerr .* exp(P .* hhz - alpha * dz / 2);
+    if mod(i, 50) == 0
+      xCDKerr = xCDKerr * 10; % amplification
+      yCDKerr = yCDKerr * 10;
+    end
+  end
+  P = abs(xCDKerr) .^ 2 + abs(yCDKerr) .^ 2;
+  xCDKerr = xCDKerr .* exp(-P .* hhz / 2 + alpha * dz / 4);
+  yCDKerr = yCDKerr .* exp(-P .* hhz / 2 + alpha * dz / 4);
+end
+%% References
+%% [1]: S.J. Savory, Digital filters for coherent optical receivers, 2008.