35 #define ABS(x) (((x) > 0) ? (x) : (-(x)))
44 #define M_PI 3.14159265358979323846
51 #define SQRT_TWOPI 2.506628274631000
57 #define N_RESOLUTION 1000; // for Rieman sum
93 for(xi = a; xi < b; xi += DELTA_XI)
97 tilde_deltat, xi)*DELTA_XI;
103 return(
M_PI/tilde_deltat);
120 double tilde_deltat,
double xi)
122 double xivdt_2=xi*velocity*tilde_deltat/2;
127 sinc=sin(xivdt_2)/xivdt_2;
131 return(1/(tilde_deltat*sinc*sinc));
172 for(xi = a; xi < b; xi += DELTA_XI)
176 deltat, xi)*DELTA_XI;
201 double velocity,
double deltat,
double xi)
204 double modulus_hat_alpha_of_vxi=
abs_hat_alpha(code, code_length,
206 double l2_norm_code_squared=0;
209 for (
int k=0; k<code_length; k++)
211 l2_norm_code_squared=l2_norm_code_squared+ code[k]*code[k]*deltat;
214 return(l2_norm_code_squared/(modulus_hat_alpha_of_vxi*
215 modulus_hat_alpha_of_vxi));
234 double abs_hat_alpha(
double* code,
int code_length,
double xi,
double deltat)
238 double re_abs_hat_alpha=0;
239 double im_abs_hat_alpha=0;
241 for (
int k=0; k<code_length; k++)
243 im_abs_hat_alpha =im_abs_hat_alpha+code[k]*sin(-xi*deltat*(k+0.5));
244 re_abs_hat_alpha =re_abs_hat_alpha+code[k]*cos(-xi*deltat*(k+0.5));
249 im_abs_hat_alpha =im_abs_hat_alpha*sin(xi*deltat/2)
251 re_abs_hat_alpha =re_abs_hat_alpha*sin(xi*deltat/2)
255 return(deltat*pow(im_abs_hat_alpha*im_abs_hat_alpha+
256 re_abs_hat_alpha*re_abs_hat_alpha,0.5));
285 double tilde_deltat,
double velocity,
double deltat)
311 double motion_model_parameter)
313 if (flag_motion_model==0)
317 *exp(-velocity*velocity/
318 (2*motion_model_parameter*motion_model_parameter))));
323 return(1/(2*motion_model_parameter)) ;
354 double tilde_deltat_star,
355 int flag_motion_model,
356 double motion_model_parameter,
double deltat,
359 double *average_gain_mu)
364 double velocity_max=motion_model_parameter;
365 if (flag_motion_model==0) velocity_max=4*motion_model_parameter;
367 average_gain_mu[0]=0;
369 double sum_probabilities=0;
370 double probability_of_v=0;
374 if (flag_motion_model==1)
377 motion_model_parameter);
378 for (
double velocity=-velocity_max; velocity<velocity_max;
379 velocity=velocity+2*velocity_max/num_plot_points)
382 code_length, tilde_deltat_star, velocity,
385 sum_probabilities=sum_probabilities+probability_of_v;
387 average_gain_mu[0]=average_gain_mu[0]
395 for (
double velocity=-velocity_max; velocity<velocity_max;
396 velocity=velocity+2*velocity_max/num_plot_points)
399 motion_model_parameter);
401 code_length, tilde_deltat_star, velocity,
404 sum_probabilities=sum_probabilities+probability_of_v;
406 average_gain_mu[0]=average_gain_mu[0]
413 average_gain_mu[0]=average_gain_mu[0]/sum_probabilities;
447 double motion_model_parameter,
450 double *average_gain_mu,
451 double *std_dev_gain_sigma)
457 double velocity_max=motion_model_parameter;
458 if (flag_motion_model==0) velocity_max=4*motion_model_parameter;
460 std_dev_gain_sigma[0]=0;
462 double sum_probabilities=0;
463 double probability_of_v=0;
467 if (flag_motion_model==1)
469 probability_of_v=1/(2*velocity_max) ;
470 for (
double velocity=-velocity_max; velocity<velocity_max;
471 velocity=velocity+2*velocity_max/num_plot_points)
474 sum_probabilities=sum_probabilities+probability_of_v;
476 std_dev_gain_sigma[0]=std_dev_gain_sigma[0]+
487 for (
double velocity=-velocity_max; velocity<velocity_max;
488 velocity=velocity+2*velocity_max/num_plot_points)
491 motion_model_parameter);
493 sum_probabilities=sum_probabilities+probability_of_v;
495 std_dev_gain_sigma[0]=std_dev_gain_sigma[0]+
504 std_dev_gain_sigma[0]=pow(std_dev_gain_sigma[0]/
505 sum_probabilities,.5);
void average_gain_in_terms_of_RMSE(double *code, int code_length, double tilde_deltat_star, int flag_motion_model, double motion_model_parameter, double deltat, int num_plot_points, double *G_of_v, double *average_gain_mu)
This function implements equation (24): := G(v) (v) dv.
double MSE_snapshot_of_velocity_integrand(double velocity, double tilde_deltat, double xi)
This function computes the integrand of equation (21): {1}{T {sinc}^2( { v T}{2 })}.
double probability_density(double velocity, int flag_motion_model, double motion_model_parameter)
Given a velocity velocity, the motion model and its parameters the function computes the probability...
double gain_in_terms_of_RMSE_at_velocity_v(double *code, int code_length, double tilde_deltat, double velocity, double deltat)
This function implements equation (23): G(v)&={ {{0}^{} {1} {T^* {sinc}^2( { v T^*}{2 })}d} { {0}^{} ...
double MSE_flutter_of_velocity(double *code, int code_length, double velocity, double deltat)
This function computes the MSE of flutter shutter for a given velocity. This is equation (22) up to a...
double abs_hat_alpha(double *code, int code_length, double xi, double deltat)
Given a code compute the modulus of the Fourier transform of the Flutter-Shutter function, see equation (2): ()= t {sinc}({ t}{2}) e^{-{i t}{2}} {k=0}^{L-1} e^{-ik t}.
double MSE_flutter_of_velocity_integrand(double *code, int code_length, double velocity, double deltat, double xi)
This function computes the integrand of equation (21): {| |^2_{L^2()} |u|_{L^1()}}{| ( v)|^2}d...
void std_dev_gain_in_terms_of_RMSE(int flag_motion_model, double motion_model_parameter, int num_plot_points, double *G_of_v, double *average_gain_mu, double *std_dev_gain_sigma)
This function implements equation (25): :={ |G(v)- G(u) (u) du|^2 (v) dv}.
double MSE_snapshot_of_velocity(double velocity, double tilde_deltat)
This function computes the MSE of a snapshot for a given velocity. This is equation (21) up to a 1 ...