function y=ziegelwanger2014onaxis(p,x)
%ZIEGELWANGER2014ONAXIS On-axis time-of-arrival model
% Usage: y=ziegelwanger2014onaxis(p,x)
%
% Input parameters:
% p : on-axis model parameters [SI-units]
% x : HRTF direction (azimuth,elevation) [rad]
% Output parameters:
% y : time-of-arrival [s]
%
% toa=ZIEGELWANGER2014ONAXIS(p,x) calculates time-of-arrivals (TOAs) for
% given model parameters (p) and directions (x) with an on-axis
% time-of-arrival model.
%
% See also: ziegelwanger2014, ziegelwanger2014offaxis,
% data_ziegelwanger2014, exp_ziegelwanger2014
%
% References:
% H. Ziegelwanger and P. Majdak. Modeling the direction-continuous
% time-of-arrival in head-related transfer functions. J. Acoust. Soc.
% Am., 135:1278-1293, 2014.
%
%
% Url: http://amtoolbox.sourceforge.net/amt-0.9.6/doc/binaural/ziegelwanger2014onaxis.php
% Copyright (C) 2009-2014 Peter L. Søndergaard.
% This file is part of AMToolbox version 1.0.0
%
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program. If not, see <http://www.gnu.org/licenses/>.
% AUTHOR: Harald Ziegelwanger, Acoustics Research Institute, Vienna,
% Austria
if isoctave
tmp=p;
p=x;
x=tmp;
clear tmp
end
r=p(1); %............. sphere radius [m]
phi_ear=p(2); %....... position of the ear (azimuth angle) [rad]
theta_ear=p(3); %..... position of the ear (elevation angle) [rad]
delay=p(4); %......... constant delay [s]
y=r/340.*( ...
(sign(sin(theta_ear).*sin(x(:,2))+cos(theta_ear).*cos(x(:,2)).*cos(phi_ear-x(:,1)))/2+0.5).* ...
(1-sin(theta_ear).*sin(x(:,2))-cos(theta_ear).*cos(x(:,2)).*cos(phi_ear-x(:,1)))+ ...
(-sign(sin(theta_ear).*sin(x(:,2))+cos(theta_ear).*cos(x(:,2)).*cos(phi_ear-x(:,1)))/2+0.5).* ...
(1+acos(sin(theta_ear).*sin(x(:,2))+cos(theta_ear)*cos(x(:,2)).*cos(phi_ear-x(:,1)))-pi/2))+ ...
delay-r/340;
end