# An ANN-Based Adaptive Predistorter for LED Nonlinearity in Indoor Visible Light Communications
## 3 The Proposed ANN-Based Predistorter  
A schematic diagram of the proposed artificial neural network (ANN)-based predistorter, which has the structure of a multilayer perceptron, is shown in Figure 3, in which \(N_{I}\), \(N_{H,j}\), and \(N_{O}\) denote the neuron in the input layer, the \(j\)-th neuron in the hidden layer, and the neuron in the output layer, respectively. ANNs were invented to serve as powerful computing systems and were inspired by the constitution of biological brains. As shown in Figure 3a, the proposed ANN-based predistorter constitutes the input layer, one hidden layer, and the output layer. Several neurons, the basic units in an ANN, could be included in each layer. As shown in Figure 3b, a specified neuron \(j\) would be connected with \(K\) inputs \(\mathbf{m}=\left[ \begin{array}{cccc}m_{1}&m_{2}&\cdots&m_{K}\end{array} \right]\) by links with adjustable weights \(\mathbf{w}=\left[ \begin{array}{cccc}w_{1j}&w_{2j}&\cdots&w_{Kj}\end{array} \right]\), and a bias term \(b_{j}\). An activation function \(f(\cdot)\) is used to introduce nonlinearity into the output of a neuron when a set of inputs and a bias term are given. Thus, the output of the \(j\)-th neuron in the hidden layer, \(z_{N_{H,j}}\), is represented as follows:  
\[z_{N_{H,j}}=f^{(N_{H,j})}\Big{(}w^{(N_{H,j})}u+b^{(N_{H,j})}\Big{)}, \tag{4}\]  
where \(u\) is the input to \(N_{I}\), and \(w^{(N_{H,j})}\), \(b^{(N_{H,j})}\), and \(f^{(N_{H,j})}(\cdot)\) represent the weight, the bias value, and the activation function of \(N_{H,j}\), respectively. Furthermore, the output of the neuron in the output layer, \(z_{N_{O}}\), is represented as follows:  
\[z_{N_{O}}=f^{(N_{O})}\left(\sum_{j=1}^{J}w_{j}^{(N_{O})}z_{N_{H,j}}+b^{(N_{O})} \right), \tag{5}\]  
where \(w_{j}^{(N_{O})}\), \(b^{(N_{O})}\), and \(f^{(N_{O})}(\cdot)\) are the weight associated with the \(j\)-th input, the bias value, and the activation function of \(N_{O}\), respectively. The output of the proposed ANN predistorter, \(\mathbf{z}_{N_{O}}\), is a cascade of nonlinear transformation of (4) and (5). When a set of training data \(\mathbf{u}\) is applied to this ANN predistorter, its corresponding output \(\mathbf{z}_{N_{O}}\) can be mathematically expressed as:  
\[\mathbf{z}_{N_{O}}=F(\mathbf{u},\boldsymbol{\varphi}), \tag{6}\]  
where \(F\) stands for the cascade function of all nonlinear transforms of the neurons in each layer and \(\boldsymbol{\varphi}\) denotes the weights and bias values in the neural network. The optimal values  
Figure 3: Illustration of the proposed ANN predistorter: (**a**) The structure of an artificial neural network; (**b**) the structure of a specified neuron \(j\). in \(\varphi\) are usually learned on a training set, with known desired outputs. To start the training process, \(\varphi\) was initially chosen at random. A set of input values and expected values matching them should be provided to execute the training process. As shown in Figure 1, the aim of the predistorter was to pre-emphasize the input signal \(\mathbf{x}^{(\text{DCO})}\) in order to maintain this pre-emphasized signal as a replica of \(\mathbf{x}^{(\text{DCO})}\) after the distortion by the LED nonlinearity. This indicates that the predistortion function is an inverse of the LED nonlinearity, which suggests the use of the captured outputs of the LED, \(\mathbf{y}^{(\text{DCO})}\), as the inputs to the predistorter and that its corresponding outputs are \(\mathbf{x}^{(\text{DCO})}\). That is:  
\[F\Big{(}\alpha\mathbf{y}^{(\text{DCO})},\boldsymbol{\varphi}\Big{)}=\mathbf{ x}^{(\text{DCO})}. \tag{7}\]  
Based on (7), the optimal values in \(\varphi\) were trained in the present study by using a Levenberg-Marquardt (LM) backpropagation algorithm. The LM algorithm was derived from [PERSON]'s method for the data fitting of a nonlinear function and was developed for the ANN based on the advantage that its training speed is 10 to 100 times faster than that of the usual gradient descent backpropagation method [17; 18].