# Coherent Chaotic Communication Using Generalized Runge-Kutta Method
## 3 Investigation of Chaotic Communication System with \(\alpha\)-Based Signal Modulation
### Experimental Setup  
This section provides an overview of the experimental setup designed using the Arduino Due microcontroller and the Integrated Development Environment (IDE) for software development. The Arduino Due microcontroller offers significant advantages for prototyping electronic systems, such as an integrated 12-bit analog-to-digital converter (ADC) and digital-to-analog converter (DAC). The relatively low bit resolution of the DAC/ADC may not be sufficient for the correct working of a chaotic communication system when the spread of modulation parameters is relatively small. However, in our study, the noise from quantization is much lower than the noise in the communication channel, and the set of modulation parameters under investigation are sufficient for 12-bit quantization of DAC/ADC and do not affect the quality of message transmission. The use of high-performance platforms such as Raspberry Pi [29; 50] and FPGA [51; 52; 53] with higher-bit resolutions of DAC/ADC can increase the quantitative characteristics of the communication system. However, this work is aimed at assessing the qualitative characteristics and presenting a modulation method that has not previously been described in the scientific literature.  
Figure 11: Synchronization error on the receiver side, \(\alpha_{1}=-54\) and \(\alpha_{2}=55\), SNR = 35 dB.  
Figure 10: Message transmission.  
The experimental test bench consists of two Arduino Due controllers, an oscilloscope, a keyboard, and two displays. DAC and ADC inputs and outputs are connected to the breadboard. In addition, an adder is placed between the DAC and ADC to introduce additive white noise if needed. This feature is used to investigate the noise immunity of the communication system [54].  
We used the integrated DAC and ADC of two Arduino Due microcontrollers to establish analog communication over wired channels. A 4 x 4 matrix keyboard was used for system parameter configuration. Diodes were installed into the keyboard connector to ensure correct operation when multiple keys in the same column were pressed simultaneously. We also used two 0.96\" OLED displays to facilitate parameter setting and monitor message transmission. To introduce white noise into our signal, we placed a signal adder on a breadboard. The adder consists of a Texas Instruments OPA2134 operational amplifier and 51 kOhm resistors. A noise generator (Keysight 33210A) was used to combine the white noise with the signal. An oscilloscope was used to monitor the signal [54].  
Below is the code describing the transmitter and receiver chaotic oscillators for the Arduino platform.  
The transmitter code is as follows (Listings 1 and 2):  
```
1 doubleAmpl=40;
2 doubleMult=2048/ampl;
3 doubleDelta=2047;
4
5 voidset(){
6h1=h+alpha;
7 alpha2=1/(2*alpha);
8 alpha1=1-alpha2;
9X1[0]=X[0]+h1*(X[1]+X[0]*X[1]-X[1]*X[2]);
10X1[1]=X[1]+h1*(X[1]+sO[0]*X[1]*X[2]);
11X[1]=X[2]+h1*(x[1]*X[1]*X[0]*X[1]);
12X[0]=X[0]+h*(alpha1*(X[1]+X[0]*X[1]-X[1]*X[2])+
13 alpha2*(X[1]+X[10]*X[1]-X[1]*X[2]));
14X[1]=X[1]+h*(alpha1*(X[1]+a[0]*X[1]*X[2])+
15 alpha2*(X[1]+a[0]*X[1]*X[2]));
16X[2]=X[2]+h*(alpha1*(a[1]*X[1]*X[1]+X[0]*X[1])+
17 alpha2*(a[1]*X[1]*X[1]+X[10]*X[1]));
18
19 output=X[1]*Mult+Delta;
20 analogWrite(DACO,output);
21}
```  
**Listing 1**Transmitter code.  
The receiver code is as follows:  
```
doubleAmpl=40;
2 doubleMult=Ampl/2048;
3 doubleDelta=2047;
4
5 voidset(){
6 data=1.46774194*(analogRead(A0)-720);
7 input=(data-Delta)*Mult;
8 Error=input-X[1];
9 synchro=K*Error;
10
11h1=h*alpha;
12 alpha2=1/(2*alpha);
13 alpha1=1-alpha2;
14X1[0]=X[0]+h1*(X[1]+X[0]+X[1]-X[1]*X[2]);
15X1[1]=X[1]+h1*(X[1]+a[0]*X[1]+X[2]+synchro);
16X1[2]=X[2]+h1*(a[1]*X[1]+X[1]+X[0]*X[1]);
17X[0]=X[0]+h*(alpha1*(X[1]+X[0]*X[1]-X[1]*X[2])+
18 alpha2*(X[1]+X[10]*X[1]-X[1]*X[2]));
19X[1]=X[1]+h*(alpha1*(X[1]+a[0]*X[1]*X[2])+
20 alpha2*(X[1]+a[0]*X[1]*X[2])+synchro);
21X[2]=X[2]+h*(alpha1*(alpha1*x[1]*X[1]*X[1]*X[0]*X[1])+
22 alpha2*(a[1]*X[1]*X[1]*X[1]+X[1]));
23}
```  
Listing 2: Receiver code.