Skip to content

Commit 9f2eb70

Browse files
authored
Test intermediate frequency and update Acquisition (#41)
1 parent c556b5d commit 9f2eb70

File tree

2 files changed

+89
-5
lines changed

2 files changed

+89
-5
lines changed

Project.toml

+3-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name = "Tracking"
22
uuid = "10b2438b-ffd4-5096-aa58-44041d5c8f3b"
33
authors = ["Soeren Schoenbrod <[email protected]>",
44
"Michael Niestroj <[email protected]>"]
5-
version = "0.15.1"
5+
version = "0.15.2"
66

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

1919
[compat]
20-
Acquisition = "0.0.2, 0.0.4, 0.0.5"
20+
Acquisition = "0.0.2, 0.0.4, 0.0.5, 0.1.0"
2121
CUDA = "3.5"
2222
DocStringExtensions = "0.6, 0.7, 0.8, 0.9"
2323
GNSSSignals = "0.16"
@@ -26,5 +26,4 @@ StaticArrays = "0.9, 0.10, 0.11, 0.12, 1.0"
2626
StructArrays = "0.4, 0.6.5"
2727
TrackingLoopFilters = "0.1"
2828
Unitful = "0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 1.0"
29-
julia = "1.6"
30-
29+
julia = "1.6"

test/tracking_loop.jl

+86-1
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ end
156156
prn
157157
)
158158
scaling = 512
159-
signal = type <: Integer ? complex.(floor.(type, real.(signal_temp) * scaling), floor.(type, imag.(signal_temp) * scaling)) : Complex{type}.(signal_temp)
159+
signal = type <: Integer ? complex.(round.(type, real.(signal_temp) * scaling), round.(type, imag.(signal_temp) * scaling)) : Complex{type}.(signal_temp)
160160

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

@@ -222,6 +222,91 @@ end
222222
# plot(imag.(tracked_prompts))
223223
end
224224

225+
@testset "Tracking with intermediate frequency of $intermediate_frequency" for intermediate_frequency in (0.0Hz, -10000.0Hz, 10000.0Hz, -30000.0Hz, 30000.0Hz)
226+
gpsl1 = GPSL1()
227+
carrier_doppler = 200Hz
228+
start_code_phase = 100
229+
code_frequency = carrier_doppler / 1540 + 1023e3Hz
230+
sampling_frequency = 4e6Hz
231+
prn = 1
232+
range = 0:3999
233+
start_carrier_phase = π / 2
234+
state = TrackingState(prn, gpsl1, carrier_doppler - 20Hz, start_code_phase)
235+
236+
signal = cis.(
237+
2π .* (carrier_doppler + intermediate_frequency) .* range ./ sampling_frequency .+ start_carrier_phase
238+
) .*
239+
get_code.(
240+
gpsl1,
241+
code_frequency .* range ./ sampling_frequency .+ start_code_phase,
242+
prn
243+
)
244+
245+
track_result = @inferred track(signal, state, sampling_frequency; intermediate_frequency)
246+
247+
iterations = 2000
248+
code_phases = zeros(iterations)
249+
carrier_phases = zeros(iterations)
250+
tracked_code_phases = zeros(iterations)
251+
tracked_carrier_phases = zeros(iterations)
252+
tracked_code_dopplers = zeros(iterations)
253+
tracked_carrier_dopplers = zeros(iterations)
254+
tracked_prompts = zeros(ComplexF64, iterations)
255+
for i = 1:iterations
256+
carrier_phase = mod2pi(2π * (carrier_doppler + intermediate_frequency) * 4000 * i / sampling_frequency +
257+
start_carrier_phase + π) - π
258+
code_phase = mod(
259+
code_frequency * 4000 * i / sampling_frequency + start_code_phase,
260+
1023
261+
)
262+
signal = cis.(
263+
2π .* (carrier_doppler + intermediate_frequency) .* range ./ sampling_frequency .+ carrier_phase
264+
) .*
265+
get_code.(
266+
gpsl1,
267+
code_frequency .* range ./ sampling_frequency .+ code_phase,
268+
prn
269+
)
270+
track_result = @inferred track(
271+
signal,
272+
get_state(track_result),
273+
sampling_frequency;
274+
intermediate_frequency
275+
)
276+
comp_carrier_phase = mod2pi(2π * (carrier_doppler + intermediate_frequency) * 4000 * (i + 1) /
277+
sampling_frequency + start_carrier_phase + π) - π
278+
comp_code_phase = mod(
279+
code_frequency * 4000 * (i + 1) / sampling_frequency + start_code_phase,
280+
1023
281+
)
282+
tracked_code_phases[i] = get_code_phase(track_result)
283+
tracked_carrier_phases[i] = get_carrier_phase(track_result)
284+
tracked_carrier_dopplers[i] = get_carrier_doppler(track_result)/Hz
285+
tracked_code_dopplers[i] = get_code_doppler(track_result)/Hz
286+
tracked_prompts[i] = get_prompt(track_result)
287+
code_phases[i] = comp_code_phase
288+
carrier_phases[i] = comp_carrier_phase
289+
end
290+
@test tracked_code_phases[end] code_phases[end] atol = 2e-4
291+
@test tracked_carrier_phases[end] + π carrier_phases[end] atol = 5e-2
292+
293+
# using PyPlot
294+
# pygui(true)
295+
# figure("carrier_phases")
296+
# plot(tracked_carrier_phases)
297+
# plot(carrier_phases)
298+
# grid(true)
299+
# figure("Code Phases")
300+
# plot(300 * (tracked_code_phases .- code_phases))
301+
# figure("Carrier Doppler")
302+
# plot(tracked_carrier_dopplers)
303+
# figure("Code Doppler")
304+
# plot(tracked_code_dopplers)
305+
# figure("Prompt")
306+
# plot(real.(tracked_prompts))
307+
# plot(imag.(tracked_prompts))
308+
end
309+
225310
@testset "Track multiple signals with signal of type $type" for type in (Int16, Int32, Int64, Float32, Float64)
226311
gpsl1 = GPSL1()
227312
carrier_doppler = 200Hz

0 commit comments

Comments
 (0)