X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=phasenoise1signal.m;h=fcd371a1426c7354066232c57f6b28119504e80d;hb=4fb42ae8b219be3b6644f829583584d249bf139d;hp=e0ee39d5bda89f8a67a6bd3b80c4b536f569721b;hpb=1eeb62fbc496ed5c170d199143ad53e28122d29c;p=4yp.git diff --git a/phasenoise1signal.m b/phasenoise1signal.m index e0ee39d..fcd371a 100644 --- a/phasenoise1signal.m +++ b/phasenoise1signal.m @@ -2,14 +2,14 @@ numSymbs = 10000; M = 4; Rsym = 2.5e10; % symbol rate (sym/sec) -rolloff = 0.25; +rolloff = 0.5; span = 6; % filter span sps = 4; % samples per symbol fs = Rsym * sps; % sampling freq (Hz) Tsamp = 1 / fs; -t = (0 : 1 / fs : numSymbs / Rsym + (1.5 * span * sps - 1) / fs)'; +t = (0 : 1 / fs : numSymbs / Rsym + (1.5 * span * sps - 1) / fs).'; EbN0_db = 8; @@ -24,36 +24,33 @@ EsN0_db = 10 .* log10(EsN0); data = randi([0 M - 1], numSymbs, 1); -modData = pskmod(data, M, 0, 'gray'); +modData = dpskmod(data, M, 0, 'gray'); x = txFilter(modData, rolloff, span, sps); -linewidthTx = 0;%1e5; % Hz +linewidthTx = 0; % Hz linewidthLO = 1e6; % Hz -%%linewidthTx = Rsym * 1e-4; % Hz -%%linewidthLO = Rsym * 1e-3; % Hz [xPN, pTxLO] = phaseNoise(x, linewidthTx, linewidthLO, Tsamp); snr = EbN0_db + 10 * log10(log2(M)) - 10 * log10(sps); -noiseEnergy = 10 ^ (-snr / 10); -y = awgn(xPN, snr, 'measured'); +%%y = awgn(xPN, snr, 'measured'); +y = xPN; r = rxFilter(y, rolloff, span, sps); -[rPhaseEq, phiests] = phaseNoiseCorr(r, M, 40 * sps); -rPhaseEq = normalizeEnergy(rPhaseEq, numSymbs, 1 + noiseEnergy); -rSampled = rPhaseEq(sps*span/2+1:sps:(numSymbs + span/2) * sps); -demodData = pskdemod(rSampled, M, 0, 'gray')'; +rSampled = r(sps*span/2+1:sps:(numSymbs+span/2)*sps); +[rSaPhEq, phiests] = phaseNoiseCorr(rSampled, M, 40); -[bitErrors, ber] = biterr(data, demodData) +demodData = dpskdemod(rSaPhEq, M, 0, 'gray'); +[bitErrors, ber] = biterr(data, demodData.') figure(2); -plot(-phiests); +plot(repelem(-phiests, sps)); hold on; plot(pTxLO); legend('estimate', 'actual'); @@ -61,13 +58,14 @@ title('Phase noise estimation'); hold off; figure(3); -plot(t(1:length(x)), real(x)); +plot(t(1:length(x)), real(normalizeEnergy(x, numSymbs*sps, 1))); hold on; -plot(t, real(rPhaseEq), 'r'); -%%sampledTimes = t(sps*span/2+1:sps:(numSymbs+span/2)*sps); +%%plot(t, real(rPhaseEq), 'r'); +sampledTimes = t(sps*span/2+1:sps:(numSymbs+span/2)*sps); %%plot(sampledTimes, real(rSampled), 'x'); +plot(sampledTimes, real(normalizeEnergy(rSaPhEq, numSymbs, 1)), 'x'); legend('original signal', 'corrected received signal'); -title('Phase noise correction, linewidth 1 MHz, E_b/N_0=8 dB'); +title('Phase noise correction, linewidth 1 MHz, $E_b/N_0=8$ dB'); ylabel('Real part of signals'); axis([t(1) t(300) -Inf +Inf]); hold off;