Skip to content

Commit

Permalink
Test intermediate frequency and update Acquisition (#41)
Browse files Browse the repository at this point in the history
  • Loading branch information
zsoerenm authored Dec 18, 2022
1 parent c556b5d commit 9f2eb70
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 5 deletions.
7 changes: 3 additions & 4 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name = "Tracking"
uuid = "10b2438b-ffd4-5096-aa58-44041d5c8f3b"
authors = ["Soeren Schoenbrod <[email protected]>",
"Michael Niestroj <[email protected]>"]
version = "0.15.1"
version = "0.15.2"

[deps]
Acquisition = "d4bbf60b-102b-5ffb-8f97-a7ea5817e69f"
Expand All @@ -17,7 +17,7 @@ TrackingLoopFilters = "0814aff9-93cb-554c-9fff-9bf1cfdb5efa"
Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"

[compat]
Acquisition = "0.0.2, 0.0.4, 0.0.5"
Acquisition = "0.0.2, 0.0.4, 0.0.5, 0.1.0"
CUDA = "3.5"
DocStringExtensions = "0.6, 0.7, 0.8, 0.9"
GNSSSignals = "0.16"
Expand All @@ -26,5 +26,4 @@ StaticArrays = "0.9, 0.10, 0.11, 0.12, 1.0"
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"

julia = "1.6"
87 changes: 86 additions & 1 deletion test/tracking_loop.jl
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ end
prn
)
scaling = 512
signal = type <: Integer ? complex.(floor.(type, real.(signal_temp) * scaling), floor.(type, imag.(signal_temp) * scaling)) : Complex{type}.(signal_temp)
signal = type <: Integer ? complex.(round.(type, real.(signal_temp) * scaling), round.(type, imag.(signal_temp) * scaling)) : Complex{type}.(signal_temp)

track_result = @inferred track(signal, state, sampling_frequency)

Expand Down Expand Up @@ -222,6 +222,91 @@ end
# plot(imag.(tracked_prompts))
end

@testset "Tracking with intermediate frequency of $intermediate_frequency" for intermediate_frequency in (0.0Hz, -10000.0Hz, 10000.0Hz, -30000.0Hz, 30000.0Hz)
gpsl1 = GPSL1()
carrier_doppler = 200Hz
start_code_phase = 100
code_frequency = carrier_doppler / 1540 + 1023e3Hz
sampling_frequency = 4e6Hz
prn = 1
range = 0:3999
start_carrier_phase = π / 2
state = TrackingState(prn, gpsl1, carrier_doppler - 20Hz, start_code_phase)

signal = cis.(
2π .* (carrier_doppler + intermediate_frequency) .* range ./ sampling_frequency .+ start_carrier_phase
) .*
get_code.(
gpsl1,
code_frequency .* range ./ sampling_frequency .+ start_code_phase,
prn
)

track_result = @inferred track(signal, state, sampling_frequency; intermediate_frequency)

iterations = 2000
code_phases = zeros(iterations)
carrier_phases = zeros(iterations)
tracked_code_phases = zeros(iterations)
tracked_carrier_phases = zeros(iterations)
tracked_code_dopplers = zeros(iterations)
tracked_carrier_dopplers = zeros(iterations)
tracked_prompts = zeros(ComplexF64, iterations)
for i = 1:iterations
carrier_phase = mod2pi(2π * (carrier_doppler + intermediate_frequency) * 4000 * i / sampling_frequency +
start_carrier_phase + π) - π
code_phase = mod(
code_frequency * 4000 * i / sampling_frequency + start_code_phase,
1023
)
signal = cis.(
2π .* (carrier_doppler + intermediate_frequency) .* range ./ sampling_frequency .+ carrier_phase
) .*
get_code.(
gpsl1,
code_frequency .* range ./ sampling_frequency .+ code_phase,
prn
)
track_result = @inferred track(
signal,
get_state(track_result),
sampling_frequency;
intermediate_frequency
)
comp_carrier_phase = mod2pi(2π * (carrier_doppler + intermediate_frequency) * 4000 * (i + 1) /
sampling_frequency + start_carrier_phase + π) - π
comp_code_phase = mod(
code_frequency * 4000 * (i + 1) / sampling_frequency + start_code_phase,
1023
)
tracked_code_phases[i] = get_code_phase(track_result)
tracked_carrier_phases[i] = get_carrier_phase(track_result)
tracked_carrier_dopplers[i] = get_carrier_doppler(track_result)/Hz
tracked_code_dopplers[i] = get_code_doppler(track_result)/Hz
tracked_prompts[i] = get_prompt(track_result)
code_phases[i] = comp_code_phase
carrier_phases[i] = comp_carrier_phase
end
@test tracked_code_phases[end] code_phases[end] atol = 2e-4
@test tracked_carrier_phases[end] + π carrier_phases[end] atol = 5e-2

# using PyPlot
# pygui(true)
# figure("carrier_phases")
# plot(tracked_carrier_phases)
# plot(carrier_phases)
# grid(true)
# figure("Code Phases")
# plot(300 * (tracked_code_phases .- code_phases))
# figure("Carrier Doppler")
# plot(tracked_carrier_dopplers)
# figure("Code Doppler")
# plot(tracked_code_dopplers)
# figure("Prompt")
# plot(real.(tracked_prompts))
# plot(imag.(tracked_prompts))
end

@testset "Track multiple signals with signal of type $type" for type in (Int16, Int32, Int64, Float32, Float64)
gpsl1 = GPSL1()
carrier_doppler = 200Hz
Expand Down

2 comments on commit 9f2eb70

@zsoerenm
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JuliaRegistrator
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Registration pull request created: JuliaRegistries/General/74321

After the above pull request is merged, it is recommended that a tag is created on this repository for the registered package version.

This will be done automatically if the Julia TagBot GitHub Action is installed, or can be done manually through the github interface, or via:

git tag -a v0.15.2 -m "<description of version>" 9f2eb706e0a0a1305c74cb04c2471531d26cde82
git push origin v0.15.2

Please sign in to comment.