stipa

MATLAB implementation of the Speech Transmission Index for Public Address (STIPA) method for evaluating the speech transmission quality.

https://github.com/zawi01/stipa

Science Score: 44.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (8.1%) to scientific vocabulary

Keywords

audio evaluation intelligibility psychoacoustics speech speech-transmission-index stipa
Last synced: 6 months ago · JSON representation ·

Repository

MATLAB implementation of the Speech Transmission Index for Public Address (STIPA) method for evaluating the speech transmission quality.

Basic Info
  • Host: GitHub
  • Owner: zawi01
  • License: gpl-3.0
  • Language: MATLAB
  • Default Branch: main
  • Homepage:
  • Size: 4.65 MB
Statistics
  • Stars: 5
  • Watchers: 2
  • Forks: 1
  • Open Issues: 0
  • Releases: 1
Topics
audio evaluation intelligibility psychoacoustics speech speech-transmission-index stipa
Created over 2 years ago · Last pushed 10 months ago
Metadata Files
Readme License Citation

README.md

Speech Transmission Index for Public Address (STIPA)

Speech Transmission Index (STI) is a metric ranging between 0 and 1 predicting the speech intelligibility when speech is passed through a transmission channel, defined in the IEC 60268-16 standard[^1]. It is based on an analysis of the amplitude modulations, which simulate speech signals.

[^1]: International Electrotechnical Commission,“Sound system equipment – Part 16: Objective rating of speech intelligibility by speech transmission index,” 2020. Number IEC 60268-16:2020, edition 5.0.

The full STI model consists of 98 separate test signals using 14 different modulation frequencies in 7 octave bands, which requires approximately 15 minutes of measurements. STIPA is a simplified form of the full STI based on measurements using a lower number of modulation indices. Specifically, STIPA uses only one test signal with 2 modulation frequencies in each of the 7 octave bands. Recommended measurement duration shall be approximately 18 seconds, with a recommended range of 15 s to 25 s.

This MATLAB implementation of STIPA allows users to generate the STIPA test signal of defined length and sampling frequency and then compute the STI using the direct STIPA method.

Apart from the direct STIPA method, the norm also specifies the indirect method usually denoted as STIPA(IR), which is based on measuring the impulse response. However, the indirect method is not suitable for applications involving non-linear components in the transmission chain, as it relies on the assumption of linearity and may lead to potential inaccuracies in measurements.

The quality of speech transmission and the likelihood of intelligibility of syllables, words, and sentences being comprehended for native speakers with healthy hearing can be represented by the following table^2.

| STI value | Quality according to
IEC 60268-16 | Intelligibility
of syllables in % | Intelligibility
of words in % | Intelligibility
of sentences in % | |:----------------:|:---------:|:-------------:|:-------------:|:--------------:| | 0 – 0.3 | bad | 0 – 34 | 0 – 67 | 0 – 89 | | 0.3 – 0.45 | poor | 34 – 48 | 67 – 78 | 89 – 92 | | 0.45 – 0.6 | fair | 48 – 67 | 78 – 87 | 92 – 95 | | 0.6 – 0.75 | good | 67 – 90 | 87 – 94 | 95 – 96 | | 0.75 – 1 | excellent | 90 – 96 | 94 – 96 | 96 – 100 |

The uncertainty associated with a single STIPA measurement is 0.02 to 0.03. Thus, to obtain higher accuracy, it is recommended to perform multiple measurements and average the results.

Note, that to obtain correct measurements of STI, it is necessary to follow the recommendations according to IEC 60268-16.

Usage

Typical usage of STIPA test consists of three steps: 1. Generate the STIPA test signal using generateStipaSignal. 2. Broadcast the STIPA test signal through the transmission channel and capture it. 3. Compute STI using stipa.

A simple demonstration of the provided STIPA implementation is provided in demonstration.m file.

Generate STIPA test signal

The STIPA test signal can be generated using

matlab signal = generateStipaSignal(duration); where duration specifies the duration of test signal in seconds.

If no sampling frequency is specified, the default value of 96 kHz is used. To specify the sampling frequency, just call the function with the second parameter fs with the value of sampling frequency in Hz. The minimum sampling frequency is 22,050 Hz.

matlab signal = generateStipaSignal(duration, fs);

The generated test signal can be saved as audio file using the audiowrite function, e.g.:

matlab audiowrite('./testSignal.wav', signal, fs);

Compute STI

Since STIPA evaluates the quality of speech transmission system based on the modulation depths of the measured signal, only the vector of measured signal and its sampling frequency fs is required to compute the STI value:

matlab STI = stipa(signal, fs);

Note that the sampling frequency fs may differ from the sampling frequency of the generated STIPA test signal according to the recording device used.

