43 self->clock_period = clock_period;
44 self->feedback2_factor = feedback2_factor;
45 self->feedback3_factor = feedback3_factor;
64 self->cycle_time = system_time;
67 self->cycle_time +=
self->clock_period * period;
69 loop_error = system_time -
self->cycle_time;
72 self->cycle_time +=
FFMAX(self->feedback2_factor, 1.0 / self->count) * loop_error;
73 self->clock_period +=
self->feedback3_factor * loop_error / period;
75 return self->cycle_time;
80 #define LFG_MAX ((1LL << 32) - 1)
89 double ideal[SAMPLES];
92 for(n0= 0; n0<40; n0=2*n0+1){
93 for(n1= 0; n1<10; n1=2*n1+1){
99 double best_error= 1000000000;
101 double bestpar1=0.001;
105 for(i=0; i<SAMPLES; i++){
106 ideal[i] = 10 + i + n1*i/(1000);
107 samples[i] = ideal[i] + n0 * (
av_lfg_get(&prng) - LFG_MAX / 2)
114 for(par0= bestpar0*0.8; par0<=bestpar0*1.21; par0+=bestpar0*0.05){
115 for(par1= bestpar1*0.8; par1<=bestpar1*1.21; par1+=bestpar1*0.05){
118 for(i=0; i<SAMPLES; i++){
121 error += (filtered - ideal[i]) * (filtered - ideal[i]);
124 if(error < best_error){
136 for(i=0; i<SAMPLES; i++){
139 printf(
"%f %f %f %f\n", i - samples[i] + 10, filtered - samples[i], samples[
FFMAX(i, 1)] - samples[
FFMAX(i-1, 0)], filtered - lastfil);
144 printf(
" [%f %f %9f]", bestpar0, bestpar1, best_error);