X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=phasenoise1signal.m;h=e2240b957d1ec9933b1550455baa9b98f459ee9d;hb=934d76babd9beed87a3ef60a075b556a63899fed;hp=fcd371a1426c7354066232c57f6b28119504e80d;hpb=5e9be3c421c4d52da9df842548f421751fa294d4;p=4yp.git diff --git a/phasenoise1signal.m b/phasenoise1signal.m index fcd371a..e2240b9 100644 --- a/phasenoise1signal.m +++ b/phasenoise1signal.m @@ -4,7 +4,7 @@ M = 4; Rsym = 2.5e10; % symbol rate (sym/sec) rolloff = 0.5; span = 6; % filter span -sps = 4; % samples per symbol +sps = 8; % samples per symbol fs = Rsym * sps; % sampling freq (Hz) Tsamp = 1 / fs; @@ -24,39 +24,50 @@ EsN0_db = 10 .* log10(EsN0); data = randi([0 M - 1], numSymbs, 1); -modData = dpskmod(data, M, 0, 'gray'); +pskSym = pskmod(data, M, pi/M, 'gray'); +dpskSym = dpskmod(data, M, pi/M, 'gray'); -x = txFilter(modData, rolloff, span, sps); +xPSK = txFilter(pskSym, rolloff, span, sps); +xDPSK = txFilter(dpskSym, rolloff, span, sps); linewidthTx = 0; % Hz -linewidthLO = 1e6; % Hz +linewidthLO = 10e6; % Hz + +[xPSKpn, pTxLoPSK] = phaseNoise(xPSK, linewidthTx, linewidthLO, Tsamp); +[xDPSKpn, pTxLoDPSK] = phaseNoise(xDPSK, linewidthTx, linewidthLO, Tsamp); -[xPN, pTxLO] = phaseNoise(x, linewidthTx, linewidthLO, Tsamp); snr = EbN0_db + 10 * log10(log2(M)) - 10 * log10(sps); -%%y = awgn(xPN, snr, 'measured'); -y = xPN; +yPSK = awgn(xPSKpn, snr, 'measured'); +yDPSK = xDPSKpn; + +rPSK = rxFilter(yPSK, rolloff, span, sps); +rDPSK = rxFilter(yDPSK, rolloff, span, sps); -r = rxFilter(y, rolloff, span, sps); +sps = 2; +Tsamp = Tsamp * 4; +rPSKSa = rPSK(1:2:end); +rDPSKSa = rDPSK(1:2:end); -rSampled = r(sps*span/2+1:sps:(numSymbs+span/2)*sps); -[rSaPhEq, phiests] = phaseNoiseCorr(rSampled, M, 40); +[rPSKSaPhEq, phiestsPSK] = phaseNoiseCorr(rPSKSa, M, pi/M, 80); -demodData = dpskdemod(rSaPhEq, M, 0, 'gray'); +demodPSK = pskdemod(rPSKSaPhEq, M, pi/M, 'gray'); +demodDPSK = dpskdemod(rDPSKSa, M, pi/M, 'gray'); -[bitErrors, ber] = biterr(data, demodData.') + +[bitErrors, ber] = biterr(data, demodPSK.') figure(2); -plot(repelem(-phiests, sps)); +plot(t(1:80000), repelem(-phiestsPSK, 8)); hold on; -plot(pTxLO); +plot(t(1:80000), pTxLoPSK(1:80000)); legend('estimate', 'actual'); title('Phase noise estimation'); hold off; - +return figure(3); plot(t(1:length(x)), real(normalizeEnergy(x, numSymbs*sps, 1))); hold on;