# Advanced SDR-Based Custom OFDM Protocol for Improved Data Rates in HF-NVIS Links
## 3 Results and Discussion
### Laboratory Conditions  
In the first contiguous aggregation experiment, the OFDM system was configured to effectively utilize the available bandwidth by dividing it into closely spaced channels (Figure 10). The results show a clear and well-defined spectrum with a small gap between channels, indicating the efficient use of the spectrum, as viewed through the QT GUI Frequency Sink blocks. The flexibility of the system in avoiding spectral regions affected by interference or regulatory constraints was demonstrated by the non-continuous aggregation configuration (Figure 11), in which channels are distributed with significant gaps in the spectrum. In dynamic spectrum access scenarios where certain frequency bands may be occupied or restricted, this form of aggregation is particularly advantageous. Figure 10: Receiving OFDM channels—contiguous aggregation. The performance and compartment of the OFDM receiver with regard to contiguous and non-contiguous aggregation are illustrated by the label visualization in the time domain of the received data. The impact of frequency settings on the signal sources within the OFDM system is illustrated through the visualization of the received data time-domain tag in the context of contiguous and non-contiguous aggregation. In this implementation, the signal source blocks are configured to generate cosine waveforms at specific frequencies, such as \(50\) kHz and \(-50\) kHz for non-contiguous aggregation, and \(12\) kHz and \(-12\) kHz for contiguous aggregation. These frequency settings permit the creation of both contiguous and non-contiguous aggregation scenarios by directly influencing the arrangement of channels within the available spectrum. The packet_num and rx_len labels for both channels are plotted as a function of time in the view. As can be observed, the OFDM receiver is able to successfully decode the received packets, as evidenced by the amplitude and no gaps in label values in the time domain, as can be seen in Figure 12. The stability of the rx_len and the lossless packet count growth indicate that the receiver is capable of handling the received data rate and maintaining synchronization, even when faced with potential channel impairments. Figure 11: Receiving OFDM channels in non-contiguous aggregation scenario. Figure 12: Monitoring received packages on each channel in both contiguous and non-contiguous aggregation. Then, the received OFDM packets were analyzed using a tag debug script designed to monitor and record, in a text file, key details in each packet header (Figure 13). This script captured information such as the unique number of each packet, the reception time (rx_time) reflecting the exact time of reception, and the offset--an indicator of the phase and frequency synchronization between the transmitter and receiver. In addition, channel tap values were recorded, essential for analyzing interference and signal variations on the communication channel. The packet length (packet_length), an important parameter for identifying possible errors or partial data loss during transmission, was also recorded. In the next step, a Python script was developed to analyze the packets stored in the *.txt file after each transmission using the information collected by the debug tag. The script reads the details of each packet received from the file and performs specific calculations to determine the PER, a key indicator of transmission performance (Figure 14). PER is calculated by comparing the number of packets received to the number of packets lost during transmission. To do this, the script parses the information in each packet and identifies missing or corrupt packets based on sequence numbers and other integrity parameters. The PER result for each transmission is then reported, giving an accurate picture of the error rate and reception stability for each OFDM transmission session.