How to avoid negative frequencies that can be obtained from instantaneous frequency estimation using Hilbert transform?
Here is what I am doing:
1. compute analytic signal, X = hilbert(x);
2. from analytic signal, unwrap the instantaneous phase
3. calculate instantaneous frequency from derivation (np.diff) of instantaneous phase
The problem I have is that the instantaneous frequency can contains negative frequencies (e.g. chirp signal).
The best solution seems to be descriped here:
(Overcoming the negative frequencies - Instantaneous frequency and amplitude estimation using Osculating Circle method, by Ming-Kuang Hsu)
(Instantaneous frequency estimation using Osculating Circle Method)
An other matlab code snipped is posted here, but it has no results:
The question is, how to calculate the velocity vector of the particle and the Osculating Circle method (in matlab or python)?
Measure instantaneous frequency from the complex signal obtained from output of hilbert transform filter... don't use x_hat=hilbert(x). form filter hilbert then pass signal through filter and append real part to imaginary part. then compute atan of angle using
(x y_dot-y_xdot)/(x^2+y^2) this way you never compute angles as atan and then unwrap angle
the derivative of atan is wonderful for this
look at the two matlab files below.... also look at hilbert filters in multirate signal processing book....
- FIR kernel calculated with Kaiser Window
- FIR kernel calculated with Remez
- FIR kernel based on Sinc kernel
- IIR with Hanh's method
What are the coefficients based on in your examples (brent_frq_est_x)?
Isn't the "Osculating Circle Method" so interesting? Because then the easy-to-use Hilbert transform can be used.