|static double||qexpneg (double x)|
|TimeFilter *||ff_timefilter_new (double time_base, double period, double bandwidth)|
|Create a new Delay Locked Loop time filter. |
|void||ff_timefilter_destroy (TimeFilter *self)|
|Free all resources associated with the filter. |
|void||ff_timefilter_reset (TimeFilter *self)|
|Reset the filter. |
|double||ff_timefilter_update (TimeFilter *self, double system_time, double period)|
|Update the filter. |
|double||ff_timefilter_eval (TimeFilter *self, double delta)|
|Evaluate the filter at a specified time. |
|void ff_timefilter_destroy||(||TimeFilter *||self||)|
|double ff_timefilter_eval||(||TimeFilter *||self,|
Create a new Delay Locked Loop time filter.
feedback2_factor and feedback3_factor are the factors used for the multiplications that are respectively performed in the second and third feedback paths of the loop.
Unless you know what you are doing, you should set these as follow:
o = 2 * M_PI * bandwidth * period_in_seconds feedback2_factor = sqrt(2) * o feedback3_factor = o * o
Where bandwidth is up to you to choose. Smaller values will filter out more of the jitter, but also take a longer time for the loop to settle. A good starting point is something between 0.3 and 3 Hz.
|time_base||period of the hardware clock in seconds (for example 1.0/44100)|
|period||expected update interval, in input units|
|brandwidth||filtering bandwidth, in Hz|
|void ff_timefilter_reset||(||TimeFilter *||)|
|double ff_timefilter_update||(||TimeFilter *||self,|
Update the filter.
This function must be called in real time, at each process cycle.
|period||the device cycle duration in clock_periods. For example, at 44.1kHz and a buffer size of 512 frames, period = 512 when clock_period was 1.0/44100, or 512/44100 if clock_period was 1.|
calculate loop error
|static double qexpneg||(||double||x||)||