NEO/NST Features

One strength of NEO/NST is its extensibility. Therefore, there exist a mechanism to "load" new modules into the system. You can construct new modules in the form of graphically built NST circuits, or you can make existing or your own algorithms (implemented in C or C++) available as NST-objects by writing a simple wrapper. Collections of such units can be organized into libraries that can be loaded at run-time. For details on how to add new modules, have a look at the documentation.

Currently, the modules include:

Program flow These units allow the manipulation of the program flow under NEO. Available units such as the for_op, if_op, switch_op, ctrl_op etc. realize similar concepts as known from other textutal programming languages. So called container units correspond to subroutines and allow a hierachical organization of programs.
A condition inside of a for loop
Data Input / Output Contains units which are able to read and write arbitrary data from and to files. The data is usually written as a flat ASCII file and the data format can be specified in a similar way as familiar from the printf-function in C. Additionally, there exist units to read from PGM or PPM image data files and to connect to ODBC capable database servers. Data can then be stored and retrieved using SQL statements.
Parameter interface of ODBC_2ds unit
Data Processing/
Generation
Allow a broad range of data transformation, i.e. vector scaling, componentwise access to vector elements, "multiplexing" vector data, generation of random data and other function generators (linear, waves, bilinear, spline, exponential decay), delay units for time series processing etc.
Output of three wave generators
Visualization There exist several methods to visualize data. The plot_xy and plot_3d units provide the basis for various 2D and 3D data plots. Furthermore, units like draw_sym, draw_mesh, draw_str, draw_ellipse, write_pix, etc allow to draw arbitrary objects and images on the screen. The mouse_xy unit allows to add interactivity to all visualization methods.
Visualization of 3D data
3D Rendering For a more sophisticated visualization there also exist a set of OpenGL routines which can be used to render more complex 3D scenes. You can either use a set of predefined objects (arrows, cones, icosahedrons, pyramids, links) or define arbitrary objects using a texteditor. A set_light, camera and set_material unit easily allow the control of a scene, which makes NEO quite useful for simulation in robotics.
An OpenGL robot hand
GUI So called input and output windows provide a mechanism for the construction of simple graphical user interfaces. Available widgets are buttons, sliders and input fields for numerical and text input. Each of these widgets can trigger callback functions. Complex GUIs can be implemented with the tcl_prog unit that executes an arbitrary Tcl/Tk script.
Simple user interface
Programming Two units which allow almost anything are the prog_unit and the matrix_algebra. Both can be programmed in a C-style manner. The prog_unit allows the dynamic loading of libraries which can contain user defined functions. The matrix_algebra allows simple matrix operations like transposition, extraction of rows and columns etc, but also more sophisticated operations like determinant calculation, inversion, singular value decomposition, eigenvector calculation etc.
An excerpt of a prog unit's source text
Mathematics There exist algorithms for a variety of statistical operations like computation of mean values, standard deviation and mean square errors; vector functions like scalar products, euclidean length, min. and max. value computation, 1D and 2D fast Fourier transformations, matrix multiplication, inversion, correlation matrix, Gram Schmidt orthogonalization.
Visualization of 2D FFT
Image Processing A set of standard image processing functions is available for the construction of computer vision applications. Basic filter operations like Gaussian blurring, different edge detection mechanisms and the possibility to define arbitrary convolution kernels, as well as more complex functions like filtering with Gabor jets, the Hough transform or colour space transformations allow in conjuction with neural networks an amazing range of vision applications.
The Hough transform finds straight lines
Neuronal Networks One important property of neural networks is their ability to "learn". The adaptive units can be devided in supervised and unsupervised learning methods. Examples for the former are the classical mulitlayer perceptron (network size, activation functions and training algorithm are adjustable), local linear maps (SOMs extended by an output function, often used for classification tasks) or PSOMs (parameterized self organizing maps). Units which perform unsupervised learning are the som_op (choose between different topologies for the SOM algorithm), the hebb_unit or the rbf_layer. Units like the delta_layer, bp_layer and delay_line provide the necessary pieces to build more complex networks including TDNNs or Elman networks for time series prediction.
A SOM with 1D ring topology tackles
the "Travelling Salesman" problem
Datamining A topic gaining more and more momentum is "Datamining". In NEO, many datamining operations have been implemented in the form of loadable units, using existing units as building blocks. This enables the user to analyze a given data set with a large variety of tools including data input/output from flat files and SQL database servers, as well as different statistical utilities like dependency matrix calculation (based on correlation, chi square or entropy), histogramming or hierachical cluster analysis. Algorithms like the principal or independent component analysis, the Sammon map or the application of self organizing maps are already encapsulated in ready to use units. Different transformation utilities allow partitioning, scaling or rotation of datasets. SOMs, MLPs, LLMs and kNNs can be used to generate and evaluate data models.
Correlation matrix of a diabetes dataset


Generating a data model with a multi layer perceptron