diff --git a/doc/g191.md b/doc/g191.md index 0e1b76e..3a92b3c 100644 --- a/doc/g191.md +++ b/doc/g191.md @@ -26,6 +26,8 @@ This edition introduces changes to Annex A, which describes the ITU-T Software T * SHQ2/SHQ3 half-band and HP50 high-pass FIR filters +* P.863/P.863.2 resampling FIR filters for rate-change factors 2, 3, 4 and 6 (as published in ETSI TR 103 138) + * Cross-platform portability fixes with expanded CTest regression coverage Recommendation ITU-T G.191 includes an electronic attachment containing STL2026 and manual. diff --git a/doc/g191_Annex_A.md b/doc/g191_Annex_A.md index 925496d..e84c61f 100644 --- a/doc/g191_Annex_A.md +++ b/doc/g191_Annex_A.md @@ -94,6 +94,14 @@ The functions included are as follows: | `shq_down_3_to_1_init` | initialize 3:1 SHQ down-sampling filter. | | `hp50_32khz_init` | initialize 50-Hz high-pass filter (32-kHz sampling). | | `hp50_48khz_init` | initialize 50-Hz high-pass filter (48-kHz sampling). | +| `p863_up_1_to_2_init` | initialize P.863/P.863.2 resampling 1:2 up-sampling filter (256 taps). | +| `p863_down_2_to_1_init` | initialize P.863/P.863.2 resampling 2:1 down-sampling filter (256 taps). | +| `p863_up_1_to_3_init` | initialize P.863/P.863.2 resampling 1:3 up-sampling filter (384 taps). | +| `p863_down_3_to_1_init` | initialize P.863/P.863.2 resampling 3:1 down-sampling filter (384 taps). | +| `p863_up_1_to_4_init` | initialize P.863/P.863.2 resampling 1:4 up-sampling filter (512 taps). | +| `p863_down_4_to_1_init` | initialize P.863/P.863.2 resampling 4:1 down-sampling filter (512 taps). | +| `p863_up_1_to_6_init` | initialize P.863/P.863.2 resampling 1:6 up-sampling filter (768 taps). | +| `p863_down_6_to_1_init` | initialize P.863/P.863.2 resampling 6:1 down-sampling filter (768 taps). | | `hq_kernel` | FIR filtering function. | | `hq_reset` | clear state variables. | | `hq_free` | deallocate FIR-filter memory. | diff --git a/doc/manual/rate.tex b/doc/manual/rate.tex index 8f06d7f..584710c 100644 --- a/doc/manual/rate.tex +++ b/doc/manual/rate.tex @@ -550,6 +550,8 @@ \subsection{FIR module} High-pass filters with 50 Hz cutoff frequency (3\,dB point) for the 32 and 48 kHz sampling rates (HP50\_32K with 1119 coefficients and HP50\_48K with 1679 coefficients) are also provided. Their frequency response is given in figure \ref{hp50}. +Resampling filters as used in ITU-T Rec.\ P.863 (POLQA) and ITU-T Rec.\ P.863.2 (PAMD), also published in ETSI TR~103~138, are provided for rate-change factors 2, 3, 4 and~6 (with 256, 384, 512 and 768 taps, respectively). These filters use a normalized cutoff frequency of~0.475 and are intended for standardized resampling of speech signals between sampling rates of 8, 16 and~48~kHz. + Since the digital filters have memory, state variables are needed. In this version of the STL, a type {\tt SCD\_FIR} is defined, containing the past sample memory, as well as filter coefficients and other control @@ -1245,6 +1247,14 @@ \subsection{FIR module} SCD\_FIR *LP12\_48kHz\_init (void);\\ SCD\_FIR *LP14\_48kHz\_init (void);\\ SCD\_FIR *L20\_48kHz\_init (void);\\ +SCD\_FIR *p863\_up\_1\_to\_2\_init (void);\\ +SCD\_FIR *p863\_down\_2\_to\_1\_init (void);\\ +SCD\_FIR *p863\_up\_1\_to\_3\_init (void);\\ +SCD\_FIR *p863\_down\_3\_to\_1\_init (void);\\ +SCD\_FIR *p863\_up\_1\_to\_4\_init (void);\\ +SCD\_FIR *p863\_down\_4\_to\_1\_init (void);\\ +SCD\_FIR *p863\_up\_1\_to\_6\_init (void);\\ +SCD\_FIR *p863\_down\_6\_to\_1\_init (void);\\ } @@ -1463,6 +1473,46 @@ \subsection{FIR module} point for this filter is located at approximately 20000 Hz. Code is in file {\tt fir-LP.c}. +{\tt p863\_up\_1\_to\_2\_init} is the initialization routine for the +P.863/P.863.2 resampling FIR up-sampling filter by a factor of~2 +(256~taps, normalized cutoff frequency 0.475). Code is in file {\tt +fir-resamp.c}. + +{\tt p863\_down\_2\_to\_1\_init} is the initialization routine for the +P.863/P.863.2 resampling FIR down-sampling filter by a factor of~2 +(256~taps, normalized cutoff frequency 0.475). Code is in file {\tt +fir-resamp.c}. + +{\tt p863\_up\_1\_to\_3\_init} is the initialization routine for the +P.863/P.863.2 resampling FIR up-sampling filter by a factor of~3 +(384~taps, normalized cutoff frequency 0.475). Code is in file {\tt +fir-resamp.c}. + +{\tt p863\_down\_3\_to\_1\_init} is the initialization routine for the +P.863/P.863.2 resampling FIR down-sampling filter by a factor of~3 +(384~taps, normalized cutoff frequency 0.475). Code is in file {\tt +fir-resamp.c}. + +{\tt p863\_up\_1\_to\_4\_init} is the initialization routine for the +P.863/P.863.2 resampling FIR up-sampling filter by a factor of~4 +(512~taps, normalized cutoff frequency 0.475). Code is in file {\tt +fir-resamp.c}. + +{\tt p863\_down\_4\_to\_1\_init} is the initialization routine for the +P.863/P.863.2 resampling FIR down-sampling filter by a factor of~4 +(512~taps, normalized cutoff frequency 0.475). Code is in file {\tt +fir-resamp.c}. + +{\tt p863\_up\_1\_to\_6\_init} is the initialization routine for the +P.863/P.863.2 resampling FIR up-sampling filter by a factor of~6 +(768~taps, normalized cutoff frequency 0.475). Code is in file {\tt +fir-resamp.c}. + +{\tt p863\_down\_6\_to\_1\_init} is the initialization routine for the +P.863/P.863.2 resampling FIR down-sampling filter by a factor of~6 +(768~taps, normalized cutoff frequency 0.475). Code is in file {\tt +fir-resamp.c}. + \rulex{1mm} diff --git a/src/fir/CMakeLists.txt b/src/fir/CMakeLists.txt index 904150a..dfc767d 100644 --- a/src/fir/CMakeLists.txt +++ b/src/fir/CMakeLists.txt @@ -2,13 +2,13 @@ include_directories(../iir) include_directories(../utl) -add_executable(filter filter.c fir-dsm.c fir-flat.c fir-irs.c fir-lib.c fir-pso.c fir-tia.c fir-hirs.c fir-wb.c fir-msin.c fir-LP.c ../iir/iir-lib.c ../iir/iir-g712.c ../iir/iir-dir.c ../iir/iir-flat.c ../utl/ugst-utl.c ../utl/wav_io.c) +add_executable(filter filter.c fir-dsm.c fir-flat.c fir-irs.c fir-lib.c fir-pso.c fir-tia.c fir-hirs.c fir-wb.c fir-msin.c fir-LP.c fir-resamp.c ../iir/iir-lib.c ../iir/iir-g712.c ../iir/iir-dir.c ../iir/iir-flat.c ../utl/ugst-utl.c ../utl/wav_io.c) target_link_libraries(filter ${M_LIBRARY}) -add_executable(flt fltresp.c fir-dsm.c fir-flat.c fir-irs.c fir-lib.c fir-pso.c fir-tia.c fir-hirs.c fir-wb.c fir-msin.c fir-LP.c ../iir/iir-lib.c ../iir/iir-g712.c ../iir/iir-dir.c ../iir/iir-flat.c) +add_executable(flt fltresp.c fir-dsm.c fir-flat.c fir-irs.c fir-lib.c fir-pso.c fir-tia.c fir-hirs.c fir-wb.c fir-msin.c fir-LP.c fir-resamp.c ../iir/iir-lib.c ../iir/iir-g712.c ../iir/iir-dir.c ../iir/iir-flat.c) target_link_libraries(flt ${M_LIBRARY}) -add_executable(firdemo firdemo.c fir-dsm.c fir-flat.c fir-irs.c fir-lib.c fir-pso.c fir-tia.c fir-hirs.c fir-wb.c fir-msin.c fir-LP.c ../iir/iir-lib.c ../iir/iir-g712.c ../iir/iir-dir.c ../iir/iir-flat.c ../utl/ugst-utl.c ../utl/wav_io.c) +add_executable(firdemo firdemo.c fir-dsm.c fir-flat.c fir-irs.c fir-lib.c fir-pso.c fir-tia.c fir-hirs.c fir-wb.c fir-msin.c fir-LP.c fir-resamp.c ../iir/iir-lib.c ../iir/iir-g712.c ../iir/iir-dir.c ../iir/iir-flat.c ../utl/ugst-utl.c ../utl/wav_io.c) target_link_libraries(firdemo ${M_LIBRARY}) #Test: FIR @@ -177,3 +177,60 @@ add_test(filter30-verify ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv add_test(filter31 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/filter -q HP50_48KHZ test_data/test.src test_data/test-hp50-48khz.flt) add_test(filter31-verify ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/test-hp50-48khz.flt test_data/test-hp50-48khz.ref) + +#Test: P863 resampling filters (raw PCM) +add_test(filter-p863-48to16 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/filter -q -down P863_3 test_data/p863_48k_in.raw test_data/p863_48k_to_16k.tst) +add_test(filter-p863-48to16-verify ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/p863_48k_to_16k.tst test_data/p863_48k_to_16k.raw) + +add_test(filter-p863-48to8 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/filter -q -down P863_6 test_data/p863_48k_in.raw test_data/p863_48k_to_8k.tst) +add_test(filter-p863-48to8-verify ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/p863_48k_to_8k.tst test_data/p863_48k_to_8k.raw) + +add_test(filter-p863-8to16 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/filter -q -up P863_2 test_data/p863_8k_in.raw test_data/p863_8k_to_16k.tst) +add_test(filter-p863-8to16-verify ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/p863_8k_to_16k.tst test_data/p863_8k_to_16k.raw) + +add_test(filter-p863-8to48 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/filter -q -up P863_6 test_data/p863_8k_in.raw test_data/p863_8k_to_48k.tst) +add_test(filter-p863-8to48-verify ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/p863_8k_to_48k.tst test_data/p863_8k_to_48k.raw) + +#Test: P863 resampling filters (WAV) +add_test(filter-p863-48to16-wav ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/filter -q -down P863_3 test_data/p863_48k_in.wav test_data/p863_48k_to_16k_tst.wav) +add_test(filter-p863-48to16-wav-verify ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/p863_48k_to_16k_tst.wav test_data/p863_48k_to_16k.wav) + +add_test(filter-p863-48to8-wav ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/filter -q -down P863_6 test_data/p863_48k_in.wav test_data/p863_48k_to_8k_tst.wav) +add_test(filter-p863-48to8-wav-verify ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/p863_48k_to_8k_tst.wav test_data/p863_48k_to_8k.wav) + +add_test(filter-p863-8to16-wav ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/filter -q -up P863_2 test_data/p863_8k_in.wav test_data/p863_8k_to_16k_tst.wav) +add_test(filter-p863-8to16-wav-verify ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/p863_8k_to_16k_tst.wav test_data/p863_8k_to_16k.wav) + +add_test(filter-p863-8to48-wav ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/filter -q -up P863_6 test_data/p863_8k_in.wav test_data/p863_8k_to_48k_tst.wav) +add_test(filter-p863-8to48-wav-verify ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/p863_8k_to_48k_tst.wav test_data/p863_8k_to_48k.wav) + +set_tests_properties( + filter-p863-48to16 filter-p863-48to16-verify + filter-p863-48to8 filter-p863-48to8-verify + filter-p863-8to16 filter-p863-8to16-verify + filter-p863-8to48 filter-p863-8to48-verify + filter-p863-48to16-wav filter-p863-48to16-wav-verify + filter-p863-48to8-wav filter-p863-48to8-wav-verify + filter-p863-8to16-wav filter-p863-8to16-wav-verify + filter-p863-8to48-wav filter-p863-8to48-wav-verify + PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + +#Test: P863 cross-validation (raw output vs WAV reference, WAV output vs raw reference) +add_test(filter-p863-48to16-cross-raw2wav ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/p863_48k_to_16k.tst test_data/p863_48k_to_16k.wav) +add_test(filter-p863-48to16-cross-wav2raw ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/p863_48k_to_16k_tst.wav test_data/p863_48k_to_16k.raw) + +add_test(filter-p863-48to8-cross-raw2wav ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/p863_48k_to_8k.tst test_data/p863_48k_to_8k.wav) +add_test(filter-p863-48to8-cross-wav2raw ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/p863_48k_to_8k_tst.wav test_data/p863_48k_to_8k.raw) + +add_test(filter-p863-8to16-cross-raw2wav ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/p863_8k_to_16k.tst test_data/p863_8k_to_16k.wav) +add_test(filter-p863-8to16-cross-wav2raw ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/p863_8k_to_16k_tst.wav test_data/p863_8k_to_16k.raw) + +add_test(filter-p863-8to48-cross-raw2wav ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/p863_8k_to_48k.tst test_data/p863_8k_to_48k.wav) +add_test(filter-p863-8to48-cross-wav2raw ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/signal-diff -q -equiv 1 test_data/p863_8k_to_48k_tst.wav test_data/p863_8k_to_48k.raw) + +set_tests_properties( + filter-p863-48to16-cross-raw2wav filter-p863-48to16-cross-wav2raw + filter-p863-48to8-cross-raw2wav filter-p863-48to8-cross-wav2raw + filter-p863-8to16-cross-raw2wav filter-p863-8to16-cross-wav2raw + filter-p863-8to48-cross-raw2wav filter-p863-8to48-cross-wav2raw + PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/src/fir/filter.c b/src/fir/filter.c index d8abcb8..54a0439 100644 --- a/src/fir/filter.c +++ b/src/fir/filter.c @@ -209,7 +209,11 @@ int valid_filter (char *F_type, char modified_IRS) { // FILTER_12k48k_HW || strncmp (F_type, "LP12", 4) == 0 || strncmp (F_type, "lp12", 4) == 0 // FILTER_12k48k_HW - || strncmp (F_type, "LP14", 4) == 0 || strncmp (F_type, "lp14", 4) == 0 || strncmp (F_type, "LP20", 4) == 0 || strncmp (F_type, "lp20", 4) == 0 || strncmp (F_type, "hp50_32khz", 10) == 0 || strncmp (F_type, "HP50_32KHZ", 10) == 0 || strncmp (F_type, "hp50_48khz", 10) == 0 || strncmp (F_type, "HP50_48KHZ", 10) == 0) + || strncmp (F_type, "LP14", 4) == 0 || strncmp (F_type, "lp14", 4) == 0 || strncmp (F_type, "LP20", 4) == 0 || strncmp (F_type, "lp20", 4) == 0 || strncmp (F_type, "hp50_32khz", 10) == 0 || strncmp (F_type, "HP50_32KHZ", 10) == 0 || strncmp (F_type, "hp50_48khz", 10) == 0 || strncmp (F_type, "HP50_48KHZ", 10) == 0 + || strncmp (F_type, "p863_2", 6) == 0 || strncmp (F_type, "P863_2", 6) == 0 + || strncmp (F_type, "p863_3", 6) == 0 || strncmp (F_type, "P863_3", 6) == 0 + || strncmp (F_type, "p863_4", 6) == 0 || strncmp (F_type, "P863_4", 6) == 0 + || strncmp (F_type, "p863_6", 6) == 0 || strncmp (F_type, "P863_6", 6) == 0) valid = 1; /* No MOD-IRS filter at 8 kHz */ @@ -297,7 +301,11 @@ void display_usage () { printf (" HP50_32KHZ 50 Hz highpass FIR filter w/ factor 1:1 at sf=32kHz, 1119 coefs\n"); printf (" HP50_48KHZ 50 Hz highpass FIR filter w/ factor 1:1 at sf=48kHz, 1679 coefs\n"); printf (" SHQ2 FIR (Super High quality : 729 coefs, -80dB) low-pass for factor 1:2 (up) or 2:1(down)\n"); - printf (" SHQ3 FIR (Super High quality : 729 coefs, -80dB) low-pass for factor 1:3 (up) or 3:1(down)\n\n"); + printf (" SHQ3 FIR (Super High quality : 729 coefs, -80dB) low-pass for factor 1:3 (up) or 3:1(down)\n"); + printf (" P863_2 P.863/P.863.2 resampling filter for factor 1:2 (up) or 2:1 (down)\n"); + printf (" P863_3 P.863/P.863.2 resampling filter for factor 1:3 (up) or 3:1 (down)\n"); + printf (" P863_4 P.863/P.863.2 resampling filter for factor 1:4 (up) or 4:1 (down)\n"); + printf (" P863_6 P.863/P.863.2 resampling filter for factor 1:6 (up) or 6:1 (down)\n\n"); /* Quit program */ exit (-128); @@ -685,6 +693,34 @@ int main (int argc, char *argv[]) { fir_state = hp50_48khz_init (); } + /* + * Filter type: P863 - P.863/P.863.2 resampling filters + * P863_2: factor 1:2 (up) or 2:1 (down) + * P863_3: factor 1:3 (up) or 3:1 (down) + * P863_4: factor 1:4 (up) or 4:1 (down) + * P863_6: factor 1:6 (up) or 6:1 (down) + */ + else if (strncmp (F_type, "p863_", 5) == 0 || strncmp (F_type, "P863_", 5) == 0) { + int f = atoi (&F_type[5]); + if (upsample) { + switch (f) { + case 2: fir_state = p863_up_1_to_2_init (); break; + case 3: fir_state = p863_up_1_to_3_init (); break; + case 4: fir_state = p863_up_1_to_4_init (); break; + case 6: fir_state = p863_up_1_to_6_init (); break; + default: error_terminate ("P863: factor must be 2, 3, 4, or 6\n", 15); + } + } else { + switch (f) { + case 2: fir_state = p863_down_2_to_1_init (); break; + case 3: fir_state = p863_down_3_to_1_init (); break; + case 4: fir_state = p863_down_4_to_1_init (); break; + case 6: fir_state = p863_down_6_to_1_init (); break; + default: error_terminate ("P863: factor must be 2, 3, 4, or 6\n", 15); + } + } + } + /* * Filter type: PCM - Standard PCM quality 2:1 or 1:2 factor: * . fs == 8000 -> upsample: 1:2 diff --git a/src/fir/fir-resamp.c b/src/fir/fir-resamp.c new file mode 100644 index 0000000..381275e --- /dev/null +++ b/src/fir/fir-resamp.c @@ -0,0 +1,374 @@ +/* 11.Jun.2026 + ============================================================================= + MODULE: FIRFLT, HIGH QUALITY FIR UP/DOWN-SAMPLING FILTER + Sub-unit: P.863/P.863.2 resampling filter coefficients + + DESCRIPTION: + Resampling (up- and down-sampling) filter coefficients as used + internally in ITU-T Rec. P.863 (POLQA) and ITU-T Rec. P.863.2 + (PAMD), also published in ETSI TR 103 138. + + Parameters: + Up-/Down-sampling factor : 2, 3, 4, 6 + Normalized cutoff frequency : 0.475 + Taps length : 256, 384, 512, 768 + + FUNCTIONS: + = p863_up_1_to_2_init() : upsample by 2 + = p863_down_2_to_1_init() : downsample by 2 + = p863_up_1_to_3_init() : upsample by 3 + = p863_down_3_to_1_init() : downsample by 3 + = p863_up_1_to_4_init() : upsample by 4 + = p863_down_4_to_1_init() : downsample by 4 + = p863_up_1_to_6_init() : upsample by 6 + = p863_down_6_to_1_init() : downsample by 6 + + HISTORY: + 11.Jun.2026 v1.0 Initial version with P.863/P.863.2 coefficients + ============================================================================= +*/ + +#include +#include "firflt.h" + +/* Prototype for fir_initialization (local to FIR module) */ +extern SCD_FIR *fir_initialization(long lenh0, float h0[], double gain, + long idwnup, int hswitch); + +/* ===== Factor 2 coefficients (256 taps) ===== */ +#define P863_LEN2 256 +static float p863_coeff_2[P863_LEN2] = { + 0, 0, -6.5763719827429698e-010f, -1.774023861733666e-009f, 1.2414749056730942e-008f, 1.9906123506125452e-008f, -5.9510076264774008e-008f, -9.6687532645616197e-008f, 1.66884257199444e-007f, 3.1237237262031871e-007f, -3.3983941493666253e-007f, + -7.8779955361649331e-007f, 5.3948551236313662e-007f, 1.6771858427505528e-006f, -6.5717878611679203e-007f, -3.1498182198772881e-006f, 4.9176438991917664e-007f, 5.3605197242465177e-006f, 2.6627472229717859e-007f, -8.4100490156544121e-006f, + -2.0397385098007832e-006f, 1.2297920626484224e-005f, 5.3551467039425532e-006f, -1.6871391475782036e-005f, -1.0815998060702207e-005f, 2.1775438559660563e-005f, 1.9057372869734062e-005f, -2.6409347486383157e-005f, -3.0681905607647534e-005f, + 2.9895950025429203e-005f, 4.6178861973460251e-005f, -3.1069520438032896e-005f, -6.5829851372446374e-005f, 2.8487821667709268e-005f, 8.9606465148413245e-005f, -2.0472772075678042e-005f, -0.00011706671809786473f, 5.1827046362012261e-006f, + 0.0001472584530757325f, 1.9282727971246898e-005f, -0.00017863872344900064f, -5.4746194835846432e-005f, 0.00020901849289291851f, 0.0001027885187579864f, -0.00023554171126832167f, -0.00016456285423100214f, 0.00025470689810904595f, + 0.00024059577819139221f, -0.00026243778983911883f, -0.00033058600417171713f, 0.00025420742334478951f, 0.00043321314468742269f, -0.00022521731907383636f, -0.00054597008359065545f, 0.00017063031310737982f, 0.00066503295722125297f, + -8.5852225867947491e-005f, -0.00078518239225245973f, -3.314587132453256e-005f, 0.00089978846282958065f, 0.0001894763205778044f, -0.0010008698109676916f, -0.00038496894666652844f, 0.0010792345735753637f, 0.00061980740254703639f, + -0.0011247072787871168f, -0.00089218632521024968f, 0.0011264418632411625f, 0.0011980086053723093f, -0.0010733166126649849f, -0.0015306418300333473f, 0.00095440236729098216f, 0.0018807516238043274f, -0.00075949101257426059f, + -0.0022362271693290958f, 0.00047966735940588935f, 0.0025822106579300812f, -0.00010790427373140747f, -0.0029012378877155813f, -0.00036034139785756989f, 0.0031734918095996751f, 0.00092655569989163675f, -0.0033771646737769767f, + -0.0015886405747488589f, 0.0034889177121195229f, 0.0023404544854695236f, -0.0034844201489225525f, -0.0031714384762093445f, 0.0033389418457091574f, 0.0040663397971393506f, -0.0030279660137300175f, -0.0050050371670088464f, + 0.0025277799060584578f, 0.0059624608057177722f, -0.0018159915800828521f, -0.0069085856029574037f, 0.00087190838226179287f, 0.0078084554717001839f, 0.00032330475586840607f, -0.0086221678375741368f, -0.0017867964974218652f, + 0.0093047031940857849f, 0.0035346851016972076f, -0.0098054137618684718f, -0.0055834365845588117f, 0.010066863561789697f, 0.0079523551931751733f, -0.010022489589275232f, -0.010667874162915635f, 0.0095921202839666011f, 0.013770944722886543f, + -0.0086734861247152375f, -0.017330147658877984f, 0.007125840656877094f, 0.021466256724857198f, -0.0047368917723037965f, -0.02640196067996621f, 0.0011508918522695137f, 0.032573558475288276f, 0.0043058942083083699f, -0.04092002623534835f, + -0.013123047317319701f, 0.053800644355014922f, 0.029432522332983702f, -0.07905510753323601f, -0.070603281955663899f, 0.16653563152580322f, 0.43210517492693151f, 0.43210517492693151f, 0.16653563152580322f, -0.070603281955663899f, + -0.07905510753323601f, 0.029432522332983702f, 0.053800644355014922f, -0.013123047317319701f, -0.04092002623534835f, 0.0043058942083083699f, 0.032573558475288276f, 0.0011508918522695137f, -0.02640196067996621f, -0.0047368917723037965f, + 0.021466256724857198f, 0.007125840656877094f, -0.017330147658877984f, -0.0086734861247152375f, 0.013770944722886543f, 0.0095921202839666011f, -0.010667874162915635f, -0.010022489589275232f, 0.0079523551931751733f, 0.010066863561789697f, + -0.0055834365845588117f, -0.0098054137618684718f, 0.0035346851016972076f, 0.0093047031940857849f, -0.0017867964974218652f, -0.0086221678375741368f, 0.00032330475586840607f, 0.0078084554717001839f, 0.00087190838226179287f, -0.0069085856029574037f, + -0.0018159915800828521f, 0.0059624608057177722f, 0.0025277799060584578f, -0.0050050371670088464f, -0.0030279660137300175f, 0.0040663397971393506f, 0.0033389418457091574f, -0.0031714384762093445f, -0.0034844201489225525f, 0.0023404544854695236f, + 0.0034889177121195229f, -0.0015886405747488589f, -0.0033771646737769767f, 0.00092655569989163675f, 0.0031734918095996751f, -0.00036034139785756989f, -0.0029012378877155813f, -0.00010790427373140747f, 0.0025822106579300812f, 0.00047966735940588935f, + -0.0022362271693290958f, -0.00075949101257426059f, 0.0018807516238043274f, 0.00095440236729098216f, -0.0015306418300333473f, -0.0010733166126649849f, 0.0011980086053723093f, 0.0011264418632411625f, -0.00089218632521024968f, -0.0011247072787871168f, + 0.00061980740254703639f, 0.0010792345735753637f, -0.00038496894666652844f, -0.0010008698109676916f, 0.0001894763205778044f, 0.00089978846282958065f, -3.314587132453256e-005f, -0.00078518239225245973f, -8.5852225867947491e-005f, + 0.00066503295722125297f, 0.00017063031310737982f, -0.00054597008359065545f, -0.00022521731907383636f, 0.00043321314468742269f, 0.00025420742334478951f, -0.00033058600417171713f, -0.00026243778983911883f, 0.00024059577819139221f, + 0.00025470689810904595f, -0.00016456285423100214f, -0.00023554171126832167f, 0.0001027885187579864f, 0.00020901849289291851f, -5.4746194835846432e-005f, -0.00017863872344900064f, 1.9282727971246898e-005f, 0.0001472584530757325f, + 5.1827046362012261e-006f, -0.00011706671809786473f, -2.0472772075678042e-005f, 8.9606465148413245e-005f, 2.8487821667709268e-005f, -6.5829851372446374e-005f, -3.1069520438032896e-005f, 4.6178861973460251e-005f, 2.9895950025429203e-005f, + -3.0681905607647534e-005f, -2.6409347486383157e-005f, 1.9057372869734062e-005f, 2.1775438559660563e-005f, -1.0815998060702207e-005f, -1.6871391475782036e-005f, 5.3551467039425532e-006f, 1.2297920626484224e-005f, -2.0397385098007832e-006f, + -8.4100490156544121e-006f, 2.6627472229717859e-007f, 5.3605197242465177e-006f, 4.9176438991917664e-007f, -3.1498182198772881e-006f, -6.5717878611679203e-007f, 1.6771858427505528e-006f, 5.3948551236313662e-007f, -7.8779955361649331e-007f, + -3.3983941493666253e-007f, 3.1237237262031871e-007f, 1.66884257199444e-007f, -9.6687532645616197e-008f, -5.9510076264774008e-008f, 1.9906123506125452e-008f, 1.2414749056730942e-008f, -1.774023861733666e-009f, -6.5763719827429698e-010f, 0, 0 +}; + +/* ===== Factor 3 coefficients (384 taps) ===== */ +#define P863_LEN3 384 +static float p863_coeff_3[P863_LEN3] = { + 0, 0, 2.3880746115417979e-012f, -4.5343415972185956e-010f, -1.7028923693853441e-009f, -8.4389218922391723e-010f, 7.0886322089252491e-009f, 1.7823442117517211e-008f, 1.0539111015548094e-008f, -3.1035329229307842e-008f, -7.8008721342201113e-008f, + -5.5013179015273081e-008f, 7.8373038971897041e-008f, 2.2677624162079388e-007f, 1.8723729611363639e-007f, -1.3597919980774955e-007f, -5.1525109043066013e-007f, -4.9214912582622773e-007f, 1.5611474641711949e-007f, 9.8689786030031712e-007f, + 1.0855171108011384e-006f, -4.209163776439778e-008f, -1.6581521032698434e-006f, -2.1053975439152689e-006f, -3.6241406240010495e-007f, 2.4956190227089128e-006f, 3.6955100599155535e-006f, 1.2778541529707893e-006f, -3.3921881683773868e-006f, + -5.9806767317411985e-006f, -2.9848210124607548e-006f, 4.1449463649568185e-006f, 9.0353737700341518e-006f, 5.8098117598301362e-006f, -4.4380986479937058e-006f, -1.2847364087664612e-005f, -1.0099718886239792e-005f, 3.8341822726575751e-006f, + 1.7279238895754075e-005f, 1.6184956417715211e-005f, -1.7766515950069911e-006f, -2.2031421375875686e-005f, -2.4332197474561585e-005f, -2.3935893830332066e-006f, 2.6610704187670043e-005f, 3.4688827539044313e-005f, 9.4059149174868379e-006f, + -3.0308643847167159e-005f, -4.7222326692234452e-005f, -2.0011211342978361e-005f, 3.21940723469157e-005f, 6.165879748525753e-005f, 3.4917099927271079e-005f, -3.1123582207292488e-005f, -7.7425667680991548e-005f, -5.4708999269250088e-005f, + 2.577308987781682e-005f, 9.3604140221858044e-005f, 7.9760289617795927e-005f, -1.4692502254423751e-005f, -0.00010889717026579475f, -0.00011013620268662548f, -3.6158556879223616e-006f, 0.0001216185724870181f, 0.00014549727178608354f, + 3.0595982474299318e-005f, -0.00012970827460345757f, -0.00018500914128594408f, -6.7516766125712941e-005f, 0.00013077773401920316f, 0.00022726616314751351f, 0.00011533479050810643f, -0.00012218814922106667f, -0.0002702364280887844f, + -0.00017454748366115282f, 0.00010116237881355587f, 0.00031123563710566926f, 0.00024504420572403208f, -6.4929506879834371e-005f, -0.0003469364881548334f, -0.00032596406894792673f, 1.0898863908295805e-005f, 0.00037341903410889127f, + 0.00041557007503908419f, 6.3141854669029868e-005f, -0.00038626579342104116f, -0.00051114946203511689f, -0.00015881180649481054f, 0.00038070332659446656f, 0.00060894991394983033f, 0.00027691484340688086f, -0.00035178962058860294f, + -0.00070416047005391713f, -0.00041722076140240455f, 0.0002946440659191659f, 0.00079094457776394305f, 0.00057826177316502804f, -0.00020471420364945214f, -0.00086253079886660299f, -0.00075715647434190857f, 7.8070911470995362e-005f, + 0.00091136427280373545f, 0.00094947338778067448f, 8.8278554519033553e-005f, -0.0009293192651450272f, -0.0011491452952806316f, -0.00029607208887276254f, 0.00090797011524895829f, 0.0013484439951688934f, 0.00054548255243221946f, + -0.000838914799088754f, -0.001538022883205785f, -0.0008348301978265524f, 0.00071414231291492831f, 0.0017070319061425984f, 0.0011603318483905376f, -0.00052643234200925183f, -0.0018433060757642621f, -0.0015158999272543692f, 0.0002697733894813892f, + 0.0019336249762676805f, 0.0018930024652897349f, 6.021611870556079e-005f, -0.0019640366858605209f, -0.0022805922944297693f, -0.00046588009586367909f, 0.0019202354051257818f, 0.0026651097342190338f, 0.00094714667042056667f, -0.0017879779679787202f, + -0.0030305581721061983f, -0.0015011947191469351f, 0.0015535203986233206f, 0.0033586459453791243f, 0.0021221776374211261f, -0.0012040517954721853f, -0.0036289806756199228f, -0.0028010130124567607f, 0.00072809898190702991f, 0.003819293305134377f, + 0.003525241226079005f, -0.00011587128589573347f, -0.0039056577872044335f, -0.0042789481851768178f, -0.0006404901001903022f, 0.0038626572576360109f, 0.0050427365221956564f, 0.0015468006178818786f, -0.0036634258809922441f, -0.0057937141549434489f, + -0.0026069121453312217f, 0.0032794623708833487f, 0.0065054460370959485f, 0.0038230566948668477f, -0.002680056749194326f, -0.0071477783712048451f, -0.0051965616268714477f, 0.0018310771148689472f, 0.0076863825761675714f, 0.0067291104816989663f, + -0.00069268873089433464f, -0.0080817538371880607f, -0.0084248543076559067f, -0.00078476133674093313f, 0.0082871806988380516f, 0.010293946989183475f, 0.0026681594256980651f, -0.0082447475286898889f, -0.012358661120613597f, -0.0050553447712100314f, + 0.0078774100284280009f, 0.01466459885817459f, 0.0081018116965398818f, -0.0070726742803038133f, -0.017302973136825221f, -0.012076765102941719f, 0.0056465299509595125f, 0.020459849179604396f, 0.017493985702572986f, -0.0032545471025644682f, + -0.024541438327006275f, -0.025466852745084697f, -0.00086649040778759723f, 0.030563214485593314f, 0.038914791575798587f, 0.0088735876642893445f, -0.041810097260969986f, -0.068593882874520951f, -0.030308278060979799f, 0.077444747987009496f, + 0.21148838226467084f, 0.30375847843681869f, 0.30375847843681869f, 0.21148838226467084f, 0.077444747987009496f, -0.030308278060979799f, -0.068593882874520951f, -0.041810097260969986f, 0.0088735876642893445f, 0.038914791575798587f, 0.030563214485593314f, + -0.00086649040778759723f, -0.025466852745084697f, -0.024541438327006275f, -0.0032545471025644682f, 0.017493985702572986f, 0.020459849179604396f, 0.0056465299509595125f, -0.012076765102941719f, -0.017302973136825221f, -0.0070726742803038133f, + 0.0081018116965398818f, 0.01466459885817459f, 0.0078774100284280009f, -0.0050553447712100314f, -0.012358661120613597f, -0.0082447475286898889f, 0.0026681594256980651f, 0.010293946989183475f, 0.0082871806988380516f, -0.00078476133674093313f, + -0.0084248543076559067f, -0.0080817538371880607f, -0.00069268873089433464f, 0.0067291104816989663f, 0.0076863825761675714f, 0.0018310771148689472f, -0.0051965616268714477f, -0.0071477783712048451f, -0.002680056749194326f, 0.0038230566948668477f, + 0.0065054460370959485f, 0.0032794623708833487f, -0.0026069121453312217f, -0.0057937141549434489f, -0.0036634258809922441f, 0.0015468006178818786f, 0.0050427365221956564f, 0.0038626572576360109f, -0.0006404901001903022f, -0.0042789481851768178f, + -0.0039056577872044335f, -0.00011587128589573347f, 0.003525241226079005f, 0.003819293305134377f, 0.00072809898190702991f, -0.0028010130124567607f, -0.0036289806756199228f, -0.0012040517954721853f, 0.0021221776374211261f, 0.0033586459453791243f, + 0.0015535203986233206f, -0.0015011947191469351f, -0.0030305581721061983f, -0.0017879779679787202f, 0.00094714667042056667f, 0.0026651097342190338f, 0.0019202354051257818f, -0.00046588009586367909f, -0.0022805922944297693f, -0.0019640366858605209f, + 6.021611870556079e-005f, 0.0018930024652897349f, 0.0019336249762676805f, 0.0002697733894813892f, -0.0015158999272543692f, -0.0018433060757642621f, -0.00052643234200925183f, 0.0011603318483905376f, 0.0017070319061425984f, 0.00071414231291492831f, + -0.0008348301978265524f, -0.001538022883205785f, -0.000838914799088754f, 0.00054548255243221946f, 0.0013484439951688934f, 0.00090797011524895829f, -0.00029607208887276254f, -0.0011491452952806316f, -0.0009293192651450272f, 8.8278554519033553e-005f, + 0.00094947338778067448f, 0.00091136427280373545f, 7.8070911470995362e-005f, -0.00075715647434190857f, -0.00086253079886660299f, -0.00020471420364945214f, 0.00057826177316502804f, 0.00079094457776394305f, 0.0002946440659191659f, -0.00041722076140240455f, + -0.00070416047005391713f, -0.00035178962058860294f, 0.00027691484340688086f, 0.00060894991394983033f, 0.00038070332659446656f, -0.00015881180649481054f, -0.00051114946203511689f, -0.00038626579342104116f, 6.3141854669029868e-005f, 0.00041557007503908419f, + 0.00037341903410889127f, 1.0898863908295805e-005f, -0.00032596406894792673f, -0.0003469364881548334f, -6.4929506879834371e-005f, 0.00024504420572403208f, 0.00031123563710566926f, 0.00010116237881355587f, -0.00017454748366115282f, -0.0002702364280887844f, + -0.00012218814922106667f, 0.00011533479050810643f, 0.00022726616314751351f, 0.00013077773401920316f, -6.7516766125712941e-005f, -0.00018500914128594408f, -0.00012970827460345757f, 3.0595982474299318e-005f, 0.00014549727178608354f, 0.0001216185724870181f, + -3.6158556879223616e-006f, -0.00011013620268662548f, -0.00010889717026579475f, -1.4692502254423751e-005f, 7.9760289617795927e-005f, 9.3604140221858044e-005f, 2.577308987781682e-005f, -5.4708999269250088e-005f, -7.7425667680991548e-005f, + -3.1123582207292488e-005f, 3.4917099927271079e-005f, 6.165879748525753e-005f, 3.21940723469157e-005f, -2.0011211342978361e-005f, -4.7222326692234452e-005f, -3.0308643847167159e-005f, 9.4059149174868379e-006f, 3.4688827539044313e-005f, + 2.6610704187670043e-005f, -2.3935893830332066e-006f, -2.4332197474561585e-005f, -2.2031421375875686e-005f, -1.7766515950069911e-006f, 1.6184956417715211e-005f, 1.7279238895754075e-005f, 3.8341822726575751e-006f, -1.0099718886239792e-005f, + -1.2847364087664612e-005f, -4.4380986479937058e-006f, 5.8098117598301362e-006f, 9.0353737700341518e-006f, 4.1449463649568185e-006f, -2.9848210124607548e-006f, -5.9806767317411985e-006f, -3.3921881683773868e-006f, 1.2778541529707893e-006f, + 3.6955100599155535e-006f, 2.4956190227089128e-006f, -3.6241406240010495e-007f, -2.1053975439152689e-006f, -1.6581521032698434e-006f, -4.209163776439778e-008f, 1.0855171108011384e-006f, 9.8689786030031712e-007f, 1.5611474641711949e-007f, + -4.9214912582622773e-007f, -5.1525109043066013e-007f, -1.3597919980774955e-007f, 1.8723729611363639e-007f, 2.2677624162079388e-007f, 7.8373038971897041e-008f, -5.5013179015273081e-008f, -7.8008721342201113e-008f, -3.1035329229307842e-008f, + 1.0539111015548094e-008f, 1.7823442117517211e-008f, 7.0886322089252491e-009f, -8.4389218922391723e-010f, -1.7028923693853441e-009f, -4.5343415972185956e-010f, 2.3880746115417979e-012f, 0, 0 +}; + +/* ===== Factor 4 coefficients (512 taps) ===== */ +#define P863_LEN4 512 +static float p863_coeff_4[P863_LEN4] = { + 0, 0, 1.2991300775641274e-11f, -1.2707556082002351e-11f, -3.2425901472574716e-10f, -1.0883363753489433e-09f, + -1.6539754909023193e-09f, -2.5306638148159503e-10f, 4.6922554722760015e-09f, 1.181771621965007e-08f, 1.5006931505612116e-08f, 5.770009765206447e-09f, + -1.937574551353074e-08f, -5.073369972287947e-08f, -6.443556206772023e-08f, -3.453737571377001e-08f, 4.488632426885434e-08f, 1.4175441950830963e-07f, + 1.901946665452237e-07f, 1.2521543110183777e-07f, -6.538595165044632e-08f, -3.0529784057633844e-07f, -4.4552027731676405e-07f, -3.419858179219399e-07f, + 3.775063272818829e-08f, 5.459760401694811e-07f, 8.887036832570474e-07f, 7.751393559828222e-07f, 1.1791740049431614e-07f, -8.380879650482852e-07f, + -1.5702031530906168e-06f, -1.536205786841987e-06f, -5.244425154336332e-07f, 1.1106014047140515e-06f, 2.515457403823864e-06f, 2.7469049544104547e-06f, + 1.3485949945425106e-06f, -1.2336559964009238e-06f, -3.7046772503896565e-06f, -4.521787460774139e-06f, -2.795452258395797e-06f, 1.0088026964542039e-06f, + 5.0514538092647904e-06f, 6.945104903087823e-06f, 5.095029947777826e-06f, -1.6519189909568147e-07f, -6.382481009302464e-06f, -1.0043156185704507e-05f, + -8.480720169307173e-06f, -1.6362846427710696e-06f, 7.420999243396657e-06f, 1.3754041839375716e-05f, 1.3159805012876274e-05f, 4.789306214851627e-06f, + -7.776686097809898e-06f, -1.7897365097928146e-05f, -1.9277118540992935e-05f, -9.717904559020066e-06f, 6.944620927430452e-06f, 2.2146890621458765e-05f, + 2.6873753571239316e-05f, 1.684150057211881e-05f, -4.315618376925129e-06f, -2.600945884195945e-05f, -3.584348881895493e-05f, -2.6529876447755036e-05f, + -8.00336532524567e-07f, 2.8813515148244846e-05f, 4.589028379000438e-05f, 3.9049724838544477e-05f, 9.136593962241157e-06f, -2.9710420736075288e-05f, + -5.649069233367912e-05f, -5.4505381568332704e-05f, -2.1418279849748793e-05f, 2.7691253875670086e-05f, 6.686532712235799e-05f, 7.277724759053949e-05f, + 3.8297745251674225e-05f, -2.162109209299681e-05f, -7.596352378011714e-05f, -9.346216896366033e-05f, -6.02792416569394e-05f, 1.0291811123820618e-05f, + 8.2465076906938e-05f, 0.00011582060395798645f, 8.763617483509935e-05f, 7.506712831829961e-06f, -8.480234032458162e-05f, -0.00013873570570011262f, + -0.0001203253394264482f, -3.289839707489907e-05f, 8.120510932793255e-05f, 0.000160689441369783f, 0.000157903422423803f, 6.681849334041871e-05f, + -6.976956239785217e-05f, -0.000179760525719859f, -0.00019945171250628253f, -0.00010990096150128463f, 4.855118200575707e-05f, 0.00019364825783285604f, + 0.00024351529998844964f, 0.00016236099411512037f, -1.568006473916238e-05f, -0.00019972532707688388f, -0.0002880630492939974f, -0.00022387905263177607f, + -3.050454944990755e-05f, 0.0001951213306372152f, 0.00033047424095655645f, 0.0002934935478389351f, 9.130525941729616e-05f, -0.00017683717551561084f, + -0.00036755700317456555f, -0.00036950972708088466f, -0.00016750917047607462f, 0.00014188879655118605f, 0.00039560249725767465f, 0.0004494323637618531f, + 0.00025922965136282954f, -8.74767989470366e-05f, -0.0004104773243279228f, -0.0005299294454091315f, -0.0003657555091429631f, 1.1176830869681065e-05f, + 0.00040775484320920816f, 0.0006068332131794505f, 0.00048541645050176384f, 8.885618261553143e-05f, -0.00038288411373427265f, -0.000675183631629642f, + -0.000615473789364383f, -0.0002136782494124946f, 0.00033139310592028765f, 0.0007293177025262143f, 0.0007520449616691922f, 0.00036335036355604033f, + -0.00024912075740064326f, -0.0007630060456518995f, -0.0008900695005976765f, -0.0005367464602286234f, 0.00013247054126936693f, 0.0007696359416062905f, + 0.0010233227184114771f, 0.0007313854778651061f, 2.1323451182260114e-05f, -0.0007424376750825578f, -0.0011444814700838244f, -0.0009432973099801437f, + -0.00021392818189837774f, 0.0006747486560177692f, 0.0012452441007728369f, 0.0011669314035000333f, 0.00044565213691552356f, -0.000560307564366402f, + -0.0013165040882592428f, -0.001395115120816527f, -0.0007152058199719592f, 0.000393568800315759f, 0.0013485740849686467f, 0.0016190667406393176f, + 0.0010194929859247677f, -0.00017002596254656562f, -0.0013314541552569158f, -0.0018284651554870807f, -0.001353442067829303f, -0.0001134679462787328f, + 0.0012551351073552717f, 0.0020115749654969514f, 0.0017098851670412384f, 0.0004583962528190966f, -0.0011099250414032592f, -0.002155421794178071f, + -0.0020794890014819126f, -0.0008643025438124062f, 0.0008867846569099381f, 0.0022460082525491186f, 0.002450738247717242f, 0.0013285537607450467f, + -0.0005776545226723317f, -0.0022685559702115064f, -0.0028099666043646396f, -0.001846151122471303f, 0.0001757553758812236f, 0.002207753271784653f, + 0.0031414243452301755f, 0.002409594058094278f, 0.0003241595638860537f, -0.0020479809296349767f, -0.0034273625532641925f, -0.0030087974002319393f, + -0.0009256236421035292f, 0.0017734790441972653f, 0.0036481025697628205f, 0.003631055222906989f, 0.0016303738513069896f, -0.001368404750316566f, + -0.003782042471204629f, -0.004261035002383981f, -0.002438398070725006f, 0.0008167098558569123f, 0.003805526844837627f, 0.0048807714861798645f, + 0.003348154464813144f, -0.00010173346597469165f, -0.0036924645319536932f, -0.005469607326241074f, -0.004357023710626261f, -0.0007946550658895f, + 0.0034135069393125004f, 0.006003990156095559f, 0.005462090893488422f, 0.0018936377807628284f, -0.002934467144054682f, -0.006456968557164035f, + -0.006661425881706465f, -0.0032222434382727294f, 0.0022134023306814203f, 0.006797099388371624f, 0.00795617958267588f, 0.004818285057820308f, + -0.0011952485864216802f, -0.006986208624140421f, -0.009354136308602956f, -0.0067393293208882765f, -0.0001982873562654969f, 0.0069748394581529245f, + 0.010876113057789582f, 0.00907985855652922f, 0.0020887325681544387f, -0.006692721990455363f, -0.012568502698548978f, -0.012006696703631388f, + -0.004683547311032964f, 0.00602746820070927f, 0.014530689614650228f, 0.015840190875226187f, 0.008377697012721275f, -0.004771553503959317f, + -0.01698411980367491f, -0.021269320646164838f, -0.014036005642908779f, 0.002466651529467916f, 0.020484382547902292f, 0.03005764845083724f, + 0.02398882053926445f, 0.002192590255406906f, -0.026810202530847604f, -0.0483541984557258f, -0.04737186896080941f, -0.01513607751069205f, + 0.045944787176249516f, 0.12178387323751173f, 0.1909000411869741f, 0.23202473878914937f, 0.23202473878914937f, 0.1909000411869741f, + 0.12178387323751173f, 0.045944787176249516f, -0.01513607751069205f, -0.04737186896080941f, -0.0483541984557258f, -0.026810202530847604f, + 0.002192590255406906f, 0.02398882053926445f, 0.03005764845083724f, 0.020484382547902292f, 0.002466651529467916f, -0.014036005642908779f, + -0.021269320646164838f, -0.01698411980367491f, -0.004771553503959317f, 0.008377697012721275f, 0.015840190875226187f, 0.014530689614650228f, + 0.00602746820070927f, -0.004683547311032964f, -0.012006696703631388f, -0.012568502698548978f, -0.006692721990455363f, 0.0020887325681544387f, + 0.00907985855652922f, 0.010876113057789582f, 0.0069748394581529245f, -0.0001982873562654969f, -0.0067393293208882765f, -0.009354136308602956f, + -0.006986208624140421f, -0.0011952485864216802f, 0.004818285057820308f, 0.00795617958267588f, 0.006797099388371624f, 0.0022134023306814203f, + -0.0032222434382727294f, -0.006661425881706465f, -0.006456968557164035f, -0.002934467144054682f, 0.0018936377807628284f, 0.005462090893488422f, + 0.006003990156095559f, 0.0034135069393125004f, -0.0007946550658895f, -0.004357023710626261f, -0.005469607326241074f, -0.0036924645319536932f, + -0.00010173346597469165f, 0.003348154464813144f, 0.0048807714861798645f, 0.003805526844837627f, 0.0008167098558569123f, -0.002438398070725006f, + -0.004261035002383981f, -0.003782042471204629f, -0.001368404750316566f, 0.0016303738513069896f, 0.003631055222906989f, 0.0036481025697628205f, + 0.0017734790441972653f, -0.0009256236421035292f, -0.0030087974002319393f, -0.0034273625532641925f, -0.0020479809296349767f, 0.0003241595638860537f, + 0.002409594058094278f, 0.0031414243452301755f, 0.002207753271784653f, 0.0001757553758812236f, -0.001846151122471303f, -0.0028099666043646396f, + -0.0022685559702115064f, -0.0005776545226723317f, 0.0013285537607450467f, 0.002450738247717242f, 0.0022460082525491186f, 0.0008867846569099381f, + -0.0008643025438124062f, -0.0020794890014819126f, -0.002155421794178071f, -0.0011099250414032592f, 0.0004583962528190966f, 0.0017098851670412384f, + 0.0020115749654969514f, 0.0012551351073552717f, -0.0001134679462787328f, -0.001353442067829303f, -0.0018284651554870807f, -0.0013314541552569158f, + -0.00017002596254656562f, 0.0010194929859247677f, 0.0016190667406393176f, 0.0013485740849686467f, 0.000393568800315759f, -0.0007152058199719592f, + -0.001395115120816527f, -0.0013165040882592428f, -0.000560307564366402f, 0.00044565213691552356f, 0.0011669314035000333f, 0.0012452441007728369f, + 0.0006747486560177692f, -0.00021392818189837774f, -0.0009432973099801437f, -0.0011444814700838244f, -0.0007424376750825578f, 2.1323451182260114e-05f, + 0.0007313854778651061f, 0.0010233227184114771f, 0.0007696359416062905f, 0.00013247054126936693f, -0.0005367464602286234f, -0.0008900695005976765f, + -0.0007630060456518995f, -0.00024912075740064326f, 0.00036335036355604033f, 0.0007520449616691922f, 0.0007293177025262143f, 0.00033139310592028765f, + -0.0002136782494124946f, -0.000615473789364383f, -0.000675183631629642f, -0.00038288411373427265f, 8.885618261553143e-05f, 0.00048541645050176384f, + 0.0006068332131794505f, 0.00040775484320920816f, 1.1176830869681065e-05f, -0.0003657555091429631f, -0.0005299294454091315f, -0.0004104773243279228f, + -8.74767989470366e-05f, 0.00025922965136282954f, 0.0004494323637618531f, 0.00039560249725767465f, 0.00014188879655118605f, -0.00016750917047607462f, + -0.00036950972708088466f, -0.00036755700317456555f, -0.00017683717551561084f, 9.130525941729616e-05f, 0.0002934935478389351f, 0.00033047424095655645f, + 0.0001951213306372152f, -3.050454944990755e-05f, -0.00022387905263177607f, -0.0002880630492939974f, -0.00019972532707688388f, -1.568006473916238e-05f, + 0.00016236099411512037f, 0.00024351529998844964f, 0.00019364825783285604f, 4.855118200575707e-05f, -0.00010990096150128463f, -0.00019945171250628253f, + -0.000179760525719859f, -6.976956239785217e-05f, 6.681849334041871e-05f, 0.000157903422423803f, 0.000160689441369783f, 8.120510932793255e-05f, + -3.289839707489907e-05f, -0.0001203253394264482f, -0.00013873570570011262f, -8.480234032458162e-05f, 7.506712831829961e-06f, 8.763617483509935e-05f, + 0.00011582060395798645f, 8.2465076906938e-05f, 1.0291811123820618e-05f, -6.02792416569394e-05f, -9.346216896366033e-05f, -7.596352378011714e-05f, + -2.162109209299681e-05f, 3.8297745251674225e-05f, 7.277724759053949e-05f, 6.686532712235799e-05f, 2.7691253875670086e-05f, -2.1418279849748793e-05f, + -5.4505381568332704e-05f, -5.649069233367912e-05f, -2.9710420736075288e-05f, 9.136593962241157e-06f, 3.9049724838544477e-05f, 4.589028379000438e-05f, + 2.8813515148244846e-05f, -8.00336532524567e-07f, -2.6529876447755036e-05f, -3.584348881895493e-05f, -2.600945884195945e-05f, -4.315618376925129e-06f, + 1.684150057211881e-05f, 2.6873753571239316e-05f, 2.2146890621458765e-05f, 6.944620927430452e-06f, -9.717904559020066e-06f, -1.9277118540992935e-05f, + -1.7897365097928146e-05f, -7.776686097809898e-06f, 4.789306214851627e-06f, 1.3159805012876274e-05f, 1.3754041839375716e-05f, 7.420999243396657e-06f, + -1.6362846427710696e-06f, -8.480720169307173e-06f, -1.0043156185704507e-05f, -6.382481009302464e-06f, -1.6519189909568147e-07f, 5.095029947777826e-06f, + 6.945104903087823e-06f, 5.0514538092647904e-06f, 1.0088026964542039e-06f, -2.795452258395797e-06f, -4.521787460774139e-06f, -3.7046772503896565e-06f, + -1.2336559964009238e-06f, 1.3485949945425106e-06f, 2.7469049544104547e-06f, 2.515457403823864e-06f, 1.1106014047140515e-06f, -5.244425154336332e-07f, + -1.536205786841987e-06f, -1.5702031530906168e-06f, -8.380879650482852e-07f, 1.1791740049431614e-07f, 7.751393559828222e-07f, 8.887036832570474e-07f, + 5.459760401694811e-07f, 3.775063272818829e-08f, -3.419858179219399e-07f, -4.4552027731676405e-07f, -3.0529784057633844e-07f, -6.538595165044632e-08f, + 1.2521543110183777e-07f, 1.901946665452237e-07f, 1.4175441950830963e-07f, 4.488632426885434e-08f, -3.453737571377001e-08f, -6.443556206772023e-08f, + -5.073369972287947e-08f, -1.937574551353074e-08f, 5.770009765206447e-09f, 1.5006931505612116e-08f, 1.181771621965007e-08f, 4.6922554722760015e-09f, + -2.5306638148159503e-10f, -1.6539754909023193e-09f, -1.0883363753489433e-09f, -3.2425901472574716e-10f, -1.2707556082002351e-11f, 1.2991300775641274e-11f, + 0, 0 +}; + +/* ===== Factor 6 coefficients (768 taps) ===== */ +#define P863_LEN6 768 +static float p863_coeff_6[P863_LEN6] = { + 0, 0, 2.691239924154828e-12f, 1.1828539027346112e-11f, 1.537678992124691e-11f, -3.1335654479869494e-11f, + -1.9709071280477305e-10f, -5.248064118418001e-10f, -9.51381731279286e-10f, -1.2410008763135097e-09f, -9.930951082636695e-10f, 2.28107470502183e-10f, + 2.645711238283505e-09f, 5.9789349448002054e-09f, 9.246128218035411e-09f, 1.0817071302193613e-08f, 8.81636638720527e-09f, 1.8556810104194671e-09f, + -1.0089665711571232e-08f, -2.4984867921475803e-08f, -3.859576051529636e-08f, -4.518884483648565e-08f, -3.911531647701826e-08f, -1.6985910384779763e-08f, + 2.0187158038407728e-08f, 6.56984160679439e-08f, 1.0746842146236057e-07f, 1.3038003060051805e-07f, 1.2043301999843577e-07f, 6.98165233472851e-08f, + -1.8575955256728605e-08f, -1.2887790166769242e-07f, -2.3360609465673318e-07f, -2.9916558380919976e-07f, -2.9478799977106246e-07f, -2.0288946624290177e-07f, + -2.7891854588389937e-08f, 1.9964925679003818e-07f, 4.25999961202196e-07f, 5.849848067357207e-07f, 6.149318849908952e-07f, 4.780008570940273e-07f, + 1.7654259185517028e-07f, -2.390462883978719e-07f, -6.750429872594422e-07f, -1.0127802760012628e-06f, -1.1379118280829263e-06f, -9.740376083153232e-07f, + -5.116868845731189e-07f, 1.765979842996413e-07f, 9.419097945454788e-07f, 1.5873541986613687e-06f, 1.9149301373470155e-06f, 1.7806663582809258e-06f, + 1.143733350219884e-06f, 9.467860877910933e-08f, -1.1484798394999376e-06f, -2.2802225651653813e-06f, -2.9779202914242935e-06f, -2.9876264959214665e-06f, + -2.203734205629703e-06f, -7.195568958705088e-07f, 1.169289632945126e-06f, 3.016287801367824e-06f, 4.323696092525644e-06f, 4.66981747470593e-06f, + 3.832827875404265e-06f, 1.8769928536209681e-06f, -8.270502826770229e-07f, -3.661909388482541e-06f, -5.896943190857115e-06f, -6.868846754126758e-06f, + -6.1664774806085404e-06f, -3.770766054468487e-06f, -1.0681717109783684e-07f, 4.016100018535679e-06f, 7.573673021989436e-06f, 9.572182772489344e-06f, + 9.313903839206387e-06f, 6.613913881503402e-06f, 1.9054003350526885e-06f, -3.806589553951066e-06f, -9.147013859009695e-06f, -1.2691498798386898e-05f, + -1.3333643382732469e-05f, -1.0607006582875768e-05f, -4.8724000492981274e-06f, 2.692366003430763e-06f, 1.0317342373158007e-05f, 1.6042159651260656e-05f, + 1.820668633540655e-05f, 1.5910878336996937e-05f, 9.320735053412442e-06f, -2.740174359813823e-07f, -1.0688739061583608e-05f, -1.932605805253585e-05f, + -2.3809127279542265e-05f, -2.2615023926355254e-05f, -1.5543839717163266e-05f, -3.8872324521640265e-06f, 9.773568468952705e-06f, 2.212011999721824e-05f, + 2.988664778393458e-05f, 3.070344982909068e-05f, 2.3780490067865e-05f, 1.024146219566499e-05f, -7.006637231184095e-06f, -2.3872746018477846e-05f, + -3.603341117882283e-05f, -4.002028816797243e-05f, -3.417465815777557e-05f, -1.9213291464732e-05f, 1.7698780085840604e-06f, 2.3910224388238513e-05f, + 4.167805084205758e-05f, 5.0237898294931096e-05f, 4.6732536591469296e-05f, 3.115747283293287e-05f, 6.572134618200237e-06f, -2.145474134416278e-05f, + -4.607935202681541e-05f, -6.083045378499977e-05f, -6.127944612408436e-05f, -4.63086316244695e-05f, -1.8626278197123308e-05f, 1.5655032748882834e-05f, + 4.833395043391465e-05f, 7.105610879688223e-05f, 7.741979300458653e-05f, 6.472766236692141e-05f, 3.491584157791999e-05f, -5.6299938557223714e-06f, + -4.739789768353654e-05f, -7.995073288441698e-05f, -9.450353669455348e-05f, -8.624792240002861e-05f, -5.581843466722564e-05f, -9.475276647106836e-06f, + 4.212328682528971e-05f, 8.633588458239913e-05f, 0.0001116027274787376f, 0.00011042486406119114f, 8.149972830032109e-05f, 3.0422431031760574e-05f, + -3.131031531861043e-05f, -8.884316159376149e-05f, -0.00012750155200331027f, -0.00013649307135328725f, -0.00011184660662576022f, -5.780418307922092e-05f, + 1.3774226033203211e-05f, 8.595633313966191e-05f, 0.00014070296987162006f, 0.0001633347777040411f, 0.00014640387262396037f, 9.196321623926072e-05f, + 1.157444307940535e-05f, -7.607175578778393e-05f, -0.00014945443689276262f, -0.00018946381166227083f, -0.00018431901261959646f, -0.0001329097142102547f, + -4.563889644759457e-05f, 5.757653860596238e-05f, 0.00015179440591692495f, 0.0002130285335328205f, 0.0002242996579722704f, 0.00018024216434545852f, + 8.903798250712117e-05f, -2.89428088362726e-05f, -0.00014562030460083452f, -0.00023183668917914544f, -0.00026458825304284705f, -0.00023307650021536254f, + -0.00014200540887034094f, -1.116470369424232e-05f, 0.00012877755492326877f, 0.00024340423431723786f, 0.00030295803344061305f, 0.00028998881291818565f, + 0.00020429142207811283f, 6.377162994954104e-05f, -9.916797784749802e-05f, -0.0002450291060281673f, -0.00033673373853927404f, -0.0003489767404299755f, + -0.0002750725778339314f, -0.00012947230718511564f, 5.4874683724266626e-05f, 0.00023388968509776965f, 0.00036283954499724997f, 0.0004074442241842563f, + 0.00035287542885270373f, 0.00020830912486435524f, 5.700643354394805e-06f, -0.00020716636324439341f, -0.0003778755478488185f, -0.0004622136024407257f, + -0.00043551985080457316f, -0.0002996590281028708f, -8.369322660349729e-05f, 0.00016218327373728096f, 0.00037822278267612763f, 0.0005095680085994171f, + 0.0005200872932458632f, 0.0004021335775498866f, 0.00017962947202432243f, -9.656593983252403e-05f, -0.00036017534034318133f, -0.0005453257947001756f, + -0.0006029184799152024f, -0.0005134988701415268f, -0.0002932866713238596f, 8.409423734104047e-06f, 0.00032009664994853484f, 0.000564947257716049f, + 0.0006796440073147703f, 0.0006306211703786999f, 0.00042356504465827625f, 0.00010354940020593262f, -0.00025459557921401604f, -0.00056367237533275f, + -0.000745249935902165f, -0.0007494432795037147f, -0.0005683789433809046f, -0.00023976249450019229f, 0.00016071671200037333f, 0.0005366866370135178f, + 0.000794178884862575f, 0.00086499549032453f, 0.0007245735362801915f, 0.0003997115889927176f, -3.613809815664295e-05f, -0.0004793104720456748f, + -0.0008204653938672434f, -0.0009714434650863762f, -0.0008878723835859144f, -0.0005817666488097535f, -0.00012063098325035138f, 0.000387206320324671f, + 0.0008179024786880318f, 0.0010621735733697998f, 0.0010528599573031263f, 0.000783068568853146f, 0.0003100600703417042f, -0.0002565961558720999f, + -0.0007802344633793596f, -0.0011299141868816099f, -0.001213001401090671f, -0.0009994417150751657f, -0.0005314230983962694f, 8.448134650865583e-05f, + 0.0007013694018032594f, 0.0011668892017168851f, 0.001360699649507721f, 0.0012253403293674297f, 0.0007826466076227966f, 0.00013114380113039367f, + -0.000575602781164748f, -0.0011649976932383162f, -0.0014873874506915337f, -0.0014538306405106657f, -0.0010601864459545338f, -0.0003910935278882586f, + 0.0003978427911930665f, 0.0011160111306802627f, 0.001583648840995474f, 0.0016766077219011598f, 0.001358936932918977f, 0.0006948153834432945f, + -0.000163826281401473f, -0.00101177697301324f, -0.0016393611363987892f, -0.0018840426030750455f, -0.0016721737676909565f, -0.0010402454244288109f, + -0.00012968638587027814f, 0.0008444146452898538f, 0.0016438443679279932f, 0.002065250674652296f, 0.001991528323569564f, 0.001423699236028589f, + 0.0004847501066751298f, -0.0006064866379520778f, -0.001585999954687689f, -0.002208166640388556f, -0.0023069860593334167f, -0.0018398015723057382f, + -0.0009021206418670336f, 0.00029112333986494875f, 0.001454413618303933f, 0.002299603441905315f, 0.002606895019486452f, 0.0022814537885444343f, + 0.001381201221652482f, 0.0001079256271408814f, -0.0012373878562206998f, -0.0023252613565889484f, -0.0028779607130344355f, -0.0027398331837579586f, + -0.0019200660782804076f, -0.0005963499224796556f, 0.0009228543792967101f, 0.002269636290554184f, 0.003105189005540589f, 0.0032044110974639535f, + 0.0025155804434977406f, 0.001179498550313731f, -0.0004980923359440308f, -0.002115748235827439f, -0.0032717150482324516f, -0.0036629655414078164f, + -0.0031636439376678694f, -0.0018628405052291059f, -5.086484742755164e-05f, 0.0018445621699828237f, 0.003358415711090973f, 0.004101546070654008f, + 0.0038595992992198572f, 0.0026527959791814225f, 0.0007403304559674372f, -0.0014338841732215583f, -0.003343128797128057f, -0.004504316650754686f, + -0.004598879085877497f, -0.003558167390675537f, -0.001590923732936595f, 0.0008563413932258106f, 0.003199157832490015f, 0.004853141153493943f, + 0.005378027138078235f, 0.004592602844898446f, 0.002631054152962605f, -7.569452202221049e-05f, -0.002892440783972528f, -0.005126649521643357f, + -0.006196371644937026f, -0.005778966765403332f, -0.0039032909617394158f, -0.0009600656227028338f, 0.0023760888885792867f, 0.005298237762153511f, + 0.007058952275705875f, 0.007157527451734127f, 0.005476622337773767f, 0.002332302051157702f, -0.001579362286885288f, -0.0053317509190652645f, + -0.007982128411187294f, -0.008802530499726536f, -0.007471906569662577f, -0.004180563208241132f, 0.0003836987462893026f, 0.005171649597199791f, + 0.009005633268375423f, 0.010859429623592322f, 0.010120560500457598f, 0.006770733239430279f, 0.0014354647775230676f, -0.004718218214971998f, + -0.010222552117649898f, -0.013641241144069397f, -0.013921285427190419f, -0.010682921414477523f, -0.0043746457509470545f, 0.0037539092491463157f, + 0.011870220996013016f, 0.01793441831433124f, 0.020160315305735612f, 0.01746572362712614f, 0.009811159292865194f, -0.0016567662826508281f, + -0.014704561453844802f, -0.026352219834002717f, -0.033402104849064786f, -0.033060950449359014f, -0.02353466296554083f, -0.0044745524666263475f, + 0.022822436309568785f, 0.055512077227906076f, 0.08959523242306079f, 0.12054160595214061f, 0.1440351159573109f, 0.15670473689431666f, + 0.15670473689431666f, 0.1440351159573109f, 0.12054160595214061f, 0.08959523242306079f, 0.055512077227906076f, 0.022822436309568785f, + -0.0044745524666263475f, -0.02353466296554083f, -0.033060950449359014f, -0.033402104849064786f, -0.026352219834002717f, -0.014704561453844802f, + -0.0016567662826508281f, 0.009811159292865194f, 0.01746572362712614f, 0.020160315305735612f, 0.01793441831433124f, 0.011870220996013016f, + 0.0037539092491463157f, -0.0043746457509470545f, -0.010682921414477523f, -0.013921285427190419f, -0.013641241144069397f, -0.010222552117649898f, + -0.004718218214971998f, 0.0014354647775230676f, 0.006770733239430279f, 0.010120560500457598f, 0.010859429623592322f, 0.009005633268375423f, + 0.005171649597199791f, 0.0003836987462893026f, -0.004180563208241132f, -0.007471906569662577f, -0.008802530499726536f, -0.007982128411187294f, + -0.0053317509190652645f, -0.001579362286885288f, 0.002332302051157702f, 0.005476622337773767f, 0.007157527451734127f, 0.007058952275705875f, + 0.005298237762153511f, 0.0023760888885792867f, -0.0009600656227028338f, -0.0039032909617394158f, -0.005778966765403332f, -0.006196371644937026f, + -0.005126649521643357f, -0.002892440783972528f, -7.569452202221049e-05f, 0.002631054152962605f, 0.004592602844898446f, 0.005378027138078235f, + 0.004853141153493943f, 0.003199157832490015f, 0.0008563413932258106f, -0.001590923732936595f, -0.003558167390675537f, -0.004598879085877497f, + -0.004504316650754686f, -0.003343128797128057f, -0.0014338841732215583f, 0.0007403304559674372f, 0.0026527959791814225f, 0.0038595992992198572f, + 0.004101546070654008f, 0.003358415711090973f, 0.0018445621699828237f, -5.086484742755164e-05f, -0.0018628405052291059f, -0.0031636439376678694f, + -0.0036629655414078164f, -0.0032717150482324516f, -0.002115748235827439f, -0.0004980923359440308f, 0.001179498550313731f, 0.0025155804434977406f, + 0.0032044110974639535f, 0.003105189005540589f, 0.002269636290554184f, 0.0009228543792967101f, -0.0005963499224796556f, -0.0019200660782804076f, + -0.0027398331837579586f, -0.0028779607130344355f, -0.0023252613565889484f, -0.0012373878562206998f, 0.0001079256271408814f, 0.001381201221652482f, + 0.0022814537885444343f, 0.002606895019486452f, 0.002299603441905315f, 0.001454413618303933f, 0.00029112333986494875f, -0.0009021206418670336f, + -0.0018398015723057382f, -0.0023069860593334167f, -0.002208166640388556f, -0.001585999954687689f, -0.0006064866379520778f, 0.0004847501066751298f, + 0.001423699236028589f, 0.001991528323569564f, 0.002065250674652296f, 0.0016438443679279932f, 0.0008444146452898538f, -0.00012968638587027814f, + -0.0010402454244288109f, -0.0016721737676909565f, -0.0018840426030750455f, -0.0016393611363987892f, -0.00101177697301324f, -0.000163826281401473f, + 0.0006948153834432945f, 0.001358936932918977f, 0.0016766077219011598f, 0.001583648840995474f, 0.0011160111306802627f, 0.0003978427911930665f, + -0.0003910935278882586f, -0.0010601864459545338f, -0.0014538306405106657f, -0.0014873874506915337f, -0.0011649976932383162f, -0.000575602781164748f, + 0.00013114380113039367f, 0.0007826466076227966f, 0.0012253403293674297f, 0.001360699649507721f, 0.0011668892017168851f, 0.0007013694018032594f, + 8.448134650865583e-05f, -0.0005314230983962694f, -0.0009994417150751657f, -0.001213001401090671f, -0.0011299141868816099f, -0.0007802344633793596f, + -0.0002565961558720999f, 0.0003100600703417042f, 0.000783068568853146f, 0.0010528599573031263f, 0.0010621735733697998f, 0.0008179024786880318f, + 0.000387206320324671f, -0.00012063098325035138f, -0.0005817666488097535f, -0.0008878723835859144f, -0.0009714434650863762f, -0.0008204653938672434f, + -0.0004793104720456748f, -3.613809815664295e-05f, 0.0003997115889927176f, 0.0007245735362801915f, 0.00086499549032453f, 0.000794178884862575f, + 0.0005366866370135178f, 0.00016071671200037333f, -0.00023976249450019229f, -0.0005683789433809046f, -0.0007494432795037147f, -0.000745249935902165f, + -0.00056367237533275f, -0.00025459557921401604f, 0.00010354940020593262f, 0.00042356504465827625f, 0.0006306211703786999f, 0.0006796440073147703f, + 0.000564947257716049f, 0.00032009664994853484f, 8.409423734104047e-06f, -0.0002932866713238596f, -0.0005134988701415268f, -0.0006029184799152024f, + -0.0005453257947001756f, -0.00036017534034318133f, -9.656593983252403e-05f, 0.00017962947202432243f, 0.0004021335775498866f, 0.0005200872932458632f, + 0.0005095680085994171f, 0.00037822278267612763f, 0.00016218327373728096f, -8.369322660349729e-05f, -0.0002996590281028708f, -0.00043551985080457316f, + -0.0004622136024407257f, -0.0003778755478488185f, -0.00020716636324439341f, 5.700643354394805e-06f, 0.00020830912486435524f, 0.00035287542885270373f, + 0.0004074442241842563f, 0.00036283954499724997f, 0.00023388968509776965f, 5.4874683724266626e-05f, -0.00012947230718511564f, -0.0002750725778339314f, + -0.0003489767404299755f, -0.00033673373853927404f, -0.0002450291060281673f, -9.916797784749802e-05f, 6.377162994954104e-05f, 0.00020429142207811283f, + 0.00028998881291818565f, 0.00030295803344061305f, 0.00024340423431723786f, 0.00012877755492326877f, -1.116470369424232e-05f, -0.00014200540887034094f, + -0.00023307650021536254f, -0.00026458825304284705f, -0.00023183668917914544f, -0.00014562030460083452f, -2.89428088362726e-05f, 8.903798250712117e-05f, + 0.00018024216434545852f, 0.0002242996579722704f, 0.0002130285335328205f, 0.00015179440591692495f, 5.757653860596238e-05f, -4.563889644759457e-05f, + -0.0001329097142102547f, -0.00018431901261959646f, -0.00018946381166227083f, -0.00014945443689276262f, -7.607175578778393e-05f, 1.157444307940535e-05f, + 9.196321623926072e-05f, 0.00014640387262396037f, 0.0001633347777040411f, 0.00014070296987162006f, 8.595633313966191e-05f, 1.3774226033203211e-05f, + -5.780418307922092e-05f, -0.00011184660662576022f, -0.00013649307135328725f, -0.00012750155200331027f, -8.884316159376149e-05f, -3.131031531861043e-05f, + 3.0422431031760574e-05f, 8.149972830032109e-05f, 0.00011042486406119114f, 0.0001116027274787376f, 8.633588458239913e-05f, 4.212328682528971e-05f, + -9.475276647106836e-06f, -5.581843466722564e-05f, -8.624792240002861e-05f, -9.450353669455348e-05f, -7.995073288441698e-05f, -4.739789768353654e-05f, + -5.6299938557223714e-06f, 3.491584157791999e-05f, 6.472766236692141e-05f, 7.741979300458653e-05f, 7.105610879688223e-05f, 4.833395043391465e-05f, + 1.5655032748882834e-05f, -1.8626278197123308e-05f, -4.63086316244695e-05f, -6.127944612408436e-05f, -6.083045378499977e-05f, -4.607935202681541e-05f, + -2.145474134416278e-05f, 6.572134618200237e-06f, 3.115747283293287e-05f, 4.6732536591469296e-05f, 5.0237898294931096e-05f, 4.167805084205758e-05f, + 2.3910224388238513e-05f, 1.7698780085840604e-06f, -1.9213291464732e-05f, -3.417465815777557e-05f, -4.002028816797243e-05f, -3.603341117882283e-05f, + -2.3872746018477846e-05f, -7.006637231184095e-06f, 1.024146219566499e-05f, 2.3780490067865e-05f, 3.070344982909068e-05f, 2.988664778393458e-05f, + 2.212011999721824e-05f, 9.773568468952705e-06f, -3.8872324521640265e-06f, -1.5543839717163266e-05f, -2.2615023926355254e-05f, -2.3809127279542265e-05f, + -1.932605805253585e-05f, -1.0688739061583608e-05f, -2.740174359813823e-07f, 9.320735053412442e-06f, 1.5910878336996937e-05f, 1.820668633540655e-05f, + 1.6042159651260656e-05f, 1.0317342373158007e-05f, 2.692366003430763e-06f, -4.8724000492981274e-06f, -1.0607006582875768e-05f, -1.3333643382732469e-05f, + -1.2691498798386898e-05f, -9.147013859009695e-06f, -3.806589553951066e-06f, 1.9054003350526885e-06f, 6.613913881503402e-06f, 9.313903839206387e-06f, + 9.572182772489344e-06f, 7.573673021989436e-06f, 4.016100018535679e-06f, -1.0681717109783684e-07f, -3.770766054468487e-06f, -6.1664774806085404e-06f, + -6.868846754126758e-06f, -5.896943190857115e-06f, -3.661909388482541e-06f, -8.270502826770229e-07f, 1.8769928536209681e-06f, 3.832827875404265e-06f, + 4.66981747470593e-06f, 4.323696092525644e-06f, 3.016287801367824e-06f, 1.169289632945126e-06f, -7.195568958705088e-07f, -2.203734205629703e-06f, + -2.9876264959214665e-06f, -2.9779202914242935e-06f, -2.2802225651653813e-06f, -1.1484798394999376e-06f, 9.467860877910933e-08f, 1.143733350219884e-06f, + 1.7806663582809258e-06f, 1.9149301373470155e-06f, 1.5873541986613687e-06f, 9.419097945454788e-07f, 1.765979842996413e-07f, -5.116868845731189e-07f, + -9.740376083153232e-07f, -1.1379118280829263e-06f, -1.0127802760012628e-06f, -6.750429872594422e-07f, -2.390462883978719e-07f, 1.7654259185517028e-07f, + 4.780008570940273e-07f, 6.149318849908952e-07f, 5.849848067357207e-07f, 4.25999961202196e-07f, 1.9964925679003818e-07f, -2.7891854588389937e-08f, + -2.0288946624290177e-07f, -2.9478799977106246e-07f, -2.9916558380919976e-07f, -2.3360609465673318e-07f, -1.2887790166769242e-07f, -1.8575955256728605e-08f, + 6.98165233472851e-08f, 1.2043301999843577e-07f, 1.3038003060051805e-07f, 1.0746842146236057e-07f, 6.56984160679439e-08f, 2.0187158038407728e-08f, + -1.6985910384779763e-08f, -3.911531647701826e-08f, -4.518884483648565e-08f, -3.859576051529636e-08f, -2.4984867921475803e-08f, -1.0089665711571232e-08f, + 1.8556810104194671e-09f, 8.81636638720527e-09f, 1.0817071302193613e-08f, 9.246128218035411e-09f, 5.9789349448002054e-09f, 2.645711238283505e-09f, + 2.28107470502183e-10f, -9.930951082636695e-10f, -1.2410008763135097e-09f, -9.51381731279286e-10f, -5.248064118418001e-10f, -1.9709071280477305e-10f, + -3.1335654479869494e-11f, 1.537678992124691e-11f, 1.1828539027346112e-11f, 2.691239924154828e-12f, 0, 0 +}; + + + + +/* ===== Init functions ===== */ + +SCD_FIR *p863_up_1_to_2_init(void) { + return fir_initialization(P863_LEN2, p863_coeff_2, 2.0, 2L, 'U'); +} + +SCD_FIR *p863_down_2_to_1_init(void) { + return fir_initialization(P863_LEN2, p863_coeff_2, 1.0, 2L, 'D'); +} + +SCD_FIR *p863_up_1_to_3_init(void) { + return fir_initialization(P863_LEN3, p863_coeff_3, 3.0, 3L, 'U'); +} + +SCD_FIR *p863_down_3_to_1_init(void) { + return fir_initialization(P863_LEN3, p863_coeff_3, 1.0, 3L, 'D'); +} + +SCD_FIR *p863_up_1_to_4_init(void) { + return fir_initialization(P863_LEN4, p863_coeff_4, 4.0, 4L, 'U'); +} + +SCD_FIR *p863_down_4_to_1_init(void) { + return fir_initialization(P863_LEN4, p863_coeff_4, 1.0, 4L, 'D'); +} + +SCD_FIR *p863_up_1_to_6_init(void) { + return fir_initialization(P863_LEN6, p863_coeff_6, 6.0, 6L, 'U'); +} + +SCD_FIR *p863_down_6_to_1_init(void) { + return fir_initialization(P863_LEN6, p863_coeff_6, 1.0, 6L, 'D'); +} diff --git a/src/fir/firdemo.c b/src/fir/firdemo.c index 2ca7b43..3cc9880 100644 --- a/src/fir/firdemo.c +++ b/src/fir/firdemo.c @@ -430,19 +430,19 @@ int main (int argc, char *argv[]) { GET_PAR_L (4, "_Delta-SM filtering (0:skip, 1:apply): ... ", delta_sm); GET_PAR_L (5, "_First Up-Sampling (0, 2, -2, 3): ..... ", up_1); - if ((up_1 != 0) && (up_1 != 2) && (up_1 != -2) && (up_1 != 3)) + if ((up_1 != 0) && (up_1 != 2) && (up_1 != -2) && (up_1 != 3) && (up_1 != 4) && (up_1 != 6)) error_terminate ("wrong upsampling factor\n", 1); GET_PAR_L (6, "_Second Up-Sampling (0, 2, -2, 3): .... ", up_2); - if ((up_2 != 0) && (up_2 != 2) && (up_2 != -2) && (up_2 != 3)) + if ((up_2 != 0) && (up_2 != 2) && (up_2 != -2) && (up_2 != 3) && (up_2 != 4) && (up_2 != 6)) error_terminate ("wrong upsampling factor\n", 1); GET_PAR_L (7, "_First Down-Sampling (0, 2, -2, 3): .... ", down_1); - if ((down_1 != 0) && (down_1 != 2) && (down_1 != -2) && (down_1 != 3)) + if ((down_1 != 0) && (down_1 != 2) && (down_1 != -2) && (down_1 != 3) && (down_1 != 4) && (down_1 != 6)) error_terminate ("wrong downsampling factor\n", 1); GET_PAR_L (8, "_Second Down-Sampling (0, 2, -2, 3): .... ", down_2); - if ((down_2 != 0) && (down_2 != 2) && (down_2 != -2) && (down_2 != 3)) + if ((down_2 != 0) && (down_2 != 2) && (down_2 != -2) && (down_2 != 3) && (down_2 != 4) && (down_2 != 6)) error_terminate ("wrong downsampling factor\n", 1); FIND_PAR_L (9, "_Segment Length for Filtering: ........... ", lseg, lseg); @@ -455,13 +455,13 @@ int main (int argc, char *argv[]) { /* * ... Allocate memory ... */ - sh_buff = (short *) calloc (9l * lseg, sizeof (short)); + sh_buff = (short *) calloc (36l * lseg, sizeof (short)); fl_buff = (float *) calloc (lseg, sizeof (float)); irs_buff = (float *) calloc (lseg, sizeof (float)); - up1_buff = (float *) calloc (3l * lseg, sizeof (float)); - up2_buff = (float *) calloc (9l * lseg, sizeof (float)); - down1_buff = (float *) calloc (9l * lseg, sizeof (float)); - down2_buff = (float *) calloc (9l * lseg, sizeof (float)); + up1_buff = (float *) calloc (6l * lseg, sizeof (float)); + up2_buff = (float *) calloc (36l * lseg, sizeof (float)); + down1_buff = (float *) calloc (36l * lseg, sizeof (float)); + down2_buff = (float *) calloc (36l * lseg, sizeof (float)); if (!(sh_buff && fl_buff && irs_buff && up1_buff && up2_buff && down1_buff && down2_buff)) error_terminate ("Error allocating memory for sample buffers\n", 3); @@ -536,6 +536,12 @@ int main (int argc, char *argv[]) { /* get pointer to a struct which contains filter coefficients and cleared state variables for a upsampling factor of 3 */ if ((up1_ptr = hq_up_1_to_3_init ()) == 0) error_terminate ("hq_up_1_to_3 initialization failure!\n", 1); + } else if (up_1 == 4) { + if ((up1_ptr = p863_up_1_to_4_init ()) == 0) + error_terminate ("p863_up_1_to_4 initialization failure!\n", 1); + } else if (up_1 == 6) { + if ((up1_ptr = p863_up_1_to_6_init ()) == 0) + error_terminate ("p863_up_1_to_6 initialization failure!\n", 1); } else up1_ptr = NULL; @@ -553,6 +559,12 @@ int main (int argc, char *argv[]) { /* get pointer to a struct which contains filter coefficients and cleared state variables for a upsampling factor of 3 */ if ((up2_ptr = hq_up_1_to_3_init ()) == 0) error_terminate ("hq_up_1_to_3 initialization failure!\n", 1); + } else if (up_2 == 4) { + if ((up2_ptr = p863_up_1_to_4_init ()) == 0) + error_terminate ("p863_up_1_to_4 initialization failure!\n", 1); + } else if (up_2 == 6) { + if ((up2_ptr = p863_up_1_to_6_init ()) == 0) + error_terminate ("p863_up_1_to_6 initialization failure!\n", 1); } else up2_ptr = NULL; @@ -570,6 +582,12 @@ int main (int argc, char *argv[]) { /* get pointer to a struct which contains filter coefficients and cleared state variables for a downsampling factor of 3 */ if ((down1_ptr = hq_down_3_to_1_init ()) == 0) error_terminate ("hq_down_3_to_1 initialization failure!\n", 1); + } else if (down_1 == 4) { + if ((down1_ptr = p863_down_4_to_1_init ()) == 0) + error_terminate ("p863_down_4_to_1 initialization failure!\n", 1); + } else if (down_1 == 6) { + if ((down1_ptr = p863_down_6_to_1_init ()) == 0) + error_terminate ("p863_down_6_to_1 initialization failure!\n", 1); } else down1_ptr = NULL; @@ -587,6 +605,12 @@ int main (int argc, char *argv[]) { /* get pointer to a struct which contains filter coefficients and cleared state variables for a downsampling factor of 3 */ if ((down2_ptr = hq_down_3_to_1_init ()) == 0) error_terminate ("hq_down_3_to_1 initialization failure!\n", 1); + } else if (down_2 == 4) { + if ((down2_ptr = p863_down_4_to_1_init ()) == 0) + error_terminate ("p863_down_4_to_1 initialization failure!\n", 1); + } else if (down_2 == 6) { + if ((down2_ptr = p863_down_6_to_1_init ()) == 0) + error_terminate ("p863_down_6_to_1 initialization failure!\n", 1); } else down2_ptr = NULL; diff --git a/src/fir/firflt.h b/src/fir/firflt.h index 8d01741..50495a2 100644 --- a/src/fir/firflt.h +++ b/src/fir/firflt.h @@ -93,6 +93,14 @@ SCD_FIR *shq_down_2_to_1_init ARGS ((void)); SCD_FIR *shq_down_3_to_1_init ARGS ((void)); SCD_FIR *hp50_32khz_init ARGS ((void)); SCD_FIR *hp50_48khz_init ARGS ((void)); +SCD_FIR *p863_up_1_to_2_init ARGS ((void)); +SCD_FIR *p863_down_2_to_1_init ARGS ((void)); +SCD_FIR *p863_up_1_to_3_init ARGS ((void)); +SCD_FIR *p863_down_3_to_1_init ARGS ((void)); +SCD_FIR *p863_up_1_to_4_init ARGS ((void)); +SCD_FIR *p863_down_4_to_1_init ARGS ((void)); +SCD_FIR *p863_up_1_to_6_init ARGS ((void)); +SCD_FIR *p863_down_6_to_1_init ARGS ((void)); void hq_free ARGS ((SCD_FIR * fir_ptr)); void hq_reset ARGS ((SCD_FIR * fir_ptr)); diff --git a/src/fir/resampcoeff.h b/src/fir/resampcoeff.h new file mode 100644 index 0000000..9fed056 --- /dev/null +++ b/src/fir/resampcoeff.h @@ -0,0 +1,225 @@ +/* +Resampling filters +Parameters: + Up-/Down- sampling factor : 2, 3, 4, 6 + Normalized cutoff frequency : 0.475 + Taps length : 256, 384, 512, 768 +*/ + + +static const int LPFCOEFFS_1_TO_2_LEN = 256; +static const double LPFCOEFFS_1_TO_2[LPFCOEFFS_1_TO_2_LEN] = +{ + 0, 0, -6.5763719827429698e-010, -1.774023861733666e-009, 1.2414749056730942e-008, 1.9906123506125452e-008, -5.9510076264774008e-008, -9.6687532645616197e-008, 1.66884257199444e-007, 3.1237237262031871e-007, -3.3983941493666253e-007, + -7.8779955361649331e-007, 5.3948551236313662e-007, 1.6771858427505528e-006, -6.5717878611679203e-007, -3.1498182198772881e-006, 4.9176438991917664e-007, 5.3605197242465177e-006, 2.6627472229717859e-007, -8.4100490156544121e-006, + -2.0397385098007832e-006, 1.2297920626484224e-005, 5.3551467039425532e-006, -1.6871391475782036e-005, -1.0815998060702207e-005, 2.1775438559660563e-005, 1.9057372869734062e-005, -2.6409347486383157e-005, -3.0681905607647534e-005, + 2.9895950025429203e-005, 4.6178861973460251e-005, -3.1069520438032896e-005, -6.5829851372446374e-005, 2.8487821667709268e-005, 8.9606465148413245e-005, -2.0472772075678042e-005, -0.00011706671809786473, 5.1827046362012261e-006, + 0.0001472584530757325, 1.9282727971246898e-005, -0.00017863872344900064, -5.4746194835846432e-005, 0.00020901849289291851, 0.0001027885187579864, -0.00023554171126832167, -0.00016456285423100214, 0.00025470689810904595, + 0.00024059577819139221, -0.00026243778983911883, -0.00033058600417171713, 0.00025420742334478951, 0.00043321314468742269, -0.00022521731907383636, -0.00054597008359065545, 0.00017063031310737982, 0.00066503295722125297, + -8.5852225867947491e-005, -0.00078518239225245973, -3.314587132453256e-005, 0.00089978846282958065, 0.0001894763205778044, -0.0010008698109676916, -0.00038496894666652844, 0.0010792345735753637, 0.00061980740254703639, + -0.0011247072787871168, -0.00089218632521024968, 0.0011264418632411625, 0.0011980086053723093, -0.0010733166126649849, -0.0015306418300333473, 0.00095440236729098216, 0.0018807516238043274, -0.00075949101257426059, + -0.0022362271693290958, 0.00047966735940588935, 0.0025822106579300812, -0.00010790427373140747, -0.0029012378877155813, -0.00036034139785756989, 0.0031734918095996751, 0.00092655569989163675, -0.0033771646737769767, + -0.0015886405747488589, 0.0034889177121195229, 0.0023404544854695236, -0.0034844201489225525, -0.0031714384762093445, 0.0033389418457091574, 0.0040663397971393506, -0.0030279660137300175, -0.0050050371670088464, + 0.0025277799060584578, 0.0059624608057177722, -0.0018159915800828521, -0.0069085856029574037, 0.00087190838226179287, 0.0078084554717001839, 0.00032330475586840607, -0.0086221678375741368, -0.0017867964974218652, + 0.0093047031940857849, 0.0035346851016972076, -0.0098054137618684718, -0.0055834365845588117, 0.010066863561789697, 0.0079523551931751733, -0.010022489589275232, -0.010667874162915635, 0.0095921202839666011, 0.013770944722886543, + -0.0086734861247152375, -0.017330147658877984, 0.007125840656877094, 0.021466256724857198, -0.0047368917723037965, -0.02640196067996621, 0.0011508918522695137, 0.032573558475288276, 0.0043058942083083699, -0.04092002623534835, + -0.013123047317319701, 0.053800644355014922, 0.029432522332983702, -0.07905510753323601, -0.070603281955663899, 0.16653563152580322, 0.43210517492693151, 0.43210517492693151, 0.16653563152580322, -0.070603281955663899, + -0.07905510753323601, 0.029432522332983702, 0.053800644355014922, -0.013123047317319701, -0.04092002623534835, 0.0043058942083083699, 0.032573558475288276, 0.0011508918522695137, -0.02640196067996621, -0.0047368917723037965, + 0.021466256724857198, 0.007125840656877094, -0.017330147658877984, -0.0086734861247152375, 0.013770944722886543, 0.0095921202839666011, -0.010667874162915635, -0.010022489589275232, 0.0079523551931751733, 0.010066863561789697, + -0.0055834365845588117, -0.0098054137618684718, 0.0035346851016972076, 0.0093047031940857849, -0.0017867964974218652, -0.0086221678375741368, 0.00032330475586840607, 0.0078084554717001839, 0.00087190838226179287, -0.0069085856029574037, + -0.0018159915800828521, 0.0059624608057177722, 0.0025277799060584578, -0.0050050371670088464, -0.0030279660137300175, 0.0040663397971393506, 0.0033389418457091574, -0.0031714384762093445, -0.0034844201489225525, 0.0023404544854695236, + 0.0034889177121195229, -0.0015886405747488589, -0.0033771646737769767, 0.00092655569989163675, 0.0031734918095996751, -0.00036034139785756989, -0.0029012378877155813, -0.00010790427373140747, 0.0025822106579300812, 0.00047966735940588935, + -0.0022362271693290958, -0.00075949101257426059, 0.0018807516238043274, 0.00095440236729098216, -0.0015306418300333473, -0.0010733166126649849, 0.0011980086053723093, 0.0011264418632411625, -0.00089218632521024968, -0.0011247072787871168, + 0.00061980740254703639, 0.0010792345735753637, -0.00038496894666652844, -0.0010008698109676916, 0.0001894763205778044, 0.00089978846282958065, -3.314587132453256e-005, -0.00078518239225245973, -8.5852225867947491e-005, + 0.00066503295722125297, 0.00017063031310737982, -0.00054597008359065545, -0.00022521731907383636, 0.00043321314468742269, 0.00025420742334478951, -0.00033058600417171713, -0.00026243778983911883, 0.00024059577819139221, + 0.00025470689810904595, -0.00016456285423100214, -0.00023554171126832167, 0.0001027885187579864, 0.00020901849289291851, -5.4746194835846432e-005, -0.00017863872344900064, 1.9282727971246898e-005, 0.0001472584530757325, + 5.1827046362012261e-006, -0.00011706671809786473, -2.0472772075678042e-005, 8.9606465148413245e-005, 2.8487821667709268e-005, -6.5829851372446374e-005, -3.1069520438032896e-005, 4.6178861973460251e-005, 2.9895950025429203e-005, + -3.0681905607647534e-005, -2.6409347486383157e-005, 1.9057372869734062e-005, 2.1775438559660563e-005, -1.0815998060702207e-005, -1.6871391475782036e-005, 5.3551467039425532e-006, 1.2297920626484224e-005, -2.0397385098007832e-006, + -8.4100490156544121e-006, 2.6627472229717859e-007, 5.3605197242465177e-006, 4.9176438991917664e-007, -3.1498182198772881e-006, -6.5717878611679203e-007, 1.6771858427505528e-006, 5.3948551236313662e-007, -7.8779955361649331e-007, + -3.3983941493666253e-007, 3.1237237262031871e-007, 1.66884257199444e-007, -9.6687532645616197e-008, -5.9510076264774008e-008, 1.9906123506125452e-008, 1.2414749056730942e-008, -1.774023861733666e-009, -6.5763719827429698e-010, 0, 0 +}; + + +static const int LPFCOEFFS_1_TO_3_LEN = 384; +static const double LPFCOEFFS_1_TO_3[LPFCOEFFS_1_TO_3_LEN] = +{ + 0, 0, 2.3880746115417979e-012, -4.5343415972185956e-010, -1.7028923693853441e-009, -8.4389218922391723e-010, 7.0886322089252491e-009, 1.7823442117517211e-008, 1.0539111015548094e-008, -3.1035329229307842e-008, -7.8008721342201113e-008, + -5.5013179015273081e-008, 7.8373038971897041e-008, 2.2677624162079388e-007, 1.8723729611363639e-007, -1.3597919980774955e-007, -5.1525109043066013e-007, -4.9214912582622773e-007, 1.5611474641711949e-007, 9.8689786030031712e-007, + 1.0855171108011384e-006, -4.209163776439778e-008, -1.6581521032698434e-006, -2.1053975439152689e-006, -3.6241406240010495e-007, 2.4956190227089128e-006, 3.6955100599155535e-006, 1.2778541529707893e-006, -3.3921881683773868e-006, + -5.9806767317411985e-006, -2.9848210124607548e-006, 4.1449463649568185e-006, 9.0353737700341518e-006, 5.8098117598301362e-006, -4.4380986479937058e-006, -1.2847364087664612e-005, -1.0099718886239792e-005, 3.8341822726575751e-006, + 1.7279238895754075e-005, 1.6184956417715211e-005, -1.7766515950069911e-006, -2.2031421375875686e-005, -2.4332197474561585e-005, -2.3935893830332066e-006, 2.6610704187670043e-005, 3.4688827539044313e-005, 9.4059149174868379e-006, + -3.0308643847167159e-005, -4.7222326692234452e-005, -2.0011211342978361e-005, 3.21940723469157e-005, 6.165879748525753e-005, 3.4917099927271079e-005, -3.1123582207292488e-005, -7.7425667680991548e-005, -5.4708999269250088e-005, + 2.577308987781682e-005, 9.3604140221858044e-005, 7.9760289617795927e-005, -1.4692502254423751e-005, -0.00010889717026579475, -0.00011013620268662548, -3.6158556879223616e-006, 0.0001216185724870181, 0.00014549727178608354, + 3.0595982474299318e-005, -0.00012970827460345757, -0.00018500914128594408, -6.7516766125712941e-005, 0.00013077773401920316, 0.00022726616314751351, 0.00011533479050810643, -0.00012218814922106667, -0.0002702364280887844, + -0.00017454748366115282, 0.00010116237881355587, 0.00031123563710566926, 0.00024504420572403208, -6.4929506879834371e-005, -0.0003469364881548334, -0.00032596406894792673, 1.0898863908295805e-005, 0.00037341903410889127, + 0.00041557007503908419, 6.3141854669029868e-005, -0.00038626579342104116, -0.00051114946203511689, -0.00015881180649481054, 0.00038070332659446656, 0.00060894991394983033, 0.00027691484340688086, -0.00035178962058860294, + -0.00070416047005391713, -0.00041722076140240455, 0.0002946440659191659, 0.00079094457776394305, 0.00057826177316502804, -0.00020471420364945214, -0.00086253079886660299, -0.00075715647434190857, 7.8070911470995362e-005, + 0.00091136427280373545, 0.00094947338778067448, 8.8278554519033553e-005, -0.0009293192651450272, -0.0011491452952806316, -0.00029607208887276254, 0.00090797011524895829, 0.0013484439951688934, 0.00054548255243221946, + -0.000838914799088754, -0.001538022883205785, -0.0008348301978265524, 0.00071414231291492831, 0.0017070319061425984, 0.0011603318483905376, -0.00052643234200925183, -0.0018433060757642621, -0.0015158999272543692, 0.0002697733894813892, + 0.0019336249762676805, 0.0018930024652897349, 6.021611870556079e-005, -0.0019640366858605209, -0.0022805922944297693, -0.00046588009586367909, 0.0019202354051257818, 0.0026651097342190338, 0.00094714667042056667, -0.0017879779679787202, + -0.0030305581721061983, -0.0015011947191469351, 0.0015535203986233206, 0.0033586459453791243, 0.0021221776374211261, -0.0012040517954721853, -0.0036289806756199228, -0.0028010130124567607, 0.00072809898190702991, 0.003819293305134377, + 0.003525241226079005, -0.00011587128589573347, -0.0039056577872044335, -0.0042789481851768178, -0.0006404901001903022, 0.0038626572576360109, 0.0050427365221956564, 0.0015468006178818786, -0.0036634258809922441, -0.0057937141549434489, + -0.0026069121453312217, 0.0032794623708833487, 0.0065054460370959485, 0.0038230566948668477, -0.002680056749194326, -0.0071477783712048451, -0.0051965616268714477, 0.0018310771148689472, 0.0076863825761675714, 0.0067291104816989663, + -0.00069268873089433464, -0.0080817538371880607, -0.0084248543076559067, -0.00078476133674093313, 0.0082871806988380516, 0.010293946989183475, 0.0026681594256980651, -0.0082447475286898889, -0.012358661120613597, -0.0050553447712100314, + 0.0078774100284280009, 0.01466459885817459, 0.0081018116965398818, -0.0070726742803038133, -0.017302973136825221, -0.012076765102941719, 0.0056465299509595125, 0.020459849179604396, 0.017493985702572986, -0.0032545471025644682, + -0.024541438327006275, -0.025466852745084697, -0.00086649040778759723, 0.030563214485593314, 0.038914791575798587, 0.0088735876642893445, -0.041810097260969986, -0.068593882874520951, -0.030308278060979799, 0.077444747987009496, + 0.21148838226467084, 0.30375847843681869, 0.30375847843681869, 0.21148838226467084, 0.077444747987009496, -0.030308278060979799, -0.068593882874520951, -0.041810097260969986, 0.0088735876642893445, 0.038914791575798587, 0.030563214485593314, + -0.00086649040778759723, -0.025466852745084697, -0.024541438327006275, -0.0032545471025644682, 0.017493985702572986, 0.020459849179604396, 0.0056465299509595125, -0.012076765102941719, -0.017302973136825221, -0.0070726742803038133, + 0.0081018116965398818, 0.01466459885817459, 0.0078774100284280009, -0.0050553447712100314, -0.012358661120613597, -0.0082447475286898889, 0.0026681594256980651, 0.010293946989183475, 0.0082871806988380516, -0.00078476133674093313, + -0.0084248543076559067, -0.0080817538371880607, -0.00069268873089433464, 0.0067291104816989663, 0.0076863825761675714, 0.0018310771148689472, -0.0051965616268714477, -0.0071477783712048451, -0.002680056749194326, 0.0038230566948668477, + 0.0065054460370959485, 0.0032794623708833487, -0.0026069121453312217, -0.0057937141549434489, -0.0036634258809922441, 0.0015468006178818786, 0.0050427365221956564, 0.0038626572576360109, -0.0006404901001903022, -0.0042789481851768178, + -0.0039056577872044335, -0.00011587128589573347, 0.003525241226079005, 0.003819293305134377, 0.00072809898190702991, -0.0028010130124567607, -0.0036289806756199228, -0.0012040517954721853, 0.0021221776374211261, 0.0033586459453791243, + 0.0015535203986233206, -0.0015011947191469351, -0.0030305581721061983, -0.0017879779679787202, 0.00094714667042056667, 0.0026651097342190338, 0.0019202354051257818, -0.00046588009586367909, -0.0022805922944297693, -0.0019640366858605209, + 6.021611870556079e-005, 0.0018930024652897349, 0.0019336249762676805, 0.0002697733894813892, -0.0015158999272543692, -0.0018433060757642621, -0.00052643234200925183, 0.0011603318483905376, 0.0017070319061425984, 0.00071414231291492831, + -0.0008348301978265524, -0.001538022883205785, -0.000838914799088754, 0.00054548255243221946, 0.0013484439951688934, 0.00090797011524895829, -0.00029607208887276254, -0.0011491452952806316, -0.0009293192651450272, 8.8278554519033553e-005, + 0.00094947338778067448, 0.00091136427280373545, 7.8070911470995362e-005, -0.00075715647434190857, -0.00086253079886660299, -0.00020471420364945214, 0.00057826177316502804, 0.00079094457776394305, 0.0002946440659191659, -0.00041722076140240455, + -0.00070416047005391713, -0.00035178962058860294, 0.00027691484340688086, 0.00060894991394983033, 0.00038070332659446656, -0.00015881180649481054, -0.00051114946203511689, -0.00038626579342104116, 6.3141854669029868e-005, 0.00041557007503908419, + 0.00037341903410889127, 1.0898863908295805e-005, -0.00032596406894792673, -0.0003469364881548334, -6.4929506879834371e-005, 0.00024504420572403208, 0.00031123563710566926, 0.00010116237881355587, -0.00017454748366115282, -0.0002702364280887844, + -0.00012218814922106667, 0.00011533479050810643, 0.00022726616314751351, 0.00013077773401920316, -6.7516766125712941e-005, -0.00018500914128594408, -0.00012970827460345757, 3.0595982474299318e-005, 0.00014549727178608354, 0.0001216185724870181, + -3.6158556879223616e-006, -0.00011013620268662548, -0.00010889717026579475, -1.4692502254423751e-005, 7.9760289617795927e-005, 9.3604140221858044e-005, 2.577308987781682e-005, -5.4708999269250088e-005, -7.7425667680991548e-005, + -3.1123582207292488e-005, 3.4917099927271079e-005, 6.165879748525753e-005, 3.21940723469157e-005, -2.0011211342978361e-005, -4.7222326692234452e-005, -3.0308643847167159e-005, 9.4059149174868379e-006, 3.4688827539044313e-005, + 2.6610704187670043e-005, -2.3935893830332066e-006, -2.4332197474561585e-005, -2.2031421375875686e-005, -1.7766515950069911e-006, 1.6184956417715211e-005, 1.7279238895754075e-005, 3.8341822726575751e-006, -1.0099718886239792e-005, + -1.2847364087664612e-005, -4.4380986479937058e-006, 5.8098117598301362e-006, 9.0353737700341518e-006, 4.1449463649568185e-006, -2.9848210124607548e-006, -5.9806767317411985e-006, -3.3921881683773868e-006, 1.2778541529707893e-006, + 3.6955100599155535e-006, 2.4956190227089128e-006, -3.6241406240010495e-007, -2.1053975439152689e-006, -1.6581521032698434e-006, -4.209163776439778e-008, 1.0855171108011384e-006, 9.8689786030031712e-007, 1.5611474641711949e-007, + -4.9214912582622773e-007, -5.1525109043066013e-007, -1.3597919980774955e-007, 1.8723729611363639e-007, 2.2677624162079388e-007, 7.8373038971897041e-008, -5.5013179015273081e-008, -7.8008721342201113e-008, -3.1035329229307842e-008, + 1.0539111015548094e-008, 1.7823442117517211e-008, 7.0886322089252491e-009, -8.4389218922391723e-010, -1.7028923693853441e-009, -4.5343415972185956e-010, 2.3880746115417979e-012, 0, 0 +}; + + +static const int LPFCOEFFS_1_TO_4_LEN = 512; +static const double LPFCOEFFS_1_TO_4[LPFCOEFFS_1_TO_4_LEN] = +{ + 0, 0, 1.2991300775641274e-011, -1.2707556082002351e-011, -3.2425901472574716e-010, -1.0883363753489433e-009, -1.6539754909023193e-009, -2.5306638148159503e-010, 4.6922554722760015e-009, 1.181771621965007e-008, 1.5006931505612116e-008, + 5.770009765206447e-009, -1.937574551353074e-008, -5.0733699722879473e-008, -6.4435562067720226e-008, -3.4537375713770012e-008, 4.4886324268854339e-008, 1.4175441950830963e-007, 1.901946665452237e-007, 1.2521543110183777e-007, -6.5385951650446323e-008, + -3.0529784057633844e-007, -4.4552027731676405e-007, -3.4198581792193991e-007, 3.7750632728188289e-008, 5.4597604016948108e-007, 8.8870368325704737e-007, 7.7513935598282221e-007, 1.1791740049431614e-007, -8.3808796504828515e-007, -1.5702031530906168e-006, + -1.536205786841987e-006, -5.2444251543363319e-007, 1.1106014047140515e-006, 2.5154574038238641e-006, 2.7469049544104547e-006, 1.3485949945425106e-006, -1.2336559964009238e-006, -3.7046772503896565e-006, -4.5217874607741393e-006, -2.7954522583957969e-006, + 1.0088026964542039e-006, 5.0514538092647904e-006, 6.9451049030878232e-006, 5.0950299477778259e-006, -1.6519189909568147e-007, -6.3824810093024639e-006, -1.0043156185704507e-005, -8.4807201693071729e-006, -1.6362846427710696e-006, 7.4209992433966567e-006, + 1.3754041839375716e-005, 1.3159805012876274e-005, 4.7893062148516272e-006, -7.7766860978098976e-006, -1.7897365097928146e-005, -1.9277118540992935e-005, -9.7179045590200661e-006, 6.9446209274304517e-006, 2.2146890621458765e-005, 2.6873753571239316e-005, + 1.684150057211881e-005, -4.3156183769251289e-006, -2.6009458841959451e-005, -3.5843488818954927e-005, -2.6529876447755036e-005, -8.0033653252456703e-007, 2.8813515148244846e-005, 4.5890283790004377e-005, 3.9049724838544477e-005, 9.1365939622411569e-006, + -2.9710420736075288e-005, -5.6490692333679118e-005, -5.4505381568332704e-005, -2.1418279849748793e-005, 2.7691253875670086e-005, 6.6865327122357987e-005, 7.2777247590539486e-005, 3.8297745251674225e-005, -2.1621092092996811e-005, -7.5963523780117143e-005, + -9.3462168963660331e-005, -6.0279241656939397e-005, 1.0291811123820618e-005, 8.2465076906938003e-005, 0.00011582060395798645, 8.7636174835099346e-005, 7.5067128318299611e-006, -8.4802340324581618e-005, -0.00013873570570011262, -0.0001203253394264482, + -3.2898397074899073e-005, 8.120510932793255e-005, 0.000160689441369783, 0.000157903422423803, 6.6818493340418711e-005, -6.9769562397852168e-005, -0.000179760525719859, -0.00019945171250628253, -0.00010990096150128463, 4.8551182005757067e-005, + 0.00019364825783285604, 0.00024351529998844964, 0.00016236099411512037, -1.5680064739162381e-005, -0.00019972532707688388, -0.0002880630492939974, -0.00022387905263177607, -3.050454944990755e-005, 0.0001951213306372152, 0.00033047424095655645, + 0.00029349354783893511, 9.1305259417296164e-005, -0.00017683717551561084, -0.00036755700317456555, -0.00036950972708088466, -0.00016750917047607462, 0.00014188879655118605, 0.00039560249725767465, 0.00044943236376185309, 0.00025922965136282954, + -8.7476798947036595e-005, -0.00041047732432792277, -0.00052992944540913151, -0.00036575550914296308, 1.1176830869681065e-005, 0.00040775484320920816, 0.00060683321317945053, 0.00048541645050176384, 8.8856182615531425e-005, -0.00038288411373427265, + -0.00067518363162964203, -0.00061547378936438295, -0.00021367824941249459, 0.00033139310592028765, 0.00072931770252621434, 0.00075204496166919219, 0.00036335036355604033, -0.00024912075740064326, -0.00076300604565189946, -0.00089006950059767654, + -0.00053674646022862339, 0.00013247054126936693, 0.00076963594160629051, 0.0010233227184114771, 0.00073138547786510608, 2.1323451182260114e-005, -0.00074243767508255776, -0.0011444814700838244, -0.00094329730998014372, -0.00021392818189837774, + 0.00067474865601776916, 0.0012452441007728369, 0.0011669314035000333, 0.00044565213691552356, -0.00056030756436640204, -0.0013165040882592428, -0.0013951151208165271, -0.00071520581997195915, 0.00039356880031575899, 0.0013485740849686467, + 0.0016190667406393176, 0.0010194929859247677, -0.00017002596254656562, -0.0013314541552569158, -0.0018284651554870807, -0.001353442067829303, -0.0001134679462787328, 0.0012551351073552717, 0.0020115749654969514, 0.0017098851670412384, + 0.00045839625281909662, -0.0011099250414032592, -0.0021554217941780712, -0.0020794890014819126, -0.00086430254381240619, 0.00088678465690993807, 0.0022460082525491186, 0.0024507382477172422, 0.0013285537607450467, -0.00057765452267233167, + -0.0022685559702115064, -0.0028099666043646396, -0.0018461511224713029, 0.00017575537588122359, 0.0022077532717846532, 0.0031414243452301755, 0.0024095940580942778, 0.00032415956388605371, -0.0020479809296349767, -0.0034273625532641925, + -0.0030087974002319393, -0.00092562364210352919, 0.0017734790441972653, 0.0036481025697628205, 0.0036310552229069891, 0.0016303738513069896, -0.001368404750316566, -0.0037820424712046289, -0.0042610350023839809, -0.0024383980707250062, + 0.00081670985585691235, 0.003805526844837627, 0.0048807714861798645, 0.003348154464813144, -0.00010173346597469165, -0.0036924645319536932, -0.0054696073262410737, -0.0043570237106262608, -0.00079465506588950003, 0.0034135069393125004, + 0.0060039901560955591, 0.0054620908934884223, 0.0018936377807628284, -0.0029344671440546819, -0.006456968557164035, -0.0066614258817064651, -0.0032222434382727294, 0.0022134023306814203, 0.0067970993883716239, 0.0079561795826758805, 0.0048182850578203078, + -0.0011952485864216802, -0.0069862086241404206, -0.0093541363086029564, -0.0067393293208882765, -0.0001982873562654969, 0.0069748394581529245, 0.010876113057789582, 0.00907985855652922, 0.0020887325681544387, -0.0066927219904553631, -0.012568502698548978, + -0.012006696703631388, -0.0046835473110329639, 0.0060274682007092698, 0.014530689614650228, 0.015840190875226187, 0.0083776970127212753, -0.0047715535039593174, -0.01698411980367491, -0.021269320646164838, -0.014036005642908779, 0.002466651529467916, + 0.020484382547902292, 0.030057648450837238, 0.02398882053926445, 0.002192590255406906, -0.026810202530847604, -0.048354198455725798, -0.047371868960809409, -0.015136077510692051, 0.045944787176249516, 0.12178387323751173, 0.1909000411869741, + 0.23202473878914937, 0.23202473878914937, 0.1909000411869741, 0.12178387323751173, 0.045944787176249516, -0.015136077510692051, -0.047371868960809409, -0.048354198455725798, -0.026810202530847604, 0.002192590255406906, 0.02398882053926445, + 0.030057648450837238, 0.020484382547902292, 0.002466651529467916, -0.014036005642908779, -0.021269320646164838, -0.01698411980367491, -0.0047715535039593174, 0.0083776970127212753, 0.015840190875226187, 0.014530689614650228, 0.0060274682007092698, + -0.0046835473110329639, -0.012006696703631388, -0.012568502698548978, -0.0066927219904553631, 0.0020887325681544387, 0.00907985855652922, 0.010876113057789582, 0.0069748394581529245, -0.0001982873562654969, -0.0067393293208882765, -0.0093541363086029564, + -0.0069862086241404206, -0.0011952485864216802, 0.0048182850578203078, 0.0079561795826758805, 0.0067970993883716239, 0.0022134023306814203, -0.0032222434382727294, -0.0066614258817064651, -0.006456968557164035, -0.0029344671440546819, 0.0018936377807628284, + 0.0054620908934884223, 0.0060039901560955591, 0.0034135069393125004, -0.00079465506588950003, -0.0043570237106262608, -0.0054696073262410737, -0.0036924645319536932, -0.00010173346597469165, 0.003348154464813144, 0.0048807714861798645, 0.003805526844837627, + 0.00081670985585691235, -0.0024383980707250062, -0.0042610350023839809, -0.0037820424712046289, -0.001368404750316566, 0.0016303738513069896, 0.0036310552229069891, 0.0036481025697628205, 0.0017734790441972653, -0.00092562364210352919, -0.0030087974002319393, + -0.0034273625532641925, -0.0020479809296349767, 0.00032415956388605371, 0.0024095940580942778, 0.0031414243452301755, 0.0022077532717846532, 0.00017575537588122359, -0.0018461511224713029, -0.0028099666043646396, -0.0022685559702115064, + -0.00057765452267233167, 0.0013285537607450467, 0.0024507382477172422, 0.0022460082525491186, 0.00088678465690993807, -0.00086430254381240619, -0.0020794890014819126, -0.0021554217941780712, -0.0011099250414032592, 0.00045839625281909662, + 0.0017098851670412384, 0.0020115749654969514, 0.0012551351073552717, -0.0001134679462787328, -0.001353442067829303, -0.0018284651554870807, -0.0013314541552569158, -0.00017002596254656562, 0.0010194929859247677, 0.0016190667406393176, 0.0013485740849686467, + 0.00039356880031575899, -0.00071520581997195915, -0.0013951151208165271, -0.0013165040882592428, -0.00056030756436640204, 0.00044565213691552356, 0.0011669314035000333, 0.0012452441007728369, 0.00067474865601776916, -0.00021392818189837774, + -0.00094329730998014372, -0.0011444814700838244, -0.00074243767508255776, 2.1323451182260114e-005, 0.00073138547786510608, 0.0010233227184114771, 0.00076963594160629051, 0.00013247054126936693, -0.00053674646022862339, -0.00089006950059767654, + -0.00076300604565189946, -0.00024912075740064326, 0.00036335036355604033, 0.00075204496166919219, 0.00072931770252621434, 0.00033139310592028765, -0.00021367824941249459, -0.00061547378936438295, -0.00067518363162964203, -0.00038288411373427265, + 8.8856182615531425e-005, 0.00048541645050176384, 0.00060683321317945053, 0.00040775484320920816, 1.1176830869681065e-005, -0.00036575550914296308, -0.00052992944540913151, -0.00041047732432792277, -8.7476798947036595e-005, 0.00025922965136282954, + 0.00044943236376185309, 0.00039560249725767465, 0.00014188879655118605, -0.00016750917047607462, -0.00036950972708088466, -0.00036755700317456555, -0.00017683717551561084, 9.1305259417296164e-005, 0.00029349354783893511, 0.00033047424095655645, + 0.0001951213306372152, -3.050454944990755e-005, -0.00022387905263177607, -0.0002880630492939974, -0.00019972532707688388, -1.5680064739162381e-005, 0.00016236099411512037, 0.00024351529998844964, 0.00019364825783285604, 4.8551182005757067e-005, + -0.00010990096150128463, -0.00019945171250628253, -0.000179760525719859, -6.9769562397852168e-005, 6.6818493340418711e-005, 0.000157903422423803, 0.000160689441369783, 8.120510932793255e-005, -3.2898397074899073e-005, -0.0001203253394264482, + -0.00013873570570011262, -8.4802340324581618e-005, 7.5067128318299611e-006, 8.7636174835099346e-005, 0.00011582060395798645, 8.2465076906938003e-005, 1.0291811123820618e-005, -6.0279241656939397e-005, -9.3462168963660331e-005, -7.5963523780117143e-005, + -2.1621092092996811e-005, 3.8297745251674225e-005, 7.2777247590539486e-005, 6.6865327122357987e-005, 2.7691253875670086e-005, -2.1418279849748793e-005, -5.4505381568332704e-005, -5.6490692333679118e-005, -2.9710420736075288e-005, 9.1365939622411569e-006, + 3.9049724838544477e-005, 4.5890283790004377e-005, 2.8813515148244846e-005, -8.0033653252456703e-007, -2.6529876447755036e-005, -3.5843488818954927e-005, -2.6009458841959451e-005, -4.3156183769251289e-006, 1.684150057211881e-005, 2.6873753571239316e-005, + 2.2146890621458765e-005, 6.9446209274304517e-006, -9.7179045590200661e-006, -1.9277118540992935e-005, -1.7897365097928146e-005, -7.7766860978098976e-006, 4.7893062148516272e-006, 1.3159805012876274e-005, 1.3754041839375716e-005, 7.4209992433966567e-006, + -1.6362846427710696e-006, -8.4807201693071729e-006, -1.0043156185704507e-005, -6.3824810093024639e-006, -1.6519189909568147e-007, 5.0950299477778259e-006, 6.9451049030878232e-006, 5.0514538092647904e-006, 1.0088026964542039e-006, -2.7954522583957969e-006, + -4.5217874607741393e-006, -3.7046772503896565e-006, -1.2336559964009238e-006, 1.3485949945425106e-006, 2.7469049544104547e-006, 2.5154574038238641e-006, 1.1106014047140515e-006, -5.2444251543363319e-007, -1.536205786841987e-006, -1.5702031530906168e-006, + -8.3808796504828515e-007, 1.1791740049431614e-007, 7.7513935598282221e-007, 8.8870368325704737e-007, 5.4597604016948108e-007, 3.7750632728188289e-008, -3.4198581792193991e-007, -4.4552027731676405e-007, -3.0529784057633844e-007, -6.5385951650446323e-008, + 1.2521543110183777e-007, 1.901946665452237e-007, 1.4175441950830963e-007, 4.4886324268854339e-008, -3.4537375713770012e-008, -6.4435562067720226e-008, -5.0733699722879473e-008, -1.937574551353074e-008, 5.770009765206447e-009, 1.5006931505612116e-008, + 1.181771621965007e-008, 4.6922554722760015e-009, -2.5306638148159503e-010, -1.6539754909023193e-009, -1.0883363753489433e-009, -3.2425901472574716e-010, -1.2707556082002351e-011, 1.2991300775641274e-011, 0, 0 +}; + + +static const int LPFCOEFFS_1_TO_6_LEN = 768; +static const double LPFCOEFFS_1_TO_6[LPFCOEFFS_1_TO_6_LEN] = +{ + 0, 0, 2.6912399241548279e-012, 1.1828539027346112e-011, 1.5376789921246911e-011, -3.1335654479869494e-011, -1.9709071280477305e-010, -5.2480641184180015e-010, -9.5138173127928603e-010, -1.2410008763135097e-009, -9.9309510826366946e-010, + 2.2810747050218301e-010, 2.6457112382835052e-009, 5.9789349448002054e-009, 9.246128218035411e-009, 1.0817071302193613e-008, 8.8163663872052699e-009, 1.8556810104194671e-009, -1.0089665711571232e-008, -2.4984867921475803e-008, -3.8595760515296358e-008, + -4.5188844836485652e-008, -3.9115316477018262e-008, -1.6985910384779763e-008, 2.0187158038407728e-008, 6.5698416067943898e-008, 1.0746842146236057e-007, 1.3038003060051805e-007, 1.2043301999843577e-007, 6.9816523347285096e-008, -1.8575955256728605e-008, + -1.2887790166769242e-007, -2.3360609465673318e-007, -2.9916558380919976e-007, -2.9478799977106246e-007, -2.0288946624290177e-007, -2.7891854588389937e-008, 1.9964925679003818e-007, 4.2599996120219602e-007, 5.849848067357207e-007, 6.1493188499089521e-007, + 4.7800085709402728e-007, 1.7654259185517028e-007, -2.3904628839787191e-007, -6.7504298725944225e-007, -1.0127802760012628e-006, -1.1379118280829263e-006, -9.7403760831532322e-007, -5.1168688457311887e-007, 1.7659798429964129e-007, 9.4190979454547883e-007, + 1.5873541986613687e-006, 1.9149301373470155e-006, 1.7806663582809258e-006, 1.143733350219884e-006, 9.4678608779109327e-008, -1.1484798394999376e-006, -2.2802225651653813e-006, -2.9779202914242935e-006, -2.9876264959214665e-006, -2.203734205629703e-006, + -7.1955689587050876e-007, 1.169289632945126e-006, 3.016287801367824e-006, 4.3236960925256437e-006, 4.6698174747059302e-006, 3.8328278754042647e-006, 1.8769928536209681e-006, -8.270502826770229e-007, -3.6619093884825409e-006, -5.8969431908571148e-006, + -6.8688467541267578e-006, -6.1664774806085404e-006, -3.770766054468487e-006, -1.0681717109783684e-007, 4.0161000185356791e-006, 7.5736730219894364e-006, 9.5721827724893438e-006, 9.3139038392063871e-006, 6.613913881503402e-006, 1.9054003350526885e-006, + -3.8065895539510662e-006, -9.1470138590096945e-006, -1.2691498798386898e-005, -1.3333643382732469e-005, -1.0607006582875768e-005, -4.8724000492981274e-006, 2.6923660034307631e-006, 1.0317342373158007e-005, 1.6042159651260656e-005, 1.8206686335406549e-005, + 1.5910878336996937e-005, 9.3207350534124419e-006, -2.740174359813823e-007, -1.0688739061583608e-005, -1.9326058052535849e-005, -2.3809127279542265e-005, -2.2615023926355254e-005, -1.5543839717163266e-005, -3.8872324521640265e-006, 9.7735684689527048e-006, + 2.2120119997218239e-005, 2.9886647783934581e-005, 3.0703449829090677e-005, 2.3780490067865001e-005, 1.024146219566499e-005, -7.006637231184095e-006, -2.3872746018477846e-005, -3.6033411178822827e-005, -4.0020288167972428e-005, -3.4174658157775568e-005, + -1.9213291464731999e-005, 1.7698780085840604e-006, 2.3910224388238513e-005, 4.1678050842057577e-005, 5.0237898294931096e-005, 4.6732536591469296e-005, 3.1157472832932869e-005, 6.572134618200237e-006, -2.145474134416278e-005, -4.607935202681541e-005, + -6.0830453784999769e-005, -6.1279446124084364e-005, -4.6308631624469501e-005, -1.8626278197123308e-005, 1.5655032748882834e-005, 4.8333950433914648e-005, 7.1056108796882235e-005, 7.7419793004586529e-005, 6.4727662366921408e-005, 3.4915841577919989e-005, + -5.6299938557223714e-006, -4.7397897683536541e-005, -7.9950732884416978e-005, -9.4503536694553477e-005, -8.6247922400028607e-005, -5.5818434667225641e-005, -9.4752766471068357e-006, 4.2123286825289712e-005, 8.633588458239913e-005, 0.0001116027274787376, + 0.00011042486406119114, 8.1499728300321093e-005, 3.0422431031760574e-005, -3.1310315318610432e-005, -8.8843161593761487e-005, -0.00012750155200331027, -0.00013649307135328725, -0.00011184660662576022, -5.7804183079220923e-005, 1.3774226033203211e-005, + 8.5956333139661909e-005, 0.00014070296987162006, 0.00016333477770404109, 0.00014640387262396037, 9.1963216239260724e-005, 1.1574443079405351e-005, -7.607175578778393e-005, -0.00014945443689276262, -0.00018946381166227083, -0.00018431901261959646, + -0.0001329097142102547, -4.5638896447594568e-005, 5.757653860596238e-005, 0.00015179440591692495, 0.0002130285335328205, 0.00022429965797227041, 0.00018024216434545852, 8.9037982507121174e-005, -2.8942808836272598e-005, -0.00014562030460083452, + -0.00023183668917914544, -0.00026458825304284705, -0.00023307650021536254, -0.00014200540887034094, -1.116470369424232e-005, 0.00012877755492326877, 0.00024340423431723786, 0.00030295803344061305, 0.00028998881291818565, 0.00020429142207811283, + 6.3771629949541041e-005, -9.9167977847498023e-005, -0.00024502910602816733, -0.00033673373853927404, -0.0003489767404299755, -0.00027507257783393138, -0.00012947230718511564, 5.4874683724266626e-005, 0.00023388968509776965, 0.00036283954499724997, + 0.00040744422418425631, 0.00035287542885270373, 0.00020830912486435524, 5.7006433543948051e-006, -0.00020716636324439341, -0.00037787554784881851, -0.00046221360244072572, -0.00043551985080457316, -0.0002996590281028708, -8.3693226603497292e-005, + 0.00016218327373728096, 0.00037822278267612763, 0.00050956800859941714, 0.00052008729324586316, 0.0004021335775498866, 0.00017962947202432243, -9.6565939832524028e-005, -0.00036017534034318133, -0.00054532579470017561, -0.00060291847991520244, + -0.00051349887014152679, -0.00029328667132385959, 8.4094237341040472e-006, 0.00032009664994853484, 0.00056494725771604902, 0.00067964400731477029, 0.00063062117037869991, 0.00042356504465827625, 0.00010354940020593262, -0.00025459557921401604, + -0.00056367237533274999, -0.00074524993590216503, -0.00074944327950371469, -0.00056837894338090456, -0.00023976249450019229, 0.00016071671200037333, 0.00053668663701351776, 0.00079417888486257502, 0.00086499549032453002, 0.00072457353628019154, + 0.00039971158899271758, -3.6138098156642948e-005, -0.00047931047204567478, -0.00082046539386724344, -0.00097144346508637621, -0.00088787238358591439, -0.00058176664880975348, -0.00012063098325035138, 0.000387206320324671, 0.00081790247868803183, + 0.0010621735733697998, 0.0010528599573031263, 0.00078306856885314595, 0.00031006007034170422, -0.00025659615587209989, -0.00078023446337935961, -0.0011299141868816099, -0.0012130014010906711, -0.00099944171507516575, -0.00053142309839626937, + 8.4481346508655827e-005, 0.00070136940180325937, 0.0011668892017168851, 0.001360699649507721, 0.0012253403293674297, 0.0007826466076227966, 0.00013114380113039367, -0.00057560278116474805, -0.0011649976932383162, -0.0014873874506915337, + -0.0014538306405106657, -0.0010601864459545338, -0.00039109352788825862, 0.0003978427911930665, 0.0011160111306802627, 0.001583648840995474, 0.0016766077219011598, 0.0013589369329189769, 0.00069481538344329447, -0.00016382628140147301, + -0.0010117769730132399, -0.0016393611363987892, -0.0018840426030750455, -0.0016721737676909565, -0.0010402454244288109, -0.00012968638587027814, 0.00084441464528985381, 0.0016438443679279932, 0.0020652506746522961, 0.0019915283235695642, + 0.0014236992360285891, 0.00048475010667512982, -0.00060648663795207782, -0.001585999954687689, -0.0022081666403885561, -0.0023069860593334167, -0.0018398015723057382, -0.00090212064186703355, 0.00029112333986494875, 0.0014544136183039329, + 0.0022996034419053152, 0.0026068950194864521, 0.0022814537885444343, 0.001381201221652482, 0.0001079256271408814, -0.0012373878562206998, -0.0023252613565889484, -0.0028779607130344355, -0.0027398331837579586, -0.0019200660782804076, + -0.00059634992247965563, 0.00092285437929671011, 0.0022696362905541838, 0.0031051890055405892, 0.0032044110974639535, 0.0025155804434977406, 0.001179498550313731, -0.00049809233594403084, -0.0021157482358274389, -0.0032717150482324516, + -0.0036629655414078164, -0.0031636439376678694, -0.0018628405052291059, -5.086484742755164e-005, 0.0018445621699828237, 0.003358415711090973, 0.004101546070654008, 0.0038595992992198572, 0.0026527959791814225, 0.00074033045596743718, + -0.0014338841732215583, -0.003343128797128057, -0.0045043166507546858, -0.0045988790858774971, -0.0035581673906755372, -0.001590923732936595, 0.00085634139322581058, 0.0031991578324900151, 0.0048531411534939433, 0.0053780271380782351, + 0.0045926028448984458, 0.0026310541529626051, -7.569452202221049e-005, -0.002892440783972528, -0.0051266495216433566, -0.0061963716449370257, -0.0057789667654033318, -0.0039032909617394158, -0.00096006562270283381, 0.0023760888885792867, + 0.0052982377621535112, 0.0070589522757058751, 0.007157527451734127, 0.0054766223377737669, 0.0023323020511577018, -0.001579362286885288, -0.0053317509190652645, -0.0079821284111872941, -0.0088025304997265356, -0.007471906569662577, + -0.0041805632082411318, 0.00038369874628930262, 0.0051716495971997909, 0.0090056332683754233, 0.010859429623592322, 0.010120560500457598, 0.0067707332394302787, 0.0014354647775230676, -0.0047182182149719983, -0.010222552117649898, + -0.013641241144069397, -0.013921285427190419, -0.010682921414477523, -0.0043746457509470545, 0.0037539092491463157, 0.011870220996013016, 0.017934418314331239, 0.020160315305735612, 0.017465723627126142, 0.0098111592928651938, + -0.0016567662826508281, -0.014704561453844802, -0.026352219834002717, -0.033402104849064786, -0.033060950449359014, -0.023534662965540829, -0.0044745524666263475, 0.022822436309568785, 0.055512077227906076, 0.089595232423060792, + 0.12054160595214061, 0.14403511595731089, 0.15670473689431666, 0.15670473689431666, 0.14403511595731089, 0.12054160595214061, 0.089595232423060792, 0.055512077227906076, 0.022822436309568785, -0.0044745524666263475, -0.023534662965540829, + -0.033060950449359014, -0.033402104849064786, -0.026352219834002717, -0.014704561453844802, -0.0016567662826508281, 0.0098111592928651938, 0.017465723627126142, 0.020160315305735612, 0.017934418314331239, 0.011870220996013016, + 0.0037539092491463157, -0.0043746457509470545, -0.010682921414477523, -0.013921285427190419, -0.013641241144069397, -0.010222552117649898, -0.0047182182149719983, 0.0014354647775230676, 0.0067707332394302787, 0.010120560500457598, + 0.010859429623592322, 0.0090056332683754233, 0.0051716495971997909, 0.00038369874628930262, -0.0041805632082411318, -0.007471906569662577, -0.0088025304997265356, -0.0079821284111872941, -0.0053317509190652645, -0.001579362286885288, + 0.0023323020511577018, 0.0054766223377737669, 0.007157527451734127, 0.0070589522757058751, 0.0052982377621535112, 0.0023760888885792867, -0.00096006562270283381, -0.0039032909617394158, -0.0057789667654033318, -0.0061963716449370257, + -0.0051266495216433566, -0.002892440783972528, -7.569452202221049e-005, 0.0026310541529626051, 0.0045926028448984458, 0.0053780271380782351, 0.0048531411534939433, 0.0031991578324900151, 0.00085634139322581058, -0.001590923732936595, + -0.0035581673906755372, -0.0045988790858774971, -0.0045043166507546858, -0.003343128797128057, -0.0014338841732215583, 0.00074033045596743718, 0.0026527959791814225, 0.0038595992992198572, 0.004101546070654008, 0.003358415711090973, + 0.0018445621699828237, -5.086484742755164e-005, -0.0018628405052291059, -0.0031636439376678694, -0.0036629655414078164, -0.0032717150482324516, -0.0021157482358274389, -0.00049809233594403084, 0.001179498550313731, 0.0025155804434977406, + 0.0032044110974639535, 0.0031051890055405892, 0.0022696362905541838, 0.00092285437929671011, -0.00059634992247965563, -0.0019200660782804076, -0.0027398331837579586, -0.0028779607130344355, -0.0023252613565889484, -0.0012373878562206998, + 0.0001079256271408814, 0.001381201221652482, 0.0022814537885444343, 0.0026068950194864521, 0.0022996034419053152, 0.0014544136183039329, 0.00029112333986494875, -0.00090212064186703355, -0.0018398015723057382, -0.0023069860593334167, + -0.0022081666403885561, -0.001585999954687689, -0.00060648663795207782, 0.00048475010667512982, 0.0014236992360285891, 0.0019915283235695642, 0.0020652506746522961, 0.0016438443679279932, 0.00084441464528985381, -0.00012968638587027814, + -0.0010402454244288109, -0.0016721737676909565, -0.0018840426030750455, -0.0016393611363987892, -0.0010117769730132399, -0.00016382628140147301, 0.00069481538344329447, 0.0013589369329189769, 0.0016766077219011598, 0.001583648840995474, + 0.0011160111306802627, 0.0003978427911930665, -0.00039109352788825862, -0.0010601864459545338, -0.0014538306405106657, -0.0014873874506915337, -0.0011649976932383162, -0.00057560278116474805, 0.00013114380113039367, 0.0007826466076227966, + 0.0012253403293674297, 0.001360699649507721, 0.0011668892017168851, 0.00070136940180325937, 8.4481346508655827e-005, -0.00053142309839626937, -0.00099944171507516575, -0.0012130014010906711, -0.0011299141868816099, -0.00078023446337935961, + -0.00025659615587209989, 0.00031006007034170422, 0.00078306856885314595, 0.0010528599573031263, 0.0010621735733697998, 0.00081790247868803183, 0.000387206320324671, -0.00012063098325035138, -0.00058176664880975348, -0.00088787238358591439, + -0.00097144346508637621, -0.00082046539386724344, -0.00047931047204567478, -3.6138098156642948e-005, 0.00039971158899271758, 0.00072457353628019154, 0.00086499549032453002, 0.00079417888486257502, 0.00053668663701351776, 0.00016071671200037333, + -0.00023976249450019229, -0.00056837894338090456, -0.00074944327950371469, -0.00074524993590216503, -0.00056367237533274999, -0.00025459557921401604, 0.00010354940020593262, 0.00042356504465827625, 0.00063062117037869991, 0.00067964400731477029, + 0.00056494725771604902, 0.00032009664994853484, 8.4094237341040472e-006, -0.00029328667132385959, -0.00051349887014152679, -0.00060291847991520244, -0.00054532579470017561, -0.00036017534034318133, -9.6565939832524028e-005, 0.00017962947202432243, + 0.0004021335775498866, 0.00052008729324586316, 0.00050956800859941714, 0.00037822278267612763, 0.00016218327373728096, -8.3693226603497292e-005, -0.0002996590281028708, -0.00043551985080457316, -0.00046221360244072572, -0.00037787554784881851, + -0.00020716636324439341, 5.7006433543948051e-006, 0.00020830912486435524, 0.00035287542885270373, 0.00040744422418425631, 0.00036283954499724997, 0.00023388968509776965, 5.4874683724266626e-005, -0.00012947230718511564, -0.00027507257783393138, + -0.0003489767404299755, -0.00033673373853927404, -0.00024502910602816733, -9.9167977847498023e-005, 6.3771629949541041e-005, 0.00020429142207811283, 0.00028998881291818565, 0.00030295803344061305, 0.00024340423431723786, 0.00012877755492326877, + -1.116470369424232e-005, -0.00014200540887034094, -0.00023307650021536254, -0.00026458825304284705, -0.00023183668917914544, -0.00014562030460083452, -2.8942808836272598e-005, 8.9037982507121174e-005, 0.00018024216434545852, 0.00022429965797227041, + 0.0002130285335328205, 0.00015179440591692495, 5.757653860596238e-005, -4.5638896447594568e-005, -0.0001329097142102547, -0.00018431901261959646, -0.00018946381166227083, -0.00014945443689276262, -7.607175578778393e-005, 1.1574443079405351e-005, + 9.1963216239260724e-005, 0.00014640387262396037, 0.00016333477770404109, 0.00014070296987162006, 8.5956333139661909e-005, 1.3774226033203211e-005, -5.7804183079220923e-005, -0.00011184660662576022, -0.00013649307135328725, -0.00012750155200331027, + -8.8843161593761487e-005, -3.1310315318610432e-005, 3.0422431031760574e-005, 8.1499728300321093e-005, 0.00011042486406119114, 0.0001116027274787376, 8.633588458239913e-005, 4.2123286825289712e-005, -9.4752766471068357e-006, -5.5818434667225641e-005, + -8.6247922400028607e-005, -9.4503536694553477e-005, -7.9950732884416978e-005, -4.7397897683536541e-005, -5.6299938557223714e-006, 3.4915841577919989e-005, 6.4727662366921408e-005, 7.7419793004586529e-005, 7.1056108796882235e-005, 4.8333950433914648e-005, + 1.5655032748882834e-005, -1.8626278197123308e-005, -4.6308631624469501e-005, -6.1279446124084364e-005, -6.0830453784999769e-005, -4.607935202681541e-005, -2.145474134416278e-005, 6.572134618200237e-006, 3.1157472832932869e-005, 4.6732536591469296e-005, + 5.0237898294931096e-005, 4.1678050842057577e-005, 2.3910224388238513e-005, 1.7698780085840604e-006, -1.9213291464731999e-005, -3.4174658157775568e-005, -4.0020288167972428e-005, -3.6033411178822827e-005, -2.3872746018477846e-005, -7.006637231184095e-006, + 1.024146219566499e-005, 2.3780490067865001e-005, 3.0703449829090677e-005, 2.9886647783934581e-005, 2.2120119997218239e-005, 9.7735684689527048e-006, -3.8872324521640265e-006, -1.5543839717163266e-005, -2.2615023926355254e-005, -2.3809127279542265e-005, + -1.9326058052535849e-005, -1.0688739061583608e-005, -2.740174359813823e-007, 9.3207350534124419e-006, 1.5910878336996937e-005, 1.8206686335406549e-005, 1.6042159651260656e-005, 1.0317342373158007e-005, 2.6923660034307631e-006, -4.8724000492981274e-006, + -1.0607006582875768e-005, -1.3333643382732469e-005, -1.2691498798386898e-005, -9.1470138590096945e-006, -3.8065895539510662e-006, 1.9054003350526885e-006, 6.613913881503402e-006, 9.3139038392063871e-006, 9.5721827724893438e-006, 7.5736730219894364e-006, + 4.0161000185356791e-006, -1.0681717109783684e-007, -3.770766054468487e-006, -6.1664774806085404e-006, -6.8688467541267578e-006, -5.8969431908571148e-006, -3.6619093884825409e-006, -8.270502826770229e-007, 1.8769928536209681e-006, 3.8328278754042647e-006, + 4.6698174747059302e-006, 4.3236960925256437e-006, 3.016287801367824e-006, 1.169289632945126e-006, -7.1955689587050876e-007, -2.203734205629703e-006, -2.9876264959214665e-006, -2.9779202914242935e-006, -2.2802225651653813e-006, -1.1484798394999376e-006, + 9.4678608779109327e-008, 1.143733350219884e-006, 1.7806663582809258e-006, 1.9149301373470155e-006, 1.5873541986613687e-006, 9.4190979454547883e-007, 1.7659798429964129e-007, -5.1168688457311887e-007, -9.7403760831532322e-007, -1.1379118280829263e-006, + -1.0127802760012628e-006, -6.7504298725944225e-007, -2.3904628839787191e-007, 1.7654259185517028e-007, 4.7800085709402728e-007, 6.1493188499089521e-007, 5.849848067357207e-007, 4.2599996120219602e-007, 1.9964925679003818e-007, -2.7891854588389937e-008, + -2.0288946624290177e-007, -2.9478799977106246e-007, -2.9916558380919976e-007, -2.3360609465673318e-007, -1.2887790166769242e-007, -1.8575955256728605e-008, 6.9816523347285096e-008, 1.2043301999843577e-007, 1.3038003060051805e-007, 1.0746842146236057e-007, + 6.5698416067943898e-008, 2.0187158038407728e-008, -1.6985910384779763e-008, -3.9115316477018262e-008, -4.5188844836485652e-008, -3.8595760515296358e-008, -2.4984867921475803e-008, -1.0089665711571232e-008, 1.8556810104194671e-009, 8.8163663872052699e-009, + 1.0817071302193613e-008, 9.246128218035411e-009, 5.9789349448002054e-009, 2.6457112382835052e-009, 2.2810747050218301e-010, -9.9309510826366946e-010, -1.2410008763135097e-009, -9.5138173127928603e-010, -5.2480641184180015e-010, -1.9709071280477305e-010, + -3.1335654479869494e-011, 1.5376789921246911e-011, 1.1828539027346112e-011, 2.6912399241548279e-012, 0, 0 +}; diff --git a/src/fir/test_data/p863_48k_in.raw b/src/fir/test_data/p863_48k_in.raw new file mode 100644 index 0000000..9b2c491 Binary files /dev/null and b/src/fir/test_data/p863_48k_in.raw differ diff --git a/src/fir/test_data/p863_48k_in.wav b/src/fir/test_data/p863_48k_in.wav new file mode 100644 index 0000000..a9f3113 Binary files /dev/null and b/src/fir/test_data/p863_48k_in.wav differ diff --git a/src/fir/test_data/p863_48k_to_16k.raw b/src/fir/test_data/p863_48k_to_16k.raw new file mode 100644 index 0000000..506474f Binary files /dev/null and b/src/fir/test_data/p863_48k_to_16k.raw differ diff --git a/src/fir/test_data/p863_48k_to_16k.wav b/src/fir/test_data/p863_48k_to_16k.wav new file mode 100644 index 0000000..e43b5e8 Binary files /dev/null and b/src/fir/test_data/p863_48k_to_16k.wav differ diff --git a/src/fir/test_data/p863_48k_to_8k.raw b/src/fir/test_data/p863_48k_to_8k.raw new file mode 100644 index 0000000..68496c1 Binary files /dev/null and b/src/fir/test_data/p863_48k_to_8k.raw differ diff --git a/src/fir/test_data/p863_48k_to_8k.wav b/src/fir/test_data/p863_48k_to_8k.wav new file mode 100644 index 0000000..ec29754 Binary files /dev/null and b/src/fir/test_data/p863_48k_to_8k.wav differ diff --git a/src/fir/test_data/p863_8k_in.raw b/src/fir/test_data/p863_8k_in.raw new file mode 100644 index 0000000..3959540 Binary files /dev/null and b/src/fir/test_data/p863_8k_in.raw differ diff --git a/src/fir/test_data/p863_8k_in.wav b/src/fir/test_data/p863_8k_in.wav new file mode 100644 index 0000000..83f28ee Binary files /dev/null and b/src/fir/test_data/p863_8k_in.wav differ diff --git a/src/fir/test_data/p863_8k_to_16k.raw b/src/fir/test_data/p863_8k_to_16k.raw new file mode 100644 index 0000000..96897eb Binary files /dev/null and b/src/fir/test_data/p863_8k_to_16k.raw differ diff --git a/src/fir/test_data/p863_8k_to_16k.wav b/src/fir/test_data/p863_8k_to_16k.wav new file mode 100644 index 0000000..9b71e02 Binary files /dev/null and b/src/fir/test_data/p863_8k_to_16k.wav differ diff --git a/src/fir/test_data/p863_8k_to_48k.raw b/src/fir/test_data/p863_8k_to_48k.raw new file mode 100644 index 0000000..7e485c1 Binary files /dev/null and b/src/fir/test_data/p863_8k_to_48k.raw differ diff --git a/src/fir/test_data/p863_8k_to_48k.wav b/src/fir/test_data/p863_8k_to_48k.wav new file mode 100644 index 0000000..e13a80f Binary files /dev/null and b/src/fir/test_data/p863_8k_to_48k.wav differ