38 lines
1.1 KiB
Mathematica
38 lines
1.1 KiB
Mathematica
|
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
|