In this article, we would like to introduce you to a versatile C++ library called IT++. The library is composed of a handful of useful classes and functions in mathematics, communications and signal processing. Academicians and industrialists around the world, working on communications, make extensive use of this library. The generic vector and matrix classes contained in the kernel resembles the approach used in MATLAB/Octave.
IT++ runs quite comfortably in multiple platforms including GNU/Linux, Sun Solaris, Microsoft Windows (with Cygwin, MinGW/MSYS or Microsoft Visual C++) and Mac OS X operating systems (OSes).
Simulating communication systems
The main motivation behind the introduction of IT++ library is to provide users with the functionalities that help them in modelling communication systems.
Modulators. An analogue modulator transfers an analogue-baseband signal over an analogue-bandpass channel. Various analogue-modulation schemes like quadrature amplitude modulation (QAM) can be implemented using IT++.
The digital modulator transfers a digital bit stream over an analogue-bandpass channel. Binary phase shift keying (BPSK) and other digital modulation schemes are included in the software.
The pulse modulator transfers a narrowband-analogue signal over a wideband-baseband channel. Schemes like pulse amplitude modulation (PAM) are provided in the library.
Vector modulators including orthogonal frequency division multiplexing (OFDM) and multiple input and multiple output (MIMO) are incorporated. The design of multi-user communication systems is aided by code division multiple access (CDMA) and OFDM modulation techniques.
Pulse shaping filters. In order to adapt the transmitted waveform more to its original purpose or to make it suitable for the characteristics of the transmitting channel, waveform of the transmitting pulses needs to be altered. Raised cosine (RC) filter, a widely-used pulse-shaping filter with an inherent ability of minimising inter-symbol interference (ISI), could be implemented using IT++. Root raised cosine (RRC) filter is yet another pulse-shaping technique widely used in mobile communication.
Transmission through a channel. Once a codeword representing the source message is formed, it can be transmitted through a channel. The channel could either be a binary symmetric channel (BSC) or additive white Gaussian noise (AWGN) channel. For transmission through a BSC, the effect of Gaussian noise is not considered. Instead, each bit received differs from the bit sent by an error probability, p.
When we consider AWGN channel, data received at each time equals data sent plus Gaussian noise with mean zero and some standard deviation.
Both these channels can be modelled using IT++
Multi-path fading. When a signal is transmitted through a wireless medium, it propagates through multiple paths before reaching the antenna. Fading occurring in this path could either be frequency-selective or frequency-flat. If the channel’s coherence bandwidth is greater than the signal’s bandwidth, it is frequency-selective. On the other hand, if the bandwidth of the signal is greater, then it is flat-fading. Both can be simulated using the tool.
Pathloss models. When a signal is transmitted, attenuation on the signal increases as it propagates through space. Attenuation thus produced, termed as pathloss, is a major component in the design of the link budget in a communication system.
Using the software, the designer can make use of various pathloss models like COST 207, COST 257 and ITU model for coverage prediction.
Error detection and correction codes. These are used to ensure reliable delivery of digital data sent over communication channels. Various error detection and correction schemes like Hamming, extended Golay, cyclic redundancy check codes, BCH, Reed-Solomon codes and more can be implemented using this tool.
Ranging from mathematical functionalities like random number generation to features including fast independent component analysis (ICA) in signal processing and OFDM in communications, the library includes a lot of functionalities in order to complement the communication system design. Let us take a quick glance at some of these.
Math functions. The library consists of modules for handling basic mathematical functions such as hyperbolic, logarithmic and exponential function. IT++ also supports numerical integration and trigonometric functions. Various matrix operations such as finding the determinant, determining the inverse of a matrix or matrix decomposition can be done using the library. The module can also be used for solving linear equation systems.
Generation of random numbers, a much-demanded mathematical functionality in communications, is achieved using Mersenne Twister generator. Integration of single-dimensional functions and the unconditional non-liner optimisation using Quasi Newton search are also provided.
Signal processing. A communications engineer has to deal with signal processing at different levels. Various filter functions and classes are defined in this library. A lot of transformations used in time-frequency domain conversions are available in this library. This includes Discrete Fourier Transform (DFT), Fast Fourier Transform (FFT), Discrete Cosine Transform (DCT) and much more.
The library can also be used for windowing and filtering operations, both in time as well as frequency domain. It can be used for evaluation of the roots of polynomials as well as for fast ICA.
Protocol simulation. Various event based simulation classes, queue classes, Transmission Control Protocol (TCP) clients and servers, packet generators, selective repeat automatic repeat request (ARQ ) and others have been implemented.
Source coding. IT++ allows the user to read and save different audio file formats. Images can be read and saved in Portable aNy Map (PNM). Scalar and vector quantiser classes are provided.
What users feel
Most users who reviewed the software have been using this tool for simulation of communication systems. It works comfortably with various OSes. In comparison with other competing software like Armadillo, users feels that many signal-processing tools present in IT++ are missing in competing software. IT++ uses its own binary format, but these offer a MATLAB script to read data. “I thought IT++ had a little steeper learning curve than Armadillo but it was also quite good to use and very easy to install, at least in Ubuntu, where it comes as a package,” says a user.
There are some users who are not so comfortable with this tool because of its dependencies. “Easy to install is one of my concerns since users may not be as geeky as the code writer and they may easily give up evaluating my code just because installation is not as smooth as they expected. So IT++ is ruled out by this criterion for its many dependencies,” points out a user.
Fostering research in communication
Earlier research on this software was carried out in Department of Information Theory at Chalmers University of Technology, Gothenburg, Sweden. This, along with the fact that the library is coded in C++, gave the software its name.
The software has emerged over the years, finding significant applications in all areas of communication. Nowadays, the tool is even used in machine learning and for pattern recognition. Why not give it a try?
Download latest version of the software: click here
The author is an electronics enthusiast from Kerala