aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntoine SOULIER <asoulier@google.com>2024-04-19 22:26:09 +0000
committerAntoine SOULIER <asoulier@google.com>2024-04-19 22:27:02 +0000
commit14b520ba8456d59b5c025a09bc36b28fbc7a6f0e (patch)
treefeb02f7c8c2d7ee6bb71744c562b1e236f8e1d5b
parent0f952b34e098b9f8fd17fd861b465be6b06b5eb6 (diff)
parent73bbc00245d9874ef3e8bc8ef6476e6fee9f42aa (diff)
downloadliblc3-14b520ba8456d59b5c025a09bc36b28fbc7a6f0e.tar.gz
Merge remote-tracking branch 'aosp/upstream-main' into liblc3
Change-Id: I49a76c30f75233fbb4c48ab3a0782d7d9f1e9855
-rw-r--r--.gitattributes1
-rw-r--r--.github/workflows/ci.yaml93
-rw-r--r--.gitignore1
-rw-r--r--METADATA4
-rw-r--r--Makefile41
-rw-r--r--README.md77
-rw-r--r--conformance/README.md48
-rw-r--r--conformance/lc3plus_decode.html232
-rw-r--r--conformance/lc3plus_encdec.html173
-rw-r--r--conformance/lc3plus_encode.html173
-rw-r--r--conformance/lc3plus_hr_decode.html107
-rw-r--r--conformance/lc3plus_hr_encdec.html71
-rw-r--r--conformance/lc3plus_hr_encode.html107
-rw-r--r--conformance/lc3plus_hr_fallback.html338
-rw-r--r--conformance/lc3plus_hr_precision.html6
-rw-r--r--conformance/music_decode_10m.html31
-rw-r--r--conformance/music_decode_7m5.html31
-rw-r--r--conformance/music_encdec_10m.html42
-rw-r--r--conformance/music_encdec_7m5.html42
-rw-r--r--conformance/music_encode_10m.html42
-rw-r--r--conformance/music_encode_7m5.html42
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_48kHz_300.0kbps.pngbin0 -> 43050 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_48kHz_500.0kbps.pngbin0 -> 48148 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_96kHz_300.0kbps.pngbin0 -> 43218 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_96kHz_500.0kbps.pngbin0 -> 44466 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_48kHz_400.0kbps.pngbin0 -> 39724 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_48kHz_672.0kbps.pngbin0 -> 41347 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_96kHz_400.0kbps.pngbin0 -> 38662 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_96kHz_672.0kbps.pngbin0 -> 35807 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_48kHz_400.0kbps.pngbin0 -> 35261 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_48kHz_600.0kbps.pngbin0 -> 35033 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_96kHz_400.0kbps.pngbin0 -> 41019 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_96kHz_600.0kbps.pngbin0 -> 40978 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_48kHz_300.0kbps.pngbin0 -> 34594 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_48kHz_500.0kbps.pngbin0 -> 36718 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_96kHz_300.0kbps.pngbin0 -> 36504 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_96kHz_500.0kbps.pngbin0 -> 33514 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_48kHz_400.0kbps.pngbin0 -> 33019 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_48kHz_672.0kbps.pngbin0 -> 33874 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_96kHz_400.0kbps.pngbin0 -> 36246 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_96kHz_672.0kbps.pngbin0 -> 32133 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_48kHz_400.0kbps.pngbin0 -> 33083 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_48kHz_600.0kbps.pngbin0 -> 34833 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_96kHz_400.0kbps.pngbin0 -> 35200 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_96kHz_600.0kbps.pngbin0 -> 34285 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_48kHz_300.0kbps.pngbin0 -> 38827 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_48kHz_500.0kbps.pngbin0 -> 42571 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_96kHz_300.0kbps.pngbin0 -> 39147 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_96kHz_500.0kbps.pngbin0 -> 43257 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_48kHz_400.0kbps.pngbin0 -> 35604 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_48kHz_672.0kbps.pngbin0 -> 41423 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_96kHz_400.0kbps.pngbin0 -> 36192 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_96kHz_672.0kbps.pngbin0 -> 39566 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_48kHz_400.0kbps.pngbin0 -> 34667 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_48kHz_600.0kbps.pngbin0 -> 38749 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_96kHz_400.0kbps.pngbin0 -> 38242 bytes
-rw-r--r--conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_96kHz_600.0kbps.pngbin0 -> 42410 bytes
-rw-r--r--conformance/speech_decode_10m.html40
-rw-r--r--conformance/speech_decode_7m5.html49
-rw-r--r--conformance/speech_encdec_10m.html49
-rw-r--r--conformance/speech_encdec_7m5.html58
-rw-r--r--conformance/speech_encode_10m.html49
-rw-r--r--conformance/speech_encode_7m5.html58
-rw-r--r--fuzz/dfuzz.cc9
-rw-r--r--fuzz/efuzz.cc5
-rw-r--r--fuzz/makefile.mk12
-rw-r--r--include/lc3.h230
-rw-r--r--include/lc3_cpp.h143
-rw-r--r--include/lc3_private.h68
-rw-r--r--meson.build14
-rw-r--r--meson_options.txt5
-rw-r--r--pyproject.toml19
-rw-r--r--python/LICENSE202
-rw-r--r--python/lc3.py400
-rw-r--r--python/meson.build3
-rwxr-xr-xpython/tools/decoder.py96
-rwxr-xr-xpython/tools/encoder.py88
-rwxr-xr-xpython/tools/specgram.py92
-rw-r--r--src/attdet.c12
-rw-r--r--src/attdet.h7
-rw-r--r--src/bits.h6
-rw-r--r--src/bwdet.c67
-rw-r--r--src/bwdet.h9
-rw-r--r--src/common.h75
-rw-r--r--src/energy.c30
-rw-r--r--src/energy.h7
-rw-r--r--src/fastmath.h116
-rw-r--r--src/lc3.c278
-rw-r--r--src/ltpf.c137
-rw-r--r--src/ltpf.h7
-rw-r--r--src/mdct.c44
-rw-r--r--src/mdct.h17
-rw-r--r--src/meson.build1
-rw-r--r--src/plc.c3
-rw-r--r--src/plc.h7
-rw-r--r--src/sns.c287
-rw-r--r--src/sns.h11
-rw-r--r--src/spec.c444
-rw-r--r--src/spec.h36
-rw-r--r--src/tables.c3413
-rw-r--r--src/tables.h71
-rw-r--r--src/tns.c181
-rw-r--r--src/tns.h10
-rwxr-xr-xtables/fastmath.py24
-rwxr-xr-xtables/mktables.py31
-rw-r--r--test/attdet.py28
-rw-r--r--test/attdet_py.c2
-rw-r--r--test/bwdet.py18
-rw-r--r--test/bwdet_py.c6
-rw-r--r--test/ctypes.h28
-rw-r--r--[-rwxr-xr-x]test/decoder.py94
-rw-r--r--[-rwxr-xr-x]test/encoder.py99
-rw-r--r--test/energy.py24
-rw-r--r--test/energy_py.c8
-rw-r--r--test/lc3_py.c4
-rw-r--r--test/ltpf.py133
-rw-r--r--test/ltpf_py.c8
-rw-r--r--test/mdct.py58
-rw-r--r--test/mdct_py.c22
-rwxr-xr-xtest/setup.py3
-rw-r--r--test/sns.py263
-rw-r--r--test/sns_py.c40
-rw-r--r--test/spec.py285
-rw-r--r--test/spec_py.c132
-rw-r--r--test/tables.py2913
-rw-r--r--test/tns.py197
-rw-r--r--test/tns_py.c48
-rw-r--r--tools/dlc3.c77
-rw-r--r--tools/elc3.c79
-rw-r--r--tools/lc3bin.c42
-rw-r--r--tools/lc3bin.h18
-rw-r--r--tools/makefile.mk10
-rw-r--r--tools/meson.build6
-rw-r--r--tools/wave.c16
-rw-r--r--wasm/math.h37
-rw-r--r--wasm/string.h28
136 files changed, 10638 insertions, 2810 deletions
diff --git a/.gitattributes b/.gitattributes
index 0a6129d..09c2594 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1 +1,2 @@
+conformance/* linguist-detectable=false
test/* linguist-detectable=false
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
new file mode 100644
index 0000000..7938dbf
--- /dev/null
+++ b/.github/workflows/ci.yaml
@@ -0,0 +1,93 @@
+name: CI
+
+on:
+ push:
+ branches: [ main ]
+ pull_request:
+ branches: [ main ]
+
+jobs:
+ build-linux:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - run: gcc -v
+ - run: make
+
+ build-linux-meson:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
+ with:
+ python-version: '3.10'
+ cache: 'pip'
+ - run: pip install meson ninja
+ - run: gcc -v
+ - run: meson setup builddir/
+ env:
+ CC: gcc
+ - run: meson compile -C builddir/
+
+ build-macos-meson:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
+ with:
+ python-version: '3.10'
+ cache: 'pip'
+ - run: pip install meson ninja
+ - run: clang -v
+ - run: meson setup builddir/
+ env:
+ CC: clang
+ - run: meson compile -C builddir/
+
+ build-msvc-meson:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
+ with:
+ python-version: '3.10'
+ cache: 'pip'
+ - run: pip install meson ninja
+ - uses: TheMrMilchmann/setup-msvc-dev@v3
+ with:
+ arch: x64
+ - run: meson setup builddir
+ - run: meson compile -C builddir
+
+ build-wasm:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - run: clang -v
+ - run: make CC="clang --target=wasm32"
+ - uses: actions/upload-artifact@v4
+ with:
+ name: liblc3.wasm
+ path: bin/liblc3.wasm
+
+ test-linux:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
+ with:
+ python-version: '3.10'
+ cache: 'pip'
+ - run: pip install scipy numpy
+ - run: gcc -v
+ - run: make test
+
+ install-python-linux:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
+ with:
+ python-version: '3.10'
+ cache: 'pip'
+ - run: pip install .
diff --git a/.gitignore b/.gitignore
index fa2a190..ec11a96 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
.*
!.gitignore
+!.github
bin
build
test/build
diff --git a/METADATA b/METADATA
index 8bd22a4..a920a23 100644
--- a/METADATA
+++ b/METADATA
@@ -11,7 +11,7 @@ third_party {
type: GIT
value: "https://github.com/google/liblc3"
}
- version: "v1.0.4"
- last_upgrade_date { year: 2023 month: 8 day: 4 }
+ version: "v1.1.1"
+ last_upgrade_date { year: 2024 month: 4 day: 19 }
license_type: NOTICE
}
diff --git a/Makefile b/Makefile
index e9c2988..50100bc 100644
--- a/Makefile
+++ b/Makefile
@@ -28,9 +28,31 @@ CC := $(if $(CC)=cc,gcc,$(CC))
AS := $(if $(AS)=as,$(CC),$(AS))
LD := $(if $(LD)=ld,$(CC),$(LD))
-CFLAGS := $(if $(DEBUG),-O0 -g,-O3)
+CFLAGS := $(if $(DEBUG),-O0 -g,-O3)
+LDFLAGS := $(if $(DEBUG),-O0 -g,-O3)
+
CFLAGS += -std=c11 -Wall -Wextra -Wdouble-promotion -Wvla -pedantic
+TARGET = $(lastword $(shell $(CC) -v 2>&1 | grep "Target: "))
+
+LIB_SHARED := true
+LIB_SUFFIX := so
+
+ifeq ($(TARGET),wasm32)
+ LIB_SHARED := false
+ LIB_SUFFIX := wasm
+ CFLAGS += -Iwasm -mbulk-memory
+ LDFLAGS += -nostdlib -Wl,--no-entry -Wl,--export-dynamic
+endif
+
+ifneq ($(LC3_PLUS),)
+ DEFINE += LC3_PLUS=$(LC3_PLUS)
+endif
+
+ifneq ($(LC3_PLUS_HR),)
+ DEFINE += LC3_PLUS_HR=$(LC3_PLUS_HR)
+endif
+
#
# Declarations
@@ -40,7 +62,7 @@ lib_list :=
bin_list :=
define add-lib
- $(eval $(1)_bin ?= $(1).a)
+ $(eval $(1)_bin ?= $(1).$(LIB_SUFFIX))
$(eval $(1)_bin := $(addprefix $(BIN_DIR)/,$($(1)_bin)))
lib_list += $(1)
@@ -64,7 +86,6 @@ define set-target
$(patsubst %.s,%.o,$(filter %.s,$($(1)_src))) \
$(patsubst %.cc,%.o,$(filter %.cc,$($(1)_src))))
$(eval $(1)_obj := $(addprefix $(BUILD_DIR)/,$($(1)_obj)))
- $(eval $(1)_lib := $(foreach lib, $($(1)_lib), $($(lib)_bin)))
$($(1)_obj): INCLUDE += $($(1)_include)
$($(1)_obj): DEFINE += $($(1)_define)
@@ -73,7 +94,6 @@ define set-target
-include $($(1)_obj:.o=.d)
- $($(1)_bin): $($(1)_lib)
$($(1)_bin): $($(1)_obj)
$($(1)_bin): $($(1)_dependencies)
@@ -130,16 +150,21 @@ $(BUILD_DIR)/%.o: %.cc $(MAKEFILE_DEPS)
$(addprefix -I,$(INCLUDE)) \
$(addprefix -D,$(DEFINE)) -MMD -MF $(@:.o=.d) -o $@
+ifeq ($(LIB_SHARED),true)
+ $(LIB): CFLAGS += -fvisibility=hidden -flto -fPIC
+ $(LIB): LDFLAGS += -flto -shared
+endif
+
$(LIB): $(MAKEFILE_DEPS)
- @echo " AR $(notdir $@)"
+ @echo " LD $(notdir $@)"
$(V)mkdir -p $(dir $@)
- $(V)$(AR) rcs $@ $(filter %.o,$^)
+ $(V)$(LD) $(filter %.o,$^) $(LDFLAGS) -o $@
$(BIN): $(MAKEFILE_DEPS)
@echo " LD $(notdir $@)"
$(V)mkdir -p $(dir $@)
- $(V)$(LD) $(filter %.o,$^) $(filter %.a,$^) $(LDFLAGS) \
- $(addprefix -l,$(LDLIBS)) -o $@
+ $(V)$(LD) $(filter %.o,$^) \
+ $(LDFLAGS) -L $(BIN_DIR) $(addprefix -l,$(LDLIBS)) -o $@
clean:
$(V)rm -rf $(BUILD_DIR)
diff --git a/README.md b/README.md
index 0a97ab7..6cb2a7e 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,15 @@
# Low Complexity Communication Codec (LC3)
-The LC3 is an efficient low latency audio codec.
+LC3 and LC3 Plus are audio codecs designed for low-latency audio transport.
-[_Low Complexity Communication Codec_](https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=502107&vId=542963)
+- LC3 is specified by [_the Bluetooth Special Interset Group for the LE Audio
+ protocol_](https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=502107&vId=542963)
+
+- LC3 Plus is defined by [_ETSI TS 103 634_](https://www.etsi.org/deliver/etsi_ts/103600_103699/103634/01.04.01_60/ts_103634v010401p.pdf)
+
+In addition to LC3, following features of LC3 Plus are proposed:
+- Frame duration of 2.5 and 5ms.
+- High-Resolution mode, 48 KHz, and 96 kHz sampling rates.
## Overview
@@ -10,7 +17,8 @@ The directory layout is as follows :
- include: Library interface
- src: Source files
- tools: Standalone encoder/decoder tools
-- test: Python implentation, used as reference for unit testing
+- python: Python wrapper
+- test: Unit testing framework
- fuzz: Roundtrip fuzz testing harness
- build: Building outputs
- bin: Compilation output
@@ -23,7 +31,17 @@ The default toolchain used is GCC. Invoke `make` to build the library.
$ make -j
```
-Compiled library `liblc3.a` will be found in `bin` directory.
+Compiled library `liblc3.so` will be found in `bin` directory.
+
+LC3 Plus features can be selectively disabled :
+- `LC3_PLUS=0` disable the support of 2.5ms and 5ms frame durations.
+- `LC3_PLUS_HR=0` turns off the support of the High-Resolution mode.
+
+Only Bluetooth LC3 features will be included using the following command:
+
+```sh
+$ make LC3_PLUS=0 LC3_PLUS_HR=0 -j
+```
#### Cross compilation
@@ -43,9 +61,23 @@ $ make -j CC=path_to_android_ndk_prebuilt/toolchain-prefix-clang LIBC=bionic
Compiled library will be found in `bin` directory.
+#### Web Assembly (WASM)
+
+Web assembly compilation is supported using LLVM WebAssembly backend.
+Installation of LLVM compiler and linker is needed:
+
+```sh
+# apt install clang lld
+```
+
+The webasm object is compiled using:
+```sh
+$ make CC="clang --target=wasm32"
+```
+
## Tools
-Tools can be all compiled, while involking `make` as follows :
+Tools can be all compiled, while invoking `make` as follows :
```sh
$ make tools
@@ -64,20 +96,24 @@ file are omitted.
In such way you can easly test encoding / decoding loop with :
```sh
-$ ./elc3 <in.wav> -b <bitrate> | ./dlc3 > <out.wav>
+$ alias elc3="LD_LIBRARY_PATH=`pwd`/bin `pwd`/bin/elc3"
+$ alias dlc3="LD_LIBRARY_PATH=`pwd`/bin `pwd`/bin/dlc3"
+$ elc3 <in.wav> -b <bitrate> | dlc3 > <out.wav>
```
Adding Linux `aplay` tools, you will be able to instant hear the result :
```sh
-$ ./elc3 <in.wav> -b <bitrate> | ./dlc3 | aplay
+$ alias elc3="LD_LIBRARY_PATH=`pwd`/bin `pwd`/bin/elc3"
+$ alias dlc3="LD_LIBRARY_PATH=`pwd`/bin `pwd`/bin/dlc3"
+$ elc3 <in.wav> -b <bitrate> | dlc3 | aplay -D pipewire
```
## Test
A python implementation of the encoder is provided in `test` diretory.
The C implementation is unitary validated against this implementation and
-intermediate values given in Appendix C of the specification.
+intermediate values given in Appendix C of the LC3 specification.
#### Prerequisite
@@ -110,23 +146,36 @@ $ make fuzz -j # Run encoder and decoder fuzzers in parallel
The implementation is qualified under the [_QDID 194161_](https://launchstudio.bluetooth.com/ListingDetails/160904) as part of Google Fluoride 1.5.
-For more detail on conformance, refer to [_Bluetooth Conformance
-Documents and scripts_](https://www.bluetooth.com/specifications/specs/low-complexity-communication-codec-1-0/)
+The conformance reports can be found [here](conformance/README.md)
## Listening Test
The codec was [_here_](https://hydrogenaud.io/index.php/topic,122575.0.html)
subjectively evaluated in a blind listening test.
+
## Meson build system
Meson build system is also available to build and install lc3 codec in Linux
environment.
```sh
-$ meson build
-$ cd build
-$ ninja
-$ sudo ninja install
+$ meson setup build
+$ cd build && meson install
+```
+
+## Python wrapper
+
+A python wrapper, installed as follows, is available in the `python` directory.
+
+```sh
+$ python3 -m pip install .
```
+Decoding and encoding tools are provided in `python/tools`, like C tools,
+you can easly test encoding / decoding loop with :
+
+```sh
+$ python3 ./python/tools/encoder.py <in.wav> --bitrate <bitrate> | \
+ python3 ./python/tools/decoder.py > <out.wav>
+```
diff --git a/conformance/README.md b/conformance/README.md
new file mode 100644
index 0000000..2e8a14b
--- /dev/null
+++ b/conformance/README.md
@@ -0,0 +1,48 @@
+# Conformance test reports
+
+For more details on conformance, refer to:
+- [_Bluetooth Conformance Documents and scripts_](https://www.bluetooth.com/specifications/specs/low-complexity-communication-codec-1-0/)
+- [_ETSI TS 103 634 V1.4.1 - Section 7_](https://www.etsi.org/deliver/etsi_ts/103600_103699/103634/01.04.01_60/ts_103634v010401p.pdf)
+
+The test reports are generated by:
+- [_LC3 Test Software V1.0.7_](https://www.bluetooth.com/specifications/specs/low-complexity-communication-codec-1-0/)
+- [_LC3 Plus ETSI Conformance Software V1.6.4_](https://www.etsi.org/deliver/etsi_ts/103600_103699/103634/01.03.01_60/ts_103634v010301p0.zip)
+
+## LC3 Speech
+
+* [Encoding 10ms](https://raw.githack.com/google/liblc3/main/conformance/speech_encode_10m.html)
+* [Decoding 10ms](https://raw.githack.com/google/liblc3/main/conformance/speech_decode_10m.html)
+* [Encoding + Decoding 10ms](https://raw.githack.com/google/liblc3/main/conformance/speech_encdec_10m.html)
+
+<!-- -->
+
+* [Encoding 7.5ms](https://raw.githack.com/google/liblc3/main/conformance/speech_encode_7m5.html)
+* [Decoding 7.5ms](https://raw.githack.com/google/liblc3/main/conformance/speech_decode_7m5.html)
+* [Encoding + Decoding 7.5ms](https://raw.githack.com/google/liblc3/main/conformance/speech_encdec_7m5.html)
+
+## LC3 Music
+
+* [Encoding 10ms](https://raw.githack.com/google/liblc3/main/conformance/music_encode_10m.html)
+* [Decoding 10ms](https://raw.githack.com/google/liblc3/main/conformance/music_decode_10m.html)
+* [Encoding + Decoding 10ms](https://raw.githack.com/google/liblc3/main/conformance/music_encdec_10m.html)
+
+<!-- -->
+
+* [Encoding 7.5ms](https://raw.githack.com/google/liblc3/main/conformance/music_encode_7m5.html)
+* [Decoding 7.5ms](https://raw.githack.com/google/liblc3/main/conformance/music_decode_7m5.html)
+* [Encoding + Decoding 7.5ms](https://raw.githack.com/google/liblc3/main/conformance/music_encdec_7m5.html)
+
+## LC3 Plus
+
+* [Encoding](https://raw.githack.com/google/liblc3/main/conformance/lc3plus_encode.html)
+* [Decoding](https://raw.githack.com/google/liblc3/main/conformance/lc3plus_decode.html)
+* [Encoding + Decoding](https://raw.githack.com/google/liblc3/main/conformance/lc3plus_encdec.html)
+
+## LC3 Plus High-Resolution
+
+* [Encoding](https://raw.githack.com/google/liblc3/main/conformance/lc3plus_hr_encode.html)
+* [Decoding](https://raw.githack.com/google/liblc3/main/conformance/lc3plus_hr_decode.html)
+* [Encoding + Decoding](https://raw.githack.com/google/liblc3/main/conformance/lc3plus_hr_encdec.html)
+* [Fallback mode](https://raw.githack.com/google/liblc3/main/conformance/lc3plus_hr_fallback.html)
+* [Precision Requirements](https://raw.githack.com/google/liblc3/main/conformance/lc3plus_hr_precision.html)
+
diff --git a/conformance/lc3plus_decode.html b/conformance/lc3plus_decode.html
new file mode 100644
index 0000000..268e77c
--- /dev/null
+++ b/conformance/lc3plus_decode.html
@@ -0,0 +1,232 @@
+<!DOCTYPE html><head><meta charset="UTF-8"><title>DECODE Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px; width:100%} th {padding:4px; border-top:1px solid #8f908a} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn{background-color:rgba(214,137,16,0.4)} a:link {color: white;text-decoration: none;} a:visited {color: white} a:hover {color: white;font-weight:bold;} a:active {color: rgb(155, 155, 155)}</style></head>
+<body><h2>Conformance for "DECODE" passed!</h2>
+<div><h3>SQAM - 100%</h3>
+<table>
+<tr><th>Mode</th><th>Item</th><th>Frame Size</th><th>Samplerate</th><th>Bitrate</th><th>Max. Abs. Diff</th><th>RMS [dB]</th><th>RMS Reached [bits]</th></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__ABBA__10.0__8000__32000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>8000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-128 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Castanets__10.0__8000__32000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>8000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-134 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__8000__32000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>8000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Female_Speech_German__10.0__8000__32000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>8000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-128 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Glockenspiel__10.0__8000__32000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>8000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Piano_Schubert__10.0__8000__32000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>8000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Violoncello__10.0__8000__32000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>8000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Harpsichord__10.0__8000__32000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>8000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-133 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Male_Speech_English__10.0__8000__32000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>8000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-123 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__ABBA__10.0__16000__32000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>16000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Castanets__10.0__16000__32000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>16000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-130 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__16000__32000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>16000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Female_Speech_German__10.0__16000__32000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>16000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Glockenspiel__10.0__16000__32000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>16000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Piano_Schubert__10.0__16000__32000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>16000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Violoncello__10.0__16000__32000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>16000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Harpsichord__10.0__16000__32000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>16000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Male_Speech_English__10.0__16000__32000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>16000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__ABBA__10.0__32000__64000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>32000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-128 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__ABBA__10.0__32000__128000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>32000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Castanets__10.0__32000__64000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>32000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-130 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Castanets__10.0__32000__128000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>32000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-132 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__32000__64000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>32000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-123 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__32000__128000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>32000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Female_Speech_German__10.0__32000__64000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>32000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Female_Speech_German__10.0__32000__128000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>32000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Glockenspiel__10.0__32000__64000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>32000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-128 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Glockenspiel__10.0__32000__128000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>32000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Piano_Schubert__10.0__32000__64000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>32000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Piano_Schubert__10.0__32000__128000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>32000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Violoncello__10.0__32000__64000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>32000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Violoncello__10.0__32000__128000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>32000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-123 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Harpsichord__10.0__32000__64000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>32000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-130 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Harpsichord__10.0__32000__128000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>32000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Male_Speech_English__10.0__32000__64000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>32000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Male_Speech_English__10.0__32000__128000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>32000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__ABBA__10.0__48000__32000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__ABBA__10.0__48000__64000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__ABBA__10.0__48000__96000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>96000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__ABBA__10.0__48000__128000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Castanets__10.0__48000__32000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-129 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Castanets__10.0__48000__64000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-130 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Castanets__10.0__48000__96000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>96000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-129 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Castanets__10.0__48000__128000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__48000__32000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__48000__64000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-123 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__48000__96000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>96000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-123 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__48000__128000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Female_Speech_German__10.0__48000__32000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Female_Speech_German__10.0__48000__64000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Female_Speech_German__10.0__48000__96000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>96000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Female_Speech_German__10.0__48000__128000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Glockenspiel__10.0__48000__32000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Glockenspiel__10.0__48000__64000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-128 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Glockenspiel__10.0__48000__96000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>96000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Glockenspiel__10.0__48000__128000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Piano_Schubert__10.0__48000__32000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Piano_Schubert__10.0__48000__64000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Piano_Schubert__10.0__48000__96000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>96000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Piano_Schubert__10.0__48000__128000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Violoncello__10.0__48000__32000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-123 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Violoncello__10.0__48000__64000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-123 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Violoncello__10.0__48000__96000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>96000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-123 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Violoncello__10.0__48000__128000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-123 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Harpsichord__10.0__48000__32000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Harpsichord__10.0__48000__64000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-130 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Harpsichord__10.0__48000__96000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>96000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Harpsichord__10.0__48000__128000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Male_Speech_English__10.0__48000__32000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Male_Speech_English__10.0__48000__64000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Male_Speech_English__10.0__48000__96000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>96000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Male_Speech_English__10.0__48000__128000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__ABBA__5.0__48000__64000__0.txt">decode</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__ABBA__5.0__48000__128000__0.txt">decode</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__ABBA__5.0__48000__160000__0.txt">decode</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>160000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__ABBA__5.0__48000__192000__0.txt">decode</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>192000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__ABBA__5.0__48000__256000__0.txt">decode</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Castanets__5.0__48000__64000__0.txt">decode</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-130 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Castanets__5.0__48000__128000__0.txt">decode</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-130 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Castanets__5.0__48000__160000__0.txt">decode</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>160000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Castanets__5.0__48000__192000__0.txt">decode</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>192000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Castanets__5.0__48000__256000__0.txt">decode</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Eddie_Rabbitt__5.0__48000__64000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Eddie_Rabbitt__5.0__48000__128000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Eddie_Rabbitt__5.0__48000__160000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>160000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Eddie_Rabbitt__5.0__48000__192000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>192000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Eddie_Rabbitt__5.0__48000__256000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Female_Speech_German__5.0__48000__64000__0.txt">decode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Female_Speech_German__5.0__48000__128000__0.txt">decode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Female_Speech_German__5.0__48000__160000__0.txt">decode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>160000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Female_Speech_German__5.0__48000__192000__0.txt">decode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>192000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Female_Speech_German__5.0__48000__256000__0.txt">decode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Glockenspiel__5.0__48000__64000__0.txt">decode</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Glockenspiel__5.0__48000__128000__0.txt">decode</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-128 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Glockenspiel__5.0__48000__160000__0.txt">decode</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>160000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-128 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Glockenspiel__5.0__48000__192000__0.txt">decode</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>192000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Glockenspiel__5.0__48000__256000__0.txt">decode</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Piano_Schubert__5.0__48000__64000__0.txt">decode</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Piano_Schubert__5.0__48000__128000__0.txt">decode</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Piano_Schubert__5.0__48000__160000__0.txt">decode</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>160000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Piano_Schubert__5.0__48000__192000__0.txt">decode</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>192000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Piano_Schubert__5.0__48000__256000__0.txt">decode</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Violoncello__5.0__48000__64000__0.txt">decode</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-123 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Violoncello__5.0__48000__128000__0.txt">decode</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-123 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Violoncello__5.0__48000__160000__0.txt">decode</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>160000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-123 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Violoncello__5.0__48000__192000__0.txt">decode</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>192000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Violoncello__5.0__48000__256000__0.txt">decode</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Harpsichord__5.0__48000__64000__0.txt">decode</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Harpsichord__5.0__48000__128000__0.txt">decode</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Harpsichord__5.0__48000__160000__0.txt">decode</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>160000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-130 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Harpsichord__5.0__48000__192000__0.txt">decode</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>192000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-132 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Harpsichord__5.0__48000__256000__0.txt">decode</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-132 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Male_Speech_English__5.0__48000__64000__0.txt">decode</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>64000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Male_Speech_English__5.0__48000__128000__0.txt">decode</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Male_Speech_English__5.0__48000__160000__0.txt">decode</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>160000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Male_Speech_English__5.0__48000__192000__0.txt">decode</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>192000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Male_Speech_English__5.0__48000__256000__0.txt">decode</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__ABBA__2.5__48000__128000__0.txt">decode</a></td><td>ABBA</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__ABBA__2.5__48000__256000__0.txt">decode</a></td><td>ABBA</td><td>2.5</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-128 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__ABBA__2.5__48000__320000__0.txt">decode</a></td><td>ABBA</td><td>2.5</td><td>48000</td><td>320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Castanets__2.5__48000__128000__0.txt">decode</a></td><td>Castanets</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Castanets__2.5__48000__256000__0.txt">decode</a></td><td>Castanets</td><td>2.5</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-130 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Castanets__2.5__48000__320000__0.txt">decode</a></td><td>Castanets</td><td>2.5</td><td>48000</td><td>320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Eddie_Rabbitt__2.5__48000__128000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Eddie_Rabbitt__2.5__48000__256000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Eddie_Rabbitt__2.5__48000__320000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>48000</td><td>320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Female_Speech_German__2.5__48000__128000__0.txt">decode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Female_Speech_German__2.5__48000__256000__0.txt">decode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Female_Speech_German__2.5__48000__320000__0.txt">decode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Glockenspiel__2.5__48000__128000__0.txt">decode</a></td><td>Glockenspiel</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Glockenspiel__2.5__48000__256000__0.txt">decode</a></td><td>Glockenspiel</td><td>2.5</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Glockenspiel__2.5__48000__320000__0.txt">decode</a></td><td>Glockenspiel</td><td>2.5</td><td>48000</td><td>320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Piano_Schubert__2.5__48000__128000__0.txt">decode</a></td><td>Piano_Schubert</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Piano_Schubert__2.5__48000__256000__0.txt">decode</a></td><td>Piano_Schubert</td><td>2.5</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Piano_Schubert__2.5__48000__320000__0.txt">decode</a></td><td>Piano_Schubert</td><td>2.5</td><td>48000</td><td>320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Violoncello__2.5__48000__128000__0.txt">decode</a></td><td>Violoncello</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-123 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Violoncello__2.5__48000__256000__0.txt">decode</a></td><td>Violoncello</td><td>2.5</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Violoncello__2.5__48000__320000__0.txt">decode</a></td><td>Violoncello</td><td>2.5</td><td>48000</td><td>320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-123 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Harpsichord__2.5__48000__128000__0.txt">decode</a></td><td>Harpsichord</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-130 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Harpsichord__2.5__48000__256000__0.txt">decode</a></td><td>Harpsichord</td><td>2.5</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Harpsichord__2.5__48000__320000__0.txt">decode</a></td><td>Harpsichord</td><td>2.5</td><td>48000</td><td>320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-132 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Male_Speech_English__2.5__48000__128000__0.txt">decode</a></td><td>Male_Speech_English</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Male_Speech_English__2.5__48000__256000__0.txt">decode</a></td><td>Male_Speech_English</td><td>2.5</td><td>48000</td><td>256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__sqam__decode__Male_Speech_English__2.5__48000__320000__0.txt">decode</a></td><td>Male_Speech_English</td><td>2.5</td><td>48000</td><td>320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+</table>
+</div>
+<div><h3>Band Limitation - 100%</h3>
+<table>
+<tr><th>Mode</th><th>Item</th><th>Frame Size</th><th>Samplerate</th><th>Bitrate</th><th>Bandwidth</th><th>Max. Abs. Diff</th><th>RMS [dB]</th><th>RMS Reached [bits]</th></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__band_limiting__decode__Female_Speech_German__10.0__48000__92000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>92000</td><td>8000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__band_limiting__decode__Female_Speech_German__2.5__48000__320000__0.txt">decode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>320000</td><td>4000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__band_limiting__decode__Female_Speech_German__10.0__16000__32000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>16000</td><td>32000</td><td>4000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__band_limiting__decode__Female_Speech_German__10.0__32000__64000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>32000</td><td>64000</td><td>8000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__band_limiting__decode__Female_Speech_German__10.0__48000__92000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>92000</td><td>16000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__band_limiting__decode__Female_Speech_German__5.0__48000__184000__0.txt">decode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>184000</td><td>8000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__band_limiting__decode__Female_Speech_German__5.0__48000__184000__0.txt">decode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>184000</td><td>16000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__band_limiting__decode__Female_Speech_German__2.5__48000__320000__0.txt">decode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>320000</td><td>8000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__band_limiting__decode__Female_Speech_German__2.5__48000__320000__0.txt">decode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>320000</td><td>12000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__band_limiting__decode__Female_Speech_German__10.0__48000__92000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>92000</td><td>4000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__band_limiting__decode__Female_Speech_German__2.5__48000__320000__0.txt">decode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>320000</td><td>16000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__band_limiting__decode__Female_Speech_German__10.0__32000__64000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>32000</td><td>64000</td><td>4000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__band_limiting__decode__Female_Speech_German__5.0__48000__184000__0.txt">decode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>184000</td><td>4000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__band_limiting__decode__Female_Speech_German__10.0__32000__64000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>32000</td><td>64000</td><td>12000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__band_limiting__decode__Female_Speech_German__5.0__48000__184000__0.txt">decode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>184000</td><td>12000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__band_limiting__decode__Female_Speech_German__10.0__48000__92000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>92000</td><td>12000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+</table>
+</div>
+<div><h3>Bitrate Switching - 100%</h3>
+<table>
+<tr><th>Mode</th><th>Item</th><th>Frame Size</th><th>Samplerate</th><th>Bitrate</th><th>Max. Abs. Diff</th><th>RMS [dB]</th><th>RMS Reached [bits]</th></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__ABBA__10.0__8000__(16000, 32000)__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>8000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-128 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Castanets__10.0__8000__(16000, 32000)__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>8000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Eddie_Rabbitt__10.0__8000__(16000, 32000)__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>8000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Female_Speech_German__10.0__8000__(16000, 32000)__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>8000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Glockenspiel__10.0__8000__(16000, 32000)__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>8000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-128 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Piano_Schubert__10.0__8000__(16000, 32000)__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>8000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Violoncello__10.0__8000__(16000, 32000)__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>8000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Harpsichord__10.0__8000__(16000, 32000)__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>8000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Male_Speech_English__10.0__8000__(16000, 32000)__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>8000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__ABBA__10.0__16000__(16000, 32000)__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>16000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Castanets__10.0__16000__(16000, 32000)__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>16000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Eddie_Rabbitt__10.0__16000__(16000, 32000)__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>16000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Female_Speech_German__10.0__16000__(16000, 32000)__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>16000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Glockenspiel__10.0__16000__(16000, 32000)__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>16000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-128 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Piano_Schubert__10.0__16000__(16000, 32000)__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>16000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Violoncello__10.0__16000__(16000, 32000)__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>16000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Harpsichord__10.0__16000__(16000, 32000)__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>16000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-130 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Male_Speech_English__10.0__16000__(16000, 32000)__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>16000</td><td>16000-32000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__ABBA__10.0__32000__(16000, 128000)__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>32000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Castanets__10.0__32000__(16000, 128000)__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>32000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-132 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Eddie_Rabbitt__10.0__32000__(16000, 128000)__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>32000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-123 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Female_Speech_German__10.0__32000__(16000, 128000)__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>32000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Glockenspiel__10.0__32000__(16000, 128000)__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>32000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Piano_Schubert__10.0__32000__(16000, 128000)__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>32000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Violoncello__10.0__32000__(16000, 128000)__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>32000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Harpsichord__10.0__32000__(16000, 128000)__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>32000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Male_Speech_English__10.0__32000__(16000, 128000)__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>32000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__ABBA__10.0__48000__(16000, 128000)__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Castanets__10.0__48000__(16000, 128000)__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-130 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Eddie_Rabbitt__10.0__48000__(16000, 128000)__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Female_Speech_German__10.0__48000__(16000, 128000)__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Glockenspiel__10.0__48000__(16000, 128000)__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Piano_Schubert__10.0__48000__(16000, 128000)__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Violoncello__10.0__48000__(16000, 128000)__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-122 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Harpsichord__10.0__48000__(16000, 128000)__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-130 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Male_Speech_English__10.0__48000__(16000, 128000)__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>16000-128000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__ABBA__5.0__48000__(32000, 256000)__0.txt">decode</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>32000-256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Castanets__5.0__48000__(32000, 256000)__0.txt">decode</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>32000-256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-129 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Eddie_Rabbitt__5.0__48000__(32000, 256000)__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>32000-256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Female_Speech_German__5.0__48000__(32000, 256000)__0.txt">decode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>32000-256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Glockenspiel__5.0__48000__(32000, 256000)__0.txt">decode</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>32000-256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-128 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Piano_Schubert__5.0__48000__(32000, 256000)__0.txt">decode</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>32000-256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Violoncello__5.0__48000__(32000, 256000)__0.txt">decode</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>32000-256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Harpsichord__5.0__48000__(32000, 256000)__0.txt">decode</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>32000-256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-132 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Male_Speech_English__5.0__48000__(32000, 256000)__0.txt">decode</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>32000-256000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__ABBA__2.5__48000__(64000, 320000)__0.txt">decode</a></td><td>ABBA</td><td>2.5</td><td>48000</td><td>64000-320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-128 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Castanets__2.5__48000__(64000, 320000)__0.txt">decode</a></td><td>Castanets</td><td>2.5</td><td>48000</td><td>64000-320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-130 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Eddie_Rabbitt__2.5__48000__(64000, 320000)__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>48000</td><td>64000-320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Female_Speech_German__2.5__48000__(64000, 320000)__0.txt">decode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>64000-320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-125 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Glockenspiel__2.5__48000__(64000, 320000)__0.txt">decode</a></td><td>Glockenspiel</td><td>2.5</td><td>48000</td><td>64000-320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-127 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Piano_Schubert__2.5__48000__(64000, 320000)__0.txt">decode</a></td><td>Piano_Schubert</td><td>2.5</td><td>48000</td><td>64000-320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-126 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Violoncello__2.5__48000__(64000, 320000)__0.txt">decode</a></td><td>Violoncello</td><td>2.5</td><td>48000</td><td>64000-320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Harpsichord__2.5__48000__(64000, 320000)__0.txt">decode</a></td><td>Harpsichord</td><td>2.5</td><td>48000</td><td>64000-320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-131 (-89.1)</td><td class=none>16 (14)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/DECODE__bitrate_switching__decode__Male_Speech_English__2.5__48000__(64000, 320000)__0.txt">decode</a></td><td>Male_Speech_English</td><td>2.5</td><td>48000</td><td>64000-320000</td><td class=pass>3.05e-05 (0.00148)</td><td class=pass>-124 (-89.1)</td><td class=none>16 (14)</td></tr>
+</table>
+</div>
+</body>
diff --git a/conformance/lc3plus_encdec.html b/conformance/lc3plus_encdec.html
new file mode 100644
index 0000000..48a9cb1
--- /dev/null
+++ b/conformance/lc3plus_encdec.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html><head><meta charset="UTF-8"><title>ENCDEC Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px; width:100%} th {padding:4px; border-top:1px solid #8f908a} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn{background-color:rgba(214,137,16,0.4)} a:link {color: white;text-decoration: none;} a:visited {color: white} a:hover {color: white;font-weight:bold;} a:active {color: rgb(155, 155, 155)}</style></head>
+<body><h2>Conformance for "ENCDEC" passed!</h2>
+<div><h3>SQAM - 100%</h3>
+<table>
+<tr><th>Mode</th><th>Item</th><th>Frame Size</th><th>Samplerate</th><th>Bitrate</th><th>ODG<sub>ref</sub></th><th>&#916<sub>ODG</sub></th></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__ABBA__10.0__8000__32000__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>8000</td><td>32000</td><td>-0.18</td><td class=pass>0.000782 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Castanets__10.0__8000__32000__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>8000</td><td>32000</td><td>-0.0965</td><td class=pass>3.3e-05 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__10.0__8000__32000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>8000</td><td>32000</td><td>-0.165</td><td class=pass>0.00328 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Female_Speech_German__10.0__8000__32000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>8000</td><td>32000</td><td>-0.241</td><td class=pass>0.000198 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Glockenspiel__10.0__8000__32000__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>8000</td><td>32000</td><td>-0.937</td><td class=pass>0.0048 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Piano_Schubert__10.0__8000__32000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>8000</td><td>32000</td><td>-0.381</td><td class=pass>5.9e-05 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Violoncello__10.0__8000__32000__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>8000</td><td>32000</td><td>-0.544</td><td class=pass>0.00971 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Harpsichord__10.0__8000__32000__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>8000</td><td>32000</td><td>-1.03</td><td class=pass>0.0182 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Male_Speech_English__10.0__8000__32000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>8000</td><td>32000</td><td>-0.201</td><td class=pass>0.00165 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__ABBA__10.0__16000__32000__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>16000</td><td>32000</td><td>-1.38</td><td class=pass>0.00187 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Castanets__10.0__16000__32000__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>16000</td><td>32000</td><td>-1.08</td><td class=pass>0.000114 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__10.0__16000__32000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>16000</td><td>32000</td><td>-1.11</td><td class=pass>0.00302 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Female_Speech_German__10.0__16000__32000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>16000</td><td>32000</td><td>-1.55</td><td class=pass>0.0141 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Glockenspiel__10.0__16000__32000__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>16000</td><td>32000</td><td>-2.66</td><td class=pass>0.00408 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Piano_Schubert__10.0__16000__32000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>16000</td><td>32000</td><td>-1.7</td><td class=pass>0.00881 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Violoncello__10.0__16000__32000__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>16000</td><td>32000</td><td>-2.01</td><td class=pass>0.0115 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Harpsichord__10.0__16000__32000__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>16000</td><td>32000</td><td>-3.15</td><td class=pass>0.00222 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Male_Speech_English__10.0__16000__32000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>16000</td><td>32000</td><td>-1.42</td><td class=pass>0.00126 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__ABBA__10.0__32000__64000__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>32000</td><td>64000</td><td>-0.633</td><td class=pass>0.00141 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__ABBA__10.0__32000__128000__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>32000</td><td>128000</td><td>0.0127</td><td class=pass>0.00398 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Castanets__10.0__32000__64000__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>32000</td><td>64000</td><td>-0.799</td><td class=pass>0.000342 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Castanets__10.0__32000__128000__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>32000</td><td>128000</td><td>0.00203</td><td class=pass>0.000637 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__10.0__32000__64000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>32000</td><td>64000</td><td>-0.625</td><td class=pass>0.00434 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__10.0__32000__128000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>32000</td><td>128000</td><td>0.0102</td><td class=pass>0.00151 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Female_Speech_German__10.0__32000__64000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>32000</td><td>64000</td><td>-0.762</td><td class=pass>0.00626 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Female_Speech_German__10.0__32000__128000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>32000</td><td>128000</td><td>0.0184</td><td class=pass>0.00666 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Glockenspiel__10.0__32000__64000__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>32000</td><td>64000</td><td>-1.57</td><td class=pass>0.000125 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Glockenspiel__10.0__32000__128000__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>32000</td><td>128000</td><td>-0.014</td><td class=pass>0.00361 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Piano_Schubert__10.0__32000__64000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>32000</td><td>64000</td><td>-0.384</td><td class=pass>0.00184 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Piano_Schubert__10.0__32000__128000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>32000</td><td>128000</td><td>0.0254</td><td class=pass>0.000597 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Violoncello__10.0__32000__64000__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>32000</td><td>64000</td><td>-1.29</td><td class=pass>0.0055 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Violoncello__10.0__32000__128000__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>32000</td><td>128000</td><td>-0.0214</td><td class=pass>0.00084 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Harpsichord__10.0__32000__64000__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>32000</td><td>64000</td><td>-1.7</td><td class=pass>0.00968 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Harpsichord__10.0__32000__128000__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>32000</td><td>128000</td><td>-0.0732</td><td class=pass>0.00106 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Male_Speech_English__10.0__32000__64000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>32000</td><td>64000</td><td>-0.733</td><td class=pass>0.000193 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Male_Speech_English__10.0__32000__128000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>32000</td><td>128000</td><td>0.0186</td><td class=pass>0.00141 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__ABBA__10.0__48000__32000__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>32000</td><td>-2.98</td><td class=pass>0.077 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__ABBA__10.0__48000__64000__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>64000</td><td>-0.781</td><td class=pass>0.00257 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__ABBA__10.0__48000__96000__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.229</td><td class=pass>7.4e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__ABBA__10.0__48000__128000__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>128000</td><td>-0.0281</td><td class=pass>0.00212 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Castanets__10.0__48000__32000__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>32000</td><td>-3.05</td><td class=pass>0.000126 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Castanets__10.0__48000__64000__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>64000</td><td>-0.974</td><td class=pass>9.9e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Castanets__10.0__48000__96000__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.246</td><td class=pass>0.000159 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Castanets__10.0__48000__128000__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>128000</td><td>-0.0452</td><td class=pass>0.00272 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__10.0__48000__32000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>32000</td><td>-2.57</td><td class=pass>0.00808 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__10.0__48000__64000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>64000</td><td>-0.683</td><td class=pass>0.00496 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__10.0__48000__96000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.205</td><td class=pass>0.000209 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__10.0__48000__128000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>128000</td><td>-0.022</td><td class=pass>0.0029 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Female_Speech_German__10.0__48000__32000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>32000</td><td>-3.02</td><td class=pass>0.00892 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Female_Speech_German__10.0__48000__64000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>64000</td><td>-0.923</td><td class=pass>0.0185 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Female_Speech_German__10.0__48000__96000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.234</td><td class=pass>2.3e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Female_Speech_German__10.0__48000__128000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>128000</td><td>-0.0229</td><td class=pass>0.000146 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Glockenspiel__10.0__48000__32000__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>32000</td><td>-3.73</td><td class=pass>0.000191 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Glockenspiel__10.0__48000__64000__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>64000</td><td>-2.2</td><td class=pass>0.00224 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Glockenspiel__10.0__48000__96000__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.236</td><td class=pass>0.000317 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Glockenspiel__10.0__48000__128000__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>128000</td><td>-0.0421</td><td class=pass>0.00315 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Piano_Schubert__10.0__48000__32000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>32000</td><td>-2.15</td><td class=pass>0.00299 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Piano_Schubert__10.0__48000__64000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>64000</td><td>-0.443</td><td class=pass>0.000636 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Piano_Schubert__10.0__48000__96000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.0755</td><td class=pass>0.000142 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Piano_Schubert__10.0__48000__128000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>128000</td><td>0.017</td><td class=pass>1.7e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Violoncello__10.0__48000__32000__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>32000</td><td>-3.04</td><td class=pass>0.00503 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Violoncello__10.0__48000__64000__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>64000</td><td>-1.39</td><td class=pass>0.00924 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Violoncello__10.0__48000__96000__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.524</td><td class=pass>0.000131 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Violoncello__10.0__48000__128000__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>128000</td><td>-0.0917</td><td class=pass>0.00198 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Harpsichord__10.0__48000__32000__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>32000</td><td>-3.71</td><td class=pass>0.00152 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Harpsichord__10.0__48000__64000__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>64000</td><td>-1.87</td><td class=pass>0.0187 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Harpsichord__10.0__48000__96000__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.639</td><td class=pass>0.000228 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Harpsichord__10.0__48000__128000__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>128000</td><td>-0.155</td><td class=pass>0.0023 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Male_Speech_English__10.0__48000__32000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>32000</td><td>-2.71</td><td class=pass>0.00211 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Male_Speech_English__10.0__48000__64000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>64000</td><td>-0.763</td><td class=pass>5.9e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Male_Speech_English__10.0__48000__96000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.175</td><td class=pass>0.000235 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Male_Speech_English__10.0__48000__128000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>128000</td><td>-0.00993</td><td class=pass>0.00272 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__ABBA__5.0__48000__64000__0.txt">encdec</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>64000</td><td>-0.912</td><td class=pass>0.00049 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__ABBA__5.0__48000__128000__0.txt">encdec</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.0877</td><td class=pass>0.000151 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__ABBA__5.0__48000__160000__0.txt">encdec</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>160000</td><td>0.00468</td><td class=pass>1.6e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__ABBA__5.0__48000__192000__0.txt">encdec</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>192000</td><td>0.0471</td><td class=pass>7.8e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__ABBA__5.0__48000__256000__0.txt">encdec</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>256000</td><td>0.0567</td><td class=pass>0.00249 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Castanets__5.0__48000__64000__0.txt">encdec</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>64000</td><td>-1.1</td><td class=pass>0.00693 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Castanets__5.0__48000__128000__0.txt">encdec</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.0906</td><td class=pass>6e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Castanets__5.0__48000__160000__0.txt">encdec</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>160000</td><td>-0.00657</td><td class=pass>0.000119 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Castanets__5.0__48000__192000__0.txt">encdec</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>192000</td><td>0.0352</td><td class=pass>0.00012 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Castanets__5.0__48000__256000__0.txt">encdec</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>256000</td><td>0.0467</td><td class=pass>6.8e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__5.0__48000__64000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>64000</td><td>-0.974</td><td class=pass>0.0357 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__5.0__48000__128000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.0755</td><td class=pass>0.000439 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__5.0__48000__160000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>160000</td><td>0.00577</td><td class=pass>2.7e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__5.0__48000__192000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>192000</td><td>0.0438</td><td class=pass>0.000169 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__5.0__48000__256000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>256000</td><td>0.0567</td><td class=pass>0.00121 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Female_Speech_German__5.0__48000__64000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>64000</td><td>-1.33</td><td class=pass>0.0431 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Female_Speech_German__5.0__48000__128000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.0895</td><td class=pass>0.000686 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Female_Speech_German__5.0__48000__160000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>160000</td><td>0.0083</td><td class=pass>2e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Female_Speech_German__5.0__48000__192000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>192000</td><td>0.045</td><td class=pass>0.000579 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Female_Speech_German__5.0__48000__256000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>256000</td><td>0.0547</td><td class=pass>4.8e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Glockenspiel__5.0__48000__64000__0.txt">encdec</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>64000</td><td>-2.96</td><td class=pass>0.000932 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Glockenspiel__5.0__48000__128000__0.txt">encdec</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.0739</td><td class=pass>0.0011 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Glockenspiel__5.0__48000__160000__0.txt">encdec</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>160000</td><td>0.00841</td><td class=pass>0.0025 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Glockenspiel__5.0__48000__192000__0.txt">encdec</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>192000</td><td>0.0383</td><td class=pass>0.000107 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Glockenspiel__5.0__48000__256000__0.txt">encdec</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>256000</td><td>0.0552</td><td class=pass>0.000562 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Piano_Schubert__5.0__48000__64000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>64000</td><td>-0.823</td><td class=pass>0.00564 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Piano_Schubert__5.0__48000__128000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.0189</td><td class=pass>0.000517 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Piano_Schubert__5.0__48000__160000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>160000</td><td>0.031</td><td class=pass>0.000296 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Piano_Schubert__5.0__48000__192000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>192000</td><td>0.0519</td><td class=pass>0.000235 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Piano_Schubert__5.0__48000__256000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>256000</td><td>0.0536</td><td class=pass>0.000676 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Violoncello__5.0__48000__64000__0.txt">encdec</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>64000</td><td>-1.99</td><td class=pass>0.0367 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Violoncello__5.0__48000__128000__0.txt">encdec</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.259</td><td class=pass>0.00171 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Violoncello__5.0__48000__160000__0.txt">encdec</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>160000</td><td>-0.0323</td><td class=pass>0.00034 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Violoncello__5.0__48000__192000__0.txt">encdec</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>192000</td><td>0.0422</td><td class=pass>2.3e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Violoncello__5.0__48000__256000__0.txt">encdec</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>256000</td><td>0.061</td><td class=pass>0.00047 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Harpsichord__5.0__48000__64000__0.txt">encdec</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>64000</td><td>-2.56</td><td class=pass>0.0218 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Harpsichord__5.0__48000__128000__0.txt">encdec</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.336</td><td class=pass>9.4e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Harpsichord__5.0__48000__160000__0.txt">encdec</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>160000</td><td>-0.0888</td><td class=pass>0.000809 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Harpsichord__5.0__48000__192000__0.txt">encdec</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>192000</td><td>0.0156</td><td class=pass>7.7e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Harpsichord__5.0__48000__256000__0.txt">encdec</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>256000</td><td>0.0582</td><td class=pass>0.000359 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Male_Speech_English__5.0__48000__64000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>64000</td><td>-1.14</td><td class=pass>0.0121 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Male_Speech_English__5.0__48000__128000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.0558</td><td class=pass>0.00013 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Male_Speech_English__5.0__48000__160000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>160000</td><td>0.0131</td><td class=pass>0.000126 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Male_Speech_English__5.0__48000__192000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>192000</td><td>0.0492</td><td class=pass>0.0002 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Male_Speech_English__5.0__48000__256000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>256000</td><td>0.0579</td><td class=pass>0.00273 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__ABBA__2.5__48000__128000__0.txt">encdec</a></td><td>ABBA</td><td>2.5</td><td>48000</td><td>128000</td><td>-0.174</td><td class=pass>0.00139 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__ABBA__2.5__48000__256000__0.txt">encdec</a></td><td>ABBA</td><td>2.5</td><td>48000</td><td>256000</td><td>0.0473</td><td class=pass>1.1e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__ABBA__2.5__48000__320000__0.txt">encdec</a></td><td>ABBA</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0574</td><td class=pass>6e-06 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Castanets__2.5__48000__128000__0.txt">encdec</a></td><td>Castanets</td><td>2.5</td><td>48000</td><td>128000</td><td>-0.169</td><td class=pass>0.000672 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Castanets__2.5__48000__256000__0.txt">encdec</a></td><td>Castanets</td><td>2.5</td><td>48000</td><td>256000</td><td>0.0323</td><td class=pass>3.3e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Castanets__2.5__48000__320000__0.txt">encdec</a></td><td>Castanets</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0435</td><td class=pass>0.000197 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__2.5__48000__128000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>48000</td><td>128000</td><td>-0.193</td><td class=pass>0.00732 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__2.5__48000__256000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>48000</td><td>256000</td><td>0.0505</td><td class=pass>6.9e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__2.5__48000__320000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0574</td><td class=pass>0.000113 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Female_Speech_German__2.5__48000__128000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>128000</td><td>-0.292</td><td class=pass>0.0153 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Female_Speech_German__2.5__48000__256000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>256000</td><td>0.0512</td><td class=pass>0.000295 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Female_Speech_German__2.5__48000__320000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0552</td><td class=pass>0.000225 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Glockenspiel__2.5__48000__128000__0.txt">encdec</a></td><td>Glockenspiel</td><td>2.5</td><td>48000</td><td>128000</td><td>-1.69</td><td class=pass>0.014 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Glockenspiel__2.5__48000__256000__0.txt">encdec</a></td><td>Glockenspiel</td><td>2.5</td><td>48000</td><td>256000</td><td>0.05</td><td class=pass>5e-06 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Glockenspiel__2.5__48000__320000__0.txt">encdec</a></td><td>Glockenspiel</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0559</td><td class=pass>0.00022 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Piano_Schubert__2.5__48000__128000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>2.5</td><td>48000</td><td>128000</td><td>-0.186</td><td class=pass>0.00412 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Piano_Schubert__2.5__48000__256000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>2.5</td><td>48000</td><td>256000</td><td>0.0547</td><td class=pass>0.000468 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Piano_Schubert__2.5__48000__320000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0517</td><td class=pass>5.8e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Violoncello__2.5__48000__128000__0.txt">encdec</a></td><td>Violoncello</td><td>2.5</td><td>48000</td><td>128000</td><td>-0.605</td><td class=pass>0.0548 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Violoncello__2.5__48000__256000__0.txt">encdec</a></td><td>Violoncello</td><td>2.5</td><td>48000</td><td>256000</td><td>0.0559</td><td class=pass>4e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Violoncello__2.5__48000__320000__0.txt">encdec</a></td><td>Violoncello</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0615</td><td class=pass>9.6e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Harpsichord__2.5__48000__128000__0.txt">encdec</a></td><td>Harpsichord</td><td>2.5</td><td>48000</td><td>128000</td><td>-0.807</td><td class=pass>0.0387 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Harpsichord__2.5__48000__256000__0.txt">encdec</a></td><td>Harpsichord</td><td>2.5</td><td>48000</td><td>256000</td><td>0.0426</td><td class=pass>2.8e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Harpsichord__2.5__48000__320000__0.txt">encdec</a></td><td>Harpsichord</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0598</td><td class=pass>0.000189 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Male_Speech_English__2.5__48000__128000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>2.5</td><td>48000</td><td>128000</td><td>-0.253</td><td class=pass>0.000255 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Male_Speech_English__2.5__48000__256000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>2.5</td><td>48000</td><td>256000</td><td>0.0547</td><td class=pass>6.5e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__sqam__encdec__Male_Speech_English__2.5__48000__320000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0585</td><td class=pass>0.000147 (0.06)</td></tr>
+</table>
+</div>
+<div><h3>Band Limitation - 100%</h3>
+<table>
+<tr><th>Mode</th><th>Item</th><th>Frame Size</th><th>Samplerate</th><th>Bitrate</th><th>Bandwidth</th><th>ODG<sub>ref</sub></th><th>&#916<sub>ODG</sub></th></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__band_limiting__encdec__Female_Speech_German__10.0__16000__32000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>16000</td><td>32000</td><td>4000</td><td>-0.616</td><td class=pass>0.015 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__band_limiting__encdec__Female_Speech_German__10.0__32000__64000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>32000</td><td>64000</td><td>8000</td><td>-0.217</td><td class=pass>0.0026 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__band_limiting__encdec__Female_Speech_German__10.0__48000__92000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>92000</td><td>4000</td><td>-0.0226</td><td class=pass>0.000514 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__band_limiting__encdec__Female_Speech_German__5.0__48000__184000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>184000</td><td>8000</td><td>0.033</td><td class=pass>0.000436 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__band_limiting__encdec__Female_Speech_German__10.0__48000__92000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>92000</td><td>12000</td><td>-0.045</td><td class=pass>0.000354 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__band_limiting__encdec__Female_Speech_German__2.5__48000__320000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>320000</td><td>8000</td><td>0.0271</td><td class=pass>0.00204 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__band_limiting__encdec__Female_Speech_German__5.0__48000__184000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>184000</td><td>16000</td><td>0.051</td><td class=pass>0.000448 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__band_limiting__encdec__Female_Speech_German__2.5__48000__320000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>320000</td><td>16000</td><td>0.0554</td><td class=pass>0.000527 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__band_limiting__encdec__Female_Speech_German__2.5__48000__320000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>320000</td><td>12000</td><td>0.0588</td><td class=pass>0.00069 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__band_limiting__encdec__Female_Speech_German__10.0__32000__64000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>32000</td><td>64000</td><td>4000</td><td>-0.229</td><td class=pass>0.00847 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__band_limiting__encdec__Female_Speech_German__5.0__48000__184000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>184000</td><td>4000</td><td>0.0535</td><td class=pass>3.8e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__band_limiting__encdec__Female_Speech_German__10.0__48000__92000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>92000</td><td>8000</td><td>0.00497</td><td class=pass>0.000406 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__band_limiting__encdec__Female_Speech_German__10.0__48000__92000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>92000</td><td>16000</td><td>-0.191</td><td class=pass>0.000559 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__band_limiting__encdec__Female_Speech_German__2.5__48000__320000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>320000</td><td>4000</td><td>0.0543</td><td class=pass>0.000174 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__band_limiting__encdec__Female_Speech_German__10.0__32000__64000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>32000</td><td>64000</td><td>12000</td><td>-0.487</td><td class=pass>0.00685 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCDEC__band_limiting__encdec__Female_Speech_German__5.0__48000__184000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>184000</td><td>12000</td><td>0.0563</td><td class=pass>3.2e-05 (0.06)</td></tr>
+</table>
+</div>
+</body>
diff --git a/conformance/lc3plus_encode.html b/conformance/lc3plus_encode.html
new file mode 100644
index 0000000..6ff20d2
--- /dev/null
+++ b/conformance/lc3plus_encode.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html><head><meta charset="UTF-8"><title>ENCODE Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px; width:100%} th {padding:4px; border-top:1px solid #8f908a} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn{background-color:rgba(214,137,16,0.4)} a:link {color: white;text-decoration: none;} a:visited {color: white} a:hover {color: white;font-weight:bold;} a:active {color: rgb(155, 155, 155)}</style></head>
+<body><h2>Conformance for "ENCODE" passed!</h2>
+<div><h3>SQAM - 100%</h3>
+<table>
+<tr><th>Mode</th><th>Item</th><th>Frame Size</th><th>Samplerate</th><th>Bitrate</th><th>ODG<sub>ref</sub></th><th>&#916<sub>ODG</sub></th></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__ABBA__10.0__8000__32000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>8000</td><td>32000</td><td>-0.18</td><td class=pass>0.000532 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Castanets__10.0__8000__32000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>8000</td><td>32000</td><td>-0.0965</td><td class=pass>3.5e-05 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__8000__32000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>8000</td><td>32000</td><td>-0.165</td><td class=pass>0.00319 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Female_Speech_German__10.0__8000__32000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>8000</td><td>32000</td><td>-0.241</td><td class=pass>0.000313 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Glockenspiel__10.0__8000__32000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>8000</td><td>32000</td><td>-0.937</td><td class=pass>0.00545 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Piano_Schubert__10.0__8000__32000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>8000</td><td>32000</td><td>-0.381</td><td class=pass>0.00113 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Violoncello__10.0__8000__32000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>8000</td><td>32000</td><td>-0.544</td><td class=pass>0.01 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Harpsichord__10.0__8000__32000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>8000</td><td>32000</td><td>-1.03</td><td class=pass>0.0191 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Male_Speech_English__10.0__8000__32000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>8000</td><td>32000</td><td>-0.201</td><td class=pass>0.00156 (0.15)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__ABBA__10.0__16000__32000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>16000</td><td>32000</td><td>-1.38</td><td class=pass>0.00227 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Castanets__10.0__16000__32000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>16000</td><td>32000</td><td>-1.08</td><td class=pass>0.000102 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__16000__32000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>16000</td><td>32000</td><td>-1.11</td><td class=pass>0.00347 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Female_Speech_German__10.0__16000__32000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>16000</td><td>32000</td><td>-1.55</td><td class=pass>0.0141 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Glockenspiel__10.0__16000__32000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>16000</td><td>32000</td><td>-2.66</td><td class=pass>0.00447 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Piano_Schubert__10.0__16000__32000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>16000</td><td>32000</td><td>-1.7</td><td class=pass>0.00709 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Violoncello__10.0__16000__32000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>16000</td><td>32000</td><td>-2.01</td><td class=pass>0.0112 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Harpsichord__10.0__16000__32000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>16000</td><td>32000</td><td>-3.15</td><td class=pass>0.00225 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Male_Speech_English__10.0__16000__32000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>16000</td><td>32000</td><td>-1.42</td><td class=pass>0.00109 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__ABBA__10.0__32000__64000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>32000</td><td>64000</td><td>-0.633</td><td class=pass>0.00141 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__ABBA__10.0__32000__128000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>32000</td><td>128000</td><td>0.0127</td><td class=pass>0.00399 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Castanets__10.0__32000__64000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>32000</td><td>64000</td><td>-0.799</td><td class=pass>0.000333 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Castanets__10.0__32000__128000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>32000</td><td>128000</td><td>0.00203</td><td class=pass>0.00063 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__32000__64000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>32000</td><td>64000</td><td>-0.625</td><td class=pass>0.00438 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__32000__128000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>32000</td><td>128000</td><td>0.0102</td><td class=pass>0.00151 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Female_Speech_German__10.0__32000__64000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>32000</td><td>64000</td><td>-0.762</td><td class=pass>0.00627 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Female_Speech_German__10.0__32000__128000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>32000</td><td>128000</td><td>0.0184</td><td class=pass>0.00667 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Glockenspiel__10.0__32000__64000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>32000</td><td>64000</td><td>-1.57</td><td class=pass>0.000545 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Glockenspiel__10.0__32000__128000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>32000</td><td>128000</td><td>-0.014</td><td class=pass>0.00353 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Piano_Schubert__10.0__32000__64000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>32000</td><td>64000</td><td>-0.384</td><td class=pass>0.00204 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Piano_Schubert__10.0__32000__128000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>32000</td><td>128000</td><td>0.0254</td><td class=pass>0.000649 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Violoncello__10.0__32000__64000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>32000</td><td>64000</td><td>-1.29</td><td class=pass>0.0055 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Violoncello__10.0__32000__128000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>32000</td><td>128000</td><td>-0.0214</td><td class=pass>0.00088 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Harpsichord__10.0__32000__64000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>32000</td><td>64000</td><td>-1.7</td><td class=pass>0.00967 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Harpsichord__10.0__32000__128000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>32000</td><td>128000</td><td>-0.0732</td><td class=pass>0.00103 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Male_Speech_English__10.0__32000__64000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>32000</td><td>64000</td><td>-0.733</td><td class=pass>0.000152 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Male_Speech_English__10.0__32000__128000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>32000</td><td>128000</td><td>0.0186</td><td class=pass>0.00139 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__ABBA__10.0__48000__32000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>32000</td><td>-2.98</td><td class=pass>0.077 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__ABBA__10.0__48000__64000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>64000</td><td>-0.781</td><td class=pass>0.0026 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__ABBA__10.0__48000__96000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.229</td><td class=pass>6.6e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__ABBA__10.0__48000__128000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>128000</td><td>-0.0281</td><td class=pass>0.00211 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Castanets__10.0__48000__32000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>32000</td><td>-3.05</td><td class=pass>0.000102 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Castanets__10.0__48000__64000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>64000</td><td>-0.974</td><td class=pass>0.000117 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Castanets__10.0__48000__96000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.246</td><td class=pass>0.000171 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Castanets__10.0__48000__128000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>128000</td><td>-0.0452</td><td class=pass>0.00273 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__48000__32000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>32000</td><td>-2.57</td><td class=pass>0.00812 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__48000__64000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>64000</td><td>-0.683</td><td class=pass>0.00496 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__48000__96000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.205</td><td class=pass>0.000205 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__48000__128000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>128000</td><td>-0.022</td><td class=pass>0.0029 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Female_Speech_German__10.0__48000__32000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>32000</td><td>-3.02</td><td class=pass>0.00894 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Female_Speech_German__10.0__48000__64000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>64000</td><td>-0.923</td><td class=pass>0.0185 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Female_Speech_German__10.0__48000__96000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.234</td><td class=pass>1e-06 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Female_Speech_German__10.0__48000__128000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>128000</td><td>-0.0229</td><td class=pass>0.000141 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Glockenspiel__10.0__48000__32000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>32000</td><td>-3.73</td><td class=pass>0.000115 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Glockenspiel__10.0__48000__64000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>64000</td><td>-2.2</td><td class=pass>0.00226 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Glockenspiel__10.0__48000__96000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.236</td><td class=pass>0.000353 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Glockenspiel__10.0__48000__128000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>128000</td><td>-0.0421</td><td class=pass>0.00304 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Piano_Schubert__10.0__48000__32000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>32000</td><td>-2.15</td><td class=pass>0.00268 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Piano_Schubert__10.0__48000__64000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>64000</td><td>-0.443</td><td class=pass>0.000672 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Piano_Schubert__10.0__48000__96000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.0755</td><td class=pass>0.00012 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Piano_Schubert__10.0__48000__128000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>128000</td><td>0.017</td><td class=pass>1.9e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Violoncello__10.0__48000__32000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>32000</td><td>-3.04</td><td class=pass>0.00505 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Violoncello__10.0__48000__64000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>64000</td><td>-1.39</td><td class=pass>0.00916 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Violoncello__10.0__48000__96000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.524</td><td class=pass>5.9e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Violoncello__10.0__48000__128000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>128000</td><td>-0.0917</td><td class=pass>0.00203 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Harpsichord__10.0__48000__32000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>32000</td><td>-3.71</td><td class=pass>0.00152 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Harpsichord__10.0__48000__64000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>64000</td><td>-1.87</td><td class=pass>0.0187 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Harpsichord__10.0__48000__96000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.639</td><td class=pass>0.000228 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Harpsichord__10.0__48000__128000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>128000</td><td>-0.155</td><td class=pass>0.00227 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Male_Speech_English__10.0__48000__32000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>32000</td><td>-2.71</td><td class=pass>0.00214 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Male_Speech_English__10.0__48000__64000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>64000</td><td>-0.763</td><td class=pass>5.3e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Male_Speech_English__10.0__48000__96000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>96000</td><td>-0.175</td><td class=pass>0.000235 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Male_Speech_English__10.0__48000__128000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>128000</td><td>-0.00993</td><td class=pass>0.00273 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__ABBA__5.0__48000__64000__0.txt">encode</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>64000</td><td>-0.912</td><td class=pass>0.000479 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__ABBA__5.0__48000__128000__0.txt">encode</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.0877</td><td class=pass>0.000148 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__ABBA__5.0__48000__160000__0.txt">encode</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>160000</td><td>0.00468</td><td class=pass>1.8e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__ABBA__5.0__48000__192000__0.txt">encode</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>192000</td><td>0.0471</td><td class=pass>7.7e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__ABBA__5.0__48000__256000__0.txt">encode</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>256000</td><td>0.0567</td><td class=pass>0.0025 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Castanets__5.0__48000__64000__0.txt">encode</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>64000</td><td>-1.1</td><td class=pass>0.00693 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Castanets__5.0__48000__128000__0.txt">encode</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.0906</td><td class=pass>5.9e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Castanets__5.0__48000__160000__0.txt">encode</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>160000</td><td>-0.00657</td><td class=pass>0.000131 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Castanets__5.0__48000__192000__0.txt">encode</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>192000</td><td>0.0352</td><td class=pass>0.000122 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Castanets__5.0__48000__256000__0.txt">encode</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>256000</td><td>0.0467</td><td class=pass>7e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Eddie_Rabbitt__5.0__48000__64000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>64000</td><td>-0.974</td><td class=pass>0.0357 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Eddie_Rabbitt__5.0__48000__128000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.0755</td><td class=pass>0.000437 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Eddie_Rabbitt__5.0__48000__160000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>160000</td><td>0.00577</td><td class=pass>1.5e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Eddie_Rabbitt__5.0__48000__192000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>192000</td><td>0.0438</td><td class=pass>0.000157 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Eddie_Rabbitt__5.0__48000__256000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>256000</td><td>0.0567</td><td class=pass>0.0012 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Female_Speech_German__5.0__48000__64000__0.txt">encode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>64000</td><td>-1.33</td><td class=pass>0.043 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Female_Speech_German__5.0__48000__128000__0.txt">encode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.0895</td><td class=pass>0.00066 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Female_Speech_German__5.0__48000__160000__0.txt">encode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>160000</td><td>0.0083</td><td class=pass>1.8e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Female_Speech_German__5.0__48000__192000__0.txt">encode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>192000</td><td>0.045</td><td class=pass>0.000591 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Female_Speech_German__5.0__48000__256000__0.txt">encode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>256000</td><td>0.0547</td><td class=pass>3.4e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Glockenspiel__5.0__48000__64000__0.txt">encode</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>64000</td><td>-2.96</td><td class=pass>0.000489 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Glockenspiel__5.0__48000__128000__0.txt">encode</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.0739</td><td class=pass>0.00126 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Glockenspiel__5.0__48000__160000__0.txt">encode</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>160000</td><td>0.00841</td><td class=pass>0.00259 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Glockenspiel__5.0__48000__192000__0.txt">encode</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>192000</td><td>0.0383</td><td class=pass>0.000237 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Glockenspiel__5.0__48000__256000__0.txt">encode</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>256000</td><td>0.0552</td><td class=pass>0.000583 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Piano_Schubert__5.0__48000__64000__0.txt">encode</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>64000</td><td>-0.823</td><td class=pass>0.0056 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Piano_Schubert__5.0__48000__128000__0.txt">encode</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.0189</td><td class=pass>0.000541 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Piano_Schubert__5.0__48000__160000__0.txt">encode</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>160000</td><td>0.031</td><td class=pass>0.000205 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Piano_Schubert__5.0__48000__192000__0.txt">encode</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>192000</td><td>0.0519</td><td class=pass>0.00023 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Piano_Schubert__5.0__48000__256000__0.txt">encode</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>256000</td><td>0.0536</td><td class=pass>0.000613 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Violoncello__5.0__48000__64000__0.txt">encode</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>64000</td><td>-1.99</td><td class=pass>0.0367 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Violoncello__5.0__48000__128000__0.txt">encode</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.259</td><td class=pass>0.00169 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Violoncello__5.0__48000__160000__0.txt">encode</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>160000</td><td>-0.0323</td><td class=pass>0.000338 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Violoncello__5.0__48000__192000__0.txt">encode</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>192000</td><td>0.0422</td><td class=pass>2.1e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Violoncello__5.0__48000__256000__0.txt">encode</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>256000</td><td>0.061</td><td class=pass>0.000428 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Harpsichord__5.0__48000__64000__0.txt">encode</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>64000</td><td>-2.56</td><td class=pass>0.0219 (0.12)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Harpsichord__5.0__48000__128000__0.txt">encode</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.336</td><td class=pass>0.0001 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Harpsichord__5.0__48000__160000__0.txt">encode</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>160000</td><td>-0.0888</td><td class=pass>0.000801 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Harpsichord__5.0__48000__192000__0.txt">encode</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>192000</td><td>0.0156</td><td class=pass>6e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Harpsichord__5.0__48000__256000__0.txt">encode</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>256000</td><td>0.0582</td><td class=pass>0.000371 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Male_Speech_English__5.0__48000__64000__0.txt">encode</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>64000</td><td>-1.14</td><td class=pass>0.0121 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Male_Speech_English__5.0__48000__128000__0.txt">encode</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>128000</td><td>-0.0558</td><td class=pass>0.000112 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Male_Speech_English__5.0__48000__160000__0.txt">encode</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>160000</td><td>0.0131</td><td class=pass>0.000132 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Male_Speech_English__5.0__48000__192000__0.txt">encode</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>192000</td><td>0.0492</td><td class=pass>0.000216 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Male_Speech_English__5.0__48000__256000__0.txt">encode</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>256000</td><td>0.0579</td><td class=pass>0.00275 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__ABBA__2.5__48000__128000__0.txt">encode</a></td><td>ABBA</td><td>2.5</td><td>48000</td><td>128000</td><td>-0.174</td><td class=pass>0.00138 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__ABBA__2.5__48000__256000__0.txt">encode</a></td><td>ABBA</td><td>2.5</td><td>48000</td><td>256000</td><td>0.0473</td><td class=pass>1.3e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__ABBA__2.5__48000__320000__0.txt">encode</a></td><td>ABBA</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0574</td><td class=pass>2.2e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Castanets__2.5__48000__128000__0.txt">encode</a></td><td>Castanets</td><td>2.5</td><td>48000</td><td>128000</td><td>-0.169</td><td class=pass>0.000659 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Castanets__2.5__48000__256000__0.txt">encode</a></td><td>Castanets</td><td>2.5</td><td>48000</td><td>256000</td><td>0.0323</td><td class=pass>3.7e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Castanets__2.5__48000__320000__0.txt">encode</a></td><td>Castanets</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0435</td><td class=pass>0.000226 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Eddie_Rabbitt__2.5__48000__128000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>48000</td><td>128000</td><td>-0.193</td><td class=pass>0.00731 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Eddie_Rabbitt__2.5__48000__256000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>48000</td><td>256000</td><td>0.0505</td><td class=pass>7.2e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Eddie_Rabbitt__2.5__48000__320000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0574</td><td class=pass>0.000112 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Female_Speech_German__2.5__48000__128000__0.txt">encode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>128000</td><td>-0.292</td><td class=pass>0.0153 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Female_Speech_German__2.5__48000__256000__0.txt">encode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>256000</td><td>0.0512</td><td class=pass>0.000298 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Female_Speech_German__2.5__48000__320000__0.txt">encode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0552</td><td class=pass>0.000231 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Glockenspiel__2.5__48000__128000__0.txt">encode</a></td><td>Glockenspiel</td><td>2.5</td><td>48000</td><td>128000</td><td>-1.69</td><td class=pass>0.0134 (0.08)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Glockenspiel__2.5__48000__256000__0.txt">encode</a></td><td>Glockenspiel</td><td>2.5</td><td>48000</td><td>256000</td><td>0.05</td><td class=pass>0.000125 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Glockenspiel__2.5__48000__320000__0.txt">encode</a></td><td>Glockenspiel</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0559</td><td class=pass>0.000257 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Piano_Schubert__2.5__48000__128000__0.txt">encode</a></td><td>Piano_Schubert</td><td>2.5</td><td>48000</td><td>128000</td><td>-0.186</td><td class=pass>0.00411 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Piano_Schubert__2.5__48000__256000__0.txt">encode</a></td><td>Piano_Schubert</td><td>2.5</td><td>48000</td><td>256000</td><td>0.0547</td><td class=pass>0.000496 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Piano_Schubert__2.5__48000__320000__0.txt">encode</a></td><td>Piano_Schubert</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0517</td><td class=pass>0.000108 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Violoncello__2.5__48000__128000__0.txt">encode</a></td><td>Violoncello</td><td>2.5</td><td>48000</td><td>128000</td><td>-0.605</td><td class=pass>0.0549 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Violoncello__2.5__48000__256000__0.txt">encode</a></td><td>Violoncello</td><td>2.5</td><td>48000</td><td>256000</td><td>0.0559</td><td class=pass>2.1e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Violoncello__2.5__48000__320000__0.txt">encode</a></td><td>Violoncello</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0615</td><td class=pass>9.5e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Harpsichord__2.5__48000__128000__0.txt">encode</a></td><td>Harpsichord</td><td>2.5</td><td>48000</td><td>128000</td><td>-0.807</td><td class=pass>0.0387 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Harpsichord__2.5__48000__256000__0.txt">encode</a></td><td>Harpsichord</td><td>2.5</td><td>48000</td><td>256000</td><td>0.0426</td><td class=pass>3.2e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Harpsichord__2.5__48000__320000__0.txt">encode</a></td><td>Harpsichord</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0598</td><td class=pass>0.000176 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Male_Speech_English__2.5__48000__128000__0.txt">encode</a></td><td>Male_Speech_English</td><td>2.5</td><td>48000</td><td>128000</td><td>-0.253</td><td class=pass>0.000217 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Male_Speech_English__2.5__48000__256000__0.txt">encode</a></td><td>Male_Speech_English</td><td>2.5</td><td>48000</td><td>256000</td><td>0.0547</td><td class=pass>6.2e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__sqam__encode__Male_Speech_English__2.5__48000__320000__0.txt">encode</a></td><td>Male_Speech_English</td><td>2.5</td><td>48000</td><td>320000</td><td>0.0585</td><td class=pass>0.000139 (0.06)</td></tr>
+</table>
+</div>
+<div><h3>Band Limitation - 100%</h3>
+<table>
+<tr><th>Mode</th><th>Item</th><th>Frame Size</th><th>Samplerate</th><th>Bitrate</th><th>Bandwidth</th><th>ODG<sub>ref</sub></th><th>&#916<sub>ODG</sub></th></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__band_limiting__encode__Female_Speech_German__10.0__48000__92000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>92000</td><td>16000</td><td>-0.191</td><td class=pass>0.000576 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__band_limiting__encode__Female_Speech_German__10.0__16000__32000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>16000</td><td>32000</td><td>4000</td><td>-0.616</td><td class=pass>0.0152 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__band_limiting__encode__Female_Speech_German__2.5__48000__320000__0.txt">encode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>320000</td><td>16000</td><td>0.0554</td><td class=pass>0.000477 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__band_limiting__encode__Female_Speech_German__10.0__48000__92000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>92000</td><td>4000</td><td>-0.0226</td><td class=pass>0.000864 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__band_limiting__encode__Female_Speech_German__5.0__48000__184000__0.txt">encode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>184000</td><td>4000</td><td>0.0535</td><td class=pass>0.000132 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__band_limiting__encode__Female_Speech_German__10.0__32000__64000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>32000</td><td>64000</td><td>8000</td><td>-0.217</td><td class=pass>0.00258 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__band_limiting__encode__Female_Speech_German__5.0__48000__184000__0.txt">encode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>184000</td><td>12000</td><td>0.0563</td><td class=pass>2.8e-05 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__band_limiting__encode__Female_Speech_German__2.5__48000__320000__0.txt">encode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>320000</td><td>4000</td><td>0.0543</td><td class=pass>0.000301 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__band_limiting__encode__Female_Speech_German__10.0__48000__92000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>92000</td><td>12000</td><td>-0.045</td><td class=pass>0.000333 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__band_limiting__encode__Female_Speech_German__2.5__48000__320000__0.txt">encode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>320000</td><td>12000</td><td>0.0588</td><td class=pass>0.000664 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__band_limiting__encode__Female_Speech_German__10.0__32000__64000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>32000</td><td>64000</td><td>4000</td><td>-0.229</td><td class=pass>0.00863 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__band_limiting__encode__Female_Speech_German__10.0__48000__92000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>92000</td><td>8000</td><td>0.00497</td><td class=pass>0.000274 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__band_limiting__encode__Female_Speech_German__5.0__48000__184000__0.txt">encode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>184000</td><td>8000</td><td>0.033</td><td class=pass>0.000545 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__band_limiting__encode__Female_Speech_German__10.0__32000__64000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>32000</td><td>64000</td><td>12000</td><td>-0.487</td><td class=pass>0.00644 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__band_limiting__encode__Female_Speech_German__5.0__48000__184000__0.txt">encode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>184000</td><td>16000</td><td>0.051</td><td class=pass>0.000454 (0.06)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-28_log/ENCODE__band_limiting__encode__Female_Speech_German__2.5__48000__320000__0.txt">encode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>320000</td><td>8000</td><td>0.0271</td><td class=pass>0.00186 (0.06)</td></tr>
+</table>
+</div>
+</body>
diff --git a/conformance/lc3plus_hr_decode.html b/conformance/lc3plus_hr_decode.html
new file mode 100644
index 0000000..87d55d6
--- /dev/null
+++ b/conformance/lc3plus_hr_decode.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html><head><meta charset="UTF-8"><title>DECODE Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px; width:100%} th {padding:4px; border-top:1px solid #8f908a} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn{background-color:rgba(214,137,16,0.4)} a:link {color: white;text-decoration: none;} a:visited {color: white} a:hover {color: white;font-weight:bold;} a:active {color: rgb(155, 155, 155)}</style></head>
+<body><h2>Conformance for "DECODE" passed!</h2>
+<div><h3>SQAM - 100%</h3>
+<table>
+<tr><th>Mode</th><th>Item</th><th>Frame Size</th><th>Samplerate</th><th>Bitrate</th><th>Max. Abs. Diff</th><th>RMS [dB]</th><th>RMS Reached [bits]</th></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__ABBA__10.0__48000__124800__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__ABBA__10.0__48000__128000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__ABBA__10.0__48000__160000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__ABBA__10.0__48000__192000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__ABBA__10.0__48000__500000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Castanets__10.0__48000__124800__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>5.96e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Castanets__10.0__48000__128000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Castanets__10.0__48000__160000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Castanets__10.0__48000__192000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Castanets__10.0__48000__500000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-155 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__48000__124800__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__48000__128000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__48000__160000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__48000__192000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__48000__500000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Female_Speech_German__10.0__48000__124800__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Female_Speech_German__10.0__48000__128000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Female_Speech_German__10.0__48000__160000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Female_Speech_German__10.0__48000__192000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Female_Speech_German__10.0__48000__500000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Glockenspiel__10.0__48000__124800__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Glockenspiel__10.0__48000__128000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Glockenspiel__10.0__48000__160000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Glockenspiel__10.0__48000__192000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-152 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Glockenspiel__10.0__48000__500000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Piano_Schubert__10.0__48000__124800__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Piano_Schubert__10.0__48000__128000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Piano_Schubert__10.0__48000__160000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Piano_Schubert__10.0__48000__192000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Piano_Schubert__10.0__48000__500000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Violoncello__10.0__48000__124800__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Violoncello__10.0__48000__128000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Violoncello__10.0__48000__160000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Violoncello__10.0__48000__192000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Violoncello__10.0__48000__500000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Harpsichord__10.0__48000__124800__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Harpsichord__10.0__48000__128000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Harpsichord__10.0__48000__160000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Harpsichord__10.0__48000__192000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-155 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Harpsichord__10.0__48000__500000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-155 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Male_Speech_English__10.0__48000__124800__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Male_Speech_English__10.0__48000__128000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Male_Speech_English__10.0__48000__160000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Male_Speech_English__10.0__48000__192000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Male_Speech_English__10.0__48000__500000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__ABBA__10.0__96000__149600__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__ABBA__10.0__96000__160000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__ABBA__10.0__96000__192000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__ABBA__10.0__96000__256000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__ABBA__10.0__96000__320000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__ABBA__10.0__96000__500000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Castanets__10.0__96000__149600__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Castanets__10.0__96000__160000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>4.77e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Castanets__10.0__96000__192000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>4.77e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Castanets__10.0__96000__256000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>4.77e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Castanets__10.0__96000__320000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>4.77e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Castanets__10.0__96000__500000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__96000__149600__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>4.77e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__96000__160000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__96000__192000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__96000__256000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__96000__320000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Eddie_Rabbitt__10.0__96000__500000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Female_Speech_German__10.0__96000__149600__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Female_Speech_German__10.0__96000__160000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Female_Speech_German__10.0__96000__192000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Female_Speech_German__10.0__96000__256000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Female_Speech_German__10.0__96000__320000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Female_Speech_German__10.0__96000__500000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Glockenspiel__10.0__96000__149600__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Glockenspiel__10.0__96000__160000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Glockenspiel__10.0__96000__192000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Glockenspiel__10.0__96000__256000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-152 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Glockenspiel__10.0__96000__320000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-152 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Glockenspiel__10.0__96000__500000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Piano_Schubert__10.0__96000__149600__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Piano_Schubert__10.0__96000__160000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Piano_Schubert__10.0__96000__192000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Piano_Schubert__10.0__96000__256000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Piano_Schubert__10.0__96000__320000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Piano_Schubert__10.0__96000__500000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Violoncello__10.0__96000__149600__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Violoncello__10.0__96000__160000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Violoncello__10.0__96000__192000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Violoncello__10.0__96000__256000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Violoncello__10.0__96000__320000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Violoncello__10.0__96000__500000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Harpsichord__10.0__96000__149600__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Harpsichord__10.0__96000__160000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Harpsichord__10.0__96000__192000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Harpsichord__10.0__96000__256000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Harpsichord__10.0__96000__320000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-155 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Harpsichord__10.0__96000__500000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-155 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Male_Speech_English__10.0__96000__149600__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Male_Speech_English__10.0__96000__160000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Male_Speech_English__10.0__96000__192000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Male_Speech_English__10.0__96000__256000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Male_Speech_English__10.0__96000__320000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/DECODE__sqam__decode__Male_Speech_English__10.0__96000__500000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+</table>
+</div>
+</body>
diff --git a/conformance/lc3plus_hr_encdec.html b/conformance/lc3plus_hr_encdec.html
new file mode 100644
index 0000000..1bd3ecf
--- /dev/null
+++ b/conformance/lc3plus_hr_encdec.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html><head><meta charset="UTF-8"><title>ENCDEC Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px; width:100%} th {padding:4px; border-top:1px solid #8f908a} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn{background-color:rgba(214,137,16,0.4)} a:link {color: white;text-decoration: none;} a:visited {color: white} a:hover {color: white;font-weight:bold;} a:active {color: rgb(155, 155, 155)}</style></head>
+<body><h2>Conformance for "ENCDEC" passed!</h2>
+<div><h3>SQAM - 100%</h3>
+<table>
+<tr><th>Mode</th><th>Item</th><th>Frame Size</th><th>Samplerate</th><th>Bitrate</th><th>MLD</th></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__ABBA__10.0__48000__128000__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>0.372 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__ABBA__10.0__48000__160000__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.221 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__ABBA__10.0__48000__192000__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.191 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Castanets__10.0__48000__128000__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>1.45 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Castanets__10.0__48000__160000__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.538 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Castanets__10.0__48000__192000__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.517 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__10.0__48000__128000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>0.63 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__10.0__48000__160000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.467 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__10.0__48000__192000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.278 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Female_Speech_German__10.0__48000__128000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>0.485 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Female_Speech_German__10.0__48000__160000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.249 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Female_Speech_German__10.0__48000__192000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.199 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Glockenspiel__10.0__48000__128000__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>0.428 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Glockenspiel__10.0__48000__160000__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.33 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Glockenspiel__10.0__48000__192000__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.171 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Piano_Schubert__10.0__48000__128000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>0.0963 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Piano_Schubert__10.0__48000__160000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.0339 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Piano_Schubert__10.0__48000__192000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.0256 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Violoncello__10.0__48000__128000__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>0.171 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Violoncello__10.0__48000__160000__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.0918 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Violoncello__10.0__48000__192000__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.0543 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Harpsichord__10.0__48000__128000__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>0.43 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Harpsichord__10.0__48000__160000__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.273 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Harpsichord__10.0__48000__192000__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.185 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Male_Speech_English__10.0__48000__128000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>0.348 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Male_Speech_English__10.0__48000__160000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.275 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Male_Speech_English__10.0__48000__192000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.127 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__ABBA__10.0__96000__160000__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.000877 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__ABBA__10.0__96000__192000__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.0106 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__ABBA__10.0__96000__256000__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>0.00181 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__ABBA__10.0__96000__320000__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>0.0354 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Castanets__10.0__96000__160000__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.0321 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Castanets__10.0__96000__192000__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.00031 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Castanets__10.0__96000__256000__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>2.05 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Castanets__10.0__96000__320000__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>1.61 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__10.0__96000__160000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.0124 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__10.0__96000__192000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.206 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__10.0__96000__256000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>0.000726 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Eddie_Rabbitt__10.0__96000__320000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>0.0234 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Female_Speech_German__10.0__96000__160000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.0141 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Female_Speech_German__10.0__96000__192000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.00316 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Female_Speech_German__10.0__96000__256000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>0.0047 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Female_Speech_German__10.0__96000__320000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>0.00451 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Glockenspiel__10.0__96000__160000__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.0114 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Glockenspiel__10.0__96000__192000__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.00835 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Glockenspiel__10.0__96000__256000__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>0.00222 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Glockenspiel__10.0__96000__320000__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>0.00301 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Piano_Schubert__10.0__96000__160000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.012 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Piano_Schubert__10.0__96000__192000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.00901 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Piano_Schubert__10.0__96000__256000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>0.0072 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Piano_Schubert__10.0__96000__320000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>0.0077 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Violoncello__10.0__96000__160000__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.0421 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Violoncello__10.0__96000__192000__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.0381 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Violoncello__10.0__96000__256000__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>0.00161 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Violoncello__10.0__96000__320000__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>0.00881 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Harpsichord__10.0__96000__160000__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.0231 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Harpsichord__10.0__96000__192000__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.013 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Harpsichord__10.0__96000__256000__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>0.0209 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Harpsichord__10.0__96000__320000__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>0.00991 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Male_Speech_English__10.0__96000__160000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.0351 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Male_Speech_English__10.0__96000__192000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.031 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Male_Speech_English__10.0__96000__256000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>0.00996 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCDEC__sqam__encdec__Male_Speech_English__10.0__96000__320000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>0.0174 (4)</td></tr>
+</table>
+</div>
+</body>
diff --git a/conformance/lc3plus_hr_encode.html b/conformance/lc3plus_hr_encode.html
new file mode 100644
index 0000000..c7d38d0
--- /dev/null
+++ b/conformance/lc3plus_hr_encode.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html><head><meta charset="UTF-8"><title>ENCODE Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px; width:100%} th {padding:4px; border-top:1px solid #8f908a} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn{background-color:rgba(214,137,16,0.4)} a:link {color: white;text-decoration: none;} a:visited {color: white} a:hover {color: white;font-weight:bold;} a:active {color: rgb(155, 155, 155)}</style></head>
+<body><h2>Conformance for "ENCODE" passed!</h2>
+<div><h3>SQAM - 100%</h3>
+<table>
+<tr><th>Mode</th><th>Item</th><th>Frame Size</th><th>Samplerate</th><th>Bitrate</th><th>MLD</th></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__ABBA__10.0__48000__124800__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>0.361 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__ABBA__10.0__48000__128000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>0.372 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__ABBA__10.0__48000__160000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.221 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__ABBA__10.0__48000__192000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.191 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__ABBA__10.0__48000__500000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>0.00442 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Castanets__10.0__48000__124800__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>0.851 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Castanets__10.0__48000__128000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>1.45 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Castanets__10.0__48000__160000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.538 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Castanets__10.0__48000__192000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.517 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Castanets__10.0__48000__500000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>0.0206 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__48000__124800__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>0.681 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__48000__128000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>0.63 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__48000__160000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.467 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__48000__192000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.278 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__48000__500000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>0.00581 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Female_Speech_German__10.0__48000__124800__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>0.493 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Female_Speech_German__10.0__48000__128000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>0.485 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Female_Speech_German__10.0__48000__160000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.249 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Female_Speech_German__10.0__48000__192000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.199 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Female_Speech_German__10.0__48000__500000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>0.00658 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Glockenspiel__10.0__48000__124800__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>0.355 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Glockenspiel__10.0__48000__128000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>0.428 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Glockenspiel__10.0__48000__160000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.33 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Glockenspiel__10.0__48000__192000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.171 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Glockenspiel__10.0__48000__500000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>0.00517 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Piano_Schubert__10.0__48000__124800__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>0.0715 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Piano_Schubert__10.0__48000__128000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>0.0963 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Piano_Schubert__10.0__48000__160000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.0339 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Piano_Schubert__10.0__48000__192000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.0256 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Piano_Schubert__10.0__48000__500000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>0.000423 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Violoncello__10.0__48000__124800__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>0.172 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Violoncello__10.0__48000__128000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>0.171 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Violoncello__10.0__48000__160000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.0918 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Violoncello__10.0__48000__192000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.0543 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Violoncello__10.0__48000__500000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>0.00104 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Harpsichord__10.0__48000__124800__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>0.368 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Harpsichord__10.0__48000__128000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>0.43 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Harpsichord__10.0__48000__160000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.273 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Harpsichord__10.0__48000__192000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.185 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Harpsichord__10.0__48000__500000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>0.00448 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Male_Speech_English__10.0__48000__124800__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>124800</td><td class=pass>0.438 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Male_Speech_English__10.0__48000__128000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>128000</td><td class=pass>0.348 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Male_Speech_English__10.0__48000__160000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>160000</td><td class=pass>0.275 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Male_Speech_English__10.0__48000__192000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>192000</td><td class=pass>0.127 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Male_Speech_English__10.0__48000__500000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>500000</td><td class=pass>0.00409 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__ABBA__10.0__96000__149600__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>0.0938 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__ABBA__10.0__96000__160000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.000877 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__ABBA__10.0__96000__192000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.0106 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__ABBA__10.0__96000__256000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>0.00181 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__ABBA__10.0__96000__320000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>0.0354 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__ABBA__10.0__96000__500000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>0.0138 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Castanets__10.0__96000__149600__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>0.0169 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Castanets__10.0__96000__160000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.0321 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Castanets__10.0__96000__192000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.000309 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Castanets__10.0__96000__256000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>2.05 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Castanets__10.0__96000__320000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>1.61 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Castanets__10.0__96000__500000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>0.48 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__96000__149600__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>0.00727 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__96000__160000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.0124 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__96000__192000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.206 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__96000__256000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>0.000724 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__96000__320000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>0.0234 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Eddie_Rabbitt__10.0__96000__500000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>0.012 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Female_Speech_German__10.0__96000__149600__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>0.021 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Female_Speech_German__10.0__96000__160000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.0141 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Female_Speech_German__10.0__96000__192000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.00316 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Female_Speech_German__10.0__96000__256000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>0.0047 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Female_Speech_German__10.0__96000__320000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>0.00451 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Female_Speech_German__10.0__96000__500000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>0.0223 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Glockenspiel__10.0__96000__149600__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>0.00552 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Glockenspiel__10.0__96000__160000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.0114 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Glockenspiel__10.0__96000__192000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.00835 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Glockenspiel__10.0__96000__256000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>0.00222 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Glockenspiel__10.0__96000__320000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>0.00301 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Glockenspiel__10.0__96000__500000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>0.0132 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Piano_Schubert__10.0__96000__149600__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>0.0154 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Piano_Schubert__10.0__96000__160000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.012 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Piano_Schubert__10.0__96000__192000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.00901 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Piano_Schubert__10.0__96000__256000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>0.0072 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Piano_Schubert__10.0__96000__320000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>0.0077 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Piano_Schubert__10.0__96000__500000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>0.00398 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Violoncello__10.0__96000__149600__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>0.00236 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Violoncello__10.0__96000__160000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.0421 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Violoncello__10.0__96000__192000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.0381 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Violoncello__10.0__96000__256000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>0.00161 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Violoncello__10.0__96000__320000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>0.00881 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Violoncello__10.0__96000__500000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>0.00438 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Harpsichord__10.0__96000__149600__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>0.0259 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Harpsichord__10.0__96000__160000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.0231 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Harpsichord__10.0__96000__192000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.013 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Harpsichord__10.0__96000__256000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>0.0209 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Harpsichord__10.0__96000__320000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>0.00991 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Harpsichord__10.0__96000__500000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>0.00929 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Male_Speech_English__10.0__96000__149600__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>149600</td><td class=pass>0.0164 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Male_Speech_English__10.0__96000__160000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>160000</td><td class=pass>0.0351 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Male_Speech_English__10.0__96000__192000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>192000</td><td class=pass>0.031 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Male_Speech_English__10.0__96000__256000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>256000</td><td class=pass>0.00995 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Male_Speech_English__10.0__96000__320000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>320000</td><td class=pass>0.0174 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/ENCODE__sqam__encode__Male_Speech_English__10.0__96000__500000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>500000</td><td class=pass>0.0232 (4)</td></tr>
+</table>
+</div>
+</body>
diff --git a/conformance/lc3plus_hr_fallback.html b/conformance/lc3plus_hr_fallback.html
new file mode 100644
index 0000000..6dc6da5
--- /dev/null
+++ b/conformance/lc3plus_hr_fallback.html
@@ -0,0 +1,338 @@
+<!DOCTYPE html><head><meta charset="UTF-8"><title>FALLBACK Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px; width:100%} th {padding:4px; border-top:1px solid #8f908a} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn{background-color:rgba(214,137,16,0.4)} a:link {color: white;text-decoration: none;} a:visited {color: white} a:hover {color: white;font-weight:bold;} a:active {color: rgb(155, 155, 155)}</style></head>
+<body><h2>Conformance for "FALLBACK" passed!</h2>
+<div><h3>SQAM - 100%</h3>
+<table>
+<tr><th>Mode</th><th>Item</th><th>Frame Size</th><th>Samplerate</th><th>Bitrate</th><th>MLD</th></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__ABBA__10.0__48000__62400__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.0045 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__ABBA__10.0__48000__93600__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.000274 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Castanets__10.0__48000__62400__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.0183 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Castanets__10.0__48000__93600__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.00211 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Eddie_Rabbitt__10.0__48000__62400__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.00947 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Eddie_Rabbitt__10.0__48000__93600__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.0514 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Female_Speech_German__10.0__48000__62400__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.469 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Female_Speech_German__10.0__48000__93600__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.385 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Glockenspiel__10.0__48000__62400__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.147 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Glockenspiel__10.0__48000__93600__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.00719 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Piano_Schubert__10.0__48000__62400__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.0788 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Piano_Schubert__10.0__48000__93600__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.00325 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Violoncello__10.0__48000__62400__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.0201 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Violoncello__10.0__48000__93600__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.0099 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Harpsichord__10.0__48000__62400__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.11 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Harpsichord__10.0__48000__93600__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.0867 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Male_Speech_English__10.0__48000__62400__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.179 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Male_Speech_English__10.0__48000__93600__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.0414 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__ABBA__5.0__48000__73600__0.txt">encode</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>1.14 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__ABBA__5.0__48000__110400__0.txt">encode</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.381 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Castanets__5.0__48000__73600__0.txt">encode</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>0.682 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Castanets__5.0__48000__110400__0.txt">encode</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.168 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Eddie_Rabbitt__5.0__48000__73600__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>0.141 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Eddie_Rabbitt__5.0__48000__110400__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.418 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Female_Speech_German__5.0__48000__73600__0.txt">encode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>1.15 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Female_Speech_German__5.0__48000__110400__0.txt">encode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.493 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Glockenspiel__5.0__48000__73600__0.txt">encode</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>0.316 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Glockenspiel__5.0__48000__110400__0.txt">encode</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.338 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Piano_Schubert__5.0__48000__73600__0.txt">encode</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>0.22 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Piano_Schubert__5.0__48000__110400__0.txt">encode</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.0768 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Violoncello__5.0__48000__73600__0.txt">encode</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>0.26 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Violoncello__5.0__48000__110400__0.txt">encode</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.167 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Harpsichord__5.0__48000__73600__0.txt">encode</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>0.714 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Harpsichord__5.0__48000__110400__0.txt">encode</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.0997 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Male_Speech_English__5.0__48000__73600__0.txt">encode</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>1.26 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Male_Speech_English__5.0__48000__110400__0.txt">encode</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.282 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__ABBA__2.5__48000__86400__0.txt">encode</a></td><td>ABBA</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>0.525 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__ABBA__2.5__48000__128000__0.txt">encode</a></td><td>ABBA</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>0.424 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Castanets__2.5__48000__86400__0.txt">encode</a></td><td>Castanets</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>2.12 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Castanets__2.5__48000__128000__0.txt">encode</a></td><td>Castanets</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>0.958 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Eddie_Rabbitt__2.5__48000__86400__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>1.62 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Eddie_Rabbitt__2.5__48000__128000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>0.608 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Female_Speech_German__2.5__48000__86400__0.txt">encode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>0.786 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Female_Speech_German__2.5__48000__128000__0.txt">encode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>0.655 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Glockenspiel__2.5__48000__86400__0.txt">encode</a></td><td>Glockenspiel</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>1.66 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Glockenspiel__2.5__48000__128000__0.txt">encode</a></td><td>Glockenspiel</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>1.11 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Piano_Schubert__2.5__48000__86400__0.txt">encode</a></td><td>Piano_Schubert</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>0.154 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Piano_Schubert__2.5__48000__128000__0.txt">encode</a></td><td>Piano_Schubert</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>0.116 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Violoncello__2.5__48000__86400__0.txt">encode</a></td><td>Violoncello</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>0.413 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Violoncello__2.5__48000__128000__0.txt">encode</a></td><td>Violoncello</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>0.151 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Harpsichord__2.5__48000__86400__0.txt">encode</a></td><td>Harpsichord</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>0.905 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Harpsichord__2.5__48000__128000__0.txt">encode</a></td><td>Harpsichord</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>0.887 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Male_Speech_English__2.5__48000__86400__0.txt">encode</a></td><td>Male_Speech_English</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>0.986 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Male_Speech_English__2.5__48000__128000__0.txt">encode</a></td><td>Male_Speech_English</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>0.366 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__ABBA__10.0__96000__74400__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.125 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__ABBA__10.0__96000__112000__0.txt">encode</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.0109 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Castanets__10.0__96000__74400__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.112 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Castanets__10.0__96000__112000__0.txt">encode</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.0592 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Eddie_Rabbitt__10.0__96000__74400__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.0464 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Eddie_Rabbitt__10.0__96000__112000__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.000146 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Female_Speech_German__10.0__96000__74400__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.379 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Female_Speech_German__10.0__96000__112000__0.txt">encode</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.411 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Glockenspiel__10.0__96000__74400__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.633 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Glockenspiel__10.0__96000__112000__0.txt">encode</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.0298 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Piano_Schubert__10.0__96000__74400__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.137 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Piano_Schubert__10.0__96000__112000__0.txt">encode</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.0309 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Violoncello__10.0__96000__74400__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.203 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Violoncello__10.0__96000__112000__0.txt">encode</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.12 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Harpsichord__10.0__96000__74400__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.132 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Harpsichord__10.0__96000__112000__0.txt">encode</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.0699 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Male_Speech_English__10.0__96000__74400__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.336 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Male_Speech_English__10.0__96000__112000__0.txt">encode</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.0223 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__ABBA__5.0__96000__86400__0.txt">encode</a></td><td>ABBA</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>0.443 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__ABBA__5.0__96000__129600__0.txt">encode</a></td><td>ABBA</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.196 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Castanets__5.0__96000__86400__0.txt">encode</a></td><td>Castanets</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>0.179 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Castanets__5.0__96000__129600__0.txt">encode</a></td><td>Castanets</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.0975 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Eddie_Rabbitt__5.0__96000__86400__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>0.133 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Eddie_Rabbitt__5.0__96000__129600__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.0992 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Female_Speech_German__5.0__96000__86400__0.txt">encode</a></td><td>Female_Speech_German</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>0.889 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Female_Speech_German__5.0__96000__129600__0.txt">encode</a></td><td>Female_Speech_German</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.277 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Glockenspiel__5.0__96000__86400__0.txt">encode</a></td><td>Glockenspiel</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>0.515 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Glockenspiel__5.0__96000__129600__0.txt">encode</a></td><td>Glockenspiel</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.212 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Piano_Schubert__5.0__96000__86400__0.txt">encode</a></td><td>Piano_Schubert</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>0.136 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Piano_Schubert__5.0__96000__129600__0.txt">encode</a></td><td>Piano_Schubert</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.0205 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Violoncello__5.0__96000__86400__0.txt">encode</a></td><td>Violoncello</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>0.211 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Violoncello__5.0__96000__129600__0.txt">encode</a></td><td>Violoncello</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.0675 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Harpsichord__5.0__96000__86400__0.txt">encode</a></td><td>Harpsichord</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>1.18 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Harpsichord__5.0__96000__129600__0.txt">encode</a></td><td>Harpsichord</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.0895 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Male_Speech_English__5.0__96000__86400__0.txt">encode</a></td><td>Male_Speech_English</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>0.523 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Male_Speech_English__5.0__96000__129600__0.txt">encode</a></td><td>Male_Speech_English</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.28 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__ABBA__2.5__96000__99200__0.txt">encode</a></td><td>ABBA</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>0.633 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__ABBA__2.5__96000__147200__0.txt">encode</a></td><td>ABBA</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.294 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Castanets__2.5__96000__99200__0.txt">encode</a></td><td>Castanets</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>2.82 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Castanets__2.5__96000__147200__0.txt">encode</a></td><td>Castanets</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.2 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Eddie_Rabbitt__2.5__96000__99200__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>1.13 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Eddie_Rabbitt__2.5__96000__147200__0.txt">encode</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.43 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Female_Speech_German__2.5__96000__99200__0.txt">encode</a></td><td>Female_Speech_German</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>0.756 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Female_Speech_German__2.5__96000__147200__0.txt">encode</a></td><td>Female_Speech_German</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.394 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Glockenspiel__2.5__96000__99200__0.txt">encode</a></td><td>Glockenspiel</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>0.983 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Glockenspiel__2.5__96000__147200__0.txt">encode</a></td><td>Glockenspiel</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.763 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Piano_Schubert__2.5__96000__99200__0.txt">encode</a></td><td>Piano_Schubert</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>0.171 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Piano_Schubert__2.5__96000__147200__0.txt">encode</a></td><td>Piano_Schubert</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.0687 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Violoncello__2.5__96000__99200__0.txt">encode</a></td><td>Violoncello</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>0.257 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Violoncello__2.5__96000__147200__0.txt">encode</a></td><td>Violoncello</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.107 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Harpsichord__2.5__96000__99200__0.txt">encode</a></td><td>Harpsichord</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>1.13 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Harpsichord__2.5__96000__147200__0.txt">encode</a></td><td>Harpsichord</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.358 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Male_Speech_English__2.5__96000__99200__0.txt">encode</a></td><td>Male_Speech_English</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>0.628 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encode__Male_Speech_English__2.5__96000__147200__0.txt">encode</a></td><td>Male_Speech_English</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.403 (4)</td></tr>
+</table>
+<table>
+<tr><th>Mode</th><th>Item</th><th>Frame Size</th><th>Samplerate</th><th>Bitrate</th><th>MLD</th></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__ABBA__10.0__48000__62400__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.0045 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__ABBA__10.0__48000__93600__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.000274 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Castanets__10.0__48000__62400__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.0183 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Castanets__10.0__48000__93600__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.00211 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Eddie_Rabbitt__10.0__48000__62400__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.00947 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Eddie_Rabbitt__10.0__48000__93600__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.0514 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Female_Speech_German__10.0__48000__62400__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.469 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Female_Speech_German__10.0__48000__93600__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.385 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Glockenspiel__10.0__48000__62400__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.147 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Glockenspiel__10.0__48000__93600__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.00719 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Piano_Schubert__10.0__48000__62400__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.0788 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Piano_Schubert__10.0__48000__93600__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.00325 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Violoncello__10.0__48000__62400__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.0201 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Violoncello__10.0__48000__93600__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.0099 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Harpsichord__10.0__48000__62400__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.11 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Harpsichord__10.0__48000__93600__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.0867 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Male_Speech_English__10.0__48000__62400__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>0.179 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Male_Speech_English__10.0__48000__93600__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>0.0414 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__ABBA__5.0__48000__73600__0.txt">encdec</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>1.14 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__ABBA__5.0__48000__110400__0.txt">encdec</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.381 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Castanets__5.0__48000__73600__0.txt">encdec</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>0.682 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Castanets__5.0__48000__110400__0.txt">encdec</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.168 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Eddie_Rabbitt__5.0__48000__73600__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>0.141 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Eddie_Rabbitt__5.0__48000__110400__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.418 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Female_Speech_German__5.0__48000__73600__0.txt">encdec</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>1.15 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Female_Speech_German__5.0__48000__110400__0.txt">encdec</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.493 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Glockenspiel__5.0__48000__73600__0.txt">encdec</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>0.316 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Glockenspiel__5.0__48000__110400__0.txt">encdec</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.338 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Piano_Schubert__5.0__48000__73600__0.txt">encdec</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>0.22 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Piano_Schubert__5.0__48000__110400__0.txt">encdec</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.0768 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Violoncello__5.0__48000__73600__0.txt">encdec</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>0.26 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Violoncello__5.0__48000__110400__0.txt">encdec</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.167 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Harpsichord__5.0__48000__73600__0.txt">encdec</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>0.714 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Harpsichord__5.0__48000__110400__0.txt">encdec</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.0997 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Male_Speech_English__5.0__48000__73600__0.txt">encdec</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>1.26 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Male_Speech_English__5.0__48000__110400__0.txt">encdec</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>0.282 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__ABBA__2.5__48000__86400__0.txt">encdec</a></td><td>ABBA</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>0.525 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__ABBA__2.5__48000__128000__0.txt">encdec</a></td><td>ABBA</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>0.424 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Castanets__2.5__48000__86400__0.txt">encdec</a></td><td>Castanets</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>2.12 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Castanets__2.5__48000__128000__0.txt">encdec</a></td><td>Castanets</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>0.958 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Eddie_Rabbitt__2.5__48000__86400__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>1.62 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Eddie_Rabbitt__2.5__48000__128000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>0.608 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Female_Speech_German__2.5__48000__86400__0.txt">encdec</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>0.786 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Female_Speech_German__2.5__48000__128000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>0.655 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Glockenspiel__2.5__48000__86400__0.txt">encdec</a></td><td>Glockenspiel</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>1.66 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Glockenspiel__2.5__48000__128000__0.txt">encdec</a></td><td>Glockenspiel</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>1.11 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Piano_Schubert__2.5__48000__86400__0.txt">encdec</a></td><td>Piano_Schubert</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>0.154 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Piano_Schubert__2.5__48000__128000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>0.116 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Violoncello__2.5__48000__86400__0.txt">encdec</a></td><td>Violoncello</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>0.413 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Violoncello__2.5__48000__128000__0.txt">encdec</a></td><td>Violoncello</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>0.151 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Harpsichord__2.5__48000__86400__0.txt">encdec</a></td><td>Harpsichord</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>0.905 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Harpsichord__2.5__48000__128000__0.txt">encdec</a></td><td>Harpsichord</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>0.887 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Male_Speech_English__2.5__48000__86400__0.txt">encdec</a></td><td>Male_Speech_English</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>0.986 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Male_Speech_English__2.5__48000__128000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>0.366 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__ABBA__10.0__96000__74400__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.125 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__ABBA__10.0__96000__112000__0.txt">encdec</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.0109 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Castanets__10.0__96000__74400__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.112 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Castanets__10.0__96000__112000__0.txt">encdec</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.0592 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Eddie_Rabbitt__10.0__96000__74400__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.0464 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Eddie_Rabbitt__10.0__96000__112000__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.000146 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Female_Speech_German__10.0__96000__74400__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.379 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Female_Speech_German__10.0__96000__112000__0.txt">encdec</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.411 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Glockenspiel__10.0__96000__74400__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.633 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Glockenspiel__10.0__96000__112000__0.txt">encdec</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.0298 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Piano_Schubert__10.0__96000__74400__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.137 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Piano_Schubert__10.0__96000__112000__0.txt">encdec</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.0309 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Violoncello__10.0__96000__74400__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.203 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Violoncello__10.0__96000__112000__0.txt">encdec</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.12 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Harpsichord__10.0__96000__74400__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.132 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Harpsichord__10.0__96000__112000__0.txt">encdec</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.0699 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Male_Speech_English__10.0__96000__74400__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>0.336 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Male_Speech_English__10.0__96000__112000__0.txt">encdec</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>0.0223 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__ABBA__5.0__96000__86400__0.txt">encdec</a></td><td>ABBA</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>0.443 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__ABBA__5.0__96000__129600__0.txt">encdec</a></td><td>ABBA</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.196 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Castanets__5.0__96000__86400__0.txt">encdec</a></td><td>Castanets</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>0.179 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Castanets__5.0__96000__129600__0.txt">encdec</a></td><td>Castanets</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.0975 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Eddie_Rabbitt__5.0__96000__86400__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>0.133 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Eddie_Rabbitt__5.0__96000__129600__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.0992 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Female_Speech_German__5.0__96000__86400__0.txt">encdec</a></td><td>Female_Speech_German</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>0.889 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Female_Speech_German__5.0__96000__129600__0.txt">encdec</a></td><td>Female_Speech_German</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.277 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Glockenspiel__5.0__96000__86400__0.txt">encdec</a></td><td>Glockenspiel</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>0.515 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Glockenspiel__5.0__96000__129600__0.txt">encdec</a></td><td>Glockenspiel</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.212 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Piano_Schubert__5.0__96000__86400__0.txt">encdec</a></td><td>Piano_Schubert</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>0.136 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Piano_Schubert__5.0__96000__129600__0.txt">encdec</a></td><td>Piano_Schubert</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.0205 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Violoncello__5.0__96000__86400__0.txt">encdec</a></td><td>Violoncello</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>0.211 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Violoncello__5.0__96000__129600__0.txt">encdec</a></td><td>Violoncello</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.0675 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Harpsichord__5.0__96000__86400__0.txt">encdec</a></td><td>Harpsichord</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>1.18 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Harpsichord__5.0__96000__129600__0.txt">encdec</a></td><td>Harpsichord</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.0895 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Male_Speech_English__5.0__96000__86400__0.txt">encdec</a></td><td>Male_Speech_English</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>0.523 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Male_Speech_English__5.0__96000__129600__0.txt">encdec</a></td><td>Male_Speech_English</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>0.28 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__ABBA__2.5__96000__99200__0.txt">encdec</a></td><td>ABBA</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>0.633 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__ABBA__2.5__96000__147200__0.txt">encdec</a></td><td>ABBA</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.294 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Castanets__2.5__96000__99200__0.txt">encdec</a></td><td>Castanets</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>2.82 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Castanets__2.5__96000__147200__0.txt">encdec</a></td><td>Castanets</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.2 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Eddie_Rabbitt__2.5__96000__99200__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>1.13 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Eddie_Rabbitt__2.5__96000__147200__0.txt">encdec</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.43 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Female_Speech_German__2.5__96000__99200__0.txt">encdec</a></td><td>Female_Speech_German</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>0.756 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Female_Speech_German__2.5__96000__147200__0.txt">encdec</a></td><td>Female_Speech_German</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.394 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Glockenspiel__2.5__96000__99200__0.txt">encdec</a></td><td>Glockenspiel</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>0.983 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Glockenspiel__2.5__96000__147200__0.txt">encdec</a></td><td>Glockenspiel</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.763 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Piano_Schubert__2.5__96000__99200__0.txt">encdec</a></td><td>Piano_Schubert</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>0.171 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Piano_Schubert__2.5__96000__147200__0.txt">encdec</a></td><td>Piano_Schubert</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.0687 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Violoncello__2.5__96000__99200__0.txt">encdec</a></td><td>Violoncello</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>0.257 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Violoncello__2.5__96000__147200__0.txt">encdec</a></td><td>Violoncello</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.107 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Harpsichord__2.5__96000__99200__0.txt">encdec</a></td><td>Harpsichord</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>1.13 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Harpsichord__2.5__96000__147200__0.txt">encdec</a></td><td>Harpsichord</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.358 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Male_Speech_English__2.5__96000__99200__0.txt">encdec</a></td><td>Male_Speech_English</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>0.628 (4)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__encdec__Male_Speech_English__2.5__96000__147200__0.txt">encdec</a></td><td>Male_Speech_English</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>0.403 (4)</td></tr>
+</table>
+<table>
+<tr><th>Mode</th><th>Item</th><th>Frame Size</th><th>Samplerate</th><th>Bitrate</th><th>Max. Abs. Diff</th><th>RMS [dB]</th><th>RMS Reached [bits]</th></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__ABBA__10.0__48000__62400__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__ABBA__10.0__48000__93600__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Castanets__10.0__48000__62400__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Castanets__10.0__48000__93600__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>5.96e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Eddie_Rabbitt__10.0__48000__62400__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Eddie_Rabbitt__10.0__48000__93600__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Female_Speech_German__10.0__48000__62400__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Female_Speech_German__10.0__48000__93600__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Glockenspiel__10.0__48000__62400__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Glockenspiel__10.0__48000__93600__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Piano_Schubert__10.0__48000__62400__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Piano_Schubert__10.0__48000__93600__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Violoncello__10.0__48000__62400__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Violoncello__10.0__48000__93600__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Harpsichord__10.0__48000__62400__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Harpsichord__10.0__48000__93600__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Male_Speech_English__10.0__48000__62400__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>62400</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Male_Speech_English__10.0__48000__93600__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>48000</td><td>93600</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__ABBA__5.0__48000__73600__0.txt">decode</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__ABBA__5.0__48000__110400__0.txt">decode</a></td><td>ABBA</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Castanets__5.0__48000__73600__0.txt">decode</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-155 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Castanets__5.0__48000__110400__0.txt">decode</a></td><td>Castanets</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-155 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Eddie_Rabbitt__5.0__48000__73600__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Eddie_Rabbitt__5.0__48000__110400__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>4.77e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Female_Speech_German__5.0__48000__73600__0.txt">decode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Female_Speech_German__5.0__48000__110400__0.txt">decode</a></td><td>Female_Speech_German</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Glockenspiel__5.0__48000__73600__0.txt">decode</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Glockenspiel__5.0__48000__110400__0.txt">decode</a></td><td>Glockenspiel</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-152 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Piano_Schubert__5.0__48000__73600__0.txt">decode</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Piano_Schubert__5.0__48000__110400__0.txt">decode</a></td><td>Piano_Schubert</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Violoncello__5.0__48000__73600__0.txt">decode</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Violoncello__5.0__48000__110400__0.txt">decode</a></td><td>Violoncello</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Harpsichord__5.0__48000__73600__0.txt">decode</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-155 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Harpsichord__5.0__48000__110400__0.txt">decode</a></td><td>Harpsichord</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-155 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Male_Speech_English__5.0__48000__73600__0.txt">decode</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>73600</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Male_Speech_English__5.0__48000__110400__0.txt">decode</a></td><td>Male_Speech_English</td><td>5.0</td><td>48000</td><td>110400</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__ABBA__2.5__48000__86400__0.txt">decode</a></td><td>ABBA</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__ABBA__2.5__48000__128000__0.txt">decode</a></td><td>ABBA</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Castanets__2.5__48000__86400__0.txt">decode</a></td><td>Castanets</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-155 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Castanets__2.5__48000__128000__0.txt">decode</a></td><td>Castanets</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>4.77e-07 (0.00148)</td><td class=pass>-155 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Eddie_Rabbitt__2.5__48000__86400__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Eddie_Rabbitt__2.5__48000__128000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Female_Speech_German__2.5__48000__86400__0.txt">decode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Female_Speech_German__2.5__48000__128000__0.txt">decode</a></td><td>Female_Speech_German</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Glockenspiel__2.5__48000__86400__0.txt">decode</a></td><td>Glockenspiel</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Glockenspiel__2.5__48000__128000__0.txt">decode</a></td><td>Glockenspiel</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-152 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Piano_Schubert__2.5__48000__86400__0.txt">decode</a></td><td>Piano_Schubert</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Piano_Schubert__2.5__48000__128000__0.txt">decode</a></td><td>Piano_Schubert</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Violoncello__2.5__48000__86400__0.txt">decode</a></td><td>Violoncello</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Violoncello__2.5__48000__128000__0.txt">decode</a></td><td>Violoncello</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Harpsichord__2.5__48000__86400__0.txt">decode</a></td><td>Harpsichord</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-155 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Harpsichord__2.5__48000__128000__0.txt">decode</a></td><td>Harpsichord</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-155 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Male_Speech_English__2.5__48000__86400__0.txt">decode</a></td><td>Male_Speech_English</td><td>2.5</td><td>48000</td><td>86400</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Male_Speech_English__2.5__48000__128000__0.txt">decode</a></td><td>Male_Speech_English</td><td>2.5</td><td>48000</td><td>128000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__ABBA__10.0__96000__74400__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__ABBA__10.0__96000__112000__0.txt">decode</a></td><td>ABBA</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Castanets__10.0__96000__74400__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>4.77e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Castanets__10.0__96000__112000__0.txt">decode</a></td><td>Castanets</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>4.77e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Eddie_Rabbitt__10.0__96000__74400__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Eddie_Rabbitt__10.0__96000__112000__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Female_Speech_German__10.0__96000__74400__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Female_Speech_German__10.0__96000__112000__0.txt">decode</a></td><td>Female_Speech_German</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Glockenspiel__10.0__96000__74400__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Glockenspiel__10.0__96000__112000__0.txt">decode</a></td><td>Glockenspiel</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Piano_Schubert__10.0__96000__74400__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Piano_Schubert__10.0__96000__112000__0.txt">decode</a></td><td>Piano_Schubert</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Violoncello__10.0__96000__74400__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Violoncello__10.0__96000__112000__0.txt">decode</a></td><td>Violoncello</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Harpsichord__10.0__96000__74400__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Harpsichord__10.0__96000__112000__0.txt">decode</a></td><td>Harpsichord</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Male_Speech_English__10.0__96000__74400__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>74400</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Male_Speech_English__10.0__96000__112000__0.txt">decode</a></td><td>Male_Speech_English</td><td>10.0</td><td>96000</td><td>112000</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__ABBA__5.0__96000__86400__0.txt">decode</a></td><td>ABBA</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__ABBA__5.0__96000__129600__0.txt">decode</a></td><td>ABBA</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Castanets__5.0__96000__86400__0.txt">decode</a></td><td>Castanets</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>4.77e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Castanets__5.0__96000__129600__0.txt">decode</a></td><td>Castanets</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Eddie_Rabbitt__5.0__96000__86400__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Eddie_Rabbitt__5.0__96000__129600__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Female_Speech_German__5.0__96000__86400__0.txt">decode</a></td><td>Female_Speech_German</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Female_Speech_German__5.0__96000__129600__0.txt">decode</a></td><td>Female_Speech_German</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Glockenspiel__5.0__96000__86400__0.txt">decode</a></td><td>Glockenspiel</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Glockenspiel__5.0__96000__129600__0.txt">decode</a></td><td>Glockenspiel</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Piano_Schubert__5.0__96000__86400__0.txt">decode</a></td><td>Piano_Schubert</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Piano_Schubert__5.0__96000__129600__0.txt">decode</a></td><td>Piano_Schubert</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Violoncello__5.0__96000__86400__0.txt">decode</a></td><td>Violoncello</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Violoncello__5.0__96000__129600__0.txt">decode</a></td><td>Violoncello</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Harpsichord__5.0__96000__86400__0.txt">decode</a></td><td>Harpsichord</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Harpsichord__5.0__96000__129600__0.txt">decode</a></td><td>Harpsichord</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-154 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Male_Speech_English__5.0__96000__86400__0.txt">decode</a></td><td>Male_Speech_English</td><td>5.0</td><td>96000</td><td>86400</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Male_Speech_English__5.0__96000__129600__0.txt">decode</a></td><td>Male_Speech_English</td><td>5.0</td><td>96000</td><td>129600</td><td class=pass>4.77e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__ABBA__2.5__96000__99200__0.txt">decode</a></td><td>ABBA</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__ABBA__2.5__96000__147200__0.txt">decode</a></td><td>ABBA</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Castanets__2.5__96000__99200__0.txt">decode</a></td><td>Castanets</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-155 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Castanets__2.5__96000__147200__0.txt">decode</a></td><td>Castanets</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-156 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Eddie_Rabbitt__2.5__96000__99200__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Eddie_Rabbitt__2.5__96000__147200__0.txt">decode</a></td><td>Eddie_Rabbitt</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Female_Speech_German__2.5__96000__99200__0.txt">decode</a></td><td>Female_Speech_German</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Female_Speech_German__2.5__96000__147200__0.txt">decode</a></td><td>Female_Speech_German</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-149 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Glockenspiel__2.5__96000__99200__0.txt">decode</a></td><td>Glockenspiel</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Glockenspiel__2.5__96000__147200__0.txt">decode</a></td><td>Glockenspiel</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-151 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Piano_Schubert__2.5__96000__99200__0.txt">decode</a></td><td>Piano_Schubert</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Piano_Schubert__2.5__96000__147200__0.txt">decode</a></td><td>Piano_Schubert</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-150 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Violoncello__2.5__96000__99200__0.txt">decode</a></td><td>Violoncello</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-147 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Violoncello__2.5__96000__147200__0.txt">decode</a></td><td>Violoncello</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>2.38e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Harpsichord__2.5__96000__99200__0.txt">decode</a></td><td>Harpsichord</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-155 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Harpsichord__2.5__96000__147200__0.txt">decode</a></td><td>Harpsichord</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>1.19e-07 (0.00148)</td><td class=pass>-155 (-137)</td><td class=none>24 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Male_Speech_English__2.5__96000__99200__0.txt">decode</a></td><td>Male_Speech_English</td><td>2.5</td><td>96000</td><td>99200</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+<tr><td><a href="lc3plus_conformance_2024-02-27_14-48_log/FALLBACK__sqam__decode__Male_Speech_English__2.5__96000__147200__0.txt">decode</a></td><td>Male_Speech_English</td><td>2.5</td><td>96000</td><td>147200</td><td class=pass>3.58e-07 (0.00148)</td><td class=pass>-148 (-137)</td><td class=none>23 (22)</td></tr>
+</table>
+</div>
+</body>
diff --git a/conformance/lc3plus_hr_precision.html b/conformance/lc3plus_hr_precision.html
new file mode 100644
index 0000000..ae84620
--- /dev/null
+++ b/conformance/lc3plus_hr_precision.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html><head><meta charset="UTF-8"><title>liblc3-hr-precision.cfg Report</title>
+<style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px; width:100%} th {padding:4px; border-top:1px solid #8f908a} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn{background-color:rgba(214,137,16,0.4)} a:link {color: white;text-decoration: none;} a:visited {color: white} a:hover {color: white;font-weight:bold;} a:active {color: rgb(155, 155, 155)}</style></head>
+<body><h2>Precision requirements for liblc3-hr-precision.cfg passed</h2>
+<div><h3>THD/SNR Test - worst case and 1kHz values</h3>
+<table>
+<tr><th>Mode</th><th>Frame Size</th><th>Samplerate</th><th>Bitrate</th><th>SNR [dB]</th><th>SNR 1kHz [dB]</th><th>THD [dB]</th><th>THD 1kHz [dB]</th></tr><tr><td>encode</td><td>10.0</td><td>48000</td><td>300000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_10.0ms_48kHz_300.0kbps.png">124.01 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_10.0ms_48kHz_300.0kbps.png">129.71 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_10.0ms_48kHz_300.0kbps.png">-124.4 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_10.0ms_48kHz_300.0kbps.png">-132.91 (-120.0)</a></td></tr><tr><td>encode</td><td>10.0</td><td>96000</td><td>300000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_10.0ms_96kHz_300.0kbps.png">122.34 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_10.0ms_96kHz_300.0kbps.png">131.26 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_10.0ms_96kHz_300.0kbps.png">-123.5 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_10.0ms_96kHz_300.0kbps.png">-133.95 (-120.0)</a></td></tr><tr><td>encode</td><td>5.0</td><td>48000</td><td>400000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_5.0ms_48kHz_400.0kbps.png">127.27 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_5.0ms_48kHz_400.0kbps.png">132.47 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_5.0ms_48kHz_400.0kbps.png">-129.3 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_5.0ms_48kHz_400.0kbps.png">-133.03 (-120.0)</a></td></tr><tr><td>encode</td><td>5.0</td><td>96000</td><td>400000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_5.0ms_96kHz_400.0kbps.png">125.05 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_5.0ms_96kHz_400.0kbps.png">132.73 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_5.0ms_96kHz_400.0kbps.png">-126.62 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_5.0ms_96kHz_400.0kbps.png">-133.37 (-120.0)</a></td></tr><tr><td>encode</td><td>2.5</td><td>48000</td><td>400000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_2.5ms_48kHz_400.0kbps.png">123.4 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_2.5ms_48kHz_400.0kbps.png">130.61 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_2.5ms_48kHz_400.0kbps.png">-124.79 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_2.5ms_48kHz_400.0kbps.png">-132.78 (-120.0)</a></td></tr><tr><td>encode</td><td>2.5</td><td>96000</td><td>400000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_2.5ms_96kHz_400.0kbps.png">124.82 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_2.5ms_96kHz_400.0kbps.png">130.68 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_2.5ms_96kHz_400.0kbps.png">-127.59 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encode_2.5ms_96kHz_400.0kbps.png">-134.36 (-120.0)</a></td></tr><tr><td>decode</td><td>10.0</td><td>48000</td><td>300000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_10.0ms_48kHz_300.0kbps.png">120.25 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_10.0ms_48kHz_300.0kbps.png">129.17 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_10.0ms_48kHz_300.0kbps.png">-120.26 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_10.0ms_48kHz_300.0kbps.png">-130.53 (-120.0)</a></td></tr><tr><td>decode</td><td>10.0</td><td>96000</td><td>300000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_10.0ms_96kHz_300.0kbps.png">115.89 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_10.0ms_96kHz_300.0kbps.png">129.07 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_10.0ms_96kHz_300.0kbps.png">-116.12 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_10.0ms_96kHz_300.0kbps.png">-129.99 (-120.0)</a></td></tr><tr><td>decode</td><td>5.0</td><td>48000</td><td>400000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_5.0ms_48kHz_400.0kbps.png">125.47 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_5.0ms_48kHz_400.0kbps.png">133.76 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_5.0ms_48kHz_400.0kbps.png">-128.64 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_5.0ms_48kHz_400.0kbps.png">-134.62 (-120.0)</a></td></tr><tr><td>decode</td><td>5.0</td><td>96000</td><td>400000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_5.0ms_96kHz_400.0kbps.png">119.98 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_5.0ms_96kHz_400.0kbps.png">130.81 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_5.0ms_96kHz_400.0kbps.png">-120.59 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_5.0ms_96kHz_400.0kbps.png">-133.52 (-120.0)</a></td></tr><tr><td>decode</td><td>2.5</td><td>48000</td><td>400000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_2.5ms_48kHz_400.0kbps.png">124.13 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_2.5ms_48kHz_400.0kbps.png">129.65 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_2.5ms_48kHz_400.0kbps.png">-124.28 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_2.5ms_48kHz_400.0kbps.png">-134.27 (-120.0)</a></td></tr><tr><td>decode</td><td>2.5</td><td>96000</td><td>400000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_2.5ms_96kHz_400.0kbps.png">117.95 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_2.5ms_96kHz_400.0kbps.png">135.27 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_2.5ms_96kHz_400.0kbps.png">-118.42 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_decode_2.5ms_96kHz_400.0kbps.png">-136.26 (-120.0)</a></td></tr><tr><td>encdec</td><td>10.0</td><td>48000</td><td>300000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_10.0ms_48kHz_300.0kbps.png">123.62 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_10.0ms_48kHz_300.0kbps.png">133.42 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_10.0ms_48kHz_300.0kbps.png">-124.58 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_10.0ms_48kHz_300.0kbps.png">-135.03 (-120.0)</a></td></tr><tr><td>encdec</td><td>10.0</td><td>96000</td><td>300000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_10.0ms_96kHz_300.0kbps.png">122.27 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_10.0ms_96kHz_300.0kbps.png">129.67 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_10.0ms_96kHz_300.0kbps.png">-123.58 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_10.0ms_96kHz_300.0kbps.png">-134.01 (-120.0)</a></td></tr><tr><td>encdec</td><td>5.0</td><td>48000</td><td>400000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_5.0ms_48kHz_400.0kbps.png">127.04 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_5.0ms_48kHz_400.0kbps.png">131.85 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_5.0ms_48kHz_400.0kbps.png">-129.38 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_5.0ms_48kHz_400.0kbps.png">-135.9 (-120.0)</a></td></tr><tr><td>encdec</td><td>5.0</td><td>96000</td><td>400000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_5.0ms_96kHz_400.0kbps.png">124.97 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_5.0ms_96kHz_400.0kbps.png">128.11 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_5.0ms_96kHz_400.0kbps.png">-126.89 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_5.0ms_96kHz_400.0kbps.png">-133.69 (-120.0)</a></td></tr><tr><td>encdec</td><td>2.5</td><td>48000</td><td>400000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_2.5ms_48kHz_400.0kbps.png">123.79 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_2.5ms_48kHz_400.0kbps.png">130.31 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_2.5ms_48kHz_400.0kbps.png">-125.02 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_2.5ms_48kHz_400.0kbps.png">-134.21 (-120.0)</a></td></tr><tr><td>encdec</td><td>2.5</td><td>96000</td><td>400000</td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_2.5ms_96kHz_400.0kbps.png">125.19 (110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_2.5ms_96kHz_400.0kbps.png">130.67 (120.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_2.5ms_96kHz_400.0kbps.png">-127.52 (-110.0)</a></td><td class="pass"><a href="png_liblc3-hr-precision/thd+n_encdec_2.5ms_96kHz_400.0kbps.png">-134.78 (-120.0)</a></td></tr></table></div></body> \ No newline at end of file
diff --git a/conformance/music_decode_10m.html b/conformance/music_decode_10m.html
new file mode 100644
index 0000000..40ac135
--- /dev/null
+++ b/conformance/music_decode_10m.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html><head><title>music_decode_10m Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px} th {padding:4px} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn {background-color:rgba(214,137,16,0.4)}</style></head><body><h2>Conformance test for "music_decode_10m" (Frame Size 10 ms) passed!</h2><div><table><tr><h3>SQAM items - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>Max. Abs. Diff (threshold)</th><th>RMS (threshold) [dB]</th><th>RMS reached (threshold) [bits]</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td>0.000305</td><td>-91.081</td><td>14</td></tr>
+<tr><td>decode</td><td>ABBA</td><td>48000</td><td>80000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-95.243 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>ABBA</td><td>48000</td><td>96000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-95.229 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>ABBA</td><td>48000</td><td>124000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-95.312 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Castanets</td><td>48000</td><td>80000</td><td class=pass>0.000305 (0.00148)</td><td class=pass>-96.625 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Castanets</td><td>48000</td><td>96000</td><td class=pass>0.000275 (0.00148)</td><td class=pass>-96.779 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Castanets</td><td>48000</td><td>124000</td><td class=pass>0.000305 (0.00148)</td><td class=pass>-96.627 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Eddie_Rabbitt</td><td>48000</td><td>80000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-91.876 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Eddie_Rabbitt</td><td>48000</td><td>96000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-91.870 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Eddie_Rabbitt</td><td>48000</td><td>124000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-91.952 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Female_Speech_German</td><td>48000</td><td>80000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-92.550 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Female_Speech_German</td><td>48000</td><td>96000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-92.651 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Female_Speech_German</td><td>48000</td><td>124000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-92.678 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Glockenspiel</td><td>48000</td><td>80000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-94.290 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Glockenspiel</td><td>48000</td><td>96000</td><td class=pass>0.000183 (0.00148)</td><td class=pass>-94.434 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Glockenspiel</td><td>48000</td><td>124000</td><td class=pass>0.000183 (0.00148)</td><td class=pass>-94.411 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Harpsichord</td><td>48000</td><td>80000</td><td class=pass>0.000061 (0.00148)</td><td class=pass>-99.407 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Harpsichord</td><td>48000</td><td>96000</td><td class=pass>0.000061 (0.00148)</td><td class=pass>-99.130 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Harpsichord</td><td>48000</td><td>124000</td><td class=pass>0.000061 (0.00148)</td><td class=pass>-99.154 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Male_Speech_English</td><td>48000</td><td>80000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-91.226 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Male_Speech_English</td><td>48000</td><td>96000</td><td class=pass>0.000275 (0.00148)</td><td class=pass>-91.118 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Male_Speech_English</td><td>48000</td><td>124000</td><td class=pass>0.000275 (0.00148)</td><td class=pass>-91.081 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Piano_Schubert</td><td>48000</td><td>80000</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-94.613 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Piano_Schubert</td><td>48000</td><td>96000</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-94.642 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Piano_Schubert</td><td>48000</td><td>124000</td><td class=pass>0.000183 (0.00148)</td><td class=pass>-94.628 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Violoncello</td><td>48000</td><td>80000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-91.514 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Violoncello</td><td>48000</td><td>96000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-91.497 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Violoncello</td><td>48000</td><td>124000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-91.550 (-89.060)</td><td class=none>14 (14)</td></tr>
+</table></div></body> \ No newline at end of file
diff --git a/conformance/music_decode_7m5.html b/conformance/music_decode_7m5.html
new file mode 100644
index 0000000..689485e
--- /dev/null
+++ b/conformance/music_decode_7m5.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html><head><title>music_decode_7m5 Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px} th {padding:4px} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn {background-color:rgba(214,137,16,0.4)}</style></head><body><h2>Conformance test for "music_decode_7m5" (Frame Size 7.5 ms) passed!</h2><div><table><tr><h3>SQAM items - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>Max. Abs. Diff (threshold)</th><th>RMS (threshold) [dB]</th><th>RMS reached (threshold) [bits]</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td>0.000427</td><td>-91.576</td><td>14</td></tr>
+<tr><td>decode</td><td>ABBA</td><td>48000</td><td>80000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-95.411 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>ABBA</td><td>48000</td><td>96000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-95.366 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>ABBA</td><td>48000</td><td>124800</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-95.443 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Castanets</td><td>48000</td><td>80000</td><td class=pass>0.000336 (0.00148)</td><td class=pass>-97.539 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Castanets</td><td>48000</td><td>96000</td><td class=pass>0.000366 (0.00148)</td><td class=pass>-97.598 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Castanets</td><td>48000</td><td>124800</td><td class=pass>0.000336 (0.00148)</td><td class=pass>-97.507 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Eddie_Rabbitt</td><td>48000</td><td>80000</td><td class=pass>0.000183 (0.00148)</td><td class=pass>-92.158 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Eddie_Rabbitt</td><td>48000</td><td>96000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-92.181 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Eddie_Rabbitt</td><td>48000</td><td>124800</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-92.207 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Female_Speech_German</td><td>48000</td><td>80000</td><td class=pass>0.000275 (0.00148)</td><td class=pass>-92.724 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Female_Speech_German</td><td>48000</td><td>96000</td><td class=pass>0.000305 (0.00148)</td><td class=pass>-92.892 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Female_Speech_German</td><td>48000</td><td>124800</td><td class=pass>0.000305 (0.00148)</td><td class=pass>-92.839 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Glockenspiel</td><td>48000</td><td>80000</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-95.027 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Glockenspiel</td><td>48000</td><td>96000</td><td class=pass>0.000183 (0.00148)</td><td class=pass>-95.013 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Glockenspiel</td><td>48000</td><td>124800</td><td class=pass>0.000183 (0.00148)</td><td class=pass>-94.997 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Harpsichord</td><td>48000</td><td>80000</td><td class=pass>0.000061 (0.00148)</td><td class=pass>-99.280 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Harpsichord</td><td>48000</td><td>96000</td><td class=pass>0.000061 (0.00148)</td><td class=pass>-99.164 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Harpsichord</td><td>48000</td><td>124800</td><td class=pass>0.000061 (0.00148)</td><td class=pass>-99.153 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Male_Speech_English</td><td>48000</td><td>80000</td><td class=pass>0.000366 (0.00148)</td><td class=pass>-91.761 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Male_Speech_English</td><td>48000</td><td>96000</td><td class=pass>0.000366 (0.00148)</td><td class=pass>-91.618 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Male_Speech_English</td><td>48000</td><td>124800</td><td class=pass>0.000427 (0.00148)</td><td class=pass>-91.595 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Piano_Schubert</td><td>48000</td><td>80000</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-94.768 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Piano_Schubert</td><td>48000</td><td>96000</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-94.831 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Piano_Schubert</td><td>48000</td><td>124800</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-94.834 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Violoncello</td><td>48000</td><td>80000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-91.654 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Violoncello</td><td>48000</td><td>96000</td><td class=pass>0.000275 (0.00148)</td><td class=pass>-91.576 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Violoncello</td><td>48000</td><td>124800</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-91.643 (-89.060)</td><td class=none>14 (14)</td></tr>
+</table></div></body> \ No newline at end of file
diff --git a/conformance/music_encdec_10m.html b/conformance/music_encdec_10m.html
new file mode 100644
index 0000000..36b8301
--- /dev/null
+++ b/conformance/music_encdec_10m.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html><head><title>music_encdec_10m Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px} th {padding:4px} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn {background-color:rgba(214,137,16,0.4)}</style></head><body><h2>Conformance test for "music_encdec_10m" (Frame Size 10 ms) passed!</h2><div><table><tr><h3>Band-limited signals - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>ODG Ref</th><th>Delta ODG (threshold)</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td></td><td>0.00548</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_16000_wb</td><td>48000</td><td>96000</td><td class=>-0.00683</td><td class=pass>0.000525 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_24000_sswb</td><td>48000</td><td>96000</td><td class=>-0.0148</td><td class=pass>0.00246 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_32000_swb</td><td>48000</td><td>96000</td><td class=>-0.141</td><td class=pass>0.000126 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_8000_nb</td><td>48000</td><td>96000</td><td class=>-0.0253</td><td class=pass>0.00548 (0.06)</td></tr>
+</table></div></body><div><table><tr><h3>Signals above 20kHz - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>Energy (threshold) [dB]</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td></tr>
+<tr><td>encode</td><td>White_Noise_HP20</td><td>48000</td><td>96000</td><td class=pass>68.949 (70)</td></tr>
+</table></div></body><div><table><tr><h3>SQAM items - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>ODG Ref</th><th>Delta ODG (threshold)</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td></td><td>0.0225</td></tr>
+<tr><td>encdec</td><td>ABBA</td><td>48000</td><td>80000</td><td class=>-0.425</td><td class=pass>0.00594 (0.06)</td></tr>
+<tr><td>encdec</td><td>ABBA</td><td>48000</td><td>96000</td><td class=>-0.238</td><td class=pass>0.00249 (0.06)</td></tr>
+<tr><td>encdec</td><td>ABBA</td><td>48000</td><td>124000</td><td class=>-0.0418</td><td class=pass>0.0038 (0.06)</td></tr>
+<tr><td>encdec</td><td>Castanets</td><td>48000</td><td>80000</td><td class=>-0.463</td><td class=pass>0.000316 (0.06)</td></tr>
+<tr><td>encdec</td><td>Castanets</td><td>48000</td><td>96000</td><td class=>-0.257</td><td class=pass>0.00687 (0.06)</td></tr>
+<tr><td>encdec</td><td>Castanets</td><td>48000</td><td>124000</td><td class=>-0.0561</td><td class=pass>0.00505 (0.06)</td></tr>
+<tr><td>encdec</td><td>Eddie_Rabbitt</td><td>48000</td><td>80000</td><td class=>-0.386</td><td class=pass>0.00594 (0.06)</td></tr>
+<tr><td>encdec</td><td>Eddie_Rabbitt</td><td>48000</td><td>96000</td><td class=>-0.199</td><td class=pass>0.00114 (0.06)</td></tr>
+<tr><td>encdec</td><td>Eddie_Rabbitt</td><td>48000</td><td>124000</td><td class=>-0.0374</td><td class=pass>0.00132 (0.06)</td></tr>
+<tr><td>encdec</td><td>Female_Speech_German</td><td>48000</td><td>80000</td><td class=>-0.461</td><td class=pass>0.00133 (0.06)</td></tr>
+<tr><td>encdec</td><td>Female_Speech_German</td><td>48000</td><td>96000</td><td class=>-0.223</td><td class=pass>0.00355 (0.06)</td></tr>
+<tr><td>encdec</td><td>Female_Speech_German</td><td>48000</td><td>124000</td><td class=>-0.0325</td><td class=pass>0.00215 (0.06)</td></tr>
+<tr><td>encdec</td><td>Glockenspiel</td><td>48000</td><td>80000</td><td class=>-1.236</td><td class=pass>0.0009 (0.06)</td></tr>
+<tr><td>encdec</td><td>Glockenspiel</td><td>48000</td><td>96000</td><td class=>-0.278</td><td class=pass>0.0138 (0.06)</td></tr>
+<tr><td>encdec</td><td>Glockenspiel</td><td>48000</td><td>124000</td><td class=>-0.0599</td><td class=pass>0.0031 (0.06)</td></tr>
+<tr><td>encdec</td><td>Harpsichord</td><td>48000</td><td>80000</td><td class=>-1.171</td><td class=pass>0.00618 (0.06)</td></tr>
+<tr><td>encdec</td><td>Harpsichord</td><td>48000</td><td>96000</td><td class=>-0.65</td><td class=pass>0.00135 (0.06)</td></tr>
+<tr><td>encdec</td><td>Harpsichord</td><td>48000</td><td>124000</td><td class=>-0.187</td><td class=pass>0.00303 (0.06)</td></tr>
+<tr><td>encdec</td><td>Male_Speech_English</td><td>48000</td><td>80000</td><td class=>-0.416</td><td class=pass>0.00385 (0.06)</td></tr>
+<tr><td>encdec</td><td>Male_Speech_English</td><td>48000</td><td>96000</td><td class=>-0.178</td><td class=pass>0.00265 (0.06)</td></tr>
+<tr><td>encdec</td><td>Male_Speech_English</td><td>48000</td><td>124000</td><td class=>-0.0361</td><td class=pass>0.00788 (0.06)</td></tr>
+<tr><td>encdec</td><td>Piano_Schubert</td><td>48000</td><td>80000</td><td class=>-0.258</td><td class=pass>0.000657 (0.06)</td></tr>
+<tr><td>encdec</td><td>Piano_Schubert</td><td>48000</td><td>96000</td><td class=>-0.108</td><td class=pass>0.000254 (0.06)</td></tr>
+<tr><td>encdec</td><td>Piano_Schubert</td><td>48000</td><td>124000</td><td class=>-0.00141</td><td class=pass>0.00173 (0.06)</td></tr>
+<tr><td>encdec</td><td>Violoncello</td><td>48000</td><td>80000</td><td class=>-0.889</td><td class=pass>0.0225 (0.06)</td></tr>
+<tr><td>encdec</td><td>Violoncello</td><td>48000</td><td>96000</td><td class=>-0.533</td><td class=pass>0.0128 (0.06)</td></tr>
+<tr><td>encdec</td><td>Violoncello</td><td>48000</td><td>124000</td><td class=>-0.125</td><td class=pass>0.0038 (0.06)</td></tr>
+</table></div></body> \ No newline at end of file
diff --git a/conformance/music_encdec_7m5.html b/conformance/music_encdec_7m5.html
new file mode 100644
index 0000000..715cbd6
--- /dev/null
+++ b/conformance/music_encdec_7m5.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html><head><title>music_encdec_7m5 Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px} th {padding:4px} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn {background-color:rgba(214,137,16,0.4)}</style></head><body><h2>Conformance test for "music_encdec_7m5" (Frame Size 7.5 ms) passed!</h2><div><table><tr><h3>Band-limited signals - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>ODG Ref</th><th>Delta ODG (threshold)</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td></td><td>0.00687</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_16000_wb</td><td>48000</td><td>96000</td><td class=>-0.000429</td><td class=pass>0.00155 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_24000_sswb</td><td>48000</td><td>96000</td><td class=>-0.0542</td><td class=pass>0.00193 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_32000_swb</td><td>48000</td><td>96000</td><td class=>-0.202</td><td class=pass>0.00687 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_8000_nb</td><td>48000</td><td>96000</td><td class=>-0.00225</td><td class=pass>0.00105 (0.06)</td></tr>
+</table></div></body><div><table><tr><h3>Signals above 20kHz - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>Energy (threshold) [dB]</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td></tr>
+<tr><td>encode</td><td>White_Noise_HP20</td><td>48000</td><td>96000</td><td class=pass>69.594 (70)</td></tr>
+</table></div></body><div><table><tr><h3>SQAM items - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>ODG Ref</th><th>Delta ODG (threshold)</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td></td><td>0.0339</td></tr>
+<tr><td>encdec</td><td>ABBA</td><td>48000</td><td>80000</td><td class=>-0.467</td><td class=pass>0.00588 (0.06)</td></tr>
+<tr><td>encdec</td><td>ABBA</td><td>48000</td><td>96000</td><td class=>-0.28</td><td class=pass>0.000468 (0.06)</td></tr>
+<tr><td>encdec</td><td>ABBA</td><td>48000</td><td>124800</td><td class=>-0.0612</td><td class=pass>0.000207 (0.06)</td></tr>
+<tr><td>encdec</td><td>Castanets</td><td>48000</td><td>80000</td><td class=>-0.549</td><td class=pass>0.00068 (0.06)</td></tr>
+<tr><td>encdec</td><td>Castanets</td><td>48000</td><td>96000</td><td class=>-0.28</td><td class=pass>0.00313 (0.06)</td></tr>
+<tr><td>encdec</td><td>Castanets</td><td>48000</td><td>124800</td><td class=>-0.063</td><td class=pass>0.00147 (0.06)</td></tr>
+<tr><td>encdec</td><td>Eddie_Rabbitt</td><td>48000</td><td>80000</td><td class=>-0.465</td><td class=pass>0.000874 (0.06)</td></tr>
+<tr><td>encdec</td><td>Eddie_Rabbitt</td><td>48000</td><td>96000</td><td class=>-0.251</td><td class=pass>0.00197 (0.06)</td></tr>
+<tr><td>encdec</td><td>Eddie_Rabbitt</td><td>48000</td><td>124800</td><td class=>-0.0526</td><td class=pass>0.00153 (0.06)</td></tr>
+<tr><td>encdec</td><td>Female_Speech_German</td><td>48000</td><td>80000</td><td class=>-0.572</td><td class=pass>0.00368 (0.06)</td></tr>
+<tr><td>encdec</td><td>Female_Speech_German</td><td>48000</td><td>96000</td><td class=>-0.283</td><td class=pass>0.00587 (0.06)</td></tr>
+<tr><td>encdec</td><td>Female_Speech_German</td><td>48000</td><td>124800</td><td class=>-0.0581</td><td class=pass>0.00258 (0.06)</td></tr>
+<tr><td>encdec</td><td>Glockenspiel</td><td>48000</td><td>80000</td><td class=>-1.067</td><td class=pass>0.0143 (0.06)</td></tr>
+<tr><td>encdec</td><td>Glockenspiel</td><td>48000</td><td>96000</td><td class=>-0.148</td><td class=pass>0.00101 (0.06)</td></tr>
+<tr><td>encdec</td><td>Glockenspiel</td><td>48000</td><td>124800</td><td class=>-0.0126</td><td class=pass>0.00288 (0.06)</td></tr>
+<tr><td>encdec</td><td>Harpsichord</td><td>48000</td><td>80000</td><td class=>-1.349</td><td class=pass>0.000708 (0.06)</td></tr>
+<tr><td>encdec</td><td>Harpsichord</td><td>48000</td><td>96000</td><td class=>-0.8</td><td class=pass>0.004 (0.06)</td></tr>
+<tr><td>encdec</td><td>Harpsichord</td><td>48000</td><td>124800</td><td class=>-0.238</td><td class=pass>0.00127 (0.06)</td></tr>
+<tr><td>encdec</td><td>Male_Speech_English</td><td>48000</td><td>80000</td><td class=>-0.512</td><td class=pass>0.00563 (0.06)</td></tr>
+<tr><td>encdec</td><td>Male_Speech_English</td><td>48000</td><td>96000</td><td class=>-0.233</td><td class=pass>0.00225 (0.06)</td></tr>
+<tr><td>encdec</td><td>Male_Speech_English</td><td>48000</td><td>124800</td><td class=>-0.0403</td><td class=pass>0.00311 (0.06)</td></tr>
+<tr><td>encdec</td><td>Piano_Schubert</td><td>48000</td><td>80000</td><td class=>-0.304</td><td class=pass>0.00182 (0.06)</td></tr>
+<tr><td>encdec</td><td>Piano_Schubert</td><td>48000</td><td>96000</td><td class=>-0.131</td><td class=pass>0.000234 (0.06)</td></tr>
+<tr><td>encdec</td><td>Piano_Schubert</td><td>48000</td><td>124800</td><td class=>-0.0129</td><td class=pass>0.000554 (0.06)</td></tr>
+<tr><td>encdec</td><td>Violoncello</td><td>48000</td><td>80000</td><td class=>-1.039</td><td class=pass>0.0339 (0.06)</td></tr>
+<tr><td>encdec</td><td>Violoncello</td><td>48000</td><td>96000</td><td class=>-0.661</td><td class=pass>0.0262 (0.06)</td></tr>
+<tr><td>encdec</td><td>Violoncello</td><td>48000</td><td>124800</td><td class=>-0.169</td><td class=pass>0.00292 (0.06)</td></tr>
+</table></div></body> \ No newline at end of file
diff --git a/conformance/music_encode_10m.html b/conformance/music_encode_10m.html
new file mode 100644
index 0000000..1f8622f
--- /dev/null
+++ b/conformance/music_encode_10m.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html><head><title>music_encode_10m Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px} th {padding:4px} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn {background-color:rgba(214,137,16,0.4)}</style></head><body><h2>Conformance test for "music_encode_10m" (Frame Size 10 ms) passed!</h2><div><table><tr><h3>Band-limited signals - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>ODG Ref</th><th>Delta ODG (threshold)</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td></td><td>0.00548</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_16000_wb</td><td>48000</td><td>96000</td><td class=>-0.00683</td><td class=pass>0.000525 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_24000_sswb</td><td>48000</td><td>96000</td><td class=>-0.0148</td><td class=pass>0.00246 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_32000_swb</td><td>48000</td><td>96000</td><td class=>-0.141</td><td class=pass>0.000126 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_8000_nb</td><td>48000</td><td>96000</td><td class=>-0.0253</td><td class=pass>0.00548 (0.06)</td></tr>
+</table></div></body><div><table><tr><h3>Signals above 20kHz - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>Energy (threshold) [dB]</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td></tr>
+<tr><td>encode</td><td>White_Noise_HP20</td><td>48000</td><td>96000</td><td class=pass>68.949 (70)</td></tr>
+</table></div></body><div><table><tr><h3>SQAM items - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>ODG Ref</th><th>Delta ODG (threshold)</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td></td><td>0.021</td></tr>
+<tr><td>encode</td><td>ABBA</td><td>48000</td><td>80000</td><td class=>-0.425</td><td class=pass>0.00619 (0.06)</td></tr>
+<tr><td>encode</td><td>ABBA</td><td>48000</td><td>96000</td><td class=>-0.238</td><td class=pass>0.00242 (0.06)</td></tr>
+<tr><td>encode</td><td>ABBA</td><td>48000</td><td>124000</td><td class=>-0.0418</td><td class=pass>0.00373 (0.06)</td></tr>
+<tr><td>encode</td><td>Castanets</td><td>48000</td><td>80000</td><td class=>-0.463</td><td class=pass>0.000311 (0.06)</td></tr>
+<tr><td>encode</td><td>Castanets</td><td>48000</td><td>96000</td><td class=>-0.257</td><td class=pass>0.00634 (0.06)</td></tr>
+<tr><td>encode</td><td>Castanets</td><td>48000</td><td>124000</td><td class=>-0.0561</td><td class=pass>0.005 (0.06)</td></tr>
+<tr><td>encode</td><td>Eddie_Rabbitt</td><td>48000</td><td>80000</td><td class=>-0.386</td><td class=pass>0.00559 (0.06)</td></tr>
+<tr><td>encode</td><td>Eddie_Rabbitt</td><td>48000</td><td>96000</td><td class=>-0.199</td><td class=pass>0.00136 (0.06)</td></tr>
+<tr><td>encode</td><td>Eddie_Rabbitt</td><td>48000</td><td>124000</td><td class=>-0.0374</td><td class=pass>0.000781 (0.06)</td></tr>
+<tr><td>encode</td><td>Female_Speech_German</td><td>48000</td><td>80000</td><td class=>-0.461</td><td class=pass>0.00229 (0.06)</td></tr>
+<tr><td>encode</td><td>Female_Speech_German</td><td>48000</td><td>96000</td><td class=>-0.223</td><td class=pass>0.00301 (0.06)</td></tr>
+<tr><td>encode</td><td>Female_Speech_German</td><td>48000</td><td>124000</td><td class=>-0.0325</td><td class=pass>0.00136 (0.06)</td></tr>
+<tr><td>encode</td><td>Glockenspiel</td><td>48000</td><td>80000</td><td class=>-1.236</td><td class=pass>0.0143 (0.06)</td></tr>
+<tr><td>encode</td><td>Glockenspiel</td><td>48000</td><td>96000</td><td class=>-0.278</td><td class=pass>0.00424 (0.06)</td></tr>
+<tr><td>encode</td><td>Glockenspiel</td><td>48000</td><td>124000</td><td class=>-0.0599</td><td class=pass>0.00104 (0.06)</td></tr>
+<tr><td>encode</td><td>Harpsichord</td><td>48000</td><td>80000</td><td class=>-1.171</td><td class=pass>0.00453 (0.06)</td></tr>
+<tr><td>encode</td><td>Harpsichord</td><td>48000</td><td>96000</td><td class=>-0.65</td><td class=pass>0.000973 (0.06)</td></tr>
+<tr><td>encode</td><td>Harpsichord</td><td>48000</td><td>124000</td><td class=>-0.187</td><td class=pass>0.00336 (0.06)</td></tr>
+<tr><td>encode</td><td>Male_Speech_English</td><td>48000</td><td>80000</td><td class=>-0.416</td><td class=pass>0.00364 (0.06)</td></tr>
+<tr><td>encode</td><td>Male_Speech_English</td><td>48000</td><td>96000</td><td class=>-0.178</td><td class=pass>0.00298 (0.06)</td></tr>
+<tr><td>encode</td><td>Male_Speech_English</td><td>48000</td><td>124000</td><td class=>-0.0361</td><td class=pass>0.00714 (0.06)</td></tr>
+<tr><td>encode</td><td>Piano_Schubert</td><td>48000</td><td>80000</td><td class=>-0.258</td><td class=pass>0.000973 (0.06)</td></tr>
+<tr><td>encode</td><td>Piano_Schubert</td><td>48000</td><td>96000</td><td class=>-0.108</td><td class=pass>0.0008 (0.06)</td></tr>
+<tr><td>encode</td><td>Piano_Schubert</td><td>48000</td><td>124000</td><td class=>-0.00141</td><td class=pass>0.00131 (0.06)</td></tr>
+<tr><td>encode</td><td>Violoncello</td><td>48000</td><td>80000</td><td class=>-0.889</td><td class=pass>0.021 (0.06)</td></tr>
+<tr><td>encode</td><td>Violoncello</td><td>48000</td><td>96000</td><td class=>-0.533</td><td class=pass>0.0118 (0.06)</td></tr>
+<tr><td>encode</td><td>Violoncello</td><td>48000</td><td>124000</td><td class=>-0.125</td><td class=pass>0.00334 (0.06)</td></tr>
+</table></div></body> \ No newline at end of file
diff --git a/conformance/music_encode_7m5.html b/conformance/music_encode_7m5.html
new file mode 100644
index 0000000..c8589b4
--- /dev/null
+++ b/conformance/music_encode_7m5.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html><head><title>music_encode_7m5 Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px} th {padding:4px} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn {background-color:rgba(214,137,16,0.4)}</style></head><body><h2>Conformance test for "music_encode_7m5" (Frame Size 7.5 ms) passed!</h2><div><table><tr><h3>Band-limited signals - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>ODG Ref</th><th>Delta ODG (threshold)</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td></td><td>0.00687</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_16000_wb</td><td>48000</td><td>96000</td><td class=>-0.000429</td><td class=pass>0.00155 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_24000_sswb</td><td>48000</td><td>96000</td><td class=>-0.0542</td><td class=pass>0.00193 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_32000_swb</td><td>48000</td><td>96000</td><td class=>-0.202</td><td class=pass>0.00687 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_8000_nb</td><td>48000</td><td>96000</td><td class=>-0.00225</td><td class=pass>0.00105 (0.06)</td></tr>
+</table></div></body><div><table><tr><h3>Signals above 20kHz - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>Energy (threshold) [dB]</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td></tr>
+<tr><td>encode</td><td>White_Noise_HP20</td><td>48000</td><td>96000</td><td class=pass>69.594 (70)</td></tr>
+</table></div></body><div><table><tr><h3>SQAM items - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>ODG Ref</th><th>Delta ODG (threshold)</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td></td><td>0.0305</td></tr>
+<tr><td>encode</td><td>ABBA</td><td>48000</td><td>80000</td><td class=>-0.467</td><td class=pass>0.00547 (0.06)</td></tr>
+<tr><td>encode</td><td>ABBA</td><td>48000</td><td>96000</td><td class=>-0.28</td><td class=pass>0.000128 (0.06)</td></tr>
+<tr><td>encode</td><td>ABBA</td><td>48000</td><td>124800</td><td class=>-0.0612</td><td class=pass>0.000268 (0.06)</td></tr>
+<tr><td>encode</td><td>Castanets</td><td>48000</td><td>80000</td><td class=>-0.549</td><td class=pass>0.000617 (0.06)</td></tr>
+<tr><td>encode</td><td>Castanets</td><td>48000</td><td>96000</td><td class=>-0.28</td><td class=pass>0.00297 (0.06)</td></tr>
+<tr><td>encode</td><td>Castanets</td><td>48000</td><td>124800</td><td class=>-0.063</td><td class=pass>0.00118 (0.06)</td></tr>
+<tr><td>encode</td><td>Eddie_Rabbitt</td><td>48000</td><td>80000</td><td class=>-0.465</td><td class=pass>0.000562 (0.06)</td></tr>
+<tr><td>encode</td><td>Eddie_Rabbitt</td><td>48000</td><td>96000</td><td class=>-0.251</td><td class=pass>0.00185 (0.06)</td></tr>
+<tr><td>encode</td><td>Eddie_Rabbitt</td><td>48000</td><td>124800</td><td class=>-0.0526</td><td class=pass>0.00153 (0.06)</td></tr>
+<tr><td>encode</td><td>Female_Speech_German</td><td>48000</td><td>80000</td><td class=>-0.572</td><td class=pass>0.00108 (0.06)</td></tr>
+<tr><td>encode</td><td>Female_Speech_German</td><td>48000</td><td>96000</td><td class=>-0.283</td><td class=pass>0.00547 (0.06)</td></tr>
+<tr><td>encode</td><td>Female_Speech_German</td><td>48000</td><td>124800</td><td class=>-0.0581</td><td class=pass>0.00204 (0.06)</td></tr>
+<tr><td>encode</td><td>Glockenspiel</td><td>48000</td><td>80000</td><td class=>-1.067</td><td class=pass>0.0182 (0.06)</td></tr>
+<tr><td>encode</td><td>Glockenspiel</td><td>48000</td><td>96000</td><td class=>-0.148</td><td class=pass>0.00174 (0.06)</td></tr>
+<tr><td>encode</td><td>Glockenspiel</td><td>48000</td><td>124800</td><td class=>-0.0126</td><td class=pass>0.00155 (0.06)</td></tr>
+<tr><td>encode</td><td>Harpsichord</td><td>48000</td><td>80000</td><td class=>-1.349</td><td class=pass>0.000076 (0.06)</td></tr>
+<tr><td>encode</td><td>Harpsichord</td><td>48000</td><td>96000</td><td class=>-0.8</td><td class=pass>0.00349 (0.06)</td></tr>
+<tr><td>encode</td><td>Harpsichord</td><td>48000</td><td>124800</td><td class=>-0.238</td><td class=pass>0.00115 (0.06)</td></tr>
+<tr><td>encode</td><td>Male_Speech_English</td><td>48000</td><td>80000</td><td class=>-0.512</td><td class=pass>0.00593 (0.06)</td></tr>
+<tr><td>encode</td><td>Male_Speech_English</td><td>48000</td><td>96000</td><td class=>-0.233</td><td class=pass>0.000789 (0.06)</td></tr>
+<tr><td>encode</td><td>Male_Speech_English</td><td>48000</td><td>124800</td><td class=>-0.0403</td><td class=pass>0.00207 (0.06)</td></tr>
+<tr><td>encode</td><td>Piano_Schubert</td><td>48000</td><td>80000</td><td class=>-0.304</td><td class=pass>0.00143 (0.06)</td></tr>
+<tr><td>encode</td><td>Piano_Schubert</td><td>48000</td><td>96000</td><td class=>-0.131</td><td class=pass>0.00124 (0.06)</td></tr>
+<tr><td>encode</td><td>Piano_Schubert</td><td>48000</td><td>124800</td><td class=>-0.0129</td><td class=pass>0.000591 (0.06)</td></tr>
+<tr><td>encode</td><td>Violoncello</td><td>48000</td><td>80000</td><td class=>-1.039</td><td class=pass>0.0305 (0.06)</td></tr>
+<tr><td>encode</td><td>Violoncello</td><td>48000</td><td>96000</td><td class=>-0.661</td><td class=pass>0.0247 (0.06)</td></tr>
+<tr><td>encode</td><td>Violoncello</td><td>48000</td><td>124800</td><td class=>-0.169</td><td class=pass>0.0022 (0.06)</td></tr>
+</table></div></body> \ No newline at end of file
diff --git a/conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_48kHz_300.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_48kHz_300.0kbps.png
new file mode 100644
index 0000000..f85d12f
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_48kHz_300.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_48kHz_500.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_48kHz_500.0kbps.png
new file mode 100644
index 0000000..cecc4ac
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_48kHz_500.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_96kHz_300.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_96kHz_300.0kbps.png
new file mode 100644
index 0000000..5242f5e
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_96kHz_300.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_96kHz_500.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_96kHz_500.0kbps.png
new file mode 100644
index 0000000..2150daa
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_96kHz_500.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_48kHz_400.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_48kHz_400.0kbps.png
new file mode 100644
index 0000000..a6c593c
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_48kHz_400.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_48kHz_672.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_48kHz_672.0kbps.png
new file mode 100644
index 0000000..03af175
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_48kHz_672.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_96kHz_400.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_96kHz_400.0kbps.png
new file mode 100644
index 0000000..5406b66
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_96kHz_400.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_96kHz_672.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_96kHz_672.0kbps.png
new file mode 100644
index 0000000..298557d
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_96kHz_672.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_48kHz_400.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_48kHz_400.0kbps.png
new file mode 100644
index 0000000..530b42c
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_48kHz_400.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_48kHz_600.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_48kHz_600.0kbps.png
new file mode 100644
index 0000000..2f35bdf
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_48kHz_600.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_96kHz_400.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_96kHz_400.0kbps.png
new file mode 100644
index 0000000..df4cf78
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_96kHz_400.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_96kHz_600.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_96kHz_600.0kbps.png
new file mode 100644
index 0000000..3c7373b
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_96kHz_600.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_48kHz_300.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_48kHz_300.0kbps.png
new file mode 100644
index 0000000..21c6741
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_48kHz_300.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_48kHz_500.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_48kHz_500.0kbps.png
new file mode 100644
index 0000000..b513627
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_48kHz_500.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_96kHz_300.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_96kHz_300.0kbps.png
new file mode 100644
index 0000000..164992a
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_96kHz_300.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_96kHz_500.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_96kHz_500.0kbps.png
new file mode 100644
index 0000000..dcfa3a3
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_96kHz_500.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_48kHz_400.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_48kHz_400.0kbps.png
new file mode 100644
index 0000000..ce0117f
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_48kHz_400.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_48kHz_672.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_48kHz_672.0kbps.png
new file mode 100644
index 0000000..a734ab2
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_48kHz_672.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_96kHz_400.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_96kHz_400.0kbps.png
new file mode 100644
index 0000000..94ba5c0
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_96kHz_400.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_96kHz_672.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_96kHz_672.0kbps.png
new file mode 100644
index 0000000..50649ff
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_96kHz_672.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_48kHz_400.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_48kHz_400.0kbps.png
new file mode 100644
index 0000000..462d399
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_48kHz_400.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_48kHz_600.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_48kHz_600.0kbps.png
new file mode 100644
index 0000000..848352b
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_48kHz_600.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_96kHz_400.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_96kHz_400.0kbps.png
new file mode 100644
index 0000000..e665b8c
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_96kHz_400.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_96kHz_600.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_96kHz_600.0kbps.png
new file mode 100644
index 0000000..be94386
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_96kHz_600.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_48kHz_300.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_48kHz_300.0kbps.png
new file mode 100644
index 0000000..cf67673
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_48kHz_300.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_48kHz_500.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_48kHz_500.0kbps.png
new file mode 100644
index 0000000..28ab721
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_48kHz_500.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_96kHz_300.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_96kHz_300.0kbps.png
new file mode 100644
index 0000000..327f3f2
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_96kHz_300.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_96kHz_500.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_96kHz_500.0kbps.png
new file mode 100644
index 0000000..756665f
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_96kHz_500.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_48kHz_400.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_48kHz_400.0kbps.png
new file mode 100644
index 0000000..d380ed1
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_48kHz_400.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_48kHz_672.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_48kHz_672.0kbps.png
new file mode 100644
index 0000000..bc151cd
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_48kHz_672.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_96kHz_400.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_96kHz_400.0kbps.png
new file mode 100644
index 0000000..483791b
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_96kHz_400.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_96kHz_672.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_96kHz_672.0kbps.png
new file mode 100644
index 0000000..9dbb80b
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_96kHz_672.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_48kHz_400.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_48kHz_400.0kbps.png
new file mode 100644
index 0000000..fe792bf
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_48kHz_400.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_48kHz_600.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_48kHz_600.0kbps.png
new file mode 100644
index 0000000..8295f31
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_48kHz_600.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_96kHz_400.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_96kHz_400.0kbps.png
new file mode 100644
index 0000000..c8b52f6
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_96kHz_400.0kbps.png
Binary files differ
diff --git a/conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_96kHz_600.0kbps.png b/conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_96kHz_600.0kbps.png
new file mode 100644
index 0000000..3428255
--- /dev/null
+++ b/conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_96kHz_600.0kbps.png
Binary files differ
diff --git a/conformance/speech_decode_10m.html b/conformance/speech_decode_10m.html
new file mode 100644
index 0000000..661c94e
--- /dev/null
+++ b/conformance/speech_decode_10m.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html><head><title>speech_decode_10m Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px} th {padding:4px} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn {background-color:rgba(214,137,16,0.4)}</style></head><body><h2>Conformance test for "speech_decode_10m" (Frame Size 10 ms) passed!</h2><div><table><tr><h3>SQAM items - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>Max. Abs. Diff (threshold)</th><th>RMS (threshold) [dB]</th><th>RMS reached (threshold) [bits]</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td>0.000305</td><td>-90.738</td><td>14</td></tr>
+<tr><td>decode</td><td>ABBA</td><td>8000</td><td>24000</td><td class=pass>0.000122 (0.00148)</td><td class=pass>-95.673 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>ABBA</td><td>16000</td><td>32000</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-95.876 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>ABBA</td><td>24000</td><td>48000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-95.672 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>ABBA</td><td>32000</td><td>64000</td><td class=pass>0.000122 (0.00148)</td><td class=pass>-95.694 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Castanets</td><td>8000</td><td>24000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-98.657 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Castanets</td><td>16000</td><td>32000</td><td class=pass>0.000305 (0.00148)</td><td class=pass>-97.770 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Castanets</td><td>24000</td><td>48000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-97.970 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Castanets</td><td>32000</td><td>64000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-97.406 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Eddie_Rabbitt</td><td>8000</td><td>24000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-92.049 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Eddie_Rabbitt</td><td>16000</td><td>32000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-92.538 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Eddie_Rabbitt</td><td>24000</td><td>48000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-92.277 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Eddie_Rabbitt</td><td>32000</td><td>64000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-92.062 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Female_Speech_German</td><td>8000</td><td>24000</td><td class=pass>0.000183 (0.00148)</td><td class=pass>-92.730 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Female_Speech_German</td><td>16000</td><td>32000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-92.809 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Female_Speech_German</td><td>24000</td><td>48000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-92.812 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Female_Speech_German</td><td>32000</td><td>64000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-92.670 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Glockenspiel</td><td>8000</td><td>24000</td><td class=pass>0.000183 (0.00148)</td><td class=pass>-95.675 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Glockenspiel</td><td>16000</td><td>32000</td><td class=pass>0.000122 (0.00148)</td><td class=pass>-95.785 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Glockenspiel</td><td>24000</td><td>48000</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-95.803 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Glockenspiel</td><td>32000</td><td>64000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-93.617 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Harpsichord</td><td>8000</td><td>24000</td><td class=pass>0.000061 (0.00148)</td><td class=pass>-100.095 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Harpsichord</td><td>16000</td><td>32000</td><td class=pass>0.000061 (0.00148)</td><td class=pass>-100.365 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Harpsichord</td><td>24000</td><td>48000</td><td class=pass>0.000061 (0.00148)</td><td class=pass>-100.086 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Harpsichord</td><td>32000</td><td>64000</td><td class=pass>0.000061 (0.00148)</td><td class=pass>-99.716 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Male_Speech_English</td><td>8000</td><td>24000</td><td class=pass>0.000305 (0.00148)</td><td class=pass>-90.738 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Male_Speech_English</td><td>16000</td><td>32000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-91.434 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Male_Speech_English</td><td>24000</td><td>48000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-91.147 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Male_Speech_English</td><td>32000</td><td>64000</td><td class=pass>0.000305 (0.00148)</td><td class=pass>-91.259 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Piano_Schubert</td><td>8000</td><td>24000</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-94.150 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Piano_Schubert</td><td>16000</td><td>32000</td><td class=pass>0.000183 (0.00148)</td><td class=pass>-94.523 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Piano_Schubert</td><td>24000</td><td>48000</td><td class=pass>0.000122 (0.00148)</td><td class=pass>-94.756 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Piano_Schubert</td><td>32000</td><td>64000</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-94.785 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Violoncello</td><td>8000</td><td>24000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-91.467 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Violoncello</td><td>16000</td><td>32000</td><td class=pass>0.000183 (0.00148)</td><td class=pass>-91.686 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Violoncello</td><td>24000</td><td>48000</td><td class=pass>0.000183 (0.00148)</td><td class=pass>-92.017 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Violoncello</td><td>32000</td><td>64000</td><td class=pass>0.000183 (0.00148)</td><td class=pass>-92.142 (-89.060)</td><td class=none>14 (14)</td></tr>
+</table></div></body> \ No newline at end of file
diff --git a/conformance/speech_decode_7m5.html b/conformance/speech_decode_7m5.html
new file mode 100644
index 0000000..491635a
--- /dev/null
+++ b/conformance/speech_decode_7m5.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html><head><title>speech_decode_7m5 Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px} th {padding:4px} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn {background-color:rgba(214,137,16,0.4)}</style></head><body><h2>Conformance test for "speech_decode_7m5" (Frame Size 7.5 ms) passed!</h2><div><table><tr><h3>SQAM items - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>Max. Abs. Diff (threshold)</th><th>RMS (threshold) [dB]</th><th>RMS reached (threshold) [bits]</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td>0.000275</td><td>-90.321</td><td>14</td></tr>
+<tr><td>decode</td><td>ABBA</td><td>8000</td><td>27734</td><td class=pass>0.000183 (0.00148)</td><td class=pass>-94.923 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>ABBA</td><td>16000</td><td>32000</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-95.386 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>ABBA</td><td>24000</td><td>48000</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-95.897 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>ABBA</td><td>32000</td><td>61867</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-95.525 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>ABBA</td><td>32000</td><td>64000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-95.527 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Castanets</td><td>8000</td><td>27734</td><td class=pass>0.000122 (0.00148)</td><td class=pass>-98.854 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Castanets</td><td>16000</td><td>32000</td><td class=pass>0.000275 (0.00148)</td><td class=pass>-97.588 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Castanets</td><td>24000</td><td>48000</td><td class=pass>0.000275 (0.00148)</td><td class=pass>-98.077 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Castanets</td><td>32000</td><td>61867</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-97.819 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Castanets</td><td>32000</td><td>64000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-97.700 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Eddie_Rabbitt</td><td>8000</td><td>27734</td><td class=pass>0.000275 (0.00148)</td><td class=pass>-90.990 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Eddie_Rabbitt</td><td>16000</td><td>32000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-91.900 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Eddie_Rabbitt</td><td>24000</td><td>48000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-92.421 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Eddie_Rabbitt</td><td>32000</td><td>61867</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-92.467 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Eddie_Rabbitt</td><td>32000</td><td>64000</td><td class=pass>0.000183 (0.00148)</td><td class=pass>-92.463 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Female_Speech_German</td><td>8000</td><td>27734</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-92.928 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Female_Speech_German</td><td>16000</td><td>32000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-92.751 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Female_Speech_German</td><td>24000</td><td>48000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-93.275 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Female_Speech_German</td><td>32000</td><td>61867</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-92.956 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Female_Speech_German</td><td>32000</td><td>64000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-92.882 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Glockenspiel</td><td>8000</td><td>27734</td><td class=pass>0.000122 (0.00148)</td><td class=pass>-96.711 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Glockenspiel</td><td>16000</td><td>32000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-94.906 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Glockenspiel</td><td>24000</td><td>48000</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-94.614 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Glockenspiel</td><td>32000</td><td>61867</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-96.586 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Glockenspiel</td><td>32000</td><td>64000</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-96.532 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Harpsichord</td><td>8000</td><td>27734</td><td class=pass>0.000061 (0.00148)</td><td class=pass>-99.780 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Harpsichord</td><td>16000</td><td>32000</td><td class=pass>0.000061 (0.00148)</td><td class=pass>-99.456 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Harpsichord</td><td>24000</td><td>48000</td><td class=pass>0.000061 (0.00148)</td><td class=pass>-100.110 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Harpsichord</td><td>32000</td><td>61867</td><td class=pass>0.000061 (0.00148)</td><td class=pass>-99.866 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Harpsichord</td><td>32000</td><td>64000</td><td class=pass>0.000061 (0.00148)</td><td class=pass>-99.788 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Male_Speech_English</td><td>8000</td><td>27734</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-90.321 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Male_Speech_English</td><td>16000</td><td>32000</td><td class=pass>0.000275 (0.00148)</td><td class=pass>-91.112 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Male_Speech_English</td><td>24000</td><td>48000</td><td class=pass>0.000244 (0.00148)</td><td class=pass>-92.109 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Male_Speech_English</td><td>32000</td><td>61867</td><td class=pass>0.000275 (0.00148)</td><td class=pass>-92.204 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Male_Speech_English</td><td>32000</td><td>64000</td><td class=pass>0.000275 (0.00148)</td><td class=pass>-92.221 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Piano_Schubert</td><td>8000</td><td>27734</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-94.187 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Piano_Schubert</td><td>16000</td><td>32000</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-94.709 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Piano_Schubert</td><td>24000</td><td>48000</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-94.818 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Piano_Schubert</td><td>32000</td><td>61867</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-95.065 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Piano_Schubert</td><td>32000</td><td>64000</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-95.081 (-89.060)</td><td class=none>15 (14)</td></tr>
+<tr><td>decode</td><td>Violoncello</td><td>8000</td><td>27734</td><td class=pass>0.000214 (0.00148)</td><td class=pass>-90.548 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Violoncello</td><td>16000</td><td>32000</td><td class=pass>0.000183 (0.00148)</td><td class=pass>-91.882 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Violoncello</td><td>24000</td><td>48000</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-92.130 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Violoncello</td><td>32000</td><td>61867</td><td class=pass>0.000153 (0.00148)</td><td class=pass>-92.261 (-89.060)</td><td class=none>14 (14)</td></tr>
+<tr><td>decode</td><td>Violoncello</td><td>32000</td><td>64000</td><td class=pass>0.000183 (0.00148)</td><td class=pass>-92.090 (-89.060)</td><td class=none>14 (14)</td></tr>
+</table></div></body> \ No newline at end of file
diff --git a/conformance/speech_encdec_10m.html b/conformance/speech_encdec_10m.html
new file mode 100644
index 0000000..e48a080
--- /dev/null
+++ b/conformance/speech_encdec_10m.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html><head><title>speech_encdec_10m Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px} th {padding:4px} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn {background-color:rgba(214,137,16,0.4)}</style></head><body><h2>Conformance test for "speech_encdec_10m" (Frame Size 10 ms) passed!</h2><div><table><tr><h3>Band-limited signals - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>ODG Ref</th><th>Delta ODG (threshold)</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td></td><td>0.00925</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_16000_wb</td><td>24000</td><td>48000</td><td class=>-0.572</td><td class=pass>0.00423 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_16000_wb</td><td>32000</td><td>64000</td><td class=>-0.227</td><td class=pass>0.00285 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_24000_sswb</td><td>32000</td><td>64000</td><td class=>-0.479</td><td class=pass>0.00243 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_8000_nb</td><td>16000</td><td>32000</td><td class=>-0.587</td><td class=pass>0.00925 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_8000_nb</td><td>24000</td><td>48000</td><td class=>-0.27</td><td class=pass>0.00607 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_8000_nb</td><td>32000</td><td>64000</td><td class=>-0.224</td><td class=pass>0.00449 (0.06)</td></tr>
+</table></div></body><div><table><tr><h3>SQAM items - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>ODG Ref</th><th>Delta ODG (threshold)</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td></td><td>0.0507</td></tr>
+<tr><td>encdec</td><td>ABBA</td><td>8000</td><td>24000</td><td class=>-0.89</td><td class=pass>0.0157 (0.06)</td></tr>
+<tr><td>encdec</td><td>ABBA</td><td>16000</td><td>32000</td><td class=>-1.365</td><td class=pass>0.00264 (0.06)</td></tr>
+<tr><td>encdec</td><td>ABBA</td><td>24000</td><td>48000</td><td class=>-1.087</td><td class=pass>0.000918 (0.06)</td></tr>
+<tr><td>encdec</td><td>ABBA</td><td>32000</td><td>64000</td><td class=>-0.644</td><td class=pass>0.00012 (0.06)</td></tr>
+<tr><td>encdec</td><td>Castanets</td><td>8000</td><td>24000</td><td class=>-0.612</td><td class=pass>0.0138 (0.06)</td></tr>
+<tr><td>encdec</td><td>Castanets</td><td>16000</td><td>32000</td><td class=>-1.092</td><td class=pass>0.00691 (0.06)</td></tr>
+<tr><td>encdec</td><td>Castanets</td><td>24000</td><td>48000</td><td class=>-0.889</td><td class=pass>0.00613 (0.06)</td></tr>
+<tr><td>encdec</td><td>Castanets</td><td>32000</td><td>64000</td><td class=>-0.765</td><td class=pass>0.00183 (0.06)</td></tr>
+<tr><td>encdec</td><td>Eddie_Rabbitt</td><td>8000</td><td>24000</td><td class=>-0.718</td><td class=pass>0.000303 (0.06)</td></tr>
+<tr><td>encdec</td><td>Eddie_Rabbitt</td><td>16000</td><td>32000</td><td class=>-1.111</td><td class=pass>0.00375 (0.06)</td></tr>
+<tr><td>encdec</td><td>Eddie_Rabbitt</td><td>24000</td><td>48000</td><td class=>-0.903</td><td class=pass>0.000221 (0.06)</td></tr>
+<tr><td>encdec</td><td>Eddie_Rabbitt</td><td>32000</td><td>64000</td><td class=>-0.611</td><td class=pass>0.000326 (0.06)</td></tr>
+<tr><td>encdec</td><td>Female_Speech_German</td><td>8000</td><td>24000</td><td class=>-1.099</td><td class=pass>0.018 (0.06)</td></tr>
+<tr><td>encdec</td><td>Female_Speech_German</td><td>16000</td><td>32000</td><td class=>-1.572</td><td class=pass>0.00767 (0.06)</td></tr>
+<tr><td>encdec</td><td>Female_Speech_German</td><td>24000</td><td>48000</td><td class=>-1.056</td><td class=pass>0.00574 (0.06)</td></tr>
+<tr><td>encdec</td><td>Female_Speech_German</td><td>32000</td><td>64000</td><td class=>-0.766</td><td class=pass>0.00407 (0.06)</td></tr>
+<tr><td>encdec</td><td>Glockenspiel</td><td>8000</td><td>24000</td><td class=>-1.911</td><td class=pass>0.0232 (0.06)</td></tr>
+<tr><td>encdec</td><td>Glockenspiel</td><td>16000</td><td>32000</td><td class=>-2.539</td><td class=pass>0.00463 (0.06)</td></tr>
+<tr><td>encdec</td><td>Glockenspiel</td><td>24000</td><td>48000</td><td class=>-2.143</td><td class=pass>0.00203 (0.06)</td></tr>
+<tr><td>encdec</td><td>Glockenspiel</td><td>32000</td><td>64000</td><td class=>-1.542</td><td class=pass>0.0111 (0.06)</td></tr>
+<tr><td>encdec</td><td>Harpsichord</td><td>8000</td><td>24000</td><td class=>-2.918</td><td class=pass>0.0181 (0.06)</td></tr>
+<tr><td>encdec</td><td>Harpsichord</td><td>16000</td><td>32000</td><td class=>-3.166</td><td class=pass>0.00019 (0.06)</td></tr>
+<tr><td>encdec</td><td>Harpsichord</td><td>24000</td><td>48000</td><td class=>-2.405</td><td class=pass>0.00595 (0.06)</td></tr>
+<tr><td>encdec</td><td>Harpsichord</td><td>32000</td><td>64000</td><td class=>-1.710</td><td class=pass>0.00958 (0.06)</td></tr>
+<tr><td>encdec</td><td>Male_Speech_English</td><td>8000</td><td>24000</td><td class=>-0.781</td><td class=pass>0.000139 (0.06)</td></tr>
+<tr><td>encdec</td><td>Male_Speech_English</td><td>16000</td><td>32000</td><td class=>-1.385</td><td class=pass>0.0127 (0.06)</td></tr>
+<tr><td>encdec</td><td>Male_Speech_English</td><td>24000</td><td>48000</td><td class=>-1.019</td><td class=pass>0.0235 (0.06)</td></tr>
+<tr><td>encdec</td><td>Male_Speech_English</td><td>32000</td><td>64000</td><td class=>-0.749</td><td class=pass>0.017 (0.06)</td></tr>
+<tr><td>encdec</td><td>Piano_Schubert</td><td>8000</td><td>24000</td><td class=>-1.334</td><td class=pass>0.00231 (0.06)</td></tr>
+<tr><td>encdec</td><td>Piano_Schubert</td><td>16000</td><td>32000</td><td class=>-1.692</td><td class=pass>0.0507 (0.06)</td></tr>
+<tr><td>encdec</td><td>Piano_Schubert</td><td>24000</td><td>48000</td><td class=>-0.741</td><td class=pass>0.0123 (0.06)</td></tr>
+<tr><td>encdec</td><td>Piano_Schubert</td><td>32000</td><td>64000</td><td class=>-0.398</td><td class=pass>0.00485 (0.06)</td></tr>
+<tr><td>encdec</td><td>Violoncello</td><td>8000</td><td>24000</td><td class=>-2.120</td><td class=pass>0.0108 (0.06)</td></tr>
+<tr><td>encdec</td><td>Violoncello</td><td>16000</td><td>32000</td><td class=>-2.007</td><td class=pass>0.0124 (0.06)</td></tr>
+<tr><td>encdec</td><td>Violoncello</td><td>24000</td><td>48000</td><td class=>-1.683</td><td class=pass>0.00884 (0.06)</td></tr>
+<tr><td>encdec</td><td>Violoncello</td><td>32000</td><td>64000</td><td class=>-1.306</td><td class=pass>0.00174 (0.06)</td></tr>
+</table></div></body> \ No newline at end of file
diff --git a/conformance/speech_encdec_7m5.html b/conformance/speech_encdec_7m5.html
new file mode 100644
index 0000000..b502cf8
--- /dev/null
+++ b/conformance/speech_encdec_7m5.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html><head><title>speech_encdec_7m5 Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px} th {padding:4px} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn {background-color:rgba(214,137,16,0.4)}</style></head><body><h2>Conformance test for "speech_encdec_7m5" (Frame Size 7.5 ms) passed!</h2><div><table><tr><h3>Band-limited signals - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>ODG Ref</th><th>Delta ODG (threshold)</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td></td><td>0.0136</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_16000_wb</td><td>24000</td><td>48000</td><td class=>-0.699</td><td class=pass>0.00167 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_16000_wb</td><td>32000</td><td>64000</td><td class=>-0.26</td><td class=pass>0.000658 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_24000_sswb</td><td>32000</td><td>64000</td><td class=>-0.609</td><td class=pass>0.00379 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_8000_nb</td><td>16000</td><td>32000</td><td class=>-0.727</td><td class=pass>0.0136 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_8000_nb</td><td>24000</td><td>48000</td><td class=>-0.281</td><td class=pass>0.00383 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_8000_nb</td><td>32000</td><td>64000</td><td class=>-0.172</td><td class=pass>0.00156 (0.06)</td></tr>
+</table></div></body><div><table><tr><h3>SQAM items - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>ODG Ref</th><th>Delta ODG (threshold)</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td></td><td>0.0453</td></tr>
+<tr><td>encdec</td><td>ABBA</td><td>8000</td><td>27734</td><td class=>-0.795</td><td class=pass>0.00296 (0.06)</td></tr>
+<tr><td>encdec</td><td>ABBA</td><td>16000</td><td>32000</td><td class=>-1.604</td><td class=pass>0.000434 (0.06)</td></tr>
+<tr><td>encdec</td><td>ABBA</td><td>24000</td><td>48000</td><td class=>-1.177</td><td class=pass>0.00287 (0.06)</td></tr>
+<tr><td>encdec</td><td>ABBA</td><td>32000</td><td>61867</td><td class=>-0.743</td><td class=pass>0.0011 (0.06)</td></tr>
+<tr><td>encdec</td><td>ABBA</td><td>32000</td><td>64000</td><td class=>-0.729</td><td class=pass>0.00274 (0.06)</td></tr>
+<tr><td>encdec</td><td>Castanets</td><td>8000</td><td>27734</td><td class=>-0.502</td><td class=pass>0.00306 (0.06)</td></tr>
+<tr><td>encdec</td><td>Castanets</td><td>16000</td><td>32000</td><td class=>-1.419</td><td class=pass>0.000897 (0.06)</td></tr>
+<tr><td>encdec</td><td>Castanets</td><td>24000</td><td>48000</td><td class=>-1.108</td><td class=pass>0.00855 (0.06)</td></tr>
+<tr><td>encdec</td><td>Castanets</td><td>32000</td><td>61867</td><td class=>-0.992</td><td class=pass>0.0123 (0.06)</td></tr>
+<tr><td>encdec</td><td>Castanets</td><td>32000</td><td>64000</td><td class=>-0.937</td><td class=pass>0.000476 (0.06)</td></tr>
+<tr><td>encdec</td><td>Eddie_Rabbitt</td><td>8000</td><td>27734</td><td class=>-0.617</td><td class=pass>0.00357 (0.06)</td></tr>
+<tr><td>encdec</td><td>Eddie_Rabbitt</td><td>16000</td><td>32000</td><td class=>-1.360</td><td class=pass>0.024 (0.06)</td></tr>
+<tr><td>encdec</td><td>Eddie_Rabbitt</td><td>24000</td><td>48000</td><td class=>-1.082</td><td class=pass>0.014 (0.06)</td></tr>
+<tr><td>encdec</td><td>Eddie_Rabbitt</td><td>32000</td><td>61867</td><td class=>-0.825</td><td class=pass>0.00136 (0.06)</td></tr>
+<tr><td>encdec</td><td>Eddie_Rabbitt</td><td>32000</td><td>64000</td><td class=>-0.742</td><td class=pass>0.000189 (0.06)</td></tr>
+<tr><td>encdec</td><td>Female_Speech_German</td><td>8000</td><td>27734</td><td class=>-0.84</td><td class=pass>0.0112 (0.06)</td></tr>
+<tr><td>encdec</td><td>Female_Speech_German</td><td>16000</td><td>32000</td><td class=>-1.939</td><td class=pass>0.013 (0.06)</td></tr>
+<tr><td>encdec</td><td>Female_Speech_German</td><td>24000</td><td>48000</td><td class=>-1.301</td><td class=pass>0.00176 (0.06)</td></tr>
+<tr><td>encdec</td><td>Female_Speech_German</td><td>32000</td><td>61867</td><td class=>-1.008</td><td class=pass>0.0152 (0.06)</td></tr>
+<tr><td>encdec</td><td>Female_Speech_German</td><td>32000</td><td>64000</td><td class=>-0.914</td><td class=pass>0.00593 (0.06)</td></tr>
+<tr><td>encdec</td><td>Glockenspiel</td><td>8000</td><td>27734</td><td class=>-0.665</td><td class=pass>0.00979 (0.06)</td></tr>
+<tr><td>encdec</td><td>Glockenspiel</td><td>16000</td><td>32000</td><td class=>-2.271</td><td class=pass>0.00558 (0.06)</td></tr>
+<tr><td>encdec</td><td>Glockenspiel</td><td>24000</td><td>48000</td><td class=>-1.960</td><td class=pass>0.00838 (0.06)</td></tr>
+<tr><td>encdec</td><td>Glockenspiel</td><td>32000</td><td>61867</td><td class=>-1.892</td><td class=pass>0.0453 (0.06)</td></tr>
+<tr><td>encdec</td><td>Glockenspiel</td><td>32000</td><td>64000</td><td class=>-1.316</td><td class=pass>0.00323 (0.06)</td></tr>
+<tr><td>encdec</td><td>Harpsichord</td><td>8000</td><td>27734</td><td class=>-2.684</td><td class=pass>0.00023 (0.06)</td></tr>
+<tr><td>encdec</td><td>Harpsichord</td><td>16000</td><td>32000</td><td class=>-3.504</td><td class=pass>0.00178 (0.06)</td></tr>
+<tr><td>encdec</td><td>Harpsichord</td><td>24000</td><td>48000</td><td class=>-2.647</td><td class=pass>0.00341 (0.06)</td></tr>
+<tr><td>encdec</td><td>Harpsichord</td><td>32000</td><td>61867</td><td class=>-2.140</td><td class=pass>0.0218 (0.06)</td></tr>
+<tr><td>encdec</td><td>Harpsichord</td><td>32000</td><td>64000</td><td class=>-1.981</td><td class=pass>0.00839 (0.06)</td></tr>
+<tr><td>encdec</td><td>Male_Speech_English</td><td>8000</td><td>27734</td><td class=>-0.687</td><td class=pass>0.00917 (0.06)</td></tr>
+<tr><td>encdec</td><td>Male_Speech_English</td><td>16000</td><td>32000</td><td class=>-1.735</td><td class=pass>0.0026 (0.06)</td></tr>
+<tr><td>encdec</td><td>Male_Speech_English</td><td>24000</td><td>48000</td><td class=>-1.205</td><td class=pass>0.00963 (0.06)</td></tr>
+<tr><td>encdec</td><td>Male_Speech_English</td><td>32000</td><td>61867</td><td class=>-0.947</td><td class=pass>0.0101 (0.06)</td></tr>
+<tr><td>encdec</td><td>Male_Speech_English</td><td>32000</td><td>64000</td><td class=>-0.819</td><td class=pass>0.0117 (0.06)</td></tr>
+<tr><td>encdec</td><td>Piano_Schubert</td><td>8000</td><td>27734</td><td class=>-1.198</td><td class=pass>0.00287 (0.06)</td></tr>
+<tr><td>encdec</td><td>Piano_Schubert</td><td>16000</td><td>32000</td><td class=>-2.080</td><td class=pass>0.0249 (0.06)</td></tr>
+<tr><td>encdec</td><td>Piano_Schubert</td><td>24000</td><td>48000</td><td class=>-0.852</td><td class=pass>0.00808 (0.06)</td></tr>
+<tr><td>encdec</td><td>Piano_Schubert</td><td>32000</td><td>61867</td><td class=>-0.551</td><td class=pass>0.00418 (0.06)</td></tr>
+<tr><td>encdec</td><td>Piano_Schubert</td><td>32000</td><td>64000</td><td class=>-0.475</td><td class=pass>0.00103 (0.06)</td></tr>
+<tr><td>encdec</td><td>Violoncello</td><td>8000</td><td>27734</td><td class=>-1.978</td><td class=pass>0.0126 (0.06)</td></tr>
+<tr><td>encdec</td><td>Violoncello</td><td>16000</td><td>32000</td><td class=>-2.636</td><td class=pass>0.00599 (0.06)</td></tr>
+<tr><td>encdec</td><td>Violoncello</td><td>24000</td><td>48000</td><td class=>-2.040</td><td class=pass>0.00462 (0.06)</td></tr>
+<tr><td>encdec</td><td>Violoncello</td><td>32000</td><td>61867</td><td class=>-1.673</td><td class=pass>0.00293 (0.06)</td></tr>
+<tr><td>encdec</td><td>Violoncello</td><td>32000</td><td>64000</td><td class=>-1.559</td><td class=pass>0.011 (0.06)</td></tr>
+</table></div></body> \ No newline at end of file
diff --git a/conformance/speech_encode_10m.html b/conformance/speech_encode_10m.html
new file mode 100644
index 0000000..fa5d5dd
--- /dev/null
+++ b/conformance/speech_encode_10m.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html><head><title>speech_encode_10m Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px} th {padding:4px} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn {background-color:rgba(214,137,16,0.4)}</style></head><body><h2>Conformance test for "speech_encode_10m" (Frame Size 10 ms) passed!</h2><div><table><tr><h3>Band-limited signals - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>ODG Ref</th><th>Delta ODG (threshold)</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td></td><td>0.00925</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_16000_wb</td><td>24000</td><td>48000</td><td class=>-0.572</td><td class=pass>0.00423 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_16000_wb</td><td>32000</td><td>64000</td><td class=>-0.227</td><td class=pass>0.00285 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_24000_sswb</td><td>32000</td><td>64000</td><td class=>-0.479</td><td class=pass>0.00243 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_8000_nb</td><td>16000</td><td>32000</td><td class=>-0.587</td><td class=pass>0.00925 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_8000_nb</td><td>24000</td><td>48000</td><td class=>-0.27</td><td class=pass>0.00607 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_8000_nb</td><td>32000</td><td>64000</td><td class=>-0.224</td><td class=pass>0.00449 (0.06)</td></tr>
+</table></div></body><div><table><tr><h3>SQAM items - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>ODG Ref</th><th>Delta ODG (threshold)</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td></td><td>0.0391</td></tr>
+<tr><td>encode</td><td>ABBA</td><td>8000</td><td>24000</td><td class=>-0.89</td><td class=pass>0.0125 (0.06)</td></tr>
+<tr><td>encode</td><td>ABBA</td><td>16000</td><td>32000</td><td class=>-1.365</td><td class=pass>0.00312 (0.06)</td></tr>
+<tr><td>encode</td><td>ABBA</td><td>24000</td><td>48000</td><td class=>-1.087</td><td class=pass>0.000477 (0.06)</td></tr>
+<tr><td>encode</td><td>ABBA</td><td>32000</td><td>64000</td><td class=>-0.644</td><td class=pass>0.000632 (0.06)</td></tr>
+<tr><td>encode</td><td>Castanets</td><td>8000</td><td>24000</td><td class=>-0.612</td><td class=pass>0.00742 (0.06)</td></tr>
+<tr><td>encode</td><td>Castanets</td><td>16000</td><td>32000</td><td class=>-1.092</td><td class=pass>0.00681 (0.06)</td></tr>
+<tr><td>encode</td><td>Castanets</td><td>24000</td><td>48000</td><td class=>-0.889</td><td class=pass>0.00596 (0.06)</td></tr>
+<tr><td>encode</td><td>Castanets</td><td>32000</td><td>64000</td><td class=>-0.765</td><td class=pass>0.00173 (0.06)</td></tr>
+<tr><td>encode</td><td>Eddie_Rabbitt</td><td>8000</td><td>24000</td><td class=>-0.718</td><td class=pass>0.00959 (0.06)</td></tr>
+<tr><td>encode</td><td>Eddie_Rabbitt</td><td>16000</td><td>32000</td><td class=>-1.111</td><td class=pass>0.00625 (0.06)</td></tr>
+<tr><td>encode</td><td>Eddie_Rabbitt</td><td>24000</td><td>48000</td><td class=>-0.903</td><td class=pass>0.000414 (0.06)</td></tr>
+<tr><td>encode</td><td>Eddie_Rabbitt</td><td>32000</td><td>64000</td><td class=>-0.611</td><td class=pass>0.00036 (0.06)</td></tr>
+<tr><td>encode</td><td>Female_Speech_German</td><td>8000</td><td>24000</td><td class=>-1.099</td><td class=pass>0.0175 (0.06)</td></tr>
+<tr><td>encode</td><td>Female_Speech_German</td><td>16000</td><td>32000</td><td class=>-1.572</td><td class=pass>0.00729 (0.06)</td></tr>
+<tr><td>encode</td><td>Female_Speech_German</td><td>24000</td><td>48000</td><td class=>-1.056</td><td class=pass>0.00514 (0.06)</td></tr>
+<tr><td>encode</td><td>Female_Speech_German</td><td>32000</td><td>64000</td><td class=>-0.766</td><td class=pass>0.00229 (0.06)</td></tr>
+<tr><td>encode</td><td>Glockenspiel</td><td>8000</td><td>24000</td><td class=>-1.911</td><td class=pass>0.0391 (0.06)</td></tr>
+<tr><td>encode</td><td>Glockenspiel</td><td>16000</td><td>32000</td><td class=>-2.539</td><td class=pass>0.00296 (0.06)</td></tr>
+<tr><td>encode</td><td>Glockenspiel</td><td>24000</td><td>48000</td><td class=>-2.143</td><td class=pass>0.00757 (0.06)</td></tr>
+<tr><td>encode</td><td>Glockenspiel</td><td>32000</td><td>64000</td><td class=>-1.542</td><td class=pass>0.0116 (0.06)</td></tr>
+<tr><td>encode</td><td>Harpsichord</td><td>8000</td><td>24000</td><td class=>-2.918</td><td class=pass>0.00513 (0.06)</td></tr>
+<tr><td>encode</td><td>Harpsichord</td><td>16000</td><td>32000</td><td class=>-3.166</td><td class=pass>0.00133 (0.06)</td></tr>
+<tr><td>encode</td><td>Harpsichord</td><td>24000</td><td>48000</td><td class=>-2.405</td><td class=pass>0.00874 (0.06)</td></tr>
+<tr><td>encode</td><td>Harpsichord</td><td>32000</td><td>64000</td><td class=>-1.710</td><td class=pass>0.00811 (0.06)</td></tr>
+<tr><td>encode</td><td>Male_Speech_English</td><td>8000</td><td>24000</td><td class=>-0.781</td><td class=pass>0.00484 (0.06)</td></tr>
+<tr><td>encode</td><td>Male_Speech_English</td><td>16000</td><td>32000</td><td class=>-1.385</td><td class=pass>0.0136 (0.06)</td></tr>
+<tr><td>encode</td><td>Male_Speech_English</td><td>24000</td><td>48000</td><td class=>-1.019</td><td class=pass>0.0226 (0.06)</td></tr>
+<tr><td>encode</td><td>Male_Speech_English</td><td>32000</td><td>64000</td><td class=>-0.749</td><td class=pass>0.0164 (0.06)</td></tr>
+<tr><td>encode</td><td>Piano_Schubert</td><td>8000</td><td>24000</td><td class=>-1.334</td><td class=pass>0.00514 (0.06)</td></tr>
+<tr><td>encode</td><td>Piano_Schubert</td><td>16000</td><td>32000</td><td class=>-1.692</td><td class=pass>0.0285 (0.06)</td></tr>
+<tr><td>encode</td><td>Piano_Schubert</td><td>24000</td><td>48000</td><td class=>-0.741</td><td class=pass>0.0244 (0.06)</td></tr>
+<tr><td>encode</td><td>Piano_Schubert</td><td>32000</td><td>64000</td><td class=>-0.398</td><td class=pass>0.000122 (0.06)</td></tr>
+<tr><td>encode</td><td>Violoncello</td><td>8000</td><td>24000</td><td class=>-2.120</td><td class=pass>0.0128 (0.06)</td></tr>
+<tr><td>encode</td><td>Violoncello</td><td>16000</td><td>32000</td><td class=>-2.007</td><td class=pass>0.0124 (0.06)</td></tr>
+<tr><td>encode</td><td>Violoncello</td><td>24000</td><td>48000</td><td class=>-1.683</td><td class=pass>0.00902 (0.06)</td></tr>
+<tr><td>encode</td><td>Violoncello</td><td>32000</td><td>64000</td><td class=>-1.306</td><td class=pass>0.000776 (0.06)</td></tr>
+</table></div></body> \ No newline at end of file
diff --git a/conformance/speech_encode_7m5.html b/conformance/speech_encode_7m5.html
new file mode 100644
index 0000000..49ae303
--- /dev/null
+++ b/conformance/speech_encode_7m5.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html><head><title>speech_encode_7m5 Report</title><style>body {font-family:sans-serif; color:#f8f8f2; background-color:#272822; font-size:80%} div {border:1px solid #8f908a; border-radius:4px; overflow:hidden; display:table; margin-left:30px; margin-bottom:30px} h2 {text-align:left; margin-left:30px} h3 {text-align:left; margin:4px} table {border-spacing:0px} th {padding:4px} td {padding:4px} tr:nth-child(even) {background-color:rgba(255,255,255,0.1)} td.pass {background-color:rgba(0,192,255,0.4)} td.fail {background-color:rgba(255,0,0,0.4)} td.warn {background-color:rgba(214,137,16,0.4)}</style></head><body><h2>Conformance test for "speech_encode_7m5" (Frame Size 7.5 ms) passed!</h2><div><table><tr><h3>Band-limited signals - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>ODG Ref</th><th>Delta ODG (threshold)</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td></td><td>0.0136</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_16000_wb</td><td>24000</td><td>48000</td><td class=>-0.699</td><td class=pass>0.00167 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_16000_wb</td><td>32000</td><td>64000</td><td class=>-0.26</td><td class=pass>0.000658 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_24000_sswb</td><td>32000</td><td>64000</td><td class=>-0.609</td><td class=pass>0.00379 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_8000_nb</td><td>16000</td><td>32000</td><td class=>-0.727</td><td class=pass>0.0136 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_8000_nb</td><td>24000</td><td>48000</td><td class=>-0.281</td><td class=pass>0.00383 (0.06)</td></tr>
+<tr><td>encoder</td><td>Female_Speech_German_8000_nb</td><td>32000</td><td>64000</td><td class=>-0.172</td><td class=pass>0.00156 (0.06)</td></tr>
+</table></div></body><div><table><tr><h3>SQAM items - 100%</h3></tr>
+<tr><th>Mode</th><th>Item</th><th>Samplingrate</th><th>Bitrate</th><th>ODG Ref</th><th>Delta ODG (threshold)</th></tr>
+<tr><td>worst value</td><td></td><td></td><td></td><td></td><td>0.0497</td></tr>
+<tr><td>encode</td><td>ABBA</td><td>8000</td><td>27734</td><td class=>-0.795</td><td class=pass>0.000584 (0.06)</td></tr>
+<tr><td>encode</td><td>ABBA</td><td>16000</td><td>32000</td><td class=>-1.604</td><td class=pass>0.00188 (0.06)</td></tr>
+<tr><td>encode</td><td>ABBA</td><td>24000</td><td>48000</td><td class=>-1.177</td><td class=pass>0.00197 (0.06)</td></tr>
+<tr><td>encode</td><td>ABBA</td><td>32000</td><td>61867</td><td class=>-0.743</td><td class=pass>0.00187 (0.06)</td></tr>
+<tr><td>encode</td><td>ABBA</td><td>32000</td><td>64000</td><td class=>-0.729</td><td class=pass>0.00146 (0.06)</td></tr>
+<tr><td>encode</td><td>Castanets</td><td>8000</td><td>27734</td><td class=>-0.502</td><td class=pass>0.00539 (0.06)</td></tr>
+<tr><td>encode</td><td>Castanets</td><td>16000</td><td>32000</td><td class=>-1.419</td><td class=pass>0.00164 (0.06)</td></tr>
+<tr><td>encode</td><td>Castanets</td><td>24000</td><td>48000</td><td class=>-1.108</td><td class=pass>0.00932 (0.06)</td></tr>
+<tr><td>encode</td><td>Castanets</td><td>32000</td><td>61867</td><td class=>-0.992</td><td class=pass>0.0122 (0.06)</td></tr>
+<tr><td>encode</td><td>Castanets</td><td>32000</td><td>64000</td><td class=>-0.937</td><td class=pass>0.000407 (0.06)</td></tr>
+<tr><td>encode</td><td>Eddie_Rabbitt</td><td>8000</td><td>27734</td><td class=>-0.617</td><td class=pass>0.00155 (0.06)</td></tr>
+<tr><td>encode</td><td>Eddie_Rabbitt</td><td>16000</td><td>32000</td><td class=>-1.360</td><td class=pass>0.0128 (0.06)</td></tr>
+<tr><td>encode</td><td>Eddie_Rabbitt</td><td>24000</td><td>48000</td><td class=>-1.082</td><td class=pass>0.0138 (0.06)</td></tr>
+<tr><td>encode</td><td>Eddie_Rabbitt</td><td>32000</td><td>61867</td><td class=>-0.825</td><td class=pass>0.00131 (0.06)</td></tr>
+<tr><td>encode</td><td>Eddie_Rabbitt</td><td>32000</td><td>64000</td><td class=>-0.742</td><td class=pass>0.000459 (0.06)</td></tr>
+<tr><td>encode</td><td>Female_Speech_German</td><td>8000</td><td>27734</td><td class=>-0.84</td><td class=pass>0.00628 (0.06)</td></tr>
+<tr><td>encode</td><td>Female_Speech_German</td><td>16000</td><td>32000</td><td class=>-1.939</td><td class=pass>0.00766 (0.06)</td></tr>
+<tr><td>encode</td><td>Female_Speech_German</td><td>24000</td><td>48000</td><td class=>-1.301</td><td class=pass>0.000402 (0.06)</td></tr>
+<tr><td>encode</td><td>Female_Speech_German</td><td>32000</td><td>61867</td><td class=>-1.008</td><td class=pass>0.016 (0.06)</td></tr>
+<tr><td>encode</td><td>Female_Speech_German</td><td>32000</td><td>64000</td><td class=>-0.914</td><td class=pass>0.00396 (0.06)</td></tr>
+<tr><td>encode</td><td>Glockenspiel</td><td>8000</td><td>27734</td><td class=>-0.665</td><td class=pass>0.0171 (0.06)</td></tr>
+<tr><td>encode</td><td>Glockenspiel</td><td>16000</td><td>32000</td><td class=>-2.271</td><td class=pass>0.00345 (0.06)</td></tr>
+<tr><td>encode</td><td>Glockenspiel</td><td>24000</td><td>48000</td><td class=>-1.960</td><td class=pass>0.0119 (0.06)</td></tr>
+<tr><td>encode</td><td>Glockenspiel</td><td>32000</td><td>61867</td><td class=>-1.892</td><td class=pass>0.0497 (0.06)</td></tr>
+<tr><td>encode</td><td>Glockenspiel</td><td>32000</td><td>64000</td><td class=>-1.316</td><td class=pass>0.00515 (0.06)</td></tr>
+<tr><td>encode</td><td>Harpsichord</td><td>8000</td><td>27734</td><td class=>-2.684</td><td class=pass>0.00152 (0.06)</td></tr>
+<tr><td>encode</td><td>Harpsichord</td><td>16000</td><td>32000</td><td class=>-3.504</td><td class=pass>0.00316 (0.06)</td></tr>
+<tr><td>encode</td><td>Harpsichord</td><td>24000</td><td>48000</td><td class=>-2.647</td><td class=pass>0.00341 (0.06)</td></tr>
+<tr><td>encode</td><td>Harpsichord</td><td>32000</td><td>61867</td><td class=>-2.140</td><td class=pass>0.0198 (0.06)</td></tr>
+<tr><td>encode</td><td>Harpsichord</td><td>32000</td><td>64000</td><td class=>-1.981</td><td class=pass>0.0113 (0.06)</td></tr>
+<tr><td>encode</td><td>Male_Speech_English</td><td>8000</td><td>27734</td><td class=>-0.687</td><td class=pass>0.0103 (0.06)</td></tr>
+<tr><td>encode</td><td>Male_Speech_English</td><td>16000</td><td>32000</td><td class=>-1.735</td><td class=pass>0.00172 (0.06)</td></tr>
+<tr><td>encode</td><td>Male_Speech_English</td><td>24000</td><td>48000</td><td class=>-1.205</td><td class=pass>0.0118 (0.06)</td></tr>
+<tr><td>encode</td><td>Male_Speech_English</td><td>32000</td><td>61867</td><td class=>-0.947</td><td class=pass>0.0113 (0.06)</td></tr>
+<tr><td>encode</td><td>Male_Speech_English</td><td>32000</td><td>64000</td><td class=>-0.819</td><td class=pass>0.0137 (0.06)</td></tr>
+<tr><td>encode</td><td>Piano_Schubert</td><td>8000</td><td>27734</td><td class=>-1.198</td><td class=pass>0.00763 (0.06)</td></tr>
+<tr><td>encode</td><td>Piano_Schubert</td><td>16000</td><td>32000</td><td class=>-2.080</td><td class=pass>0.0139 (0.06)</td></tr>
+<tr><td>encode</td><td>Piano_Schubert</td><td>24000</td><td>48000</td><td class=>-0.852</td><td class=pass>0.00789 (0.06)</td></tr>
+<tr><td>encode</td><td>Piano_Schubert</td><td>32000</td><td>61867</td><td class=>-0.551</td><td class=pass>0.00224 (0.06)</td></tr>
+<tr><td>encode</td><td>Piano_Schubert</td><td>32000</td><td>64000</td><td class=>-0.475</td><td class=pass>0.00106 (0.06)</td></tr>
+<tr><td>encode</td><td>Violoncello</td><td>8000</td><td>27734</td><td class=>-1.978</td><td class=pass>0.0125 (0.06)</td></tr>
+<tr><td>encode</td><td>Violoncello</td><td>16000</td><td>32000</td><td class=>-2.636</td><td class=pass>0.00606 (0.06)</td></tr>
+<tr><td>encode</td><td>Violoncello</td><td>24000</td><td>48000</td><td class=>-2.040</td><td class=pass>0.00429 (0.06)</td></tr>
+<tr><td>encode</td><td>Violoncello</td><td>32000</td><td>61867</td><td class=>-1.673</td><td class=pass>0.00101 (0.06)</td></tr>
+<tr><td>encode</td><td>Violoncello</td><td>32000</td><td>64000</td><td class=>-1.559</td><td class=pass>0.00863 (0.06)</td></tr>
+</table></div></body> \ No newline at end of file
diff --git a/fuzz/dfuzz.cc b/fuzz/dfuzz.cc
index c926d61..29e6b57 100644
--- a/fuzz/dfuzz.cc
+++ b/fuzz/dfuzz.cc
@@ -23,20 +23,21 @@ using namespace lc3;
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
- const int dt_list[] = { 7500, 10000 };
- const int sr_list[] = { 8000, 16000, 24000, 32000, 48000 };
+ const int dt_list[] = { 2500, 5000, 7500, 10000 };
+ const int sr_list[] = { 8000, 16000, 24000, 32000, 48000, 96000 };
FuzzedDataProvider fdp(data, size);
int dt_us = fdp.PickValueInArray(dt_list);
int sr_hz = fdp.PickValueInArray(sr_list);
int nchannels =fdp.PickValueInArray({1, 2});
+ bool hrmode = fdp.ConsumeBool();
int sr_pcm_hz = fdp.PickValueInArray(sr_list);
if (sr_pcm_hz < sr_hz)
sr_pcm_hz = 0;
- Decoder dec(dt_us, sr_hz, sr_pcm_hz, nchannels);
+ Decoder dec(dt_us, sr_hz, sr_pcm_hz, nchannels, hrmode);
int frame_size = fdp.ConsumeIntegralInRange(
LC3_MIN_FRAME_BYTES, LC3_MAX_FRAME_BYTES);
@@ -46,6 +47,8 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
PcmFormat::kS24In3Le, PcmFormat::kF32 });
int frame_samples = dec.GetFrameSamples();
+ if (frame_samples < 0)
+ return -1;
int sample_bytes =
fmt == PcmFormat::kS16 ? sizeof(int16_t) :
diff --git a/fuzz/efuzz.cc b/fuzz/efuzz.cc
index e79ef9c..be68b9c 100644
--- a/fuzz/efuzz.cc
+++ b/fuzz/efuzz.cc
@@ -70,7 +70,7 @@ int encode(Encoder &e, int frame_size, int nchannels,
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
- const int dt_list[] = { 7500, 10000 };
+ const int dt_list[] = { 2500, 5000, 7500, 10000 };
const int sr_list[] = { 8000, 16000, 24000, 32000, 48000 };
FuzzedDataProvider fdp(data, size);
@@ -78,12 +78,13 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
int dt_us = fdp.PickValueInArray(dt_list);
int sr_hz = fdp.PickValueInArray(sr_list);
int nchannels = fdp.PickValueInArray({1, 2});
+ bool hrmode = fdp.ConsumeBool();
int sr_pcm_hz = fdp.PickValueInArray(sr_list);
if (sr_pcm_hz < sr_hz)
sr_pcm_hz = 0;
- Encoder enc(dt_us, sr_hz, sr_pcm_hz, nchannels);
+ Encoder enc(dt_us, sr_hz, sr_pcm_hz, nchannels, hrmode);
PcmFormat fmt = fdp.PickValueInArray(
{ PcmFormat::kS16, PcmFormat::kS24,
diff --git a/fuzz/makefile.mk b/fuzz/makefile.mk
index 4c83de2..a8f5311 100644
--- a/fuzz/makefile.mk
+++ b/fuzz/makefile.mk
@@ -17,8 +17,8 @@
efuzz_src += \
$(FUZZ_DIR)/efuzz.cc
-efuzz_lib += liblc3
-efuzz_ldlibs += m
+efuzz_ldlibs += lc3 m
+efuzz_dependencies += liblc3
$(eval $(call add-bin,efuzz))
@@ -26,8 +26,8 @@ $(eval $(call add-bin,efuzz))
dfuzz_src += \
$(FUZZ_DIR)/dfuzz.cc
-dfuzz_lib += liblc3
-dfuzz_ldlibs += m
+dfuzz_ldlibs += lc3 m
+dfuzz_dependencies += liblc3
$(eval $(call add-bin,dfuzz))
@@ -44,9 +44,9 @@ efuzz dfuzz: CXXFLAGS += $(FUZZER_SANITIZE)
efuzz dfuzz: LDFLAGS += $(FUZZER_SANITIZE)
dfuzz:
- $(V)$(dfuzz_bin) -runs=1000000
+ $(V)LD_LIBRARY_PATH=$(BIN_DIR) $(dfuzz_bin) -runs=1000000
efuzz:
- $(V)$(efuzz_bin) -runs=1000000
+ $(V)LD_LIBRARY_PATH=$(BIN_DIR) $(efuzz_bin) -runs=1000000
fuzz: efuzz dfuzz
diff --git a/include/lc3.h b/include/lc3.h
index 9e84ffb..98022f3 100644
--- a/include/lc3.h
+++ b/include/lc3.h
@@ -20,11 +20,15 @@
* Low Complexity Communication Codec (LC3)
*
* This implementation conforms to :
- * Low Complexity Communication Codec (LC3)
- * Bluetooth Specification v1.0
*
+ * - Low Complexity Communication Codec (LC3)
+ * Bluetooth Specification v1.0
*
- * The LC3 is an efficient low latency audio codec.
+ * - ETSI TS 103 634 v1.4.1
+ * Digital Enhanced Cordless Telecommunications (DECT)
+ * Low Complexity Communication Codec plus (LC3plus)
+ *
+ * LC3 and LC3 Plus are audio codecs designed for low-latency audio transport.
*
* - Unlike most other codecs, the LC3 codec is focused on audio streaming
* in constrained (on packet sizes and interval) tranport layer.
@@ -40,19 +44,65 @@
*
* - Unlike classic codecs, the LC3 codecs does not run on fixed amount
* of samples as input. It operates only on fixed frame duration, for
- * any supported samplerates (8 to 48 KHz). Two frames duration are
+ * any supported sample rates (8 to 48 KHz). Two frames duration are
* available 7.5ms and 10ms.
*
*
- * --- About 44.1 KHz samplerate ---
+ * --- LC3 Plus features ---
+ *
+ * In addition to LC3, following features of LC3 Plus are proposed:
+ * - Frame duration of 2.5 and 5ms.
+ * - High-Resolution mode, 48 KHz, and 96 kHz sampling rates.
+ *
+ * The distinction between LC3 and LC3 plus is made according to :
+ *
+ * Frame Duration | 2.5ms | 5ms | 7.5ms | 10 ms |
+ * ---------------- | ----- | ----- | ----- | ----- |
+ * LC3 | | | X | X |
+ * LC3 Plus | X | X | | X |
+ *
+ * The 10 ms frame duration is available in LC3 and LC3 plus standard.
+ * In this mode, the produced bitstream can be referenced either
+ * as LC3 or LC3 plus.
+ *
+ * The LC3 Plus high-resolution mode should be preferred at high bitrates
+ * and larger audio bandwidth. In this mode, the audio bandwidth is always
+ * up to the Nyquist frequency, compared to LC3 at 48 KHz, which limits
+ * the bandwidth to 20 KHz.
+ *
*
- * The Bluetooth specification reference the 44.1 KHz samplerate, although
- * there is no support in the core algorithm of the codec of 44.1 KHz.
- * We can summarize the 44.1 KHz support by "you can put any samplerate
- * around the defined base samplerates". Please mind the following items :
+ * --- Bit rate ---
*
- * 1. The frame size will not be 7.5 ms or 10 ms, but is scaled
- * by 'supported samplerate' / 'input samplerate'
+ * The proposed implementation accepts any frame sizes between 20 and 400 Bytes
+ * for non-high-resolution mode. Mind that the LC3 Plus standard defines
+ * smaller sizes for frame durations shorter than 10 ms and/or sampling rates
+ * less than 48 kHz.
+ *
+ * In High-Resolution mode, the frame sizes (and bitrates) are restricted
+ * as follows:
+ *
+ * HR Configuration | Frame sizes | Bitrate (kbps) |
+ * ------------------ | ------------- | -------------- |
+ * 10 ms - 48 KHz | 156 to 625 | 124.8 - 500 |
+ * 10 ms - 96 KHz | 187 to 625 | 149.6 - 500 |
+ * ------------------ | ------------- | -------------- |
+ * 5 ms - 48 KHz | 93 to 375 | 148.8 - 600 |
+ * 5 ms - 96 KHz | 109 to 375 | 174.4 - 600 |
+ * ------------------ | ------------- | -------------- |
+ * 2.5 ms - 48 KHz | 54 to 210 | 172.8 - 672 |
+ * 2.5 ms - 96 KHz | 62 to 210 | 198.4 - 672 |
+ *
+ *
+ * --- About 44.1 KHz sample rate ---
+ *
+ * The Bluetooth specification and the ETSI TS 103 634 standard references
+ * the 44.1 KHz sample rate, although there is no support in the core algorithm
+ * of the codec.
+ * We can summarize the 44.1 KHz support by "You can put any sample rate around
+ * the defined base sample rates." Please mind the following items :
+ *
+ * 1. The frame size will not be 2.5ms, 5ms, 7.5 ms or 10 ms, but is scaled
+ * by 'supported sample rate' / 'input sample rate'
*
* 2. The bandwidth will be hard limited (to 20 KHz) if you select 48 KHz.
* The encoded bandwidth will also be affected by the above inverse
@@ -84,8 +134,8 @@
* space must be aligned to a pointer size. As an example, you can setup
* encoder like this :
*
- * | enc = lc3_setup_encoder(frame_us, samplerate,
- * | malloc(lc3_encoder_size(frame_us, samplerate)));
+ * | enc = lc3_setup_encoder(frame_us, sample rate,
+ * | malloc(lc3_encoder_size(frame_us, sample rate)));
* | ...
* | free(enc);
*
@@ -124,34 +174,45 @@ extern "C" {
/**
* Limitations
- * - On the bitrate, in bps, of a stream
+ * - On the bitrate, in bps
* - On the size of the frames in bytes
* - On the number of samples by frames
*/
#define LC3_MIN_BITRATE 16000
#define LC3_MAX_BITRATE 320000
+#define LC3_HR_MAX_BITRATE 672000
#define LC3_MIN_FRAME_BYTES 20
#define LC3_MAX_FRAME_BYTES 400
+#define LC3_HR_MAX_FRAME_BYTES 625
-#define LC3_MIN_FRAME_SAMPLES __LC3_NS( 7500, 8000)
-#define LC3_MAX_FRAME_SAMPLES __LC3_NS(10000, 48000)
+#define LC3_MIN_FRAME_SAMPLES LC3_NS( 2500, 8000)
+#define LC3_MAX_FRAME_SAMPLES LC3_NS(10000, 48000)
+#define LC3_HR_MAX_FRAME_SAMPLES LC3_NS(10000, 96000)
/**
* Parameters check
* LC3_CHECK_DT_US(us) True when frame duration in us is suitable
- * LC3_CHECK_SR_HZ(sr) True when samplerate in Hz is suitable
+ * LC3_CHECK_SR_HZ(sr) True when sample rate in Hz is suitable
+ *
+ * LC3_HR_CHECK_SR_HZ(hrmode, sr)
+ * True when sample rate in Hz is suitable, according to the
+ * selection of the high-resolution mode `hrmode`.
*/
#define LC3_CHECK_DT_US(us) \
- ( ((us) == 7500) || ((us) == 10000) )
+ ( ((us) == 2500) || ((us) == 5000) || \
+ ((us) == 7500) || ((us) == 10000) )
#define LC3_CHECK_SR_HZ(sr) \
( ((sr) == 8000) || ((sr) == 16000) || ((sr) == 24000) || \
((sr) == 32000) || ((sr) == 48000) )
+#define LC3_HR_CHECK_SR_HZ(hrmode, sr) \
+ ( (hrmode) ? ((sr) == 48000) || ((sr) == 96000) : LC3_CHECK_SR_HZ(sr) )
+
/**
* PCM Sample Format
@@ -179,10 +240,10 @@ typedef struct lc3_decoder *lc3_decoder_t;
/**
- * Static memory of encoder context
+ * Static memory of encoder/decoder contexts
*
* Propose types suitable for static memory allocation, supporting
- * any frame duration, and maximum samplerates 16k and 48k respectively
+ * any frame duration, and maximum sample rates 16k and 48k respectively
* You can customize your type using the `LC3_ENCODER_MEM_T` or
* `LC3_DECODER_MEM_T` macro.
*/
@@ -196,62 +257,102 @@ typedef LC3_DECODER_MEM_T(10000, 48000) lc3_decoder_mem_48k_t;
/**
* Return the number of PCM samples in a frame
- * dt_us Frame duration in us, 7500 or 10000
- * sr_hz Samplerate in Hz, 8000, 16000, 24000, 32000 or 48000
+ * hrmode Enable High-Resolution mode (48000 and 96000 sample rates)
+ * dt_us Frame duration in us, 2500, 5000, 7500 or 10000
+ * sr_hz Sample rate in Hz, 8000, 16000, 24000, 32000, 48000 or 96000
* return Number of PCM samples, -1 on bad parameters
*/
-int lc3_frame_samples(int dt_us, int sr_hz);
+LC3_EXPORT int lc3_hr_frame_samples(bool hrmode, int dt_us, int sr_hz);
+
+LC3_EXPORT int lc3_frame_samples(int dt_us, int sr_hz);
/**
* Return the size of frames, from bitrate
- * dt_us Frame duration in us, 7500 or 10000
- * bitrate Target bitrate in bit per second
+ * hrmode Enable High-Resolution mode (48000 and 96000 sample rates)
+ * dt_us Frame duration in us, 2500, 5000, 7500 or 10000
+ * sr_hz Sample rate in Hz, 8000, 16000, 24000, 32000, 48000 or 96000
+ * bitrate Target bitrate in bit per second, 0 or `INT_MAX` returns
+ * respectively the minimum and maximum allowed size.
+ * return The floor size in bytes of the frames, -1 on bad parameters
+ */
+LC3_EXPORT int lc3_hr_frame_bytes(
+ bool hrmode, int dt_us, int sr_hz, int bitrate);
+
+LC3_EXPORT int lc3_frame_bytes(int dt_us, int bitrate);
+
+/**
+ * Return the size of frame blocks, from bitrate
+ * A frame block contains the frame data from all channels.
+ * hrmode Enable High-Resolution mode (48000 and 96000 sample rates)
+ * dt_us Frame duration in us, 2500, 5000, 7500 or 10000
+ * sr_hz Sample rate in Hz, 8000, 16000, 24000, 32000, 48000 or 96000
+ * nchannels The number of channels (or frames) in the block (<= 8)
+ * bitrate Target bitrate in bit per second, 0 or `INT_MAX` returns
+ * respectively the minimum and maximum allowed size.
* return The floor size in bytes of the frames, -1 on bad parameters
*/
-int lc3_frame_bytes(int dt_us, int bitrate);
+LC3_EXPORT int lc3_hr_frame_block_bytes(
+ bool hrmode, int dt_us, int sr_hz, int nchannels, int bitrate);
+
+LC3_EXPORT int lc3_frame_block_bytes(int dt_us, int nframes, int bitrate);
/**
* Resolve the bitrate, from the size of frames
- * dt_us Frame duration in us, 7500 or 10000
- * nbytes Size in bytes of the frames
- * return The according bitrate in bps, -1 on bad parameters
+ * hrmode Enable High-Resolution mode (48000 and 96000 sample rates)
+ * dt_us Frame duration in us, 2500, 5000, 7500 or 10000
+ * sr_hz Sample rate in Hz, 8000, 16000, 24000, 32000, 48000 or 96000
+ * nbytes Size in bytes of the frames or frame blocks
+ * return The ceiled bitrate in bps, -1 on bad parameters
*/
-int lc3_resolve_bitrate(int dt_us, int nbytes);
+LC3_EXPORT int lc3_hr_resolve_bitrate(
+ bool hrmode, int dt_us, int sr_hz, int nbytes);
+
+LC3_EXPORT int lc3_resolve_bitrate(int dt_us, int nbytes);
/**
* Return algorithmic delay, as a number of samples
- * dt_us Frame duration in us, 7500 or 10000
- * sr_hz Samplerate in Hz, 8000, 16000, 24000, 32000 or 48000
+ * hrmode Enable High-Resolution mode (48000 and 96000 sample rates)
+ * dt_us Frame duration in us, 2500, 5000, 7500 or 10000
+ * sr_hz Sample rate in Hz, 8000, 16000, 24000, 32000, 48000 or 96000
* return Number of algorithmic delay samples, -1 on bad parameters
*/
-int lc3_delay_samples(int dt_us, int sr_hz);
+LC3_EXPORT int lc3_hr_delay_samples(bool hrmode, int dt_us, int sr_hz);
+
+LC3_EXPORT int lc3_delay_samples(int dt_us, int sr_hz);
/**
* Return size needed for an encoder
- * dt_us Frame duration in us, 7500 or 10000
- * sr_hz Samplerate in Hz, 8000, 16000, 24000, 32000 or 48000
+ * hrmode Enable High-Resolution mode (48000 and 96000 sample rates)
+ * dt_us Frame duration in us, 2500, 5000, 7500 or 10000
+ * sr_hz Sample rate in Hz, 8000, 16000, 24000, 32000, 48000 or 96000
* return Size of then encoder in bytes, 0 on bad parameters
*
- * The `sr_hz` parameter is the samplerate of the PCM input stream,
- * and will match `sr_pcm_hz` of `lc3_setup_encoder()`.
+ * The `sr_hz` parameter is the sample rate of the PCM input stream,
+ * and will match `sr_pcm_hz` of `lc3_hr_setup_encoder()`.
*/
-unsigned lc3_encoder_size(int dt_us, int sr_hz);
+LC3_EXPORT unsigned lc3_hr_encoder_size(bool hrmode, int dt_us, int sr_hz);
+
+LC3_EXPORT unsigned lc3_encoder_size(int dt_us, int sr_hz);
/**
* Setup encoder
- * dt_us Frame duration in us, 7500 or 10000
- * sr_hz Samplerate in Hz, 8000, 16000, 24000, 32000 or 48000
- * sr_pcm_hz Input samplerate, downsampling option of input, or 0
+ * hrmode Enable High-Resolution mode (48000 and 96000 sample rates)
+ * dt_us Frame duration in us, 2500, 5000, 7500 or 10000
+ * sr_hz Sample rate in Hz, 8000, 16000, 24000, 32000, 48000 or 96000
+ * sr_pcm_hz Input sample rate, downsampling option of input, or 0
* mem Encoder memory space, aligned to pointer type
* return Encoder as an handle, NULL on bad parameters
*
* The `sr_pcm_hz` parameter is a downsampling option of PCM input,
- * the value `0` fallback to the samplerate of the encoded stream `sr_hz`.
+ * the value `0` fallback to the sample rate of the encoded stream `sr_hz`.
* When used, `sr_pcm_hz` is intended to be higher or equal to the encoder
- * samplerate `sr_hz`. The size of the context needed, given by
- * `lc3_encoder_size()` will be set accordingly to `sr_pcm_hz`.
+ * sample rate `sr_hz`. The size of the context needed, given by
+ * `lc3_hr_encoder_size()` will be set accordingly to `sr_pcm_hz`.
*/
-lc3_encoder_t lc3_setup_encoder(
+LC3_EXPORT lc3_encoder_t lc3_hr_setup_encoder(
+ bool hrmode, int dt_us, int sr_hz, int sr_pcm_hz, void *mem);
+
+LC3_EXPORT lc3_encoder_t lc3_setup_encoder(
int dt_us, int sr_hz, int sr_pcm_hz, void *mem);
/**
@@ -259,39 +360,47 @@ lc3_encoder_t lc3_setup_encoder(
* encoder Handle of the encoder
* fmt PCM input format
* pcm, stride Input PCM samples, and count between two consecutives
- * nbytes Target size, in bytes, of the frame (20 to 400)
+ * nbytes Target size, in bytes, of the frame
* out Output buffer of `nbytes` size
* return 0: On success -1: Wrong parameters
*/
-int lc3_encode(lc3_encoder_t encoder, enum lc3_pcm_format fmt,
+LC3_EXPORT int lc3_encode(
+ lc3_encoder_t encoder, enum lc3_pcm_format fmt,
const void *pcm, int stride, int nbytes, void *out);
/**
* Return size needed for an decoder
- * dt_us Frame duration in us, 7500 or 10000
- * sr_hz Samplerate in Hz, 8000, 16000, 24000, 32000 or 48000
+ * hrmode Enable High-Resolution mode (48000 and 96000 sample rates)
+ * dt_us Frame duration in us, 2500, 5000, 7500 or 10000
+ * sr_hz Sample rate in Hz, 8000, 16000, 24000, 32000, 48000 or 96000
* return Size of then decoder in bytes, 0 on bad parameters
*
- * The `sr_hz` parameter is the samplerate of the PCM output stream,
- * and will match `sr_pcm_hz` of `lc3_setup_decoder()`.
+ * The `sr_hz` parameter is the sample rate of the PCM output stream,
+ * and will match `sr_pcm_hz` of `lc3_hr_setup_decoder()`.
*/
-unsigned lc3_decoder_size(int dt_us, int sr_hz);
+LC3_EXPORT unsigned lc3_hr_decoder_size(bool hrmode, int dt_us, int sr_hz);
+
+LC3_EXPORT unsigned lc3_decoder_size(int dt_us, int sr_hz);
/**
* Setup decoder
- * dt_us Frame duration in us, 7500 or 10000
- * sr_hz Samplerate in Hz, 8000, 16000, 24000, 32000 or 48000
- * sr_pcm_hz Output samplerate, upsampling option of output (or 0)
+ * hrmode Enable High-Resolution mode (48000 and 96000 sample rates)
+ * dt_us Frame duration in us, 2500, 5000, 7500 or 10000
+ * sr_hz Sample rate in Hz, 8000, 16000, 24000, 32000, 48000 or 96000
+ * sr_pcm_hz Output sample rate, upsampling option of output (or 0)
* mem Decoder memory space, aligned to pointer type
* return Decoder as an handle, NULL on bad parameters
*
* The `sr_pcm_hz` parameter is an upsampling option of PCM output,
- * the value `0` fallback to the samplerate of the decoded stream `sr_hz`.
+ * the value `0` fallback to the sample rate of the decoded stream `sr_hz`.
* When used, `sr_pcm_hz` is intended to be higher or equal to the decoder
- * samplerate `sr_hz`. The size of the context needed, given by
- * `lc3_decoder_size()` will be set accordingly to `sr_pcm_hz`.
+ * sample rate `sr_hz`. The size of the context needed, given by
+ * `lc3_hr_decoder_size()` will be set accordingly to `sr_pcm_hz`.
*/
-lc3_decoder_t lc3_setup_decoder(
+LC3_EXPORT lc3_decoder_t lc3_hr_setup_decoder(
+ bool hrmode, int dt_us, int sr_hz, int sr_pcm_hz, void *mem);
+
+LC3_EXPORT lc3_decoder_t lc3_setup_decoder(
int dt_us, int sr_hz, int sr_pcm_hz, void *mem);
/**
@@ -302,7 +411,8 @@ lc3_decoder_t lc3_setup_decoder(
* pcm, stride Output PCM samples, and count between two consecutives
* return 0: On success 1: PLC operated -1: Wrong parameters
*/
-int lc3_decode(lc3_decoder_t decoder, const void *in, int nbytes,
+LC3_EXPORT int lc3_decode(
+ lc3_decoder_t decoder, const void *in, int nbytes,
enum lc3_pcm_format fmt, void *pcm, int stride);
diff --git a/include/lc3_cpp.h b/include/lc3_cpp.h
index acd3d0b..1949eb9 100644
--- a/include/lc3_cpp.h
+++ b/include/lc3_cpp.h
@@ -50,11 +50,12 @@ enum class PcmFormat {
template <typename T>
class Base {
protected:
- Base(int dt_us, int sr_hz, int sr_pcm_hz, size_t nchannels)
+ Base(int dt_us, int sr_hz, int sr_pcm_hz, size_t nchannels, bool hrmode)
: dt_us_(dt_us),
sr_hz_(sr_hz),
sr_pcm_hz_(sr_pcm_hz == 0 ? sr_hz : sr_pcm_hz),
- nchannels_(nchannels) {
+ nchannels_(nchannels),
+ hrmode_(hrmode) {
states.reserve(nchannels_);
}
@@ -63,37 +64,50 @@ class Base {
int dt_us_, sr_hz_;
int sr_pcm_hz_;
size_t nchannels_;
+ bool hrmode_;
using state_ptr = std::unique_ptr<T, decltype(&free)>;
std::vector<state_ptr> states;
public:
// Return the number of PCM samples in a frame
- int GetFrameSamples() { return lc3_frame_samples(dt_us_, sr_pcm_hz_); }
+ int GetFrameSamples() {
+ return lc3_hr_frame_samples(hrmode_, dt_us_, sr_pcm_hz_); }
- // Return the size of frames, from bitrate
- int GetFrameBytes(int bitrate) { return lc3_frame_bytes(dt_us_, bitrate); }
+ // Return the size of a frame block, from bitrate
+ int GetFrameBytes(int bitrate) {
+ return lc3_hr_frame_block_bytes(
+ hrmode_, dt_us_, sr_hz_, nchannels_, bitrate); }
- // Resolve the bitrate, from the size of frames
- int ResolveBitrate(int nbytes) { return lc3_resolve_bitrate(dt_us_, nbytes); }
+ // Resolve the bitrate, from the size of frame blocks
+ int ResolveBitrate(int nbytes) {
+ return lc3_hr_resolve_bitrate(hrmode_, dt_us_, sr_hz_, nbytes); }
// Return algorithmic delay, as a number of samples
- int GetDelaySamples() { return lc3_delay_samples(dt_us_, sr_pcm_hz_); }
+ int GetDelaySamples() {
+ return lc3_hr_delay_samples(hrmode_, dt_us_, sr_pcm_hz_); }
}; // class Base
// Encoder Class
class Encoder : public Base<struct lc3_encoder> {
template <typename T>
- int EncodeImpl(PcmFormat fmt, const T *pcm, int frame_size, uint8_t *out) {
+ int EncodeImpl(PcmFormat fmt, const T *pcm, int block_size, uint8_t *out) {
if (states.size() != nchannels_) return -1;
enum lc3_pcm_format cfmt = static_cast<lc3_pcm_format>(fmt);
int ret = 0;
- for (size_t ich = 0; ich < nchannels_; ich++)
+ uint8_t *out_ptr = out;
+ for (size_t ich = 0; ich < nchannels_; ich++) {
+ int frame_size = block_size / nchannels_
+ + (ich < block_size % nchannels_);
+
ret |= lc3_encode(states[ich].get(), cfmt, pcm + ich, nchannels_,
- frame_size, out + ich * frame_size);
+ frame_size, out_ptr);
+
+ out_ptr += frame_size;
+ }
return ret;
}
@@ -101,21 +115,24 @@ class Encoder : public Base<struct lc3_encoder> {
public:
// Encoder construction / destruction
//
- // The frame duration `dt_us` is 7500 or 10000 us.
- // The samplerate `sr_hz` is 8000, 16000, 24000, 32000 or 48000 Hz.
+ // The frame duration `dt_us` is 2500, 5000, 7500 or 10000 us.
+ // The sample rate `sr_hz` is 8000, 16000, 24000, 32000 or 48000 Hz.
+ // The `hrmode` flag enables the high-resolution mode, in which case
+ // the sample rate is 48000 or 96000 Hz.
//
// The `sr_pcm_hz` parameter is a downsampling option of PCM input,
- // the value 0 fallback to the samplerate of the encoded stream `sr_hz`.
+ // the value 0 fallback to the sample rate of the encoded stream `sr_hz`.
// When used, `sr_pcm_hz` is intended to be higher or equal to the encoder
- // samplerate `sr_hz`.
+ // sample rate `sr_hz`.
- Encoder(int dt_us, int sr_hz, int sr_pcm_hz = 0, size_t nchannels = 1)
- : Base(dt_us, sr_hz, sr_pcm_hz, nchannels) {
+ Encoder(int dt_us, int sr_hz, int sr_pcm_hz = 0,
+ size_t nchannels = 1, bool hrmode = false)
+ : Base(dt_us, sr_hz, sr_pcm_hz, nchannels, hrmode) {
for (size_t ich = 0; ich < nchannels_; ich++) {
- auto s = state_ptr(
- (lc3_encoder_t)malloc(lc3_encoder_size(dt_us_, sr_pcm_hz_)), free);
+ auto s = state_ptr((lc3_encoder_t)
+ malloc(lc3_hr_encoder_size(hrmode_, dt_us_, sr_pcm_hz_)), free);
- if (lc3_setup_encoder(dt_us_, sr_hz_, sr_pcm_hz_, s.get()))
+ if (lc3_hr_setup_encoder(hrmode_, dt_us_, sr_hz_, sr_pcm_hz_, s.get()))
states.push_back(std::move(s));
}
}
@@ -126,7 +143,7 @@ class Encoder : public Base<struct lc3_encoder> {
void Reset() {
for (auto &s : states)
- lc3_setup_encoder(dt_us_, sr_hz_, sr_pcm_hz_, s.get());
+ lc3_hr_setup_encoder(hrmode_, dt_us_, sr_hz_, sr_pcm_hz_, s.get());
}
// Encode
@@ -135,43 +152,43 @@ class Encoder : public Base<struct lc3_encoder> {
// according the type of `pcm` input buffer, or by selecting a format.
//
// The PCM samples are read in interleaved way, and consecutive
- // `nchannels` frames of size `frame_size` are output in `out` buffer.
+ // `nchannels` frames, are output in `out` buffer, of size `buffer_size`.
//
// The value returned is 0 on successs, -1 otherwise.
- int Encode(const int16_t *pcm, int frame_size, uint8_t *out) {
- return EncodeImpl(PcmFormat::kS16, pcm, frame_size, out);
+ int Encode(const int16_t *pcm, int block_size, uint8_t *out) {
+ return EncodeImpl(PcmFormat::kS16, pcm, block_size, out);
}
- int Encode(const int32_t *pcm, int frame_size, uint8_t *out) {
- return EncodeImpl(PcmFormat::kS24, pcm, frame_size, out);
+ int Encode(const int32_t *pcm, int block_size, uint8_t *out) {
+ return EncodeImpl(PcmFormat::kS24, pcm, block_size, out);
}
- int Encode(const float *pcm, int frame_size, uint8_t *out) {
- return EncodeImpl(PcmFormat::kF32, pcm, frame_size, out);
+ int Encode(const float *pcm, int block_size, uint8_t *out) {
+ return EncodeImpl(PcmFormat::kF32, pcm, block_size, out);
}
- int Encode(PcmFormat fmt, const void *pcm, int frame_size, uint8_t *out) {
+ int Encode(PcmFormat fmt, const void *pcm, int block_size, uint8_t *out) {
uintptr_t pcm_ptr = reinterpret_cast<uintptr_t>(pcm);
switch (fmt) {
case PcmFormat::kS16:
assert(pcm_ptr % alignof(int16_t) == 0);
return EncodeImpl(fmt, reinterpret_cast<const int16_t *>(pcm),
- frame_size, out);
+ block_size, out);
case PcmFormat::kS24:
assert(pcm_ptr % alignof(int32_t) == 0);
return EncodeImpl(fmt, reinterpret_cast<const int32_t *>(pcm),
- frame_size, out);
+ block_size, out);
case PcmFormat::kS24In3Le:
return EncodeImpl(fmt, reinterpret_cast<const int8_t(*)[3]>(pcm),
- frame_size, out);
+ block_size, out);
case PcmFormat::kF32:
assert(pcm_ptr % alignof(float) == 0);
- return EncodeImpl(fmt, reinterpret_cast<const float *>(pcm), frame_size,
+ return EncodeImpl(fmt, reinterpret_cast<const float *>(pcm), block_size,
out);
}
@@ -183,37 +200,47 @@ class Encoder : public Base<struct lc3_encoder> {
// Decoder Class
class Decoder : public Base<struct lc3_decoder> {
template <typename T>
- int DecodeImpl(const uint8_t *in, int frame_size, PcmFormat fmt, T *pcm) {
+ int DecodeImpl(const uint8_t *in, int block_size, PcmFormat fmt, T *pcm) {
if (states.size() != nchannels_) return -1;
enum lc3_pcm_format cfmt = static_cast<enum lc3_pcm_format>(fmt);
int ret = 0;
- for (size_t ich = 0; ich < nchannels_; ich++)
- ret |= lc3_decode(states[ich].get(), in + ich * frame_size, frame_size,
+ const uint8_t *in_ptr = in;
+ for (size_t ich = 0; ich < nchannels_; ich++) {
+ int frame_size = block_size / nchannels_
+ + (ich < block_size % nchannels_);
+
+ ret |= lc3_decode(states[ich].get(), in_ptr, frame_size,
cfmt, pcm + ich, nchannels_);
+ in_ptr += frame_size;
+ }
+
return ret;
}
public:
// Decoder construction / destruction
//
- // The frame duration `dt_us` is 7500 or 10000 us.
- // The samplerate `sr_hz` is 8000, 16000, 24000, 32000 or 48000 Hz.
+ // The frame duration `dt_us` is 2500, 5000, 7500 or 10000 us.
+ // The sample rate `sr_hz` is 8000, 16000, 24000, 32000 or 48000 Hz.
+ // The `hrmode` flag enables the high-resolution mode, in which case
+ // the sample rate is 48000 or 96000 Hz.
//
// The `sr_pcm_hz` parameter is an downsampling option of PCM output,
- // the value 0 fallback to the samplerate of the decoded stream `sr_hz`.
+ // the value 0 fallback to the sample rate of the decoded stream `sr_hz`.
// When used, `sr_pcm_hz` is intended to be higher or equal to the decoder
- // samplerate `sr_hz`.
+ // sample rate `sr_hz`.
- Decoder(int dt_us, int sr_hz, int sr_pcm_hz = 0, size_t nchannels = 1)
- : Base(dt_us, sr_hz, sr_pcm_hz, nchannels) {
+ Decoder(int dt_us, int sr_hz, int sr_pcm_hz = 0,
+ size_t nchannels = 1, bool hrmode = false)
+ : Base(dt_us, sr_hz, sr_pcm_hz, nchannels, hrmode) {
for (size_t i = 0; i < nchannels_; i++) {
- auto s = state_ptr(
- (lc3_decoder_t)malloc(lc3_decoder_size(dt_us_, sr_pcm_hz_)), free);
+ auto s = state_ptr((lc3_decoder_t)
+ malloc(lc3_hr_decoder_size(hrmode_, dt_us_, sr_pcm_hz_)), free);
- if (lc3_setup_decoder(dt_us_, sr_hz_, sr_pcm_hz_, s.get()))
+ if (lc3_hr_setup_decoder(hrmode_, dt_us_, sr_hz_, sr_pcm_hz_, s.get()))
states.push_back(std::move(s));
}
}
@@ -224,12 +251,12 @@ class Decoder : public Base<struct lc3_decoder> {
void Reset() {
for (auto &s : states)
- lc3_setup_decoder(dt_us_, sr_hz_, sr_pcm_hz_, s.get());
+ lc3_hr_setup_decoder(hrmode_, dt_us_, sr_hz_, sr_pcm_hz_, s.get());
}
// Decode
//
- // Consecutive `nchannels` frames of size `frame_size` are decoded
+ // Decode a frame block of size `block_size`,
// in the `pcm` buffer in interleaved way.
//
// The PCM samples are output in signed 16 bits, 24 bits, float,
@@ -238,39 +265,39 @@ class Decoder : public Base<struct lc3_decoder> {
// The value returned is 0 on successs, 1 when PLC has been performed,
// and -1 otherwise.
- int Decode(const uint8_t *in, int frame_size, int16_t *pcm) {
- return DecodeImpl(in, frame_size, PcmFormat::kS16, pcm);
+ int Decode(const uint8_t *in, int block_size, int16_t *pcm) {
+ return DecodeImpl(in, block_size, PcmFormat::kS16, pcm);
}
- int Decode(const uint8_t *in, int frame_size, int32_t *pcm) {
- return DecodeImpl(in, frame_size, PcmFormat::kS24In3Le, pcm);
+ int Decode(const uint8_t *in, int block_size, int32_t *pcm) {
+ return DecodeImpl(in, block_size, PcmFormat::kS24In3Le, pcm);
}
- int Decode(const uint8_t *in, int frame_size, float *pcm) {
- return DecodeImpl(in, frame_size, PcmFormat::kF32, pcm);
+ int Decode(const uint8_t *in, int block_size, float *pcm) {
+ return DecodeImpl(in, block_size, PcmFormat::kF32, pcm);
}
- int Decode(const uint8_t *in, int frame_size, PcmFormat fmt, void *pcm) {
+ int Decode(const uint8_t *in, int block_size, PcmFormat fmt, void *pcm) {
uintptr_t pcm_ptr = reinterpret_cast<uintptr_t>(pcm);
switch (fmt) {
case PcmFormat::kS16:
assert(pcm_ptr % alignof(int16_t) == 0);
- return DecodeImpl(in, frame_size, fmt,
+ return DecodeImpl(in, block_size, fmt,
reinterpret_cast<int16_t *>(pcm));
case PcmFormat::kS24:
assert(pcm_ptr % alignof(int32_t) == 0);
- return DecodeImpl(in, frame_size, fmt,
+ return DecodeImpl(in, block_size, fmt,
reinterpret_cast<int32_t *>(pcm));
case PcmFormat::kS24In3Le:
- return DecodeImpl(in, frame_size, fmt,
+ return DecodeImpl(in, block_size, fmt,
reinterpret_cast<int8_t(*)[3]>(pcm));
case PcmFormat::kF32:
assert(pcm_ptr % alignof(float) == 0);
- return DecodeImpl(in, frame_size, fmt, reinterpret_cast<float *>(pcm));
+ return DecodeImpl(in, block_size, fmt, reinterpret_cast<float *>(pcm));
}
return -1;
diff --git a/include/lc3_private.h b/include/lc3_private.h
index c4d6703..4f5f657 100644
--- a/include/lc3_private.h
+++ b/include/lc3_private.h
@@ -24,39 +24,50 @@
/**
- * Return number of samples, delayed samples and
- * encoded spectrum coefficients within a frame
- * - For encoding, keep 1.25 ms of temporal winodw
- * - For decoding, keep 18 ms of history, aligned on frames, and a frame
+ * Characteristics
+ *
+ * - The number of samples within a frame
+ *
+ * - The number of MDCT delayed samples, sum of half a frame and
+ * an ovelap of future by 1.25 ms (2.5ms, 5ms and 10ms frame durations)
+ * or 2 ms (7.5ms frame duration).
+ *
+ * - For decoding, keep 18 ms of history, aligned on a frame
+ *
+ * - For encoding, keep 1.25 ms of temporal previous samples
*/
-#define __LC3_NS(dt_us, sr_hz) \
- ( (dt_us * sr_hz) / 1000 / 1000 )
+#define LC3_NS(dt_us, sr_hz) \
+ ( (dt_us) * (sr_hz) / 1000 / 1000 )
-#define __LC3_ND(dt_us, sr_hz) \
- ( (dt_us) == 7500 ? 23 * __LC3_NS(dt_us, sr_hz) / 30 \
- : 5 * __LC3_NS(dt_us, sr_hz) / 8 )
+#define LC3_ND(dt_us, sr_hz) \
+ ( LC3_NS(dt_us, sr_hz) / 2 + \
+ LC3_NS((dt_us) == 7500 ? 2000 : 1250, sr_hz) )
-#define __LC3_NT(sr_hz) \
- ( (5 * sr_hz) / 4000 )
+#define LC3_NH(dt_us, sr_hz) \
+ ( (sr_hz) > 48000 ? 0 : ( LC3_NS(18000, sr_hz) + \
+ LC3_NS(dt_us, sr_hz) - (LC3_NS(18000, sr_hz) % LC3_NS(dt_us, sr_hz)) ) )
-#define __LC3_NH(dt_us, sr_hz) \
- ( ((3 - ((dt_us) >= 10000)) + 1) * __LC3_NS(dt_us, sr_hz) )
+#define LC3_NT(sr_hz) \
+ ( LC3_NS(1250, sr_hz) )
/**
- * Frame duration 7.5ms or 10ms
+ * Frame duration
*/
enum lc3_dt {
- LC3_DT_7M5,
- LC3_DT_10M,
+ LC3_DT_2M5 = 0,
+ LC3_DT_5M = 1,
+ LC3_DT_7M5 = 2,
+ LC3_DT_10M = 3,
LC3_NUM_DT
};
+
/**
- * Sampling frequency
+ * Sampling frequency and high-resolution mode
*/
enum lc3_srate {
@@ -65,8 +76,10 @@ enum lc3_srate {
LC3_SRATE_24K,
LC3_SRATE_32K,
LC3_SRATE_48K,
+ LC3_SRATE_48K_HR,
+ LC3_SRATE_96K_HR,
- LC3_NUM_SRATE,
+ LC3_NUM_SRATE
};
@@ -112,8 +125,8 @@ struct lc3_encoder {
};
#define LC3_ENCODER_BUFFER_COUNT(dt_us, sr_hz) \
- ( ( __LC3_NS(dt_us, sr_hz) + __LC3_NT(sr_hz) ) / 2 + \
- __LC3_NS(dt_us, sr_hz) + __LC3_ND(dt_us, sr_hz) )
+ ( ( LC3_NS(dt_us, sr_hz) + LC3_NT(sr_hz) ) / 2 + \
+ LC3_NS(dt_us, sr_hz) + LC3_ND(dt_us, sr_hz) )
#define LC3_ENCODER_MEM_T(dt_us, sr_hz) \
struct { \
@@ -150,8 +163,8 @@ struct lc3_decoder {
};
#define LC3_DECODER_BUFFER_COUNT(dt_us, sr_hz) \
- ( __LC3_NH(dt_us, sr_hz) + __LC3_ND(dt_us, sr_hz) + \
- __LC3_NS(dt_us, sr_hz) )
+ ( LC3_NH(dt_us, sr_hz) + LC3_NS(dt_us, sr_hz) + \
+ LC3_ND(dt_us, sr_hz) + LC3_NS(dt_us, sr_hz) )
#define LC3_DECODER_MEM_T(dt_us, sr_hz) \
struct { \
@@ -160,4 +173,15 @@ struct lc3_decoder {
}
+/**
+ * Change the visibility of interface functions
+ */
+
+#ifdef _WIN32
+#define LC3_EXPORT __declspec(dllexport)
+#else
+#define LC3_EXPORT __attribute__((visibility ("default")))
+#endif
+
+
#endif /* __LC3_PRIVATE_H */
diff --git a/meson.build b/meson.build
index d6eb957..60f38b3 100644
--- a/meson.build
+++ b/meson.build
@@ -13,14 +13,16 @@
# limitations under the License.
project('lc3', 'c',
- version: '1.0.4',
+ version: '1.1.0',
license: 'Apache-2.0',
- meson_version: '>= 0.47.0',
- default_options: ['b_lto=true'])
+ meson_version: '>= 0.48.0',
+ default_options: ['buildtype=release', 'b_lto=true'])
cc = meson.get_compiler('c')
-if cc.get_id() != 'msvc'
+if cc.get_id() == 'msvc'
+ add_project_arguments(['/wd4244', '/wd4305', '/fp:fast'], language: 'c')
+else
add_project_arguments('-ffast-math', language: 'c')
endif
@@ -32,3 +34,7 @@ subdir('src')
if get_option('tools')
subdir('tools')
endif
+
+if get_option('python')
+ subdir('python')
+endif
diff --git a/meson_options.txt b/meson_options.txt
index 5249131..d840d1c 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -16,3 +16,8 @@ option('tools',
type: 'boolean',
value: false,
description: 'Build tools')
+
+option('python',
+ type: 'boolean',
+ value: false,
+ description: 'Build python bindings')
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..4806a64
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,19 @@
+[build-system]
+requires = ["meson-python"]
+build-backend = "mesonpy"
+
+[project]
+name = "lc3"
+version = "0.0.1"
+license = { text="Apache-2.0" }
+authors = [
+ { name="Antoine Soulier", email="asoulier@google.com" },
+]
+description = "LC3 Codec library wrapper"
+requires-python = ">=3.10"
+
+[project.urls]
+Homepage = "https://github.com/google/liblc3"
+
+[tool.meson-python.args]
+setup = ['-Dpython=true']
diff --git a/python/LICENSE b/python/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/python/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/python/lc3.py b/python/lc3.py
new file mode 100644
index 0000000..e07efee
--- /dev/null
+++ b/python/lc3.py
@@ -0,0 +1,400 @@
+#
+# Copyright 2024 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+import array
+import ctypes
+import enum
+import glob
+import os
+
+from ctypes import c_bool, c_byte, c_int, c_uint, c_size_t, c_void_p
+from ctypes.util import find_library
+
+
+class _Base:
+
+ def __init__(self, frame_duration, samplerate, nchannels, **kwargs):
+
+ self.hrmode = False
+ self.dt_us = int(frame_duration * 1000)
+ self.sr_hz = int(samplerate)
+ self.sr_pcm_hz = self.sr_hz
+ self.nchannels = nchannels
+
+ libpath = None
+
+ for k in kwargs.keys():
+ if k == 'hrmode':
+ self.hrmode = bool(kwargs[k])
+ elif k == 'pcm_samplerate':
+ self.sr_pcm_hz = int(kwargs[k])
+ elif k == 'libpath':
+ libpath = kwargs[k]
+ else:
+ raise ValueError("Invalid keyword argument: " + k)
+
+ if self.dt_us not in [2500, 5000, 7500, 10000]:
+ raise ValueError(
+ "Invalid frame duration: %.1f ms" % frame_duration)
+
+ allowed_samplerate = [8000, 16000, 24000, 32000, 48000] \
+ if not self.hrmode else [48000, 96000]
+
+ if self.sr_hz not in allowed_samplerate:
+ raise ValueError("Invalid sample rate: %d Hz" % samplerate)
+
+ if libpath is None:
+ mesonpy_lib = glob.glob(os.path.join(os.path.dirname(__file__), '.lc3.mesonpy.libs', '*lc3*'))
+
+ if mesonpy_lib:
+ libpath = mesonpy_lib[0]
+ else:
+ libpath = find_library("lc3")
+ if not libpath:
+ raise Exception("LC3 library not found")
+
+ lib = ctypes.cdll.LoadLibrary(libpath)
+
+ try:
+ lib.lc3_hr_frame_samples \
+ and lib.lc3_hr_frame_block_bytes \
+ and lib.lc3_hr_resolve_bitrate \
+ and lib.lc3_hr_delay_samples
+
+ except AttributeError:
+
+ if self.hrmode:
+ raise Exception('High-Resolution interface not available')
+
+ lib.lc3_hr_frame_samples = \
+ lambda hrmode, dt_us, sr_hz: \
+ lib.lc3_frame_samples(dt_us, sr_hz)
+
+ lib.lc3_hr_frame_block_bytes = \
+ lambda hrmode, dt_us, sr_hz, nchannels, bitrate: \
+ nchannels * lib.lc3_frame_bytes(dt_us, bitrate // 2)
+
+ lib.lc3_hr_resolve_bitrate = \
+ lambda hrmode, dt_us, sr_hz, nbytes: \
+ lib.lc3_resolve_bitrate(dt_us, nbytes)
+
+ lib.lc3_hr_delay_samples = \
+ lambda hrmode, dt_us, sr_hz: \
+ lib.lc3_delay_samples(dt_us, sr_hz)
+
+ lib.lc3_hr_frame_samples.argtypes = [c_bool, c_int, c_int]
+ lib.lc3_hr_frame_block_bytes.argtypes = \
+ [c_bool, c_int, c_int, c_int, c_int]
+ lib.lc3_hr_resolve_bitrate.argtypes = [c_bool, c_int, c_int, c_int]
+ lib.lc3_hr_delay_samples.argtypes = [c_bool, c_int, c_int]
+ self.lib = lib
+
+ libc = ctypes.cdll.LoadLibrary(find_library("c"))
+
+ self.malloc = libc.malloc
+ self.malloc.argtypes = [c_size_t]
+ self.malloc.restype = c_void_p
+
+ self.free = libc.free
+ self.free.argtypes = [c_void_p]
+
+ def get_frame_samples(self):
+ """
+ Returns the number of PCM samples in an LC3 frame
+ """
+ ret = self.lib.lc3_hr_frame_samples(
+ self.hrmode, self.dt_us, self.sr_pcm_hz)
+ if ret < 0:
+ raise ValueError("Bad parameters")
+ return ret
+
+ def get_frame_bytes(self, bitrate):
+ """
+ Returns the size of LC3 frame blocks, from bitrate in bit per seconds.
+ A target `bitrate` equals 0 or `INT32_MAX` returns respectively
+ the minimum and maximum allowed size.
+ """
+ ret = self.lib.lc3_hr_frame_block_bytes(
+ self.hrmode, self.dt_us, self.sr_hz, self.nchannels, bitrate)
+ if ret < 0:
+ raise ValueError("Bad parameters")
+ return ret
+
+ def resolve_bitrate(self, nbytes):
+ """
+ Returns the bitrate in bits per seconds, from the size of LC3 frames.
+ """
+ ret = self.lib.lc3_hr_resolve_bitrate(
+ self.hrmode, self.dt_us, self.sr_hz, nbytes)
+ if ret < 0:
+ raise ValueError("Bad parameters")
+ return ret
+
+ def get_delay_samples(self):
+ """
+ Returns the algorithmic delay, as a number of samples.
+ """
+ ret = self.lib.lc3_hr_delay_samples(
+ self.hrmode, self.dt_us, self.sr_pcm_hz)
+ if ret < 0:
+ raise ValueError("Bad parameters")
+ return ret
+
+ @staticmethod
+ def _resolve_pcm_format(bitdepth):
+ PCM_FORMAT_S16 = 0
+ PCM_FORMAT_S24 = 1
+ PCM_FORMAT_S24_3LE = 2
+ PCM_FORMAT_FLOAT = 3
+
+ match bitdepth:
+ case 16: return (PCM_FORMAT_S16, ctypes.c_int16)
+ case 24: return (PCM_FORMAT_S24_3LE, 3 * ctypes.c_byte)
+ case None: return (PCM_FORMAT_FLOAT, ctypes.c_float)
+ case _: raise ValueError("Could not interpret PCM bitdepth")
+
+
+class Encoder(_Base):
+ """
+ LC3 Encoder wrapper
+
+ The `frame_duration` expressed in milliseconds is any of 2.5, 5.0, 7.5
+ or 10.0. The `samplerate`, in Hertz, is any of 8000, 16000, 24000, 32000
+ or 48000, unless High-Resolution mode is enabled. In High-Resolution mode,
+ the `samplerate` is 48000 or 96000.
+
+ By default, one channel is processed. When `nchannels` is greater than one,
+ the PCM input stream is read interleaved and consecutives LC3 frames are
+ output, for each channel.
+
+ Keyword arguments:
+ hrmode : Enable High-Resolution mode, default is `False`.
+ sr_pcm_hz : Input PCM samplerate, enable downsampling of input.
+ libpath : LC3 library path and name
+ """
+
+ class c_encoder_t(c_void_p):
+ pass
+
+ def __init__(self, frame_duration, samplerate, nchannels=1, **kwargs):
+
+ super().__init__(frame_duration, samplerate, nchannels, **kwargs)
+
+ lib = self.lib
+
+ try:
+ lib.lc3_hr_encoder_size \
+ and lib.lc3_hr_setup_encoder
+
+ except AttributeError:
+
+ assert not self.hrmode
+
+ lib.lc3_hr_encoder_size = \
+ lambda hrmode, dt_us, sr_hz: \
+ lib.lc3_encoder_size(dt_us, sr_hz)
+
+ lib.lc3_hr_setup_encoder = \
+ lambda hrmode, dt_us, sr_hz, sr_pcm_hz, mem: \
+ lib.lc3_setup_encoder(dt_us, sr_hz, sr_pcm_hz, mem)
+
+ lib.lc3_hr_encoder_size.argtypes = [c_bool, c_int, c_int]
+ lib.lc3_hr_encoder_size.restype = c_uint
+
+ lib.lc3_hr_setup_encoder.argtypes = \
+ [c_bool, c_int, c_int, c_int, c_void_p]
+ lib.lc3_hr_setup_encoder.restype = self.c_encoder_t
+
+ lib.lc3_encode.argtypes = \
+ [self.c_encoder_t, c_int, c_void_p, c_int, c_int, c_void_p]
+
+ def new_encoder(): return lib.lc3_hr_setup_encoder(
+ self.hrmode, self.dt_us, self.sr_hz, self.sr_pcm_hz,
+ self.malloc(lib.lc3_hr_encoder_size(
+ self.hrmode, self.dt_us, self.sr_pcm_hz)))
+
+ self.__encoders = [new_encoder() for i in range(nchannels)]
+
+ def __del__(self):
+
+ try:
+ (self.free(encoder) for encoder in self.__encoders)
+ finally:
+ return
+
+ def encode(self, pcm, nbytes, bitdepth=None):
+ """
+ Encode LC3 frame(s), for each channel.
+
+ The `pcm` input is given in two ways. When no `bitdepth` is defined,
+ it's a vector of floating point values from -1 to 1, coding the sample
+ levels. When `bitdepth` is defined, `pcm` is interpreted as a byte-like
+ object, each sample coded on `bitdepth` bits (16 or 24).
+ The machine endianness, or little endian, is used for 16 or 24 bits
+ width, respectively.
+ In both cases, the `pcm` vector data is padded with zeros when
+ its length is less than the required input samples for the encoder.
+ Channels concatenation of encoded LC3 frames, of `nbytes`, is returned.
+ """
+
+ nchannels = self.nchannels
+ frame_samples = self.get_frame_samples()
+
+ (pcm_fmt, pcm_t) = self._resolve_pcm_format(bitdepth)
+ pcm_len = nchannels * frame_samples
+
+ if bitdepth is None:
+ pcm_buffer = array.array('f', pcm)
+
+ # Invert test to catch NaN
+ if not abs(sum(pcm)) / frame_samples < 2:
+ raise ValueError("Out of range PCM input")
+
+ padding = max(pcm_len - frame_samples, 0)
+ pcm_buffer.extend(array.array('f', [0] * padding))
+
+ else:
+ padding = max(pcm_len * ctypes.sizeof(pcm_t) - len(pcm), 0)
+ pcm_buffer = bytearray(pcm) + bytearray(padding)
+
+ data_buffer = (c_byte * nbytes)()
+ data_offset = 0
+
+ for (ich, encoder) in enumerate(self.__encoders):
+
+ pcm_offset = ich * ctypes.sizeof(pcm_t)
+ pcm = (pcm_t * (pcm_len - ich)).from_buffer(pcm_buffer, pcm_offset)
+
+ data_size = nbytes // nchannels + int(ich < nbytes % nchannels)
+ data = (c_byte * data_size).from_buffer(data_buffer, data_offset)
+ data_offset += data_size
+
+ ret = self.lib.lc3_encode(
+ encoder, pcm_fmt, pcm, nchannels, len(data), data)
+ if ret < 0:
+ raise ValueError("Bad parameters")
+
+ return bytes(data_buffer)
+
+
+class Decoder(_Base):
+ """
+ LC3 Decoder wrapper
+
+ The `frame_duration` expressed in milliseconds is any of 2.5, 5.0, 7.5
+ or 10.0. The `samplerate`, in Hertz, is any of 8000, 16000, 24000, 32000
+ or 48000, unless High-Resolution mode is enabled. In High-Resolution
+ mode, the `samplerate` is 48000 or 96000.
+
+ By default, one channel is processed. When `nchannels` is greater than one,
+ the PCM input stream is read interleaved and consecutives LC3 frames are
+ output, for each channel.
+
+ Keyword arguments:
+ hrmode : Enable High-Resolution mode, default is `False`.
+ sr_pcm_hz : Output PCM samplerate, enable upsampling of output.
+ libpath : LC3 library path and name
+ """
+
+ class c_decoder_t(c_void_p):
+ pass
+
+ def __init__(self, frame_duration, samplerate, nchannels=1, **kwargs):
+
+ super().__init__(frame_duration, samplerate, nchannels, **kwargs)
+
+ lib = self.lib
+
+ try:
+ lib.lc3_hr_decoder_size \
+ and lib.lc3_hr_setup_decoder
+
+ except AttributeError:
+
+ assert not self.hrmode
+
+ lib.lc3_hr_decoder_size = \
+ lambda hrmode, dt_us, sr_hz: \
+ lib.lc3_decoder_size(dt_us, sr_hz)
+
+ lib.lc3_hr_setup_decoder = \
+ lambda hrmode, dt_us, sr_hz, sr_pcm_hz, mem: \
+ lib.lc3_setup_decoder(dt_us, sr_hz, sr_pcm_hz, mem)
+
+ lib.lc3_hr_decoder_size.argtypes = [c_bool, c_int, c_int]
+ lib.lc3_hr_decoder_size.restype = c_uint
+
+ lib.lc3_hr_setup_decoder.argtypes = \
+ [c_bool, c_int, c_int, c_int, c_void_p]
+ lib.lc3_hr_setup_decoder.restype = self.c_decoder_t
+
+ lib.lc3_decode.argtypes = \
+ [self.c_decoder_t, c_void_p, c_int, c_int, c_void_p, c_int]
+
+ def new_decoder(): return lib.lc3_hr_setup_decoder(
+ self.hrmode, self.dt_us, self.sr_hz, self.sr_pcm_hz,
+ self.malloc(lib.lc3_hr_decoder_size(
+ self.hrmode, self.dt_us, self.sr_pcm_hz)))
+
+ self.__decoders = [new_decoder() for i in range(nchannels)]
+
+ def __del__(self):
+
+ try:
+ (self.free(decoder) for decoder in self.__decoders)
+ finally:
+ return
+
+ def decode(self, data, bitdepth=None):
+ """
+ Decode an LC3 frame
+
+ The input `data` is the channels concatenation of LC3 frames in a
+ byte-like object. Interleaved PCM samples are returned according to
+ the `bitdepth` indication.
+ When no `bitdepth` is defined, it's a vector of floating point values
+ from -1 to 1, coding the sample levels. When `bitdepth` is defined,
+ it returns a byte array, each sample coded on `bitdepth` bits.
+ The machine endianness, or little endian, is used for 16 or 24 bits
+ width, respectively.
+ """
+
+ nchannels = self.nchannels
+ frame_samples = self.get_frame_samples()
+
+ (pcm_fmt, pcm_t) = self._resolve_pcm_format(bitdepth)
+ pcm_len = nchannels * self.get_frame_samples()
+ pcm_buffer = (pcm_t * pcm_len)()
+
+ data_buffer = bytearray(data)
+ data_offset = 0
+
+ for (ich, decoder) in enumerate(self.__decoders):
+ pcm_offset = ich * ctypes.sizeof(pcm_t)
+ pcm = (pcm_t * (pcm_len - ich)).from_buffer(pcm_buffer, pcm_offset)
+
+ data_size = len(data_buffer) // nchannels + \
+ int(ich < len(data_buffer) % nchannels)
+ data = (c_byte * data_size).from_buffer(data_buffer, data_offset)
+ data_offset += data_size
+
+ ret = self.lib.lc3_decode(
+ decoder, data, len(data), pcm_fmt, pcm, self.nchannels)
+ if ret < 0:
+ raise ValueError("Bad parameters")
+
+ return array.array('f', pcm_buffer) \
+ if bitdepth is None else bytes(pcm_buffer)
diff --git a/python/meson.build b/python/meson.build
new file mode 100644
index 0000000..e63c768
--- /dev/null
+++ b/python/meson.build
@@ -0,0 +1,3 @@
+py = import('python').find_installation()
+
+py.install_sources('lc3.py')
diff --git a/python/tools/decoder.py b/python/tools/decoder.py
new file mode 100755
index 0000000..c10c1e4
--- /dev/null
+++ b/python/tools/decoder.py
@@ -0,0 +1,96 @@
+#!/usr/bin/env python3
+#
+# Copyright 2024 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+import argparse
+import lc3
+import struct
+import sys
+import wave
+
+parser = argparse.ArgumentParser(description='LC3 Decoder')
+
+parser.add_argument(
+ 'lc3_file', nargs='?',
+ help='Input bitstream file, default is stdin',
+ type=argparse.FileType('rb'), default=sys.stdin.buffer)
+
+parser.add_argument(
+ 'wav_file', nargs='?',
+ help='Output wave file, default is stdout',
+ type=argparse.FileType('wb'), default=sys.stdout.buffer)
+
+parser.add_argument(
+ '--bitdepth',
+ help='Output bitdepth, default is 16 bits',
+ type=int, choices=[16, 24], default=16)
+
+parser.add_argument(
+ '--libpath', help='LC3 Library path')
+
+args = parser.parse_args()
+
+# --- LC3 File input ---
+
+f_lc3 = args.lc3_file
+
+header = struct.unpack('=HHHHHHHI', f_lc3.read(18))
+if header[0] != 0xcc1c:
+ raise ValueError('Invalid bitstream file')
+
+samplerate = header[2] * 100
+nchannels = header[4]
+frame_duration = header[5] / 100
+stream_length = header[7]
+
+# --- Setup output ---
+
+bitdepth = args.bitdepth
+pcm_size = nchannels * (bitdepth // 8)
+
+f_wav = args.wav_file
+wavfile = wave.open(f_wav)
+wavfile.setnchannels(nchannels)
+wavfile.setsampwidth(bitdepth // 8)
+wavfile.setframerate(samplerate)
+wavfile.setnframes(stream_length)
+
+# --- Setup decoder ---
+
+dec = lc3.Decoder(
+ frame_duration, samplerate, nchannels, libpath=args.libpath)
+frame_length = dec.get_frame_samples()
+encoded_length = stream_length + dec.get_delay_samples()
+
+# --- Decoding loop ---
+
+for i in range(0, encoded_length, frame_length):
+
+ lc3_frame_size = struct.unpack('=H', f_lc3.read(2))[0]
+ pcm = dec.decode(f_lc3.read(lc3_frame_size), bitdepth=bitdepth)
+
+ pcm = pcm[max(encoded_length - stream_length - i, 0) * pcm_size:
+ min(encoded_length - i, frame_length) * pcm_size]
+
+ wavfile.writeframesraw(pcm)
+
+# --- Cleanup ---
+
+wavfile.close()
+
+for f in (f_lc3, f_wav):
+ if f is not sys.stdout.buffer:
+ f.close()
diff --git a/python/tools/encoder.py b/python/tools/encoder.py
new file mode 100755
index 0000000..9f291ff
--- /dev/null
+++ b/python/tools/encoder.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python3
+#
+# Copyright 2024 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+import argparse
+import lc3
+import struct
+import sys
+import wave
+
+parser = argparse.ArgumentParser(description='LC3 Encoder')
+
+parser.add_argument(
+ 'wav_file', nargs='?',
+ help='Input wave file, default is stdin',
+ type=argparse.FileType('rb'), default=sys.stdin.buffer)
+
+parser.add_argument(
+ 'lc3_file', nargs='?',
+ help='Output bitstream file, default is stdout',
+ type=argparse.FileType('wb'), default=sys.stdout.buffer)
+
+parser.add_argument(
+ '--bitrate', help='Bitrate in bps', type=int, required=True)
+
+parser.add_argument(
+ '--frame_duration', help='Frame duration in ms', type=float, default=10)
+
+parser.add_argument(
+ '--libpath', help='LC3 Library path')
+
+args = parser.parse_args()
+
+# --- WAV File input ---
+
+f_wav = args.wav_file
+wavfile = wave.open(f_wav, 'rb')
+
+samplerate = wavfile.getframerate()
+nchannels = wavfile.getnchannels()
+bitdepth = wavfile.getsampwidth() * 8
+stream_length = wavfile.getnframes()
+
+# --- Setup encoder ---
+
+enc = lc3.Encoder(
+ args.frame_duration, samplerate, nchannels, libpath=args.libpath)
+frame_size = enc.get_frame_bytes(args.bitrate)
+frame_length = enc.get_frame_samples()
+bitrate = enc.resolve_bitrate(frame_size)
+
+# --- Setup output ---
+
+f_lc3 = args.lc3_file
+f_lc3.write(struct.pack(
+ '=HHHHHHHI', 0xcc1c, 18,
+ samplerate // 100, bitrate // 100, nchannels,
+ int(args.frame_duration * 100), 0, stream_length))
+
+# --- Encoding loop ---
+
+for i in range(0, stream_length, frame_length):
+
+ f_lc3.write(struct.pack('=H', frame_size))
+
+ pcm = wavfile.readframes(frame_length)
+ f_lc3.write(enc.encode(pcm, frame_size, bitdepth=bitdepth))
+
+# --- Cleanup ---
+
+wavfile.close()
+
+for f in (f_wav, f_lc3):
+ if f is not sys.stdout.buffer:
+ f.close()
diff --git a/python/tools/specgram.py b/python/tools/specgram.py
new file mode 100755
index 0000000..42781d4
--- /dev/null
+++ b/python/tools/specgram.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python3
+#
+# Copyright 2024 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+import argparse
+import lc3
+import matplotlib
+import matplotlib.pyplot as plt
+import numpy as np
+import scipy.signal as signal
+
+matplotlib.use('QtAgg')
+
+parser = argparse.ArgumentParser(description='LC3 Encoder')
+
+parser.add_argument(
+ '--frame_duration', help='Frame duration (ms)', type=float, default=10)
+
+parser.add_argument(
+ '--sample_rate', help='Sampling frequency (Hz)', type=float, default=48000)
+
+parser.add_argument(
+ '--hrmode', help='Enable high-resolution mode', action='store_true')
+
+parser.add_argument(
+ '--bitrate', help='Bitrate (bps)', type=int, default=96000)
+
+parser.add_argument(
+ '--libpath', help='LC3 Library path')
+
+args = parser.parse_args()
+
+# --- Setup encoder + decoder ---
+
+fs = args.sample_rate
+
+enc = lc3.Encoder(
+ args.frame_duration, fs, hrmode=args.hrmode, libpath=args.libpath)
+dec = lc3.Decoder(
+ args.frame_duration, fs, hrmode=args.hrmode, libpath=args.libpath)
+
+frame_len = enc.get_frame_samples()
+delay_len = enc.get_delay_samples()
+
+# --- Generate 10 seconds chirp ---
+
+n = 10 * int(fs)
+t = np.arange(n - (n % frame_len)) / fs
+s = signal.chirp(t, f0=10, f1=fs/2, t1=t[-1], phi=-90, method='linear')
+
+# --- Encoding / decoding loop ---
+
+frame_size = enc.get_frame_bytes(args.bitrate)
+bitrate = enc.resolve_bitrate(frame_size)
+
+y = np.empty(len(s) + frame_len)
+
+for i in range(0, len(s), frame_len):
+ y[i:i+frame_len] = dec.decode(enc.encode(s[i:i+frame_len], frame_size))
+
+y[len(s):] = dec.decode(enc.encode(np.zeros(frame_len), frame_size))
+y = y[delay_len:len(s)+delay_len]
+
+# --- Plot spectrograms ---
+
+fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
+
+NFFT = 512
+for (ax, s) in [(ax1, s), (ax2, y)]:
+ ax.specgram(s, Fs=fs, NFFT=NFFT, pad_to=4*NFFT, noverlap=NFFT//2,
+ vmin=-160, vmax=0)
+
+ax1.set_title('Input signal')
+ax1.set_ylabel('Frequency (Hz)')
+
+ax2.set_title(('Processed signal (%.1f kbps)' % (bitrate/1000)))
+ax2.set_ylabel('Frequency (Hz)')
+
+plt.show()
diff --git a/src/attdet.c b/src/attdet.c
index 3d1528d..b498ef9 100644
--- a/src/attdet.c
+++ b/src/attdet.c
@@ -27,14 +27,14 @@ bool lc3_attdet_run(enum lc3_dt dt, enum lc3_srate sr,
{
/* --- Check enabling --- */
- const int nbytes_ranges[LC3_NUM_DT][LC3_NUM_SRATE - LC3_SRATE_32K][2] = {
- [LC3_DT_7M5] = { { 61, 149 }, { 75, 149 } },
- [LC3_DT_10M] = { { 81, INT_MAX }, { 100, INT_MAX } },
+ const int nbytes_ranges[][LC3_NUM_SRATE - LC3_SRATE_32K][2] = {
+ [LC3_DT_7M5 - LC3_DT_7M5] = { { 61, 149 }, { 75, 149 } },
+ [LC3_DT_10M - LC3_DT_7M5] = { { 81, INT_MAX }, { 100, INT_MAX } },
};
- if (sr < LC3_SRATE_32K ||
- nbytes < nbytes_ranges[dt][sr - LC3_SRATE_32K][0] ||
- nbytes > nbytes_ranges[dt][sr - LC3_SRATE_32K][1] )
+ if (dt < LC3_DT_7M5 || sr < LC3_SRATE_32K || lc3_hr(sr) ||
+ nbytes < nbytes_ranges[dt - LC3_DT_7M5][sr - LC3_SRATE_32K][0] ||
+ nbytes > nbytes_ranges[dt - LC3_DT_7M5][sr - LC3_SRATE_32K][1] )
return 0;
/* --- Filtering & Energy calculation --- */
diff --git a/src/attdet.h b/src/attdet.h
index 14073bd..4d4ee17 100644
--- a/src/attdet.h
+++ b/src/attdet.h
@@ -16,13 +16,6 @@
*
******************************************************************************/
-/**
- * LC3 - Time domain attack detector
- *
- * Reference : Low Complexity Communication Codec (LC3)
- * Bluetooth Specification v1.0
- */
-
#ifndef __LC3_ATTDET_H
#define __LC3_ATTDET_H
diff --git a/src/bits.h b/src/bits.h
index 5dd56cd..de65c93 100644
--- a/src/bits.h
+++ b/src/bits.h
@@ -17,8 +17,6 @@
******************************************************************************/
/**
- * LC3 - Bitstream management
- *
* The bitstream is written by the 2 ends of the buffer :
*
* - Arthmetic coder put bits while increasing memory addresses
@@ -56,10 +54,6 @@
* - The procedure `lc3_check_bits()` returns indication that read has been
* made crossing the other bit plane.
*
- *
- * Reference : Low Complexity Communication Codec (LC3)
- * Bluetooth Specification v1.0
- *
*/
#ifndef __LC3_BITS_H
diff --git a/src/bwdet.c b/src/bwdet.c
index 8dc0f5c..0c48939 100644
--- a/src/bwdet.c
+++ b/src/bwdet.c
@@ -25,29 +25,52 @@
enum lc3_bandwidth lc3_bwdet_run(
enum lc3_dt dt, enum lc3_srate sr, const float *e)
{
- /* Bandwidth regions (Table 3.6) */
+ /* Bandwidth regions */
struct region { int is : 8; int ie : 8; };
- static const struct region bws_table[LC3_NUM_DT]
- [LC3_NUM_BANDWIDTH-1][LC3_NUM_BANDWIDTH-1] = {
-
- [LC3_DT_7M5] = {
- { { 51, 63+1 } },
- { { 45, 55+1 }, { 58, 63+1 } },
- { { 42, 51+1 }, { 53, 58+1 }, { 60, 63+1 } },
- { { 40, 48+1 }, { 51, 55+1 }, { 57, 60+1 }, { 61, 63+1 } },
- },
-
- [LC3_DT_10M] = {
- { { 53, 63+1 } },
- { { 47, 56+1 }, { 59, 63+1 } },
- { { 44, 52+1 }, { 54, 59+1 }, { 60, 63+1 } },
- { { 41, 49+1 }, { 51, 55+1 }, { 57, 60+1 }, { 61, 63+1 } },
- },
+#if LC3_PLUS
+
+ static const struct region bws_table_2m5[][LC3_BANDWIDTH_SWB+1] = {
+ { { 24, 34+1 } },
+ { { 24, 32+1 }, { 35, 39+1 } },
+ { { 24, 31+1 }, { 33, 38+1 }, { 39, 42+1 } },
+ { { 22, 29+1 }, { 31, 35+1 }, { 37, 40+1 }, { 41, 43+1 } },
+ };
+
+ static const struct region bws_table_5m[][LC3_BANDWIDTH_SWB+1] = {
+ { { 39, 49+1 } },
+ { { 35, 44+1 }, { 47, 51+1 } },
+ { { 34, 42+1 }, { 44, 49+1 }, { 50, 53+1 } },
+ { { 32, 40+1 }, { 42, 46+1 }, { 48, 51+1 }, { 52, 54+1 } },
+ };
+
+#endif /* LC3_PLUS */
+
+ static const struct region bws_table_7m5[][LC3_BANDWIDTH_SWB+1] = {
+ { { 51, 63+1 } },
+ { { 45, 55+1 }, { 58, 63+1 } },
+ { { 42, 51+1 }, { 53, 58+1 }, { 60, 63+1 } },
+ { { 40, 48+1 }, { 51, 55+1 }, { 57, 60+1 }, { 61, 63+1 } },
};
- static const int l_table[LC3_NUM_DT][LC3_NUM_BANDWIDTH-1] = {
+ static const struct region bws_table_10m[][LC3_BANDWIDTH_SWB+1] = {
+ { { 53, 63+1 } },
+ { { 47, 56+1 }, { 59, 63+1 } },
+ { { 44, 52+1 }, { 54, 59+1 }, { 60, 63+1 } },
+ { { 41, 49+1 }, { 51, 55+1 }, { 57, 60+1 }, { 61, 63+1 } },
+ };
+
+ static const struct region (*bws_table[])[LC3_BANDWIDTH_SWB+1] = {
+ [LC3_DT_2M5] = LC3_IF_PLUS(bws_table_2m5, NULL),
+ [LC3_DT_5M ] = LC3_IF_PLUS(bws_table_5m , NULL),
+ [LC3_DT_7M5] = bws_table_7m5,
+ [LC3_DT_10M] = bws_table_10m,
+ };
+
+ static const int l_table[LC3_NUM_DT][LC3_BANDWIDTH_SWB+1] = {
+ [LC3_DT_2M5] = { 4, 4, 3, 1 },
+ [LC3_DT_5M ] = { 4, 4, 3, 1 },
[LC3_DT_7M5] = { 4, 4, 3, 2 },
[LC3_DT_10M] = { 4, 4, 3, 1 },
};
@@ -58,7 +81,7 @@ enum lc3_bandwidth lc3_bwdet_run(
enum lc3_bandwidth bw0 = LC3_BANDWIDTH_NB;
enum lc3_bandwidth bwn = (enum lc3_bandwidth)sr;
- if (bwn <= bw0)
+ if (bwn <= bw0 || lc3_hr(sr))
return bwn;
const struct region *bwr = bws_table[dt][bwn-1];
@@ -101,7 +124,7 @@ enum lc3_bandwidth lc3_bwdet_run(
*/
int lc3_bwdet_get_nbits(enum lc3_srate sr)
{
- return (sr > 0) + (sr > 1) + (sr > 3);
+ return lc3_hr(sr) ? 0 : (sr > 0) + (sr > 1) + (sr > 3);
}
/**
@@ -124,6 +147,8 @@ int lc3_bwdet_get_bw(lc3_bits_t *bits,
enum lc3_bandwidth max_bw = (enum lc3_bandwidth)sr;
int nbits_bw = lc3_bwdet_get_nbits(sr);
- *bw = nbits_bw > 0 ? lc3_get_bits(bits, nbits_bw) : LC3_BANDWIDTH_NB;
+ *bw = nbits_bw <= 0 ? max_bw :
+ (enum lc3_bandwidth)lc3_get_bits(bits, nbits_bw);
+
return *bw > max_bw ? (*bw = max_bw), -1 : 0;
}
diff --git a/src/bwdet.h b/src/bwdet.h
index 19039c7..773e6bb 100644
--- a/src/bwdet.h
+++ b/src/bwdet.h
@@ -16,13 +16,6 @@
*
******************************************************************************/
-/**
- * LC3 - Bandwidth detector
- *
- * Reference : Low Complexity Communication Codec (LC3)
- * Bluetooth Specification v1.0
- */
-
#ifndef __LC3_BWDET_H
#define __LC3_BWDET_H
@@ -31,7 +24,7 @@
/**
- * Bandwidth detector (cf. 3.3.5)
+ * Bandwidth detector
* dt, sr Duration and samplerate of the frame
* e Energy estimation per bands
* return Return detected bandwitdth
diff --git a/src/common.h b/src/common.h
index d60ad9e..2b23a8d 100644
--- a/src/common.h
+++ b/src/common.h
@@ -16,18 +16,14 @@
*
******************************************************************************/
-/**
- * LC3 - Common constants and types
- */
-
#ifndef __LC3_COMMON_H
#define __LC3_COMMON_H
#include <lc3.h>
#include "fastmath.h"
-#include <stdalign.h>
#include <limits.h>
+#include <stdalign.h>
#include <string.h>
#ifdef __ARM_ARCH
@@ -36,6 +32,31 @@
/**
+ * Acivation flags for LC3-Plus and LC3-Plus HR features
+ */
+
+#ifndef LC3_PLUS
+#define LC3_PLUS 1
+#endif
+
+#ifndef LC3_PLUS_HR
+#define LC3_PLUS_HR 1
+#endif
+
+#if LC3_PLUS
+#define LC3_IF_PLUS(a, b) (a)
+#else
+#define LC3_IF_PLUS(a, b) (b)
+#endif
+
+#if LC3_PLUS_HR
+#define LC3_IF_PLUS_HR(a, b) (a)
+#else
+#define LC3_IF_PLUS_HR(a, b) (b)
+#endif
+
+
+/**
* Hot Function attribute
* Selectively disable sanitizer
*/
@@ -83,44 +104,11 @@
/**
- * Convert `dt` in us and `sr` in KHz
+ * Return `true` when high-resolution mode
*/
-
-#define LC3_DT_US(dt) \
- ( (3 + (dt)) * 2500 )
-
-#define LC3_SRATE_KHZ(sr) \
- ( (1 + (sr) + ((sr) == LC3_SRATE_48K)) * 8 )
-
-
-/**
- * Return number of samples, delayed samples and
- * encoded spectrum coefficients within a frame
- * - For encoding, keep 1.25 ms for temporal window
- * - For decoding, keep 18 ms of history, aligned on frames, and a frame
- */
-
-#define LC3_NS(dt, sr) \
- ( 20 * (3 + (dt)) * (1 + (sr) + ((sr) == LC3_SRATE_48K)) )
-
-#define LC3_ND(dt, sr) \
- ( (dt) == LC3_DT_7M5 ? 23 * LC3_NS(dt, sr) / 30 \
- : 5 * LC3_NS(dt, sr) / 8 )
-
-#define LC3_NE(dt, sr) \
- ( 20 * (3 + (dt)) * (1 + (sr)) )
-
-#define LC3_MAX_NS \
- LC3_NS(LC3_DT_10M, LC3_SRATE_48K)
-
-#define LC3_MAX_NE \
- LC3_NE(LC3_DT_10M, LC3_SRATE_48K)
-
-#define LC3_NT(sr_hz) \
- ( (5 * LC3_SRATE_KHZ(sr)) / 4 )
-
-#define LC3_NH(dt, sr) \
- ( ((3 - dt) + 1) * LC3_NS(dt, sr) )
+static inline bool lc3_hr(enum lc3_srate sr) {
+ return LC3_PLUS_HR && (sr >= LC3_SRATE_48K_HR);
+}
/**
@@ -134,6 +122,9 @@ enum lc3_bandwidth {
LC3_BANDWIDTH_SWB = LC3_SRATE_32K,
LC3_BANDWIDTH_FB = LC3_SRATE_48K,
+ LC3_BANDWIDTH_FB_HR = LC3_SRATE_48K_HR,
+ LC3_BANDWIDTH_UB_HR = LC3_SRATE_96K_HR,
+
LC3_NUM_BANDWIDTH,
};
diff --git a/src/energy.c b/src/energy.c
index bf86db7..ffa3f78 100644
--- a/src/energy.c
+++ b/src/energy.c
@@ -26,30 +26,17 @@
bool lc3_energy_compute(
enum lc3_dt dt, enum lc3_srate sr, const float *x, float *e)
{
- static const int n1_table[LC3_NUM_DT][LC3_NUM_SRATE] = {
- [LC3_DT_7M5] = { 56, 34, 27, 24, 22 },
- [LC3_DT_10M] = { 49, 28, 23, 20, 18 },
- };
+ int nb = lc3_num_bands[dt][sr];
+ const int *lim = lc3_band_lim[dt][sr];
- /* First bands are 1 coefficient width */
+ /* Mean the square of coefficients within each band */
- int n1 = n1_table[dt][sr];
float e_sum[2] = { 0, 0 };
- int iband;
-
- for (iband = 0; iband < n1; iband++) {
- *e = x[iband] * x[iband];
- e_sum[0] += *(e++);
- }
-
- /* Mean the square of coefficients within each band,
- * note that 7.5ms 8KHz frame has more bands than samples */
+ int iband_h = nb - (const int []){
+ [LC3_DT_2M5] = 2, [LC3_DT_5M ] = 3,
+ [LC3_DT_7M5] = 4, [LC3_DT_10M] = 2 }[dt];
- int nb = LC3_MIN(LC3_NUM_BANDS, LC3_NS(dt, sr));
- int iband_h = nb - 2*(2 - dt);
- const int *lim = lc3_band_lim[dt][sr];
-
- for (int i = lim[iband]; iband < nb; iband++) {
+ for (int iband = 0, i = lim[iband]; iband < nb; iband++) {
int ie = lim[iband+1];
int n = ie - i;
@@ -61,9 +48,6 @@ bool lc3_energy_compute(
e_sum[iband >= iband_h] += *(e++);
}
- for (; iband < LC3_NUM_BANDS; iband++)
- *(e++) = 0;
-
/* Return the near nyquist flag */
return e_sum[1] > 30 * e_sum[0];
diff --git a/src/energy.h b/src/energy.h
index 39f0124..8ebd726 100644
--- a/src/energy.h
+++ b/src/energy.h
@@ -16,13 +16,6 @@
*
******************************************************************************/
-/**
- * LC3 - Energy estimation per band
- *
- * Reference : Low Complexity Communication Codec (LC3)
- * Bluetooth Specification v1.0
- */
-
#ifndef __LC3_ENERGY_H
#define __LC3_ENERGY_H
diff --git a/src/fastmath.h b/src/fastmath.h
index 4210f2e..221d69f 100644
--- a/src/fastmath.h
+++ b/src/fastmath.h
@@ -16,10 +16,6 @@
*
******************************************************************************/
-/**
- * LC3 - Mathematics function approximation
- */
-
#ifndef __LC3_FASTMATH_H
#define __LC3_FASTMATH_H
@@ -28,34 +24,98 @@
/**
+ * IEEE 754 Floating point representation
+ */
+
+#define LC3_IEEE754_SIGN_SHL (31)
+#define LC3_IEEE754_SIGN_MASK (1 << LC3_IEEE754_SIGN_SHL)
+
+#define LC3_IEEE754_EXP_SHL (23)
+#define LC3_IEEE754_EXP_MASK (0xff << LC3_IEEE754_EXP_SHL)
+#define LC3_IEEE754_EXP_BIAS (127)
+
+
+/**
+ * Fast multiply floating-point number by integral power of 2
+ * x Operand, finite number
+ * exp Exponent such that 2^x is finite
+ * return 2^exp
+ */
+static inline float lc3_ldexpf(float _x, int exp) {
+ union { float f; uint32_t u; } x = { .f = _x };
+
+ if (x.u & LC3_IEEE754_EXP_MASK)
+ x.u += exp << LC3_IEEE754_EXP_SHL;
+
+ return x.f;
+}
+
+/**
+ * Fast convert floating-point number to fractional and integral components
+ * x Operand, finite number
+ * exp Return the exponent part
+ * return The normalized fraction in [0.5:1[
+ */
+static inline float lc3_frexpf(float _x, int *exp) {
+ union { float f; uint32_t u; } x = { .f = _x };
+
+ int e = (x.u & LC3_IEEE754_EXP_MASK) >> LC3_IEEE754_EXP_SHL;
+ *exp = e - (LC3_IEEE754_EXP_BIAS - 1);
+
+ x.u = (x.u & ~LC3_IEEE754_EXP_MASK) |
+ ((LC3_IEEE754_EXP_BIAS - 1) << LC3_IEEE754_EXP_SHL);
+
+ return x.f;
+}
+
+/**
* Fast 2^n approximation
- * x Operand, range -8 to 8
- * return 2^x approximation (max relative error ~ 7e-6)
+ * x Operand, range -100 to 100
+ * return 2^x approximation (max relative error ~ 4e-7)
*/
-static inline float fast_exp2f(float x)
+static inline float lc3_exp2f(float x)
{
- float y;
+ /* --- 2^(i/8) for i from 0 to 7 --- */
- /* --- Polynomial approx in range -0.5 to 0.5 --- */
+ static const float e[] = {
+ 1.00000000e+00, 1.09050773e+00, 1.18920712e+00, 1.29683955e+00,
+ 1.41421356e+00, 1.54221083e+00, 1.68179283e+00, 1.83400809e+00 };
- static const float c[] = { 1.27191277e-09, 1.47415221e-07,
- 1.35510312e-05, 9.38375815e-04, 4.33216946e-02 };
+ /* --- Polynomial approx in range 0 to 1/8 --- */
- y = ( c[0]) * x;
- y = (y + c[1]) * x;
- y = (y + c[2]) * x;
- y = (y + c[3]) * x;
- y = (y + c[4]) * x;
- y = (y + 1.f);
+ static const float p[] = {
+ 1.00448128e-02, 5.54563260e-02, 2.40228756e-01, 6.93147140e-01 };
+
+ /* --- Split the operand ---
+ *
+ * Such as x = k/8 + y, with k an integer, and |y| < 0.5/8
+ *
+ * Note that `fast-math` compiler option leads to rounding error,
+ * disable optimisation with `volatile`. */
+
+ volatile union { float f; int32_t s; } v;
+
+ v.f = x + 0x1.8p20f;
+ int k = v.s;
+ x -= v.f - 0x1.8p20f;
+
+ /* --- Compute 2^x, with |x| < 1 ---
+ * Perform polynomial approximation in range -0.5/8 to 0.5/8,
+ * and muplity by precomputed value of 2^(i/8), i in [0:7] */
+
+ union { float f; int32_t s; } y;
+
+ y.f = ( p[0]) * x;
+ y.f = (y.f + p[1]) * x;
+ y.f = (y.f + p[2]) * x;
+ y.f = (y.f + p[3]) * x;
+ y.f = (y.f + 1.f) * e[k & 7];
- /* --- Raise to the power of 16 --- */
+ /* --- Add the exponent --- */
- y = y*y;
- y = y*y;
- y = y*y;
- y = y*y;
+ y.s += (k >> 3) << LC3_IEEE754_EXP_SHL;
- return y;
+ return y.f;
}
/**
@@ -63,7 +123,7 @@ static inline float fast_exp2f(float x)
* x Operand, greater than 0
* return log2(x) approximation (max absolute error ~ 1e-4)
*/
-static inline float fast_log2f(float x)
+static inline float lc3_log2f(float x)
{
float y;
int e;
@@ -73,7 +133,7 @@ static inline float fast_log2f(float x)
static const float c[] = {
-1.29479677, 5.11769018, -8.42295281, 8.10557963, -3.50567360 };
- x = frexpf(x, &e);
+ x = lc3_frexpf(x, &e);
y = ( c[0]) * x;
y = (y + c[1]) * x;
@@ -91,9 +151,9 @@ static inline float fast_log2f(float x)
* x Operand, greater than 0
* return log10(x) approximation (max absolute error ~ 1e-4)
*/
-static inline float fast_log10f(float x)
+static inline float lc3_log10f(float x)
{
- return log10f(2) * fast_log2f(x);
+ return log10f(2) * lc3_log2f(x);
}
/**
@@ -104,7 +164,7 @@ static inline float fast_log10f(float x)
* - The 0 value is accepted and return the minimum value ~ -191dB
* - This function assumed that float 32 bits is coded IEEE 754
*/
-static inline int32_t fast_db_q16(float x)
+static inline int32_t lc3_db_q16(float x)
{
/* --- Table in Q15 --- */
diff --git a/src/lc3.c b/src/lc3.c
index 6f54300..ac4427a 100644
--- a/src/lc3.c
+++ b/src/lc3.c
@@ -53,90 +53,128 @@ struct side_data {
/**
* Resolve frame duration in us
* us Frame duration in us
+ * hrmode High-resolution mode indication
* return Frame duration identifier, or LC3_NUM_DT
*/
-static enum lc3_dt resolve_dt(int us)
+static enum lc3_dt resolve_dt(int us, bool hrmode)
{
- return us == 7500 ? LC3_DT_7M5 :
- us == 10000 ? LC3_DT_10M : LC3_NUM_DT;
+ return LC3_PLUS && us == 2500 ? LC3_DT_2M5 :
+ LC3_PLUS && us == 5000 ? LC3_DT_5M :
+ !hrmode && us == 7500 ? LC3_DT_7M5 :
+ us == 10000 ? LC3_DT_10M : LC3_NUM_DT;
}
/**
* Resolve samplerate in Hz
* hz Samplerate in Hz
+ * hrmode High-resolution mode indication
* return Sample rate identifier, or LC3_NUM_SRATE
*/
-static enum lc3_srate resolve_sr(int hz)
+static enum lc3_srate resolve_srate(int hz, bool hrmode)
{
- return hz == 8000 ? LC3_SRATE_8K : hz == 16000 ? LC3_SRATE_16K :
- hz == 24000 ? LC3_SRATE_24K : hz == 32000 ? LC3_SRATE_32K :
- hz == 48000 ? LC3_SRATE_48K : LC3_NUM_SRATE;
+ hrmode = LC3_PLUS_HR && hrmode;
+
+ return !hrmode && hz == 8000 ? LC3_SRATE_8K :
+ !hrmode && hz == 16000 ? LC3_SRATE_16K :
+ !hrmode && hz == 24000 ? LC3_SRATE_24K :
+ !hrmode && hz == 32000 ? LC3_SRATE_32K :
+ !hrmode && hz == 48000 ? LC3_SRATE_48K :
+ hrmode && hz == 48000 ? LC3_SRATE_48K_HR :
+ hrmode && hz == 96000 ? LC3_SRATE_96K_HR : LC3_NUM_SRATE;
}
/**
* Return the number of PCM samples in a frame
*/
-int lc3_frame_samples(int dt_us, int sr_hz)
+LC3_EXPORT int lc3_hr_frame_samples(bool hrmode, int dt_us, int sr_hz)
{
- enum lc3_dt dt = resolve_dt(dt_us);
- enum lc3_srate sr = resolve_sr(sr_hz);
+ enum lc3_dt dt = resolve_dt(dt_us, hrmode);
+ enum lc3_srate sr = resolve_srate(sr_hz, hrmode);
if (dt >= LC3_NUM_DT || sr >= LC3_NUM_SRATE)
return -1;
- return LC3_NS(dt, sr);
+ return lc3_ns(dt, sr);
+}
+
+LC3_EXPORT int lc3_frame_samples(int dt_us, int sr_hz)
+{
+ return lc3_hr_frame_samples(false, dt_us, sr_hz);
}
/**
- * Return the size of frames, from bitrate
+ * Return the size of frames or frame blocks, from bitrate
*/
-int lc3_frame_bytes(int dt_us, int bitrate)
+LC3_EXPORT int lc3_hr_frame_block_bytes(
+ bool hrmode, int dt_us, int sr_hz, int nchannels, int bitrate)
{
- if (resolve_dt(dt_us) >= LC3_NUM_DT)
+ enum lc3_dt dt = resolve_dt(dt_us, hrmode);
+ enum lc3_srate sr = resolve_srate(sr_hz, hrmode);
+
+ if (dt >= LC3_NUM_DT || sr >= LC3_NUM_SRATE
+ || nchannels < 1 || nchannels > 8 || bitrate < 0)
return -1;
- if (bitrate < LC3_MIN_BITRATE)
- return LC3_MIN_FRAME_BYTES;
+ bitrate = LC3_CLIP(bitrate, 0, 8*LC3_HR_MAX_BITRATE);
+
+ return LC3_CLIP((bitrate * (int)(1 + dt)) / 3200,
+ nchannels * lc3_min_frame_bytes(dt, sr),
+ nchannels * lc3_max_frame_bytes(dt, sr) );
+}
- if (bitrate > LC3_MAX_BITRATE)
- return LC3_MAX_FRAME_BYTES;
+LC3_EXPORT int lc3_frame_bock_bytes(int dt_us, int nchannels, int bitrate)
+{
+ return lc3_hr_frame_block_bytes(false, dt_us, 8000, nchannels, bitrate);
+}
- int nbytes = ((unsigned)bitrate * dt_us) / (1000*1000*8);
+LC3_EXPORT int lc3_hr_frame_bytes(
+ bool hrmode, int dt_us, int sr_hz, int bitrate)
+{
+ return lc3_hr_frame_block_bytes(hrmode, dt_us, sr_hz, 1, bitrate);
+}
- return LC3_CLIP(nbytes, LC3_MIN_FRAME_BYTES, LC3_MAX_FRAME_BYTES);
+LC3_EXPORT int lc3_frame_bytes(int dt_us, int bitrate)
+{
+ return lc3_hr_frame_bytes(false, dt_us, 8000, bitrate);
}
/**
- * Resolve the bitrate, from the size of frames
+ * Resolve the bitrate, from the size of frames or frame blocks
*/
-int lc3_resolve_bitrate(int dt_us, int nbytes)
+LC3_EXPORT int lc3_hr_resolve_bitrate(
+ bool hrmode, int dt_us, int sr_hz, int nbytes)
{
- if (resolve_dt(dt_us) >= LC3_NUM_DT)
- return -1;
-
- if (nbytes < LC3_MIN_FRAME_BYTES)
- return LC3_MIN_BITRATE;
+ enum lc3_dt dt = resolve_dt(dt_us, hrmode);
+ enum lc3_srate sr = resolve_srate(sr_hz, hrmode);
- if (nbytes > LC3_MAX_FRAME_BYTES)
- return LC3_MAX_BITRATE;
+ if (dt >= LC3_NUM_DT || sr >= LC3_NUM_SRATE || nbytes < 0)
+ return -1;
- int bitrate = ((unsigned)nbytes * (1000*1000*8) + dt_us/2) / dt_us;
+ return LC3_MIN(((int64_t)nbytes * 3200 + dt) / (1 + dt), INT_MAX);
+}
- return LC3_CLIP(bitrate, LC3_MIN_BITRATE, LC3_MAX_BITRATE);
+LC3_EXPORT int lc3_resolve_bitrate(int dt_us, int nbytes)
+{
+ return lc3_hr_resolve_bitrate(false, dt_us, 8000, nbytes);
}
/**
* Return algorithmic delay, as a number of samples
*/
-int lc3_delay_samples(int dt_us, int sr_hz)
+LC3_EXPORT int lc3_hr_delay_samples(bool hrmode, int dt_us, int sr_hz)
{
- enum lc3_dt dt = resolve_dt(dt_us);
- enum lc3_srate sr = resolve_sr(sr_hz);
+ enum lc3_dt dt = resolve_dt(dt_us, hrmode);
+ enum lc3_srate sr = resolve_srate(sr_hz, hrmode);
if (dt >= LC3_NUM_DT || sr >= LC3_NUM_SRATE)
return -1;
- return (dt == LC3_DT_7M5 ? 8 : 5) * (LC3_SRATE_KHZ(sr) / 2);
+ return 2 * lc3_nd(dt, sr) - lc3_ns(dt, sr);
+}
+
+LC3_EXPORT int lc3_delay_samples(int dt_us, int sr_hz)
+{
+ return lc3_hr_delay_samples(false, dt_us, sr_hz);
}
@@ -159,7 +197,7 @@ static void load_s16(
int16_t *xt = (int16_t *)encoder->x + encoder->xt_off;
float *xs = encoder->x + encoder->xs_off;
- int ns = LC3_NS(dt, sr);
+ int ns = lc3_ns(dt, sr);
for (int i = 0; i < ns; i++, pcm += stride)
xt[i] = *pcm, xs[i] = *pcm;
@@ -180,11 +218,11 @@ static void load_s24(
int16_t *xt = (int16_t *)encoder->x + encoder->xt_off;
float *xs = encoder->x + encoder->xs_off;
- int ns = LC3_NS(dt, sr);
+ int ns = lc3_ns(dt, sr);
for (int i = 0; i < ns; i++, pcm += stride) {
xt[i] = *pcm >> 8;
- xs[i] = ldexpf(*pcm, -8);
+ xs[i] = lc3_ldexpf(*pcm, -8);
}
}
@@ -203,7 +241,7 @@ static void load_s24_3le(
int16_t *xt = (int16_t *)encoder->x + encoder->xt_off;
float *xs = encoder->x + encoder->xs_off;
- int ns = LC3_NS(dt, sr);
+ int ns = lc3_ns(dt, sr);
for (int i = 0; i < ns; i++, pcm += 3*stride) {
int32_t in = ((uint32_t)pcm[0] << 8) |
@@ -211,7 +249,7 @@ static void load_s24_3le(
((uint32_t)pcm[2] << 24) ;
xt[i] = in >> 16;
- xs[i] = ldexpf(in, -16);
+ xs[i] = lc3_ldexpf(in, -16);
}
}
@@ -230,10 +268,10 @@ static void load_float(
int16_t *xt = (int16_t *)encoder->x + encoder->xt_off;
float *xs = encoder->x + encoder->xs_off;
- int ns = LC3_NS(dt, sr);
+ int ns = lc3_ns(dt, sr);
for (int i = 0; i < ns; i++, pcm += stride) {
- xs[i] = ldexpf(*pcm, 15);
+ xs[i] = lc3_ldexpf(*pcm, 15);
xt[i] = LC3_SAT16((int32_t)xs[i]);
}
}
@@ -242,19 +280,20 @@ static void load_float(
* Frame Analysis
* encoder Encoder state
* nbytes Size in bytes of the frame
- * side, xq Return frame data
+ * side Return frame data
*/
static void analyze(struct lc3_encoder *encoder,
- int nbytes, struct side_data *side, uint16_t *xq)
+ int nbytes, struct side_data *side)
{
enum lc3_dt dt = encoder->dt;
enum lc3_srate sr = encoder->sr;
enum lc3_srate sr_pcm = encoder->sr_pcm;
- int ns = LC3_NS(dt, sr_pcm);
- int nt = LC3_NT(sr_pcm);
int16_t *xt = (int16_t *)encoder->x + encoder->xt_off;
float *xs = encoder->x + encoder->xs_off;
+ int ns = lc3_ns(dt, sr_pcm);
+ int nt = lc3_nt(sr_pcm);
+
float *xd = encoder->x + encoder->xd_off;
float *xf = xs;
@@ -269,7 +308,7 @@ static void analyze(struct lc3_encoder *encoder,
/* --- Spectral --- */
- float e[LC3_NUM_BANDS];
+ float e[LC3_MAX_BANDS];
lc3_mdct_forward(dt, sr_pcm, sr, xs, xd, xf);
@@ -279,29 +318,30 @@ static void analyze(struct lc3_encoder *encoder,
side->bw = lc3_bwdet_run(dt, sr, e);
- lc3_sns_analyze(dt, sr, e, att, &side->sns, xf, xf);
+ lc3_sns_analyze(dt, sr, nbytes, e, att, &side->sns, xf, xf);
lc3_tns_analyze(dt, side->bw, nn_flag, nbytes, &side->tns, xf);
lc3_spec_analyze(dt, sr,
nbytes, side->pitch_present, &side->tns,
- &encoder->spec, xf, xq, &side->spec);
+ &encoder->spec, xf, &side->spec);
}
/**
* Encode bitstream
* encoder Encoder state
- * side, xq The frame data
+ * side The frame data
* nbytes Target size of the frame (20 to 400)
* buffer Output bitstream buffer of `nbytes` size
*/
static void encode(struct lc3_encoder *encoder,
- const struct side_data *side, uint16_t *xq, int nbytes, void *buffer)
+ const struct side_data *side, int nbytes, void *buffer)
{
enum lc3_dt dt = encoder->dt;
enum lc3_srate sr = encoder->sr;
- enum lc3_bandwidth bw = side->bw;
+
float *xf = encoder->x + encoder->xs_off;
+ enum lc3_bandwidth bw = side->bw;
lc3_bits_t bits;
@@ -320,8 +360,7 @@ static void encode(struct lc3_encoder *encoder,
if (side->pitch_present)
lc3_ltpf_put_data(&bits, &side->ltpf);
- lc3_spec_encode(&bits,
- dt, sr, bw, nbytes, xq, &side->spec, xf);
+ lc3_spec_encode(&bits, dt, sr, bw, nbytes, &side->spec, xf);
lc3_flush_bits(&bits);
}
@@ -329,35 +368,40 @@ static void encode(struct lc3_encoder *encoder,
/**
* Return size needed for an encoder
*/
-unsigned lc3_encoder_size(int dt_us, int sr_hz)
+LC3_EXPORT unsigned lc3_hr_encoder_size(bool hrmode, int dt_us, int sr_hz)
{
- if (resolve_dt(dt_us) >= LC3_NUM_DT ||
- resolve_sr(sr_hz) >= LC3_NUM_SRATE)
+ if (resolve_dt(dt_us, hrmode) >= LC3_NUM_DT ||
+ resolve_srate(sr_hz, hrmode) >= LC3_NUM_SRATE)
return 0;
return sizeof(struct lc3_encoder) +
(LC3_ENCODER_BUFFER_COUNT(dt_us, sr_hz)-1) * sizeof(float);
}
+LC3_EXPORT unsigned lc3_encoder_size(int dt_us, int sr_hz)
+{
+ return lc3_hr_encoder_size(false, dt_us, sr_hz);
+}
+
/**
* Setup encoder
*/
-struct lc3_encoder *lc3_setup_encoder(
- int dt_us, int sr_hz, int sr_pcm_hz, void *mem)
+LC3_EXPORT struct lc3_encoder *lc3_hr_setup_encoder(
+ bool hrmode, int dt_us, int sr_hz, int sr_pcm_hz, void *mem)
{
if (sr_pcm_hz <= 0)
sr_pcm_hz = sr_hz;
- enum lc3_dt dt = resolve_dt(dt_us);
- enum lc3_srate sr = resolve_sr(sr_hz);
- enum lc3_srate sr_pcm = resolve_sr(sr_pcm_hz);
+ enum lc3_dt dt = resolve_dt(dt_us, hrmode);
+ enum lc3_srate sr = resolve_srate(sr_hz, hrmode);
+ enum lc3_srate sr_pcm = resolve_srate(sr_pcm_hz, hrmode);
if (dt >= LC3_NUM_DT || sr_pcm >= LC3_NUM_SRATE || sr > sr_pcm || !mem)
return NULL;
struct lc3_encoder *encoder = mem;
- int ns = LC3_NS(dt, sr_pcm);
- int nt = LC3_NT(sr_pcm);
+ int ns = lc3_ns(dt, sr_pcm);
+ int nt = lc3_nt(sr_pcm);
*encoder = (struct lc3_encoder){
.dt = dt, .sr = sr,
@@ -374,11 +418,17 @@ struct lc3_encoder *lc3_setup_encoder(
return encoder;
}
+LC3_EXPORT struct lc3_encoder *lc3_setup_encoder(
+ int dt_us, int sr_hz, int sr_pcm_hz, void *mem)
+{
+ return lc3_hr_setup_encoder(false, dt_us, sr_hz, sr_pcm_hz, mem);
+}
+
/**
* Encode a frame
*/
-int lc3_encode(struct lc3_encoder *encoder, enum lc3_pcm_format fmt,
- const void *pcm, int stride, int nbytes, void *out)
+LC3_EXPORT int lc3_encode(struct lc3_encoder *encoder,
+ enum lc3_pcm_format fmt, const void *pcm, int stride, int nbytes, void *out)
{
static void (* const load[])(struct lc3_encoder *, const void *, int) = {
[LC3_PCM_FORMAT_S16 ] = load_s16,
@@ -389,20 +439,19 @@ int lc3_encode(struct lc3_encoder *encoder, enum lc3_pcm_format fmt,
/* --- Check parameters --- */
- if (!encoder || nbytes < LC3_MIN_FRAME_BYTES
- || nbytes > LC3_MAX_FRAME_BYTES)
+ if (!encoder || nbytes < lc3_min_frame_bytes(encoder->dt, encoder->sr)
+ || nbytes > lc3_max_frame_bytes(encoder->dt, encoder->sr))
return -1;
/* --- Processing --- */
struct side_data side;
- uint16_t xq[LC3_MAX_NE];
load[fmt](encoder, pcm, stride);
- analyze(encoder, nbytes, &side, xq);
+ analyze(encoder, nbytes, &side);
- encode(encoder, &side, xq, nbytes, out);
+ encode(encoder, &side, nbytes, out);
return 0;
}
@@ -426,7 +475,7 @@ static void store_s16(
enum lc3_srate sr = decoder->sr_pcm;
float *xs = decoder->x + decoder->xs_off;
- int ns = LC3_NS(dt, sr);
+ int ns = lc3_ns(dt, sr);
for ( ; ns > 0; ns--, xs++, pcm += stride) {
int32_t s = *xs >= 0 ? (int)(*xs + 0.5f) : (int)(*xs - 0.5f);
@@ -448,11 +497,11 @@ static void store_s24(
enum lc3_srate sr = decoder->sr_pcm;
float *xs = decoder->x + decoder->xs_off;
- int ns = LC3_NS(dt, sr);
+ int ns = lc3_ns(dt, sr);
for ( ; ns > 0; ns--, xs++, pcm += stride) {
- int32_t s = *xs >= 0 ? (int32_t)(ldexpf(*xs, 8) + 0.5f)
- : (int32_t)(ldexpf(*xs, 8) - 0.5f);
+ int32_t s = *xs >= 0 ? (int32_t)(lc3_ldexpf(*xs, 8) + 0.5f)
+ : (int32_t)(lc3_ldexpf(*xs, 8) - 0.5f);
*pcm = LC3_SAT24(s);
}
}
@@ -471,11 +520,11 @@ static void store_s24_3le(
enum lc3_srate sr = decoder->sr_pcm;
float *xs = decoder->x + decoder->xs_off;
- int ns = LC3_NS(dt, sr);
+ int ns = lc3_ns(dt, sr);
for ( ; ns > 0; ns--, xs++, pcm += 3*stride) {
- int32_t s = *xs >= 0 ? (int32_t)(ldexpf(*xs, 8) + 0.5f)
- : (int32_t)(ldexpf(*xs, 8) - 0.5f);
+ int32_t s = *xs >= 0 ? (int32_t)(lc3_ldexpf(*xs, 8) + 0.5f)
+ : (int32_t)(lc3_ldexpf(*xs, 8) - 0.5f);
s = LC3_SAT24(s);
pcm[0] = (s >> 0) & 0xff;
@@ -498,10 +547,10 @@ static void store_float(
enum lc3_srate sr = decoder->sr_pcm;
float *xs = decoder->x + decoder->xs_off;
- int ns = LC3_NS(dt, sr);
+ int ns = lc3_ns(dt, sr);
for ( ; ns > 0; ns--, xs++, pcm += stride) {
- float s = ldexpf(*xs, -15);
+ float s = lc3_ldexpf(*xs, -15);
*pcm = fminf(fmaxf(s, -1.f), 1.f);
}
}
@@ -520,8 +569,8 @@ static int decode(struct lc3_decoder *decoder,
enum lc3_srate sr = decoder->sr;
float *xf = decoder->x + decoder->xs_off;
- int ns = LC3_NS(dt, sr);
- int ne = LC3_NE(dt, sr);
+ int ns = lc3_ns(dt, sr);
+ int ne = lc3_ne(dt, sr);
lc3_bits_t bits;
int ret = 0;
@@ -534,7 +583,8 @@ static int decode(struct lc3_decoder *decoder,
if ((ret = lc3_spec_get_side(&bits, dt, sr, &side->spec)) < 0)
return ret;
- lc3_tns_get_data(&bits, dt, side->bw, nbytes, &side->tns);
+ if ((ret = lc3_tns_get_data(&bits, dt, side->bw, nbytes, &side->tns)) < 0)
+ return ret;
side->pitch_present = lc3_get_bit(&bits);
@@ -542,7 +592,7 @@ static int decode(struct lc3_decoder *decoder,
return ret;
if (side->pitch_present)
- lc3_ltpf_get_data(&bits, &side->ltpf);
+ lc3_ltpf_get_data(&bits, &side->ltpf);
if ((ret = lc3_spec_decode(&bits, dt, sr,
side->bw, nbytes, &side->spec, xf)) < 0)
@@ -567,8 +617,8 @@ static void synthesize(struct lc3_decoder *decoder,
enum lc3_srate sr_pcm = decoder->sr_pcm;
float *xf = decoder->x + decoder->xs_off;
- int ns = LC3_NS(dt, sr_pcm);
- int ne = LC3_NE(dt, sr);
+ int ns = lc3_ns(dt, sr_pcm);
+ int ne = lc3_ne(dt, sr);
float *xg = decoder->x + decoder->xg_off;
float *xs = xf;
@@ -595,8 +645,9 @@ static void synthesize(struct lc3_decoder *decoder,
lc3_mdct_inverse(dt, sr_pcm, sr, xf, xd, xs);
}
- lc3_ltpf_synthesize(dt, sr_pcm, nbytes, &decoder->ltpf,
- side && side->pitch_present ? &side->ltpf : NULL, xh, xs);
+ if (!lc3_hr(sr))
+ lc3_ltpf_synthesize(dt, sr_pcm, nbytes, &decoder->ltpf,
+ side && side->pitch_present ? &side->ltpf : NULL, xh, xs);
}
/**
@@ -607,55 +658,60 @@ static void complete(struct lc3_decoder *decoder)
{
enum lc3_dt dt = decoder->dt;
enum lc3_srate sr_pcm = decoder->sr_pcm;
- int nh = LC3_NH(dt, sr_pcm);
- int ns = LC3_NS(dt, sr_pcm);
+ int nh = lc3_nh(dt, sr_pcm);
+ int ns = lc3_ns(dt, sr_pcm);
- decoder->xs_off = decoder->xs_off - decoder->xh_off < nh - ns ?
+ decoder->xs_off = decoder->xs_off - decoder->xh_off < nh ?
decoder->xs_off + ns : decoder->xh_off;
}
/**
* Return size needed for a decoder
*/
-unsigned lc3_decoder_size(int dt_us, int sr_hz)
+LC3_EXPORT unsigned lc3_hr_decoder_size(bool hrmode, int dt_us, int sr_hz)
{
- if (resolve_dt(dt_us) >= LC3_NUM_DT ||
- resolve_sr(sr_hz) >= LC3_NUM_SRATE)
+ if (resolve_dt(dt_us, hrmode) >= LC3_NUM_DT ||
+ resolve_srate(sr_hz, hrmode) >= LC3_NUM_SRATE)
return 0;
return sizeof(struct lc3_decoder) +
(LC3_DECODER_BUFFER_COUNT(dt_us, sr_hz)-1) * sizeof(float);
}
+LC3_EXPORT unsigned lc3_decoder_size(int dt_us, int sr_hz)
+{
+ return lc3_hr_decoder_size(false, dt_us, sr_hz);
+}
+
/**
* Setup decoder
*/
-struct lc3_decoder *lc3_setup_decoder(
- int dt_us, int sr_hz, int sr_pcm_hz, void *mem)
+LC3_EXPORT struct lc3_decoder *lc3_hr_setup_decoder(
+ bool hrmode, int dt_us, int sr_hz, int sr_pcm_hz, void *mem)
{
if (sr_pcm_hz <= 0)
sr_pcm_hz = sr_hz;
- enum lc3_dt dt = resolve_dt(dt_us);
- enum lc3_srate sr = resolve_sr(sr_hz);
- enum lc3_srate sr_pcm = resolve_sr(sr_pcm_hz);
+ enum lc3_dt dt = resolve_dt(dt_us, hrmode);
+ enum lc3_srate sr = resolve_srate(sr_hz, hrmode);
+ enum lc3_srate sr_pcm = resolve_srate(sr_pcm_hz, hrmode);
if (dt >= LC3_NUM_DT || sr_pcm >= LC3_NUM_SRATE || sr > sr_pcm || !mem)
return NULL;
struct lc3_decoder *decoder = mem;
- int nh = LC3_NH(dt, sr_pcm);
- int ns = LC3_NS(dt, sr_pcm);
- int nd = LC3_ND(dt, sr_pcm);
+ int nh = lc3_nh(dt, sr_pcm);
+ int ns = lc3_ns(dt, sr_pcm);
+ int nd = lc3_nd(dt, sr_pcm);
*decoder = (struct lc3_decoder){
.dt = dt, .sr = sr,
.sr_pcm = sr_pcm,
.xh_off = 0,
- .xs_off = nh - ns,
- .xd_off = nh,
- .xg_off = nh + nd,
+ .xs_off = nh,
+ .xd_off = nh + ns,
+ .xg_off = nh + ns + nd,
};
lc3_plc_reset(&decoder->plc);
@@ -666,11 +722,17 @@ struct lc3_decoder *lc3_setup_decoder(
return decoder;
}
+LC3_EXPORT struct lc3_decoder *lc3_setup_decoder(
+ int dt_us, int sr_hz, int sr_pcm_hz, void *mem)
+{
+ return lc3_hr_setup_decoder(false, dt_us, sr_hz, sr_pcm_hz, mem);
+}
+
/**
* Decode a frame
*/
-int lc3_decode(struct lc3_decoder *decoder, const void *in, int nbytes,
- enum lc3_pcm_format fmt, void *pcm, int stride)
+LC3_EXPORT int lc3_decode(struct lc3_decoder *decoder,
+ const void *in, int nbytes, enum lc3_pcm_format fmt, void *pcm, int stride)
{
static void (* const store[])(struct lc3_decoder *, void *, int) = {
[LC3_PCM_FORMAT_S16 ] = store_s16,
@@ -685,7 +747,7 @@ int lc3_decode(struct lc3_decoder *decoder, const void *in, int nbytes,
return -1;
if (in && (nbytes < LC3_MIN_FRAME_BYTES ||
- nbytes > LC3_MAX_FRAME_BYTES ))
+ nbytes > lc3_max_frame_bytes(decoder->dt, decoder->sr) ))
return -1;
/* --- Processing --- */
diff --git a/src/ltpf.c b/src/ltpf.c
index a0cb7ba..08cbae6 100644
--- a/src/ltpf.c
+++ b/src/ltpf.c
@@ -144,6 +144,36 @@ static const int16_t h_48k_12k8_q15[4*60] = {
};
#endif /* resample_48k_12k8 */
+#ifndef resample_96k_12k8
+static const int16_t h_96k_12k8_q15[2*120] = {
+ -3, -7, -10, -13, -13, -10, -4, 5, 15, 26,
+ 33, 36, 31, 19, 0, -23, -47, -66, -76, -73,
+ -54, -21, 23, 70, 111, 139, 143, 121, 72, 0,
+ -84, -165, -227, -256, -240, -175, -67, 72, 219, 349,
+ 433, 448, 379, 225, 0, -268, -536, -755, -874, -848,
+ -648, -260, 301, 1000, 1780, 2569, 3290, 3869, 4243, 4372,
+ 4243, 3869, 3290, 2569, 1780, 1000, 301, -260, -648, -848,
+ -874, -755, -536, -268, 0, 225, 379, 448, 433, 349,
+ 219, 72, -67, -175, -240, -256, -227, -165, -84, 0,
+ 72, 121, 143, 139, 111, 70, 23, -21, -54, -73,
+ -76, -66, -47, -23, 0, 19, 31, 36, 33, 26,
+ 15, 5, -4, -10, -13, -13, -10, -7, -3, 0,
+
+ -1, -5, -8, -12, -13, -12, -8, 0, 10, 21,
+ 30, 35, 34, 26, 10, -11, -35, -58, -73, -76,
+ -65, -39, 0, 46, 92, 127, 144, 136, 100, 38,
+ -41, -125, -199, -246, -254, -214, -126, 0, 146, 288,
+ 398, 450, 424, 312, 120, -131, -405, -655, -830, -881,
+ -771, -477, 0, 636, 1384, 2178, 2943, 3601, 4084, 4340,
+ 4340, 4084, 3601, 2943, 2178, 1384, 636, 0, -477, -771,
+ -881, -830, -655, -405, -131, 120, 312, 424, 450, 398,
+ 288, 146, 0, -126, -214, -254, -246, -199, -125, -41,
+ 38, 100, 136, 144, 127, 92, 46, 0, -39, -65,
+ -76, -73, -58, -35, -11, 10, 26, 34, 35, 30,
+ 21, 10, 0, -8, -12, -13, -12, -8, -5, -1,
+};
+#endif /* resample_96k_12k8 */
+
/**
* High-pass 50Hz filtering, at 12.8 KHz samplerate
@@ -223,7 +253,8 @@ LC3_HOT static inline void resample_x64k_12k8(const int p, const int16_t *h,
* The number of previous samples `d` accessed on `x` is :
* d: { 30, 60 } - 1 for resampling factors 8 and 4.
*/
-#if !defined(resample_24k_12k8) || !defined(resample_48k_12k8)
+#if !defined(resample_24k_12k8) || !defined(resample_48k_12k8) \
+ || !defined(resample_96k_12k8)
LC3_HOT static inline void resample_x192k_12k8(const int p, const int16_t *h,
struct lc3_ltpf_hp50_state *hp50, const int16_t *x, int16_t *y, int n)
{
@@ -341,6 +372,22 @@ LC3_HOT static void resample_48k_12k8(
#endif /* resample_48k_12k8 */
/**
+ * Resample from 96 Khz to 12.8 KHz
+ * hp50 High-Pass biquad filter state
+ * x [-120..-1] Previous, [0..ns-1] Current samples, in fixed Q15
+ * y, n [0..n-1] Output `n` processed samples, in fixed Q14
+ *
+* The `x` vector is aligned on 32 bits
+*/
+#ifndef resample_96k_12k8
+LC3_HOT static void resample_96k_12k8(
+ struct lc3_ltpf_hp50_state *hp50, const int16_t *x, int16_t *y, int n)
+{
+ resample_x192k_12k8(2, h_96k_12k8_q15, hp50, x, y, n);
+}
+#endif /* resample_96k_12k8 */
+
+/**
* Resample to 6.4 KHz
* x [-3..-1] Previous, [0..n-1] Current samples
* y, n [0..n-1] Output `n` processed samples
@@ -366,11 +413,13 @@ LC3_HOT static void resample_6k4(const int16_t *x, int16_t *y, int n)
static void (* const resample_12k8[])
(struct lc3_ltpf_hp50_state *, const int16_t *, int16_t *, int ) =
{
- [LC3_SRATE_8K ] = resample_8k_12k8,
- [LC3_SRATE_16K] = resample_16k_12k8,
- [LC3_SRATE_24K] = resample_24k_12k8,
- [LC3_SRATE_32K] = resample_32k_12k8,
- [LC3_SRATE_48K] = resample_48k_12k8,
+ [LC3_SRATE_8K ] = resample_8k_12k8,
+ [LC3_SRATE_16K ] = resample_16k_12k8,
+ [LC3_SRATE_24K ] = resample_24k_12k8,
+ [LC3_SRATE_32K ] = resample_32k_12k8,
+ [LC3_SRATE_48K ] = resample_48k_12k8,
+ [LC3_SRATE_48K_HR] = resample_48k_12k8,
+ [LC3_SRATE_96K_HR] = resample_96k_12k8,
};
@@ -457,7 +506,7 @@ LC3_HOT static int argmax_weighted(
}
/**
- * Interpolate from pitch detected value (3.3.9.8)
+ * Interpolate from pitch detected value
* x, n [-2..-1] Previous, [0..n] Current input
* d The phase of interpolation (0 to 3)
* return The interpolated vector
@@ -492,7 +541,7 @@ LC3_HOT static void interpolate(const int16_t *x, int n, int d, int16_t *y)
}
/**
- * Interpolate autocorrelation (3.3.9.7)
+ * Interpolate autocorrelation
* x [-4..-1] Previous, [0..4] Current input
* d The phase of interpolation (-3 to 3)
* return The interpolated value
@@ -522,7 +571,7 @@ LC3_HOT static float interpolate_corr(const float *x, int d)
}
/**
- * Pitch detection algorithm (3.3.9.5-6)
+ * Pitch detection algorithm
* ltpf Context of analysis
* x, n [-114..-17] Previous, [0..n-1] Current 6.4KHz samples
* tc Return the pitch-lag estimation
@@ -530,8 +579,8 @@ LC3_HOT static float interpolate_corr(const float *x, int d)
*
* The `x` vector is aligned on 32 bits
*/
-static bool detect_pitch(
- struct lc3_ltpf_analysis *ltpf, const int16_t *x, int n, int *tc)
+static bool detect_pitch(struct lc3_ltpf_analysis *ltpf,
+ const int16_t *x, int n, int *tc)
{
float rm1, rm2;
float r[98];
@@ -562,7 +611,7 @@ static bool detect_pitch(
}
/**
- * Pitch-lag parameter (3.3.9.7)
+ * Pitch-lag parameter
* x, n [-232..-28] Previous, [0..n-1] Current 12.8KHz samples, Q14
* tc Pitch-lag estimation
* pitch The pitch value, in fixed .4
@@ -615,7 +664,7 @@ bool lc3_ltpf_analyse(
/* --- Resampling to 12.8 KHz --- */
int z_12k8 = sizeof(ltpf->x_12k8) / sizeof(*ltpf->x_12k8);
- int n_12k8 = dt == LC3_DT_7M5 ? 96 : 128;
+ int n_12k8 = (1 + dt) * 32;
memmove(ltpf->x_12k8, ltpf->x_12k8 + n_12k8,
(z_12k8 - n_12k8) * sizeof(*ltpf->x_12k8));
@@ -624,7 +673,7 @@ bool lc3_ltpf_analyse(
resample_12k8[sr](&ltpf->hp50, x, x_12k8, n_12k8);
- x_12k8 -= (dt == LC3_DT_7M5 ? 44 : 24);
+ x_12k8 -= (dt == LC3_DT_7M5 ? 44 : 24);
/* --- Resampling to 6.4 KHz --- */
@@ -638,6 +687,13 @@ bool lc3_ltpf_analyse(
resample_6k4(x_12k8, x_6k4, n_6k4);
+ /* --- Enlarge for small frame size --- */
+
+ if (dt == LC3_DT_2M5) {
+ x_12k8 -= n_12k8, x_6k4 -= n_6k4;
+ n_12k8 += n_12k8; n_6k4 += n_6k4;
+ }
+
/* --- Pitch detection --- */
int tc, pitch = 0;
@@ -663,11 +719,11 @@ bool lc3_ltpf_analyse(
LC3_MAX(pitch, ltpf->pitch) - LC3_MIN(pitch, ltpf->pitch);
float nc_diff = nc - ltpf->nc[0];
- data->active = pitch_present &&
+ data->active = !lc3_hr(sr) && pitch_present &&
((nc > 0.9f) || (nc > 0.84f && pitch_diff < 8 && nc_diff > -0.1f));
} else {
- data->active = pitch_present &&
+ data->active = !lc3_hr(sr) && pitch_present &&
( (dt == LC3_DT_10M || ltpf->nc[1] > 0.94f) &&
(ltpf->nc[0] > 0.94f && nc > 0.94f) );
}
@@ -689,11 +745,8 @@ bool lc3_ltpf_analyse(
* Width of synthesis filter
*/
-#define FILTER_WIDTH(sr) \
- LC3_MAX(4, LC3_SRATE_KHZ(sr) / 4)
-
#define MAX_FILTER_WIDTH \
- FILTER_WIDTH(LC3_NUM_SRATE)
+ (LC3_MAX_SRATE_HZ / 4000)
/**
@@ -803,8 +856,7 @@ void lc3_ltpf_synthesize(enum lc3_dt dt, enum lc3_srate sr, int nbytes,
lc3_ltpf_synthesis_t *ltpf, const lc3_ltpf_data_t *data,
const float *xh, float *x)
{
- int nh = LC3_NH(dt, sr);
- int dt_us = LC3_DT_US(dt);
+ int nh = lc3_ns(dt, sr) + lc3_nh(dt, sr);
/* --- Filter parameters --- */
@@ -814,13 +866,18 @@ void lc3_ltpf_synthesize(enum lc3_dt dt, enum lc3_srate sr, int nbytes,
p_idx >= 380 ? (((p_idx >> 1) - 63) << 2) + (((p_idx & 1)) << 1) :
(((p_idx >> 2) + 32) << 2) + (((p_idx & 3)) << 0) ;
- pitch = (pitch * LC3_SRATE_KHZ(sr) * 10 + 64) / 128;
+ pitch = (pitch * lc3_ns(LC3_DT_10M, sr) + 64) / 128;
+
+ int nbits = (nbytes*8 * (1 + LC3_DT_10M)) / (1 + dt);
+ if (dt == LC3_DT_2M5)
+ nbits = (6 * nbits + 5) / 10;
+ if (dt == LC3_DT_5M)
+ nbits -= 160;
- int nbits = (nbytes*8 * 10000 + (dt_us/2)) / dt_us;
- int g_idx = LC3_MAX(nbits / 80, 3 + (int)sr) - (3 + sr);
+ int g_idx = LC3_MAX(nbits / 80, (int)(3 + sr)) - (3 + sr);
bool active = data && data->active && g_idx < 4;
- int w = FILTER_WIDTH(sr);
+ int w = LC3_MAX(4, lc3_ns_4m[sr] >> 4);
float c[2 * MAX_FILTER_WIDTH];
for (int i = 0; i < w; i++) {
@@ -831,31 +888,32 @@ void lc3_ltpf_synthesize(enum lc3_dt dt, enum lc3_srate sr, int nbytes,
/* --- Transition handling --- */
- int ns = LC3_NS(dt, sr);
- int nt = ns / (3 + dt);
- float x0[MAX_FILTER_WIDTH];
+ int ns = lc3_ns(dt, sr);
+ int nt = ns / (1 + dt);
+ float x0[2][MAX_FILTER_WIDTH];
+
+ memcpy(x0[0], ltpf->x, (w-1) * sizeof(float));
+ memcpy(ltpf->x, x + ns - (w-1), (w-1) * sizeof(float));
if (active)
- memcpy(x0, x + nt-(w-1), (w-1) * sizeof(float));
+ memcpy(x0[1], x + nt-(w-1), (w-1) * sizeof(float));
if (!ltpf->active && active)
- synthesize[sr](xh, nh, pitch/4, ltpf->x, x, nt, c, 1);
+ synthesize[sr](xh, nh, pitch/4, x0[0], x, nt, c, 1);
else if (ltpf->active && !active)
- synthesize[sr](xh, nh, ltpf->pitch/4, ltpf->x, x, nt, ltpf->c, -1);
+ synthesize[sr](xh, nh, ltpf->pitch/4, x0[0], x, nt, ltpf->c, -1);
else if (ltpf->active && active && ltpf->pitch == pitch)
- synthesize[sr](xh, nh, pitch/4, ltpf->x, x, nt, c, 0);
+ synthesize[sr](xh, nh, pitch/4, x0[0], x, nt, c, 0);
else if (ltpf->active && active) {
- synthesize[sr](xh, nh, ltpf->pitch/4, ltpf->x, x, nt, ltpf->c, -1);
+ synthesize[sr](xh, nh, ltpf->pitch/4, x0[0], x, nt, ltpf->c, -1);
synthesize[sr](xh, nh, pitch/4,
(x <= xh ? x + nh : x) - (w-1), x, nt, c, 1);
}
/* --- Remainder --- */
- memcpy(ltpf->x, x + ns - (w-1), (w-1) * sizeof(float));
-
- if (active)
- synthesize[sr](xh, nh, pitch/4, x0, x + nt, ns-nt, c, 0);
+ if (active && ns > nt)
+ synthesize[sr](xh, nh, pitch/4, x0[1], x + nt, ns-nt, c, 0);
/* --- Update state --- */
@@ -898,7 +956,8 @@ void lc3_ltpf_put_data(lc3_bits_t *bits,
/**
* Get bitstream data
*/
-void lc3_ltpf_get_data(lc3_bits_t *bits, struct lc3_ltpf_data *data)
+void lc3_ltpf_get_data(lc3_bits_t *bits,
+ struct lc3_ltpf_data *data)
{
data->active = lc3_get_bit(bits);
data->pitch_index = lc3_get_bits(bits, 9);
diff --git a/src/ltpf.h b/src/ltpf.h
index 0d5bb3c..42cedc6 100644
--- a/src/ltpf.h
+++ b/src/ltpf.h
@@ -16,13 +16,6 @@
*
******************************************************************************/
-/**
- * LC3 - Long Term Postfilter
- *
- * Reference : Low Complexity Communication Codec (LC3)
- * Bluetooth Specification v1.0
- */
-
#ifndef __LC3_LTPF_H
#define __LC3_LTPF_H
diff --git a/src/mdct.c b/src/mdct.c
index f598221..51d9579 100644
--- a/src/mdct.c
+++ b/src/mdct.c
@@ -160,7 +160,7 @@ LC3_HOT static inline void fft_bf2(
/**
* Perform FFT
* x, y0, y1 Input, and 2 scratch buffers of size `n`
- * n Number of points 30, 40, 60, 80, 90, 120, 160, 180, 240
+ * n Number of points 30, 40, 60, 80, 90, 120, 160, 180, 240, 480
* return The buffer `y0` or `y1` that hold the result
*
* Input `x` can be the same as the `y0` second scratch buffer
@@ -175,9 +175,9 @@ static struct lc3_complex *fft(const struct lc3_complex *x, int n,
*
* n = 5^1 * 3^n3 * 2^n2
*
- * for n = 40, 80, 160 n3 = 0, n2 = [3..5]
- * n = 30, 60, 120, 240 n3 = 1, n2 = [1..4]
- * n = 90, 180 n3 = 2, n2 = [1..2]
+ * for n = 10, 20, 40, 80, 160 n3 = 0, n2 = [1..5]
+ * n = 30, 60, 120, 240, 480 n3 = 1, n2 = [1..5]
+ * n = 90, 180 n3 = 2, n2 = [1..2]
*
* Note that the expression `n & (n-1) == 0` is equivalent
* to the check that `n` is a power of 2. */
@@ -200,16 +200,18 @@ static struct lc3_complex *fft(const struct lc3_complex *x, int n,
/**
* Windowing of samples before MDCT
- * dt, sr Duration and samplerate (size of the transform)
+ * dt, sr Duration and samplerate
* x, y Input current and delayed samples
* y, d Output windowed samples, and delayed ones
*/
-LC3_HOT static void mdct_window(enum lc3_dt dt, enum lc3_srate sr,
+LC3_HOT static void mdct_window(
+ enum lc3_dt dt, enum lc3_srate sr,
const float *x, float *d, float *y)
{
- int ns = LC3_NS(dt, sr), nd = LC3_ND(dt, sr);
+ const float *win = lc3_mdct_win[dt][sr];
+ int ns = lc3_ns(dt, sr), nd = lc3_nd(dt, sr);
- const float *w0 = lc3_mdct_win[dt][sr], *w1 = w0 + ns;
+ const float *w0 = win, *w1 = w0 + ns;
const float *w2 = w1, *w3 = w2 + nd;
const float *x0 = x + ns-nd, *x1 = x0;
@@ -362,7 +364,8 @@ LC3_HOT static void imdct_post_fft(const struct lc3_mdct_rot_def *def,
* x, d Middle half of IMDCT coefficients and delayed samples
* y, d Output samples and delayed ones
*/
-LC3_HOT static void imdct_window(enum lc3_dt dt, enum lc3_srate sr,
+LC3_HOT static void imdct_window(
+ enum lc3_dt dt, enum lc3_srate sr,
const float *x, float *d, float *y)
{
/* The full MDCT coefficients is given by symmetry :
@@ -371,8 +374,9 @@ LC3_HOT static void imdct_window(enum lc3_dt dt, enum lc3_srate sr,
* T[ n/2 .. 3n/4-1] = half[n/4 .. n/2-1]
* T[3n/4 .. n-1] = half[n/2-1 .. n/4 ] */
- int n4 = LC3_NS(dt, sr) >> 1, nd = LC3_ND(dt, sr);
- const float *w2 = lc3_mdct_win[dt][sr], *w0 = w2 + 3*n4, *w1 = w0;
+ const float *win = lc3_mdct_win[dt][sr];
+ int n4 = lc3_ns(dt, sr) >> 1, nd = lc3_nd(dt, sr);
+ const float *w2 = win, *w0 = w2 + 3*n4, *w1 = w0;
const float *x0 = d + nd-n4, *x1 = x0;
float *y0 = y + nd-n4, *y1 = y0, *y2 = d + nd, *y3 = d;
@@ -423,12 +427,13 @@ LC3_HOT static void rescale(float *x, int n, float f)
/**
* Forward MDCT transformation
*/
-void lc3_mdct_forward(enum lc3_dt dt, enum lc3_srate sr,
- enum lc3_srate sr_dst, const float *x, float *d, float *y)
+void lc3_mdct_forward(
+ enum lc3_dt dt, enum lc3_srate sr, enum lc3_srate sr_dst,
+ const float *x, float *d, float *y)
{
const struct lc3_mdct_rot_def *rot = lc3_mdct_rot[dt][sr];
- int ns_dst = LC3_NS(dt, sr_dst);
- int ns = LC3_NS(dt, sr);
+ int ns_dst = lc3_ns(dt, sr_dst);
+ int ns = lc3_ns(dt, sr);
struct lc3_complex buffer[LC3_MAX_NS / 2];
struct lc3_complex *z = (struct lc3_complex *)y;
@@ -447,12 +452,13 @@ void lc3_mdct_forward(enum lc3_dt dt, enum lc3_srate sr,
/**
* Inverse MDCT transformation
*/
-void lc3_mdct_inverse(enum lc3_dt dt, enum lc3_srate sr,
- enum lc3_srate sr_src, const float *x, float *d, float *y)
+void lc3_mdct_inverse(
+ enum lc3_dt dt, enum lc3_srate sr, enum lc3_srate sr_src,
+ const float *x, float *d, float *y)
{
const struct lc3_mdct_rot_def *rot = lc3_mdct_rot[dt][sr];
- int ns_src = LC3_NS(dt, sr_src);
- int ns = LC3_NS(dt, sr);
+ int ns_src = lc3_ns(dt, sr_src);
+ int ns = lc3_ns(dt, sr);
struct lc3_complex buffer[LC3_MAX_NS / 2];
struct lc3_complex *z = (struct lc3_complex *)y;
diff --git a/src/mdct.h b/src/mdct.h
index 03ae801..18d08b9 100644
--- a/src/mdct.h
+++ b/src/mdct.h
@@ -16,13 +16,6 @@
*
******************************************************************************/
-/**
- * LC3 - Compute LD-MDCT (Low Delay Modified Discret Cosinus Transform)
- *
- * Reference : Low Complexity Communication Codec (LC3)
- * Bluetooth Specification v1.0
- */
-
#ifndef __LC3_MDCT_H
#define __LC3_MDCT_H
@@ -38,8 +31,9 @@
*
* `x` and `y` can be the same buffer
*/
-void lc3_mdct_forward(enum lc3_dt dt, enum lc3_srate sr,
- enum lc3_srate sr_dst, const float *x, float *d, float *y);
+void lc3_mdct_forward(
+ enum lc3_dt dt, enum lc3_srate sr, enum lc3_srate sr_dst,
+ const float *x, float *d, float *y);
/**
* Inverse MDCT transformation
@@ -50,8 +44,9 @@ void lc3_mdct_forward(enum lc3_dt dt, enum lc3_srate sr,
*
* `x` and `y` can be the same buffer
*/
-void lc3_mdct_inverse(enum lc3_dt dt, enum lc3_srate sr,
- enum lc3_srate sr_src, const float *x, float *d, float *y);
+void lc3_mdct_inverse(
+ enum lc3_dt dt, enum lc3_srate sr, enum lc3_srate sr_src,
+ const float *x, float *d, float *y);
#endif /* __LC3_MDCT_H */
diff --git a/src/meson.build b/src/meson.build
index 007573b..026f4ee 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -33,6 +33,7 @@ lc3lib = library('lc3',
lc3_sources,
dependencies: m_dep,
include_directories: inc,
+ gnu_symbol_visibility: 'hidden',
soversion: 1,
install: true)
diff --git a/src/plc.c b/src/plc.c
index 03911b4..f225ca6 100644
--- a/src/plc.c
+++ b/src/plc.c
@@ -17,6 +17,7 @@
******************************************************************************/
#include "plc.h"
+#include "tables.h"
/**
@@ -45,7 +46,7 @@ void lc3_plc_synthesize(enum lc3_dt dt, enum lc3_srate sr,
{
uint16_t seed = plc->seed;
float alpha = plc->alpha;
- int ne = LC3_NE(dt, sr);
+ int ne = lc3_ne(dt, sr);
alpha *= (plc->count < 4 ? 1.0f :
plc->count < 8 ? 0.9f : 0.85f);
diff --git a/src/plc.h b/src/plc.h
index 6fda5b5..a7990bd 100644
--- a/src/plc.h
+++ b/src/plc.h
@@ -16,13 +16,6 @@
*
******************************************************************************/
-/**
- * LC3 - Packet Loss Concealment
- *
- * Reference : Low Complexity Communication Codec (LC3)
- * Bluetooth Specification v1.0
- */
-
#ifndef __LC3_PLC_H
#define __LC3_PLC_H
diff --git a/src/sns.c b/src/sns.c
index 56a893c..0b5aa14 100644
--- a/src/sns.c
+++ b/src/sns.c
@@ -146,121 +146,157 @@ LC3_HOT static void dct16_inverse(const float *x, float *y)
/**
* Scale factors
* dt, sr Duration and samplerate of the frame
+ * nbytes Size in bytes of the frame
* eb Energy estimation per bands
* att 1: Attack detected 0: Otherwise
* scf Output 16 scale factors
*/
LC3_HOT static void compute_scale_factors(
- enum lc3_dt dt, enum lc3_srate sr,
+ enum lc3_dt dt, enum lc3_srate sr, int nbytes,
const float *eb, bool att, float *scf)
{
/* Pre-emphasis gain table :
* Ge[b] = 10 ^ (b * g_tilt) / 630 , b = [0..63] */
- static const float ge_table[LC3_NUM_SRATE][LC3_NUM_BANDS] = {
-
- [LC3_SRATE_8K] = { /* g_tilt = 14 */
- 1.00000000e+00, 1.05250029e+00, 1.10775685e+00, 1.16591440e+00,
- 1.22712524e+00, 1.29154967e+00, 1.35935639e+00, 1.43072299e+00,
- 1.50583635e+00, 1.58489319e+00, 1.66810054e+00, 1.75567629e+00,
- 1.84784980e+00, 1.94486244e+00, 2.04696827e+00, 2.15443469e+00,
- 2.26754313e+00, 2.38658979e+00, 2.51188643e+00, 2.64376119e+00,
- 2.78255940e+00, 2.92864456e+00, 3.08239924e+00, 3.24422608e+00,
- 3.41454887e+00, 3.59381366e+00, 3.78248991e+00, 3.98107171e+00,
- 4.19007911e+00, 4.41005945e+00, 4.64158883e+00, 4.88527357e+00,
- 5.14175183e+00, 5.41169527e+00, 5.69581081e+00, 5.99484250e+00,
- 6.30957344e+00, 6.64082785e+00, 6.98947321e+00, 7.35642254e+00,
- 7.74263683e+00, 8.14912747e+00, 8.57695899e+00, 9.02725178e+00,
- 9.50118507e+00, 1.00000000e+01, 1.05250029e+01, 1.10775685e+01,
- 1.16591440e+01, 1.22712524e+01, 1.29154967e+01, 1.35935639e+01,
- 1.43072299e+01, 1.50583635e+01, 1.58489319e+01, 1.66810054e+01,
- 1.75567629e+01, 1.84784980e+01, 1.94486244e+01, 2.04696827e+01,
- 2.15443469e+01, 2.26754313e+01, 2.38658979e+01, 2.51188643e+01 },
-
- [LC3_SRATE_16K] = { /* g_tilt = 18 */
- 1.00000000e+00, 1.06800043e+00, 1.14062492e+00, 1.21818791e+00,
- 1.30102522e+00, 1.38949549e+00, 1.48398179e+00, 1.58489319e+00,
- 1.69266662e+00, 1.80776868e+00, 1.93069773e+00, 2.06198601e+00,
- 2.20220195e+00, 2.35195264e+00, 2.51188643e+00, 2.68269580e+00,
- 2.86512027e+00, 3.05994969e+00, 3.26802759e+00, 3.49025488e+00,
- 3.72759372e+00, 3.98107171e+00, 4.25178630e+00, 4.54090961e+00,
- 4.84969343e+00, 5.17947468e+00, 5.53168120e+00, 5.90783791e+00,
- 6.30957344e+00, 6.73862717e+00, 7.19685673e+00, 7.68624610e+00,
- 8.20891416e+00, 8.76712387e+00, 9.36329209e+00, 1.00000000e+01,
- 1.06800043e+01, 1.14062492e+01, 1.21818791e+01, 1.30102522e+01,
- 1.38949549e+01, 1.48398179e+01, 1.58489319e+01, 1.69266662e+01,
- 1.80776868e+01, 1.93069773e+01, 2.06198601e+01, 2.20220195e+01,
- 2.35195264e+01, 2.51188643e+01, 2.68269580e+01, 2.86512027e+01,
- 3.05994969e+01, 3.26802759e+01, 3.49025488e+01, 3.72759372e+01,
- 3.98107171e+01, 4.25178630e+01, 4.54090961e+01, 4.84969343e+01,
- 5.17947468e+01, 5.53168120e+01, 5.90783791e+01, 6.30957344e+01 },
-
- [LC3_SRATE_24K] = { /* g_tilt = 22 */
- 1.00000000e+00, 1.08372885e+00, 1.17446822e+00, 1.27280509e+00,
- 1.37937560e+00, 1.49486913e+00, 1.62003281e+00, 1.75567629e+00,
- 1.90267705e+00, 2.06198601e+00, 2.23463373e+00, 2.42173704e+00,
- 2.62450630e+00, 2.84425319e+00, 3.08239924e+00, 3.34048498e+00,
- 3.62017995e+00, 3.92329345e+00, 4.25178630e+00, 4.60778348e+00,
- 4.99358789e+00, 5.41169527e+00, 5.86481029e+00, 6.35586411e+00,
- 6.88803330e+00, 7.46476041e+00, 8.08977621e+00, 8.76712387e+00,
- 9.50118507e+00, 1.02967084e+01, 1.11588399e+01, 1.20931568e+01,
- 1.31057029e+01, 1.42030283e+01, 1.53922315e+01, 1.66810054e+01,
- 1.80776868e+01, 1.95913107e+01, 2.12316686e+01, 2.30093718e+01,
- 2.49359200e+01, 2.70237760e+01, 2.92864456e+01, 3.17385661e+01,
- 3.43959997e+01, 3.72759372e+01, 4.03970086e+01, 4.37794036e+01,
- 4.74450028e+01, 5.14175183e+01, 5.57226480e+01, 6.03882412e+01,
- 6.54444792e+01, 7.09240702e+01, 7.68624610e+01, 8.32980665e+01,
- 9.02725178e+01, 9.78309319e+01, 1.06022203e+02, 1.14899320e+02,
- 1.24519708e+02, 1.34945600e+02, 1.46244440e+02, 1.58489319e+02 },
-
- [LC3_SRATE_32K] = { /* g_tilt = 26 */
- 1.00000000e+00, 1.09968890e+00, 1.20931568e+00, 1.32987103e+00,
- 1.46244440e+00, 1.60823388e+00, 1.76855694e+00, 1.94486244e+00,
- 2.13874364e+00, 2.35195264e+00, 2.58641621e+00, 2.84425319e+00,
- 3.12779366e+00, 3.43959997e+00, 3.78248991e+00, 4.15956216e+00,
- 4.57422434e+00, 5.03022373e+00, 5.53168120e+00, 6.08312841e+00,
- 6.68954879e+00, 7.35642254e+00, 8.08977621e+00, 8.89623710e+00,
- 9.78309319e+00, 1.07583590e+01, 1.18308480e+01, 1.30102522e+01,
- 1.43072299e+01, 1.57335019e+01, 1.73019574e+01, 1.90267705e+01,
- 2.09235283e+01, 2.30093718e+01, 2.53031508e+01, 2.78255940e+01,
- 3.05994969e+01, 3.36499270e+01, 3.70044512e+01, 4.06933843e+01,
- 4.47500630e+01, 4.92111475e+01, 5.41169527e+01, 5.95118121e+01,
- 6.54444792e+01, 7.19685673e+01, 7.91430346e+01, 8.70327166e+01,
- 9.57089124e+01, 1.05250029e+02, 1.15742288e+02, 1.27280509e+02,
- 1.39968963e+02, 1.53922315e+02, 1.69266662e+02, 1.86140669e+02,
- 2.04696827e+02, 2.25102829e+02, 2.47543082e+02, 2.72220379e+02,
- 2.99357729e+02, 3.29200372e+02, 3.62017995e+02, 3.98107171e+02 },
-
- [LC3_SRATE_48K] = { /* g_tilt = 30 */
- 1.00000000e+00, 1.11588399e+00, 1.24519708e+00, 1.38949549e+00,
- 1.55051578e+00, 1.73019574e+00, 1.93069773e+00, 2.15443469e+00,
- 2.40409918e+00, 2.68269580e+00, 2.99357729e+00, 3.34048498e+00,
- 3.72759372e+00, 4.15956216e+00, 4.64158883e+00, 5.17947468e+00,
- 5.77969288e+00, 6.44946677e+00, 7.19685673e+00, 8.03085722e+00,
- 8.96150502e+00, 1.00000000e+01, 1.11588399e+01, 1.24519708e+01,
- 1.38949549e+01, 1.55051578e+01, 1.73019574e+01, 1.93069773e+01,
- 2.15443469e+01, 2.40409918e+01, 2.68269580e+01, 2.99357729e+01,
- 3.34048498e+01, 3.72759372e+01, 4.15956216e+01, 4.64158883e+01,
- 5.17947468e+01, 5.77969288e+01, 6.44946677e+01, 7.19685673e+01,
- 8.03085722e+01, 8.96150502e+01, 1.00000000e+02, 1.11588399e+02,
- 1.24519708e+02, 1.38949549e+02, 1.55051578e+02, 1.73019574e+02,
- 1.93069773e+02, 2.15443469e+02, 2.40409918e+02, 2.68269580e+02,
- 2.99357729e+02, 3.34048498e+02, 3.72759372e+02, 4.15956216e+02,
- 4.64158883e+02, 5.17947468e+02, 5.77969288e+02, 6.44946677e+02,
- 7.19685673e+02, 8.03085722e+02, 8.96150502e+02, 1.00000000e+03 },
+ static const float ge_14[LC3_MAX_BANDS] = { /* g_tilt = 14 */
+ 1.00000000e+00, 1.05250029e+00, 1.10775685e+00, 1.16591440e+00,
+ 1.22712524e+00, 1.29154967e+00, 1.35935639e+00, 1.43072299e+00,
+ 1.50583635e+00, 1.58489319e+00, 1.66810054e+00, 1.75567629e+00,
+ 1.84784980e+00, 1.94486244e+00, 2.04696827e+00, 2.15443469e+00,
+ 2.26754313e+00, 2.38658979e+00, 2.51188643e+00, 2.64376119e+00,
+ 2.78255940e+00, 2.92864456e+00, 3.08239924e+00, 3.24422608e+00,
+ 3.41454887e+00, 3.59381366e+00, 3.78248991e+00, 3.98107171e+00,
+ 4.19007911e+00, 4.41005945e+00, 4.64158883e+00, 4.88527357e+00,
+ 5.14175183e+00, 5.41169527e+00, 5.69581081e+00, 5.99484250e+00,
+ 6.30957344e+00, 6.64082785e+00, 6.98947321e+00, 7.35642254e+00,
+ 7.74263683e+00, 8.14912747e+00, 8.57695899e+00, 9.02725178e+00,
+ 9.50118507e+00, 1.00000000e+01, 1.05250029e+01, 1.10775685e+01,
+ 1.16591440e+01, 1.22712524e+01, 1.29154967e+01, 1.35935639e+01,
+ 1.43072299e+01, 1.50583635e+01, 1.58489319e+01, 1.66810054e+01,
+ 1.75567629e+01, 1.84784980e+01, 1.94486244e+01, 2.04696827e+01,
+ 2.15443469e+01, 2.26754313e+01, 2.38658979e+01, 2.51188643e+01 };
+
+ static const float ge_18[LC3_MAX_BANDS] = { /* g_tilt = 18 */
+ 1.00000000e+00, 1.06800043e+00, 1.14062492e+00, 1.21818791e+00,
+ 1.30102522e+00, 1.38949549e+00, 1.48398179e+00, 1.58489319e+00,
+ 1.69266662e+00, 1.80776868e+00, 1.93069773e+00, 2.06198601e+00,
+ 2.20220195e+00, 2.35195264e+00, 2.51188643e+00, 2.68269580e+00,
+ 2.86512027e+00, 3.05994969e+00, 3.26802759e+00, 3.49025488e+00,
+ 3.72759372e+00, 3.98107171e+00, 4.25178630e+00, 4.54090961e+00,
+ 4.84969343e+00, 5.17947468e+00, 5.53168120e+00, 5.90783791e+00,
+ 6.30957344e+00, 6.73862717e+00, 7.19685673e+00, 7.68624610e+00,
+ 8.20891416e+00, 8.76712387e+00, 9.36329209e+00, 1.00000000e+01,
+ 1.06800043e+01, 1.14062492e+01, 1.21818791e+01, 1.30102522e+01,
+ 1.38949549e+01, 1.48398179e+01, 1.58489319e+01, 1.69266662e+01,
+ 1.80776868e+01, 1.93069773e+01, 2.06198601e+01, 2.20220195e+01,
+ 2.35195264e+01, 2.51188643e+01, 2.68269580e+01, 2.86512027e+01,
+ 3.05994969e+01, 3.26802759e+01, 3.49025488e+01, 3.72759372e+01,
+ 3.98107171e+01, 4.25178630e+01, 4.54090961e+01, 4.84969343e+01,
+ 5.17947468e+01, 5.53168120e+01, 5.90783791e+01, 6.30957344e+01 };
+
+ static const float ge_22[LC3_MAX_BANDS] = { /* g_tilt = 22 */
+ 1.00000000e+00, 1.08372885e+00, 1.17446822e+00, 1.27280509e+00,
+ 1.37937560e+00, 1.49486913e+00, 1.62003281e+00, 1.75567629e+00,
+ 1.90267705e+00, 2.06198601e+00, 2.23463373e+00, 2.42173704e+00,
+ 2.62450630e+00, 2.84425319e+00, 3.08239924e+00, 3.34048498e+00,
+ 3.62017995e+00, 3.92329345e+00, 4.25178630e+00, 4.60778348e+00,
+ 4.99358789e+00, 5.41169527e+00, 5.86481029e+00, 6.35586411e+00,
+ 6.88803330e+00, 7.46476041e+00, 8.08977621e+00, 8.76712387e+00,
+ 9.50118507e+00, 1.02967084e+01, 1.11588399e+01, 1.20931568e+01,
+ 1.31057029e+01, 1.42030283e+01, 1.53922315e+01, 1.66810054e+01,
+ 1.80776868e+01, 1.95913107e+01, 2.12316686e+01, 2.30093718e+01,
+ 2.49359200e+01, 2.70237760e+01, 2.92864456e+01, 3.17385661e+01,
+ 3.43959997e+01, 3.72759372e+01, 4.03970086e+01, 4.37794036e+01,
+ 4.74450028e+01, 5.14175183e+01, 5.57226480e+01, 6.03882412e+01,
+ 6.54444792e+01, 7.09240702e+01, 7.68624610e+01, 8.32980665e+01,
+ 9.02725178e+01, 9.78309319e+01, 1.06022203e+02, 1.14899320e+02,
+ 1.24519708e+02, 1.34945600e+02, 1.46244440e+02, 1.58489319e+02 };
+
+ static const float ge_26[LC3_MAX_BANDS] = { /* g_tilt = 26 */
+ 1.00000000e+00, 1.09968890e+00, 1.20931568e+00, 1.32987103e+00,
+ 1.46244440e+00, 1.60823388e+00, 1.76855694e+00, 1.94486244e+00,
+ 2.13874364e+00, 2.35195264e+00, 2.58641621e+00, 2.84425319e+00,
+ 3.12779366e+00, 3.43959997e+00, 3.78248991e+00, 4.15956216e+00,
+ 4.57422434e+00, 5.03022373e+00, 5.53168120e+00, 6.08312841e+00,
+ 6.68954879e+00, 7.35642254e+00, 8.08977621e+00, 8.89623710e+00,
+ 9.78309319e+00, 1.07583590e+01, 1.18308480e+01, 1.30102522e+01,
+ 1.43072299e+01, 1.57335019e+01, 1.73019574e+01, 1.90267705e+01,
+ 2.09235283e+01, 2.30093718e+01, 2.53031508e+01, 2.78255940e+01,
+ 3.05994969e+01, 3.36499270e+01, 3.70044512e+01, 4.06933843e+01,
+ 4.47500630e+01, 4.92111475e+01, 5.41169527e+01, 5.95118121e+01,
+ 6.54444792e+01, 7.19685673e+01, 7.91430346e+01, 8.70327166e+01,
+ 9.57089124e+01, 1.05250029e+02, 1.15742288e+02, 1.27280509e+02,
+ 1.39968963e+02, 1.53922315e+02, 1.69266662e+02, 1.86140669e+02,
+ 2.04696827e+02, 2.25102829e+02, 2.47543082e+02, 2.72220379e+02,
+ 2.99357729e+02, 3.29200372e+02, 3.62017995e+02, 3.98107171e+02 };
+
+ static const float ge_30[LC3_MAX_BANDS] = { /* g_tilt = 30 */
+ 1.00000000e+00, 1.11588399e+00, 1.24519708e+00, 1.38949549e+00,
+ 1.55051578e+00, 1.73019574e+00, 1.93069773e+00, 2.15443469e+00,
+ 2.40409918e+00, 2.68269580e+00, 2.99357729e+00, 3.34048498e+00,
+ 3.72759372e+00, 4.15956216e+00, 4.64158883e+00, 5.17947468e+00,
+ 5.77969288e+00, 6.44946677e+00, 7.19685673e+00, 8.03085722e+00,
+ 8.96150502e+00, 1.00000000e+01, 1.11588399e+01, 1.24519708e+01,
+ 1.38949549e+01, 1.55051578e+01, 1.73019574e+01, 1.93069773e+01,
+ 2.15443469e+01, 2.40409918e+01, 2.68269580e+01, 2.99357729e+01,
+ 3.34048498e+01, 3.72759372e+01, 4.15956216e+01, 4.64158883e+01,
+ 5.17947468e+01, 5.77969288e+01, 6.44946677e+01, 7.19685673e+01,
+ 8.03085722e+01, 8.96150502e+01, 1.00000000e+02, 1.11588399e+02,
+ 1.24519708e+02, 1.38949549e+02, 1.55051578e+02, 1.73019574e+02,
+ 1.93069773e+02, 2.15443469e+02, 2.40409918e+02, 2.68269580e+02,
+ 2.99357729e+02, 3.34048498e+02, 3.72759372e+02, 4.15956216e+02,
+ 4.64158883e+02, 5.17947468e+02, 5.77969288e+02, 6.44946677e+02,
+ 7.19685673e+02, 8.03085722e+02, 8.96150502e+02, 1.00000000e+03 };
+
+#if LC3_PLUS_HR
+
+ static const float ge_34[LC3_MAX_BANDS] = { /* g_tilt = 34 */
+ 1.00000000e+00, 1.13231759e+00, 1.28214312e+00, 1.45179321e+00,
+ 1.64389099e+00, 1.86140669e+00, 2.10770353e+00, 2.38658979e+00,
+ 2.70237760e+00, 3.05994969e+00, 3.46483486e+00, 3.92329345e+00,
+ 4.44241419e+00, 5.03022373e+00, 5.69581081e+00, 6.44946677e+00,
+ 7.30284467e+00, 8.26913948e+00, 9.36329209e+00, 1.06022203e+01,
+ 1.20050806e+01, 1.35935639e+01, 1.53922315e+01, 1.74288945e+01,
+ 1.97350438e+01, 2.23463373e+01, 2.53031508e+01, 2.86512027e+01,
+ 3.24422608e+01, 3.67349426e+01, 4.15956216e+01, 4.70994540e+01,
+ 5.33315403e+01, 6.03882412e+01, 6.83786677e+01, 7.74263683e+01,
+ 8.76712387e+01, 9.92716858e+01, 1.12407076e+02, 1.27280509e+02,
+ 1.44121960e+02, 1.63191830e+02, 1.84784980e+02, 2.09235283e+02,
+ 2.36920791e+02, 2.68269580e+02, 3.03766364e+02, 3.43959997e+02,
+ 3.89471955e+02, 4.41005945e+02, 4.99358789e+02, 5.65432741e+02,
+ 6.40249439e+02, 7.24965701e+02, 8.20891416e+02, 9.29509790e+02,
+ 1.05250029e+03, 1.19176459e+03, 1.34945600e+03, 1.52801277e+03,
+ 1.73019574e+03, 1.95913107e+03, 2.21835857e+03, 2.51188643e+03 };
+
+#endif /* LC3_PLUS_HR */
+
+ static const float *ge_table[LC3_NUM_SRATE] = {
+ [LC3_SRATE_8K ] = ge_14, [LC3_SRATE_16K ] = ge_18,
+ [LC3_SRATE_24K ] = ge_22, [LC3_SRATE_32K ] = ge_26,
+ [LC3_SRATE_48K ] = ge_30,
+
+#if LC3_PLUS_HR
+ [LC3_SRATE_48K_HR] = ge_30, [LC3_SRATE_96K_HR] = ge_34,
+#endif /* LC3_PLUS_HR */
+
};
- float e[LC3_NUM_BANDS];
+ float e[LC3_MAX_BANDS];
/* --- Copy and padding --- */
- int nb = LC3_MIN(lc3_band_lim[dt][sr][LC3_NUM_BANDS], LC3_NUM_BANDS);
- int n2 = LC3_NUM_BANDS - nb;
+ int nb = lc3_num_bands[dt][sr];
+ int n4 = nb < 32 ? 32 % nb : 0;
+ int n2 = nb < 32 ? nb - n4 : LC3_MAX_BANDS - nb;
- for (int i2 = 0; i2 < n2; i2++)
- e[2*i2 + 0] = e[2*i2 + 1] = eb[i2];
+ for (int i4 = 0; i4 < n4; i4++)
+ e[4*i4 + 0] = e[4*i4 + 1] =
+ e[4*i4 + 2] = e[4*i4 + 3] = eb[i4];
- memcpy(e + 2*n2, eb + n2, (nb - n2) * sizeof(float));
+ for (int i2 = n4; i2 < n4+n2; i2++)
+ e[2*(n4+i2) + 0] = e[2*(n4+i2) + 1] = eb[i2];
+
+ memcpy(e + 4*n4 + 2*n2, eb + n4 + n2, (nb - n4 - n2) * sizeof(float));
/* --- Smoothing, pre-emphasis and logarithm --- */
@@ -269,7 +305,7 @@ LC3_HOT static void compute_scale_factors(
float e0 = e[0], e1 = e[0], e2;
float e_sum = 0;
- for (int i = 0; i < LC3_NUM_BANDS-1; ) {
+ for (int i = 0; i < LC3_MAX_BANDS-1; ) {
e[i] = (e0 * 0.25f + e1 * 0.5f + (e2 = e[i+1]) * 0.25f) * ge[i];
e_sum += e[i++];
@@ -280,13 +316,13 @@ LC3_HOT static void compute_scale_factors(
e_sum += e[i++];
}
- e[LC3_NUM_BANDS-1] = (e0 * 0.25f + e1 * 0.75f) * ge[LC3_NUM_BANDS-1];
- e_sum += e[LC3_NUM_BANDS-1];
+ e[LC3_MAX_BANDS-1] = (e0 * 0.25f + e1 * 0.75f) * ge[LC3_MAX_BANDS-1];
+ e_sum += e[LC3_MAX_BANDS-1];
float noise_floor = fmaxf(e_sum * (1e-4f / 64), 0x1p-32f);
- for (int i = 0; i < LC3_NUM_BANDS; i++)
- e[i] = fast_log2f(fmaxf(e[i], noise_floor)) * 0.5f;
+ for (int i = 0; i < LC3_MAX_BANDS; i++)
+ e[i] = lc3_log2f(fmaxf(e[i], noise_floor)) * 0.5f;
/* --- Grouping & scaling --- */
@@ -309,8 +345,13 @@ LC3_HOT static void compute_scale_factors(
(e[61] + e[62]) * 3.f/12 ;
scf_sum += scf[15];
+ float cf = lc3_hr(sr) ? 0.6f : 0.85f;
+ if (lc3_hr(sr) && 8 * nbytes >
+ (dt < LC3_DT_10M ? 1150 * (int)(1 + dt) : 4400))
+ cf *= dt < LC3_DT_10M ? 0.25f : 0.35f;
+
for (int i = 0; i < 16; i++)
- scf[i] = 0.85f * (scf[i] - scf_sum * 1.f/16);
+ scf[i] = cf * (scf[i] - scf_sum * 1.f/16);
/* --- Attack handling --- */
@@ -564,25 +605,27 @@ LC3_HOT static void unquantize(int lfcb_idx, int hfcb_idx,
*/
static void enum_mvpq(const int *c, int n, int *idx, bool *ls)
{
- int ci, i, j;
+ int ci, i;
/* --- Scan for 1st significant coeff --- */
- for (i = 0, c += n; (ci = *(--c)) == 0 ; i++);
+ for (i = 0, c += n; (ci = *(--c)) == 0 && i < 15; i++);
*idx = 0;
*ls = ci < 0;
/* --- Scan remaining coefficients --- */
- for (i++, j = LC3_ABS(ci); i < n; i++, j += LC3_ABS(ci)) {
+ unsigned j = LC3_ABS(ci);
+
+ for (i++; i < n; i++, j += LC3_ABS(ci)) {
if ((ci = *(--c)) != 0) {
*idx = (*idx << 1) | *ls;
*ls = ci < 0;
}
- *idx += lc3_sns_mpvq_offsets[i][j];
+ *idx += lc3_sns_mpvq_offsets[i][LC3_MIN(j, 10)];
}
}
@@ -680,7 +723,7 @@ LC3_HOT static void spectral_shaping(enum lc3_dt dt, enum lc3_srate sr,
{
/* --- Interpolate scale factors --- */
- float scf[LC3_NUM_BANDS];
+ float scf[LC3_MAX_BANDS];
float s0, s1 = inv ? -scf_q[0] : scf_q[0];
scf[0] = scf[1] = s1;
@@ -694,21 +737,25 @@ LC3_HOT static void spectral_shaping(enum lc3_dt dt, enum lc3_srate sr,
scf[62] = s1 + 0.125f * (s1 - s0);
scf[63] = s1 + 0.375f * (s1 - s0);
- int nb = LC3_MIN(lc3_band_lim[dt][sr][LC3_NUM_BANDS], LC3_NUM_BANDS);
- int n2 = LC3_NUM_BANDS - nb;
+ int nb = lc3_num_bands[dt][sr];
+ int n4 = nb < 32 ? 32 % nb : 0;
+ int n2 = nb < 32 ? nb - n4 : LC3_MAX_BANDS - nb;
+
+ for (int i4 = 0; i4 < n4; i4++)
+ scf[i4] = 0.25f * (scf[4*i4+0] + scf[4*i4+1] +
+ scf[4*i4+2] + scf[4*i4+3]);
- for (int i2 = 0; i2 < n2; i2++)
- scf[i2] = 0.5f * (scf[2*i2] + scf[2*i2+1]);
+ for (int i2 = n4; i2 < n4+n2; i2++)
+ scf[i2] = 0.5f * (scf[2*(n4+i2)] + scf[2*(n4+i2)+1]);
- if (n2 > 0)
- memmove(scf + n2, scf + 2*n2, (nb - n2) * sizeof(float));
+ memmove(scf + n4 + n2, scf + 4*n4 + 2*n2, (nb - n4 - n2) * sizeof(float));
/* --- Spectral shaping --- */
const int *lim = lc3_band_lim[dt][sr];
for (int i = 0, ib = 0; ib < nb; ib++) {
- float g_sns = fast_exp2f(-scf[ib]);
+ float g_sns = lc3_exp2f(-scf[ib]);
for ( ; i < lim[ib+1]; i++)
y[i] = x[i] * g_sns;
@@ -723,7 +770,8 @@ LC3_HOT static void spectral_shaping(enum lc3_dt dt, enum lc3_srate sr,
/**
* SNS analysis
*/
-void lc3_sns_analyze(enum lc3_dt dt, enum lc3_srate sr,
+void lc3_sns_analyze(
+ enum lc3_dt dt, enum lc3_srate sr, int nbytes,
const float *eb, bool att, struct lc3_sns_data *data,
const float *x, float *y)
{
@@ -737,7 +785,7 @@ void lc3_sns_analyze(enum lc3_dt dt, enum lc3_srate sr,
float scf[16], cn[4][16];
int c[4][16];
- compute_scale_factors(dt, sr, eb, att, scf);
+ compute_scale_factors(dt, sr, nbytes, eb, att, scf);
resolve_codebooks(scf, &data->lfcb, &data->hfcb);
@@ -756,7 +804,8 @@ void lc3_sns_analyze(enum lc3_dt dt, enum lc3_srate sr,
/**
* SNS synthesis
*/
-void lc3_sns_synthesize(enum lc3_dt dt, enum lc3_srate sr,
+void lc3_sns_synthesize(
+ enum lc3_dt dt, enum lc3_srate sr,
const lc3_sns_data_t *data, const float *x, float *y)
{
float scf[16], cn[16];
diff --git a/src/sns.h b/src/sns.h
index 432223c..ecb80ef 100644
--- a/src/sns.h
+++ b/src/sns.h
@@ -16,13 +16,6 @@
*
******************************************************************************/
-/**
- * LC3 - Spectral Noise Shaping
- *
- * Reference : Low Complexity Communication Codec (LC3)
- * Bluetooth Specification v1.0
- */
-
#ifndef __LC3_SNS_H
#define __LC3_SNS_H
@@ -49,6 +42,7 @@ typedef struct lc3_sns_data {
/**
* SNS analysis
* dt, sr Duration and samplerate of the frame
+ * nbytes Size in bytes of the frame
* eb Energy estimation per bands, and count of bands
* att 1: Attack detected 0: Otherwise
* data Return bitstream data
@@ -57,7 +51,8 @@ typedef struct lc3_sns_data {
*
* `x` and `y` can be the same buffer
*/
-void lc3_sns_analyze(enum lc3_dt dt, enum lc3_srate sr,
+void lc3_sns_analyze(
+ enum lc3_dt dt, enum lc3_srate sr, int nbytes,
const float *eb, bool att, lc3_sns_data_t *data,
const float *x, float *y);
diff --git a/src/spec.c b/src/spec.c
index f857f47..25a28d4 100644
--- a/src/spec.c
+++ b/src/spec.c
@@ -32,14 +32,46 @@
*/
static int resolve_gain_offset(enum lc3_srate sr, int nbytes)
{
- int g_off = (nbytes * 8) / (10 * (1 + sr));
- return 105 + 5*(1 + sr) + LC3_MIN(g_off, 115);
+ int sr_ind = lc3_hr(sr) ? 4 + (sr - LC3_SRATE_48K_HR) : sr;
+
+ int g_off = (nbytes * 8) / (10 * (1 + sr_ind));
+ return LC3_MIN(sr >= LC3_SRATE_96K_HR ? 181 : 255,
+ 105 + 5*(1 + sr_ind) + LC3_MIN(g_off, 115));
+}
+
+/**
+ * Unquantize gain
+ * g_int Quantization gain value
+ * return Unquantized gain value
+ */
+static float unquantize_gain(int g_int)
+{
+ /* Unquantization gain table :
+ * G[i] = 10 ^ (i / 28) , i = [0..27] */
+
+ static const float iq_table[] = {
+ 1.00000000e+00, 1.08571112e+00, 1.17876863e+00, 1.27980221e+00,
+ 1.38949549e+00, 1.50859071e+00, 1.63789371e+00, 1.77827941e+00,
+ 1.93069773e+00, 2.09617999e+00, 2.27584593e+00, 2.47091123e+00,
+ 2.68269580e+00, 2.91263265e+00, 3.16227766e+00, 3.43332002e+00,
+ 3.72759372e+00, 4.04708995e+00, 4.39397056e+00, 4.77058270e+00,
+ 5.17947468e+00, 5.62341325e+00, 6.10540230e+00, 6.62870316e+00,
+ 7.19685673e+00, 7.81370738e+00, 8.48342898e+00, 9.21055318e+00
+ };
+
+ float g = 1.f;
+
+ for ( ; g_int < 0; g_int += 28, g *= 0.1f);
+ for ( ; g_int >= 28; g_int -= 28, g *= 10.f);
+
+ return g * iq_table[g_int];
}
/**
* Global Gain Estimation
* dt, sr Duration and samplerate of the frame
* x Spectral coefficients
+ * nbytes Size of the frame
* nbits_budget Number of bits available coding the spectrum
* nbits_off Offset on the available bits, temporarily smoothed
* g_off Gain index offset
@@ -49,29 +81,65 @@ static int resolve_gain_offset(enum lc3_srate sr, int nbytes)
*/
LC3_HOT static int estimate_gain(
enum lc3_dt dt, enum lc3_srate sr, const float *x,
- int nbits_budget, float nbits_off, int g_off, bool *reset_off, int *g_min)
+ int nbytes, int nbits_budget, float nbits_off, int g_off,
+ bool *reset_off, int *g_min)
{
- int ne = LC3_NE(dt, sr) >> 2;
- int e[LC3_MAX_NE];
+ int n4 = lc3_ne(dt, sr) / 4;
+ union { float f; int32_t q16; } e[LC3_MAX_NE / 4];
+
+ /* --- Signal adaptative noise floor --- */
+
+ int reg_bits = 0;
+ float low_bits = 0;
+
+ if (lc3_hr(sr)) {
+ int reg_c = (const int [LC3_NUM_DT][LC3_NUM_SRATE - LC3_SRATE_48K_HR]){
+ [LC3_DT_2M5] = { -6, -6 },
+ [LC3_DT_5M ] = { 0, 0 },
+ [LC3_DT_10M] = { 2, 5 }
+ }[dt][sr - LC3_SRATE_48K_HR];
+
+ reg_bits = (8*nbytes * 4) / (125 * (1 + dt));
+ reg_bits = LC3_CLIP(reg_bits + reg_c, 6, 23);
+
+ float m0 = 1e-5f, m1 = 1e-5f, k = 0;
+
+ for (int i = 0; i < n4; i++) {
+ m0 += fabsf(x[4*i + 0]), m1 += fabsf(x[4*i + 0]) * k++;
+ m0 += fabsf(x[4*i + 1]), m1 += fabsf(x[4*i + 1]) * k++;
+ m0 += fabsf(x[4*i + 2]), m1 += fabsf(x[4*i + 2]) * k++;
+ m0 += fabsf(x[4*i + 3]), m1 += fabsf(x[4*i + 3]) * k++;
+ }
+
+ int m = roundf((1.6f * m0) / ((1 + dt) * m1));
+ low_bits = 8 - LC3_MIN(m, 8);
+ }
/* --- Energy (dB) by 4 MDCT blocks --- */
float x2_max = 0;
- for (int i = 0; i < ne; i++, x += 4) {
- float x0 = x[0] * x[0];
- float x1 = x[1] * x[1];
- float x2 = x[2] * x[2];
- float x3 = x[3] * x[3];
+ for (int i = 0; i < n4; i++) {
+ float x0 = x[4*i + 0] * x[4*i + 0];
+ float x1 = x[4*i + 1] * x[4*i + 1];
+ float x2 = x[4*i + 2] * x[4*i + 2];
+ float x3 = x[4*i + 3] * x[4*i + 3];
x2_max = fmaxf(x2_max, x0);
x2_max = fmaxf(x2_max, x1);
x2_max = fmaxf(x2_max, x2);
x2_max = fmaxf(x2_max, x3);
- e[i] = fast_db_q16(fmaxf(x0 + x1 + x2 + x3, 1e-10f));
+ e[i].f = x0 + x1 + x2 + x3;
}
+ float x_max = sqrtf(x2_max);
+ float nf = lc3_hr(sr) ?
+ lc3_ldexpf(x_max, -reg_bits) * lc3_exp2f(-low_bits) : 0;
+
+ for (int i = 0; i < n4; i++)
+ e[i].q16 = lc3_db_q16(fmaxf(e[i].f + nf, 1e-10f));
+
/* --- Determine gain index --- */
int nbits = nbits_budget + nbits_off + 0.5f;
@@ -81,14 +149,14 @@ LC3_HOT static int estimate_gain(
const int k_2u7 = 2.7f * 0x1p16f + 0.5f;
const int k_1u4 = 1.4f * 0x1p16f + 0.5f;
- for (int i = 128, j, j0 = ne-1, j1 ; i > 0; i >>= 1) {
+ for (int i = 128, j, j0 = n4-1, j1 ; i > 0; i >>= 1) {
int gn = (g_int - i) * k_20_28;
int v = 0;
- for (j = j0; j >= 0 && e[j] < gn; j--);
+ for (j = j0; j >= 0 && e[j].q16 < gn; j--);
for (j1 = j; j >= 0; j--) {
- int e_diff = e[j] - gn;
+ int e_diff = e[j].q16 - gn;
v += e_diff < 0 ? k_2u7 :
e_diff < 43 << 16 ? e_diff + ( 7 << 16)
@@ -103,10 +171,14 @@ LC3_HOT static int estimate_gain(
/* --- Limit gain index --- */
- *g_min = x2_max == 0 ? -g_off :
- ceilf(28 * log10f(sqrtf(x2_max) / (32768 - 0.375f)));
+ float x_lim = lc3_hr(sr) ? 0x7fffp8f : 0x7fffp0f;
+
+ *g_min = 255 - g_off;
+ for (int i = 128 ; i > 0; i >>= 1)
+ if (x_lim * unquantize_gain(*g_min - i) > x_max)
+ *g_min -= i;
- *reset_off = g_int < *g_min || x2_max == 0;
+ *reset_off = g_int < *g_min || x_max == 0;
if (*reset_off)
g_int = *g_min;
@@ -115,21 +187,23 @@ LC3_HOT static int estimate_gain(
/**
* Global Gain Adjustment
- * sr Samplerate of the frame
+ * dt, sr Duration and samplerate of the frame
* g_idx The estimated quantized gain index
* nbits Computed number of bits coding the spectrum
* nbits_budget Number of bits available for coding the spectrum
* g_idx_min Minimum gain index value
* return Gain adjust value (-1 to 2)
*/
-LC3_HOT static int adjust_gain(enum lc3_srate sr, int g_idx,
- int nbits, int nbits_budget, int g_idx_min)
+LC3_HOT static int adjust_gain(
+ enum lc3_dt dt, enum lc3_srate sr,
+ int g_idx, int nbits, int nbits_budget, int g_idx_min)
{
/* --- Compute delta threshold --- */
const int *t = (const int [LC3_NUM_SRATE][3]){
{ 80, 500, 850 }, { 230, 1025, 1700 }, { 380, 1550, 2550 },
- { 530, 2075, 3400 }, { 680, 2600, 4250 }
+ { 530, 2075, 3400 }, { 680, 2600, 4250 },
+ { 680, 2600, 4250 }, { 830, 3125, 5100 }
}[sr];
int delta, den = 48;
@@ -150,84 +224,46 @@ LC3_HOT static int adjust_gain(enum lc3_srate sr, int g_idx,
/* --- Adjust gain --- */
- if (nbits < nbits_budget - (delta + 2))
+ if (lc3_hr(sr) && nbits > nbits_budget) {
+ int factor = 1 + (dt <= LC3_DT_5M) +
+ (dt <= LC3_DT_2M5) * (1 + (nbits >= 520));
+
+ int g_incr = factor + (factor * (nbits - nbits_budget)) / delta;
+ return LC3_MIN(g_idx + g_incr, 255) - g_idx;
+ }
+
+ if (!lc3_hr(sr) && nbits < nbits_budget - (delta + 2))
return -(g_idx > g_idx_min);
- if (nbits > nbits_budget)
+ if (!lc3_hr(sr) && nbits > nbits_budget)
return (g_idx < 255) + (g_idx < 254 && nbits >= nbits_budget + delta);
return 0;
}
/**
- * Unquantize gain
- * g_int Quantization gain value
- * return Unquantized gain value
- */
-static float unquantize_gain(int g_int)
-{
- /* Unquantization gain table :
- * G[i] = 10 ^ (i / 28) , i = [0..64] */
-
- static const float iq_table[] = {
- 1.00000000e+00, 1.08571112e+00, 1.17876863e+00, 1.27980221e+00,
- 1.38949549e+00, 1.50859071e+00, 1.63789371e+00, 1.77827941e+00,
- 1.93069773e+00, 2.09617999e+00, 2.27584593e+00, 2.47091123e+00,
- 2.68269580e+00, 2.91263265e+00, 3.16227766e+00, 3.43332002e+00,
- 3.72759372e+00, 4.04708995e+00, 4.39397056e+00, 4.77058270e+00,
- 5.17947468e+00, 5.62341325e+00, 6.10540230e+00, 6.62870316e+00,
- 7.19685673e+00, 7.81370738e+00, 8.48342898e+00, 9.21055318e+00,
- 1.00000000e+01, 1.08571112e+01, 1.17876863e+01, 1.27980221e+01,
- 1.38949549e+01, 1.50859071e+01, 1.63789371e+01, 1.77827941e+01,
- 1.93069773e+01, 2.09617999e+01, 2.27584593e+01, 2.47091123e+01,
- 2.68269580e+01, 2.91263265e+01, 3.16227766e+01, 3.43332002e+01,
- 3.72759372e+01, 4.04708995e+01, 4.39397056e+01, 4.77058270e+01,
- 5.17947468e+01, 5.62341325e+01, 6.10540230e+01, 6.62870316e+01,
- 7.19685673e+01, 7.81370738e+01, 8.48342898e+01, 9.21055318e+01,
- 1.00000000e+02, 1.08571112e+02, 1.17876863e+02, 1.27980221e+02,
- 1.38949549e+02, 1.50859071e+02, 1.63789371e+02, 1.77827941e+02,
- 1.93069773e+02
- };
-
- float g = iq_table[LC3_ABS(g_int) & 0x3f];
- for(int n64 = LC3_ABS(g_int) >> 6; n64--; )
- g *= iq_table[64];
-
- return g_int >= 0 ? g : 1 / g;
-}
-
-/**
* Spectrum quantization
* dt, sr Duration and samplerate of the frame
* g_int Quantization gain value
* x Spectral coefficients, scaled as output
- * xq, nq Output spectral quantized coefficients, and count
- *
- * The spectral coefficients `xq` are stored as :
- * b0 0:positive or zero 1:negative
- * b15..b1 Absolute value
+ * n Return count of significants
*/
-LC3_HOT static void quantize(enum lc3_dt dt, enum lc3_srate sr,
- int g_int, float *x, uint16_t *xq, int *nq)
+LC3_HOT static void quantize(
+ enum lc3_dt dt, enum lc3_srate sr, int g_int, float *x, int *n)
{
- float g_inv = 1 / unquantize_gain(g_int);
- int ne = LC3_NE(dt, sr);
+ float g_inv = unquantize_gain(-g_int);
+ int ne = lc3_ne(dt, sr);
- *nq = ne;
+ *n = ne;
for (int i = 0; i < ne; i += 2) {
- uint16_t x0, x1;
+ float xq_min = lc3_hr(sr) ? 0.5f : 10.f/16;
x[i+0] *= g_inv;
x[i+1] *= g_inv;
- x0 = fminf(fabsf(x[i+0]) + 6.f/16, INT16_MAX);
- x1 = fminf(fabsf(x[i+1]) + 6.f/16, INT16_MAX);
-
- xq[i+0] = (x0 << 1) + ((x0 > 0) & (x[i+0] < 0));
- xq[i+1] = (x1 << 1) + ((x1 > 0) & (x[i+1] < 0));
-
- *nq = x0 || x1 ? ne : *nq - 2;
+ *n = fabsf(x[i+0]) >= xq_min ||
+ fabsf(x[i+1]) >= xq_min ? ne : *n - 2;
}
}
@@ -238,11 +274,12 @@ LC3_HOT static void quantize(enum lc3_dt dt, enum lc3_srate sr,
* x, nq Spectral quantized, and count of significants
* return Unquantized gain value
*/
-LC3_HOT static float unquantize(enum lc3_dt dt, enum lc3_srate sr,
+LC3_HOT static float unquantize(
+ enum lc3_dt dt, enum lc3_srate sr,
int g_int, float *x, int nq)
{
float g = unquantize_gain(g_int);
- int i, ne = LC3_NE(dt, sr);
+ int i, ne = lc3_ne(dt, sr);
for (i = 0; i < nq; i++)
x[i] = x[i] * g;
@@ -259,13 +296,19 @@ LC3_HOT static float unquantize(enum lc3_dt dt, enum lc3_srate sr,
* -------------------------------------------------------------------------- */
/**
- * Resolve High-bitrate mode according size of the frame
+ * Resolve High-bitrate and LSB modes according size of the frame
* sr, nbytes Samplerate and size of the frame
+ * p_lsb_mode True when LSB mode allowed, when not NULL
* return True when High-Rate mode enabled
*/
-static int resolve_high_rate(enum lc3_srate sr, int nbytes)
+static bool resolve_modes(enum lc3_srate sr, int nbytes, bool *p_lsb_mode)
{
- return nbytes > 20 * (1 + (int)sr);
+ int sr_ind = lc3_hr(sr) ? 4 + (sr - LC3_SRATE_48K_HR) : sr;
+
+ if (p_lsb_mode)
+ *p_lsb_mode = (nbytes >= 20 * (3 + sr_ind)) && (sr < LC3_SRATE_96K_HR);
+
+ return (nbytes > 20 * (1 + sr_ind)) && (sr < LC3_SRATE_96K_HR);
}
/**
@@ -276,21 +319,13 @@ static int resolve_high_rate(enum lc3_srate sr, int nbytes)
* nbits_budget Truncate to stay in budget, when not zero
* p_lsb_mode Return True when LSB's are not AC coded, or NULL
* return The number of bits coding the spectrum
- *
- * The spectral coefficients `x` storage is :
- * b0 0:positive or zero 1:negative
- * b15..b1 Absolute value
*/
LC3_HOT static int compute_nbits(
enum lc3_dt dt, enum lc3_srate sr, int nbytes,
- const uint16_t *x, int *n, int nbits_budget, bool *p_lsb_mode)
+ const float *x, int *n, int nbits_budget, bool *p_lsb_mode)
{
- int ne = LC3_NE(dt, sr);
-
- /* --- Mode and rate --- */
-
- bool lsb_mode = nbytes >= 20 * (3 + (int)sr);
- bool high_rate = resolve_high_rate(sr, nbytes);
+ bool lsb_mode, high_rate = resolve_modes(sr, nbytes, &lsb_mode);
+ int ne = lc3_ne(dt, sr);
/* --- Loop on quantized coefficients --- */
@@ -308,12 +343,15 @@ LC3_HOT static int compute_nbits(
for ( ; i < LC3_MIN(*n, (ne + 2) >> (1 - h))
&& nbits <= nbits_budget; i += 2) {
+ float xq_off = lc3_hr(sr) ? 0.5f : 6.f/16;
+ uint32_t a = fabsf(x[i+0]) + xq_off;
+ uint32_t b = fabsf(x[i+1]) + xq_off;
+
const uint8_t *lut = lut_coeff[state];
- uint16_t a = x[i] >> 1, b = x[i+1] >> 1;
/* --- Sign values --- */
- int s = (a > 0) + (b > 0);
+ int s = (a != 0) + (b != 0);
nbits += s * 2048;
/* --- LSB values Reduce to 2*2 bits MSB values ---
@@ -322,8 +360,8 @@ LC3_HOT static int compute_nbits(
* The LSB mode does not arthmetic code the first LSB,
* add the sign of the LSB when one of pair was at value 1 */
- int k = 0;
- int m = (a | b) >> 2;
+ uint32_t m = (a | b) >> 2;
+ unsigned k = 0;
if (m) {
@@ -375,19 +413,15 @@ LC3_HOT static int compute_nbits(
* Put quantized spectrum
* bits Bitstream context
* dt, sr, nbytes Duration, samplerate and size of the frame
- * x Spectral quantized
+ * x Spectral quantized coefficients
* nq, lsb_mode Count of significants, and LSB discard indication
- *
- * The spectral coefficients `x` storage is :
- * b0 0:positive or zero 1:negative
- * b15..b1 Absolute value
*/
LC3_HOT static void put_quantized(lc3_bits_t *bits,
enum lc3_dt dt, enum lc3_srate sr, int nbytes,
- const uint16_t *x, int nq, bool lsb_mode)
+ const float *x, int nq, bool lsb_mode)
{
- int ne = LC3_NE(dt, sr);
- bool high_rate = resolve_high_rate(sr, nbytes);
+ bool high_rate = resolve_modes(sr, nbytes, NULL);
+ int ne = lc3_ne(dt, sr);
/* --- Loop on quantized coefficients --- */
@@ -398,16 +432,19 @@ LC3_HOT static void put_quantized(lc3_bits_t *bits,
for ( ; i < LC3_MIN(nq, (ne + 2) >> (1 - h)); i += 2) {
+ float xq_off = lc3_hr(sr) ? 0.5f : 6.f/16;
+ uint32_t a = fabsf(x[i+0]) + xq_off;
+ uint32_t b = fabsf(x[i+1]) + xq_off;
+
const uint8_t *lut = lut_coeff[state];
- uint16_t a = x[i] >> 1, b = x[i+1] >> 1;
/* --- LSB values Reduce to 2*2 bits MSB values ---
* Reduce to 2x2 bits MSB values. The LSB's pair are arithmetic
* coded with an escape code and 1 bits for each values.
* The LSB mode discard the first LSB (at this step) */
- int m = (a | b) >> 2;
- int k = 0, shr = 0;
+ uint32_t m = (a | b) >> 2;
+ unsigned k = 0, shr = 0;
if (m) {
@@ -431,8 +468,8 @@ LC3_HOT static void put_quantized(lc3_bits_t *bits,
/* --- Sign values --- */
- if (a) lc3_put_bit(bits, x[i+0] & 1);
- if (b) lc3_put_bit(bits, x[i+1] & 1);
+ if (a) lc3_put_bit(bits, x[i+0] < 0);
+ if (b) lc3_put_bit(bits, x[i+1] < 0);
/* --- MSB values --- */
@@ -453,18 +490,18 @@ LC3_HOT static void put_quantized(lc3_bits_t *bits,
* bits Bitstream context
* dt, sr, nbytes Duration, samplerate and size of the frame
* nq, lsb_mode Count of significants, and LSB discard indication
- * xq Return `nq` spectral quantized coefficients
+ * x Return `nq` spectral quantized coefficients
* nf_seed Return the noise factor seed associated
* return 0: Ok -1: Invalid bitstream data
*/
LC3_HOT static int get_quantized(lc3_bits_t *bits,
enum lc3_dt dt, enum lc3_srate sr, int nbytes,
- int nq, bool lsb_mode, float *xq, uint16_t *nf_seed)
+ int nq, bool lsb_mode, float *x, uint16_t *nf_seed)
{
- int ne = LC3_NE(dt, sr);
- bool high_rate = resolve_high_rate(sr, nbytes);
+ bool high_rate = resolve_modes(sr, nbytes, NULL);
+ int ne = lc3_ne(dt, sr);
- *nf_seed = 0;
+ *nf_seed = 0;
/* --- Loop on quantized coefficients --- */
@@ -476,6 +513,7 @@ LC3_HOT static int get_quantized(lc3_bits_t *bits,
for ( ; i < LC3_MIN(nq, (ne + 2) >> (1 - h)); i += 2) {
const uint8_t *lut = lut_coeff[state];
+ int max_shl = lc3_hr(sr) ? 22 : 14;
/* --- LSB values ---
* Until the symbol read indicates the escape value 16,
@@ -492,7 +530,7 @@ LC3_HOT static int get_quantized(lc3_bits_t *bits,
shl++;
}
- for ( ; s >= 16 && shl < 14; shl++) {
+ for ( ; s >= 16 && shl < max_shl; shl++) {
u |= lc3_get_bit(bits) << shl;
v |= lc3_get_bit(bits) << shl;
@@ -511,10 +549,11 @@ LC3_HOT static int get_quantized(lc3_bits_t *bits,
u |= a << shl;
v |= b << shl;
- xq[i ] = u && lc3_get_bit(bits) ? -u : u;
- xq[i+1] = v && lc3_get_bit(bits) ? -v : v;
+ x[i+0] = u && lc3_get_bit(bits) ? -u : u;
+ x[i+1] = v && lc3_get_bit(bits) ? -v : v;
- *nf_seed = (*nf_seed + u * i + v * (i+1)) & 0xffff;
+ *nf_seed = (*nf_seed + (u & 0x7fff) * (i )
+ + (v & 0x7fff) * (i+1)) & 0xffff;
/* --- Update state --- */
@@ -529,25 +568,30 @@ LC3_HOT static int get_quantized(lc3_bits_t *bits,
* Put residual bits of quantization
* bits Bitstream context
* nbits Maximum number of bits to output
+ * hrmode High-Resolution mode
* x, n Spectral quantized, and count of significants
- * xf Scaled spectral coefficients
- *
- * The spectral coefficients `x` storage is :
- * b0 0:positive or zero 1:negative
- * b15..b1 Absolute value
*/
-LC3_HOT static void put_residual(
- lc3_bits_t *bits, int nbits, const uint16_t *x, int n, const float *xf)
+LC3_HOT static void put_residual(lc3_bits_t *bits,
+ int nbits, bool hrmode, float *x, int n)
{
- for (int i = 0; i < n && nbits > 0; i++) {
+ float xq_lim = hrmode ? 0.5f : 10.f/16;
+ float xq_off = xq_lim / 2;
- if (x[i] == 0)
- continue;
+ for (int iter = 0; iter < (hrmode ? 20 : 1) && nbits > 0; iter++) {
+ for (int i = 0; i < n && nbits > 0; i++) {
- float xq = x[i] & 1 ? -(x[i] >> 1) : (x[i] >> 1);
+ float xr = fabsf(x[i]);
+ if (xr < xq_lim)
+ continue;
- lc3_put_bit(bits, xf[i] >= xq);
- nbits--;
+ bool b = (xr - truncf(xr) < xq_lim) ^ (x[i] < 0);
+ lc3_put_bit(bits, b);
+ nbits--;
+
+ x[i] += b ? -xq_off : xq_off;
+ }
+
+ xq_off *= xq_lim;
}
}
@@ -555,22 +599,31 @@ LC3_HOT static void put_residual(
* Get residual bits of quantization
* bits Bitstream context
* nbits Maximum number of bits to output
+ * hrmode High-Resolution mode
* x, nq Spectral quantized, and count of significants
*/
-LC3_HOT static void get_residual(
- lc3_bits_t *bits, int nbits, float *x, int nq)
+LC3_HOT static void get_residual(lc3_bits_t *bits,
+ int nbits, bool hrmode, float *x, int n)
{
- for (int i = 0; i < nq && nbits > 0; i++) {
+ float xq_off_1 = hrmode ? 0.25f : 5.f/16;
+ float xq_off_2 = hrmode ? 0.25f : 3.f/16;
- if (x[i] == 0)
- continue;
+ for (int iter = 0; iter < (hrmode ? 20 : 1) && nbits > 0; iter++) {
+ for (int i = 0; i < n && nbits > 0; i++) {
- if (lc3_get_bit(bits) == 0)
- x[i] -= x[i] < 0 ? 5.f/16 : 3.f/16;
- else
- x[i] += x[i] > 0 ? 5.f/16 : 3.f/16;
+ if (x[i] == 0)
+ continue;
- nbits--;
+ if (lc3_get_bit(bits) == 0)
+ x[i] -= x[i] < 0 ? xq_off_1 : xq_off_2;
+ else
+ x[i] += x[i] > 0 ? xq_off_1 : xq_off_2;
+
+ nbits--;
+ }
+
+ xq_off_1 *= 0.5f;
+ xq_off_2 *= 0.5f;
}
}
@@ -578,18 +631,17 @@ LC3_HOT static void get_residual(
* Put LSB values of quantized spectrum values
* bits Bitstream context
* nbits Maximum number of bits to output
+ * hrmode High-Resolution mode
* x, n Spectral quantized, and count of significants
- *
- * The spectral coefficients `x` storage is :
- * b0 0:positive or zero 1:negative
- * b15..b1 Absolute value
*/
-LC3_HOT static void put_lsb(
- lc3_bits_t *bits, int nbits, const uint16_t *x, int n)
+LC3_HOT static void put_lsb(lc3_bits_t *bits,
+ int nbits, bool hrmode, const float *x, int n)
{
for (int i = 0; i < n && nbits > 0; i += 2) {
- uint16_t a = x[i] >> 1, b = x[i+1] >> 1;
- int a_neg = x[i] & 1, b_neg = x[i+1] & 1;
+
+ float xq_off = hrmode ? 0.5f : 6.f/16;
+ uint32_t a = fabsf(x[i+0]) + xq_off;
+ uint32_t b = fabsf(x[i+1]) + xq_off;
if ((a | b) >> 2 == 0)
continue;
@@ -598,13 +650,13 @@ LC3_HOT static void put_lsb(
lc3_put_bit(bits, a & 1);
if (a == 1 && nbits-- > 0)
- lc3_put_bit(bits, a_neg);
+ lc3_put_bit(bits, x[i+0] < 0);
if (nbits-- > 0)
lc3_put_bit(bits, b & 1);
if (b == 1 && nbits-- > 0)
- lc3_put_bit(bits, b_neg);
+ lc3_put_bit(bits, x[i+1] < 0);
}
}
@@ -655,34 +707,31 @@ LC3_HOT static void get_lsb(lc3_bits_t *bits,
/**
* Estimate noise level
* dt, bw Duration and bandwidth of the frame
- * xq, nq Quantized spectral coefficients
- * x Quantization scaled spectrum coefficients
+ * hrmode High-Resolution mode
+ * x, n Spectral quantized, and count of significants
* return Noise factor (0 to 7)
- *
- * The spectral coefficients `x` storage is :
- * b0 0:positive or zero 1:negative
- * b15..b1 Absolute value
*/
-LC3_HOT static int estimate_noise(enum lc3_dt dt, enum lc3_bandwidth bw,
- const uint16_t *xq, int nq, const float *x)
+LC3_HOT static int estimate_noise(
+ enum lc3_dt dt, enum lc3_bandwidth bw, bool hrmode, const float *x, int n)
{
- int bw_stop = (dt == LC3_DT_7M5 ? 60 : 80) * (1 + bw);
- int w = 2 + dt;
+ int bw_stop = lc3_ne(dt, (enum lc3_srate)LC3_MIN(bw, LC3_BANDWIDTH_FB));
+ int w = 1 + (dt >= LC3_DT_7M5) + (dt>= LC3_DT_10M);
+ float xq_lim = hrmode ? 0.5f : 10.f/16;
float sum = 0;
- int i, n = 0, z = 0;
+ int i, ns = 0, z = 0;
- for (i = 6*(3 + dt) - w; i < LC3_MIN(nq, bw_stop); i++) {
- z = xq[i] ? 0 : z + 1;
+ for (i = 6 * (1 + dt) - w; i < LC3_MIN(n, bw_stop); i++) {
+ z = fabsf(x[i]) < xq_lim ? z + 1 : 0;
if (z > 2*w)
- sum += fabsf(x[i - w]), n++;
+ sum += fabsf(x[i - w]), ns++;
}
for ( ; i < bw_stop + w; i++)
if (++z > 2*w)
- sum += fabsf(x[i - w]), n++;
+ sum += fabsf(x[i - w]), ns++;
- int nf = n ? 8 - (int)((16 * sum) / n + 0.5f) : 0;
+ int nf = ns ? 8 - (int)((16 * sum) / ns + 0.5f) : 8;
return LC3_CLIP(nf, 0, 7);
}
@@ -697,13 +746,13 @@ LC3_HOT static int estimate_noise(enum lc3_dt dt, enum lc3_bandwidth bw,
LC3_HOT static void fill_noise(enum lc3_dt dt, enum lc3_bandwidth bw,
int nf, uint16_t nf_seed, float g, float *x, int nq)
{
- int bw_stop = (dt == LC3_DT_7M5 ? 60 : 80) * (1 + bw);
- int w = 2 + dt;
+ int bw_stop = lc3_ne(dt, (enum lc3_srate)LC3_MIN(bw, LC3_BANDWIDTH_FB));
+ int w = 1 + (dt >= LC3_DT_7M5) + (dt>= LC3_DT_10M);
float s = g * (float)(8 - nf) / 16;
int i, z = 0;
- for (i = 6*(3 + dt) - w; i < LC3_MIN(nq, bw_stop); i++) {
+ for (i = 6 * (1 + dt) - w; i < LC3_MIN(nq, bw_stop); i++) {
z = x[i] ? 0 : z + 1;
if (z > 2*w) {
nf_seed = (13849 + nf_seed*31821) & 0xffff;
@@ -745,13 +794,13 @@ static int get_noise_factor(lc3_bits_t *bits)
/**
* Bit consumption of the number of coded coefficients
- * dt, sr Duration, samplerate of the frame
+ * dt, sr, nbytes Duration, samplerate and size of the frame
* return Bit consumpution of the number of coded coefficients
*/
static int get_nbits_nq(enum lc3_dt dt, enum lc3_srate sr)
{
- int ne = LC3_NE(dt, sr);
- return 4 + (ne > 32) + (ne > 64) + (ne > 128) + (ne > 256);
+ int ne = lc3_ne(dt, sr);
+ return 4 + (ne > 32) + (ne > 64) + (ne > 128) + (ne > 256) + (ne > 512);
}
/**
@@ -761,16 +810,18 @@ static int get_nbits_nq(enum lc3_dt dt, enum lc3_srate sr)
*/
static int get_nbits_ac(enum lc3_dt dt, enum lc3_srate sr, int nbytes)
{
- return get_nbits_nq(dt, sr) + 3 + LC3_MIN((nbytes-1) / 160, 2);
+ return get_nbits_nq(dt, sr) +
+ 3 + lc3_hr(sr) + LC3_MIN((nbytes-1) / 160, 2);
}
/**
* Spectrum analysis
*/
-void lc3_spec_analyze(enum lc3_dt dt, enum lc3_srate sr,
- int nbytes, bool pitch, const lc3_tns_data_t *tns,
- struct lc3_spec_analysis *spec, float *x,
- uint16_t *xq, struct lc3_spec_side *side)
+void lc3_spec_analyze(
+ enum lc3_dt dt, enum lc3_srate sr, int nbytes,
+ bool pitch, const lc3_tns_data_t *tns,
+ struct lc3_spec_analysis *spec,
+ float *x, struct lc3_spec_side *side)
{
bool reset_off;
@@ -792,35 +843,36 @@ void lc3_spec_analyze(enum lc3_dt dt, enum lc3_srate sr,
int g_off = resolve_gain_offset(sr, nbytes);
int g_min, g_int = estimate_gain(dt, sr,
- x, nbits_budget, nbits_off, g_off, &reset_off, &g_min);
+ x, nbytes, nbits_budget, nbits_off, g_off, &reset_off, &g_min);
/* --- Quantization --- */
- quantize(dt, sr, g_int, x, xq, &side->nq);
+ quantize(dt, sr, g_int, x, &side->nq);
- int nbits = compute_nbits(dt, sr, nbytes, xq, &side->nq, 0, NULL);
+ int nbits = compute_nbits(dt, sr, nbytes, x, &side->nq, 0, NULL);
spec->nbits_off = reset_off ? 0 : nbits_off;
spec->nbits_spare = reset_off ? 0 : nbits_budget - nbits;
/* --- Adjust gain and requantize --- */
- int g_adj = adjust_gain(sr, g_off + g_int,
- nbits, nbits_budget, g_off + g_min);
+ int g_adj = adjust_gain(dt, sr,
+ g_off + g_int, nbits, nbits_budget, g_off + g_min);
if (g_adj)
- quantize(dt, sr, g_adj, x, xq, &side->nq);
+ quantize(dt, sr, g_adj, x, &side->nq);
side->g_idx = g_int + g_adj + g_off;
nbits = compute_nbits(dt, sr, nbytes,
- xq, &side->nq, nbits_budget, &side->lsb_mode);
+ x, &side->nq, nbits_budget, &side->lsb_mode);
}
/**
* Put spectral quantization side data
*/
void lc3_spec_put_side(lc3_bits_t *bits,
- enum lc3_dt dt, enum lc3_srate sr, const struct lc3_spec_side *side)
+ enum lc3_dt dt, enum lc3_srate sr,
+ const struct lc3_spec_side *side)
{
int nbits_nq = get_nbits_nq(dt, sr);
@@ -833,22 +885,22 @@ void lc3_spec_put_side(lc3_bits_t *bits,
* Encode spectral coefficients
*/
void lc3_spec_encode(lc3_bits_t *bits,
- enum lc3_dt dt, enum lc3_srate sr, enum lc3_bandwidth bw, int nbytes,
- const uint16_t *xq, const lc3_spec_side_t *side, const float *x)
+ enum lc3_dt dt, enum lc3_srate sr, enum lc3_bandwidth bw,
+ int nbytes, const lc3_spec_side_t *side, float *x)
{
bool lsb_mode = side->lsb_mode;
int nq = side->nq;
- put_noise_factor(bits, estimate_noise(dt, bw, xq, nq, x));
+ put_noise_factor(bits, estimate_noise(dt, bw, lc3_hr(sr), x, nq));
- put_quantized(bits, dt, sr, nbytes, xq, nq, lsb_mode);
+ put_quantized(bits, dt, sr, nbytes, x, nq, lsb_mode);
int nbits_left = lc3_get_bits_left(bits);
if (lsb_mode)
- put_lsb(bits, nbits_left, xq, nq);
+ put_lsb(bits, nbits_left, lc3_hr(sr), x, nq);
else
- put_residual(bits, nbits_left, xq, nq, x);
+ put_residual(bits, nbits_left, lc3_hr(sr), x, nq);
}
@@ -863,7 +915,7 @@ int lc3_spec_get_side(lc3_bits_t *bits,
enum lc3_dt dt, enum lc3_srate sr, struct lc3_spec_side *side)
{
int nbits_nq = get_nbits_nq(dt, sr);
- int ne = LC3_NE(dt, sr);
+ int ne = lc3_ne(dt, sr);
side->nq = (lc3_get_bits(bits, nbits_nq) + 1) << 1;
side->lsb_mode = lc3_get_bit(bits);
@@ -895,7 +947,7 @@ int lc3_spec_decode(lc3_bits_t *bits,
if (lsb_mode)
get_lsb(bits, nbits_left, x, nq, &nf_seed);
else
- get_residual(bits, nbits_left, x, nq);
+ get_residual(bits, nbits_left, lc3_hr(sr), x, nq);
int g_int = side->g_idx - resolve_gain_offset(sr, nbytes);
float g = unquantize(dt, sr, g_int, x, nq);
diff --git a/src/spec.h b/src/spec.h
index 091d25f..9284363 100644
--- a/src/spec.h
+++ b/src/spec.h
@@ -16,13 +16,6 @@
*
******************************************************************************/
-/**
- * LC3 - Spectral coefficients encoding/decoding
- *
- * Reference : Low Complexity Communication Codec (LC3)
- * Bluetooth Specification v1.0
- */
-
#ifndef __LC3_SPEC_H
#define __LC3_SPEC_H
@@ -53,15 +46,12 @@ typedef struct lc3_spec_side {
* pitch, tns Pitch present indication and TNS bistream data
* spec Context of analysis
* x Spectral coefficients, scaled as output
- * xq, side Return quantization data
- *
- * The spectral coefficients `xq` storage is :
- * b0 0:positive or zero 1:negative
- * b15..b1 Absolute value
+ * side Return quantization data
*/
-void lc3_spec_analyze(enum lc3_dt dt, enum lc3_srate sr,
- int nbytes, bool pitch, const lc3_tns_data_t *tns,
- lc3_spec_analysis_t *spec, float *x, uint16_t *xq, lc3_spec_side_t *side);
+void lc3_spec_analyze(
+ enum lc3_dt dt, enum lc3_srate sr, int nbytes,
+ bool pitch, const lc3_tns_data_t *tns, lc3_spec_analysis_t *spec,
+ float *x, lc3_spec_side_t *side);
/**
* Put spectral quantization side data
@@ -77,16 +67,11 @@ void lc3_spec_put_side(lc3_bits_t *bits,
* bits Bitstream context
* dt, sr, bw Duration, samplerate, bandwidth
* nbytes and size of the frame
- * xq, side Quantization data
- * x Scaled spectral coefficients
- *
- * The spectral coefficients `xq` storage is :
- * b0 0:positive or zero 1:negative
- * b15..b1 Absolute value
+ * side, x Quantization data, and scaled coefficients
*/
void lc3_spec_encode(lc3_bits_t *bits,
- enum lc3_dt dt, enum lc3_srate sr, enum lc3_bandwidth bw, int nbytes,
- const uint16_t *xq, const lc3_spec_side_t *side, const float *x);
+ enum lc3_dt dt, enum lc3_srate sr, enum lc3_bandwidth bw,
+ int nbytes, const lc3_spec_side_t *side, float *x);
/* ----------------------------------------------------------------------------
@@ -112,8 +97,9 @@ int lc3_spec_get_side(lc3_bits_t *bits,
* x Spectral coefficients
* return 0: Ok -1: Invalid bitstream data
*/
-int lc3_spec_decode(lc3_bits_t *bits, enum lc3_dt dt, enum lc3_srate sr,
- enum lc3_bandwidth bw, int nbytes, const lc3_spec_side_t *side, float *x);
+int lc3_spec_decode(lc3_bits_t *bits,
+ enum lc3_dt dt, enum lc3_srate sr, enum lc3_bandwidth bw,
+ int nbytes, const lc3_spec_side_t *side, float *x);
#endif /* __LC3_SPEC_H */
diff --git a/src/tables.c b/src/tables.c
index c498b5e..947813d 100644
--- a/src/tables.c
+++ b/src/tables.c
@@ -20,6 +20,61 @@
/**
+ * Characteristics
+ */
+
+const int lc3_ns_2m5[LC3_NUM_SRATE] = {
+ [LC3_SRATE_8K ] = LC3_NS(2500, 8000),
+ [LC3_SRATE_16K ] = LC3_NS(2500, 16000),
+ [LC3_SRATE_24K ] = LC3_NS(2500, 24000),
+ [LC3_SRATE_32K ] = LC3_NS(2500, 32000),
+ [LC3_SRATE_48K ] = LC3_NS(2500, 48000),
+ [LC3_SRATE_48K_HR] = LC3_NS(2500, 48000),
+ [LC3_SRATE_96K_HR] = LC3_NS(2500, 96000),
+};
+
+const int lc3_ne_2m5[LC3_NUM_SRATE] = {
+ [LC3_SRATE_8K ] = LC3_NS(2500, 8000),
+ [LC3_SRATE_16K ] = LC3_NS(2500, 16000),
+ [LC3_SRATE_24K ] = LC3_NS(2500, 24000),
+ [LC3_SRATE_32K ] = LC3_NS(2500, 32000),
+ [LC3_SRATE_48K ] = LC3_NS(2500, 40000),
+ [LC3_SRATE_48K_HR] = LC3_NS(2500, 48000),
+ [LC3_SRATE_96K_HR] = LC3_NS(2500, 96000),
+};
+
+const int lc3_ns_4m[LC3_NUM_SRATE] = {
+ [LC3_SRATE_8K ] = LC3_NS(4000, 8000),
+ [LC3_SRATE_16K ] = LC3_NS(4000, 16000),
+ [LC3_SRATE_24K ] = LC3_NS(4000, 24000),
+ [LC3_SRATE_32K ] = LC3_NS(4000, 32000),
+ [LC3_SRATE_48K ] = LC3_NS(4000, 48000),
+ [LC3_SRATE_48K_HR] = LC3_NS(4000, 48000),
+ [LC3_SRATE_96K_HR] = LC3_NS(4000, 96000),
+};
+
+
+/**
+ * Limits on size of frame
+ * For fallback operation, half-size should be accepted.
+ */
+
+const int lc3_frame_bytes_hr_lim
+ [LC3_NUM_DT][LC3_NUM_SRATE - LC3_SRATE_48K_HR][2] = {
+
+ [LC3_DT_2M5][LC3_SRATE_48K_HR - LC3_SRATE_48K_HR] = { 54/2, 210 },
+ [LC3_DT_2M5][LC3_SRATE_96K_HR - LC3_SRATE_48K_HR] = { 62/2, 210 },
+
+ [LC3_DT_5M ][LC3_SRATE_48K_HR - LC3_SRATE_48K_HR] = { 93/2, 375 },
+ [LC3_DT_5M ][LC3_SRATE_96K_HR - LC3_SRATE_48K_HR] = { 109/2, 375 },
+
+ [LC3_DT_10M][LC3_SRATE_48K_HR - LC3_SRATE_48K_HR] = { 156/2, 625 },
+ [LC3_DT_10M][LC3_SRATE_96K_HR - LC3_SRATE_48K_HR] = { 187/2, 625 },
+
+};
+
+
+/**
* Twiddles FFT 3 points
*
* T[0..N-1] =
@@ -422,12 +477,141 @@ static const struct lc3_fft_bf2_twiddles fft_twiddles_240 = {
}
};
+#if LC3_PLUS_HR
+
+static const struct lc3_fft_bf2_twiddles fft_twiddles_480 = {
+ .n2 = 480/2, .t = (const struct lc3_complex []){
+ { 1.0000000e+00, -0.0000000e+00 }, { 9.9991433e-01, -1.3089596e-02 },
+ { 9.9965732e-01, -2.6176948e-02 }, { 9.9922904e-01, -3.9259816e-02 },
+ { 9.9862953e-01, -5.2335956e-02 }, { 9.9785892e-01, -6.5403129e-02 },
+ { 9.9691733e-01, -7.8459096e-02 }, { 9.9580493e-01, -9.1501619e-02 },
+ { 9.9452190e-01, -1.0452846e-01 }, { 9.9306846e-01, -1.1753740e-01 },
+ { 9.9144486e-01, -1.3052619e-01 }, { 9.8965139e-01, -1.4349262e-01 },
+ { 9.8768834e-01, -1.5643447e-01 }, { 9.8555606e-01, -1.6934950e-01 },
+ { 9.8325491e-01, -1.8223553e-01 }, { 9.8078528e-01, -1.9509032e-01 },
+ { 9.7814760e-01, -2.0791169e-01 }, { 9.7534232e-01, -2.2069744e-01 },
+ { 9.7236992e-01, -2.3344536e-01 }, { 9.6923091e-01, -2.4615329e-01 },
+ { 9.6592583e-01, -2.5881905e-01 }, { 9.6245524e-01, -2.7144045e-01 },
+ { 9.5881973e-01, -2.8401534e-01 }, { 9.5501994e-01, -2.9654157e-01 },
+ { 9.5105652e-01, -3.0901699e-01 }, { 9.4693013e-01, -3.2143947e-01 },
+ { 9.4264149e-01, -3.3380686e-01 }, { 9.3819134e-01, -3.4611706e-01 },
+ { 9.3358043e-01, -3.5836795e-01 }, { 9.2880955e-01, -3.7055744e-01 },
+ { 9.2387953e-01, -3.8268343e-01 }, { 9.1879121e-01, -3.9474386e-01 },
+ { 9.1354546e-01, -4.0673664e-01 }, { 9.0814317e-01, -4.1865974e-01 },
+ { 9.0258528e-01, -4.3051110e-01 }, { 8.9687274e-01, -4.4228869e-01 },
+ { 8.9100652e-01, -4.5399050e-01 }, { 8.8498764e-01, -4.6561452e-01 },
+ { 8.7881711e-01, -4.7715876e-01 }, { 8.7249601e-01, -4.8862124e-01 },
+ { 8.6602540e-01, -5.0000000e-01 }, { 8.5940641e-01, -5.1129309e-01 },
+ { 8.5264016e-01, -5.2249856e-01 }, { 8.4572782e-01, -5.3361452e-01 },
+ { 8.3867057e-01, -5.4463904e-01 }, { 8.3146961e-01, -5.5557023e-01 },
+ { 8.2412619e-01, -5.6640624e-01 }, { 8.1664156e-01, -5.7714519e-01 },
+ { 8.0901699e-01, -5.8778525e-01 }, { 8.0125381e-01, -5.9832460e-01 },
+ { 7.9335334e-01, -6.0876143e-01 }, { 7.8531693e-01, -6.1909395e-01 },
+ { 7.7714596e-01, -6.2932039e-01 }, { 7.6884183e-01, -6.3943900e-01 },
+ { 7.6040597e-01, -6.4944805e-01 }, { 7.5183981e-01, -6.5934582e-01 },
+ { 7.4314483e-01, -6.6913061e-01 }, { 7.3432251e-01, -6.7880075e-01 },
+ { 7.2537437e-01, -6.8835458e-01 }, { 7.1630194e-01, -6.9779046e-01 },
+ { 7.0710678e-01, -7.0710678e-01 }, { 6.9779046e-01, -7.1630194e-01 },
+ { 6.8835458e-01, -7.2537437e-01 }, { 6.7880075e-01, -7.3432251e-01 },
+ { 6.6913061e-01, -7.4314483e-01 }, { 6.5934582e-01, -7.5183981e-01 },
+ { 6.4944805e-01, -7.6040597e-01 }, { 6.3943900e-01, -7.6884183e-01 },
+ { 6.2932039e-01, -7.7714596e-01 }, { 6.1909395e-01, -7.8531693e-01 },
+ { 6.0876143e-01, -7.9335334e-01 }, { 5.9832460e-01, -8.0125381e-01 },
+ { 5.8778525e-01, -8.0901699e-01 }, { 5.7714519e-01, -8.1664156e-01 },
+ { 5.6640624e-01, -8.2412619e-01 }, { 5.5557023e-01, -8.3146961e-01 },
+ { 5.4463904e-01, -8.3867057e-01 }, { 5.3361452e-01, -8.4572782e-01 },
+ { 5.2249856e-01, -8.5264016e-01 }, { 5.1129309e-01, -8.5940641e-01 },
+ { 5.0000000e-01, -8.6602540e-01 }, { 4.8862124e-01, -8.7249601e-01 },
+ { 4.7715876e-01, -8.7881711e-01 }, { 4.6561452e-01, -8.8498764e-01 },
+ { 4.5399050e-01, -8.9100652e-01 }, { 4.4228869e-01, -8.9687274e-01 },
+ { 4.3051110e-01, -9.0258528e-01 }, { 4.1865974e-01, -9.0814317e-01 },
+ { 4.0673664e-01, -9.1354546e-01 }, { 3.9474386e-01, -9.1879121e-01 },
+ { 3.8268343e-01, -9.2387953e-01 }, { 3.7055744e-01, -9.2880955e-01 },
+ { 3.5836795e-01, -9.3358043e-01 }, { 3.4611706e-01, -9.3819134e-01 },
+ { 3.3380686e-01, -9.4264149e-01 }, { 3.2143947e-01, -9.4693013e-01 },
+ { 3.0901699e-01, -9.5105652e-01 }, { 2.9654157e-01, -9.5501994e-01 },
+ { 2.8401534e-01, -9.5881973e-01 }, { 2.7144045e-01, -9.6245524e-01 },
+ { 2.5881905e-01, -9.6592583e-01 }, { 2.4615329e-01, -9.6923091e-01 },
+ { 2.3344536e-01, -9.7236992e-01 }, { 2.2069744e-01, -9.7534232e-01 },
+ { 2.0791169e-01, -9.7814760e-01 }, { 1.9509032e-01, -9.8078528e-01 },
+ { 1.8223553e-01, -9.8325491e-01 }, { 1.6934950e-01, -9.8555606e-01 },
+ { 1.5643447e-01, -9.8768834e-01 }, { 1.4349262e-01, -9.8965139e-01 },
+ { 1.3052619e-01, -9.9144486e-01 }, { 1.1753740e-01, -9.9306846e-01 },
+ { 1.0452846e-01, -9.9452190e-01 }, { 9.1501619e-02, -9.9580493e-01 },
+ { 7.8459096e-02, -9.9691733e-01 }, { 6.5403129e-02, -9.9785892e-01 },
+ { 5.2335956e-02, -9.9862953e-01 }, { 3.9259816e-02, -9.9922904e-01 },
+ { 2.6176948e-02, -9.9965732e-01 }, { 1.3089596e-02, -9.9991433e-01 },
+ { 2.8327694e-16, -1.0000000e+00 }, { -1.3089596e-02, -9.9991433e-01 },
+ { -2.6176948e-02, -9.9965732e-01 }, { -3.9259816e-02, -9.9922904e-01 },
+ { -5.2335956e-02, -9.9862953e-01 }, { -6.5403129e-02, -9.9785892e-01 },
+ { -7.8459096e-02, -9.9691733e-01 }, { -9.1501619e-02, -9.9580493e-01 },
+ { -1.0452846e-01, -9.9452190e-01 }, { -1.1753740e-01, -9.9306846e-01 },
+ { -1.3052619e-01, -9.9144486e-01 }, { -1.4349262e-01, -9.8965139e-01 },
+ { -1.5643447e-01, -9.8768834e-01 }, { -1.6934950e-01, -9.8555606e-01 },
+ { -1.8223553e-01, -9.8325491e-01 }, { -1.9509032e-01, -9.8078528e-01 },
+ { -2.0791169e-01, -9.7814760e-01 }, { -2.2069744e-01, -9.7534232e-01 },
+ { -2.3344536e-01, -9.7236992e-01 }, { -2.4615329e-01, -9.6923091e-01 },
+ { -2.5881905e-01, -9.6592583e-01 }, { -2.7144045e-01, -9.6245524e-01 },
+ { -2.8401534e-01, -9.5881973e-01 }, { -2.9654157e-01, -9.5501994e-01 },
+ { -3.0901699e-01, -9.5105652e-01 }, { -3.2143947e-01, -9.4693013e-01 },
+ { -3.3380686e-01, -9.4264149e-01 }, { -3.4611706e-01, -9.3819134e-01 },
+ { -3.5836795e-01, -9.3358043e-01 }, { -3.7055744e-01, -9.2880955e-01 },
+ { -3.8268343e-01, -9.2387953e-01 }, { -3.9474386e-01, -9.1879121e-01 },
+ { -4.0673664e-01, -9.1354546e-01 }, { -4.1865974e-01, -9.0814317e-01 },
+ { -4.3051110e-01, -9.0258528e-01 }, { -4.4228869e-01, -8.9687274e-01 },
+ { -4.5399050e-01, -8.9100652e-01 }, { -4.6561452e-01, -8.8498764e-01 },
+ { -4.7715876e-01, -8.7881711e-01 }, { -4.8862124e-01, -8.7249601e-01 },
+ { -5.0000000e-01, -8.6602540e-01 }, { -5.1129309e-01, -8.5940641e-01 },
+ { -5.2249856e-01, -8.5264016e-01 }, { -5.3361452e-01, -8.4572782e-01 },
+ { -5.4463904e-01, -8.3867057e-01 }, { -5.5557023e-01, -8.3146961e-01 },
+ { -5.6640624e-01, -8.2412619e-01 }, { -5.7714519e-01, -8.1664156e-01 },
+ { -5.8778525e-01, -8.0901699e-01 }, { -5.9832460e-01, -8.0125381e-01 },
+ { -6.0876143e-01, -7.9335334e-01 }, { -6.1909395e-01, -7.8531693e-01 },
+ { -6.2932039e-01, -7.7714596e-01 }, { -6.3943900e-01, -7.6884183e-01 },
+ { -6.4944805e-01, -7.6040597e-01 }, { -6.5934582e-01, -7.5183981e-01 },
+ { -6.6913061e-01, -7.4314483e-01 }, { -6.7880075e-01, -7.3432251e-01 },
+ { -6.8835458e-01, -7.2537437e-01 }, { -6.9779046e-01, -7.1630194e-01 },
+ { -7.0710678e-01, -7.0710678e-01 }, { -7.1630194e-01, -6.9779046e-01 },
+ { -7.2537437e-01, -6.8835458e-01 }, { -7.3432251e-01, -6.7880075e-01 },
+ { -7.4314483e-01, -6.6913061e-01 }, { -7.5183981e-01, -6.5934582e-01 },
+ { -7.6040597e-01, -6.4944805e-01 }, { -7.6884183e-01, -6.3943900e-01 },
+ { -7.7714596e-01, -6.2932039e-01 }, { -7.8531693e-01, -6.1909395e-01 },
+ { -7.9335334e-01, -6.0876143e-01 }, { -8.0125381e-01, -5.9832460e-01 },
+ { -8.0901699e-01, -5.8778525e-01 }, { -8.1664156e-01, -5.7714519e-01 },
+ { -8.2412619e-01, -5.6640624e-01 }, { -8.3146961e-01, -5.5557023e-01 },
+ { -8.3867057e-01, -5.4463904e-01 }, { -8.4572782e-01, -5.3361452e-01 },
+ { -8.5264016e-01, -5.2249856e-01 }, { -8.5940641e-01, -5.1129309e-01 },
+ { -8.6602540e-01, -5.0000000e-01 }, { -8.7249601e-01, -4.8862124e-01 },
+ { -8.7881711e-01, -4.7715876e-01 }, { -8.8498764e-01, -4.6561452e-01 },
+ { -8.9100652e-01, -4.5399050e-01 }, { -8.9687274e-01, -4.4228869e-01 },
+ { -9.0258528e-01, -4.3051110e-01 }, { -9.0814317e-01, -4.1865974e-01 },
+ { -9.1354546e-01, -4.0673664e-01 }, { -9.1879121e-01, -3.9474386e-01 },
+ { -9.2387953e-01, -3.8268343e-01 }, { -9.2880955e-01, -3.7055744e-01 },
+ { -9.3358043e-01, -3.5836795e-01 }, { -9.3819134e-01, -3.4611706e-01 },
+ { -9.4264149e-01, -3.3380686e-01 }, { -9.4693013e-01, -3.2143947e-01 },
+ { -9.5105652e-01, -3.0901699e-01 }, { -9.5501994e-01, -2.9654157e-01 },
+ { -9.5881973e-01, -2.8401534e-01 }, { -9.6245524e-01, -2.7144045e-01 },
+ { -9.6592583e-01, -2.5881905e-01 }, { -9.6923091e-01, -2.4615329e-01 },
+ { -9.7236992e-01, -2.3344536e-01 }, { -9.7534232e-01, -2.2069744e-01 },
+ { -9.7814760e-01, -2.0791169e-01 }, { -9.8078528e-01, -1.9509032e-01 },
+ { -9.8325491e-01, -1.8223553e-01 }, { -9.8555606e-01, -1.6934950e-01 },
+ { -9.8768834e-01, -1.5643447e-01 }, { -9.8965139e-01, -1.4349262e-01 },
+ { -9.9144486e-01, -1.3052619e-01 }, { -9.9306846e-01, -1.1753740e-01 },
+ { -9.9452190e-01, -1.0452846e-01 }, { -9.9580493e-01, -9.1501619e-02 },
+ { -9.9691733e-01, -7.8459096e-02 }, { -9.9785892e-01, -6.5403129e-02 },
+ { -9.9862953e-01, -5.2335956e-02 }, { -9.9922904e-01, -3.9259816e-02 },
+ { -9.9965732e-01, -2.6176948e-02 }, { -9.9991433e-01, -1.3089596e-02 },
+ }
+};
+
+#endif /* LC3_PLUS_HR */
+
const struct lc3_fft_bf2_twiddles *lc3_fft_twiddles_bf2[][3] = {
{ &fft_twiddles_10 , &fft_twiddles_30 , &fft_twiddles_90 },
{ &fft_twiddles_20 , &fft_twiddles_60 , &fft_twiddles_180 },
{ &fft_twiddles_40 , &fft_twiddles_120 },
{ &fft_twiddles_80 , &fft_twiddles_240 },
- { &fft_twiddles_160 }
+ { &fft_twiddles_160, LC3_IF_PLUS_HR(&fft_twiddles_480, NULL) }
};
@@ -438,6 +622,35 @@ const struct lc3_fft_bf2_twiddles *lc3_fft_twiddles_bf2[][3] = {
* W[n] = e * sqrt( sqrt( 4/N ) ), n = [0..N/4-1]
*/
+#if LC3_PLUS
+
+static const struct lc3_mdct_rot_def mdct_rot_40 = {
+ .n4 = 40/4, .w = (const struct lc3_complex []){
+ { 5.6223293e-01, 1.1040837e-02 }, { 5.5358374e-01, 9.8857513e-02 },
+ { 5.3130348e-01, 1.8423999e-01 }, { 4.9594077e-01, 2.6508587e-01 },
+ { 4.4836635e-01, 3.3940445e-01 }, { 3.8975167e-01, 4.0536577e-01 },
+ { 3.2154000e-01, 4.6134563e-01 }, { 2.4541095e-01, 5.0596564e-01 },
+ { 1.6323907e-01, 5.3812710e-01 }, { 7.7047702e-02, 5.5703808e-01 },
+ }
+};
+
+static const struct lc3_mdct_rot_def mdct_rot_80 = {
+ .n4 = 80/4, .w = (const struct lc3_complex []){
+ { 4.7284802e-01, 4.6423237e-03 }, { 4.7102615e-01, 4.1727241e-02 },
+ { 4.6630025e-01, 7.8554895e-02 }, { 4.5869946e-01, 1.1489823e-01 },
+ { 4.4827063e-01, 1.5053319e-01 }, { 4.3507806e-01, 1.8524005e-01 },
+ { 4.1920310e-01, 2.1880485e-01 }, { 4.0074360e-01, 2.5102064e-01 },
+ { 3.7981339e-01, 2.8168881e-01 }, { 3.5654150e-01, 3.1062027e-01 },
+ { 3.3107142e-01, 3.3763666e-01 }, { 3.0356017e-01, 3.6257140e-01 },
+ { 2.7417737e-01, 3.8527077e-01 }, { 2.4310418e-01, 4.0559482e-01 },
+ { 2.1053217e-01, 4.2341824e-01 }, { 1.7666215e-01, 4.3863114e-01 },
+ { 1.4170296e-01, 4.5113974e-01 }, { 1.0587012e-01, 4.6086692e-01 },
+ { 6.9384558e-02, 4.6775269e-01 }, { 3.2471215e-02, 4.7175462e-01 },
+ }
+};
+
+#endif /* LC3_PLUS */
+
static const struct lc3_mdct_rot_def mdct_rot_120 = {
.n4 = 120/4, .w = (const struct lc3_complex []){
{ 4.2727785e-01, 2.7965670e-03 }, { 4.2654592e-01, 2.5154729e-02 },
@@ -983,19 +1196,1715 @@ static const struct lc3_mdct_rot_def mdct_rot_960 = {
}
};
+#if LC3_PLUS_HR
+
+static const struct lc3_mdct_rot_def mdct_rot_1920 = {
+ .n4 = 1920/4, .w = (const struct lc3_complex []){
+ { 2.1364349e-01, 8.7393339e-05 }, { 2.1364206e-01, 7.8653829e-04 },
+ { 2.1363834e-01, 1.4856748e-03 }, { 2.1363233e-01, 2.1847954e-03 },
+ { 2.1362404e-01, 2.8838927e-03 }, { 2.1361346e-01, 3.5829590e-03 },
+ { 2.1360059e-01, 4.2819870e-03 }, { 2.1358543e-01, 4.9809691e-03 },
+ { 2.1356799e-01, 5.6798979e-03 }, { 2.1354826e-01, 6.3787658e-03 },
+ { 2.1352624e-01, 7.0775654e-03 }, { 2.1350193e-01, 7.7762893e-03 },
+ { 2.1347534e-01, 8.4749298e-03 }, { 2.1344647e-01, 9.1734796e-03 },
+ { 2.1341530e-01, 9.8719312e-03 }, { 2.1338185e-01, 1.0570277e-02 },
+ { 2.1334612e-01, 1.1268510e-02 }, { 2.1330810e-01, 1.1966622e-02 },
+ { 2.1326780e-01, 1.2664605e-02 }, { 2.1322521e-01, 1.3362454e-02 },
+ { 2.1318034e-01, 1.4060159e-02 }, { 2.1313319e-01, 1.4757713e-02 },
+ { 2.1308375e-01, 1.5455110e-02 }, { 2.1303204e-01, 1.6152341e-02 },
+ { 2.1297804e-01, 1.6849399e-02 }, { 2.1292176e-01, 1.7546276e-02 },
+ { 2.1286320e-01, 1.8242966e-02 }, { 2.1280236e-01, 1.8939460e-02 },
+ { 2.1273924e-01, 1.9635751e-02 }, { 2.1267384e-01, 2.0331833e-02 },
+ { 2.1260617e-01, 2.1027696e-02 }, { 2.1253622e-01, 2.1723334e-02 },
+ { 2.1246399e-01, 2.2418740e-02 }, { 2.1238949e-01, 2.3113905e-02 },
+ { 2.1231271e-01, 2.3808823e-02 }, { 2.1223366e-01, 2.4503486e-02 },
+ { 2.1215233e-01, 2.5197887e-02 }, { 2.1206874e-01, 2.5892018e-02 },
+ { 2.1198287e-01, 2.6585871e-02 }, { 2.1189473e-01, 2.7279440e-02 },
+ { 2.1180433e-01, 2.7972716e-02 }, { 2.1171165e-01, 2.8665693e-02 },
+ { 2.1161671e-01, 2.9358363e-02 }, { 2.1151950e-01, 3.0050719e-02 },
+ { 2.1142003e-01, 3.0742753e-02 }, { 2.1131829e-01, 3.1434457e-02 },
+ { 2.1121429e-01, 3.2125825e-02 }, { 2.1110803e-01, 3.2816849e-02 },
+ { 2.1099951e-01, 3.3507522e-02 }, { 2.1088873e-01, 3.4197835e-02 },
+ { 2.1077568e-01, 3.4887783e-02 }, { 2.1066039e-01, 3.5577357e-02 },
+ { 2.1054283e-01, 3.6266549e-02 }, { 2.1042302e-01, 3.6955354e-02 },
+ { 2.1030096e-01, 3.7643762e-02 }, { 2.1017664e-01, 3.8331768e-02 },
+ { 2.1005008e-01, 3.9019363e-02 }, { 2.0992126e-01, 3.9706540e-02 },
+ { 2.0979020e-01, 4.0393292e-02 }, { 2.0965689e-01, 4.1079611e-02 },
+ { 2.0952134e-01, 4.1765490e-02 }, { 2.0938354e-01, 4.2450923e-02 },
+ { 2.0924350e-01, 4.3135900e-02 }, { 2.0910121e-01, 4.3820416e-02 },
+ { 2.0895669e-01, 4.4504462e-02 }, { 2.0880993e-01, 4.5188032e-02 },
+ { 2.0866094e-01, 4.5871117e-02 }, { 2.0850971e-01, 4.6553712e-02 },
+ { 2.0835625e-01, 4.7235808e-02 }, { 2.0820055e-01, 4.7917398e-02 },
+ { 2.0804263e-01, 4.8598475e-02 }, { 2.0788248e-01, 4.9279031e-02 },
+ { 2.0772010e-01, 4.9959060e-02 }, { 2.0755549e-01, 5.0638554e-02 },
+ { 2.0738867e-01, 5.1317505e-02 }, { 2.0721962e-01, 5.1995907e-02 },
+ { 2.0704836e-01, 5.2673752e-02 }, { 2.0687487e-01, 5.3351033e-02 },
+ { 2.0669918e-01, 5.4027742e-02 }, { 2.0652126e-01, 5.4703873e-02 },
+ { 2.0634114e-01, 5.5379418e-02 }, { 2.0615881e-01, 5.6054370e-02 },
+ { 2.0597427e-01, 5.6728722e-02 }, { 2.0578752e-01, 5.7402466e-02 },
+ { 2.0559857e-01, 5.8075596e-02 }, { 2.0540742e-01, 5.8748104e-02 },
+ { 2.0521406e-01, 5.9419982e-02 }, { 2.0501851e-01, 6.0091224e-02 },
+ { 2.0482077e-01, 6.0761823e-02 }, { 2.0462083e-01, 6.1431770e-02 },
+ { 2.0441870e-01, 6.2101060e-02 }, { 2.0421438e-01, 6.2769685e-02 },
+ { 2.0400787e-01, 6.3437638e-02 }, { 2.0379918e-01, 6.4104911e-02 },
+ { 2.0358831e-01, 6.4771498e-02 }, { 2.0337525e-01, 6.5437391e-02 },
+ { 2.0316002e-01, 6.6102584e-02 }, { 2.0294262e-01, 6.6767068e-02 },
+ { 2.0272303e-01, 6.7430838e-02 }, { 2.0250128e-01, 6.8093885e-02 },
+ { 2.0227736e-01, 6.8756203e-02 }, { 2.0205127e-01, 6.9417785e-02 },
+ { 2.0182302e-01, 7.0078623e-02 }, { 2.0159261e-01, 7.0738711e-02 },
+ { 2.0136004e-01, 7.1398041e-02 }, { 2.0112531e-01, 7.2056607e-02 },
+ { 2.0088843e-01, 7.2714401e-02 }, { 2.0064940e-01, 7.3371416e-02 },
+ { 2.0040822e-01, 7.4027646e-02 }, { 2.0016489e-01, 7.4683083e-02 },
+ { 1.9991942e-01, 7.5337720e-02 }, { 1.9967181e-01, 7.5991550e-02 },
+ { 1.9942206e-01, 7.6644566e-02 }, { 1.9917017e-01, 7.7296762e-02 },
+ { 1.9891615e-01, 7.7948130e-02 }, { 1.9866000e-01, 7.8598663e-02 },
+ { 1.9840173e-01, 7.9248354e-02 }, { 1.9814132e-01, 7.9897197e-02 },
+ { 1.9787880e-01, 8.0545184e-02 }, { 1.9761416e-01, 8.1192308e-02 },
+ { 1.9734740e-01, 8.1838563e-02 }, { 1.9707853e-01, 8.2483942e-02 },
+ { 1.9680754e-01, 8.3128437e-02 }, { 1.9653445e-01, 8.3772042e-02 },
+ { 1.9625926e-01, 8.4414750e-02 }, { 1.9598196e-01, 8.5056553e-02 },
+ { 1.9570257e-01, 8.5697446e-02 }, { 1.9542107e-01, 8.6337421e-02 },
+ { 1.9513749e-01, 8.6976472e-02 }, { 1.9485182e-01, 8.7614591e-02 },
+ { 1.9456405e-01, 8.8251772e-02 }, { 1.9427421e-01, 8.8888007e-02 },
+ { 1.9398228e-01, 8.9523291e-02 }, { 1.9368828e-01, 9.0157616e-02 },
+ { 1.9339221e-01, 9.0790976e-02 }, { 1.9309406e-01, 9.1423363e-02 },
+ { 1.9279384e-01, 9.2054771e-02 }, { 1.9249156e-01, 9.2685193e-02 },
+ { 1.9218722e-01, 9.3314623e-02 }, { 1.9188082e-01, 9.3943054e-02 },
+ { 1.9157237e-01, 9.4570478e-02 }, { 1.9126186e-01, 9.5196890e-02 },
+ { 1.9094930e-01, 9.5822282e-02 }, { 1.9063470e-01, 9.6446648e-02 },
+ { 1.9031806e-01, 9.7069981e-02 }, { 1.8999938e-01, 9.7692274e-02 },
+ { 1.8967867e-01, 9.8313522e-02 }, { 1.8935592e-01, 9.8933716e-02 },
+ { 1.8903115e-01, 9.9552851e-02 }, { 1.8870435e-01, 1.0017092e-01 },
+ { 1.8837554e-01, 1.0078792e-01 }, { 1.8804470e-01, 1.0140383e-01 },
+ { 1.8771185e-01, 1.0201866e-01 }, { 1.8737699e-01, 1.0263240e-01 },
+ { 1.8704012e-01, 1.0324504e-01 }, { 1.8670125e-01, 1.0385657e-01 },
+ { 1.8636039e-01, 1.0446700e-01 }, { 1.8601752e-01, 1.0507630e-01 },
+ { 1.8567266e-01, 1.0568448e-01 }, { 1.8532582e-01, 1.0629152e-01 },
+ { 1.8497699e-01, 1.0689743e-01 }, { 1.8462618e-01, 1.0750219e-01 },
+ { 1.8427339e-01, 1.0810580e-01 }, { 1.8391863e-01, 1.0870825e-01 },
+ { 1.8356190e-01, 1.0930954e-01 }, { 1.8320320e-01, 1.0990966e-01 },
+ { 1.8284254e-01, 1.1050860e-01 }, { 1.8247992e-01, 1.1110636e-01 },
+ { 1.8211535e-01, 1.1170293e-01 }, { 1.8174883e-01, 1.1229830e-01 },
+ { 1.8138036e-01, 1.1289247e-01 }, { 1.8100995e-01, 1.1348543e-01 },
+ { 1.8063761e-01, 1.1407718e-01 }, { 1.8026332e-01, 1.1466770e-01 },
+ { 1.7988711e-01, 1.1525699e-01 }, { 1.7950897e-01, 1.1584506e-01 },
+ { 1.7912891e-01, 1.1643188e-01 }, { 1.7874692e-01, 1.1701745e-01 },
+ { 1.7836303e-01, 1.1760177e-01 }, { 1.7797722e-01, 1.1818483e-01 },
+ { 1.7758951e-01, 1.1876663e-01 }, { 1.7719990e-01, 1.1934715e-01 },
+ { 1.7680839e-01, 1.1992639e-01 }, { 1.7641498e-01, 1.2050436e-01 },
+ { 1.7601969e-01, 1.2108103e-01 }, { 1.7562251e-01, 1.2165640e-01 },
+ { 1.7522345e-01, 1.2223047e-01 }, { 1.7482252e-01, 1.2280323e-01 },
+ { 1.7441971e-01, 1.2337468e-01 }, { 1.7401503e-01, 1.2394480e-01 },
+ { 1.7360849e-01, 1.2451360e-01 }, { 1.7320010e-01, 1.2508107e-01 },
+ { 1.7278984e-01, 1.2564719e-01 }, { 1.7237774e-01, 1.2621197e-01 },
+ { 1.7196379e-01, 1.2677540e-01 }, { 1.7154800e-01, 1.2733747e-01 },
+ { 1.7113037e-01, 1.2789818e-01 }, { 1.7071091e-01, 1.2845751e-01 },
+ { 1.7028962e-01, 1.2901548e-01 }, { 1.6986650e-01, 1.2957206e-01 },
+ { 1.6944157e-01, 1.3012725e-01 }, { 1.6901482e-01, 1.3068105e-01 },
+ { 1.6858627e-01, 1.3123344e-01 }, { 1.6815590e-01, 1.3178444e-01 },
+ { 1.6772374e-01, 1.3233402e-01 }, { 1.6728978e-01, 1.3288219e-01 },
+ { 1.6685403e-01, 1.3342893e-01 }, { 1.6641649e-01, 1.3397424e-01 },
+ { 1.6597717e-01, 1.3451812e-01 }, { 1.6553608e-01, 1.3506056e-01 },
+ { 1.6509321e-01, 1.3560155e-01 }, { 1.6464857e-01, 1.3614109e-01 },
+ { 1.6420217e-01, 1.3667917e-01 }, { 1.6375401e-01, 1.3721579e-01 },
+ { 1.6330409e-01, 1.3775093e-01 }, { 1.6285243e-01, 1.3828461e-01 },
+ { 1.6239902e-01, 1.3881680e-01 }, { 1.6194388e-01, 1.3934750e-01 },
+ { 1.6148700e-01, 1.3987672e-01 }, { 1.6102839e-01, 1.4040443e-01 },
+ { 1.6056805e-01, 1.4093064e-01 }, { 1.6010600e-01, 1.4145535e-01 },
+ { 1.5964223e-01, 1.4197853e-01 }, { 1.5917676e-01, 1.4250020e-01 },
+ { 1.5870957e-01, 1.4302034e-01 }, { 1.5824069e-01, 1.4353895e-01 },
+ { 1.5777011e-01, 1.4405602e-01 }, { 1.5729785e-01, 1.4457155e-01 },
+ { 1.5682390e-01, 1.4508553e-01 }, { 1.5634827e-01, 1.4559796e-01 },
+ { 1.5587096e-01, 1.4610883e-01 }, { 1.5539199e-01, 1.4661813e-01 },
+ { 1.5491135e-01, 1.4712586e-01 }, { 1.5442905e-01, 1.4763202e-01 },
+ { 1.5394510e-01, 1.4813660e-01 }, { 1.5345950e-01, 1.4863959e-01 },
+ { 1.5297226e-01, 1.4914099e-01 }, { 1.5248338e-01, 1.4964079e-01 },
+ { 1.5199287e-01, 1.5013899e-01 }, { 1.5150072e-01, 1.5063558e-01 },
+ { 1.5100696e-01, 1.5113055e-01 }, { 1.5051158e-01, 1.5162391e-01 },
+ { 1.5001459e-01, 1.5211565e-01 }, { 1.4951599e-01, 1.5260575e-01 },
+ { 1.4901579e-01, 1.5309423e-01 }, { 1.4851399e-01, 1.5358106e-01 },
+ { 1.4801060e-01, 1.5406625e-01 }, { 1.4750563e-01, 1.5454978e-01 },
+ { 1.4699908e-01, 1.5503167e-01 }, { 1.4649095e-01, 1.5551189e-01 },
+ { 1.4598126e-01, 1.5599045e-01 }, { 1.4547000e-01, 1.5646733e-01 },
+ { 1.4495718e-01, 1.5694254e-01 }, { 1.4444281e-01, 1.5741607e-01 },
+ { 1.4392690e-01, 1.5788792e-01 }, { 1.4340944e-01, 1.5835807e-01 },
+ { 1.4289045e-01, 1.5882653e-01 }, { 1.4236993e-01, 1.5929328e-01 },
+ { 1.4184788e-01, 1.5975834e-01 }, { 1.4132431e-01, 1.6022168e-01 },
+ { 1.4079923e-01, 1.6068330e-01 }, { 1.4027264e-01, 1.6114320e-01 },
+ { 1.3974455e-01, 1.6160138e-01 }, { 1.3921497e-01, 1.6205783e-01 },
+ { 1.3868389e-01, 1.6251254e-01 }, { 1.3815133e-01, 1.6296551e-01 },
+ { 1.3761729e-01, 1.6341673e-01 }, { 1.3708177e-01, 1.6386621e-01 },
+ { 1.3654479e-01, 1.6431393e-01 }, { 1.3600634e-01, 1.6475989e-01 },
+ { 1.3546644e-01, 1.6520409e-01 }, { 1.3492508e-01, 1.6564652e-01 },
+ { 1.3438228e-01, 1.6608717e-01 }, { 1.3383805e-01, 1.6652605e-01 },
+ { 1.3329238e-01, 1.6696314e-01 }, { 1.3274528e-01, 1.6739844e-01 },
+ { 1.3219676e-01, 1.6783195e-01 }, { 1.3164682e-01, 1.6826366e-01 },
+ { 1.3109548e-01, 1.6869358e-01 }, { 1.3054273e-01, 1.6912168e-01 },
+ { 1.2998858e-01, 1.6954797e-01 }, { 1.2943304e-01, 1.6997245e-01 },
+ { 1.2887611e-01, 1.7039511e-01 }, { 1.2831781e-01, 1.7081594e-01 },
+ { 1.2775813e-01, 1.7123495e-01 }, { 1.2719708e-01, 1.7165212e-01 },
+ { 1.2663467e-01, 1.7206745e-01 }, { 1.2607090e-01, 1.7248094e-01 },
+ { 1.2550579e-01, 1.7289258e-01 }, { 1.2493933e-01, 1.7330237e-01 },
+ { 1.2437153e-01, 1.7371030e-01 }, { 1.2380240e-01, 1.7411638e-01 },
+ { 1.2323194e-01, 1.7452059e-01 }, { 1.2266016e-01, 1.7492293e-01 },
+ { 1.2208708e-01, 1.7532339e-01 }, { 1.2151268e-01, 1.7572198e-01 },
+ { 1.2093698e-01, 1.7611869e-01 }, { 1.2035999e-01, 1.7651351e-01 },
+ { 1.1978170e-01, 1.7690644e-01 }, { 1.1920214e-01, 1.7729748e-01 },
+ { 1.1862130e-01, 1.7768662e-01 }, { 1.1803918e-01, 1.7807385e-01 },
+ { 1.1745581e-01, 1.7845918e-01 }, { 1.1687117e-01, 1.7884260e-01 },
+ { 1.1628529e-01, 1.7922410e-01 }, { 1.1569816e-01, 1.7960368e-01 },
+ { 1.1510979e-01, 1.7998134e-01 }, { 1.1452018e-01, 1.8035707e-01 },
+ { 1.1392935e-01, 1.8073087e-01 }, { 1.1333730e-01, 1.8110274e-01 },
+ { 1.1274404e-01, 1.8147266e-01 }, { 1.1214957e-01, 1.8184065e-01 },
+ { 1.1155390e-01, 1.8220668e-01 }, { 1.1095703e-01, 1.8257076e-01 },
+ { 1.1035898e-01, 1.8293289e-01 }, { 1.0975974e-01, 1.8329306e-01 },
+ { 1.0915933e-01, 1.8365126e-01 }, { 1.0855775e-01, 1.8400750e-01 },
+ { 1.0795501e-01, 1.8436177e-01 }, { 1.0735111e-01, 1.8471407e-01 },
+ { 1.0674606e-01, 1.8506438e-01 }, { 1.0613987e-01, 1.8541272e-01 },
+ { 1.0553254e-01, 1.8575906e-01 }, { 1.0492408e-01, 1.8610342e-01 },
+ { 1.0431449e-01, 1.8644579e-01 }, { 1.0370379e-01, 1.8678616e-01 },
+ { 1.0309198e-01, 1.8712453e-01 }, { 1.0247907e-01, 1.8746089e-01 },
+ { 1.0186506e-01, 1.8779525e-01 }, { 1.0124995e-01, 1.8812760e-01 },
+ { 1.0063377e-01, 1.8845793e-01 }, { 1.0001650e-01, 1.8878624e-01 },
+ { 9.9398167e-02, 1.8911253e-01 }, { 9.8778766e-02, 1.8943680e-01 },
+ { 9.8158308e-02, 1.8975904e-01 }, { 9.7536799e-02, 1.9007924e-01 },
+ { 9.6914245e-02, 1.9039742e-01 }, { 9.6290653e-02, 1.9071355e-01 },
+ { 9.5666030e-02, 1.9102763e-01 }, { 9.5040382e-02, 1.9133968e-01 },
+ { 9.4413717e-02, 1.9164967e-01 }, { 9.3786040e-02, 1.9195761e-01 },
+ { 9.3157359e-02, 1.9226350e-01 }, { 9.2527681e-02, 1.9256733e-01 },
+ { 9.1897011e-02, 1.9286909e-01 }, { 9.1265358e-02, 1.9316879e-01 },
+ { 9.0632727e-02, 1.9346642e-01 }, { 8.9999125e-02, 1.9376198e-01 },
+ { 8.9364560e-02, 1.9405546e-01 }, { 8.8729037e-02, 1.9434687e-01 },
+ { 8.8092565e-02, 1.9463619e-01 }, { 8.7455149e-02, 1.9492343e-01 },
+ { 8.6816796e-02, 1.9520858e-01 }, { 8.6177514e-02, 1.9549164e-01 },
+ { 8.5537309e-02, 1.9577261e-01 }, { 8.4896187e-02, 1.9605148e-01 },
+ { 8.4254157e-02, 1.9632825e-01 }, { 8.3611224e-02, 1.9660292e-01 },
+ { 8.2967396e-02, 1.9687549e-01 }, { 8.2322680e-02, 1.9714594e-01 },
+ { 8.1677081e-02, 1.9741429e-01 }, { 8.1030608e-02, 1.9768052e-01 },
+ { 8.0383268e-02, 1.9794463e-01 }, { 7.9735066e-02, 1.9820662e-01 },
+ { 7.9086011e-02, 1.9846649e-01 }, { 7.8436108e-02, 1.9872424e-01 },
+ { 7.7785366e-02, 1.9897986e-01 }, { 7.7133791e-02, 1.9923334e-01 },
+ { 7.6481389e-02, 1.9948470e-01 }, { 7.5828169e-02, 1.9973391e-01 },
+ { 7.5174136e-02, 1.9998099e-01 }, { 7.4519298e-02, 2.0022592e-01 },
+ { 7.3863663e-02, 2.0046872e-01 }, { 7.3207236e-02, 2.0070936e-01 },
+ { 7.2550025e-02, 2.0094785e-01 }, { 7.1892038e-02, 2.0118420e-01 },
+ { 7.1233280e-02, 2.0141839e-01 }, { 7.0573760e-02, 2.0165042e-01 },
+ { 6.9913484e-02, 2.0188029e-01 }, { 6.9252459e-02, 2.0210800e-01 },
+ { 6.8590692e-02, 2.0233354e-01 }, { 6.7928191e-02, 2.0255692e-01 },
+ { 6.7264963e-02, 2.0277813e-01 }, { 6.6601014e-02, 2.0299717e-01 },
+ { 6.5936352e-02, 2.0321403e-01 }, { 6.5270983e-02, 2.0342872e-01 },
+ { 6.4604916e-02, 2.0364123e-01 }, { 6.3938157e-02, 2.0385156e-01 },
+ { 6.3270713e-02, 2.0405971e-01 }, { 6.2602592e-02, 2.0426567e-01 },
+ { 6.1933800e-02, 2.0446944e-01 }, { 6.1264345e-02, 2.0467102e-01 },
+ { 6.0594234e-02, 2.0487041e-01 }, { 5.9923474e-02, 2.0506761e-01 },
+ { 5.9252072e-02, 2.0526261e-01 }, { 5.8580035e-02, 2.0545541e-01 },
+ { 5.7907372e-02, 2.0564601e-01 }, { 5.7234088e-02, 2.0583441e-01 },
+ { 5.6560191e-02, 2.0602061e-01 }, { 5.5885688e-02, 2.0620460e-01 },
+ { 5.5210587e-02, 2.0638638e-01 }, { 5.4534895e-02, 2.0656595e-01 },
+ { 5.3858619e-02, 2.0674331e-01 }, { 5.3181766e-02, 2.0691845e-01 },
+ { 5.2504343e-02, 2.0709138e-01 }, { 5.1826358e-02, 2.0726209e-01 },
+ { 5.1147818e-02, 2.0743058e-01 }, { 5.0468731e-02, 2.0759685e-01 },
+ { 4.9789103e-02, 2.0776090e-01 }, { 4.9108941e-02, 2.0792272e-01 },
+ { 4.8428254e-02, 2.0808232e-01 }, { 4.7747048e-02, 2.0823968e-01 },
+ { 4.7065331e-02, 2.0839482e-01 }, { 4.6383110e-02, 2.0854773e-01 },
+ { 4.5700392e-02, 2.0869840e-01 }, { 4.5017184e-02, 2.0884683e-01 },
+ { 4.4333495e-02, 2.0899303e-01 }, { 4.3649330e-02, 2.0913699e-01 },
+ { 4.2964699e-02, 2.0927872e-01 }, { 4.2279607e-02, 2.0941820e-01 },
+ { 4.1594062e-02, 2.0955544e-01 }, { 4.0908072e-02, 2.0969043e-01 },
+ { 4.0221644e-02, 2.0982318e-01 }, { 3.9534785e-02, 2.0995368e-01 },
+ { 3.8847503e-02, 2.1008193e-01 }, { 3.8159805e-02, 2.1020793e-01 },
+ { 3.7471698e-02, 2.1033169e-01 }, { 3.6783189e-02, 2.1045319e-01 },
+ { 3.6094287e-02, 2.1057243e-01 }, { 3.5404998e-02, 2.1068942e-01 },
+ { 3.4715331e-02, 2.1080416e-01 }, { 3.4025291e-02, 2.1091663e-01 },
+ { 3.3334887e-02, 2.1102685e-01 }, { 3.2644126e-02, 2.1113481e-01 },
+ { 3.1953015e-02, 2.1124051e-01 }, { 3.1261563e-02, 2.1134394e-01 },
+ { 3.0569775e-02, 2.1144511e-01 }, { 2.9877660e-02, 2.1154402e-01 },
+ { 2.9185225e-02, 2.1164066e-01 }, { 2.8492478e-02, 2.1173504e-01 },
+ { 2.7799425e-02, 2.1182714e-01 }, { 2.7106075e-02, 2.1191698e-01 },
+ { 2.6412434e-02, 2.1200455e-01 }, { 2.5718511e-02, 2.1208985e-01 },
+ { 2.5024312e-02, 2.1217288e-01 }, { 2.4329845e-02, 2.1225363e-01 },
+ { 2.3635117e-02, 2.1233212e-01 }, { 2.2940137e-02, 2.1240833e-01 },
+ { 2.2244911e-02, 2.1248226e-01 }, { 2.1549446e-02, 2.1255392e-01 },
+ { 2.0853751e-02, 2.1262330e-01 }, { 2.0157832e-02, 2.1269040e-01 },
+ { 1.9461698e-02, 2.1275523e-01 }, { 1.8765355e-02, 2.1281778e-01 },
+ { 1.8068811e-02, 2.1287805e-01 }, { 1.7372074e-02, 2.1293604e-01 },
+ { 1.6675151e-02, 2.1299175e-01 }, { 1.5978049e-02, 2.1304518e-01 },
+ { 1.5280776e-02, 2.1309633e-01 }, { 1.4583339e-02, 2.1314519e-01 },
+ { 1.3885746e-02, 2.1319177e-01 }, { 1.3188005e-02, 2.1323607e-01 },
+ { 1.2490122e-02, 2.1327809e-01 }, { 1.1792105e-02, 2.1331782e-01 },
+ { 1.1093963e-02, 2.1335527e-01 }, { 1.0395701e-02, 2.1339043e-01 },
+ { 9.6973279e-03, 2.1342331e-01 }, { 8.9988511e-03, 2.1345390e-01 },
+ { 8.3002779e-03, 2.1348220e-01 }, { 7.6016158e-03, 2.1350822e-01 },
+ { 6.9028723e-03, 2.1353196e-01 }, { 6.2040549e-03, 2.1355340e-01 },
+ { 5.5051711e-03, 2.1357256e-01 }, { 4.8062283e-03, 2.1358943e-01 },
+ { 4.1072340e-03, 2.1360402e-01 }, { 3.4081957e-03, 2.1361632e-01 },
+ { 2.7091210e-03, 2.1362633e-01 }, { 2.0100172e-03, 2.1363405e-01 },
+ { 1.3108919e-03, 2.1363948e-01 }, { 6.1175255e-04, 2.1364263e-01 },
+ }
+};
+
+#endif /* LC3_PLUS_HR */
+
const struct lc3_mdct_rot_def * lc3_mdct_rot[LC3_NUM_DT][LC3_NUM_SRATE] = {
- [LC3_DT_7M5] = { &mdct_rot_120, &mdct_rot_240, &mdct_rot_360,
- &mdct_rot_480, &mdct_rot_720 },
- [LC3_DT_10M] = { &mdct_rot_160, &mdct_rot_320, &mdct_rot_480,
- &mdct_rot_640, &mdct_rot_960 }
+
+ [LC3_DT_2M5] = {
+ LC3_IF_PLUS(&mdct_rot_40, NULL),
+ LC3_IF_PLUS(&mdct_rot_80, NULL), &mdct_rot_120,
+ &mdct_rot_160, &mdct_rot_240, &mdct_rot_240, &mdct_rot_480 },
+
+ [LC3_DT_5M ] = {
+ LC3_IF_PLUS(&mdct_rot_80, NULL), &mdct_rot_160, &mdct_rot_240,
+ &mdct_rot_320, &mdct_rot_480, &mdct_rot_480, &mdct_rot_960 },
+
+ [LC3_DT_7M5] = {
+ &mdct_rot_120, &mdct_rot_240, &mdct_rot_360,
+ &mdct_rot_480, &mdct_rot_720 },
+
+ [LC3_DT_10M] = {
+ &mdct_rot_160, &mdct_rot_320, &mdct_rot_480,
+ &mdct_rot_640, &mdct_rot_960, &mdct_rot_960,
+ LC3_IF_PLUS_HR(&mdct_rot_1920, NULL) },
+
};
/**
- * Low delay MDCT windows (cf. 3.7.3)
+ * Low delay MDCT windows
*/
-static const float mdct_win_10m_80[80+50] = {
+#define __LC3_MDCT_WIN_LEN(_dt_us, _sr_hz) \
+ ( LC3_NS(_dt_us, _sr_hz) + LC3_ND(_dt_us, _sr_hz) )
+
+#if LC3_PLUS
+
+static const float mdct_win_2m5_8k[__LC3_MDCT_WIN_LEN(2500, 8000)] = {
+ 6.73791440e-03, 2.73228958e-02, 6.16356097e-02, 1.11912504e-01,
+ 1.78705350e-01, 2.60752499e-01, 3.54977638e-01, 4.56769675e-01,
+ 5.60523927e-01, 6.60366535e-01, 7.50943422e-01, 8.28138232e-01,
+ 8.89585018e-01, 9.34874773e-01, 9.65405703e-01, 9.83902633e-01,
+ 9.93718088e-01, 9.98098731e-01, 9.99626637e-01, 9.99977291e-01,
+ 9.99977291e-01, 9.99626637e-01, 9.98098731e-01, 9.93718088e-01,
+ 9.83902633e-01, 9.65405703e-01, 9.34874773e-01, 8.89585018e-01,
+ 8.28138232e-01, 7.50943422e-01, 6.60366535e-01, 5.60523927e-01,
+ 4.56769675e-01, 3.54977638e-01, 2.60752499e-01, 1.78705350e-01,
+ 1.11912504e-01, 6.16356097e-02, 2.73228958e-02, 6.73791440e-03,
+};
+
+static const float mdct_win_2m5_16k[__LC3_MDCT_WIN_LEN(2500, 16000)] = {
+ 4.76441615e-03, 1.20463628e-02, 2.22639654e-02, 3.58022311e-02,
+ 5.29905465e-02, 7.40851840e-02, 9.92538592e-02, 1.28563118e-01,
+ 1.61969244e-01, 1.99313241e-01, 2.40320282e-01, 2.84603818e-01,
+ 3.31674323e-01, 3.80952458e-01, 4.31786202e-01, 4.83471316e-01,
+ 5.35274327e-01, 5.86457098e-01, 6.36301916e-01, 6.84136019e-01,
+ 7.29354445e-01, 7.71440129e-01, 8.09980291e-01, 8.44678279e-01,
+ 8.75360204e-01, 9.01975984e-01, 9.24594627e-01, 9.43393949e-01,
+ 9.58645225e-01, 9.70693650e-01, 9.79935831e-01, 9.86795807e-01,
+ 9.91701328e-01, 9.95062145e-01, 9.97251917e-01, 9.98595014e-01,
+ 9.99358895e-01, 9.99752127e-01, 9.99927440e-01, 9.99988650e-01,
+ 9.99988650e-01, 9.99927440e-01, 9.99752127e-01, 9.99358895e-01,
+ 9.98595014e-01, 9.97251917e-01, 9.95062145e-01, 9.91701328e-01,
+ 9.86795807e-01, 9.79935831e-01, 9.70693650e-01, 9.58645225e-01,
+ 9.43393949e-01, 9.24594627e-01, 9.01975984e-01, 8.75360204e-01,
+ 8.44678279e-01, 8.09980291e-01, 7.71440129e-01, 7.29354445e-01,
+ 6.84136019e-01, 6.36301916e-01, 5.86457098e-01, 5.35274327e-01,
+ 4.83471316e-01, 4.31786202e-01, 3.80952458e-01, 3.31674323e-01,
+ 2.84603818e-01, 2.40320282e-01, 1.99313241e-01, 1.61969244e-01,
+ 1.28563118e-01, 9.92538592e-02, 7.40851840e-02, 5.29905465e-02,
+ 3.58022311e-02, 2.22639654e-02, 1.20463628e-02, 4.76441615e-03,
+};
+
+static const float mdct_win_2m5_24k[__LC3_MDCT_WIN_LEN(2500, 24000)] = {
+ 3.89013421e-03, 8.20259508e-03, 1.37023556e-02, 2.05296853e-02,
+ 2.88030773e-02, 3.86278514e-02, 5.00956972e-02, 6.32829654e-02,
+ 7.82488109e-02, 9.50334651e-02, 1.13656749e-01, 1.34116888e-01,
+ 1.56389671e-01, 1.80427981e-01, 2.06161727e-01, 2.33498181e-01,
+ 2.62322720e-01, 2.92499991e-01, 3.23875450e-01, 3.56277288e-01,
+ 3.89518694e-01, 4.23400416e-01, 4.57713594e-01, 4.92242792e-01,
+ 5.26769190e-01, 5.61073868e-01, 5.94941120e-01, 6.28161737e-01,
+ 6.60536189e-01, 6.91877646e-01, 7.22014766e-01, 7.50794208e-01,
+ 7.78082793e-01, 8.03769285e-01, 8.27765737e-01, 8.50008365e-01,
+ 8.70457945e-01, 8.89099694e-01, 9.05942652e-01, 9.21018560e-01,
+ 9.34380273e-01, 9.46099727e-01, 9.56265526e-01, 9.64980202e-01,
+ 9.72357239e-01, 9.78517931e-01, 9.83588198e-01, 9.87695434e-01,
+ 9.90965519e-01, 9.93520077e-01, 9.95474078e-01, 9.96933861e-01,
+ 9.97995624e-01, 9.98744422e-01, 9.99253666e-01, 9.99585105e-01,
+ 9.99789244e-01, 9.99906118e-01, 9.99966358e-01, 9.99992433e-01,
+ 9.99992433e-01, 9.99966358e-01, 9.99906118e-01, 9.99789244e-01,
+ 9.99585105e-01, 9.99253666e-01, 9.98744422e-01, 9.97995624e-01,
+ 9.96933861e-01, 9.95474078e-01, 9.93520077e-01, 9.90965519e-01,
+ 9.87695434e-01, 9.83588198e-01, 9.78517931e-01, 9.72357239e-01,
+ 9.64980202e-01, 9.56265526e-01, 9.46099727e-01, 9.34380273e-01,
+ 9.21018560e-01, 9.05942652e-01, 8.89099694e-01, 8.70457945e-01,
+ 8.50008365e-01, 8.27765737e-01, 8.03769285e-01, 7.78082793e-01,
+ 7.50794208e-01, 7.22014766e-01, 6.91877646e-01, 6.60536189e-01,
+ 6.28161737e-01, 5.94941120e-01, 5.61073868e-01, 5.26769190e-01,
+ 4.92242792e-01, 4.57713594e-01, 4.23400416e-01, 3.89518694e-01,
+ 3.56277288e-01, 3.23875450e-01, 2.92499991e-01, 2.62322720e-01,
+ 2.33498181e-01, 2.06161727e-01, 1.80427981e-01, 1.56389671e-01,
+ 1.34116888e-01, 1.13656749e-01, 9.50334651e-02, 7.82488109e-02,
+ 6.32829654e-02, 5.00956972e-02, 3.86278514e-02, 2.88030773e-02,
+ 2.05296853e-02, 1.37023556e-02, 8.20259508e-03, 3.89013421e-03,
+};
+
+static const float mdct_win_2m5_32k[__LC3_MDCT_WIN_LEN(2500, 32000)] = {
+ 3.36895835e-03, 6.45555741e-03, 1.01430808e-02, 1.45212685e-02,
+ 1.96507673e-02, 2.55835280e-02, 3.23662853e-02, 4.00411787e-02,
+ 4.86456418e-02, 5.82120708e-02, 6.87674290e-02, 8.03328498e-02,
+ 9.29232660e-02, 1.06547081e-01, 1.21205893e-01, 1.36894275e-01,
+ 1.53599623e-01, 1.71302066e-01, 1.89974455e-01, 2.09582413e-01,
+ 2.30084468e-01, 2.51432255e-01, 2.73570790e-01, 2.96438816e-01,
+ 3.19969212e-01, 3.44089476e-01, 3.68722258e-01, 3.93785956e-01,
+ 4.19195353e-01, 4.44862309e-01, 4.70696475e-01, 4.96606050e-01,
+ 5.22498546e-01, 5.48281575e-01, 5.73863636e-01, 5.99154896e-01,
+ 6.24067964e-01, 6.48518633e-01, 6.72426605e-01, 6.95716161e-01,
+ 7.18316799e-01, 7.40163807e-01, 7.61198780e-01, 7.81370064e-01,
+ 8.00633131e-01, 8.18950870e-01, 8.36293796e-01, 8.52640176e-01,
+ 8.67976054e-01, 8.82295205e-01, 8.95598976e-01, 9.07896060e-01,
+ 9.19202165e-01, 9.29539615e-01, 9.38936863e-01, 9.47427941e-01,
+ 9.55051846e-01, 9.61851871e-01, 9.67874900e-01, 9.73170662e-01,
+ 9.77790986e-01, 9.81789034e-01, 9.85218555e-01, 9.88133167e-01,
+ 9.90585664e-01, 9.92627388e-01, 9.94307658e-01, 9.95673273e-01,
+ 9.96768094e-01, 9.97632718e-01, 9.98304240e-01, 9.98816100e-01,
+ 9.99198030e-01, 9.99476075e-01, 9.99672688e-01, 9.99806905e-01,
+ 9.99894561e-01, 9.99948558e-01, 9.99979163e-01, 9.99994325e-01,
+ 9.99994325e-01, 9.99979163e-01, 9.99948558e-01, 9.99894561e-01,
+ 9.99806905e-01, 9.99672688e-01, 9.99476075e-01, 9.99198030e-01,
+ 9.98816100e-01, 9.98304240e-01, 9.97632718e-01, 9.96768094e-01,
+ 9.95673273e-01, 9.94307658e-01, 9.92627388e-01, 9.90585664e-01,
+ 9.88133167e-01, 9.85218555e-01, 9.81789034e-01, 9.77790986e-01,
+ 9.73170662e-01, 9.67874900e-01, 9.61851871e-01, 9.55051846e-01,
+ 9.47427941e-01, 9.38936863e-01, 9.29539615e-01, 9.19202165e-01,
+ 9.07896060e-01, 8.95598976e-01, 8.82295205e-01, 8.67976054e-01,
+ 8.52640176e-01, 8.36293796e-01, 8.18950870e-01, 8.00633131e-01,
+ 7.81370064e-01, 7.61198780e-01, 7.40163807e-01, 7.18316799e-01,
+ 6.95716161e-01, 6.72426605e-01, 6.48518633e-01, 6.24067964e-01,
+ 5.99154896e-01, 5.73863636e-01, 5.48281575e-01, 5.22498546e-01,
+ 4.96606050e-01, 4.70696475e-01, 4.44862309e-01, 4.19195353e-01,
+ 3.93785956e-01, 3.68722258e-01, 3.44089476e-01, 3.19969212e-01,
+ 2.96438816e-01, 2.73570790e-01, 2.51432255e-01, 2.30084468e-01,
+ 2.09582413e-01, 1.89974455e-01, 1.71302066e-01, 1.53599623e-01,
+ 1.36894275e-01, 1.21205893e-01, 1.06547081e-01, 9.29232660e-02,
+ 8.03328498e-02, 6.87674290e-02, 5.82120708e-02, 4.86456418e-02,
+ 4.00411787e-02, 3.23662853e-02, 2.55835280e-02, 1.96507673e-02,
+ 1.45212685e-02, 1.01430808e-02, 6.45555741e-03, 3.36895835e-03,
+};
+
+static const float mdct_win_2m5_48k[__LC3_MDCT_WIN_LEN(2500, 48000)] = {
+ 2.75074638e-03, 4.77524515e-03, 6.99126548e-03, 9.47011816e-03,
+ 1.22441576e-02, 1.53355947e-02, 1.87626677e-02, 2.25415434e-02,
+ 2.66870142e-02, 3.12127707e-02, 3.61315008e-02, 4.14549100e-02,
+ 4.71937052e-02, 5.33575588e-02, 5.99550649e-02, 6.69936920e-02,
+ 7.44797342e-02, 8.24182658e-02, 9.08130967e-02, 9.96667332e-02,
+ 1.08980342e-01, 1.18753719e-01, 1.28985265e-01, 1.39671964e-01,
+ 1.50809372e-01, 1.62391604e-01, 1.74411338e-01, 1.86859813e-01,
+ 1.99726844e-01, 2.13000841e-01, 2.26668825e-01, 2.40716465e-01,
+ 2.55128110e-01, 2.69886836e-01, 2.84974488e-01, 3.00371741e-01,
+ 3.16058154e-01, 3.32012241e-01, 3.48211540e-01, 3.64632687e-01,
+ 3.81251499e-01, 3.98043054e-01, 4.14981787e-01, 4.32041576e-01,
+ 4.49195839e-01, 4.66417630e-01, 4.83679744e-01, 5.00954812e-01,
+ 5.18215407e-01, 5.35434150e-01, 5.52583807e-01, 5.69637402e-01,
+ 5.86568309e-01, 6.03350364e-01, 6.19957957e-01, 6.36366131e-01,
+ 6.52550680e-01, 6.68488237e-01, 6.84156362e-01, 6.99533624e-01,
+ 7.14599684e-01, 7.29335364e-01, 7.43722715e-01, 7.57745082e-01,
+ 7.71387158e-01, 7.84635031e-01, 7.97476230e-01, 8.09899758e-01,
+ 8.21896119e-01, 8.33457339e-01, 8.44576978e-01, 8.55250134e-01,
+ 8.65473441e-01, 8.75245054e-01, 8.84564635e-01, 8.93433321e-01,
+ 9.01853689e-01, 9.09829718e-01, 9.17366735e-01, 9.24471360e-01,
+ 9.31151439e-01, 9.37415982e-01, 9.43275077e-01, 9.48739819e-01,
+ 9.53822215e-01, 9.58535102e-01, 9.62892048e-01, 9.66907259e-01,
+ 9.70595479e-01, 9.73971891e-01, 9.77052016e-01, 9.79851615e-01,
+ 9.82386589e-01, 9.84672882e-01, 9.86726389e-01, 9.88562863e-01,
+ 9.90197830e-01, 9.91646510e-01, 9.92923740e-01, 9.94043905e-01,
+ 9.95020875e-01, 9.95867954e-01, 9.96597827e-01, 9.97222527e-01,
+ 9.97753399e-01, 9.98201077e-01, 9.98575471e-01, 9.98885756e-01,
+ 9.99140376e-01, 9.99347044e-01, 9.99512763e-01, 9.99643838e-01,
+ 9.99745907e-01, 9.99823966e-01, 9.99882403e-01, 9.99925037e-01,
+ 9.99955157e-01, 9.99975561e-01, 9.99988598e-01, 9.99996217e-01,
+ 9.99996217e-01, 9.99988598e-01, 9.99975561e-01, 9.99955157e-01,
+ 9.99925037e-01, 9.99882403e-01, 9.99823966e-01, 9.99745907e-01,
+ 9.99643838e-01, 9.99512763e-01, 9.99347044e-01, 9.99140376e-01,
+ 9.98885756e-01, 9.98575471e-01, 9.98201077e-01, 9.97753399e-01,
+ 9.97222527e-01, 9.96597827e-01, 9.95867954e-01, 9.95020875e-01,
+ 9.94043905e-01, 9.92923740e-01, 9.91646510e-01, 9.90197830e-01,
+ 9.88562863e-01, 9.86726389e-01, 9.84672882e-01, 9.82386589e-01,
+ 9.79851615e-01, 9.77052016e-01, 9.73971891e-01, 9.70595479e-01,
+ 9.66907259e-01, 9.62892048e-01, 9.58535102e-01, 9.53822215e-01,
+ 9.48739819e-01, 9.43275077e-01, 9.37415982e-01, 9.31151439e-01,
+ 9.24471360e-01, 9.17366735e-01, 9.09829718e-01, 9.01853689e-01,
+ 8.93433321e-01, 8.84564635e-01, 8.75245054e-01, 8.65473441e-01,
+ 8.55250134e-01, 8.44576978e-01, 8.33457339e-01, 8.21896119e-01,
+ 8.09899758e-01, 7.97476230e-01, 7.84635031e-01, 7.71387158e-01,
+ 7.57745082e-01, 7.43722715e-01, 7.29335364e-01, 7.14599684e-01,
+ 6.99533624e-01, 6.84156362e-01, 6.68488237e-01, 6.52550680e-01,
+ 6.36366131e-01, 6.19957957e-01, 6.03350364e-01, 5.86568309e-01,
+ 5.69637402e-01, 5.52583807e-01, 5.35434150e-01, 5.18215407e-01,
+ 5.00954812e-01, 4.83679744e-01, 4.66417630e-01, 4.49195839e-01,
+ 4.32041576e-01, 4.14981787e-01, 3.98043054e-01, 3.81251499e-01,
+ 3.64632687e-01, 3.48211540e-01, 3.32012241e-01, 3.16058154e-01,
+ 3.00371741e-01, 2.84974488e-01, 2.69886836e-01, 2.55128110e-01,
+ 2.40716465e-01, 2.26668825e-01, 2.13000841e-01, 1.99726844e-01,
+ 1.86859813e-01, 1.74411338e-01, 1.62391604e-01, 1.50809372e-01,
+ 1.39671964e-01, 1.28985265e-01, 1.18753719e-01, 1.08980342e-01,
+ 9.96667332e-02, 9.08130967e-02, 8.24182658e-02, 7.44797342e-02,
+ 6.69936920e-02, 5.99550649e-02, 5.33575588e-02, 4.71937052e-02,
+ 4.14549100e-02, 3.61315008e-02, 3.12127707e-02, 2.66870142e-02,
+ 2.25415434e-02, 1.87626677e-02, 1.53355947e-02, 1.22441576e-02,
+ 9.47011816e-03, 6.99126548e-03, 4.77524515e-03, 2.75074638e-03,
+};
+
+#if LC3_PLUS_HR
+
+static const float mdct_win_2m5_48k_hr[__LC3_MDCT_WIN_LEN(2500, 48000)] = {
+ 1.92887526e-07, 1.26862312e-06, 3.73694297e-06, 8.64938647e-06,
+ 1.75249988e-05, 3.25100409e-05, 5.65499504e-05, 9.35865319e-05,
+ 1.48780979e-04, 2.28761899e-04, 3.41896375e-04, 4.98580979e-04,
+ 7.11548259e-04, 9.96182440e-04, 1.37083745e-03, 1.85714674e-03,
+ 2.48031598e-03, 3.26938415e-03, 4.25744150e-03, 5.48178842e-03,
+ 6.98402245e-03, 8.81003775e-03, 1.10099232e-02, 1.36377569e-02,
+ 1.67512707e-02, 2.04114113e-02, 2.46817525e-02, 2.96278261e-02,
+ 3.53163108e-02, 4.18141559e-02, 4.91876006e-02, 5.75011559e-02,
+ 6.68165460e-02, 7.71916136e-02, 8.86792317e-02, 1.01326235e-01,
+ 1.15172401e-01, 1.30249396e-01, 1.46579877e-01, 1.64176553e-01,
+ 1.83041364e-01, 2.03164726e-01, 2.24524856e-01, 2.47087196e-01,
+ 2.70803988e-01, 2.95613915e-01, 3.21442008e-01, 3.48199695e-01,
+ 3.75785023e-01, 4.04083431e-01, 4.32968378e-01, 4.62302625e-01,
+ 4.91939783e-01, 5.21726012e-01, 5.51502347e-01, 5.81106782e-01,
+ 6.10377192e-01, 6.39154077e-01, 6.67283058e-01, 6.94617987e-01,
+ 7.21023440e-01, 7.46377110e-01, 7.70571768e-01, 7.93517113e-01,
+ 8.15140784e-01, 8.35389018e-01, 8.54227006e-01, 8.71638596e-01,
+ 8.87625158e-01, 9.02204990e-01, 9.15411413e-01, 9.27291155e-01,
+ 9.37902570e-01, 9.47313428e-01, 9.55598950e-01, 9.62839723e-01,
+ 9.69119847e-01, 9.74524975e-01, 9.79140759e-01, 9.83051181e-01,
+ 9.86337543e-01, 9.89076972e-01, 9.91342008e-01, 9.93199587e-01,
+ 9.94710743e-01, 9.95930433e-01, 9.96907234e-01, 9.97683644e-01,
+ 9.98296261e-01, 9.98776138e-01, 9.99149203e-01, 9.99436796e-01,
+ 9.99656200e-01, 9.99821365e-01, 9.99943137e-01, 1.00003016e+00,
+ 1.00008917e+00, 1.00012529e+00, 1.00014281e+00, 1.00014508e+00,
+ 1.00013494e+00, 1.00011492e+00, 1.00008726e+00, 1.00005412e+00,
+ 1.00001764e+00, 9.99979734e-01, 9.99942362e-01, 9.99907196e-01,
+ 9.99876022e-01, 9.99850094e-01, 9.99830663e-01, 9.99818563e-01,
+ 9.99814391e-01, 9.99818325e-01, 9.99830186e-01, 9.99849498e-01,
+ 9.99875486e-01, 9.99906898e-01, 9.99942422e-01, 9.99980509e-01,
+ 1.00001943e+00, 1.00005758e+00, 1.00009310e+00, 1.00012457e+00,
+ 1.00015044e+00, 1.00016987e+00, 1.00018167e+00, 1.00018561e+00,
+ 1.00018144e+00, 1.00016928e+00, 1.00014985e+00, 1.00012374e+00,
+ 1.00009227e+00, 1.00005662e+00, 1.00001836e+00, 9.99978960e-01,
+ 9.99939740e-01, 9.99902129e-01, 9.99867082e-01, 9.99835134e-01,
+ 9.99806285e-01, 9.99779761e-01, 9.99753773e-01, 9.99725282e-01,
+ 9.99689877e-01, 9.99641180e-01, 9.99570787e-01, 9.99467850e-01,
+ 9.99318600e-01, 9.99105930e-01, 9.98809040e-01, 9.98403072e-01,
+ 9.97858584e-01, 9.97141182e-01, 9.96211350e-01, 9.95023966e-01,
+ 9.93528485e-01, 9.91668522e-01, 9.89382327e-01, 9.86602664e-01,
+ 9.83257711e-01, 9.79271173e-01, 9.74563420e-01, 9.69052374e-01,
+ 9.62654769e-01, 9.55287457e-01, 9.46869195e-01, 9.37322080e-01,
+ 9.26573634e-01, 9.14558887e-01, 9.01221931e-01, 8.86518419e-01,
+ 8.70416999e-01, 8.52901220e-01, 8.33971083e-01, 8.13643873e-01,
+ 7.91955233e-01, 7.68959403e-01, 7.44728804e-01, 7.19353676e-01,
+ 6.92940772e-01, 6.65611804e-01, 6.37501359e-01, 6.08754635e-01,
+ 5.79524696e-01, 5.49970031e-01, 5.20251453e-01, 4.90529478e-01,
+ 4.60961968e-01, 4.31701392e-01, 4.02893007e-01, 3.74672860e-01,
+ 3.47166419e-01, 3.20487350e-01, 2.94736743e-01, 2.70002425e-01,
+ 2.46358722e-01, 2.23866433e-01, 2.02572897e-01, 1.82512373e-01,
+ 1.63706377e-01, 1.46164373e-01, 1.29884347e-01, 1.14853561e-01,
+ 1.01049446e-01, 8.84404257e-02, 7.69868940e-02, 6.66421950e-02,
+ 5.73536530e-02, 4.90636751e-02, 4.17107828e-02, 3.52307148e-02,
+ 2.95574907e-02, 2.46244166e-02, 2.03650557e-02, 1.67141166e-02,
+ 1.36082442e-02, 1.09867034e-02, 8.79194960e-03, 6.97008055e-03,
+ 5.47116203e-03, 4.24943818e-03, 3.26343346e-03, 2.47595203e-03,
+ 1.85399409e-03, 1.36859657e-03, 9.94618051e-04, 7.10477470e-04,
+ 4.97864152e-04, 3.41428356e-04, 2.28464938e-04, 1.48598730e-04,
+ 9.34789787e-05, 5.64894217e-05, 3.24779357e-05, 1.75092246e-05,
+ 8.64240701e-06, 3.73430225e-06, 1.26786131e-06, 1.92776696e-07,
+};
+
+static const float mdct_win_2m5_96k_hr[__LC3_MDCT_WIN_LEN(2500, 96000)] = {
+ 1.36335345e-07, 4.57767612e-07, 9.97567554e-07, 1.84077624e-06,
+ 3.09224833e-06, 4.88094383e-06, 7.36381799e-06, 1.07300075e-05,
+ 1.52053863e-05, 2.10575054e-05, 2.86009363e-05, 3.82030121e-05,
+ 5.02899893e-05, 6.53535899e-05, 8.39579952e-05, 1.06747175e-04,
+ 1.34452668e-04, 1.67901671e-04, 2.08025551e-04, 2.55868625e-04,
+ 3.12597229e-04, 3.79509147e-04, 4.58043127e-04, 5.49788703e-04,
+ 6.56496093e-04, 7.80086033e-04, 9.22659819e-04, 1.08650920e-03,
+ 1.27412600e-03, 1.48821168e-03, 1.73168664e-03, 2.00769864e-03,
+ 2.31963093e-03, 2.67111068e-03, 3.06601473e-03, 3.50847607e-03,
+ 4.00288915e-03, 4.55391267e-03, 5.16647473e-03, 5.84577024e-03,
+ 6.59726607e-03, 7.42669497e-03, 8.34005512e-03, 9.34360363e-03,
+ 1.04438523e-02, 1.16475578e-02, 1.29617099e-02, 1.43935224e-02,
+ 1.59504171e-02, 1.76400058e-02, 1.94700807e-02, 2.14485861e-02,
+ 2.35835947e-02, 2.58832965e-02, 2.83559617e-02, 3.10099237e-02,
+ 3.38535421e-02, 3.68951820e-02, 4.01431806e-02, 4.36058082e-02,
+ 4.72912528e-02, 5.12075722e-02, 5.53626679e-02, 5.97642474e-02,
+ 6.44197986e-02, 6.93365484e-02, 7.45214298e-02, 7.99810365e-02,
+ 8.57216269e-02, 9.17490497e-02, 9.80687290e-02, 1.04685634e-01,
+ 1.11604236e-01, 1.18828513e-01, 1.26361862e-01, 1.34207115e-01,
+ 1.42366499e-01, 1.50841609e-01, 1.59633383e-01, 1.68742076e-01,
+ 1.78167209e-01, 1.87907621e-01, 1.97961360e-01, 2.08325714e-01,
+ 2.18997195e-01, 2.29971498e-01, 2.41243511e-01, 2.52807260e-01,
+ 2.64655977e-01, 2.76782036e-01, 2.89176911e-01, 3.01831275e-01,
+ 3.14734906e-01, 3.27876776e-01, 3.41245025e-01, 3.54826927e-01,
+ 3.68608981e-01, 3.82576853e-01, 3.96715522e-01, 4.11009163e-01,
+ 4.25441355e-01, 4.39994961e-01, 4.54652220e-01, 4.69394863e-01,
+ 4.84204173e-01, 4.99060899e-01, 5.13945460e-01, 5.28838038e-01,
+ 5.43718576e-01, 5.58566749e-01, 5.73362410e-01, 5.88085234e-01,
+ 6.02715075e-01, 6.17232025e-01, 6.31616414e-01, 6.45848989e-01,
+ 6.59910858e-01, 6.73783839e-01, 6.87450290e-01, 7.00893283e-01,
+ 7.14096606e-01, 7.27045000e-01, 7.39724100e-01, 7.52120554e-01,
+ 7.64221907e-01, 7.76016891e-01, 7.87495315e-01, 7.98648119e-01,
+ 8.09467375e-01, 8.19946468e-01, 8.30079675e-01, 8.39862764e-01,
+ 8.49292517e-01, 8.58366787e-01, 8.67084682e-01, 8.75446379e-01,
+ 8.83453131e-01, 8.91107082e-01, 8.98411512e-01, 9.05370474e-01,
+ 9.11989033e-01, 9.18272913e-01, 9.24228728e-01, 9.29863691e-01,
+ 9.35185611e-01, 9.40202892e-01, 9.44924474e-01, 9.49359715e-01,
+ 9.53518271e-01, 9.57410157e-01, 9.61045623e-01, 9.64435160e-01,
+ 9.67589259e-01, 9.70518589e-01, 9.73233819e-01, 9.75745618e-01,
+ 9.78064537e-01, 9.80201006e-01, 9.82165277e-01, 9.83967602e-01,
+ 9.85617757e-01, 9.87125397e-01, 9.88499880e-01, 9.89750206e-01,
+ 9.90885139e-01, 9.91913080e-01, 9.92841959e-01, 9.93679583e-01,
+ 9.94433045e-01, 9.95109439e-01, 9.95715141e-01, 9.96256351e-01,
+ 9.96738791e-01, 9.97167945e-01, 9.97548699e-01, 9.97885823e-01,
+ 9.98183608e-01, 9.98446047e-01, 9.98676717e-01, 9.98879075e-01,
+ 9.99056041e-01, 9.99210536e-01, 9.99344945e-01, 9.99461591e-01,
+ 9.99562562e-01, 9.99649644e-01, 9.99724448e-01, 9.99788404e-01,
+ 9.99842882e-01, 9.99888957e-01, 9.99927700e-01, 9.99959946e-01,
+ 9.99986470e-01, 1.00000799e+00, 1.00002515e+00, 1.00003839e+00,
+ 1.00004816e+00, 1.00005496e+00, 1.00005913e+00, 1.00006092e+00,
+ 1.00006080e+00, 1.00005877e+00, 1.00005519e+00, 1.00005031e+00,
+ 1.00004435e+00, 1.00003731e+00, 1.00002968e+00, 1.00002134e+00,
+ 1.00001252e+00, 1.00000334e+00, 9.99994040e-01, 9.99984682e-01,
+ 9.99975443e-01, 9.99966383e-01, 9.99957621e-01, 9.99949336e-01,
+ 9.99941528e-01, 9.99934316e-01, 9.99927878e-01, 9.99922156e-01,
+ 9.99917269e-01, 9.99913335e-01, 9.99910295e-01, 9.99908268e-01,
+ 9.99907196e-01, 9.99907196e-01, 9.99908149e-01, 9.99910176e-01,
+ 9.99913156e-01, 9.99917090e-01, 9.99921918e-01, 9.99927640e-01,
+ 9.99934137e-01, 9.99941349e-01, 9.99949217e-01, 9.99957681e-01,
+ 9.99966562e-01, 9.99975860e-01, 9.99985397e-01, 9.99995112e-01,
+ 1.00000489e+00, 1.00001454e+00, 1.00002408e+00, 1.00003338e+00,
+ 1.00004232e+00, 1.00005078e+00, 1.00005865e+00, 1.00006592e+00,
+ 1.00007236e+00, 1.00007808e+00, 1.00008297e+00, 1.00008690e+00,
+ 1.00008988e+00, 1.00009179e+00, 1.00009286e+00, 1.00009274e+00,
+ 1.00009179e+00, 1.00008965e+00, 1.00008667e+00, 1.00008261e+00,
+ 1.00007772e+00, 1.00007200e+00, 1.00006545e+00, 1.00005817e+00,
+ 1.00005031e+00, 1.00004172e+00, 1.00003278e+00, 1.00002337e+00,
+ 1.00001371e+00, 1.00000370e+00, 9.99993682e-01, 9.99983490e-01,
+ 9.99973357e-01, 9.99963224e-01, 9.99953210e-01, 9.99943376e-01,
+ 9.99933660e-01, 9.99924064e-01, 9.99914587e-01, 9.99905109e-01,
+ 9.99895573e-01, 9.99885738e-01, 9.99875546e-01, 9.99864578e-01,
+ 9.99852657e-01, 9.99839306e-01, 9.99824166e-01, 9.99806523e-01,
+ 9.99785900e-01, 9.99761462e-01, 9.99732316e-01, 9.99697566e-01,
+ 9.99655962e-01, 9.99606311e-01, 9.99547124e-01, 9.99476731e-01,
+ 9.99393344e-01, 9.99294996e-01, 9.99179363e-01, 9.99043941e-01,
+ 9.98886049e-01, 9.98702645e-01, 9.98490512e-01, 9.98246014e-01,
+ 9.97965276e-01, 9.97644246e-01, 9.97278214e-01, 9.96862471e-01,
+ 9.96391773e-01, 9.95860577e-01, 9.95262980e-01, 9.94592726e-01,
+ 9.93843138e-01, 9.93007302e-01, 9.92077827e-01, 9.91046965e-01,
+ 9.89906728e-01, 9.88648713e-01, 9.87264156e-01, 9.85744119e-01,
+ 9.84079301e-01, 9.82260108e-01, 9.80276704e-01, 9.78119195e-01,
+ 9.75777209e-01, 9.73240614e-01, 9.70498860e-01, 9.67541456e-01,
+ 9.64357972e-01, 9.60937798e-01, 9.57270682e-01, 9.53346252e-01,
+ 9.49154437e-01, 9.44685459e-01, 9.39929724e-01, 9.34878111e-01,
+ 9.29521918e-01, 9.23852861e-01, 9.17863250e-01, 9.11546052e-01,
+ 9.04894829e-01, 8.97903919e-01, 8.90568554e-01, 8.82884681e-01,
+ 8.74849200e-01, 8.66460025e-01, 8.57716084e-01, 8.48617196e-01,
+ 8.39164436e-01, 8.29359889e-01, 8.19206893e-01, 8.08709860e-01,
+ 7.97874272e-01, 7.86707044e-01, 7.75215983e-01, 7.63410211e-01,
+ 7.51299858e-01, 7.38896310e-01, 7.26211846e-01, 7.13259816e-01,
+ 7.00054646e-01, 6.86611593e-01, 6.72946632e-01, 6.59076810e-01,
+ 6.45019531e-01, 6.30793154e-01, 6.16416335e-01, 6.01908267e-01,
+ 5.87288618e-01, 5.72577178e-01, 5.57793975e-01, 5.42959273e-01,
+ 5.28093219e-01, 5.13215959e-01, 4.98347521e-01, 4.83507633e-01,
+ 4.68715757e-01, 4.53991085e-01, 4.39352304e-01, 4.24817562e-01,
+ 4.10404533e-01, 3.96130294e-01, 3.82011205e-01, 3.68063033e-01,
+ 3.54300767e-01, 3.40738595e-01, 3.27390045e-01, 3.14267725e-01,
+ 3.01383466e-01, 2.88748264e-01, 2.76372313e-01, 2.64264882e-01,
+ 2.52434462e-01, 2.40888610e-01, 2.29634136e-01, 2.18676925e-01,
+ 2.08022103e-01, 1.97673932e-01, 1.87635899e-01, 1.77910715e-01,
+ 1.68500274e-01, 1.59405768e-01, 1.50627658e-01, 1.42165691e-01,
+ 1.34018898e-01, 1.26185730e-01, 1.18663922e-01, 1.11450672e-01,
+ 1.04542568e-01, 9.79356542e-02, 9.16254595e-02, 8.56070295e-02,
+ 7.98749477e-02, 7.44233727e-02, 6.92460760e-02, 6.43364564e-02,
+ 5.96875995e-02, 5.52923009e-02, 5.11430874e-02, 4.72322591e-02,
+ 4.35519405e-02, 4.00940813e-02, 3.68505120e-02, 3.38129811e-02,
+ 3.09731625e-02, 2.83227116e-02, 2.58532818e-02, 2.35565584e-02,
+ 2.14242823e-02, 1.94482822e-02, 1.76204946e-02, 1.59329921e-02,
+ 1.43779973e-02, 1.29479105e-02, 1.16353221e-02, 1.04330294e-02,
+ 9.33405478e-03, 8.33165180e-03, 7.41932075e-03, 6.59081247e-03,
+ 5.84013900e-03, 5.16157458e-03, 4.54966258e-03, 3.99921415e-03,
+ 3.50530911e-03, 3.06329457e-03, 2.66878284e-03, 2.31764605e-03,
+ 2.00601248e-03, 1.73026032e-03, 1.48701016e-03, 1.27311819e-03,
+ 1.08566787e-03, 9.21960978e-04, 7.79508497e-04, 6.56021410e-04,
+ 5.49400807e-04, 4.57728049e-04, 3.79254925e-04, 3.12393560e-04,
+ 2.55706662e-04, 2.07897814e-04, 1.67801816e-04, 1.34375354e-04,
+ 1.06687941e-04, 8.39131390e-05, 6.53200550e-05, 5.02652765e-05,
+ 3.81850987e-05, 2.85881870e-05, 2.10486251e-05, 1.51993554e-05,
+ 1.07260339e-05, 7.36129550e-06, 4.87941543e-06, 3.09137795e-06,
+ 1.84032115e-06, 9.97358256e-07, 4.57689993e-07, 1.36315705e-07,
+};
+
+#endif /* LC3_PLUS_HR */
+
+static const float mdct_win_5m_8k[__LC3_MDCT_WIN_LEN(5000, 8000)] = {
+ 9.95908659e-04, 3.81905679e-03, 9.54083261e-03, 1.92165980e-02,
+ 3.38271908e-02, 5.42483167e-02, 8.12077767e-02, 1.15217189e-01,
+ 1.56494233e-01, 2.04936342e-01, 2.60116658e-01, 3.21281416e-01,
+ 3.87347300e-01, 4.56949708e-01, 5.28519296e-01, 6.00352249e-01,
+ 6.70689638e-01, 7.37804446e-01, 8.00092531e-01, 8.56140918e-01,
+ 9.04827229e-01, 9.45368503e-01, 9.77350743e-01, 1.00080087e+00,
+ 1.01617159e+00, 1.02431525e+00, 1.02641543e+00, 1.02385837e+00,
+ 1.01813571e+00, 1.01079482e+00, 1.00340651e+00, 9.96783127e-01,
+ 9.92099552e-01, 9.89220694e-01, 9.87965832e-01, 9.88127353e-01,
+ 9.89480554e-01, 9.91784992e-01, 9.94784758e-01, 9.98211967e-01,
+ 1.00179124e+00, 1.00524258e+00, 1.00828305e+00, 1.01063128e+00,
+ 1.01201530e+00, 1.01218075e+00, 1.01089677e+00, 1.00796336e+00,
+ 1.00322726e+00, 9.96605055e-01, 9.86828423e-01, 9.73125029e-01,
+ 9.54063648e-01, 9.28386428e-01, 8.95091686e-01, 8.53476936e-01,
+ 8.03209093e-01, 7.44473520e-01, 6.78078703e-01, 6.05397045e-01,
+ 5.28207751e-01, 4.48655296e-01, 3.69187599e-01, 2.92456641e-01,
+ 2.21071854e-01, 1.57314858e-01, 1.03052576e-01, 5.98273224e-02,
+ 2.87183192e-02, 9.68388493e-03,
+};
+
+static const float mdct_win_5m_16k[__LC3_MDCT_WIN_LEN(5000, 16000)] = {
+ 6.14338818e-04, 1.48958283e-03, 2.88410496e-03, 4.93429883e-03,
+ 7.77913046e-03, 1.15491061e-02, 1.63715562e-02, 2.23711616e-02,
+ 2.96615969e-02, 3.83566333e-02, 4.85561099e-02, 6.03505574e-02,
+ 7.38228820e-02, 8.90356369e-02, 1.06035623e-01, 1.24853486e-01,
+ 1.45493189e-01, 1.67943556e-01, 1.92172862e-01, 2.18123826e-01,
+ 2.45725974e-01, 2.74883943e-01, 3.05482471e-01, 3.37387380e-01,
+ 3.70441593e-01, 4.04474963e-01, 4.39300436e-01, 4.74722545e-01,
+ 5.10534149e-01, 5.46520192e-01, 5.82465810e-01, 6.18145266e-01,
+ 6.53341146e-01, 6.87836730e-01, 7.21417603e-01, 7.53888797e-01,
+ 7.85054657e-01, 8.14739745e-01, 8.42781936e-01, 8.69037674e-01,
+ 8.93393548e-01, 9.15748356e-01, 9.36027020e-01, 9.54173114e-01,
+ 9.70163547e-01, 9.84003644e-01, 9.95719942e-01, 1.00537427e+00,
+ 1.01304666e+00, 1.01884338e+00, 1.02289695e+00, 1.02535529e+00,
+ 1.02638288e+00, 1.02615553e+00, 1.02485397e+00, 1.02266460e+00,
+ 1.01977940e+00, 1.01639169e+00, 1.01269703e+00, 1.00888519e+00,
+ 1.00537874e+00, 1.00156378e+00, 9.98253156e-01, 9.95434664e-01,
+ 9.93095027e-01, 9.91217091e-01, 9.89780519e-01, 9.88762494e-01,
+ 9.88138324e-01, 9.87881941e-01, 9.87966213e-01, 9.88363051e-01,
+ 9.89043407e-01, 9.89977232e-01, 9.91133456e-01, 9.92480044e-01,
+ 9.93984121e-01, 9.95612147e-01, 9.97330059e-01, 9.99103363e-01,
+ 1.00089744e+00, 1.00267709e+00, 1.00440719e+00, 1.00605229e+00,
+ 1.00757693e+00, 1.00894586e+00, 1.01012424e+00, 1.01107797e+00,
+ 1.01177396e+00, 1.01218036e+00, 1.01226671e+00, 1.01200406e+00,
+ 1.01136522e+00, 1.01032500e+00, 1.00886073e+00, 1.00695298e+00,
+ 1.00458627e+00, 1.00174990e+00, 9.98438663e-01, 9.94650033e-01,
+ 9.89575685e-01, 9.83830313e-01, 9.76999916e-01, 9.68914116e-01,
+ 9.59403812e-01, 9.48308632e-01, 9.35486022e-01, 9.20810131e-01,
+ 9.04173226e-01, 8.85488225e-01, 8.64686495e-01, 8.41723747e-01,
+ 8.16587571e-01, 7.89298635e-01, 7.59917189e-01, 7.28547452e-01,
+ 6.95328294e-01, 6.60433402e-01, 6.24066143e-01, 5.86446142e-01,
+ 5.47816066e-01, 5.08449976e-01, 4.68636143e-01, 4.28678989e-01,
+ 3.88903272e-01, 3.49643142e-01, 3.11236082e-01, 2.74012847e-01,
+ 2.38284723e-01, 2.04337983e-01, 1.72430586e-01, 1.42793979e-01,
+ 1.15638588e-01, 9.11582177e-02, 6.95274904e-02, 5.08897541e-02,
+ 3.53343019e-02, 2.28668041e-02, 1.33800502e-02, 6.64050653e-03,
+};
+
+static const float mdct_win_5m_24k[__LC3_MDCT_WIN_LEN(5000, 24000)] = {
+ 5.08722763e-04, 9.95908659e-04, 1.68220801e-03, 2.60969726e-03,
+ 3.81905679e-03, 5.34931959e-03, 7.24390638e-03, 9.54083261e-03,
+ 1.22763764e-02, 1.54895024e-02, 1.92165980e-02, 2.34936962e-02,
+ 2.83519958e-02, 3.38271908e-02, 3.99493954e-02, 4.67477524e-02,
+ 5.42483167e-02, 6.24777078e-02, 7.14583592e-02, 8.12077767e-02,
+ 9.17440041e-02, 1.03076496e-01, 1.15217189e-01, 1.28166571e-01,
+ 1.41926438e-01, 1.56494233e-01, 1.71859319e-01, 1.88013425e-01,
+ 2.04936342e-01, 2.22612306e-01, 2.41015124e-01, 2.60116658e-01,
+ 2.79887101e-01, 3.00288014e-01, 3.21281416e-01, 3.42820846e-01,
+ 3.64859656e-01, 3.87347300e-01, 4.10229495e-01, 4.33449453e-01,
+ 4.56949708e-01, 4.80669640e-01, 5.04547382e-01, 5.28519296e-01,
+ 5.52519610e-01, 5.76487245e-01, 6.00352249e-01, 6.24050987e-01,
+ 6.47518259e-01, 6.70689638e-01, 6.93502907e-01, 7.15892752e-01,
+ 7.37804446e-01, 7.59178724e-01, 7.79958661e-01, 8.00092531e-01,
+ 8.19531865e-01, 8.38228896e-01, 8.56140918e-01, 8.73231695e-01,
+ 8.89470202e-01, 9.04827229e-01, 9.19273638e-01, 9.32794041e-01,
+ 9.45368503e-01, 9.56988393e-01, 9.67648642e-01, 9.77350743e-01,
+ 9.86102783e-01, 9.93912241e-01, 1.00080087e+00, 1.00678781e+00,
+ 1.01190127e+00, 1.01617159e+00, 1.01963641e+00, 1.02233661e+00,
+ 1.02431525e+00, 1.02562130e+00, 1.02630344e+00, 1.02641543e+00,
+ 1.02600793e+00, 1.02513744e+00, 1.02385837e+00, 1.02222694e+00,
+ 1.02030055e+00, 1.01813571e+00, 1.01579215e+00, 1.01332597e+00,
+ 1.01079482e+00, 1.00826513e+00, 1.00604687e+00, 1.00340651e+00,
+ 1.00097740e+00, 9.98770454e-01, 9.96783127e-01, 9.95011891e-01,
+ 9.93452397e-01, 9.92099552e-01, 9.90947600e-01, 9.89990243e-01,
+ 9.89220694e-01, 9.88631804e-01, 9.88216090e-01, 9.87965832e-01,
+ 9.87873077e-01, 9.87929693e-01, 9.88127353e-01, 9.88457554e-01,
+ 9.88911587e-01, 9.89480554e-01, 9.90155346e-01, 9.90926656e-01,
+ 9.91784992e-01, 9.92720684e-01, 9.93723921e-01, 9.94784758e-01,
+ 9.95893149e-01, 9.97038957e-01, 9.98211967e-01, 9.99402034e-01,
+ 1.00059832e+00, 1.00179124e+00, 1.00296984e+00, 1.00412379e+00,
+ 1.00524258e+00, 1.00631572e+00, 1.00733269e+00, 1.00828305e+00,
+ 1.00915642e+00, 1.00994254e+00, 1.01063128e+00, 1.01121274e+00,
+ 1.01167723e+00, 1.01201530e+00, 1.01221778e+00, 1.01227579e+00,
+ 1.01218075e+00, 1.01192443e+00, 1.01149892e+00, 1.01089677e+00,
+ 1.01011097e+00, 1.00913509e+00, 1.00796336e+00, 1.00659076e+00,
+ 1.00501312e+00, 1.00322726e+00, 1.00123106e+00, 9.99023556e-01,
+ 9.96605055e-01, 9.93989471e-01, 9.90453920e-01, 9.86828423e-01,
+ 9.82771674e-01, 9.78220667e-01, 9.73125029e-01, 9.67432353e-01,
+ 9.61094704e-01, 9.54063648e-01, 9.46295299e-01, 9.37748911e-01,
+ 9.28386428e-01, 9.18176261e-01, 9.07086156e-01, 8.95091686e-01,
+ 8.82169624e-01, 8.68302529e-01, 8.53476936e-01, 8.37685201e-01,
+ 8.20927526e-01, 8.03209093e-01, 7.84545048e-01, 7.64955485e-01,
+ 7.44473520e-01, 7.23134807e-01, 7.00986056e-01, 6.78078703e-01,
+ 6.54468651e-01, 6.30221215e-01, 6.05397045e-01, 5.80071577e-01,
+ 5.54312928e-01, 5.28207751e-01, 5.01836972e-01, 4.75290296e-01,
+ 4.48655296e-01, 4.22028112e-01, 3.95505797e-01, 3.69187599e-01,
+ 3.43173285e-01, 3.17563302e-01, 2.92456641e-01, 2.67946378e-01,
+ 2.44123133e-01, 2.21071854e-01, 1.98871915e-01, 1.77596763e-01,
+ 1.57314858e-01, 1.38090336e-01, 1.19983750e-01, 1.03052576e-01,
+ 8.73508501e-02, 7.29281158e-02, 5.98273224e-02, 4.80817884e-02,
+ 3.77113530e-02, 2.87183192e-02, 2.10835203e-02, 1.47628941e-02,
+ 9.68388493e-03, 5.64216879e-03,
+};
+
+static const float mdct_win_5m_32k[__LC3_MDCT_WIN_LEN(5000, 32000)] = {
+ 4.59588635e-04, 7.91932361e-04, 1.22792717e-03, 1.78365327e-03,
+ 2.47954941e-03, 3.32979945e-03, 4.35353548e-03, 5.56496516e-03,
+ 6.98610836e-03, 8.62988232e-03, 1.05134341e-02, 1.26508264e-02,
+ 1.50609045e-02, 1.77559123e-02, 2.07547598e-02, 2.40681372e-02,
+ 2.77120786e-02, 3.16993325e-02, 3.60460964e-02, 4.07612864e-02,
+ 4.58603812e-02, 5.13513668e-02, 5.72478022e-02, 6.35585474e-02,
+ 7.02945073e-02, 7.74598720e-02, 8.50663537e-02, 9.31164162e-02,
+ 1.01616296e-01, 1.10569081e-01, 1.19978929e-01, 1.29841729e-01,
+ 1.40162380e-01, 1.50937156e-01, 1.62163230e-01, 1.73835412e-01,
+ 1.85952036e-01, 1.98500883e-01, 2.11477855e-01, 2.24873256e-01,
+ 2.38676395e-01, 2.52872945e-01, 2.67454701e-01, 2.82403147e-01,
+ 2.97705015e-01, 3.13341912e-01, 3.29297670e-01, 3.45549016e-01,
+ 3.62079505e-01, 3.78864867e-01, 3.95885158e-01, 4.13114379e-01,
+ 4.30530830e-01, 4.48107672e-01, 4.65822779e-01, 4.83646639e-01,
+ 5.01556485e-01, 5.19522807e-01, 5.37519704e-01, 5.55518384e-01,
+ 5.73495781e-01, 5.91418665e-01, 6.09262289e-01, 6.26998116e-01,
+ 6.44600201e-01, 6.62038458e-01, 6.79290655e-01, 6.96325643e-01,
+ 7.13119439e-01, 7.29646991e-01, 7.45886459e-01, 7.61809472e-01,
+ 7.77395845e-01, 7.92620875e-01, 8.07466639e-01, 8.21910156e-01,
+ 8.35934316e-01, 8.49518047e-01, 8.62648584e-01, 8.75308323e-01,
+ 8.87488472e-01, 8.99173772e-01, 9.10352743e-01, 9.21014413e-01,
+ 9.31155619e-01, 9.40764474e-01, 9.49838224e-01, 9.58373260e-01,
+ 9.66369041e-01, 9.73823562e-01, 9.80744251e-01, 9.87129797e-01,
+ 9.92987227e-01, 9.98324140e-01, 1.00315076e+00, 1.00747371e+00,
+ 1.01130915e+00, 1.01466668e+00, 1.01756334e+00, 1.02001468e+00,
+ 1.02203987e+00, 1.02365426e+00, 1.02488162e+00, 1.02573929e+00,
+ 1.02625071e+00, 1.02643667e+00, 1.02632086e+00, 1.02592292e+00,
+ 1.02526998e+00, 1.02438219e+00, 1.02328494e+00, 1.02200083e+00,
+ 1.02055597e+00, 1.01897139e+00, 1.01727518e+00, 1.01548913e+00,
+ 1.01363936e+00, 1.01174775e+00, 1.00984084e+00, 1.00793976e+00,
+ 1.00640740e+00, 1.00437483e+00, 1.00246981e+00, 1.00068907e+00,
+ 9.99034600e-01, 9.97502490e-01, 9.96094155e-01, 9.94805124e-01,
+ 9.93636273e-01, 9.92582654e-01, 9.91644701e-01, 9.90817076e-01,
+ 9.90099845e-01, 9.89487369e-01, 9.88979432e-01, 9.88570179e-01,
+ 9.88259191e-01, 9.88040442e-01, 9.87913369e-01, 9.87871810e-01,
+ 9.87915076e-01, 9.88036894e-01, 9.88236456e-01, 9.88507369e-01,
+ 9.88848709e-01, 9.89253949e-01, 9.89722041e-01, 9.90246329e-01,
+ 9.90825634e-01, 9.91453181e-01, 9.92127681e-01, 9.92842250e-01,
+ 9.93595510e-01, 9.94380481e-01, 9.95195724e-01, 9.96034188e-01,
+ 9.96894383e-01, 9.97769201e-01, 9.98657113e-01, 9.99550974e-01,
+ 1.00044923e+00, 1.00134469e+00, 1.00223579e+00, 1.00311529e+00,
+ 1.00398160e+00, 1.00482747e+00, 1.00565128e+00, 1.00644577e+00,
+ 1.00720935e+00, 1.00793478e+00, 1.00862050e+00, 1.00925931e+00,
+ 1.00984974e+00, 1.01038469e+00, 1.01086278e+00, 1.01127704e+00,
+ 1.01162625e+00, 1.01190357e+00, 1.01210795e+00, 1.01223276e+00,
+ 1.01227709e+00, 1.01223451e+00, 1.01210432e+00, 1.01188029e+00,
+ 1.01156197e+00, 1.01114337e+00, 1.01062432e+00, 1.00999915e+00,
+ 1.00926803e+00, 1.00842570e+00, 1.00747277e+00, 1.00640448e+00,
+ 1.00522200e+00, 1.00392116e+00, 1.00250376e+00, 1.00096633e+00,
+ 9.99311401e-01, 9.97536270e-01, 9.95644231e-01, 9.93633392e-01,
+ 9.90867748e-01, 9.88232633e-01, 9.85362057e-01, 9.82230509e-01,
+ 9.78818585e-01, 9.75102633e-01, 9.71063185e-01, 9.66675967e-01,
+ 9.61924219e-01, 9.56784199e-01, 9.51239430e-01, 9.45270024e-01,
+ 9.38861570e-01, 9.31994644e-01, 9.24659203e-01, 9.16838340e-01,
+ 9.08521803e-01, 8.99696701e-01, 8.90356205e-01, 8.80487793e-01,
+ 8.70088421e-01, 8.59149213e-01, 8.47668639e-01, 8.35642897e-01,
+ 8.23075389e-01, 8.09964930e-01, 7.96320451e-01, 7.82146054e-01,
+ 7.67454182e-01, 7.52256346e-01, 7.36570205e-01, 7.20409055e-01,
+ 7.03797511e-01, 6.86754281e-01, 6.69304189e-01, 6.51471096e-01,
+ 6.33285483e-01, 6.14768539e-01, 5.95955378e-01, 5.76873796e-01,
+ 5.57553429e-01, 5.38032014e-01, 5.18345403e-01, 4.98525942e-01,
+ 4.78615607e-01, 4.58647304e-01, 4.38664366e-01, 4.18704689e-01,
+ 3.98812306e-01, 3.79026292e-01, 3.59391483e-01, 3.39947413e-01,
+ 3.20739242e-01, 3.01806111e-01, 2.83190595e-01, 2.64928837e-01,
+ 2.47060855e-01, 2.29620112e-01, 2.12643372e-01, 1.96160182e-01,
+ 1.80203520e-01, 1.64799688e-01, 1.49978755e-01, 1.35764352e-01,
+ 1.22184253e-01, 1.09260199e-01, 9.70178845e-02, 8.54768028e-02,
+ 7.46597638e-02, 6.45825432e-02, 5.52628119e-02, 4.67097698e-02,
+ 3.89324443e-02, 3.19297601e-02, 2.56981064e-02, 2.02225927e-02,
+ 1.54831778e-02, 1.14492491e-02, 8.07648266e-03, 5.30004408e-03,
+};
+
+static const float mdct_win_5m_48k[__LC3_MDCT_WIN_LEN(5000, 48000)] = {
+ 4.09010650e-04, 6.14338818e-04, 8.57175988e-04, 1.14701506e-03,
+ 1.48958283e-03, 1.88977038e-03, 2.35300080e-03, 2.88410496e-03,
+ 3.48821379e-03, 4.17004043e-03, 4.93429883e-03, 5.78707651e-03,
+ 6.73381174e-03, 7.77913046e-03, 8.92704496e-03, 1.01820289e-02,
+ 1.15491061e-02, 1.30334922e-02, 1.46395129e-02, 1.63715562e-02,
+ 1.82345538e-02, 2.02330949e-02, 2.23711616e-02, 2.46523735e-02,
+ 2.70810194e-02, 2.96615969e-02, 3.23988485e-02, 3.52960177e-02,
+ 3.83566333e-02, 4.15844793e-02, 4.49832242e-02, 4.85561099e-02,
+ 5.23059648e-02, 5.62362458e-02, 6.03505574e-02, 6.46518632e-02,
+ 6.91419575e-02, 7.38228820e-02, 7.86970933e-02, 8.37676164e-02,
+ 8.90356369e-02, 9.45019924e-02, 1.00168019e-01, 1.06035623e-01,
+ 1.12106022e-01, 1.18378855e-01, 1.24853486e-01, 1.31530285e-01,
+ 1.38410308e-01, 1.45493189e-01, 1.52777295e-01, 1.60260884e-01,
+ 1.67943556e-01, 1.75824562e-01, 1.83902012e-01, 1.92172862e-01,
+ 2.00634430e-01, 2.09285388e-01, 2.18123826e-01, 2.27146226e-01,
+ 2.36347921e-01, 2.45725974e-01, 2.55277155e-01, 2.64998109e-01,
+ 2.74883943e-01, 2.84929644e-01, 2.95130651e-01, 3.05482471e-01,
+ 3.15979964e-01, 3.26616979e-01, 3.37387380e-01, 3.48285592e-01,
+ 3.59305769e-01, 3.70441593e-01, 3.81686239e-01, 3.93032978e-01,
+ 4.04474963e-01, 4.16005110e-01, 4.27615960e-01, 4.39300436e-01,
+ 4.51051633e-01, 4.62861605e-01, 4.74722545e-01, 4.86626671e-01,
+ 4.98566451e-01, 5.10534149e-01, 5.22521279e-01, 5.34519051e-01,
+ 5.46520192e-01, 5.58517277e-01, 5.70502154e-01, 5.82465810e-01,
+ 5.94399172e-01, 6.06294818e-01, 6.18145266e-01, 6.29942202e-01,
+ 6.41676874e-01, 6.53341146e-01, 6.64927754e-01, 6.76429270e-01,
+ 6.87836730e-01, 6.99142147e-01, 7.10337961e-01, 7.21417603e-01,
+ 7.32374610e-01, 7.43200803e-01, 7.53888797e-01, 7.64431550e-01,
+ 7.74822315e-01, 7.85054657e-01, 7.95122352e-01, 8.05019386e-01,
+ 8.14739745e-01, 8.24277441e-01, 8.33626711e-01, 8.42781936e-01,
+ 8.51738619e-01, 8.60492087e-01, 8.69037674e-01, 8.77372045e-01,
+ 8.85492794e-01, 8.93393548e-01, 9.01072709e-01, 9.08524940e-01,
+ 9.15748356e-01, 9.22741384e-01, 9.29501747e-01, 9.36027020e-01,
+ 9.42314305e-01, 9.48362979e-01, 9.54173114e-01, 9.59743838e-01,
+ 9.65073839e-01, 9.70163547e-01, 9.75014336e-01, 9.79627719e-01,
+ 9.84003644e-01, 9.88142677e-01, 9.92047045e-01, 9.95719942e-01,
+ 9.99164081e-01, 1.00238131e+00, 1.00537427e+00, 1.00814672e+00,
+ 1.01070312e+00, 1.01304666e+00, 1.01518127e+00, 1.01711164e+00,
+ 1.01884338e+00, 1.02038171e+00, 1.02173110e+00, 1.02289695e+00,
+ 1.02388546e+00, 1.02470297e+00, 1.02535529e+00, 1.02584824e+00,
+ 1.02618837e+00, 1.02638288e+00, 1.02643810e+00, 1.02636013e+00,
+ 1.02615553e+00, 1.02583146e+00, 1.02539543e+00, 1.02485397e+00,
+ 1.02421348e+00, 1.02348118e+00, 1.02266460e+00, 1.02177090e+00,
+ 1.02080692e+00, 1.01977940e+00, 1.01869600e+00, 1.01756442e+00,
+ 1.01639169e+00, 1.01518492e+00, 1.01395084e+00, 1.01269703e+00,
+ 1.01143075e+00, 1.01015835e+00, 1.00888519e+00, 1.00759272e+00,
+ 1.00680560e+00, 1.00537874e+00, 1.00404905e+00, 1.00277836e+00,
+ 1.00156378e+00, 1.00040492e+00, 9.99301484e-01, 9.98253156e-01,
+ 9.97259546e-01, 9.96320213e-01, 9.95434664e-01, 9.94602354e-01,
+ 9.93822688e-01, 9.93095027e-01, 9.92418692e-01, 9.91792966e-01,
+ 9.91217091e-01, 9.90690276e-01, 9.90211700e-01, 9.89780519e-01,
+ 9.89395860e-01, 9.89056824e-01, 9.88762494e-01, 9.88511936e-01,
+ 9.88304203e-01, 9.88138324e-01, 9.88013316e-01, 9.87928190e-01,
+ 9.87881941e-01, 9.87873551e-01, 9.87901987e-01, 9.87966213e-01,
+ 9.88065178e-01, 9.88197816e-01, 9.88363051e-01, 9.88559796e-01,
+ 9.88786953e-01, 9.89043407e-01, 9.89328032e-01, 9.89639690e-01,
+ 9.89977232e-01, 9.90339493e-01, 9.90725297e-01, 9.91133456e-01,
+ 9.91562775e-01, 9.92012044e-01, 9.92480044e-01, 9.92965548e-01,
+ 9.93467321e-01, 9.93984121e-01, 9.94514697e-01, 9.95057793e-01,
+ 9.95612147e-01, 9.96176492e-01, 9.96749554e-01, 9.97330059e-01,
+ 9.97916725e-01, 9.98508264e-01, 9.99103363e-01, 9.99700348e-01,
+ 1.00029974e+00, 1.00089744e+00, 1.00149396e+00, 1.00208762e+00,
+ 1.00267709e+00, 1.00326105e+00, 1.00383818e+00, 1.00440719e+00,
+ 1.00496675e+00, 1.00551556e+00, 1.00605229e+00, 1.00657564e+00,
+ 1.00708429e+00, 1.00757693e+00, 1.00805228e+00, 1.00850902e+00,
+ 1.00894586e+00, 1.00936153e+00, 1.00975474e+00, 1.01012424e+00,
+ 1.01046877e+00, 1.01078709e+00, 1.01107797e+00, 1.01134021e+00,
+ 1.01157260e+00, 1.01177396e+00, 1.01194314e+00, 1.01207898e+00,
+ 1.01218036e+00, 1.01224617e+00, 1.01227531e+00, 1.01226671e+00,
+ 1.01221932e+00, 1.01213211e+00, 1.01200406e+00, 1.01183421e+00,
+ 1.01162157e+00, 1.01136522e+00, 1.01106425e+00, 1.01071779e+00,
+ 1.01032500e+00, 1.00988506e+00, 1.00939721e+00, 1.00886073e+00,
+ 1.00827495e+00, 1.00763922e+00, 1.00695298e+00, 1.00621571e+00,
+ 1.00542694e+00, 1.00458627e+00, 1.00369338e+00, 1.00274798e+00,
+ 1.00174990e+00, 1.00069900e+00, 9.99595249e-01, 9.98438663e-01,
+ 9.97229342e-01, 9.95967277e-01, 9.94650033e-01, 9.93240400e-01,
+ 9.91251152e-01, 9.89575685e-01, 9.87771321e-01, 9.85857748e-01,
+ 9.83830313e-01, 9.81682263e-01, 9.79407449e-01, 9.76999916e-01,
+ 9.74452836e-01, 9.71759750e-01, 9.68914116e-01, 9.65910162e-01,
+ 9.62742183e-01, 9.59403812e-01, 9.55888998e-01, 9.52192243e-01,
+ 9.48308632e-01, 9.44233254e-01, 9.39960724e-01, 9.35486022e-01,
+ 9.30805297e-01, 9.25914697e-01, 9.20810131e-01, 9.15487360e-01,
+ 9.09942607e-01, 9.04173226e-01, 8.98176373e-01, 8.91949024e-01,
+ 8.85488225e-01, 8.78791944e-01, 8.71858584e-01, 8.64686495e-01,
+ 8.57273814e-01, 8.49619586e-01, 8.41723747e-01, 8.33586272e-01,
+ 8.25207443e-01, 8.16587571e-01, 8.07728037e-01, 7.98631159e-01,
+ 7.89298635e-01, 7.79733095e-01, 7.69937953e-01, 7.59917189e-01,
+ 7.49675842e-01, 7.39217684e-01, 7.28547452e-01, 7.17671448e-01,
+ 7.06596231e-01, 6.95328294e-01, 6.83873906e-01, 6.72239531e-01,
+ 6.60433402e-01, 6.48464360e-01, 6.36339500e-01, 6.24066143e-01,
+ 6.11653033e-01, 5.99109864e-01, 5.86446142e-01, 5.73669485e-01,
+ 5.60788103e-01, 5.47816066e-01, 5.34761979e-01, 5.21636515e-01,
+ 5.08449976e-01, 4.95213509e-01, 4.81938756e-01, 4.68636143e-01,
+ 4.55317077e-01, 4.41993995e-01, 4.28678989e-01, 4.15383779e-01,
+ 4.02121106e-01, 3.88903272e-01, 3.75742544e-01, 3.62651518e-01,
+ 3.49643142e-01, 3.36729082e-01, 3.23922808e-01, 3.11236082e-01,
+ 2.98680794e-01, 2.86269467e-01, 2.74012847e-01, 2.61922833e-01,
+ 2.50009844e-01, 2.38284723e-01, 2.26757849e-01, 2.15439100e-01,
+ 2.04337983e-01, 1.93463677e-01, 1.82825032e-01, 1.72430586e-01,
+ 1.62288635e-01, 1.52407188e-01, 1.42793979e-01, 1.33456585e-01,
+ 1.24402392e-01, 1.15638588e-01, 1.07172155e-01, 9.90098587e-02,
+ 9.11582177e-02, 8.36234486e-02, 7.64114037e-02, 6.95274904e-02,
+ 6.29765645e-02, 5.67628424e-02, 5.08897541e-02, 4.53598330e-02,
+ 4.01745731e-02, 3.53343019e-02, 3.08380606e-02, 2.66835542e-02,
+ 2.28668041e-02, 1.93823634e-02, 1.62231272e-02, 1.33800502e-02,
+ 1.08421860e-02, 8.59675398e-03, 6.64050653e-03, 5.17270311e-03,
+};
+
+#if LC3_PLUS_HR
+
+static const float mdct_win_5m_48k_hr[__LC3_MDCT_WIN_LEN(5000, 48000)] = {
+ 9.75247545e-08, 6.41356849e-07, 1.88872264e-06, 4.37003746e-06,
+ 8.85053487e-06, 1.64097619e-05, 2.85265469e-05, 4.71757776e-05,
+ 7.49369574e-05, 1.15113864e-04, 1.71864056e-04, 2.50336452e-04,
+ 3.56814737e-04, 4.98863636e-04, 6.85475010e-04, 9.27209505e-04,
+ 1.23633002e-03, 1.62692170e-03, 2.11499492e-03, 2.71856366e-03,
+ 3.45769688e-03, 4.35453700e-03, 5.43327769e-03, 6.72010100e-03,
+ 8.24306626e-03, 1.00319488e-02, 1.21180220e-02, 1.45337880e-02,
+ 1.73126478e-02, 2.04885192e-02, 2.40953956e-02, 2.81668510e-02,
+ 3.27355117e-02, 3.78324650e-02, 4.34866548e-02, 4.97242436e-02,
+ 5.65679595e-02, 6.40364513e-02, 7.21436515e-02, 8.08981732e-02,
+ 9.03027356e-02, 1.00353681e-01, 1.11040540e-01, 1.22345708e-01,
+ 1.34244218e-01, 1.46703660e-01, 1.59684196e-01, 1.73138753e-01,
+ 1.87013358e-01, 2.01247633e-01, 2.15775400e-01, 2.30525494e-01,
+ 2.45422661e-01, 2.60388613e-01, 2.75343060e-01, 2.90205121e-01,
+ 3.04894298e-01, 3.19332004e-01, 3.33442599e-01, 3.47154707e-01,
+ 3.60402405e-01, 3.73126328e-01, 3.85274231e-01, 3.96802038e-01,
+ 4.07674283e-01, 4.17864561e-01, 4.27355647e-01, 4.36139554e-01,
+ 4.44217294e-01, 4.51598674e-01, 4.58301634e-01, 4.64351624e-01,
+ 4.69781011e-01, 4.74628091e-01, 4.78936344e-01, 4.82753456e-01,
+ 4.86130476e-01, 4.89120960e-01, 4.91780102e-01, 4.94164050e-01,
+ 4.96329218e-01, 4.98331696e-01, 5.00226736e-01, 5.02068341e-01,
+ 5.03908992e-01, 5.05799294e-01, 5.07787943e-01, 5.09921193e-01,
+ 5.12243330e-01, 5.14795899e-01, 5.17618179e-01, 5.20746589e-01,
+ 5.24214983e-01, 5.28054178e-01, 5.32292068e-01, 5.36953092e-01,
+ 5.42058468e-01, 5.47625661e-01, 5.53668439e-01, 5.60196400e-01,
+ 5.67215025e-01, 5.74725628e-01, 5.82724869e-01, 5.91205239e-01,
+ 6.00154579e-01, 6.09556615e-01, 6.19390607e-01, 6.29631937e-01,
+ 6.40252173e-01, 6.51219368e-01, 6.62498534e-01, 6.74051821e-01,
+ 6.85839176e-01, 6.97818637e-01, 7.09946930e-01, 7.22179890e-01,
+ 7.34472811e-01, 7.46781170e-01, 7.59061038e-01, 7.71269321e-01,
+ 7.83364296e-01, 7.95306087e-01, 8.07056785e-01, 8.18580806e-01,
+ 8.29845190e-01, 8.40819776e-01, 8.51477146e-01, 8.61792982e-01,
+ 8.71745944e-01, 8.81317794e-01, 8.90493214e-01, 8.99259806e-01,
+ 9.07608211e-01, 9.15531754e-01, 9.23026323e-01, 9.30090547e-01,
+ 9.36725318e-01, 9.42933977e-01, 9.48721945e-01, 9.54096615e-01,
+ 9.59067523e-01, 9.63645637e-01, 9.67843831e-01, 9.71676290e-01,
+ 9.75158513e-01, 9.78307128e-01, 9.81139660e-01, 9.83674467e-01,
+ 9.85930443e-01, 9.87926722e-01, 9.89682734e-01, 9.91217852e-01,
+ 9.92551088e-01, 9.93701279e-01, 9.94686544e-01, 9.95524466e-01,
+ 9.96231675e-01, 9.96824026e-01, 9.97316301e-01, 9.97722328e-01,
+ 9.98054802e-01, 9.98325348e-01, 9.98544455e-01, 9.98721540e-01,
+ 9.98864949e-01, 9.98981953e-01, 9.99078929e-01, 9.99161184e-01,
+ 9.99233246e-01, 9.99298692e-01, 9.99360621e-01, 9.99421120e-01,
+ 9.99481916e-01, 9.99544203e-01, 9.99608576e-01, 9.99675393e-01,
+ 9.99744534e-01, 9.99815881e-01, 9.99888837e-01, 9.99962866e-01,
+ 1.00003707e+00, 1.00011098e+00, 1.00018346e+00, 1.00025380e+00,
+ 1.00032115e+00, 1.00038469e+00, 1.00044382e+00, 1.00049770e+00,
+ 1.00054598e+00, 1.00058782e+00, 1.00062299e+00, 1.00065112e+00,
+ 1.00067186e+00, 1.00068521e+00, 1.00069082e+00, 1.00068903e+00,
+ 1.00067961e+00, 1.00066280e+00, 1.00063896e+00, 1.00060833e+00,
+ 1.00057113e+00, 1.00052810e+00, 1.00047958e+00, 1.00042605e+00,
+ 1.00036812e+00, 1.00030637e+00, 1.00024164e+00, 1.00017428e+00,
+ 1.00010526e+00, 1.00003517e+00, 9.99964774e-01, 9.99894679e-01,
+ 9.99825716e-01, 9.99758482e-01, 9.99693692e-01, 9.99632061e-01,
+ 9.99574184e-01, 9.99520719e-01, 9.99472201e-01, 9.99429166e-01,
+ 9.99392092e-01, 9.99361455e-01, 9.99337614e-01, 9.99320924e-01,
+ 9.99311507e-01, 9.99309599e-01, 9.99315262e-01, 9.99328554e-01,
+ 9.99349296e-01, 9.99377370e-01, 9.99412537e-01, 9.99454379e-01,
+ 9.99502480e-01, 9.99556363e-01, 9.99615431e-01, 9.99678969e-01,
+ 9.99746263e-01, 9.99816597e-01, 9.99889076e-01, 9.99962866e-01,
+ 1.00003707e+00, 1.00011098e+00, 1.00018346e+00, 1.00025380e+00,
+ 1.00032115e+00, 1.00038469e+00, 1.00044382e+00, 1.00049770e+00,
+ 1.00054598e+00, 1.00058782e+00, 1.00062299e+00, 1.00065112e+00,
+ 1.00067186e+00, 1.00068521e+00, 1.00069082e+00, 1.00068903e+00,
+ 1.00067961e+00, 1.00066280e+00, 1.00063896e+00, 1.00060833e+00,
+ 1.00057113e+00, 1.00052810e+00, 1.00047958e+00, 1.00042605e+00,
+ 1.00036812e+00, 1.00030637e+00, 1.00024164e+00, 1.00017428e+00,
+ 1.00010526e+00, 1.00003517e+00, 9.99964774e-01, 9.99894679e-01,
+ 9.99825716e-01, 9.99758482e-01, 9.99693692e-01, 9.99632061e-01,
+ 9.99574184e-01, 9.99520719e-01, 9.99472201e-01, 9.99429166e-01,
+ 9.99392092e-01, 9.99361455e-01, 9.99337614e-01, 9.99320924e-01,
+ 9.99311507e-01, 9.99309599e-01, 9.99315262e-01, 9.99328554e-01,
+ 9.99349296e-01, 9.99377370e-01, 9.99412537e-01, 9.99454379e-01,
+ 9.99502480e-01, 9.99556363e-01, 9.99615431e-01, 9.99678969e-01,
+ 9.99746263e-01, 9.99816597e-01, 9.99889076e-01, 9.99962866e-01,
+ 1.00003707e+00, 1.00011075e+00, 1.00018275e+00, 1.00025201e+00,
+ 1.00031757e+00, 1.00037789e+00, 1.00043166e+00, 1.00047719e+00,
+ 1.00051260e+00, 1.00053585e+00, 1.00054419e+00, 1.00053477e+00,
+ 1.00050414e+00, 1.00044823e+00, 1.00036228e+00, 1.00024092e+00,
+ 1.00007784e+00, 9.99865890e-01, 9.99597013e-01, 9.99261975e-01,
+ 9.98850465e-01, 9.98351038e-01, 9.97750819e-01, 9.97035682e-01,
+ 9.96189833e-01, 9.95196044e-01, 9.94035423e-01, 9.92687285e-01,
+ 9.91129041e-01, 9.89336133e-01, 9.87281919e-01, 9.84937787e-01,
+ 9.82272744e-01, 9.79253709e-01, 9.75845337e-01, 9.72010076e-01,
+ 9.67708528e-01, 9.62899387e-01, 9.57539737e-01, 9.51585472e-01,
+ 9.44991708e-01, 9.37713265e-01, 9.29705381e-01, 9.20924187e-01,
+ 9.11327481e-01, 9.00875807e-01, 8.89532745e-01, 8.77266228e-01,
+ 8.64049077e-01, 8.49859893e-01, 8.34683776e-01, 8.18513036e-01,
+ 8.01347792e-01, 7.83196509e-01, 7.64076352e-01, 7.44013488e-01,
+ 7.23043203e-01, 7.01209962e-01, 6.78567350e-01, 6.55177712e-01,
+ 6.31111801e-01, 6.06448233e-01, 5.81272960e-01, 5.55678487e-01,
+ 5.29762745e-01, 5.03628492e-01, 4.77382004e-01, 4.51132149e-01,
+ 4.24988985e-01, 3.99062574e-01, 3.73461813e-01, 3.48293066e-01,
+ 3.23658854e-01, 2.99656719e-01, 2.76377857e-01, 2.53906131e-01,
+ 2.32316986e-01, 2.11676583e-01, 1.92040950e-01, 1.73455566e-01,
+ 1.55954808e-01, 1.39561892e-01, 1.24288827e-01, 1.10136725e-01,
+ 9.70961973e-02, 8.51479918e-02, 7.42638558e-02, 6.44074306e-02,
+ 5.55353425e-02, 4.75983508e-02, 4.05424982e-02, 3.43103148e-02,
+ 2.88419761e-02, 2.40764078e-02, 1.99523065e-02, 1.64090749e-02,
+ 1.33876354e-02, 1.08311241e-02, 8.68547149e-03, 6.89984858e-03,
+ 5.42699778e-03, 4.22345474e-03, 3.24966502e-03, 2.47000973e-03,
+ 1.85274973e-03, 1.36990519e-03, 9.97077208e-04, 7.13227608e-04,
+ 5.00426511e-04, 3.43578606e-04, 2.30138365e-04, 1.49821601e-04,
+ 9.43217892e-05, 5.70367956e-05, 3.28110509e-05, 1.76969679e-05,
+ 8.73827867e-06, 3.77677043e-06, 1.28252009e-06, 1.95021386e-07,
+};
+
+static const float mdct_win_5m_96k_hr[__LC3_MDCT_WIN_LEN(5000, 96000)] = {
+ 6.89548827e-08, 2.31516253e-07, 5.04477669e-07, 9.30795125e-07,
+ 1.56340695e-06, 2.46738750e-06, 3.72189174e-06, 5.42224188e-06,
+ 7.68219343e-06, 1.06363877e-05, 1.44429905e-05, 1.92865264e-05,
+ 2.53808976e-05, 3.29725954e-05, 4.23441015e-05, 5.38174427e-05,
+ 6.77579446e-05, 8.45781324e-05, 1.04741775e-04, 1.28768093e-04,
+ 1.57236034e-04, 1.90788676e-04, 2.30137754e-04, 2.76068167e-04,
+ 3.29442613e-04, 3.91206064e-04, 4.62390453e-04, 5.44119219e-04,
+ 6.37611491e-04, 7.44186866e-04, 8.65269103e-04, 1.00239040e-03,
+ 1.15719519e-03, 1.33144355e-03, 1.52701419e-03, 1.74590782e-03,
+ 1.99024938e-03, 2.26228987e-03, 2.56440835e-03, 2.89911311e-03,
+ 3.26904119e-03, 3.67696048e-03, 4.12576646e-03, 4.61848313e-03,
+ 5.15825953e-03, 5.74836833e-03, 6.39220094e-03, 7.09326472e-03,
+ 7.85517693e-03, 8.68165866e-03, 9.57652833e-03, 1.05436966e-02,
+ 1.15871523e-02, 1.27109587e-02, 1.39192408e-02, 1.52161736e-02,
+ 1.66059695e-02, 1.80928707e-02, 1.96811259e-02, 2.13749874e-02,
+ 2.31786855e-02, 2.50964165e-02, 2.71323286e-02, 2.92905010e-02,
+ 3.15749235e-02, 3.39894816e-02, 3.65379415e-02, 3.92239206e-02,
+ 4.20508720e-02, 4.50220704e-02, 4.81405817e-02, 5.14092445e-02,
+ 5.48306555e-02, 5.84071539e-02, 6.21407814e-02, 6.60332814e-02,
+ 7.00860694e-02, 7.43002295e-02, 7.86764771e-02, 8.32151473e-02,
+ 8.79162028e-02, 9.27791744e-02, 9.78031904e-02, 1.02986939e-01,
+ 1.08328678e-01, 1.13826200e-01, 1.19476855e-01, 1.25277504e-01,
+ 1.31224588e-01, 1.37314022e-01, 1.43541321e-01, 1.49901465e-01,
+ 1.56389058e-01, 1.62998185e-01, 1.69722542e-01, 1.76555380e-01,
+ 1.83489516e-01, 1.90517426e-01, 1.97631180e-01, 2.04822496e-01,
+ 2.12082773e-01, 2.19403118e-01, 2.26774365e-01, 2.34187096e-01,
+ 2.41631702e-01, 2.49098375e-01, 2.56577194e-01, 2.64058143e-01,
+ 2.71531105e-01, 2.78985947e-01, 2.86412567e-01, 2.93800950e-01,
+ 3.01141053e-01, 3.08423132e-01, 3.15637439e-01, 3.22774589e-01,
+ 3.29825372e-01, 3.36780816e-01, 3.43632400e-01, 3.50371778e-01,
+ 3.56991231e-01, 3.63483250e-01, 3.69840890e-01, 3.76057625e-01,
+ 3.82127434e-01, 3.88044775e-01, 3.93804729e-01, 3.99402857e-01,
+ 4.04835284e-01, 4.10098761e-01, 4.15190488e-01, 4.20108408e-01,
+ 4.24850911e-01, 4.29417044e-01, 4.33806360e-01, 4.38019037e-01,
+ 4.42055762e-01, 4.45917755e-01, 4.49606776e-01, 4.53125089e-01,
+ 4.56475437e-01, 4.59661037e-01, 4.62685496e-01, 4.65552896e-01,
+ 4.68267679e-01, 4.70834643e-01, 4.73258942e-01, 4.75546002e-01,
+ 4.77701575e-01, 4.79731590e-01, 4.81642276e-01, 4.83440012e-01,
+ 4.85131353e-01, 4.86723036e-01, 4.88221824e-01, 4.89634633e-01,
+ 4.90968436e-01, 4.92230296e-01, 4.93427187e-01, 4.94566232e-01,
+ 4.95654404e-01, 4.96698737e-01, 4.97706175e-01, 4.98683631e-01,
+ 4.99637932e-01, 5.00575840e-01, 5.01503944e-01, 5.02428830e-01,
+ 5.03356874e-01, 5.04294455e-01, 5.05247772e-01, 5.06222844e-01,
+ 5.07225573e-01, 5.08261740e-01, 5.09337008e-01, 5.10456860e-01,
+ 5.11626601e-01, 5.12851536e-01, 5.14136553e-01, 5.15486538e-01,
+ 5.16906321e-01, 5.18400311e-01, 5.19972920e-01, 5.21628320e-01,
+ 5.23370624e-01, 5.25203526e-01, 5.27130723e-01, 5.29155731e-01,
+ 5.31281710e-01, 5.33511758e-01, 5.35848677e-01, 5.38295090e-01,
+ 5.40853441e-01, 5.43525815e-01, 5.46314240e-01, 5.49220264e-01,
+ 5.52245498e-01, 5.55391014e-01, 5.58657765e-01, 5.62046468e-01,
+ 5.65557480e-01, 5.69190919e-01, 5.72946727e-01, 5.76824427e-01,
+ 5.80823362e-01, 5.84942579e-01, 5.89180827e-01, 5.93536615e-01,
+ 5.98008096e-01, 6.02593303e-01, 6.07289851e-01, 6.12095237e-01,
+ 6.17006540e-01, 6.22020781e-01, 6.27134562e-01, 6.32344365e-01,
+ 6.37646437e-01, 6.43036783e-01, 6.48511291e-01, 6.54065490e-01,
+ 6.59694970e-01, 6.65394902e-01, 6.71160460e-01, 6.76986754e-01,
+ 6.82868540e-01, 6.88800693e-01, 6.94777906e-01, 7.00794756e-01,
+ 7.06845820e-01, 7.12925553e-01, 7.19028473e-01, 7.25149035e-01,
+ 7.31281698e-01, 7.37420917e-01, 7.43561149e-01, 7.49696970e-01,
+ 7.55823016e-01, 7.61933863e-01, 7.68024206e-01, 7.74088979e-01,
+ 7.80123055e-01, 7.86121488e-01, 7.92079389e-01, 7.97992110e-01,
+ 8.03855121e-01, 8.09663892e-01, 8.15414310e-01, 8.21102202e-01,
+ 8.26723635e-01, 8.32274854e-01, 8.37752342e-01, 8.43152702e-01,
+ 8.48472714e-01, 8.53709280e-01, 8.58859718e-01, 8.63921225e-01,
+ 8.68891478e-01, 8.73768151e-01, 8.78549099e-01, 8.83232594e-01,
+ 8.87816727e-01, 8.92300129e-01, 8.96681368e-01, 9.00959313e-01,
+ 9.05132890e-01, 9.09201384e-01, 9.13164079e-01, 9.17020440e-01,
+ 9.20770228e-01, 9.24413145e-01, 9.27949250e-01, 9.31378603e-01,
+ 9.34701502e-01, 9.37918305e-01, 9.41029668e-01, 9.44036126e-01,
+ 9.46938515e-01, 9.49737847e-01, 9.52435017e-01, 9.55031335e-01,
+ 9.57527936e-01, 9.59926248e-01, 9.62227762e-01, 9.64434028e-01,
+ 9.66546714e-01, 9.68567610e-01, 9.70498502e-01, 9.72341299e-01,
+ 9.74098027e-01, 9.75770652e-01, 9.77361381e-01, 9.78872299e-01,
+ 9.80305672e-01, 9.81663704e-01, 9.82948720e-01, 9.84162986e-01,
+ 9.85308945e-01, 9.86388862e-01, 9.87405181e-01, 9.88360226e-01,
+ 9.89256442e-01, 9.90096152e-01, 9.90881741e-01, 9.91615593e-01,
+ 9.92299914e-01, 9.92937148e-01, 9.93529499e-01, 9.94079232e-01,
+ 9.94588435e-01, 9.95059371e-01, 9.95494127e-01, 9.95894730e-01,
+ 9.96263146e-01, 9.96601343e-01, 9.96911168e-01, 9.97194529e-01,
+ 9.97453094e-01, 9.97688591e-01, 9.97902572e-01, 9.98096704e-01,
+ 9.98272479e-01, 9.98431206e-01, 9.98574317e-01, 9.98703122e-01,
+ 9.98818815e-01, 9.98922586e-01, 9.99015450e-01, 9.99098480e-01,
+ 9.99172688e-01, 9.99238908e-01, 9.99298036e-01, 9.99350786e-01,
+ 9.99397993e-01, 9.99440193e-01, 9.99478102e-01, 9.99512255e-01,
+ 9.99543130e-01, 9.99571264e-01, 9.99597073e-01, 9.99620855e-01,
+ 9.99643087e-01, 9.99663949e-01, 9.99683797e-01, 9.99702871e-01,
+ 9.99721289e-01, 9.99739230e-01, 9.99756932e-01, 9.99774456e-01,
+ 9.99791920e-01, 9.99809384e-01, 9.99826908e-01, 9.99844551e-01,
+ 9.99862373e-01, 9.99880314e-01, 9.99898374e-01, 9.99916673e-01,
+ 9.99935031e-01, 9.99953508e-01, 9.99972105e-01, 9.99990702e-01,
+ 1.00000930e+00, 1.00002778e+00, 1.00004625e+00, 1.00006461e+00,
+ 1.00008273e+00, 1.00010061e+00, 1.00011826e+00, 1.00013554e+00,
+ 1.00015235e+00, 1.00016880e+00, 1.00018466e+00, 1.00020003e+00,
+ 1.00021482e+00, 1.00022900e+00, 1.00024247e+00, 1.00025523e+00,
+ 1.00026727e+00, 1.00027859e+00, 1.00028908e+00, 1.00029874e+00,
+ 1.00030744e+00, 1.00031543e+00, 1.00032246e+00, 1.00032854e+00,
+ 1.00033379e+00, 1.00033808e+00, 1.00034130e+00, 1.00034368e+00,
+ 1.00034511e+00, 1.00034559e+00, 1.00034511e+00, 1.00034368e+00,
+ 1.00034142e+00, 1.00033808e+00, 1.00033391e+00, 1.00032878e+00,
+ 1.00032282e+00, 1.00031602e+00, 1.00030828e+00, 1.00029981e+00,
+ 1.00029051e+00, 1.00028050e+00, 1.00026977e+00, 1.00025833e+00,
+ 1.00024617e+00, 1.00023329e+00, 1.00021994e+00, 1.00020599e+00,
+ 1.00019157e+00, 1.00017655e+00, 1.00016105e+00, 1.00014532e+00,
+ 1.00012910e+00, 1.00011253e+00, 1.00009573e+00, 1.00007868e+00,
+ 1.00006139e+00, 1.00004399e+00, 1.00002646e+00, 1.00000882e+00,
+ 9.99991179e-01, 9.99973595e-01, 9.99956071e-01, 9.99938667e-01,
+ 9.99921381e-01, 9.99904335e-01, 9.99887526e-01, 9.99870956e-01,
+ 9.99854743e-01, 9.99838948e-01, 9.99823511e-01, 9.99808550e-01,
+ 9.99794066e-01, 9.99780118e-01, 9.99766707e-01, 9.99753952e-01,
+ 9.99741793e-01, 9.99730289e-01, 9.99719560e-01, 9.99709487e-01,
+ 9.99700248e-01, 9.99691784e-01, 9.99684095e-01, 9.99677300e-01,
+ 9.99671280e-01, 9.99666214e-01, 9.99662042e-01, 9.99658763e-01,
+ 9.99656379e-01, 9.99655008e-01, 9.99654531e-01, 9.99654949e-01,
+ 9.99656379e-01, 9.99658763e-01, 9.99662101e-01, 9.99666333e-01,
+ 9.99671519e-01, 9.99677658e-01, 9.99684691e-01, 9.99692619e-01,
+ 9.99701381e-01, 9.99711037e-01, 9.99721527e-01, 9.99732792e-01,
+ 9.99744833e-01, 9.99757588e-01, 9.99771118e-01, 9.99785244e-01,
+ 9.99800026e-01, 9.99815404e-01, 9.99831259e-01, 9.99847651e-01,
+ 9.99864519e-01, 9.99881744e-01, 9.99899328e-01, 9.99917269e-01,
+ 9.99935389e-01, 9.99953687e-01, 9.99972165e-01, 9.99990702e-01,
+ 1.00000930e+00, 1.00002778e+00, 1.00004625e+00, 1.00006461e+00,
+ 1.00008273e+00, 1.00010061e+00, 1.00011826e+00, 1.00013554e+00,
+ 1.00015235e+00, 1.00016880e+00, 1.00018466e+00, 1.00020003e+00,
+ 1.00021482e+00, 1.00022900e+00, 1.00024247e+00, 1.00025523e+00,
+ 1.00026727e+00, 1.00027859e+00, 1.00028908e+00, 1.00029874e+00,
+ 1.00030744e+00, 1.00031543e+00, 1.00032246e+00, 1.00032854e+00,
+ 1.00033379e+00, 1.00033808e+00, 1.00034130e+00, 1.00034368e+00,
+ 1.00034511e+00, 1.00034559e+00, 1.00034511e+00, 1.00034368e+00,
+ 1.00034142e+00, 1.00033808e+00, 1.00033391e+00, 1.00032878e+00,
+ 1.00032282e+00, 1.00031602e+00, 1.00030828e+00, 1.00029981e+00,
+ 1.00029051e+00, 1.00028050e+00, 1.00026977e+00, 1.00025833e+00,
+ 1.00024617e+00, 1.00023329e+00, 1.00021994e+00, 1.00020599e+00,
+ 1.00019157e+00, 1.00017655e+00, 1.00016105e+00, 1.00014532e+00,
+ 1.00012910e+00, 1.00011253e+00, 1.00009573e+00, 1.00007868e+00,
+ 1.00006139e+00, 1.00004399e+00, 1.00002646e+00, 1.00000882e+00,
+ 9.99991179e-01, 9.99973595e-01, 9.99956071e-01, 9.99938667e-01,
+ 9.99921381e-01, 9.99904335e-01, 9.99887526e-01, 9.99870956e-01,
+ 9.99854743e-01, 9.99838948e-01, 9.99823511e-01, 9.99808550e-01,
+ 9.99794066e-01, 9.99780118e-01, 9.99766707e-01, 9.99753952e-01,
+ 9.99741793e-01, 9.99730289e-01, 9.99719560e-01, 9.99709487e-01,
+ 9.99700248e-01, 9.99691784e-01, 9.99684095e-01, 9.99677300e-01,
+ 9.99671280e-01, 9.99666214e-01, 9.99662042e-01, 9.99658763e-01,
+ 9.99656379e-01, 9.99655008e-01, 9.99654531e-01, 9.99654949e-01,
+ 9.99656379e-01, 9.99658763e-01, 9.99662101e-01, 9.99666333e-01,
+ 9.99671519e-01, 9.99677658e-01, 9.99684691e-01, 9.99692619e-01,
+ 9.99701381e-01, 9.99711037e-01, 9.99721527e-01, 9.99732792e-01,
+ 9.99744833e-01, 9.99757588e-01, 9.99771118e-01, 9.99785244e-01,
+ 9.99800026e-01, 9.99815404e-01, 9.99831259e-01, 9.99847651e-01,
+ 9.99864519e-01, 9.99881744e-01, 9.99899328e-01, 9.99917269e-01,
+ 9.99935389e-01, 9.99953687e-01, 9.99972165e-01, 9.99990702e-01,
+ 1.00000930e+00, 1.00002778e+00, 1.00004613e+00, 1.00006425e+00,
+ 1.00008214e+00, 1.00009966e+00, 1.00011683e+00, 1.00013340e+00,
+ 1.00014925e+00, 1.00016439e+00, 1.00017869e+00, 1.00019193e+00,
+ 1.00020397e+00, 1.00021482e+00, 1.00022411e+00, 1.00023162e+00,
+ 1.00023735e+00, 1.00024080e+00, 1.00024199e+00, 1.00024033e+00,
+ 1.00023568e+00, 1.00022769e+00, 1.00021589e+00, 1.00020003e+00,
+ 1.00017941e+00, 1.00015378e+00, 1.00012243e+00, 1.00008476e+00,
+ 1.00004041e+00, 9.99988317e-01, 9.99928057e-01, 9.99858677e-01,
+ 9.99779403e-01, 9.99689281e-01, 9.99587417e-01, 9.99472737e-01,
+ 9.99344110e-01, 9.99200404e-01, 9.99040425e-01, 9.98862803e-01,
+ 9.98666167e-01, 9.98449087e-01, 9.98209953e-01, 9.97947097e-01,
+ 9.97658968e-01, 9.97343540e-01, 9.96999085e-01, 9.96623516e-01,
+ 9.96214747e-01, 9.95770633e-01, 9.95288789e-01, 9.94766831e-01,
+ 9.94202256e-01, 9.93592501e-01, 9.92934704e-01, 9.92226064e-01,
+ 9.91463542e-01, 9.90644097e-01, 9.89764392e-01, 9.88821149e-01,
+ 9.87810850e-01, 9.86729801e-01, 9.85574305e-01, 9.84340370e-01,
+ 9.83024001e-01, 9.81621027e-01, 9.80127096e-01, 9.78537738e-01,
+ 9.76848423e-01, 9.75054383e-01, 9.73150730e-01, 9.71132576e-01,
+ 9.68994796e-01, 9.66732204e-01, 9.64339435e-01, 9.61811244e-01,
+ 9.59142029e-01, 9.56326306e-01, 9.53358531e-01, 9.50233042e-01,
+ 9.46944118e-01, 9.43486214e-01, 9.39853668e-01, 9.36040819e-01,
+ 9.32042122e-01, 9.27852154e-01, 9.23465431e-01, 9.18876767e-01,
+ 9.14081097e-01, 9.09073353e-01, 9.03848886e-01, 8.98403168e-01,
+ 8.92731845e-01, 8.86831045e-01, 8.80696952e-01, 8.74326289e-01,
+ 8.67715955e-01, 8.60863328e-01, 8.53766203e-01, 8.46422672e-01,
+ 8.38831365e-01, 8.30991328e-01, 8.22902203e-01, 8.14563930e-01,
+ 8.05977046e-01, 7.97142744e-01, 7.88062632e-01, 7.78738797e-01,
+ 7.69173980e-01, 7.59371519e-01, 7.49335289e-01, 7.39069760e-01,
+ 7.28579819e-01, 7.17871130e-01, 7.06949770e-01, 6.95822597e-01,
+ 6.84496701e-01, 6.72980070e-01, 6.61280870e-01, 6.49408042e-01,
+ 6.37370944e-01, 6.25179410e-01, 6.12843752e-01, 6.00374699e-01,
+ 5.87783396e-01, 5.75081468e-01, 5.62280834e-01, 5.49393654e-01,
+ 5.36432624e-01, 5.23410499e-01, 5.10340393e-01, 4.97235566e-01,
+ 4.84109521e-01, 4.70975846e-01, 4.57848251e-01, 4.44740474e-01,
+ 4.31666315e-01, 4.18639511e-01, 4.05673832e-01, 3.92782807e-01,
+ 3.79979968e-01, 3.67278606e-01, 3.54691803e-01, 3.42232376e-01,
+ 3.29912812e-01, 3.17745358e-01, 3.05741847e-01, 2.93913603e-01,
+ 2.82271683e-01, 2.70826548e-01, 2.59588152e-01, 2.48565957e-01,
+ 2.37768814e-01, 2.27205008e-01, 2.16882199e-01, 2.06807390e-01,
+ 1.96986943e-01, 1.87426537e-01, 1.78131178e-01, 1.69105172e-01,
+ 1.60352126e-01, 1.51874945e-01, 1.43675804e-01, 1.35756254e-01,
+ 1.28117070e-01, 1.20758407e-01, 1.13679729e-01, 1.06879868e-01,
+ 1.00357018e-01, 9.41087753e-02, 8.81321430e-02, 8.24235976e-02,
+ 7.69790635e-02, 7.17940032e-02, 6.68634027e-02, 6.21818379e-02,
+ 5.77434972e-02, 5.35422154e-02, 4.95715141e-02, 4.58246432e-02,
+ 4.22946103e-02, 3.89742292e-02, 3.58561426e-02, 3.29328589e-02,
+ 3.01968064e-02, 2.76403390e-02, 2.52557844e-02, 2.30354760e-02,
+ 2.09717732e-02, 1.90570969e-02, 1.72839500e-02, 1.56449396e-02,
+ 1.41328052e-02, 1.27404351e-02, 1.14608845e-02, 1.02873892e-02,
+ 9.21338331e-03, 8.23251065e-03, 7.33863330e-03, 6.52584061e-03,
+ 5.78845851e-03, 5.12105133e-03, 4.51842742e-03, 3.97564145e-03,
+ 3.48799396e-03, 3.05103138e-03, 2.66054412e-03, 2.31256452e-03,
+ 2.00336217e-03, 1.72943878e-03, 1.48752402e-03, 1.27456791e-03,
+ 1.08773448e-03, 9.24394117e-04, 7.82115792e-04, 6.58658682e-04,
+ 5.51963516e-04, 4.60143900e-04, 3.81477352e-04, 3.14396282e-04,
+ 2.57478940e-04, 2.09440448e-04, 1.69123945e-04, 1.35491777e-04,
+ 1.07617016e-04, 8.46750627e-05, 6.59356156e-05, 5.07548866e-05,
+ 3.85681342e-05, 2.88825358e-05, 2.12704090e-05, 1.53627971e-05,
+ 1.08434460e-05, 7.44312956e-06, 4.93438165e-06, 3.12659085e-06,
+ 1.86147406e-06, 1.00890213e-06, 4.63012810e-07, 1.37904777e-07,
+};
+
+#endif /* LC3_PLUS_HR */
+#endif /* LC3_PLUS */
+
+static const float mdct_win_7m5_8k[__LC3_MDCT_WIN_LEN(7500, 8000)] = {
+ 2.95060859e-03, 7.17541132e-03, 1.37695374e-02, 2.30953556e-02,
+ 3.54036230e-02, 5.08289304e-02, 6.94696293e-02, 9.13884278e-02,
+ 1.16604575e-01, 1.45073546e-01, 1.76711174e-01, 2.11342953e-01,
+ 2.48768614e-01, 2.88701102e-01, 3.30823871e-01, 3.74814544e-01,
+ 4.20308013e-01, 4.66904918e-01, 5.14185341e-01, 5.61710041e-01,
+ 6.09026346e-01, 6.55671016e-01, 7.01218384e-01, 7.45240679e-01,
+ 7.87369206e-01, 8.27223833e-01, 8.64513675e-01, 8.98977415e-01,
+ 9.30407518e-01, 9.58599937e-01, 9.83447719e-01, 1.00488283e+00,
+ 1.02285381e+00, 1.03740495e+00, 1.04859791e+00, 1.05656184e+00,
+ 1.06149371e+00, 1.06362578e+00, 1.06325973e+00, 1.06074505e+00,
+ 1.05643590e+00, 1.05069500e+00, 1.04392435e+00, 1.03647725e+00,
+ 1.02872867e+00, 1.02106486e+00, 1.01400658e+00, 1.00727455e+00,
+ 1.00172250e+00, 9.97309592e-01, 9.93985158e-01, 9.91683335e-01,
+ 9.90325325e-01, 9.89822613e-01, 9.90074734e-01, 9.90975314e-01,
+ 9.92412851e-01, 9.94273149e-01, 9.96439157e-01, 9.98791616e-01,
+ 1.00120985e+00, 1.00357357e+00, 1.00575984e+00, 1.00764515e+00,
+ 1.00910687e+00, 1.01002476e+00, 1.01028203e+00, 1.00976919e+00,
+ 1.00838641e+00, 1.00605124e+00, 1.00269767e+00, 9.98280464e-01,
+ 9.92777987e-01, 9.86186892e-01, 9.77634164e-01, 9.67447270e-01,
+ 9.55129725e-01, 9.40389877e-01, 9.22959280e-01, 9.02607350e-01,
+ 8.79202689e-01, 8.52641750e-01, 8.22881272e-01, 7.89971715e-01,
+ 7.54030328e-01, 7.15255742e-01, 6.73936911e-01, 6.30414716e-01,
+ 5.85078858e-01, 5.38398518e-01, 4.90833753e-01, 4.42885823e-01,
+ 3.95091024e-01, 3.48004343e-01, 3.02196710e-01, 2.58227431e-01,
+ 2.16641416e-01, 1.77922122e-01, 1.42480547e-01, 1.10652194e-01,
+ 8.26995967e-02, 5.88334516e-02, 3.92030848e-02, 2.38629107e-02,
+ 1.26976223e-02, 5.35665361e-03,
+};
+
+static const float mdct_win_7m5_16k[__LC3_MDCT_WIN_LEN(7500, 16000)] = {
+ 2.20824874e-03, 3.81014420e-03, 5.91552473e-03, 8.58361457e-03,
+ 1.18759723e-02, 1.58335301e-02, 2.04918652e-02, 2.58883593e-02,
+ 3.20415894e-02, 3.89616721e-02, 4.66742169e-02, 5.51849337e-02,
+ 6.45038384e-02, 7.46411071e-02, 8.56000162e-02, 9.73846703e-02,
+ 1.09993603e-01, 1.23419277e-01, 1.37655457e-01, 1.52690437e-01,
+ 1.68513363e-01, 1.85093105e-01, 2.02410419e-01, 2.20450365e-01,
+ 2.39167941e-01, 2.58526168e-01, 2.78498539e-01, 2.99038432e-01,
+ 3.20104862e-01, 3.41658622e-01, 3.63660034e-01, 3.86062695e-01,
+ 4.08815272e-01, 4.31871046e-01, 4.55176988e-01, 4.78676593e-01,
+ 5.02324813e-01, 5.26060916e-01, 5.49831283e-01, 5.73576883e-01,
+ 5.97241338e-01, 6.20770242e-01, 6.44099662e-01, 6.67176382e-01,
+ 6.89958854e-01, 7.12379980e-01, 7.34396372e-01, 7.55966688e-01,
+ 7.77036981e-01, 7.97558114e-01, 8.17490856e-01, 8.36796950e-01,
+ 8.55447310e-01, 8.73400798e-01, 8.90635719e-01, 9.07128770e-01,
+ 9.22848784e-01, 9.37763323e-01, 9.51860206e-01, 9.65130600e-01,
+ 9.77556541e-01, 9.89126209e-01, 9.99846919e-01, 1.00970073e+00,
+ 1.01868229e+00, 1.02681455e+00, 1.03408981e+00, 1.04051196e+00,
+ 1.04610837e+00, 1.05088565e+00, 1.05486289e+00, 1.05807221e+00,
+ 1.06053414e+00, 1.06227662e+00, 1.06333815e+00, 1.06375557e+00,
+ 1.06356632e+00, 1.06282156e+00, 1.06155996e+00, 1.05981709e+00,
+ 1.05765876e+00, 1.05512006e+00, 1.05223985e+00, 1.04908779e+00,
+ 1.04569860e+00, 1.04210831e+00, 1.03838099e+00, 1.03455276e+00,
+ 1.03067200e+00, 1.02679167e+00, 1.02295558e+00, 1.01920733e+00,
+ 1.01587289e+00, 1.01221017e+00, 1.00884559e+00, 1.00577851e+00,
+ 1.00300262e+00, 1.00051460e+00, 9.98309229e-01, 9.96378601e-01,
+ 9.94718132e-01, 9.93316216e-01, 9.92166957e-01, 9.91258603e-01,
+ 9.90581104e-01, 9.90123118e-01, 9.89873712e-01, 9.89818707e-01,
+ 9.89946800e-01, 9.90243175e-01, 9.90695564e-01, 9.91288540e-01,
+ 9.92009469e-01, 9.92842693e-01, 9.93775067e-01, 9.94790398e-01,
+ 9.95875534e-01, 9.97014367e-01, 9.98192871e-01, 9.99394506e-01,
+ 1.00060586e+00, 1.00181040e+00, 1.00299457e+00, 1.00414155e+00,
+ 1.00523688e+00, 1.00626393e+00, 1.00720890e+00, 1.00805489e+00,
+ 1.00878802e+00, 1.00939182e+00, 1.00985296e+00, 1.01015529e+00,
+ 1.01028602e+00, 1.01022988e+00, 1.00997541e+00, 1.00950846e+00,
+ 1.00881848e+00, 1.00789488e+00, 1.00672876e+00, 1.00530991e+00,
+ 1.00363456e+00, 1.00169363e+00, 9.99485663e-01, 9.97006370e-01,
+ 9.94254687e-01, 9.91231967e-01, 9.87937115e-01, 9.84375125e-01,
+ 9.79890963e-01, 9.75269879e-01, 9.70180498e-01, 9.64580027e-01,
+ 9.58425534e-01, 9.51684014e-01, 9.44320232e-01, 9.36290624e-01,
+ 9.27580507e-01, 9.18153414e-01, 9.07976524e-01, 8.97050058e-01,
+ 8.85351360e-01, 8.72857927e-01, 8.59579819e-01, 8.45502615e-01,
+ 8.30619943e-01, 8.14946648e-01, 7.98489378e-01, 7.81262450e-01,
+ 7.63291769e-01, 7.44590843e-01, 7.25199287e-01, 7.05153668e-01,
+ 6.84490545e-01, 6.63245210e-01, 6.41477162e-01, 6.19235334e-01,
+ 5.96559133e-01, 5.73519989e-01, 5.50173851e-01, 5.26568538e-01,
+ 5.02781159e-01, 4.78860889e-01, 4.54877894e-01, 4.30898123e-01,
+ 4.06993964e-01, 3.83234031e-01, 3.59680098e-01, 3.36408100e-01,
+ 3.13496418e-01, 2.91010565e-01, 2.69019585e-01, 2.47584348e-01,
+ 2.26788433e-01, 2.06677771e-01, 1.87310343e-01, 1.68739644e-01,
+ 1.51012382e-01, 1.34171842e-01, 1.18254662e-01, 1.03290734e-01,
+ 8.93117360e-02, 7.63429787e-02, 6.44077291e-02, 5.35243715e-02,
+ 4.37084453e-02, 3.49667099e-02, 2.72984629e-02, 2.06895808e-02,
+ 1.51125125e-02, 1.05228754e-02, 6.85547314e-03, 4.02351119e-03,
+};
+
+static const float mdct_win_7m5_24k[__LC3_MDCT_WIN_LEN(7500, 24000)] = {
+ 1.97084908e-03, 2.95060859e-03, 4.12447721e-03, 5.52688664e-03,
+ 7.17541132e-03, 9.08757730e-03, 1.12819105e-02, 1.37695374e-02,
+ 1.65600266e-02, 1.96650895e-02, 2.30953556e-02, 2.68612894e-02,
+ 3.09632560e-02, 3.54036230e-02, 4.01915610e-02, 4.53331403e-02,
+ 5.08289304e-02, 5.66815448e-02, 6.28935304e-02, 6.94696293e-02,
+ 7.64106314e-02, 8.37160016e-02, 9.13884278e-02, 9.94294008e-02,
+ 1.07834725e-01, 1.16604575e-01, 1.25736503e-01, 1.35226811e-01,
+ 1.45073546e-01, 1.55273819e-01, 1.65822194e-01, 1.76711174e-01,
+ 1.87928776e-01, 1.99473180e-01, 2.11342953e-01, 2.23524554e-01,
+ 2.36003100e-01, 2.48768614e-01, 2.61813811e-01, 2.75129161e-01,
+ 2.88701102e-01, 3.02514034e-01, 3.16558805e-01, 3.30823871e-01,
+ 3.45295567e-01, 3.59963992e-01, 3.74814544e-01, 3.89831817e-01,
+ 4.05001010e-01, 4.20308013e-01, 4.35739515e-01, 4.51277817e-01,
+ 4.66904918e-01, 4.82609041e-01, 4.98375466e-01, 5.14185341e-01,
+ 5.30021478e-01, 5.45869352e-01, 5.61710041e-01, 5.77528151e-01,
+ 5.93304696e-01, 6.09026346e-01, 6.24674189e-01, 6.40227555e-01,
+ 6.55671016e-01, 6.70995935e-01, 6.86184559e-01, 7.01218384e-01,
+ 7.16078449e-01, 7.30756084e-01, 7.45240679e-01, 7.59515122e-01,
+ 7.73561955e-01, 7.87369206e-01, 8.00923138e-01, 8.14211386e-01,
+ 8.27223833e-01, 8.39952374e-01, 8.52386102e-01, 8.64513675e-01,
+ 8.76324079e-01, 8.87814288e-01, 8.98977415e-01, 9.09803319e-01,
+ 9.20284312e-01, 9.30407518e-01, 9.40169652e-01, 9.49567795e-01,
+ 9.58599937e-01, 9.67260260e-01, 9.75545166e-01, 9.83447719e-01,
+ 9.90971957e-01, 9.98119269e-01, 1.00488283e+00, 1.01125773e+00,
+ 1.01724436e+00, 1.02285381e+00, 1.02808734e+00, 1.03293706e+00,
+ 1.03740495e+00, 1.04150164e+00, 1.04523236e+00, 1.04859791e+00,
+ 1.05160340e+00, 1.05425505e+00, 1.05656184e+00, 1.05853400e+00,
+ 1.06017414e+00, 1.06149371e+00, 1.06249943e+00, 1.06320577e+00,
+ 1.06362578e+00, 1.06376487e+00, 1.06363778e+00, 1.06325973e+00,
+ 1.06264695e+00, 1.06180496e+00, 1.06074505e+00, 1.05948492e+00,
+ 1.05804533e+00, 1.05643590e+00, 1.05466218e+00, 1.05274047e+00,
+ 1.05069500e+00, 1.04853894e+00, 1.04627898e+00, 1.04392435e+00,
+ 1.04149540e+00, 1.03901003e+00, 1.03647725e+00, 1.03390793e+00,
+ 1.03131989e+00, 1.02872867e+00, 1.02614832e+00, 1.02358988e+00,
+ 1.02106486e+00, 1.01856262e+00, 1.01655770e+00, 1.01400658e+00,
+ 1.01162953e+00, 1.00938590e+00, 1.00727455e+00, 1.00529616e+00,
+ 1.00344526e+00, 1.00172250e+00, 1.00012792e+00, 9.98657533e-01,
+ 9.97309592e-01, 9.96083571e-01, 9.94976569e-01, 9.93985158e-01,
+ 9.93107530e-01, 9.92341305e-01, 9.91683335e-01, 9.91130070e-01,
+ 9.90678325e-01, 9.90325325e-01, 9.90067562e-01, 9.89901282e-01,
+ 9.89822613e-01, 9.89827845e-01, 9.89913241e-01, 9.90074734e-01,
+ 9.90308256e-01, 9.90609852e-01, 9.90975314e-01, 9.91400330e-01,
+ 9.91880966e-01, 9.92412851e-01, 9.92991779e-01, 9.93613381e-01,
+ 9.94273149e-01, 9.94966958e-01, 9.95690370e-01, 9.96439157e-01,
+ 9.97208572e-01, 9.97994275e-01, 9.98791616e-01, 9.99596062e-01,
+ 1.00040410e+00, 1.00120985e+00, 1.00200976e+00, 1.00279924e+00,
+ 1.00357357e+00, 1.00432828e+00, 1.00505850e+00, 1.00575984e+00,
+ 1.00642767e+00, 1.00705768e+00, 1.00764515e+00, 1.00818549e+00,
+ 1.00867427e+00, 1.00910687e+00, 1.00947916e+00, 1.00978659e+00,
+ 1.01002476e+00, 1.01018954e+00, 1.01027669e+00, 1.01028203e+00,
+ 1.01020174e+00, 1.01003208e+00, 1.00976919e+00, 1.00940939e+00,
+ 1.00894931e+00, 1.00838641e+00, 1.00771780e+00, 1.00694031e+00,
+ 1.00605124e+00, 1.00504879e+00, 1.00393183e+00, 1.00269767e+00,
+ 1.00134427e+00, 9.99872092e-01, 9.98280464e-01, 9.96566569e-01,
+ 9.94731737e-01, 9.92777987e-01, 9.90701374e-01, 9.88504165e-01,
+ 9.86186892e-01, 9.83711989e-01, 9.80584643e-01, 9.77634164e-01,
+ 9.74455033e-01, 9.71062916e-01, 9.67447270e-01, 9.63593926e-01,
+ 9.59491398e-01, 9.55129725e-01, 9.50501326e-01, 9.45592810e-01,
+ 9.40389877e-01, 9.34886760e-01, 9.29080559e-01, 9.22959280e-01,
+ 9.16509579e-01, 9.09724456e-01, 9.02607350e-01, 8.95155084e-01,
+ 8.87356154e-01, 8.79202689e-01, 8.70699698e-01, 8.61847424e-01,
+ 8.52641750e-01, 8.43077833e-01, 8.33154905e-01, 8.22881272e-01,
+ 8.12257597e-01, 8.01285439e-01, 7.89971715e-01, 7.78318177e-01,
+ 7.66337710e-01, 7.54030328e-01, 7.41407991e-01, 7.28477501e-01,
+ 7.15255742e-01, 7.01751739e-01, 6.87975632e-01, 6.73936911e-01,
+ 6.59652573e-01, 6.45139489e-01, 6.30414716e-01, 6.15483622e-01,
+ 6.00365852e-01, 5.85078858e-01, 5.69649536e-01, 5.54084810e-01,
+ 5.38398518e-01, 5.22614738e-01, 5.06756805e-01, 4.90833753e-01,
+ 4.74866033e-01, 4.58876566e-01, 4.42885823e-01, 4.26906539e-01,
+ 4.10970973e-01, 3.95091024e-01, 3.79291327e-01, 3.63587417e-01,
+ 3.48004343e-01, 3.32563201e-01, 3.17287485e-01, 3.02196710e-01,
+ 2.87309403e-01, 2.72643992e-01, 2.58227431e-01, 2.44072856e-01,
+ 2.30208977e-01, 2.16641416e-01, 2.03398481e-01, 1.90486162e-01,
+ 1.77922122e-01, 1.65726674e-01, 1.53906397e-01, 1.42480547e-01,
+ 1.31453980e-01, 1.20841778e-01, 1.10652194e-01, 1.00891734e-01,
+ 9.15718851e-02, 8.26995967e-02, 7.42815529e-02, 6.63242382e-02,
+ 5.88334516e-02, 5.18140676e-02, 4.52698346e-02, 3.92030848e-02,
+ 3.36144159e-02, 2.85023308e-02, 2.38629107e-02, 1.96894227e-02,
+ 1.59720527e-02, 1.26976223e-02, 9.84937739e-03, 7.40724463e-03,
+ 5.35665361e-03, 3.83226552e-03,
+};
+
+static const float mdct_win_7m5_32k[__LC3_MDCT_WIN_LEN(7500, 32000)] = {
+ 1.84833037e-03, 2.56481839e-03, 3.36762118e-03, 4.28736617e-03,
+ 5.33830143e-03, 6.52679223e-03, 7.86112587e-03, 9.34628179e-03,
+ 1.09916868e-02, 1.28011172e-02, 1.47805911e-02, 1.69307043e-02,
+ 1.92592307e-02, 2.17696937e-02, 2.44685983e-02, 2.73556543e-02,
+ 3.04319230e-02, 3.36980464e-02, 3.71583577e-02, 4.08148180e-02,
+ 4.46708068e-02, 4.87262995e-02, 5.29820633e-02, 5.74382470e-02,
+ 6.20968580e-02, 6.69609767e-02, 7.20298364e-02, 7.73039146e-02,
+ 8.27825574e-02, 8.84682102e-02, 9.43607566e-02, 1.00460272e-01,
+ 1.06763824e-01, 1.13273679e-01, 1.19986420e-01, 1.26903521e-01,
+ 1.34020853e-01, 1.41339557e-01, 1.48857211e-01, 1.56573685e-01,
+ 1.64484622e-01, 1.72589077e-01, 1.80879090e-01, 1.89354320e-01,
+ 1.98012244e-01, 2.06854141e-01, 2.15875319e-01, 2.25068672e-01,
+ 2.34427407e-01, 2.43948314e-01, 2.53627993e-01, 2.63464061e-01,
+ 2.73450494e-01, 2.83582189e-01, 2.93853469e-01, 3.04257373e-01,
+ 3.14790914e-01, 3.25449123e-01, 3.36227410e-01, 3.47118760e-01,
+ 3.58120177e-01, 3.69224663e-01, 3.80427793e-01, 3.91720023e-01,
+ 4.03097022e-01, 4.14551955e-01, 4.26081719e-01, 4.37676318e-01,
+ 4.49330196e-01, 4.61034855e-01, 4.72786043e-01, 4.84576777e-01,
+ 4.96401707e-01, 5.08252458e-01, 5.20122078e-01, 5.32002077e-01,
+ 5.43888090e-01, 5.55771601e-01, 5.67645739e-01, 5.79502786e-01,
+ 5.91335035e-01, 6.03138367e-01, 6.14904172e-01, 6.26623941e-01,
+ 6.38288834e-01, 6.49893375e-01, 6.61432360e-01, 6.72902514e-01,
+ 6.84293750e-01, 6.95600460e-01, 7.06811784e-01, 7.17923425e-01,
+ 7.28931386e-01, 7.39832773e-01, 7.50618982e-01, 7.61284053e-01,
+ 7.71818919e-01, 7.82220992e-01, 7.92481330e-01, 8.02599448e-01,
+ 8.12565230e-01, 8.22377129e-01, 8.32030518e-01, 8.41523208e-01,
+ 8.50848313e-01, 8.60002412e-01, 8.68979881e-01, 8.77778347e-01,
+ 8.86395904e-01, 8.94829421e-01, 9.03077626e-01, 9.11132652e-01,
+ 9.18993585e-01, 9.26652937e-01, 9.34111420e-01, 9.41364344e-01,
+ 9.48412967e-01, 9.55255630e-01, 9.61892013e-01, 9.68316363e-01,
+ 9.74530156e-01, 9.80528338e-01, 9.86313928e-01, 9.91886049e-01,
+ 9.97246345e-01, 1.00239190e+00, 1.00731946e+00, 1.01202707e+00,
+ 1.01651654e+00, 1.02079430e+00, 1.02486082e+00, 1.02871471e+00,
+ 1.03235170e+00, 1.03577375e+00, 1.03898432e+00, 1.04198786e+00,
+ 1.04478564e+00, 1.04737818e+00, 1.04976743e+00, 1.05195405e+00,
+ 1.05394290e+00, 1.05573463e+00, 1.05734177e+00, 1.05875726e+00,
+ 1.05998674e+00, 1.06103672e+00, 1.06190651e+00, 1.06260369e+00,
+ 1.06313289e+00, 1.06350237e+00, 1.06370981e+00, 1.06376322e+00,
+ 1.06366765e+00, 1.06343012e+00, 1.06305656e+00, 1.06255421e+00,
+ 1.06192235e+00, 1.06116702e+00, 1.06029469e+00, 1.05931469e+00,
+ 1.05823465e+00, 1.05705891e+00, 1.05578948e+00, 1.05442979e+00,
+ 1.05298793e+00, 1.05147505e+00, 1.04989930e+00, 1.04826213e+00,
+ 1.04656691e+00, 1.04481699e+00, 1.04302125e+00, 1.04118768e+00,
+ 1.03932339e+00, 1.03743168e+00, 1.03551757e+00, 1.03358511e+00,
+ 1.03164371e+00, 1.02969955e+00, 1.02775944e+00, 1.02582719e+00,
+ 1.02390791e+00, 1.02200805e+00, 1.02013910e+00, 1.01826310e+00,
+ 1.01687901e+00, 1.01492195e+00, 1.01309662e+00, 1.01134205e+00,
+ 1.00965912e+00, 1.00805036e+00, 1.00651754e+00, 1.00505799e+00,
+ 1.00366956e+00, 1.00235327e+00, 1.00110981e+00, 9.99937523e-01,
+ 9.98834524e-01, 9.97800606e-01, 9.96835756e-01, 9.95938881e-01,
+ 9.95108459e-01, 9.94343411e-01, 9.93642921e-01, 9.93005832e-01,
+ 9.92430984e-01, 9.91917493e-01, 9.91463898e-01, 9.91068214e-01,
+ 9.90729218e-01, 9.90446225e-01, 9.90217819e-01, 9.90041963e-01,
+ 9.89917085e-01, 9.89841975e-01, 9.89815048e-01, 9.89834329e-01,
+ 9.89898211e-01, 9.90005403e-01, 9.90154189e-01, 9.90342427e-01,
+ 9.90568459e-01, 9.90830953e-01, 9.91128038e-01, 9.91457566e-01,
+ 9.91817881e-01, 9.92207559e-01, 9.92624757e-01, 9.93067358e-01,
+ 9.93533398e-01, 9.94021410e-01, 9.94529685e-01, 9.95055964e-01,
+ 9.95598351e-01, 9.96155580e-01, 9.96725627e-01, 9.97306092e-01,
+ 9.97895214e-01, 9.98491441e-01, 9.99092890e-01, 9.99697063e-01,
+ 1.00030303e+00, 1.00090793e+00, 1.00151084e+00, 1.00210923e+00,
+ 1.00270118e+00, 1.00328513e+00, 1.00385926e+00, 1.00442111e+00,
+ 1.00496860e+00, 1.00550040e+00, 1.00601455e+00, 1.00650869e+00,
+ 1.00698104e+00, 1.00743004e+00, 1.00785364e+00, 1.00824962e+00,
+ 1.00861604e+00, 1.00895138e+00, 1.00925390e+00, 1.00952134e+00,
+ 1.00975175e+00, 1.00994371e+00, 1.01009550e+00, 1.01020488e+00,
+ 1.01027007e+00, 1.01028975e+00, 1.01026227e+00, 1.01018562e+00,
+ 1.01005820e+00, 1.00987882e+00, 1.00964593e+00, 1.00935753e+00,
+ 1.00901228e+00, 1.00860959e+00, 1.00814837e+00, 1.00762674e+00,
+ 1.00704343e+00, 1.00639775e+00, 1.00568877e+00, 1.00491559e+00,
+ 1.00407768e+00, 1.00317429e+00, 1.00220424e+00, 1.00116684e+00,
+ 1.00006248e+00, 9.98891422e-01, 9.97652252e-01, 9.96343856e-01,
+ 9.94967462e-01, 9.93524663e-01, 9.92013927e-01, 9.90433283e-01,
+ 9.88785147e-01, 9.87072681e-01, 9.85297443e-01, 9.83401161e-01,
+ 9.80949418e-01, 9.78782729e-01, 9.76468238e-01, 9.74042850e-01,
+ 9.71498848e-01, 9.68829968e-01, 9.66030974e-01, 9.63095104e-01,
+ 9.60018198e-01, 9.56795738e-01, 9.53426267e-01, 9.49903482e-01,
+ 9.46222115e-01, 9.42375820e-01, 9.38361702e-01, 9.34177798e-01,
+ 9.29823124e-01, 9.25292320e-01, 9.20580120e-01, 9.15679793e-01,
+ 9.10590604e-01, 9.05315030e-01, 8.99852756e-01, 8.94199497e-01,
+ 8.88350152e-01, 8.82301631e-01, 8.76054874e-01, 8.69612385e-01,
+ 8.62972799e-01, 8.56135198e-01, 8.49098179e-01, 8.41857024e-01,
+ 8.34414055e-01, 8.26774617e-01, 8.18939244e-01, 8.10904891e-01,
+ 8.02675318e-01, 7.94253751e-01, 7.85641662e-01, 7.76838609e-01,
+ 7.67853193e-01, 7.58685181e-01, 7.49330658e-01, 7.39809171e-01,
+ 7.30109944e-01, 7.20247781e-01, 7.10224161e-01, 7.00044326e-01,
+ 6.89711890e-01, 6.79231154e-01, 6.68608179e-01, 6.57850997e-01,
+ 6.46965718e-01, 6.35959617e-01, 6.24840336e-01, 6.13603503e-01,
+ 6.02265091e-01, 5.90829083e-01, 5.79309408e-01, 5.67711124e-01,
+ 5.56037416e-01, 5.44293664e-01, 5.32489768e-01, 5.20636084e-01,
+ 5.08743273e-01, 4.96811166e-01, 4.84849881e-01, 4.72868107e-01,
+ 4.60875918e-01, 4.48881081e-01, 4.36891039e-01, 4.24912022e-01,
+ 4.12960603e-01, 4.01035896e-01, 3.89157867e-01, 3.77322199e-01,
+ 3.65543767e-01, 3.53832356e-01, 3.42196115e-01, 3.30644820e-01,
+ 3.19187559e-01, 3.07833309e-01, 2.96588182e-01, 2.85463717e-01,
+ 2.74462409e-01, 2.63609584e-01, 2.52883101e-01, 2.42323489e-01,
+ 2.31925746e-01, 2.21690837e-01, 2.11638058e-01, 2.01766920e-01,
+ 1.92082236e-01, 1.82589160e-01, 1.73305997e-01, 1.64229200e-01,
+ 1.55362654e-01, 1.46717079e-01, 1.38299391e-01, 1.30105078e-01,
+ 1.22145310e-01, 1.14423458e-01, 1.06941076e-01, 9.97025893e-02,
+ 9.27124283e-02, 8.59737427e-02, 7.94893311e-02, 7.32616579e-02,
+ 6.72934102e-02, 6.15874081e-02, 5.61458003e-02, 5.09700747e-02,
+ 4.60617047e-02, 4.14220117e-02, 3.70514189e-02, 3.29494666e-02,
+ 2.91153327e-02, 2.55476401e-02, 2.22437711e-02, 1.92000659e-02,
+ 1.64122205e-02, 1.38747611e-02, 1.15806353e-02, 9.52213664e-03,
+ 7.69137380e-03, 6.07207833e-03, 4.62581217e-03, 3.60685164e-03,
+};
+
+static const float mdct_win_7m5_48k[__LC3_MDCT_WIN_LEN(7500, 48000)] = {
+ 1.72152668e-03, 2.20824874e-03, 2.68901752e-03, 3.22613342e-03,
+ 3.81014420e-03, 4.45371932e-03, 5.15369240e-03, 5.91552473e-03,
+ 6.73869158e-03, 7.62861841e-03, 8.58361457e-03, 9.60938437e-03,
+ 1.07060753e-02, 1.18759723e-02, 1.31190130e-02, 1.44390108e-02,
+ 1.58335301e-02, 1.73063081e-02, 1.88584711e-02, 2.04918652e-02,
+ 2.22061476e-02, 2.40057166e-02, 2.58883593e-02, 2.78552326e-02,
+ 2.99059145e-02, 3.20415894e-02, 3.42610013e-02, 3.65680973e-02,
+ 3.89616721e-02, 4.14435824e-02, 4.40140796e-02, 4.66742169e-02,
+ 4.94214625e-02, 5.22588489e-02, 5.51849337e-02, 5.82005143e-02,
+ 6.13059845e-02, 6.45038384e-02, 6.77913923e-02, 7.11707833e-02,
+ 7.46411071e-02, 7.82028053e-02, 8.18549521e-02, 8.56000162e-02,
+ 8.94357617e-02, 9.33642589e-02, 9.73846703e-02, 1.01496718e-01,
+ 1.05698760e-01, 1.09993603e-01, 1.14378287e-01, 1.18853508e-01,
+ 1.23419277e-01, 1.28075997e-01, 1.32820581e-01, 1.37655457e-01,
+ 1.42578648e-01, 1.47590522e-01, 1.52690437e-01, 1.57878853e-01,
+ 1.63152529e-01, 1.68513363e-01, 1.73957969e-01, 1.79484737e-01,
+ 1.85093105e-01, 1.90784835e-01, 1.96556497e-01, 2.02410419e-01,
+ 2.08345433e-01, 2.14359825e-01, 2.20450365e-01, 2.26617296e-01,
+ 2.32856279e-01, 2.39167941e-01, 2.45550642e-01, 2.52003951e-01,
+ 2.58526168e-01, 2.65118408e-01, 2.71775911e-01, 2.78498539e-01,
+ 2.85284606e-01, 2.92132459e-01, 2.99038432e-01, 3.06004256e-01,
+ 3.13026529e-01, 3.20104862e-01, 3.27237324e-01, 3.34423210e-01,
+ 3.41658622e-01, 3.48944976e-01, 3.56279252e-01, 3.63660034e-01,
+ 3.71085146e-01, 3.78554327e-01, 3.86062695e-01, 3.93610554e-01,
+ 4.01195225e-01, 4.08815272e-01, 4.16468460e-01, 4.24155411e-01,
+ 4.31871046e-01, 4.39614744e-01, 4.47384019e-01, 4.55176988e-01,
+ 4.62990138e-01, 4.70824619e-01, 4.78676593e-01, 4.86545433e-01,
+ 4.94428714e-01, 5.02324813e-01, 5.10229471e-01, 5.18142927e-01,
+ 5.26060916e-01, 5.33982818e-01, 5.41906817e-01, 5.49831283e-01,
+ 5.57751234e-01, 5.65667636e-01, 5.73576883e-01, 5.81476666e-01,
+ 5.89364661e-01, 5.97241338e-01, 6.05102013e-01, 6.12946170e-01,
+ 6.20770242e-01, 6.28572094e-01, 6.36348526e-01, 6.44099662e-01,
+ 6.51820973e-01, 6.59513822e-01, 6.67176382e-01, 6.74806795e-01,
+ 6.82400711e-01, 6.89958854e-01, 6.97475722e-01, 7.04950145e-01,
+ 7.12379980e-01, 7.19765434e-01, 7.27103833e-01, 7.34396372e-01,
+ 7.41638561e-01, 7.48829639e-01, 7.55966688e-01, 7.63049259e-01,
+ 7.70072273e-01, 7.77036981e-01, 7.83941108e-01, 7.90781257e-01,
+ 7.97558114e-01, 8.04271381e-01, 8.10914901e-01, 8.17490856e-01,
+ 8.23997094e-01, 8.30432785e-01, 8.36796950e-01, 8.43089298e-01,
+ 8.49305847e-01, 8.55447310e-01, 8.61511037e-01, 8.67496281e-01,
+ 8.73400798e-01, 8.79227518e-01, 8.84972438e-01, 8.90635719e-01,
+ 8.96217173e-01, 9.01716414e-01, 9.07128770e-01, 9.12456578e-01,
+ 9.17697261e-01, 9.22848784e-01, 9.27909917e-01, 9.32882596e-01,
+ 9.37763323e-01, 9.42553356e-01, 9.47252428e-01, 9.51860206e-01,
+ 9.56376060e-01, 9.60800602e-01, 9.65130600e-01, 9.69366689e-01,
+ 9.73508812e-01, 9.77556541e-01, 9.81507226e-01, 9.85364580e-01,
+ 9.89126209e-01, 9.92794201e-01, 9.96367545e-01, 9.99846919e-01,
+ 1.00322812e+00, 1.00651341e+00, 1.00970073e+00, 1.01279029e+00,
+ 1.01578293e+00, 1.01868229e+00, 1.02148657e+00, 1.02419772e+00,
+ 1.02681455e+00, 1.02933598e+00, 1.03176043e+00, 1.03408981e+00,
+ 1.03632326e+00, 1.03846361e+00, 1.04051196e+00, 1.04246831e+00,
+ 1.04433331e+00, 1.04610837e+00, 1.04779018e+00, 1.04938334e+00,
+ 1.05088565e+00, 1.05229923e+00, 1.05362522e+00, 1.05486289e+00,
+ 1.05601521e+00, 1.05708746e+00, 1.05807221e+00, 1.05897524e+00,
+ 1.05979447e+00, 1.06053414e+00, 1.06119412e+00, 1.06177366e+00,
+ 1.06227662e+00, 1.06270324e+00, 1.06305569e+00, 1.06333815e+00,
+ 1.06354800e+00, 1.06368607e+00, 1.06375557e+00, 1.06375743e+00,
+ 1.06369358e+00, 1.06356632e+00, 1.06337707e+00, 1.06312782e+00,
+ 1.06282156e+00, 1.06245782e+00, 1.06203634e+00, 1.06155996e+00,
+ 1.06102951e+00, 1.06044797e+00, 1.05981709e+00, 1.05914163e+00,
+ 1.05842136e+00, 1.05765876e+00, 1.05685377e+00, 1.05600761e+00,
+ 1.05512006e+00, 1.05419505e+00, 1.05323346e+00, 1.05223985e+00,
+ 1.05121668e+00, 1.05016637e+00, 1.04908779e+00, 1.04798366e+00,
+ 1.04685334e+00, 1.04569860e+00, 1.04452056e+00, 1.04332348e+00,
+ 1.04210831e+00, 1.04087907e+00, 1.03963603e+00, 1.03838099e+00,
+ 1.03711403e+00, 1.03583813e+00, 1.03455276e+00, 1.03326200e+00,
+ 1.03196750e+00, 1.03067200e+00, 1.02937564e+00, 1.02808244e+00,
+ 1.02679167e+00, 1.02550635e+00, 1.02422655e+00, 1.02295558e+00,
+ 1.02169299e+00, 1.02044475e+00, 1.01920733e+00, 1.01799992e+00,
+ 1.01716022e+00, 1.01587289e+00, 1.01461783e+00, 1.01339738e+00,
+ 1.01221017e+00, 1.01105652e+00, 1.00993444e+00, 1.00884559e+00,
+ 1.00778956e+00, 1.00676790e+00, 1.00577851e+00, 1.00482173e+00,
+ 1.00389592e+00, 1.00300262e+00, 1.00214091e+00, 1.00131213e+00,
+ 1.00051460e+00, 9.99748988e-01, 9.99013486e-01, 9.98309229e-01,
+ 9.97634934e-01, 9.96991885e-01, 9.96378601e-01, 9.95795982e-01,
+ 9.95242217e-01, 9.94718132e-01, 9.94222122e-01, 9.93755313e-01,
+ 9.93316216e-01, 9.92905809e-01, 9.92522422e-01, 9.92166957e-01,
+ 9.91837704e-01, 9.91535508e-01, 9.91258603e-01, 9.91007878e-01,
+ 9.90781723e-01, 9.90581104e-01, 9.90404336e-01, 9.90252267e-01,
+ 9.90123118e-01, 9.90017726e-01, 9.89934325e-01, 9.89873712e-01,
+ 9.89834110e-01, 9.89816359e-01, 9.89818707e-01, 9.89841998e-01,
+ 9.89884438e-01, 9.89946800e-01, 9.90027287e-01, 9.90126680e-01,
+ 9.90243175e-01, 9.90377594e-01, 9.90528134e-01, 9.90695564e-01,
+ 9.90878043e-01, 9.91076302e-01, 9.91288540e-01, 9.91515602e-01,
+ 9.91755666e-01, 9.92009469e-01, 9.92275155e-01, 9.92553486e-01,
+ 9.92842693e-01, 9.93143533e-01, 9.93454080e-01, 9.93775067e-01,
+ 9.94104689e-01, 9.94443742e-01, 9.94790398e-01, 9.95145361e-01,
+ 9.95506800e-01, 9.95875534e-01, 9.96249681e-01, 9.96629919e-01,
+ 9.97014367e-01, 9.97403799e-01, 9.97796404e-01, 9.98192871e-01,
+ 9.98591286e-01, 9.98992436e-01, 9.99394506e-01, 9.99798247e-01,
+ 1.00020179e+00, 1.00060586e+00, 1.00100858e+00, 1.00141070e+00,
+ 1.00181040e+00, 1.00220846e+00, 1.00260296e+00, 1.00299457e+00,
+ 1.00338148e+00, 1.00376444e+00, 1.00414155e+00, 1.00451348e+00,
+ 1.00487832e+00, 1.00523688e+00, 1.00558730e+00, 1.00593027e+00,
+ 1.00626393e+00, 1.00658905e+00, 1.00690380e+00, 1.00720890e+00,
+ 1.00750238e+00, 1.00778498e+00, 1.00805489e+00, 1.00831287e+00,
+ 1.00855700e+00, 1.00878802e+00, 1.00900405e+00, 1.00920593e+00,
+ 1.00939182e+00, 1.00956244e+00, 1.00971590e+00, 1.00985296e+00,
+ 1.00997177e+00, 1.01007317e+00, 1.01015529e+00, 1.01021893e+00,
+ 1.01026225e+00, 1.01028602e+00, 1.01028842e+00, 1.01027030e+00,
+ 1.01022988e+00, 1.01016802e+00, 1.01008292e+00, 1.00997541e+00,
+ 1.00984369e+00, 1.00968863e+00, 1.00950846e+00, 1.00930404e+00,
+ 1.00907371e+00, 1.00881848e+00, 1.00853675e+00, 1.00822947e+00,
+ 1.00789488e+00, 1.00753391e+00, 1.00714488e+00, 1.00672876e+00,
+ 1.00628393e+00, 1.00581146e+00, 1.00530991e+00, 1.00478053e+00,
+ 1.00422177e+00, 1.00363456e+00, 1.00301719e+00, 1.00237067e+00,
+ 1.00169363e+00, 1.00098749e+00, 1.00025108e+00, 9.99485663e-01,
+ 9.98689592e-01, 9.97863666e-01, 9.97006370e-01, 9.96119199e-01,
+ 9.95201404e-01, 9.94254687e-01, 9.93277595e-01, 9.92270651e-01,
+ 9.91231967e-01, 9.90163286e-01, 9.89064394e-01, 9.87937115e-01,
+ 9.86779736e-01, 9.85592773e-01, 9.84375125e-01, 9.83129288e-01,
+ 9.81348463e-01, 9.79890963e-01, 9.78400459e-01, 9.76860435e-01,
+ 9.75269879e-01, 9.73627353e-01, 9.71931341e-01, 9.70180498e-01,
+ 9.68372652e-01, 9.66506952e-01, 9.64580027e-01, 9.62592318e-01,
+ 9.60540986e-01, 9.58425534e-01, 9.56244393e-01, 9.53998416e-01,
+ 9.51684014e-01, 9.49301185e-01, 9.46846884e-01, 9.44320232e-01,
+ 9.41718404e-01, 9.39042580e-01, 9.36290624e-01, 9.33464050e-01,
+ 9.30560854e-01, 9.27580507e-01, 9.24519592e-01, 9.21378471e-01,
+ 9.18153414e-01, 9.14844696e-01, 9.11451652e-01, 9.07976524e-01,
+ 9.04417545e-01, 9.00776308e-01, 8.97050058e-01, 8.93238398e-01,
+ 8.89338681e-01, 8.85351360e-01, 8.81274023e-01, 8.77109638e-01,
+ 8.72857927e-01, 8.68519505e-01, 8.64092796e-01, 8.59579819e-01,
+ 8.54976007e-01, 8.50285220e-01, 8.45502615e-01, 8.40630470e-01,
+ 8.35667925e-01, 8.30619943e-01, 8.25482007e-01, 8.20258909e-01,
+ 8.14946648e-01, 8.09546696e-01, 8.04059978e-01, 7.98489378e-01,
+ 7.92831417e-01, 7.87090668e-01, 7.81262450e-01, 7.75353947e-01,
+ 7.69363613e-01, 7.63291769e-01, 7.57139016e-01, 7.50901711e-01,
+ 7.44590843e-01, 7.38205136e-01, 7.31738075e-01, 7.25199287e-01,
+ 7.18588225e-01, 7.11905687e-01, 7.05153668e-01, 6.98332634e-01,
+ 6.91444101e-01, 6.84490545e-01, 6.77470119e-01, 6.70388375e-01,
+ 6.63245210e-01, 6.56045780e-01, 6.48788627e-01, 6.41477162e-01,
+ 6.34114323e-01, 6.26702000e-01, 6.19235334e-01, 6.11720596e-01,
+ 6.04161612e-01, 5.96559133e-01, 5.88914401e-01, 5.81234783e-01,
+ 5.73519989e-01, 5.65770616e-01, 5.57988067e-01, 5.50173851e-01,
+ 5.42330194e-01, 5.34460798e-01, 5.26568538e-01, 5.18656324e-01,
+ 5.10728813e-01, 5.02781159e-01, 4.94819491e-01, 4.86845139e-01,
+ 4.78860889e-01, 4.70869928e-01, 4.62875144e-01, 4.54877894e-01,
+ 4.46882512e-01, 4.38889325e-01, 4.30898123e-01, 4.22918322e-01,
+ 4.14950878e-01, 4.06993964e-01, 3.99052648e-01, 3.91134614e-01,
+ 3.83234031e-01, 3.75354653e-01, 3.67502060e-01, 3.59680098e-01,
+ 3.51887312e-01, 3.44130166e-01, 3.36408100e-01, 3.28728966e-01,
+ 3.21090505e-01, 3.13496418e-01, 3.05951565e-01, 2.98454319e-01,
+ 2.91010565e-01, 2.83621109e-01, 2.76285415e-01, 2.69019585e-01,
+ 2.61812445e-01, 2.54659232e-01, 2.47584348e-01, 2.40578694e-01,
+ 2.33647009e-01, 2.26788433e-01, 2.20001992e-01, 2.13301325e-01,
+ 2.06677771e-01, 2.00140409e-01, 1.93683630e-01, 1.87310343e-01,
+ 1.81027384e-01, 1.74839476e-01, 1.68739644e-01, 1.62737273e-01,
+ 1.56825277e-01, 1.51012382e-01, 1.45298230e-01, 1.39687469e-01,
+ 1.34171842e-01, 1.28762544e-01, 1.23455562e-01, 1.18254662e-01,
+ 1.13159677e-01, 1.08171439e-01, 1.03290734e-01, 9.85202978e-02,
+ 9.38600023e-02, 8.93117360e-02, 8.48752103e-02, 8.05523737e-02,
+ 7.63429787e-02, 7.22489246e-02, 6.82699120e-02, 6.44077291e-02,
+ 6.06620003e-02, 5.70343711e-02, 5.35243715e-02, 5.01334690e-02,
+ 4.68610790e-02, 4.37084453e-02, 4.06748365e-02, 3.77612269e-02,
+ 3.49667099e-02, 3.22919275e-02, 2.97357669e-02, 2.72984629e-02,
+ 2.49787186e-02, 2.27762542e-02, 2.06895808e-02, 1.87178169e-02,
+ 1.68593418e-02, 1.51125125e-02, 1.34757094e-02, 1.19462709e-02,
+ 1.05228754e-02, 9.20130941e-03, 7.98124316e-03, 6.85547314e-03,
+ 5.82657334e-03, 4.87838525e-03, 4.02351119e-03, 3.15418663e-03,
+};
+
+static const float mdct_win_10m_8k[__LC3_MDCT_WIN_LEN(10000, 8000)] = {
-7.07854671e-04, -2.09819773e-03, -4.52519808e-03, -8.23397633e-03,
-1.33771310e-02, -1.99972156e-02, -2.80090946e-02, -3.72150208e-02,
-4.73176826e-02, -5.79465483e-02, -6.86760675e-02, -7.90464744e-02,
@@ -1031,7 +2940,7 @@ static const float mdct_win_10m_80[80+50] = {
2.70146141e-02, 9.99674359e-03,
};
-static const float mdct_win_10m_160[160+100] = {
+static const float mdct_win_10m_16k[__LC3_MDCT_WIN_LEN(10000, 16000)] = {
-4.61989875e-04, -9.74716672e-04, -1.66447310e-03, -2.59710692e-03,
-3.80628516e-03, -5.32460872e-03, -7.17588528e-03, -9.38248086e-03,
-1.19527030e-02, -1.48952816e-02, -1.82066640e-02, -2.18757093e-02,
@@ -1099,7 +3008,7 @@ static const float mdct_win_10m_160[160+100] = {
3.28807275e-02, 2.18305756e-02, 1.33638143e-02, 6.75812489e-03,
};
-static const float mdct_win_10m_240[240+150] = {
+static const float mdct_win_10m_24k[__LC3_MDCT_WIN_LEN(10000, 24000)] = {
-3.61349642e-04, -7.07854671e-04, -1.07444364e-03, -1.53347854e-03,
-2.09819773e-03, -2.77842087e-03, -3.58412992e-03, -4.52519808e-03,
-5.60932724e-03, -6.84323454e-03, -8.23397633e-03, -9.78531476e-03,
@@ -1200,7 +3109,7 @@ static const float mdct_win_10m_240[240+150] = {
9.99674359e-03, 5.30523510e-03,
};
-static const float mdct_win_10m_320[320+200] = {
+static const float mdct_win_10m_32k[__LC3_MDCT_WIN_LEN(10000, 32000)] = {
-3.02115349e-04, -5.86773749e-04, -8.36650400e-04, -1.12663536e-03,
-1.47049294e-03, -1.87347339e-03, -2.33929236e-03, -2.87200807e-03,
-3.47625639e-03, -4.15596382e-03, -4.91456379e-03, -5.75517250e-03,
@@ -1333,7 +3242,7 @@ static const float mdct_win_10m_320[320+200] = {
1.52571017e-02, 1.16378749e-02, 8.43308778e-03, 4.44966900e-03,
};
-static const float mdct_win_10m_480[480+300] = {
+static const float mdct_win_10m_48k[__LC3_MDCT_WIN_LEN(10000, 48000)] = {
-2.35303215e-04, -4.61989875e-04, -6.26293154e-04, -7.92918043e-04,
-9.74716672e-04, -1.18025689e-03, -1.40920904e-03, -1.66447310e-03,
-1.94659161e-03, -2.25708173e-03, -2.59710692e-03, -2.96760762e-03,
@@ -1531,572 +3440,968 @@ static const float mdct_win_10m_480[480+300] = {
1.10855888e-02, 8.94347419e-03, 6.75812489e-03, 3.50443813e-03,
};
-static const float mdct_win_7m5_60[60+46] = {
- 2.95060859e-03, 7.17541132e-03, 1.37695374e-02, 2.30953556e-02,
- 3.54036230e-02, 5.08289304e-02, 6.94696293e-02, 9.13884278e-02,
- 1.16604575e-01, 1.45073546e-01, 1.76711174e-01, 2.11342953e-01,
- 2.48768614e-01, 2.88701102e-01, 3.30823871e-01, 3.74814544e-01,
- 4.20308013e-01, 4.66904918e-01, 5.14185341e-01, 5.61710041e-01,
- 6.09026346e-01, 6.55671016e-01, 7.01218384e-01, 7.45240679e-01,
- 7.87369206e-01, 8.27223833e-01, 8.64513675e-01, 8.98977415e-01,
- 9.30407518e-01, 9.58599937e-01, 9.83447719e-01, 1.00488283e+00,
- 1.02285381e+00, 1.03740495e+00, 1.04859791e+00, 1.05656184e+00,
- 1.06149371e+00, 1.06362578e+00, 1.06325973e+00, 1.06074505e+00,
- 1.05643590e+00, 1.05069500e+00, 1.04392435e+00, 1.03647725e+00,
- 1.02872867e+00, 1.02106486e+00, 1.01400658e+00, 1.00727455e+00,
- 1.00172250e+00, 9.97309592e-01, 9.93985158e-01, 9.91683335e-01,
- 9.90325325e-01, 9.89822613e-01, 9.90074734e-01, 9.90975314e-01,
- 9.92412851e-01, 9.94273149e-01, 9.96439157e-01, 9.98791616e-01,
- 1.00120985e+00, 1.00357357e+00, 1.00575984e+00, 1.00764515e+00,
- 1.00910687e+00, 1.01002476e+00, 1.01028203e+00, 1.00976919e+00,
- 1.00838641e+00, 1.00605124e+00, 1.00269767e+00, 9.98280464e-01,
- 9.92777987e-01, 9.86186892e-01, 9.77634164e-01, 9.67447270e-01,
- 9.55129725e-01, 9.40389877e-01, 9.22959280e-01, 9.02607350e-01,
- 8.79202689e-01, 8.52641750e-01, 8.22881272e-01, 7.89971715e-01,
- 7.54030328e-01, 7.15255742e-01, 6.73936911e-01, 6.30414716e-01,
- 5.85078858e-01, 5.38398518e-01, 4.90833753e-01, 4.42885823e-01,
- 3.95091024e-01, 3.48004343e-01, 3.02196710e-01, 2.58227431e-01,
- 2.16641416e-01, 1.77922122e-01, 1.42480547e-01, 1.10652194e-01,
- 8.26995967e-02, 5.88334516e-02, 3.92030848e-02, 2.38629107e-02,
- 1.26976223e-02, 5.35665361e-03,
-};
-
-static const float mdct_win_7m5_120[120+92] = {
- 2.20824874e-03, 3.81014420e-03, 5.91552473e-03, 8.58361457e-03,
- 1.18759723e-02, 1.58335301e-02, 2.04918652e-02, 2.58883593e-02,
- 3.20415894e-02, 3.89616721e-02, 4.66742169e-02, 5.51849337e-02,
- 6.45038384e-02, 7.46411071e-02, 8.56000162e-02, 9.73846703e-02,
- 1.09993603e-01, 1.23419277e-01, 1.37655457e-01, 1.52690437e-01,
- 1.68513363e-01, 1.85093105e-01, 2.02410419e-01, 2.20450365e-01,
- 2.39167941e-01, 2.58526168e-01, 2.78498539e-01, 2.99038432e-01,
- 3.20104862e-01, 3.41658622e-01, 3.63660034e-01, 3.86062695e-01,
- 4.08815272e-01, 4.31871046e-01, 4.55176988e-01, 4.78676593e-01,
- 5.02324813e-01, 5.26060916e-01, 5.49831283e-01, 5.73576883e-01,
- 5.97241338e-01, 6.20770242e-01, 6.44099662e-01, 6.67176382e-01,
- 6.89958854e-01, 7.12379980e-01, 7.34396372e-01, 7.55966688e-01,
- 7.77036981e-01, 7.97558114e-01, 8.17490856e-01, 8.36796950e-01,
- 8.55447310e-01, 8.73400798e-01, 8.90635719e-01, 9.07128770e-01,
- 9.22848784e-01, 9.37763323e-01, 9.51860206e-01, 9.65130600e-01,
- 9.77556541e-01, 9.89126209e-01, 9.99846919e-01, 1.00970073e+00,
- 1.01868229e+00, 1.02681455e+00, 1.03408981e+00, 1.04051196e+00,
- 1.04610837e+00, 1.05088565e+00, 1.05486289e+00, 1.05807221e+00,
- 1.06053414e+00, 1.06227662e+00, 1.06333815e+00, 1.06375557e+00,
- 1.06356632e+00, 1.06282156e+00, 1.06155996e+00, 1.05981709e+00,
- 1.05765876e+00, 1.05512006e+00, 1.05223985e+00, 1.04908779e+00,
- 1.04569860e+00, 1.04210831e+00, 1.03838099e+00, 1.03455276e+00,
- 1.03067200e+00, 1.02679167e+00, 1.02295558e+00, 1.01920733e+00,
- 1.01587289e+00, 1.01221017e+00, 1.00884559e+00, 1.00577851e+00,
- 1.00300262e+00, 1.00051460e+00, 9.98309229e-01, 9.96378601e-01,
- 9.94718132e-01, 9.93316216e-01, 9.92166957e-01, 9.91258603e-01,
- 9.90581104e-01, 9.90123118e-01, 9.89873712e-01, 9.89818707e-01,
- 9.89946800e-01, 9.90243175e-01, 9.90695564e-01, 9.91288540e-01,
- 9.92009469e-01, 9.92842693e-01, 9.93775067e-01, 9.94790398e-01,
- 9.95875534e-01, 9.97014367e-01, 9.98192871e-01, 9.99394506e-01,
- 1.00060586e+00, 1.00181040e+00, 1.00299457e+00, 1.00414155e+00,
- 1.00523688e+00, 1.00626393e+00, 1.00720890e+00, 1.00805489e+00,
- 1.00878802e+00, 1.00939182e+00, 1.00985296e+00, 1.01015529e+00,
- 1.01028602e+00, 1.01022988e+00, 1.00997541e+00, 1.00950846e+00,
- 1.00881848e+00, 1.00789488e+00, 1.00672876e+00, 1.00530991e+00,
- 1.00363456e+00, 1.00169363e+00, 9.99485663e-01, 9.97006370e-01,
- 9.94254687e-01, 9.91231967e-01, 9.87937115e-01, 9.84375125e-01,
- 9.79890963e-01, 9.75269879e-01, 9.70180498e-01, 9.64580027e-01,
- 9.58425534e-01, 9.51684014e-01, 9.44320232e-01, 9.36290624e-01,
- 9.27580507e-01, 9.18153414e-01, 9.07976524e-01, 8.97050058e-01,
- 8.85351360e-01, 8.72857927e-01, 8.59579819e-01, 8.45502615e-01,
- 8.30619943e-01, 8.14946648e-01, 7.98489378e-01, 7.81262450e-01,
- 7.63291769e-01, 7.44590843e-01, 7.25199287e-01, 7.05153668e-01,
- 6.84490545e-01, 6.63245210e-01, 6.41477162e-01, 6.19235334e-01,
- 5.96559133e-01, 5.73519989e-01, 5.50173851e-01, 5.26568538e-01,
- 5.02781159e-01, 4.78860889e-01, 4.54877894e-01, 4.30898123e-01,
- 4.06993964e-01, 3.83234031e-01, 3.59680098e-01, 3.36408100e-01,
- 3.13496418e-01, 2.91010565e-01, 2.69019585e-01, 2.47584348e-01,
- 2.26788433e-01, 2.06677771e-01, 1.87310343e-01, 1.68739644e-01,
- 1.51012382e-01, 1.34171842e-01, 1.18254662e-01, 1.03290734e-01,
- 8.93117360e-02, 7.63429787e-02, 6.44077291e-02, 5.35243715e-02,
- 4.37084453e-02, 3.49667099e-02, 2.72984629e-02, 2.06895808e-02,
- 1.51125125e-02, 1.05228754e-02, 6.85547314e-03, 4.02351119e-03,
+#if LC3_PLUS_HR
+
+static const float mdct_win_10m_48k_hr[__LC3_MDCT_WIN_LEN(10000, 48000)] = {
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 9.42341174e-08, 6.19838374e-07, 1.82603810e-06, 4.22741550e-06,
+ 8.56822135e-06, 1.59013834e-05, 2.76738483e-05, 4.58246141e-05,
+ 7.28956657e-05, 1.12155336e-04, 1.67733029e-04, 2.44763592e-04,
+ 3.49539070e-04, 4.89664846e-04, 6.74216484e-04, 9.13893222e-04,
+ 1.22116262e-03, 1.61039189e-03, 2.09795963e-03, 2.70234118e-03,
+ 3.44416290e-03, 4.34621749e-03, 5.43343695e-03, 6.73281262e-03,
+ 8.27326626e-03, 1.00854570e-02, 1.22015327e-02, 1.46548180e-02,
+ 1.74794346e-02, 2.07098722e-02, 2.43804958e-02, 2.85249949e-02,
+ 3.31758074e-02, 3.83635014e-02, 4.41161096e-02, 5.04585020e-02,
+ 5.74117042e-02, 6.49922863e-02, 7.32117295e-02, 8.20759088e-02,
+ 9.15845558e-02, 1.01730898e-01, 1.12501279e-01, 1.23875007e-01,
+ 1.35824218e-01, 1.48313895e-01, 1.61302090e-01, 1.74740151e-01,
+ 1.88573152e-01, 2.02740535e-01, 2.17176691e-01, 2.31811777e-01,
+ 2.46572644e-01, 2.61383832e-01, 2.76168495e-01, 2.90849626e-01,
+ 3.05351138e-01, 3.19598824e-01, 3.33521664e-01, 3.47052664e-01,
+ 3.60129982e-01, 3.72697920e-01, 3.84707332e-01, 3.96116525e-01,
+ 4.06891733e-01, 4.17007536e-01, 4.26446915e-01, 4.35201406e-01,
+ 4.43271041e-01, 4.50664014e-01, 4.57396388e-01, 4.63491529e-01,
+ 4.68979478e-01, 4.73896384e-01, 4.78283674e-01, 4.82187212e-01,
+ 4.85656589e-01, 4.88744229e-01, 4.91504699e-01, 4.93993789e-01,
+ 4.96267974e-01, 4.98383760e-01, 5.00396967e-01, 5.02362430e-01,
+ 5.04333496e-01, 5.06361604e-01, 5.08496106e-01, 5.10783911e-01,
+ 5.13269365e-01, 5.15994072e-01, 5.18996596e-01, 5.22312462e-01,
+ 5.25973916e-01, 5.30009925e-01, 5.34445822e-01, 5.39303243e-01,
+ 5.44600070e-01, 5.50350249e-01, 5.56563497e-01, 5.63245535e-01,
+ 5.70397854e-01, 5.78017771e-01, 5.86098313e-01, 5.94628513e-01,
+ 6.03593290e-01, 6.12973869e-01, 6.22747838e-01, 6.32889450e-01,
+ 6.43370092e-01, 6.54158235e-01, 6.65220201e-01, 6.76520288e-01,
+ 6.88021243e-01, 6.99684739e-01, 7.11471498e-01, 7.23342001e-01,
+ 7.35256732e-01, 7.47176409e-01, 7.59062469e-01, 7.70877421e-01,
+ 7.82584906e-01, 7.94150114e-01, 8.05540025e-01, 8.16723466e-01,
+ 8.27671409e-01, 8.38356972e-01, 8.48755658e-01, 8.58845115e-01,
+ 8.68605733e-01, 8.78019989e-01, 8.87072980e-01, 8.95752132e-01,
+ 9.04047191e-01, 9.11950290e-01, 9.19455826e-01, 9.26560223e-01,
+ 9.33262229e-01, 9.39562619e-01, 9.45464134e-01, 9.50971425e-01,
+ 9.56090987e-01, 9.60831106e-01, 9.65201676e-01, 9.69214201e-01,
+ 9.72881556e-01, 9.76217866e-01, 9.79238510e-01, 9.81959701e-01,
+ 9.84398544e-01, 9.86572623e-01, 9.88499999e-01, 9.90198970e-01,
+ 9.91687655e-01, 9.92984235e-01, 9.94106293e-01, 9.95071113e-01,
+ 9.95895147e-01, 9.96594131e-01, 9.97182965e-01, 9.97675478e-01,
+ 9.98084545e-01, 9.98421967e-01, 9.98698533e-01, 9.98923838e-01,
+ 9.99106586e-01, 9.99254227e-01, 9.99373496e-01, 9.99470055e-01,
+ 9.99548733e-01, 9.99613643e-01, 9.99668002e-01, 9.99714673e-01,
+ 9.99755740e-01, 9.99792874e-01, 9.99827385e-01, 9.99860168e-01,
+ 9.99891937e-01, 9.99923110e-01, 9.99953985e-01, 9.99984682e-01,
+ 1.00001526e+00, 1.00004578e+00, 1.00007617e+00, 1.00010622e+00,
+ 1.00013602e+00, 1.00016546e+00, 1.00019431e+00, 1.00022256e+00,
+ 1.00025010e+00, 1.00027692e+00, 1.00030291e+00, 1.00032794e+00,
+ 1.00035203e+00, 1.00037491e+00, 1.00039685e+00, 1.00041747e+00,
+ 1.00043690e+00, 1.00045502e+00, 1.00047183e+00, 1.00048721e+00,
+ 1.00050116e+00, 1.00051367e+00, 1.00052476e+00, 1.00053418e+00,
+ 1.00054228e+00, 1.00054872e+00, 1.00055361e+00, 1.00055695e+00,
+ 1.00055885e+00, 1.00055909e+00, 1.00055790e+00, 1.00055504e+00,
+ 1.00055087e+00, 1.00054502e+00, 1.00053787e+00, 1.00052929e+00,
+ 1.00051928e+00, 1.00050783e+00, 1.00049520e+00, 1.00048113e+00,
+ 1.00046599e+00, 1.00044954e+00, 1.00043201e+00, 1.00041330e+00,
+ 1.00039363e+00, 1.00037301e+00, 1.00035143e+00, 1.00032890e+00,
+ 1.00030565e+00, 1.00028157e+00, 1.00025690e+00, 1.00023150e+00,
+ 1.00020564e+00, 1.00017929e+00, 1.00015235e+00, 1.00012517e+00,
+ 1.00009763e+00, 1.00006998e+00, 1.00004208e+00, 1.00001407e+00,
+ 9.99985993e-01, 9.99957979e-01, 9.99930084e-01, 9.99902308e-01,
+ 9.99874830e-01, 9.99847591e-01, 9.99820769e-01, 9.99794364e-01,
+ 9.99768496e-01, 9.99743164e-01, 9.99718428e-01, 9.99694467e-01,
+ 9.99671161e-01, 9.99648750e-01, 9.99627173e-01, 9.99606490e-01,
+ 9.99586821e-01, 9.99568224e-01, 9.99550641e-01, 9.99534249e-01,
+ 9.99519050e-01, 9.99505103e-01, 9.99492407e-01, 9.99481022e-01,
+ 9.99471009e-01, 9.99462426e-01, 9.99455214e-01, 9.99449492e-01,
+ 9.99445200e-01, 9.99442458e-01, 9.99441206e-01, 9.99441504e-01,
+ 9.99443293e-01, 9.99446690e-01, 9.99451578e-01, 9.99458075e-01,
+ 9.99466062e-01, 9.99475598e-01, 9.99486566e-01, 9.99499083e-01,
+ 9.99513030e-01, 9.99528408e-01, 9.99545157e-01, 9.99563277e-01,
+ 9.99582708e-01, 9.99603331e-01, 9.99625206e-01, 9.99648154e-01,
+ 9.99672174e-01, 9.99697208e-01, 9.99723136e-01, 9.99749959e-01,
+ 9.99777496e-01, 9.99805748e-01, 9.99834597e-01, 9.99863982e-01,
+ 9.99893785e-01, 9.99923885e-01, 9.99954224e-01, 9.99984741e-01,
+ 1.00001526e+00, 1.00004578e+00, 1.00007617e+00, 1.00010622e+00,
+ 1.00013602e+00, 1.00016546e+00, 1.00019431e+00, 1.00022256e+00,
+ 1.00025010e+00, 1.00027692e+00, 1.00030291e+00, 1.00032794e+00,
+ 1.00035203e+00, 1.00037491e+00, 1.00039685e+00, 1.00041747e+00,
+ 1.00043690e+00, 1.00045502e+00, 1.00047183e+00, 1.00048721e+00,
+ 1.00050116e+00, 1.00051367e+00, 1.00052476e+00, 1.00053418e+00,
+ 1.00054228e+00, 1.00054872e+00, 1.00055361e+00, 1.00055695e+00,
+ 1.00055885e+00, 1.00055909e+00, 1.00055790e+00, 1.00055504e+00,
+ 1.00055087e+00, 1.00054502e+00, 1.00053787e+00, 1.00052929e+00,
+ 1.00051928e+00, 1.00050783e+00, 1.00049520e+00, 1.00048113e+00,
+ 1.00046599e+00, 1.00044954e+00, 1.00043201e+00, 1.00041330e+00,
+ 1.00039363e+00, 1.00037301e+00, 1.00035143e+00, 1.00032890e+00,
+ 1.00030565e+00, 1.00028157e+00, 1.00025690e+00, 1.00023150e+00,
+ 1.00020564e+00, 1.00017929e+00, 1.00015235e+00, 1.00012517e+00,
+ 1.00009763e+00, 1.00006998e+00, 1.00004208e+00, 1.00001407e+00,
+ 9.99985993e-01, 9.99957979e-01, 9.99930084e-01, 9.99902308e-01,
+ 9.99874830e-01, 9.99847591e-01, 9.99820769e-01, 9.99794364e-01,
+ 9.99768496e-01, 9.99743164e-01, 9.99718428e-01, 9.99694467e-01,
+ 9.99671161e-01, 9.99648750e-01, 9.99627173e-01, 9.99606490e-01,
+ 9.99586821e-01, 9.99568224e-01, 9.99550641e-01, 9.99534249e-01,
+ 9.99519050e-01, 9.99505103e-01, 9.99492407e-01, 9.99481022e-01,
+ 9.99471009e-01, 9.99462426e-01, 9.99455214e-01, 9.99449492e-01,
+ 9.99445200e-01, 9.99442458e-01, 9.99441206e-01, 9.99441504e-01,
+ 9.99443293e-01, 9.99446690e-01, 9.99451578e-01, 9.99458075e-01,
+ 9.99466062e-01, 9.99475598e-01, 9.99486566e-01, 9.99499083e-01,
+ 9.99513030e-01, 9.99528408e-01, 9.99545157e-01, 9.99563277e-01,
+ 9.99582708e-01, 9.99603331e-01, 9.99625206e-01, 9.99648154e-01,
+ 9.99672174e-01, 9.99697208e-01, 9.99723136e-01, 9.99749959e-01,
+ 9.99777496e-01, 9.99805748e-01, 9.99834597e-01, 9.99863982e-01,
+ 9.99893785e-01, 9.99923885e-01, 9.99954224e-01, 9.99984741e-01,
+ 1.00001526e+00, 1.00004578e+00, 1.00007617e+00, 1.00010622e+00,
+ 1.00013602e+00, 1.00016546e+00, 1.00019431e+00, 1.00022256e+00,
+ 1.00025010e+00, 1.00027692e+00, 1.00030291e+00, 1.00032794e+00,
+ 1.00035203e+00, 1.00037491e+00, 1.00039685e+00, 1.00041747e+00,
+ 1.00043690e+00, 1.00045502e+00, 1.00047183e+00, 1.00048721e+00,
+ 1.00050116e+00, 1.00051367e+00, 1.00052476e+00, 1.00053418e+00,
+ 1.00054228e+00, 1.00054872e+00, 1.00055361e+00, 1.00055695e+00,
+ 1.00055885e+00, 1.00055909e+00, 1.00055790e+00, 1.00055504e+00,
+ 1.00055087e+00, 1.00054502e+00, 1.00053787e+00, 1.00052929e+00,
+ 1.00051928e+00, 1.00050783e+00, 1.00049520e+00, 1.00048113e+00,
+ 1.00046599e+00, 1.00044954e+00, 1.00043201e+00, 1.00041330e+00,
+ 1.00039363e+00, 1.00037301e+00, 1.00035143e+00, 1.00032890e+00,
+ 1.00030565e+00, 1.00028157e+00, 1.00025690e+00, 1.00023150e+00,
+ 1.00020564e+00, 1.00017929e+00, 1.00015235e+00, 1.00012517e+00,
+ 1.00009763e+00, 1.00006998e+00, 1.00004208e+00, 1.00001407e+00,
+ 9.99985993e-01, 9.99957979e-01, 9.99930084e-01, 9.99902308e-01,
+ 9.99874830e-01, 9.99847591e-01, 9.99820769e-01, 9.99794364e-01,
+ 9.99768496e-01, 9.99743164e-01, 9.99718428e-01, 9.99694467e-01,
+ 9.99671161e-01, 9.99648750e-01, 9.99627173e-01, 9.99606490e-01,
+ 9.99586821e-01, 9.99568224e-01, 9.99550641e-01, 9.99534249e-01,
+ 9.99519050e-01, 9.99505103e-01, 9.99492407e-01, 9.99481022e-01,
+ 9.99471009e-01, 9.99462426e-01, 9.99455214e-01, 9.99449492e-01,
+ 9.99445200e-01, 9.99442458e-01, 9.99441206e-01, 9.99441504e-01,
+ 9.99443293e-01, 9.99446690e-01, 9.99451578e-01, 9.99458075e-01,
+ 9.99466062e-01, 9.99475598e-01, 9.99486566e-01, 9.99499083e-01,
+ 9.99513030e-01, 9.99528408e-01, 9.99545157e-01, 9.99563277e-01,
+ 9.99582708e-01, 9.99603331e-01, 9.99625206e-01, 9.99648154e-01,
+ 9.99672174e-01, 9.99697208e-01, 9.99723136e-01, 9.99749959e-01,
+ 9.99777496e-01, 9.99805748e-01, 9.99834597e-01, 9.99863982e-01,
+ 9.99893785e-01, 9.99923885e-01, 9.99954224e-01, 9.99984741e-01,
+ 1.00001526e+00, 1.00004554e+00, 1.00007534e+00, 1.00010443e+00,
+ 1.00013220e+00, 1.00015819e+00, 1.00018132e+00, 1.00020075e+00,
+ 1.00021482e+00, 1.00022173e+00, 1.00021923e+00, 1.00020432e+00,
+ 1.00017369e+00, 1.00012279e+00, 1.00004685e+00, 9.99939978e-01,
+ 9.99795198e-01, 9.99604583e-01, 9.99359250e-01, 9.99048889e-01,
+ 9.98662114e-01, 9.98186171e-01, 9.97606814e-01, 9.96908367e-01,
+ 9.96073723e-01, 9.95083988e-01, 9.93918717e-01, 9.92555678e-01,
+ 9.90970671e-01, 9.89137888e-01, 9.87029374e-01, 9.84615326e-01,
+ 9.81863916e-01, 9.78741586e-01, 9.75212753e-01, 9.71240282e-01,
+ 9.66785491e-01, 9.61808383e-01, 9.56268132e-01, 9.50123310e-01,
+ 9.43332374e-01, 9.35854316e-01, 9.27648962e-01, 9.18677926e-01,
+ 9.08904910e-01, 8.98296535e-01, 8.86823177e-01, 8.74459147e-01,
+ 8.61183822e-01, 8.46981943e-01, 8.31844091e-01, 8.15767467e-01,
+ 7.98755884e-01, 7.80820429e-01, 7.61979520e-01, 7.42259145e-01,
+ 7.21692860e-01, 7.00321794e-01, 6.78194642e-01, 6.55367255e-01,
+ 6.31902635e-01, 6.07870460e-01, 5.83346546e-01, 5.58412433e-01,
+ 5.33154905e-01, 5.07664979e-01, 4.82037485e-01, 4.56370175e-01,
+ 4.30762708e-01, 4.05315757e-01, 3.80130053e-01, 3.55305195e-01,
+ 3.30938727e-01, 3.07124883e-01, 2.83953428e-01, 2.61508703e-01,
+ 2.39868388e-01, 2.19102606e-01, 1.99272946e-01, 1.80431694e-01,
+ 1.62621215e-01, 1.45873442e-01, 1.30209655e-01, 1.15640387e-01,
+ 1.02165572e-01, 8.97749513e-02, 7.84486011e-02, 6.81576878e-02,
+ 5.88653944e-02, 5.05279638e-02, 4.30957973e-02, 3.65146622e-02,
+ 3.07268873e-02, 2.56725382e-02, 2.12905537e-02, 1.75197981e-02,
+ 1.43000064e-02, 1.15726292e-02, 9.28153656e-03, 7.37359654e-03,
+ 5.79912262e-03, 4.51218896e-03, 3.47083295e-03, 2.63714185e-03,
+ 1.97724649e-03, 1.46123092e-03, 1.06297329e-03, 7.59930001e-04,
+ 5.32880833e-04, 3.65644053e-04, 2.44775380e-04, 1.59260671e-04,
+ 1.00211051e-04, 6.05685127e-05, 3.48275607e-05, 1.87775731e-05,
+ 9.26902067e-06, 4.00523413e-06, 1.35989160e-06, 2.06769442e-07,
};
-static const float mdct_win_7m5_180[180+138] = {
- 1.97084908e-03, 2.95060859e-03, 4.12447721e-03, 5.52688664e-03,
- 7.17541132e-03, 9.08757730e-03, 1.12819105e-02, 1.37695374e-02,
- 1.65600266e-02, 1.96650895e-02, 2.30953556e-02, 2.68612894e-02,
- 3.09632560e-02, 3.54036230e-02, 4.01915610e-02, 4.53331403e-02,
- 5.08289304e-02, 5.66815448e-02, 6.28935304e-02, 6.94696293e-02,
- 7.64106314e-02, 8.37160016e-02, 9.13884278e-02, 9.94294008e-02,
- 1.07834725e-01, 1.16604575e-01, 1.25736503e-01, 1.35226811e-01,
- 1.45073546e-01, 1.55273819e-01, 1.65822194e-01, 1.76711174e-01,
- 1.87928776e-01, 1.99473180e-01, 2.11342953e-01, 2.23524554e-01,
- 2.36003100e-01, 2.48768614e-01, 2.61813811e-01, 2.75129161e-01,
- 2.88701102e-01, 3.02514034e-01, 3.16558805e-01, 3.30823871e-01,
- 3.45295567e-01, 3.59963992e-01, 3.74814544e-01, 3.89831817e-01,
- 4.05001010e-01, 4.20308013e-01, 4.35739515e-01, 4.51277817e-01,
- 4.66904918e-01, 4.82609041e-01, 4.98375466e-01, 5.14185341e-01,
- 5.30021478e-01, 5.45869352e-01, 5.61710041e-01, 5.77528151e-01,
- 5.93304696e-01, 6.09026346e-01, 6.24674189e-01, 6.40227555e-01,
- 6.55671016e-01, 6.70995935e-01, 6.86184559e-01, 7.01218384e-01,
- 7.16078449e-01, 7.30756084e-01, 7.45240679e-01, 7.59515122e-01,
- 7.73561955e-01, 7.87369206e-01, 8.00923138e-01, 8.14211386e-01,
- 8.27223833e-01, 8.39952374e-01, 8.52386102e-01, 8.64513675e-01,
- 8.76324079e-01, 8.87814288e-01, 8.98977415e-01, 9.09803319e-01,
- 9.20284312e-01, 9.30407518e-01, 9.40169652e-01, 9.49567795e-01,
- 9.58599937e-01, 9.67260260e-01, 9.75545166e-01, 9.83447719e-01,
- 9.90971957e-01, 9.98119269e-01, 1.00488283e+00, 1.01125773e+00,
- 1.01724436e+00, 1.02285381e+00, 1.02808734e+00, 1.03293706e+00,
- 1.03740495e+00, 1.04150164e+00, 1.04523236e+00, 1.04859791e+00,
- 1.05160340e+00, 1.05425505e+00, 1.05656184e+00, 1.05853400e+00,
- 1.06017414e+00, 1.06149371e+00, 1.06249943e+00, 1.06320577e+00,
- 1.06362578e+00, 1.06376487e+00, 1.06363778e+00, 1.06325973e+00,
- 1.06264695e+00, 1.06180496e+00, 1.06074505e+00, 1.05948492e+00,
- 1.05804533e+00, 1.05643590e+00, 1.05466218e+00, 1.05274047e+00,
- 1.05069500e+00, 1.04853894e+00, 1.04627898e+00, 1.04392435e+00,
- 1.04149540e+00, 1.03901003e+00, 1.03647725e+00, 1.03390793e+00,
- 1.03131989e+00, 1.02872867e+00, 1.02614832e+00, 1.02358988e+00,
- 1.02106486e+00, 1.01856262e+00, 1.01655770e+00, 1.01400658e+00,
- 1.01162953e+00, 1.00938590e+00, 1.00727455e+00, 1.00529616e+00,
- 1.00344526e+00, 1.00172250e+00, 1.00012792e+00, 9.98657533e-01,
- 9.97309592e-01, 9.96083571e-01, 9.94976569e-01, 9.93985158e-01,
- 9.93107530e-01, 9.92341305e-01, 9.91683335e-01, 9.91130070e-01,
- 9.90678325e-01, 9.90325325e-01, 9.90067562e-01, 9.89901282e-01,
- 9.89822613e-01, 9.89827845e-01, 9.89913241e-01, 9.90074734e-01,
- 9.90308256e-01, 9.90609852e-01, 9.90975314e-01, 9.91400330e-01,
- 9.91880966e-01, 9.92412851e-01, 9.92991779e-01, 9.93613381e-01,
- 9.94273149e-01, 9.94966958e-01, 9.95690370e-01, 9.96439157e-01,
- 9.97208572e-01, 9.97994275e-01, 9.98791616e-01, 9.99596062e-01,
- 1.00040410e+00, 1.00120985e+00, 1.00200976e+00, 1.00279924e+00,
- 1.00357357e+00, 1.00432828e+00, 1.00505850e+00, 1.00575984e+00,
- 1.00642767e+00, 1.00705768e+00, 1.00764515e+00, 1.00818549e+00,
- 1.00867427e+00, 1.00910687e+00, 1.00947916e+00, 1.00978659e+00,
- 1.01002476e+00, 1.01018954e+00, 1.01027669e+00, 1.01028203e+00,
- 1.01020174e+00, 1.01003208e+00, 1.00976919e+00, 1.00940939e+00,
- 1.00894931e+00, 1.00838641e+00, 1.00771780e+00, 1.00694031e+00,
- 1.00605124e+00, 1.00504879e+00, 1.00393183e+00, 1.00269767e+00,
- 1.00134427e+00, 9.99872092e-01, 9.98280464e-01, 9.96566569e-01,
- 9.94731737e-01, 9.92777987e-01, 9.90701374e-01, 9.88504165e-01,
- 9.86186892e-01, 9.83711989e-01, 9.80584643e-01, 9.77634164e-01,
- 9.74455033e-01, 9.71062916e-01, 9.67447270e-01, 9.63593926e-01,
- 9.59491398e-01, 9.55129725e-01, 9.50501326e-01, 9.45592810e-01,
- 9.40389877e-01, 9.34886760e-01, 9.29080559e-01, 9.22959280e-01,
- 9.16509579e-01, 9.09724456e-01, 9.02607350e-01, 8.95155084e-01,
- 8.87356154e-01, 8.79202689e-01, 8.70699698e-01, 8.61847424e-01,
- 8.52641750e-01, 8.43077833e-01, 8.33154905e-01, 8.22881272e-01,
- 8.12257597e-01, 8.01285439e-01, 7.89971715e-01, 7.78318177e-01,
- 7.66337710e-01, 7.54030328e-01, 7.41407991e-01, 7.28477501e-01,
- 7.15255742e-01, 7.01751739e-01, 6.87975632e-01, 6.73936911e-01,
- 6.59652573e-01, 6.45139489e-01, 6.30414716e-01, 6.15483622e-01,
- 6.00365852e-01, 5.85078858e-01, 5.69649536e-01, 5.54084810e-01,
- 5.38398518e-01, 5.22614738e-01, 5.06756805e-01, 4.90833753e-01,
- 4.74866033e-01, 4.58876566e-01, 4.42885823e-01, 4.26906539e-01,
- 4.10970973e-01, 3.95091024e-01, 3.79291327e-01, 3.63587417e-01,
- 3.48004343e-01, 3.32563201e-01, 3.17287485e-01, 3.02196710e-01,
- 2.87309403e-01, 2.72643992e-01, 2.58227431e-01, 2.44072856e-01,
- 2.30208977e-01, 2.16641416e-01, 2.03398481e-01, 1.90486162e-01,
- 1.77922122e-01, 1.65726674e-01, 1.53906397e-01, 1.42480547e-01,
- 1.31453980e-01, 1.20841778e-01, 1.10652194e-01, 1.00891734e-01,
- 9.15718851e-02, 8.26995967e-02, 7.42815529e-02, 6.63242382e-02,
- 5.88334516e-02, 5.18140676e-02, 4.52698346e-02, 3.92030848e-02,
- 3.36144159e-02, 2.85023308e-02, 2.38629107e-02, 1.96894227e-02,
- 1.59720527e-02, 1.26976223e-02, 9.84937739e-03, 7.40724463e-03,
- 5.35665361e-03, 3.83226552e-03,
+static const float mdct_win_10m_96k_hr[__LC3_MDCT_WIN_LEN(10000, 96000)] = {
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 6.66310811e-08, 2.23723916e-07, 4.87541854e-07, 8.99672727e-07,
+ 1.51141830e-06, 2.38590815e-06, 3.60002150e-06, 5.24645884e-06,
+ 7.43599958e-06, 1.02999529e-05, 1.39928125e-05, 1.86951092e-05,
+ 2.46164800e-05, 3.19989194e-05, 4.11202636e-05, 5.22978444e-05,
+ 6.58923600e-05, 8.23118899e-05, 1.02016144e-04, 1.25520819e-04,
+ 1.53402099e-04, 1.86301360e-04, 2.24929841e-04, 2.70073535e-04,
+ 3.22598062e-04, 3.83453589e-04, 4.53679706e-04, 5.34410414e-04,
+ 6.26878755e-04, 7.32421642e-04, 8.52484489e-04, 9.88625223e-04,
+ 1.14251883e-03, 1.31596089e-03, 1.51087111e-03, 1.72929652e-03,
+ 1.97341433e-03, 2.24553375e-03, 2.54809810e-03, 2.88368552e-03,
+ 3.25501012e-03, 3.66492104e-03, 4.11640201e-03, 4.61257016e-03,
+ 5.15667303e-03, 5.75208431e-03, 6.40230207e-03, 7.11094262e-03,
+ 7.88173359e-03, 8.71850923e-03, 9.62519925e-03, 1.06058242e-02,
+ 1.16644828e-02, 1.28053408e-02, 1.40326228e-02, 1.53505951e-02,
+ 1.67635549e-02, 1.82758160e-02, 1.98916886e-02, 2.16154736e-02,
+ 2.34514344e-02, 2.54037846e-02, 2.74766665e-02, 2.96741407e-02,
+ 3.20001543e-02, 3.44585292e-02, 3.70529443e-02, 3.97869013e-02,
+ 4.26637232e-02, 4.56865206e-02, 4.88581695e-02, 5.21813035e-02,
+ 5.56582808e-02, 5.92911765e-02, 6.30817562e-02, 6.70314580e-02,
+ 7.11413696e-02, 7.54122287e-02, 7.98443928e-02, 8.44378322e-02,
+ 8.91921073e-02, 9.41063836e-02, 9.91793722e-02, 1.04409374e-01,
+ 1.09794252e-01, 1.15331404e-01, 1.21017799e-01, 1.26849949e-01,
+ 1.32823929e-01, 1.38935357e-01, 1.45179421e-01, 1.51550874e-01,
+ 1.58044025e-01, 1.64652810e-01, 1.71370730e-01, 1.78190947e-01,
+ 1.85106188e-01, 1.92108899e-01, 1.99191183e-01, 2.06344813e-01,
+ 2.13561311e-01, 2.20831960e-01, 2.28147790e-01, 2.35499650e-01,
+ 2.42878228e-01, 2.50274092e-01, 2.57677704e-01, 2.65079439e-01,
+ 2.72469670e-01, 2.79838771e-01, 2.87177145e-01, 2.94475257e-01,
+ 3.01723719e-01, 3.08913231e-01, 3.16034675e-01, 3.23079228e-01,
+ 3.30038190e-01, 3.36903185e-01, 3.43666196e-01, 3.50319386e-01,
+ 3.56855512e-01, 3.63267571e-01, 3.69548947e-01, 3.75693500e-01,
+ 3.81695598e-01, 3.87549996e-01, 3.93251985e-01, 3.98797333e-01,
+ 4.04182315e-01, 4.09403801e-01, 4.14459109e-01, 4.19346124e-01,
+ 4.24063236e-01, 4.28609401e-01, 4.32984143e-01, 4.37187403e-01,
+ 4.41219747e-01, 4.45082188e-01, 4.48776275e-01, 4.52303976e-01,
+ 4.55667824e-01, 4.58870709e-01, 4.61916000e-01, 4.64807451e-01,
+ 4.67549264e-01, 4.70145911e-01, 4.72602278e-01, 4.74923581e-01,
+ 4.77115244e-01, 4.79183048e-01, 4.81132984e-01, 4.82971221e-01,
+ 4.84704226e-01, 4.86338496e-01, 4.87880766e-01, 4.89337832e-01,
+ 4.90716666e-01, 4.92024213e-01, 4.93267536e-01, 4.94453669e-01,
+ 4.95589703e-01, 4.96682733e-01, 4.97739762e-01, 4.98767793e-01,
+ 4.99773741e-01, 5.00764489e-01, 5.01746774e-01, 5.02727270e-01,
+ 5.03712595e-01, 5.04709125e-01, 5.05723178e-01, 5.06760955e-01,
+ 5.07828474e-01, 5.08931518e-01, 5.10075927e-01, 5.11267185e-01,
+ 5.12510598e-01, 5.13811469e-01, 5.15174806e-01, 5.16605377e-01,
+ 5.18107831e-01, 5.19686580e-01, 5.21345973e-01, 5.23089945e-01,
+ 5.24922311e-01, 5.26846766e-01, 5.28866649e-01, 5.30985177e-01,
+ 5.33205211e-01, 5.35529494e-01, 5.37960529e-01, 5.40500462e-01,
+ 5.43151379e-01, 5.45914948e-01, 5.48792660e-01, 5.51785827e-01,
+ 5.54895282e-01, 5.58121800e-01, 5.61465800e-01, 5.64927518e-01,
+ 5.68506777e-01, 5.72203338e-01, 5.76016545e-01, 5.79945564e-01,
+ 5.83989203e-01, 5.88146091e-01, 5.92414677e-01, 5.96792936e-01,
+ 6.01278901e-01, 6.05870068e-01, 6.10563993e-01, 6.15357757e-01,
+ 6.20248437e-01, 6.25232756e-01, 6.30307317e-01, 6.35468543e-01,
+ 6.40712619e-01, 6.46035612e-01, 6.51433527e-01, 6.56902015e-01,
+ 6.62436843e-01, 6.68033481e-01, 6.73687398e-01, 6.79393888e-01,
+ 6.85148239e-01, 6.90945625e-01, 6.96781278e-01, 7.02650130e-01,
+ 7.08547413e-01, 7.14468122e-01, 7.20407307e-01, 7.26359963e-01,
+ 7.32321203e-01, 7.38286138e-01, 7.44249880e-01, 7.50207603e-01,
+ 7.56154597e-01, 7.62086034e-01, 7.67997444e-01, 7.73884177e-01,
+ 7.79741824e-01, 7.85566032e-01, 7.91352570e-01, 7.97097266e-01,
+ 8.02796185e-01, 8.08445334e-01, 8.14041018e-01, 8.19579542e-01,
+ 8.25057447e-01, 8.30471396e-01, 8.35818112e-01, 8.41094613e-01,
+ 8.46297920e-01, 8.51425231e-01, 8.56473923e-01, 8.61441612e-01,
+ 8.66325855e-01, 8.71124566e-01, 8.75835657e-01, 8.80457282e-01,
+ 8.84987772e-01, 8.89425457e-01, 8.93768966e-01, 8.98017049e-01,
+ 9.02168512e-01, 9.06222403e-01, 9.10177886e-01, 9.14034188e-01,
+ 9.17790771e-01, 9.21447217e-01, 9.25003231e-01, 9.28458691e-01,
+ 9.31813419e-01, 9.35067594e-01, 9.38221455e-01, 9.41275299e-01,
+ 9.44229603e-01, 9.47084904e-01, 9.49841976e-01, 9.52501595e-01,
+ 9.55064654e-01, 9.57532167e-01, 9.59905326e-01, 9.62185323e-01,
+ 9.64373529e-01, 9.66471374e-01, 9.68480289e-01, 9.70402002e-01,
+ 9.72238123e-01, 9.73990440e-01, 9.75660801e-01, 9.77251112e-01,
+ 9.78763342e-01, 9.80199575e-01, 9.81561780e-01, 9.82852161e-01,
+ 9.84072864e-01, 9.85226095e-01, 9.86314118e-01, 9.87339139e-01,
+ 9.88303483e-01, 9.89209354e-01, 9.90059078e-01, 9.90854919e-01,
+ 9.91599143e-01, 9.92294014e-01, 9.92941797e-01, 9.93544638e-01,
+ 9.94104803e-01, 9.94624376e-01, 9.95105505e-01, 9.95550215e-01,
+ 9.95960534e-01, 9.96338427e-01, 9.96685863e-01, 9.97004628e-01,
+ 9.97296572e-01, 9.97563362e-01, 9.97806728e-01, 9.98028338e-01,
+ 9.98229563e-01, 9.98412073e-01, 9.98577118e-01, 9.98726189e-01,
+ 9.98860478e-01, 9.98981178e-01, 9.99089479e-01, 9.99186397e-01,
+ 9.99273062e-01, 9.99350369e-01, 9.99419153e-01, 9.99480307e-01,
+ 9.99534547e-01, 9.99582708e-01, 9.99625325e-01, 9.99663055e-01,
+ 9.99696434e-01, 9.99726057e-01, 9.99752283e-01, 9.99775589e-01,
+ 9.99796331e-01, 9.99814928e-01, 9.99831557e-01, 9.99846578e-01,
+ 9.99860287e-01, 9.99872804e-01, 9.99884307e-01, 9.99895036e-01,
+ 9.99905109e-01, 9.99914587e-01, 9.99923646e-01, 9.99932408e-01,
+ 9.99940872e-01, 9.99949098e-01, 9.99957144e-01, 9.99965072e-01,
+ 9.99972939e-01, 9.99980748e-01, 9.99988437e-01, 9.99996126e-01,
+ 1.00000381e+00, 1.00001144e+00, 1.00001907e+00, 1.00002670e+00,
+ 1.00003433e+00, 1.00004184e+00, 1.00004935e+00, 1.00005686e+00,
+ 1.00006437e+00, 1.00007176e+00, 1.00007904e+00, 1.00008631e+00,
+ 1.00009358e+00, 1.00010073e+00, 1.00010777e+00, 1.00011480e+00,
+ 1.00012159e+00, 1.00012839e+00, 1.00013518e+00, 1.00014174e+00,
+ 1.00014830e+00, 1.00015461e+00, 1.00016093e+00, 1.00016701e+00,
+ 1.00017309e+00, 1.00017893e+00, 1.00018466e+00, 1.00019026e+00,
+ 1.00019574e+00, 1.00020099e+00, 1.00020623e+00, 1.00021124e+00,
+ 1.00021613e+00, 1.00022078e+00, 1.00022531e+00, 1.00022972e+00,
+ 1.00023389e+00, 1.00023794e+00, 1.00024176e+00, 1.00024545e+00,
+ 1.00024891e+00, 1.00025225e+00, 1.00025535e+00, 1.00025833e+00,
+ 1.00026107e+00, 1.00026357e+00, 1.00026596e+00, 1.00026822e+00,
+ 1.00027013e+00, 1.00027204e+00, 1.00027359e+00, 1.00027502e+00,
+ 1.00027621e+00, 1.00027728e+00, 1.00027812e+00, 1.00027883e+00,
+ 1.00027919e+00, 1.00027955e+00, 1.00027955e+00, 1.00027943e+00,
+ 1.00027919e+00, 1.00027859e+00, 1.00027800e+00, 1.00027704e+00,
+ 1.00027597e+00, 1.00027478e+00, 1.00027335e+00, 1.00027168e+00,
+ 1.00026989e+00, 1.00026786e+00, 1.00026572e+00, 1.00026345e+00,
+ 1.00026095e+00, 1.00025821e+00, 1.00025535e+00, 1.00025237e+00,
+ 1.00024927e+00, 1.00024593e+00, 1.00024235e+00, 1.00023878e+00,
+ 1.00023496e+00, 1.00023091e+00, 1.00022686e+00, 1.00022256e+00,
+ 1.00021827e+00, 1.00021374e+00, 1.00020909e+00, 1.00020421e+00,
+ 1.00019932e+00, 1.00019431e+00, 1.00018907e+00, 1.00018382e+00,
+ 1.00017846e+00, 1.00017297e+00, 1.00016737e+00, 1.00016165e+00,
+ 1.00015581e+00, 1.00014985e+00, 1.00014389e+00, 1.00013781e+00,
+ 1.00013161e+00, 1.00012529e+00, 1.00011897e+00, 1.00011253e+00,
+ 1.00010610e+00, 1.00009954e+00, 1.00009298e+00, 1.00008631e+00,
+ 1.00007963e+00, 1.00007284e+00, 1.00006604e+00, 1.00005913e+00,
+ 1.00005233e+00, 1.00004542e+00, 1.00003850e+00, 1.00003147e+00,
+ 1.00002456e+00, 1.00001752e+00, 1.00001049e+00, 1.00000346e+00,
+ 9.99996483e-01, 9.99989510e-01, 9.99982476e-01, 9.99975502e-01,
+ 9.99968529e-01, 9.99961555e-01, 9.99954641e-01, 9.99947727e-01,
+ 9.99940813e-01, 9.99933958e-01, 9.99927163e-01, 9.99920428e-01,
+ 9.99913692e-01, 9.99907076e-01, 9.99900460e-01, 9.99893904e-01,
+ 9.99887466e-01, 9.99881029e-01, 9.99874711e-01, 9.99868453e-01,
+ 9.99862254e-01, 9.99856174e-01, 9.99850154e-01, 9.99844253e-01,
+ 9.99838412e-01, 9.99832690e-01, 9.99827087e-01, 9.99821603e-01,
+ 9.99816179e-01, 9.99810934e-01, 9.99805748e-01, 9.99800682e-01,
+ 9.99795794e-01, 9.99791026e-01, 9.99786317e-01, 9.99781847e-01,
+ 9.99777436e-01, 9.99773204e-01, 9.99769092e-01, 9.99765158e-01,
+ 9.99761343e-01, 9.99757707e-01, 9.99754190e-01, 9.99750853e-01,
+ 9.99747694e-01, 9.99744654e-01, 9.99741852e-01, 9.99739170e-01,
+ 9.99736667e-01, 9.99734342e-01, 9.99732137e-01, 9.99730170e-01,
+ 9.99728382e-01, 9.99726772e-01, 9.99725342e-01, 9.99724090e-01,
+ 9.99723017e-01, 9.99722123e-01, 9.99721408e-01, 9.99720931e-01,
+ 9.99720633e-01, 9.99720514e-01, 9.99720573e-01, 9.99720812e-01,
+ 9.99721289e-01, 9.99721944e-01, 9.99722779e-01, 9.99723792e-01,
+ 9.99725044e-01, 9.99726474e-01, 9.99728084e-01, 9.99729872e-01,
+ 9.99731898e-01, 9.99734104e-01, 9.99736488e-01, 9.99739051e-01,
+ 9.99741793e-01, 9.99744713e-01, 9.99747872e-01, 9.99751151e-01,
+ 9.99754667e-01, 9.99758303e-01, 9.99762177e-01, 9.99766171e-01,
+ 9.99770403e-01, 9.99774754e-01, 9.99779284e-01, 9.99783993e-01,
+ 9.99788821e-01, 9.99793828e-01, 9.99799013e-01, 9.99804318e-01,
+ 9.99809742e-01, 9.99815404e-01, 9.99821126e-01, 9.99826968e-01,
+ 9.99832988e-01, 9.99839127e-01, 9.99845386e-01, 9.99851763e-01,
+ 9.99858260e-01, 9.99864876e-01, 9.99871552e-01, 9.99878347e-01,
+ 9.99885261e-01, 9.99892235e-01, 9.99899328e-01, 9.99906480e-01,
+ 9.99913692e-01, 9.99920964e-01, 9.99928296e-01, 9.99935687e-01,
+ 9.99943137e-01, 9.99950647e-01, 9.99958158e-01, 9.99965727e-01,
+ 9.99973297e-01, 9.99980927e-01, 9.99988556e-01, 9.99996185e-01,
+ 1.00000381e+00, 1.00001144e+00, 1.00001907e+00, 1.00002670e+00,
+ 1.00003433e+00, 1.00004184e+00, 1.00004935e+00, 1.00005686e+00,
+ 1.00006437e+00, 1.00007176e+00, 1.00007904e+00, 1.00008631e+00,
+ 1.00009358e+00, 1.00010073e+00, 1.00010777e+00, 1.00011480e+00,
+ 1.00012159e+00, 1.00012839e+00, 1.00013518e+00, 1.00014174e+00,
+ 1.00014830e+00, 1.00015461e+00, 1.00016093e+00, 1.00016701e+00,
+ 1.00017309e+00, 1.00017893e+00, 1.00018466e+00, 1.00019026e+00,
+ 1.00019574e+00, 1.00020099e+00, 1.00020623e+00, 1.00021124e+00,
+ 1.00021613e+00, 1.00022078e+00, 1.00022531e+00, 1.00022972e+00,
+ 1.00023389e+00, 1.00023794e+00, 1.00024176e+00, 1.00024545e+00,
+ 1.00024891e+00, 1.00025225e+00, 1.00025535e+00, 1.00025833e+00,
+ 1.00026107e+00, 1.00026357e+00, 1.00026596e+00, 1.00026822e+00,
+ 1.00027013e+00, 1.00027204e+00, 1.00027359e+00, 1.00027502e+00,
+ 1.00027621e+00, 1.00027728e+00, 1.00027812e+00, 1.00027883e+00,
+ 1.00027919e+00, 1.00027955e+00, 1.00027955e+00, 1.00027943e+00,
+ 1.00027919e+00, 1.00027859e+00, 1.00027800e+00, 1.00027704e+00,
+ 1.00027597e+00, 1.00027478e+00, 1.00027335e+00, 1.00027168e+00,
+ 1.00026989e+00, 1.00026786e+00, 1.00026572e+00, 1.00026345e+00,
+ 1.00026095e+00, 1.00025821e+00, 1.00025535e+00, 1.00025237e+00,
+ 1.00024927e+00, 1.00024593e+00, 1.00024235e+00, 1.00023878e+00,
+ 1.00023496e+00, 1.00023091e+00, 1.00022686e+00, 1.00022256e+00,
+ 1.00021827e+00, 1.00021374e+00, 1.00020909e+00, 1.00020421e+00,
+ 1.00019932e+00, 1.00019431e+00, 1.00018907e+00, 1.00018382e+00,
+ 1.00017846e+00, 1.00017297e+00, 1.00016737e+00, 1.00016165e+00,
+ 1.00015581e+00, 1.00014985e+00, 1.00014389e+00, 1.00013781e+00,
+ 1.00013161e+00, 1.00012529e+00, 1.00011897e+00, 1.00011253e+00,
+ 1.00010610e+00, 1.00009954e+00, 1.00009298e+00, 1.00008631e+00,
+ 1.00007963e+00, 1.00007284e+00, 1.00006604e+00, 1.00005913e+00,
+ 1.00005233e+00, 1.00004542e+00, 1.00003850e+00, 1.00003147e+00,
+ 1.00002456e+00, 1.00001752e+00, 1.00001049e+00, 1.00000346e+00,
+ 9.99996483e-01, 9.99989510e-01, 9.99982476e-01, 9.99975502e-01,
+ 9.99968529e-01, 9.99961555e-01, 9.99954641e-01, 9.99947727e-01,
+ 9.99940813e-01, 9.99933958e-01, 9.99927163e-01, 9.99920428e-01,
+ 9.99913692e-01, 9.99907076e-01, 9.99900460e-01, 9.99893904e-01,
+ 9.99887466e-01, 9.99881029e-01, 9.99874711e-01, 9.99868453e-01,
+ 9.99862254e-01, 9.99856174e-01, 9.99850154e-01, 9.99844253e-01,
+ 9.99838412e-01, 9.99832690e-01, 9.99827087e-01, 9.99821603e-01,
+ 9.99816179e-01, 9.99810934e-01, 9.99805748e-01, 9.99800682e-01,
+ 9.99795794e-01, 9.99791026e-01, 9.99786317e-01, 9.99781847e-01,
+ 9.99777436e-01, 9.99773204e-01, 9.99769092e-01, 9.99765158e-01,
+ 9.99761343e-01, 9.99757707e-01, 9.99754190e-01, 9.99750853e-01,
+ 9.99747694e-01, 9.99744654e-01, 9.99741852e-01, 9.99739170e-01,
+ 9.99736667e-01, 9.99734342e-01, 9.99732137e-01, 9.99730170e-01,
+ 9.99728382e-01, 9.99726772e-01, 9.99725342e-01, 9.99724090e-01,
+ 9.99723017e-01, 9.99722123e-01, 9.99721408e-01, 9.99720931e-01,
+ 9.99720633e-01, 9.99720514e-01, 9.99720573e-01, 9.99720812e-01,
+ 9.99721289e-01, 9.99721944e-01, 9.99722779e-01, 9.99723792e-01,
+ 9.99725044e-01, 9.99726474e-01, 9.99728084e-01, 9.99729872e-01,
+ 9.99731898e-01, 9.99734104e-01, 9.99736488e-01, 9.99739051e-01,
+ 9.99741793e-01, 9.99744713e-01, 9.99747872e-01, 9.99751151e-01,
+ 9.99754667e-01, 9.99758303e-01, 9.99762177e-01, 9.99766171e-01,
+ 9.99770403e-01, 9.99774754e-01, 9.99779284e-01, 9.99783993e-01,
+ 9.99788821e-01, 9.99793828e-01, 9.99799013e-01, 9.99804318e-01,
+ 9.99809742e-01, 9.99815404e-01, 9.99821126e-01, 9.99826968e-01,
+ 9.99832988e-01, 9.99839127e-01, 9.99845386e-01, 9.99851763e-01,
+ 9.99858260e-01, 9.99864876e-01, 9.99871552e-01, 9.99878347e-01,
+ 9.99885261e-01, 9.99892235e-01, 9.99899328e-01, 9.99906480e-01,
+ 9.99913692e-01, 9.99920964e-01, 9.99928296e-01, 9.99935687e-01,
+ 9.99943137e-01, 9.99950647e-01, 9.99958158e-01, 9.99965727e-01,
+ 9.99973297e-01, 9.99980927e-01, 9.99988556e-01, 9.99996185e-01,
+ 1.00000381e+00, 1.00001144e+00, 1.00001907e+00, 1.00002670e+00,
+ 1.00003433e+00, 1.00004184e+00, 1.00004935e+00, 1.00005686e+00,
+ 1.00006437e+00, 1.00007176e+00, 1.00007904e+00, 1.00008631e+00,
+ 1.00009358e+00, 1.00010073e+00, 1.00010777e+00, 1.00011480e+00,
+ 1.00012159e+00, 1.00012839e+00, 1.00013518e+00, 1.00014174e+00,
+ 1.00014830e+00, 1.00015461e+00, 1.00016093e+00, 1.00016701e+00,
+ 1.00017309e+00, 1.00017893e+00, 1.00018466e+00, 1.00019026e+00,
+ 1.00019574e+00, 1.00020099e+00, 1.00020623e+00, 1.00021124e+00,
+ 1.00021613e+00, 1.00022078e+00, 1.00022531e+00, 1.00022972e+00,
+ 1.00023389e+00, 1.00023794e+00, 1.00024176e+00, 1.00024545e+00,
+ 1.00024891e+00, 1.00025225e+00, 1.00025535e+00, 1.00025833e+00,
+ 1.00026107e+00, 1.00026357e+00, 1.00026596e+00, 1.00026822e+00,
+ 1.00027013e+00, 1.00027204e+00, 1.00027359e+00, 1.00027502e+00,
+ 1.00027621e+00, 1.00027728e+00, 1.00027812e+00, 1.00027883e+00,
+ 1.00027919e+00, 1.00027955e+00, 1.00027955e+00, 1.00027943e+00,
+ 1.00027919e+00, 1.00027859e+00, 1.00027800e+00, 1.00027704e+00,
+ 1.00027597e+00, 1.00027478e+00, 1.00027335e+00, 1.00027168e+00,
+ 1.00026989e+00, 1.00026786e+00, 1.00026572e+00, 1.00026345e+00,
+ 1.00026095e+00, 1.00025821e+00, 1.00025535e+00, 1.00025237e+00,
+ 1.00024927e+00, 1.00024593e+00, 1.00024235e+00, 1.00023878e+00,
+ 1.00023496e+00, 1.00023091e+00, 1.00022686e+00, 1.00022256e+00,
+ 1.00021827e+00, 1.00021374e+00, 1.00020909e+00, 1.00020421e+00,
+ 1.00019932e+00, 1.00019431e+00, 1.00018907e+00, 1.00018382e+00,
+ 1.00017846e+00, 1.00017297e+00, 1.00016737e+00, 1.00016165e+00,
+ 1.00015581e+00, 1.00014985e+00, 1.00014389e+00, 1.00013781e+00,
+ 1.00013161e+00, 1.00012529e+00, 1.00011897e+00, 1.00011253e+00,
+ 1.00010610e+00, 1.00009954e+00, 1.00009298e+00, 1.00008631e+00,
+ 1.00007963e+00, 1.00007284e+00, 1.00006604e+00, 1.00005913e+00,
+ 1.00005233e+00, 1.00004542e+00, 1.00003850e+00, 1.00003147e+00,
+ 1.00002456e+00, 1.00001752e+00, 1.00001049e+00, 1.00000346e+00,
+ 9.99996483e-01, 9.99989510e-01, 9.99982476e-01, 9.99975502e-01,
+ 9.99968529e-01, 9.99961555e-01, 9.99954641e-01, 9.99947727e-01,
+ 9.99940813e-01, 9.99933958e-01, 9.99927163e-01, 9.99920428e-01,
+ 9.99913692e-01, 9.99907076e-01, 9.99900460e-01, 9.99893904e-01,
+ 9.99887466e-01, 9.99881029e-01, 9.99874711e-01, 9.99868453e-01,
+ 9.99862254e-01, 9.99856174e-01, 9.99850154e-01, 9.99844253e-01,
+ 9.99838412e-01, 9.99832690e-01, 9.99827087e-01, 9.99821603e-01,
+ 9.99816179e-01, 9.99810934e-01, 9.99805748e-01, 9.99800682e-01,
+ 9.99795794e-01, 9.99791026e-01, 9.99786317e-01, 9.99781847e-01,
+ 9.99777436e-01, 9.99773204e-01, 9.99769092e-01, 9.99765158e-01,
+ 9.99761343e-01, 9.99757707e-01, 9.99754190e-01, 9.99750853e-01,
+ 9.99747694e-01, 9.99744654e-01, 9.99741852e-01, 9.99739170e-01,
+ 9.99736667e-01, 9.99734342e-01, 9.99732137e-01, 9.99730170e-01,
+ 9.99728382e-01, 9.99726772e-01, 9.99725342e-01, 9.99724090e-01,
+ 9.99723017e-01, 9.99722123e-01, 9.99721408e-01, 9.99720931e-01,
+ 9.99720633e-01, 9.99720514e-01, 9.99720573e-01, 9.99720812e-01,
+ 9.99721289e-01, 9.99721944e-01, 9.99722779e-01, 9.99723792e-01,
+ 9.99725044e-01, 9.99726474e-01, 9.99728084e-01, 9.99729872e-01,
+ 9.99731898e-01, 9.99734104e-01, 9.99736488e-01, 9.99739051e-01,
+ 9.99741793e-01, 9.99744713e-01, 9.99747872e-01, 9.99751151e-01,
+ 9.99754667e-01, 9.99758303e-01, 9.99762177e-01, 9.99766171e-01,
+ 9.99770403e-01, 9.99774754e-01, 9.99779284e-01, 9.99783993e-01,
+ 9.99788821e-01, 9.99793828e-01, 9.99799013e-01, 9.99804318e-01,
+ 9.99809742e-01, 9.99815404e-01, 9.99821126e-01, 9.99826968e-01,
+ 9.99832988e-01, 9.99839127e-01, 9.99845386e-01, 9.99851763e-01,
+ 9.99858260e-01, 9.99864876e-01, 9.99871552e-01, 9.99878347e-01,
+ 9.99885261e-01, 9.99892235e-01, 9.99899328e-01, 9.99906480e-01,
+ 9.99913692e-01, 9.99920964e-01, 9.99928296e-01, 9.99935687e-01,
+ 9.99943137e-01, 9.99950647e-01, 9.99958158e-01, 9.99965727e-01,
+ 9.99973297e-01, 9.99980927e-01, 9.99988556e-01, 9.99996185e-01,
+ 1.00000381e+00, 1.00001132e+00, 1.00001884e+00, 1.00002635e+00,
+ 1.00003362e+00, 1.00004077e+00, 1.00004780e+00, 1.00005460e+00,
+ 1.00006104e+00, 1.00006711e+00, 1.00007272e+00, 1.00007772e+00,
+ 1.00008214e+00, 1.00008571e+00, 1.00008833e+00, 1.00008976e+00,
+ 1.00008988e+00, 1.00008845e+00, 1.00008512e+00, 1.00007975e+00,
+ 1.00007200e+00, 1.00006139e+00, 1.00004768e+00, 1.00003028e+00,
+ 1.00000894e+00, 9.99982893e-01, 9.99951661e-01, 9.99914646e-01,
+ 9.99871135e-01, 9.99820411e-01, 9.99761701e-01, 9.99694109e-01,
+ 9.99616742e-01, 9.99528646e-01, 9.99428689e-01, 9.99315858e-01,
+ 9.99188840e-01, 9.99046445e-01, 9.98887360e-01, 9.98710036e-01,
+ 9.98513043e-01, 9.98294711e-01, 9.98053491e-01, 9.97787535e-01,
+ 9.97494996e-01, 9.97173846e-01, 9.96822178e-01, 9.96437728e-01,
+ 9.96018291e-01, 9.95561540e-01, 9.95064974e-01, 9.94526088e-01,
+ 9.93942142e-01, 9.93310452e-01, 9.92628038e-01, 9.91891921e-01,
+ 9.91099000e-01, 9.90245998e-01, 9.89329517e-01, 9.88346159e-01,
+ 9.87292290e-01, 9.86164153e-01, 9.84957933e-01, 9.83669639e-01,
+ 9.82295156e-01, 9.80830312e-01, 9.79270697e-01, 9.77612019e-01,
+ 9.75849628e-01, 9.73978817e-01, 9.71994996e-01, 9.69893157e-01,
+ 9.67668533e-01, 9.65315938e-01, 9.62830484e-01, 9.60206985e-01,
+ 9.57440197e-01, 9.54525113e-01, 9.51456368e-01, 9.48228836e-01,
+ 9.44837391e-01, 9.41276729e-01, 9.37541902e-01, 9.33627844e-01,
+ 9.29529607e-01, 9.25242424e-01, 9.20761466e-01, 9.16082382e-01,
+ 9.11200643e-01, 9.06112134e-01, 9.00812864e-01, 8.95299196e-01,
+ 8.89567554e-01, 8.83614719e-01, 8.77437830e-01, 8.71034324e-01,
+ 8.64401877e-01, 8.57538521e-01, 8.50442827e-01, 8.43113542e-01,
+ 8.35549891e-01, 8.27751517e-01, 8.19718421e-01, 8.11451137e-01,
+ 8.02950621e-01, 7.94218183e-01, 7.85255671e-01, 7.76065350e-01,
+ 7.66650081e-01, 7.57013023e-01, 7.47157931e-01, 7.37088978e-01,
+ 7.26810873e-01, 7.16328681e-01, 7.05648124e-01, 6.94775164e-01,
+ 6.83716357e-01, 6.72478795e-01, 6.61069810e-01, 6.49497330e-01,
+ 6.37769580e-01, 6.25895321e-01, 6.13883674e-01, 6.01744056e-01,
+ 5.89486361e-01, 5.77120781e-01, 5.64657867e-01, 5.52108407e-01,
+ 5.39483547e-01, 5.26794672e-01, 5.14053404e-01, 5.01271665e-01,
+ 4.88461435e-01, 4.75634992e-01, 4.62804615e-01, 4.49982822e-01,
+ 4.37182158e-01, 4.24415171e-01, 4.11694527e-01, 3.99032772e-01,
+ 3.86442453e-01, 3.73936087e-01, 3.61525953e-01, 3.49224269e-01,
+ 3.37043047e-01, 3.24994087e-01, 3.13088894e-01, 3.01338732e-01,
+ 2.89754450e-01, 2.78346658e-01, 2.67125458e-01, 2.56100595e-01,
+ 2.45281324e-01, 2.34676436e-01, 2.24294156e-01, 2.14142203e-01,
+ 2.04227716e-01, 1.94557235e-01, 1.85136691e-01, 1.75971389e-01,
+ 1.67065978e-01, 1.58424467e-01, 1.50050193e-01, 1.41945809e-01,
+ 1.34113312e-01, 1.26554012e-01, 1.19268581e-01, 1.12257004e-01,
+ 1.05518632e-01, 9.90521908e-02, 9.28557739e-02, 8.69268849e-02,
+ 8.12624842e-02, 7.58589506e-02, 7.07121640e-02, 6.58175275e-02,
+ 6.11699894e-02, 5.67640625e-02, 5.25939018e-02, 4.86532971e-02,
+ 4.49357443e-02, 4.14344519e-02, 3.81424055e-02, 3.50523964e-02,
+ 3.21570449e-02, 2.94488575e-02, 2.69202497e-02, 2.45635863e-02,
+ 2.23712083e-02, 2.03354694e-02, 1.84487645e-02, 1.67035554e-02,
+ 1.50924018e-02, 1.36079816e-02, 1.22431125e-02, 1.09907771e-02,
+ 9.84413363e-03, 8.79654102e-03, 7.84156192e-03, 6.97298534e-03,
+ 6.18482940e-03, 5.47135156e-03, 4.82705561e-03, 4.24669450e-03,
+ 3.72527563e-03, 3.25805834e-03, 2.84055714e-03, 2.46853800e-03,
+ 2.13801605e-03, 1.84525200e-03, 1.58674677e-03, 1.35923503e-03,
+ 1.15967961e-03, 9.85263032e-04, 8.33379803e-04, 7.01628160e-04,
+ 5.87800692e-04, 4.89875500e-04, 4.06006613e-04, 3.34514218e-04,
+ 2.73875427e-04, 2.22714254e-04, 1.79792376e-04, 1.43999539e-04,
+ 1.14344395e-04, 8.99455481e-05, 7.00227974e-05, 5.38887325e-05,
+ 4.09407221e-05, 3.06531692e-05, 2.25702297e-05, 1.62988836e-05,
+ 1.15024377e-05, 7.89443584e-06, 5.23298331e-06, 3.31548563e-06,
+ 1.97379018e-06, 1.06971811e-06, 4.90905393e-07, 1.46209757e-07,
};
-static const float mdct_win_7m5_240[240+184] = {
- 1.84833037e-03, 2.56481839e-03, 3.36762118e-03, 4.28736617e-03,
- 5.33830143e-03, 6.52679223e-03, 7.86112587e-03, 9.34628179e-03,
- 1.09916868e-02, 1.28011172e-02, 1.47805911e-02, 1.69307043e-02,
- 1.92592307e-02, 2.17696937e-02, 2.44685983e-02, 2.73556543e-02,
- 3.04319230e-02, 3.36980464e-02, 3.71583577e-02, 4.08148180e-02,
- 4.46708068e-02, 4.87262995e-02, 5.29820633e-02, 5.74382470e-02,
- 6.20968580e-02, 6.69609767e-02, 7.20298364e-02, 7.73039146e-02,
- 8.27825574e-02, 8.84682102e-02, 9.43607566e-02, 1.00460272e-01,
- 1.06763824e-01, 1.13273679e-01, 1.19986420e-01, 1.26903521e-01,
- 1.34020853e-01, 1.41339557e-01, 1.48857211e-01, 1.56573685e-01,
- 1.64484622e-01, 1.72589077e-01, 1.80879090e-01, 1.89354320e-01,
- 1.98012244e-01, 2.06854141e-01, 2.15875319e-01, 2.25068672e-01,
- 2.34427407e-01, 2.43948314e-01, 2.53627993e-01, 2.63464061e-01,
- 2.73450494e-01, 2.83582189e-01, 2.93853469e-01, 3.04257373e-01,
- 3.14790914e-01, 3.25449123e-01, 3.36227410e-01, 3.47118760e-01,
- 3.58120177e-01, 3.69224663e-01, 3.80427793e-01, 3.91720023e-01,
- 4.03097022e-01, 4.14551955e-01, 4.26081719e-01, 4.37676318e-01,
- 4.49330196e-01, 4.61034855e-01, 4.72786043e-01, 4.84576777e-01,
- 4.96401707e-01, 5.08252458e-01, 5.20122078e-01, 5.32002077e-01,
- 5.43888090e-01, 5.55771601e-01, 5.67645739e-01, 5.79502786e-01,
- 5.91335035e-01, 6.03138367e-01, 6.14904172e-01, 6.26623941e-01,
- 6.38288834e-01, 6.49893375e-01, 6.61432360e-01, 6.72902514e-01,
- 6.84293750e-01, 6.95600460e-01, 7.06811784e-01, 7.17923425e-01,
- 7.28931386e-01, 7.39832773e-01, 7.50618982e-01, 7.61284053e-01,
- 7.71818919e-01, 7.82220992e-01, 7.92481330e-01, 8.02599448e-01,
- 8.12565230e-01, 8.22377129e-01, 8.32030518e-01, 8.41523208e-01,
- 8.50848313e-01, 8.60002412e-01, 8.68979881e-01, 8.77778347e-01,
- 8.86395904e-01, 8.94829421e-01, 9.03077626e-01, 9.11132652e-01,
- 9.18993585e-01, 9.26652937e-01, 9.34111420e-01, 9.41364344e-01,
- 9.48412967e-01, 9.55255630e-01, 9.61892013e-01, 9.68316363e-01,
- 9.74530156e-01, 9.80528338e-01, 9.86313928e-01, 9.91886049e-01,
- 9.97246345e-01, 1.00239190e+00, 1.00731946e+00, 1.01202707e+00,
- 1.01651654e+00, 1.02079430e+00, 1.02486082e+00, 1.02871471e+00,
- 1.03235170e+00, 1.03577375e+00, 1.03898432e+00, 1.04198786e+00,
- 1.04478564e+00, 1.04737818e+00, 1.04976743e+00, 1.05195405e+00,
- 1.05394290e+00, 1.05573463e+00, 1.05734177e+00, 1.05875726e+00,
- 1.05998674e+00, 1.06103672e+00, 1.06190651e+00, 1.06260369e+00,
- 1.06313289e+00, 1.06350237e+00, 1.06370981e+00, 1.06376322e+00,
- 1.06366765e+00, 1.06343012e+00, 1.06305656e+00, 1.06255421e+00,
- 1.06192235e+00, 1.06116702e+00, 1.06029469e+00, 1.05931469e+00,
- 1.05823465e+00, 1.05705891e+00, 1.05578948e+00, 1.05442979e+00,
- 1.05298793e+00, 1.05147505e+00, 1.04989930e+00, 1.04826213e+00,
- 1.04656691e+00, 1.04481699e+00, 1.04302125e+00, 1.04118768e+00,
- 1.03932339e+00, 1.03743168e+00, 1.03551757e+00, 1.03358511e+00,
- 1.03164371e+00, 1.02969955e+00, 1.02775944e+00, 1.02582719e+00,
- 1.02390791e+00, 1.02200805e+00, 1.02013910e+00, 1.01826310e+00,
- 1.01687901e+00, 1.01492195e+00, 1.01309662e+00, 1.01134205e+00,
- 1.00965912e+00, 1.00805036e+00, 1.00651754e+00, 1.00505799e+00,
- 1.00366956e+00, 1.00235327e+00, 1.00110981e+00, 9.99937523e-01,
- 9.98834524e-01, 9.97800606e-01, 9.96835756e-01, 9.95938881e-01,
- 9.95108459e-01, 9.94343411e-01, 9.93642921e-01, 9.93005832e-01,
- 9.92430984e-01, 9.91917493e-01, 9.91463898e-01, 9.91068214e-01,
- 9.90729218e-01, 9.90446225e-01, 9.90217819e-01, 9.90041963e-01,
- 9.89917085e-01, 9.89841975e-01, 9.89815048e-01, 9.89834329e-01,
- 9.89898211e-01, 9.90005403e-01, 9.90154189e-01, 9.90342427e-01,
- 9.90568459e-01, 9.90830953e-01, 9.91128038e-01, 9.91457566e-01,
- 9.91817881e-01, 9.92207559e-01, 9.92624757e-01, 9.93067358e-01,
- 9.93533398e-01, 9.94021410e-01, 9.94529685e-01, 9.95055964e-01,
- 9.95598351e-01, 9.96155580e-01, 9.96725627e-01, 9.97306092e-01,
- 9.97895214e-01, 9.98491441e-01, 9.99092890e-01, 9.99697063e-01,
- 1.00030303e+00, 1.00090793e+00, 1.00151084e+00, 1.00210923e+00,
- 1.00270118e+00, 1.00328513e+00, 1.00385926e+00, 1.00442111e+00,
- 1.00496860e+00, 1.00550040e+00, 1.00601455e+00, 1.00650869e+00,
- 1.00698104e+00, 1.00743004e+00, 1.00785364e+00, 1.00824962e+00,
- 1.00861604e+00, 1.00895138e+00, 1.00925390e+00, 1.00952134e+00,
- 1.00975175e+00, 1.00994371e+00, 1.01009550e+00, 1.01020488e+00,
- 1.01027007e+00, 1.01028975e+00, 1.01026227e+00, 1.01018562e+00,
- 1.01005820e+00, 1.00987882e+00, 1.00964593e+00, 1.00935753e+00,
- 1.00901228e+00, 1.00860959e+00, 1.00814837e+00, 1.00762674e+00,
- 1.00704343e+00, 1.00639775e+00, 1.00568877e+00, 1.00491559e+00,
- 1.00407768e+00, 1.00317429e+00, 1.00220424e+00, 1.00116684e+00,
- 1.00006248e+00, 9.98891422e-01, 9.97652252e-01, 9.96343856e-01,
- 9.94967462e-01, 9.93524663e-01, 9.92013927e-01, 9.90433283e-01,
- 9.88785147e-01, 9.87072681e-01, 9.85297443e-01, 9.83401161e-01,
- 9.80949418e-01, 9.78782729e-01, 9.76468238e-01, 9.74042850e-01,
- 9.71498848e-01, 9.68829968e-01, 9.66030974e-01, 9.63095104e-01,
- 9.60018198e-01, 9.56795738e-01, 9.53426267e-01, 9.49903482e-01,
- 9.46222115e-01, 9.42375820e-01, 9.38361702e-01, 9.34177798e-01,
- 9.29823124e-01, 9.25292320e-01, 9.20580120e-01, 9.15679793e-01,
- 9.10590604e-01, 9.05315030e-01, 8.99852756e-01, 8.94199497e-01,
- 8.88350152e-01, 8.82301631e-01, 8.76054874e-01, 8.69612385e-01,
- 8.62972799e-01, 8.56135198e-01, 8.49098179e-01, 8.41857024e-01,
- 8.34414055e-01, 8.26774617e-01, 8.18939244e-01, 8.10904891e-01,
- 8.02675318e-01, 7.94253751e-01, 7.85641662e-01, 7.76838609e-01,
- 7.67853193e-01, 7.58685181e-01, 7.49330658e-01, 7.39809171e-01,
- 7.30109944e-01, 7.20247781e-01, 7.10224161e-01, 7.00044326e-01,
- 6.89711890e-01, 6.79231154e-01, 6.68608179e-01, 6.57850997e-01,
- 6.46965718e-01, 6.35959617e-01, 6.24840336e-01, 6.13603503e-01,
- 6.02265091e-01, 5.90829083e-01, 5.79309408e-01, 5.67711124e-01,
- 5.56037416e-01, 5.44293664e-01, 5.32489768e-01, 5.20636084e-01,
- 5.08743273e-01, 4.96811166e-01, 4.84849881e-01, 4.72868107e-01,
- 4.60875918e-01, 4.48881081e-01, 4.36891039e-01, 4.24912022e-01,
- 4.12960603e-01, 4.01035896e-01, 3.89157867e-01, 3.77322199e-01,
- 3.65543767e-01, 3.53832356e-01, 3.42196115e-01, 3.30644820e-01,
- 3.19187559e-01, 3.07833309e-01, 2.96588182e-01, 2.85463717e-01,
- 2.74462409e-01, 2.63609584e-01, 2.52883101e-01, 2.42323489e-01,
- 2.31925746e-01, 2.21690837e-01, 2.11638058e-01, 2.01766920e-01,
- 1.92082236e-01, 1.82589160e-01, 1.73305997e-01, 1.64229200e-01,
- 1.55362654e-01, 1.46717079e-01, 1.38299391e-01, 1.30105078e-01,
- 1.22145310e-01, 1.14423458e-01, 1.06941076e-01, 9.97025893e-02,
- 9.27124283e-02, 8.59737427e-02, 7.94893311e-02, 7.32616579e-02,
- 6.72934102e-02, 6.15874081e-02, 5.61458003e-02, 5.09700747e-02,
- 4.60617047e-02, 4.14220117e-02, 3.70514189e-02, 3.29494666e-02,
- 2.91153327e-02, 2.55476401e-02, 2.22437711e-02, 1.92000659e-02,
- 1.64122205e-02, 1.38747611e-02, 1.15806353e-02, 9.52213664e-03,
- 7.69137380e-03, 6.07207833e-03, 4.62581217e-03, 3.60685164e-03,
-};
+#endif /* LC3_PLUS_HR */
-static const float mdct_win_7m5_360[360+276] = {
- 1.72152668e-03, 2.20824874e-03, 2.68901752e-03, 3.22613342e-03,
- 3.81014420e-03, 4.45371932e-03, 5.15369240e-03, 5.91552473e-03,
- 6.73869158e-03, 7.62861841e-03, 8.58361457e-03, 9.60938437e-03,
- 1.07060753e-02, 1.18759723e-02, 1.31190130e-02, 1.44390108e-02,
- 1.58335301e-02, 1.73063081e-02, 1.88584711e-02, 2.04918652e-02,
- 2.22061476e-02, 2.40057166e-02, 2.58883593e-02, 2.78552326e-02,
- 2.99059145e-02, 3.20415894e-02, 3.42610013e-02, 3.65680973e-02,
- 3.89616721e-02, 4.14435824e-02, 4.40140796e-02, 4.66742169e-02,
- 4.94214625e-02, 5.22588489e-02, 5.51849337e-02, 5.82005143e-02,
- 6.13059845e-02, 6.45038384e-02, 6.77913923e-02, 7.11707833e-02,
- 7.46411071e-02, 7.82028053e-02, 8.18549521e-02, 8.56000162e-02,
- 8.94357617e-02, 9.33642589e-02, 9.73846703e-02, 1.01496718e-01,
- 1.05698760e-01, 1.09993603e-01, 1.14378287e-01, 1.18853508e-01,
- 1.23419277e-01, 1.28075997e-01, 1.32820581e-01, 1.37655457e-01,
- 1.42578648e-01, 1.47590522e-01, 1.52690437e-01, 1.57878853e-01,
- 1.63152529e-01, 1.68513363e-01, 1.73957969e-01, 1.79484737e-01,
- 1.85093105e-01, 1.90784835e-01, 1.96556497e-01, 2.02410419e-01,
- 2.08345433e-01, 2.14359825e-01, 2.20450365e-01, 2.26617296e-01,
- 2.32856279e-01, 2.39167941e-01, 2.45550642e-01, 2.52003951e-01,
- 2.58526168e-01, 2.65118408e-01, 2.71775911e-01, 2.78498539e-01,
- 2.85284606e-01, 2.92132459e-01, 2.99038432e-01, 3.06004256e-01,
- 3.13026529e-01, 3.20104862e-01, 3.27237324e-01, 3.34423210e-01,
- 3.41658622e-01, 3.48944976e-01, 3.56279252e-01, 3.63660034e-01,
- 3.71085146e-01, 3.78554327e-01, 3.86062695e-01, 3.93610554e-01,
- 4.01195225e-01, 4.08815272e-01, 4.16468460e-01, 4.24155411e-01,
- 4.31871046e-01, 4.39614744e-01, 4.47384019e-01, 4.55176988e-01,
- 4.62990138e-01, 4.70824619e-01, 4.78676593e-01, 4.86545433e-01,
- 4.94428714e-01, 5.02324813e-01, 5.10229471e-01, 5.18142927e-01,
- 5.26060916e-01, 5.33982818e-01, 5.41906817e-01, 5.49831283e-01,
- 5.57751234e-01, 5.65667636e-01, 5.73576883e-01, 5.81476666e-01,
- 5.89364661e-01, 5.97241338e-01, 6.05102013e-01, 6.12946170e-01,
- 6.20770242e-01, 6.28572094e-01, 6.36348526e-01, 6.44099662e-01,
- 6.51820973e-01, 6.59513822e-01, 6.67176382e-01, 6.74806795e-01,
- 6.82400711e-01, 6.89958854e-01, 6.97475722e-01, 7.04950145e-01,
- 7.12379980e-01, 7.19765434e-01, 7.27103833e-01, 7.34396372e-01,
- 7.41638561e-01, 7.48829639e-01, 7.55966688e-01, 7.63049259e-01,
- 7.70072273e-01, 7.77036981e-01, 7.83941108e-01, 7.90781257e-01,
- 7.97558114e-01, 8.04271381e-01, 8.10914901e-01, 8.17490856e-01,
- 8.23997094e-01, 8.30432785e-01, 8.36796950e-01, 8.43089298e-01,
- 8.49305847e-01, 8.55447310e-01, 8.61511037e-01, 8.67496281e-01,
- 8.73400798e-01, 8.79227518e-01, 8.84972438e-01, 8.90635719e-01,
- 8.96217173e-01, 9.01716414e-01, 9.07128770e-01, 9.12456578e-01,
- 9.17697261e-01, 9.22848784e-01, 9.27909917e-01, 9.32882596e-01,
- 9.37763323e-01, 9.42553356e-01, 9.47252428e-01, 9.51860206e-01,
- 9.56376060e-01, 9.60800602e-01, 9.65130600e-01, 9.69366689e-01,
- 9.73508812e-01, 9.77556541e-01, 9.81507226e-01, 9.85364580e-01,
- 9.89126209e-01, 9.92794201e-01, 9.96367545e-01, 9.99846919e-01,
- 1.00322812e+00, 1.00651341e+00, 1.00970073e+00, 1.01279029e+00,
- 1.01578293e+00, 1.01868229e+00, 1.02148657e+00, 1.02419772e+00,
- 1.02681455e+00, 1.02933598e+00, 1.03176043e+00, 1.03408981e+00,
- 1.03632326e+00, 1.03846361e+00, 1.04051196e+00, 1.04246831e+00,
- 1.04433331e+00, 1.04610837e+00, 1.04779018e+00, 1.04938334e+00,
- 1.05088565e+00, 1.05229923e+00, 1.05362522e+00, 1.05486289e+00,
- 1.05601521e+00, 1.05708746e+00, 1.05807221e+00, 1.05897524e+00,
- 1.05979447e+00, 1.06053414e+00, 1.06119412e+00, 1.06177366e+00,
- 1.06227662e+00, 1.06270324e+00, 1.06305569e+00, 1.06333815e+00,
- 1.06354800e+00, 1.06368607e+00, 1.06375557e+00, 1.06375743e+00,
- 1.06369358e+00, 1.06356632e+00, 1.06337707e+00, 1.06312782e+00,
- 1.06282156e+00, 1.06245782e+00, 1.06203634e+00, 1.06155996e+00,
- 1.06102951e+00, 1.06044797e+00, 1.05981709e+00, 1.05914163e+00,
- 1.05842136e+00, 1.05765876e+00, 1.05685377e+00, 1.05600761e+00,
- 1.05512006e+00, 1.05419505e+00, 1.05323346e+00, 1.05223985e+00,
- 1.05121668e+00, 1.05016637e+00, 1.04908779e+00, 1.04798366e+00,
- 1.04685334e+00, 1.04569860e+00, 1.04452056e+00, 1.04332348e+00,
- 1.04210831e+00, 1.04087907e+00, 1.03963603e+00, 1.03838099e+00,
- 1.03711403e+00, 1.03583813e+00, 1.03455276e+00, 1.03326200e+00,
- 1.03196750e+00, 1.03067200e+00, 1.02937564e+00, 1.02808244e+00,
- 1.02679167e+00, 1.02550635e+00, 1.02422655e+00, 1.02295558e+00,
- 1.02169299e+00, 1.02044475e+00, 1.01920733e+00, 1.01799992e+00,
- 1.01716022e+00, 1.01587289e+00, 1.01461783e+00, 1.01339738e+00,
- 1.01221017e+00, 1.01105652e+00, 1.00993444e+00, 1.00884559e+00,
- 1.00778956e+00, 1.00676790e+00, 1.00577851e+00, 1.00482173e+00,
- 1.00389592e+00, 1.00300262e+00, 1.00214091e+00, 1.00131213e+00,
- 1.00051460e+00, 9.99748988e-01, 9.99013486e-01, 9.98309229e-01,
- 9.97634934e-01, 9.96991885e-01, 9.96378601e-01, 9.95795982e-01,
- 9.95242217e-01, 9.94718132e-01, 9.94222122e-01, 9.93755313e-01,
- 9.93316216e-01, 9.92905809e-01, 9.92522422e-01, 9.92166957e-01,
- 9.91837704e-01, 9.91535508e-01, 9.91258603e-01, 9.91007878e-01,
- 9.90781723e-01, 9.90581104e-01, 9.90404336e-01, 9.90252267e-01,
- 9.90123118e-01, 9.90017726e-01, 9.89934325e-01, 9.89873712e-01,
- 9.89834110e-01, 9.89816359e-01, 9.89818707e-01, 9.89841998e-01,
- 9.89884438e-01, 9.89946800e-01, 9.90027287e-01, 9.90126680e-01,
- 9.90243175e-01, 9.90377594e-01, 9.90528134e-01, 9.90695564e-01,
- 9.90878043e-01, 9.91076302e-01, 9.91288540e-01, 9.91515602e-01,
- 9.91755666e-01, 9.92009469e-01, 9.92275155e-01, 9.92553486e-01,
- 9.92842693e-01, 9.93143533e-01, 9.93454080e-01, 9.93775067e-01,
- 9.94104689e-01, 9.94443742e-01, 9.94790398e-01, 9.95145361e-01,
- 9.95506800e-01, 9.95875534e-01, 9.96249681e-01, 9.96629919e-01,
- 9.97014367e-01, 9.97403799e-01, 9.97796404e-01, 9.98192871e-01,
- 9.98591286e-01, 9.98992436e-01, 9.99394506e-01, 9.99798247e-01,
- 1.00020179e+00, 1.00060586e+00, 1.00100858e+00, 1.00141070e+00,
- 1.00181040e+00, 1.00220846e+00, 1.00260296e+00, 1.00299457e+00,
- 1.00338148e+00, 1.00376444e+00, 1.00414155e+00, 1.00451348e+00,
- 1.00487832e+00, 1.00523688e+00, 1.00558730e+00, 1.00593027e+00,
- 1.00626393e+00, 1.00658905e+00, 1.00690380e+00, 1.00720890e+00,
- 1.00750238e+00, 1.00778498e+00, 1.00805489e+00, 1.00831287e+00,
- 1.00855700e+00, 1.00878802e+00, 1.00900405e+00, 1.00920593e+00,
- 1.00939182e+00, 1.00956244e+00, 1.00971590e+00, 1.00985296e+00,
- 1.00997177e+00, 1.01007317e+00, 1.01015529e+00, 1.01021893e+00,
- 1.01026225e+00, 1.01028602e+00, 1.01028842e+00, 1.01027030e+00,
- 1.01022988e+00, 1.01016802e+00, 1.01008292e+00, 1.00997541e+00,
- 1.00984369e+00, 1.00968863e+00, 1.00950846e+00, 1.00930404e+00,
- 1.00907371e+00, 1.00881848e+00, 1.00853675e+00, 1.00822947e+00,
- 1.00789488e+00, 1.00753391e+00, 1.00714488e+00, 1.00672876e+00,
- 1.00628393e+00, 1.00581146e+00, 1.00530991e+00, 1.00478053e+00,
- 1.00422177e+00, 1.00363456e+00, 1.00301719e+00, 1.00237067e+00,
- 1.00169363e+00, 1.00098749e+00, 1.00025108e+00, 9.99485663e-01,
- 9.98689592e-01, 9.97863666e-01, 9.97006370e-01, 9.96119199e-01,
- 9.95201404e-01, 9.94254687e-01, 9.93277595e-01, 9.92270651e-01,
- 9.91231967e-01, 9.90163286e-01, 9.89064394e-01, 9.87937115e-01,
- 9.86779736e-01, 9.85592773e-01, 9.84375125e-01, 9.83129288e-01,
- 9.81348463e-01, 9.79890963e-01, 9.78400459e-01, 9.76860435e-01,
- 9.75269879e-01, 9.73627353e-01, 9.71931341e-01, 9.70180498e-01,
- 9.68372652e-01, 9.66506952e-01, 9.64580027e-01, 9.62592318e-01,
- 9.60540986e-01, 9.58425534e-01, 9.56244393e-01, 9.53998416e-01,
- 9.51684014e-01, 9.49301185e-01, 9.46846884e-01, 9.44320232e-01,
- 9.41718404e-01, 9.39042580e-01, 9.36290624e-01, 9.33464050e-01,
- 9.30560854e-01, 9.27580507e-01, 9.24519592e-01, 9.21378471e-01,
- 9.18153414e-01, 9.14844696e-01, 9.11451652e-01, 9.07976524e-01,
- 9.04417545e-01, 9.00776308e-01, 8.97050058e-01, 8.93238398e-01,
- 8.89338681e-01, 8.85351360e-01, 8.81274023e-01, 8.77109638e-01,
- 8.72857927e-01, 8.68519505e-01, 8.64092796e-01, 8.59579819e-01,
- 8.54976007e-01, 8.50285220e-01, 8.45502615e-01, 8.40630470e-01,
- 8.35667925e-01, 8.30619943e-01, 8.25482007e-01, 8.20258909e-01,
- 8.14946648e-01, 8.09546696e-01, 8.04059978e-01, 7.98489378e-01,
- 7.92831417e-01, 7.87090668e-01, 7.81262450e-01, 7.75353947e-01,
- 7.69363613e-01, 7.63291769e-01, 7.57139016e-01, 7.50901711e-01,
- 7.44590843e-01, 7.38205136e-01, 7.31738075e-01, 7.25199287e-01,
- 7.18588225e-01, 7.11905687e-01, 7.05153668e-01, 6.98332634e-01,
- 6.91444101e-01, 6.84490545e-01, 6.77470119e-01, 6.70388375e-01,
- 6.63245210e-01, 6.56045780e-01, 6.48788627e-01, 6.41477162e-01,
- 6.34114323e-01, 6.26702000e-01, 6.19235334e-01, 6.11720596e-01,
- 6.04161612e-01, 5.96559133e-01, 5.88914401e-01, 5.81234783e-01,
- 5.73519989e-01, 5.65770616e-01, 5.57988067e-01, 5.50173851e-01,
- 5.42330194e-01, 5.34460798e-01, 5.26568538e-01, 5.18656324e-01,
- 5.10728813e-01, 5.02781159e-01, 4.94819491e-01, 4.86845139e-01,
- 4.78860889e-01, 4.70869928e-01, 4.62875144e-01, 4.54877894e-01,
- 4.46882512e-01, 4.38889325e-01, 4.30898123e-01, 4.22918322e-01,
- 4.14950878e-01, 4.06993964e-01, 3.99052648e-01, 3.91134614e-01,
- 3.83234031e-01, 3.75354653e-01, 3.67502060e-01, 3.59680098e-01,
- 3.51887312e-01, 3.44130166e-01, 3.36408100e-01, 3.28728966e-01,
- 3.21090505e-01, 3.13496418e-01, 3.05951565e-01, 2.98454319e-01,
- 2.91010565e-01, 2.83621109e-01, 2.76285415e-01, 2.69019585e-01,
- 2.61812445e-01, 2.54659232e-01, 2.47584348e-01, 2.40578694e-01,
- 2.33647009e-01, 2.26788433e-01, 2.20001992e-01, 2.13301325e-01,
- 2.06677771e-01, 2.00140409e-01, 1.93683630e-01, 1.87310343e-01,
- 1.81027384e-01, 1.74839476e-01, 1.68739644e-01, 1.62737273e-01,
- 1.56825277e-01, 1.51012382e-01, 1.45298230e-01, 1.39687469e-01,
- 1.34171842e-01, 1.28762544e-01, 1.23455562e-01, 1.18254662e-01,
- 1.13159677e-01, 1.08171439e-01, 1.03290734e-01, 9.85202978e-02,
- 9.38600023e-02, 8.93117360e-02, 8.48752103e-02, 8.05523737e-02,
- 7.63429787e-02, 7.22489246e-02, 6.82699120e-02, 6.44077291e-02,
- 6.06620003e-02, 5.70343711e-02, 5.35243715e-02, 5.01334690e-02,
- 4.68610790e-02, 4.37084453e-02, 4.06748365e-02, 3.77612269e-02,
- 3.49667099e-02, 3.22919275e-02, 2.97357669e-02, 2.72984629e-02,
- 2.49787186e-02, 2.27762542e-02, 2.06895808e-02, 1.87178169e-02,
- 1.68593418e-02, 1.51125125e-02, 1.34757094e-02, 1.19462709e-02,
- 1.05228754e-02, 9.20130941e-03, 7.98124316e-03, 6.85547314e-03,
- 5.82657334e-03, 4.87838525e-03, 4.02351119e-03, 3.15418663e-03,
-};
+#undef __LC3_MDCT_WIN_LEN
const float *lc3_mdct_win[LC3_NUM_DT][LC3_NUM_SRATE] = {
+ [LC3_DT_2M5] = {
+ LC3_IF_PLUS( mdct_win_2m5_8k , NULL ),
+ LC3_IF_PLUS( mdct_win_2m5_16k, NULL ),
+ LC3_IF_PLUS( mdct_win_2m5_24k, NULL ),
+ LC3_IF_PLUS( mdct_win_2m5_32k, NULL ),
+ LC3_IF_PLUS( mdct_win_2m5_48k, NULL ),
+ LC3_IF_PLUS( LC3_IF_PLUS_HR( mdct_win_2m5_48k_hr, NULL ), NULL ),
+ LC3_IF_PLUS( LC3_IF_PLUS_HR( mdct_win_2m5_96k_hr, NULL ), NULL ) },
+
+ [LC3_DT_5M ] = {
+ LC3_IF_PLUS( mdct_win_5m_8k , NULL ),
+ LC3_IF_PLUS( mdct_win_5m_16k, NULL ),
+ LC3_IF_PLUS( mdct_win_5m_24k, NULL ),
+ LC3_IF_PLUS( mdct_win_5m_32k, NULL ),
+ LC3_IF_PLUS( mdct_win_5m_48k, NULL ),
+ LC3_IF_PLUS( LC3_IF_PLUS_HR( mdct_win_5m_48k_hr, NULL ), NULL ),
+ LC3_IF_PLUS( LC3_IF_PLUS_HR( mdct_win_5m_96k_hr, NULL ), NULL ) },
+
[LC3_DT_7M5] = {
- [LC3_SRATE_8K ] = mdct_win_7m5_60,
- [LC3_SRATE_16K] = mdct_win_7m5_120,
- [LC3_SRATE_24K] = mdct_win_7m5_180,
- [LC3_SRATE_32K] = mdct_win_7m5_240,
- [LC3_SRATE_48K] = mdct_win_7m5_360,
- },
+ mdct_win_7m5_8k , mdct_win_7m5_16k, mdct_win_7m5_24k,
+ mdct_win_7m5_32k, mdct_win_7m5_48k },
[LC3_DT_10M] = {
- [LC3_SRATE_8K ] = mdct_win_10m_80,
- [LC3_SRATE_16K] = mdct_win_10m_160,
- [LC3_SRATE_24K] = mdct_win_10m_240,
- [LC3_SRATE_32K] = mdct_win_10m_320,
- [LC3_SRATE_48K] = mdct_win_10m_480,
- },
+ mdct_win_10m_8k , mdct_win_10m_16k, mdct_win_10m_24k,
+ mdct_win_10m_32k, mdct_win_10m_48k,
+ LC3_IF_PLUS_HR( mdct_win_10m_48k_hr, NULL),
+ LC3_IF_PLUS_HR( mdct_win_10m_96k_hr, NULL), },
};
/**
- * Bands limits (cf. 3.7.1-2)
+ * Bands limits
*/
-const int lc3_band_lim[LC3_NUM_DT][LC3_NUM_SRATE][LC3_NUM_BANDS+1] = {
+#if LC3_PLUS
- [LC3_DT_7M5] = {
+static const int band_lim_2m5_8k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20
+};
- [LC3_SRATE_8K ] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 60, 60, 60, 60 },
-
- [LC3_SRATE_16K] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 36, 38, 40, 42, 44,
- 46, 48, 50, 52, 54, 56, 58, 60, 62, 65,
- 68, 71, 74, 77, 80, 83, 86, 90, 94, 98,
- 102, 106, 110, 115, 120 },
-
- [LC3_SRATE_24K] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 29, 31,
- 33, 35, 37, 39, 41, 43, 45, 47, 49, 52,
- 55, 58, 61, 64, 67, 70, 74, 78, 82, 86,
- 90, 95, 100, 105, 110, 115, 121, 127, 134, 141,
- 148, 155, 163, 171, 180 },
-
- [LC3_SRATE_32K] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 26, 28, 30, 32, 34,
- 36, 38, 40, 42, 45, 48, 51, 54, 57, 60,
- 63, 67, 71, 75, 79, 84, 89, 94, 99, 105,
- 111, 117, 124, 131, 138, 146, 154, 163, 172, 182,
- 192, 203, 215, 227, 240 },
-
- [LC3_SRATE_48K] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 24, 26, 28, 30, 32, 34, 36,
- 38, 40, 43, 46, 49, 52, 55, 59, 63, 67,
- 71, 75, 80, 85, 90, 96, 102, 108, 115, 122,
- 129, 137, 146, 155, 165, 175, 186, 197, 209, 222,
- 236, 251, 266, 283, 300 },
- },
+static const int band_lim_2m5_16k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 32, 34, 36, 38, 40
+};
+
+static const int band_lim_2m5_24k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 28, 30, 32,
+ 34, 36, 38, 40, 42, 44, 47, 50, 53, 56,
+ 60
+};
+
+static const int band_lim_2m5_32k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 26, 28, 30, 32, 34,
+ 36, 38, 40, 43, 46, 49, 52, 55, 59, 63,
+ 67, 71, 75, 80
+};
+
+static const int band_lim_2m5_48k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 23, 25, 27, 29, 31, 33, 35, 37,
+ 40, 43, 46, 49, 52, 56, 60, 64, 68, 72,
+ 77, 82, 87, 93, 100
+};
+
+#if LC3_PLUS_HR
+
+static const int band_lim_2m5_48k_hr[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 21, 23, 25, 27, 29, 31, 33, 35, 37, 40,
+ 43, 46, 49, 53, 57, 61, 65, 69, 74, 79,
+ 85, 91, 97, 104, 112, 120
+};
+
+static const int band_lim_2m5_96k_hr[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 18, 20, 22,
+ 24, 26, 28, 30, 32, 35, 38, 41, 45, 49,
+ 53, 57, 62, 67, 73, 79, 85, 92, 100, 108,
+ 117, 127, 137, 149, 161, 174, 189, 204, 221, 240
+};
+
+#endif /* LC3_PLUS_HR */
+
+static const int band_lim_5m_8k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 40
+};
+
+static const int band_lim_5m_16k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 32, 34, 36, 38, 40, 42, 44, 46, 48,
+ 50, 52, 54, 57, 60, 63, 66, 69, 72, 76,
+ 80
+};
+
+static const int band_lim_5m_24k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 26, 28, 30, 32, 34,
+ 36, 38, 40, 42, 44, 47, 50, 53, 56, 59,
+ 62, 65, 69, 73, 77, 81, 86, 91, 96, 101,
+ 107, 113, 120
+};
+
+static const int band_lim_5m_32k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 24, 26, 28, 30, 32, 34, 36,
+ 38, 40, 42, 45, 48, 51, 54, 57, 61, 65,
+ 69, 73, 78, 83, 88, 93, 99, 105, 112, 119,
+ 126, 134, 142, 151, 160
+};
+
+static const int band_lim_5m_48k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 23, 25, 27, 29, 31, 33, 35, 37,
+ 40, 43, 46, 49, 52, 55, 59, 63, 67, 72,
+ 77, 82, 87, 93, 99, 105, 112, 120, 128, 136,
+ 145, 155, 165, 176, 187, 200
+};
+
+#if LC3_PLUS_HR
+
+static const int band_lim_5m_48k_hr[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 21, 23, 25, 27, 29, 31, 33, 35, 38, 41,
+ 44, 47, 50, 54, 58, 62, 66, 71, 76, 81,
+ 87, 93, 100, 107, 114, 122, 131, 140, 149, 160,
+ 171, 183, 196, 209, 224, 240
+};
+
+static const int band_lim_5m_96k_hr[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 19, 21,
+ 23, 25, 27, 29, 31, 34, 37, 40, 44, 48,
+ 52, 56, 61, 66, 71, 77, 83, 90, 98, 106,
+ 115, 124, 135, 146, 158, 171, 185, 200, 217, 235,
+ 254, 275, 298, 323, 349, 378, 409, 443, 480
+};
+
+#endif /* LC3_PLUS_HR */
+#endif /* LC3_PLUS */
+
+static const int band_lim_7m5_8k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60
+};
+
+static const int band_lim_7m5_16k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 36, 38, 40, 42, 44,
+ 46, 48, 50, 52, 54, 56, 58, 60, 62, 65,
+ 68, 71, 74, 77, 80, 83, 86, 90, 94, 98,
+ 102, 106, 110, 115, 120
+};
+
+static const int band_lim_7m5_24k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 29, 31,
+ 33, 35, 37, 39, 41, 43, 45, 47, 49, 52,
+ 55, 58, 61, 64, 67, 70, 74, 78, 82, 86,
+ 90, 95, 100, 105, 110, 115, 121, 127, 134, 141,
+ 148, 155, 163, 171, 180
+};
+
+static const int band_lim_7m5_32k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 26, 28, 30, 32, 34,
+ 36, 38, 40, 42, 45, 48, 51, 54, 57, 60,
+ 63, 67, 71, 75, 79, 84, 89, 94, 99, 105,
+ 111, 117, 124, 131, 138, 146, 154, 163, 172, 182,
+ 192, 203, 215, 227, 240
+};
+
+static const int band_lim_7m5_48k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 24, 26, 28, 30, 32, 34, 36,
+ 38, 40, 43, 46, 49, 52, 55, 59, 63, 67,
+ 71, 75, 80, 85, 90, 96, 102, 108, 115, 122,
+ 129, 137, 146, 155, 165, 175, 186, 197, 209, 222,
+ 236, 251, 266, 283, 300
+};
+
+static const int band_lim_10m_8k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 51, 53, 55, 57, 59, 61, 63, 65, 67, 69,
+ 71, 73, 75, 77, 80
+};
+
+static const int band_lim_10m_16k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 30,
+ 32, 34, 36, 38, 40, 42, 44, 46, 48, 50,
+ 52, 55, 58, 61, 64, 67, 70, 73, 76, 80,
+ 84, 88, 92, 96, 101, 106, 111, 116, 121, 127,
+ 133, 139, 146, 153, 160
+};
+
+static const int band_lim_10m_24k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 25, 27, 29, 31, 33, 35,
+ 37, 39, 41, 43, 46, 49, 52, 55, 58, 61,
+ 64, 68, 72, 76, 80, 85, 90, 95, 100, 106,
+ 112, 118, 125, 132, 139, 147, 155, 164, 173, 183,
+ 193, 204, 215, 227, 240
+};
+
+static const int band_lim_10m_32k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,
+ 41, 44, 47, 50, 53, 56, 60, 64, 68, 72,
+ 76, 81, 86, 91, 97, 103, 109, 116, 123, 131,
+ 139, 148, 157, 166, 176, 187, 199, 211, 224, 238,
+ 252, 268, 284, 302, 320
+};
+
+static const int band_lim_10m_48k[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 20,
+ 22, 24, 26, 28, 30, 32, 34, 36, 39, 42,
+ 45, 48, 51, 55, 59, 63, 67, 71, 76, 81,
+ 86, 92, 98, 105, 112, 119, 127, 135, 144, 154,
+ 164, 175, 186, 198, 211, 225, 240, 256, 273, 291,
+ 310, 330, 352, 375, 400
+};
+
+#if LC3_PLUS_HR
+
+static const int band_lim_10m_48k_hr[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 19, 21,
+ 23, 25, 27, 29, 31, 33, 36, 39, 42, 45,
+ 48, 51, 55, 59, 63, 67, 72, 77, 83, 89,
+ 95, 101, 108, 116, 124, 133, 142, 152, 163, 174,
+ 187, 200, 214, 229, 244, 262, 280, 299, 320, 343,
+ 367, 392, 419, 449, 480
+};
+
+static const int band_lim_10m_96k_hr[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8 , 9,
+ 10, 11, 12, 14, 16, 18, 20, 22, 24, 26,
+ 28, 30, 33, 36, 39, 42, 46, 50, 54, 59,
+ 64, 69, 75, 82, 89, 96, 104, 113, 122, 132,
+ 143, 155, 168, 181, 196, 213, 230, 249, 270, 292,
+ 316, 342, 371, 401, 434, 470, 509, 551, 596, 646,
+ 699, 757, 819, 887, 960
+};
+
+#endif /* LC3_PLUS_HR */
+
+const int *lc3_band_lim[LC3_NUM_DT][LC3_NUM_SRATE] = {
+
+ [LC3_DT_2M5] = {
+ LC3_IF_PLUS( band_lim_2m5_8k , NULL ),
+ LC3_IF_PLUS( band_lim_2m5_16k, NULL ),
+ LC3_IF_PLUS( band_lim_2m5_24k, NULL ),
+ LC3_IF_PLUS( band_lim_2m5_32k, NULL ),
+ LC3_IF_PLUS( band_lim_2m5_48k, NULL ),
+ LC3_IF_PLUS( LC3_IF_PLUS_HR( band_lim_2m5_48k_hr, NULL ), NULL ),
+ LC3_IF_PLUS( LC3_IF_PLUS_HR( band_lim_2m5_96k_hr, NULL ), NULL ) },
+
+ [LC3_DT_5M] = {
+ LC3_IF_PLUS( band_lim_5m_8k , NULL ),
+ LC3_IF_PLUS( band_lim_5m_16k, NULL ),
+ LC3_IF_PLUS( band_lim_5m_24k, NULL ),
+ LC3_IF_PLUS( band_lim_5m_32k, NULL ),
+ LC3_IF_PLUS( band_lim_5m_48k, NULL ),
+ LC3_IF_PLUS( LC3_IF_PLUS_HR( band_lim_5m_48k_hr, NULL ), NULL ),
+ LC3_IF_PLUS( LC3_IF_PLUS_HR( band_lim_5m_96k_hr, NULL ), NULL ) },
+
+ [LC3_DT_7M5] = {
+ band_lim_7m5_8k , band_lim_7m5_16k, band_lim_7m5_24k,
+ band_lim_7m5_32k, band_lim_7m5_48k },
[LC3_DT_10M] = {
+ band_lim_10m_8k , band_lim_10m_16k, band_lim_10m_24k,
+ band_lim_10m_32k, band_lim_10m_48k,
+ LC3_IF_PLUS_HR( band_lim_10m_48k_hr, NULL ),
+ LC3_IF_PLUS_HR( band_lim_10m_96k_hr, NULL ) },
+};
- [LC3_SRATE_8K ] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
- 51, 53, 55, 57, 59, 61, 63, 65, 67, 69,
- 71, 73, 75, 77, 80 },
-
- [LC3_SRATE_16K] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 30,
- 32, 34, 36, 38, 40, 42, 44, 46, 48, 50,
- 52, 55, 58, 61, 64, 67, 70, 73, 76, 80,
- 84, 88, 92, 96, 101, 106, 111, 116, 121, 127,
- 133, 139, 146, 153, 160 },
-
- [LC3_SRATE_24K] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 25, 27, 29, 31, 33, 35,
- 37, 39, 41, 43, 46, 49, 52, 55, 58, 61,
- 64, 68, 72, 76, 80, 85, 90, 95, 100, 106,
- 112, 118, 125, 132, 139, 147, 155, 164, 173, 183,
- 193, 204, 215, 227, 240 },
-
- [LC3_SRATE_32K] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,
- 41, 44, 47, 50, 53, 56, 60, 64, 68, 72,
- 76, 81, 86, 91, 97, 103, 109, 116, 123, 131,
- 139, 148, 157, 166, 176, 187, 199, 211, 224, 238,
- 252, 268, 284, 302, 320 },
-
- [LC3_SRATE_48K] = {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 20,
- 22, 24, 26, 28, 30, 32, 34, 36, 39, 42,
- 45, 48, 51, 55, 59, 63, 67, 71, 76, 81,
- 86, 92, 98, 105, 112, 119, 127, 135, 144, 154,
- 164, 175, 186, 198, 211, 225, 240, 256, 273, 291,
- 310, 330, 352, 375, 400 },
- }
+#define __LC3_NUM_BANDS(_lim) \
+ ( sizeof(_lim) / sizeof(*(_lim)) - 1 )
+
+const int lc3_num_bands[LC3_NUM_DT][LC3_NUM_SRATE] = {
+
+ [LC3_DT_2M5] = {
+ LC3_IF_PLUS( __LC3_NUM_BANDS( band_lim_2m5_8k ), 0 ),
+ LC3_IF_PLUS( __LC3_NUM_BANDS( band_lim_2m5_16k ), 0 ),
+ LC3_IF_PLUS( __LC3_NUM_BANDS( band_lim_2m5_24k ), 0 ),
+ LC3_IF_PLUS( __LC3_NUM_BANDS( band_lim_2m5_32k ), 0 ),
+ LC3_IF_PLUS( __LC3_NUM_BANDS( band_lim_2m5_48k ), 0 ),
+ LC3_IF_PLUS( LC3_IF_PLUS_HR(
+ __LC3_NUM_BANDS( band_lim_2m5_48k_hr ), 0 ), 0 ),
+ LC3_IF_PLUS( LC3_IF_PLUS_HR(
+ __LC3_NUM_BANDS( band_lim_2m5_96k_hr ), 0 ), 0 ) },
+
+ [LC3_DT_5M] = {
+ LC3_IF_PLUS( __LC3_NUM_BANDS( band_lim_5m_8k ), 0 ),
+ LC3_IF_PLUS( __LC3_NUM_BANDS( band_lim_5m_16k ), 0 ),
+ LC3_IF_PLUS( __LC3_NUM_BANDS( band_lim_5m_24k ), 0 ),
+ LC3_IF_PLUS( __LC3_NUM_BANDS( band_lim_5m_32k ), 0 ),
+ LC3_IF_PLUS( __LC3_NUM_BANDS( band_lim_5m_48k ), 0 ),
+ LC3_IF_PLUS( LC3_IF_PLUS_HR(
+ __LC3_NUM_BANDS( band_lim_5m_48k_hr ), 0 ), 0 ),
+ LC3_IF_PLUS( LC3_IF_PLUS_HR(
+ __LC3_NUM_BANDS( band_lim_5m_96k_hr ), 0 ), 0 ) },
+
+ [LC3_DT_7M5] = {
+ __LC3_NUM_BANDS( band_lim_7m5_8k ),
+ __LC3_NUM_BANDS( band_lim_7m5_16k ),
+ __LC3_NUM_BANDS( band_lim_7m5_24k ),
+ __LC3_NUM_BANDS( band_lim_7m5_32k ),
+ __LC3_NUM_BANDS( band_lim_7m5_48k ) },
+
+ [LC3_DT_10M] = {
+ __LC3_NUM_BANDS( band_lim_10m_8k ),
+ __LC3_NUM_BANDS( band_lim_10m_16k ),
+ __LC3_NUM_BANDS( band_lim_10m_24k ),
+ __LC3_NUM_BANDS( band_lim_10m_32k ),
+ __LC3_NUM_BANDS( band_lim_10m_48k ),
+ LC3_IF_PLUS_HR( __LC3_NUM_BANDS( band_lim_10m_48k_hr ), 0 ),
+ LC3_IF_PLUS_HR( __LC3_NUM_BANDS( band_lim_10m_96k_hr ), 0 ) },
};
+#undef __LC3_NUM_BANDS
+
/**
- * SNS Quantization (cf. 3.7.4)
+ * SNS Quantization
*/
const float lc3_sns_lfcb[32][8] = {
@@ -2336,7 +4641,7 @@ const int32_t lc3_sns_mpvq_offsets[][11] = {
/**
- * TNS Arithmetic Coding (cf. 3.7.5)
+ * TNS Arithmetic Coding
* The number of bits are given at 2048th of bits
*/
@@ -2442,7 +4747,7 @@ const uint16_t lc3_tns_coeffs_bits[][17] = {
/**
- * Long Term Postfilter Synthesis (cf. 3.7.6)
+ * Long Term Postfilter Synthesis
* with - addition of a 0 for num coefficients
* - remove of first 0 den coefficients
*/
@@ -2597,7 +4902,7 @@ const float *lc3_ltpf_cden[LC3_NUM_SRATE][4] = {
/**
- * Spectral Data Arithmetic Coding (cf. 3.7.7)
+ * Spectral Data Arithmetic Coding
* The number of bits are given at 2048th of bits
*
* The dimensions of the lookup table are set as following :
diff --git a/src/tables.h b/src/tables.h
index 26bd48e..2dc7810 100644
--- a/src/tables.h
+++ b/src/tables.h
@@ -24,6 +24,72 @@
/**
+ * Characteristics
+ *
+ * ns Number of temporal samples / frequency coefficients within a frame
+ *
+ * ne Number of encoded frequency coefficients
+ *
+ * nd Number of MDCT delayed samples, sum of half a frame and an ovelap
+ * of future by 1.25 ms (2.5ms, 5ms and 10ms frame durations),
+ * or 2 ms (7.5ms frame duration).
+ *
+ * nh Number of 18 ms samples of the history buffer, aligned on a frame
+ *
+ * nt Number of 1.25 ms previous samples
+ */
+
+extern const int lc3_ns_2m5[LC3_NUM_SRATE];
+extern const int lc3_ne_2m5[LC3_NUM_SRATE];
+extern const int lc3_ns_4m [LC3_NUM_SRATE];
+
+static inline int lc3_ns(enum lc3_dt dt, enum lc3_srate sr) {
+ return lc3_ns_2m5[sr] * (1 + dt);
+}
+
+static inline int lc3_ne(enum lc3_dt dt, enum lc3_srate sr) {
+ return lc3_ne_2m5[sr] * (1 + dt);
+}
+
+static inline int lc3_nd(enum lc3_dt dt, enum lc3_srate sr) {
+ return ( lc3_ns(dt, sr) +
+ (dt == LC3_DT_7M5 ? lc3_ns_4m[sr] : lc3_ns_2m5[sr]) ) >> 1;
+}
+
+static inline int lc3_nh(enum lc3_dt dt, enum lc3_srate sr) {
+ return sr > LC3_SRATE_48K_HR ? 0 :
+ (8 + (dt == LC3_DT_7M5)) * lc3_ns_2m5[sr];
+}
+
+static inline int lc3_nt(enum lc3_srate sr) {
+ return lc3_ns_2m5[sr] >> 1;
+}
+
+#define LC3_MAX_SRATE_HZ ( LC3_PLUS_HR ? 96000 : 48000 )
+
+#define LC3_MAX_NS ( LC3_NS(10000, LC3_MAX_SRATE_HZ) )
+#define LC3_MAX_NE ( LC3_PLUS_HR ? LC3_MAX_NS : LC3_NS(10000, 40000) )
+
+
+/**
+ * Limits on size of frame
+ */
+
+extern const int lc3_frame_bytes_hr_lim
+ [LC3_NUM_DT][LC3_NUM_SRATE - LC3_SRATE_48K_HR][2];
+
+static inline int lc3_min_frame_bytes(enum lc3_dt dt, enum lc3_srate sr) {
+ return !lc3_hr(sr) ? LC3_MIN_FRAME_BYTES :
+ lc3_frame_bytes_hr_lim[dt][sr - LC3_SRATE_48K_HR][0];
+}
+
+static inline int lc3_max_frame_bytes(enum lc3_dt dt, enum lc3_srate sr) {
+ return !lc3_hr(sr) ? LC3_MAX_FRAME_BYTES :
+ lc3_frame_bytes_hr_lim[dt][sr - LC3_SRATE_48K_HR][1];
+}
+
+
+/**
* MDCT Twiddles and window coefficients
*/
@@ -42,9 +108,10 @@ extern const float *lc3_mdct_win[LC3_NUM_DT][LC3_NUM_SRATE];
* Limits of bands
*/
-#define LC3_NUM_BANDS 64
+#define LC3_MAX_BANDS 64
-extern const int lc3_band_lim[LC3_NUM_DT][LC3_NUM_SRATE][LC3_NUM_BANDS+1];
+extern const int lc3_num_bands[LC3_NUM_DT][LC3_NUM_SRATE];
+extern const int *lc3_band_lim[LC3_NUM_DT][LC3_NUM_SRATE];
/**
diff --git a/src/tns.c b/src/tns.c
index 19bf149..b2b9305 100644
--- a/src/tns.c
+++ b/src/tns.c
@@ -31,7 +31,7 @@
*/
static bool resolve_lpc_weighting(enum lc3_dt dt, int nbytes)
{
- return nbytes < (dt == LC3_DT_7M5 ? 360/8 : 480/8);
+ return nbytes * 8 < 120 * (int)(1 + dt);
}
/**
@@ -52,26 +52,42 @@ LC3_HOT static inline float dot(const float *a, const float *b, int n)
/**
* LPC Coefficients
* dt, bw Duration and bandwidth of the frame
+ * maxorder Maximum order of filter
* x Spectral coefficients
* gain, a Output the prediction gains and LPC coefficients
*/
LC3_HOT static void compute_lpc_coeffs(
- enum lc3_dt dt, enum lc3_bandwidth bw,
+ enum lc3_dt dt, enum lc3_bandwidth bw, int maxorder,
const float *x, float *gain, float (*a)[9])
{
- static const int sub_7m5_nb[] = { 9, 26, 43, 60 };
- static const int sub_7m5_wb[] = { 9, 46, 83, 120 };
- static const int sub_7m5_sswb[] = { 9, 66, 123, 180 };
- static const int sub_7m5_swb[] = { 9, 46, 82, 120, 159, 200, 240 };
- static const int sub_7m5_fb[] = { 9, 56, 103, 150, 200, 250, 300 };
-
- static const int sub_10m_nb[] = { 12, 34, 57, 80 };
- static const int sub_10m_wb[] = { 12, 61, 110, 160 };
- static const int sub_10m_sswb[] = { 12, 88, 164, 240 };
- static const int sub_10m_swb[] = { 12, 61, 110, 160, 213, 266, 320 };
- static const int sub_10m_fb[] = { 12, 74, 137, 200, 266, 333, 400 };
- /* --- Normalized autocorrelation --- */
+#if LC3_PLUS
+
+ static const int sub_2m5_nb[] = { 3, 10, 20 };
+ static const int sub_2m5_wb[] = { 3, 20, 40 };
+ static const int sub_2m5_sswb[] = { 3, 30, 60 };
+ static const int sub_2m5_swb[] = { 3, 40, 80 };
+ static const int sub_2m5_fb[] = { 3, 51, 100 };
+
+ static const int sub_5m_nb[] = { 6, 23, 40 };
+ static const int sub_5m_wb[] = { 6, 43, 80 };
+ static const int sub_5m_sswb[] = { 6, 63, 120 };
+ static const int sub_5m_swb[] = { 6, 43, 80, 120, 160 };
+ static const int sub_5m_fb[] = { 6, 53, 100, 150, 200 };
+
+#endif /* LC3_PLUS */
+
+ static const int sub_7m5_nb[] = { 9, 26, 43, 60 };
+ static const int sub_7m5_wb[] = { 9, 46, 83, 120 };
+ static const int sub_7m5_sswb[] = { 9, 66, 123, 180 };
+ static const int sub_7m5_swb[] = { 9, 46, 82, 120, 159, 200, 240 };
+ static const int sub_7m5_fb[] = { 9, 56, 103, 150, 200, 250, 300 };
+
+ static const int sub_10m_nb[] = { 12, 34, 57, 80 };
+ static const int sub_10m_wb[] = { 12, 61, 110, 160 };
+ static const int sub_10m_sswb[] = { 12, 88, 164, 240 };
+ static const int sub_10m_swb[] = { 12, 61, 110, 160, 213, 266, 320 };
+ static const int sub_10m_fb[] = { 12, 74, 137, 200, 266, 333, 400 };
static const float lag_window[] = {
1.00000000e+00, 9.98028026e-01, 9.92135406e-01, 9.82391584e-01,
@@ -79,32 +95,61 @@ LC3_HOT static void compute_lpc_coeffs(
8.81323137e-01
};
- const int *sub = (const int * const [LC3_NUM_DT][LC3_NUM_SRATE]){
- { sub_7m5_nb, sub_7m5_wb, sub_7m5_sswb, sub_7m5_swb, sub_7m5_fb },
- { sub_10m_nb, sub_10m_wb, sub_10m_sswb, sub_10m_swb, sub_10m_fb },
+ const int *sub = (const int * const [LC3_NUM_DT][LC3_NUM_BANDWIDTH]){
+
+#if LC3_PLUS
+
+ [LC3_DT_2M5] = {
+ sub_2m5_nb, sub_2m5_wb, sub_2m5_sswb, sub_2m5_swb,
+ sub_2m5_fb, sub_2m5_fb, sub_2m5_fb },
+
+ [LC3_DT_5M] = {
+ sub_5m_nb , sub_5m_wb , sub_5m_sswb , sub_5m_swb ,
+ sub_5m_fb , sub_5m_fb , sub_5m_fb },
+
+#endif /* LC3_PLUS */
+
+ [LC3_DT_7M5] = {
+ sub_7m5_nb, sub_7m5_wb, sub_7m5_sswb, sub_7m5_swb,
+ sub_7m5_fb },
+
+ [LC3_DT_10M] = {
+ sub_10m_nb, sub_10m_wb, sub_10m_sswb, sub_10m_swb,
+ sub_10m_fb, sub_10m_fb, sub_10m_fb },
+
}[dt][bw];
- int nfilters = 1 + (bw >= LC3_BANDWIDTH_SWB);
+ /* --- Normalized autocorrelation --- */
+
+ int nfilters = 1 + (dt >= LC3_DT_5M && bw >= LC3_BANDWIDTH_SWB);
+ int nsubdivisions = 2 + (dt >= LC3_DT_7M5);
const float *xs, *xe = x + *sub;
float r[2][9];
for (int f = 0; f < nfilters; f++) {
- float c[9][3];
+ float c[9][3] = { 0 };
- for (int s = 0; s < 3; s++) {
+ for (int s = 0; s < nsubdivisions; s++) {
xs = xe, xe = x + *(++sub);
- for (int k = 0; k < 9; k++)
+ for (int k = 0; k <= maxorder; k++)
c[k][s] = dot(xs, xs + k, (xe - xs) - k);
}
- float e0 = c[0][0], e1 = c[0][1], e2 = c[0][2];
-
- r[f][0] = 3;
- for (int k = 1; k < 9; k++)
- r[f][k] = e0 == 0 || e1 == 0 || e2 == 0 ? 0 :
- (c[k][0]/e0 + c[k][1]/e1 + c[k][2]/e2) * lag_window[k];
+ r[f][0] = nsubdivisions;
+ if (nsubdivisions == 2) {
+ float e0 = c[0][0], e1 = c[0][1];
+ for (int k = 1; k <= maxorder; k++)
+ r[f][k] = e0 == 0 || e1 == 0 ? 0 :
+ (c[k][0]/e0 + c[k][1]/e1) * lag_window[k];
+
+ } else {
+ float e0 = c[0][0], e1 = c[0][1], e2 = c[0][2];
+ for (int k = 1; k <= maxorder; k++)
+ r[f][k] = e0 == 0 || e1 == 0 || e2 == 0 ? 0 :
+ (c[k][0]/e0 + c[k][1]/e1 + c[k][2]/e2) * lag_window[k];
+ }
}
/* --- Levinson-Durbin recursion --- */
@@ -116,7 +161,7 @@ LC3_HOT static void compute_lpc_coeffs(
gain[f] = err;
a0[0] = 1;
- for (int k = 1; k < 9; ) {
+ for (int k = 1; k <= maxorder; ) {
rc = -r[f][k];
for (int i = 1; i < k; i++)
@@ -160,21 +205,22 @@ LC3_HOT static void lpc_weighting(float pred_gain, float *a)
/**
* LPC reflection
- * a LPC coefficients
+ * a, maxorder LPC coefficients, and maximum order (4 or 8)
* rc Output refelection coefficients
*/
-LC3_HOT static void lpc_reflection(const float *a, float *rc)
+LC3_HOT static void lpc_reflection(
+ const float *a, int maxorder, float *rc)
{
float e, b[2][7], *b0, *b1;
- rc[7] = a[1+7];
- e = 1 - rc[7] * rc[7];
+ rc[maxorder-1] = a[maxorder];
+ e = 1 - rc[maxorder-1] * rc[maxorder-1];
b1 = b[1];
- for (int i = 0; i < 7; i++)
- b1[i] = (a[1+i] - rc[7] * a[7-i]) / e;
+ for (int i = 0; i < maxorder-1; i++)
+ b1[i] = (a[1+i] - rc[maxorder-1] * a[(maxorder-1)-i]) / e;
- for (int k = 6; k > 0; k--) {
+ for (int k = maxorder-2; k > 0; k--) {
b0 = b1, b1 = b[k & 1];
rc[k] = b0[k];
@@ -189,22 +235,23 @@ LC3_HOT static void lpc_reflection(const float *a, float *rc)
/**
* Quantization of RC coefficients
- * rc Refelection coefficients
- * rc_order Return order of coefficients
+ * rc, maxorder Refelection coefficients, and maximum order (4 or 8)
+ * order Return order of coefficients
* rc_i Return quantized coefficients
*/
-static void quantize_rc(const float *rc, int *rc_order, int *rc_q)
+static void quantize_rc(const float *rc, int maxorder, int *order, int *rc_q)
{
- /* Quantization table, sin(delta * (i + 0.5)), delta = Pi / 17 */
+ /* Quantization table, sin(delta * (i + 0.5)), delta = Pi / 17,
+ * rounded to fixed point Q15 value (LC3-Plus HR requirements). */
static float q_thr[] = {
- 9.22683595e-02, 2.73662990e-01, 4.45738356e-01, 6.02634636e-01,
- 7.39008917e-01, 8.50217136e-01, 9.32472229e-01, 9.82973100e-01
+ 0x0bcfp-15, 0x2307p-15, 0x390ep-15, 0x4d23p-15,
+ 0x5e98p-15, 0x6cd4p-15, 0x775bp-15, 0x7dd2p-15,
};
- *rc_order = 8;
+ *order = maxorder;
- for (int i = 0; i < 8; i++) {
+ for (int i = 0; i < maxorder; i++) {
float rc_m = fabsf(rc[i]);
rc_q[i] = 4 * (rc_m >= q_thr[4]);
@@ -213,29 +260,28 @@ static void quantize_rc(const float *rc, int *rc_order, int *rc_q)
if (rc[i] < 0)
rc_q[i] = -rc_q[i];
- *rc_order = rc_q[i] != 0 ? 8 : *rc_order - 1;
+ *order = rc_q[i] != 0 ? maxorder : *order - 1;
}
}
/**
* Unquantization of RC coefficients
- * rc_q Quantized coefficients
- * rc_order Order of coefficients
+ * rc_q, order Quantized coefficients, and order
* rc Return refelection coefficients
*/
-static void unquantize_rc(const int *rc_q, int rc_order, float rc[8])
+static void unquantize_rc(const int *rc_q, int order, float rc[8])
{
- /* Quantization table, sin(delta * i), delta = Pi / 17 */
+ /* Quantization table, sin(delta * i), delta = Pi / 17,
+ * rounded to fixed point Q15 value (LC3-Plus HR requirements). */
static float q_inv[] = {
- 0.00000000e+00, 1.83749517e-01, 3.61241664e-01, 5.26432173e-01,
- 6.73695641e-01, 7.98017215e-01, 8.95163302e-01, 9.61825645e-01,
- 9.95734176e-01
+ 0x0000p-15, 0x1785p-15, 0x2e3dp-15, 0x4362p-15,
+ 0x563cp-15, 0x6625p-15, 0x7295p-15, 0x7b1dp-15, 0x7f74p-15,
};
int i;
- for (i = 0; i < rc_order; i++) {
+ for (i = 0; i < order; i++) {
float rc_m = q_inv[LC3_ABS(rc_q[i])];
rc[i] = rc_q[i] < 0 ? -rc_m : rc_m;
}
@@ -256,9 +302,10 @@ LC3_HOT static void forward_filtering(
enum lc3_dt dt, enum lc3_bandwidth bw,
const int rc_order[2], float (* const rc)[8], float *x)
{
- int nfilters = 1 + (bw >= LC3_BANDWIDTH_SWB);
- int nf = LC3_NE(dt, bw) >> (nfilters - 1);
- int i0, ie = 3*(3 + dt);
+ int nfilters = 1 + (dt >= LC3_DT_5M && bw >= LC3_BANDWIDTH_SWB);
+ int nf = lc3_ne(dt, (enum lc3_srate)LC3_MIN(bw, LC3_BANDWIDTH_FB))
+ >> (nfilters - 1);
+ int i0, ie = 3*(1 + dt);
float s[8] = { 0 };
@@ -297,9 +344,10 @@ LC3_HOT static void inverse_filtering(
enum lc3_dt dt, enum lc3_bandwidth bw,
const int rc_order[2], float (* const rc)[8], float *x)
{
- int nfilters = 1 + (bw >= LC3_BANDWIDTH_SWB);
- int nf = LC3_NE(dt, bw) >> (nfilters - 1);
- int i0, ie = 3*(3 + dt);
+ int nfilters = 1 + (dt >= LC3_DT_5M && bw >= LC3_BANDWIDTH_SWB);
+ int nf = lc3_ne(dt, (enum lc3_srate)LC3_MIN(bw, LC3_BANDWIDTH_FB))
+ >> (nfilters - 1);
+ int i0, ie = 3*(1 + dt);
float s[8] = { 0 };
@@ -349,10 +397,11 @@ void lc3_tns_analyze(enum lc3_dt dt, enum lc3_bandwidth bw,
float pred_gain[2], a[2][9];
float rc[2][8];
- data->nfilters = 1 + (bw >= LC3_BANDWIDTH_SWB);
data->lpc_weighting = resolve_lpc_weighting(dt, nbytes);
+ data->nfilters = 1 + (dt >= LC3_DT_5M && bw >= LC3_BANDWIDTH_SWB);
+ int maxorder = dt <= LC3_DT_5M ? 4 : 8;
- compute_lpc_coeffs(dt, bw, x, pred_gain, a);
+ compute_lpc_coeffs(dt, bw, maxorder, x, pred_gain, a);
for (int f = 0; f < data->nfilters; f++) {
@@ -363,9 +412,9 @@ void lc3_tns_analyze(enum lc3_dt dt, enum lc3_bandwidth bw,
if (data->lpc_weighting && pred_gain[f] < 2.f)
lpc_weighting(pred_gain[f], a[f]);
- lpc_reflection(a[f], rc[f]);
+ lpc_reflection(a[f], maxorder, rc[f]);
- quantize_rc(rc[f], &data->rc_order[f], data->rc[f]);
+ quantize_rc(rc[f], maxorder, &data->rc_order[f], data->rc[f]);
unquantize_rc(data->rc[f], data->rc_order[f], rc[f]);
}
@@ -435,10 +484,10 @@ void lc3_tns_put_data(lc3_bits_t *bits, const struct lc3_tns_data *data)
/**
* Get bitstream data
*/
-void lc3_tns_get_data(lc3_bits_t *bits,
+int lc3_tns_get_data(lc3_bits_t *bits,
enum lc3_dt dt, enum lc3_bandwidth bw, int nbytes, lc3_tns_data_t *data)
{
- data->nfilters = 1 + (bw >= LC3_BANDWIDTH_SWB);
+ data->nfilters = 1 + (dt >= LC3_DT_5M && bw >= LC3_BANDWIDTH_SWB);
data->lpc_weighting = resolve_lpc_weighting(dt, nbytes);
for (int f = 0; f < data->nfilters; f++) {
@@ -449,9 +498,13 @@ void lc3_tns_get_data(lc3_bits_t *bits,
data->rc_order[f] += lc3_get_symbol(bits,
lc3_tns_order_models + data->lpc_weighting);
+ if (dt <= LC3_DT_5M && data->rc_order[f] > 4)
+ return -1;
for (int i = 0; i < data->rc_order[f]; i++)
data->rc[f][i] = (int)lc3_get_symbol(bits,
lc3_tns_coeffs_models + i) - 8;
}
+
+ return 0;
}
diff --git a/src/tns.h b/src/tns.h
index 534f191..95d4e67 100644
--- a/src/tns.h
+++ b/src/tns.h
@@ -16,13 +16,6 @@
*
******************************************************************************/
-/**
- * LC3 - Temporal Noise Shaping
- *
- * Reference : Low Complexity Communication Codec (LC3)
- * Bluetooth Specification v1.0
- */
-
#ifndef __LC3_TNS_H
#define __LC3_TNS_H
@@ -82,8 +75,9 @@ void lc3_tns_put_data(lc3_bits_t *bits, const lc3_tns_data_t *data);
* dt, bw Duration and bandwidth of the frame
* nbytes Size in bytes of the frame
* data Bitstream data
+ * return 0: Ok -1: Invalid bitstream data
*/
-void lc3_tns_get_data(lc3_bits_t *bits,
+int lc3_tns_get_data(lc3_bits_t *bits,
enum lc3_dt dt, enum lc3_bandwidth bw, int nbytes, lc3_tns_data_t *data);
/**
diff --git a/tables/fastmath.py b/tables/fastmath.py
index 202561a..0212e06 100755
--- a/tables/fastmath.py
+++ b/tables/fastmath.py
@@ -19,25 +19,33 @@ import numpy as np
import matplotlib.pyplot as plt
-def fast_exp2(x, p):
+def fast_exp2(x, t, p):
p = p.astype(np.float32)
x = x.astype(np.float32)
- y = (((((p[0]*x) + p[1])*x + p[2])*x + p[3])*x + p[4])*x + 1
+ m = ((x + 0.5/8) % (1/8)) - (0.5/8)
+ e = int((x - m) * 8)
- return np.power(y.astype(np.float32), 16)
+ y = ((((p[0]*m) + p[1])*m + p[2])*m + p[3])*m + p[4]
+ y = y * 2**(e // 8) * t[e % 8]
+
+ return y.astype(np.float32)
def approx_exp2():
- x = np.arange(-8, 8, step=1e-3)
+ x = np.arange(0, 1/8, step=1e-6)
+ p = np.polyfit(x, 2 ** x, 4)
+ t = [ 2**(i/8) for i in range(8) ]
+
+ x = np.arange(-10, 10, step=1e-3)
+ y = [ fast_exp2(x[i], t, p) for i in range(len(x)) ]
- p = np.polyfit(x, ((2 ** (x/16)) - 1) / x, 4)
- y = [ fast_exp2(x[i], p) for i in range(len(x)) ]
e = np.abs(y - 2**x) / (2 ** x)
- print('{{ {:14.8e}, {:14.8e}, {:14.8e}, {:14.8e}, {:14.8e} }}'
- .format(p[0], p[1], p[2], p[3], p[4]))
+ print('{{ {:14.8e}, {:14.8e}, {:14.8e}, {:14.8e}, \n'
+ ' {:14.8e}, {:14.8e}, {:14.8e}, {:14.8e}, '.format(*t))
+ print('{{ {:14.8e}, {:14.8e}, {:14.8e}, {:14.8e}, {:14.8e} }}'.format(*p))
print('Max relative error: ', np.max(e))
print('Max RMS error: ', np.sqrt(np.mean(e ** 2)))
diff --git a/tables/mktables.py b/tables/mktables.py
index 4f6f855..3b53ea8 100755
--- a/tables/mktables.py
+++ b/tables/mktables.py
@@ -98,7 +98,7 @@ def print_table(t, m=4):
def mdct_fft_twiddles():
- for n in (10, 20, 30, 40, 60, 80, 90, 120, 160, 180, 240):
+ for n in (10, 20, 30, 40, 60, 80, 90, 120, 160, 180, 240, 480):
print('\n--- fft bf2 twiddles {:3d} ---'.format(n))
@@ -120,7 +120,7 @@ def mdct_fft_twiddles():
def mdct_rot_twiddles():
- for n in (120, 160, 240, 320, 360, 480, 640, 720, 960):
+ for n in (40, 80, 120, 160, 240, 320, 360, 480, 640, 720, 960, 1920):
print('\n--- mdct rot twiddles {:3d} ---'.format(n))
@@ -132,14 +132,6 @@ def mdct_rot_twiddles():
end = '\n' if i%2 == 1 else ' ')
-def mdct_scaling():
-
- print('\n--- mdct scaling ---')
- ns = np.array([ [ 60, 120, 180, 240, 360], [ 80, 160, 240, 320, 480] ])
- print_table(np.sqrt(2 / ns[0]))
- print_table(np.sqrt(2 / ns[1]))
-
-
def tns_lag_window():
print('\n--- tns lag window ---')
@@ -149,9 +141,19 @@ def tns_lag_window():
def tns_quantization_table():
print('\n--- tns quantization table ---')
- print_table(np.sin((np.arange(8) + 0.5) * (np.pi / 17)))
- print_table(np.sin((np.arange(8)) * (np.pi / 17)))
+ xe = np.sin((np.arange(8) + 0.5) * (np.pi / 17))
+ xe = np.rint(xe * 2**15).astype(np.int16)
+
+ xd = np.sin(np.arange(9) * (np.pi / 17))
+ xd = np.rint(xd * 2**15).astype(np.int16)
+
+ for x in (xe, xd):
+ print()
+ for (i, xi) in enumerate(x):
+ print('0x{:04x}p-15,'.format(xi), end = '\n' if i%4 == 4-1 else ' ')
+ if len(x) % 4:
+ print()
def quant_iq_table():
@@ -161,7 +163,7 @@ def quant_iq_table():
def sns_ge_table():
- g_tilt_table = [ 14, 18, 22, 26, 30 ]
+ g_tilt_table = [ 14, 18, 22, 26, 30, 34 ]
for (sr, g_tilt) in enumerate(g_tilt_table):
print('\n--- sns ge table, sr:{} ---'.format(sr))
@@ -175,7 +177,7 @@ def inv_table():
def ltpf_resampler_table():
- for sr in [ 8, 16, 32, 24, 48 ]:
+ for sr in [ 8, 16, 32, 24, 48, 96 ]:
r = 192 // sr
k = 64 if r & (r-1) else 192
@@ -217,7 +219,6 @@ if __name__ == '__main__':
mdct_fft_twiddles()
mdct_rot_twiddles()
- mdct_scaling()
inv_table()
sns_ge_table()
diff --git a/test/attdet.py b/test/attdet.py
index 3b6e9d9..389b547 100644
--- a/test/attdet.py
+++ b/test/attdet.py
@@ -54,7 +54,7 @@ class AttackDetector:
def run(self, nbytes, x):
- ### 3.3.6.2 Downsampling and filtering input
+ ### Downsampling and filtering input
mf = int(16 * self.ms)
@@ -68,7 +68,7 @@ class AttackDetector:
self.xn2 = x_att[-2]
self.xn1 = x_att[-1]
- ### 3.3.6.3 Energy calculation
+ ### Energy calculation
nb = int(self.ms / 2.5)
@@ -82,7 +82,7 @@ class AttackDetector:
self.en1 = e_att[-1]
self.an1 = a_att[-1]
- ### 3.3.6.4 Attack Detection
+ ### Attack Detection
p_att = -1
flags = [ (e_att[i] > 8.5 * a_att[i]) for i in range(nb) ]
@@ -105,7 +105,7 @@ def check_enabling(rng, dt):
ok = True
- for sr in range(T.SRATE_16K, T.NUM_SRATE):
+ for sr in range(T.SRATE_8K, T.SRATE_48K + 1):
attdet = AttackDetector(dt, sr)
@@ -151,17 +151,19 @@ def check_unit(rng, dt, sr):
def check_appendix_c(dt):
+ i0 = dt - T.DT_7M5
sr = T.SRATE_48K
+ ok = True
state = initial_state()
- x = np.append(np.zeros(6), C.X_PCM_ATT[dt][0])
- f_att = lc3.attdet_run(dt, sr, C.NBYTES_ATT[dt], state, x)
- ok = f_att == C.F_ATT[dt][0]
+ x = np.append(np.zeros(6), C.X_PCM_ATT[i0][0])
+ f_att = lc3.attdet_run(dt, sr, C.NBYTES_ATT[i0], state, x)
+ ok = ok and f_att == C.F_ATT[i0][0]
- x = np.append(x[-6:], C.X_PCM_ATT[dt][1])
- f_att = lc3.attdet_run(dt, sr, C.NBYTES_ATT[dt], state, x)
- ok = f_att == C.F_ATT[dt][1]
+ x = np.append(x[-6:], C.X_PCM_ATT[i0][1])
+ f_att = lc3.attdet_run(dt, sr, C.NBYTES_ATT[i0], state, x)
+ ok = ok and f_att == C.F_ATT[i0][1]
return ok
@@ -173,11 +175,11 @@ def check():
for dt in range(T.NUM_DT):
ok and check_enabling(rng, dt)
- for dt in range(T.NUM_DT):
- for sr in range(T.SRATE_32K, T.NUM_SRATE):
+ for dt in ( T.DT_7M5, T.DT_10M ):
+ for sr in ( T.SRATE_32K, T.SRATE_48K ):
ok = ok and check_unit(rng, dt, sr)
- for dt in range(T.NUM_DT):
+ for dt in ( T.DT_7M5, T.DT_10M ):
ok = ok and check_appendix_c(dt)
return ok
diff --git a/test/attdet_py.c b/test/attdet_py.c
index d85a8a5..95da0ef 100644
--- a/test/attdet_py.c
+++ b/test/attdet_py.c
@@ -37,7 +37,7 @@ static PyObject *attdet_run_py(PyObject *m, PyObject *args)
CTYPES_CHECK("sr", (unsigned)sr < LC3_NUM_SRATE);
CTYPES_CHECK(NULL, attdet_obj = to_attdet_analysis(attdet_obj, &attdet));
- int ns = LC3_NS(dt, sr);
+ int ns = lc3_ns(dt, sr);
CTYPES_CHECK("x", x_obj = to_1d_ptr(x_obj, NPY_INT16, ns+6, &x));
diff --git a/test/bwdet.py b/test/bwdet.py
index 88d7c8c..d56d039 100644
--- a/test/bwdet.py
+++ b/test/bwdet.py
@@ -21,11 +21,15 @@ import tables as T, appendix_c as C
BW_START = [
+ [ [], [ 24 ], [ 24, 35 ], [ 24, 33, 39 ], [ 22, 31, 37, 41 ] ],
+ [ [], [ 39 ], [ 35, 47 ], [ 34, 44, 50 ], [ 32, 42, 48, 52 ] ],
[ [], [ 51 ], [ 45, 58 ], [ 42, 53, 60 ], [ 40, 51, 57, 61 ] ],
[ [], [ 53 ], [ 47, 59 ], [ 44, 54, 60 ], [ 41, 51, 57, 61 ] ]
]
BW_STOP = [
+ [ [], [ 34 ], [ 32, 39 ], [ 31, 38, 42 ], [ 29, 35, 40, 43 ] ],
+ [ [], [ 49 ], [ 44, 51 ], [ 42, 49, 53 ], [ 40, 46, 51, 54 ] ],
[ [], [ 63 ], [ 55, 63 ], [ 51, 58, 63 ], [ 48, 55, 60, 63 ] ],
[ [], [ 63 ], [ 56, 63 ], [ 52, 59, 63 ], [ 49, 55, 60, 63 ] ]
]
@@ -33,8 +37,8 @@ BW_STOP = [
TQ = [ 20, 10, 10, 10 ]
TC = [ 15, 23, 20, 20 ]
-L = [ [ 4, 4, 3, 2 ], [ 4, 4, 3, 1 ] ]
-
+L = [ [ 4, 4, 3, 1 ], [ 4, 4, 3, 1 ],
+ [ 4, 4, 3, 2 ], [ 4, 4, 3, 1 ] ]
### ------------------------------------------------------------------------ ###
@@ -131,11 +135,13 @@ def check_unit(rng, dt, sr):
def check_appendix_c(dt):
+ i0 = dt - T.DT_7M5
sr = T.SRATE_16K
+
ok = True
- E_B = C.E_B[dt]
- P_BW = C.P_BW[dt]
+ E_B = C.E_B[i0]
+ P_BW = C.P_BW[i0]
bw = lc3.bwdet_run(dt, sr, E_B[0])
ok = ok and bw == P_BW[0]
@@ -151,10 +157,10 @@ def check():
ok = True
for dt in range(T.NUM_DT):
- for sr in range(T.NUM_SRATE):
+ for sr in range(T.SRATE_8K, T.SRATE_48K + 1):
ok = ok and check_unit(rng, dt, sr)
- for dt in range(T.NUM_DT):
+ for dt in ( T.DT_7M5, T.DT_10M ):
ok = ok and check_appendix_c(dt)
return ok
diff --git a/test/bwdet_py.c b/test/bwdet_py.c
index c2decb3..c029997 100644
--- a/test/bwdet_py.c
+++ b/test/bwdet_py.c
@@ -31,9 +31,9 @@ static PyObject *bwdet_run_py(PyObject *m, PyObject *args)
if (!PyArg_ParseTuple(args, "IIO", &dt, &sr, &e_obj))
return NULL;
- CTYPES_CHECK("dt", (unsigned)dt < LC3_NUM_DT);
- CTYPES_CHECK("sr", (unsigned)sr < LC3_NUM_SRATE);
- CTYPES_CHECK("e", to_1d_ptr(e_obj, NPY_FLOAT, LC3_NUM_BANDS, &e));
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("sr", sr < LC3_NUM_SRATE);
+ CTYPES_CHECK("e", to_1d_ptr(e_obj, NPY_FLOAT, LC3_MAX_BANDS, &e));
int bw = lc3_bwdet_run(dt, sr, e);
diff --git a/test/ctypes.h b/test/ctypes.h
index 2442657..c619c78 100644
--- a/test/ctypes.h
+++ b/test/ctypes.h
@@ -701,9 +701,9 @@ static PyObject *from_encoder(PyObject *obj, const struct lc3_encoder *enc)
{
unsigned dt = enc->dt, sr = enc->sr;
unsigned sr_pcm = enc->sr_pcm;
- int ns = LC3_NS(dt, sr);
- int nd = LC3_ND(dt, sr);
- int nt = LC3_NT(sr);
+ int ns = lc3_ns(dt, sr);
+ int nd = lc3_nd(dt, sr);
+ int nt = lc3_nt(sr);
if (!obj) obj = PyDict_New();
@@ -759,9 +759,9 @@ static PyObject *to_encoder(PyObject *obj, struct lc3_encoder *enc)
CTYPES_CHECK("encoder.s_pcmr",
(unsigned)(enc->sr_pcm = sr_pcm) < LC3_NUM_SRATE);
- int ns = LC3_NS(dt, sr);
- int nd = LC3_ND(dt, sr);
- int nt = LC3_NT(sr);
+ int ns = lc3_ns(dt, sr);
+ int nd = lc3_nd(dt, sr);
+ int nt = lc3_nt(sr);
CTYPES_CHECK(NULL, to_attdet_analysis(
PyDict_GetItemString(obj, "attdet"), &enc->attdet));
@@ -796,9 +796,9 @@ static PyObject *from_decoder(PyObject *obj, const struct lc3_decoder *dec)
unsigned dt = dec->dt, sr = dec->sr;
unsigned sr_pcm = dec->sr_pcm;
unsigned xs_pos = dec->xs_off - dec->xh_off;
- int nh = LC3_NH(dt, sr);
- int ns = LC3_NS(dt, sr);
- int nd = LC3_ND(dt, sr);
+ int nh = lc3_nh(dt, sr);
+ int ns = lc3_ns(dt, sr);
+ int nd = lc3_nd(dt, sr);
if (!obj) obj = PyDict_New();
@@ -818,7 +818,7 @@ static PyObject *from_decoder(PyObject *obj, const struct lc3_decoder *dec)
new_plc_state(&dec->plc));
PyDict_SetItemString(obj, "xh",
- new_1d_copy(NPY_FLOAT, nh, dec->x + dec->xh_off));
+ new_1d_copy(NPY_FLOAT, nh + ns, dec->x + dec->xh_off));
PyDict_SetItemString(obj, "xs_pos",
new_scalar(NPY_INT, &xs_pos));
@@ -853,9 +853,9 @@ static PyObject *to_decoder(PyObject *obj, struct lc3_decoder *dec)
CTYPES_CHECK("decoder.sr_pcm",
(unsigned)(dec->sr_pcm = sr_pcm) < LC3_NUM_SRATE);
- int nh = LC3_NH(dt, sr);
- int ns = LC3_NS(dt, sr);
- int nd = LC3_ND(dt, sr);
+ int nh = lc3_nh(dt, sr);
+ int ns = lc3_ns(dt, sr);
+ int nd = lc3_nd(dt, sr);
CTYPES_CHECK(NULL, to_ltpf_synthesis(
PyDict_GetItemString(obj, "ltpf"), &dec->ltpf));
@@ -865,7 +865,7 @@ static PyObject *to_decoder(PyObject *obj, struct lc3_decoder *dec)
CTYPES_CHECK("decoder.xh", xh_obj = to_1d_copy(
PyDict_GetItemString(obj, "xh"), NPY_FLOAT,
- dec->x + dec->xh_off, nh));
+ dec->x + dec->xh_off, nh + ns));
PyDict_SetItemString(obj, "xh", xh_obj);
CTYPES_CHECK("decoder.xs", to_scalar(
diff --git a/test/decoder.py b/test/decoder.py
index 378871c..4dd8486 100755..100644
--- a/test/decoder.py
+++ b/test/decoder.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python3
#
# Copyright 2022 Google LLC
#
@@ -27,8 +26,6 @@ import tables as T, appendix_c as C
import mdct, energy, bwdet, sns, tns, spec, ltpf
import bitstream
-### ------------------------------------------------------------------------ ###
-
class Decoder:
def __init__(self, dt_ms, sr_hz):
@@ -84,7 +81,7 @@ class Decoder:
x = np.append(x, np.zeros(self.ns - self.ne))
x = self.mdct.run(x)
- x = self.ltpf.run(x, len(data))
+ x = self.ltpf.run(x)
return x
@@ -96,18 +93,17 @@ class Decoder:
return x
-### ------------------------------------------------------------------------ ###
-
def check_appendix_c(dt):
- ok = True
+ i0 = dt - T.DT_7M5
dec_c = lc3.setup_decoder(int(T.DT_MS[dt] * 1000), 16000)
+ ok = True
- for i in range(len(C.BYTES_AC[dt])):
+ for i in range(len(C.BYTES_AC[i0])):
- pcm = lc3.decode(dec_c, bytes(C.BYTES_AC[dt][i]))
- ok = ok and np.max(np.abs(pcm - C.X_HAT_CLIP[dt][i])) < 1
+ pcm = lc3.decode(dec_c, bytes(C.BYTES_AC[i0][i]))
+ ok = ok and np.max(np.abs(pcm - C.X_HAT_CLIP[i0][i])) < 1
return ok
@@ -115,83 +111,7 @@ def check():
ok = True
- for dt in range(T.NUM_DT):
+ for dt in range(T.DT_7M5, T.NUM_DT):
ok = ok and check_appendix_c(dt)
return ok
-
-### ------------------------------------------------------------------------ ###
-
-if __name__ == "__main__":
-
- parser = argparse.ArgumentParser(description='LC3 Decoder Test Framework')
- parser.add_argument('lc3_file',
- help='Input bitstream file', type=argparse.FileType('r'))
- parser.add_argument('--pyout',
- help='Python output file', type=argparse.FileType('w'))
- parser.add_argument('--cout',
- help='C output file', type=argparse.FileType('w'))
- args = parser.parse_args()
-
- ### File Header ###
-
- f_lc3 = open(args.lc3_file.name, 'rb')
-
- header = struct.unpack('=HHHHHHHI', f_lc3.read(18))
-
- if header[0] != 0xcc1c:
- raise ValueError('Invalid bitstream file')
-
- if header[4] != 1:
- raise ValueError('Unsupported number of channels')
-
- sr_hz = header[2] * 100
- bitrate = header[3] * 100
- nchannels = header[4]
- dt_ms = header[5] / 100
-
- f_lc3.seek(header[1])
-
- ### Setup ###
-
- dec = Decoder(dt_ms, sr_hz)
- dec_c = lc3.setup_decoder(int(dt_ms * 1000), sr_hz)
-
- pcm_c = np.empty(0).astype(np.int16)
- pcm_py = np.empty(0).astype(np.int16)
-
- ### Decoding loop ###
-
- nframes = 0
-
- while True:
-
- data = f_lc3.read(2)
- if len(data) != 2:
- break
-
- (frame_nbytes,) = struct.unpack('=H', data)
-
- print('Decoding frame %d' % nframes, end='\r')
-
- data = f_lc3.read(frame_nbytes)
-
- x = dec.run(data)
- pcm_py = np.append(pcm_py,
- np.clip(np.round(x), -32768, 32767).astype(np.int16))
-
- x_c = lc3.decode(dec_c, data)
- pcm_c = np.append(pcm_c, x_c)
-
- nframes += 1
-
- print('done ! %16s' % '')
-
- ### Terminate ###
-
- if args.pyout:
- wavfile.write(args.pyout.name, sr_hz, pcm_py)
- if args.cout:
- wavfile.write(args.cout.name, sr_hz, pcm_c)
-
-### ------------------------------------------------------------------------ ###
diff --git a/test/encoder.py b/test/encoder.py
index 6395524..913420e 100755..100644
--- a/test/encoder.py
+++ b/test/encoder.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python3
#
# Copyright 2022 Google LLC
#
@@ -28,8 +27,6 @@ import attdet, ltpf
import mdct, energy, bwdet, sns, tns, spec
import bitstream
-### ------------------------------------------------------------------------ ###
-
class Encoder:
def __init__(self, dt_ms, sr_hz):
@@ -104,18 +101,17 @@ class Encoder:
return data
-### ------------------------------------------------------------------------ ###
-
def check_appendix_c(dt):
- ok = True
+ i0 = dt - T.DT_7M5
enc_c = lc3.setup_encoder(int(T.DT_MS[dt] * 1000), 16000)
+ ok = True
- for i in range(len(C.X_PCM[dt])):
+ for i in range(len(C.X_PCM[i0])):
- data = lc3.encode(enc_c, C.X_PCM[dt][i], C.NBYTES[dt])
- ok = ok and data == C.BYTES_AC[dt][i]
+ data = lc3.encode(enc_c, C.X_PCM[i0][i], C.NBYTES[i0])
+ ok = ok and data == C.BYTES_AC[i0][i]
return ok
@@ -123,90 +119,7 @@ def check():
ok = True
- for dt in range(T.NUM_DT):
+ for dt in ( T.DT_7M5, T.DT_10M ):
ok = ok and check_appendix_c(dt)
return ok
-
-### ------------------------------------------------------------------------ ###
-
-def dump(data):
- for i in range(0, len(data), 20):
- print(''.join('{:02x} '.format(x)
- for x in data[i:min(i+20, len(data))] ))
-
-if __name__ == "__main__":
-
- parser = argparse.ArgumentParser(description='LC3 Encoder Test Framework')
- parser.add_argument('wav_file',
- help='Input wave file', type=argparse.FileType('r'))
- parser.add_argument('--bitrate',
- help='Bitrate in bps', type=int, required=True)
- parser.add_argument('--dt',
- help='Frame duration in ms', type=float, default=10)
- parser.add_argument('--pyout',
- help='Python output file', type=argparse.FileType('w'))
- parser.add_argument('--cout',
- help='C output file', type=argparse.FileType('w'))
- args = parser.parse_args()
-
- if args.bitrate < 16000 or args.bitrate > 320000:
- raise ValueError('Invalid bitate %d bps' % args.bitrate)
-
- if args.dt not in (7.5, 10):
- raise ValueError('Invalid frame duration %.1f ms' % args.dt)
-
- (sr_hz, pcm) = wavfile.read(args.wav_file.name)
- if sr_hz not in (8000, 16000, 24000, 320000, 48000):
- raise ValueError('Unsupported input samplerate: %d' % sr_hz)
- if pcm.ndim != 1:
- raise ValueError('Only single channel wav file supported')
-
- ### Setup ###
-
- enc = Encoder(args.dt, sr_hz)
- enc_c = lc3.setup_encoder(int(args.dt * 1000), sr_hz)
-
- frame_samples = int((args.dt * sr_hz) / 1000)
- frame_nbytes = int((args.bitrate * args.dt) / (1000 * 8))
-
- ### File Header ###
-
- f_py = open(args.pyout.name, 'wb') if args.pyout else None
- f_c = open(args.cout.name , 'wb') if args.cout else None
-
- header = struct.pack('=HHHHHHHI', 0xcc1c, 18,
- sr_hz // 100, args.bitrate // 100, 1, int(args.dt * 100), 0, len(pcm))
-
- for f in (f_py, f_c):
- if f: f.write(header)
-
- ### Encoding loop ###
-
- if len(pcm) % frame_samples > 0:
- pcm = np.append(pcm, np.zeros(frame_samples - (len(pcm) % frame_samples)))
-
- for i in range(0, len(pcm), frame_samples):
-
- print('Encoding frame %d' % (i // frame_samples), end='\r')
-
- frame_pcm = pcm[i:i+frame_samples]
-
- data = enc.run(frame_pcm, frame_nbytes)
- data_c = lc3.encode(enc_c, frame_pcm, frame_nbytes)
-
- for f in (f_py, f_c):
- if f: f.write(struct.pack('=H', frame_nbytes))
-
- if f_py: f_py.write(data)
- if f_c: f_c.write(data_c)
-
- print('done ! %16s' % '')
-
- ### Terminate ###
-
- for f in (f_py, f_c):
- if f: f.close()
-
-
-### ------------------------------------------------------------------------ ###
diff --git a/test/energy.py b/test/energy.py
index a1bc5c3..8bca9c0 100644
--- a/test/energy.py
+++ b/test/energy.py
@@ -33,10 +33,10 @@ class EnergyBand:
e = [ np.mean(np.square(x[self.I[i]:self.I[i+1]]))
for i in range(len(self.I)-1) ]
- e_lo = np.sum(e[:len(e) - [4, 2][self.dt]])
- e_hi = np.sum(e[len(e) - [4, 2][self.dt]:])
+ e_lo = np.sum(e[:len(e) - [2, 3, 4, 2][self.dt]])
+ e_hi = np.sum(e[len(e) - [2, 3, 4, 2][self.dt]:])
- return np.append(e, np.zeros(64-len(e))), (e_hi > 30*e_lo)
+ return e, (e_hi > 30*e_lo)
### ------------------------------------------------------------------------ ###
@@ -63,14 +63,16 @@ def check_unit(rng, dt, sr):
def check_appendix_c(dt):
+ i0 = dt - T.DT_7M5
sr = T.SRATE_16K
+
ok = True
- e = lc3.energy_compute(dt, sr, C.X[dt][0])[0]
- ok = ok and np.amax(np.abs(1 - e/C.E_B[dt][0])) < 1e-6
+ e = lc3.energy_compute(dt, sr, C.X[i0][0])[0]
+ ok = ok and np.amax(np.abs(1 - e/C.E_B[i0][0])) < 1e-6
- e = lc3.energy_compute(dt, sr, C.X[dt][1])[0]
- ok = ok and np.amax(np.abs(1 - e/C.E_B[dt][1])) < 1e-6
+ e = lc3.energy_compute(dt, sr, C.X[i0][1])[0]
+ ok = ok and np.amax(np.abs(1 - e/C.E_B[i0][1])) < 1e-6
return ok
@@ -81,10 +83,14 @@ def check():
ok = True
for dt in range(T.NUM_DT):
- for sr in range(T.NUM_SRATE):
+ for sr in range(T.SRATE_8K, T.SRATE_48K + 1):
ok = ok and check_unit(rng, dt, sr)
- for dt in range(T.NUM_DT):
+ for dt in ( T.DT_2M5, T.DT_5M, T.DT_10M ):
+ for sr in ( T.SRATE_48K_HR, T.SRATE_96K_HR ):
+ ok = ok and check_unit(rng, dt, sr)
+
+ for dt in ( T.DT_7M5, T.DT_10M ):
ok = ok and check_appendix_c(dt)
return ok
diff --git a/test/energy_py.c b/test/energy_py.c
index 3b65ba5..98b7fba 100644
--- a/test/energy_py.c
+++ b/test/energy_py.c
@@ -34,13 +34,13 @@ static PyObject *energy_compute_py(PyObject *m, PyObject *args)
if (!PyArg_ParseTuple(args, "IIO", &dt, &sr, &x_obj))
return NULL;
- CTYPES_CHECK("dt", (unsigned)dt < LC3_NUM_DT);
- CTYPES_CHECK("sr", (unsigned)sr < LC3_NUM_SRATE);
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("sr", sr < LC3_NUM_SRATE);
- int ns = LC3_NS(dt, sr);
+ int ns = lc3_ns(dt, sr);
CTYPES_CHECK("x", to_1d_ptr(x_obj, NPY_FLOAT, ns, &x));
- e_obj = new_1d_ptr(NPY_FLOAT, LC3_NUM_BANDS, &e);
+ e_obj = new_1d_ptr(NPY_FLOAT, lc3_num_bands[dt][sr], &e);
int nn_flag = lc3_energy_compute(dt, sr, x, e);
diff --git a/test/lc3_py.c b/test/lc3_py.c
index 2984beb..0528d04 100644
--- a/test/lc3_py.c
+++ b/test/lc3_py.c
@@ -61,7 +61,7 @@ static PyObject *encode_py(PyObject *m, PyObject *args)
CTYPES_CHECK(NULL, encoder_obj = to_encoder(encoder_obj, encoder));
- int ns = LC3_NS(encoder->dt, encoder->sr);
+ int ns = lc3_ns(encoder->dt, encoder->sr);
CTYPES_CHECK("x", pcm_obj = to_1d_ptr(pcm_obj, NPY_INT16, ns, &pcm));
CTYPES_CHECK("nbytes", nbytes >= 20 && nbytes <= 400);
@@ -114,7 +114,7 @@ static PyObject *decode_py(PyObject *m, PyObject *args)
CTYPES_CHECK(NULL, decoder_obj = to_decoder(decoder_obj, decoder));
- int ns = LC3_NS(decoder->dt, decoder->sr);
+ int ns = lc3_ns(decoder->dt, decoder->sr);
pcm_obj = new_1d_ptr(NPY_INT16, ns, &pcm);
lc3_decode(decoder, in, nbytes, LC3_PCM_FORMAT_S16, pcm, 1);
diff --git a/test/ltpf.py b/test/ltpf.py
index f60dc71..ec07c1a 100644
--- a/test/ltpf.py
+++ b/test/ltpf.py
@@ -31,7 +31,7 @@ class Resampler_12k8:
self.w = 240 // self.p
self.n = ((T.DT_MS[dt] * 128) / 10).astype(int)
- self.d = [ 44, 24 ][dt]
+ self.d = [ 24, 44 ][dt == T.DT_7M5]
self.x = np.zeros(self.w + T.NS[dt][sr])
self.u = np.zeros(self.n + 2)
@@ -59,7 +59,7 @@ class Resampler_12k8:
x = self.x
u = self.u
- ### 3.3.9.3 Resampling
+ ### Resampling
h = np.zeros(240 + p)
h[-119:] = T.LTPF_H12K8[:119]
@@ -74,7 +74,7 @@ class Resampler_12k8:
if self.sr == T.SRATE_8K:
u = 0.5 * u
- ### 3.3.9.4 High-pass filtering
+ ### High-pass filtering
b = [ 0.9827947082978771, -1.9655894165957540, 0.9827947082978771 ]
a = [ 1 , -1.9652933726226904, 0.9658854605688177 ]
@@ -110,7 +110,7 @@ class Resampler_6k4:
if len(self.y) > n:
self.y[-n:] = self.y[:n]
- ### 3.3.9.5 Downsampling to 6.4 KHz
+ ### Downsampling to 6.4 KHz
h = [ 0.1236796411180537, 0.2353512128364889, 0.2819382920909148,
0.2353512128364889, 0.1236796411180537 ]
@@ -140,11 +140,11 @@ class LtpfAnalysis(Ltpf):
super().__init__(dt, sr)
- self.resampler_12k8 = Resampler_12k8(
- dt, sr, history = 232)
+ self.resampler_12k8 = Resampler_12k8(dt, sr,
+ history = 232 + (32 if dt == T.DT_2M5 else 0))
- self.resampler_6k4 = Resampler_6k4(
- self.resampler_12k8.n, history = 114)
+ self.resampler_6k4 = Resampler_6k4(self.resampler_12k8.n,
+ history = 114 + (16 if dt == T.DT_2M5 else 0))
self.active = False
self.tc = 0
@@ -160,30 +160,32 @@ class LtpfAnalysis(Ltpf):
return 1 + 10 * int(self.pitch_present)
- def correlate(self, x, n, k0, k1):
+ def correlate(self, x, i0, n, k0, k1):
- return [ np.dot(x[:n], np.take(x, np.arange(n) - k)) \
- for k in range(k0, 1+k1) ]
+ return np.array([ np.dot(
+ np.take(x, np.arange(i0, n)),
+ np.take(x, np.arange(i0, n) - k)) for k in range(k0, 1+k1) ])
- def norm_corr(self, x, n, k):
+ def norm_corr(self, x, i0, n, k):
- u = x[:n]
- v = np.take(x, np.arange(n) - k)
+ u = np.take(x, np.arange(i0, n))
+ v = np.take(x, np.arange(i0, n) - k)
uv = np.dot(u, v)
return uv / np.sqrt(np.dot(u, u) * np.dot(v, v)) if uv > 0 else 0
def run(self, x):
- ### 3.3.9.3-4 Resampling
+ ### Resampling
x_12k8 = self.resampler_12k8.resample(x)
- ### 3.3.9.5-6 Pitch detection algorithm
+ ### Pitch detection algorithm
- x = self.resampler_6k4.resample(x_12k8)
- n = self.resampler_6k4.n
+ x = self.resampler_6k4.resample(x_12k8)
+ i0 = [-16, 0][self.dt > T.DT_2M5]
+ n = self.resampler_6k4.n
- r = self.correlate(x, n, 17, 114)
+ r = self.correlate(x, i0, n, 17, 114)
rw = r * (1 - 0.5 * np.arange(len(r)) / (len(r) - 1))
tc = self.tc
@@ -191,23 +193,24 @@ class LtpfAnalysis(Ltpf):
k1 = min(len(r)-1, tc+4)
t = [ 17 + np.argmax(rw), 17 + k0 + np.argmax(r[k0:1+k1]) ]
- nc = [ self.norm_corr(x, n, t[i]) for i in range(2) ]
+ nc = [ self.norm_corr(x, i0, n, t[i]) for i in range(2) ]
ti = int(nc[1] > 0.85 * nc[0])
self.tc = t[ti] - 17
self.pitch_present = bool(nc[ti] > 0.6)
- ### 3.3.9.7 Pitch-lag parameter
+ ### Pitch-lag parameter
if self.pitch_present:
tc = self.tc + 17
- x = x_12k8
- n = self.resampler_12k8.n
+ x = x_12k8
+ i0 = [-32, 0][self.dt > T.DT_2M5]
+ n = self.resampler_12k8.n
k0 = max( 32, 2*tc-4)
k1 = min(228, 2*tc+4)
- r = self.correlate(x, n, k0-4, k1+4)
+ r = self.correlate(x, i0, n, k0-4, k1+4)
e = k0 + np.argmax(r[4:-4])
h = np.zeros(42)
@@ -232,17 +235,21 @@ class LtpfAnalysis(Ltpf):
e = f = 0
self.pitch_index = 0
- ### 3.3.9.8 Activation bit
+ ### Activation bit
h = np.zeros(24)
h[-7:] = T.LTPF_HI[:7]
h[ :8] = T.LTPF_HI[7:]
+ x = x_12k8
+ i0 = [-32, 0][self.dt > T.DT_2M5]
+ n = self.resampler_12k8.n
+
k = np.arange(-2, 3)
u = [ np.dot( np.take(x, i-k), np.take(h, 4*k) ) \
- for i in range(n) ]
+ for i in range(i0, n) ]
v = [ np.dot( np.take(x, i-k), np.take(h, 4*k-f) ) \
- for i in range(-e, n-e) ]
+ for i in range(i0-e, n-e) ]
nc = max(0, np.dot(u, v)) / np.sqrt(np.dot(u, u) * np.dot(v, v)) \
if self.pitch_present else 0
@@ -327,7 +334,7 @@ class LtpfSynthesis(Ltpf):
sr = self.sr
dt = self.dt
- ### 3.4.9.4 Filter parameters
+ ### Filter parameters
pitch_index = self.pitch_index
@@ -346,7 +353,12 @@ class LtpfSynthesis(Ltpf):
self.p_e[0] = int(p * 4 + 0.5) // 4
self.p_f[0] = int(p * 4 + 0.5) - 4*self.p_e[0]
- nbits = round(nbytes*80 / T.DT_MS[dt])
+ nbits = round(nbytes*8 * 10 / T.DT_MS[dt])
+ if dt == T.DT_2M5:
+ nbits = int(nbits * (1 - 0.4))
+ elif dt == T.DT_5M:
+ nbits = nbits - 160
+
g_idx = max(nbits // 80, 3+sr) - (3+sr)
g = [ 0.4, 0.35, 0.3, 0.25 ][g_idx] if g_idx < 4 else 0
@@ -355,7 +367,7 @@ class LtpfSynthesis(Ltpf):
self.c_n[0] = 0.85 * g * LtpfSynthesis.C_N[sr][g_idx]
self.c_d[0] = g * LtpfSynthesis.C_D[sr][self.p_f[0]]
- ### 3.4.9.2 Transition handling
+ ### Transition handling
n0 = (T.SRATE_KHZ[sr] * 1000) // 400
ns = T.NS[dt][sr]
@@ -402,8 +414,7 @@ class LtpfSynthesis(Ltpf):
np.dot(c_d[0], np.take(y , k - d[0] - np.arange(l_d)))
y[k] = yc[k] - (k/n0) * u
-
- ### 3.4.9.3 Remainder of the frame
+ ### Remainder of the frame
for k in range(n0, ns):
@@ -466,28 +477,30 @@ def check_resampler(rng, dt, sr):
def check_resampler_appendix_c(dt):
+ i0 = dt - T.DT_7M5
sr = T.SRATE_16K
+
ok = True
nt = (5 * T.SRATE_KHZ[sr]) // 4
- n = [ 96, 128 ][dt]
- k = [ 44, 24 ][dt] + n
+ n = [ 96, 128 ][i0]
+ k = [ 44, 24 ][i0] + n
state = initial_hp50_state()
- x = np.append(np.zeros(nt), C.X_PCM[dt][0])
+ x = np.append(np.zeros(nt), C.X_PCM[i0][0])
y = np.zeros(384)
y = lc3.ltpf_resample(dt, sr, state, x, y)
- u = y[-k:len(C.X_TILDE_12K8D[dt][0])-k]
+ u = y[-k:len(C.X_TILDE_12K8D[i0][0])-k]
- ok = ok and np.amax(np.abs(u - C.X_TILDE_12K8D[dt][0]/2)) < 2
+ ok = ok and np.amax(np.abs(u - C.X_TILDE_12K8D[i0][0]/2)) < 2
- x = np.append(x[-nt:], C.X_PCM[dt][1])
+ x = np.append(x[-nt:], C.X_PCM[i0][1])
y[:-n] = y[n:]
y = lc3.ltpf_resample(dt, sr, state, x, y)
- u = y[-k:len(C.X_TILDE_12K8D[dt][1])-k]
+ u = y[-k:len(C.X_TILDE_12K8D[i0][1])-k]
- ok = ok and np.amax(np.abs(u - C.X_TILDE_12K8D[dt][1]/2)) < 2
+ ok = ok and np.amax(np.abs(u - C.X_TILDE_12K8D[i0][1]/2)) < 2
return ok
@@ -503,7 +516,7 @@ def check_analysis(rng, dt, sr):
ltpf = LtpfAnalysis(dt, sr)
t = np.arange(100 * ns) / (T.SRATE_KHZ[sr] * 1000)
- s = signal.chirp(t, f0=10, f1=3e3, t1=t[-1], method='logarithmic')
+ s = signal.chirp(t, f0=10, f1=2500, t1=t[-1], method='logarithmic')
for i in range(20):
@@ -516,7 +529,7 @@ def check_analysis(rng, dt, sr):
(pitch_present_c, data_c) = lc3.ltpf_analyse(dt, sr, state_c, x_c)
ok = ok and (not pitch_present or state_c['tc'] == ltpf.tc)
- ok = ok and np.amax(np.abs(state_c['nc'][0] - ltpf.nc[0])) < 1e-2
+ ok = ok and np.amax(np.abs(state_c['nc'][0] - ltpf.nc[0])) < 1e-1
ok = ok and pitch_present_c == pitch_present
ok = ok and data_c['active'] == data['active']
ok = ok and data_c['pitch_index'] == data['pitch_index']
@@ -537,6 +550,7 @@ def check_synthesis(rng, dt, sr):
x_c = np.zeros(nd+ns)
for i in range(50):
+
pitch_present = bool(rng.integers(0, 10) >= 1)
if not pitch_present:
synthesis.disable()
@@ -563,37 +577,40 @@ def check_synthesis(rng, dt, sr):
def check_analysis_appendix_c(dt):
+ i0 = dt - T.DT_7M5
sr = T.SRATE_16K
- nt = (5 * T.SRATE_KHZ[sr]) // 4
+
ok = True
+ nt = (5 * T.SRATE_KHZ[sr]) // 4
+
state = initial_state()
- x = np.append(np.zeros(nt), C.X_PCM[dt][0])
+ x = np.append(np.zeros(nt), C.X_PCM[i0][0])
(pitch_present, data) = lc3.ltpf_analyse(dt, sr, state, x)
- ok = ok and C.T_CURR[dt][0] - state['tc'] == 17
- ok = ok and np.amax(np.abs(state['nc'][0] - C.NC_LTPF[dt][0])) < 1e-5
- ok = ok and pitch_present == C.PITCH_PRESENT[dt][0]
- ok = ok and data['pitch_index'] == C.PITCH_INDEX[dt][0]
- ok = ok and data['active'] == C.LTPF_ACTIVE[dt][0]
+ ok = ok and C.T_CURR[i0][0] - state['tc'] == 17
+ ok = ok and np.amax(np.abs(state['nc'][0] - C.NC_LTPF[i0][0])) < 1e-5
+ ok = ok and pitch_present == C.PITCH_PRESENT[i0][0]
+ ok = ok and data['pitch_index'] == C.PITCH_INDEX[i0][0]
+ ok = ok and data['active'] == C.LTPF_ACTIVE[i0][0]
- x = np.append(x[-nt:], C.X_PCM[dt][1])
+ x = np.append(x[-nt:], C.X_PCM[i0][1])
(pitch_present, data) = lc3.ltpf_analyse(dt, sr, state, x)
- ok = ok and C.T_CURR[dt][1] - state['tc'] == 17
- ok = ok and np.amax(np.abs(state['nc'][0] - C.NC_LTPF[dt][1])) < 1e-5
- ok = ok and pitch_present == C.PITCH_PRESENT[dt][1]
- ok = ok and data['pitch_index'] == C.PITCH_INDEX[dt][1]
- ok = ok and data['active'] == C.LTPF_ACTIVE[dt][1]
+ ok = ok and C.T_CURR[i0][1] - state['tc'] == 17
+ ok = ok and np.amax(np.abs(state['nc'][0] - C.NC_LTPF[i0][1])) < 1e-5
+ ok = ok and pitch_present == C.PITCH_PRESENT[i0][1]
+ ok = ok and data['pitch_index'] == C.PITCH_INDEX[i0][1]
+ ok = ok and data['active'] == C.LTPF_ACTIVE[i0][1]
return ok
def check_synthesis_appendix_c(dt):
sr = T.SRATE_16K
- ok = True
+ ok = True
if dt != T.DT_10M:
return ok
@@ -645,12 +662,12 @@ def check():
ok = True
for dt in range(T.NUM_DT):
- for sr in range(T.NUM_SRATE):
+ for sr in range(T.SRATE_8K, T.SRATE_48K + 1):
ok = ok and check_resampler(rng, dt, sr)
ok = ok and check_analysis(rng, dt, sr)
ok = ok and check_synthesis(rng, dt, sr)
- for dt in range(T.NUM_DT):
+ for dt in ( T.DT_7M5, T.DT_10M ):
ok = ok and check_resampler_appendix_c(dt)
ok = ok and check_analysis_appendix_c(dt)
ok = ok and check_synthesis_appendix_c(dt)
diff --git a/test/ltpf_py.c b/test/ltpf_py.c
index c51eadd..a8e8bfd 100644
--- a/test/ltpf_py.c
+++ b/test/ltpf_py.c
@@ -36,9 +36,9 @@ static PyObject *resample_py(PyObject *m, PyObject *args)
CTYPES_CHECK("sr", (unsigned)sr < LC3_NUM_SRATE);
CTYPES_CHECK(NULL, hp50_obj = to_ltpf_hp50_state(hp50_obj, &hp50));
- int ns = LC3_NS(dt, sr), nt = LC3_NT(dt);
+ int ns = lc3_ns(dt, sr), nt = lc3_nt(sr);
int ny = sizeof((struct lc3_ltpf_analysis){ }.x_12k8) / sizeof(int16_t);
- int n = dt == LC3_DT_7M5 ? 96 : 128;
+ int n = (1 + dt) * 32;
CTYPES_CHECK("x", x_obj = to_1d_ptr(x_obj, NPY_INT16, ns+nt, &x));
CTYPES_CHECK("y", y_obj = to_1d_ptr(y_obj, NPY_INT16, ny, &y));
@@ -64,7 +64,7 @@ static PyObject *analyse_py(PyObject *m, PyObject *args)
CTYPES_CHECK("sr", sr < LC3_NUM_SRATE);
CTYPES_CHECK(NULL, ltpf_obj = to_ltpf_analysis(ltpf_obj, &ltpf));
- int ns = LC3_NS(dt, sr), nt = LC3_NT(sr);
+ int ns = lc3_ns(dt, sr), nt = lc3_nt(sr);
CTYPES_CHECK("x", x_obj = to_1d_ptr(x_obj, NPY_INT16, ns+nt, &x));
@@ -97,7 +97,7 @@ static PyObject *synthesize_py(PyObject *m, PyObject *args)
if ((pitch_present = (data_obj != Py_None)))
CTYPES_CHECK(NULL, data_obj = to_ltpf_data(data_obj, &data));
- int ns = LC3_NS(dt,sr), nd = 18 * LC3_SRATE_KHZ(sr);
+ int ns = lc3_ns(dt,sr), nd = 18 * (lc3_ns_4m[sr] / 4);
CTYPES_CHECK("x", x_obj = to_1d_ptr(x_obj, NPY_FLOAT, nd+ns, &x));
diff --git a/test/mdct.py b/test/mdct.py
index 4e6d191..835af9e 100644
--- a/test/mdct.py
+++ b/test/mdct.py
@@ -24,8 +24,17 @@ import tables as T, appendix_c as C
class Mdct:
- W = [ [ T.W_7M5_60, T.W_7M5_120, T.W_7M5_180, T.W_7M5_240, T.W_7M5_360 ],
- [ T.W_10M_80, T.W_10M_160, T.W_10M_240, T.W_10M_320, T.W_10M_480 ] ]
+ W = [ [ T.W_2M5_8K , T.W_2M5_16K, T.W_2M5_24K,
+ T.W_2M5_32K, T.W_2M5_48K, T.W_2M5_48K_HR, T.W_2M5_96K_HR ],
+
+ [ T.W_5M_8K , T.W_5M_16K , T.W_5M_24K ,
+ T.W_5M_32K , T.W_5M_48K , T.W_5M_48K_HR , T.W_5M_96K_HR ],
+
+ [ T.W_7M5_8K , T.W_7M5_16K, T.W_7M5_24K,
+ T.W_7M5_32K, T.W_7M5_48K, None, None ],
+
+ [ T.W_10M_8K , T.W_10M_16K, T.W_10M_24K,
+ T.W_10M_32K, T.W_10M_48K, T.W_10M_48K_HR, T.W_10M_96K_HR ] ]
def __init__(self, dt, sr):
@@ -117,16 +126,19 @@ def check_forward_unit(rng, dt, sr):
def check_forward_appendix_c(dt):
+ i0 = dt - T.DT_7M5
sr = T.SRATE_16K
+
+ ok = True
+
ns = T.NS[dt][sr]
nd = T.ND[dt][sr]
- ok = True
- (y, d) = lc3.mdct_forward(dt, sr, C.X_PCM[dt][0], np.zeros(nd))
- ok = ok and np.amax(np.abs(y - C.X[dt][0])) < 1e-1
+ (y, d) = lc3.mdct_forward(dt, sr, C.X_PCM[i0][0], np.zeros(nd))
+ ok = ok and np.amax(np.abs(y - C.X[i0][0])) < 1e-1
- (y, d) = lc3.mdct_forward(dt, sr, C.X_PCM[dt][1], d)
- ok = ok and np.amax(np.abs(y - C.X[dt][1])) < 1e-1
+ (y, d) = lc3.mdct_forward(dt, sr, C.X_PCM[i0][1], d)
+ ok = ok and np.amax(np.abs(y - C.X[i0][1])) < 1e-1
return ok
@@ -134,7 +146,7 @@ def check_forward_appendix_c(dt):
def check_inverse_unit(rng, dt, sr):
ns = T.NS[dt][sr]
- nd = [ (23 * ns) // 30, (5 * ns) // 8 ][dt]
+ nd = T.ND[dt][sr]
ok = True
x = (2 * rng.random(ns)) - 1
@@ -157,22 +169,25 @@ def check_inverse_unit(rng, dt, sr):
def check_inverse_appendix_c(dt):
+ i0 = dt - T.DT_7M5
sr = T.SRATE_16K
- ns = T.NS[dt][sr]
- nd = [ (23 * ns) // 30, (5 * ns) // 8 ][dt]
+
ok = True
- (y, d0) = lc3.mdct_inverse(dt, sr, C.X_HAT_SNS[dt][0], np.zeros(nd))
- yr = C.T_HAT_MDCT[dt][0][ns-nd:2*ns-nd]
- dr = C.T_HAT_MDCT[dt][0][2*ns-nd:]
+ ns = T.NS[dt][sr]
+ nd = T.ND[dt][sr]
+
+ (y, d0) = lc3.mdct_inverse(dt, sr, C.X_HAT_SNS[i0][0], np.zeros(nd))
+ yr = C.T_HAT_MDCT[i0][0][ns-nd:2*ns-nd]
+ dr = C.T_HAT_MDCT[i0][0][2*ns-nd:]
ok = ok and np.amax(np.abs(yr - y )) < 1e-1
ok = ok and np.amax(np.abs(dr - d0)) < 1e-1
- (y, d1) = lc3.mdct_inverse(dt, sr, C.X_HAT_SNS[dt][1], d0)
- yr[ :nd] = C.T_HAT_MDCT[dt][1][ns-nd:ns] + d0
- yr[nd:ns] = C.T_HAT_MDCT[dt][1][ns:2*ns-nd]
- dr = C.T_HAT_MDCT[dt][1][2*ns-nd:]
+ (y, d1) = lc3.mdct_inverse(dt, sr, C.X_HAT_SNS[i0][1], d0)
+ yr[ :nd] = C.T_HAT_MDCT[i0][1][ns-nd:ns] + d0
+ yr[nd:ns] = C.T_HAT_MDCT[i0][1][ns:2*ns-nd]
+ dr = C.T_HAT_MDCT[i0][1][2*ns-nd:]
ok = ok and np.amax(np.abs(yr - y )) < 1e-1
ok = ok and np.amax(np.abs(dr - d1)) < 1e-1
@@ -187,11 +202,16 @@ def check():
ok = True
for dt in range(T.NUM_DT):
- for sr in range(T.NUM_SRATE):
+ for sr in range(T.SRATE_8K, T.SRATE_48K + 1):
ok = ok and check_forward_unit(rng, dt, sr)
ok = ok and check_inverse_unit(rng, dt, sr)
- for dt in range(T.NUM_DT):
+ for dt in ( T.DT_2M5, T.DT_5M, T.DT_10M ):
+ for sr in ( T.SRATE_48K_HR, T.SRATE_96K_HR ):
+ ok = ok and check_forward_unit(rng, dt, sr)
+ ok = ok and check_inverse_unit(rng, dt, sr)
+
+ for dt in ( T.DT_7M5, T.DT_10M ):
ok = ok and check_forward_appendix_c(dt)
ok = ok and check_inverse_appendix_c(dt)
diff --git a/test/mdct_py.c b/test/mdct_py.c
index 3479503..792937e 100644
--- a/test/mdct_py.c
+++ b/test/mdct_py.c
@@ -25,18 +25,17 @@
static PyObject *mdct_forward_py(PyObject *m, PyObject *args)
{
+ unsigned dt, sr;
PyObject *x_obj, *xd_obj, *y_obj, *d_obj;
- enum lc3_dt dt;
- enum lc3_srate sr;
float *x, *xd, *y, *d;
- if (!PyArg_ParseTuple(args, "iiOO", &dt, &sr, &x_obj, &xd_obj))
+ if (!PyArg_ParseTuple(args, "IIOO", &dt, &sr, &x_obj, &xd_obj))
return NULL;
- CTYPES_CHECK("dt", (unsigned)dt < LC3_NUM_DT);
- CTYPES_CHECK("sr", (unsigned)sr < LC3_NUM_SRATE);
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("sr", sr < LC3_NUM_SRATE);
- int ns = LC3_NS(dt, sr), nd = LC3_ND(dt, sr);
+ int ns = lc3_ns(dt, sr), nd = lc3_nd(dt, sr);
CTYPES_CHECK("x", to_1d_ptr(x_obj, NPY_FLOAT, ns, &x));
CTYPES_CHECK("xd", to_1d_ptr(xd_obj, NPY_FLOAT, nd, &xd));
@@ -52,18 +51,17 @@ static PyObject *mdct_forward_py(PyObject *m, PyObject *args)
static PyObject *mdct_inverse_py(PyObject *m, PyObject *args)
{
+ unsigned dt, sr;
PyObject *x_obj, *xd_obj, *d_obj, *y_obj;
- enum lc3_dt dt;
- enum lc3_srate sr;
float *x, *xd, *d, *y;
- if (!PyArg_ParseTuple(args, "iiOO", &dt, &sr, &x_obj, &xd_obj))
+ if (!PyArg_ParseTuple(args, "IIOO", &dt, &sr, &x_obj, &xd_obj))
return NULL;
- CTYPES_CHECK("dt", (unsigned)dt < LC3_NUM_DT);
- CTYPES_CHECK("sr", (unsigned)sr < LC3_NUM_SRATE);
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("sr", sr < LC3_NUM_SRATE);
- int ns = LC3_NS(dt, sr), nd = LC3_ND(dt, sr);
+ int ns = lc3_ns(dt, sr), nd = lc3_nd(dt, sr);
CTYPES_CHECK("x", to_1d_ptr(x_obj, NPY_FLOAT, ns, &x));
CTYPES_CHECK("xd", to_1d_ptr(xd_obj, NPY_FLOAT, nd, &xd));
diff --git a/test/setup.py b/test/setup.py
index 7cbcc4a..b64f83e 100755
--- a/test/setup.py
+++ b/test/setup.py
@@ -17,6 +17,7 @@
from setuptools import setup, Extension
import os, sys, glob
+import numpy
if len(sys.argv) <= 1:
sys.argv = sys.argv + [
@@ -34,7 +35,7 @@ depends = [ 'ctypes.h' ] + \
glob.glob(INC_DIR + os.sep + '*.h') + \
glob.glob(SRC_DIR + os.sep + '*.[c,h]')
-includes = [ SRC_DIR, INC_DIR ]
+includes = [ SRC_DIR, INC_DIR, numpy.get_include() ]
extension = Extension('lc3',
extra_compile_args = [ '-std=c11', '-ffast-math' ],
diff --git a/test/sns.py b/test/sns.py
index 8740aab..641d99f 100644
--- a/test/sns.py
+++ b/test/sns.py
@@ -28,6 +28,7 @@ class Sns:
self.dt = dt
self.sr = sr
+ self.I = T.I[dt][sr]
(self.ind_lf, self.ind_hf, self.shape, self.gain) = \
(None, None, None, None)
@@ -52,7 +53,7 @@ class Sns:
def spectral_shaping(self, scf, inv, x):
- ## 3.3.7.4 Scale factors interpolation
+ ## Scale factors interpolation
scf_i = np.empty(4*len(scf))
scf_i[0 ] = scf[0]
@@ -64,20 +65,35 @@ class Sns:
scf_i[62 ] = scf[15 ] + 1/8 * (scf[15] - scf[14 ])
scf_i[63 ] = scf[15 ] + 3/8 * (scf[15] - scf[14 ])
- n2 = 64 - min(len(x), 64)
+ nb = len(self.I) - 1
- for i in range(n2):
- scf_i[i] = 0.5 * (scf_i[2*i] + scf_i[2*i+1])
- scf_i = np.append(scf_i[:n2], scf_i[2*n2:])
+ if nb < 32:
+ n4 = round(abs(1-32/nb)*nb)
+ n2 = nb - n4
+
+ for i in range(n4):
+ scf_i[i] = np.mean(scf_i[4*i:4*i+4])
+
+ for i in range(n4, n4+n2):
+ scf_i[i] = np.mean(scf_i[2*n4+2*i:2*n4+2*i+2])
+
+ scf_i = scf_i[:n4+n2]
+
+ elif nb < 64:
+ n2 = 64 - nb
+
+ for i in range(n2):
+ scf_i[i] = np.mean(scf_i[2*i:2*i+2])
+ scf_i = np.append(scf_i[:n2], scf_i[2*n2:])
g_sns = np.power(2, [ -scf_i, scf_i ][inv])
- ## 3.3.7.4 Spectral shaping
+ ## Spectral shaping
y = np.empty(len(x))
- I = T.I[self.dt][self.sr]
+ I = self.I
- for b in range(len(g_sns)):
+ for b in range(nb):
y[I[b]:I[b+1]] = x[I[b]:I[b+1]] * g_sns[b]
return y
@@ -89,40 +105,55 @@ class SnsAnalysis(Sns):
super().__init__(dt, sr)
- def compute_scale_factors(self, e, att):
+ def compute_scale_factors(self, e, att, nbytes):
dt = self.dt
+ sr = self.sr
+ hr = self.sr >= T.SRATE_48K_HR
- ## 3.3.7.2.1 Padding
+ ## Padding
- n2 = 64 - len(e)
+ if len(e) < 32:
+ n4 = round(abs(1-32/len(e))*len(e))
+ n2 = len(e) - n4
- e = np.append(np.empty(n2), e)
- for i in range(n2):
- e[2*i+0] = e[2*i+1] = e[n2+i]
+ e = np.append(np.zeros(3*n4+n2), e)
+ for i in range(n4):
+ e[4*i+0] = e[4*i+1] = \
+ e[4*i+2] = e[4*i+3] = e[3*n4+n2+i]
- ## 3.3.7.2.2 Smoothing
+ for i in range(2*n4, 2*n4+n2):
+ e[2*i+0] = e[2*i+1] = e[2*n4+n2+i]
+
+ elif len(e) < 64:
+ n2 = 64 - len(e)
+
+ e = np.append(np.empty(n2), e)
+ for i in range(n2):
+ e[2*i+0] = e[2*i+1] = e[n2+i]
+
+ ## Smoothing
e_s = np.zeros(len(e))
e_s[0 ] = 0.75 * e[0 ] + 0.25 * e[1 ]
e_s[1:63] = 0.25 * e[0:62] + 0.5 * e[1:63] + 0.25 * e[2:64]
e_s[ 63] = 0.25 * e[ 62] + 0.75 * e[ 63]
- ## 3.3.7.2.3 Pre-emphasis
+ ## Pre-emphasis
- g_tilt = [ 14, 18, 22, 26, 30 ][self.sr]
+ g_tilt = [ 14, 18, 22, 26, 30, 30, 34 ][self.sr]
e_p = e_s * (10 ** ((np.arange(64) * g_tilt) / 630))
- ## 3.3.7.2.4 Noise floor
+ ## Noise floor
noise_floor = max(np.average(e_p) * (10 ** (-40/10)), 2 ** -32)
e_p = np.fmax(e_p, noise_floor * np.ones(len(e)))
- ## 3.3.7.2.5 Logarithm
+ ## Logarithm
e_l = np.log2(10 ** -31 + e_p) / 2
- ## 3.3.7.2.6 Band energy grouping
+ ## Band energy grouping
w = [ 1/12, 2/12, 3/12, 3/12, 2/12, 1/12 ]
@@ -131,18 +162,22 @@ class SnsAnalysis(Sns):
e_4[1:15] = [ np.sum(w * e_l[4*i-1:4*i+5]) for i in range(1, 15) ]
e_4[ 15] = np.sum(w[:5] * e_l[59:64]) + w[5] * e_l[63]
- ## 3.3.7.2.7 Mean removal and scaling, attack handling
+ ## Mean removal and scaling, attack handling
- scf = 0.85 * (e_4 - np.average(e_4))
+ cf = [ 0.85, 0.6 ][hr]
+ if hr and nbytes * 8 > [ 1150, 2300, 0, 4400 ][self.dt]:
+ cf *= [ 0.25, 0.35 ][ self.dt == T.DT_10M ]
+
+ scf = cf * (e_4 - np.average(e_4))
scf_a = np.zeros(len(scf))
- scf_a[0 ] = np.average(scf[:3])
- scf_a[1 ] = np.average(scf[:4])
- scf_a[2:14] = [ np.average(scf[i:i+5]) for i in range(12) ]
- scf_a[ 14] = np.average(scf[12:])
- scf_a[ 15] = np.average(scf[13:])
+ scf_a[0 ] = np.mean(scf[:3])
+ scf_a[1 ] = np.mean(scf[:4])
+ scf_a[2:14] = [ np.mean(scf[i:i+5]) for i in range(12) ]
+ scf_a[ 14] = np.mean(scf[12:])
+ scf_a[ 15] = np.mean(scf[13:])
- scf_a = (0.5 if self.dt == T.DT_10M else 0.3) * \
+ scf_a = (0.5 if self.dt != T.DT_7M5 else 0.3) * \
(scf_a - np.average(scf_a))
return scf_a if att else scf
@@ -167,7 +202,7 @@ class SnsAnalysis(Sns):
def quantize(self, scf):
- ## 3.3.7.3.2 Stage 1
+ ## Stage 1
dmse_lf = [ np.sum((scf[:8] - T.SNS_LFCB[i]) ** 2) for i in range(32) ]
dmse_hf = [ np.sum((scf[8:] - T.SNS_HFCB[i]) ** 2) for i in range(32) ]
@@ -178,19 +213,19 @@ class SnsAnalysis(Sns):
st1 = np.append(T.SNS_LFCB[self.ind_lf], T.SNS_HFCB[self.ind_hf])
r1 = scf - st1
- ## 3.3.7.3.3 Stage 2
+ ## Stage 2
t2_rot = fftpack.dct(r1, norm = 'ortho')
x = np.abs(t2_rot)
- ## 3.3.7.3.3 Stage 2 Shape search, step 1
+ ## Stage 2 Shape search, step 1
K = 6
proj_fac = (K - 1) / sum(np.abs(t2_rot))
y3 = np.floor(x * proj_fac).astype(int)
- ## 3.3.7.3.3 Stage 2 Shape search, step 2
+ ## Stage 2 Shape search, step 2
corr_xy = np.sum(y3 * x)
energy_y = np.sum(y3 * y3)
@@ -204,7 +239,7 @@ class SnsAnalysis(Sns):
energy_y += 2*y3[n_best] + 1
y3[n_best] += 1
- ## 3.3.7.3.3 Stage 2 Shape search, step 3
+ ## Stage 2 Shape search, step 3
K = 8
@@ -219,16 +254,16 @@ class SnsAnalysis(Sns):
y2[n_best] += 1
- ## 3.3.7.3.3 Stage 2 Shape search, step 4
+ ## Stage 2 Shape search, step 4
y1 = np.append(y2[:10], [0] * 6)
- ## 3.3.7.3.3 Stage 2 Shape search, step 5
+ ## Stage 2 Shape search, step 5
corr_xy -= sum(y2[10:] * x[10:])
energy_y -= sum(y2[10:] * y2[10:])
- ## 3.3.7.3.3 Stage 2 Shape search, step 6
+ ## Stage 2 Shape search, step 6
K = 10
@@ -240,7 +275,7 @@ class SnsAnalysis(Sns):
energy_y += 2*y1[n_best] + 1
y1[n_best] += 1
- ## 3.3.7.3.3 Stage 2 Shape search, step 7
+ ## Stage 2 Shape search, step 7
y0 = np.append(y1[:10], [ 0 ] * 6)
@@ -249,18 +284,18 @@ class SnsAnalysis(Sns):
y0[n_best] += 1
- ## 3.3.7.3.3 Stage 2 Shape search, step 8
+ ## Stage 2 Shape search, step 8
y0 *= np.sign(t2_rot).astype(int)
y1 *= np.sign(t2_rot).astype(int)
y2 *= np.sign(t2_rot).astype(int)
y3 *= np.sign(t2_rot).astype(int)
- ## 3.3.7.3.3 Stage 2 Shape search, step 9
+ ## Stage 2 Shape search, step 9
xq = [ y / np.sqrt(sum(y ** 2)) for y in (y0, y1, y2, y3) ]
- ## 3.3.7.3.3 Shape and gain combination determination
+ ## Shape and gain combination determination
G = [ T.SNS_VQ_REG_ADJ_GAINS, T.SNS_VQ_REG_LF_ADJ_GAINS,
T.SNS_VQ_NEAR_ADJ_GAINS, T.SNS_VQ_FAR_ADJ_GAINS ]
@@ -273,7 +308,7 @@ class SnsAnalysis(Sns):
gain = G[self.shape][self.gain]
- ## 3.3.7.3.3 Enumeration of the selected PVQ pulse configurations
+ ## Enumeration of the selected PVQ pulse configurations
if self.shape == 0:
(self.idx_a, self.ls_a) = self.enum_mpvq(y0[:10])
@@ -288,15 +323,15 @@ class SnsAnalysis(Sns):
(self.idx_a, self.ls_a) = self.enum_mpvq(y3)
(self.idx_b, self.ls_b) = (None, None)
- ## 3.3.7.3.4 Synthesis of the Quantized scale factor
+ ## Synthesis of the Quantized scale factor
scf_q = st1 + gain * fftpack.idct(xq[self.shape], norm = 'ortho')
return scf_q
- def run(self, eb, att, x):
+ def run(self, eb, att, nbytes, x):
- scf = self.compute_scale_factors(eb, att)
+ scf = self.compute_scale_factors(eb, att, nbytes)
scf_q = self.quantize(scf)
y = self.spectral_shaping(scf_q, False, x)
@@ -372,7 +407,7 @@ class SnsSynthesis(Sns):
def unquantize(self):
- ## 3.7.4.2.1-2 SNS VQ Decoding
+ ## SNS VQ Decoding
y = np.empty(16, dtype=np.intc)
@@ -387,11 +422,11 @@ class SnsSynthesis(Sns):
elif self.shape == 3:
y = self.deenum_mpvq(self.idx_a, self.ls_a, 6, 16)
- ## 3.7.4.2.3 Unit energy normalization
+ ## Unit energy normalization
y = y / np.sqrt(sum(y ** 2))
- ## 3.7.4.2.4 Reconstruction of the quantized scale factors
+ ## Reconstruction of the quantized scale factors
G = [ T.SNS_VQ_REG_ADJ_GAINS, T.SNS_VQ_REG_LF_ADJ_GAINS,
T.SNS_VQ_NEAR_ADJ_GAINS, T.SNS_VQ_FAR_ADJ_GAINS ]
@@ -464,20 +499,36 @@ def check_analysis(rng, dt, sr):
analysis = SnsAnalysis(dt, sr)
for i in range(10):
- x = rng.random(T.NE[dt][sr]) * 1e4
- e = rng.random(min(len(x), 64)) * 1e10
+ ne = T.I[dt][sr][-1]
+ x = rng.random(ne) * 1e4
+ e = rng.random(len(T.I[dt][sr]) - 1) * 1e10
+
+ if sr >= T.SRATE_48K_HR:
+ for nbits in (1144, 1152, 2296, 2304, 4400, 4408):
+ y = analysis.run(e, False, nbits // 8, x)
+ data = analysis.get_data()
- for att in (0, 1):
- y = analysis.run(e, att, x)
- data = analysis.get_data()
+ (y_c, data_c) = lc3.sns_analyze(
+ dt, sr, nbits // 8, e, False, x)
- (y_c, data_c) = lc3.sns_analyze(dt, sr, e, att, x)
+ for k in data.keys():
+ ok = ok and data_c[k] == data[k]
- for k in data.keys():
- ok = ok and data_c[k] == data[k]
+ ok = ok and lc3.sns_get_nbits() == analysis.get_nbits()
+ ok = ok and np.amax(np.abs(y - y_c)) < 1e-1
- ok = ok and lc3.sns_get_nbits() == analysis.get_nbits()
- ok = ok and np.amax(np.abs(y - y_c)) < 1e-1
+ else:
+ for att in (0, 1):
+ y = analysis.run(e, att, 0, x)
+ data = analysis.get_data()
+
+ (y_c, data_c) = lc3.sns_analyze(dt, sr, 0, e, att, x)
+
+ for k in data.keys():
+ ok = ok and data_c[k] == data[k]
+
+ ok = ok and lc3.sns_get_nbits() == analysis.get_nbits()
+ ok = ok and np.amax(np.abs(y - y_c)) < 1e-1
return ok
@@ -502,76 +553,81 @@ def check_synthesis(rng, dt, sr):
synthesis.idx_b = rng.integers(0, sz_shape_b, endpoint=True)
synthesis.ls_b = bool(rng.integers(0, 1, endpoint=True))
- x = rng.random(T.NE[dt][sr]) * 1e4
+ ne = T.I[dt][sr][-1]
+ x = rng.random(ne) * 1e4
y = synthesis.run(x)
y_c = lc3.sns_synthesize(dt, sr, synthesis.get_data(), x)
- ok = ok and np.amax(np.abs(y - y_c)) < 2e0
+ ok = ok and np.amax(np.abs(1 - y/y_c)) < 1e-5
return ok
def check_analysis_appendix_c(dt):
+ i0 = dt - T.DT_7M5
sr = T.SRATE_16K
+
ok = True
- for i in range(len(C.E_B[dt])):
+ for i in range(len(C.E_B[i0])):
- scf = lc3.sns_compute_scale_factors(dt, sr, C.E_B[dt][i], False)
- ok = ok and np.amax(np.abs(scf - C.SCF[dt][i])) < 1e-4
+ scf = lc3.sns_compute_scale_factors(dt, sr, 0, C.E_B[i0][i], False)
+ ok = ok and np.amax(np.abs(scf - C.SCF[i0][i])) < 1e-4
(lf, hf) = lc3.sns_resolve_codebooks(scf)
- ok = ok and lf == C.IND_LF[dt][i] and hf == C.IND_HF[dt][i]
+ ok = ok and lf == C.IND_LF[i0][i] and hf == C.IND_HF[i0][i]
(y, yn, shape, gain) = lc3.sns_quantize(scf, lf, hf)
- ok = ok and np.any(y[0][:16] - C.SNS_Y0[dt][i] == 0)
- ok = ok and np.any(y[1][:10] - C.SNS_Y1[dt][i] == 0)
- ok = ok and np.any(y[2][:16] - C.SNS_Y2[dt][i] == 0)
- ok = ok and np.any(y[3][:16] - C.SNS_Y3[dt][i] == 0)
- ok = ok and shape == 2*C.SUBMODE_MSB[dt][i] + C.SUBMODE_LSB[dt][i]
- ok = ok and gain == C.G_IND[dt][i]
+ ok = ok and np.any(y[0][:16] - C.SNS_Y0[i0][i] == 0)
+ ok = ok and np.any(y[1][:10] - C.SNS_Y1[i0][i] == 0)
+ ok = ok and np.any(y[2][:16] - C.SNS_Y2[i0][i] == 0)
+ ok = ok and np.any(y[3][:16] - C.SNS_Y3[i0][i] == 0)
+ ok = ok and shape == 2*C.SUBMODE_MSB[i0][i] + C.SUBMODE_LSB[i0][i]
+ ok = ok and gain == C.G_IND[i0][i]
scf_q = lc3.sns_unquantize(lf, hf, yn[shape], shape, gain)
- ok = ok and np.amax(np.abs(scf_q - C.SCF_Q[dt][i])) < 1e-5
-
- x = lc3.sns_spectral_shaping(dt, sr, C.SCF_Q[dt][i], False, C.X[dt][i])
- ok = ok and np.amax(np.abs(1 - x/C.X_S[dt][i])) < 1e-5
-
- (x, data) = lc3.sns_analyze(dt, sr, C.E_B[dt][i], False, C.X[dt][i])
- ok = ok and data['lfcb'] == C.IND_LF[dt][i]
- ok = ok and data['hfcb'] == C.IND_HF[dt][i]
- ok = ok and data['shape'] == \
- 2*C.SUBMODE_MSB[dt][i] + C.SUBMODE_LSB[dt][i]
- ok = ok and data['gain'] == C.G_IND[dt][i]
- ok = ok and data['idx_a'] == C.IDX_A[dt][i]
- ok = ok and data['ls_a'] == C.LS_IND_A[dt][i]
- ok = ok and (C.IDX_B[dt][i] is None or
- data['idx_b'] == C.IDX_B[dt][i])
- ok = ok and (C.LS_IND_B[dt][i] is None or
- data['ls_b'] == C.LS_IND_B[dt][i])
- ok = ok and np.amax(np.abs(1 - x/C.X_S[dt][i])) < 1e-5
+ ok = ok and np.amax(np.abs(scf_q - C.SCF_Q[i0][i])) < 1e-5
+
+ x = lc3.sns_spectral_shaping(dt, sr, C.SCF_Q[i0][i], False, C.X[i0][i])
+ ok = ok and np.amax(np.abs(1 - x/C.X_S[i0][i])) < 1e-5
+
+ (x, data) = lc3.sns_analyze(dt, sr, 0, C.E_B[i0][i], False, C.X[i0][i])
+ ok = ok and data['lfcb'] == C.IND_LF[i0][i]
+ ok = ok and data['hfcb'] == C.IND_HF[i0][i]
+ ok = ok and data['shape'] == 2*C.SUBMODE_MSB[i0][i] + \
+ C.SUBMODE_LSB[i0][i]
+ ok = ok and data['gain'] == C.G_IND[i0][i]
+ ok = ok and data['idx_a'] == C.IDX_A[i0][i]
+ ok = ok and data['ls_a'] == C.LS_IND_A[i0][i]
+ ok = ok and (C.IDX_B[i0][i] is None or
+ data['idx_b'] == C.IDX_B[i0][i])
+ ok = ok and (C.LS_IND_B[i0][i] is None or
+ data['ls_b'] == C.LS_IND_B[i0][i])
+ ok = ok and np.amax(np.abs(1 - x/C.X_S[i0][i])) < 1e-5
return ok
def check_synthesis_appendix_c(dt):
+ i0 = dt - T.DT_7M5
sr = T.SRATE_16K
+
ok = True
- for i in range(len(C.X_HAT_TNS[dt])):
+ for i in range(len(C.X_HAT_TNS[i0])):
data = {
- 'lfcb' : C.IND_LF[dt][i], 'hfcb' : C.IND_HF[dt][i],
- 'shape' : 2*C.SUBMODE_MSB[dt][i] + C.SUBMODE_LSB[dt][i],
- 'gain' : C.G_IND[dt][i],
- 'idx_a' : C.IDX_A[dt][i],
- 'ls_a' : C.LS_IND_A[dt][i],
- 'idx_b' : C.IDX_B[dt][i] if C.IDX_B[dt][i] is not None else 0,
- 'ls_b' : C.LS_IND_B[dt][i] if C.LS_IND_B[dt][i] is not None else 0,
+ 'lfcb' : C.IND_LF[i0][i], 'hfcb' : C.IND_HF[i0][i],
+ 'shape' : 2*C.SUBMODE_MSB[i0][i] + C.SUBMODE_LSB[i0][i],
+ 'gain' : C.G_IND[i0][i],
+ 'idx_a' : C.IDX_A[i0][i],
+ 'ls_a' : C.LS_IND_A[i0][i],
+ 'idx_b' : C.IDX_B[i0][i] if C.IDX_B[i0][i] is not None else 0,
+ 'ls_b' : C.LS_IND_B[i0][i] if C.LS_IND_B[i0][i] is not None else 0,
}
- x = lc3.sns_synthesize(dt, sr, data, C.X_HAT_TNS[dt][i])
- ok = ok and np.amax(np.abs(x - C.X_HAT_SNS[dt][i])) < 1e0
+ x = lc3.sns_synthesize(dt, sr, data, C.X_HAT_TNS[i0][i])
+ ok = ok and np.amax(np.abs(x - C.X_HAT_SNS[i0][i])) < 1e0
return ok
@@ -581,13 +637,18 @@ def check():
ok = True
for dt in range(T.NUM_DT):
- for sr in range(T.NUM_SRATE):
+ for sr in range(T.SRATE_8K, T.SRATE_48K + 1):
ok = ok and check_analysis(rng, dt, sr)
ok = ok and check_synthesis(rng, dt, sr)
- for dt in range(T.NUM_DT):
- ok = ok and check_analysis_appendix_c(dt)
- ok = ok and check_synthesis_appendix_c(dt)
+ for dt in ( T.DT_2M5, T.DT_5M, T.DT_10M ):
+ for sr in ( T.SRATE_48K_HR, T.SRATE_96K_HR ):
+ ok = ok and check_analysis(rng, dt, sr)
+ ok = ok and check_synthesis(rng, dt, sr)
+
+ for dt in ( T.DT_7M5, T.DT_10M ):
+ check_analysis_appendix_c(dt)
+ check_synthesis_appendix_c(dt)
return ok
diff --git a/test/sns_py.c b/test/sns_py.c
index 2ef3e83..29015e7 100644
--- a/test/sns_py.c
+++ b/test/sns_py.c
@@ -26,22 +26,22 @@
static PyObject *compute_scale_factors_py(PyObject *m, PyObject *args)
{
unsigned dt, sr;
+ int nbytes, att;
PyObject *eb_obj, *scf_obj;
float *eb, *scf;
- int att;
- if (!PyArg_ParseTuple(args, "IIOp", &dt, &sr, &eb_obj, &att))
+ if (!PyArg_ParseTuple(args, "IIiOp", &dt, &sr, &nbytes, &eb_obj, &att))
return NULL;
- CTYPES_CHECK("dt", (unsigned)dt < LC3_NUM_DT);
- CTYPES_CHECK("sr", (unsigned)sr < LC3_NUM_SRATE);
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("sr", sr < LC3_NUM_SRATE);
- int nb = LC3_MIN(lc3_band_lim[dt][sr][LC3_NUM_BANDS], LC3_NUM_BANDS);
+ int nb = lc3_num_bands[dt][sr];
CTYPES_CHECK("eb", to_1d_ptr(eb_obj, NPY_FLOAT, nb, &eb));
scf_obj = new_1d_ptr(NPY_FLOAT, 16, &scf);
- compute_scale_factors(dt, sr, eb, att, scf);
+ compute_scale_factors(dt, sr, nbytes, eb, att, scf);
return Py_BuildValue("N", scf_obj);
}
@@ -66,6 +66,7 @@ static PyObject *quantize_py(PyObject *m, PyObject *args)
{
PyObject *scf_obj, *y_obj, *yn_obj;
float *scf;
+
int lfcb_idx, hfcb_idx;
int shape_idx, gain_idx;
float (*yn)[16];
@@ -122,10 +123,10 @@ static PyObject *spectral_shaping_py(PyObject *m, PyObject *args)
if (!PyArg_ParseTuple(args, "IIOpO", &dt, &sr, &scf_q_obj, &inv, &x_obj))
return NULL;
- CTYPES_CHECK("dt", (unsigned)dt < LC3_NUM_DT);
- CTYPES_CHECK("sr", (unsigned)sr < LC3_NUM_SRATE);
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("sr", sr < LC3_NUM_SRATE);
- int ne = LC3_NE(dt, sr);
+ int ne = lc3_ne(dt, sr);
CTYPES_CHECK("scf_q", to_1d_ptr(scf_q_obj, NPY_FLOAT, 16, &scf_q));
CTYPES_CHECK("x", x_obj = to_1d_ptr(x_obj, NPY_FLOAT, ne, &x));
@@ -140,22 +141,23 @@ static PyObject *analyze_py(PyObject *m, PyObject *args)
PyObject *eb_obj, *x_obj;
struct lc3_sns_data data = { 0 };
unsigned dt, sr;
+ int nbytes, att;
float *eb, *x;
- int att;
- if (!PyArg_ParseTuple(args, "IIOpO", &dt, &sr, &eb_obj, &att, &x_obj))
+ if (!PyArg_ParseTuple(args, "IIiOpO",
+ &dt, &sr, &nbytes, &eb_obj, &att, &x_obj))
return NULL;
- CTYPES_CHECK("dt", (unsigned)dt < LC3_NUM_DT);
- CTYPES_CHECK("sr", (unsigned)sr < LC3_NUM_SRATE);
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("sr", sr < LC3_NUM_SRATE);
- int ne = LC3_NE(dt, sr);
- int nb = LC3_MIN(ne, LC3_NUM_BANDS);
+ int ne = lc3_ne(dt, sr);
+ int nb = lc3_num_bands[dt][sr];
CTYPES_CHECK("eb", to_1d_ptr(eb_obj, NPY_FLOAT, nb, &eb));
CTYPES_CHECK("x", x_obj = to_1d_ptr(x_obj, NPY_FLOAT, ne, &x));
- lc3_sns_analyze(dt, sr, eb, att, &data, x, x);
+ lc3_sns_analyze(dt, sr, nbytes, eb, att, &data, x, x);
return Py_BuildValue("ON", x_obj, new_sns_data(&data));
}
@@ -170,11 +172,11 @@ static PyObject *synthesize_py(PyObject *m, PyObject *args)
if (!PyArg_ParseTuple(args, "IIOO", &dt, &sr, &data_obj, &x_obj))
return NULL;
- CTYPES_CHECK("dt", (unsigned)dt < LC3_NUM_DT);
- CTYPES_CHECK("sr", (unsigned)sr < LC3_NUM_SRATE);
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("sr", sr < LC3_NUM_SRATE);
CTYPES_CHECK(NULL, data_obj = to_sns_data(data_obj, &data));
- int ne = LC3_NE(dt, sr);
+ int ne = lc3_ne(dt, sr);
CTYPES_CHECK("x", x_obj = to_1d_ptr(x_obj, NPY_FLOAT, ne, &x));
diff --git a/test/spec.py b/test/spec.py
index 22c5e3e..7bc237b 100644
--- a/test/spec.py
+++ b/test/spec.py
@@ -35,25 +35,28 @@ class SpectrumQuantization:
def get_gain_offset(self, nbytes):
- g_off = (nbytes * 8) // (10 * (1 + self.sr))
- g_off = -min(115, g_off) - (105 + 5*(1 + self.sr))
+ sr_ind = self.sr if self.sr < T.SRATE_48K_HR \
+ else 4 + (self.sr - T.SRATE_48K_HR)
+
+ g_off = (nbytes * 8) // (10 * (1 + sr_ind))
+ g_off = -min(115, g_off) - (105 + 5*(1 + sr_ind))
+ if self.sr >= T.SRATE_48K_HR:
+ g_off = max(g_off, -181)
return g_off
def get_noise_indices(self, bw, xq, lastnz):
- nf_start = [ 18, 24 ][self.dt]
- nf_width = [ 2, 3 ][self.dt]
+ nf_start = [ 6, 12, 18, 24 ][self.dt]
+ nf_width = [ 1, 1, 2, 3 ][self.dt]
- bw_stop = int([ 80, 160, 240, 320, 400 ][bw] * (T.DT_MS[self.dt] / 10))
+ bw_stop = T.I[self.dt][min(bw, T.SRATE_48K)][-1]
xq = np.append(xq[:lastnz], np.zeros(len(xq) - lastnz))
+ xq[:nf_start-nf_width] = 1
- i_nf = [ np.all(xq[k-nf_width:min(bw_stop, k+nf_width+1)] == 0)
- for k in range(nf_start, bw_stop) ]
-
- return (i_nf, nf_start, bw_stop)
-
+ return [ np.all(xq[max(k-nf_width, 0):min(k+nf_width+1, bw_stop)] == 0)
+ for k in range(bw_stop) ]
class SpectrumAnalysis(SpectrumQuantization):
@@ -70,14 +73,36 @@ class SpectrumAnalysis(SpectrumQuantization):
self.nbits_residual_max, self.xg) = \
(None, None, None, None, None, None)
- def estimate_gain(self, x, nbits_spec, nbits_off, g_off):
+ def estimate_gain(self, x, nbytes, nbits_spec, nbits_off, g_off):
nbits = int(nbits_spec + nbits_off + 0.5)
### Energy (dB) by 4 MDCT coefficients
+ hr = (self.sr >= T.SRATE_48K_HR)
+ nf = 0
+
+ if hr:
+ dt = self.dt
+ sr = self.sr
+
+ dt_ms = T.DT_MS[dt]
+ bitrate = (8 * nbytes / (dt_ms * 1e-3)).astype(int)
+
+ C = [ [ -6, 0, None, 2 ], [ -6, 0, None, 5 ] ]
+
+ reg_bits = np.clip(
+ bitrate // 12500 + C[sr - T.SRATE_48K_HR][dt], 6, 23)
+
+ M0 = np.sum(np.abs(x)) + 1e-5
+ M1 = np.sum(np.arange(len(x)) * np.abs(x)) + 1e-5
+
+ low_bits = (4 / dt_ms) * (2*dt_ms - min(M0/M1, 2*dt_ms))
+
+ nf = np.max(np.abs(x)) * np.exp2(-reg_bits - low_bits)
+
e = [ np.sum(x[4*k:4*(k+1)] ** 2) for k in range(len(x) // 4) ]
- e = 10 * np.log10(2**-31 + np.array(e))
+ e = 10 * np.log10(2**-31 + np.array(e) + nf)
### Compute gain index
@@ -108,7 +133,8 @@ class SpectrumAnalysis(SpectrumQuantization):
x_max = np.amax(np.abs(x))
if x_max > 0:
- g_min = 28 * np.log10(x_max / (32768 - 0.375))
+ x_lim = [ 2**15 - 0.375, 2**23 ][hr]
+ g_min = 28 * np.log10(x_max / x_lim)
g_min = np.ceil(g_min).astype(int) - g_off
reset_off = g_idx < g_min
else:
@@ -118,15 +144,20 @@ class SpectrumAnalysis(SpectrumQuantization):
if reset_off:
g_idx = g_min
- return (g_idx + g_off, reset_off)
+ return (g_min, g_idx + g_off, reset_off)
def quantize(self, g_int, x):
xg = x / 10 ** (g_int / 28)
- xq = np.where(xg < 0, np.ceil(xg - 0.375), np.floor(xg + 0.375))
- xq = xq.astype(int)
- xq = np.fmin(np.fmax(xq, -32768), 32767)
+ hr = (self.sr >= T.SRATE_48K_HR)
+ offset = [ 0.375, 0.5 ][hr]
+ xq_min = [ -(2**15) , -(2**23) ][hr]
+ xq_max = [ (2**15)-1, (2**23)-1 ][hr]
+
+ xq = np.where(xg < 0, np.ceil(xg - offset), np.floor(xg + offset))
+ xq = xq.astype(np.int32)
+ xq = np.fmin(np.fmax(xq, xq_min), xq_max)
nz_pairs = np.any([ xq[::2] != 0, xq[1::2] != 0 ], axis=0)
lastnz = len(xq) - 2 * np.argmax(nz_pairs[-1::-1])
@@ -137,8 +168,10 @@ class SpectrumAnalysis(SpectrumQuantization):
def compute_nbits(self, nbytes, x, lastnz, nbits_spec):
- mode = 1 if nbytes >= 20 * (3 + self.sr) else 0
- rate = 512 if nbytes > 20 * (1 + self.sr) else 0
+ mode = [ 0, 1 ][int(self.sr < T.SRATE_96K_HR and \
+ nbytes >= 20 * (3 + min(self.sr, T.SRATE_48K)))]
+ rate = [ 0, 512 ][int(self.sr < T.SRATE_96K_HR and \
+ nbytes > 20 * (1 + min(self.sr, T.SRATE_48K)))]
nbits_est = 0
nbits_trunc = 0
@@ -196,10 +229,11 @@ class SpectrumAnalysis(SpectrumQuantization):
def adjust_gain(self, g_idx, nbits, nbits_spec):
- T1 = [ 80, 230, 380, 530, 680 ]
- T2 = [ 500, 1025, 1550, 2075, 2600 ]
- T3 = [ 850, 1700, 2550, 3400, 4250 ]
+ T1 = [ 80, 230, 380, 530, 680, 680, 830 ]
+ T2 = [ 500, 1025, 1550, 2075, 2600, 2600, 3125 ]
+ T3 = [ 850, 1700, 2550, 3400, 4250, 4250, 5100 ]
+ dt = self.dt
sr = self.sr
if nbits < T1[sr]:
@@ -218,11 +252,19 @@ class SpectrumAnalysis(SpectrumQuantization):
delta = np.fix(delta + 0.5).astype(int)
- if (g_idx < 255 and nbits > nbits_spec) or \
- (g_idx > 0 and nbits < nbits_spec - (delta + 2)):
+ if self.sr >= T.SRATE_48K_HR and \
+ (g_idx < 255 and nbits > nbits_spec):
+
+ factor = [ 3 + (nbits >= 520), 2, 0, 1 ][dt]
+ g_incr = int(factor * (1 + (nbits - nbits_spec) / delta))
+ return min(g_idx + g_incr, 255) - g_idx;
+
+ elif self.sr < T.SRATE_48K_HR and \
+ ( (g_idx < 255 and nbits > nbits_spec) or \
+ (g_idx > 0 and nbits < nbits_spec - (delta + 2)) ):
if nbits < nbits_spec - (delta + 2):
- return - 1
+ return -1
if g_idx == 254 or nbits < nbits_spec + delta:
return 1
@@ -234,25 +276,25 @@ class SpectrumAnalysis(SpectrumQuantization):
def estimate_noise(self, bw, xq, lastnz, x):
- (i_nf, nf_start, nf_stop) = self.get_noise_indices(bw, xq, lastnz)
-
- nf = 8 - 16 * sum(abs(x[nf_start:nf_stop] * i_nf)) / sum(i_nf) \
- if sum(i_nf) > 0 else 0
+ i_nf = self.get_noise_indices(bw, xq, lastnz)
+ l_nf = sum(abs(x[:len(i_nf)] * i_nf)) / sum(i_nf) \
+ if sum(i_nf) > 0 else 0
- return min(max(np.rint(nf).astype(int), 0), 7)
+ return min(max(np.rint(8 - 16 * l_nf).astype(int), 0), 7)
- def run(self,
- bw, nbytes, nbits_bw, nbits_ltpf, nbits_sns, nbits_tns, x):
+ def run(self, bw, nbytes, nbits_bw, nbits_ltpf, nbits_sns, nbits_tns, x):
sr = self.sr
### Bit budget
+ hr = self.sr >= T.SRATE_48K_HR
+
nbits_gain = 8
nbits_nf = 3
nbits_ari = np.ceil(np.log2(len(x) / 2)).astype(int)
- nbits_ari += 3 + min((8*nbytes - 1) // 1280, 2)
+ nbits_ari += 3 + int(hr) + min((8*nbytes - 1) // 1280, 2)
nbits_spec = 8*nbytes - \
nbits_bw - nbits_ltpf - nbits_sns - nbits_tns - \
@@ -268,8 +310,8 @@ class SpectrumAnalysis(SpectrumQuantization):
g_off = self.get_gain_offset(nbytes)
- (g_int, self.reset_off) = \
- self.estimate_gain(x, nbits_spec, nbits_off, g_off)
+ (g_min, g_int, self.reset_off) = \
+ self.estimate_gain(x, nbytes, nbits_spec, nbits_off, g_off)
self.nbits_off = nbits_off
self.nbits_spec = nbits_spec
@@ -285,6 +327,7 @@ class SpectrumAnalysis(SpectrumQuantization):
### Adjust gain and requantize
g_adj = self.adjust_gain(g_int - g_off, nbits_est, nbits_spec)
+ g_adj = max(g_int + g_adj, g_min + g_off) - g_int
(xg, xq, lastnz) = self.quantize(g_adj, xg)
@@ -306,7 +349,7 @@ class SpectrumAnalysis(SpectrumQuantization):
def store(self, b):
- ne = T.NE[self.dt][self.sr]
+ ne = T.I[self.dt][self.sr][-1]
nbits_lastnz = np.ceil(np.log2(ne/2)).astype(int)
b.write_uint((self.lastnz >> 1) - 1, nbits_lastnz)
@@ -410,9 +453,9 @@ class SpectrumSynthesis(SpectrumQuantization):
def fill_noise(self, bw, x, lastnz, f_nf, nf_seed):
- (i_nf, nf_start, nf_stop) = self.get_noise_indices(bw, x, lastnz)
+ i_nf = self.get_noise_indices(bw, x, lastnz)
- k_nf = nf_start + np.argwhere(i_nf)
+ k_nf = np.argwhere(i_nf)
l_nf = (8 - f_nf)/16
for k in k_nf:
@@ -423,7 +466,7 @@ class SpectrumSynthesis(SpectrumQuantization):
def load(self, b):
- ne = T.NE[self.dt][self.sr]
+ ne = T.I[self.dt][self.sr][-1]
nbits_lastnz = np.ceil(np.log2(ne/2)).astype(int)
self.lastnz = (b.read_uint(nbits_lastnz) + 1) << 1
@@ -441,8 +484,10 @@ class SpectrumSynthesis(SpectrumQuantization):
### Quantized data
- x = np.zeros(T.NE[self.dt][self.sr])
- rate = 512 if nbytes > 20 * (1 + self.sr) else 0
+ ne = T.I[self.dt][self.sr][-1]
+ x = np.zeros(ne)
+ rate = [ 0, 512 ][int(self.sr < T.SRATE_96K_HR and \
+ nbytes > 20 * (1 + min(self.sr, T.SRATE_48K)))]
levs = np.zeros(len(x), dtype=np.intc)
c = 0
@@ -573,54 +618,56 @@ def initial_state():
def check_estimate_gain(rng, dt, sr):
- ne = T.I[dt][sr][-1]
ok = True
analysis = SpectrumAnalysis(dt, sr)
+ mismatch_count = 0
for i in range(10):
- x = rng.random(ne) * i * 1e2
+ ne = T.I[dt][sr][-1]
+ x = rng.random(ne) * i * 1e2
nbytes = 20 + int(rng.random() * 100)
nbits_budget = 8 * nbytes - int(rng.random() * 100)
nbits_off = rng.random() * 10
g_off = 10 - int(rng.random() * 20)
- (g_int, reset_off) = \
- analysis.estimate_gain(x, nbits_budget, nbits_off, g_off)
+ (_, g_int, reset_off) = \
+ analysis.estimate_gain(x, nbytes, nbits_budget, nbits_off, g_off)
(g_int_c, reset_off_c, _) = lc3.spec_estimate_gain(
- dt, sr, x, nbits_budget, nbits_off, -g_off)
+ dt, sr, x, nbytes, nbits_budget, nbits_off, -g_off)
+
+ if g_int_c != g_int:
+ mismatch_count += 1
- ok = ok and g_int_c == g_int
- ok = ok and reset_off_c == reset_off
+ ok = ok and (g_int_c == g_int or mismatch_count <= 1)
+ ok = ok and (reset_off_c == reset_off or mismatch_count <= 1)
return ok
def check_quantization(rng, dt, sr):
- ne = T.I[dt][sr][-1]
ok = True
analysis = SpectrumAnalysis(dt, sr)
for g_int in range(-128, 128):
- x = rng.random(ne) * 1e2
+ ne = T.I[dt][sr][-1]
+ x = rng.random(ne) * 1e2
nbytes = 20 + int(rng.random() * 30)
(xg, xq, nq) = analysis.quantize(g_int, x)
- (xg_c, xq_c, nq_c) = lc3.spec_quantize(dt, sr, g_int, x)
+ (xg_c, nq_c) = lc3.spec_quantize(dt, sr, g_int, x)
ok = ok and np.amax(np.abs(1 - xg_c/xg)) < 1e-6
- ok = ok and np.any(abs(xq_c - xq) < 1)
ok = ok and nq_c == nq
return ok
def check_compute_nbits(rng, dt, sr):
- ne = T.I[dt][sr][-1]
ok = True
analysis = SpectrumAnalysis(dt, sr)
@@ -628,6 +675,7 @@ def check_compute_nbits(rng, dt, sr):
for nbytes in range(20, 150):
nbits_budget = nbytes * 8 - int(rng.random() * 100)
+ ne = T.I[dt][sr][-1]
xq = (rng.random(ne) * 8).astype(int)
nq = ne // 2 + int(rng.random() * ne // 2)
@@ -653,7 +701,6 @@ def check_compute_nbits(rng, dt, sr):
def check_adjust_gain(rng, dt, sr):
- ne = T.I[dt][sr][-1]
ok = True
analysis = SpectrumAnalysis(dt, sr)
@@ -664,7 +711,8 @@ def check_adjust_gain(rng, dt, sr):
g_adj = analysis.adjust_gain(g_idx, nbits, nbits_budget)
- g_adj_c = lc3.spec_adjust_gain(sr, g_idx, nbits, nbits_budget, 0)
+ g_adj_c = lc3.spec_adjust_gain(
+ dt, sr, g_idx, nbits, nbits_budget, 0)
ok = ok and g_adj_c == g_adj
@@ -672,8 +720,6 @@ def check_adjust_gain(rng, dt, sr):
def check_unit(rng, dt, sr):
- ns = T.NS[dt][sr]
- ne = T.I[dt][sr][-1]
ok = True
state_c = initial_state()
@@ -687,42 +733,47 @@ def check_unit(rng, dt, sr):
nbytes = 100
for i in range(10):
+ ns = T.NS[dt][sr]
+ ne = T.I[dt][sr][-1]
x = rng.random(ns) * 1e4
e = rng.random(min(len(x), 64)) * 1e10
- bwdet.run(e)
+ if sr < T.SRATE_48K_HR:
+ bwdet.run(e)
pitch_present = ltpf.run(x)
tns.run(x[:ne], sr, False, nbytes)
- sns.run(e, False, x)
+ sns.run(e, False, 0, x)
- (xq, nq, _) = analysis.run(sr, nbytes, bwdet.get_nbits(),
+ (xq, nq, xg) = analysis.run(sr, nbytes,
+ 0 if sr >= T.SRATE_48K_HR else bwdet.get_nbits(),
ltpf.get_nbits(), sns.get_nbits(), tns.get_nbits(), x[:ne])
- (_, xq_c, side_c) = lc3.spec_analyze(
- dt, sr, nbytes, pitch_present, tns.get_data(), state_c, x[:ne])
+ (xg_c, side_c) = lc3.spec_analyze(dt, sr,
+ nbytes, pitch_present, tns.get_data(), state_c, x[:ne])
ok = ok and side_c['g_idx'] == analysis.g_idx
ok = ok and side_c['nq'] == nq
- ok = ok and np.any(abs(xq_c - xq) < 1)
+ ok = ok and np.amax(np.abs(1 - xg_c/xg)) < 1e-6
return ok
-def check_noise(rng, dt, bw):
+def check_noise(rng, dt, bw, hrmode = False):
- ne = T.NE[dt][bw]
ok = True
analysis = SpectrumAnalysis(dt, bw)
- for i in range(10):
+ xq_off = [ 0.375, 0.5 ][hrmode]
+ for i in range(10):
+ ne = T.I[dt][bw][-1]
xq = ((rng.random(ne) - 0.5) * 10 ** (0.5)).astype(int)
nq = ne - int(rng.random() * 5)
- x = rng.random(ne) * i * 1e-1
+ x = xq - np.select([xq < 0, xq > 0], np.array([ xq_off, -xq_off ]))
nf = analysis.estimate_noise(bw, xq, nq, x)
- nf_c = lc3.spec_estimate_noise(dt, bw, xq, nq, x)
+ nf_c = lc3.spec_estimate_noise(dt, bw, hrmode, x, nq)
ok = ok and nf_c == nf
@@ -730,69 +781,76 @@ def check_noise(rng, dt, bw):
def check_appendix_c(dt):
+ i0 = dt - T.DT_7M5
sr = T.SRATE_16K
- ne = T.NE[dt][sr]
+
ok = True
state_c = initial_state()
- for i in range(len(C.X_F[dt])):
+ for i in range(len(C.X_F[i0])):
- g_int = lc3.spec_estimate_gain(dt, sr, C.X_F[dt][i],
- C.NBITS_SPEC[dt][i], C.NBITS_OFFSET[dt][i], -C.GG_OFF[dt][i])[0]
- ok = ok and g_int == C.GG_IND[dt][i] + C.GG_OFF[dt][i]
+ ne = T.I[dt][sr][-1]
- (_, xq, nq) = lc3.spec_quantize(dt, sr,
- C.GG_IND[dt][i] + C.GG_OFF[dt][i], C.X_F[dt][i])
- ok = ok and np.any((xq - C.X_Q[dt][i]) == 0)
- ok = ok and nq == C.LASTNZ[dt][i]
+ g_int = lc3.spec_estimate_gain(dt, sr, C.X_F[i0][i],
+ 0, C.NBITS_SPEC[i0][i], C.NBITS_OFFSET[i0][i], -C.GG_OFF[i0][i])[0]
+ ok = ok and g_int == C.GG_IND[i0][i] + C.GG_OFF[i0][i]
+ (x, nq) = lc3.spec_quantize(dt, sr,
+ C.GG_IND[i0][i] + C.GG_OFF[i0][i], C.X_F[i0][i])
+ x += np.select([x < 0, x > 0], np.array([ 0.375, -0.375 ]))
+ ok = ok and np.any((np.trunc(x) - C.X_Q[i0][i]) == 0)
+ ok = ok and nq == C.LASTNZ[i0][i]
nbits = lc3.spec_compute_nbits(dt, sr,
- C.NBYTES[dt], C.X_Q[dt][i], C.LASTNZ[dt][i], 0)[0]
- ok = ok and nbits == C.NBITS_EST[dt][i]
+ C.NBYTES[i0], C.X_Q[i0][i], C.LASTNZ[i0][i], 0)[0]
+ ok = ok and nbits == C.NBITS_EST[i0][i]
- g_adj = lc3.spec_adjust_gain(sr,
- C.GG_IND[dt][i], C.NBITS_EST[dt][i], C.NBITS_SPEC[dt][i], 0)
- ok = ok and g_adj == C.GG_IND_ADJ[dt][i] - C.GG_IND[dt][i]
+ g_adj = lc3.spec_adjust_gain(dt, sr,
+ C.GG_IND[i0][i], C.NBITS_EST[i0][i], C.NBITS_SPEC[i0][i], 0)
+ ok = ok and g_adj == C.GG_IND_ADJ[i0][i] - C.GG_IND[i0][i]
- if C.GG_IND_ADJ[dt][i] != C.GG_IND[dt][i]:
+ if C.GG_IND_ADJ[i0][i] != C.GG_IND[i0][i]:
- (_, xq, nq) = lc3.spec_quantize(dt, sr,
- C.GG_IND_ADJ[dt][i] + C.GG_OFF[dt][i], C.X_F[dt][i])
- lastnz = C.LASTNZ_REQ[dt][i]
- ok = ok and np.any(((xq - C.X_Q_REQ[dt][i])[:lastnz]) == 0)
+ (x, nq) = lc3.spec_quantize(dt, sr,
+ C.GG_IND_ADJ[i0][i] + C.GG_OFF[i0][i], C.X_F[i0][i])
+ lastnz = C.LASTNZ_REQ[i0][i]
+ x += np.select([x < 0, x > 0], np.array([ 0.375, -0.375 ]))
+ ok = ok and np.any(((np.trunc(x) - C.X_Q_REQ[i0][i])[:lastnz]) == 0)
tns_data = {
- 'nfilters' : C.NUM_TNS_FILTERS[dt][i],
+ 'nfilters' : C.NUM_TNS_FILTERS[i0][i],
'lpc_weighting' : [ True, True ],
- 'rc_order' : [ C.RC_ORDER[dt][i][0], 0 ],
- 'rc' : [ C.RC_I_1[dt][i] - 8, np.zeros(8, dtype = np.intc) ]
+ 'rc_order' : [ C.RC_ORDER[i0][i][0], 0 ],
+ 'rc' : [ C.RC_I_1[i0][i] - 8, np.zeros(8, dtype = np.intc) ]
}
- (x, xq, side) = lc3.spec_analyze(dt, sr, C.NBYTES[dt],
- C.PITCH_PRESENT[dt][i], tns_data, state_c, C.X_F[dt][i])
+ (x, side) = lc3.spec_analyze(dt, sr, C.NBYTES[i0],
+ C.PITCH_PRESENT[i0][i], tns_data, state_c, C.X_F[i0][i])
+
+ xq = x + np.select([x < 0, x > 0], np.array([ 0.375, -0.375 ]))
+ xq = np.trunc(xq)
- ok = ok and np.abs(state_c['nbits_off'] - C.NBITS_OFFSET[dt][i]) < 1e-5
- if C.GG_IND_ADJ[dt][i] != C.GG_IND[dt][i]:
- xq = C.X_Q_REQ[dt][i]
- nq = C.LASTNZ_REQ[dt][i]
- ok = ok and side['g_idx'] == C.GG_IND_ADJ[dt][i]
+ ok = ok and np.abs(state_c['nbits_off'] - C.NBITS_OFFSET[i0][i]) < 1e-5
+ if C.GG_IND_ADJ[i0][i] != C.GG_IND[i0][i]:
+ xq = C.X_Q_REQ[i0][i]
+ nq = C.LASTNZ_REQ[i0][i]
+ ok = ok and side['g_idx'] == C.GG_IND_ADJ[i0][i]
ok = ok and side['nq'] == nq
ok = ok and np.any(((xq[:nq] - xq[:nq])) == 0)
else:
- xq = C.X_Q[dt][i]
- nq = C.LASTNZ[dt][i]
- ok = ok and side['g_idx'] == C.GG_IND[dt][i]
+ xq = C.X_Q[i0][i]
+ nq = C.LASTNZ[i0][i]
+ ok = ok and side['g_idx'] == C.GG_IND[i0][i]
ok = ok and side['nq'] == nq
- ok = ok and np.any((xq[:nq] - C.X_Q[dt][i][:nq]) == 0)
- ok = ok and side['lsb_mode'] == C.LSB_MODE[dt][i]
+ ok = ok and np.any((xq[:nq] - C.X_Q[i0][i][:nq]) == 0)
+ ok = ok and side['lsb_mode'] == C.LSB_MODE[i0][i]
- gg = C.GG[dt][i] if C.GG_IND_ADJ[dt][i] == C.GG_IND[dt][i] \
- else C.GG_ADJ[dt][i]
+ gg = C.GG[i0][i] if C.GG_IND_ADJ[i0][i] == C.GG_IND[i0][i] \
+ else C.GG_ADJ[i0][i]
- nf = lc3.spec_estimate_noise(dt, C.P_BW[dt][i],
- xq, nq, C.X_F[dt][i] / gg)
- ok = ok and nf == C.F_NF[dt][i]
+ nf = lc3.spec_estimate_noise(
+ dt, C.P_BW[i0][i], False, C.X_F[i0][i] / gg, nq)
+ ok = ok and nf == C.F_NF[i0][i]
return ok
@@ -802,7 +860,7 @@ def check():
ok = True
for dt in range(T.NUM_DT):
- for sr in range(T.NUM_SRATE):
+ for sr in range(T.SRATE_8K, T.SRATE_48K + 1):
ok = ok and check_estimate_gain(rng, dt, sr)
ok = ok and check_quantization(rng, dt, sr)
ok = ok and check_compute_nbits(rng, dt, sr)
@@ -810,7 +868,16 @@ def check():
ok = ok and check_unit(rng, dt, sr)
ok = ok and check_noise(rng, dt, sr)
- for dt in range(T.NUM_DT):
+ for dt in ( T.DT_2M5, T.DT_5M, T.DT_10M ):
+ for sr in ( T.SRATE_48K_HR, T.SRATE_96K_HR ):
+ ok = ok and check_estimate_gain(rng, dt, sr)
+ ok = ok and check_quantization(rng, dt, sr)
+ ok = ok and check_compute_nbits(rng, dt, sr)
+ ok = ok and check_adjust_gain(rng, dt, sr)
+ ok = ok and check_unit(rng, dt, sr)
+ ok = ok and check_noise(rng, dt, sr, True)
+
+ for dt in ( T.DT_7M5, T.DT_10M ):
ok = ok and check_appendix_c(dt)
return ok
diff --git a/test/spec_py.c b/test/spec_py.c
index 730f68f..5ef3731 100644
--- a/test/spec_py.c
+++ b/test/spec_py.c
@@ -25,167 +25,149 @@
static PyObject *estimate_gain_py(PyObject *m, PyObject *args)
{
- PyObject *x_obj;
unsigned dt, sr;
- float *x;
- int nbits_budget;
+ int nbytes, nbits_budget, g_off;
float nbits_off;
- int g_off, g_min;
- bool reset_off;
+ PyObject *x_obj;
+ float *x;
- if (!PyArg_ParseTuple(args, "IIOifi", &dt, &sr,
- &x_obj, &nbits_budget, &nbits_off, &g_off))
+ if (!PyArg_ParseTuple(args, "IIOiifi", &dt, &sr,
+ &x_obj, &nbytes, &nbits_budget, &nbits_off, &g_off))
return NULL;
- CTYPES_CHECK("dt", (unsigned)dt < LC3_NUM_DT);
- CTYPES_CHECK("sr", (unsigned)sr < LC3_NUM_SRATE);
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("sr", sr < LC3_NUM_SRATE);
- int ne = LC3_NE(dt, sr);
+ int ne = lc3_ne(dt, sr);
CTYPES_CHECK("x", x_obj = to_1d_ptr(x_obj, NPY_FLOAT, ne, &x));
+ int g_min;
+ bool reset_off;
+
int g_int = estimate_gain(dt, sr,
- x, nbits_budget, nbits_off, g_off, &reset_off, &g_min);
+ x, nbytes, nbits_budget, nbits_off, g_off, &reset_off, &g_min);
return Py_BuildValue("iii", g_int, reset_off, g_min);
}
static PyObject *adjust_gain_py(PyObject *m, PyObject *args)
{
- unsigned sr;
+ unsigned dt, sr;
int g_idx, nbits, nbits_budget, g_idx_min;
- if (!PyArg_ParseTuple(args, "Iiiii", &sr, &g_idx,
- &nbits, &nbits_budget, &g_idx_min))
+ if (!PyArg_ParseTuple(args, "IIiiii", &dt, &sr,
+ &g_idx, &nbits, &nbits_budget, &g_idx_min))
return NULL;
- CTYPES_CHECK("sr", (unsigned)sr < LC3_NUM_SRATE);
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("sr", sr < LC3_NUM_SRATE);
CTYPES_CHECK("g_idx", g_idx >= 0 && g_idx <= 255);
- g_idx = adjust_gain(sr, g_idx, nbits, nbits_budget, g_idx_min);
+ g_idx = adjust_gain(dt, sr, g_idx, nbits, nbits_budget, g_idx_min);
return Py_BuildValue("i", g_idx);
}
static PyObject *quantize_py(PyObject *m, PyObject *args)
{
- PyObject *x_obj, *xq_obj;
unsigned dt, sr;
+ int g_int;
+ PyObject *x_obj;
float *x;
- int16_t *xq;
- int g_int, nq;
+ int nq;
if (!PyArg_ParseTuple(args, "IIiO", &dt, &sr, &g_int, &x_obj))
return NULL;
- CTYPES_CHECK("dt", (unsigned)dt < LC3_NUM_DT);
- CTYPES_CHECK("sr", (unsigned)sr < LC3_NUM_SRATE);
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("sr", sr < LC3_NUM_SRATE);
CTYPES_CHECK("g_int", g_int >= -255 && g_int <= 255);
- int ne = LC3_NE(dt, sr);
+ int ne = lc3_ne(dt, sr);
CTYPES_CHECK("x", x_obj = to_1d_ptr(x_obj, NPY_FLOAT, ne, &x));
- xq_obj = new_1d_ptr(NPY_INT16, ne, &xq);
- uint16_t __xq[ne];
+ quantize(dt, sr, g_int, x, &nq);
- quantize(dt, sr, g_int, x, __xq, &nq);
-
- for (int i = 0; i < nq; i++)
- xq[i] = __xq[i] & 1 ? -(__xq[i] >> 1) : (__xq[i] >> 1);
-
- return Py_BuildValue("ONi", x_obj, xq_obj, nq);
+ return Py_BuildValue("Oi", x_obj, nq);
}
static PyObject *compute_nbits_py(PyObject *m, PyObject *args)
{
- PyObject *xq_obj;
- unsigned dt, sr, nbytes;
- int16_t *xq;
- int nq, nbits_budget;
- bool lsb_mode;
+ unsigned dt, sr;
+ int nbytes, nq, nbits_budget;
+ PyObject *x_obj;
+ float *x;
- if (!PyArg_ParseTuple(args, "IIIOii", &dt, &sr,
- &nbytes, &xq_obj, &nq, &nbits_budget))
+ if (!PyArg_ParseTuple(args, "IIiOii", &dt, &sr,
+ &nbytes, &x_obj, &nq, &nbits_budget))
return NULL;
- CTYPES_CHECK("dt", (unsigned)dt < LC3_NUM_DT);
- CTYPES_CHECK("sr", (unsigned)sr < LC3_NUM_SRATE);
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("sr", sr < LC3_NUM_SRATE);
- int ne = LC3_NE(dt, sr);
+ int ne = lc3_ne(dt, sr);
- CTYPES_CHECK("xq", xq_obj = to_1d_ptr(xq_obj, NPY_INT16, ne, &xq));
+ CTYPES_CHECK("x", x_obj = to_1d_ptr(x_obj, NPY_FLOAT, ne, &x));
- uint16_t __xq[ne];
- for (int i = 0; i < ne; i++)
- __xq[i] = xq[i] < 0 ? (-xq[i] << 1) + 1 : (xq[i] << 1);
+ bool lsb_mode;
int nbits = compute_nbits(
- dt, sr, nbytes, __xq, &nq, nbits_budget, &lsb_mode);
+ dt, sr, nbytes, x, &nq, nbits_budget, &lsb_mode);
return Py_BuildValue("iii", nbits, nq, lsb_mode);
}
static PyObject *analyze_py(PyObject *m, PyObject *args)
{
- PyObject *tns_obj, *spec_obj, *x_obj, *xq_obj;
+ unsigned dt, sr;
+ int nbytes, pitch;
+
+ PyObject *tns_obj, *spec_obj, *x_obj;
struct lc3_tns_data tns = { 0 };
struct lc3_spec_analysis spec = { 0 };
struct lc3_spec_side side = { 0 };
- unsigned dt, sr, nbytes;
- int pitch;
float *x;
- int16_t *xq;
- if (!PyArg_ParseTuple(args, "IIIpOOO", &dt, &sr, &nbytes,
- &pitch, &tns_obj, &spec_obj, &x_obj))
+ if (!PyArg_ParseTuple(args, "IIipOOO", &dt, &sr,
+ &nbytes, &pitch, &tns_obj, &spec_obj, &x_obj))
return NULL;
- CTYPES_CHECK("dt", (unsigned)dt < LC3_NUM_DT);
- CTYPES_CHECK("sr", (unsigned)sr < LC3_NUM_SRATE);
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("sr", sr < LC3_NUM_SRATE);
- int ne = LC3_NE(dt, sr);
+ int ne = lc3_ne(dt, sr);
CTYPES_CHECK(NULL, tns_obj = to_tns_data(tns_obj, &tns));
CTYPES_CHECK(NULL, spec_obj = to_spec_analysis(spec_obj, &spec));
CTYPES_CHECK("x", x_obj = to_1d_ptr(x_obj, NPY_FLOAT, ne, &x));
- xq_obj = new_1d_ptr(NPY_INT16, ne, &xq);
- uint16_t __xq[ne];
-
- lc3_spec_analyze(dt, sr, nbytes, pitch, &tns, &spec, x, __xq, &side);
-
- for (int i = 0; i < ne; i++)
- xq[i] = __xq[i] & 1 ? -(__xq[i] >> 1) : (__xq[i] >> 1);
+ lc3_spec_analyze(dt, sr, nbytes, pitch, &tns, &spec, x, &side);
from_spec_analysis(spec_obj, &spec);
- return Py_BuildValue("ONN", x_obj, xq_obj, new_spec_side(&side));
+ return Py_BuildValue("ON", x_obj, new_spec_side(&side));
}
static PyObject *estimate_noise_py(PyObject *m, PyObject *args)
{
- PyObject *x_obj, *xq_obj;
unsigned dt, bw;
- int16_t *xq;
+ PyObject *x_obj;
float *x;
- int nq;
+ int hrmode, n;
- if (!PyArg_ParseTuple(args, "IIOIO", &dt, &bw, &xq_obj, &nq, &x_obj))
+ if (!PyArg_ParseTuple(args, "IIpOI",
+ &dt, &bw, &hrmode, &x_obj, &n))
return NULL;
- CTYPES_CHECK("dt", (unsigned)dt < LC3_NUM_DT);
- CTYPES_CHECK("bw", (unsigned)bw < LC3_NUM_BANDWIDTH);
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("bw", bw < LC3_NUM_BANDWIDTH);
- int ne = LC3_NE(dt, bw);
+ int ne = lc3_ne(dt, bw);
- CTYPES_CHECK("xq", xq_obj = to_1d_ptr(xq_obj, NPY_INT16, ne, &xq));
CTYPES_CHECK("x" , x_obj = to_1d_ptr(x_obj, NPY_FLOAT, ne, &x ));
- uint16_t __xq[nq];
- for (int i = 0; i < nq; i++)
- __xq[i] = xq[i] < 0 ? (-xq[i] << 1) + 1 : (xq[i] << 1);
-
- int noise_factor = estimate_noise(dt, bw, __xq, nq, x);
+ int noise_factor = estimate_noise(dt, bw, hrmode, x, n);
return Py_BuildValue("i", noise_factor);
}
diff --git a/test/tables.py b/test/tables.py
index 4886586..5df36ea 100644
--- a/test/tables.py
+++ b/test/tables.py
@@ -19,79 +19,146 @@ import numpy as np
### Generic ###
-DT_7M5 = 0
-DT_10M = 1
-NUM_DT = 2
+DT_2M5 = 0
+DT_5M = 1
+DT_7M5 = 2
+DT_10M = 3
+NUM_DT = 4
-DT_MS = np.array([ 7.5, 10 ])
+DT_MS = np.array([ 2.5, 5, 7.5, 10 ])
-SRATE_8K = 0
-SRATE_16K = 1
-SRATE_24K = 2
-SRATE_32K = 3
-SRATE_48K = 4
-NUM_SRATE = 5
+SRATE_8K = 0
+SRATE_8K = 0
+SRATE_16K = 1
+SRATE_24K = 2
+SRATE_32K = 3
+SRATE_48K = 4
+SRATE_48K_HR = 5
+SRATE_96K_HR = 6
+NUM_SR = 6
-SRATE_KHZ = np.array([ 8, 16, 24, 32, 48 ])
+SRATE_KHZ = np.array([ 8, 16, 24, 32, 48, 48, 96 ])
-NS = [ (SRATE_KHZ * DT_MS[dt]).astype(int) for dt in range(NUM_DT) ]
-NE = [ np.append(NS[dt][:-1], (NS[dt][-1] * 5) // 6) for dt in range(NUM_DT) ]
+NS = np.array([(SRATE_KHZ * DT_MS[dt]).astype(int) for dt in range(NUM_DT) ])
-ND = [ (23 * NS[0]) // 30, (5 * NS[1]) // 8 ]
+ND = NS // 2 + np.array([ 5 * SRATE_KHZ, 5 * SRATE_KHZ, \
+ 8 * SRATE_KHZ, 5 * SRATE_KHZ ]) // 4
-### 3.7.1/2 ###
+I_2M5_8K = np.array([
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20,
+])
-I_10M_8K = np.array([
+I_2M5_16K = np.array([
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
- 51, 53, 55, 57, 59, 61, 63, 65, 67, 69,
- 71, 73, 75, 77, 80
+ 30, 32, 34, 36, 38, 40,
])
-I_10M_16K = np.array([
+I_2M5_24K = np.array([
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 30,
- 32, 34, 36, 38, 40, 42, 44, 46, 48, 50,
- 52, 55, 58, 61, 64, 67, 70, 73, 76, 80,
- 84, 88, 92, 96, 101, 106, 111, 116, 121, 127,
- 133, 139, 146, 153, 160
+ 20, 21, 22, 23, 24, 25, 26, 28, 30, 32,
+ 34, 36, 38, 40, 42, 44, 47, 50, 53, 56,
+ 60,
])
-I_10M_24K = np.array([
+I_2M5_32K = np.array([
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 25, 27, 29, 31, 33, 35,
- 37, 39, 41, 43, 46, 49, 52, 55, 58, 61,
- 64, 68, 72, 76, 80, 85, 90, 95, 100, 106,
- 112, 118, 125, 132, 139, 147, 155, 164, 173, 183,
- 193, 204, 215, 227, 240
+ 20, 21, 22, 23, 24, 26, 28, 30, 32, 34,
+ 36, 38, 40, 43, 46, 49, 52, 55, 59, 63,
+ 67, 71, 75, 80,
])
-I_10M_32K = np.array([
+I_2M5_48K = np.array([
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,
- 41, 44, 47, 50, 53, 56, 60, 64, 68, 72,
- 76, 81, 86, 91, 97, 103, 109, 116, 123, 131,
- 139, 148, 157, 166, 176, 187, 199, 211, 224, 238,
- 252, 268, 284, 302, 320
+ 20, 21, 23, 25, 27, 29, 31, 33, 35, 37,
+ 40, 43, 46, 49, 52, 56, 60, 64, 68, 72,
+ 77, 82, 87, 93, 100,
])
-I_10M_48K = np.array([
+I_2M5_48K_HR = np.array([
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 20,
- 22, 24, 26, 28, 30, 32, 34, 36, 39, 42,
- 45, 48, 51, 55, 59, 63, 67, 71, 76, 81,
- 86, 92, 98, 105, 112, 119, 127, 135, 144, 154,
- 164, 175, 186, 198, 211, 225, 240, 256, 273, 291,
- 310, 330, 352, 375, 400
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 21, 23, 25, 27, 29, 31, 33, 35, 37, 40,
+ 43, 46, 49, 53, 57, 61, 65, 69, 74, 79,
+ 85, 91, 97, 104, 112, 120
+])
+
+I_2M5_96K_HR = np.array([
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 18, 20, 22,
+ 24, 26, 28, 30, 32, 35, 38, 41, 45, 49,
+ 53, 57, 62, 67, 73, 79, 85, 92, 100, 108,
+ 117, 127, 137, 149, 161, 174, 189, 204, 221, 240
+])
+
+I_5M_8K = np.array([
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 40,
+])
+
+I_5M_16K = np.array([
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 32, 34, 36, 38, 40, 42, 44, 46, 48,
+ 50, 52, 54, 57, 60, 63, 66, 69, 72, 76,
+ 80,
+])
+
+I_5M_24K = np.array([
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 26, 28, 30, 32, 34,
+ 36, 38, 40, 42, 44, 47, 50, 53, 56, 59,
+ 62, 65, 69, 73, 77, 81, 86, 91, 96, 101,
+ 107, 113, 120,
+])
+
+I_5M_32K = np.array([
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 24, 26, 28, 30, 32, 34, 36,
+ 38, 40, 42, 45, 48, 51, 54, 57, 61, 65,
+ 69, 73, 78, 83, 88, 93, 99, 105, 112, 119,
+ 126, 134, 142, 151, 160,
+])
+
+I_5M_48K = np.array([
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 23, 25, 27, 29, 31, 33, 35, 37,
+ 40, 43, 46, 49, 52, 55, 59, 63, 67, 72,
+ 77, 82, 87, 93, 99, 105, 112, 120, 128, 136,
+ 145, 155, 165, 176, 187, 200,
+])
+
+I_5M_48K_HR = np.array([
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 21, 23, 25, 27, 29, 31, 33, 35, 38, 41,
+ 44, 47, 50, 54, 58, 62, 66, 71, 76, 81,
+ 87, 93, 100, 107, 114, 122, 131, 140, 149, 160,
+ 171, 183, 196, 209, 224, 240,
+])
+
+I_5M_96K_HR = np.array([
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 19, 21,
+ 23, 25, 27, 29, 31, 34, 37, 40, 44, 48,
+ 52, 56, 61, 66, 71, 77, 83, 90, 98, 106,
+ 115, 124, 135, 146, 158, 171, 185, 200, 217, 235,
+ 254, 275, 298, 323, 349, 378, 409, 443, 480
])
I_7M5_8K = np.array([
@@ -144,13 +211,1650 @@ I_7M5_48K = np.array([
236, 251, 266, 283, 300
])
-I = [ [ I_7M5_8K, I_7M5_16K, I_7M5_24K, I_7M5_32K, I_7M5_48K ],
- [ I_10M_8K, I_10M_16K, I_10M_24K, I_10M_32K, I_10M_48K ] ]
+I_10M_8K = np.array([
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 51, 53, 55, 57, 59, 61, 63, 65, 67, 69,
+ 71, 73, 75, 77, 80
+])
+
+I_10M_16K = np.array([
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 30,
+ 32, 34, 36, 38, 40, 42, 44, 46, 48, 50,
+ 52, 55, 58, 61, 64, 67, 70, 73, 76, 80,
+ 84, 88, 92, 96, 101, 106, 111, 116, 121, 127,
+ 133, 139, 146, 153, 160
+])
+
+I_10M_24K = np.array([
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 25, 27, 29, 31, 33, 35,
+ 37, 39, 41, 43, 46, 49, 52, 55, 58, 61,
+ 64, 68, 72, 76, 80, 85, 90, 95, 100, 106,
+ 112, 118, 125, 132, 139, 147, 155, 164, 173, 183,
+ 193, 204, 215, 227, 240
+])
+
+I_10M_32K = np.array([
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,
+ 41, 44, 47, 50, 53, 56, 60, 64, 68, 72,
+ 76, 81, 86, 91, 97, 103, 109, 116, 123, 131,
+ 139, 148, 157, 166, 176, 187, 199, 211, 224, 238,
+ 252, 268, 284, 302, 320
+])
+
+I_10M_48K = np.array([
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 20,
+ 22, 24, 26, 28, 30, 32, 34, 36, 39, 42,
+ 45, 48, 51, 55, 59, 63, 67, 71, 76, 81,
+ 86, 92, 98, 105, 112, 119, 127, 135, 144, 154,
+ 164, 175, 186, 198, 211, 225, 240, 256, 273, 291,
+ 310, 330, 352, 375, 400
+])
+
+I_10M_48K_HR = np.array([
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 19, 21,
+ 23, 25, 27, 29, 31, 33, 36, 39, 42, 45,
+ 48, 51, 55, 59, 63, 67, 72, 77, 83, 89,
+ 95, 101, 108, 116, 124, 133, 142, 152, 163, 174,
+ 187, 200, 214, 229, 244, 262, 280, 299, 320, 343,
+ 367, 392, 419, 449, 480
+])
+
+I_10M_96K_HR = np.array([
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 14, 16, 18, 20, 22, 24, 26,
+ 28, 30, 33, 36, 39, 42, 46, 50, 54, 59,
+ 64, 69, 75, 82, 89, 96, 104, 113, 122, 132,
+ 143, 155, 168, 181, 196, 213, 230, 249, 270, 292,
+ 316, 342, 371, 401, 434, 470, 509, 551, 596, 646,
+ 699, 757, 819, 887, 960
+])
+
+I = [ [ I_2M5_8K, I_2M5_16K, I_2M5_24K, I_2M5_32K, I_2M5_48K,
+ I_2M5_48K_HR, I_2M5_96K_HR ],
+
+ [ I_5M_8K , I_5M_16K , I_5M_24K , I_5M_32K , I_5M_48K ,
+ I_5M_48K_HR, I_5M_96K_HR ],
+
+ [ I_7M5_8K, I_7M5_16K, I_7M5_24K, I_7M5_32K, I_7M5_48K ],
+
+ [ I_10M_8K, I_10M_16K, I_10M_24K, I_10M_32K, I_10M_48K,
+ I_10M_48K_HR, I_10M_96K_HR ] ]
+
+
+### LC3 PLUS - 5.9.2 ###
+
+W_2M5_8K = np.array([
+ 6.73791440e-03, 2.73228958e-02, 6.16356097e-02, 1.11912504e-01,
+ 1.78705350e-01, 2.60752499e-01, 3.54977638e-01, 4.56769675e-01,
+ 5.60523927e-01, 6.60366535e-01, 7.50943422e-01, 8.28138232e-01,
+ 8.89585018e-01, 9.34874773e-01, 9.65405703e-01, 9.83902633e-01,
+ 9.93718088e-01, 9.98098731e-01, 9.99626637e-01, 9.99977291e-01,
+ 9.99977291e-01, 9.99626637e-01, 9.98098731e-01, 9.93718088e-01,
+ 9.83902633e-01, 9.65405703e-01, 9.34874773e-01, 8.89585018e-01,
+ 8.28138232e-01, 7.50943422e-01, 6.60366535e-01, 5.60523927e-01,
+ 4.56769675e-01, 3.54977638e-01, 2.60752499e-01, 1.78705350e-01,
+ 1.11912504e-01, 6.16356097e-02, 2.73228958e-02, 6.73791440e-03,
+])
+
+W_2M5_16K = np.array([
+ 4.76441615e-03, 1.20463628e-02, 2.22639654e-02, 3.58022311e-02,
+ 5.29905465e-02, 7.40851840e-02, 9.92538592e-02, 1.28563118e-01,
+ 1.61969244e-01, 1.99313241e-01, 2.40320282e-01, 2.84603818e-01,
+ 3.31674323e-01, 3.80952458e-01, 4.31786202e-01, 4.83471316e-01,
+ 5.35274327e-01, 5.86457098e-01, 6.36301916e-01, 6.84136019e-01,
+ 7.29354445e-01, 7.71440129e-01, 8.09980291e-01, 8.44678279e-01,
+ 8.75360204e-01, 9.01975984e-01, 9.24594627e-01, 9.43393949e-01,
+ 9.58645225e-01, 9.70693650e-01, 9.79935831e-01, 9.86795807e-01,
+ 9.91701328e-01, 9.95062145e-01, 9.97251917e-01, 9.98595014e-01,
+ 9.99358895e-01, 9.99752127e-01, 9.99927440e-01, 9.99988650e-01,
+ 9.99988650e-01, 9.99927440e-01, 9.99752127e-01, 9.99358895e-01,
+ 9.98595014e-01, 9.97251917e-01, 9.95062145e-01, 9.91701328e-01,
+ 9.86795807e-01, 9.79935831e-01, 9.70693650e-01, 9.58645225e-01,
+ 9.43393949e-01, 9.24594627e-01, 9.01975984e-01, 8.75360204e-01,
+ 8.44678279e-01, 8.09980291e-01, 7.71440129e-01, 7.29354445e-01,
+ 6.84136019e-01, 6.36301916e-01, 5.86457098e-01, 5.35274327e-01,
+ 4.83471316e-01, 4.31786202e-01, 3.80952458e-01, 3.31674323e-01,
+ 2.84603818e-01, 2.40320282e-01, 1.99313241e-01, 1.61969244e-01,
+ 1.28563118e-01, 9.92538592e-02, 7.40851840e-02, 5.29905465e-02,
+ 3.58022311e-02, 2.22639654e-02, 1.20463628e-02, 4.76441615e-03,
+])
+
+W_2M5_24K = np.array([
+ 3.89013421e-03, 8.20259508e-03, 1.37023556e-02, 2.05296853e-02,
+ 2.88030773e-02, 3.86278514e-02, 5.00956972e-02, 6.32829654e-02,
+ 7.82488109e-02, 9.50334651e-02, 1.13656749e-01, 1.34116888e-01,
+ 1.56389671e-01, 1.80427981e-01, 2.06161727e-01, 2.33498181e-01,
+ 2.62322720e-01, 2.92499991e-01, 3.23875450e-01, 3.56277288e-01,
+ 3.89518694e-01, 4.23400416e-01, 4.57713594e-01, 4.92242792e-01,
+ 5.26769190e-01, 5.61073868e-01, 5.94941120e-01, 6.28161737e-01,
+ 6.60536189e-01, 6.91877646e-01, 7.22014766e-01, 7.50794208e-01,
+ 7.78082793e-01, 8.03769285e-01, 8.27765737e-01, 8.50008365e-01,
+ 8.70457945e-01, 8.89099694e-01, 9.05942652e-01, 9.21018560e-01,
+ 9.34380273e-01, 9.46099727e-01, 9.56265526e-01, 9.64980202e-01,
+ 9.72357239e-01, 9.78517931e-01, 9.83588198e-01, 9.87695434e-01,
+ 9.90965519e-01, 9.93520077e-01, 9.95474078e-01, 9.96933861e-01,
+ 9.97995624e-01, 9.98744422e-01, 9.99253666e-01, 9.99585105e-01,
+ 9.99789244e-01, 9.99906118e-01, 9.99966358e-01, 9.99992433e-01,
+ 9.99992433e-01, 9.99966358e-01, 9.99906118e-01, 9.99789244e-01,
+ 9.99585105e-01, 9.99253666e-01, 9.98744422e-01, 9.97995624e-01,
+ 9.96933861e-01, 9.95474078e-01, 9.93520077e-01, 9.90965519e-01,
+ 9.87695434e-01, 9.83588198e-01, 9.78517931e-01, 9.72357239e-01,
+ 9.64980202e-01, 9.56265526e-01, 9.46099727e-01, 9.34380273e-01,
+ 9.21018560e-01, 9.05942652e-01, 8.89099694e-01, 8.70457945e-01,
+ 8.50008365e-01, 8.27765737e-01, 8.03769285e-01, 7.78082793e-01,
+ 7.50794208e-01, 7.22014766e-01, 6.91877646e-01, 6.60536189e-01,
+ 6.28161737e-01, 5.94941120e-01, 5.61073868e-01, 5.26769190e-01,
+ 4.92242792e-01, 4.57713594e-01, 4.23400416e-01, 3.89518694e-01,
+ 3.56277288e-01, 3.23875450e-01, 2.92499991e-01, 2.62322720e-01,
+ 2.33498181e-01, 2.06161727e-01, 1.80427981e-01, 1.56389671e-01,
+ 1.34116888e-01, 1.13656749e-01, 9.50334651e-02, 7.82488109e-02,
+ 6.32829654e-02, 5.00956972e-02, 3.86278514e-02, 2.88030773e-02,
+ 2.05296853e-02, 1.37023556e-02, 8.20259508e-03, 3.89013421e-03,
+])
+
+W_2M5_32K = np.array([
+ 3.36895835e-03, 6.45555741e-03, 1.01430808e-02, 1.45212685e-02,
+ 1.96507673e-02, 2.55835280e-02, 3.23662853e-02, 4.00411787e-02,
+ 4.86456418e-02, 5.82120708e-02, 6.87674290e-02, 8.03328498e-02,
+ 9.29232660e-02, 1.06547081e-01, 1.21205893e-01, 1.36894275e-01,
+ 1.53599623e-01, 1.71302066e-01, 1.89974455e-01, 2.09582413e-01,
+ 2.30084468e-01, 2.51432255e-01, 2.73570790e-01, 2.96438816e-01,
+ 3.19969212e-01, 3.44089476e-01, 3.68722258e-01, 3.93785956e-01,
+ 4.19195353e-01, 4.44862309e-01, 4.70696475e-01, 4.96606050e-01,
+ 5.22498546e-01, 5.48281575e-01, 5.73863636e-01, 5.99154896e-01,
+ 6.24067964e-01, 6.48518633e-01, 6.72426605e-01, 6.95716161e-01,
+ 7.18316799e-01, 7.40163807e-01, 7.61198780e-01, 7.81370064e-01,
+ 8.00633131e-01, 8.18950870e-01, 8.36293796e-01, 8.52640176e-01,
+ 8.67976054e-01, 8.82295205e-01, 8.95598976e-01, 9.07896060e-01,
+ 9.19202165e-01, 9.29539615e-01, 9.38936863e-01, 9.47427941e-01,
+ 9.55051846e-01, 9.61851871e-01, 9.67874900e-01, 9.73170662e-01,
+ 9.77790986e-01, 9.81789034e-01, 9.85218555e-01, 9.88133167e-01,
+ 9.90585664e-01, 9.92627388e-01, 9.94307658e-01, 9.95673273e-01,
+ 9.96768094e-01, 9.97632718e-01, 9.98304240e-01, 9.98816100e-01,
+ 9.99198030e-01, 9.99476075e-01, 9.99672688e-01, 9.99806905e-01,
+ 9.99894561e-01, 9.99948558e-01, 9.99979163e-01, 9.99994325e-01,
+ 9.99994325e-01, 9.99979163e-01, 9.99948558e-01, 9.99894561e-01,
+ 9.99806905e-01, 9.99672688e-01, 9.99476075e-01, 9.99198030e-01,
+ 9.98816100e-01, 9.98304240e-01, 9.97632718e-01, 9.96768094e-01,
+ 9.95673273e-01, 9.94307658e-01, 9.92627388e-01, 9.90585664e-01,
+ 9.88133167e-01, 9.85218555e-01, 9.81789034e-01, 9.77790986e-01,
+ 9.73170662e-01, 9.67874900e-01, 9.61851871e-01, 9.55051846e-01,
+ 9.47427941e-01, 9.38936863e-01, 9.29539615e-01, 9.19202165e-01,
+ 9.07896060e-01, 8.95598976e-01, 8.82295205e-01, 8.67976054e-01,
+ 8.52640176e-01, 8.36293796e-01, 8.18950870e-01, 8.00633131e-01,
+ 7.81370064e-01, 7.61198780e-01, 7.40163807e-01, 7.18316799e-01,
+ 6.95716161e-01, 6.72426605e-01, 6.48518633e-01, 6.24067964e-01,
+ 5.99154896e-01, 5.73863636e-01, 5.48281575e-01, 5.22498546e-01,
+ 4.96606050e-01, 4.70696475e-01, 4.44862309e-01, 4.19195353e-01,
+ 3.93785956e-01, 3.68722258e-01, 3.44089476e-01, 3.19969212e-01,
+ 2.96438816e-01, 2.73570790e-01, 2.51432255e-01, 2.30084468e-01,
+ 2.09582413e-01, 1.89974455e-01, 1.71302066e-01, 1.53599623e-01,
+ 1.36894275e-01, 1.21205893e-01, 1.06547081e-01, 9.29232660e-02,
+ 8.03328498e-02, 6.87674290e-02, 5.82120708e-02, 4.86456418e-02,
+ 4.00411787e-02, 3.23662853e-02, 2.55835280e-02, 1.96507673e-02,
+ 1.45212685e-02, 1.01430808e-02, 6.45555741e-03, 3.36895835e-03,
+])
+
+W_2M5_48K = np.array([
+ 2.75074638e-03, 4.77524515e-03, 6.99126548e-03, 9.47011816e-03,
+ 1.22441576e-02, 1.53355947e-02, 1.87626677e-02, 2.25415434e-02,
+ 2.66870142e-02, 3.12127707e-02, 3.61315008e-02, 4.14549100e-02,
+ 4.71937052e-02, 5.33575588e-02, 5.99550649e-02, 6.69936920e-02,
+ 7.44797342e-02, 8.24182658e-02, 9.08130967e-02, 9.96667332e-02,
+ 1.08980342e-01, 1.18753719e-01, 1.28985265e-01, 1.39671964e-01,
+ 1.50809372e-01, 1.62391604e-01, 1.74411338e-01, 1.86859813e-01,
+ 1.99726844e-01, 2.13000841e-01, 2.26668825e-01, 2.40716465e-01,
+ 2.55128110e-01, 2.69886836e-01, 2.84974488e-01, 3.00371741e-01,
+ 3.16058154e-01, 3.32012241e-01, 3.48211540e-01, 3.64632687e-01,
+ 3.81251499e-01, 3.98043054e-01, 4.14981787e-01, 4.32041576e-01,
+ 4.49195839e-01, 4.66417630e-01, 4.83679744e-01, 5.00954812e-01,
+ 5.18215407e-01, 5.35434150e-01, 5.52583807e-01, 5.69637402e-01,
+ 5.86568309e-01, 6.03350364e-01, 6.19957957e-01, 6.36366131e-01,
+ 6.52550680e-01, 6.68488237e-01, 6.84156362e-01, 6.99533624e-01,
+ 7.14599684e-01, 7.29335364e-01, 7.43722715e-01, 7.57745082e-01,
+ 7.71387158e-01, 7.84635031e-01, 7.97476230e-01, 8.09899758e-01,
+ 8.21896119e-01, 8.33457339e-01, 8.44576978e-01, 8.55250134e-01,
+ 8.65473441e-01, 8.75245054e-01, 8.84564635e-01, 8.93433321e-01,
+ 9.01853689e-01, 9.09829718e-01, 9.17366735e-01, 9.24471360e-01,
+ 9.31151439e-01, 9.37415982e-01, 9.43275077e-01, 9.48739819e-01,
+ 9.53822215e-01, 9.58535102e-01, 9.62892048e-01, 9.66907259e-01,
+ 9.70595479e-01, 9.73971891e-01, 9.77052016e-01, 9.79851615e-01,
+ 9.82386589e-01, 9.84672882e-01, 9.86726389e-01, 9.88562863e-01,
+ 9.90197830e-01, 9.91646510e-01, 9.92923740e-01, 9.94043905e-01,
+ 9.95020875e-01, 9.95867954e-01, 9.96597827e-01, 9.97222527e-01,
+ 9.97753399e-01, 9.98201077e-01, 9.98575471e-01, 9.98885756e-01,
+ 9.99140376e-01, 9.99347044e-01, 9.99512763e-01, 9.99643838e-01,
+ 9.99745907e-01, 9.99823966e-01, 9.99882403e-01, 9.99925037e-01,
+ 9.99955157e-01, 9.99975561e-01, 9.99988598e-01, 9.99996217e-01,
+ 9.99996217e-01, 9.99988598e-01, 9.99975561e-01, 9.99955157e-01,
+ 9.99925037e-01, 9.99882403e-01, 9.99823966e-01, 9.99745907e-01,
+ 9.99643838e-01, 9.99512763e-01, 9.99347044e-01, 9.99140376e-01,
+ 9.98885756e-01, 9.98575471e-01, 9.98201077e-01, 9.97753399e-01,
+ 9.97222527e-01, 9.96597827e-01, 9.95867954e-01, 9.95020875e-01,
+ 9.94043905e-01, 9.92923740e-01, 9.91646510e-01, 9.90197830e-01,
+ 9.88562863e-01, 9.86726389e-01, 9.84672882e-01, 9.82386589e-01,
+ 9.79851615e-01, 9.77052016e-01, 9.73971891e-01, 9.70595479e-01,
+ 9.66907259e-01, 9.62892048e-01, 9.58535102e-01, 9.53822215e-01,
+ 9.48739819e-01, 9.43275077e-01, 9.37415982e-01, 9.31151439e-01,
+ 9.24471360e-01, 9.17366735e-01, 9.09829718e-01, 9.01853689e-01,
+ 8.93433321e-01, 8.84564635e-01, 8.75245054e-01, 8.65473441e-01,
+ 8.55250134e-01, 8.44576978e-01, 8.33457339e-01, 8.21896119e-01,
+ 8.09899758e-01, 7.97476230e-01, 7.84635031e-01, 7.71387158e-01,
+ 7.57745082e-01, 7.43722715e-01, 7.29335364e-01, 7.14599684e-01,
+ 6.99533624e-01, 6.84156362e-01, 6.68488237e-01, 6.52550680e-01,
+ 6.36366131e-01, 6.19957957e-01, 6.03350364e-01, 5.86568309e-01,
+ 5.69637402e-01, 5.52583807e-01, 5.35434150e-01, 5.18215407e-01,
+ 5.00954812e-01, 4.83679744e-01, 4.66417630e-01, 4.49195839e-01,
+ 4.32041576e-01, 4.14981787e-01, 3.98043054e-01, 3.81251499e-01,
+ 3.64632687e-01, 3.48211540e-01, 3.32012241e-01, 3.16058154e-01,
+ 3.00371741e-01, 2.84974488e-01, 2.69886836e-01, 2.55128110e-01,
+ 2.40716465e-01, 2.26668825e-01, 2.13000841e-01, 1.99726844e-01,
+ 1.86859813e-01, 1.74411338e-01, 1.62391604e-01, 1.50809372e-01,
+ 1.39671964e-01, 1.28985265e-01, 1.18753719e-01, 1.08980342e-01,
+ 9.96667332e-02, 9.08130967e-02, 8.24182658e-02, 7.44797342e-02,
+ 6.69936920e-02, 5.99550649e-02, 5.33575588e-02, 4.71937052e-02,
+ 4.14549100e-02, 3.61315008e-02, 3.12127707e-02, 2.66870142e-02,
+ 2.25415434e-02, 1.87626677e-02, 1.53355947e-02, 1.22441576e-02,
+ 9.47011816e-03, 6.99126548e-03, 4.77524515e-03, 2.75074638e-03,
+])
+
+W_2M5_48K_HR = np.array([
+ 1.92887526e-07, 1.26862312e-06, 3.73694297e-06, 8.64938647e-06,
+ 1.75249988e-05, 3.25100409e-05, 5.65499504e-05, 9.35865319e-05,
+ 1.48780979e-04, 2.28761899e-04, 3.41896375e-04, 4.98580979e-04,
+ 7.11548259e-04, 9.96182440e-04, 1.37083745e-03, 1.85714674e-03,
+ 2.48031598e-03, 3.26938415e-03, 4.25744150e-03, 5.48178842e-03,
+ 6.98402245e-03, 8.81003775e-03, 1.10099232e-02, 1.36377569e-02,
+ 1.67512707e-02, 2.04114113e-02, 2.46817525e-02, 2.96278261e-02,
+ 3.53163108e-02, 4.18141559e-02, 4.91876006e-02, 5.75011559e-02,
+ 6.68165460e-02, 7.71916136e-02, 8.86792317e-02, 1.01326235e-01,
+ 1.15172401e-01, 1.30249396e-01, 1.46579877e-01, 1.64176553e-01,
+ 1.83041364e-01, 2.03164726e-01, 2.24524856e-01, 2.47087196e-01,
+ 2.70803988e-01, 2.95613915e-01, 3.21442008e-01, 3.48199695e-01,
+ 3.75785023e-01, 4.04083431e-01, 4.32968378e-01, 4.62302625e-01,
+ 4.91939783e-01, 5.21726012e-01, 5.51502347e-01, 5.81106782e-01,
+ 6.10377192e-01, 6.39154077e-01, 6.67283058e-01, 6.94617987e-01,
+ 7.21023440e-01, 7.46377110e-01, 7.70571768e-01, 7.93517113e-01,
+ 8.15140784e-01, 8.35389018e-01, 8.54227006e-01, 8.71638596e-01,
+ 8.87625158e-01, 9.02204990e-01, 9.15411413e-01, 9.27291155e-01,
+ 9.37902570e-01, 9.47313428e-01, 9.55598950e-01, 9.62839723e-01,
+ 9.69119847e-01, 9.74524975e-01, 9.79140759e-01, 9.83051181e-01,
+ 9.86337543e-01, 9.89076972e-01, 9.91342008e-01, 9.93199587e-01,
+ 9.94710743e-01, 9.95930433e-01, 9.96907234e-01, 9.97683644e-01,
+ 9.98296261e-01, 9.98776138e-01, 9.99149203e-01, 9.99436796e-01,
+ 9.99656200e-01, 9.99821365e-01, 9.99943137e-01, 1.00003016e+00,
+ 1.00008917e+00, 1.00012529e+00, 1.00014281e+00, 1.00014508e+00,
+ 1.00013494e+00, 1.00011492e+00, 1.00008726e+00, 1.00005412e+00,
+ 1.00001764e+00, 9.99979734e-01, 9.99942362e-01, 9.99907196e-01,
+ 9.99876022e-01, 9.99850094e-01, 9.99830663e-01, 9.99818563e-01,
+ 9.99814391e-01, 9.99818325e-01, 9.99830186e-01, 9.99849498e-01,
+ 9.99875486e-01, 9.99906898e-01, 9.99942422e-01, 9.99980509e-01,
+ 1.00001943e+00, 1.00005758e+00, 1.00009310e+00, 1.00012457e+00,
+ 1.00015044e+00, 1.00016987e+00, 1.00018167e+00, 1.00018561e+00,
+ 1.00018144e+00, 1.00016928e+00, 1.00014985e+00, 1.00012374e+00,
+ 1.00009227e+00, 1.00005662e+00, 1.00001836e+00, 9.99978960e-01,
+ 9.99939740e-01, 9.99902129e-01, 9.99867082e-01, 9.99835134e-01,
+ 9.99806285e-01, 9.99779761e-01, 9.99753773e-01, 9.99725282e-01,
+ 9.99689877e-01, 9.99641180e-01, 9.99570787e-01, 9.99467850e-01,
+ 9.99318600e-01, 9.99105930e-01, 9.98809040e-01, 9.98403072e-01,
+ 9.97858584e-01, 9.97141182e-01, 9.96211350e-01, 9.95023966e-01,
+ 9.93528485e-01, 9.91668522e-01, 9.89382327e-01, 9.86602664e-01,
+ 9.83257711e-01, 9.79271173e-01, 9.74563420e-01, 9.69052374e-01,
+ 9.62654769e-01, 9.55287457e-01, 9.46869195e-01, 9.37322080e-01,
+ 9.26573634e-01, 9.14558887e-01, 9.01221931e-01, 8.86518419e-01,
+ 8.70416999e-01, 8.52901220e-01, 8.33971083e-01, 8.13643873e-01,
+ 7.91955233e-01, 7.68959403e-01, 7.44728804e-01, 7.19353676e-01,
+ 6.92940772e-01, 6.65611804e-01, 6.37501359e-01, 6.08754635e-01,
+ 5.79524696e-01, 5.49970031e-01, 5.20251453e-01, 4.90529478e-01,
+ 4.60961968e-01, 4.31701392e-01, 4.02893007e-01, 3.74672860e-01,
+ 3.47166419e-01, 3.20487350e-01, 2.94736743e-01, 2.70002425e-01,
+ 2.46358722e-01, 2.23866433e-01, 2.02572897e-01, 1.82512373e-01,
+ 1.63706377e-01, 1.46164373e-01, 1.29884347e-01, 1.14853561e-01,
+ 1.01049446e-01, 8.84404257e-02, 7.69868940e-02, 6.66421950e-02,
+ 5.73536530e-02, 4.90636751e-02, 4.17107828e-02, 3.52307148e-02,
+ 2.95574907e-02, 2.46244166e-02, 2.03650557e-02, 1.67141166e-02,
+ 1.36082442e-02, 1.09867034e-02, 8.79194960e-03, 6.97008055e-03,
+ 5.47116203e-03, 4.24943818e-03, 3.26343346e-03, 2.47595203e-03,
+ 1.85399409e-03, 1.36859657e-03, 9.94618051e-04, 7.10477470e-04,
+ 4.97864152e-04, 3.41428356e-04, 2.28464938e-04, 1.48598730e-04,
+ 9.34789787e-05, 5.64894217e-05, 3.24779357e-05, 1.75092246e-05,
+ 8.64240701e-06, 3.73430225e-06, 1.26786131e-06, 1.92776696e-07,
+])
+
+W_2M5_96K_HR = np.array([
+ 1.36335345e-07, 4.57767612e-07, 9.97567554e-07, 1.84077624e-06,
+ 3.09224833e-06, 4.88094383e-06, 7.36381799e-06, 1.07300075e-05,
+ 1.52053863e-05, 2.10575054e-05, 2.86009363e-05, 3.82030121e-05,
+ 5.02899893e-05, 6.53535899e-05, 8.39579952e-05, 1.06747175e-04,
+ 1.34452668e-04, 1.67901671e-04, 2.08025551e-04, 2.55868625e-04,
+ 3.12597229e-04, 3.79509147e-04, 4.58043127e-04, 5.49788703e-04,
+ 6.56496093e-04, 7.80086033e-04, 9.22659819e-04, 1.08650920e-03,
+ 1.27412600e-03, 1.48821168e-03, 1.73168664e-03, 2.00769864e-03,
+ 2.31963093e-03, 2.67111068e-03, 3.06601473e-03, 3.50847607e-03,
+ 4.00288915e-03, 4.55391267e-03, 5.16647473e-03, 5.84577024e-03,
+ 6.59726607e-03, 7.42669497e-03, 8.34005512e-03, 9.34360363e-03,
+ 1.04438523e-02, 1.16475578e-02, 1.29617099e-02, 1.43935224e-02,
+ 1.59504171e-02, 1.76400058e-02, 1.94700807e-02, 2.14485861e-02,
+ 2.35835947e-02, 2.58832965e-02, 2.83559617e-02, 3.10099237e-02,
+ 3.38535421e-02, 3.68951820e-02, 4.01431806e-02, 4.36058082e-02,
+ 4.72912528e-02, 5.12075722e-02, 5.53626679e-02, 5.97642474e-02,
+ 6.44197986e-02, 6.93365484e-02, 7.45214298e-02, 7.99810365e-02,
+ 8.57216269e-02, 9.17490497e-02, 9.80687290e-02, 1.04685634e-01,
+ 1.11604236e-01, 1.18828513e-01, 1.26361862e-01, 1.34207115e-01,
+ 1.42366499e-01, 1.50841609e-01, 1.59633383e-01, 1.68742076e-01,
+ 1.78167209e-01, 1.87907621e-01, 1.97961360e-01, 2.08325714e-01,
+ 2.18997195e-01, 2.29971498e-01, 2.41243511e-01, 2.52807260e-01,
+ 2.64655977e-01, 2.76782036e-01, 2.89176911e-01, 3.01831275e-01,
+ 3.14734906e-01, 3.27876776e-01, 3.41245025e-01, 3.54826927e-01,
+ 3.68608981e-01, 3.82576853e-01, 3.96715522e-01, 4.11009163e-01,
+ 4.25441355e-01, 4.39994961e-01, 4.54652220e-01, 4.69394863e-01,
+ 4.84204173e-01, 4.99060899e-01, 5.13945460e-01, 5.28838038e-01,
+ 5.43718576e-01, 5.58566749e-01, 5.73362410e-01, 5.88085234e-01,
+ 6.02715075e-01, 6.17232025e-01, 6.31616414e-01, 6.45848989e-01,
+ 6.59910858e-01, 6.73783839e-01, 6.87450290e-01, 7.00893283e-01,
+ 7.14096606e-01, 7.27045000e-01, 7.39724100e-01, 7.52120554e-01,
+ 7.64221907e-01, 7.76016891e-01, 7.87495315e-01, 7.98648119e-01,
+ 8.09467375e-01, 8.19946468e-01, 8.30079675e-01, 8.39862764e-01,
+ 8.49292517e-01, 8.58366787e-01, 8.67084682e-01, 8.75446379e-01,
+ 8.83453131e-01, 8.91107082e-01, 8.98411512e-01, 9.05370474e-01,
+ 9.11989033e-01, 9.18272913e-01, 9.24228728e-01, 9.29863691e-01,
+ 9.35185611e-01, 9.40202892e-01, 9.44924474e-01, 9.49359715e-01,
+ 9.53518271e-01, 9.57410157e-01, 9.61045623e-01, 9.64435160e-01,
+ 9.67589259e-01, 9.70518589e-01, 9.73233819e-01, 9.75745618e-01,
+ 9.78064537e-01, 9.80201006e-01, 9.82165277e-01, 9.83967602e-01,
+ 9.85617757e-01, 9.87125397e-01, 9.88499880e-01, 9.89750206e-01,
+ 9.90885139e-01, 9.91913080e-01, 9.92841959e-01, 9.93679583e-01,
+ 9.94433045e-01, 9.95109439e-01, 9.95715141e-01, 9.96256351e-01,
+ 9.96738791e-01, 9.97167945e-01, 9.97548699e-01, 9.97885823e-01,
+ 9.98183608e-01, 9.98446047e-01, 9.98676717e-01, 9.98879075e-01,
+ 9.99056041e-01, 9.99210536e-01, 9.99344945e-01, 9.99461591e-01,
+ 9.99562562e-01, 9.99649644e-01, 9.99724448e-01, 9.99788404e-01,
+ 9.99842882e-01, 9.99888957e-01, 9.99927700e-01, 9.99959946e-01,
+ 9.99986470e-01, 1.00000799e+00, 1.00002515e+00, 1.00003839e+00,
+ 1.00004816e+00, 1.00005496e+00, 1.00005913e+00, 1.00006092e+00,
+ 1.00006080e+00, 1.00005877e+00, 1.00005519e+00, 1.00005031e+00,
+ 1.00004435e+00, 1.00003731e+00, 1.00002968e+00, 1.00002134e+00,
+ 1.00001252e+00, 1.00000334e+00, 9.99994040e-01, 9.99984682e-01,
+ 9.99975443e-01, 9.99966383e-01, 9.99957621e-01, 9.99949336e-01,
+ 9.99941528e-01, 9.99934316e-01, 9.99927878e-01, 9.99922156e-01,
+ 9.99917269e-01, 9.99913335e-01, 9.99910295e-01, 9.99908268e-01,
+ 9.99907196e-01, 9.99907196e-01, 9.99908149e-01, 9.99910176e-01,
+ 9.99913156e-01, 9.99917090e-01, 9.99921918e-01, 9.99927640e-01,
+ 9.99934137e-01, 9.99941349e-01, 9.99949217e-01, 9.99957681e-01,
+ 9.99966562e-01, 9.99975860e-01, 9.99985397e-01, 9.99995112e-01,
+ 1.00000489e+00, 1.00001454e+00, 1.00002408e+00, 1.00003338e+00,
+ 1.00004232e+00, 1.00005078e+00, 1.00005865e+00, 1.00006592e+00,
+ 1.00007236e+00, 1.00007808e+00, 1.00008297e+00, 1.00008690e+00,
+ 1.00008988e+00, 1.00009179e+00, 1.00009286e+00, 1.00009274e+00,
+ 1.00009179e+00, 1.00008965e+00, 1.00008667e+00, 1.00008261e+00,
+ 1.00007772e+00, 1.00007200e+00, 1.00006545e+00, 1.00005817e+00,
+ 1.00005031e+00, 1.00004172e+00, 1.00003278e+00, 1.00002337e+00,
+ 1.00001371e+00, 1.00000370e+00, 9.99993682e-01, 9.99983490e-01,
+ 9.99973357e-01, 9.99963224e-01, 9.99953210e-01, 9.99943376e-01,
+ 9.99933660e-01, 9.99924064e-01, 9.99914587e-01, 9.99905109e-01,
+ 9.99895573e-01, 9.99885738e-01, 9.99875546e-01, 9.99864578e-01,
+ 9.99852657e-01, 9.99839306e-01, 9.99824166e-01, 9.99806523e-01,
+ 9.99785900e-01, 9.99761462e-01, 9.99732316e-01, 9.99697566e-01,
+ 9.99655962e-01, 9.99606311e-01, 9.99547124e-01, 9.99476731e-01,
+ 9.99393344e-01, 9.99294996e-01, 9.99179363e-01, 9.99043941e-01,
+ 9.98886049e-01, 9.98702645e-01, 9.98490512e-01, 9.98246014e-01,
+ 9.97965276e-01, 9.97644246e-01, 9.97278214e-01, 9.96862471e-01,
+ 9.96391773e-01, 9.95860577e-01, 9.95262980e-01, 9.94592726e-01,
+ 9.93843138e-01, 9.93007302e-01, 9.92077827e-01, 9.91046965e-01,
+ 9.89906728e-01, 9.88648713e-01, 9.87264156e-01, 9.85744119e-01,
+ 9.84079301e-01, 9.82260108e-01, 9.80276704e-01, 9.78119195e-01,
+ 9.75777209e-01, 9.73240614e-01, 9.70498860e-01, 9.67541456e-01,
+ 9.64357972e-01, 9.60937798e-01, 9.57270682e-01, 9.53346252e-01,
+ 9.49154437e-01, 9.44685459e-01, 9.39929724e-01, 9.34878111e-01,
+ 9.29521918e-01, 9.23852861e-01, 9.17863250e-01, 9.11546052e-01,
+ 9.04894829e-01, 8.97903919e-01, 8.90568554e-01, 8.82884681e-01,
+ 8.74849200e-01, 8.66460025e-01, 8.57716084e-01, 8.48617196e-01,
+ 8.39164436e-01, 8.29359889e-01, 8.19206893e-01, 8.08709860e-01,
+ 7.97874272e-01, 7.86707044e-01, 7.75215983e-01, 7.63410211e-01,
+ 7.51299858e-01, 7.38896310e-01, 7.26211846e-01, 7.13259816e-01,
+ 7.00054646e-01, 6.86611593e-01, 6.72946632e-01, 6.59076810e-01,
+ 6.45019531e-01, 6.30793154e-01, 6.16416335e-01, 6.01908267e-01,
+ 5.87288618e-01, 5.72577178e-01, 5.57793975e-01, 5.42959273e-01,
+ 5.28093219e-01, 5.13215959e-01, 4.98347521e-01, 4.83507633e-01,
+ 4.68715757e-01, 4.53991085e-01, 4.39352304e-01, 4.24817562e-01,
+ 4.10404533e-01, 3.96130294e-01, 3.82011205e-01, 3.68063033e-01,
+ 3.54300767e-01, 3.40738595e-01, 3.27390045e-01, 3.14267725e-01,
+ 3.01383466e-01, 2.88748264e-01, 2.76372313e-01, 2.64264882e-01,
+ 2.52434462e-01, 2.40888610e-01, 2.29634136e-01, 2.18676925e-01,
+ 2.08022103e-01, 1.97673932e-01, 1.87635899e-01, 1.77910715e-01,
+ 1.68500274e-01, 1.59405768e-01, 1.50627658e-01, 1.42165691e-01,
+ 1.34018898e-01, 1.26185730e-01, 1.18663922e-01, 1.11450672e-01,
+ 1.04542568e-01, 9.79356542e-02, 9.16254595e-02, 8.56070295e-02,
+ 7.98749477e-02, 7.44233727e-02, 6.92460760e-02, 6.43364564e-02,
+ 5.96875995e-02, 5.52923009e-02, 5.11430874e-02, 4.72322591e-02,
+ 4.35519405e-02, 4.00940813e-02, 3.68505120e-02, 3.38129811e-02,
+ 3.09731625e-02, 2.83227116e-02, 2.58532818e-02, 2.35565584e-02,
+ 2.14242823e-02, 1.94482822e-02, 1.76204946e-02, 1.59329921e-02,
+ 1.43779973e-02, 1.29479105e-02, 1.16353221e-02, 1.04330294e-02,
+ 9.33405478e-03, 8.33165180e-03, 7.41932075e-03, 6.59081247e-03,
+ 5.84013900e-03, 5.16157458e-03, 4.54966258e-03, 3.99921415e-03,
+ 3.50530911e-03, 3.06329457e-03, 2.66878284e-03, 2.31764605e-03,
+ 2.00601248e-03, 1.73026032e-03, 1.48701016e-03, 1.27311819e-03,
+ 1.08566787e-03, 9.21960978e-04, 7.79508497e-04, 6.56021410e-04,
+ 5.49400807e-04, 4.57728049e-04, 3.79254925e-04, 3.12393560e-04,
+ 2.55706662e-04, 2.07897814e-04, 1.67801816e-04, 1.34375354e-04,
+ 1.06687941e-04, 8.39131390e-05, 6.53200550e-05, 5.02652765e-05,
+ 3.81850987e-05, 2.85881870e-05, 2.10486251e-05, 1.51993554e-05,
+ 1.07260339e-05, 7.36129550e-06, 4.87941543e-06, 3.09137795e-06,
+ 1.84032115e-06, 9.97358256e-07, 4.57689993e-07, 1.36315705e-07,
+])
+
+W_5M_8K = np.array([
+ 9.95908659e-04, 3.81905679e-03, 9.54083261e-03, 1.92165980e-02,
+ 3.38271908e-02, 5.42483167e-02, 8.12077767e-02, 1.15217189e-01,
+ 1.56494233e-01, 2.04936342e-01, 2.60116658e-01, 3.21281416e-01,
+ 3.87347300e-01, 4.56949708e-01, 5.28519296e-01, 6.00352249e-01,
+ 6.70689638e-01, 7.37804446e-01, 8.00092531e-01, 8.56140918e-01,
+ 9.04827229e-01, 9.45368503e-01, 9.77350743e-01, 1.00080087e+00,
+ 1.01617159e+00, 1.02431525e+00, 1.02641543e+00, 1.02385837e+00,
+ 1.01813571e+00, 1.01079482e+00, 1.00340651e+00, 9.96783127e-01,
+ 9.92099552e-01, 9.89220694e-01, 9.87965832e-01, 9.88127353e-01,
+ 9.89480554e-01, 9.91784992e-01, 9.94784758e-01, 9.98211967e-01,
+ 1.00179124e+00, 1.00524258e+00, 1.00828305e+00, 1.01063128e+00,
+ 1.01201530e+00, 1.01218075e+00, 1.01089677e+00, 1.00796336e+00,
+ 1.00322726e+00, 9.96605055e-01, 9.86828423e-01, 9.73125029e-01,
+ 9.54063648e-01, 9.28386428e-01, 8.95091686e-01, 8.53476936e-01,
+ 8.03209093e-01, 7.44473520e-01, 6.78078703e-01, 6.05397045e-01,
+ 5.28207751e-01, 4.48655296e-01, 3.69187599e-01, 2.92456641e-01,
+ 2.21071854e-01, 1.57314858e-01, 1.03052576e-01, 5.98273224e-02,
+ 2.87183192e-02, 9.68388493e-03, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+])
+
+W_5M_16K = np.array([
+ 6.14338818e-04, 1.48958283e-03, 2.88410496e-03, 4.93429883e-03,
+ 7.77913046e-03, 1.15491061e-02, 1.63715562e-02, 2.23711616e-02,
+ 2.96615969e-02, 3.83566333e-02, 4.85561099e-02, 6.03505574e-02,
+ 7.38228820e-02, 8.90356369e-02, 1.06035623e-01, 1.24853486e-01,
+ 1.45493189e-01, 1.67943556e-01, 1.92172862e-01, 2.18123826e-01,
+ 2.45725974e-01, 2.74883943e-01, 3.05482471e-01, 3.37387380e-01,
+ 3.70441593e-01, 4.04474963e-01, 4.39300436e-01, 4.74722545e-01,
+ 5.10534149e-01, 5.46520192e-01, 5.82465810e-01, 6.18145266e-01,
+ 6.53341146e-01, 6.87836730e-01, 7.21417603e-01, 7.53888797e-01,
+ 7.85054657e-01, 8.14739745e-01, 8.42781936e-01, 8.69037674e-01,
+ 8.93393548e-01, 9.15748356e-01, 9.36027020e-01, 9.54173114e-01,
+ 9.70163547e-01, 9.84003644e-01, 9.95719942e-01, 1.00537427e+00,
+ 1.01304666e+00, 1.01884338e+00, 1.02289695e+00, 1.02535529e+00,
+ 1.02638288e+00, 1.02615553e+00, 1.02485397e+00, 1.02266460e+00,
+ 1.01977940e+00, 1.01639169e+00, 1.01269703e+00, 1.00888519e+00,
+ 1.00537874e+00, 1.00156378e+00, 9.98253156e-01, 9.95434664e-01,
+ 9.93095027e-01, 9.91217091e-01, 9.89780519e-01, 9.88762494e-01,
+ 9.88138324e-01, 9.87881941e-01, 9.87966213e-01, 9.88363051e-01,
+ 9.89043407e-01, 9.89977232e-01, 9.91133456e-01, 9.92480044e-01,
+ 9.93984121e-01, 9.95612147e-01, 9.97330059e-01, 9.99103363e-01,
+ 1.00089744e+00, 1.00267709e+00, 1.00440719e+00, 1.00605229e+00,
+ 1.00757693e+00, 1.00894586e+00, 1.01012424e+00, 1.01107797e+00,
+ 1.01177396e+00, 1.01218036e+00, 1.01226671e+00, 1.01200406e+00,
+ 1.01136522e+00, 1.01032500e+00, 1.00886073e+00, 1.00695298e+00,
+ 1.00458627e+00, 1.00174990e+00, 9.98438663e-01, 9.94650033e-01,
+ 9.89575685e-01, 9.83830313e-01, 9.76999916e-01, 9.68914116e-01,
+ 9.59403812e-01, 9.48308632e-01, 9.35486022e-01, 9.20810131e-01,
+ 9.04173226e-01, 8.85488225e-01, 8.64686495e-01, 8.41723747e-01,
+ 8.16587571e-01, 7.89298635e-01, 7.59917189e-01, 7.28547452e-01,
+ 6.95328294e-01, 6.60433402e-01, 6.24066143e-01, 5.86446142e-01,
+ 5.47816066e-01, 5.08449976e-01, 4.68636143e-01, 4.28678989e-01,
+ 3.88903272e-01, 3.49643142e-01, 3.11236082e-01, 2.74012847e-01,
+ 2.38284723e-01, 2.04337983e-01, 1.72430586e-01, 1.42793979e-01,
+ 1.15638588e-01, 9.11582177e-02, 6.95274904e-02, 5.08897541e-02,
+ 3.53343019e-02, 2.28668041e-02, 1.33800502e-02, 6.64050653e-03,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+])
+
+W_5M_24K = np.array([
+ 5.08722763e-04, 9.95908659e-04, 1.68220801e-03, 2.60969726e-03,
+ 3.81905679e-03, 5.34931959e-03, 7.24390638e-03, 9.54083261e-03,
+ 1.22763764e-02, 1.54895024e-02, 1.92165980e-02, 2.34936962e-02,
+ 2.83519958e-02, 3.38271908e-02, 3.99493954e-02, 4.67477524e-02,
+ 5.42483167e-02, 6.24777078e-02, 7.14583592e-02, 8.12077767e-02,
+ 9.17440041e-02, 1.03076496e-01, 1.15217189e-01, 1.28166571e-01,
+ 1.41926438e-01, 1.56494233e-01, 1.71859319e-01, 1.88013425e-01,
+ 2.04936342e-01, 2.22612306e-01, 2.41015124e-01, 2.60116658e-01,
+ 2.79887101e-01, 3.00288014e-01, 3.21281416e-01, 3.42820846e-01,
+ 3.64859656e-01, 3.87347300e-01, 4.10229495e-01, 4.33449453e-01,
+ 4.56949708e-01, 4.80669640e-01, 5.04547382e-01, 5.28519296e-01,
+ 5.52519610e-01, 5.76487245e-01, 6.00352249e-01, 6.24050987e-01,
+ 6.47518259e-01, 6.70689638e-01, 6.93502907e-01, 7.15892752e-01,
+ 7.37804446e-01, 7.59178724e-01, 7.79958661e-01, 8.00092531e-01,
+ 8.19531865e-01, 8.38228896e-01, 8.56140918e-01, 8.73231695e-01,
+ 8.89470202e-01, 9.04827229e-01, 9.19273638e-01, 9.32794041e-01,
+ 9.45368503e-01, 9.56988393e-01, 9.67648642e-01, 9.77350743e-01,
+ 9.86102783e-01, 9.93912241e-01, 1.00080087e+00, 1.00678781e+00,
+ 1.01190127e+00, 1.01617159e+00, 1.01963641e+00, 1.02233661e+00,
+ 1.02431525e+00, 1.02562130e+00, 1.02630344e+00, 1.02641543e+00,
+ 1.02600793e+00, 1.02513744e+00, 1.02385837e+00, 1.02222694e+00,
+ 1.02030055e+00, 1.01813571e+00, 1.01579215e+00, 1.01332597e+00,
+ 1.01079482e+00, 1.00826513e+00, 1.00604687e+00, 1.00340651e+00,
+ 1.00097740e+00, 9.98770454e-01, 9.96783127e-01, 9.95011891e-01,
+ 9.93452397e-01, 9.92099552e-01, 9.90947600e-01, 9.89990243e-01,
+ 9.89220694e-01, 9.88631804e-01, 9.88216090e-01, 9.87965832e-01,
+ 9.87873077e-01, 9.87929693e-01, 9.88127353e-01, 9.88457554e-01,
+ 9.88911587e-01, 9.89480554e-01, 9.90155346e-01, 9.90926656e-01,
+ 9.91784992e-01, 9.92720684e-01, 9.93723921e-01, 9.94784758e-01,
+ 9.95893149e-01, 9.97038957e-01, 9.98211967e-01, 9.99402034e-01,
+ 1.00059832e+00, 1.00179124e+00, 1.00296984e+00, 1.00412379e+00,
+ 1.00524258e+00, 1.00631572e+00, 1.00733269e+00, 1.00828305e+00,
+ 1.00915642e+00, 1.00994254e+00, 1.01063128e+00, 1.01121274e+00,
+ 1.01167723e+00, 1.01201530e+00, 1.01221778e+00, 1.01227579e+00,
+ 1.01218075e+00, 1.01192443e+00, 1.01149892e+00, 1.01089677e+00,
+ 1.01011097e+00, 1.00913509e+00, 1.00796336e+00, 1.00659076e+00,
+ 1.00501312e+00, 1.00322726e+00, 1.00123106e+00, 9.99023556e-01,
+ 9.96605055e-01, 9.93989471e-01, 9.90453920e-01, 9.86828423e-01,
+ 9.82771674e-01, 9.78220667e-01, 9.73125029e-01, 9.67432353e-01,
+ 9.61094704e-01, 9.54063648e-01, 9.46295299e-01, 9.37748911e-01,
+ 9.28386428e-01, 9.18176261e-01, 9.07086156e-01, 8.95091686e-01,
+ 8.82169624e-01, 8.68302529e-01, 8.53476936e-01, 8.37685201e-01,
+ 8.20927526e-01, 8.03209093e-01, 7.84545048e-01, 7.64955485e-01,
+ 7.44473520e-01, 7.23134807e-01, 7.00986056e-01, 6.78078703e-01,
+ 6.54468651e-01, 6.30221215e-01, 6.05397045e-01, 5.80071577e-01,
+ 5.54312928e-01, 5.28207751e-01, 5.01836972e-01, 4.75290296e-01,
+ 4.48655296e-01, 4.22028112e-01, 3.95505797e-01, 3.69187599e-01,
+ 3.43173285e-01, 3.17563302e-01, 2.92456641e-01, 2.67946378e-01,
+ 2.44123133e-01, 2.21071854e-01, 1.98871915e-01, 1.77596763e-01,
+ 1.57314858e-01, 1.38090336e-01, 1.19983750e-01, 1.03052576e-01,
+ 8.73508501e-02, 7.29281158e-02, 5.98273224e-02, 4.80817884e-02,
+ 3.77113530e-02, 2.87183192e-02, 2.10835203e-02, 1.47628941e-02,
+ 9.68388493e-03, 5.64216879e-03, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+])
+
+W_5M_32K = np.array([
+ 4.59588635e-04, 7.91932361e-04, 1.22792717e-03, 1.78365327e-03,
+ 2.47954941e-03, 3.32979945e-03, 4.35353548e-03, 5.56496516e-03,
+ 6.98610836e-03, 8.62988232e-03, 1.05134341e-02, 1.26508264e-02,
+ 1.50609045e-02, 1.77559123e-02, 2.07547598e-02, 2.40681372e-02,
+ 2.77120786e-02, 3.16993325e-02, 3.60460964e-02, 4.07612864e-02,
+ 4.58603812e-02, 5.13513668e-02, 5.72478022e-02, 6.35585474e-02,
+ 7.02945073e-02, 7.74598720e-02, 8.50663537e-02, 9.31164162e-02,
+ 1.01616296e-01, 1.10569081e-01, 1.19978929e-01, 1.29841729e-01,
+ 1.40162380e-01, 1.50937156e-01, 1.62163230e-01, 1.73835412e-01,
+ 1.85952036e-01, 1.98500883e-01, 2.11477855e-01, 2.24873256e-01,
+ 2.38676395e-01, 2.52872945e-01, 2.67454701e-01, 2.82403147e-01,
+ 2.97705015e-01, 3.13341912e-01, 3.29297670e-01, 3.45549016e-01,
+ 3.62079505e-01, 3.78864867e-01, 3.95885158e-01, 4.13114379e-01,
+ 4.30530830e-01, 4.48107672e-01, 4.65822779e-01, 4.83646639e-01,
+ 5.01556485e-01, 5.19522807e-01, 5.37519704e-01, 5.55518384e-01,
+ 5.73495781e-01, 5.91418665e-01, 6.09262289e-01, 6.26998116e-01,
+ 6.44600201e-01, 6.62038458e-01, 6.79290655e-01, 6.96325643e-01,
+ 7.13119439e-01, 7.29646991e-01, 7.45886459e-01, 7.61809472e-01,
+ 7.77395845e-01, 7.92620875e-01, 8.07466639e-01, 8.21910156e-01,
+ 8.35934316e-01, 8.49518047e-01, 8.62648584e-01, 8.75308323e-01,
+ 8.87488472e-01, 8.99173772e-01, 9.10352743e-01, 9.21014413e-01,
+ 9.31155619e-01, 9.40764474e-01, 9.49838224e-01, 9.58373260e-01,
+ 9.66369041e-01, 9.73823562e-01, 9.80744251e-01, 9.87129797e-01,
+ 9.92987227e-01, 9.98324140e-01, 1.00315076e+00, 1.00747371e+00,
+ 1.01130915e+00, 1.01466668e+00, 1.01756334e+00, 1.02001468e+00,
+ 1.02203987e+00, 1.02365426e+00, 1.02488162e+00, 1.02573929e+00,
+ 1.02625071e+00, 1.02643667e+00, 1.02632086e+00, 1.02592292e+00,
+ 1.02526998e+00, 1.02438219e+00, 1.02328494e+00, 1.02200083e+00,
+ 1.02055597e+00, 1.01897139e+00, 1.01727518e+00, 1.01548913e+00,
+ 1.01363936e+00, 1.01174775e+00, 1.00984084e+00, 1.00793976e+00,
+ 1.00640740e+00, 1.00437483e+00, 1.00246981e+00, 1.00068907e+00,
+ 9.99034600e-01, 9.97502490e-01, 9.96094155e-01, 9.94805124e-01,
+ 9.93636273e-01, 9.92582654e-01, 9.91644701e-01, 9.90817076e-01,
+ 9.90099845e-01, 9.89487369e-01, 9.88979432e-01, 9.88570179e-01,
+ 9.88259191e-01, 9.88040442e-01, 9.87913369e-01, 9.87871810e-01,
+ 9.87915076e-01, 9.88036894e-01, 9.88236456e-01, 9.88507369e-01,
+ 9.88848709e-01, 9.89253949e-01, 9.89722041e-01, 9.90246329e-01,
+ 9.90825634e-01, 9.91453181e-01, 9.92127681e-01, 9.92842250e-01,
+ 9.93595510e-01, 9.94380481e-01, 9.95195724e-01, 9.96034188e-01,
+ 9.96894383e-01, 9.97769201e-01, 9.98657113e-01, 9.99550974e-01,
+ 1.00044923e+00, 1.00134469e+00, 1.00223579e+00, 1.00311529e+00,
+ 1.00398160e+00, 1.00482747e+00, 1.00565128e+00, 1.00644577e+00,
+ 1.00720935e+00, 1.00793478e+00, 1.00862050e+00, 1.00925931e+00,
+ 1.00984974e+00, 1.01038469e+00, 1.01086278e+00, 1.01127704e+00,
+ 1.01162625e+00, 1.01190357e+00, 1.01210795e+00, 1.01223276e+00,
+ 1.01227709e+00, 1.01223451e+00, 1.01210432e+00, 1.01188029e+00,
+ 1.01156197e+00, 1.01114337e+00, 1.01062432e+00, 1.00999915e+00,
+ 1.00926803e+00, 1.00842570e+00, 1.00747277e+00, 1.00640448e+00,
+ 1.00522200e+00, 1.00392116e+00, 1.00250376e+00, 1.00096633e+00,
+ 9.99311401e-01, 9.97536270e-01, 9.95644231e-01, 9.93633392e-01,
+ 9.90867748e-01, 9.88232633e-01, 9.85362057e-01, 9.82230509e-01,
+ 9.78818585e-01, 9.75102633e-01, 9.71063185e-01, 9.66675967e-01,
+ 9.61924219e-01, 9.56784199e-01, 9.51239430e-01, 9.45270024e-01,
+ 9.38861570e-01, 9.31994644e-01, 9.24659203e-01, 9.16838340e-01,
+ 9.08521803e-01, 8.99696701e-01, 8.90356205e-01, 8.80487793e-01,
+ 8.70088421e-01, 8.59149213e-01, 8.47668639e-01, 8.35642897e-01,
+ 8.23075389e-01, 8.09964930e-01, 7.96320451e-01, 7.82146054e-01,
+ 7.67454182e-01, 7.52256346e-01, 7.36570205e-01, 7.20409055e-01,
+ 7.03797511e-01, 6.86754281e-01, 6.69304189e-01, 6.51471096e-01,
+ 6.33285483e-01, 6.14768539e-01, 5.95955378e-01, 5.76873796e-01,
+ 5.57553429e-01, 5.38032014e-01, 5.18345403e-01, 4.98525942e-01,
+ 4.78615607e-01, 4.58647304e-01, 4.38664366e-01, 4.18704689e-01,
+ 3.98812306e-01, 3.79026292e-01, 3.59391483e-01, 3.39947413e-01,
+ 3.20739242e-01, 3.01806111e-01, 2.83190595e-01, 2.64928837e-01,
+ 2.47060855e-01, 2.29620112e-01, 2.12643372e-01, 1.96160182e-01,
+ 1.80203520e-01, 1.64799688e-01, 1.49978755e-01, 1.35764352e-01,
+ 1.22184253e-01, 1.09260199e-01, 9.70178845e-02, 8.54768028e-02,
+ 7.46597638e-02, 6.45825432e-02, 5.52628119e-02, 4.67097698e-02,
+ 3.89324443e-02, 3.19297601e-02, 2.56981064e-02, 2.02225927e-02,
+ 1.54831778e-02, 1.14492491e-02, 8.07648266e-03, 5.30004408e-03,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+])
+
+W_5M_48K = np.array([
+ 4.09010650e-04, 6.14338818e-04, 8.57175988e-04, 1.14701506e-03,
+ 1.48958283e-03, 1.88977038e-03, 2.35300080e-03, 2.88410496e-03,
+ 3.48821379e-03, 4.17004043e-03, 4.93429883e-03, 5.78707651e-03,
+ 6.73381174e-03, 7.77913046e-03, 8.92704496e-03, 1.01820289e-02,
+ 1.15491061e-02, 1.30334922e-02, 1.46395129e-02, 1.63715562e-02,
+ 1.82345538e-02, 2.02330949e-02, 2.23711616e-02, 2.46523735e-02,
+ 2.70810194e-02, 2.96615969e-02, 3.23988485e-02, 3.52960177e-02,
+ 3.83566333e-02, 4.15844793e-02, 4.49832242e-02, 4.85561099e-02,
+ 5.23059648e-02, 5.62362458e-02, 6.03505574e-02, 6.46518632e-02,
+ 6.91419575e-02, 7.38228820e-02, 7.86970933e-02, 8.37676164e-02,
+ 8.90356369e-02, 9.45019924e-02, 1.00168019e-01, 1.06035623e-01,
+ 1.12106022e-01, 1.18378855e-01, 1.24853486e-01, 1.31530285e-01,
+ 1.38410308e-01, 1.45493189e-01, 1.52777295e-01, 1.60260884e-01,
+ 1.67943556e-01, 1.75824562e-01, 1.83902012e-01, 1.92172862e-01,
+ 2.00634430e-01, 2.09285388e-01, 2.18123826e-01, 2.27146226e-01,
+ 2.36347921e-01, 2.45725974e-01, 2.55277155e-01, 2.64998109e-01,
+ 2.74883943e-01, 2.84929644e-01, 2.95130651e-01, 3.05482471e-01,
+ 3.15979964e-01, 3.26616979e-01, 3.37387380e-01, 3.48285592e-01,
+ 3.59305769e-01, 3.70441593e-01, 3.81686239e-01, 3.93032978e-01,
+ 4.04474963e-01, 4.16005110e-01, 4.27615960e-01, 4.39300436e-01,
+ 4.51051633e-01, 4.62861605e-01, 4.74722545e-01, 4.86626671e-01,
+ 4.98566451e-01, 5.10534149e-01, 5.22521279e-01, 5.34519051e-01,
+ 5.46520192e-01, 5.58517277e-01, 5.70502154e-01, 5.82465810e-01,
+ 5.94399172e-01, 6.06294818e-01, 6.18145266e-01, 6.29942202e-01,
+ 6.41676874e-01, 6.53341146e-01, 6.64927754e-01, 6.76429270e-01,
+ 6.87836730e-01, 6.99142147e-01, 7.10337961e-01, 7.21417603e-01,
+ 7.32374610e-01, 7.43200803e-01, 7.53888797e-01, 7.64431550e-01,
+ 7.74822315e-01, 7.85054657e-01, 7.95122352e-01, 8.05019386e-01,
+ 8.14739745e-01, 8.24277441e-01, 8.33626711e-01, 8.42781936e-01,
+ 8.51738619e-01, 8.60492087e-01, 8.69037674e-01, 8.77372045e-01,
+ 8.85492794e-01, 8.93393548e-01, 9.01072709e-01, 9.08524940e-01,
+ 9.15748356e-01, 9.22741384e-01, 9.29501747e-01, 9.36027020e-01,
+ 9.42314305e-01, 9.48362979e-01, 9.54173114e-01, 9.59743838e-01,
+ 9.65073839e-01, 9.70163547e-01, 9.75014336e-01, 9.79627719e-01,
+ 9.84003644e-01, 9.88142677e-01, 9.92047045e-01, 9.95719942e-01,
+ 9.99164081e-01, 1.00238131e+00, 1.00537427e+00, 1.00814672e+00,
+ 1.01070312e+00, 1.01304666e+00, 1.01518127e+00, 1.01711164e+00,
+ 1.01884338e+00, 1.02038171e+00, 1.02173110e+00, 1.02289695e+00,
+ 1.02388546e+00, 1.02470297e+00, 1.02535529e+00, 1.02584824e+00,
+ 1.02618837e+00, 1.02638288e+00, 1.02643810e+00, 1.02636013e+00,
+ 1.02615553e+00, 1.02583146e+00, 1.02539543e+00, 1.02485397e+00,
+ 1.02421348e+00, 1.02348118e+00, 1.02266460e+00, 1.02177090e+00,
+ 1.02080692e+00, 1.01977940e+00, 1.01869600e+00, 1.01756442e+00,
+ 1.01639169e+00, 1.01518492e+00, 1.01395084e+00, 1.01269703e+00,
+ 1.01143075e+00, 1.01015835e+00, 1.00888519e+00, 1.00759272e+00,
+ 1.00680560e+00, 1.00537874e+00, 1.00404905e+00, 1.00277836e+00,
+ 1.00156378e+00, 1.00040492e+00, 9.99301484e-01, 9.98253156e-01,
+ 9.97259546e-01, 9.96320213e-01, 9.95434664e-01, 9.94602354e-01,
+ 9.93822688e-01, 9.93095027e-01, 9.92418692e-01, 9.91792966e-01,
+ 9.91217091e-01, 9.90690276e-01, 9.90211700e-01, 9.89780519e-01,
+ 9.89395860e-01, 9.89056824e-01, 9.88762494e-01, 9.88511936e-01,
+ 9.88304203e-01, 9.88138324e-01, 9.88013316e-01, 9.87928190e-01,
+ 9.87881941e-01, 9.87873551e-01, 9.87901987e-01, 9.87966213e-01,
+ 9.88065178e-01, 9.88197816e-01, 9.88363051e-01, 9.88559796e-01,
+ 9.88786953e-01, 9.89043407e-01, 9.89328032e-01, 9.89639690e-01,
+ 9.89977232e-01, 9.90339493e-01, 9.90725297e-01, 9.91133456e-01,
+ 9.91562775e-01, 9.92012044e-01, 9.92480044e-01, 9.92965548e-01,
+ 9.93467321e-01, 9.93984121e-01, 9.94514697e-01, 9.95057793e-01,
+ 9.95612147e-01, 9.96176492e-01, 9.96749554e-01, 9.97330059e-01,
+ 9.97916725e-01, 9.98508264e-01, 9.99103363e-01, 9.99700348e-01,
+ 1.00029974e+00, 1.00089744e+00, 1.00149396e+00, 1.00208762e+00,
+ 1.00267709e+00, 1.00326105e+00, 1.00383818e+00, 1.00440719e+00,
+ 1.00496675e+00, 1.00551556e+00, 1.00605229e+00, 1.00657564e+00,
+ 1.00708429e+00, 1.00757693e+00, 1.00805228e+00, 1.00850902e+00,
+ 1.00894586e+00, 1.00936153e+00, 1.00975474e+00, 1.01012424e+00,
+ 1.01046877e+00, 1.01078709e+00, 1.01107797e+00, 1.01134021e+00,
+ 1.01157260e+00, 1.01177396e+00, 1.01194314e+00, 1.01207898e+00,
+ 1.01218036e+00, 1.01224617e+00, 1.01227531e+00, 1.01226671e+00,
+ 1.01221932e+00, 1.01213211e+00, 1.01200406e+00, 1.01183421e+00,
+ 1.01162157e+00, 1.01136522e+00, 1.01106425e+00, 1.01071779e+00,
+ 1.01032500e+00, 1.00988506e+00, 1.00939721e+00, 1.00886073e+00,
+ 1.00827495e+00, 1.00763922e+00, 1.00695298e+00, 1.00621571e+00,
+ 1.00542694e+00, 1.00458627e+00, 1.00369338e+00, 1.00274798e+00,
+ 1.00174990e+00, 1.00069900e+00, 9.99595249e-01, 9.98438663e-01,
+ 9.97229342e-01, 9.95967277e-01, 9.94650033e-01, 9.93240400e-01,
+ 9.91251152e-01, 9.89575685e-01, 9.87771321e-01, 9.85857748e-01,
+ 9.83830313e-01, 9.81682263e-01, 9.79407449e-01, 9.76999916e-01,
+ 9.74452836e-01, 9.71759750e-01, 9.68914116e-01, 9.65910162e-01,
+ 9.62742183e-01, 9.59403812e-01, 9.55888998e-01, 9.52192243e-01,
+ 9.48308632e-01, 9.44233254e-01, 9.39960724e-01, 9.35486022e-01,
+ 9.30805297e-01, 9.25914697e-01, 9.20810131e-01, 9.15487360e-01,
+ 9.09942607e-01, 9.04173226e-01, 8.98176373e-01, 8.91949024e-01,
+ 8.85488225e-01, 8.78791944e-01, 8.71858584e-01, 8.64686495e-01,
+ 8.57273814e-01, 8.49619586e-01, 8.41723747e-01, 8.33586272e-01,
+ 8.25207443e-01, 8.16587571e-01, 8.07728037e-01, 7.98631159e-01,
+ 7.89298635e-01, 7.79733095e-01, 7.69937953e-01, 7.59917189e-01,
+ 7.49675842e-01, 7.39217684e-01, 7.28547452e-01, 7.17671448e-01,
+ 7.06596231e-01, 6.95328294e-01, 6.83873906e-01, 6.72239531e-01,
+ 6.60433402e-01, 6.48464360e-01, 6.36339500e-01, 6.24066143e-01,
+ 6.11653033e-01, 5.99109864e-01, 5.86446142e-01, 5.73669485e-01,
+ 5.60788103e-01, 5.47816066e-01, 5.34761979e-01, 5.21636515e-01,
+ 5.08449976e-01, 4.95213509e-01, 4.81938756e-01, 4.68636143e-01,
+ 4.55317077e-01, 4.41993995e-01, 4.28678989e-01, 4.15383779e-01,
+ 4.02121106e-01, 3.88903272e-01, 3.75742544e-01, 3.62651518e-01,
+ 3.49643142e-01, 3.36729082e-01, 3.23922808e-01, 3.11236082e-01,
+ 2.98680794e-01, 2.86269467e-01, 2.74012847e-01, 2.61922833e-01,
+ 2.50009844e-01, 2.38284723e-01, 2.26757849e-01, 2.15439100e-01,
+ 2.04337983e-01, 1.93463677e-01, 1.82825032e-01, 1.72430586e-01,
+ 1.62288635e-01, 1.52407188e-01, 1.42793979e-01, 1.33456585e-01,
+ 1.24402392e-01, 1.15638588e-01, 1.07172155e-01, 9.90098587e-02,
+ 9.11582177e-02, 8.36234486e-02, 7.64114037e-02, 6.95274904e-02,
+ 6.29765645e-02, 5.67628424e-02, 5.08897541e-02, 4.53598330e-02,
+ 4.01745731e-02, 3.53343019e-02, 3.08380606e-02, 2.66835542e-02,
+ 2.28668041e-02, 1.93823634e-02, 1.62231272e-02, 1.33800502e-02,
+ 1.08421860e-02, 8.59675398e-03, 6.64050653e-03, 5.17270311e-03,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+])
+
+W_5M_48K_HR = np.array([
+ 9.75247545e-08, 6.41356849e-07, 1.88872264e-06, 4.37003746e-06,
+ 8.85053487e-06, 1.64097619e-05, 2.85265469e-05, 4.71757776e-05,
+ 7.49369574e-05, 1.15113864e-04, 1.71864056e-04, 2.50336452e-04,
+ 3.56814737e-04, 4.98863636e-04, 6.85475010e-04, 9.27209505e-04,
+ 1.23633002e-03, 1.62692170e-03, 2.11499492e-03, 2.71856366e-03,
+ 3.45769688e-03, 4.35453700e-03, 5.43327769e-03, 6.72010100e-03,
+ 8.24306626e-03, 1.00319488e-02, 1.21180220e-02, 1.45337880e-02,
+ 1.73126478e-02, 2.04885192e-02, 2.40953956e-02, 2.81668510e-02,
+ 3.27355117e-02, 3.78324650e-02, 4.34866548e-02, 4.97242436e-02,
+ 5.65679595e-02, 6.40364513e-02, 7.21436515e-02, 8.08981732e-02,
+ 9.03027356e-02, 1.00353681e-01, 1.11040540e-01, 1.22345708e-01,
+ 1.34244218e-01, 1.46703660e-01, 1.59684196e-01, 1.73138753e-01,
+ 1.87013358e-01, 2.01247633e-01, 2.15775400e-01, 2.30525494e-01,
+ 2.45422661e-01, 2.60388613e-01, 2.75343060e-01, 2.90205121e-01,
+ 3.04894298e-01, 3.19332004e-01, 3.33442599e-01, 3.47154707e-01,
+ 3.60402405e-01, 3.73126328e-01, 3.85274231e-01, 3.96802038e-01,
+ 4.07674283e-01, 4.17864561e-01, 4.27355647e-01, 4.36139554e-01,
+ 4.44217294e-01, 4.51598674e-01, 4.58301634e-01, 4.64351624e-01,
+ 4.69781011e-01, 4.74628091e-01, 4.78936344e-01, 4.82753456e-01,
+ 4.86130476e-01, 4.89120960e-01, 4.91780102e-01, 4.94164050e-01,
+ 4.96329218e-01, 4.98331696e-01, 5.00226736e-01, 5.02068341e-01,
+ 5.03908992e-01, 5.05799294e-01, 5.07787943e-01, 5.09921193e-01,
+ 5.12243330e-01, 5.14795899e-01, 5.17618179e-01, 5.20746589e-01,
+ 5.24214983e-01, 5.28054178e-01, 5.32292068e-01, 5.36953092e-01,
+ 5.42058468e-01, 5.47625661e-01, 5.53668439e-01, 5.60196400e-01,
+ 5.67215025e-01, 5.74725628e-01, 5.82724869e-01, 5.91205239e-01,
+ 6.00154579e-01, 6.09556615e-01, 6.19390607e-01, 6.29631937e-01,
+ 6.40252173e-01, 6.51219368e-01, 6.62498534e-01, 6.74051821e-01,
+ 6.85839176e-01, 6.97818637e-01, 7.09946930e-01, 7.22179890e-01,
+ 7.34472811e-01, 7.46781170e-01, 7.59061038e-01, 7.71269321e-01,
+ 7.83364296e-01, 7.95306087e-01, 8.07056785e-01, 8.18580806e-01,
+ 8.29845190e-01, 8.40819776e-01, 8.51477146e-01, 8.61792982e-01,
+ 8.71745944e-01, 8.81317794e-01, 8.90493214e-01, 8.99259806e-01,
+ 9.07608211e-01, 9.15531754e-01, 9.23026323e-01, 9.30090547e-01,
+ 9.36725318e-01, 9.42933977e-01, 9.48721945e-01, 9.54096615e-01,
+ 9.59067523e-01, 9.63645637e-01, 9.67843831e-01, 9.71676290e-01,
+ 9.75158513e-01, 9.78307128e-01, 9.81139660e-01, 9.83674467e-01,
+ 9.85930443e-01, 9.87926722e-01, 9.89682734e-01, 9.91217852e-01,
+ 9.92551088e-01, 9.93701279e-01, 9.94686544e-01, 9.95524466e-01,
+ 9.96231675e-01, 9.96824026e-01, 9.97316301e-01, 9.97722328e-01,
+ 9.98054802e-01, 9.98325348e-01, 9.98544455e-01, 9.98721540e-01,
+ 9.98864949e-01, 9.98981953e-01, 9.99078929e-01, 9.99161184e-01,
+ 9.99233246e-01, 9.99298692e-01, 9.99360621e-01, 9.99421120e-01,
+ 9.99481916e-01, 9.99544203e-01, 9.99608576e-01, 9.99675393e-01,
+ 9.99744534e-01, 9.99815881e-01, 9.99888837e-01, 9.99962866e-01,
+ 1.00003707e+00, 1.00011098e+00, 1.00018346e+00, 1.00025380e+00,
+ 1.00032115e+00, 1.00038469e+00, 1.00044382e+00, 1.00049770e+00,
+ 1.00054598e+00, 1.00058782e+00, 1.00062299e+00, 1.00065112e+00,
+ 1.00067186e+00, 1.00068521e+00, 1.00069082e+00, 1.00068903e+00,
+ 1.00067961e+00, 1.00066280e+00, 1.00063896e+00, 1.00060833e+00,
+ 1.00057113e+00, 1.00052810e+00, 1.00047958e+00, 1.00042605e+00,
+ 1.00036812e+00, 1.00030637e+00, 1.00024164e+00, 1.00017428e+00,
+ 1.00010526e+00, 1.00003517e+00, 9.99964774e-01, 9.99894679e-01,
+ 9.99825716e-01, 9.99758482e-01, 9.99693692e-01, 9.99632061e-01,
+ 9.99574184e-01, 9.99520719e-01, 9.99472201e-01, 9.99429166e-01,
+ 9.99392092e-01, 9.99361455e-01, 9.99337614e-01, 9.99320924e-01,
+ 9.99311507e-01, 9.99309599e-01, 9.99315262e-01, 9.99328554e-01,
+ 9.99349296e-01, 9.99377370e-01, 9.99412537e-01, 9.99454379e-01,
+ 9.99502480e-01, 9.99556363e-01, 9.99615431e-01, 9.99678969e-01,
+ 9.99746263e-01, 9.99816597e-01, 9.99889076e-01, 9.99962866e-01,
+ 1.00003707e+00, 1.00011098e+00, 1.00018346e+00, 1.00025380e+00,
+ 1.00032115e+00, 1.00038469e+00, 1.00044382e+00, 1.00049770e+00,
+ 1.00054598e+00, 1.00058782e+00, 1.00062299e+00, 1.00065112e+00,
+ 1.00067186e+00, 1.00068521e+00, 1.00069082e+00, 1.00068903e+00,
+ 1.00067961e+00, 1.00066280e+00, 1.00063896e+00, 1.00060833e+00,
+ 1.00057113e+00, 1.00052810e+00, 1.00047958e+00, 1.00042605e+00,
+ 1.00036812e+00, 1.00030637e+00, 1.00024164e+00, 1.00017428e+00,
+ 1.00010526e+00, 1.00003517e+00, 9.99964774e-01, 9.99894679e-01,
+ 9.99825716e-01, 9.99758482e-01, 9.99693692e-01, 9.99632061e-01,
+ 9.99574184e-01, 9.99520719e-01, 9.99472201e-01, 9.99429166e-01,
+ 9.99392092e-01, 9.99361455e-01, 9.99337614e-01, 9.99320924e-01,
+ 9.99311507e-01, 9.99309599e-01, 9.99315262e-01, 9.99328554e-01,
+ 9.99349296e-01, 9.99377370e-01, 9.99412537e-01, 9.99454379e-01,
+ 9.99502480e-01, 9.99556363e-01, 9.99615431e-01, 9.99678969e-01,
+ 9.99746263e-01, 9.99816597e-01, 9.99889076e-01, 9.99962866e-01,
+ 1.00003707e+00, 1.00011075e+00, 1.00018275e+00, 1.00025201e+00,
+ 1.00031757e+00, 1.00037789e+00, 1.00043166e+00, 1.00047719e+00,
+ 1.00051260e+00, 1.00053585e+00, 1.00054419e+00, 1.00053477e+00,
+ 1.00050414e+00, 1.00044823e+00, 1.00036228e+00, 1.00024092e+00,
+ 1.00007784e+00, 9.99865890e-01, 9.99597013e-01, 9.99261975e-01,
+ 9.98850465e-01, 9.98351038e-01, 9.97750819e-01, 9.97035682e-01,
+ 9.96189833e-01, 9.95196044e-01, 9.94035423e-01, 9.92687285e-01,
+ 9.91129041e-01, 9.89336133e-01, 9.87281919e-01, 9.84937787e-01,
+ 9.82272744e-01, 9.79253709e-01, 9.75845337e-01, 9.72010076e-01,
+ 9.67708528e-01, 9.62899387e-01, 9.57539737e-01, 9.51585472e-01,
+ 9.44991708e-01, 9.37713265e-01, 9.29705381e-01, 9.20924187e-01,
+ 9.11327481e-01, 9.00875807e-01, 8.89532745e-01, 8.77266228e-01,
+ 8.64049077e-01, 8.49859893e-01, 8.34683776e-01, 8.18513036e-01,
+ 8.01347792e-01, 7.83196509e-01, 7.64076352e-01, 7.44013488e-01,
+ 7.23043203e-01, 7.01209962e-01, 6.78567350e-01, 6.55177712e-01,
+ 6.31111801e-01, 6.06448233e-01, 5.81272960e-01, 5.55678487e-01,
+ 5.29762745e-01, 5.03628492e-01, 4.77382004e-01, 4.51132149e-01,
+ 4.24988985e-01, 3.99062574e-01, 3.73461813e-01, 3.48293066e-01,
+ 3.23658854e-01, 2.99656719e-01, 2.76377857e-01, 2.53906131e-01,
+ 2.32316986e-01, 2.11676583e-01, 1.92040950e-01, 1.73455566e-01,
+ 1.55954808e-01, 1.39561892e-01, 1.24288827e-01, 1.10136725e-01,
+ 9.70961973e-02, 8.51479918e-02, 7.42638558e-02, 6.44074306e-02,
+ 5.55353425e-02, 4.75983508e-02, 4.05424982e-02, 3.43103148e-02,
+ 2.88419761e-02, 2.40764078e-02, 1.99523065e-02, 1.64090749e-02,
+ 1.33876354e-02, 1.08311241e-02, 8.68547149e-03, 6.89984858e-03,
+ 5.42699778e-03, 4.22345474e-03, 3.24966502e-03, 2.47000973e-03,
+ 1.85274973e-03, 1.36990519e-03, 9.97077208e-04, 7.13227608e-04,
+ 5.00426511e-04, 3.43578606e-04, 2.30138365e-04, 1.49821601e-04,
+ 9.43217892e-05, 5.70367956e-05, 3.28110509e-05, 1.76969679e-05,
+ 8.73827867e-06, 3.77677043e-06, 1.28252009e-06, 1.95021386e-07,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+])
+
+W_5M_96K_HR = np.array([
+ 6.89548827e-08, 2.31516253e-07, 5.04477669e-07, 9.30795125e-07,
+ 1.56340695e-06, 2.46738750e-06, 3.72189174e-06, 5.42224188e-06,
+ 7.68219343e-06, 1.06363877e-05, 1.44429905e-05, 1.92865264e-05,
+ 2.53808976e-05, 3.29725954e-05, 4.23441015e-05, 5.38174427e-05,
+ 6.77579446e-05, 8.45781324e-05, 1.04741775e-04, 1.28768093e-04,
+ 1.57236034e-04, 1.90788676e-04, 2.30137754e-04, 2.76068167e-04,
+ 3.29442613e-04, 3.91206064e-04, 4.62390453e-04, 5.44119219e-04,
+ 6.37611491e-04, 7.44186866e-04, 8.65269103e-04, 1.00239040e-03,
+ 1.15719519e-03, 1.33144355e-03, 1.52701419e-03, 1.74590782e-03,
+ 1.99024938e-03, 2.26228987e-03, 2.56440835e-03, 2.89911311e-03,
+ 3.26904119e-03, 3.67696048e-03, 4.12576646e-03, 4.61848313e-03,
+ 5.15825953e-03, 5.74836833e-03, 6.39220094e-03, 7.09326472e-03,
+ 7.85517693e-03, 8.68165866e-03, 9.57652833e-03, 1.05436966e-02,
+ 1.15871523e-02, 1.27109587e-02, 1.39192408e-02, 1.52161736e-02,
+ 1.66059695e-02, 1.80928707e-02, 1.96811259e-02, 2.13749874e-02,
+ 2.31786855e-02, 2.50964165e-02, 2.71323286e-02, 2.92905010e-02,
+ 3.15749235e-02, 3.39894816e-02, 3.65379415e-02, 3.92239206e-02,
+ 4.20508720e-02, 4.50220704e-02, 4.81405817e-02, 5.14092445e-02,
+ 5.48306555e-02, 5.84071539e-02, 6.21407814e-02, 6.60332814e-02,
+ 7.00860694e-02, 7.43002295e-02, 7.86764771e-02, 8.32151473e-02,
+ 8.79162028e-02, 9.27791744e-02, 9.78031904e-02, 1.02986939e-01,
+ 1.08328678e-01, 1.13826200e-01, 1.19476855e-01, 1.25277504e-01,
+ 1.31224588e-01, 1.37314022e-01, 1.43541321e-01, 1.49901465e-01,
+ 1.56389058e-01, 1.62998185e-01, 1.69722542e-01, 1.76555380e-01,
+ 1.83489516e-01, 1.90517426e-01, 1.97631180e-01, 2.04822496e-01,
+ 2.12082773e-01, 2.19403118e-01, 2.26774365e-01, 2.34187096e-01,
+ 2.41631702e-01, 2.49098375e-01, 2.56577194e-01, 2.64058143e-01,
+ 2.71531105e-01, 2.78985947e-01, 2.86412567e-01, 2.93800950e-01,
+ 3.01141053e-01, 3.08423132e-01, 3.15637439e-01, 3.22774589e-01,
+ 3.29825372e-01, 3.36780816e-01, 3.43632400e-01, 3.50371778e-01,
+ 3.56991231e-01, 3.63483250e-01, 3.69840890e-01, 3.76057625e-01,
+ 3.82127434e-01, 3.88044775e-01, 3.93804729e-01, 3.99402857e-01,
+ 4.04835284e-01, 4.10098761e-01, 4.15190488e-01, 4.20108408e-01,
+ 4.24850911e-01, 4.29417044e-01, 4.33806360e-01, 4.38019037e-01,
+ 4.42055762e-01, 4.45917755e-01, 4.49606776e-01, 4.53125089e-01,
+ 4.56475437e-01, 4.59661037e-01, 4.62685496e-01, 4.65552896e-01,
+ 4.68267679e-01, 4.70834643e-01, 4.73258942e-01, 4.75546002e-01,
+ 4.77701575e-01, 4.79731590e-01, 4.81642276e-01, 4.83440012e-01,
+ 4.85131353e-01, 4.86723036e-01, 4.88221824e-01, 4.89634633e-01,
+ 4.90968436e-01, 4.92230296e-01, 4.93427187e-01, 4.94566232e-01,
+ 4.95654404e-01, 4.96698737e-01, 4.97706175e-01, 4.98683631e-01,
+ 4.99637932e-01, 5.00575840e-01, 5.01503944e-01, 5.02428830e-01,
+ 5.03356874e-01, 5.04294455e-01, 5.05247772e-01, 5.06222844e-01,
+ 5.07225573e-01, 5.08261740e-01, 5.09337008e-01, 5.10456860e-01,
+ 5.11626601e-01, 5.12851536e-01, 5.14136553e-01, 5.15486538e-01,
+ 5.16906321e-01, 5.18400311e-01, 5.19972920e-01, 5.21628320e-01,
+ 5.23370624e-01, 5.25203526e-01, 5.27130723e-01, 5.29155731e-01,
+ 5.31281710e-01, 5.33511758e-01, 5.35848677e-01, 5.38295090e-01,
+ 5.40853441e-01, 5.43525815e-01, 5.46314240e-01, 5.49220264e-01,
+ 5.52245498e-01, 5.55391014e-01, 5.58657765e-01, 5.62046468e-01,
+ 5.65557480e-01, 5.69190919e-01, 5.72946727e-01, 5.76824427e-01,
+ 5.80823362e-01, 5.84942579e-01, 5.89180827e-01, 5.93536615e-01,
+ 5.98008096e-01, 6.02593303e-01, 6.07289851e-01, 6.12095237e-01,
+ 6.17006540e-01, 6.22020781e-01, 6.27134562e-01, 6.32344365e-01,
+ 6.37646437e-01, 6.43036783e-01, 6.48511291e-01, 6.54065490e-01,
+ 6.59694970e-01, 6.65394902e-01, 6.71160460e-01, 6.76986754e-01,
+ 6.82868540e-01, 6.88800693e-01, 6.94777906e-01, 7.00794756e-01,
+ 7.06845820e-01, 7.12925553e-01, 7.19028473e-01, 7.25149035e-01,
+ 7.31281698e-01, 7.37420917e-01, 7.43561149e-01, 7.49696970e-01,
+ 7.55823016e-01, 7.61933863e-01, 7.68024206e-01, 7.74088979e-01,
+ 7.80123055e-01, 7.86121488e-01, 7.92079389e-01, 7.97992110e-01,
+ 8.03855121e-01, 8.09663892e-01, 8.15414310e-01, 8.21102202e-01,
+ 8.26723635e-01, 8.32274854e-01, 8.37752342e-01, 8.43152702e-01,
+ 8.48472714e-01, 8.53709280e-01, 8.58859718e-01, 8.63921225e-01,
+ 8.68891478e-01, 8.73768151e-01, 8.78549099e-01, 8.83232594e-01,
+ 8.87816727e-01, 8.92300129e-01, 8.96681368e-01, 9.00959313e-01,
+ 9.05132890e-01, 9.09201384e-01, 9.13164079e-01, 9.17020440e-01,
+ 9.20770228e-01, 9.24413145e-01, 9.27949250e-01, 9.31378603e-01,
+ 9.34701502e-01, 9.37918305e-01, 9.41029668e-01, 9.44036126e-01,
+ 9.46938515e-01, 9.49737847e-01, 9.52435017e-01, 9.55031335e-01,
+ 9.57527936e-01, 9.59926248e-01, 9.62227762e-01, 9.64434028e-01,
+ 9.66546714e-01, 9.68567610e-01, 9.70498502e-01, 9.72341299e-01,
+ 9.74098027e-01, 9.75770652e-01, 9.77361381e-01, 9.78872299e-01,
+ 9.80305672e-01, 9.81663704e-01, 9.82948720e-01, 9.84162986e-01,
+ 9.85308945e-01, 9.86388862e-01, 9.87405181e-01, 9.88360226e-01,
+ 9.89256442e-01, 9.90096152e-01, 9.90881741e-01, 9.91615593e-01,
+ 9.92299914e-01, 9.92937148e-01, 9.93529499e-01, 9.94079232e-01,
+ 9.94588435e-01, 9.95059371e-01, 9.95494127e-01, 9.95894730e-01,
+ 9.96263146e-01, 9.96601343e-01, 9.96911168e-01, 9.97194529e-01,
+ 9.97453094e-01, 9.97688591e-01, 9.97902572e-01, 9.98096704e-01,
+ 9.98272479e-01, 9.98431206e-01, 9.98574317e-01, 9.98703122e-01,
+ 9.98818815e-01, 9.98922586e-01, 9.99015450e-01, 9.99098480e-01,
+ 9.99172688e-01, 9.99238908e-01, 9.99298036e-01, 9.99350786e-01,
+ 9.99397993e-01, 9.99440193e-01, 9.99478102e-01, 9.99512255e-01,
+ 9.99543130e-01, 9.99571264e-01, 9.99597073e-01, 9.99620855e-01,
+ 9.99643087e-01, 9.99663949e-01, 9.99683797e-01, 9.99702871e-01,
+ 9.99721289e-01, 9.99739230e-01, 9.99756932e-01, 9.99774456e-01,
+ 9.99791920e-01, 9.99809384e-01, 9.99826908e-01, 9.99844551e-01,
+ 9.99862373e-01, 9.99880314e-01, 9.99898374e-01, 9.99916673e-01,
+ 9.99935031e-01, 9.99953508e-01, 9.99972105e-01, 9.99990702e-01,
+ 1.00000930e+00, 1.00002778e+00, 1.00004625e+00, 1.00006461e+00,
+ 1.00008273e+00, 1.00010061e+00, 1.00011826e+00, 1.00013554e+00,
+ 1.00015235e+00, 1.00016880e+00, 1.00018466e+00, 1.00020003e+00,
+ 1.00021482e+00, 1.00022900e+00, 1.00024247e+00, 1.00025523e+00,
+ 1.00026727e+00, 1.00027859e+00, 1.00028908e+00, 1.00029874e+00,
+ 1.00030744e+00, 1.00031543e+00, 1.00032246e+00, 1.00032854e+00,
+ 1.00033379e+00, 1.00033808e+00, 1.00034130e+00, 1.00034368e+00,
+ 1.00034511e+00, 1.00034559e+00, 1.00034511e+00, 1.00034368e+00,
+ 1.00034142e+00, 1.00033808e+00, 1.00033391e+00, 1.00032878e+00,
+ 1.00032282e+00, 1.00031602e+00, 1.00030828e+00, 1.00029981e+00,
+ 1.00029051e+00, 1.00028050e+00, 1.00026977e+00, 1.00025833e+00,
+ 1.00024617e+00, 1.00023329e+00, 1.00021994e+00, 1.00020599e+00,
+ 1.00019157e+00, 1.00017655e+00, 1.00016105e+00, 1.00014532e+00,
+ 1.00012910e+00, 1.00011253e+00, 1.00009573e+00, 1.00007868e+00,
+ 1.00006139e+00, 1.00004399e+00, 1.00002646e+00, 1.00000882e+00,
+ 9.99991179e-01, 9.99973595e-01, 9.99956071e-01, 9.99938667e-01,
+ 9.99921381e-01, 9.99904335e-01, 9.99887526e-01, 9.99870956e-01,
+ 9.99854743e-01, 9.99838948e-01, 9.99823511e-01, 9.99808550e-01,
+ 9.99794066e-01, 9.99780118e-01, 9.99766707e-01, 9.99753952e-01,
+ 9.99741793e-01, 9.99730289e-01, 9.99719560e-01, 9.99709487e-01,
+ 9.99700248e-01, 9.99691784e-01, 9.99684095e-01, 9.99677300e-01,
+ 9.99671280e-01, 9.99666214e-01, 9.99662042e-01, 9.99658763e-01,
+ 9.99656379e-01, 9.99655008e-01, 9.99654531e-01, 9.99654949e-01,
+ 9.99656379e-01, 9.99658763e-01, 9.99662101e-01, 9.99666333e-01,
+ 9.99671519e-01, 9.99677658e-01, 9.99684691e-01, 9.99692619e-01,
+ 9.99701381e-01, 9.99711037e-01, 9.99721527e-01, 9.99732792e-01,
+ 9.99744833e-01, 9.99757588e-01, 9.99771118e-01, 9.99785244e-01,
+ 9.99800026e-01, 9.99815404e-01, 9.99831259e-01, 9.99847651e-01,
+ 9.99864519e-01, 9.99881744e-01, 9.99899328e-01, 9.99917269e-01,
+ 9.99935389e-01, 9.99953687e-01, 9.99972165e-01, 9.99990702e-01,
+ 1.00000930e+00, 1.00002778e+00, 1.00004625e+00, 1.00006461e+00,
+ 1.00008273e+00, 1.00010061e+00, 1.00011826e+00, 1.00013554e+00,
+ 1.00015235e+00, 1.00016880e+00, 1.00018466e+00, 1.00020003e+00,
+ 1.00021482e+00, 1.00022900e+00, 1.00024247e+00, 1.00025523e+00,
+ 1.00026727e+00, 1.00027859e+00, 1.00028908e+00, 1.00029874e+00,
+ 1.00030744e+00, 1.00031543e+00, 1.00032246e+00, 1.00032854e+00,
+ 1.00033379e+00, 1.00033808e+00, 1.00034130e+00, 1.00034368e+00,
+ 1.00034511e+00, 1.00034559e+00, 1.00034511e+00, 1.00034368e+00,
+ 1.00034142e+00, 1.00033808e+00, 1.00033391e+00, 1.00032878e+00,
+ 1.00032282e+00, 1.00031602e+00, 1.00030828e+00, 1.00029981e+00,
+ 1.00029051e+00, 1.00028050e+00, 1.00026977e+00, 1.00025833e+00,
+ 1.00024617e+00, 1.00023329e+00, 1.00021994e+00, 1.00020599e+00,
+ 1.00019157e+00, 1.00017655e+00, 1.00016105e+00, 1.00014532e+00,
+ 1.00012910e+00, 1.00011253e+00, 1.00009573e+00, 1.00007868e+00,
+ 1.00006139e+00, 1.00004399e+00, 1.00002646e+00, 1.00000882e+00,
+ 9.99991179e-01, 9.99973595e-01, 9.99956071e-01, 9.99938667e-01,
+ 9.99921381e-01, 9.99904335e-01, 9.99887526e-01, 9.99870956e-01,
+ 9.99854743e-01, 9.99838948e-01, 9.99823511e-01, 9.99808550e-01,
+ 9.99794066e-01, 9.99780118e-01, 9.99766707e-01, 9.99753952e-01,
+ 9.99741793e-01, 9.99730289e-01, 9.99719560e-01, 9.99709487e-01,
+ 9.99700248e-01, 9.99691784e-01, 9.99684095e-01, 9.99677300e-01,
+ 9.99671280e-01, 9.99666214e-01, 9.99662042e-01, 9.99658763e-01,
+ 9.99656379e-01, 9.99655008e-01, 9.99654531e-01, 9.99654949e-01,
+ 9.99656379e-01, 9.99658763e-01, 9.99662101e-01, 9.99666333e-01,
+ 9.99671519e-01, 9.99677658e-01, 9.99684691e-01, 9.99692619e-01,
+ 9.99701381e-01, 9.99711037e-01, 9.99721527e-01, 9.99732792e-01,
+ 9.99744833e-01, 9.99757588e-01, 9.99771118e-01, 9.99785244e-01,
+ 9.99800026e-01, 9.99815404e-01, 9.99831259e-01, 9.99847651e-01,
+ 9.99864519e-01, 9.99881744e-01, 9.99899328e-01, 9.99917269e-01,
+ 9.99935389e-01, 9.99953687e-01, 9.99972165e-01, 9.99990702e-01,
+ 1.00000930e+00, 1.00002778e+00, 1.00004613e+00, 1.00006425e+00,
+ 1.00008214e+00, 1.00009966e+00, 1.00011683e+00, 1.00013340e+00,
+ 1.00014925e+00, 1.00016439e+00, 1.00017869e+00, 1.00019193e+00,
+ 1.00020397e+00, 1.00021482e+00, 1.00022411e+00, 1.00023162e+00,
+ 1.00023735e+00, 1.00024080e+00, 1.00024199e+00, 1.00024033e+00,
+ 1.00023568e+00, 1.00022769e+00, 1.00021589e+00, 1.00020003e+00,
+ 1.00017941e+00, 1.00015378e+00, 1.00012243e+00, 1.00008476e+00,
+ 1.00004041e+00, 9.99988317e-01, 9.99928057e-01, 9.99858677e-01,
+ 9.99779403e-01, 9.99689281e-01, 9.99587417e-01, 9.99472737e-01,
+ 9.99344110e-01, 9.99200404e-01, 9.99040425e-01, 9.98862803e-01,
+ 9.98666167e-01, 9.98449087e-01, 9.98209953e-01, 9.97947097e-01,
+ 9.97658968e-01, 9.97343540e-01, 9.96999085e-01, 9.96623516e-01,
+ 9.96214747e-01, 9.95770633e-01, 9.95288789e-01, 9.94766831e-01,
+ 9.94202256e-01, 9.93592501e-01, 9.92934704e-01, 9.92226064e-01,
+ 9.91463542e-01, 9.90644097e-01, 9.89764392e-01, 9.88821149e-01,
+ 9.87810850e-01, 9.86729801e-01, 9.85574305e-01, 9.84340370e-01,
+ 9.83024001e-01, 9.81621027e-01, 9.80127096e-01, 9.78537738e-01,
+ 9.76848423e-01, 9.75054383e-01, 9.73150730e-01, 9.71132576e-01,
+ 9.68994796e-01, 9.66732204e-01, 9.64339435e-01, 9.61811244e-01,
+ 9.59142029e-01, 9.56326306e-01, 9.53358531e-01, 9.50233042e-01,
+ 9.46944118e-01, 9.43486214e-01, 9.39853668e-01, 9.36040819e-01,
+ 9.32042122e-01, 9.27852154e-01, 9.23465431e-01, 9.18876767e-01,
+ 9.14081097e-01, 9.09073353e-01, 9.03848886e-01, 8.98403168e-01,
+ 8.92731845e-01, 8.86831045e-01, 8.80696952e-01, 8.74326289e-01,
+ 8.67715955e-01, 8.60863328e-01, 8.53766203e-01, 8.46422672e-01,
+ 8.38831365e-01, 8.30991328e-01, 8.22902203e-01, 8.14563930e-01,
+ 8.05977046e-01, 7.97142744e-01, 7.88062632e-01, 7.78738797e-01,
+ 7.69173980e-01, 7.59371519e-01, 7.49335289e-01, 7.39069760e-01,
+ 7.28579819e-01, 7.17871130e-01, 7.06949770e-01, 6.95822597e-01,
+ 6.84496701e-01, 6.72980070e-01, 6.61280870e-01, 6.49408042e-01,
+ 6.37370944e-01, 6.25179410e-01, 6.12843752e-01, 6.00374699e-01,
+ 5.87783396e-01, 5.75081468e-01, 5.62280834e-01, 5.49393654e-01,
+ 5.36432624e-01, 5.23410499e-01, 5.10340393e-01, 4.97235566e-01,
+ 4.84109521e-01, 4.70975846e-01, 4.57848251e-01, 4.44740474e-01,
+ 4.31666315e-01, 4.18639511e-01, 4.05673832e-01, 3.92782807e-01,
+ 3.79979968e-01, 3.67278606e-01, 3.54691803e-01, 3.42232376e-01,
+ 3.29912812e-01, 3.17745358e-01, 3.05741847e-01, 2.93913603e-01,
+ 2.82271683e-01, 2.70826548e-01, 2.59588152e-01, 2.48565957e-01,
+ 2.37768814e-01, 2.27205008e-01, 2.16882199e-01, 2.06807390e-01,
+ 1.96986943e-01, 1.87426537e-01, 1.78131178e-01, 1.69105172e-01,
+ 1.60352126e-01, 1.51874945e-01, 1.43675804e-01, 1.35756254e-01,
+ 1.28117070e-01, 1.20758407e-01, 1.13679729e-01, 1.06879868e-01,
+ 1.00357018e-01, 9.41087753e-02, 8.81321430e-02, 8.24235976e-02,
+ 7.69790635e-02, 7.17940032e-02, 6.68634027e-02, 6.21818379e-02,
+ 5.77434972e-02, 5.35422154e-02, 4.95715141e-02, 4.58246432e-02,
+ 4.22946103e-02, 3.89742292e-02, 3.58561426e-02, 3.29328589e-02,
+ 3.01968064e-02, 2.76403390e-02, 2.52557844e-02, 2.30354760e-02,
+ 2.09717732e-02, 1.90570969e-02, 1.72839500e-02, 1.56449396e-02,
+ 1.41328052e-02, 1.27404351e-02, 1.14608845e-02, 1.02873892e-02,
+ 9.21338331e-03, 8.23251065e-03, 7.33863330e-03, 6.52584061e-03,
+ 5.78845851e-03, 5.12105133e-03, 4.51842742e-03, 3.97564145e-03,
+ 3.48799396e-03, 3.05103138e-03, 2.66054412e-03, 2.31256452e-03,
+ 2.00336217e-03, 1.72943878e-03, 1.48752402e-03, 1.27456791e-03,
+ 1.08773448e-03, 9.24394117e-04, 7.82115792e-04, 6.58658682e-04,
+ 5.51963516e-04, 4.60143900e-04, 3.81477352e-04, 3.14396282e-04,
+ 2.57478940e-04, 2.09440448e-04, 1.69123945e-04, 1.35491777e-04,
+ 1.07617016e-04, 8.46750627e-05, 6.59356156e-05, 5.07548866e-05,
+ 3.85681342e-05, 2.88825358e-05, 2.12704090e-05, 1.53627971e-05,
+ 1.08434460e-05, 7.44312956e-06, 4.93438165e-06, 3.12659085e-06,
+ 1.86147406e-06, 1.00890213e-06, 4.63012810e-07, 1.37904777e-07,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+])
+
+### LC3 - 3.7.3 ###
+
+W_7M5_8K = np.array([
+ 2.95060859e-03, 7.17541132e-03, 1.37695374e-02, 2.30953556e-02,
+ 3.54036230e-02, 5.08289304e-02, 6.94696293e-02, 9.13884278e-02,
+ 1.16604575e-01, 1.45073546e-01, 1.76711174e-01, 2.11342953e-01,
+ 2.48768614e-01, 2.88701102e-01, 3.30823871e-01, 3.74814544e-01,
+ 4.20308013e-01, 4.66904918e-01, 5.14185341e-01, 5.61710041e-01,
+ 6.09026346e-01, 6.55671016e-01, 7.01218384e-01, 7.45240679e-01,
+ 7.87369206e-01, 8.27223833e-01, 8.64513675e-01, 8.98977415e-01,
+ 9.30407518e-01, 9.58599937e-01, 9.83447719e-01, 1.00488283e+00,
+ 1.02285381e+00, 1.03740495e+00, 1.04859791e+00, 1.05656184e+00,
+ 1.06149371e+00, 1.06362578e+00, 1.06325973e+00, 1.06074505e+00,
+ 1.05643590e+00, 1.05069500e+00, 1.04392435e+00, 1.03647725e+00,
+ 1.02872867e+00, 1.02106486e+00, 1.01400658e+00, 1.00727455e+00,
+ 1.00172250e+00, 9.97309592e-01, 9.93985158e-01, 9.91683335e-01,
+ 9.90325325e-01, 9.89822613e-01, 9.90074734e-01, 9.90975314e-01,
+ 9.92412851e-01, 9.94273149e-01, 9.96439157e-01, 9.98791616e-01,
+ 1.00120985e+00, 1.00357357e+00, 1.00575984e+00, 1.00764515e+00,
+ 1.00910687e+00, 1.01002476e+00, 1.01028203e+00, 1.00976919e+00,
+ 1.00838641e+00, 1.00605124e+00, 1.00269767e+00, 9.98280464e-01,
+ 9.92777987e-01, 9.86186892e-01, 9.77634164e-01, 9.67447270e-01,
+ 9.55129725e-01, 9.40389877e-01, 9.22959280e-01, 9.02607350e-01,
+ 8.79202689e-01, 8.52641750e-01, 8.22881272e-01, 7.89971715e-01,
+ 7.54030328e-01, 7.15255742e-01, 6.73936911e-01, 6.30414716e-01,
+ 5.85078858e-01, 5.38398518e-01, 4.90833753e-01, 4.42885823e-01,
+ 3.95091024e-01, 3.48004343e-01, 3.02196710e-01, 2.58227431e-01,
+ 2.16641416e-01, 1.77922122e-01, 1.42480547e-01, 1.10652194e-01,
+ 8.26995967e-02, 5.88334516e-02, 3.92030848e-02, 2.38629107e-02,
+ 1.26976223e-02, 5.35665361e-03, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+])
+
+W_7M5_16K = np.array([
+ 2.20824874e-03, 3.81014420e-03, 5.91552473e-03, 8.58361457e-03,
+ 1.18759723e-02, 1.58335301e-02, 2.04918652e-02, 2.58883593e-02,
+ 3.20415894e-02, 3.89616721e-02, 4.66742169e-02, 5.51849337e-02,
+ 6.45038384e-02, 7.46411071e-02, 8.56000162e-02, 9.73846703e-02,
+ 1.09993603e-01, 1.23419277e-01, 1.37655457e-01, 1.52690437e-01,
+ 1.68513363e-01, 1.85093105e-01, 2.02410419e-01, 2.20450365e-01,
+ 2.39167941e-01, 2.58526168e-01, 2.78498539e-01, 2.99038432e-01,
+ 3.20104862e-01, 3.41658622e-01, 3.63660034e-01, 3.86062695e-01,
+ 4.08815272e-01, 4.31871046e-01, 4.55176988e-01, 4.78676593e-01,
+ 5.02324813e-01, 5.26060916e-01, 5.49831283e-01, 5.73576883e-01,
+ 5.97241338e-01, 6.20770242e-01, 6.44099662e-01, 6.67176382e-01,
+ 6.89958854e-01, 7.12379980e-01, 7.34396372e-01, 7.55966688e-01,
+ 7.77036981e-01, 7.97558114e-01, 8.17490856e-01, 8.36796950e-01,
+ 8.55447310e-01, 8.73400798e-01, 8.90635719e-01, 9.07128770e-01,
+ 9.22848784e-01, 9.37763323e-01, 9.51860206e-01, 9.65130600e-01,
+ 9.77556541e-01, 9.89126209e-01, 9.99846919e-01, 1.00970073e+00,
+ 1.01868229e+00, 1.02681455e+00, 1.03408981e+00, 1.04051196e+00,
+ 1.04610837e+00, 1.05088565e+00, 1.05486289e+00, 1.05807221e+00,
+ 1.06053414e+00, 1.06227662e+00, 1.06333815e+00, 1.06375557e+00,
+ 1.06356632e+00, 1.06282156e+00, 1.06155996e+00, 1.05981709e+00,
+ 1.05765876e+00, 1.05512006e+00, 1.05223985e+00, 1.04908779e+00,
+ 1.04569860e+00, 1.04210831e+00, 1.03838099e+00, 1.03455276e+00,
+ 1.03067200e+00, 1.02679167e+00, 1.02295558e+00, 1.01920733e+00,
+ 1.01587289e+00, 1.01221017e+00, 1.00884559e+00, 1.00577851e+00,
+ 1.00300262e+00, 1.00051460e+00, 9.98309229e-01, 9.96378601e-01,
+ 9.94718132e-01, 9.93316216e-01, 9.92166957e-01, 9.91258603e-01,
+ 9.90581104e-01, 9.90123118e-01, 9.89873712e-01, 9.89818707e-01,
+ 9.89946800e-01, 9.90243175e-01, 9.90695564e-01, 9.91288540e-01,
+ 9.92009469e-01, 9.92842693e-01, 9.93775067e-01, 9.94790398e-01,
+ 9.95875534e-01, 9.97014367e-01, 9.98192871e-01, 9.99394506e-01,
+ 1.00060586e+00, 1.00181040e+00, 1.00299457e+00, 1.00414155e+00,
+ 1.00523688e+00, 1.00626393e+00, 1.00720890e+00, 1.00805489e+00,
+ 1.00878802e+00, 1.00939182e+00, 1.00985296e+00, 1.01015529e+00,
+ 1.01028602e+00, 1.01022988e+00, 1.00997541e+00, 1.00950846e+00,
+ 1.00881848e+00, 1.00789488e+00, 1.00672876e+00, 1.00530991e+00,
+ 1.00363456e+00, 1.00169363e+00, 9.99485663e-01, 9.97006370e-01,
+ 9.94254687e-01, 9.91231967e-01, 9.87937115e-01, 9.84375125e-01,
+ 9.79890963e-01, 9.75269879e-01, 9.70180498e-01, 9.64580027e-01,
+ 9.58425534e-01, 9.51684014e-01, 9.44320232e-01, 9.36290624e-01,
+ 9.27580507e-01, 9.18153414e-01, 9.07976524e-01, 8.97050058e-01,
+ 8.85351360e-01, 8.72857927e-01, 8.59579819e-01, 8.45502615e-01,
+ 8.30619943e-01, 8.14946648e-01, 7.98489378e-01, 7.81262450e-01,
+ 7.63291769e-01, 7.44590843e-01, 7.25199287e-01, 7.05153668e-01,
+ 6.84490545e-01, 6.63245210e-01, 6.41477162e-01, 6.19235334e-01,
+ 5.96559133e-01, 5.73519989e-01, 5.50173851e-01, 5.26568538e-01,
+ 5.02781159e-01, 4.78860889e-01, 4.54877894e-01, 4.30898123e-01,
+ 4.06993964e-01, 3.83234031e-01, 3.59680098e-01, 3.36408100e-01,
+ 3.13496418e-01, 2.91010565e-01, 2.69019585e-01, 2.47584348e-01,
+ 2.26788433e-01, 2.06677771e-01, 1.87310343e-01, 1.68739644e-01,
+ 1.51012382e-01, 1.34171842e-01, 1.18254662e-01, 1.03290734e-01,
+ 8.93117360e-02, 7.63429787e-02, 6.44077291e-02, 5.35243715e-02,
+ 4.37084453e-02, 3.49667099e-02, 2.72984629e-02, 2.06895808e-02,
+ 1.51125125e-02, 1.05228754e-02, 6.85547314e-03, 4.02351119e-03,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+])
+W_7M5_24K = np.array([
+ 1.97084908e-03, 2.95060859e-03, 4.12447721e-03, 5.52688664e-03,
+ 7.17541132e-03, 9.08757730e-03, 1.12819105e-02, 1.37695374e-02,
+ 1.65600266e-02, 1.96650895e-02, 2.30953556e-02, 2.68612894e-02,
+ 3.09632560e-02, 3.54036230e-02, 4.01915610e-02, 4.53331403e-02,
+ 5.08289304e-02, 5.66815448e-02, 6.28935304e-02, 6.94696293e-02,
+ 7.64106314e-02, 8.37160016e-02, 9.13884278e-02, 9.94294008e-02,
+ 1.07834725e-01, 1.16604575e-01, 1.25736503e-01, 1.35226811e-01,
+ 1.45073546e-01, 1.55273819e-01, 1.65822194e-01, 1.76711174e-01,
+ 1.87928776e-01, 1.99473180e-01, 2.11342953e-01, 2.23524554e-01,
+ 2.36003100e-01, 2.48768614e-01, 2.61813811e-01, 2.75129161e-01,
+ 2.88701102e-01, 3.02514034e-01, 3.16558805e-01, 3.30823871e-01,
+ 3.45295567e-01, 3.59963992e-01, 3.74814544e-01, 3.89831817e-01,
+ 4.05001010e-01, 4.20308013e-01, 4.35739515e-01, 4.51277817e-01,
+ 4.66904918e-01, 4.82609041e-01, 4.98375466e-01, 5.14185341e-01,
+ 5.30021478e-01, 5.45869352e-01, 5.61710041e-01, 5.77528151e-01,
+ 5.93304696e-01, 6.09026346e-01, 6.24674189e-01, 6.40227555e-01,
+ 6.55671016e-01, 6.70995935e-01, 6.86184559e-01, 7.01218384e-01,
+ 7.16078449e-01, 7.30756084e-01, 7.45240679e-01, 7.59515122e-01,
+ 7.73561955e-01, 7.87369206e-01, 8.00923138e-01, 8.14211386e-01,
+ 8.27223833e-01, 8.39952374e-01, 8.52386102e-01, 8.64513675e-01,
+ 8.76324079e-01, 8.87814288e-01, 8.98977415e-01, 9.09803319e-01,
+ 9.20284312e-01, 9.30407518e-01, 9.40169652e-01, 9.49567795e-01,
+ 9.58599937e-01, 9.67260260e-01, 9.75545166e-01, 9.83447719e-01,
+ 9.90971957e-01, 9.98119269e-01, 1.00488283e+00, 1.01125773e+00,
+ 1.01724436e+00, 1.02285381e+00, 1.02808734e+00, 1.03293706e+00,
+ 1.03740495e+00, 1.04150164e+00, 1.04523236e+00, 1.04859791e+00,
+ 1.05160340e+00, 1.05425505e+00, 1.05656184e+00, 1.05853400e+00,
+ 1.06017414e+00, 1.06149371e+00, 1.06249943e+00, 1.06320577e+00,
+ 1.06362578e+00, 1.06376487e+00, 1.06363778e+00, 1.06325973e+00,
+ 1.06264695e+00, 1.06180496e+00, 1.06074505e+00, 1.05948492e+00,
+ 1.05804533e+00, 1.05643590e+00, 1.05466218e+00, 1.05274047e+00,
+ 1.05069500e+00, 1.04853894e+00, 1.04627898e+00, 1.04392435e+00,
+ 1.04149540e+00, 1.03901003e+00, 1.03647725e+00, 1.03390793e+00,
+ 1.03131989e+00, 1.02872867e+00, 1.02614832e+00, 1.02358988e+00,
+ 1.02106486e+00, 1.01856262e+00, 1.01655770e+00, 1.01400658e+00,
+ 1.01162953e+00, 1.00938590e+00, 1.00727455e+00, 1.00529616e+00,
+ 1.00344526e+00, 1.00172250e+00, 1.00012792e+00, 9.98657533e-01,
+ 9.97309592e-01, 9.96083571e-01, 9.94976569e-01, 9.93985158e-01,
+ 9.93107530e-01, 9.92341305e-01, 9.91683335e-01, 9.91130070e-01,
+ 9.90678325e-01, 9.90325325e-01, 9.90067562e-01, 9.89901282e-01,
+ 9.89822613e-01, 9.89827845e-01, 9.89913241e-01, 9.90074734e-01,
+ 9.90308256e-01, 9.90609852e-01, 9.90975314e-01, 9.91400330e-01,
+ 9.91880966e-01, 9.92412851e-01, 9.92991779e-01, 9.93613381e-01,
+ 9.94273149e-01, 9.94966958e-01, 9.95690370e-01, 9.96439157e-01,
+ 9.97208572e-01, 9.97994275e-01, 9.98791616e-01, 9.99596062e-01,
+ 1.00040410e+00, 1.00120985e+00, 1.00200976e+00, 1.00279924e+00,
+ 1.00357357e+00, 1.00432828e+00, 1.00505850e+00, 1.00575984e+00,
+ 1.00642767e+00, 1.00705768e+00, 1.00764515e+00, 1.00818549e+00,
+ 1.00867427e+00, 1.00910687e+00, 1.00947916e+00, 1.00978659e+00,
+ 1.01002476e+00, 1.01018954e+00, 1.01027669e+00, 1.01028203e+00,
+ 1.01020174e+00, 1.01003208e+00, 1.00976919e+00, 1.00940939e+00,
+ 1.00894931e+00, 1.00838641e+00, 1.00771780e+00, 1.00694031e+00,
+ 1.00605124e+00, 1.00504879e+00, 1.00393183e+00, 1.00269767e+00,
+ 1.00134427e+00, 9.99872092e-01, 9.98280464e-01, 9.96566569e-01,
+ 9.94731737e-01, 9.92777987e-01, 9.90701374e-01, 9.88504165e-01,
+ 9.86186892e-01, 9.83711989e-01, 9.80584643e-01, 9.77634164e-01,
+ 9.74455033e-01, 9.71062916e-01, 9.67447270e-01, 9.63593926e-01,
+ 9.59491398e-01, 9.55129725e-01, 9.50501326e-01, 9.45592810e-01,
+ 9.40389877e-01, 9.34886760e-01, 9.29080559e-01, 9.22959280e-01,
+ 9.16509579e-01, 9.09724456e-01, 9.02607350e-01, 8.95155084e-01,
+ 8.87356154e-01, 8.79202689e-01, 8.70699698e-01, 8.61847424e-01,
+ 8.52641750e-01, 8.43077833e-01, 8.33154905e-01, 8.22881272e-01,
+ 8.12257597e-01, 8.01285439e-01, 7.89971715e-01, 7.78318177e-01,
+ 7.66337710e-01, 7.54030328e-01, 7.41407991e-01, 7.28477501e-01,
+ 7.15255742e-01, 7.01751739e-01, 6.87975632e-01, 6.73936911e-01,
+ 6.59652573e-01, 6.45139489e-01, 6.30414716e-01, 6.15483622e-01,
+ 6.00365852e-01, 5.85078858e-01, 5.69649536e-01, 5.54084810e-01,
+ 5.38398518e-01, 5.22614738e-01, 5.06756805e-01, 4.90833753e-01,
+ 4.74866033e-01, 4.58876566e-01, 4.42885823e-01, 4.26906539e-01,
+ 4.10970973e-01, 3.95091024e-01, 3.79291327e-01, 3.63587417e-01,
+ 3.48004343e-01, 3.32563201e-01, 3.17287485e-01, 3.02196710e-01,
+ 2.87309403e-01, 2.72643992e-01, 2.58227431e-01, 2.44072856e-01,
+ 2.30208977e-01, 2.16641416e-01, 2.03398481e-01, 1.90486162e-01,
+ 1.77922122e-01, 1.65726674e-01, 1.53906397e-01, 1.42480547e-01,
+ 1.31453980e-01, 1.20841778e-01, 1.10652194e-01, 1.00891734e-01,
+ 9.15718851e-02, 8.26995967e-02, 7.42815529e-02, 6.63242382e-02,
+ 5.88334516e-02, 5.18140676e-02, 4.52698346e-02, 3.92030848e-02,
+ 3.36144159e-02, 2.85023308e-02, 2.38629107e-02, 1.96894227e-02,
+ 1.59720527e-02, 1.26976223e-02, 9.84937739e-03, 7.40724463e-03,
+ 5.35665361e-03, 3.83226552e-03, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+])
-### 3.7.3 ###
+W_7M5_32K = np.array([
+ 1.84833037e-03, 2.56481839e-03, 3.36762118e-03, 4.28736617e-03,
+ 5.33830143e-03, 6.52679223e-03, 7.86112587e-03, 9.34628179e-03,
+ 1.09916868e-02, 1.28011172e-02, 1.47805911e-02, 1.69307043e-02,
+ 1.92592307e-02, 2.17696937e-02, 2.44685983e-02, 2.73556543e-02,
+ 3.04319230e-02, 3.36980464e-02, 3.71583577e-02, 4.08148180e-02,
+ 4.46708068e-02, 4.87262995e-02, 5.29820633e-02, 5.74382470e-02,
+ 6.20968580e-02, 6.69609767e-02, 7.20298364e-02, 7.73039146e-02,
+ 8.27825574e-02, 8.84682102e-02, 9.43607566e-02, 1.00460272e-01,
+ 1.06763824e-01, 1.13273679e-01, 1.19986420e-01, 1.26903521e-01,
+ 1.34020853e-01, 1.41339557e-01, 1.48857211e-01, 1.56573685e-01,
+ 1.64484622e-01, 1.72589077e-01, 1.80879090e-01, 1.89354320e-01,
+ 1.98012244e-01, 2.06854141e-01, 2.15875319e-01, 2.25068672e-01,
+ 2.34427407e-01, 2.43948314e-01, 2.53627993e-01, 2.63464061e-01,
+ 2.73450494e-01, 2.83582189e-01, 2.93853469e-01, 3.04257373e-01,
+ 3.14790914e-01, 3.25449123e-01, 3.36227410e-01, 3.47118760e-01,
+ 3.58120177e-01, 3.69224663e-01, 3.80427793e-01, 3.91720023e-01,
+ 4.03097022e-01, 4.14551955e-01, 4.26081719e-01, 4.37676318e-01,
+ 4.49330196e-01, 4.61034855e-01, 4.72786043e-01, 4.84576777e-01,
+ 4.96401707e-01, 5.08252458e-01, 5.20122078e-01, 5.32002077e-01,
+ 5.43888090e-01, 5.55771601e-01, 5.67645739e-01, 5.79502786e-01,
+ 5.91335035e-01, 6.03138367e-01, 6.14904172e-01, 6.26623941e-01,
+ 6.38288834e-01, 6.49893375e-01, 6.61432360e-01, 6.72902514e-01,
+ 6.84293750e-01, 6.95600460e-01, 7.06811784e-01, 7.17923425e-01,
+ 7.28931386e-01, 7.39832773e-01, 7.50618982e-01, 7.61284053e-01,
+ 7.71818919e-01, 7.82220992e-01, 7.92481330e-01, 8.02599448e-01,
+ 8.12565230e-01, 8.22377129e-01, 8.32030518e-01, 8.41523208e-01,
+ 8.50848313e-01, 8.60002412e-01, 8.68979881e-01, 8.77778347e-01,
+ 8.86395904e-01, 8.94829421e-01, 9.03077626e-01, 9.11132652e-01,
+ 9.18993585e-01, 9.26652937e-01, 9.34111420e-01, 9.41364344e-01,
+ 9.48412967e-01, 9.55255630e-01, 9.61892013e-01, 9.68316363e-01,
+ 9.74530156e-01, 9.80528338e-01, 9.86313928e-01, 9.91886049e-01,
+ 9.97246345e-01, 1.00239190e+00, 1.00731946e+00, 1.01202707e+00,
+ 1.01651654e+00, 1.02079430e+00, 1.02486082e+00, 1.02871471e+00,
+ 1.03235170e+00, 1.03577375e+00, 1.03898432e+00, 1.04198786e+00,
+ 1.04478564e+00, 1.04737818e+00, 1.04976743e+00, 1.05195405e+00,
+ 1.05394290e+00, 1.05573463e+00, 1.05734177e+00, 1.05875726e+00,
+ 1.05998674e+00, 1.06103672e+00, 1.06190651e+00, 1.06260369e+00,
+ 1.06313289e+00, 1.06350237e+00, 1.06370981e+00, 1.06376322e+00,
+ 1.06366765e+00, 1.06343012e+00, 1.06305656e+00, 1.06255421e+00,
+ 1.06192235e+00, 1.06116702e+00, 1.06029469e+00, 1.05931469e+00,
+ 1.05823465e+00, 1.05705891e+00, 1.05578948e+00, 1.05442979e+00,
+ 1.05298793e+00, 1.05147505e+00, 1.04989930e+00, 1.04826213e+00,
+ 1.04656691e+00, 1.04481699e+00, 1.04302125e+00, 1.04118768e+00,
+ 1.03932339e+00, 1.03743168e+00, 1.03551757e+00, 1.03358511e+00,
+ 1.03164371e+00, 1.02969955e+00, 1.02775944e+00, 1.02582719e+00,
+ 1.02390791e+00, 1.02200805e+00, 1.02013910e+00, 1.01826310e+00,
+ 1.01687901e+00, 1.01492195e+00, 1.01309662e+00, 1.01134205e+00,
+ 1.00965912e+00, 1.00805036e+00, 1.00651754e+00, 1.00505799e+00,
+ 1.00366956e+00, 1.00235327e+00, 1.00110981e+00, 9.99937523e-01,
+ 9.98834524e-01, 9.97800606e-01, 9.96835756e-01, 9.95938881e-01,
+ 9.95108459e-01, 9.94343411e-01, 9.93642921e-01, 9.93005832e-01,
+ 9.92430984e-01, 9.91917493e-01, 9.91463898e-01, 9.91068214e-01,
+ 9.90729218e-01, 9.90446225e-01, 9.90217819e-01, 9.90041963e-01,
+ 9.89917085e-01, 9.89841975e-01, 9.89815048e-01, 9.89834329e-01,
+ 9.89898211e-01, 9.90005403e-01, 9.90154189e-01, 9.90342427e-01,
+ 9.90568459e-01, 9.90830953e-01, 9.91128038e-01, 9.91457566e-01,
+ 9.91817881e-01, 9.92207559e-01, 9.92624757e-01, 9.93067358e-01,
+ 9.93533398e-01, 9.94021410e-01, 9.94529685e-01, 9.95055964e-01,
+ 9.95598351e-01, 9.96155580e-01, 9.96725627e-01, 9.97306092e-01,
+ 9.97895214e-01, 9.98491441e-01, 9.99092890e-01, 9.99697063e-01,
+ 1.00030303e+00, 1.00090793e+00, 1.00151084e+00, 1.00210923e+00,
+ 1.00270118e+00, 1.00328513e+00, 1.00385926e+00, 1.00442111e+00,
+ 1.00496860e+00, 1.00550040e+00, 1.00601455e+00, 1.00650869e+00,
+ 1.00698104e+00, 1.00743004e+00, 1.00785364e+00, 1.00824962e+00,
+ 1.00861604e+00, 1.00895138e+00, 1.00925390e+00, 1.00952134e+00,
+ 1.00975175e+00, 1.00994371e+00, 1.01009550e+00, 1.01020488e+00,
+ 1.01027007e+00, 1.01028975e+00, 1.01026227e+00, 1.01018562e+00,
+ 1.01005820e+00, 1.00987882e+00, 1.00964593e+00, 1.00935753e+00,
+ 1.00901228e+00, 1.00860959e+00, 1.00814837e+00, 1.00762674e+00,
+ 1.00704343e+00, 1.00639775e+00, 1.00568877e+00, 1.00491559e+00,
+ 1.00407768e+00, 1.00317429e+00, 1.00220424e+00, 1.00116684e+00,
+ 1.00006248e+00, 9.98891422e-01, 9.97652252e-01, 9.96343856e-01,
+ 9.94967462e-01, 9.93524663e-01, 9.92013927e-01, 9.90433283e-01,
+ 9.88785147e-01, 9.87072681e-01, 9.85297443e-01, 9.83401161e-01,
+ 9.80949418e-01, 9.78782729e-01, 9.76468238e-01, 9.74042850e-01,
+ 9.71498848e-01, 9.68829968e-01, 9.66030974e-01, 9.63095104e-01,
+ 9.60018198e-01, 9.56795738e-01, 9.53426267e-01, 9.49903482e-01,
+ 9.46222115e-01, 9.42375820e-01, 9.38361702e-01, 9.34177798e-01,
+ 9.29823124e-01, 9.25292320e-01, 9.20580120e-01, 9.15679793e-01,
+ 9.10590604e-01, 9.05315030e-01, 8.99852756e-01, 8.94199497e-01,
+ 8.88350152e-01, 8.82301631e-01, 8.76054874e-01, 8.69612385e-01,
+ 8.62972799e-01, 8.56135198e-01, 8.49098179e-01, 8.41857024e-01,
+ 8.34414055e-01, 8.26774617e-01, 8.18939244e-01, 8.10904891e-01,
+ 8.02675318e-01, 7.94253751e-01, 7.85641662e-01, 7.76838609e-01,
+ 7.67853193e-01, 7.58685181e-01, 7.49330658e-01, 7.39809171e-01,
+ 7.30109944e-01, 7.20247781e-01, 7.10224161e-01, 7.00044326e-01,
+ 6.89711890e-01, 6.79231154e-01, 6.68608179e-01, 6.57850997e-01,
+ 6.46965718e-01, 6.35959617e-01, 6.24840336e-01, 6.13603503e-01,
+ 6.02265091e-01, 5.90829083e-01, 5.79309408e-01, 5.67711124e-01,
+ 5.56037416e-01, 5.44293664e-01, 5.32489768e-01, 5.20636084e-01,
+ 5.08743273e-01, 4.96811166e-01, 4.84849881e-01, 4.72868107e-01,
+ 4.60875918e-01, 4.48881081e-01, 4.36891039e-01, 4.24912022e-01,
+ 4.12960603e-01, 4.01035896e-01, 3.89157867e-01, 3.77322199e-01,
+ 3.65543767e-01, 3.53832356e-01, 3.42196115e-01, 3.30644820e-01,
+ 3.19187559e-01, 3.07833309e-01, 2.96588182e-01, 2.85463717e-01,
+ 2.74462409e-01, 2.63609584e-01, 2.52883101e-01, 2.42323489e-01,
+ 2.31925746e-01, 2.21690837e-01, 2.11638058e-01, 2.01766920e-01,
+ 1.92082236e-01, 1.82589160e-01, 1.73305997e-01, 1.64229200e-01,
+ 1.55362654e-01, 1.46717079e-01, 1.38299391e-01, 1.30105078e-01,
+ 1.22145310e-01, 1.14423458e-01, 1.06941076e-01, 9.97025893e-02,
+ 9.27124283e-02, 8.59737427e-02, 7.94893311e-02, 7.32616579e-02,
+ 6.72934102e-02, 6.15874081e-02, 5.61458003e-02, 5.09700747e-02,
+ 4.60617047e-02, 4.14220117e-02, 3.70514189e-02, 3.29494666e-02,
+ 2.91153327e-02, 2.55476401e-02, 2.22437711e-02, 1.92000659e-02,
+ 1.64122205e-02, 1.38747611e-02, 1.15806353e-02, 9.52213664e-03,
+ 7.69137380e-03, 6.07207833e-03, 4.62581217e-03, 3.60685164e-03,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+])
-W_10M_80 = np.array([
+W_7M5_48K = np.array([
+ 1.72152668e-03, 2.20824874e-03, 2.68901752e-03, 3.22613342e-03,
+ 3.81014420e-03, 4.45371932e-03, 5.15369240e-03, 5.91552473e-03,
+ 6.73869158e-03, 7.62861841e-03, 8.58361457e-03, 9.60938437e-03,
+ 1.07060753e-02, 1.18759723e-02, 1.31190130e-02, 1.44390108e-02,
+ 1.58335301e-02, 1.73063081e-02, 1.88584711e-02, 2.04918652e-02,
+ 2.22061476e-02, 2.40057166e-02, 2.58883593e-02, 2.78552326e-02,
+ 2.99059145e-02, 3.20415894e-02, 3.42610013e-02, 3.65680973e-02,
+ 3.89616721e-02, 4.14435824e-02, 4.40140796e-02, 4.66742169e-02,
+ 4.94214625e-02, 5.22588489e-02, 5.51849337e-02, 5.82005143e-02,
+ 6.13059845e-02, 6.45038384e-02, 6.77913923e-02, 7.11707833e-02,
+ 7.46411071e-02, 7.82028053e-02, 8.18549521e-02, 8.56000162e-02,
+ 8.94357617e-02, 9.33642589e-02, 9.73846703e-02, 1.01496718e-01,
+ 1.05698760e-01, 1.09993603e-01, 1.14378287e-01, 1.18853508e-01,
+ 1.23419277e-01, 1.28075997e-01, 1.32820581e-01, 1.37655457e-01,
+ 1.42578648e-01, 1.47590522e-01, 1.52690437e-01, 1.57878853e-01,
+ 1.63152529e-01, 1.68513363e-01, 1.73957969e-01, 1.79484737e-01,
+ 1.85093105e-01, 1.90784835e-01, 1.96556497e-01, 2.02410419e-01,
+ 2.08345433e-01, 2.14359825e-01, 2.20450365e-01, 2.26617296e-01,
+ 2.32856279e-01, 2.39167941e-01, 2.45550642e-01, 2.52003951e-01,
+ 2.58526168e-01, 2.65118408e-01, 2.71775911e-01, 2.78498539e-01,
+ 2.85284606e-01, 2.92132459e-01, 2.99038432e-01, 3.06004256e-01,
+ 3.13026529e-01, 3.20104862e-01, 3.27237324e-01, 3.34423210e-01,
+ 3.41658622e-01, 3.48944976e-01, 3.56279252e-01, 3.63660034e-01,
+ 3.71085146e-01, 3.78554327e-01, 3.86062695e-01, 3.93610554e-01,
+ 4.01195225e-01, 4.08815272e-01, 4.16468460e-01, 4.24155411e-01,
+ 4.31871046e-01, 4.39614744e-01, 4.47384019e-01, 4.55176988e-01,
+ 4.62990138e-01, 4.70824619e-01, 4.78676593e-01, 4.86545433e-01,
+ 4.94428714e-01, 5.02324813e-01, 5.10229471e-01, 5.18142927e-01,
+ 5.26060916e-01, 5.33982818e-01, 5.41906817e-01, 5.49831283e-01,
+ 5.57751234e-01, 5.65667636e-01, 5.73576883e-01, 5.81476666e-01,
+ 5.89364661e-01, 5.97241338e-01, 6.05102013e-01, 6.12946170e-01,
+ 6.20770242e-01, 6.28572094e-01, 6.36348526e-01, 6.44099662e-01,
+ 6.51820973e-01, 6.59513822e-01, 6.67176382e-01, 6.74806795e-01,
+ 6.82400711e-01, 6.89958854e-01, 6.97475722e-01, 7.04950145e-01,
+ 7.12379980e-01, 7.19765434e-01, 7.27103833e-01, 7.34396372e-01,
+ 7.41638561e-01, 7.48829639e-01, 7.55966688e-01, 7.63049259e-01,
+ 7.70072273e-01, 7.77036981e-01, 7.83941108e-01, 7.90781257e-01,
+ 7.97558114e-01, 8.04271381e-01, 8.10914901e-01, 8.17490856e-01,
+ 8.23997094e-01, 8.30432785e-01, 8.36796950e-01, 8.43089298e-01,
+ 8.49305847e-01, 8.55447310e-01, 8.61511037e-01, 8.67496281e-01,
+ 8.73400798e-01, 8.79227518e-01, 8.84972438e-01, 8.90635719e-01,
+ 8.96217173e-01, 9.01716414e-01, 9.07128770e-01, 9.12456578e-01,
+ 9.17697261e-01, 9.22848784e-01, 9.27909917e-01, 9.32882596e-01,
+ 9.37763323e-01, 9.42553356e-01, 9.47252428e-01, 9.51860206e-01,
+ 9.56376060e-01, 9.60800602e-01, 9.65130600e-01, 9.69366689e-01,
+ 9.73508812e-01, 9.77556541e-01, 9.81507226e-01, 9.85364580e-01,
+ 9.89126209e-01, 9.92794201e-01, 9.96367545e-01, 9.99846919e-01,
+ 1.00322812e+00, 1.00651341e+00, 1.00970073e+00, 1.01279029e+00,
+ 1.01578293e+00, 1.01868229e+00, 1.02148657e+00, 1.02419772e+00,
+ 1.02681455e+00, 1.02933598e+00, 1.03176043e+00, 1.03408981e+00,
+ 1.03632326e+00, 1.03846361e+00, 1.04051196e+00, 1.04246831e+00,
+ 1.04433331e+00, 1.04610837e+00, 1.04779018e+00, 1.04938334e+00,
+ 1.05088565e+00, 1.05229923e+00, 1.05362522e+00, 1.05486289e+00,
+ 1.05601521e+00, 1.05708746e+00, 1.05807221e+00, 1.05897524e+00,
+ 1.05979447e+00, 1.06053414e+00, 1.06119412e+00, 1.06177366e+00,
+ 1.06227662e+00, 1.06270324e+00, 1.06305569e+00, 1.06333815e+00,
+ 1.06354800e+00, 1.06368607e+00, 1.06375557e+00, 1.06375743e+00,
+ 1.06369358e+00, 1.06356632e+00, 1.06337707e+00, 1.06312782e+00,
+ 1.06282156e+00, 1.06245782e+00, 1.06203634e+00, 1.06155996e+00,
+ 1.06102951e+00, 1.06044797e+00, 1.05981709e+00, 1.05914163e+00,
+ 1.05842136e+00, 1.05765876e+00, 1.05685377e+00, 1.05600761e+00,
+ 1.05512006e+00, 1.05419505e+00, 1.05323346e+00, 1.05223985e+00,
+ 1.05121668e+00, 1.05016637e+00, 1.04908779e+00, 1.04798366e+00,
+ 1.04685334e+00, 1.04569860e+00, 1.04452056e+00, 1.04332348e+00,
+ 1.04210831e+00, 1.04087907e+00, 1.03963603e+00, 1.03838099e+00,
+ 1.03711403e+00, 1.03583813e+00, 1.03455276e+00, 1.03326200e+00,
+ 1.03196750e+00, 1.03067200e+00, 1.02937564e+00, 1.02808244e+00,
+ 1.02679167e+00, 1.02550635e+00, 1.02422655e+00, 1.02295558e+00,
+ 1.02169299e+00, 1.02044475e+00, 1.01920733e+00, 1.01799992e+00,
+ 1.01716022e+00, 1.01587289e+00, 1.01461783e+00, 1.01339738e+00,
+ 1.01221017e+00, 1.01105652e+00, 1.00993444e+00, 1.00884559e+00,
+ 1.00778956e+00, 1.00676790e+00, 1.00577851e+00, 1.00482173e+00,
+ 1.00389592e+00, 1.00300262e+00, 1.00214091e+00, 1.00131213e+00,
+ 1.00051460e+00, 9.99748988e-01, 9.99013486e-01, 9.98309229e-01,
+ 9.97634934e-01, 9.96991885e-01, 9.96378601e-01, 9.95795982e-01,
+ 9.95242217e-01, 9.94718132e-01, 9.94222122e-01, 9.93755313e-01,
+ 9.93316216e-01, 9.92905809e-01, 9.92522422e-01, 9.92166957e-01,
+ 9.91837704e-01, 9.91535508e-01, 9.91258603e-01, 9.91007878e-01,
+ 9.90781723e-01, 9.90581104e-01, 9.90404336e-01, 9.90252267e-01,
+ 9.90123118e-01, 9.90017726e-01, 9.89934325e-01, 9.89873712e-01,
+ 9.89834110e-01, 9.89816359e-01, 9.89818707e-01, 9.89841998e-01,
+ 9.89884438e-01, 9.89946800e-01, 9.90027287e-01, 9.90126680e-01,
+ 9.90243175e-01, 9.90377594e-01, 9.90528134e-01, 9.90695564e-01,
+ 9.90878043e-01, 9.91076302e-01, 9.91288540e-01, 9.91515602e-01,
+ 9.91755666e-01, 9.92009469e-01, 9.92275155e-01, 9.92553486e-01,
+ 9.92842693e-01, 9.93143533e-01, 9.93454080e-01, 9.93775067e-01,
+ 9.94104689e-01, 9.94443742e-01, 9.94790398e-01, 9.95145361e-01,
+ 9.95506800e-01, 9.95875534e-01, 9.96249681e-01, 9.96629919e-01,
+ 9.97014367e-01, 9.97403799e-01, 9.97796404e-01, 9.98192871e-01,
+ 9.98591286e-01, 9.98992436e-01, 9.99394506e-01, 9.99798247e-01,
+ 1.00020179e+00, 1.00060586e+00, 1.00100858e+00, 1.00141070e+00,
+ 1.00181040e+00, 1.00220846e+00, 1.00260296e+00, 1.00299457e+00,
+ 1.00338148e+00, 1.00376444e+00, 1.00414155e+00, 1.00451348e+00,
+ 1.00487832e+00, 1.00523688e+00, 1.00558730e+00, 1.00593027e+00,
+ 1.00626393e+00, 1.00658905e+00, 1.00690380e+00, 1.00720890e+00,
+ 1.00750238e+00, 1.00778498e+00, 1.00805489e+00, 1.00831287e+00,
+ 1.00855700e+00, 1.00878802e+00, 1.00900405e+00, 1.00920593e+00,
+ 1.00939182e+00, 1.00956244e+00, 1.00971590e+00, 1.00985296e+00,
+ 1.00997177e+00, 1.01007317e+00, 1.01015529e+00, 1.01021893e+00,
+ 1.01026225e+00, 1.01028602e+00, 1.01028842e+00, 1.01027030e+00,
+ 1.01022988e+00, 1.01016802e+00, 1.01008292e+00, 1.00997541e+00,
+ 1.00984369e+00, 1.00968863e+00, 1.00950846e+00, 1.00930404e+00,
+ 1.00907371e+00, 1.00881848e+00, 1.00853675e+00, 1.00822947e+00,
+ 1.00789488e+00, 1.00753391e+00, 1.00714488e+00, 1.00672876e+00,
+ 1.00628393e+00, 1.00581146e+00, 1.00530991e+00, 1.00478053e+00,
+ 1.00422177e+00, 1.00363456e+00, 1.00301719e+00, 1.00237067e+00,
+ 1.00169363e+00, 1.00098749e+00, 1.00025108e+00, 9.99485663e-01,
+ 9.98689592e-01, 9.97863666e-01, 9.97006370e-01, 9.96119199e-01,
+ 9.95201404e-01, 9.94254687e-01, 9.93277595e-01, 9.92270651e-01,
+ 9.91231967e-01, 9.90163286e-01, 9.89064394e-01, 9.87937115e-01,
+ 9.86779736e-01, 9.85592773e-01, 9.84375125e-01, 9.83129288e-01,
+ 9.81348463e-01, 9.79890963e-01, 9.78400459e-01, 9.76860435e-01,
+ 9.75269879e-01, 9.73627353e-01, 9.71931341e-01, 9.70180498e-01,
+ 9.68372652e-01, 9.66506952e-01, 9.64580027e-01, 9.62592318e-01,
+ 9.60540986e-01, 9.58425534e-01, 9.56244393e-01, 9.53998416e-01,
+ 9.51684014e-01, 9.49301185e-01, 9.46846884e-01, 9.44320232e-01,
+ 9.41718404e-01, 9.39042580e-01, 9.36290624e-01, 9.33464050e-01,
+ 9.30560854e-01, 9.27580507e-01, 9.24519592e-01, 9.21378471e-01,
+ 9.18153414e-01, 9.14844696e-01, 9.11451652e-01, 9.07976524e-01,
+ 9.04417545e-01, 9.00776308e-01, 8.97050058e-01, 8.93238398e-01,
+ 8.89338681e-01, 8.85351360e-01, 8.81274023e-01, 8.77109638e-01,
+ 8.72857927e-01, 8.68519505e-01, 8.64092796e-01, 8.59579819e-01,
+ 8.54976007e-01, 8.50285220e-01, 8.45502615e-01, 8.40630470e-01,
+ 8.35667925e-01, 8.30619943e-01, 8.25482007e-01, 8.20258909e-01,
+ 8.14946648e-01, 8.09546696e-01, 8.04059978e-01, 7.98489378e-01,
+ 7.92831417e-01, 7.87090668e-01, 7.81262450e-01, 7.75353947e-01,
+ 7.69363613e-01, 7.63291769e-01, 7.57139016e-01, 7.50901711e-01,
+ 7.44590843e-01, 7.38205136e-01, 7.31738075e-01, 7.25199287e-01,
+ 7.18588225e-01, 7.11905687e-01, 7.05153668e-01, 6.98332634e-01,
+ 6.91444101e-01, 6.84490545e-01, 6.77470119e-01, 6.70388375e-01,
+ 6.63245210e-01, 6.56045780e-01, 6.48788627e-01, 6.41477162e-01,
+ 6.34114323e-01, 6.26702000e-01, 6.19235334e-01, 6.11720596e-01,
+ 6.04161612e-01, 5.96559133e-01, 5.88914401e-01, 5.81234783e-01,
+ 5.73519989e-01, 5.65770616e-01, 5.57988067e-01, 5.50173851e-01,
+ 5.42330194e-01, 5.34460798e-01, 5.26568538e-01, 5.18656324e-01,
+ 5.10728813e-01, 5.02781159e-01, 4.94819491e-01, 4.86845139e-01,
+ 4.78860889e-01, 4.70869928e-01, 4.62875144e-01, 4.54877894e-01,
+ 4.46882512e-01, 4.38889325e-01, 4.30898123e-01, 4.22918322e-01,
+ 4.14950878e-01, 4.06993964e-01, 3.99052648e-01, 3.91134614e-01,
+ 3.83234031e-01, 3.75354653e-01, 3.67502060e-01, 3.59680098e-01,
+ 3.51887312e-01, 3.44130166e-01, 3.36408100e-01, 3.28728966e-01,
+ 3.21090505e-01, 3.13496418e-01, 3.05951565e-01, 2.98454319e-01,
+ 2.91010565e-01, 2.83621109e-01, 2.76285415e-01, 2.69019585e-01,
+ 2.61812445e-01, 2.54659232e-01, 2.47584348e-01, 2.40578694e-01,
+ 2.33647009e-01, 2.26788433e-01, 2.20001992e-01, 2.13301325e-01,
+ 2.06677771e-01, 2.00140409e-01, 1.93683630e-01, 1.87310343e-01,
+ 1.81027384e-01, 1.74839476e-01, 1.68739644e-01, 1.62737273e-01,
+ 1.56825277e-01, 1.51012382e-01, 1.45298230e-01, 1.39687469e-01,
+ 1.34171842e-01, 1.28762544e-01, 1.23455562e-01, 1.18254662e-01,
+ 1.13159677e-01, 1.08171439e-01, 1.03290734e-01, 9.85202978e-02,
+ 9.38600023e-02, 8.93117360e-02, 8.48752103e-02, 8.05523737e-02,
+ 7.63429787e-02, 7.22489246e-02, 6.82699120e-02, 6.44077291e-02,
+ 6.06620003e-02, 5.70343711e-02, 5.35243715e-02, 5.01334690e-02,
+ 4.68610790e-02, 4.37084453e-02, 4.06748365e-02, 3.77612269e-02,
+ 3.49667099e-02, 3.22919275e-02, 2.97357669e-02, 2.72984629e-02,
+ 2.49787186e-02, 2.27762542e-02, 2.06895808e-02, 1.87178169e-02,
+ 1.68593418e-02, 1.51125125e-02, 1.34757094e-02, 1.19462709e-02,
+ 1.05228754e-02, 9.20130941e-03, 7.98124316e-03, 6.85547314e-03,
+ 5.82657334e-03, 4.87838525e-03, 4.02351119e-03, 3.15418663e-03,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+])
+
+W_10M_8K = np.array([
-7.07854671e-04, -2.09819773e-03, -4.52519808e-03, -8.23397633e-03,
-1.33771310e-02, -1.99972156e-02, -2.80090946e-02, -3.72150208e-02,
-4.73176826e-02, -5.79465483e-02, -6.86760675e-02, -7.90464744e-02,
@@ -193,7 +1897,7 @@ W_10M_80 = np.array([
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
])
-W_10M_160 = np.array([
+W_10M_16K = np.array([
-4.61989875e-04, -9.74716672e-04, -1.66447310e-03, -2.59710692e-03,
-3.80628516e-03, -5.32460872e-03, -7.17588528e-03, -9.38248086e-03,
-1.19527030e-02, -1.48952816e-02, -1.82066640e-02, -2.18757093e-02,
@@ -276,7 +1980,7 @@ W_10M_160 = np.array([
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
])
-W_10M_240 = np.array([
+W_10M_24K = np.array([
-3.61349642e-04, -7.07854671e-04, -1.07444364e-03, -1.53347854e-03,
-2.09819773e-03, -2.77842087e-03, -3.58412992e-03, -4.52519808e-03,
-5.60932724e-03, -6.84323454e-03, -8.23397633e-03, -9.78531476e-03,
@@ -399,7 +2103,7 @@ W_10M_240 = np.array([
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
])
-W_10M_320 = np.array([
+W_10M_32K = np.array([
-3.02115349e-04, -5.86773749e-04, -8.36650400e-04, -1.12663536e-03,
-1.47049294e-03, -1.87347339e-03, -2.33929236e-03, -2.87200807e-03,
-3.47625639e-03, -4.15596382e-03, -4.91456379e-03, -5.75517250e-03,
@@ -562,7 +2266,7 @@ W_10M_320 = np.array([
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
])
-W_10M_480 = np.array([
+W_10M_48K = np.array([
-2.35303215e-04, -4.61989875e-04, -6.26293154e-04, -7.92918043e-04,
-9.74716672e-04, -1.18025689e-03, -1.40920904e-03, -1.66447310e-03,
-1.94659161e-03, -2.25708173e-03, -2.59710692e-03, -2.96760762e-03,
@@ -805,93 +2509,216 @@ W_10M_480 = np.array([
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
])
-W_7M5_60 = np.array([
- 2.95060859e-03, 7.17541132e-03, 1.37695374e-02, 2.30953556e-02,
- 3.54036230e-02, 5.08289304e-02, 6.94696293e-02, 9.13884278e-02,
- 1.16604575e-01, 1.45073546e-01, 1.76711174e-01, 2.11342953e-01,
- 2.48768614e-01, 2.88701102e-01, 3.30823871e-01, 3.74814544e-01,
- 4.20308013e-01, 4.66904918e-01, 5.14185341e-01, 5.61710041e-01,
- 6.09026346e-01, 6.55671016e-01, 7.01218384e-01, 7.45240679e-01,
- 7.87369206e-01, 8.27223833e-01, 8.64513675e-01, 8.98977415e-01,
- 9.30407518e-01, 9.58599937e-01, 9.83447719e-01, 1.00488283e+00,
- 1.02285381e+00, 1.03740495e+00, 1.04859791e+00, 1.05656184e+00,
- 1.06149371e+00, 1.06362578e+00, 1.06325973e+00, 1.06074505e+00,
- 1.05643590e+00, 1.05069500e+00, 1.04392435e+00, 1.03647725e+00,
- 1.02872867e+00, 1.02106486e+00, 1.01400658e+00, 1.00727455e+00,
- 1.00172250e+00, 9.97309592e-01, 9.93985158e-01, 9.91683335e-01,
- 9.90325325e-01, 9.89822613e-01, 9.90074734e-01, 9.90975314e-01,
- 9.92412851e-01, 9.94273149e-01, 9.96439157e-01, 9.98791616e-01,
- 1.00120985e+00, 1.00357357e+00, 1.00575984e+00, 1.00764515e+00,
- 1.00910687e+00, 1.01002476e+00, 1.01028203e+00, 1.00976919e+00,
- 1.00838641e+00, 1.00605124e+00, 1.00269767e+00, 9.98280464e-01,
- 9.92777987e-01, 9.86186892e-01, 9.77634164e-01, 9.67447270e-01,
- 9.55129725e-01, 9.40389877e-01, 9.22959280e-01, 9.02607350e-01,
- 8.79202689e-01, 8.52641750e-01, 8.22881272e-01, 7.89971715e-01,
- 7.54030328e-01, 7.15255742e-01, 6.73936911e-01, 6.30414716e-01,
- 5.85078858e-01, 5.38398518e-01, 4.90833753e-01, 4.42885823e-01,
- 3.95091024e-01, 3.48004343e-01, 3.02196710e-01, 2.58227431e-01,
- 2.16641416e-01, 1.77922122e-01, 1.42480547e-01, 1.10652194e-01,
- 8.26995967e-02, 5.88334516e-02, 3.92030848e-02, 2.38629107e-02,
- 1.26976223e-02, 5.35665361e-03, 0.00000000e+00, 0.00000000e+00,
+W_10M_48K_HR = np.array([
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 9.42341174e-08, 6.19838374e-07, 1.82603810e-06, 4.22741550e-06,
+ 8.56822135e-06, 1.59013834e-05, 2.76738483e-05, 4.58246141e-05,
+ 7.28956657e-05, 1.12155336e-04, 1.67733029e-04, 2.44763592e-04,
+ 3.49539070e-04, 4.89664846e-04, 6.74216484e-04, 9.13893222e-04,
+ 1.22116262e-03, 1.61039189e-03, 2.09795963e-03, 2.70234118e-03,
+ 3.44416290e-03, 4.34621749e-03, 5.43343695e-03, 6.73281262e-03,
+ 8.27326626e-03, 1.00854570e-02, 1.22015327e-02, 1.46548180e-02,
+ 1.74794346e-02, 2.07098722e-02, 2.43804958e-02, 2.85249949e-02,
+ 3.31758074e-02, 3.83635014e-02, 4.41161096e-02, 5.04585020e-02,
+ 5.74117042e-02, 6.49922863e-02, 7.32117295e-02, 8.20759088e-02,
+ 9.15845558e-02, 1.01730898e-01, 1.12501279e-01, 1.23875007e-01,
+ 1.35824218e-01, 1.48313895e-01, 1.61302090e-01, 1.74740151e-01,
+ 1.88573152e-01, 2.02740535e-01, 2.17176691e-01, 2.31811777e-01,
+ 2.46572644e-01, 2.61383832e-01, 2.76168495e-01, 2.90849626e-01,
+ 3.05351138e-01, 3.19598824e-01, 3.33521664e-01, 3.47052664e-01,
+ 3.60129982e-01, 3.72697920e-01, 3.84707332e-01, 3.96116525e-01,
+ 4.06891733e-01, 4.17007536e-01, 4.26446915e-01, 4.35201406e-01,
+ 4.43271041e-01, 4.50664014e-01, 4.57396388e-01, 4.63491529e-01,
+ 4.68979478e-01, 4.73896384e-01, 4.78283674e-01, 4.82187212e-01,
+ 4.85656589e-01, 4.88744229e-01, 4.91504699e-01, 4.93993789e-01,
+ 4.96267974e-01, 4.98383760e-01, 5.00396967e-01, 5.02362430e-01,
+ 5.04333496e-01, 5.06361604e-01, 5.08496106e-01, 5.10783911e-01,
+ 5.13269365e-01, 5.15994072e-01, 5.18996596e-01, 5.22312462e-01,
+ 5.25973916e-01, 5.30009925e-01, 5.34445822e-01, 5.39303243e-01,
+ 5.44600070e-01, 5.50350249e-01, 5.56563497e-01, 5.63245535e-01,
+ 5.70397854e-01, 5.78017771e-01, 5.86098313e-01, 5.94628513e-01,
+ 6.03593290e-01, 6.12973869e-01, 6.22747838e-01, 6.32889450e-01,
+ 6.43370092e-01, 6.54158235e-01, 6.65220201e-01, 6.76520288e-01,
+ 6.88021243e-01, 6.99684739e-01, 7.11471498e-01, 7.23342001e-01,
+ 7.35256732e-01, 7.47176409e-01, 7.59062469e-01, 7.70877421e-01,
+ 7.82584906e-01, 7.94150114e-01, 8.05540025e-01, 8.16723466e-01,
+ 8.27671409e-01, 8.38356972e-01, 8.48755658e-01, 8.58845115e-01,
+ 8.68605733e-01, 8.78019989e-01, 8.87072980e-01, 8.95752132e-01,
+ 9.04047191e-01, 9.11950290e-01, 9.19455826e-01, 9.26560223e-01,
+ 9.33262229e-01, 9.39562619e-01, 9.45464134e-01, 9.50971425e-01,
+ 9.56090987e-01, 9.60831106e-01, 9.65201676e-01, 9.69214201e-01,
+ 9.72881556e-01, 9.76217866e-01, 9.79238510e-01, 9.81959701e-01,
+ 9.84398544e-01, 9.86572623e-01, 9.88499999e-01, 9.90198970e-01,
+ 9.91687655e-01, 9.92984235e-01, 9.94106293e-01, 9.95071113e-01,
+ 9.95895147e-01, 9.96594131e-01, 9.97182965e-01, 9.97675478e-01,
+ 9.98084545e-01, 9.98421967e-01, 9.98698533e-01, 9.98923838e-01,
+ 9.99106586e-01, 9.99254227e-01, 9.99373496e-01, 9.99470055e-01,
+ 9.99548733e-01, 9.99613643e-01, 9.99668002e-01, 9.99714673e-01,
+ 9.99755740e-01, 9.99792874e-01, 9.99827385e-01, 9.99860168e-01,
+ 9.99891937e-01, 9.99923110e-01, 9.99953985e-01, 9.99984682e-01,
+ 1.00001526e+00, 1.00004578e+00, 1.00007617e+00, 1.00010622e+00,
+ 1.00013602e+00, 1.00016546e+00, 1.00019431e+00, 1.00022256e+00,
+ 1.00025010e+00, 1.00027692e+00, 1.00030291e+00, 1.00032794e+00,
+ 1.00035203e+00, 1.00037491e+00, 1.00039685e+00, 1.00041747e+00,
+ 1.00043690e+00, 1.00045502e+00, 1.00047183e+00, 1.00048721e+00,
+ 1.00050116e+00, 1.00051367e+00, 1.00052476e+00, 1.00053418e+00,
+ 1.00054228e+00, 1.00054872e+00, 1.00055361e+00, 1.00055695e+00,
+ 1.00055885e+00, 1.00055909e+00, 1.00055790e+00, 1.00055504e+00,
+ 1.00055087e+00, 1.00054502e+00, 1.00053787e+00, 1.00052929e+00,
+ 1.00051928e+00, 1.00050783e+00, 1.00049520e+00, 1.00048113e+00,
+ 1.00046599e+00, 1.00044954e+00, 1.00043201e+00, 1.00041330e+00,
+ 1.00039363e+00, 1.00037301e+00, 1.00035143e+00, 1.00032890e+00,
+ 1.00030565e+00, 1.00028157e+00, 1.00025690e+00, 1.00023150e+00,
+ 1.00020564e+00, 1.00017929e+00, 1.00015235e+00, 1.00012517e+00,
+ 1.00009763e+00, 1.00006998e+00, 1.00004208e+00, 1.00001407e+00,
+ 9.99985993e-01, 9.99957979e-01, 9.99930084e-01, 9.99902308e-01,
+ 9.99874830e-01, 9.99847591e-01, 9.99820769e-01, 9.99794364e-01,
+ 9.99768496e-01, 9.99743164e-01, 9.99718428e-01, 9.99694467e-01,
+ 9.99671161e-01, 9.99648750e-01, 9.99627173e-01, 9.99606490e-01,
+ 9.99586821e-01, 9.99568224e-01, 9.99550641e-01, 9.99534249e-01,
+ 9.99519050e-01, 9.99505103e-01, 9.99492407e-01, 9.99481022e-01,
+ 9.99471009e-01, 9.99462426e-01, 9.99455214e-01, 9.99449492e-01,
+ 9.99445200e-01, 9.99442458e-01, 9.99441206e-01, 9.99441504e-01,
+ 9.99443293e-01, 9.99446690e-01, 9.99451578e-01, 9.99458075e-01,
+ 9.99466062e-01, 9.99475598e-01, 9.99486566e-01, 9.99499083e-01,
+ 9.99513030e-01, 9.99528408e-01, 9.99545157e-01, 9.99563277e-01,
+ 9.99582708e-01, 9.99603331e-01, 9.99625206e-01, 9.99648154e-01,
+ 9.99672174e-01, 9.99697208e-01, 9.99723136e-01, 9.99749959e-01,
+ 9.99777496e-01, 9.99805748e-01, 9.99834597e-01, 9.99863982e-01,
+ 9.99893785e-01, 9.99923885e-01, 9.99954224e-01, 9.99984741e-01,
+ 1.00001526e+00, 1.00004578e+00, 1.00007617e+00, 1.00010622e+00,
+ 1.00013602e+00, 1.00016546e+00, 1.00019431e+00, 1.00022256e+00,
+ 1.00025010e+00, 1.00027692e+00, 1.00030291e+00, 1.00032794e+00,
+ 1.00035203e+00, 1.00037491e+00, 1.00039685e+00, 1.00041747e+00,
+ 1.00043690e+00, 1.00045502e+00, 1.00047183e+00, 1.00048721e+00,
+ 1.00050116e+00, 1.00051367e+00, 1.00052476e+00, 1.00053418e+00,
+ 1.00054228e+00, 1.00054872e+00, 1.00055361e+00, 1.00055695e+00,
+ 1.00055885e+00, 1.00055909e+00, 1.00055790e+00, 1.00055504e+00,
+ 1.00055087e+00, 1.00054502e+00, 1.00053787e+00, 1.00052929e+00,
+ 1.00051928e+00, 1.00050783e+00, 1.00049520e+00, 1.00048113e+00,
+ 1.00046599e+00, 1.00044954e+00, 1.00043201e+00, 1.00041330e+00,
+ 1.00039363e+00, 1.00037301e+00, 1.00035143e+00, 1.00032890e+00,
+ 1.00030565e+00, 1.00028157e+00, 1.00025690e+00, 1.00023150e+00,
+ 1.00020564e+00, 1.00017929e+00, 1.00015235e+00, 1.00012517e+00,
+ 1.00009763e+00, 1.00006998e+00, 1.00004208e+00, 1.00001407e+00,
+ 9.99985993e-01, 9.99957979e-01, 9.99930084e-01, 9.99902308e-01,
+ 9.99874830e-01, 9.99847591e-01, 9.99820769e-01, 9.99794364e-01,
+ 9.99768496e-01, 9.99743164e-01, 9.99718428e-01, 9.99694467e-01,
+ 9.99671161e-01, 9.99648750e-01, 9.99627173e-01, 9.99606490e-01,
+ 9.99586821e-01, 9.99568224e-01, 9.99550641e-01, 9.99534249e-01,
+ 9.99519050e-01, 9.99505103e-01, 9.99492407e-01, 9.99481022e-01,
+ 9.99471009e-01, 9.99462426e-01, 9.99455214e-01, 9.99449492e-01,
+ 9.99445200e-01, 9.99442458e-01, 9.99441206e-01, 9.99441504e-01,
+ 9.99443293e-01, 9.99446690e-01, 9.99451578e-01, 9.99458075e-01,
+ 9.99466062e-01, 9.99475598e-01, 9.99486566e-01, 9.99499083e-01,
+ 9.99513030e-01, 9.99528408e-01, 9.99545157e-01, 9.99563277e-01,
+ 9.99582708e-01, 9.99603331e-01, 9.99625206e-01, 9.99648154e-01,
+ 9.99672174e-01, 9.99697208e-01, 9.99723136e-01, 9.99749959e-01,
+ 9.99777496e-01, 9.99805748e-01, 9.99834597e-01, 9.99863982e-01,
+ 9.99893785e-01, 9.99923885e-01, 9.99954224e-01, 9.99984741e-01,
+ 1.00001526e+00, 1.00004578e+00, 1.00007617e+00, 1.00010622e+00,
+ 1.00013602e+00, 1.00016546e+00, 1.00019431e+00, 1.00022256e+00,
+ 1.00025010e+00, 1.00027692e+00, 1.00030291e+00, 1.00032794e+00,
+ 1.00035203e+00, 1.00037491e+00, 1.00039685e+00, 1.00041747e+00,
+ 1.00043690e+00, 1.00045502e+00, 1.00047183e+00, 1.00048721e+00,
+ 1.00050116e+00, 1.00051367e+00, 1.00052476e+00, 1.00053418e+00,
+ 1.00054228e+00, 1.00054872e+00, 1.00055361e+00, 1.00055695e+00,
+ 1.00055885e+00, 1.00055909e+00, 1.00055790e+00, 1.00055504e+00,
+ 1.00055087e+00, 1.00054502e+00, 1.00053787e+00, 1.00052929e+00,
+ 1.00051928e+00, 1.00050783e+00, 1.00049520e+00, 1.00048113e+00,
+ 1.00046599e+00, 1.00044954e+00, 1.00043201e+00, 1.00041330e+00,
+ 1.00039363e+00, 1.00037301e+00, 1.00035143e+00, 1.00032890e+00,
+ 1.00030565e+00, 1.00028157e+00, 1.00025690e+00, 1.00023150e+00,
+ 1.00020564e+00, 1.00017929e+00, 1.00015235e+00, 1.00012517e+00,
+ 1.00009763e+00, 1.00006998e+00, 1.00004208e+00, 1.00001407e+00,
+ 9.99985993e-01, 9.99957979e-01, 9.99930084e-01, 9.99902308e-01,
+ 9.99874830e-01, 9.99847591e-01, 9.99820769e-01, 9.99794364e-01,
+ 9.99768496e-01, 9.99743164e-01, 9.99718428e-01, 9.99694467e-01,
+ 9.99671161e-01, 9.99648750e-01, 9.99627173e-01, 9.99606490e-01,
+ 9.99586821e-01, 9.99568224e-01, 9.99550641e-01, 9.99534249e-01,
+ 9.99519050e-01, 9.99505103e-01, 9.99492407e-01, 9.99481022e-01,
+ 9.99471009e-01, 9.99462426e-01, 9.99455214e-01, 9.99449492e-01,
+ 9.99445200e-01, 9.99442458e-01, 9.99441206e-01, 9.99441504e-01,
+ 9.99443293e-01, 9.99446690e-01, 9.99451578e-01, 9.99458075e-01,
+ 9.99466062e-01, 9.99475598e-01, 9.99486566e-01, 9.99499083e-01,
+ 9.99513030e-01, 9.99528408e-01, 9.99545157e-01, 9.99563277e-01,
+ 9.99582708e-01, 9.99603331e-01, 9.99625206e-01, 9.99648154e-01,
+ 9.99672174e-01, 9.99697208e-01, 9.99723136e-01, 9.99749959e-01,
+ 9.99777496e-01, 9.99805748e-01, 9.99834597e-01, 9.99863982e-01,
+ 9.99893785e-01, 9.99923885e-01, 9.99954224e-01, 9.99984741e-01,
+ 1.00001526e+00, 1.00004554e+00, 1.00007534e+00, 1.00010443e+00,
+ 1.00013220e+00, 1.00015819e+00, 1.00018132e+00, 1.00020075e+00,
+ 1.00021482e+00, 1.00022173e+00, 1.00021923e+00, 1.00020432e+00,
+ 1.00017369e+00, 1.00012279e+00, 1.00004685e+00, 9.99939978e-01,
+ 9.99795198e-01, 9.99604583e-01, 9.99359250e-01, 9.99048889e-01,
+ 9.98662114e-01, 9.98186171e-01, 9.97606814e-01, 9.96908367e-01,
+ 9.96073723e-01, 9.95083988e-01, 9.93918717e-01, 9.92555678e-01,
+ 9.90970671e-01, 9.89137888e-01, 9.87029374e-01, 9.84615326e-01,
+ 9.81863916e-01, 9.78741586e-01, 9.75212753e-01, 9.71240282e-01,
+ 9.66785491e-01, 9.61808383e-01, 9.56268132e-01, 9.50123310e-01,
+ 9.43332374e-01, 9.35854316e-01, 9.27648962e-01, 9.18677926e-01,
+ 9.08904910e-01, 8.98296535e-01, 8.86823177e-01, 8.74459147e-01,
+ 8.61183822e-01, 8.46981943e-01, 8.31844091e-01, 8.15767467e-01,
+ 7.98755884e-01, 7.80820429e-01, 7.61979520e-01, 7.42259145e-01,
+ 7.21692860e-01, 7.00321794e-01, 6.78194642e-01, 6.55367255e-01,
+ 6.31902635e-01, 6.07870460e-01, 5.83346546e-01, 5.58412433e-01,
+ 5.33154905e-01, 5.07664979e-01, 4.82037485e-01, 4.56370175e-01,
+ 4.30762708e-01, 4.05315757e-01, 3.80130053e-01, 3.55305195e-01,
+ 3.30938727e-01, 3.07124883e-01, 2.83953428e-01, 2.61508703e-01,
+ 2.39868388e-01, 2.19102606e-01, 1.99272946e-01, 1.80431694e-01,
+ 1.62621215e-01, 1.45873442e-01, 1.30209655e-01, 1.15640387e-01,
+ 1.02165572e-01, 8.97749513e-02, 7.84486011e-02, 6.81576878e-02,
+ 5.88653944e-02, 5.05279638e-02, 4.30957973e-02, 3.65146622e-02,
+ 3.07268873e-02, 2.56725382e-02, 2.12905537e-02, 1.75197981e-02,
+ 1.43000064e-02, 1.15726292e-02, 9.28153656e-03, 7.37359654e-03,
+ 5.79912262e-03, 4.51218896e-03, 3.47083295e-03, 2.63714185e-03,
+ 1.97724649e-03, 1.46123092e-03, 1.06297329e-03, 7.59930001e-04,
+ 5.32880833e-04, 3.65644053e-04, 2.44775380e-04, 1.59260671e-04,
+ 1.00211051e-04, 6.05685127e-05, 3.48275607e-05, 1.87775731e-05,
+ 9.26902067e-06, 4.00523413e-06, 1.35989160e-06, 2.06769442e-07,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
-])
-
-W_7M5_120 = np.array([
- 2.20824874e-03, 3.81014420e-03, 5.91552473e-03, 8.58361457e-03,
- 1.18759723e-02, 1.58335301e-02, 2.04918652e-02, 2.58883593e-02,
- 3.20415894e-02, 3.89616721e-02, 4.66742169e-02, 5.51849337e-02,
- 6.45038384e-02, 7.46411071e-02, 8.56000162e-02, 9.73846703e-02,
- 1.09993603e-01, 1.23419277e-01, 1.37655457e-01, 1.52690437e-01,
- 1.68513363e-01, 1.85093105e-01, 2.02410419e-01, 2.20450365e-01,
- 2.39167941e-01, 2.58526168e-01, 2.78498539e-01, 2.99038432e-01,
- 3.20104862e-01, 3.41658622e-01, 3.63660034e-01, 3.86062695e-01,
- 4.08815272e-01, 4.31871046e-01, 4.55176988e-01, 4.78676593e-01,
- 5.02324813e-01, 5.26060916e-01, 5.49831283e-01, 5.73576883e-01,
- 5.97241338e-01, 6.20770242e-01, 6.44099662e-01, 6.67176382e-01,
- 6.89958854e-01, 7.12379980e-01, 7.34396372e-01, 7.55966688e-01,
- 7.77036981e-01, 7.97558114e-01, 8.17490856e-01, 8.36796950e-01,
- 8.55447310e-01, 8.73400798e-01, 8.90635719e-01, 9.07128770e-01,
- 9.22848784e-01, 9.37763323e-01, 9.51860206e-01, 9.65130600e-01,
- 9.77556541e-01, 9.89126209e-01, 9.99846919e-01, 1.00970073e+00,
- 1.01868229e+00, 1.02681455e+00, 1.03408981e+00, 1.04051196e+00,
- 1.04610837e+00, 1.05088565e+00, 1.05486289e+00, 1.05807221e+00,
- 1.06053414e+00, 1.06227662e+00, 1.06333815e+00, 1.06375557e+00,
- 1.06356632e+00, 1.06282156e+00, 1.06155996e+00, 1.05981709e+00,
- 1.05765876e+00, 1.05512006e+00, 1.05223985e+00, 1.04908779e+00,
- 1.04569860e+00, 1.04210831e+00, 1.03838099e+00, 1.03455276e+00,
- 1.03067200e+00, 1.02679167e+00, 1.02295558e+00, 1.01920733e+00,
- 1.01587289e+00, 1.01221017e+00, 1.00884559e+00, 1.00577851e+00,
- 1.00300262e+00, 1.00051460e+00, 9.98309229e-01, 9.96378601e-01,
- 9.94718132e-01, 9.93316216e-01, 9.92166957e-01, 9.91258603e-01,
- 9.90581104e-01, 9.90123118e-01, 9.89873712e-01, 9.89818707e-01,
- 9.89946800e-01, 9.90243175e-01, 9.90695564e-01, 9.91288540e-01,
- 9.92009469e-01, 9.92842693e-01, 9.93775067e-01, 9.94790398e-01,
- 9.95875534e-01, 9.97014367e-01, 9.98192871e-01, 9.99394506e-01,
- 1.00060586e+00, 1.00181040e+00, 1.00299457e+00, 1.00414155e+00,
- 1.00523688e+00, 1.00626393e+00, 1.00720890e+00, 1.00805489e+00,
- 1.00878802e+00, 1.00939182e+00, 1.00985296e+00, 1.01015529e+00,
- 1.01028602e+00, 1.01022988e+00, 1.00997541e+00, 1.00950846e+00,
- 1.00881848e+00, 1.00789488e+00, 1.00672876e+00, 1.00530991e+00,
- 1.00363456e+00, 1.00169363e+00, 9.99485663e-01, 9.97006370e-01,
- 9.94254687e-01, 9.91231967e-01, 9.87937115e-01, 9.84375125e-01,
- 9.79890963e-01, 9.75269879e-01, 9.70180498e-01, 9.64580027e-01,
- 9.58425534e-01, 9.51684014e-01, 9.44320232e-01, 9.36290624e-01,
- 9.27580507e-01, 9.18153414e-01, 9.07976524e-01, 8.97050058e-01,
- 8.85351360e-01, 8.72857927e-01, 8.59579819e-01, 8.45502615e-01,
- 8.30619943e-01, 8.14946648e-01, 7.98489378e-01, 7.81262450e-01,
- 7.63291769e-01, 7.44590843e-01, 7.25199287e-01, 7.05153668e-01,
- 6.84490545e-01, 6.63245210e-01, 6.41477162e-01, 6.19235334e-01,
- 5.96559133e-01, 5.73519989e-01, 5.50173851e-01, 5.26568538e-01,
- 5.02781159e-01, 4.78860889e-01, 4.54877894e-01, 4.30898123e-01,
- 4.06993964e-01, 3.83234031e-01, 3.59680098e-01, 3.36408100e-01,
- 3.13496418e-01, 2.91010565e-01, 2.69019585e-01, 2.47584348e-01,
- 2.26788433e-01, 2.06677771e-01, 1.87310343e-01, 1.68739644e-01,
- 1.51012382e-01, 1.34171842e-01, 1.18254662e-01, 1.03290734e-01,
- 8.93117360e-02, 7.63429787e-02, 6.44077291e-02, 5.35243715e-02,
- 4.37084453e-02, 3.49667099e-02, 2.72984629e-02, 2.06895808e-02,
- 1.51125125e-02, 1.05228754e-02, 6.85547314e-03, 4.02351119e-03,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
@@ -899,89 +2726,6 @@ W_7M5_120 = np.array([
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
-])
-
-W_7M5_180 = np.array([
- 1.97084908e-03, 2.95060859e-03, 4.12447721e-03, 5.52688664e-03,
- 7.17541132e-03, 9.08757730e-03, 1.12819105e-02, 1.37695374e-02,
- 1.65600266e-02, 1.96650895e-02, 2.30953556e-02, 2.68612894e-02,
- 3.09632560e-02, 3.54036230e-02, 4.01915610e-02, 4.53331403e-02,
- 5.08289304e-02, 5.66815448e-02, 6.28935304e-02, 6.94696293e-02,
- 7.64106314e-02, 8.37160016e-02, 9.13884278e-02, 9.94294008e-02,
- 1.07834725e-01, 1.16604575e-01, 1.25736503e-01, 1.35226811e-01,
- 1.45073546e-01, 1.55273819e-01, 1.65822194e-01, 1.76711174e-01,
- 1.87928776e-01, 1.99473180e-01, 2.11342953e-01, 2.23524554e-01,
- 2.36003100e-01, 2.48768614e-01, 2.61813811e-01, 2.75129161e-01,
- 2.88701102e-01, 3.02514034e-01, 3.16558805e-01, 3.30823871e-01,
- 3.45295567e-01, 3.59963992e-01, 3.74814544e-01, 3.89831817e-01,
- 4.05001010e-01, 4.20308013e-01, 4.35739515e-01, 4.51277817e-01,
- 4.66904918e-01, 4.82609041e-01, 4.98375466e-01, 5.14185341e-01,
- 5.30021478e-01, 5.45869352e-01, 5.61710041e-01, 5.77528151e-01,
- 5.93304696e-01, 6.09026346e-01, 6.24674189e-01, 6.40227555e-01,
- 6.55671016e-01, 6.70995935e-01, 6.86184559e-01, 7.01218384e-01,
- 7.16078449e-01, 7.30756084e-01, 7.45240679e-01, 7.59515122e-01,
- 7.73561955e-01, 7.87369206e-01, 8.00923138e-01, 8.14211386e-01,
- 8.27223833e-01, 8.39952374e-01, 8.52386102e-01, 8.64513675e-01,
- 8.76324079e-01, 8.87814288e-01, 8.98977415e-01, 9.09803319e-01,
- 9.20284312e-01, 9.30407518e-01, 9.40169652e-01, 9.49567795e-01,
- 9.58599937e-01, 9.67260260e-01, 9.75545166e-01, 9.83447719e-01,
- 9.90971957e-01, 9.98119269e-01, 1.00488283e+00, 1.01125773e+00,
- 1.01724436e+00, 1.02285381e+00, 1.02808734e+00, 1.03293706e+00,
- 1.03740495e+00, 1.04150164e+00, 1.04523236e+00, 1.04859791e+00,
- 1.05160340e+00, 1.05425505e+00, 1.05656184e+00, 1.05853400e+00,
- 1.06017414e+00, 1.06149371e+00, 1.06249943e+00, 1.06320577e+00,
- 1.06362578e+00, 1.06376487e+00, 1.06363778e+00, 1.06325973e+00,
- 1.06264695e+00, 1.06180496e+00, 1.06074505e+00, 1.05948492e+00,
- 1.05804533e+00, 1.05643590e+00, 1.05466218e+00, 1.05274047e+00,
- 1.05069500e+00, 1.04853894e+00, 1.04627898e+00, 1.04392435e+00,
- 1.04149540e+00, 1.03901003e+00, 1.03647725e+00, 1.03390793e+00,
- 1.03131989e+00, 1.02872867e+00, 1.02614832e+00, 1.02358988e+00,
- 1.02106486e+00, 1.01856262e+00, 1.01655770e+00, 1.01400658e+00,
- 1.01162953e+00, 1.00938590e+00, 1.00727455e+00, 1.00529616e+00,
- 1.00344526e+00, 1.00172250e+00, 1.00012792e+00, 9.98657533e-01,
- 9.97309592e-01, 9.96083571e-01, 9.94976569e-01, 9.93985158e-01,
- 9.93107530e-01, 9.92341305e-01, 9.91683335e-01, 9.91130070e-01,
- 9.90678325e-01, 9.90325325e-01, 9.90067562e-01, 9.89901282e-01,
- 9.89822613e-01, 9.89827845e-01, 9.89913241e-01, 9.90074734e-01,
- 9.90308256e-01, 9.90609852e-01, 9.90975314e-01, 9.91400330e-01,
- 9.91880966e-01, 9.92412851e-01, 9.92991779e-01, 9.93613381e-01,
- 9.94273149e-01, 9.94966958e-01, 9.95690370e-01, 9.96439157e-01,
- 9.97208572e-01, 9.97994275e-01, 9.98791616e-01, 9.99596062e-01,
- 1.00040410e+00, 1.00120985e+00, 1.00200976e+00, 1.00279924e+00,
- 1.00357357e+00, 1.00432828e+00, 1.00505850e+00, 1.00575984e+00,
- 1.00642767e+00, 1.00705768e+00, 1.00764515e+00, 1.00818549e+00,
- 1.00867427e+00, 1.00910687e+00, 1.00947916e+00, 1.00978659e+00,
- 1.01002476e+00, 1.01018954e+00, 1.01027669e+00, 1.01028203e+00,
- 1.01020174e+00, 1.01003208e+00, 1.00976919e+00, 1.00940939e+00,
- 1.00894931e+00, 1.00838641e+00, 1.00771780e+00, 1.00694031e+00,
- 1.00605124e+00, 1.00504879e+00, 1.00393183e+00, 1.00269767e+00,
- 1.00134427e+00, 9.99872092e-01, 9.98280464e-01, 9.96566569e-01,
- 9.94731737e-01, 9.92777987e-01, 9.90701374e-01, 9.88504165e-01,
- 9.86186892e-01, 9.83711989e-01, 9.80584643e-01, 9.77634164e-01,
- 9.74455033e-01, 9.71062916e-01, 9.67447270e-01, 9.63593926e-01,
- 9.59491398e-01, 9.55129725e-01, 9.50501326e-01, 9.45592810e-01,
- 9.40389877e-01, 9.34886760e-01, 9.29080559e-01, 9.22959280e-01,
- 9.16509579e-01, 9.09724456e-01, 9.02607350e-01, 8.95155084e-01,
- 8.87356154e-01, 8.79202689e-01, 8.70699698e-01, 8.61847424e-01,
- 8.52641750e-01, 8.43077833e-01, 8.33154905e-01, 8.22881272e-01,
- 8.12257597e-01, 8.01285439e-01, 7.89971715e-01, 7.78318177e-01,
- 7.66337710e-01, 7.54030328e-01, 7.41407991e-01, 7.28477501e-01,
- 7.15255742e-01, 7.01751739e-01, 6.87975632e-01, 6.73936911e-01,
- 6.59652573e-01, 6.45139489e-01, 6.30414716e-01, 6.15483622e-01,
- 6.00365852e-01, 5.85078858e-01, 5.69649536e-01, 5.54084810e-01,
- 5.38398518e-01, 5.22614738e-01, 5.06756805e-01, 4.90833753e-01,
- 4.74866033e-01, 4.58876566e-01, 4.42885823e-01, 4.26906539e-01,
- 4.10970973e-01, 3.95091024e-01, 3.79291327e-01, 3.63587417e-01,
- 3.48004343e-01, 3.32563201e-01, 3.17287485e-01, 3.02196710e-01,
- 2.87309403e-01, 2.72643992e-01, 2.58227431e-01, 2.44072856e-01,
- 2.30208977e-01, 2.16641416e-01, 2.03398481e-01, 1.90486162e-01,
- 1.77922122e-01, 1.65726674e-01, 1.53906397e-01, 1.42480547e-01,
- 1.31453980e-01, 1.20841778e-01, 1.10652194e-01, 1.00891734e-01,
- 9.15718851e-02, 8.26995967e-02, 7.42815529e-02, 6.63242382e-02,
- 5.88334516e-02, 5.18140676e-02, 4.52698346e-02, 3.92030848e-02,
- 3.36144159e-02, 2.85023308e-02, 2.38629107e-02, 1.96894227e-02,
- 1.59720527e-02, 1.26976223e-02, 9.84937739e-03, 7.40724463e-03,
- 5.35665361e-03, 3.83226552e-03, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
@@ -992,115 +2736,6 @@ W_7M5_180 = np.array([
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
-])
-
-W_7M5_240 = np.array([
- 1.84833037e-03, 2.56481839e-03, 3.36762118e-03, 4.28736617e-03,
- 5.33830143e-03, 6.52679223e-03, 7.86112587e-03, 9.34628179e-03,
- 1.09916868e-02, 1.28011172e-02, 1.47805911e-02, 1.69307043e-02,
- 1.92592307e-02, 2.17696937e-02, 2.44685983e-02, 2.73556543e-02,
- 3.04319230e-02, 3.36980464e-02, 3.71583577e-02, 4.08148180e-02,
- 4.46708068e-02, 4.87262995e-02, 5.29820633e-02, 5.74382470e-02,
- 6.20968580e-02, 6.69609767e-02, 7.20298364e-02, 7.73039146e-02,
- 8.27825574e-02, 8.84682102e-02, 9.43607566e-02, 1.00460272e-01,
- 1.06763824e-01, 1.13273679e-01, 1.19986420e-01, 1.26903521e-01,
- 1.34020853e-01, 1.41339557e-01, 1.48857211e-01, 1.56573685e-01,
- 1.64484622e-01, 1.72589077e-01, 1.80879090e-01, 1.89354320e-01,
- 1.98012244e-01, 2.06854141e-01, 2.15875319e-01, 2.25068672e-01,
- 2.34427407e-01, 2.43948314e-01, 2.53627993e-01, 2.63464061e-01,
- 2.73450494e-01, 2.83582189e-01, 2.93853469e-01, 3.04257373e-01,
- 3.14790914e-01, 3.25449123e-01, 3.36227410e-01, 3.47118760e-01,
- 3.58120177e-01, 3.69224663e-01, 3.80427793e-01, 3.91720023e-01,
- 4.03097022e-01, 4.14551955e-01, 4.26081719e-01, 4.37676318e-01,
- 4.49330196e-01, 4.61034855e-01, 4.72786043e-01, 4.84576777e-01,
- 4.96401707e-01, 5.08252458e-01, 5.20122078e-01, 5.32002077e-01,
- 5.43888090e-01, 5.55771601e-01, 5.67645739e-01, 5.79502786e-01,
- 5.91335035e-01, 6.03138367e-01, 6.14904172e-01, 6.26623941e-01,
- 6.38288834e-01, 6.49893375e-01, 6.61432360e-01, 6.72902514e-01,
- 6.84293750e-01, 6.95600460e-01, 7.06811784e-01, 7.17923425e-01,
- 7.28931386e-01, 7.39832773e-01, 7.50618982e-01, 7.61284053e-01,
- 7.71818919e-01, 7.82220992e-01, 7.92481330e-01, 8.02599448e-01,
- 8.12565230e-01, 8.22377129e-01, 8.32030518e-01, 8.41523208e-01,
- 8.50848313e-01, 8.60002412e-01, 8.68979881e-01, 8.77778347e-01,
- 8.86395904e-01, 8.94829421e-01, 9.03077626e-01, 9.11132652e-01,
- 9.18993585e-01, 9.26652937e-01, 9.34111420e-01, 9.41364344e-01,
- 9.48412967e-01, 9.55255630e-01, 9.61892013e-01, 9.68316363e-01,
- 9.74530156e-01, 9.80528338e-01, 9.86313928e-01, 9.91886049e-01,
- 9.97246345e-01, 1.00239190e+00, 1.00731946e+00, 1.01202707e+00,
- 1.01651654e+00, 1.02079430e+00, 1.02486082e+00, 1.02871471e+00,
- 1.03235170e+00, 1.03577375e+00, 1.03898432e+00, 1.04198786e+00,
- 1.04478564e+00, 1.04737818e+00, 1.04976743e+00, 1.05195405e+00,
- 1.05394290e+00, 1.05573463e+00, 1.05734177e+00, 1.05875726e+00,
- 1.05998674e+00, 1.06103672e+00, 1.06190651e+00, 1.06260369e+00,
- 1.06313289e+00, 1.06350237e+00, 1.06370981e+00, 1.06376322e+00,
- 1.06366765e+00, 1.06343012e+00, 1.06305656e+00, 1.06255421e+00,
- 1.06192235e+00, 1.06116702e+00, 1.06029469e+00, 1.05931469e+00,
- 1.05823465e+00, 1.05705891e+00, 1.05578948e+00, 1.05442979e+00,
- 1.05298793e+00, 1.05147505e+00, 1.04989930e+00, 1.04826213e+00,
- 1.04656691e+00, 1.04481699e+00, 1.04302125e+00, 1.04118768e+00,
- 1.03932339e+00, 1.03743168e+00, 1.03551757e+00, 1.03358511e+00,
- 1.03164371e+00, 1.02969955e+00, 1.02775944e+00, 1.02582719e+00,
- 1.02390791e+00, 1.02200805e+00, 1.02013910e+00, 1.01826310e+00,
- 1.01687901e+00, 1.01492195e+00, 1.01309662e+00, 1.01134205e+00,
- 1.00965912e+00, 1.00805036e+00, 1.00651754e+00, 1.00505799e+00,
- 1.00366956e+00, 1.00235327e+00, 1.00110981e+00, 9.99937523e-01,
- 9.98834524e-01, 9.97800606e-01, 9.96835756e-01, 9.95938881e-01,
- 9.95108459e-01, 9.94343411e-01, 9.93642921e-01, 9.93005832e-01,
- 9.92430984e-01, 9.91917493e-01, 9.91463898e-01, 9.91068214e-01,
- 9.90729218e-01, 9.90446225e-01, 9.90217819e-01, 9.90041963e-01,
- 9.89917085e-01, 9.89841975e-01, 9.89815048e-01, 9.89834329e-01,
- 9.89898211e-01, 9.90005403e-01, 9.90154189e-01, 9.90342427e-01,
- 9.90568459e-01, 9.90830953e-01, 9.91128038e-01, 9.91457566e-01,
- 9.91817881e-01, 9.92207559e-01, 9.92624757e-01, 9.93067358e-01,
- 9.93533398e-01, 9.94021410e-01, 9.94529685e-01, 9.95055964e-01,
- 9.95598351e-01, 9.96155580e-01, 9.96725627e-01, 9.97306092e-01,
- 9.97895214e-01, 9.98491441e-01, 9.99092890e-01, 9.99697063e-01,
- 1.00030303e+00, 1.00090793e+00, 1.00151084e+00, 1.00210923e+00,
- 1.00270118e+00, 1.00328513e+00, 1.00385926e+00, 1.00442111e+00,
- 1.00496860e+00, 1.00550040e+00, 1.00601455e+00, 1.00650869e+00,
- 1.00698104e+00, 1.00743004e+00, 1.00785364e+00, 1.00824962e+00,
- 1.00861604e+00, 1.00895138e+00, 1.00925390e+00, 1.00952134e+00,
- 1.00975175e+00, 1.00994371e+00, 1.01009550e+00, 1.01020488e+00,
- 1.01027007e+00, 1.01028975e+00, 1.01026227e+00, 1.01018562e+00,
- 1.01005820e+00, 1.00987882e+00, 1.00964593e+00, 1.00935753e+00,
- 1.00901228e+00, 1.00860959e+00, 1.00814837e+00, 1.00762674e+00,
- 1.00704343e+00, 1.00639775e+00, 1.00568877e+00, 1.00491559e+00,
- 1.00407768e+00, 1.00317429e+00, 1.00220424e+00, 1.00116684e+00,
- 1.00006248e+00, 9.98891422e-01, 9.97652252e-01, 9.96343856e-01,
- 9.94967462e-01, 9.93524663e-01, 9.92013927e-01, 9.90433283e-01,
- 9.88785147e-01, 9.87072681e-01, 9.85297443e-01, 9.83401161e-01,
- 9.80949418e-01, 9.78782729e-01, 9.76468238e-01, 9.74042850e-01,
- 9.71498848e-01, 9.68829968e-01, 9.66030974e-01, 9.63095104e-01,
- 9.60018198e-01, 9.56795738e-01, 9.53426267e-01, 9.49903482e-01,
- 9.46222115e-01, 9.42375820e-01, 9.38361702e-01, 9.34177798e-01,
- 9.29823124e-01, 9.25292320e-01, 9.20580120e-01, 9.15679793e-01,
- 9.10590604e-01, 9.05315030e-01, 8.99852756e-01, 8.94199497e-01,
- 8.88350152e-01, 8.82301631e-01, 8.76054874e-01, 8.69612385e-01,
- 8.62972799e-01, 8.56135198e-01, 8.49098179e-01, 8.41857024e-01,
- 8.34414055e-01, 8.26774617e-01, 8.18939244e-01, 8.10904891e-01,
- 8.02675318e-01, 7.94253751e-01, 7.85641662e-01, 7.76838609e-01,
- 7.67853193e-01, 7.58685181e-01, 7.49330658e-01, 7.39809171e-01,
- 7.30109944e-01, 7.20247781e-01, 7.10224161e-01, 7.00044326e-01,
- 6.89711890e-01, 6.79231154e-01, 6.68608179e-01, 6.57850997e-01,
- 6.46965718e-01, 6.35959617e-01, 6.24840336e-01, 6.13603503e-01,
- 6.02265091e-01, 5.90829083e-01, 5.79309408e-01, 5.67711124e-01,
- 5.56037416e-01, 5.44293664e-01, 5.32489768e-01, 5.20636084e-01,
- 5.08743273e-01, 4.96811166e-01, 4.84849881e-01, 4.72868107e-01,
- 4.60875918e-01, 4.48881081e-01, 4.36891039e-01, 4.24912022e-01,
- 4.12960603e-01, 4.01035896e-01, 3.89157867e-01, 3.77322199e-01,
- 3.65543767e-01, 3.53832356e-01, 3.42196115e-01, 3.30644820e-01,
- 3.19187559e-01, 3.07833309e-01, 2.96588182e-01, 2.85463717e-01,
- 2.74462409e-01, 2.63609584e-01, 2.52883101e-01, 2.42323489e-01,
- 2.31925746e-01, 2.21690837e-01, 2.11638058e-01, 2.01766920e-01,
- 1.92082236e-01, 1.82589160e-01, 1.73305997e-01, 1.64229200e-01,
- 1.55362654e-01, 1.46717079e-01, 1.38299391e-01, 1.30105078e-01,
- 1.22145310e-01, 1.14423458e-01, 1.06941076e-01, 9.97025893e-02,
- 9.27124283e-02, 8.59737427e-02, 7.94893311e-02, 7.32616579e-02,
- 6.72934102e-02, 6.15874081e-02, 5.61458003e-02, 5.09700747e-02,
- 4.60617047e-02, 4.14220117e-02, 3.70514189e-02, 3.29494666e-02,
- 2.91153327e-02, 2.55476401e-02, 2.22437711e-02, 1.92000659e-02,
- 1.64122205e-02, 1.38747611e-02, 1.15806353e-02, 9.52213664e-03,
- 7.69137380e-03, 6.07207833e-03, 4.62581217e-03, 3.60685164e-03,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
@@ -1117,166 +2752,466 @@ W_7M5_240 = np.array([
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
])
-W_7M5_360 = np.array([
- 1.72152668e-03, 2.20824874e-03, 2.68901752e-03, 3.22613342e-03,
- 3.81014420e-03, 4.45371932e-03, 5.15369240e-03, 5.91552473e-03,
- 6.73869158e-03, 7.62861841e-03, 8.58361457e-03, 9.60938437e-03,
- 1.07060753e-02, 1.18759723e-02, 1.31190130e-02, 1.44390108e-02,
- 1.58335301e-02, 1.73063081e-02, 1.88584711e-02, 2.04918652e-02,
- 2.22061476e-02, 2.40057166e-02, 2.58883593e-02, 2.78552326e-02,
- 2.99059145e-02, 3.20415894e-02, 3.42610013e-02, 3.65680973e-02,
- 3.89616721e-02, 4.14435824e-02, 4.40140796e-02, 4.66742169e-02,
- 4.94214625e-02, 5.22588489e-02, 5.51849337e-02, 5.82005143e-02,
- 6.13059845e-02, 6.45038384e-02, 6.77913923e-02, 7.11707833e-02,
- 7.46411071e-02, 7.82028053e-02, 8.18549521e-02, 8.56000162e-02,
- 8.94357617e-02, 9.33642589e-02, 9.73846703e-02, 1.01496718e-01,
- 1.05698760e-01, 1.09993603e-01, 1.14378287e-01, 1.18853508e-01,
- 1.23419277e-01, 1.28075997e-01, 1.32820581e-01, 1.37655457e-01,
- 1.42578648e-01, 1.47590522e-01, 1.52690437e-01, 1.57878853e-01,
- 1.63152529e-01, 1.68513363e-01, 1.73957969e-01, 1.79484737e-01,
- 1.85093105e-01, 1.90784835e-01, 1.96556497e-01, 2.02410419e-01,
- 2.08345433e-01, 2.14359825e-01, 2.20450365e-01, 2.26617296e-01,
- 2.32856279e-01, 2.39167941e-01, 2.45550642e-01, 2.52003951e-01,
- 2.58526168e-01, 2.65118408e-01, 2.71775911e-01, 2.78498539e-01,
- 2.85284606e-01, 2.92132459e-01, 2.99038432e-01, 3.06004256e-01,
- 3.13026529e-01, 3.20104862e-01, 3.27237324e-01, 3.34423210e-01,
- 3.41658622e-01, 3.48944976e-01, 3.56279252e-01, 3.63660034e-01,
- 3.71085146e-01, 3.78554327e-01, 3.86062695e-01, 3.93610554e-01,
- 4.01195225e-01, 4.08815272e-01, 4.16468460e-01, 4.24155411e-01,
- 4.31871046e-01, 4.39614744e-01, 4.47384019e-01, 4.55176988e-01,
- 4.62990138e-01, 4.70824619e-01, 4.78676593e-01, 4.86545433e-01,
- 4.94428714e-01, 5.02324813e-01, 5.10229471e-01, 5.18142927e-01,
- 5.26060916e-01, 5.33982818e-01, 5.41906817e-01, 5.49831283e-01,
- 5.57751234e-01, 5.65667636e-01, 5.73576883e-01, 5.81476666e-01,
- 5.89364661e-01, 5.97241338e-01, 6.05102013e-01, 6.12946170e-01,
- 6.20770242e-01, 6.28572094e-01, 6.36348526e-01, 6.44099662e-01,
- 6.51820973e-01, 6.59513822e-01, 6.67176382e-01, 6.74806795e-01,
- 6.82400711e-01, 6.89958854e-01, 6.97475722e-01, 7.04950145e-01,
- 7.12379980e-01, 7.19765434e-01, 7.27103833e-01, 7.34396372e-01,
- 7.41638561e-01, 7.48829639e-01, 7.55966688e-01, 7.63049259e-01,
- 7.70072273e-01, 7.77036981e-01, 7.83941108e-01, 7.90781257e-01,
- 7.97558114e-01, 8.04271381e-01, 8.10914901e-01, 8.17490856e-01,
- 8.23997094e-01, 8.30432785e-01, 8.36796950e-01, 8.43089298e-01,
- 8.49305847e-01, 8.55447310e-01, 8.61511037e-01, 8.67496281e-01,
- 8.73400798e-01, 8.79227518e-01, 8.84972438e-01, 8.90635719e-01,
- 8.96217173e-01, 9.01716414e-01, 9.07128770e-01, 9.12456578e-01,
- 9.17697261e-01, 9.22848784e-01, 9.27909917e-01, 9.32882596e-01,
- 9.37763323e-01, 9.42553356e-01, 9.47252428e-01, 9.51860206e-01,
- 9.56376060e-01, 9.60800602e-01, 9.65130600e-01, 9.69366689e-01,
- 9.73508812e-01, 9.77556541e-01, 9.81507226e-01, 9.85364580e-01,
- 9.89126209e-01, 9.92794201e-01, 9.96367545e-01, 9.99846919e-01,
- 1.00322812e+00, 1.00651341e+00, 1.00970073e+00, 1.01279029e+00,
- 1.01578293e+00, 1.01868229e+00, 1.02148657e+00, 1.02419772e+00,
- 1.02681455e+00, 1.02933598e+00, 1.03176043e+00, 1.03408981e+00,
- 1.03632326e+00, 1.03846361e+00, 1.04051196e+00, 1.04246831e+00,
- 1.04433331e+00, 1.04610837e+00, 1.04779018e+00, 1.04938334e+00,
- 1.05088565e+00, 1.05229923e+00, 1.05362522e+00, 1.05486289e+00,
- 1.05601521e+00, 1.05708746e+00, 1.05807221e+00, 1.05897524e+00,
- 1.05979447e+00, 1.06053414e+00, 1.06119412e+00, 1.06177366e+00,
- 1.06227662e+00, 1.06270324e+00, 1.06305569e+00, 1.06333815e+00,
- 1.06354800e+00, 1.06368607e+00, 1.06375557e+00, 1.06375743e+00,
- 1.06369358e+00, 1.06356632e+00, 1.06337707e+00, 1.06312782e+00,
- 1.06282156e+00, 1.06245782e+00, 1.06203634e+00, 1.06155996e+00,
- 1.06102951e+00, 1.06044797e+00, 1.05981709e+00, 1.05914163e+00,
- 1.05842136e+00, 1.05765876e+00, 1.05685377e+00, 1.05600761e+00,
- 1.05512006e+00, 1.05419505e+00, 1.05323346e+00, 1.05223985e+00,
- 1.05121668e+00, 1.05016637e+00, 1.04908779e+00, 1.04798366e+00,
- 1.04685334e+00, 1.04569860e+00, 1.04452056e+00, 1.04332348e+00,
- 1.04210831e+00, 1.04087907e+00, 1.03963603e+00, 1.03838099e+00,
- 1.03711403e+00, 1.03583813e+00, 1.03455276e+00, 1.03326200e+00,
- 1.03196750e+00, 1.03067200e+00, 1.02937564e+00, 1.02808244e+00,
- 1.02679167e+00, 1.02550635e+00, 1.02422655e+00, 1.02295558e+00,
- 1.02169299e+00, 1.02044475e+00, 1.01920733e+00, 1.01799992e+00,
- 1.01716022e+00, 1.01587289e+00, 1.01461783e+00, 1.01339738e+00,
- 1.01221017e+00, 1.01105652e+00, 1.00993444e+00, 1.00884559e+00,
- 1.00778956e+00, 1.00676790e+00, 1.00577851e+00, 1.00482173e+00,
- 1.00389592e+00, 1.00300262e+00, 1.00214091e+00, 1.00131213e+00,
- 1.00051460e+00, 9.99748988e-01, 9.99013486e-01, 9.98309229e-01,
- 9.97634934e-01, 9.96991885e-01, 9.96378601e-01, 9.95795982e-01,
- 9.95242217e-01, 9.94718132e-01, 9.94222122e-01, 9.93755313e-01,
- 9.93316216e-01, 9.92905809e-01, 9.92522422e-01, 9.92166957e-01,
- 9.91837704e-01, 9.91535508e-01, 9.91258603e-01, 9.91007878e-01,
- 9.90781723e-01, 9.90581104e-01, 9.90404336e-01, 9.90252267e-01,
- 9.90123118e-01, 9.90017726e-01, 9.89934325e-01, 9.89873712e-01,
- 9.89834110e-01, 9.89816359e-01, 9.89818707e-01, 9.89841998e-01,
- 9.89884438e-01, 9.89946800e-01, 9.90027287e-01, 9.90126680e-01,
- 9.90243175e-01, 9.90377594e-01, 9.90528134e-01, 9.90695564e-01,
- 9.90878043e-01, 9.91076302e-01, 9.91288540e-01, 9.91515602e-01,
- 9.91755666e-01, 9.92009469e-01, 9.92275155e-01, 9.92553486e-01,
- 9.92842693e-01, 9.93143533e-01, 9.93454080e-01, 9.93775067e-01,
- 9.94104689e-01, 9.94443742e-01, 9.94790398e-01, 9.95145361e-01,
- 9.95506800e-01, 9.95875534e-01, 9.96249681e-01, 9.96629919e-01,
- 9.97014367e-01, 9.97403799e-01, 9.97796404e-01, 9.98192871e-01,
- 9.98591286e-01, 9.98992436e-01, 9.99394506e-01, 9.99798247e-01,
- 1.00020179e+00, 1.00060586e+00, 1.00100858e+00, 1.00141070e+00,
- 1.00181040e+00, 1.00220846e+00, 1.00260296e+00, 1.00299457e+00,
- 1.00338148e+00, 1.00376444e+00, 1.00414155e+00, 1.00451348e+00,
- 1.00487832e+00, 1.00523688e+00, 1.00558730e+00, 1.00593027e+00,
- 1.00626393e+00, 1.00658905e+00, 1.00690380e+00, 1.00720890e+00,
- 1.00750238e+00, 1.00778498e+00, 1.00805489e+00, 1.00831287e+00,
- 1.00855700e+00, 1.00878802e+00, 1.00900405e+00, 1.00920593e+00,
- 1.00939182e+00, 1.00956244e+00, 1.00971590e+00, 1.00985296e+00,
- 1.00997177e+00, 1.01007317e+00, 1.01015529e+00, 1.01021893e+00,
- 1.01026225e+00, 1.01028602e+00, 1.01028842e+00, 1.01027030e+00,
- 1.01022988e+00, 1.01016802e+00, 1.01008292e+00, 1.00997541e+00,
- 1.00984369e+00, 1.00968863e+00, 1.00950846e+00, 1.00930404e+00,
- 1.00907371e+00, 1.00881848e+00, 1.00853675e+00, 1.00822947e+00,
- 1.00789488e+00, 1.00753391e+00, 1.00714488e+00, 1.00672876e+00,
- 1.00628393e+00, 1.00581146e+00, 1.00530991e+00, 1.00478053e+00,
- 1.00422177e+00, 1.00363456e+00, 1.00301719e+00, 1.00237067e+00,
- 1.00169363e+00, 1.00098749e+00, 1.00025108e+00, 9.99485663e-01,
- 9.98689592e-01, 9.97863666e-01, 9.97006370e-01, 9.96119199e-01,
- 9.95201404e-01, 9.94254687e-01, 9.93277595e-01, 9.92270651e-01,
- 9.91231967e-01, 9.90163286e-01, 9.89064394e-01, 9.87937115e-01,
- 9.86779736e-01, 9.85592773e-01, 9.84375125e-01, 9.83129288e-01,
- 9.81348463e-01, 9.79890963e-01, 9.78400459e-01, 9.76860435e-01,
- 9.75269879e-01, 9.73627353e-01, 9.71931341e-01, 9.70180498e-01,
- 9.68372652e-01, 9.66506952e-01, 9.64580027e-01, 9.62592318e-01,
- 9.60540986e-01, 9.58425534e-01, 9.56244393e-01, 9.53998416e-01,
- 9.51684014e-01, 9.49301185e-01, 9.46846884e-01, 9.44320232e-01,
- 9.41718404e-01, 9.39042580e-01, 9.36290624e-01, 9.33464050e-01,
- 9.30560854e-01, 9.27580507e-01, 9.24519592e-01, 9.21378471e-01,
- 9.18153414e-01, 9.14844696e-01, 9.11451652e-01, 9.07976524e-01,
- 9.04417545e-01, 9.00776308e-01, 8.97050058e-01, 8.93238398e-01,
- 8.89338681e-01, 8.85351360e-01, 8.81274023e-01, 8.77109638e-01,
- 8.72857927e-01, 8.68519505e-01, 8.64092796e-01, 8.59579819e-01,
- 8.54976007e-01, 8.50285220e-01, 8.45502615e-01, 8.40630470e-01,
- 8.35667925e-01, 8.30619943e-01, 8.25482007e-01, 8.20258909e-01,
- 8.14946648e-01, 8.09546696e-01, 8.04059978e-01, 7.98489378e-01,
- 7.92831417e-01, 7.87090668e-01, 7.81262450e-01, 7.75353947e-01,
- 7.69363613e-01, 7.63291769e-01, 7.57139016e-01, 7.50901711e-01,
- 7.44590843e-01, 7.38205136e-01, 7.31738075e-01, 7.25199287e-01,
- 7.18588225e-01, 7.11905687e-01, 7.05153668e-01, 6.98332634e-01,
- 6.91444101e-01, 6.84490545e-01, 6.77470119e-01, 6.70388375e-01,
- 6.63245210e-01, 6.56045780e-01, 6.48788627e-01, 6.41477162e-01,
- 6.34114323e-01, 6.26702000e-01, 6.19235334e-01, 6.11720596e-01,
- 6.04161612e-01, 5.96559133e-01, 5.88914401e-01, 5.81234783e-01,
- 5.73519989e-01, 5.65770616e-01, 5.57988067e-01, 5.50173851e-01,
- 5.42330194e-01, 5.34460798e-01, 5.26568538e-01, 5.18656324e-01,
- 5.10728813e-01, 5.02781159e-01, 4.94819491e-01, 4.86845139e-01,
- 4.78860889e-01, 4.70869928e-01, 4.62875144e-01, 4.54877894e-01,
- 4.46882512e-01, 4.38889325e-01, 4.30898123e-01, 4.22918322e-01,
- 4.14950878e-01, 4.06993964e-01, 3.99052648e-01, 3.91134614e-01,
- 3.83234031e-01, 3.75354653e-01, 3.67502060e-01, 3.59680098e-01,
- 3.51887312e-01, 3.44130166e-01, 3.36408100e-01, 3.28728966e-01,
- 3.21090505e-01, 3.13496418e-01, 3.05951565e-01, 2.98454319e-01,
- 2.91010565e-01, 2.83621109e-01, 2.76285415e-01, 2.69019585e-01,
- 2.61812445e-01, 2.54659232e-01, 2.47584348e-01, 2.40578694e-01,
- 2.33647009e-01, 2.26788433e-01, 2.20001992e-01, 2.13301325e-01,
- 2.06677771e-01, 2.00140409e-01, 1.93683630e-01, 1.87310343e-01,
- 1.81027384e-01, 1.74839476e-01, 1.68739644e-01, 1.62737273e-01,
- 1.56825277e-01, 1.51012382e-01, 1.45298230e-01, 1.39687469e-01,
- 1.34171842e-01, 1.28762544e-01, 1.23455562e-01, 1.18254662e-01,
- 1.13159677e-01, 1.08171439e-01, 1.03290734e-01, 9.85202978e-02,
- 9.38600023e-02, 8.93117360e-02, 8.48752103e-02, 8.05523737e-02,
- 7.63429787e-02, 7.22489246e-02, 6.82699120e-02, 6.44077291e-02,
- 6.06620003e-02, 5.70343711e-02, 5.35243715e-02, 5.01334690e-02,
- 4.68610790e-02, 4.37084453e-02, 4.06748365e-02, 3.77612269e-02,
- 3.49667099e-02, 3.22919275e-02, 2.97357669e-02, 2.72984629e-02,
- 2.49787186e-02, 2.27762542e-02, 2.06895808e-02, 1.87178169e-02,
- 1.68593418e-02, 1.51125125e-02, 1.34757094e-02, 1.19462709e-02,
- 1.05228754e-02, 9.20130941e-03, 7.98124316e-03, 6.85547314e-03,
- 5.82657334e-03, 4.87838525e-03, 4.02351119e-03, 3.15418663e-03,
+W_10M_96K_HR = np.array([
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 6.66310811e-08, 2.23723916e-07, 4.87541854e-07, 8.99672727e-07,
+ 1.51141830e-06, 2.38590815e-06, 3.60002150e-06, 5.24645884e-06,
+ 7.43599958e-06, 1.02999529e-05, 1.39928125e-05, 1.86951092e-05,
+ 2.46164800e-05, 3.19989194e-05, 4.11202636e-05, 5.22978444e-05,
+ 6.58923600e-05, 8.23118899e-05, 1.02016144e-04, 1.25520819e-04,
+ 1.53402099e-04, 1.86301360e-04, 2.24929841e-04, 2.70073535e-04,
+ 3.22598062e-04, 3.83453589e-04, 4.53679706e-04, 5.34410414e-04,
+ 6.26878755e-04, 7.32421642e-04, 8.52484489e-04, 9.88625223e-04,
+ 1.14251883e-03, 1.31596089e-03, 1.51087111e-03, 1.72929652e-03,
+ 1.97341433e-03, 2.24553375e-03, 2.54809810e-03, 2.88368552e-03,
+ 3.25501012e-03, 3.66492104e-03, 4.11640201e-03, 4.61257016e-03,
+ 5.15667303e-03, 5.75208431e-03, 6.40230207e-03, 7.11094262e-03,
+ 7.88173359e-03, 8.71850923e-03, 9.62519925e-03, 1.06058242e-02,
+ 1.16644828e-02, 1.28053408e-02, 1.40326228e-02, 1.53505951e-02,
+ 1.67635549e-02, 1.82758160e-02, 1.98916886e-02, 2.16154736e-02,
+ 2.34514344e-02, 2.54037846e-02, 2.74766665e-02, 2.96741407e-02,
+ 3.20001543e-02, 3.44585292e-02, 3.70529443e-02, 3.97869013e-02,
+ 4.26637232e-02, 4.56865206e-02, 4.88581695e-02, 5.21813035e-02,
+ 5.56582808e-02, 5.92911765e-02, 6.30817562e-02, 6.70314580e-02,
+ 7.11413696e-02, 7.54122287e-02, 7.98443928e-02, 8.44378322e-02,
+ 8.91921073e-02, 9.41063836e-02, 9.91793722e-02, 1.04409374e-01,
+ 1.09794252e-01, 1.15331404e-01, 1.21017799e-01, 1.26849949e-01,
+ 1.32823929e-01, 1.38935357e-01, 1.45179421e-01, 1.51550874e-01,
+ 1.58044025e-01, 1.64652810e-01, 1.71370730e-01, 1.78190947e-01,
+ 1.85106188e-01, 1.92108899e-01, 1.99191183e-01, 2.06344813e-01,
+ 2.13561311e-01, 2.20831960e-01, 2.28147790e-01, 2.35499650e-01,
+ 2.42878228e-01, 2.50274092e-01, 2.57677704e-01, 2.65079439e-01,
+ 2.72469670e-01, 2.79838771e-01, 2.87177145e-01, 2.94475257e-01,
+ 3.01723719e-01, 3.08913231e-01, 3.16034675e-01, 3.23079228e-01,
+ 3.30038190e-01, 3.36903185e-01, 3.43666196e-01, 3.50319386e-01,
+ 3.56855512e-01, 3.63267571e-01, 3.69548947e-01, 3.75693500e-01,
+ 3.81695598e-01, 3.87549996e-01, 3.93251985e-01, 3.98797333e-01,
+ 4.04182315e-01, 4.09403801e-01, 4.14459109e-01, 4.19346124e-01,
+ 4.24063236e-01, 4.28609401e-01, 4.32984143e-01, 4.37187403e-01,
+ 4.41219747e-01, 4.45082188e-01, 4.48776275e-01, 4.52303976e-01,
+ 4.55667824e-01, 4.58870709e-01, 4.61916000e-01, 4.64807451e-01,
+ 4.67549264e-01, 4.70145911e-01, 4.72602278e-01, 4.74923581e-01,
+ 4.77115244e-01, 4.79183048e-01, 4.81132984e-01, 4.82971221e-01,
+ 4.84704226e-01, 4.86338496e-01, 4.87880766e-01, 4.89337832e-01,
+ 4.90716666e-01, 4.92024213e-01, 4.93267536e-01, 4.94453669e-01,
+ 4.95589703e-01, 4.96682733e-01, 4.97739762e-01, 4.98767793e-01,
+ 4.99773741e-01, 5.00764489e-01, 5.01746774e-01, 5.02727270e-01,
+ 5.03712595e-01, 5.04709125e-01, 5.05723178e-01, 5.06760955e-01,
+ 5.07828474e-01, 5.08931518e-01, 5.10075927e-01, 5.11267185e-01,
+ 5.12510598e-01, 5.13811469e-01, 5.15174806e-01, 5.16605377e-01,
+ 5.18107831e-01, 5.19686580e-01, 5.21345973e-01, 5.23089945e-01,
+ 5.24922311e-01, 5.26846766e-01, 5.28866649e-01, 5.30985177e-01,
+ 5.33205211e-01, 5.35529494e-01, 5.37960529e-01, 5.40500462e-01,
+ 5.43151379e-01, 5.45914948e-01, 5.48792660e-01, 5.51785827e-01,
+ 5.54895282e-01, 5.58121800e-01, 5.61465800e-01, 5.64927518e-01,
+ 5.68506777e-01, 5.72203338e-01, 5.76016545e-01, 5.79945564e-01,
+ 5.83989203e-01, 5.88146091e-01, 5.92414677e-01, 5.96792936e-01,
+ 6.01278901e-01, 6.05870068e-01, 6.10563993e-01, 6.15357757e-01,
+ 6.20248437e-01, 6.25232756e-01, 6.30307317e-01, 6.35468543e-01,
+ 6.40712619e-01, 6.46035612e-01, 6.51433527e-01, 6.56902015e-01,
+ 6.62436843e-01, 6.68033481e-01, 6.73687398e-01, 6.79393888e-01,
+ 6.85148239e-01, 6.90945625e-01, 6.96781278e-01, 7.02650130e-01,
+ 7.08547413e-01, 7.14468122e-01, 7.20407307e-01, 7.26359963e-01,
+ 7.32321203e-01, 7.38286138e-01, 7.44249880e-01, 7.50207603e-01,
+ 7.56154597e-01, 7.62086034e-01, 7.67997444e-01, 7.73884177e-01,
+ 7.79741824e-01, 7.85566032e-01, 7.91352570e-01, 7.97097266e-01,
+ 8.02796185e-01, 8.08445334e-01, 8.14041018e-01, 8.19579542e-01,
+ 8.25057447e-01, 8.30471396e-01, 8.35818112e-01, 8.41094613e-01,
+ 8.46297920e-01, 8.51425231e-01, 8.56473923e-01, 8.61441612e-01,
+ 8.66325855e-01, 8.71124566e-01, 8.75835657e-01, 8.80457282e-01,
+ 8.84987772e-01, 8.89425457e-01, 8.93768966e-01, 8.98017049e-01,
+ 9.02168512e-01, 9.06222403e-01, 9.10177886e-01, 9.14034188e-01,
+ 9.17790771e-01, 9.21447217e-01, 9.25003231e-01, 9.28458691e-01,
+ 9.31813419e-01, 9.35067594e-01, 9.38221455e-01, 9.41275299e-01,
+ 9.44229603e-01, 9.47084904e-01, 9.49841976e-01, 9.52501595e-01,
+ 9.55064654e-01, 9.57532167e-01, 9.59905326e-01, 9.62185323e-01,
+ 9.64373529e-01, 9.66471374e-01, 9.68480289e-01, 9.70402002e-01,
+ 9.72238123e-01, 9.73990440e-01, 9.75660801e-01, 9.77251112e-01,
+ 9.78763342e-01, 9.80199575e-01, 9.81561780e-01, 9.82852161e-01,
+ 9.84072864e-01, 9.85226095e-01, 9.86314118e-01, 9.87339139e-01,
+ 9.88303483e-01, 9.89209354e-01, 9.90059078e-01, 9.90854919e-01,
+ 9.91599143e-01, 9.92294014e-01, 9.92941797e-01, 9.93544638e-01,
+ 9.94104803e-01, 9.94624376e-01, 9.95105505e-01, 9.95550215e-01,
+ 9.95960534e-01, 9.96338427e-01, 9.96685863e-01, 9.97004628e-01,
+ 9.97296572e-01, 9.97563362e-01, 9.97806728e-01, 9.98028338e-01,
+ 9.98229563e-01, 9.98412073e-01, 9.98577118e-01, 9.98726189e-01,
+ 9.98860478e-01, 9.98981178e-01, 9.99089479e-01, 9.99186397e-01,
+ 9.99273062e-01, 9.99350369e-01, 9.99419153e-01, 9.99480307e-01,
+ 9.99534547e-01, 9.99582708e-01, 9.99625325e-01, 9.99663055e-01,
+ 9.99696434e-01, 9.99726057e-01, 9.99752283e-01, 9.99775589e-01,
+ 9.99796331e-01, 9.99814928e-01, 9.99831557e-01, 9.99846578e-01,
+ 9.99860287e-01, 9.99872804e-01, 9.99884307e-01, 9.99895036e-01,
+ 9.99905109e-01, 9.99914587e-01, 9.99923646e-01, 9.99932408e-01,
+ 9.99940872e-01, 9.99949098e-01, 9.99957144e-01, 9.99965072e-01,
+ 9.99972939e-01, 9.99980748e-01, 9.99988437e-01, 9.99996126e-01,
+ 1.00000381e+00, 1.00001144e+00, 1.00001907e+00, 1.00002670e+00,
+ 1.00003433e+00, 1.00004184e+00, 1.00004935e+00, 1.00005686e+00,
+ 1.00006437e+00, 1.00007176e+00, 1.00007904e+00, 1.00008631e+00,
+ 1.00009358e+00, 1.00010073e+00, 1.00010777e+00, 1.00011480e+00,
+ 1.00012159e+00, 1.00012839e+00, 1.00013518e+00, 1.00014174e+00,
+ 1.00014830e+00, 1.00015461e+00, 1.00016093e+00, 1.00016701e+00,
+ 1.00017309e+00, 1.00017893e+00, 1.00018466e+00, 1.00019026e+00,
+ 1.00019574e+00, 1.00020099e+00, 1.00020623e+00, 1.00021124e+00,
+ 1.00021613e+00, 1.00022078e+00, 1.00022531e+00, 1.00022972e+00,
+ 1.00023389e+00, 1.00023794e+00, 1.00024176e+00, 1.00024545e+00,
+ 1.00024891e+00, 1.00025225e+00, 1.00025535e+00, 1.00025833e+00,
+ 1.00026107e+00, 1.00026357e+00, 1.00026596e+00, 1.00026822e+00,
+ 1.00027013e+00, 1.00027204e+00, 1.00027359e+00, 1.00027502e+00,
+ 1.00027621e+00, 1.00027728e+00, 1.00027812e+00, 1.00027883e+00,
+ 1.00027919e+00, 1.00027955e+00, 1.00027955e+00, 1.00027943e+00,
+ 1.00027919e+00, 1.00027859e+00, 1.00027800e+00, 1.00027704e+00,
+ 1.00027597e+00, 1.00027478e+00, 1.00027335e+00, 1.00027168e+00,
+ 1.00026989e+00, 1.00026786e+00, 1.00026572e+00, 1.00026345e+00,
+ 1.00026095e+00, 1.00025821e+00, 1.00025535e+00, 1.00025237e+00,
+ 1.00024927e+00, 1.00024593e+00, 1.00024235e+00, 1.00023878e+00,
+ 1.00023496e+00, 1.00023091e+00, 1.00022686e+00, 1.00022256e+00,
+ 1.00021827e+00, 1.00021374e+00, 1.00020909e+00, 1.00020421e+00,
+ 1.00019932e+00, 1.00019431e+00, 1.00018907e+00, 1.00018382e+00,
+ 1.00017846e+00, 1.00017297e+00, 1.00016737e+00, 1.00016165e+00,
+ 1.00015581e+00, 1.00014985e+00, 1.00014389e+00, 1.00013781e+00,
+ 1.00013161e+00, 1.00012529e+00, 1.00011897e+00, 1.00011253e+00,
+ 1.00010610e+00, 1.00009954e+00, 1.00009298e+00, 1.00008631e+00,
+ 1.00007963e+00, 1.00007284e+00, 1.00006604e+00, 1.00005913e+00,
+ 1.00005233e+00, 1.00004542e+00, 1.00003850e+00, 1.00003147e+00,
+ 1.00002456e+00, 1.00001752e+00, 1.00001049e+00, 1.00000346e+00,
+ 9.99996483e-01, 9.99989510e-01, 9.99982476e-01, 9.99975502e-01,
+ 9.99968529e-01, 9.99961555e-01, 9.99954641e-01, 9.99947727e-01,
+ 9.99940813e-01, 9.99933958e-01, 9.99927163e-01, 9.99920428e-01,
+ 9.99913692e-01, 9.99907076e-01, 9.99900460e-01, 9.99893904e-01,
+ 9.99887466e-01, 9.99881029e-01, 9.99874711e-01, 9.99868453e-01,
+ 9.99862254e-01, 9.99856174e-01, 9.99850154e-01, 9.99844253e-01,
+ 9.99838412e-01, 9.99832690e-01, 9.99827087e-01, 9.99821603e-01,
+ 9.99816179e-01, 9.99810934e-01, 9.99805748e-01, 9.99800682e-01,
+ 9.99795794e-01, 9.99791026e-01, 9.99786317e-01, 9.99781847e-01,
+ 9.99777436e-01, 9.99773204e-01, 9.99769092e-01, 9.99765158e-01,
+ 9.99761343e-01, 9.99757707e-01, 9.99754190e-01, 9.99750853e-01,
+ 9.99747694e-01, 9.99744654e-01, 9.99741852e-01, 9.99739170e-01,
+ 9.99736667e-01, 9.99734342e-01, 9.99732137e-01, 9.99730170e-01,
+ 9.99728382e-01, 9.99726772e-01, 9.99725342e-01, 9.99724090e-01,
+ 9.99723017e-01, 9.99722123e-01, 9.99721408e-01, 9.99720931e-01,
+ 9.99720633e-01, 9.99720514e-01, 9.99720573e-01, 9.99720812e-01,
+ 9.99721289e-01, 9.99721944e-01, 9.99722779e-01, 9.99723792e-01,
+ 9.99725044e-01, 9.99726474e-01, 9.99728084e-01, 9.99729872e-01,
+ 9.99731898e-01, 9.99734104e-01, 9.99736488e-01, 9.99739051e-01,
+ 9.99741793e-01, 9.99744713e-01, 9.99747872e-01, 9.99751151e-01,
+ 9.99754667e-01, 9.99758303e-01, 9.99762177e-01, 9.99766171e-01,
+ 9.99770403e-01, 9.99774754e-01, 9.99779284e-01, 9.99783993e-01,
+ 9.99788821e-01, 9.99793828e-01, 9.99799013e-01, 9.99804318e-01,
+ 9.99809742e-01, 9.99815404e-01, 9.99821126e-01, 9.99826968e-01,
+ 9.99832988e-01, 9.99839127e-01, 9.99845386e-01, 9.99851763e-01,
+ 9.99858260e-01, 9.99864876e-01, 9.99871552e-01, 9.99878347e-01,
+ 9.99885261e-01, 9.99892235e-01, 9.99899328e-01, 9.99906480e-01,
+ 9.99913692e-01, 9.99920964e-01, 9.99928296e-01, 9.99935687e-01,
+ 9.99943137e-01, 9.99950647e-01, 9.99958158e-01, 9.99965727e-01,
+ 9.99973297e-01, 9.99980927e-01, 9.99988556e-01, 9.99996185e-01,
+ 1.00000381e+00, 1.00001144e+00, 1.00001907e+00, 1.00002670e+00,
+ 1.00003433e+00, 1.00004184e+00, 1.00004935e+00, 1.00005686e+00,
+ 1.00006437e+00, 1.00007176e+00, 1.00007904e+00, 1.00008631e+00,
+ 1.00009358e+00, 1.00010073e+00, 1.00010777e+00, 1.00011480e+00,
+ 1.00012159e+00, 1.00012839e+00, 1.00013518e+00, 1.00014174e+00,
+ 1.00014830e+00, 1.00015461e+00, 1.00016093e+00, 1.00016701e+00,
+ 1.00017309e+00, 1.00017893e+00, 1.00018466e+00, 1.00019026e+00,
+ 1.00019574e+00, 1.00020099e+00, 1.00020623e+00, 1.00021124e+00,
+ 1.00021613e+00, 1.00022078e+00, 1.00022531e+00, 1.00022972e+00,
+ 1.00023389e+00, 1.00023794e+00, 1.00024176e+00, 1.00024545e+00,
+ 1.00024891e+00, 1.00025225e+00, 1.00025535e+00, 1.00025833e+00,
+ 1.00026107e+00, 1.00026357e+00, 1.00026596e+00, 1.00026822e+00,
+ 1.00027013e+00, 1.00027204e+00, 1.00027359e+00, 1.00027502e+00,
+ 1.00027621e+00, 1.00027728e+00, 1.00027812e+00, 1.00027883e+00,
+ 1.00027919e+00, 1.00027955e+00, 1.00027955e+00, 1.00027943e+00,
+ 1.00027919e+00, 1.00027859e+00, 1.00027800e+00, 1.00027704e+00,
+ 1.00027597e+00, 1.00027478e+00, 1.00027335e+00, 1.00027168e+00,
+ 1.00026989e+00, 1.00026786e+00, 1.00026572e+00, 1.00026345e+00,
+ 1.00026095e+00, 1.00025821e+00, 1.00025535e+00, 1.00025237e+00,
+ 1.00024927e+00, 1.00024593e+00, 1.00024235e+00, 1.00023878e+00,
+ 1.00023496e+00, 1.00023091e+00, 1.00022686e+00, 1.00022256e+00,
+ 1.00021827e+00, 1.00021374e+00, 1.00020909e+00, 1.00020421e+00,
+ 1.00019932e+00, 1.00019431e+00, 1.00018907e+00, 1.00018382e+00,
+ 1.00017846e+00, 1.00017297e+00, 1.00016737e+00, 1.00016165e+00,
+ 1.00015581e+00, 1.00014985e+00, 1.00014389e+00, 1.00013781e+00,
+ 1.00013161e+00, 1.00012529e+00, 1.00011897e+00, 1.00011253e+00,
+ 1.00010610e+00, 1.00009954e+00, 1.00009298e+00, 1.00008631e+00,
+ 1.00007963e+00, 1.00007284e+00, 1.00006604e+00, 1.00005913e+00,
+ 1.00005233e+00, 1.00004542e+00, 1.00003850e+00, 1.00003147e+00,
+ 1.00002456e+00, 1.00001752e+00, 1.00001049e+00, 1.00000346e+00,
+ 9.99996483e-01, 9.99989510e-01, 9.99982476e-01, 9.99975502e-01,
+ 9.99968529e-01, 9.99961555e-01, 9.99954641e-01, 9.99947727e-01,
+ 9.99940813e-01, 9.99933958e-01, 9.99927163e-01, 9.99920428e-01,
+ 9.99913692e-01, 9.99907076e-01, 9.99900460e-01, 9.99893904e-01,
+ 9.99887466e-01, 9.99881029e-01, 9.99874711e-01, 9.99868453e-01,
+ 9.99862254e-01, 9.99856174e-01, 9.99850154e-01, 9.99844253e-01,
+ 9.99838412e-01, 9.99832690e-01, 9.99827087e-01, 9.99821603e-01,
+ 9.99816179e-01, 9.99810934e-01, 9.99805748e-01, 9.99800682e-01,
+ 9.99795794e-01, 9.99791026e-01, 9.99786317e-01, 9.99781847e-01,
+ 9.99777436e-01, 9.99773204e-01, 9.99769092e-01, 9.99765158e-01,
+ 9.99761343e-01, 9.99757707e-01, 9.99754190e-01, 9.99750853e-01,
+ 9.99747694e-01, 9.99744654e-01, 9.99741852e-01, 9.99739170e-01,
+ 9.99736667e-01, 9.99734342e-01, 9.99732137e-01, 9.99730170e-01,
+ 9.99728382e-01, 9.99726772e-01, 9.99725342e-01, 9.99724090e-01,
+ 9.99723017e-01, 9.99722123e-01, 9.99721408e-01, 9.99720931e-01,
+ 9.99720633e-01, 9.99720514e-01, 9.99720573e-01, 9.99720812e-01,
+ 9.99721289e-01, 9.99721944e-01, 9.99722779e-01, 9.99723792e-01,
+ 9.99725044e-01, 9.99726474e-01, 9.99728084e-01, 9.99729872e-01,
+ 9.99731898e-01, 9.99734104e-01, 9.99736488e-01, 9.99739051e-01,
+ 9.99741793e-01, 9.99744713e-01, 9.99747872e-01, 9.99751151e-01,
+ 9.99754667e-01, 9.99758303e-01, 9.99762177e-01, 9.99766171e-01,
+ 9.99770403e-01, 9.99774754e-01, 9.99779284e-01, 9.99783993e-01,
+ 9.99788821e-01, 9.99793828e-01, 9.99799013e-01, 9.99804318e-01,
+ 9.99809742e-01, 9.99815404e-01, 9.99821126e-01, 9.99826968e-01,
+ 9.99832988e-01, 9.99839127e-01, 9.99845386e-01, 9.99851763e-01,
+ 9.99858260e-01, 9.99864876e-01, 9.99871552e-01, 9.99878347e-01,
+ 9.99885261e-01, 9.99892235e-01, 9.99899328e-01, 9.99906480e-01,
+ 9.99913692e-01, 9.99920964e-01, 9.99928296e-01, 9.99935687e-01,
+ 9.99943137e-01, 9.99950647e-01, 9.99958158e-01, 9.99965727e-01,
+ 9.99973297e-01, 9.99980927e-01, 9.99988556e-01, 9.99996185e-01,
+ 1.00000381e+00, 1.00001144e+00, 1.00001907e+00, 1.00002670e+00,
+ 1.00003433e+00, 1.00004184e+00, 1.00004935e+00, 1.00005686e+00,
+ 1.00006437e+00, 1.00007176e+00, 1.00007904e+00, 1.00008631e+00,
+ 1.00009358e+00, 1.00010073e+00, 1.00010777e+00, 1.00011480e+00,
+ 1.00012159e+00, 1.00012839e+00, 1.00013518e+00, 1.00014174e+00,
+ 1.00014830e+00, 1.00015461e+00, 1.00016093e+00, 1.00016701e+00,
+ 1.00017309e+00, 1.00017893e+00, 1.00018466e+00, 1.00019026e+00,
+ 1.00019574e+00, 1.00020099e+00, 1.00020623e+00, 1.00021124e+00,
+ 1.00021613e+00, 1.00022078e+00, 1.00022531e+00, 1.00022972e+00,
+ 1.00023389e+00, 1.00023794e+00, 1.00024176e+00, 1.00024545e+00,
+ 1.00024891e+00, 1.00025225e+00, 1.00025535e+00, 1.00025833e+00,
+ 1.00026107e+00, 1.00026357e+00, 1.00026596e+00, 1.00026822e+00,
+ 1.00027013e+00, 1.00027204e+00, 1.00027359e+00, 1.00027502e+00,
+ 1.00027621e+00, 1.00027728e+00, 1.00027812e+00, 1.00027883e+00,
+ 1.00027919e+00, 1.00027955e+00, 1.00027955e+00, 1.00027943e+00,
+ 1.00027919e+00, 1.00027859e+00, 1.00027800e+00, 1.00027704e+00,
+ 1.00027597e+00, 1.00027478e+00, 1.00027335e+00, 1.00027168e+00,
+ 1.00026989e+00, 1.00026786e+00, 1.00026572e+00, 1.00026345e+00,
+ 1.00026095e+00, 1.00025821e+00, 1.00025535e+00, 1.00025237e+00,
+ 1.00024927e+00, 1.00024593e+00, 1.00024235e+00, 1.00023878e+00,
+ 1.00023496e+00, 1.00023091e+00, 1.00022686e+00, 1.00022256e+00,
+ 1.00021827e+00, 1.00021374e+00, 1.00020909e+00, 1.00020421e+00,
+ 1.00019932e+00, 1.00019431e+00, 1.00018907e+00, 1.00018382e+00,
+ 1.00017846e+00, 1.00017297e+00, 1.00016737e+00, 1.00016165e+00,
+ 1.00015581e+00, 1.00014985e+00, 1.00014389e+00, 1.00013781e+00,
+ 1.00013161e+00, 1.00012529e+00, 1.00011897e+00, 1.00011253e+00,
+ 1.00010610e+00, 1.00009954e+00, 1.00009298e+00, 1.00008631e+00,
+ 1.00007963e+00, 1.00007284e+00, 1.00006604e+00, 1.00005913e+00,
+ 1.00005233e+00, 1.00004542e+00, 1.00003850e+00, 1.00003147e+00,
+ 1.00002456e+00, 1.00001752e+00, 1.00001049e+00, 1.00000346e+00,
+ 9.99996483e-01, 9.99989510e-01, 9.99982476e-01, 9.99975502e-01,
+ 9.99968529e-01, 9.99961555e-01, 9.99954641e-01, 9.99947727e-01,
+ 9.99940813e-01, 9.99933958e-01, 9.99927163e-01, 9.99920428e-01,
+ 9.99913692e-01, 9.99907076e-01, 9.99900460e-01, 9.99893904e-01,
+ 9.99887466e-01, 9.99881029e-01, 9.99874711e-01, 9.99868453e-01,
+ 9.99862254e-01, 9.99856174e-01, 9.99850154e-01, 9.99844253e-01,
+ 9.99838412e-01, 9.99832690e-01, 9.99827087e-01, 9.99821603e-01,
+ 9.99816179e-01, 9.99810934e-01, 9.99805748e-01, 9.99800682e-01,
+ 9.99795794e-01, 9.99791026e-01, 9.99786317e-01, 9.99781847e-01,
+ 9.99777436e-01, 9.99773204e-01, 9.99769092e-01, 9.99765158e-01,
+ 9.99761343e-01, 9.99757707e-01, 9.99754190e-01, 9.99750853e-01,
+ 9.99747694e-01, 9.99744654e-01, 9.99741852e-01, 9.99739170e-01,
+ 9.99736667e-01, 9.99734342e-01, 9.99732137e-01, 9.99730170e-01,
+ 9.99728382e-01, 9.99726772e-01, 9.99725342e-01, 9.99724090e-01,
+ 9.99723017e-01, 9.99722123e-01, 9.99721408e-01, 9.99720931e-01,
+ 9.99720633e-01, 9.99720514e-01, 9.99720573e-01, 9.99720812e-01,
+ 9.99721289e-01, 9.99721944e-01, 9.99722779e-01, 9.99723792e-01,
+ 9.99725044e-01, 9.99726474e-01, 9.99728084e-01, 9.99729872e-01,
+ 9.99731898e-01, 9.99734104e-01, 9.99736488e-01, 9.99739051e-01,
+ 9.99741793e-01, 9.99744713e-01, 9.99747872e-01, 9.99751151e-01,
+ 9.99754667e-01, 9.99758303e-01, 9.99762177e-01, 9.99766171e-01,
+ 9.99770403e-01, 9.99774754e-01, 9.99779284e-01, 9.99783993e-01,
+ 9.99788821e-01, 9.99793828e-01, 9.99799013e-01, 9.99804318e-01,
+ 9.99809742e-01, 9.99815404e-01, 9.99821126e-01, 9.99826968e-01,
+ 9.99832988e-01, 9.99839127e-01, 9.99845386e-01, 9.99851763e-01,
+ 9.99858260e-01, 9.99864876e-01, 9.99871552e-01, 9.99878347e-01,
+ 9.99885261e-01, 9.99892235e-01, 9.99899328e-01, 9.99906480e-01,
+ 9.99913692e-01, 9.99920964e-01, 9.99928296e-01, 9.99935687e-01,
+ 9.99943137e-01, 9.99950647e-01, 9.99958158e-01, 9.99965727e-01,
+ 9.99973297e-01, 9.99980927e-01, 9.99988556e-01, 9.99996185e-01,
+ 1.00000381e+00, 1.00001132e+00, 1.00001884e+00, 1.00002635e+00,
+ 1.00003362e+00, 1.00004077e+00, 1.00004780e+00, 1.00005460e+00,
+ 1.00006104e+00, 1.00006711e+00, 1.00007272e+00, 1.00007772e+00,
+ 1.00008214e+00, 1.00008571e+00, 1.00008833e+00, 1.00008976e+00,
+ 1.00008988e+00, 1.00008845e+00, 1.00008512e+00, 1.00007975e+00,
+ 1.00007200e+00, 1.00006139e+00, 1.00004768e+00, 1.00003028e+00,
+ 1.00000894e+00, 9.99982893e-01, 9.99951661e-01, 9.99914646e-01,
+ 9.99871135e-01, 9.99820411e-01, 9.99761701e-01, 9.99694109e-01,
+ 9.99616742e-01, 9.99528646e-01, 9.99428689e-01, 9.99315858e-01,
+ 9.99188840e-01, 9.99046445e-01, 9.98887360e-01, 9.98710036e-01,
+ 9.98513043e-01, 9.98294711e-01, 9.98053491e-01, 9.97787535e-01,
+ 9.97494996e-01, 9.97173846e-01, 9.96822178e-01, 9.96437728e-01,
+ 9.96018291e-01, 9.95561540e-01, 9.95064974e-01, 9.94526088e-01,
+ 9.93942142e-01, 9.93310452e-01, 9.92628038e-01, 9.91891921e-01,
+ 9.91099000e-01, 9.90245998e-01, 9.89329517e-01, 9.88346159e-01,
+ 9.87292290e-01, 9.86164153e-01, 9.84957933e-01, 9.83669639e-01,
+ 9.82295156e-01, 9.80830312e-01, 9.79270697e-01, 9.77612019e-01,
+ 9.75849628e-01, 9.73978817e-01, 9.71994996e-01, 9.69893157e-01,
+ 9.67668533e-01, 9.65315938e-01, 9.62830484e-01, 9.60206985e-01,
+ 9.57440197e-01, 9.54525113e-01, 9.51456368e-01, 9.48228836e-01,
+ 9.44837391e-01, 9.41276729e-01, 9.37541902e-01, 9.33627844e-01,
+ 9.29529607e-01, 9.25242424e-01, 9.20761466e-01, 9.16082382e-01,
+ 9.11200643e-01, 9.06112134e-01, 9.00812864e-01, 8.95299196e-01,
+ 8.89567554e-01, 8.83614719e-01, 8.77437830e-01, 8.71034324e-01,
+ 8.64401877e-01, 8.57538521e-01, 8.50442827e-01, 8.43113542e-01,
+ 8.35549891e-01, 8.27751517e-01, 8.19718421e-01, 8.11451137e-01,
+ 8.02950621e-01, 7.94218183e-01, 7.85255671e-01, 7.76065350e-01,
+ 7.66650081e-01, 7.57013023e-01, 7.47157931e-01, 7.37088978e-01,
+ 7.26810873e-01, 7.16328681e-01, 7.05648124e-01, 6.94775164e-01,
+ 6.83716357e-01, 6.72478795e-01, 6.61069810e-01, 6.49497330e-01,
+ 6.37769580e-01, 6.25895321e-01, 6.13883674e-01, 6.01744056e-01,
+ 5.89486361e-01, 5.77120781e-01, 5.64657867e-01, 5.52108407e-01,
+ 5.39483547e-01, 5.26794672e-01, 5.14053404e-01, 5.01271665e-01,
+ 4.88461435e-01, 4.75634992e-01, 4.62804615e-01, 4.49982822e-01,
+ 4.37182158e-01, 4.24415171e-01, 4.11694527e-01, 3.99032772e-01,
+ 3.86442453e-01, 3.73936087e-01, 3.61525953e-01, 3.49224269e-01,
+ 3.37043047e-01, 3.24994087e-01, 3.13088894e-01, 3.01338732e-01,
+ 2.89754450e-01, 2.78346658e-01, 2.67125458e-01, 2.56100595e-01,
+ 2.45281324e-01, 2.34676436e-01, 2.24294156e-01, 2.14142203e-01,
+ 2.04227716e-01, 1.94557235e-01, 1.85136691e-01, 1.75971389e-01,
+ 1.67065978e-01, 1.58424467e-01, 1.50050193e-01, 1.41945809e-01,
+ 1.34113312e-01, 1.26554012e-01, 1.19268581e-01, 1.12257004e-01,
+ 1.05518632e-01, 9.90521908e-02, 9.28557739e-02, 8.69268849e-02,
+ 8.12624842e-02, 7.58589506e-02, 7.07121640e-02, 6.58175275e-02,
+ 6.11699894e-02, 5.67640625e-02, 5.25939018e-02, 4.86532971e-02,
+ 4.49357443e-02, 4.14344519e-02, 3.81424055e-02, 3.50523964e-02,
+ 3.21570449e-02, 2.94488575e-02, 2.69202497e-02, 2.45635863e-02,
+ 2.23712083e-02, 2.03354694e-02, 1.84487645e-02, 1.67035554e-02,
+ 1.50924018e-02, 1.36079816e-02, 1.22431125e-02, 1.09907771e-02,
+ 9.84413363e-03, 8.79654102e-03, 7.84156192e-03, 6.97298534e-03,
+ 6.18482940e-03, 5.47135156e-03, 4.82705561e-03, 4.24669450e-03,
+ 3.72527563e-03, 3.25805834e-03, 2.84055714e-03, 2.46853800e-03,
+ 2.13801605e-03, 1.84525200e-03, 1.58674677e-03, 1.35923503e-03,
+ 1.15967961e-03, 9.85263032e-04, 8.33379803e-04, 7.01628160e-04,
+ 5.87800692e-04, 4.89875500e-04, 4.06006613e-04, 3.34514218e-04,
+ 2.73875427e-04, 2.22714254e-04, 1.79792376e-04, 1.43999539e-04,
+ 1.14344395e-04, 8.99455481e-05, 7.00227974e-05, 5.38887325e-05,
+ 4.09407221e-05, 3.06531692e-05, 2.25702297e-05, 1.62988836e-05,
+ 1.15024377e-05, 7.89443584e-06, 5.23298331e-06, 3.31548563e-06,
+ 1.97379018e-06, 1.06971811e-06, 4.90905393e-07, 1.46209757e-07,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
+ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
diff --git a/test/tns.py b/test/tns.py
index d537590..4bb7b99 100644
--- a/test/tns.py
+++ b/test/tns.py
@@ -22,6 +22,35 @@ import tables as T, appendix_c as C
### ------------------------------------------------------------------------ ###
class Tns:
+ SUB_LIM_2M5_NB = [ [ 3, 10, 20 ] ]
+ SUB_LIM_2M5_WB = [ [ 3, 20, 40 ] ]
+ SUB_LIM_2M5_SSWB = [ [ 3, 30, 60 ] ]
+ SUB_LIM_2M5_SWB = [ [ 3, 40, 80 ] ]
+ SUB_LIM_2M5_FB = [ [ 3, 51, 100 ] ]
+
+ SUB_LIM_2M5 = [
+ SUB_LIM_2M5_NB , SUB_LIM_2M5_WB, SUB_LIM_2M5_SSWB,
+ SUB_LIM_2M5_SWB, SUB_LIM_2M5_FB, SUB_LIM_2M5_FB, SUB_LIM_2M5_FB ]
+
+ SUB_LIM_5M_NB = [ [ 6, 23, 40 ] ]
+ SUB_LIM_5M_WB = [ [ 6, 43, 80 ] ]
+ SUB_LIM_5M_SSWB = [ [ 6, 63, 120 ] ]
+ SUB_LIM_5M_SWB = [ [ 6, 43, 80 ], [ 80, 120, 160 ] ]
+ SUB_LIM_5M_FB = [ [ 6, 53, 100 ], [ 100, 150, 200 ] ]
+
+ SUB_LIM_5M = [
+ SUB_LIM_5M_NB , SUB_LIM_5M_WB, SUB_LIM_5M_SSWB,
+ SUB_LIM_5M_SWB, SUB_LIM_5M_FB, SUB_LIM_5M_FB, SUB_LIM_5M_FB ]
+
+ SUB_LIM_7M5_NB = [ [ 9, 26, 43, 60 ] ]
+ SUB_LIM_7M5_WB = [ [ 9, 46, 83, 120 ] ]
+ SUB_LIM_7M5_SSWB = [ [ 9, 66, 123, 180 ] ]
+ SUB_LIM_7M5_SWB = [ [ 9, 46, 82, 120 ], [ 120, 159, 200, 240 ] ]
+ SUB_LIM_7M5_FB = [ [ 9, 56, 103, 150 ], [ 150, 200, 250, 300 ] ]
+
+ SUB_LIM_7M5 = [
+ SUB_LIM_7M5_NB , SUB_LIM_7M5_WB, SUB_LIM_7M5_SSWB,
+ SUB_LIM_7M5_SWB, SUB_LIM_7M5_FB, None, None ]
SUB_LIM_10M_NB = [ [ 12, 34, 57, 80 ] ]
SUB_LIM_10M_WB = [ [ 12, 61, 110, 160 ] ]
@@ -29,28 +58,32 @@ class Tns:
SUB_LIM_10M_SWB = [ [ 12, 61, 110, 160 ], [ 160, 213, 266, 320 ] ]
SUB_LIM_10M_FB = [ [ 12, 74, 137, 200 ], [ 200, 266, 333, 400 ] ]
- SUB_LIM_10M = [ SUB_LIM_10M_NB, SUB_LIM_10M_WB,
- SUB_LIM_10M_SSWB, SUB_LIM_10M_SWB, SUB_LIM_10M_FB ]
+ SUB_LIM_10M = [
+ SUB_LIM_10M_NB , SUB_LIM_10M_WB, SUB_LIM_10M_SSWB,
+ SUB_LIM_10M_SWB, SUB_LIM_10M_FB, SUB_LIM_10M_FB, SUB_LIM_10M_FB ]
- SUB_LIM_7M5_NB = [ [ 9, 26, 43, 60 ] ]
- SUB_LIM_7M5_WB = [ [ 9, 46, 83, 120 ] ]
- SUB_LIM_7M5_SSWB = [ [ 9, 66, 123, 180 ] ]
- SUB_LIM_7M5_SWB = [ [ 9, 46, 82, 120 ], [ 120, 159, 200, 240 ] ]
- SUB_LIM_7M5_FB = [ [ 9, 56, 103, 150 ], [ 150, 200, 250, 300 ] ]
+ SUB_LIM = [ SUB_LIM_2M5, SUB_LIM_5M, SUB_LIM_7M5, SUB_LIM_10M ]
- SUB_LIM_7M5 = [ SUB_LIM_7M5_NB, SUB_LIM_7M5_WB,
- SUB_LIM_7M5_SSWB, SUB_LIM_7M5_SWB, SUB_LIM_7M5_FB ]
- SUB_LIM = [ SUB_LIM_7M5, SUB_LIM_10M ]
+ FREQ_LIM_2M5_NB = [ 3, 20 ]
+ FREQ_LIM_2M5_WB = [ 3, 40 ]
+ FREQ_LIM_2M5_SSWB = [ 3, 60 ]
+ FREQ_LIM_2M5_SWB = [ 3, 80 ]
+ FREQ_LIM_2M5_FB = [ 3, 100 ]
- FREQ_LIM_10M_NB = [ 12, 80 ]
- FREQ_LIM_10M_WB = [ 12, 160 ]
- FREQ_LIM_10M_SSWB = [ 12, 240 ]
- FREQ_LIM_10M_SWB = [ 12, 160, 320 ]
- FREQ_LIM_10M_FB = [ 12, 200, 400 ]
+ FREQ_LIM_2M5 = [
+ FREQ_LIM_2M5_NB , FREQ_LIM_2M5_WB, FREQ_LIM_2M5_SSWB,
+ FREQ_LIM_2M5_SWB, FREQ_LIM_2M5_FB, FREQ_LIM_2M5_FB, FREQ_LIM_2M5_FB ]
+
+ FREQ_LIM_5M_NB = [ 6, 40 ]
+ FREQ_LIM_5M_WB = [ 6, 80 ]
+ FREQ_LIM_5M_SSWB = [ 6, 120 ]
+ FREQ_LIM_5M_SWB = [ 6, 80, 160 ]
+ FREQ_LIM_5M_FB = [ 6, 100, 200 ]
- FREQ_LIM_10M = [ FREQ_LIM_10M_NB, FREQ_LIM_10M_WB,
- FREQ_LIM_10M_SSWB, FREQ_LIM_10M_SWB, FREQ_LIM_10M_FB ]
+ FREQ_LIM_5M = [
+ FREQ_LIM_5M_NB , FREQ_LIM_5M_WB, FREQ_LIM_5M_SSWB,
+ FREQ_LIM_5M_SWB, FREQ_LIM_5M_FB, FREQ_LIM_5M_FB, FREQ_LIM_5M_FB ]
FREQ_LIM_7M5_NB = [ 9, 60 ]
FREQ_LIM_7M5_WB = [ 9, 120 ]
@@ -58,10 +91,22 @@ class Tns:
FREQ_LIM_7M5_SWB = [ 9, 120, 240 ]
FREQ_LIM_7M5_FB = [ 9, 150, 300 ]
- FREQ_LIM_7M5 = [ FREQ_LIM_7M5_NB, FREQ_LIM_7M5_WB,
- FREQ_LIM_7M5_SSWB, FREQ_LIM_7M5_SWB, FREQ_LIM_7M5_FB ]
+ FREQ_LIM_7M5 = [
+ FREQ_LIM_7M5_NB , FREQ_LIM_7M5_WB, FREQ_LIM_7M5_SSWB,
+ FREQ_LIM_7M5_SWB, FREQ_LIM_7M5_FB, None, None ]
+
+ FREQ_LIM_10M_NB = [ 12, 80 ]
+ FREQ_LIM_10M_WB = [ 12, 160 ]
+ FREQ_LIM_10M_SSWB = [ 12, 240 ]
+ FREQ_LIM_10M_SWB = [ 12, 160, 320 ]
+ FREQ_LIM_10M_FB = [ 12, 200, 400 ]
+
+ FREQ_LIM_10M = [
+ FREQ_LIM_10M_NB , FREQ_LIM_10M_WB, FREQ_LIM_10M_SSWB,
+ FREQ_LIM_10M_SWB, FREQ_LIM_10M_FB, FREQ_LIM_10M_FB, FREQ_LIM_10M_FB ]
+
+ FREQ_LIM = [ FREQ_LIM_2M5, FREQ_LIM_5M, FREQ_LIM_7M5, FREQ_LIM_10M ]
- FREQ_LIM = [ FREQ_LIM_7M5, FREQ_LIM_10M ]
def __init__(self, dt):
@@ -72,9 +117,11 @@ class Tns:
def get_data(self):
+ rc = np.append(self.rc - 8, np.zeros((2, 8 - len(self.rc[0]))), axis=1)
+
return { 'nfilters' : self.nfilters,
'lpc_weighting' : self.lpc_weighting,
- 'rc_order' : self.rc_order, 'rc' : self.rc - 8 }
+ 'rc_order' : self.rc_order, 'rc' : rc }
def get_nbits(self):
@@ -105,17 +152,18 @@ class TnsAnalysis(Tns):
### Normalized autocorrelation function
S = Tns.SUB_LIM[self.dt][bw][f]
+ maxorder = [ 4, 8 ][self.dt > T.DT_5M]
- r = np.append([ 3 ], np.zeros(8))
- e = [ sum(x[S[s]:S[s+1]] ** 2) for s in range(3) ]
+ r = np.append([ 3 ], np.zeros(maxorder))
+ e = [ sum(x[S[s]:S[s+1]] ** 2) for s in range(len(S)-1) ]
for k in range(len(r) if sum(e) > 0 else 0):
c = [ np.dot(x[S[s]:S[s+1]-k], x[S[s]+k:S[s+1]])
- for s in range(3) ]
+ for s in range(len(S)-1) ]
r[k] = np.sum( np.array(c) / np.array(e) )
- r *= np.exp(-0.5 * (0.02 * np.pi * np.arange(9)) ** 2)
+ r *= np.exp(-0.5 * (0.02 * np.pi * np.arange(1+maxorder)) ** 2)
### Levinson-Durbin recursion
@@ -140,10 +188,10 @@ class TnsAnalysis(Tns):
def coeffs_reflexion(self, a):
- rc = np.zeros(8)
+ rc = np.zeros(len(a)-1)
b = a.copy()
- for k in range(8, 0, -1):
+ for k in range(len(rc), 0, -1):
rc[k-1] = b[k]
e = 1 - rc[k-1] ** 2
b[1:k] = (b[1:k] - rc[k-1] * b[k-1:0:-1]) / e
@@ -155,6 +203,7 @@ class TnsAnalysis(Tns):
delta = np.pi / 17
rc_i = np.rint(np.arcsin(rc) / delta).astype(int) + 8
rc_q = np.sin(delta * (rc_i - 8))
+ rc_q = np.rint(rc_q * 2**15) / 2**15
rc_order = len(rc_i) - np.argmin(rc_i[::-1] == 8)
@@ -186,9 +235,12 @@ class TnsAnalysis(Tns):
y = x.copy()
self.nfilters = len(Tns.SUB_LIM[self.dt][bw])
- self.lpc_weighting = nbytes * 8 < 48 * T.DT_MS[self.dt]
+ maxorder = [ 4, 8 ][self.dt > T.DT_5M]
+
+ self.lpc_weighting = nbytes < 120 * (1 + self.dt) / 8
+
self.rc_order = np.zeros(2, dtype=np.intc)
- self.rc = np.zeros((2, 8), dtype=np.intc)
+ self.rc = np.zeros((2, maxorder), dtype=np.intc)
for f in range(self.nfilters):
@@ -258,7 +310,7 @@ class TnsSynthesis(Tns):
def load(self, b, bw, nbytes):
self.nfilters = len(Tns.SUB_LIM[self.dt][bw])
- self.lpc_weighting = nbytes * 8 < 48 * T.DT_MS[self.dt]
+ self.lpc_weighting = nbytes < 120 * (1 + self.dt) / 8
self.rc_order = np.zeros(2, dtype=np.intc)
self.rc = 8 * np.ones((2, 8), dtype=np.intc)
@@ -286,6 +338,7 @@ class TnsSynthesis(Tns):
rc_order = self.rc_order[f]
rc = np.sin((np.pi / 17) * (self.rc[f] - 8))
+ rc = np.rint(rc * 2**15) / 2**15
if rc_order > 0:
i0 = Tns.FREQ_LIM[self.dt][bw][f]
@@ -307,8 +360,9 @@ def check_analysis(rng, dt, bw):
nbytes_lim = int((48 * T.DT_MS[dt]) // 8)
for i in range(10):
- x = rng.random(T.NE[dt][bw]) * 1e2
- x = pow(x, .5 + i/5)
+ ne = T.I[dt][bw][-1]
+ x = rng.random(ne) * 1e2
+ x = pow(x, .5 + i/5)
for nn_flag in (True, False):
for nbytes in (nbytes_lim, nbytes_lim + 1):
@@ -316,14 +370,14 @@ def check_analysis(rng, dt, bw):
y = analysis.run(x, bw, nn_flag, nbytes)
(y_c, data_c) = lc3.tns_analyze(dt, bw, nn_flag, nbytes, x)
- ok = ok and data_c['nfilters'] == analysis.nfilters
ok = ok and data_c['lpc_weighting'] == analysis.lpc_weighting
+ ok = ok and data_c['nfilters'] == analysis.nfilters
for f in range(analysis.nfilters):
rc_order = analysis.rc_order[f]
rc_order_c = data_c['rc_order'][f]
rc_c = 8 + data_c['rc'][f]
ok = ok and rc_order_c == rc_order
- ok = ok and not np.any((rc_c - analysis.rc[f])[:rc_order])
+ ok = ok and not np.any(rc_c[:rc_order] - analysis.rc[f][:rc_order])
ok = ok and lc3.tns_get_nbits(data_c) == analysis.get_nbits()
ok = ok and np.amax(np.abs(y_c - y)) < 1e-2
@@ -337,77 +391,82 @@ def check_synthesis(rng, dt, bw):
for i in range(100):
- x = rng.random(T.NE[dt][bw]) * 1e2
+ ne = T.I[dt][bw][-1]
+ x = rng.random(ne) * 1e2
- synthesis.nfilters = 1 + int(bw >= T.SRATE_32K)
- synthesis.rc_order = rng.integers(0, 9, 2)
+ maxorder = [ 4, 8 ][dt > T.DT_5M]
+ synthesis.nfilters = 1 + int(dt >= T.DT_5M and bw >= T.SRATE_32K)
+ synthesis.rc_order = rng.integers(0, 1+maxorder, 2)
synthesis.rc = rng.integers(0, 17, 16).reshape(2, 8)
y = synthesis.run(x, bw)
y_c = lc3.tns_synthesize(dt, bw, synthesis.get_data(), x)
- ok = ok and np.amax(np.abs(y_c - y) < 1e-6)
+ ok = ok and np.amax(np.abs(y_c - y) < 1e-4)
return ok
def check_analysis_appendix_c(dt):
+ i0 = dt - T.DT_7M5
sr = T.SRATE_16K
+
ok = True
- fs = Tns.FREQ_LIM[dt][sr][0]
- fe = Tns.FREQ_LIM[dt][sr][1]
+ fs = Tns.FREQ_LIM[i0][sr][0]
+ fe = Tns.FREQ_LIM[i0][sr][1]
st = np.zeros(8)
- for i in range(len(C.X_S[dt])):
+ for i in range(len(C.X_S[i0])):
- (_, a) = lc3.tns_compute_lpc_coeffs(dt, sr, C.X_S[dt][i])
- ok = ok and np.amax(np.abs(a[0] - C.TNS_LEV_A[dt][i])) < 1e-5
+ (_, a) = lc3.tns_compute_lpc_coeffs(dt, sr, C.X_S[i0][i])
+ ok = ok and np.amax(np.abs(a[0] - C.TNS_LEV_A[i0][i])) < 1e-5
- rc = lc3.tns_lpc_reflection(a[0])
- ok = ok and np.amax(np.abs(rc - C.TNS_LEV_RC[dt][i])) < 1e-5
+ rc = lc3.tns_lpc_reflection(dt, a[0])
+ ok = ok and np.amax(np.abs(rc - C.TNS_LEV_RC[i0][i])) < 1e-5
- (rc_order, rc_i) = lc3.tns_quantize_rc(C.TNS_LEV_RC[dt][i])
- ok = ok and rc_order == C.RC_ORDER[dt][i][0]
- ok = ok and np.any((rc_i + 8) - C.RC_I_1[dt][i] == 0)
+ (rc_order, rc_i) = lc3.tns_quantize_rc(dt, C.TNS_LEV_RC[i0][i])
+ ok = ok and rc_order == C.RC_ORDER[i0][i][0]
+ ok = ok and np.any((rc_i + 8) - C.RC_I_1[i0][i] == 0)
rc_q = lc3.tns_unquantize_rc(rc_i, rc_order)
- ok = ok and np.amax(np.abs(rc_q - C.RC_Q_1[dt][i])) < 1e-6
+ ok = ok and np.amax(np.abs(rc_q - C.RC_Q_1[i0][i])) < 1e-6
- (x, side) = lc3.tns_analyze(dt, sr, False, C.NBYTES[dt], C.X_S[dt][i])
+ (x, side) = lc3.tns_analyze(dt, sr, False, C.NBYTES[i0], C.X_S[i0][i])
ok = ok and side['nfilters'] == 1
- ok = ok and side['rc_order'][0] == C.RC_ORDER[dt][i][0]
- ok = ok and not np.any((side['rc'][0] + 8) - C.RC_I_1[dt][i])
- ok = ok and lc3.tns_get_nbits(side) == C.NBITS_TNS[dt][i]
- ok = ok and np.amax(np.abs(x - C.X_F[dt][i])) < 1e-3
+ ok = ok and side['rc_order'][0] == C.RC_ORDER[i0][i][0]
+ ok = ok and not np.any((side['rc'][0] + 8) - C.RC_I_1[i0][i])
+ ok = ok and lc3.tns_get_nbits(side) == C.NBITS_TNS[i0][i]
+ ok = ok and np.amax(np.abs(x - C.X_F[i0][i])) < 1e-3
return ok
def check_synthesis_appendix_c(dt):
+ i0 = dt - T.DT_7M5
sr = T.SRATE_16K
+
ok = True
- for i in range(len(C.X_HAT_Q[dt])):
+ for i in range(len(C.X_HAT_Q[i0])):
side = {
'nfilters' : 1,
- 'lpc_weighting' : C.NBYTES[dt] * 8 < 48 * T.DT_MS[dt],
- 'rc_order': C.RC_ORDER[dt][i],
- 'rc': [ C.RC_I_1[dt][i] - 8, C.RC_I_2[dt][i] - 8 ]
+ 'lpc_weighting' : C.NBYTES[i0] < 120 * (1 + dt) / 8,
+ 'rc_order': C.RC_ORDER[i0][i],
+ 'rc': [ C.RC_I_1[i0][i] - 8, C.RC_I_2[i0][i] - 8 ]
}
- g_int = C.GG_IND_ADJ[dt][i] + C.GG_OFF[dt][i]
- x = C.X_HAT_Q[dt][i] * (10 ** (g_int / 28))
+ g_int = C.GG_IND_ADJ[i0][i] + C.GG_OFF[i0][i]
+ x = C.X_HAT_Q[i0][i] * (10 ** (g_int / 28))
x = lc3.tns_synthesize(dt, sr, side, x)
- ok = ok and np.amax(np.abs(x - C.X_HAT_TNS[dt][i])) < 1e-3
+ ok = ok and np.amax(np.abs(x - C.X_HAT_TNS[i0][i])) < 1e-3
+ sr = T.SRATE_48K
if dt != T.DT_10M:
return ok
- sr = T.SRATE_48K
-
side = {
'nfilters' : 2,
'lpc_weighting' : False,
@@ -427,13 +486,17 @@ def check():
ok = True
for dt in range(T.NUM_DT):
- for sr in range(T.NUM_SRATE):
+ for sr in range(T.SRATE_8K, T.SRATE_48K + 1):
ok = ok and check_analysis(rng, dt, sr)
ok = ok and check_synthesis(rng, dt, sr)
- for dt in range(T.NUM_DT):
- ok = ok and check_analysis_appendix_c(dt)
- ok = ok and check_synthesis_appendix_c(dt)
+ for dt in ( T.DT_2M5, T.DT_5M, T.DT_10M ):
+ for sr in ( T.SRATE_48K_HR, T.SRATE_96K_HR ):
+ ok = ok and check_analysis(rng, dt, sr)
+
+ for dt in ( T.DT_7M5, T.DT_10M ):
+ check_analysis_appendix_c(dt)
+ check_synthesis_appendix_c(dt)
return ok
diff --git a/test/tns_py.c b/test/tns_py.c
index cb96d02..04752cc 100644
--- a/test/tns_py.c
+++ b/test/tns_py.c
@@ -32,17 +32,18 @@ static PyObject *compute_lpc_coeffs_py(PyObject *m, PyObject *args)
if (!PyArg_ParseTuple(args, "IIO", &dt, &bw, &x_obj))
return NULL;
- CTYPES_CHECK("dt", (unsigned)dt < LC3_NUM_DT);
- CTYPES_CHECK("sr", (unsigned)bw < LC3_NUM_BANDWIDTH);
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("sr", bw < LC3_NUM_BANDWIDTH);
- int ne = LC3_NE(dt, bw);
+ int ne = lc3_ne(dt, bw);
+ int maxorder = dt <= LC3_DT_5M ? 4 : 8;
CTYPES_CHECK("x", to_1d_ptr(x_obj, NPY_FLOAT, ne, &x));
g_obj = new_1d_ptr(NPY_FLOAT, 2, &g);
a_obj = new_2d_ptr(NPY_FLOAT, 2, 9, &a);
- compute_lpc_coeffs(dt, bw, x, g, a);
+ compute_lpc_coeffs(dt, bw, maxorder, x, g, a);
return Py_BuildValue("NN", g_obj, a_obj);
}
@@ -50,15 +51,20 @@ static PyObject *compute_lpc_coeffs_py(PyObject *m, PyObject *args)
static PyObject *lpc_reflection_py(PyObject *m, PyObject *args)
{
PyObject *a_obj, *rc_obj;
+ unsigned dt;
float *a, *rc;
- if (!PyArg_ParseTuple(args, "O", &a_obj))
+ if (!PyArg_ParseTuple(args, "IO", &dt, &a_obj))
return NULL;
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+
+ int maxorder = dt <= LC3_DT_5M ? 4 : 8;
+
CTYPES_CHECK("a", to_1d_ptr(a_obj, NPY_FLOAT, 9, &a));
- rc_obj = new_1d_ptr(NPY_FLOAT, 8, &rc);
+ rc_obj = new_1d_ptr(NPY_FLOAT, maxorder, &rc);
- lpc_reflection(a, rc);
+ lpc_reflection(a, maxorder, rc);
return Py_BuildValue("N", rc_obj);
}
@@ -66,17 +72,21 @@ static PyObject *lpc_reflection_py(PyObject *m, PyObject *args)
static PyObject *quantize_rc_py(PyObject *m, PyObject *args)
{
PyObject *rc_obj, *rc_q_obj;
+ unsigned dt;
float *rc;
int rc_order, *rc_q;
- if (!PyArg_ParseTuple(args, "O", &rc_obj))
+ if (!PyArg_ParseTuple(args, "iO", &dt, &rc_obj))
return NULL;
- CTYPES_CHECK("rc", to_1d_ptr(rc_obj, NPY_FLOAT, 8, &rc));
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+
+ int maxorder = dt <= LC3_DT_5M ? 4 : 8;
+ CTYPES_CHECK("rc", to_1d_ptr(rc_obj, NPY_FLOAT, 8, &rc));
rc_q_obj = new_1d_ptr(NPY_INT, 8, &rc_q);
- quantize_rc(rc, &rc_order, rc_q);
+ quantize_rc(rc, maxorder, &rc_order, rc_q);
return Py_BuildValue("iN", rc_order, rc_q_obj);
}
@@ -105,17 +115,17 @@ static PyObject *analyze_py(PyObject *m, PyObject *args)
PyObject *x_obj;
struct lc3_tns_data data = { 0 };
unsigned dt, bw;
- int nn_flag;
- unsigned nbytes;
+ int nn_flag, nbytes;
float *x;
- if (!PyArg_ParseTuple(args, "IIpIO", &dt, &bw, &nn_flag, &nbytes, &x_obj))
+ if (!PyArg_ParseTuple(args, "IIpiO",
+ &dt, &bw, &nn_flag, &nbytes, &x_obj))
return NULL;
- CTYPES_CHECK("dt", (unsigned)dt < LC3_NUM_DT);
- CTYPES_CHECK("bw", (unsigned)bw < LC3_NUM_BANDWIDTH);
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("bw", bw < LC3_NUM_BANDWIDTH);
- int ne = LC3_NE(dt, bw);
+ int ne = lc3_ne(dt, bw);
CTYPES_CHECK("x", x_obj = to_1d_ptr(x_obj, NPY_FLOAT, ne, &x));
@@ -134,11 +144,11 @@ static PyObject *synthesize_py(PyObject *m, PyObject *args)
if (!PyArg_ParseTuple(args, "IIOO", &dt, &bw, &data_obj, &x_obj))
return NULL;
- CTYPES_CHECK("dt", (unsigned)dt < LC3_NUM_DT);
- CTYPES_CHECK("bw", (unsigned)bw < LC3_NUM_BANDWIDTH);
+ CTYPES_CHECK("dt", dt < LC3_NUM_DT);
+ CTYPES_CHECK("bw", bw < LC3_NUM_BANDWIDTH);
CTYPES_CHECK(NULL, data_obj = to_tns_data(data_obj, &data));
- int ne = LC3_NE(dt, bw);
+ int ne = lc3_ne(dt, bw);
CTYPES_CHECK("x", x_obj = to_1d_ptr(x_obj, NPY_FLOAT, ne, &x));
diff --git a/tools/dlc3.c b/tools/dlc3.c
index 109615b..8c22ba1 100644
--- a/tools/dlc3.c
+++ b/tools/dlc3.c
@@ -31,6 +31,8 @@
#include "lc3bin.h"
#include "wave.h"
+#define MAX_CHANNELS 2
+
#ifndef MIN
#define MIN(a, b) ( (a) < (b) ? (a) : (b) )
#endif
@@ -73,7 +75,7 @@ struct parameters {
static struct parameters parse_args(int argc, char *argv[])
{
static const char *usage =
- "Usage: %s [in_file] [wav_file]\n"
+ "Usage: %s [wav_file] [out_file]\n"
"\n"
"wav_file\t" "Input wave file, stdin if omitted\n"
"out_file\t" "Output bitstream file, stdout if omitted\n"
@@ -153,28 +155,31 @@ int main(int argc, char *argv[])
if (p.fname_out && (fp_out = fopen(p.fname_out, "wb")) == NULL)
error(errno, "%s", p.fname_out);
- if (p.srate_hz && !LC3_CHECK_SR_HZ(p.srate_hz))
- error(EINVAL, "Samplerate %d Hz", p.srate_hz);
-
if (p.bitdepth && p.bitdepth != 16 && p.bitdepth != 24)
error(EINVAL, "Bitdepth %d", p.bitdepth);
/* --- Check parameters --- */
- int frame_us, srate_hz, nch, nsamples;
+ int frame_us, srate_hz, nchannels, nsamples;
+ bool hrmode;
- if (lc3bin_read_header(fp_in, &frame_us, &srate_hz, &nch, &nsamples) < 0)
+ if (lc3bin_read_header(fp_in,
+ &frame_us, &srate_hz, &hrmode, &nchannels, &nsamples) < 0)
error(EINVAL, "LC3 binary input file");
- if (nch < 1 || nch > 2)
- error(EINVAL, "Number of channels %d", nch);
+ if (nchannels < 1 || nchannels > MAX_CHANNELS)
+ error(EINVAL, "Number of channels %d", nchannels);
if (!LC3_CHECK_DT_US(frame_us))
error(EINVAL, "Frame duration");
- if (!LC3_CHECK_SR_HZ(srate_hz) || (p.srate_hz && p.srate_hz < srate_hz))
+ if (!LC3_HR_CHECK_SR_HZ(hrmode, srate_hz))
error(EINVAL, "Samplerate %d Hz", srate_hz);
+ if (p.srate_hz && (!LC3_HR_CHECK_SR_HZ(hrmode, p.srate_hz) ||
+ p.srate_hz < srate_hz ))
+ error(EINVAL, "Output samplerate %d Hz", p.srate_hz);
+
int pcm_sbits = p.bitdepth;
int pcm_sbytes = pcm_sbits / 8;
@@ -183,34 +188,40 @@ int main(int argc, char *argv[])
((int64_t)nsamples * pcm_srate_hz) / srate_hz;
wave_write_header(fp_out,
- pcm_sbits, pcm_sbytes, pcm_srate_hz, nch, pcm_samples);
+ pcm_sbits, pcm_sbytes, pcm_srate_hz, nchannels, pcm_samples);
/* --- Setup decoding --- */
- uint8_t in[2 * LC3_MAX_FRAME_BYTES];
- int8_t alignas(int32_t) pcm[2 * LC3_MAX_FRAME_SAMPLES*4];
+ uint8_t in[2 * LC3_HR_MAX_FRAME_BYTES];
+ int8_t alignas(int32_t) pcm[2 * LC3_HR_MAX_FRAME_SAMPLES*4];
lc3_decoder_t dec[2];
- int frame_samples = lc3_frame_samples(frame_us, pcm_srate_hz);
+ int frame_samples = lc3_hr_frame_samples(hrmode, frame_us, pcm_srate_hz);
int encode_samples = pcm_samples +
- lc3_delay_samples(frame_us, pcm_srate_hz);
+ lc3_hr_delay_samples(hrmode, frame_us, pcm_srate_hz);
enum lc3_pcm_format pcm_fmt =
pcm_sbits == 24 ? LC3_PCM_FORMAT_S24_3LE : LC3_PCM_FORMAT_S16;
- for (int ich = 0; ich < nch; ich++)
- dec[ich] = lc3_setup_decoder(frame_us, srate_hz, p.srate_hz,
- malloc(lc3_decoder_size(frame_us, pcm_srate_hz)));
+ for (int ich = 0; ich < nchannels; ich++) {
+ dec[ich] = lc3_hr_setup_decoder(
+ hrmode, frame_us, srate_hz, p.srate_hz,
+ malloc(lc3_hr_decoder_size(hrmode, frame_us, pcm_srate_hz)));
+
+ if (!dec[ich])
+ error(EINVAL, "Decoder initialization failed");
+ }
/* --- Decoding loop --- */
static const char *dash_line = "========================================";
int nsec = 0;
+ int nerr = 0;
unsigned t0 = clock_us();
for (int i = 0; i * frame_samples < encode_samples; i++) {
- int frame_bytes = lc3bin_read_data(fp_in, nch, in);
+ int block_bytes = lc3bin_read_data(fp_in, nchannels, in);
if (floorf(i * frame_us * 1e-6) > nsec) {
@@ -223,19 +234,28 @@ int main(int argc, char *argv[])
nsec = rint(i * frame_us * 1e-6);
}
- if (frame_bytes <= 0)
- memset(pcm, 0, nch * frame_samples * pcm_sbytes);
- else
- for (int ich = 0; ich < nch; ich++)
- lc3_decode(dec[ich],
- in + ich * frame_bytes, frame_bytes,
- pcm_fmt, pcm + ich * pcm_sbytes, nch);
+ if (block_bytes <= 0)
+ memset(pcm, 0, nchannels * frame_samples * pcm_sbytes);
+ else {
+ const uint8_t *in_ptr = in;
+ for (int ich = 0; ich < nchannels; ich++) {
+ int frame_bytes = block_bytes / nchannels
+ + (ich < block_bytes % nchannels);
+
+ int res = lc3_decode(dec[ich], in_ptr, frame_bytes,
+ pcm_fmt, pcm + ich * pcm_sbytes, nchannels);
+
+ nerr += (res != 0);
+ in_ptr += frame_bytes;
+ }
+ }
int pcm_offset = i > 0 ? 0 : encode_samples - pcm_samples;
int pcm_nwrite = MIN(frame_samples - pcm_offset,
encode_samples - i*frame_samples);
- wave_write_pcm(fp_out, pcm_sbytes, pcm, nch, pcm_offset, pcm_nwrite);
+ wave_write_pcm(fp_out,
+ pcm_sbytes, pcm, nchannels, pcm_offset, pcm_nwrite);
}
unsigned t = (clock_us() - t0) / 1000;
@@ -244,9 +264,12 @@ int main(int argc, char *argv[])
fprintf(stderr, "%02d:%02d Decoded in %d.%03d seconds %20s\n",
nsec / 60, nsec % 60, t / 1000, t % 1000, "");
+ if (nerr)
+ fprintf(stderr, "Warning: Decoding of %d frames failed!\n", nerr);
+
/* --- Cleanup --- */
- for (int ich = 0; ich < nch; ich++)
+ for (int ich = 0; ich < nchannels; ich++)
free(dec[ich]);
if (fp_in != stdin)
diff --git a/tools/elc3.c b/tools/elc3.c
index 654fa7f..dec8bb0 100644
--- a/tools/elc3.c
+++ b/tools/elc3.c
@@ -31,6 +31,8 @@
#include "lc3bin.h"
#include "wave.h"
+#define MAX_CHANNELS 2
+
/**
* Error handling
@@ -60,6 +62,7 @@ struct parameters {
const char *fname_out;
float frame_ms;
int srate_hz;
+ bool hrmode;
int bitrate;
};
@@ -76,6 +79,7 @@ static struct parameters parse_args(int argc, char *argv[])
"\t-b\t" "Bitrate in bps (mandatory)\n"
"\t-m\t" "Frame duration in ms (default 10)\n"
"\t-r\t" "Encoder samplerate (default is input samplerate)\n"
+ "\t-H\t" "Enable high-resolution mode\n"
"\n";
struct parameters p = { .frame_ms = 10 };
@@ -102,6 +106,7 @@ static struct parameters parse_args(int argc, char *argv[])
case 'b': p.bitrate = atoi(optarg); break;
case 'm': p.frame_ms = atof(optarg); break;
case 'r': p.srate_hz = atoi(optarg); break;
+ case 'H': p.hrmode = true; break;
default:
error(EINVAL, "Option %s", arg);
}
@@ -152,17 +157,14 @@ int main(int argc, char *argv[])
if (p.fname_out && (fp_out = fopen(p.fname_out, "wb")) == NULL)
error(errno, "%s", p.fname_out);
- if (p.srate_hz && !LC3_CHECK_SR_HZ(p.srate_hz))
- error(EINVAL, "Samplerate %d Hz", p.srate_hz);
-
/* --- Check parameters --- */
int frame_us = p.frame_ms * 1000;
- int srate_hz, nch, nsamples;
+ int srate_hz, nchannels, nsamples;
int pcm_sbits, pcm_sbytes;
if (wave_read_header(fp_in,
- &pcm_sbits, &pcm_sbytes, &srate_hz, &nch, &nsamples) < 0)
+ &pcm_sbits, &pcm_sbytes, &srate_hz, &nchannels, &nsamples) < 0)
error(EINVAL, "Bad or unsupported WAVE input file");
if (p.bitrate <= 0)
@@ -171,7 +173,7 @@ int main(int argc, char *argv[])
if (!LC3_CHECK_DT_US(frame_us))
error(EINVAL, "Frame duration");
- if (!LC3_CHECK_SR_HZ(srate_hz) || (p.srate_hz && p.srate_hz > srate_hz))
+ if (!LC3_HR_CHECK_SR_HZ(p.hrmode, srate_hz))
error(EINVAL, "Samplerate %d Hz", srate_hz);
if (pcm_sbits != 16 && pcm_sbits != 24)
@@ -181,32 +183,52 @@ int main(int argc, char *argv[])
(pcm_sbits == 24 && pcm_sbytes != 24/8 && pcm_sbytes != 32/8))
error(EINVAL, "Sample storage on %d bytes", pcm_sbytes);
- if (nch < 1 || nch > 2)
- error(EINVAL, "Number of channels %d", nch);
+ if (nchannels < 1 || nchannels > MAX_CHANNELS)
+ error(EINVAL, "Number of channels %d", nchannels);
+
+ if (p.srate_hz && (!LC3_HR_CHECK_SR_HZ(p.hrmode, p.srate_hz) ||
+ p.srate_hz > srate_hz ))
+ error(EINVAL, "Encoder samplerate %d Hz", p.srate_hz);
int enc_srate_hz = !p.srate_hz ? srate_hz : p.srate_hz;
int enc_samples = !p.srate_hz ? nsamples :
((int64_t)nsamples * enc_srate_hz) / srate_hz;
+ int block_bytes = lc3_hr_frame_block_bytes(
+ p.hrmode, frame_us, srate_hz, nchannels, p.bitrate);
+
+ int bitrate = lc3_hr_resolve_bitrate(
+ p.hrmode, frame_us, srate_hz, block_bytes);
+
+ if (bitrate != p.bitrate)
+ fprintf(stderr, "Bitrate adjusted to %d bps\n", bitrate);
+
lc3bin_write_header(fp_out,
- frame_us, enc_srate_hz, p.bitrate, nch, enc_samples);
+ frame_us, enc_srate_hz, p.hrmode,
+ bitrate, nchannels, enc_samples);
/* --- Setup encoding --- */
- int8_t alignas(int32_t) pcm[2 * LC3_MAX_FRAME_SAMPLES*4];
- uint8_t out[2 * LC3_MAX_FRAME_BYTES];
+ int8_t alignas(int32_t) pcm[2 * LC3_HR_MAX_FRAME_SAMPLES*4];
+ uint8_t out[2 * LC3_HR_MAX_FRAME_BYTES];
lc3_encoder_t enc[2];
- int frame_bytes = lc3_frame_bytes(frame_us, p.bitrate / nch);
- int frame_samples = lc3_frame_samples(frame_us, srate_hz);
- int encode_samples = nsamples + lc3_delay_samples(frame_us, srate_hz);
+ int frame_samples = lc3_hr_frame_samples(
+ p.hrmode, frame_us, srate_hz);
+ int encode_samples = nsamples + lc3_hr_delay_samples(
+ p.hrmode, frame_us, srate_hz);
enum lc3_pcm_format pcm_fmt =
pcm_sbytes == 32/8 ? LC3_PCM_FORMAT_S24 :
pcm_sbytes == 24/8 ? LC3_PCM_FORMAT_S24_3LE : LC3_PCM_FORMAT_S16;
- for (int ich = 0; ich < nch; ich++)
- enc[ich] = lc3_setup_encoder(frame_us, enc_srate_hz, srate_hz,
- malloc(lc3_encoder_size(frame_us, srate_hz)));
+ for (int ich = 0; ich < nchannels; ich++) {
+ enc[ich] = lc3_hr_setup_encoder(
+ p.hrmode, frame_us, enc_srate_hz, srate_hz,
+ malloc(lc3_hr_encoder_size(p.hrmode, frame_us, srate_hz)));
+
+ if (!enc[ich])
+ error(EINVAL, "Encoder initialization failed");
+ }
/* --- Encoding loop --- */
@@ -217,10 +239,10 @@ int main(int argc, char *argv[])
for (int i = 0; i * frame_samples < encode_samples; i++) {
- int nread = wave_read_pcm(fp_in, pcm_sbytes, nch, frame_samples, pcm);
+ int nread = wave_read_pcm(fp_in, pcm_sbytes, nchannels, frame_samples, pcm);
- memset(pcm + nread * nch * pcm_sbytes, 0,
- nch * (frame_samples - nread) * pcm_sbytes);
+ memset(pcm + nread * nchannels * pcm_sbytes, 0,
+ nchannels * (frame_samples - nread) * pcm_sbytes);
if (floorf(i * frame_us * 1e-6) > nsec) {
float progress = fminf(
@@ -233,12 +255,19 @@ int main(int argc, char *argv[])
nsec = (int)(i * frame_us * 1e-6);
}
- for (int ich = 0; ich < nch; ich++)
+ uint8_t *out_ptr = out;
+ for (int ich = 0; ich < nchannels; ich++) {
+ int frame_bytes = block_bytes / nchannels
+ + (ich < block_bytes % nchannels);
+
lc3_encode(enc[ich],
- pcm_fmt, pcm + ich * pcm_sbytes, nch,
- frame_bytes, out + ich * frame_bytes);
+ pcm_fmt, pcm + ich * pcm_sbytes, nchannels,
+ frame_bytes, out_ptr);
+
+ out_ptr += frame_bytes;
+ }
- lc3bin_write_data(fp_out, out, nch, frame_bytes);
+ lc3bin_write_data(fp_out, out, block_bytes);
}
unsigned t = (clock_us() - t0) / 1000;
@@ -249,7 +278,7 @@ int main(int argc, char *argv[])
/* --- Cleanup --- */
- for (int ich = 0; ich < nch; ich++)
+ for (int ich = 0; ich < nchannels; ich++)
free(enc[ich]);
if (fp_in != stdin)
diff --git a/tools/lc3bin.c b/tools/lc3bin.c
index 4187808..97ae82b 100644
--- a/tools/lc3bin.c
+++ b/tools/lc3bin.c
@@ -33,7 +33,7 @@ struct lc3bin_header {
uint16_t bitrate_100bps;
uint16_t channels;
uint16_t frame_10us;
- uint16_t rfu;
+ uint16_t epmode;
uint16_t nsamples_low;
uint16_t nsamples_high;
};
@@ -43,20 +43,31 @@ struct lc3bin_header {
* Read LC3 binary header
*/
int lc3bin_read_header(FILE *fp,
- int *frame_us, int *srate_hz, int *nchannels, int *nsamples)
+ int *frame_us, int *srate_hz, bool *hrmode, int *nchannels, int *nsamples)
{
struct lc3bin_header hdr;
+ uint16_t hdr_hrmode = 0;
if (fread(&hdr, sizeof(hdr), 1, fp) != 1
- || hdr.file_id != LC3_FILE_ID)
+ || hdr.file_id != LC3_FILE_ID
+ || hdr.header_size < sizeof(hdr))
return -1;
+ int num_extended_params = (hdr.header_size - sizeof(hdr)) / sizeof(uint16_t);
+ if (num_extended_params >= 1 &&
+ fread(&hdr_hrmode, sizeof(hdr_hrmode), 1, fp) != 1)
+ return -1;
+
*nchannels = hdr.channels;
*frame_us = hdr.frame_10us * 10;
*srate_hz = hdr.srate_100hz * 100;
*nsamples = hdr.nsamples_low | (hdr.nsamples_high << 16);
+ *hrmode = hdr_hrmode != 0;
+
+ if (hdr.epmode)
+ return -1;
- fseek(fp, SEEK_SET, hdr.header_size);
+ fseek(fp, hdr.header_size, SEEK_SET);
return 0;
}
@@ -69,23 +80,26 @@ int lc3bin_read_data(FILE *fp, int nchannels, void *buffer)
uint16_t nbytes;
if (fread(&nbytes, sizeof(nbytes), 1, fp) < 1
- || nbytes > nchannels * LC3_MAX_FRAME_BYTES
- || nbytes % nchannels
+ || nbytes > nchannels * LC3_HR_MAX_FRAME_BYTES
|| fread(buffer, nbytes, 1, fp) < 1)
return -1;
- return nbytes / nchannels;
+ return nbytes;
}
/**
* Write LC3 binary header
*/
void lc3bin_write_header(FILE *fp,
- int frame_us, int srate_hz, int bitrate, int nchannels, int nsamples)
+ int frame_us, int srate_hz, bool hrmode,
+ int bitrate, int nchannels, int nsamples)
{
+ uint16_t hdr_hrmode = (hrmode != 0);
+
struct lc3bin_header hdr = {
.file_id = LC3_FILE_ID,
- .header_size = sizeof(struct lc3bin_header),
+ .header_size = sizeof(struct lc3bin_header) +
+ (hrmode ? sizeof(hdr_hrmode) : 0),
.srate_100hz = srate_hz / 100,
.bitrate_100bps = bitrate / 100,
.channels = nchannels,
@@ -95,16 +109,18 @@ void lc3bin_write_header(FILE *fp,
};
fwrite(&hdr, sizeof(hdr), 1, fp);
+
+ if (hrmode)
+ fwrite(&hdr_hrmode, sizeof(hdr_hrmode), 1, fp);
}
/**
* Write LC3 block of data
*/
-void lc3bin_write_data(FILE *fp,
- const void *data, int nchannels, int frame_bytes)
+void lc3bin_write_data(FILE *fp, const void *data, int nbytes)
{
- uint16_t nbytes = nchannels * frame_bytes;
- fwrite(&nbytes, sizeof(nbytes), 1, fp);
+ uint16_t hdr_nbytes = nbytes;
+ fwrite(&hdr_nbytes, sizeof(hdr_nbytes), 1, fp);
fwrite(data, 1, nbytes, fp);
}
diff --git a/tools/lc3bin.h b/tools/lc3bin.h
index b2d70e6..3eccb37 100644
--- a/tools/lc3bin.h
+++ b/tools/lc3bin.h
@@ -29,19 +29,21 @@
* fp Opened file, moved after header on return
* frame_us Return frame duration, in us
* srate_hz Return samplerate, in Hz
+ * hrmode Return true when high-resolution mode enabled
* nchannels Return number of channels
* nsamples Return count of source samples by channels
* return 0: Ok -1: Bad LC3 File
*/
int lc3bin_read_header(FILE *fp,
- int *frame_us, int *srate_hz, int *nchannels, int *nsamples);
+ int *frame_us, int *srate_hz, bool *hrmode,
+ int *nchannels, int *nsamples);
/**
* Read LC3 block of data
* fp Opened file
* nchannels Number of channels
- * buffer Output buffer of `nchannels * LC3_MAX_FRAME_BYTES`
- * return Size of each 'nchannels` frames, -1 on error
+ * buffer Output buffer of `nchannels * LC3_HR_MAX_FRAME_BYTES`
+ * return Size of the frames block, -1 on error
*/
int lc3bin_read_data(FILE *fp, int nchannels, void *buffer);
@@ -50,22 +52,22 @@ int lc3bin_read_data(FILE *fp, int nchannels, void *buffer);
* fp Opened file, moved after header on return
* frame_us Frame duration, in us
* srate_hz Samplerate, in Hz
+ * hrmode True when high-resolution mode enabled
* bitrate Bitrate indication of the stream, in bps
* nchannels Number of channels
* nsamples Count of source samples by channels
*/
void lc3bin_write_header(FILE *fp,
- int frame_us, int srate_hz, int bitrate, int nchannels, int nsamples);
+ int frame_us, int srate_hz, bool hrmode,
+ int bitrate, int nchannels, int nsamples);
/**
* Write LC3 block of data
* fp Opened file
* data The frames data
- * nchannels Number of channels
- * frame_bytes Size of each `nchannels` frames
+ * nbytes Size of the frames block
*/
-void lc3bin_write_data(FILE *fp,
- const void *data, int nchannels, int frame_bytes);
+void lc3bin_write_data(FILE *fp, const void *data, int nbytes);
#endif /* __LC3BIN_H */
diff --git a/tools/makefile.mk b/tools/makefile.mk
index cc19c29..61d1f97 100644
--- a/tools/makefile.mk
+++ b/tools/makefile.mk
@@ -19,9 +19,8 @@ elc3_src += \
$(TOOLS_DIR)/lc3bin.c \
$(TOOLS_DIR)/wave.c
-elc3_lib += liblc3
-elc3_ldlibs += m
-elc3_ldflags += -flto
+elc3_ldlibs += lc3 m
+elc3_dependencies += liblc3
$(eval $(call add-bin,elc3))
@@ -31,9 +30,8 @@ dlc3_src += \
$(TOOLS_DIR)/lc3bin.c \
$(TOOLS_DIR)/wave.c
-dlc3_lib += liblc3
-dlc3_ldlibs += m
-elc3_ldflags += -flto
+dlc3_ldlibs += lc3 m
+dlc3_dependencies += liblc3
$(eval $(call add-bin,dlc3))
diff --git a/tools/meson.build b/tools/meson.build
index 8d0cf49..5da77e7 100644
--- a/tools/meson.build
+++ b/tools/meson.build
@@ -24,9 +24,11 @@ lc3toolslib = static_library('lc3toolslib',
executable('elc3', ['elc3.c'],
link_with : lc3toolslib,
include_directories: inc,
- install: true)
+ install: true,
+ install_rpath: join_paths(get_option('prefix'), get_option('libdir')))
executable('dlc3', ['dlc3.c'],
link_with : lc3toolslib,
include_directories: inc,
- install: true)
+ install: true,
+ install_rpath: join_paths(get_option('prefix'), get_option('libdir')))
diff --git a/tools/wave.c b/tools/wave.c
index bdff777..126f913 100644
--- a/tools/wave.c
+++ b/tools/wave.c
@@ -49,7 +49,7 @@ struct wave_file {
* Audio format statement
* | id WAVE_FORMAT_ID
* | size Size of the block - 8 bytes (= 16 bytes)
- * | format WAVE_FORMAT_PCM
+ * | format WAVE_FORMAT_PCM or WAVE_FORMAT_EXT
* | channels Number of channels
* | samplerate Sampling rate
* | byterate Bytes per secondes = `samplerate * framesize`
@@ -58,7 +58,8 @@ struct wave_file {
*/
#define WAVE_FORMAT_ID __WAVE_ID("fmt ")
-#define WAVE_FORMAT_PCM 1
+#define WAVE_FORMAT_PCM 0x0001
+#define WAVE_FORMAT_EXT 0xfffe
struct wave_format {
uint32_t id;
@@ -103,7 +104,8 @@ int wave_read_header(FILE *fp, int *bitdepth, int *samplesize,
if (fread(&format, sizeof(format), 1, fp) != 1
|| format.id != WAVE_FORMAT_ID
- || format.fmt != WAVE_FORMAT_PCM
+ || ( format.fmt != WAVE_FORMAT_PCM &&
+ format.fmt != WAVE_FORMAT_EXT )
|| format.channels <= 0
|| format.samplerate <= 0
|| format.framesize <= 0
@@ -112,9 +114,11 @@ int wave_read_header(FILE *fp, int *bitdepth, int *samplesize,
fseek(fp, sizeof(format) - (8 + format.size), SEEK_CUR);
- if (fread(&data, sizeof(data), 1, fp) != 1
- || data.id != WAVE_DATA_ID)
- return -1;
+ for ( ; fread(&data, sizeof(data), 1, fp) == 1 && data.id != WAVE_DATA_ID
+ ; fseek(fp, data.size, SEEK_CUR) );
+
+ if (feof(fp))
+ return -1;
*bitdepth = format.bitdepth;
*samplesize = format.framesize / format.channels;
diff --git a/wasm/math.h b/wasm/math.h
new file mode 100644
index 0000000..f004338
--- /dev/null
+++ b/wasm/math.h
@@ -0,0 +1,37 @@
+/******************************************************************************
+ *
+ * Copyright 2024 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#ifndef __LC3_MATH_H
+#define __LC3_MATH_H
+
+#define INFINITY __builtin_inff()
+
+#define floorf __builtin_floorf
+#define truncf __builtin_truncf
+
+static inline float roundf(float x)
+{ return x >= 0 ? truncf(x + 0.5f) : truncf(x - 0.5f); }
+
+#define fabsf __builtin_fabsf
+#define fmaxf __builtin_fmaxf
+#define fminf __builtin_fminf
+
+#define log10f __builtin_log10f
+#define sqrtf __builtin_sqrtf
+
+#endif /* __LC3_MATH_H */
diff --git a/wasm/string.h b/wasm/string.h
new file mode 100644
index 0000000..bab773c
--- /dev/null
+++ b/wasm/string.h
@@ -0,0 +1,28 @@
+/******************************************************************************
+ *
+ * Copyright 2024 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************/
+
+#ifndef __LC3_STRING_H
+#define __LC3_STRING_H
+
+#define NULL ( (void *)0 )
+
+#define memcpy __builtin_memcpy
+#define memmove __builtin_memmove
+#define memset __builtin_memset
+
+#endif /* __LC3_STRING_H */