KiRAT

Since 2010 the DSS group is developing KiRAT, this is an acronym that stands for Kiel Real-time Application Toolkit. First, it was made for audio and speech signal processing. Meanwhile, it also supports medical und underwater applications. The idea of KiRAT is to share common signal processing modules to benefit from each other. This enables a fast development, optimization, and evaluation of new real-time algorithms. KiRAT is mainly divided into two parts:

  • the algorithmic core and
  • the graphical user interface.

 

Algorithmic Core

This part of KiRAT consists of the algorithms for signal processing. Everything is written in ANSI-C, which enables a fast porting to many platforms. Frequently used functions like vector operations or the fast fourier transform are called using an abstraction layer. This leads to the possibility to use processor specific optimized functions. Basically, the algorithmic core is divided into four types of functions:

  • Init: The initialization function of a module is needed to convert user friendly parameters into internal ones. It also allocates dynamic memory for internal signals and parameters. Everything is controlled by using initialization files.

  • Process: The process function is called for each new frame. It consists of the actual processing of the algorithms.

  • Reset: There the internal memory is reset, which leads to a defined state.

  • Deinit: Freeing memory.

KiRAT also supports a low latency multi-channel AD and DA conversion using the port audio library and many other interfaces for external devices. Another benefit is the possibility to measure impulse responses, to record signals and parameters as well as to simulate various types of systems and environments in real-time.

 

Graphical User Interface (GUI)

The algorithmic core is constructing an algorithmic structure, which offers an additional graphical user interface. This part of KiRAT is written in C++ using the Qt-framework.

The left column enables a fast access to the main functions of the framework. E.g. the processing can be started or stopped using the associated buttons. The upper area is showing the connection between different modules. It can also be recognized how the modules are nested. The lower part mainly consists of monitoring tools. The plotter is used to depict signals and parameters in real-time. There is also the possibility to see the actual memory consumption and the CPU load of every module.