Last active
August 29, 2015 13:57
-
-
Save jrleeman/9866046 to your computer and use it in GitHub Desktop.
Inversion Theory Example of Finding a Black Box Pinger
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"metadata": { | |
"name": "" | |
}, | |
"nbformat": 3, | |
"nbformat_minor": 0, | |
"worksheets": [ | |
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Locating a Black Box Pinger\n", | |
"\n", | |
"![Black Box - Image: paper-replika.com](http://www.paper-replika.com/images/stories/instructions/Transportation/flight-data-recorder.jpg)\n", | |
"\n", | |
"With the disappearance of <a href=\"http://en.wikipedia.org/wiki/Malaysia_Airlines_Flight_370\" target=\"_blank\">Malaysia Airlines flight 370</a>, there is a lot of talk about finding the \"black boxes\" of the aircraft. \u00a0There are two instruments, the <a href=\"http://en.wikipedia.org/wiki/Flight_data_recorder\" target=\"_blank\">flight data recorder</a> and the <a href=\"http://en.wikipedia.org/wiki/Cockpit_voice_recorder\" target=\"_blank\">cockpit voice recorder</a>. \u00a0While the cockpit voice recorder only has the last two hours of conversation recorded, the data recorder will tell us lots about all movements of the aircraft for a relatively long history. \u00a0I've written about the history of flight data recorders before (<a href=\"http://www.johnrleeman.com/2011/01/13/surviving-a-crash-the-black-box-then-and-now/\" target=\"_blank\">here</a>), and there are many resources out there explaining how they work. \u00a0To see inside one, Mike over at <a href=\"http://www.electricstuff.co.uk/\" target=\"_blank\">Mike's Electric Stuff</a> has an excellent <a href=\"https://www.youtube.com/watch?v=mQehX0rVYuY&list=PL0KZLmPyL6AnVxyvFZRKGsIfcpQlHx0xH&index=6\" target=\"_blank\">teardown video</a>. \u00a0Mike even shows the pinger in action about 4 minutes into the video.\n", | |
"\n", | |
"What I want to talk about today is the pinger that is located on the recorders and how we locate it. \u00a0The pinger is just a small device (about the size of a pepper shaker) that makes sounds that propagate through the water. \u00a0Generally, pingers send out a pulse once per second at a frequency of 37.5 kHz. \u00a0This is just above our normal hearing range, that is generally considered to top out at about 20 kHz. \u00a0To find the pinger, we drag very sensitive microphones behind ships, drop microphones from aircraft into the water, or listen with sensors on underwater vehicles such as submarines and ROVs.\n", | |
"\n", | |
"A few problems exist when we go looking for the black boxes though. \u00a0First, the pinger activates when it is submerged in water and will last for 30-40 days. \u00a0That's not much time when the search area is so large. \u00a0Next, the pings are relatively weak. \u00a0This is a small, low-power device. \u00a0In fact, detecting the pings more than a mile or two away isn't likely. \u00a0Finally, there could be debris or\u00a0sand/mud covering the pinger.\n", | |
"\n", | |
"To cover lots of ground, the Navy is towing a microphone very deep in the water to reduce the distance to the source. \u00a0 \u00a0While this is a good strategy, it doesn't cover ground very quickly. \u00a0The boat must go back and forth in a very tight pattern, referred to as 'mowing the lawn'.\n", | |
"\n", | |
"Another way to search is to drop <a href=\"http://en.wikipedia.org/wiki/Sonobuoy\" target=\"_blank\">sonar buoys</a> into the water and listen with a temporary network. \u00a0These military listening devices are dropped from an aircraft, listen and transmit what they hear, then sink themselves after a few hours. \u00a0A good discussion of their design was on \"<a href=\"http://www.theamphour.com/190-lets-hear-it-for-the-buoys-vanishing-vessel-vexation/\" target=\"_blank\">The Amp Hour #190 - Let's Hear it for the Buoys - Vanishing Vessel Vexation</a>\". \u00a0Where to drop the buoys is more of a problem in <a href=\"http://mathworld.wolfram.com/BayesianAnalysis.html\" target=\"_blank\">Bayesian plausibility</a> estimation and/or <a href=\"http://mathworld.wolfram.com/SetCoveringDeployment.html\" target=\"_blank\">set covering deployment</a>.\n", | |
"\n", | |
"In this first article, I'm going to setup a 3D inversion problem in which we will try to locate the black box pinger from relative travel time data. We will also discuss the assumptions that will go into this illustrative case and the complications/useful things that we would have to think about if this were to be used in real life. The follow up article will actually solve this problem and discuss the results and look at a few special cases.\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# The Problem\n", | |
"Let's say that we drop an array of sonar buoys and we hear a ping! \u00a0Well, that means that we are near the aircraft, but we haven't found it by a long shot. \u00a0An aircraft black box is a pretty small object to find when you have an area of at least a few square miles to look in. \u00a0We're going to simplify things greatly and learn how to do an inversion for the position of black box.\n", | |
"\n", | |
"## Making Synthetic Data\n", | |
"First we need to know how fast the sound can travel through the ocean. \u00a0This is actually complicated because the speed varies with depth. \u00a0To simplify the problem, we can approximate the speed using the layer's mean speed, which greatly simplifies travel time calculation and allows me to focus on the inverse problem, not the forward problem. \u00a0For the curious, the speed of sound ($c$) is really described by the <a href=\"http://en.wikipedia.org/wiki/Bulk_modulus\" target=\"_blank\">bulk modulus</a>\u00a0($K$) and <a href=\"http://en.wikipedia.org/wiki/Density\" target=\"_blank\">density</a>\u00a0($\\rho$) of the fluid.\n", | |
"\n", | |
"$$c_{fluid} = \\sqrt{\\frac{K}{\\rho}}$$\n", | |
"\n", | |
"For this problem, we will assume that mean speed between the surface and the ocean floor is 1510 m/s. I've randomly generated the receiver locations by drawing from a uniform distribution in the range of the search area.\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"# Make a grid of sound velocity in the water\n", | |
"c_sound = 1510 #m/s\n", | |
"velocity = c_sound * np.ones([200,200])\n", | |
"\n", | |
"nRx = 12\n", | |
"\n", | |
"# Set the real source location\n", | |
"source_x = 5000 # 5km in\n", | |
"source_y = 5000 # 5km up\n", | |
"\n", | |
"# Set the 12 receiver locations\n", | |
"rec_x = [ 8500, 7550, 5700, 6750, 3150, 4850, 8600, 3800, 2850, 8250, 700, 6050]\n", | |
"rec_y = [ 5200, 5400, 9300, 4200, 300, 9700, 7150, 6100, 5450, 2600, 5500, 9400]\n", | |
"\n", | |
"# Make a plot to visualize the problem\n", | |
"fig = plt.figure(figsize(10,10))\n", | |
"ax = plt.subplot(111, axisbg='#6666ff')\n", | |
"\n", | |
"ax.grid()\n", | |
"\n", | |
"i = 1\n", | |
"for receiver in zip(rec_x,rec_y):\n", | |
" ax.plot([source_x,receiver[0]],[source_y,receiver[1]],color='k')\n", | |
" ax.text(receiver[0]-200,receiver[1]+150,'Rx %d'%i,color='w')\n", | |
" i += 1\n", | |
"\n", | |
"ax.scatter(rec_x,rec_y,marker='v',color='r',s=80,zorder=50)\n", | |
"ax.scatter(source_x,source_y,marker='*',color='#ffff00',s=400,zorder=50)\n", | |
"\n", | |
"ax.tick_params(axis='both', which='major', labelsize=16)\n", | |
"ax.set_xlabel('X [m]',fontsize=18)\n", | |
"ax.set_ylabel('Y [m]',fontsize=18)\n", | |
"ax.set_xlim(0,10000)\n", | |
"ax.set_ylim(0,10000)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 1, | |
"text": [ | |
"(0, 10000)" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\nSUVORK5CYII=\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10e44bf90>" | |
] | |
} | |
], | |
"prompt_number": 1 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Now that we know the x,y locations of the source and receivers, we need to calculate the Euclidian distance for the rays. In this case, we will assume that the sound travels in a straight line (i.e. no refraction) from the pinger to the receiver. We will ignore the tide going up and down at the surface changing the receiver z coordinate. Likewise, let's say that the bottom of the ocean is flat in this small area with a water depth of 5km. Finally, we will assume that the pinger is staying in one location and not drifting around on the ocean floor.\n", | |
"\n", | |
"We will let $Rx$ indicate the receiver location and $Tx$ indicate the transmitter (pinger) location. Subscripts are appended for x and y locations as well as receiver index. \n", | |
"\n", | |
"$$\\text{distance} = \\sqrt{(Rx_{ix}-Tx_x)^2 + (Rx_{iy}-Tx_y)^2 + D^2}$$" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"depth = 5000 # Depth of water in m\n", | |
"\n", | |
"def GetDistance(rec_x,rec_y,source_x,source_y,depth):\n", | |
" return sqrt((rec_x-source_x)**2 + (rec_y-source_y)**2 + depth**2)\n", | |
"\n", | |
"distances = []\n", | |
"i = 1\n", | |
"for receiver in zip(rec_x,rec_y):\n", | |
" d = GetDistance(receiver[0],receiver[1],source_x,source_y,depth)\n", | |
" print \"Receiver %d, %.2f m\" %(i,d)\n", | |
" distances.append(d)\n", | |
" i += 1" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Receiver 1, 6106.55 m\n", | |
"Receiver 2, 5626.94 m\n", | |
"Receiver 3, 6631.74 m\n", | |
"Receiver 4, 5357.47 m\n", | |
"Receiver 5, 7107.21 m\n", | |
"Receiver 6, 6863.85 m\n", | |
"Receiver 7, 6525.53 m\n", | |
"Receiver 8, 5258.33 m\n", | |
"Receiver 9, 5461.23 m\n", | |
"Receiver 10, 6428.26 m\n", | |
"Receiver 11, 6613.62 m\n", | |
"Receiver 12, 6742.59 m\n" | |
] | |
} | |
], | |
"prompt_number": 2 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Knowing the distances, we now will create a set of travel times from the source to the receiver. When we are making the problem, we know the origin time of the signal at the pinger, but in real life that isn't the case. We can invert with the origin time as a model parameter, but I believe we can simplify the problem further by assuming the realtive travel times will provide all of the information needed. We will set all times relative to the very first arrival. The closest buoy in this distribution will be buoy 8, so it will be zero and all other arrivals will be relative to it." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"rel_arrivals = []\n", | |
"for d in distances:\n", | |
" rel_arrivals.append(d/c_sound)\n", | |
"rel_arrivals = rel_arrivals - min(rel_arrivals)\n", | |
"\n", | |
"for i in range(nRx):\n", | |
" print \"Receiver %d, %.2f sec\" %(i+1,rel_arrivals[i])" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Receiver 1, 0.56 sec\n", | |
"Receiver 2, 0.24 sec\n", | |
"Receiver 3, 0.91 sec\n", | |
"Receiver 4, 0.07 sec\n", | |
"Receiver 5, 1.22 sec\n", | |
"Receiver 6, 1.06 sec\n", | |
"Receiver 7, 0.84 sec\n", | |
"Receiver 8, 0.00 sec\n", | |
"Receiver 9, 0.13 sec\n", | |
"Receiver 10, 0.77 sec\n", | |
"Receiver 11, 0.90 sec\n", | |
"Receiver 12, 0.98 sec\n" | |
] | |
} | |
], | |
"prompt_number": 3 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Setting up the Inversion\n", | |
"\n", | |
"Now we must decide how to setup the inversion problem. Even if we use slowness as the parameter to characterize speed, this is still non-linear! This is because we are attempting to solve for the position (x,y) of the source. In computing the travel times we use a square root to find the Euclidian distance, so we immediately are in the non-linear iterative realm.\n", | |
"\n", | |
"The general form of the inverse problem is $\\boldsymbol{G} \\vec{m} = \\vec{d}$, but we are working with a non-linear problem. This means we are not solving directly for the model parameters ($\\vec{m}$), but instead for a correction vector to the model parameters ($\\Delta \\vec{m}$). The data vector ($\\vec{d}$) turns into the residuals between the observation and model ($\\vec{d}_{res}$) and the data kernel ($\\boldsymbol{G}$) is a matrix of partial derivatives.\n", | |
"\n", | |
"To solve this problem we must do the following steps:\n", | |
"\n", | |
"1. Setup an initial model\n", | |
"1. Run the current model through the forward problem\n", | |
"1. Compute the residuals from the initial model and the data\n", | |
"1. Compute the partial derivative matrix\n", | |
"1. Solve for the correction vector (with SVD, DLS, etc)\n", | |
"1. Append the correction vector onto the current model\n", | |
"1. Make this new model the model used for the next iteration\n", | |
"1. Iterate this procedure until the solution converges or a stop condition occurs\n", | |
"\n", | |
"### Setup an initial model\n", | |
"\n", | |
"The initial model is just where the inversion will start. While it may be true that there is some initial model dependence, we won't know unless we do a full Monte Carlo of starting models. To have a consistent method for selecting the starting model, I will initially set the pinger location to be directly underneath the buoy that heard it first. For the specific layout about, that means that the pinger will start 5 km below buoy 8. The model vector ($\\vec{m}_{est}$) will consist of two elements, the x and y locations of the pinger. \n", | |
"\n", | |
"### Run the current model through the forward problem\n", | |
"\n", | |
"The forward problem involves computing the distance from the model location of the pinger to each receiver and computing the relative travel times to our reference buoy. In making the synthetic data above we've already developed these code snippets, so they will just be repurposed in the next installment. \n", | |
"\n", | |
"### Compute the residuals from the initial model and the data\n", | |
"\n", | |
"Here we simply take the observations that were made in the field and subtract the forward model outputs. The result is a residual relative travel time, or a measure of how far off the model is from the observations.\n", | |
"\n", | |
"### Compute the partial derivative matrix\n", | |
"\n", | |
"The data kernel ($\\boldsymbol{G}$), is normally a matrix that relates the model to the data. Since we are looking for changes to the model from residual travel times, this indicates that we will be dealing with a matrix of derivatives. In our case, the matrix will be the derivates of how the relative travel time to each buoy responds to a small kick (perturbation) in the x or y direction. We could do this numerically by adding a bit to the position and recomputing the travel, but the analytic derivative is simple for this problem. For this problem formulation we will have each row be a buoy and each column is a variable (x,y). \n", | |
"\n", | |
"Start with the travel time equation: $$t_{travel} = \\frac{1}{c_{sound}}\\sqrt{(Rx_{ix}-Tx_x)^2 + (Rx_{iy}-Tx_y)^2 + D^2}$$\n", | |
"\n", | |
"Solving one case by hand for $\\frac{\\partial{t_{travel}}}{\\partial{Tx_x}}$:\n", | |
"\n", | |
"$$\\frac{\\partial{t_{travel}}}{\\partial{Tx_x}} = \\frac{Tx_x-Rx_{ix}}{c_{sound}\\sqrt{(Rx_{ix}-Tx_x)^2 + (Rx_{iy}-Tx_y)^2 + D^2}}$$\n", | |
"\n", | |
"\n", | |
"General form of partial derivatives: $$\\boldsymbol{G}_{ij} = \\frac{Tx_j-Rx_{ij}}{c_{sound}\\sqrt{(Rx_{ix}-Tx_x)^2 + (Rx_{iy}-Tx_y)^2 + D^2}}$$\n", | |
"\n", | |
"Where j will indicate x or y derivatives and i indicates the receiver number.\n", | |
"\n", | |
"### Solve for the correction vector (with SVD, DLS, etc)\n", | |
"\n", | |
"In this case, I'm going to solve the problem with a least-squares approach. The damping option is added as well, so that we can experiment with that knob and see how the damping helps deal with noise in the data. We have derived (in class) the solution of damped least squares using a damping factor $\\epsilon$. Damping is used to provide a measure of how important fitting the data (the prediction error or misfit) is compared to the solution length. For large values of $\\epsilon$ we will minimize the underdetermined parts of a solution, but also sacrifice goodness of fit my also reducing the overdetermined parts of a solution. Ultimately, we just have to tweak the damping factor for the specific problem. \n", | |
"\n", | |
"In general, we will get the model correction vector by solving:\n", | |
"$$\\Delta \\vec{m}_{est} = [\\boldsymbol{G}^T \\boldsymbol{G} + \\epsilon^2\\boldsymbol{I}]^{-1} \\boldsymbol{G}^T \\vec{d}$$\n", | |
"\n", | |
"Sure, we could use a technique like the singular value decomposition, but it is a more expensive and powerful tool than necessary for a problem such as this.\n", | |
"\n", | |
"### Append the correction vector onto the current model\n", | |
"\n", | |
"The vector $\\Delta \\vec{m}_{est}$ is really just a correction that we need to apply to our current model. Adding the correction vector to the current model will provide us with the updated model that is the current best estimate and will be used when the process is repeated for the next iteration. In the past, we've always just applied the correction vector as it comes out of the solution above. If we want to be a little more cautious and don't mind doing some extra iterations, the correction vector can be multiplied element-wise by a scalar $\\xi \\in (0,1]$. This is a form of step reduction that can be used to slow convergence on a solution and possibly avoid pre-mature convergence. You can think of this as how greedy the algorithm is. We don't want to step backwards (in this problem anyway) and we don't want to overshoot, so the step reduction factor much be an element of the bounded set $(0,1]$. \n", | |
"\n", | |
"$$\\vec{m}_{new} = \\vec{m}_{est} + \\xi \\Delta \\vec{m}_{est}$$\n", | |
"\n", | |
"\n", | |
"### Make this new model the model used for the next iteration\n", | |
"\n", | |
"This step is just book-keeping in the code. We can keep a history of the model estimates if we want to examine run-time dynamics (which we will), or just simply set the current model estimate to the new model obtained in the step above. \n", | |
"\n", | |
"### Iterate this procedure until the solution converges or a stop condition occurs\n", | |
"\n", | |
"Now the program just has to loop this procedure and (hopefully) converge on an answer. This part sounds simple, but can actually be problematic in an operational algorithm in some real life application. In class we have always specified a number of iterations to do and then we look at the results. In some cases that is a fine approach, but we can do better. \n", | |
"\n", | |
"The first idea that comes to mind is to stop when a certain level of fit is reached. That sounds good until we get data that is just too noisy and we can never get a misfit that makes the algorithm stop. The algorithm will just go forever not getting any better, burning up processor cycles and eating away at our time. Maybe this isn't the approach to take then unless we specify some maximum number of iterations as a secondary stop condition.\n", | |
"\n", | |
"We could also just monitor the misfit and see when it stops changing. Keeping a small buffer of the misfit for the last $n$ solutions is not expensive and allows us to either look at the derivative of the misfit or the variance of the buffer and define a stop condition. If the problem won't converge, then this could run forever as well. Again we can solve this by providing a maximum iteration stop condition. \n", | |
"\n", | |
"For this example we will run out to a set number of iterations for completeness, but we will truncate the answer artificially and see how well the stop condition would have performed. The stop condition will be to simply monitor the correction vector and stop iterating when the correction vector is the size of our estimated uncertainty. \n", | |
"\n", | |
"\n", | |
"## What's Missing?\n", | |
"The procedure discussed doesn't really consider what effect the initial model has on the solution. If we were doing this in a mission critical application (or were being thorough before submitting a publication), we would run a Monte Carlo suite. Solve the same problem by putting the initial pinger location in a random location in the grid. The results of many (say 100,000) trials of this type will give us an area where all solutions fall. This is a region of uncertainty due to the algorithm. It is very likely that there is a broad area of low misfit around the solution that will be difficult for the algorithm to navigate. To demonstrate this you can run lots of inversions on a difficult test functions like the [Rosenbrock function](http://en.wikipedia.org/wiki/Rosenbrock_function) or [Beale's function](http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/TestGO_files/Page288.htm). \n", | |
"\n", | |
"Another thing we would want to consider in real time, would be defining an error ellipse from all unknowns, not just the algorithm performance. Searchers don't get much use from an exact \"the pinger is located at (x,y)\", because it is almost certainly is not. What is much more useful is a search *area*. If the search area has a radius of 1 km, that might be useful. If the search area has a radius of 1000 km, it's probably not so useful. Defining the errors and quantifying them all is beyond the scope of this post and is really the hardest part of any problem. We could start talking about Bayesian approaches, which have been used in past aircraft hunts (see \"[Can a 250 Year-Old Mathematical Theory Find a Missing Plane?\"](http://www.npr.org/blogs/thetwo-way/2014/03/25/294390476/can-a-250-year-old-mathematical-theorem-find-a-missing-plane)). In fact, we could quantify satellite data such as possible debris into the problem as a prior. \n", | |
"\n", | |
"When we look at the assumptions we made and the problem in real life, there are a few issues too. The velocity change with depth in the water will result in some refraction of sound. This effect can actually be pronounced enough that submarines can use it to \"hide\" from sonar. Modern sub captains can even launch special profiling packages that return the current velocity structure of the ocean to help improve their edge in a tactical situation! Other complicating factors include reflection off underwater topography and the poorly mapped ocean bottom in the area where the plane is suspected to have crashed.\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Alternative Approaches \n", | |
"This problem has a relatively restricted domain and the forward model is very fast to compute. In real life we could simply grid search or use a Monte-Carlo approach to make the position estimate. These are the most robust techniques and could be done relatively quickly, even on a laptop computer. \n", | |
"\n", | |
"## What's Next?\n", | |
"In the next post we will solve the inverse problem that was setup here and look at both how the initial model matters, as well as how the placement of the buoys can change the results. What happens when the source is external to the network? See you in a week or two!\n" | |
] | |
} | |
], | |
"metadata": {} | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment