Main Content

Adaptive Linear Prediction

This example shows how an adaptive linear layer can learn to predict the next value in a signal, given the current and last four values.

To learn how to forecast time series data using a deep learning network, see Time Series Forecasting Using Deep Learning.

Defining a Wave Form

Here two time segments are defined from 0 to 6 seconds in steps of 1/40 of a second.

time1 = 0:0.025:4;      % from 0 to 4 seconds
time2 = 4.025:0.025:6;  % from 4 to 6 seconds
time = [time1 time2];  % from 0 to 6 seconds

Here is a signal which starts at one frequency but then transitions to another frequency.

signal = [sin(time1*4*pi) sin(time2*8*pi)];
plot(time,signal)
xlabel('Time');
ylabel('Signal');
title('Signal to be Predicted');

Figure contains an axes object. The axes object with title Signal to be Predicted, xlabel Time, ylabel Signal contains an object of type line.

Setting up the Problem for a Neural Network

The signal is then converted to a cell array. Neural Networks represent timesteps as columns of a cell array, to distinguish them from different samples at a given time, which are represented with columns of matrices.

signal = con2seq(signal);

To set up the problem we will use the first five values of the signal as initial input delay states, and the rest for inputs.

Xi = signal(1:5);
X = signal(6:end);
timex = time(6:end);

The targets are now defined to match the inputs. The network is to predict the current input, only using the last five values.

T = signal(6:end);

Creating the Linear Layer

The function linearlayer creates a linear layer with a single neuron with a tap delay of the last five inputs.

net = linearlayer(1:5,0.1);
view(net)

Adapting the Linear Layer

The function adapt simulates the network on the input, while adjusting its weights and biases after each timestep in response to how closely its output matches the target. It returns the update networks, it outputs, and its errors.

[net,Y] = adapt(net,X,T,Xi);

The output signal is plotted with the targets.

figure
plot(timex,cell2mat(Y),timex,cell2mat(T),'+')
xlabel('Time');
ylabel('Output -  Target +');
title('Output and Target Signals');

Figure contains an axes object. The axes object with title Output and Target Signals, xlabel Time, ylabel Output - Target + contains 2 objects of type line. One or more of the lines displays its values using only markers

The error can also be plotted.

figure
E = cell2mat(T)-cell2mat(Y);
plot(timex,E,'r')
hold off
xlabel('Time');
ylabel('Error');
title('Error Signal');

Figure contains an axes object. The axes object with title Error Signal, xlabel Time, ylabel Error contains an object of type line.

Notice how small the error is except for initial errors and the network learns the systems behavior at the beginning and after the system transition.

This example illustrated how to simulate an adaptive linear network which can predict a signal's next value from current and past values despite changes in the signals behavior.