# Low-Complexity Convolutional Neural Network for Channel Estimation
## 4 DL-Channel Estimation  
As detailed in the previous section, the LS and MMSE are the most common solutions for channel estimation, but both have associated limitations: LS lacks accuracy, while MMSE has high complexity. In light of hardware implementation, both aspects are critical. Additionally, the wireless input-output relationship could be affected by non-linear phenomena, which could potentially diminish the effectiveness of conventional methods [23]. In this vision, neural networks can learn quickly how to deal with different environments being unchanged by mathematical equations. This is achievable because a large dataset can be generated simulating all the possible scenarios, and the neural network learns through offline training. The classic neural network is able to learn thanks to the neurons present at each layer. Indeed, generally, the classic DNN consists of multiple layers, and at each layer, new useful data can be extrapolated. The gained information across layers depends on the type of DNN used. The most promising neural network structures for the channel estimation application presented in the literature are the FCDNN, the CNN, and the LSTM cells neural network. The LSTM is particularly popular in wireless applications because it is capable of building long-term memory associated with the data. Generally, these consist of fully connected layers composed by LSTM cells, as shown in Figure 2.  
Each LSTM cell has neurons which apply sigmoids or the hyperbolic tangents. Due to the complex functions in the neurons, a hardware implementation is challenging. Instead, more hardware-friendly functions are applied in the FCDNN and CNN neurons. The core function of the neuron in FCDNN is a weighted-sum, and every neuron of each layer is mapped to the subsequential layer, as shown in Figure 3 [24]. Instead, the core function of the CNN is a 3-D Multiply-Accumulation (MACs) and its layers are sparsely connected. Given the dense connectivity among the layers, FCDNNs result in high complexity and memory requirements to store the needed parameters (i.e., weights and biases). When FCDNNs must either process high-dimensional data or consist of many hidden layers, their complexity becomes problematic. This issue is overcome by the CNN truncating some connections, thus alleviating the amount of operations to be performed. In addition, when some parameters are shared among different connections, the memory demand is lowered. This works well with images, where the locality of data is essential to extract useful features/relationships from pixels. The CNN is able to extract and move local information from one layer to another using multiple feature maps (_fmaps_). Consequently, the dimension of the current layer depends on the features of the previous layer, where the planar section is defined with the height (\(M_{H}\)) and width (\(M_{W}\)) of the previously extracted _fmaps_, and the depth is given by the number of filters (\(M_{C}\)), as shown in Figure 4.  
Figure 3: Example of FCDNN with two hidden layers. Figure 2: The LSTM layer. At each layer, the filters extract multiple features from the input by spanning the current _fmap_ with a sliding window. This window comprises \(K_{H}\times K_{W}\) neurons, which are associated with learnable weights, and each window performs convolutions in the local region of the current _fmap_. At the end of this process, the outcome of each filter corresponds to a new _fmap_ (\(N_{H}\times N_{W}\)). The set of all the calculated _fmaps_ in the current layer is going to be the depth of the next layer (\(N_{C}\)). Once all the _fmaps_ have been processed, the planar size generated for each CONV layer is given by the following Equation (7)  
\[N_{H(W)}=\frac{M_{H(W)}-K_{H(W)}+2P_{H(W)}}{S_{H(W)}}+1 \tag{7}\]  
where \(P_{H(W)}\) is the row (column) padding size and \(S_{H(W)}\) is the row (column) stride. The padding size indicates the number of additional rows and columns added at the borders of the input _fmaps_ (e.g., by using zero values) to extend the sizes of the output _fmaps_.