Pseudo-Dolphin Click
Whitlow Au’s The Sonar of Dolphins is a treasure-trove of information concerning odontocete biosonar. It does, therefore, cost a fortune. I bought my copy back in 1993, when it was going for $86. To get in on this now, it looks like it will cost you $126.
On page 79, Au gives a mathematical equation from Kamminga and Beitsma (1990) that yields an output with many of the same properties as a dolphin click. The expression is the product of a Gabor function and a gaussian curve.
\begin{Large}x(t)~=~A~( cos(2\pi f_0 t~+~\theta)) e^{-\pi^{2 \frac{(t – t_o)^2}{\Delta \tau^2}}} \end{Large}
where
relative amplitudeA~=~
peak frequencyf_0~=~
centroid of the signalt_0~=~
rms duration of the signal\Delta \tau~=~
phase shift\theta~=~(p.79)
You can substitute the sin() function for cos() in the above equation as well.
I’ve written a Matlab function to encapsulate this:
% click Returns a vector from a Gabor function and gaussian curve
% based on input parameters
% click(time, rel_amp, peak_freq, centroid, rms_dur, phase_shift, sine)
% where time is a vector of time steps
% rel_amp is the relative amplitude of the overall waveform
% peak_freq is the peak frequency
% centroid is the position of equal energy
% rms_dur is the length of the signal via an RMS measure
% phase_shift is the shift, this is multiplied by pi in the function
% sine is 1 to use a sine function, else cosine is used
%
% Follows Eq. 5-1 of Whitlow Au's "The Sonar of Dolphins", p.79
% Coded by Wesley R. Elsberry
%
% Example:
% t = ones(1,100);
% for ii = 1:length(t)
% t(ii) = -4e-5 + ii*1e-6;
% end
% w = click(t,1,1e5,9.9e-6,29.9e-6,0.75,0); % Parameters from Au's example
% plot(w);
function ss = click(time, rel_amp, peak_freq, centroid, rms_dur, ...
phase_shift, sine);
for ii = 1:length(time)
if 1 == sine
trig_term = cos(2*pi*peak_freq*time(ii) + phase_shift*pi);
else
trig_term = sin(2*pi*peak_freq*time(ii) + phase_shift*pi);
end
time_diff = (time(ii) - centroid);
ss(ii) = rel_amp * trig_term ...
* exp(- (pi^2 * ((time_diff^2)/(rms_dur^2))));
end
So why bother with pseudo-clicks? I am working on some analyses of approaches to calculate click duration in real signals. But there are multiple approaches in the literature, so which one is best for general use? By using the pseudo-clicks, I can produce waveforms of known characteristics, and add known amounts of noise. Then I can compare the various techniques where everything about the original signal is well-known.