|
156 | 156 | prn
|
157 | 157 | )
|
158 | 158 | 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) |
160 | 160 |
|
161 | 161 | track_result = @inferred track(signal, state, sampling_frequency)
|
162 | 162 |
|
|
222 | 222 | # plot(imag.(tracked_prompts))
|
223 | 223 | end
|
224 | 224 |
|
| 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 | + |
225 | 310 | @testset "Track multiple signals with signal of type $type" for type in (Int16, Int32, Int64, Float32, Float64)
|
226 | 311 | gpsl1 = GPSL1()
|
227 | 312 | carrier_doppler = 200Hz
|
|
0 commit comments