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 standard1. It is based on an analysis of the amplitude modulations, which simulate speech signals.
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 table2.
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.
Typical usage of STIPA test consists of three steps:
- Generate the STIPA test signal using
generateStipaSignal
. - Broadcast the STIPA test signal through the transmission channel and capture it.
- Compute STI using
stipa
.
A simple demonstration of the provided STIPA implementation is provided in demonstration.m
file.
The STIPA test signal can be generated using
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.
signal = generateStipaSignal(duration, fs);
The generated test signal can be saved as audio file using the
audiowrite
function, e.g.:
audiowrite('./testSignal.wav', signal, fs);
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:
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
:
[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:
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
:
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:
STI = stipa(signal, fs, 'Lsk', Lsk);
To also account for the effect of ambient noise, use:
STI = stipa(signal, fs, 'Lsk', Lsk, 'Lnk', Lnk);
The code has been developed in MATLAB version R2022a. The implementation requires the following MATLAB toolboxes:
- Signal Processing Toolbox,
- Audio Toolbox.
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 https://www.stipa.info/index.php/download-test-signals.
To verify the STIPA implementation in this repository, please follow these steps:
- Download zip files with testing signals using the link above.
- Unzip the folder with the testing signals into
verification
folder. - 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.
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.
The code of this toolbox is distributed under the terms of the GNU General Public License 3.
© Pavel Záviška, Brno University of Technology, 2023–2024
Footnotes
-
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. ↩
-
https://en.wikipedia.org/wiki/Speech_transmission_index#Scale ↩