I am trying to do the complex trace analysis of a seismic trace in Matlab where I need to calculate the instantaneous frequency of a discrete signal. I have used the formula according to Barnes. I am running an algorithm where I need to iteratively run complex trace analysis on the residual trace obtained after subtracting a matching wavelet from this trace. Though the formula gives me the results for lower frequencies <50 Hz, it does not give the right results for >60 Hz. I am not able to understand why this is happening. Can someone please tell me the reason behind this and how to do this correctly?
Instantaneous frequency is a poorly defined concept over wide-band (single channel) data, but can be a useful estimation given narrow-band signals of sufficient duration. One trick for using an instantaneous frequency estimation algorithm which is usefully accurate only in one frequency band is to resample your data to move the frequency band of interest into the bandpass of the algorithm. You may need to bandpass filter your data before resampling so that the source band ends up entirely within the algorithm's bandwidth.
In your case, you can try high-quality resampling your data to double the sample rate to extract instantaneous frequency estimates from 50 to 100 Hz. Triple for 75 to 150, etc., assuming the sample rate and anti-aliasing mechanism captured spectrum in those ranges.