diff options
author | Antoine SOULIER <asoulier@google.com> | 2024-04-19 22:26:09 +0000 |
---|---|---|
committer | Antoine SOULIER <asoulier@google.com> | 2024-04-19 22:27:02 +0000 |
commit | 14b520ba8456d59b5c025a09bc36b28fbc7a6f0e (patch) | |
tree | feb02f7c8c2d7ee6bb71744c562b1e236f8e1d5b | |
parent | 0f952b34e098b9f8fd17fd861b465be6b06b5eb6 (diff) | |
parent | 73bbc00245d9874ef3e8bc8ef6476e6fee9f42aa (diff) | |
download | liblc3-14b520ba8456d59b5c025a09bc36b28fbc7a6f0e.tar.gz |
Merge remote-tracking branch 'aosp/upstream-main' into liblc3
Change-Id: I49a76c30f75233fbb4c48ab3a0782d7d9f1e9855
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 . @@ -1,5 +1,6 @@ .* !.gitignore +!.github bin build test/build @@ -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 } @@ -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) @@ -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>Δ<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>Δ<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>Δ<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>Δ<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 Binary files differnew file mode 100644 index 0000000..f85d12f --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_48kHz_300.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..cecc4ac --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_48kHz_500.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..5242f5e --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_96kHz_300.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..2150daa --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_decode_10.0ms_96kHz_500.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..a6c593c --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_48kHz_400.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..03af175 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_48kHz_672.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..5406b66 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_96kHz_400.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..298557d --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_decode_2.5ms_96kHz_672.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..530b42c --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_48kHz_400.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..2f35bdf --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_48kHz_600.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..df4cf78 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_96kHz_400.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..3c7373b --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_decode_5.0ms_96kHz_600.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..21c6741 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_48kHz_300.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..b513627 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_48kHz_500.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..164992a --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_96kHz_300.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..dcfa3a3 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_10.0ms_96kHz_500.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..ce0117f --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_48kHz_400.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..a734ab2 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_48kHz_672.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..94ba5c0 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_96kHz_400.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..50649ff --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_2.5ms_96kHz_672.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..462d399 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_48kHz_400.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..848352b --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_48kHz_600.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..e665b8c --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_96kHz_400.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..be94386 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encdec_5.0ms_96kHz_600.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..cf67673 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_48kHz_300.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..28ab721 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_48kHz_500.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..327f3f2 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_96kHz_300.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..756665f --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encode_10.0ms_96kHz_500.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..d380ed1 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_48kHz_400.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..bc151cd --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_48kHz_672.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..483791b --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_96kHz_400.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..9dbb80b --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encode_2.5ms_96kHz_672.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..fe792bf --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_48kHz_400.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..8295f31 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_48kHz_600.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..c8b52f6 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_96kHz_400.0kbps.png 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 Binary files differnew file mode 100644 index 0000000..3428255 --- /dev/null +++ b/conformance/png_liblc3-hr-precision/thd+n_encode_5.0ms_96kHz_600.0kbps.png 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 @@ -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 --- */ @@ -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 --- */ @@ -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](<pf->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); @@ -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 @@ -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; @@ -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) @@ -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); @@ -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 @@ -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]; @@ -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); @@ -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); @@ -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]; /** @@ -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; } @@ -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, <pf)); - 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 */ |