TL:DR - How can you find the 3D coordinates of a emitter than transmits an impulse signal?


I'm working on something to improve my bird-watching. I've got a camera that can take pictures of the birds when I'm not around, but currently it has to be zoomed out all the way to guarantee they're in frame. This doesn't make for good pictures, so here's what I've done:

Mounted camera on a motor so it can rotate, zoomed in enough that the pictures will be better quality, and attempted multilateration to make the camera turn.


My multilateration is simple. 4 microphones listen for sound. When an impulse (such as a chirp) is created from an emitter (bird), the microphones can detect the impulse, and my microcontroller can calculate the time differences between all 4 mics receiving the impulse.

My microcontroller then uses a home brew program that converts these time differences and the known locations of the microphones relative to each other into matrix form.

Once the program has the matrices, it can solve for the distance from each microphone to the bird's origin, which then can be used to figure out the coordinates of the bird relative to the microphones.


The problem with this, is that it needs to be really precise. I'm talking ~10 nanoseconds of difference in reception time between mics in theoretical math space will cause the program to miscalculate where the bird is.

I've muddled with the code to see if implementing more mics will lessen the need for precision, but I can't find a way to achieve a tolerance greater than ~±25ns.

With my setup, I can only calculate a reception time difference on the level of 10-5 seconds, so it's not possible for me to guarantee the level of precision that this type of math needs.

Can anyone think of a way for me to improve my setup so that it works? Are there other ways to accomplish multilateration? How else could I find where the bird is when it's chirping?

Thanks guys, you're always awesome!!!


I have written out the mathematical process I have used for this problem. Pictures of that, an excel sheet for generating initial conditions, and Matlab code for handling the maths can be found here.

  • $\begingroup$ Are you sure with your precision calculation? Doesn't sound like it makes any sense to me: you want 10 ns = $10^{-8} \, \text s$ precision, but in air, sound only travels $10^{-8}\,\text s \,\cdot\, 3\cdot10^{2}\frac{\text m}{\text 2}=3\,\mu\text m$. I don't think your birds are that small. $\endgroup$ May 29 '18 at 18:07
  • $\begingroup$ (also, for that temporal resolution, your observation would need to have 100 MHz of bandwidth. In a very rough upper limit consideration, bird sounds have 100 kHz of bandwidth, and animals of prey do pretty accurately locate them with only two audio receivers, so something's off by a factor of 1000, at least). $\endgroup$ May 29 '18 at 18:09
  • $\begingroup$ I don't want 10 ns precision. Mathematically, the process I'm using only works if you have 10 ns precision. What I want is to have a process (or refine mine) so that I can use a realistic precision such as 10<sup>-5</sup>s. I'm using precision as a word defining how many decimal places are necessary. I want to use the fewest number possible, and still get a correct location. Precision is in reference to the difference in times when 2 or more microphones receive the chirp. $\endgroup$ May 29 '18 at 18:27
  • $\begingroup$ that was a comment on your understanding of the process you're using – I really don't see that your claimed time precision would be actually necessary for any linear algebra-based method I can think of. So, my suspicion is that you already have the right method, but got a kink somewhere in the calculations. (or, you have your microphones space less than a total mm apart, but I don't think that's the case) $\endgroup$ May 29 '18 at 18:33
  • $\begingroup$ Here's how I arrived at that time claim: Taking the general formula for distance between 2 points, and expanding it, you have an equation. Do that for each of the 4 mics, and you get a system of equations represented by matrices in the form of Ax=b, where we're trying to find the values that form the matrix x. Rewrite your equation as x=A<sup>-1</sup>b, then do the multiplication to get x=c, then use that to solve for x. Doing the necessary calculations by hand, with a program, or through Wolfram, I find that the final coordinate triplet is off by ~35m if you use less than 10ns precision $\endgroup$ May 29 '18 at 18:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.