Skip to content
Snippets Groups Projects
Commit 7c7e4964 authored by Achilles Kappis's avatar Achilles Kappis
Browse files

Merge branch 'UpdateGeo' into 'main'

Update geometry generation functions

See merge request in-nova/in-nova!5
parents 36dcc779 261115a3
No related branches found
No related tags found
1 merge request!5Update geometry generation functions
### v0.2.5 ###
**Utilities - Geometries**\
\* Combine translation offsets to a single vector input argument for the `rcvGeo()` MATLAB function.\
\* Combine translation offsets to a single vector input argument for th `virtMicGeo()` MATLAB function.\
### v0.2.4 ###
**Virtual Sensing**\
\* Corrected time-domain observation filter calculations.\
......
......@@ -86,7 +86,7 @@ The project is licensed under the ***MIT License***, which is a rather unrestric
## Versioning ##
The project uses [semantic versioning](https://semver.org/) and the current version is **v0.2.4**.
The project uses [semantic versioning](https://semver.org/) and the current version is **v0.2.5**.
#### **Important**
......
......@@ -3,7 +3,7 @@
% Author: Achilles Kappis
% e-mail: axilleaz@protonmail.com
%
% Date: 30/07/2024 (DD/MM/YYYY)
% Date: 20/09/2024 (DD/MM/YYYY)
%
% Copyright: MIT
% --------------------------------------------------
......@@ -45,14 +45,10 @@
% respective output variables are
% empty. [Default: 0.05].
%
% xOff [numeric] (Optional): An offset along the x-axis of the microphone
% configuration. [Default: 0].
%
% yOff [numeric] (Optional): An offset along the y-axis of the microphone
% configuration. [Default: 0].
%
% zOff [numeric] (Optional): An offset along the z-axis of the microphone
% configuration. [Default: 0].
% trans [numeric] (Optional): This is a real vector with three elements,
% representing the translation of the geometry
% along the Cartesian axes.
% [Default: zeros(3, 1)].
%
% --------------------------------------------------
% Output
......@@ -222,11 +218,11 @@
% - Dependencies: rotMat3d() to rotate the configurations
%
% --------------------------------------------------
function [omniPos, fig8Pos, triPos, boxPos, box2DPos, tetPos, fig8Vec, triangleVec, boxVec, box2DVec, tetVec] = rcvGeo(gType, nSens, elemDist, dmaElemDist, xOff, yOff, zOff)
function [omniPos, fig8Pos, triPos, boxPos, box2DPos, tetPos, fig8Vec, triangleVec, boxVec, box2DVec, tetVec] = rcvGeo(gType, nSens, elemDist, dmaElemDist, trans)
% ====================================================
% Check for number of arguments
% ====================================================
narginchk(1, 7);
narginchk(1, 5);
nargoutchk(0, 11);
% ====================================================
......@@ -237,22 +233,10 @@ function [omniPos, fig8Pos, triPos, boxPos, box2DPos, tetPos, fig8Vec, triangleV
validatestring(gType, ["Single", "ULA", "UCA", "Log"], mfilename, "Geometry type", 1);
% Validate optional arguments
if nargin > 6 && ~isempty(zOff)
validateattributes(zOff, "numeric", {'scalar', 'real', 'nonnan', 'finite'}, mfilename, "Z offset of the microphone setup", 7);
else
zOff = 0;
end
if nargin > 5 && ~isempty(yOff)
validateattributes(yOff, "numeric", {'scalar', 'real', 'nonnan', 'finite'}, mfilename, "Y offset of the microphone setup", 6);
else
yOff = 0;
end
if nargin > 4 && ~isempty(xOff)
validateattributes(xOff, "numeric", {'scalar', 'real', 'nonnan', 'finite'}, mfilename, "X offset of the microphone setup", 5);
if nargin > 4 && ~isempty(trans)
validateattributes(trans, "numeric", {'vector', 'real', 'nonnan', 'finite', 'nonempty', 'numel', 3}, mfilename, "The translation of the the geometry", 7);
else
xOff = 0;
trans = zeros(3, 1);
end
if nargin > 3 && ~isempty(dmaElemDist)
......@@ -303,7 +287,7 @@ function [omniPos, fig8Pos, triPos, boxPos, box2DPos, tetPos, fig8Vec, triangleV
% Translate
if nargout > 0
omniPos = omniPos + [xOff, yOff, zOff];
omniPos = omniPos + trans(:).';
end
return;
end
......@@ -408,29 +392,12 @@ function [omniPos, fig8Pos, triPos, boxPos, box2DPos, tetPos, fig8Vec, triangleV
% ====================================================
% Translate geometries
% ====================================================
if nargout > 0
omniPos = omniPos + [xOff, yOff, zOff];
end
if nargout > 1
fig8Pos = fig8Pos + [xOff, yOff, zOff];
end
if nargout > 2
triPos = triPos + [xOff, yOff, zOff];
end
if nargout > 3
boxPos = boxPos + [xOff, yOff, zOff];
end
if nargout > 4
box2DPos = box2DPos + [xOff, yOff, zOff];
end
if nargout > 5
tetPos = tetPos + [xOff, yOff, zOff];
end
omniPos = omniPos + trans(:).';
fig8Pos = fig8Pos + trans(:).';
triPos = triPos + trans(:).';
boxPos = boxPos + trans(:).';
box2DPos = box2DPos + trans(:).';
tetPos = tetPos + trans(:).';
% Provide a Nx3 "Figure-of-Eight" matrix
if nargout > 6
......
......@@ -3,7 +3,7 @@
% Author: Achilles Kappis
% e-mail: axilleaz@protonmail.com
%
% Date: 18/09/2024 (DD/MM/YYYY)
% Date: 20/09/2024 (DD/MM/YYYY)
%
% Copyright: MIT
% --------------------------------------------------
......@@ -43,16 +43,15 @@
% geometry the argument is ignored.
% [Default: 10 * ones(3, 1)].
%
% xOff [numeric] (Optional): X-axis offset. [Default: 0].
% trans [numeric] (Optional): This is a real vector with three elements,
% representing the translation of the geometry
% along the Cartesian axes.
% [Default: zeros(3, 1)].
%
% yOff [numeric] (Optional): Y-axis offset. [Default: 0].
%
% zOff [numeric] (Optional): Z-axis offset. [Default: 0].
%
% orient [numeric] (Optional): This is a real vector holding the rotation
% for the geometry in degrees, along each
% Cartesian axis. The rotations are performed
% clockwise. [Default: zeros(3, 1)].
% rot [numeric] (Optional): This is a real vector holding the rotation for
% the geometry in degrees, along each Cartesian
% axis. The rotations are performed clockwise.
% [Default: zeros(3, 1)].
%
% --------------------------------------------------
% Output
......@@ -81,11 +80,11 @@
% setup is one dimensional.
%
% --------------------------------------------------
function [vPos, vPosMesh] = virtMicGeo(gType, geoDim, nSens, xOff, yOff, zOff, orient)
function [vPos, vPosMesh] = virtMicGeo(gType, geoDim, nSens, trans, rot)
% ====================================================
% Check for number of arguments
% ====================================================
narginchk(1, 7);
narginchk(1, 5);
nargoutchk(0, 2);
% ====================================================
......@@ -97,7 +96,7 @@ function [vPos, vPosMesh] = virtMicGeo(gType, geoDim, nSens, xOff, yOff, zOff, o
% Validate optional arguments
if nargin > 1 && ~isempty(geoDim) && ~strcmpi(gType, "Single")
validateattributes(geoDim, "numeric", {'vector', 'real', 'nonnan', 'finite', 'nonempty', 'positive'}, mfilename, "Geometry dimensions", 2);
validateattributes(geoDim, "numeric", {'vector', 'real', 'nonnan', 'finite', 'nonempty', 'nonnegative'}, mfilename, "Geometry dimensions", 2);
if numel(geoDim) > 3 || numel(geoDim) == 2
error("The dimensions argument must be either a scalar or a vector with three elements");
......@@ -130,28 +129,16 @@ function [vPos, vPosMesh] = virtMicGeo(gType, geoDim, nSens, xOff, yOff, zOff, o
nSens = 10 * ones(3, 1);
end
if nargin > 3 && ~isempty(xOff)
validateattributes(xOff, "numeric", {'scalar', 'real', 'nonnan', 'finite'}, mfilename, "X-offset", 4);
else
xOff = 0;
end
if nargin > 4 && ~isempty(yOff)
validateattributes(yOff, "numeric", {'scalar', 'real', 'nonnan', 'finite'}, mfilename, "Y-offset", 5);
else
yOff = 0;
end
if nargin > 5 && ~isempty(zOff)
validateattributes(zOff, "numeric", {'scalar', 'real', 'nonnan', 'finite'}, mfilename, "Z-offset", 6);
if nargin > 3 && ~isempty(trans)
validateattributes(trans, "numeric", {'vector', 'real', 'nonnan', 'finite', 'nonempty', 'numel', 3}, mfilename, "Translation of the geometry", 4);
else
zOff = 0;
trans = zeros(3, 1);
end
if nargin > 6 && ~isempty(orient) && ~strcmpi(gType, "Single")
validateattributes(orient, {'numeric'}, {'vector', 'nonempty', 'nonnan', 'finite', 'real', 'numel', 3}, mfilename, "Geometry rotation around the Cartesian axes", 7);
if nargin > 4 && ~isempty(rot) && ~strcmpi(gType, "Single")
validateattributes(rot, {'numeric'}, {'vector', 'nonempty', 'nonnan', 'finite', 'real', 'numel', 3}, mfilename, "Geometry rotation around the Cartesian axes", 5);
else
orient = zeros(3, 1);
rot = zeros(3, 1);
end
......@@ -195,10 +182,10 @@ function [vPos, vPosMesh] = virtMicGeo(gType, geoDim, nSens, xOff, yOff, zOff, o
end
% Rotate
vPos = vPos * rotMat3d(-orient(1), -orient(2), -orient(3), "Degs");
vPos = vPos * rotMat3d(-rot(1), -rot(2), -rot(3), "Degs");
% Translate
vPos = vPos + [xOff, yOff, zOff];
vPos = vPos + trans(:).';
% For "Cube" geometry provide the coordinates in a "mesh format"
if nargout > 1 && strcmpi(gType, "Cube")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment