X-Git-Url: https://adrianiainlam.tk/git/?p=4yp.git;a=blobdiff_plain;f=chromaticDispersion.m;h=bc04e5972adfe298ba67af8b9e5efa3ff5078b49;hp=49a49a3575e98da57084f608899d685ff4ef5195;hb=5fae00773184080617ac022c07495d365975e0e1;hpb=427465905320390cebf3d247b8beace19387c70f diff --git a/chromaticDispersion.m b/chromaticDispersion.m index 49a49a3..bc04e59 100644 --- a/chromaticDispersion.m +++ b/chromaticDispersion.m @@ -26,10 +26,21 @@ function [xCD, kstart] = chromaticDispersion(x, D, lambda, z, Tsamp) t = k * Tsamp; % Impulse response - g = sqrt(c / (j * D * lambda^2 * z)) * ... - exp(j * pi * c / (D * lambda^2 * z) * t .^ 2); + g = exp(j * pi * c / (D * lambda^2 * z) * t .^ 2); - xCD = conv(x, g); + lenx = length(x); + leng = length(g); + + len_fft = max(lenx, leng); + + G = fft(g, len_fft); + X = fft(x, len_fft); + + xCD = ifft(G.' .* X); + l = (leng - 1) / 2; + if l > 0 + xCD = [xCD(l:end); xCD(1:l-1)]; + end kstart = 1 - kmax; end