Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
169 commits
Select commit Hold shift + click to select a range
c4996a5
correction
FhGSpCo Jun 29, 2025
d5a49c7
feat(p56): extend speech voltmeter to support arbitrary bit depths
Apr 28, 2026
5aa41cb
chore(build): update CMake minimum version and clean up .gitignore
Apr 28, 2026
447610c
🔧 chore(build): enforce 32-bit build configuration
May 11, 2026
9a466a0
🔧 chore: add /build to .gitignore
May 11, 2026
6fd5d37
Add gain_chk tool with CMake, CTest and docs. Integrate gain_chk into…
TomV76 May 14, 2026
44a86e0
feat(sv56): enhance speech voltmeter for arbitrary bit depths
May 21, 2026
827065c
🧪 test(sv56): update test configurations and working directories
May 26, 2026
2cb97da
addition of SHQ/HP50 filters and EID AMR tool, used in 3GPP SA4
May 26, 2026
7efd9a5
Add WAV file I/O support to all audio-processing tools
May 26, 2026
cc48435
add "random" tool introduced for EVS in 3GPP S4-121078.
sdoehla-iis May 27, 2026
f0bbdde
Add documentation for the gain_chk tool, detailing its functionality,…
TomV76 May 27, 2026
8e17715
Update gain_chk documentation and integrate it into the STL manual. A…
TomV76 May 27, 2026
00c9bba
Fix compilation errors on modern C compilers and CMake >= 3.28
May 27, 2026
9f3c399
is54/uvselp: fix segfault by adding ANSI C prototypes
May 28, 2026
360ec45
Fix ctest failures on macOS/Linux without changing tool behavior
May 28, 2026
dafb0df
🛠️ chore(cmake): update minimum version and remove 32-bit enforcement
May 28, 2026
9782426
feat(sv56): add variable bit-width support and new utilities
May 28, 2026
bf9eb76
Add GitHub Actions CI workflow, fix cf portability and basop output
May 28, 2026
5016f7b
Merge branch 'fix/ctest-portability' into STL_2026_itu_submission
May 28, 2026
f71219c
Merge branch 'fix/uvselp-knr-prototypes' into STL_2026_itu_submission
May 28, 2026
f52bb4b
Merge branch 'fix/add-ci' into STL_2026_itu_submission
May 28, 2026
8eea667
Merge branch 'feature/wav-io' into STL_2026_itu_submission
May 28, 2026
63d89d3
CI: upload LaTeX manual PDF as artifact
May 28, 2026
d35a760
Merge branch 'pr-178' into STL_2026_itu_submission
May 28, 2026
9650a51
Fix CTest line-ending mismatch on Unix/macOS
May 29, 2026
0676caf
Improve gain_chk documentation
May 29, 2026
1585264
Merge pull request #1 from ludomal/pr-179-fixes
TomV76 May 29, 2026
02734da
more issues in description of the operators
FhGSpCo May 29, 2026
0c7aa82
🔥 chore(sv56): remove test data files from .gitignore
May 29, 2026
353558a
feat(sv56): add reference and source files for 16, 24, and 32 bit audio
May 29, 2026
0dee4f7
add unit tests for random in unsup
sdoehla-iis May 29, 2026
af21e6a
add entry in LaTeX documentation
sdoehla-iis May 29, 2026
339fb3e
Merge branch 'pr-179' into STL_2026_itu_submission
May 30, 2026
d285494
Integrate gain_chk with wav_io and add shared text comparison utility
May 30, 2026
be8aaf3
Fix ctest failures on macOS/Linux without changing tool behavior
May 28, 2026
82f8a32
Merge branch 'fix/ctest-portability' into STL_2026_itu_submission
May 30, 2026
7f4946e
Fix WAV I/O: propagate sample rate, validate parameters, fix seeking
May 30, 2026
00f0596
Fix remaining fseek/stat issues in g722demo, signal-diff, calc-snr, m…
May 30, 2026
242b841
Add wav_io support to sine generator
May 30, 2026
77b2e1c
minor correction of filter main + addition of cmake testing
May 30, 2026
2781925
is54/uvselp: fix segfault by adding ANSI C prototypes
May 28, 2026
29f6e41
Fix compfile portability: replace POSIX read()/lseek() with fread()/f…
May 31, 2026
1c9678a
Fix signal-diff and oper portability: replace POSIX I/O with standard C
May 31, 2026
4159f13
Fix printf format warnings in test_precision.c
May 31, 2026
ee1462a
fix: W_neg grammar ("variables" -> "variable")
May 31, 2026
7b68ebf
Merge remote-tracking branch 'ludomal/feature/wav-io' into STL_2026_i…
May 31, 2026
0871a1e
Merge branch 'fix/add-ci' into STL_2026_itu_submission
May 31, 2026
45bfa1d
Merge branch 'fix/ctest-portability' into STL_2026_itu_submission
May 31, 2026
a27a422
Merge remote-tracking branch 'ludomal/fix/uvselp-knr-prototypes' into…
May 31, 2026
63ce07c
Merge remote-tracking branch 'ludomal/pr-178' into STL_2026_itu_submi…
May 31, 2026
6d7eb6a
Merge branch 'jr2804/feature/p56-bitdepth-extension' into STL_2026_it…
May 31, 2026
047c985
Remove stale uvselp verify tests and arm64 refs
May 31, 2026
45e4ce6
Revert test_precision.c fopen to 'w' mode (matches ctest-portability …
May 31, 2026
2da5825
Fix basop test_precision.c: use unsigned int for 32-bit hex output
May 31, 2026
1e9aa7d
Fix printf format warnings in test_precision.c
May 31, 2026
3a10410
CI: add 32-bit (gcc -m32) build and test job
May 31, 2026
4097362
CI: add i386 container and ARM32 QEMU build jobs
May 31, 2026
3c120b1
CI: fix i386 container (use QEMU) and 32-bit cmake config
May 31, 2026
01ee2fb
CI: install g++-multilib for 32-bit C++ linking
May 31, 2026
15edcc4
CI: use ubuntu:22.04 with --platform linux/386 for i386 job
May 31, 2026
fe7310d
CI: use debian:bullseye for i386 container (ubuntu lacks i386 manifests)
May 31, 2026
92a03bc
CI: suppress debconf noise and reduce install size in QEMU containers
May 31, 2026
73c8397
Remove wav-sv56 integration tests (sv56 no longer uses wav_io)
May 31, 2026
9ab2160
Remove wav-g726 tests for g726demo (expects A-law input, not PCM)
May 31, 2026
10770f3
Fix sb2 test: add dependency on sb1 (needs bytswpd.tst created first)
May 31, 2026
0d63e4b
CI: remove Release config from Windows build (use default Debug)
May 31, 2026
f1b2c9e
CI: revert Windows to Release config (Debug too slow)
May 31, 2026
2e2ef6b
Fix sb tests: add WORKING_DIRECTORY and proper dependency chain
May 31, 2026
8ecdda3
Fix sb tests: use absolute paths for Windows compatibility
May 31, 2026
9c582f4
Fix sb tests: write output to build dir (source tree may be read-only)
May 31, 2026
b2db4d4
additional updates to documentation
May 31, 2026
4e76389
Fix sb tests: use FIXTURES chain to enforce sequential execution
May 31, 2026
d760b3d
Fix sb tests: add RESOURCE_LOCK to prevent file access race on Windows
May 31, 2026
597dc44
Debug sb2: add sha256sum check before sb2 to verify file exists
May 31, 2026
5d72dd4
Fix sb -over: create temp file in same directory as input
May 31, 2026
9324aec
Fix sb -over: create temp file in same directory as input
May 31, 2026
2135108
CI: increase i386 container timeout to 45min (QEMU is slow)
May 31, 2026
8cf7517
CI: add -msse2 -mfpmath=sse to 32-bit builds (match 64-bit FP results)
May 31, 2026
341dd07
CI: fix quoting of 32-bit cmake flags
May 31, 2026
992d3c0
Fix sv56test verify: use CRLF-tolerant text comparison
May 31, 2026
1b80306
Fix sb tests: output to build dir, fixture chain, resource lock
May 31, 2026
f396042
CI: install python3 in QEMU containers (needed for wmc_tool tests)
May 31, 2026
11afdd4
Fix wmc_tool tests: expand globs explicitly for container compatibility
May 31, 2026
4936be7
Fix g726-vbr verify tests: use signal-diff with 1-LSB tolerance
May 31, 2026
d440915
Fix wmc_tool and g726-vbr tests for cross-platform compatibility
May 31, 2026
aed8a67
CI: skip wmc_tool glob tests in QEMU containers (shell expansion issue)
May 31, 2026
26a6db1
Debug: print wmc_tool test script arguments to diagnose container fai…
May 31, 2026
1c16a0d
CI: remove test exclusions from QEMU containers (run all tests)
May 31, 2026
ae18fd1
Add GitHub Actions CI with big-endian (s390x) testing
May 31, 2026
6b2354c
CI: switch s390x to cross-compile + QEMU emulator for tests
Jun 1, 2026
853c1b8
CI: use static linking for s390x to avoid missing dynamic linker
Jun 1, 2026
32ea343
Integrate dlyerr_2_errpat into src/eid/ (from PR #180)
Jun 2, 2026
c00ff7a
Integrate eid-amr into src/eid/ with softbit (from PR #188)
Jun 2, 2026
cda4d73
Add SHQ2/SHQ3 and HP50 filters to FIR module (from PR #188)
Jun 2, 2026
264a72c
Add EID-AMR section to STL manual (doc/manual/eid.tex)
Jun 2, 2026
588aa3f
Add EID-AMR section to STL manual (doc/manual/eid.tex)
Jun 2, 2026
066d322
Add dlyerr_2_errpat documentation (README + LaTeX manual)
Jun 2, 2026
5d1d5a7
Use softbit save_g192/save_byte for G.192 output in dlyerr_2_errpat
Jun 2, 2026
af16c0f
Fix documentation and build issues in FIR filter additions
Jun 2, 2026
1c2b8c2
Add comprehensive manual documentation for random tool
Jun 2, 2026
a454ec9
doc(sv56): update manual for arbitrary bit depth support
May 27, 2026
8667c9b
Merge branch 'fix/add-ci' into STL_2026_itu_submission
Jun 2, 2026
2d3cb33
Merge branch 'fix/ctest-portability' into STL_2026_itu_submission
Jun 2, 2026
4a9c069
Merge branch 'sv56_integration' into STL_2026_itu_submission
Jun 2, 2026
929e116
Merge branch 'PR182' into STL_2026_itu_submission
Jun 2, 2026
124e785
Merge branch 'pr180' into STL_2026_itu_submission
Jun 2, 2026
ee57df8
Merge branch 'pr188' into STL_2026_itu_submission
Jun 2, 2026
9fea132
Fix LaTeX build: replace \text{} with \mathrm{} in unsup.tex
Jun 2, 2026
8e00889
Fix LaTeX build: replace \mod with \bmod in unsup.tex
Jun 2, 2026
482b945
Fix Windows CRLF test failure: use compare_files --ignore-eol for tex…
Jun 2, 2026
f706f6c
Merge branch 'pr180' into STL_2026_itu_submission
Jun 2, 2026
042e132
CI: restore s390x (big-endian) and i386 (32-bit) jobs
Jun 3, 2026
264f374
Add comprehensive manual documentation for random tool
Jun 2, 2026
37c08f2
Fix LaTeX build: replace \text{} with \mathrm{} in unsup.tex
Jun 2, 2026
14dfbde
Fix LaTeX build: replace \mod with \bmod in unsup.tex
Jun 2, 2026
c3366df
CI: add python3 to i386 container (needed for wmc_tool tests)
Jun 3, 2026
2b95914
CI: restore 32-bit gcc (-m32) build job
Jun 3, 2026
00217b9
Merge branch 'dev' into pr188
ragotsa Jun 3, 2026
aa2c020
Merge pull request #1 from ludomal/pr188
ragotsa Jun 3, 2026
f34b9bd
Merge branch 'dev' into pr188_fir
ragotsa Jun 3, 2026
2c11ccb
Merge pull request #2 from ludomal/pr188_fir
ragotsa Jun 3, 2026
e82db9d
Revert "Proposed improvements to eid-amr"
ragotsa Jun 3, 2026
ca456f4
Merge pull request #3 from ragotsa/revert-1-pr188
ragotsa Jun 3, 2026
e85e021
accepted updates to EID
Jun 3, 2026
76b33b5
Merge branch 'pr188' into STL_2026_itu_submission
Jun 4, 2026
3351935
feat(sv56): re-integrate WAV I/O with multi-bit-depth support
Jun 4, 2026
4ed394e
Merge branch 'sv56_wavio' into STL2026_sv56_wavio
Jun 4, 2026
276f35e
ci: trigger CI
Jun 4, 2026
f46e277
ci: add STL_2026_itu_submission to pull_request triggers
Jun 4, 2026
559b282
fix(cmake): remove reference to non-existent src/eid-amr
Jun 4, 2026
1546c70
fix(test): use CRLF-tolerant text comparison for log verify tests
Jun 4, 2026
1dd843d
fix(test): use CRLF-tolerant text comparison for log verify tests
Jun 4, 2026
cb2301d
doc(sv56): update README with WAV support and bit-depth comparison
Jun 4, 2026
bcaf5b6
Merge branch 'sv56_wavio' into STL2026_sv56_wavio
Jun 4, 2026
1328b94
Merge branch 'random-s4-121078' into PR182
sdoehla-iis Jun 4, 2026
85cfd61
Merge pull request #2 from ludomal/PR182
sdoehla-iis Jun 4, 2026
c1bfec2
test(sv56): add 12-bit test cases for bitno backward compatibility
Jun 5, 2026
4a1c219
refactor(sv56): remove sv56-util.h, use wav_io.h in actlevel.c
Jun 8, 2026
35f0e8d
Merge branch 'sv56_wavio' into STL2026_sv56_wavio
Jun 8, 2026
2005e30
Merge branch 'sdoehla-random' into STL_2026_itu_submission
Jun 8, 2026
a251fc8
Remove stale add_subdirectory(src/eid-amr) from root CMakeLists.txt
Jun 8, 2026
f1a3a92
Merge branch 'STL_2026_itu_submission' into STL2026_sv56_wavio
Jun 8, 2026
dd3d3b9
doc: update documentation for STL2026
Jun 8, 2026
563c75d
ci: retrigger CI
Jun 8, 2026
6d30df8
Merge branch 'openitu-dev' into STL2026_sv56_wavio
Jun 8, 2026
e21ef21
fix: resolve merge conflict marker in CMakeLists.txt
Jun 8, 2026
10c4350
fix(test): add -equiv 1 tolerance to HP50 filter verify tests
Jun 8, 2026
7beddfe
fix(test): skip wmc_tool Python tests when Python3 not available
Jun 8, 2026
3352078
Merge pull request #1 from ludomal/sv56_wavio
jr2804 Jun 9, 2026
98d1e36
fix: initialize reltol in compfile.c (pre-existing MSVC crash)
Jun 9, 2026
7905106
Merge branch 'fix/ctest-portability' into STL2026_sv56_wavio
Jun 9, 2026
a208e84
fix(test): add -equiv 1 tolerance to p50fbmnru overflow clipping test
Jun 9, 2026
18f0d87
Merge branch 'fix/ctest-portability' into STL2026_sv56_wavio
Jun 9, 2026
1524d6a
ci: enable MSVC C4700 as error (uninitialized variable use)
Jun 9, 2026
a744e71
fix(test): use signal-diff instead of cf for overflow tolerance test
Jun 9, 2026
84835f4
ci: apply /we4700 only to C (not C++) to avoid wmc_tool issues
Jun 9, 2026
1042ae7
fix: initialize uninitialized variables in wmc_tool c_parser.cpp
Jun 9, 2026
2f6150e
ci: re-enable /we4700 for C++ (wmc_tool uninit vars now fixed)
Jun 9, 2026
f5e49bd
✨ feat(wav_io): add support for 8/16/24/32-bit PCM and 32-bit float WAV
Jun 9, 2026
1e1056a
🐛 fix(wav_io): correct bps check for 8-bit samples (not 1-bit!)
Jun 9, 2026
a06c21d
ci: keep /we4700 only for C on Windows
Jun 9, 2026
545c35e
feat(sv56): update actlev for 24/32-bit WAV support
Jun 9, 2026
b2cbeca
Merge pull request #2 from ludomal/sv56_wavio
jr2804 Jun 9, 2026
9b48cb6
Merge branch 'feature/p56-bitdepth-extension' of https://github.com/j…
Jun 9, 2026
0dbc803
Merge branch 'sv56_wavio' into STL2026_sv56_wavio
Jun 10, 2026
170f12f
fix: initialize uninitialized variables caught by Memory Sanitizer
Jun 10, 2026
743326c
fix: initialize uninitialized variables (MSan-verified)
Jun 10, 2026
e787eca
Merge branch 'fix/uninit-variables' into STL2026_sv56_wavio
Jun 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Binary test data files - prevent CRLF corruption
src/unsup/test_data/cftest1.dat binary
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on:
push:
branches: [dev, main, STL_2026_itu_submission]
pull_request:
branches: [dev, main]
branches: [dev, main, STL_2026_itu_submission]

jobs:
build-and-test:
Expand Down Expand Up @@ -58,7 +58,7 @@ jobs:
run: |
# Exclude build directory from Windows Defender to avoid scan delays
powershell -Command "Add-MpPreference -ExclusionPath '${{ github.workspace }}'"
cmake .
cmake . -DCMAKE_C_FLAGS="/we4700"

- name: Build (Unix)
if: runner.os != 'Windows'
Expand Down
7 changes: 5 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,6 @@ src/is54/test_data/voice.bec
src/is54/test_data/voice.hbs
!src/is54/test_data/voice.log
src/is54/test_data/voice.rek
src/sv56/test_data/voice.prc
src/sv56/test_data/voice.rms
src/unsup/test_data/astrip.blk
src/unsup/test_data/undo.txt
src/utl/test_data/voice.rnp
Expand Down Expand Up @@ -97,3 +95,8 @@ bld/
.vs/
*vcxproj*
*.sln*
.vscode/
/build
*.double
stderr.txt
stdout.txt
8 changes: 5 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
cmake_minimum_required(VERSION 3.1)
project(STL2023 VERSION 2023)
add_definitions( -DVERSION_STL="${CMAKE_PROJECT_NAME}" )
cmake_minimum_required(VERSION 3.10...3.31)
project(STL2026 VERSION 2026)

add_definitions( -DVERSION_STL="${CMAKE_PROJECT_NAME}" -DCMAKE_POLICY_VERSION_MINIMUM=3.5 )

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

Expand All @@ -24,6 +25,7 @@ add_subdirectory(src/eid)
add_subdirectory(src/esdru)
add_subdirectory(src/fir)
add_subdirectory(src/freqresp)
add_subdirectory(src/gain_chk)
add_subdirectory(src/g711)
add_subdirectory(src/g711iplc)
add_subdirectory(src/g722)
Expand Down
25 changes: 25 additions & 0 deletions cmake/CompareTextFiles.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# cmake/CompareTextFiles.cmake
# Compare two text files, ignoring line-ending differences (CRLF vs LF).
#
# Usage (from a -P script):
# include(/path/to/CompareTextFiles.cmake)
# compare_text_files(GOT <file> EXPECTED <file> [LABEL <name>])

function(compare_text_files)
cmake_parse_arguments(_CTF "" "GOT;EXPECTED;LABEL" "" ${ARGN})

file(READ "${_CTF_GOT}" _got)
string(REPLACE "\r\n" "\n" _got "${_got}")

file(READ "${_CTF_EXPECTED}" _want)
string(REPLACE "\r\n" "\n" _want "${_want}")

if(NOT _got STREQUAL _want)
message(FATAL_ERROR "Text file mismatch: ${_CTF_LABEL}\n--- got ---\n${_got}\n--- expected ---\n${_want}")
endif()
endfunction()

# Auto-invoke when called via cmake -P with -D variables
if(DEFINED GOT AND DEFINED EXPECTED)
compare_text_files(GOT "${GOT}" EXPECTED "${EXPECTED}" LABEL "${LABEL}")
endif()
22 changes: 9 additions & 13 deletions doc/g191.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,27 +12,23 @@ Please refer to the official Recommendation ITU-T G.191 for the complete text: [

Recommendation ITU-T G.191 provides source code for speech and audio processing modules for narrowband, wideband and super-wideband telephony applications. The set includes codecs, filters, noise generators.

This edition introduces changes to Annex A, which describes the ITU-T Software Tools (STL) containing a high-quality, portable C code library for speech processing applications. This release of the STL, also known as STL2024, incorporates:
This edition introduces changes to Annex A, which describes the ITU-T Software Tools (STL) containing a high-quality, portable C code library for speech processing applications. This release of the STL, also known as STL2026, incorporates:

* BS1770demo improvements:
* WAV file I/O support with multi-bit-depth (16/24/32-bit) processing for all tools

- a new RMS option disabling the gating function for background noise measurement,
* Extensions to the speech voltmeter (sv56) for arbitrary bit-depth processing

- the handling of the edge case where all gating blacks are below -70 LKFS,
* A delay-and-error profile to frame-erasure pattern conversion tool (dlyerr\_2\_errpat) for jitter buffer emulation (3GPP S4-121077)

- improved reporting with scaling factor being reported in the linear and log domains.
* An EID for 3GPP AMR bitstreams (eid-amr)

* WMC Tool updates:
* A pseudo-random selection tool (random) for EVS processing scripts (3GPP S4-121078)

- New command line parameter to allow control on the number of frames per second (default still 50)
* SHQ2/SHQ3 half-band and HP50 high-pass FIR filters

- Export information on all memory allocations occurring during runtime

- Example script for graphical analysis and profiling of dymanic memory allocation
* Cross-platform portability fixes with expanded CTest regression coverage

- Bugs fixes and code improvements

Recommendation ITU-T G.191 includes an electronic attachment containing STL2024 and manual.
Recommendation ITU-T G.191 includes an electronic attachment containing STL2026 and manual.

## Keywords

Expand Down
27 changes: 27 additions & 0 deletions doc/g191_Annex_A.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ The following programs are examples of the use of the modules:
| `stereoop.c` | on the use of stereo file operations. |
| `esdru.c` | on the use of energy-based spatial distortion reference unit [ITU-T P.811]. |
| `wmc_tool.cpp` | on the use of WMC tool for speech and audio codecs complexity and memory measurement. |
| `dlyerr_2_errpat.c` | on the use of the delay/error profile to frame-erasure pattern conversion tool for jitter buffer emulation. |
| `eid-amr.c` | on the use of the EID for 3GPP AMR codec frame erasure simulation using G.192 error patterns. |
| `random.c` | on the use of the pseudo-random selection tool for deterministic item selection or range drawing. |
||


Expand Down Expand Up @@ -85,6 +88,12 @@ The functions included are as follows:
| `LP12_48kHz_init` | initialize a low-pass filter with a cut-off frequency of 12 kHz at (48-kHz sampling). |
| `LP14_48kHz_init` | initialize a low-pass filter with a cut-off frequency of 14 kHz at 48-kHz sampling). |
| `LP20_48kHz_init` | initialize a low-pass filter with a cut-off frequency of 20 kHz (48-kHz sampling). |
| `shq_up_1_to_2_init` | initialize 1:2 SHQ half-band up-sampling filter. |
| `shq_up_1_to_3_init` | initialize 1:3 SHQ up-sampling filter. |
| `shq_down_2_to_1_init` | initialize 2:1 SHQ half-band down-sampling filter. |
| `shq_down_3_to_1_init` | initialize 3:1 SHQ down-sampling filter. |
| `hp50_32khz_init` | initialize 50-Hz high-pass filter (32-kHz sampling). |
| `hp50_48khz_init` | initialize 50-Hz high-pass filter (48-kHz sampling). |
| `hq_kernel` | FIR filtering function. |
| `hq_reset` | clear state variables. |
| `hq_free` | deallocate FIR-filter memory. |
Expand Down Expand Up @@ -710,4 +719,22 @@ The main program for WMC Tool. Depends on:
`wmc_auto_c.txt` Auto-generated C source file for inclusion in projects.
------------------------------------------------------------------------------------------

## u) Delay/error profile to frame-erasure pattern conversion

Name: `dlyerr_2_errpat.c`

Converts a delay-and-error profile (one entry per packet with network delay in ms and a loss flag) into a frame-erasure error pattern suitable for use with the `eid-xor` tool. Supports fixed-delay and bounded-loss-rate jitter buffer emulation modes. Output formats include G.192 word, G.192 byte, and text.

## v) EID for 3GPP AMR codec

Name: `eid-amr.c`

Applies G.192 frame erasure patterns to 3GPP AMR bitstreams. The standard `eid-xor` tool cannot be used directly with AMR because the AMR bitstream follows the ETSI/3GPP format rather than ITU-T G.192. Lost frames are signalled with frame type NO\_DATA and all data bits are forced to zero.

## w) Pseudo-random selection tool

Name: `random.c`

Provides deterministic pseudo-random selection of items from a list or drawing of integers from a numeric range. Uses the EID linear congruential generator for cross-platform reproducibility. Supports configurable seed, dummy pre-runs, and multi-item selection.

-=Pagebreak=-
2 changes: 1 addition & 1 deletion doc/manual/Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
BIBTEX = bibtex
PDFLATEX = pdflatex

PARTS = STLmanual.tex intro.tex g711.tex g711iplc.tex g726.tex g727.tex g728.tex g722.tex rpe.tex rate.tex eid.tex mnru.tex sv56.tex reverb.tex truncate.tex freqresp.tex stereoop.tex esdru.tex bs1770demo.tex basop.tex utl.tex wmc_tool.tex
PARTS = STLmanual.tex intro.tex g711.tex g711iplc.tex g726.tex g727.tex g728.tex g722.tex rpe.tex rate.tex eid.tex mnru.tex sv56.tex reverb.tex truncate.tex freqresp.tex stereoop.tex esdru.tex bs1770demo.tex gain_chk.tex basop.tex utl.tex wmc_tool.tex

STLmanual.pdf : $(PARTS) bibliography.bib
$(PDFLATEX) $(PARTS)
Expand Down
11 changes: 8 additions & 3 deletions doc/manual/STLmanual.tex
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
\addtolength{\itemsep}{-20pt}

% Define headers
\def\ugst_title{ ITU-T Software Tool Library, release 2024}
\def\ugst_title{ ITU-T Software Tool Library, release 2026}
\def\us{$\mu$s}
\markboth{ \hspace{1cm} \hfill \ugst_title }%
{ Version: \today \hfill \hspace{1cm} }
Expand Down Expand Up @@ -61,7 +61,7 @@
\pagenumbering{roman}

%==============================================================================
\title{ITU-T Software Tool Library 2024 User's Manual}
\title{ITU-T Software Tool Library 2026 User's Manual}
\author{ITU-T Users' Group on Software Tools}

%------------------------------------------------------------------------------
Expand All @@ -71,7 +71,7 @@

\ruley{100mm}

Copyright \copyright~ 2005, 2006, 2009, 2019, 2022, 2023 and 2024 by the International
Copyright \copyright~ 2005, 2006, 2009, 2019, 2022, 2023, 2024 and 2026 by the International
Telecommunication Union (ITU)

\ruley{15mm}
Expand Down Expand Up @@ -182,6 +182,11 @@
%=============================================================================
\include{freqresp}

%=============================================================================
% chapter gain_chk: Gain amplification verification tool
%=============================================================================
\include{gain_chk}

%=============================================================================
% chapter stereoop: Stereo processing tool
%=============================================================================
Expand Down
50 changes: 25 additions & 25 deletions doc/manual/basop.tex
Original file line number Diff line number Diff line change
Expand Up @@ -1008,27 +1008,27 @@ \subsection{Variable definitions}
\subsection{Operators with complexity weight of 1}

%........................................................
\NewOperator{CL\_shr(CL\_var1, var2)}
\NewOperator{CL\_shr(CL\_var1, L\_var2)}

Arithmetically shifts right the real and imaginary parts of the 32-bit complex number CL\_var1 by var2 positions.\\
If var2 is negative, real and imaginary parts of CL\_var1 are shifted to the most significant bits by (-var2) positions with 32-bit saturation control.\\
If var2 is positive, real and imaginary parts of CL\_var1 are shifted to the least significant bits by (var2) positions with sign extension.\\
Arithmetically shifts right the real and imaginary parts of the 32-bit complex number CL\_var1 by L\_var2 positions.\\
If L\_var2 is negative, real and imaginary parts of CL\_var1 are shifted to the most significant bits by (-L\_var2) positions with 32-bit saturation control.\\
If L\_var2 is positive, real and imaginary parts of CL\_var1 are shifted to the least significant bits by (L\_var2) positions with sign extension.\\
The following code snippet describes the operations performed on real \& imaginary part of a complex number:

{\tt \rulex{5mm}CL\_result.re = L\_shr(CL\_var1.re, L\_shift\_val);\\
\rulex{5mm}CL\_result.im = L\_shr(CL\_var1.im, L\_shift\_val);\\
{\tt \rulex{5mm}CL\_result.re = L\_shr(CL\_var1.re, L\_var2);\\
\rulex{5mm}CL\_result.im = L\_shr(CL\_var1.im, L\_var2);\\
}

%........................................................
\NewOperator{CL\_shl(CL\_var1, var2)}
\NewOperator{CL\_shl(CL\_var1, L\_var2)}

Arithmetically shifts left the real and imaginary parts of the 32-bit complex number CL\_var1 by L\_shift\_val positions.\\
If var2 is negative, real and imaginary parts of CL\_var1 are shifted to the least significant bits by ( -var2 ) positions with sign extension.\\
If var2 is positive, real and imaginary parts of CL\_var1 are shifted to the most significant bits by (var2) positions with 32-bit saturation control.\\
Arithmetically shifts left the real and imaginary parts of the 32-bit complex number CL\_var1 by L\_var2 positions.\\
If L\_var2 is negative, real and imaginary parts of CL\_var1 are shifted to the least significant bits by ( -L\_var2 ) positions with sign extension.\\
If L\_var2 is positive, real and imaginary parts of CL\_var1 are shifted to the most significant bits by (L\_var2) positions with 32-bit saturation control.\\
The following code snippet describes the operations performed on real \& imaginary part of a complex number:

{\tt \rulex{5mm} CL\_result.re = L\_shl(CL\_var1.re, L\_shift\_val);\\
\rulex{5mm} CL\_result.im = L\_shl(CL\_var1.im, L\_shift\_val);
{\tt \rulex{5mm} CL\_result.re = L\_shl(CL\_var1.re, L\_var2);\\
\rulex{5mm} CL\_result.im = L\_shl(CL\_var1.im, L\_var2);
}

%........................................................
Expand Down Expand Up @@ -1503,7 +1503,7 @@ \subsection{Operators with complexity weight of 1}
Multiplies 16-bit var1 by 16-bit var2, sign extends to 64 bits; subtracts this 64 bit value from the 64 bit W\_acc without saturation control, and returns a 64 bit result.

%........................................................
\NewOperator{W\_mult\_16\_16(W\_acc, var1, var2)}
\NewOperator{W\_mult\_16\_16(var1, var2)}

\textbf{ This operator is SIMD and VLIW friendly}

Expand Down Expand Up @@ -1542,29 +1542,29 @@ \subsection{Operators with complexity weight of 1}
Deposits the 32-bit L\_var1 into the 32 MS bits of the 64-bit output. The 32 LS bits of the output are zeroed.

%........................................................
\NewOperator{W\_sat\_l(W\_v1)}
\NewOperator{W\_sat\_l(W\_var1)}

Saturates the 64-bit variable W\_v1 to 32-bit value and returns the lower 32 bits.\\
Saturates the 64-bit variable W\_var1 to 32-bit value and returns the lower 32 bits.\\
For example, a 64-bit wide accumulator is helpful in accumulating 16*16 multiplies without checking for saturation.
However, at the end of the multiply-and-accumulate loop, we need to return only the 32-bit value after checking for saturation.\\
If W\_v1 is in 33Q31 format, then the result returned will be saturated to 1Q31 format.
If W\_var1 is in 33Q31 format, then the result returned will be saturated to 1Q31 format.

%........................................................
\NewOperator{W\_sat\_m(W\_v1)}
\NewOperator{W\_sat\_m(W\_var1)}

Arithmetically shifts right the 64-bit variable W\_v1 by 16 bits; saturates the 64-bit value to 32-bit value and returns the lower 32 bits.\\
Arithmetically shifts right the 64-bit variable W\_var1 by 16 bits; saturates the 64-bit value to 32-bit value and returns the lower 32 bits.\\
For example, a 64-bit wide accumulator is helpful in accumulating 32\*16 multiplies without checking for saturation.
A 32\*16 multiply gives a 48-bit product; at the end of the multiply-and-accumulate loop, the result is in the lower 48 bits of the 64-bit accumulator.
Now an arithmetic right shift by 16 bits will drop the LSB 16 bits.
Now we should check for saturation and return the lower 32 bits.\\
If W\_var is in 17Q47 format, then the result returned will be saturated to 1Q31 format.
If W\_var1 is in 17Q47 format, then the result returned will be saturated to 1Q31 format.

%........................................................
\NewOperator{W\_shl\_sat\_l(W\_1, var1)}
\NewOperator{W\_shl\_sat\_l(W\_var1, L\_var2)}

Arithmetically shifts left the 64-bit W\_v1 by v1 positions with lower 32-bit saturation and returns the 32 LSB of 64-bit result.\\
If v1 is negative, the result is shifted to right by (-var1) positions and sign extended.
After shift operation, returns the 32 MSB of 64-bit result.
Arithmetically shifts left the 64-bit W\_var1 by L\_var2 positions with lower 32-bit saturation and returns the 32 LSB of 64-bit result.\\
If L\_var2 is negative, the result is shifted to right by (-L\_var2) positions and sign extended.
After shift operation, returns the 32 LSB of 64-bit result.

%........................................................
\NewOperator{W\_extract\_l(W\_var1)}
Expand Down Expand Up @@ -1611,7 +1611,7 @@ \subsection{Operators with complexity weight of 1}
%........................................................
\NewOperator{W\_neg(W\_var1)}

Negates a 64-bit variables W\_var1 with 64-bit saturation control.
Negates the 64-bit variable W\_var1 with 64-bit saturation control.
Set overflow flag. Returns 64-bit result.

%........................................................
Expand Down Expand Up @@ -1713,7 +1713,7 @@ \subsection{Operators}
Returns the 32 MSB of the 64-bit result after truncating of the lower 32 bits.
The operation is performed in fractional mode.

For example, if L\_var1 is in 1Q31 format and var2 is in 1Q31 format, then the product is produced in 1Q63 format which is then truncated, saturated, and returned in 1Q31 format.
For example, if L\_var1 is in 1Q31 format and L\_var2 is in 1Q31 format, then the product is produced in 1Q63 format which is then truncated, saturated, and returned in 1Q31 format.

The following code snippet describes the operations performed:

Expand Down
Loading
Loading