but there is a problem with this function is that distribution of frequency respect to scale is not uniform.
For example if a=1 corresponds to f=4Hz and a=2 corresponds to f=2.5Hz
while a=30 corresponds to f=0.582Hz and a=31 corresponds to f=0.581Hz
So as you see in some frequencies we have too much information (around 0.59) and in some frequency ranges we haven't necessary information (around 4Hz) and information on f=3Hz , f=3.5Hz doesn't exsit.
Is there anyway to have a uniform distibution on frequency rather than scale?
Actually, scal2frq function is just an approximation, as I said this is calculated referred to the central frequency of the mother wavelet which is not always easy to estimate. Moreover, scale to frequency is not a linear process otherwise we wont be talking about time-scale but rather time-frequency using wavelet. you could also try the S transform, equivalent to Wavelet but gives you a time-frequency rather than time-scale. see Assous and Boashash EURASIP 2012.