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.

[tex]\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}[/tex]

[tex]A~=~[/tex] relative amplitude
[tex]f_0~=~[/tex] peak frequency
[tex]t_0~=~[/tex] centroid of the signal
[tex]\Delta \tau~=~[/tex] rms duration of the signal
[tex]\theta~=~[/tex] phase shift


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);
    trig_term = sin(2*pi*peak_freq*time(ii) + phase_shift*pi);

  time_diff = (time(ii) - centroid);
  ss(ii) = rel_amp * trig_term ...
    * exp(- (pi^2 * ((time_diff^2)/(rms_dur^2))));

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.

Wesley R. Elsberry

Falconer. Interdisciplinary researcher: biology and computer science. Data scientist in real estate and econometrics. Blogger. Speaker. Photographer. Husband. Christian. Activist.