• ADesc Command in STx


    ADesc is a facility (technically, a class library) for storing numeric parameters with an unlimited number of independent and dependent axes and a large - and theoretically unlimited - amount of data. It has been developed as a part of the Noidesc project, whose large amounts of numeric data have been expected to stress the existing, purely XML-based APar class to-and-beyond its limits. In practice, ADesc has proven to be highly efficient with parameters consisting of hundreds of thousands of values, thereby fully meeting the demands of Noidesc. It is expected to meet the demands of challenging future projects as well.

    ADesc fits into the existing STx design by offering an alternative to the existing APar class. Just like APar, the new ADesc stores parameters in the existing STx XML database. There are two ways of storing the numeric data:

    1. In-place in the XML database: This is the conventional way. It keeps all the benefits of XML storage (readable and editable, simple export and import to/from other software) without impairing performance for small and medium-sized parameters.
    2. Binary storage: For large parameters, there is an optional feature for binary storage. With ADesc binary storage, the parameter itself is still part of the XML database, keeping the advantages of the XML organization fully intact. Only the numeric data values of the axes themselves are stored as an external binary file. The XML axis data contains only a reference to that file and the position within the file. This keeps the XML database small and allows for very fast random access to data values.

    The user must decide which kind of storage to use. For large parameters containing hundreds of thousands of numerical values, the performance gain of binary storage may be significant (up to a factor of three for loading and saving the data). At the same time, the saving of space in the XML database by about the same factor (or, more accurately, quotient) increases the speed of the general handling of the XML database.

    Aside from performance, the main design criteria for the ADesc class library were flexibility and ease of use. ADesc provides for automatic unit conversion with most regularly used and predefined domains and units. More unusual situations may be handled with user-defined converter classes. There is even room for completely user-defined axes, thereby enabling things such as dynamically supplied data (e.g. live spectrogram) or data calculated on-the-fly.

    As a result of the positive experiences with the ADesc class and its performance, plans are in place to fully replace the existing APar class over time.

    Object Model:

    Each parameter is modeled by an instance of the ADesc class or of one of its derivations. There are several such classes derived from ADesc, each one optimized for a number of common cases. At this time, the following ADesc classes exist:

    1. ADesc: ADesc is the most general parameter class. It handles parameters with an arbitrary number of independent and dependent axes. It is also prepared for handling even infinite axes and dynamic axes, like axes whose values are supplied or computed at run-time.
    2. ADescX: AdescX is a simpler, less general variation of the most general ADesc, supporting neither infinite nor dynamic axes. Its internal storage is organized such that it matches the current way STx handles large tables. In the long run, it is expected to optimize the STx table handling, thereby possibly rendering ADescX redundant.
    3. ADesc0: ADesc0 models the special case of parameters without any independent axes.
    4. ADesc1: ADesc1 optimizes handling of parameters with exactly one independent axis and an arbitrary number of dependent axes. Storage organization is much simpler, rendering ADesc1 by far the fastest kind of ADesc parameter.
    5. ADesc2: ADesc2 efficiently handles parameters with exactly two independent axes and an arbitrary number of dependent axes. Storage organization is simpler and hence faster than with the general classes. The dedicated ADesc2 class has been supplied, because most parameters encountered so far have proven to have two axes.

    The axes of a parameter are modeled by classes derived from AAxis. In general, each axis has a domain (e.g. time or frequency), a unit (e.g. ms or Hz) and, if applicable, a reference value, i.e. a constant value based upon the axis values that have been computed. At this time, the following kinds of axes exist:

    1. AOrderAxis: The AOrderAxis is the only axis without a domain and unit. Its only property is its cardinality.
    2. AIncrementAxis: The AIncrementAxis has a fixed start value, a fixed offset, and a cardinality. Each value of the axis equals the sum of its predecessor and the offset value.
    3. AEnumerationAxis: The AEnumerationAxis stores a finite number of arbitrary values.
    4. ASegmentIncrementAxis: The ASegmentIncrementAxis is an AIncrementAxis whose values are relative to the beginning of a given STx audio segment.
    5. ASegmentEnumerationAxis: The ASegmentEnumerationAxis is an AEnumerationAxis whose values are relative to the beginning of a given STx audio segment.#
    6. ADependentAxis: Each dependent axis of a parameter is modeled by an instance of an ADependentAxis. The number of dependent axes and their data are restricted by the choice of the respective ADesc class used.

    The hierarchy of the most important classes making up the ADesc library is the following:

    Programming Interface:

    The ADesc programming interface is as orthogonal a design as possible. The basic access functions are called getValue, setValue, getValues, setValues, getValueMatrix, setValueMatrix, getNativeValues, and setNativeValues. They are available both for the whole parameter and for its individual axes. Depending on which object they are called upon, they also set or retrieve one or more values of the desired axis or axes.

    If the parameter modeled by ADesc is considered to be an n-dimensional space (n being the number of independent axes), each point in this space is uniquely described by an n-tuple of coordinates which is the argument to the respective get and set function. The coordinates may be supplied either as an STx vector or as a textual list.

    If there is only one dependent axis, the value for each given coordinate is the value of this axis at the respective coordinate. If there is more than one dependent axis, the value for a given coordinate is a vector of length m, such that m is the number of dependent axes. By specifying the index or the name of a desired dependent axis, the user gets the value of this axis at the respective coordinates. By not specifying this information, the caller gets the whole vector of dependent values at the respective coordinates. This maximizes the flexibility for the ADesc user and requires awareness of fewer distinct functions.

    Other than functions for retrieving one or more parameter values for a specific coordinate, there are also functions for retrieving a larger number of data at the same time. For example, with two-dimensional parameters (i.e. parameters with exactly two independent axes), there are the functions getValueMatrix and setValueMatrix for efficiently setting all of the data of an independent axis. For all parameters with at least one independent axis, there are the functions getValueVector and setValueVector for accessing the whole of an axis.

  • Content Management System


    Redesign the Institute's homepage using a Content Management System (CMS) to facilitate easy actualization by all Institute employees, easy extension of the homepage functionality and a consistent style.


    The CMS 'Mambo' (today: Joomla) was chosen from the available open-source systems. The homepage was redesigned. The homepage content was transferred.


    If employees can easily update their content from any web browser, the homepage will be more up-to-date.

  • Control of the Tsetse Fly


    The tsetse fly genus Glossina is a carrier of the sleeping sickness and of the Nagana epidemic, which affect the ungulates. Over the past years, the sicknesses carried by the tsetse flies has spread so rapidly that intensified disease-fighting measures were necessary. One of the most effective methods is the exposure of a sterile male. The sterilized flies are raised on a large scale using radiation and then released. During the culture, a continuous control of the quality of the flies is necessary. The objective of this project is to develop an acoustic quality check for the sterile males. The research has demonstrated that the quality control is only possible using the sound activity of the flies.


    The tsetse fly uses its flying apparatus to produce sounds in addition to flying. Whereas the flying noise consists mainly of low frequent parts (<2000Hz) with only a few tonal parts, the "singing" consists of tonal components in the range of ca. 1-8kHz. For the detection of the singing, a high-pass-filtered spectrum of the interested frequency range is calculated (using DCT). From this spectrum, three parameters are extracted (energy in local peaks, 95 percent energy bandwidth, variance of the amplitudes), which are suitable for the determination of sounds with distinctive components. These single parameters are converted in weight values between 0 and 1 by using trigger functions. Afterwards, they are merged. The thresholds of the trigger functions are investigated in a separate measuring run from the background signal. The test version of this method was implemented in STx.


    The program will be tested on the testse flies at the laboratory in the 2006/2007 winter semester. As a result of initial tests, it will probably be enhanced. As of 2007, the program is planned to be put into practice in an African institute.

  • Eval Command in STx


    The Eval facility is an expandable and versatile class library for evaluating expressions of mixed type. It adds the Eval function to the STx programming language.

    Eval supports real and complex numeric data as well as vectors and matrices of real and complex numbers. Eval supplies a large number of operations and functions for each kind of data, ranging from scalar and vector additions to statistical functions, order analysis, and signal processing (e.g. the Fourier transformation, several kinds of windowing functions, filtering functions, etc.).

    The Eval functionality is an improvement over the historically grown evaluation functions already present in the STx macro language, including the int and num keywords and the position-dependent implicit argument evaluation. Eval combines all their functionality with a large and growing part of the functions that have traditionally been available only for SPU programmers. Over time, Eval is intended to provide a uniform and homogeneous means of accessing any of the diverse STx functions, regardless of their individual history.


    • Eval offers a uniform and homogeneous interface to the numeric functions available in STx, including those that were available only to SPU programmers in the past.
    • Eval empowers the STx programmer to use the programming design and style that best suits his or her needs, without being guided by existing restrictions like access only via SPUs. Thus, algorithmic problems may now be solved algorithmically, whereas the use of SPUs may be restricted to problems where there is a continuous flow of data that must be processed online.
    • Eval offers support for reference arguments. This means that an Eval function may return more than one data item (be it a number, a vector, or a matrix), which is not possible with the existing int, num, and implicit argument evaluation because of their outdated design. The support for reference arguments makes the interfaces of many functions more natural and, in some cases, is a necessary condition for implementing them at all (as opposed to offering them as SPU atoms only). At this time, there is already a growing number of functions that make use of this feature.
    • Due to the power of the already existing Eval functions, even complex calculations may be done by typing relatively simple formulae. By resulting in STx macro expressions that are shorter and more readable, this speeds up STx-based software development processes. It also both reduces the likelihood of programming errors happening and speeds up debugging and future maintenance.
    • Due to its carefully laid-out design, Eval offers a very thorough and fine-grained kind of error checking and reporting that has not been possible with the outdated int, num, and implicit argument evaluation. Compared with the traditional evaluation routines, Eval offers more than 25 additional error codes and error messages, thereby helpfully pointing even the less experienced programmer to the cause of their error.
    • Eval uses a manually laid-out, and manually optimized recursive descent parser (meaning that no excessively complicated or time-consuming compiling tools must be involved). This results in a very short and straightforward C++ source code that is easy to read and to extend and that compiles to a very compact and cache-effective binary object.
    • The STx integration of research results has further improved with the availability of Eval due to the fact that researchers may directly integrate their algorithms with the Eval functionality instead of programming SPU atoms of their own, as was necessary in the past.


    The Eval class implements a single-pass, recursive-descent parser for the following grammar:

       AddSub := MulDiv ( "+" | "-" MulDiv )*
       MulDiv := Pwr ( "*" | "/" | "%" Pwr )*
       Pwr := BracketOrAtom ( "^" BracketOrAtom )*
       BracketOrAtom :="(" AddSub ")" |
       "|" AddSub "|" |
       "-" BracketOrAtom |
    FunctionName "(" ArgumentList? ")" |
       some STX item
       ArgumentList := AddSub ( "," AddSub )*

    The functionality of Eval is implemented in the CExEval class. Built-in functions are listed in a table both referring to their implementation and containing information of the number and kind of the arguments to the respective function. Adding a new built-in function is done by providing an implementation for the respective function and by adding an entry to the aforementioned table.

    Available Eval functions

    The following is a short list of some of the most important Eval functions available so far:

    • measurement functions: Cols, Rows, Min, Max, IMin, IMax, Sum, WSum, Abs, QDet
    • vector initialization and transformation: Fill, Init, Rand, VSubC, VSubN, Select, Sort, VV, VVCat, VVSet, VMCol, VMRow, Interp,Trn
    • trigonometric, transcendental, and other special functions: Sin, Cos, Tan, ASin, ACos, ATan, Exp, Sqrt, Log, Ln, Ld, Pi, E
    • complex arithmetic: CR2P, CP2R, CR2Len, CR2Phi, CGet, CSet, CMul
    • integration and differentiation: YDiff, YInt
    • statistics: Avr, Var, StdDev, Corr, Median, Hist, Dist, ModClust, HAClust, EM (Expectation Maximization), Density
    • data conversion: Lin2Log, Log2Lin, Hz2Cent, Cent2Hz, Hz2Bark, Bark2Hz, Hz2Mel, Mel2Hz, Hz2ERB, ERB2Hz
    • signal windowing functions: Window, WHanning, WHamming, WBartlett, WTapRect, WNutTall, WFlatTop, WBlackman, WKaiser, WGauss
    • signal processing: FFT, IFFT, DFT, Cepstrum, LPC, DCT, ZCross, IIR1, IIR2, FIR1, FIR2
    • order spectrum analysis: otrack1, sig2osp, asp2osp, ticks2f1
    • miscellaneous functions: IPeak, QInterp, RPoly, RPolyRef, HTH, ASeg1
  • Implementierung eines Formantsynthesizers (Klatt) in STx


    Es wird ein Formantsythesizer, basierend auf dem Klatt Synthesizer, implementiert, der sowohl zur Erzeugung stationärer Vokale und auch zeitvarianter Formant- und Grundfrequenzspuren verwendet werden kann. Die Implementierung erfolgt als SP-Atom.


    Die Synthese wird als Kontrollwerkzeug in die Anwendungen Viewer2 (Spektorgramm und Parameter Plot) und SPEXL (Segmentations-Tool) eingebunden. Dazu wird eine graphische Steuerung implementiert, die geeignete Funktionen zur Eingabe von Formantdaten (Vokalsynthese) und zur graphischen Auswahl von Parametersätzen (Resynthese von Parameterverläufen) zur Verfügung stellt.

  • STx Database Functions

    Project Objective:

    This project aims to implement generally applicable database functions in STOOLS-STx as, for example, the access to sound and metadata management of segments and annotations (list, sort, select etc.). The essence (sound data), segmentations, and manually compiled and calculated annotations (e.g. wave band level) are the basis of an integrated sound database. The essential demand is that the original sound data remain unchanged. Therefore the metadata have to be filed in separate *.xml files. In this way, a dynamic management of the metadata will be possible, but only the sound files should be opened in a write-protected way.


    The segment lists implemented in STx keep all the annotations linked to each individual sound segment. The segments stay in the context of the continuous sound recordings and enable segment addressing, which is made of the numeric terms, treatment, and tapping of the segments (including the acoustic surrounding).


    Signal databases are the basis for practically all applications that use realistic sound material. The time frequency representation, statistics, main component analysis, cluster analysis, etc. belong to these signal databases. Furthermore, signal databases are used for the realization of subjective evaluations and psychoacoustic experiments. The STx databases use more than 100 sound files and thousands of segments in a very short time.


    PACS: 43.50.Rq; Project: NOIDESc: Deskriptoren zur Bewertung von Lärmsignalen (FFG-809085, bmvit-isb2). PACS: 43.72.Fx; Project: Akustische Phonetik, Sprechererkennung.

  • STx Framework zur Analyse, Resynthese und graphischen Modifikation von Signalen


    Entwicklung eines Frameworks zur Analyse und Resynthese (Phasenvocoder) und zur graphisch unterstützten Modifikation von Signalen. Die Implementierung erfolgt als STx Script.

    Zur Realisierung dieses Projekts wird die STx Grafik um ein allgemeines Selektions-Tool erweitert (Selektion beliebiger Bereiche). Außerdem wird ein File-Objekt entwickelt, das gleichzeitig vom Script (zur Datengenerierung bzw. Modifikation) und von der Grafik verwendet werden kann.

  • STx Graph Rotation and Flip


    Extend the S_TOOLS-STx graphics library to enable graphs to be rotated and flipped horizontally or vertically without having to recalculate the data.


    The base graphics object class was modified, adding rotation and flip settings. A new macro command was implemented to set a graph's rotation-and-flip values. Each graphic object was then modified to display itself correctly according to these settings.


    Rotating and flipping graphical representations of data can now be achieved with on-macro command, rather than having to modify the data itself.

  • STx Implementation of a Script Console


    A console is extremely helpful when developing scripts and applications. This new script console can execute (almost) all STx commands and allows access to variables and objects. The console was implemented with the help of an extended edit control and a macro class. Command line oriented versions of current STx functionality will be developed as and when needed.

    The script debugger was extended during the console development, and a number of thread synchronisation problems were solved.

  • STx ManualScript: Script Programmer's Handbook


    The "STx Script Programming" guide written for internal workshops has been integrated into the online help with the title "Becoming an STx Guru (in 538.338 simple steps)". This chapter contains a general description of the STx script language (including tips and tricks) and an overview of several important STx components and attributes (e.g. shell items).

  • STx MethodSprach: Speech Parameter Extraction


    The methods for extracting speech parameters, most notably formants have been improved. Firstly, a new method was implemented, which measures formants taking some formant attributes (a model) into account. The model uses frequency range and rate of change attributes. Tracking is limited to the voiced parts of the signal. A test version of this method was integrated into the STx speech analysis application SPEXL.

  • STx Monitoring System

    Project Objective:

    The project aims to implement an automatic sound recording system that would allow continuous sound recordings for any length of time (several weeks) without user intervention. The long-term investigation of sound data is used for the observation of noise emission from machines in continuous operation and for the documentation of noise situations. The hardware and system complexity are to be restricted to standard measurement microphones and standard PCs or for continuously running, suitable laptops with external disk storage units.


    The recorder contained in the standard S_TOOLS-STx software package is controlled by the macro programming so that the sound files (about the length of one hour) are generated consecutively with date-and-time specification and then written on the hard disk. The intelligent segmentation algorithms insert automatic "tags" and annotations in real-time or in post-processing. The segmentation data are administrated dynamically and enable the direct inclusion of the recorded sound events in the sound data files, signal analytical processes, and statistical processes. Using the currently available storage units, e.g. disk storage on the scale of 1.28 TByte, continuous measuring (2-canal stereo, 44.1. kHz, 16bit) over a period of 2.5 months is possible.


    For the investigation of noise emissions, e.g. traffic and environmental noise, permanent control stations that measure all sound sources in their time context are needed. Only with a broad analysis of the whole situation can noise pollution and health risks be collected.


    PACS: 43.50.Rq; Project: NOIDESc: Deskriptoren zur Bewertung von Lärmsignalen (FFG-809085, bmvit-isb2).

  • STx Sampling Rate Converter


    Implement a method for up-sampling and down-sampling a signal. The conversion is done by resampling the median of the original signal after applying an ideal TP filter (sinx/x). The method is implemented as an SPAtom and integrated into the SPEXL speech analysis script.


    Convert recordings with unusual sampling rates, match recordings with different sampling rates, and correct 'incorrect' sampling rates.

  • STx SegmTrans: Segmentation and Transcription Tool


    STx includes a number of applications with which one can segment and transcribe signals. All of these applications, however, have additional functionality not necessary for transcription (e.g. parameter extraction), and have not been optimised with transcription in mind. Since transcription and segmentation represents a large part of the time spent on speach analysis, this projects aim is to develop an application which includes everything to need for the job, and is easy to use. The application is included in the speach analysis script SPEXL.


    • waveform and spectrogram signal representations
    • convenient signal bracketing, zoom and playback functionality
    • existing segments displayed in graphs and as list
    • direct input of text and metadata
    • configurable attributes (segment templates)
    • interface to all STx analysis applications
    • hotkeys for all essential functions
  • STx SpektrTrans: Integration of New Spectral Transformations


    The time/frequency transformations (wavelets, Cohen's class distributions developed in earlier projects (2006/2007) have been integrated into the spectrogram and parameter viewer in STx.