FNFT
Loading...
Searching...
No Matches
fnft__manakov_discretization.h
Go to the documentation of this file.
1/*
2* This file is part of FNFT.
3*
4* FNFT is free software; you can redistribute it and/or
5* modify it under the terms of the version 2 of the GNU General
6* Public License as published by the Free Software Foundation.
7*
8* FNFT is distributed in the hope that it will be useful,
9* but WITHOUT ANY WARRANTY; without even the implied warranty of
10* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11* GNU General Public License for more details.
12*
13* You should have received a copy of the GNU General Public License
14* along with this program. If not, see <http://www.gnu.org/licenses/>.
15*
16* Contributors:
17* Lianne de Vries (TU Delft student) 2021.
18* Sander Wahls (TU Delft) 2021.
19*/
20
27#ifndef FNFT__MANAKOV_DISCRETIZATION_H
28#define FNFT__MANAKOV_DISCRETIZATION_H
29
31#include "fnft__errwarn.h"
32#include "fnft__misc.h"
33
34
45 discretization);
46
57
67
83 FNFT_COMPLEX* const vals, fnft_manakov_discretization_t discretization);
84
100 FNFT_COMPLEX* const vals, fnft_manakov_discretization_t discretization);
101
116 FNFT_REAL* const phase_factor_rho, fnft_manakov_discretization_t discretization);
117
133 FNFT_REAL* const phase_factor_a, fnft_manakov_discretization_t discretization);
134
150 FNFT_REAL* const phase_factor_b, fnft_manakov_discretization_t discretization);
151
182 FNFT_COMPLEX const* const q2, FNFT_REAL const eps_t,
183 FNFT_UINT* const Dsub_ptr, FNFT_COMPLEX** q1_preprocessed_ptr, FNFT_COMPLEX** q2_preprocessed_ptr,
184 FNFT_UINT* const first_last_index, manakov_discretization_t discretization);
185
195
196
197#ifdef FNFT_ENABLE_SHORT_NAMES
198#define manakov_discretization_degree(...) fnft__manakov_discretization_degree(__VA_ARGS__)
199#define manakov_discretization_upsampling_factor(...) fnft__manakov_discretization_upsampling_factor(__VA_ARGS__)
200#define manakov_discretization_method_order(...) fnft__manakov_discretization_method_order(__VA_ARGS__)
201#define manakov_discretization_lambda_to_z(...) fnft__manakov_discretization_lambda_to_z(__VA_ARGS__)
202#define manakov_discretization_z_to_lambda(...) fnft__manakov_discretization_z_to_lambda(__VA_ARGS__)
203#define manakov_discretization_phase_factor_rho(...) fnft__manakov_discretization_phase_factor_rho(__VA_ARGS__)
204#define manakov_discretization_phase_factor_a(...) fnft__manakov_discretization_phase_factor_a(__VA_ARGS__)
205#define manakov_discretization_phase_factor_b(...) fnft__manakov_discretization_phase_factor_b(__VA_ARGS__)
206#define manakov_discretization_boundary_coeff(...) fnft__manakov_discretization_boundary_coeff(__VA_ARGS__)
207#define manakov_discretization_preprocess_signal(...) fnft__manakov_discretization_preprocess_signal(__VA_ARGS__)
208#endif
209
210#endif
FNFT_UINT fnft__manakov_discretization_upsampling_factor(fnft_manakov_discretization_t discretization)
This routine returns the scaling for effective number of samples based on the discretization....
FNFT_INT fnft__manakov_discretization_phase_factor_b(const FNFT_REAL eps_t, const FNFT_UINT D, FNFT_REAL const *const T, FNFT_REAL *const phase_factor_b, fnft_manakov_discretization_t discretization)
This routine returns the phase factor for the NFT coefficient b1, b2. It is required for applying bou...
FNFT_UINT fnft__manakov_discretization_degree(fnft_manakov_discretization_t discretization)
This routine returns the max degree d of the polynomials in a single scattering matrix or zero if the...
FNFT_INT fnft__manakov_discretization_lambda_to_z(const FNFT_UINT n, const FNFT_REAL eps_t, FNFT_COMPLEX *const vals, fnft_manakov_discretization_t discretization)
This routine maps lambda from continuous-time domain to z in the discrete-time domain based on the di...
FNFT_INT fnft__manakov_discretization_preprocess_signal(const FNFT_UINT D, FNFT_COMPLEX const *const q1, FNFT_COMPLEX const *const q2, FNFT_REAL const eps_t, FNFT_UINT *const Dsub_ptr, FNFT_COMPLEX **q1_preprocessed_ptr, FNFT_COMPLEX **q2_preprocessed_ptr, FNFT_UINT *const first_last_index, manakov_discretization_t discretization)
This routine computes the downsampled and interpolated version of the samples if required.
FNFT_INT fnft__manakov_discretization_phase_factor_rho(const FNFT_REAL eps_t, const FNFT_REAL T1, FNFT_REAL *const phase_factor_rho, fnft_manakov_discretization_t discretization)
This routine returns the phase factor for reflection coefficient (rho). It is required for applying b...
FNFT_REAL fnft__manakov_discretization_boundary_coeff(fnft_manakov_discretization_t discretization)
This routine returns the boundary coefficient based on the discretization.
FNFT_INT fnft__manakov_discretization_phase_factor_a(const FNFT_REAL eps_t, const FNFT_UINT D, FNFT_REAL const *const T, FNFT_REAL *const phase_factor_a, fnft_manakov_discretization_t discretization)
This routine returns the phase factor for the NFT coefficient a. It is required for applying boundary...
FNFT_INT fnft__manakov_discretization_z_to_lambda(const FNFT_UINT n, const FNFT_REAL eps_t, FNFT_COMPLEX *const vals, fnft_manakov_discretization_t discretization)
This routine maps z in the discrete-time domain to lambda in continuous-time domain based on the disc...
FNFT_UINT fnft__manakov_discretization_method_order(fnft_manakov_discretization_t discretization)
Returns the order of the chosen discretization method. 0 for unknown discretizations.
Miscellaneous functions used in the FNFT library.
Lists discretizations for the Manakov Equation.
fnft_manakov_discretization_t
Enum that specifies discretizations and methods used to compute nonlinear Fourier transforms for the ...
Definition fnft_manakov_discretization_t.h:88
size_t FNFT_UINT
Definition fnft_numtypes.h:62
double complex FNFT_COMPLEX
Definition fnft_numtypes.h:47
int32_t FNFT_INT
Definition fnft_numtypes.h:56
double FNFT_REAL
Definition fnft_numtypes.h:40