Calculations/ODT-Calculator/+Helpers/calculateModulationFunction.m

38 lines
1.1 KiB
Mathematica
Raw Normal View History

function [dx, mod_func] = calculateModulationFunction(mod_amp, n_points, func)
% Default value for func if not provided
if nargin < 3
func = 'arccos';
end
% Generate modulation function based on func type
switch func
case 'sin'
phi = linspace(0, 2*pi, n_points);
mod_func = mod_amp * sin(phi);
case 'arccos'
phi = linspace(0, 2*pi, floor(n_points/2));
tmp_1 = 2/pi * acos(phi/pi - 1) - 1;
tmp_2 = flip(tmp_1);
mod_func = mod_amp * [tmp_1, tmp_2];
case 'triangle'
phi = linspace(0, 2*pi, n_points);
mod_func = mod_amp * sawtooth(phi, 0.5); % Symmetric rising triangle
case 'square'
phi = linspace(0, 1.99*pi, n_points);
mod_func = mod_amp * square(phi, 0.5);
otherwise
mod_func = [];
end
% Calculate dx if mod_func exists
if ~isempty(mod_func)
dx = (max(mod_func) - min(mod_func)) / (2 * n_points);
else
dx = [];
end
end