15 #include "lomb_scargel.h"
16 #include "midiConst.h"
30 int lomb(
double minf ,
double maxf,
int filling, cpl_array * x, cpl_array * y, cpl_array ** lomb_out)
32 cpl_array * filling_factor=NULL;
33 cpl_array * frequency_=NULL;
34 cpl_array * omega_=NULL;
35 cpl_array * significance_ =NULL;
37 cpl_array * tau_ =NULL;
38 cpl_array * power_=NULL;
42 double * pomega_=NULL;
44 double * ppower_=NULL;
71 const double spacing=(double)(maxf-minf)/filling;
73 filling_factor =cpl_array_new(n_, CPL_TYPE_DOUBLE);
75 cpl_array_set_double(filling_factor, i, minf+(spacing*i)+DBL_EPSILON);
79 frequency_ =cpl_array_duplicate(filling_factor);
82 omega_ =cpl_array_duplicate(frequency_);
83 cpl_array_multiply_scalar(omega_, 2.0*MIDI_PI);
85 tau_ =cpl_array_new(n_, CPL_TYPE_DOUBLE);
86 power_ =cpl_array_new(n_, CPL_TYPE_DOUBLE);
87 significance_ =cpl_array_new(n_, CPL_TYPE_DOUBLE);
89 cpl_array_fill_window(tau_, 0, n_, 0.);
90 cpl_array_fill_window(power_, 0, n_, 0.);
91 cpl_array_fill_window(significance_, 0, n_, 0.);
93 px =cpl_array_get_data_double(x);
94 pomega_ =cpl_array_get_data_double(omega_);
95 ptau_ =cpl_array_get_data_double(tau_);
96 ppower_ =cpl_array_get_data_double(power_);
98 dimen_x=cpl_array_get_size(x);
102 for(omega_i=0;omega_i<n_;omega_i++){
103 o2_i = (*pomega_) * 2.0;
105 for(i=0;i<dimen_x;i++){
106 sum_sin+=(sin(o2_i * (*px)));
107 sum_cos+=(cos(o2_i * (*px)));
110 *ptau_ = atan( sum_sin / sum_cos ) / o2_i;
116 ymean_=cpl_array_get_mean(y);
117 yvar_=pow(cpl_array_get_stdev(y),2);
122 pomega_ =cpl_array_get_data_double(omega_);
123 ptau_ =cpl_array_get_data_double(tau_);
124 ppower_ =cpl_array_get_data_double(power_);
126 px =cpl_array_get_data_double(x);
127 py =cpl_array_get_data_double(y);
129 for(omega_i=0;omega_i<n_;omega_i++){
137 px =cpl_array_get_data_double(x);
138 py =cpl_array_get_data_double(y);
140 for(x_i=0;x_i<dimen_x;x_i++){
142 odx = (*px - t_i) * o_i;
156 *ppower_ = ( (s_y_c*s_y_c) / s_c2 +
157 (s_y_s*s_y_s) / s_s2 ) / y2v;
188 lomb_out[0]=frequency_;
191 cpl_array_delete(filling_factor);
192 cpl_array_delete(omega_);
193 cpl_array_delete(tau_);
194 cpl_array_delete(significance_);