# HCTC: Hybrid Convolutional Transformer Classifier for Automatic Modulation Recognition
## 2 Received Signal and Proposed HCTC Model
### Proposed HCTC Model
#### 2.2.1 Stage A--Convolutional Layer  
In the first stage, the individual I and Q components and the combined I/Q component of the signal were passed. The I and Q components of the input signal were passed to the 1D convolutional layer as 'conv1_2' and 'conv1_3'. The convolutional layers were configured using 64 filters and a kernel size of eight. 'Causal' padding was used to maintain the temporal order of the data by ensuring that each output at time \(t\) only depended on the  
Figure 1: Proposed HCTC model architecture. current and previous inputs. The weights of the convolutional kernel were initialized using the Glorot uniform distribution, which helped to maintain a balanced variance of activations across layers. The outputs of the conv1_2 and conv1_3 layers were later reshaped and concatenated along with feature dimensions and then passed to the 2D convolutional layer as 'conv2'. This layer used the _same_ padding to maintain the same dimensions as those of the input. The output of this layer was fed to the max-pooling layer with a pool size of (2,2) and a stride of one, followed by the dropout layer, which was used to prevent overfitting. Furthermore, the outputs of the two 1D convolutional layers and the 2D convolutional layer were merged and passed to the 2D convolutional layer, followed by the max-pooling and dropout layers. To stabilize and accelerate the output of the convolutional layer, batch normalization was applied. All the convolutional layers of the HCTC used (a) the ReLU activation function, which introduced non-linearity to the model; (b) L2 regularization with a regularization factor of \(1\times 10^{-4}\), which was applied to the kernel weights to mitigate overfitting. The ReLU activation function was proposed in [55], and is most widely used as activation functions in the context of modulation classification. ReLU exhibits faster learning [56] when compared to other activation functions, such as sigmoidal and tanh, shows better performance and generalization [57; 58], and avoids the vanishing gradient problem [58; 59]. The ReLU function defined in Equation (2) shows sparsity in the hidden units, which leads to more efficient representation and generalization for classification tasks. \[f(x)=\max(0,\ x)=\left\{ \begin{aligned} & x_{i},\ if\ x_{i}\geq 0\\ & 0,\ if\ x_{i}<0\end{aligned} \right. \tag{2}\]  
The configuration of stage A of the proposed model is shown in Table 1. \begin{table}
\begin{tabular}{c c c} \hline \hline
**Layer (Name)** & **Output Shape** & **Description** \\ \hline input2 (I Component) & (128, 1) & Input signal of length 128 \(\times\) 1 \\ input3 (Q Component) & (128, 1) & Input signal of length 128 \(\times\) 1 \\  & & Number of filters: 64 \\ conv1\_2 (Conv1D) & (128, 64) & Activation function: ReLU \\  & & Kernel initializer: Glorot uniform \\  & & Kernel regularizer: L2 (1 \(\times\) 10\({}^{-4}\)) \\  & & Number of filters: 64 \\ conv1\_3 (Conv1D) & (128, 64) & Activation function: ReLU \\  & & Kernel initializer: Clorot uniform \\  & & Kernel regularizer: L2 (1 \(\times\) 10\({}^{-4}\)) \\ input1 (I/Q Component) & (2, 128, 1) & Input layer of length 128 \(\times\) 2 \\  & & Number of filters: 256 \\ conv1\_1 (Conv2D) & (2, 128, 256) & Activation function: ReLU \\  & & Kernel initializer: Clorot uniform \\  & & Number of filters: 64 \\ conv2 (Conv2D) & (2, 128, 64) & Kernel size: (1, 8) \\  & & Activation function: ReLU \\  & & Kernel initializer: Clorot uniform \\  & & Kernel regularizer: L2 (1 \(\times\) 10\({}^{-4}\)) \\  & & Kernel regularizer: L2 (1 \(\times\) 10\({}^{-4}\)) \\  & & Number of filters: 64 \\  & & Kernel size: (1, 8) \\  & & Activation function: ReLU \\  & & Kernel initializer: Clorot uniform \\  & & Kernel regularizer: L2 (1 \(\times\) 10\({}^{-4}\)) \\  & & Pool size: (2, 2); Stride: 1; Padding: Same \\  & & Pool size: (2, 2); Stride: 1; Padding: Same \\  & & Pool size: (2, 2); Stride: 1; Padding: Same \\  & & Pool size: (2, 2); Stride: 1; Padding: Same \\  & & \\ \end{tabular}
\end{table}