Guest User

Untitled

a guest
Oct 22nd, 2020
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1. //---------------------------------------------------------------------------
  2. // TDoA Time Difference of Arrival
  3. //---------------------------------------------------------------------------
  4. const int n=3;
  5. double recv[n][3]; // (x,y) [m] receiver position,[s] time of arrival of signal
  6. double pos0[2]; // (x,y) [m] object's real position
  7. double pos [2]; // (x,y) [m] object's estimated position
  8. double v=340.0; // [m/s] speed of signal
  9. double err=0.0; // [m] error between real and estimated position
  10. //---------------------------------------------------------------------------
  11. void compute()
  12. {
  13. int i;
  14. double x,y,a,da,t0;
  15. //---------------------------------------------------------
  16. // init positions
  17. da=2.0*M_PI/(n);
  18. for (a=0.0,i=0;i<n;i++,a+=da)
  19. {
  20. recv[i][0]=256.0+(220.0*cos(a));
  21. recv[i][1]=256.0+(220.0*sin(a));
  22. }
  23. pos0[0]=300.0;
  24. pos0[1]=220.0;
  25. // simulate measurement
  26. t0=123.5; // some start time
  27. for (i=0;i<n;i++)
  28. {
  29. x=recv[i][0]-pos0[0];
  30. y=recv[i][1]-pos0[1];
  31. a=sqrt((x*x)+(y*y)); // distance to receiver
  32. recv[i][2]=t0+(a/v); // start time + time of travel
  33. }
  34. //---------------------------------------------------------
  35. // normalize times into deltas from zero
  36. a=recv[0][2]; for (i=1;i<n;i++) if (a>recv[i][2]) a=recv[i][2];
  37. for (i=0;i<n;i++) recv[i][2]-=a;
  38. // fit position
  39. int N=6;
  40. approx ax,ay;
  41. double e,dt[n];
  42. // min, max,step,recursions,&error
  43. for (ax.init( 0.0,512.0, 32.0 ,N, &e);!ax.done;ax.step())
  44. for (ay.init( 0.0,512.0, 32.0 ,N, &e);!ay.done;ay.step())
  45. {
  46. // simulate measurement -> dt[]
  47. for (i=0;i<n;i++)
  48. {
  49. x=recv[i][0]-ax.a;
  50. y=recv[i][1]-ay.a;
  51. a=sqrt((x*x)+(y*y)); // distance to receiver
  52. dt[i]=a/v; // time of travel
  53. }
  54. // normalize times dt[] into deltas from zero
  55. a=dt[0]; for (i=1;i<n;i++) if (a>dt[i]) a=dt[i];
  56. for (i=0;i<n;i++) dt[i]-=a;
  57. // error
  58. e=0.0; for (i=0;i<n;i++) e+=fabs(recv[i][2]-dt[i]);
  59. }
  60. pos[0]=ax.aa;
  61. pos[1]=ay.aa;
  62. //---------------------------------------------------------
  63. // compute error
  64. x=pos[0]-pos0[0];
  65. y=pos[1]-pos0[1];
  66. err=sqrt((x*x)+(y*y)); // [m]
  67. }
  68. //---------------------------------------------------------------------------
Add Comment
Please, Sign In to add comment