class Multilateration::Solver
Attributes
receivers[R]
time_of_arrival_strategy[R]
wave_speed[R]
Public Class Methods
new(unsorted_receivers, time_of_arrival_strategy)
click to toggle source
# File lib/multilateration/solver.rb, line 6 def initialize(unsorted_receivers, time_of_arrival_strategy) @receivers = unsorted_receivers.sort_by { |r| time_of_arrival_strategy.toa(r) } @wave_speed = time_of_arrival_strategy.wave_speed @time_of_arrival_strategy = time_of_arrival_strategy end
Public Instance Methods
solved_vector()
click to toggle source
# File lib/multilateration/solver.rb, line 12 def solved_vector Vector.elements (ai_matrix * bi_matrix).flat_map.to_a end
Private Instance Methods
ai(i)
click to toggle source
# File lib/multilateration/solver.rb, line 26 def ai(i) 2*( ( distance(tdoa_between_receivers_first_and_last) * ( i - first_receiver )) \ - ( distance(tdoa_between_receivers_first_and(i)) * ( last_receiver - first_receiver )) ) end
ai_matrix()
click to toggle source
# File lib/multilateration/solver.rb, line 18 def ai_matrix Matrix.rows(middle_receivers.map { |i| ai(i) }).inverse end
bi(i)
click to toggle source
# File lib/multilateration/solver.rb, line 31 def bi(i) ( distance(tdoa_between_receivers_first_and(i)) * ( distance_sq(tdoa_between_receivers_first_and_last) - inner_product_sq(last_receiver) )) \ + ( inner_product_sq(first_receiver) * ( distance(tdoa_between_receivers_first_and(i)) - distance(tdoa_between_receivers_first_and_last) )) \ + ( distance(tdoa_between_receivers_first_and_last) * ( inner_product_sq(i) - distance_sq(tdoa_between_receivers_first_and(i)) )) end
bi_matrix()
click to toggle source
# File lib/multilateration/solver.rb, line 22 def bi_matrix Matrix.columns([middle_receivers.map { |i| bi(i) }]) end
distance(time, exp=1)
click to toggle source
# File lib/multilateration/solver.rb, line 57 def distance(time, exp=1) (wave_speed**exp) * (time**exp) end
distance_sq(time)
click to toggle source
# File lib/multilateration/solver.rb, line 61 def distance_sq(time) distance(time, 2) end
first_receiver()
click to toggle source
# File lib/multilateration/solver.rb, line 41 def first_receiver receivers.first end
inner_product_sq(vector)
click to toggle source
# File lib/multilateration/solver.rb, line 65 def inner_product_sq(vector) vector.inner_product(vector) end
last_receiver()
click to toggle source
# File lib/multilateration/solver.rb, line 45 def last_receiver receivers.last end
middle_receivers()
click to toggle source
# File lib/multilateration/solver.rb, line 37 def middle_receivers receivers - [first_receiver, last_receiver] end
tdoa_between_receivers_first_and(other_receiver)
click to toggle source
# File lib/multilateration/solver.rb, line 53 def tdoa_between_receivers_first_and(other_receiver) time_of_arrival_strategy.tdoa(other_receiver, first_receiver) end
tdoa_between_receivers_first_and_last()
click to toggle source
# File lib/multilateration/solver.rb, line 49 def tdoa_between_receivers_first_and_last tdoa_between_receivers_first_and(last_receiver) end