I get a different speed from some of you guys on "go fast" so will show how I solve it. Maybe somebody can point out a mistake. Forgive the non standard math notation. I'm a physics engine programmer so use vectors and am writing pseudo code here. This is how we typically do things in physics simulations.
First, a disclaimer: It's not clear to me whether the range info is accurate or not. I'm not a pilot so can't say for sure, but in DCS World the flashing "B" on the display in an A10-C means both the IR and laser are active so range info should be "accurate". If the F-18 is the same, then it's probably reliable, but we should ask some pilots to make sure. Lehto says the target isn't being lased so maybe I'm wrong about the flashing "B", or maybe he missed it like I did.
Regardless, this analysis will assume the range info is correct. Please check my math, easy to make mistakes here:
Assumptions:
-F-18 is in level flight with no heading changes.
-F-18 true air speed is 367 kts (
http://www.hochwarth.com/misc/AviationCalculator.html using 0.61 Mach and 25,000 feet altitude which gives 252 kts CAS. Close enough?)
-Target velocity is constant
Reference frames:
Jet - Velocities and positions relative to F18. X+ right, Y+ up, Z+ forward relative to F-18
F18Air - Velocities and positions relative to air at F-18's position.
Other variables/vectors :
float range1 (range to target at sample point 1)
float range2 (range to target at sample point 2)
Vector3 Jet.DirToTarget1 (direction to target relative to jet at sample point 1)
Vector3 Jet.PositionTarget1 (position of target relative to jet at sample point 1)
Vector3 Jet.DirToTarget2 (direction to target relative to jet at sample point 2)
Vector3 Jet.PositionTarget2 (position of target relative to jet at sample point 1)
Vector3 Jet.VelocityTarget (relative velocity of target in jet's reference frame taken between sample points 1 and 2)
Sample point 1 is taken at 13.667 sec in the original video, shortly after lock where both the elevation and bearing conveniently tick over to -27 deg and 45 deg in the same frame. Assuming the integer display rounds up at 0.5, this would give a starting elevation of -26.5 deg and 44.5 degrees.
Starting with Jet.DirToTarget1 aligned with jet frame (z+ forward, other components 0):
Jet.DirToTarget1.x = 0
Jet.DirToTarget1.y = 0
Jet.DirToTarget1.z = 1.0
Rotating vector down 26.5 degrees around x axis for elevation and normalizing updates to:
Jet.DirToTarget1.x = 0
Jet.DirToTarget1.y = -0.4461977
Jet.DirToTarget1.z = 0.8949344
Rotating above vector -44.5 degrees around y axis for heading and normalizing updates to:
Jet.DirToTarget1.x = -0.6272678
Jet.DirToTarget1.y = -0.4461977
Jet.DirToTarget1.z = 0.6383123
Projecting along this vector to range 4.3 nautical miles to get target position relative to the jet (Jet frame):
Jet.PositionTarget1 = Jet.DirToTarget * range1 (where range1 = 4.3 nautical miles)
Jet.PositionTarget1.x = -2.697252 nautical miles (-14,241.49 feet)
Jet.PositionTarget1.y = -1.918651 nautical miles (-10,130.48 feet)
Jet.PositionTarget1.z = 2.744743 nautical miles (14492.24 feet)
--------------------------------
Done with position sample point 1.
--------------------------------
Now for sample point 2. I take this at 21.267 seconds (7.600 seconds after sample point 1) which has elevation and bearing both update in the same frame to -30 deg (elev) and 50 deg (bearing), meaning -29.5 deg and 49.5 deg. Range clicked over to 3.9 less than 0.2 seconds prior to sample point 2 so I'm using 3.9 nautical miles for range2:
Jet.DirToTarget2.x = -0.6618237
Jet.DirToTarget2.y = -0.4924236
Jet.DirToTarget2.z = 0.5652508
Jet.PositionTarget2 = Jet.DirToTarget * range2 (where range1 = 3.9 nautical miles)
Jet.PositionTarget2.x = -2.581113 nautical miles (-13,628.27 feet)
Jet.PositionTarget2.y = -1.920452 nautical miles (-10,139.99 feet)
Jet.PositionTarget2.z = 2.204478 nautical miles (11,639.64 feet)
This gives a target altitude of about 10,135 feet below the jet if we average the two heights. Jet is 25,000 feet so target altitude evaluates to 25,000 - 10,135 = 14,865 feet.
-----------------
Now for the target velocity in jet frame (Jet.VelocityTarget), calculated from positions at sample points 1 and 2 and elapsed time between sample points:
-----------------
New variable:
Vector3 Jet.DisplacementTarget = JetPositionTarget2 - JetPositionTarget1
Jet.DisplacementTarget.x = 0.116122 nautical miles (613 feet)
Jet.DisplacementTarget.y = -0.001801 nautical miles (9.51 feet)
Jet.DisplacementTarget.z = -0.540265 nautical miles (-2,852.60 feet)
Dividing by elapsed time between the sample points (7.600 seconds) gives Jet.VelocityTarget:
Jet.VelocityTarget.x = 0.015279 nautical miles / sec
Jet.VelocityTarget.y = -0.0002370383 nautical miles / sec
Jet.VelocityTarget.z = -0.071088 nautical miles / sec
In knots (* 3600):
Jet.VelocityTarget.x = 55 knots
Jet.VelocityTarget.y = -0.8533377 knots
Jet.VelocityTarget.z = -255.915 knots
Jet.SpeedTarget via vector length (sqrt(x*x+y*y+z*z)) = 261.7627 knots
--------------------------------
So to sum up at this point: We have the target velocity, speed, two positions relative to the jet. To check the math I'll compute VC at both sample points to verify it matches the HUD VC (closing velocity). This is the velocity vector dotted with each respective target direction vector (one at each sample point, but I use the same velocity vector for both since I only have one. This is assuming target velocity is constant over the 7.6 second time period between sample points 1 and 2 which may or may not be true):
Jet.VCCalculated1 = Dot(Jet.VelocityTarget, Jet.DirToTarget1)
Jet.VCCalculated1 = -197 kts (FLIR flips sign to + for closing targets and says VC 210 kts at point 1 so ~6% error)
Jet.VCCalculated2 = Dot(Jet.VelocityTarget, Jet.DirToTarget2)
Jet.VCCalculated2 = -181 kts (FLIR says VC 180 so we're dead on with sample point 2)
So this is within 0% and 6% error on the VC as displayed on the FLIR. It seems likely this difference is just due to precision in the range. If the HUD showed another digit or two this would probably be bang on.
Now for target true air speed (TAS) in F18's air. Taking F18 air speed as 367 knots in new velocity vector "JetVelocity" = (0,0,367) in F18Air frame:
F18Air.VelocityTarget = Jet.VelocityTarget + JetVelocity
F18Air.VelocityTarget.x = 55.01318 knots
F18Air.VelocityTarget.y = -0.8533377 knots
F18Air.VelocityTarget.z = 111.085 knots
Giving F18Air.Speed (length of above vector) = 124 knots. <---This would be the air speed of the target in the F18 air's frame.
So with these numbers the target would be moving 124 knots TAS (assuming same wind speed as jet which may not be true). With jet at 367 knots, jet would be overtaking the target (both flying in the same direction, more or less) and giving the parralax.
The problem I'm seeing with the balloon hypothesis is you'd need essentially a 124 knot headwind at the jet (possible) but 0 wind only 10,000 feet below it, or at least a difference of 124 knots in the flight direction between the two altitudes essentially in opposite directions. I know wind can change pretty quickly with altitude at different wind layers and 120+ knots at high altitude is not unheard of, but it'd have to be aligned with the jet too. I suppose it's possible, but I'm finding it a little harder to swallow than some others here because of the testimony that comes along with all this, radar jamming events and so on, the object being colder than the ocean, etc.. It just seems unlikely that a carrier group is tracking individual birds and vectoring F18s after them. Surely the Aegis radar system or whatever they're called filters that stuff out if it even can track a single bird?
Regardless, if our navy is chasing balloons and birds while our F18's are signaling radar jamming events when a WIZO locks a target that the radar can't identify immediately, we have a lot bigger problems than UFOs.