Skip to content
This repository was archived by the owner on Apr 13, 2021. It is now read-only.

Commit e1a24a0

Browse files
iqgen: added unit tests
Added unit tests. Fixed issues with PRN code handling and TCXO.
1 parent 0f44dde commit e1a24a0

File tree

13 files changed

+1012
-59
lines changed

13 files changed

+1012
-59
lines changed

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,8 @@ tests/test_data_old*
5656
.project
5757
.cproject
5858
.settings/
59+
60+
# Coverage
61+
.coverage
62+
htmlcov/
63+

peregrine/iqgen/bits/amplitude_base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ def convertUnits2SNR(value, units, noiseParams):
206206
snrDb = 10 * numpy.log10(snr)
207207
elif units == AmplitudeBase.UNITS_SNR_DB:
208208
snrDb = value
209-
else:
209+
else: # pragma: no cover
210210
assert False
211211
return snrDb
212212

@@ -240,6 +240,6 @@ def convertUnits2Amp(value, units, noiseParams):
240240
snrDb = value
241241
snr = 10. ** (0.1 * snrDb)
242242
amp = numpy.sqrt(4. * snr / freqTimesTau) * noiseSigma
243-
else:
243+
else: # pragma: no cover
244244
assert False
245245
return amp

peregrine/iqgen/bits/doppler_base.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -181,12 +181,8 @@ def computeBatch(self,
181181
-------
182182
signal : numpy.ndarray(n_samples, dtype=float)
183183
Generated samples
184-
userTimeX_s : float
185-
End of interval time in seconds
186-
chipAll_idx : numpy.ndarray(n_samples, dtype=float)
187-
Code chip phases for the samples
188-
chips : numpy.ndarray(n_samples, dtype=int)
189-
Code combined with data
184+
dopplerAll_hz : numpy.ndarray(n_samples, dtype=float)
185+
Doppler values in Hz if debug is enabled
190186
'''
191187

192188
userTimeAll_s = self.applySignalDelays(userTimeAll_s, carrierSignal)

peregrine/iqgen/bits/doppler_sine.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -65,21 +65,6 @@ def __str__(self):
6565
format(self.distance0_m, self.tec_epm2, self.speed0_mps,
6666
self.amplutude_mps, self.period_s, self.codeDopplerIgnored)
6767

68-
def __repr__(self):
69-
'''
70-
Constructs python expression presentation of object.
71-
72-
Returns
73-
-------
74-
string
75-
Python expression presentation of object
76-
'''
77-
return "Doppler({}, {}, {}, {}, {})".format(self.distance0_m,
78-
self.tec_epm2,
79-
self.speed0_mps,
80-
self.amplutude_mps,
81-
self.period_s)
82-
8368
def computeDistanceM(self, svTime_s):
8469
'''
8570
Computes doppler shift in meters.

peregrine/iqgen/bits/prn_glo_l1l2.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@
1414
1515
"""
1616
import numpy
17-
from peregrine.include.glo_ca_code import value as GLONASS_CA_Code
17+
from peregrine.include.glo_ca_code import value as GLONASS_CACode
1818

19-
caCode = GLONASS_CA_Code[:]
19+
# Binary CA code (0/1)
20+
caCode = (GLONASS_CACode < 0).astype(numpy.uint8)
2021

2122

2223
class PrnCode(object):
@@ -36,11 +37,7 @@ def __init__(self, prnNo):
3637
SV identifier
3738
'''
3839
super(PrnCode, self).__init__()
39-
self.caCode = caCode[:]
40-
tmp = numpy.asarray(self.caCode, dtype=numpy.int8)
41-
tmp -= 1
42-
tmp /= -2
43-
self.binCode = tmp
40+
self.binCode = caCode
4441
self.prnNo = prnNo
4542
self.bitLookup = numpy.asarray([1, -1], dtype=numpy.int8)
4643

peregrine/iqgen/bits/prn_gps_l1ca.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
1717
"""
1818

19-
import peregrine.include.generateCAcode
19+
from peregrine.include.generateCAcode import caCodes as L1CACodes
2020

21-
caCodes = peregrine.include.generateCAcode.caCodes
21+
caCodes = (L1CACodes < 0).astype(numpy.uint8)
2222

2323

2424
class PrnCode(object):
@@ -38,11 +38,7 @@ def __init__(self, prnNo):
3838
SV identifier
3939
'''
4040
super(PrnCode, self).__init__()
41-
self.caCode = caCodes[prnNo - 1][:]
42-
tmp = numpy.asarray(self.caCode, dtype=numpy.int8)
43-
tmp -= 1
44-
tmp /= -2
45-
self.binCode = tmp
41+
self.binCode = caCodes[prnNo - 1]
4642
self.prnNo = prnNo
4743
self.bitLookup = numpy.asarray([1, -1], dtype=numpy.int8)
4844

peregrine/iqgen/bits/prn_gps_l2c.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
from peregrine.include.generateL2CMcode import L2CMCodes
2121

22+
caCodes = (L2CMCodes < 0).astype(numpy.uint8)
23+
2224

2325
class PrnCode(object):
2426
'''
@@ -42,7 +44,7 @@ def __init__(self, prnNo):
4244
SV identifier
4345
'''
4446
super(PrnCode.CM_Code, self).__init__()
45-
self.binCode = numpy.asarray(L2CMCodes[prnNo - 1], dtype=numpy.int8) < 0
47+
self.binCode = caCodes[prnNo - 1]
4648

4749
def getCodeBits(self):
4850
return self.binCode

peregrine/iqgen/bits/satellite_base.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,10 @@ def getAmplitude(self):
9696
return self.amplitude
9797

9898
def __str__(self):
99-
return self.getSvName()
100-
101-
def __repr__(self):
102-
return self.getSvName()
99+
'''
100+
Returns string representation of SV object
101+
'''
102+
return self.getName()
103103

104104
def getBatchSignals(self,
105105
userTimeAll_s,

peregrine/iqgen/bits/tcxo_poly.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,6 @@ def __str__(self, *args, **kwargs):
5353
'''
5454
return "TCXOPoly: coeffs=%s" % str(self.coeffs)
5555

56-
def __repr__(self):
57-
'''
58-
Provides string representation of the object
59-
'''
60-
return "TCXOPoly(%s)" % repr(self.coeffs)
61-
6256
def computeTcxoTime(self, fromSample, toSample, outputConfig):
6357
'''
6458
Method generates time vector for the given sample index range depending on

peregrine/iqgen/bits/tcxo_sine.py

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def __init__(self, initial_ppm, amplitude_ppm, period_s):
4343
self.initial_ppm = initial_ppm
4444
self.amplitude_ppm = amplitude_ppm
4545
self.period_s = period_s
46-
self.c0 = -2. * scipy.constants.pi * amplitude_ppm * 1e-6
46+
self.c0 = -amplitude_ppm * 1e-6 * self.period_s / (2. * scipy.constants.pi)
4747
self.c1 = 2. * scipy.constants.pi / period_s
4848
self.c2 = initial_ppm * 1e-6
4949

@@ -54,13 +54,6 @@ def __str__(self, *args, **kwargs):
5454
return "TCXOSine: initial_ppm=%f amplitude_ppm=%f period_s=%f" % \
5555
(self.initial_ppm, self.amplitude_ppm, self.period_s)
5656

57-
def __repr__(self):
58-
'''
59-
Provides string representation of the object
60-
'''
61-
return "TCXOSine(%f, %f, %f)" % \
62-
(self.initial_ppm, self.amplitude_ppm, self.period_s)
63-
6457
def computeTcxoTime(self, fromSample, toSample, outputConfig):
6558
'''
6659
Method generates time vector for the given sample index range depending on
@@ -86,13 +79,13 @@ def computeTcxoTime(self, fromSample, toSample, outputConfig):
8679
time0_s = fromSample / outputConfig.SAMPLE_RATE_HZ
8780
timeX_s = toSample / outputConfig.SAMPLE_RATE_HZ
8881

89-
timeAll_s = numpy.linspace(time0_s * c1,
90-
timeX_s * c1,
82+
timeAll_s = numpy.linspace(time0_s,
83+
timeX_s,
9184
toSample - fromSample,
9285
endpoint=False,
9386
dtype=numpy.float)
9487

95-
result = numpy.cos(timeAll_s)
88+
result = numpy.cos(timeAll_s * c1)
9689
result += -1.
9790
result *= c0
9891
if c2:

0 commit comments

Comments
 (0)