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

Commit e1a795c

Browse files
Adel MaminRoman Gezikov
authored andcommitted
Add partial correlation capability to simulate HW
1 parent 5769786 commit e1a795c

File tree

5 files changed

+19
-6
lines changed

5 files changed

+19
-6
lines changed

include/libswiftnav/correlate.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
void l1_ca_track_correlate(const s8* samples, size_t samples_len,
2020
const s8* code,
21+
u32 chips_to_correlate,
2122
double* init_code_phase, double code_step,
2223
double* init_carr_phase, double carr_step,
2324
double* I_E, double* Q_E,
@@ -26,6 +27,7 @@ void l1_ca_track_correlate(const s8* samples, size_t samples_len,
2627

2728
void l2c_cm_track_correlate(const s8* samples, size_t samples_len,
2829
const s8* code,
30+
u32 chips_to_correlate,
2931
double* init_code_phase, double code_step,
3032
double* init_carr_phase, double carr_step,
3133
double* I_E, double* Q_E,

python/swiftnav/correlate.pxd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ from common cimport *
1212

1313
cdef extern from "libswiftnav/correlate.h":
1414
void l1_ca_track_correlate(s8* samples, size_t samples_len, s8* code,
15+
u32 chips_to_correlate,
1516
double* init_code_phase, double code_step,
1617
double* init_carr_phase, double carr_step,
1718
double* I_E, double* Q_E,
@@ -20,6 +21,7 @@ cdef extern from "libswiftnav/correlate.h":
2021
u32* num_samples)
2122

2223
void l2c_cm_track_correlate(s8* samples, size_t samples_len, s8* code,
24+
u32 chips_to_correlate,
2325
double* init_code_phase, double code_step,
2426
double* init_carr_phase, double carr_step,
2527
double* I_E, double* Q_E,

python/swiftnav/correlate.pyx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ cdef extern from "complexobject.h":
3131
cdef Py_complex cval
3232

3333
def track_correlate(np.ndarray[char, ndim=1, mode="c"] samples,
34+
chips_to_correlate,
3435
code_freq, code_phase, carr_freq, carr_phase,
3536
np.ndarray[char, ndim=1, mode="c"] code,
3637
sampling_freq, signal):
@@ -40,11 +41,13 @@ def track_correlate(np.ndarray[char, ndim=1, mode="c"] samples,
4041
cdef unsigned int blksize
4142
if signal == "l1ca":
4243
l1_ca_track_correlate(<s8*>&samples[0], len(samples), <s8*>&code[0],
44+
chips_to_correlate,
4345
&init_code_phase, code_freq / sampling_freq,
4446
&init_carr_phase, carr_freq * 2.0 * M_PI / sampling_freq,
4547
&I_E, &Q_E, &I_P, &Q_P, &I_L, &Q_L, &blksize)
4648
else:
4749
l2c_cm_track_correlate(<s8*>&samples[0], len(samples), <s8*>&code[0],
50+
chips_to_correlate,
4851
&init_code_phase, code_freq / sampling_freq,
4952
&init_carr_phase, carr_freq * 2.0 * M_PI / sampling_freq,
5053
&I_E, &Q_E, &I_P, &Q_P, &I_L, &Q_L, &blksize)

src/correlate.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ static void track_correlate(enum correlator_type correlator_type,
4747
* \param samples Samples array. One byte per sample.
4848
* \param samples_len Samples array size.
4949
* \param code L1C/A PRN code. One byte per chip: 1023 bytes long.
50+
* \param chips_to_correlate Number of chips to correlate [chips].
5051
* \param[in,out] init_code_phase Initial code phase [chips].
5152
* The function returns the
5253
* the last unprocessed code phase here.
@@ -63,19 +64,20 @@ static void track_correlate(enum correlator_type correlator_type,
6364
* \param[out] Q_L Late replica quadrature correlation component.
6465
* \param[out] num_samples The number of processed samples from \e samples array.
6566
*/
66-
void l1_ca_track_correlate(const s8* restrict samples, size_t samples_len,
67-
const s8* restrict code,
67+
void l1_ca_track_correlate(const s8* samples, size_t samples_len,
68+
const s8* code,
69+
u32 chips_to_correlate,
6870
double* init_code_phase, double code_step,
6971
double* init_carr_phase, double carr_step,
7072
double* I_E, double* Q_E,
7173
double* I_P, double* Q_P,
7274
double* I_L, double* Q_L, u32* num_samples)
7375
{
74-
*num_samples = (int)ceil((L1_CA_CHIPS_PER_PRN_CODE - *init_code_phase) /
76+
*num_samples = (int)ceil((chips_to_correlate - *init_code_phase) /
7577
code_step);
7678

7779
if (0 == *num_samples) {
78-
*num_samples = (int)ceil(L1_CA_CHIPS_PER_PRN_CODE / code_step);
80+
*num_samples = (int)ceil(chips_to_correlate / code_step);
7981
}
8082

8183
if (*num_samples > samples_len) {
@@ -96,6 +98,7 @@ void l1_ca_track_correlate(const s8* restrict samples, size_t samples_len,
9698
* \param samples Samples array. One byte per sample.
9799
* \param samples_len Samples array size.
98100
* \param code L2C CM PRN code. One byte per chip: 10230 bytes long.
101+
* \param chips_to_correlate Number of chips to correlate [chips].
99102
* \param[in,out] init_code_phase Initial code phase [chips].
100103
* The function returns the
101104
* the last unprocessed code phase here.
@@ -114,17 +117,18 @@ void l1_ca_track_correlate(const s8* restrict samples, size_t samples_len,
114117
*/
115118
void l2c_cm_track_correlate(const s8* samples, size_t samples_len,
116119
const s8* code,
120+
u32 chips_to_correlate,
117121
double* init_code_phase, double code_step,
118122
double* init_carr_phase, double carr_step,
119123
double* I_E, double* Q_E,
120124
double* I_P, double* Q_P,
121125
double* I_L, double* Q_L, u32* num_samples)
122126
{
123-
*num_samples = (int)ceil((2 * L2C_CM_CHIPS_PER_PRN_CODE - *init_code_phase) /
127+
*num_samples = (int)ceil((chips_to_correlate - *init_code_phase) /
124128
code_step);
125129

126130
if (0 == *num_samples) {
127-
*num_samples = (int)ceil(2 * L2C_CM_CHIPS_PER_PRN_CODE / code_step);
131+
*num_samples = (int)ceil(chips_to_correlate / code_step);
128132
}
129133

130134
if (*num_samples > samples_len) {

tests/check_correlator.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,7 @@ START_TEST(test_l1ca_correlator)
362362

363363
l1_ca_track_correlate(signal.samples, signal.size,
364364
code,
365+
L1CA_CHIPS_PER_PRN_CODE,
365366
&init_code_phase,
366367
L1CA_CHIPPING_RATE_HZ / SAMPLING_FREQ_HZ,
367368
&init_carr_phase,
@@ -423,6 +424,7 @@ START_TEST(test_l2c_cm_correlator)
423424

424425
l2c_cm_track_correlate(signal.samples, signal.size,
425426
code,
427+
2 * L2C_CM_CHIPS_PER_PRN_CODE,
426428
&init_code_phase,
427429
L2C_CM_CHIPPING_RATE_HZ / SAMPLING_FREQ_HZ,
428430
&init_carr_phase,

0 commit comments

Comments
 (0)