X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=CD_AWGN.m;h=241d22a66839a16e93452f377593fd4aeedeaca7;hb=934d76babd9beed87a3ef60a075b556a63899fed;hp=4db7aad3c0dffa66d2a0c434aac9e988963a9bee;hpb=f9a73e9e2254af8edeb8a34185e98cd8c809ac0e;p=4yp.git diff --git a/CD_AWGN.m b/CD_AWGN.m index 4db7aad..241d22a 100644 --- a/CD_AWGN.m +++ b/CD_AWGN.m @@ -1,18 +1,18 @@ -numSymbs = 5e5; +numSymbs = 2^16; M = 4; Rsym = 2.5e10; % symbol rate (sym/sec) rolloff = 0.25; span = 6; % filter span -sps = 2; % samples per symbol +sps = 8; % samples per symbol fs = Rsym * sps; % sampling freq (Hz) Tsamp = 1 / fs; t = (0 : 1 / fs : numSymbs / Rsym + (1.5 * span * sps - 1) / fs).'; -EbN0_db = 0:0.2:14; +EbN0_db = 0:0.5:14; EbN0 = 10 .^ (EbN0_db ./ 10); Es = 1; @@ -36,26 +36,30 @@ x = txFilter(modData, rolloff, span, sps); %% Simulate chromatic dispersion D = 17; % ps / (nm km) lambda = 1550; % nm -z = 60;%000; % km +z = 3000; % km -usingFFT = 1 -xCD = chromaticDispersion_FFT(x, D, lambda, z, Tsamp); -%%xCD = normalizeEnergy(xCD, numSymbs, 1); -%%xCD = x; + +[xCD, xCDkstart] = chromaticDispersion(x, D, lambda, z, Tsamp); + +TsampOrig = Tsamp; for i = 1:plotlen + sps = 8; + snr = EbN0_db(i) + 10 * log10(log2(M)) - 10 * log10(sps); - noiseEnergy = 10 ^ (-snr / 10); y = awgn(xCD, snr, 'measured'); - %%y = xCD; r = rxFilter(y, rolloff, span, sps); - rCDComp = CDCompensation(r, D, lambda, z, Tsamp); + + sps = 2; + Tsamp = TsampOrig * 4; + + [rCDComp, CDCompkstart] = CDCompensation(r, D, lambda, z, Tsamp); rCDComp = normalizeEnergy(rCDComp, numSymbs*sps, 1); - rSampled = rCDComp(sps*span/2+1:sps:(numSymbs+span/2)*sps); - rNoCompSampled = r(sps*span/2+1:sps:(numSymbs+span/2)*sps); + rSampled = rCDComp(2:2:end); + rNoCompSampled = r(2:2:end); %% rotate rNoCompSampled to match original data theta = angle(-sum(rNoCompSampled .^ M)) / M;