Skip to content

Commit

Permalink
Update due to changes in GNSSSignals (#40)
Browse files Browse the repository at this point in the history
* Use get_codes from GNSSSignals

* Update minimum version of GNSSSignals to v0.16.0 and remove BOC specific code

* Performance improvement

* Add filtered prompt to TrackingResults

* Put post correlation filter into TrackingState

* Add possibility to change beamformer in state

* Change order of tracking state
  • Loading branch information
zsoerenm authored Nov 23, 2022
1 parent 0d46f7e commit 4264924
Show file tree
Hide file tree
Showing 19 changed files with 126 additions and 101 deletions.
8 changes: 4 additions & 4 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ TrackingLoopFilters = "0814aff9-93cb-554c-9fff-9bf1cfdb5efa"
Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"

[compat]
Acquisition = "0.0.2"
Acquisition = "0.0.2, 0.0.4"
CUDA = "3.5"
DocStringExtensions = "0.6, 0.7, 0.8"
GNSSSignals = "0.15.5"
DocStringExtensions = "0.6, 0.7, 0.8, 0.9"
GNSSSignals = "0.16"
LoopVectorization = "0.8, 0.9, 0.10, 0.11, 0.12"
StaticArrays = "0.9, 0.10, 0.11, 0.12, 1.0"
StructArrays = "0.4"
StructArrays = "0.4, 0.6.5"
TrackingLoopFilters = "0.1"
Unitful = "0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 1.0"
julia = "1.6"
Expand Down
5 changes: 4 additions & 1 deletion src/Tracking.jl
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ module Tracking
export track
export get_bits
export get_num_bits
export get_filtered_prompt
export get_post_corr_filter

export TrackingState
export NumAnts
Expand All @@ -40,6 +42,7 @@ module Tracking
#export VeryEarlyPromptLateCorrelator
export SecondaryCodeOrBitDetector
export GainControlledSignal
export AbstractPostCorrFilter

struct NumAnts{x}
end
Expand All @@ -51,6 +54,7 @@ module Tracking

NumAccumulators(x) = NumAccumulators{x}()

include("post_corr_filter.jl")
include("code_replica.jl")
include("carrier_replica.jl")
include("downconvert.jl")
Expand All @@ -65,6 +69,5 @@ module Tracking
include("gpsl1.jl")
include("gpsl5.jl")
include("galileo_e1b.jl")
include("boc.jl")
include("downconvert_and_correlate.jl")
end
19 changes: 0 additions & 19 deletions src/boc.jl

This file was deleted.

6 changes: 3 additions & 3 deletions src/correlator.jl
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,8 @@ $(SIGNATURES)
Filter the Correlator by the function `post_corr_filter`
"""
function filter(post_corr_filter, correlator::T) where T <: AbstractCorrelator
(T.name.wrapper)(map(x -> post_corr_filter(x), get_accumulators(correlator)))
function apply(post_corr_filter, correlator::T) where T <: AbstractCorrelator
(T.name.wrapper)(map(post_corr_filter, get_accumulators(correlator)))
end

"""
Expand Down Expand Up @@ -246,7 +246,7 @@ $(SIGNATURES)
Normalize the correlator
"""
function normalize(correlator::AbstractCorrelator, integrated_samples)
filter(x -> x / integrated_samples, correlator)
apply(x -> x / integrated_samples, correlator)
end
"""
$(SIGNATURES)
Expand Down
2 changes: 1 addition & 1 deletion src/downconvert.jl
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ end
signal_real = reinterpret(reshape, ST, signal)
ds_re = downconverted_signal.re; ds_im = downconverted_signal.im
c_re = carrier_replica.re; c_im = carrier_replica.im
@avx for i = start_sample:num_samples + start_sample - 1, j = 1:size(signal_real, 3)
@avx for i = start_sample:num_samples + start_sample - 1, j = 1:size(ds_re, 2)
ds_re[i, j] = signal_real[1, i, j] * c_re[i] + signal_real[2, i, j] * c_im[i]
ds_im[i, j] = signal_real[2, i, j] * c_re[i] - signal_real[1, i, j] * c_im[i]
end
Expand Down
8 changes: 8 additions & 0 deletions src/post_corr_filter.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
abstract type AbstractPostCorrFilter end

struct DefaultPostCorrFilter <: AbstractPostCorrFilter end

update(filter::DefaultPostCorrFilter, prompt) = filter

(filter::DefaultPostCorrFilter)(x) = x
(filter::DefaultPostCorrFilter)(x::AbstractVector) = last(x)
18 changes: 12 additions & 6 deletions src/tracking_loop.jl
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,8 @@ Track the signal `signal` based on the current tracking `state`, the sampling fr
"""
function track(
signal,
state::TrackingState{S, C, CALF, COLF, CN, DS, CAR, COR},
state::TrackingState{S, C, CALF, COLF, CN, DS, CAR, COR, PCF},
sampling_frequency;
post_corr_filter = get_default_post_corr_filter(get_correlator(state)),
intermediate_frequency = 0.0Hz,
max_integration_time::typeof(1ms) = 1ms,
min_integration_time::typeof(1.0ms) = 0.75ms,
Expand All @@ -40,7 +39,8 @@ function track(
CN <: AbstractCN0Estimator,
DS,
CAR,
COR
COR,
PCF <: AbstractPostCorrFilter,
}
prn = get_prn(state)
system = get_system(state)
Expand Down Expand Up @@ -72,8 +72,10 @@ function track(
prompt_accumulator = get_prompt_accumulator(state)
integrated_samples = get_integrated_samples(state)
cn0_estimator = get_cn0_estimator(state)
post_corr_filter = get_post_corr_filter(state)
signal_start_sample = 1
bit_buffer = BitBuffer()
filtered_prompt = zero(ComplexF64)
valid_correlator = zero(correlator)
valid_correlator_carrier_phase = 0.0
valid_correlator_carrier_frequency = 0.0Hz
Expand Down Expand Up @@ -135,7 +137,9 @@ function track(
valid_correlator = correlator
valid_correlator_carrier_phase = carrier_phase
valid_correlator_carrier_frequency = carrier_frequency
filtered_correlator = filter(post_corr_filter, correlator)
post_corr_filter = update(post_corr_filter, get_prompt(correlator, correlator_sample_shifts))
filtered_correlator = apply(post_corr_filter, correlator)
filtered_prompt = get_prompt(filtered_correlator, correlator_sample_shifts)
pll_discriminator = pll_disc(
system,
filtered_correlator,
Expand Down Expand Up @@ -194,7 +198,7 @@ function track(
num_samples_left == signal_samples_left && break
signal_start_sample += num_samples_left
end
next_state = TrackingState{S, C, CALF, COLF, CN, DS, CAR, COR}(
next_state = TrackingState{S, C, CALF, COLF, CN, DS, CAR, COR, PCF}(
prn,
system,
init_carrier_doppler,
Expand All @@ -212,12 +216,14 @@ function track(
cn0_estimator,
downconverted_signal,
carrier_replica,
code_replica
code_replica,
post_corr_filter,
)
estimated_cn0 = estimate_cn0(cn0_estimator, max_integration_time)
TrackingResults(
next_state,
valid_correlator,
filtered_prompt,
correlator_sample_shifts,
early_late_index_shift,
valid_correlator_carrier_frequency,
Expand Down
19 changes: 17 additions & 2 deletions src/tracking_results.jl
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ struct TrackingResults{
}
state::TS
correlator::C
filtered_prompt::ComplexF64
correlator_sample_shifts::CS
early_late_index_shift::ELI
correlator_carrier_frequency::typeof(1.0Hz)
Expand Down Expand Up @@ -157,6 +158,20 @@ Check if the secondary code or bit has been found.
"""
$(SIGNATURES)
Check if the secondary code or bit has been found.
Get used system.
"""
@inline get_system(results::TrackingResults) = get_system(get_state(results))

"""
$(SIGNATURES)
Get filtered prompt.
"""
@inline get_filtered_prompt(results::TrackingResults) = results.filtered_prompt

"""
$(SIGNATURES)
Get Post correlation filter.
"""
@inline get_system(results::TrackingResults) = get_system(get_state(results))
@inline get_post_corr_filter(results::TrackingResults) = get_post_corr_filter(get_state(results))
54 changes: 45 additions & 9 deletions src/tracking_state.jl
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@ struct TrackingState{
CN <: AbstractCN0Estimator,
DS <: Union{DownconvertedSignalCPU, Nothing},
CAR <: Union{CarrierReplicaCPU, Nothing},
COR <: Union{Vector{Int8}, Nothing}
COR <: Union{Vector{<:Real}, Nothing},
PCF <: AbstractPostCorrFilter,
}
prn::Int
system::S
Expand All @@ -83,6 +84,34 @@ struct TrackingState{
downconverted_signal::DS
carrier::CAR
code::COR
post_corr_filter::PCF
end

function TrackingState(
track_state::TrackingState;
post_corr_filter,
)
TrackingState(
track_state.prn,
track_state.system,
track_state.init_carrier_doppler,
track_state.init_code_doppler,
track_state.carrier_doppler,
track_state.code_doppler,
track_state.carrier_phase,
track_state.code_phase,
track_state.correlator,
track_state.carrier_loop_filter,
track_state.code_loop_filter,
track_state.sc_bit_detector,
track_state.integrated_samples,
track_state.prompt_accumulator,
track_state.cn0_estimator,
track_state.downconverted_signal,
track_state.carrier,
track_state.code,
post_corr_filter
)
end

"""
Expand Down Expand Up @@ -116,14 +145,16 @@ function TrackingState(
integrated_samples = 0,
prompt_accumulator = zero(ComplexF64),
cn0_estimator::CN = MomentsCN0Estimator(20),
post_corr_filter::PCF = DefaultPostCorrFilter(),
num_samples = 0
) where {
T <: AbstractMatrix,
S <: AbstractGNSS{T},
C <: AbstractCorrelator,
CALF <: AbstractLoopFilter,
COLF <: AbstractLoopFilter,
CN <: AbstractCN0Estimator
CN <: AbstractCN0Estimator,
PCF <: AbstractPostCorrFilter
}
if found(sc_bit_detector)
code_phase = mod(code_phase, get_code_length(system) *
Expand All @@ -133,9 +164,9 @@ function TrackingState(
end
downconverted_signal = DownconvertedSignalCPU(num_ants)
carrier = CarrierReplicaCPU()
code = Vector{Int8}(undef, 0)
code = Vector{get_code_type(system)}(undef, 0)

TrackingState{S, C, CALF, COLF, CN, typeof(downconverted_signal), typeof(carrier), typeof(code)}(
TrackingState{S, C, CALF, COLF, CN, typeof(downconverted_signal), typeof(carrier), typeof(code), PCF}(
prn,
system,
carrier_doppler,
Expand All @@ -153,7 +184,8 @@ function TrackingState(
cn0_estimator,
downconverted_signal,
carrier,
code
code,
post_corr_filter,
)
end

Expand All @@ -173,14 +205,16 @@ function TrackingState(
correlator::C = get_default_correlator(system, num_ants),
integrated_samples = 0,
prompt_accumulator = zero(ComplexF64),
cn0_estimator::CN = MomentsCN0Estimator(20)
cn0_estimator::CN = MomentsCN0Estimator(20),
post_corr_filter::PCF = DefaultPostCorrFilter(),
) where {
T <: CuMatrix,
S <: AbstractGNSS{T},
C <: AbstractCorrelator,
CALF <: AbstractLoopFilter,
COLF <: AbstractLoopFilter,
CN <: AbstractCN0Estimator
CN <: AbstractCN0Estimator,
PCF <: AbstractPostCorrFilter
}
if found(sc_bit_detector)
code_phase = mod(code_phase, get_code_length(system) *
Expand All @@ -192,7 +226,7 @@ function TrackingState(
carrier = nothing
code = nothing

TrackingState{S, C, CALF, COLF, CN, Nothing, Nothing, Nothing}(
TrackingState{S, C, CALF, COLF, CN, Nothing, Nothing, Nothing, PCF}(
prn,
system,
carrier_doppler,
Expand All @@ -210,7 +244,8 @@ function TrackingState(
cn0_estimator,
downconverted_signal,
carrier,
code
code,
post_corr_filter,
)
end

Expand Down Expand Up @@ -242,3 +277,4 @@ end
@inline get_carrier(state::TrackingState) = state.carrier
@inline get_code(state::TrackingState) = state.code
@inline get_prn(state::TrackingState) = state.prn
@inline get_post_corr_filter(state::TrackingState) = state.post_corr_filter
18 changes: 0 additions & 18 deletions test/boc.jl

This file was deleted.

17 changes: 9 additions & 8 deletions test/correlator.jl
Original file line number Diff line number Diff line change
Expand Up @@ -73,17 +73,18 @@
@testset "Filter correlator" begin
correlator = @inferred EarlyPromptLateCorrelator(
SVector(
SVector(1.0 + 0.0im, 1.0 + 0.0im),
SVector(1.0 + 0.0im, 1.0 + 0.0im),
SVector(1.0 + 0.0im, 1.0 + 0.0im)
SVector(1.0 + 0.0im, 1.0 + 1.0im),
SVector(1.0 + 0.0im, 2.0 + 0.0im),
SVector(1.0 + 1.0im, 1.0 + 3.0im)
)
)
filtered_correlator = @inferred Tracking.filter(x -> x[1], correlator)
default_post_corr_filter = Tracking.DefaultPostCorrFilter()
filtered_correlator = @inferred Tracking.apply(default_post_corr_filter, correlator)
@test filtered_correlator == EarlyPromptLateCorrelator(
SVector(
1.0 + 0.0im,
1.0 + 0.0im,
1.0 + 0.0im
1.0 + 1.0im,
2.0 + 0.0im,
1.0 + 3.0im
)
)

Expand All @@ -94,7 +95,7 @@
1.0 + 0.0im
)
)
filtered_correlator = @inferred Tracking.filter(x -> 2 * x, correlator)
filtered_correlator = @inferred Tracking.apply(x -> 2 * x, correlator)
@test filtered_correlator == EarlyPromptLateCorrelator(
SVector(
2.0 + 0.0im,
Expand Down
Loading

0 comments on commit 4264924

Please sign in to comment.