itpp_sci  1.0.0
it++ based simulation framework for scicoslab, scilab and scipy
itpp_sci

itpp_sci is a simulation framework made of C++ libraries. It is designed for system analysis in DSP and SDR research.
The project is developed using IT++ as a base library (with add-ons from SPUC library) with the aim of making a light simulation framework targeting multiple open-source environments.
The first term in the itpp_sci stands for itpp - the base library.
The second term sci is a short-cut for target simulation environments: scicoslab, scilab, scipy.
The twin project, sci_itpp is a collection of scicoslab, scilab and scipy example simulations using itpp_sci libraries.

Simulation blocks defined in itpp_sci library are exposed in target environment via SCI_API, which is demonstrated below in tiny examples calculating FIR filter impulse response.
In scilab/scicoslab example code looks like this:

NCLK = 20;
TAPS = 10;
i = 1:NCLK;
c0 = ones(TAPS,1)*0.1;
x = zeros(NCLK,1);
x(1,1) = 1.0;
ce(1:NCLK,1) = %T;
p_fir1 = SCI_CREATE(SCI_FIR);
SCI_SET(p_fir1, SCI_TAPS, c0);
SCI_EXEC(p_fir1, SCI_RESET);
y = SCI_PROC(p_fir1, ce, x);

In scipy, like this:

NCLK = 20
TAPS = 10
c0 = np.ones(shape=(TAPS))*0.1
ce = np.ndarray(shape=(NCLK), dtype=bool)
x = np.zeros(shape=(NCLK))
x[0] = 1.0
ce[0:NCLK] = True
p_fir1 = SCI_CREATE(SCI_FIR)
SCI_SET(p_fir1, SCI_TAPS, c0)
SCI_EXEC(p_fir1, SCI_RESET)
y = SCI_PROC(p_fir1, ce, x)

and in C++ like this:

const int TAPS = 10;
const int NCLK = 20;
vec c0, x, y;
bvec ce;
sci_base *p_sci1;
c0 = ones(TAPS)*0.1;
x = zeros(NCLK);
x[0] = 1.0;
ce.set_length(NCLK);
ce.ones();
p_sci1 = SCI_CREATE(SCI_FIR);
SCI_SET(p_sci1, SCI_TAPS, c0);
SCI_EXEC(p_sci1, SCI_RESET);
y = SCI_PROC<vec>(p_sci1, ce, x);


The primary design goal is to keep the simulation API (SCI_API) simple and virtually identical across different target environments.
For more details - see framework overview.