def test_viterbi(self, ndim): s = signals.SignalQAMGrayCoded(4, 2 ** 16, fb=20e9, nmodes=ndim) s2, ph = cphaserecovery.viterbiviterbi(s, 10, 4) assert ndim == s2.shape[0]
def test_viterbi_1d(self): s = signals.SignalQAMGrayCoded(4, 2 ** 16, fb=20e9, nmodes=1) s2, ph = cphaserecovery.viterbiviterbi(s.flatten(), 10, 4) assert 2**16 == s2.shape[0]
from qampy import signals fb = 40.e9 os = 2 fs = os*fb N = 10**5 theta = np.pi/2.45 M = 4 snr = 14 carrier_f = 1e6 QAM = signals.QAMModulator(M) X, Sx, Bx = QAM.generate_signal(N, snr, baudrate=fb, samplingrate=fs , carrier_df=carrier_f, dual_pol=False) E = phaserecovery.viterbiviterbi(X[::2], 9, 4) evm1 = QAM.cal_evm(E) evm2 = QAM.cal_evm(X) plt.figure() plt.subplot(121) plt.title('Recovered') plt.plot(E.real, E.imag, 'ro', label=r"$EVM=%.1f\%%$"%(100*evm1)) plt.legend() plt.subplot(122) plt.title('Original') plt.plot(X.real, X.imag, 'go', label=r"$EVM_y=%.1f\%%$"%(100*evm2)) plt.legend() plt.show()