Apart from the STI, the stipa function can also output the Modulation transfer ratios mk:

matlab [STI, mk] = stipa(signal, fs);

In special cases, the stipa function allows to input also reference signal and the Modulation Transfer values are computed as a ratio of reference and signal modulation depths:

matlab STI = stipa(signal, fs, reference);

and it is also possible to specify sampling frequency of reference signal fsRef if it differs from the sampling frequency of the measured signal:

matlab STI = stipa(signal, fs, reference, fsRef);

Two additional optional name-value arguments, Lsk and Lnk, can be provided to adjust the STI calculation for auditory masking and threshold effects, and ambient noise. Both Lsk and Lnk should be vectors of length 7, representing the levels of signal and ambient noise in each frequency band, respectively.

To adjust the Modulation Transfer Function (MTF) computation for auditory masking and threshold effects, use: matlab STI = stipa(signal, fs, 'Lsk', Lsk);

To also account for the effect of ambient noise, use: matlab STI = stipa(signal, fs, 'Lsk', Lsk, 'Lnk', Lnk);

Requirements

The code has been developed in MATLAB version R2022a. The implementation requires the following MATLAB toolboxes: - Signal Processing Toolbox, - Audio Toolbox.

Verification tests

IEC-60286-16 revision 5 requires to verify STIPA implementations using the test signals described in Annexes A and C. Several test signals developed by Embedded Acoustics, along with the test signal description, are available at http://www.stipa.info/index.php/download-test-signals.

To verify the STIPA implementation in this repository, please follow these steps: 1. Download zip files with testing signals using the link above. 2. Unzip the folder with the testing signals into verification folder. 3. Run stipaVerificationTests.m script.

Note that the verification tests evaluates only 4 out of 5 tests available (Annex A.2.2, A.3.2.1, C.3.2, and C.4.2) since Annex C.3.3 aims at modulation depth testing of indirect method using impulse responses – STIPA(IR), which is not part of this implementation.

Control Measurements

To compare the STIPA implementation in this repository with a licensed commercial device, we conducted a series of measurements in the university auditorium. The results and more details about the measurement setup can be found in the controlMeasurements.md file.

License

The code of this toolbox is distributed under the terms of the GNU General Public License 3.

Citation

If you use this software in your work, please cite the article Matlab Implementation of STIPA (Speech Transmission Index for Public Address Systems).

bibtex @article{zaviska2024stipa, title = {{MATLAB Implementation of STIPA (Speech Transmission Index for Public Address Systems)}}, author = {Z{\'a}vi{\v{s}}ka, Pavel and Rajmic, Pavel and Schimmel, Ji{\v{r}}{\'i}}, year = {2024}, month = {apr}, journal = {Journal of the Audio Engineering Society}, number = {10713}, pages = {1--7}, url = {https://aes2.org/publications/elibrary-page/?id=22526}, }


© Pavel Záviška, Brno University of Technology, 2023–2025

Owner

  • Login: zawi01
  • Kind: user

Citation (CITATION.cff)

cff-version: 1.2.0
title: Speech Transmission Index for Public Address (STIPA)
message: >-
  If you use this software in your work, please cite it
  using the metadata from "preferred-citation".
type: software
authors:
  - family-names: Záviška
    given-names: Pavel
    orcid: 'https://orcid.org/0000-0003-2221-2058'
    affiliation: Brno University of Technology
repository-code: 'https://github.com/zawi01/stipa'
abstract: >-
  MATLAB implementation of the Speech Transmission Index for
  Public Address (STIPA) method for evaluating the speech
  transmission quality.
keywords:
  - audio
  - evaluation
  - speech
  - psychoacoustics
  - intelligibility
  - speech-transmission-index
  - stipa
license: GPL-3.0
version: 1.0.0
date-released: '2024-06-18'
preferred-citation:
  type: article
  authors:
    - family-names: Záviška
      given-names: Pavel
      orcid: 'https://orcid.org/0000-0003-2221-2058'
      affiliation: 'Brno University of Technology'
    - family-names: Rajmic
      given-names: Pavel
      orcid: 'https://orcid.org/0000-0002-8381-4442'
      affiliation: 'Brno University of Technology'
    - family-names: Schimmel
      given-names: Jiří
      orcid: 'https://orcid.org/0000-0002-7870-4345'
      affiliation: 'Brno University of Technology'
  journal: Journal of the Audio Engineering Society
  title: Matlab Implementation of STIPA (Speech Transmission Index for Public Address Systems)
  number: 10713
  url: https://aes2.org/publications/elibrary-page/?id=22526
  month: 6
  year: 2024

GitHub Events

Total
  • Watch event: 5
  • Push event: 1
Last Year
  • Watch event: 5
  • Push event: 1