def test_bpsk_mapping(): expected_symbolstream = numpy.array([1 + 1j, -1 - 1j])/numpy.sqrt(2) actual_bitstream = numpy.array([0, 1]) actual_symbolstream = iq_mapper.bpsk(actual_bitstream) results = utils.isclose( expected_symbolstream, actual_symbolstream, atol=0.01, rtol=0.01 ) assert (results).all()
def test_qam16_mapping(): expected_symbolstream = numpy.array( [+1 + 1j, 1 + 3j, 3 + 1j, 3 + 3j, +1 - 1j, 1 - 3j, 3 - 1j, 3 - 3j, -1 + 1j, -1 + 3j, -3 + 1j, -3 + 3j, -1 - 1j, -1 - 3j, -3 - 1j, -3 - 3j] )/numpy.sqrt(10) actual_bitstream = numpy.array( [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1] ) actual_symbolstream = iq_mapper.qam16(actual_bitstream) results = utils.isclose( expected_symbolstream, actual_symbolstream, atol=0.01, rtol=0.01 ) assert (results).all()
def test_qam(): time = numpy.linspace(0, 1, int(1e5)) symbol_duration = 0.25 carrier_freq = 400 angular_freq = 2 * numpy.pi * carrier_freq expected_symbolstream = numpy.array([-1 - 2j, -3 + 4j, 5 - 6j, 7 + 8j]) actual_waveform_cos1 = -1 * numpy.cos(angular_freq * time[0:25000]) actual_waveform_sin1 = -2 * numpy.sin(angular_freq * time[0:25000]) actual_waveform_cos2 = -3 * numpy.cos(angular_freq * time[25000:50000]) actual_waveform_sin2 = +4 * numpy.sin(angular_freq * time[25000:50000]) actual_waveform_cos3 = +5 * numpy.cos(angular_freq * time[50000:75000]) actual_waveform_sin3 = -6 * numpy.sin(angular_freq * time[50000:75000]) actual_waveform_cos4 = +7 * numpy.cos(angular_freq * time[75000:100000]) actual_waveform_sin4 = +8 * numpy.sin(angular_freq * time[75000:100000]) actual_waveform = numpy.stack([ actual_waveform_cos1 + actual_waveform_sin1, actual_waveform_cos2 + actual_waveform_sin2, actual_waveform_cos3 + actual_waveform_sin3, actual_waveform_cos4 + actual_waveform_sin4 ]).flatten() actual_symbolstream = wave_detector.qam(time, actual_waveform, symbol_duration, carrier_freq) assert (utils.isclose(expected_symbolstream, actual_symbolstream)).all()
def test_qam(): time = numpy.linspace(0, 1, int(1e5)) carrier_freq = 400 angular_freq = 2*numpy.pi*carrier_freq symbol_duration = 0.25 expected_waveform_cos1 = +1*numpy.cos(angular_freq*time[0:25000]) expected_waveform_sin1 = +2*numpy.sin(angular_freq*time[0:25000]) expected_waveform_cos2 = +3*numpy.cos(angular_freq*time[25000:50000]) expected_waveform_sin2 = -4*numpy.sin(angular_freq*time[25000:50000]) expected_waveform_cos3 = -5*numpy.cos(angular_freq*time[50000:75000]) expected_waveform_sin3 = +6*numpy.sin(angular_freq*time[50000:75000]) expected_waveform_cos4 = -7*numpy.cos(angular_freq*time[75000:100000]) expected_waveform_sin4 = -8*numpy.sin(angular_freq*time[75000:100000]) expected_waveform = numpy.stack( [expected_waveform_cos1 + expected_waveform_sin1, expected_waveform_cos2 + expected_waveform_sin2, expected_waveform_cos3 + expected_waveform_sin3, expected_waveform_cos4 + expected_waveform_sin4] ).flatten() actual_symbolstream = numpy.array([1 + 2j, 3 - 4j, -5 + 6j, -7 - 8j]) actual_waveform = wave_generator.qam( time, actual_symbolstream, symbol_duration, carrier_freq ) assert (utils.isclose(expected_waveform, actual_waveform)).all()
def test_isclose(expected, arg1, arg2, atol, rtol): assert (expected == utils.isclose(arg1, arg2, atol=atol, rtol=rtol))