# Software-Defined NB-IoT Uplink Framework--The Design, Implementation and Use Cases
## 4 Framework Design  
The proposed software-defined NB-IoT framework should be understood as an evaluational platform, where the signal processing functional blocks of the NB-IoT Rel. 13 and Rel. 14 standards are represented as a set of modules. It means that the design of the radio interface is completely modular, thus the adaptive form makes it possible to implement, execute, and test each part independently of the target platforms, testbeds, OTA stands, simulation environments, hardware-software stands with the FPGA support, or even distributed laboratory environments. To achieve such versatility, software implementation of all modules must be independent, bearing in mind the specificity of the processor architecture and the method of random-access memory (RAM) addressing on the target platform. Thanks to this, it is possible to run these modules on the so-called embedded systems based on a microprocessor with the Advanced RISC Machine (ARM) architecture, as well as on computers with the x86-64 processors. Thus, it can be realized on almost any available hardware, even on the low-computational-power ones--dependent on the stands available in the laboratory. Therefore, framework is developed mostly in the procedural C (with elements of the C++, e.g., for the logging handling) language which also allows achieving the compatibility with the standard by means of the timing constraints. This element is crucial in the educational process--however, very often neglected during the studies and learning progress, where low-level programming knowledge is a key in designing, developing, and optimizing the radiocommunication systems and networks. This knowledge is extremely desirable by the industry from the specialists. It is known that in order to implement an efficient and effective radiocommunication system, it is crucial to distinguish and potentially optimize (e.g., by parallelization approach) the calculations of the individual program modules. The mathematical calculations that will be performed for the longest time, compared to the other NB-IoT protocol stack modules, may be one of the examples. Such elements potentially include, e.g., channel encoding and decoding, time and frequency synchronization, channel estimation, or the Orthogonal Frequency-Division Multiplexing (OFDM) signal formulation. Evaluation of the efficiency of the signal processing in the individual section of the radio interface through measurements of the time stamps and determination of the execution time of the individual elements of the transceiver is an important parameter during developing of the radio interface--especially when it will be used in the sensor device. The mentioned parallel processing of the radio signals requires the implementation of the multithreaded environment determining, e.g., the scope of parallelization in the radio interface structure. Thus, description and implementation of the modules should include not only the technical requirements resulting from the 3 GPP standard, but also the possibilities of process optimization manner. As an example, the proper decomposition of the NB-IoT stack, which is proposed for the uplink in Section 5, can be given. This creates a wide set of potential use cases of the proposed framework, in almost all academic stages and several study courses. In addition, the proposed framework design can be transformed from the centralized software manner to the hybrid architecture, where modules (separately or as a bundle) are developed as the hardware intellectual property (IP) cores or the hardware coprocessors. Even a distributed architecture can be proposed, where modules will be implemented independently, e.g., as the separate laboratory stands, or even remotely, where the generated samples will be sent to the SDR platform via the laboratory network. The remote availability and distributed architecture may especially be very useful during the remote teaching [37]. The radioinformatics term should be used in that case.