26 lines
909 B
Matlab
26 lines
909 B
Matlab
function value = transmitterGain(obj, t, a)
|
|
arguments (Input)
|
|
obj (1, 1) {mustBeA(obj, "rfSensor")};
|
|
t (:, 1) double; % LOS tilt angle
|
|
a (:, 1) double; % LOS azimuth angle
|
|
end
|
|
arguments (Output)
|
|
value (:, 1) double
|
|
end
|
|
if ~isequal(size(t), size(a))
|
|
error("t and a must be the same size");
|
|
end
|
|
|
|
n = 6; % beamwidth exponent (higher = narrower beam)
|
|
|
|
% Angular offset from boresight via spherical law of cosines
|
|
% Convention: t=0° nadir, t=90° horizon; a=0° +y, a=90° +x
|
|
cos_theta = sind(obj.tilt) .* sind(t) .* cosd(a - obj.azimuth) + ...
|
|
cosd(obj.tilt) .* cosd(t);
|
|
cos_theta = max(-1, min(1, cos_theta)); % clamp for numerical safety
|
|
theta = acosd(cos_theta);
|
|
|
|
% Cardioid family: peak at boresight (theta=0), null opposite (theta=180°)
|
|
value = 10 .* n .* log10((1 + cosd(theta)) ./ 2);
|
|
end
|