# Approximating decay rate of an amplitude and frequency of an oscillating function

I have an InterpolatingFunction constructed from a discrete set of values obtained by numerical methods. Let's denote it $$f(x)$$. The function demonstrates an oscillating behavior, with its amplitude and frequency gradually decaying. Here is an initial fragment of its graph; it continues to the right in the same manner:

I want to obtain two smooth monotone decreasing numerical functions $$A(x),\omega(x)$$ that approximate the decay rate of the amplitude and frequency, so that $$f(x)\approx A(x) \cdot \sin\left(x\cdot\omega\!\left(x\right)\right)$$. How can I approach this problem?

• This is a classic signal processing problem. The standard answer is to use the Hilbert transform. I discussed issues with this approach on signal processing stack exchange. It would help if you gave us an example so that we could show you methods.
– Hugh
Commented Jan 24, 2019 at 19:13
• Can you give us the code used to create the InterpolatingFunction[ ] so we can replicate your problem? Commented Feb 3, 2019 at 14:04

In practical applications, what I suspect you want is a bank of quadrature filters to convolve the function with. I am not well versed enough in Mathematica to show you how to easiest build those in this language.

But mathematically a quadrature filter is identically 0 in one half of the (Fourier) frequency domain. This gives an even real and odd imaginary pair in the spatial (or temporal) domain which capture the cosine and sine parts of the phase, respectively (for the frequency-band the filters have support in).

The frequency support of these should be designed so they complement each other as a set (or a "bank") of band-pass filters. Then interpolating the energy distribution over the frequency-bands will give you an approximation of "instantaneous frequency".

An example of a quadrature-filter pair: