~ Nonlinear Adaptive Filtering as a Form of Artificial Intelligence ~

DEMO code (quantized kernel)
DEMO code (continuous kernel)

Multiple Input, Single Output (MISO object)

The dynamic objects can have any number of inputs, but in usual engineering practice it is either one or two. So we limit our explanation for the case of two inputs $$z_i = \sum_{j=0}^m g_j (x_{i-j}, y_{i-j}).$$ The model functions $g_j$ are blockwise bilinear. That means that field of definition of each function is divided into multiple rectangular blocks that cover all area without gaps and overlapping. Each pair of inputs values $[x_k, y_k]$ falls into a particular block and their position within the block is defined by weight coefficients, according to basic. We can denote weight as $NW_{k}, NE_{k}, SW_{k}, SE_{k}$ and put all data into the table

single block for particular function $g$

Since the table is large we show only one block for one function. The other functions form similar blocks with their weights coefficients built for their arguments. The rest part is similar to a single input model SISO.

Similar to SISO object the sum of all columns within the block gives vector with all elements equal to 1.0, and data matrix has at least $m-1$ linear dependent vectors, which means that rank of the matrix is always smaller than a number of estimated parameters and models are always redundant. Differences in some elements can be compensated by others.

First simulation DEMO

The simulation test is performed for relay input. Let $x$ and $y$ are relays that take 8 possible values (0,1,2,3,4,5,6,7). Their 64 combinations define discrete and quantized function values. Assume we have 8 functions in a model with values either -1 or +1, using arguments similar to sells on a chessboards.

The output for the model is a sum of randomly selected cells in eight boards. The identification task is to build boards having only inputs and outputs. The structure of the boards is unknown besides the fact that each input takes 8 possible values.

The DEMO test runs so-called online identification. It processes streaming data and identifies all 8 * 8 * 8 = 512 cells after reading only 9000 input pairs. The inputs are generated randomly in each run. The code can be obtained from the link at the top.

Second simulation DEMO

The second simulation DEMO provides reusable code. The tested model has only limitation of bilinearity. The data is generated randomly at each execution and presented as arrays with values $x[i], y[i]$. The model is built on training data $$z_i = \sum_{j=0}^m g_j (x_{i-j}, y_{i-j})$$ and validated on unseen data, the data that were not used for identification. The code can be obtained from the link at the top.