def test_AmplitudePoly_SNR3(): ''' Test AmplitudePoly SNR_0 computation (second order polynomial, power units) ''' noiseParams = NoiseParameters(1e6, 1.) ampl = AmplitudePoly(AmplitudeBase.UNITS_POWER, (1., 1.)) SNR = 10. * numpy.log10(noiseParams.getFreqTimesTau() / 4.) assert SNR == ampl.computeSNR(noiseParams)
def test_AmplitudePoly_SNR5(): ''' Test AmplitudePoly SNR_0 computation (second order polynomial, SNR dB units) ''' noiseParams = NoiseParameters(1e6, 1.) ampl = AmplitudePoly(AmplitudeBase.UNITS_SNR_DB, (1., 1.)) SNR = 1. assert SNR == ampl.computeSNR(noiseParams)
def test_AmplitudePoly_SNR1(): ''' Test AmplitudePoly SNR_0 computation (first order polynomial) ''' noiseParams = NoiseParameters(1e6, 1.) ampl = AmplitudePoly(AmplitudeBase.UNITS_AMPLITUDE, (1.,)) SNR = 10. * numpy.log10(noiseParams.getFreqTimesTau() / 4.) assert SNR == ampl.computeSNR(noiseParams)
def test_AmplitudePoly_SNR1(): ''' Test AmplitudePoly SNR_0 computation (first order polynomial) ''' noiseParams = NoiseParameters(1e6, 1.) ampl = AmplitudePoly(AmplitudeBase.UNITS_AMPLITUDE, (1., )) SNR = 10. * numpy.log10(noiseParams.getFreqTimesTau() / 4.) assert SNR == ampl.computeSNR(noiseParams)
def test_AmplitudePoly_apply2(): ''' Test AmplitudePoly computation (first order polynomial: 1.0*t+1.0) ''' noiseParams = NoiseParameters(1e6, 1.) ampl = AmplitudePoly(AmplitudeBase.UNITS_AMPLITUDE, (1., 1.)) userTimeAll_s = numpy.asarray([0., 1.], dtype=numpy.float) signal = numpy.asarray([0., 1.], dtype=numpy.float) signal = ampl.applyAmplitude(signal, userTimeAll_s, noiseParams) assert (numpy.abs(signal - numpy.asarray([0., 2.], dtype=numpy.float)) < EPSILON).all()
def test_AmplitudePoly_str0(): ''' String representation test for polynomial amplitude object ''' value = str(AmplitudePoly(AmplitudeBase.UNITS_SNR, ())) assert value.find('=SNR') >= 0 assert value.find('()') >= 0 assert value.find('Poly') >= 0 value = str(AmplitudePoly(AmplitudeBase.UNITS_AMPLITUDE, (1., ))) assert value.find('=AMP') >= 0 assert value.find('(1.0,)') >= 0 assert value.find('Poly') >= 0
def test_AmplitudePoly_init(): ''' Test AmplitudePoly init ''' ampl = AmplitudePoly(AmplitudeBase.UNITS_AMPLITUDE, ()) assert isinstance(ampl, AmplitudeBase) assert ampl.units == AmplitudeBase.UNITS_AMPLITUDE
def test_factories(): ''' Test factories ''' to_map_and_back(AFO, AmplitudePoly(AmplitudeBase.UNITS_AMPLITUDE, (1, ))) to_map_and_back(AFO, AmplitudeSine(AmplitudeBase.UNITS_AMPLITUDE, 1., 2., 1.)) value_error(AFO) to_map_and_back(DFO, DopplerPoly(1000., 77., (1., 1.))) to_map_and_back(DFO, DopplerSine(1000., 55., 4., 3., 5.)) value_error(DFO) to_map_and_back(MFO, BlockMessage(np.random.rand(1023))) to_map_and_back(MFO, CNAVMessage(1)) to_map_and_back(MFO, ConstMessage(1)) to_map_and_back(MFO, LNAVMessage(1)) to_map_and_back(MFO, ZeroOneMessage()) value_error(MFO) to_map_and_back(SFO, GPSSatellite(1)) value_error(SFO) to_map_and_back(TFO, PolyTcxo((1., 1.))) to_map_and_back(TFO, SineTcxo(0., 1e6, 0.004)) value_error(TFO)
def doUpdate(self, sv, parser, namespace, values, option_string): amplitude_units = AMP_MAP[namespace.amplitude_units] if namespace.amplitude_type == "poly": coeffs = [] hasHighOrder = False srcA = [ namespace.amplitude_a3, namespace.amplitude_a2, namespace.amplitude_a1, namespace.amplitude_a0 ] for a in srcA: if a is not None: coeffs.append(a) hasHighOrder = True elif hasHighOrder: coeffs.append(0.) amplitude = AmplitudePoly(amplitude_units, tuple(coeffs)) elif namespace.amplitude_type == "sine": initial = 1. ampl = 0.5 period_s = 1. if namespace.amplitude_a0 is not None: initial = namespace.amplitude_a0 if namespace.amplitude_a1 is not None: ampl = namespace.amplitude_a1 if namespace.amplitude_period is not None: period_s = namespace.amplitude_period amplitude = AmplitudeSine(amplitude_units, initial, ampl, period_s) else: raise ValueError("Unsupported amplitude type") sv.setAmplitude(amplitude)
def __init__(self, svName): ''' Constructor. Parameters ---------- svName : string Satellite name ''' super(Satellite, self).__init__() self.svName = svName self.doppler = zeroDoppler(0., 0., 1.) self.amplitude = AmplitudePoly(AmplitudeBase.UNITS_AMPLITUDE, ())
def test_DopplerZero_batch(): ''' Verifies execution of the batch computation with zero doppler. ''' doppler = zeroDoppler(1000., 50., GPS.L1CA.CENTER_FREQUENCY_HZ) userTimeAll_s = numpy.linspace(0., NormalRateConfig.SAMPLE_BATCH_SIZE / NormalRateConfig.SAMPLE_RATE_HZ, NormalRateConfig.SAMPLE_BATCH_SIZE, endpoint=False) amplitude = AmplitudePoly(AmplitudeBase.UNITS_AMPLITUDE, ()) noiseParams = NoiseParameters(GPS.L1CA.CENTER_FREQUENCY_HZ, 0.) message = Message(1) code = PrnCode(1) res = doppler.computeBatch(userTimeAll_s, amplitude, noiseParams, GPS.L1CA, NormalRateConfig.GPS.L1.INTERMEDIATE_FREQUENCY_HZ, message, code, NormalRateConfig, True) signal1, doppler1 = res doppler.setCodeDopplerIgnored(True) res = doppler.computeBatch(userTimeAll_s, amplitude, noiseParams, GPS.L1CA, NormalRateConfig.GPS.L1.INTERMEDIATE_FREQUENCY_HZ, message, code, NormalRateConfig, True) signal2, doppler2 = res assert (signal1 == signal2).all() assert (doppler1 == doppler2).all()
def test_DopplerBase_computeBatch(): ''' Test signal generation ''' doppler = DopplerBase(distance0_m=0., tec_epm2=0.) userTimeAll_s = numpy.asarray([0.]) amplitude = AmplitudePoly(AmplitudeBase.UNITS_AMPLITUDE, ()) noiseParams = NoiseParameters(NormalRateConfig.SAMPLE_RATE_HZ, 0.) message = Message(1) code = PrnCode(1) try: doppler.computeBatch(userTimeAll_s, amplitude, noiseParams, GPS.L1CA, NormalRateConfig.GPS.L1.INTERMEDIATE_FREQUENCY_HZ, message, code, NormalRateConfig, False) assert False except NotImplementedError: pass