shithub: opus

Download patch

ref: fd1a5db140d51e7188e5126db2edc0ab923cfa8c
parent: 81592731016180584d0de28be13965aa5b80ea0d
author: Koen Vos <[email protected]>
date: Wed Jun 30 06:41:17 EDT 2010

Update SILK code using the CELT range coder

--- a/COPYING
+++ /dev/null
@@ -1,26 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
--- a/INSTALL
+++ /dev/null
@@ -1,236 +1,0 @@
-Installation Instructions
-*************************
-
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
-Software Foundation, Inc.
-
-This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
-
-Basic Installation
-==================
-
-These are generic installation instructions.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
-   It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring.  (Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.)
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
-   The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'.  You only need
-`configure.ac' if you want to change it or regenerate `configure' using
-a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.  If you're
-     using `csh' on an old version of System V, you might need to type
-     `sh ./configure' instead to prevent `csh' from trying to execute
-     `configure' itself.
-
-     Running `configure' takes awhile.  While running, it prints some
-     messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.
-
-  5. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.  There is
-     also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
-
-Compilers and Options
-=====================
-
-Some systems require unusual options for compilation or linking that the
-`configure' script does not know about.  Run `./configure --help' for
-details on some of the pertinent environment variables.
-
-   You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment.  Here
-is an example:
-
-     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
-
-   *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
-You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'.  `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
-   If you have to use a `make' that does not support the `VPATH'
-variable, you have to compile the package for one architecture at a
-time in the source code directory.  After you have installed the
-package for one architecture, use `make distclean' before reconfiguring
-for another architecture.
-
-Installation Names
-==================
-
-By default, `make install' installs the package's commands under
-`/usr/local/bin', include files under `/usr/local/include', etc.  You
-can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX'.
-
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-pass the option `--exec-prefix=PREFIX' to `configure', the package uses
-PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files still use the regular prefix.
-
-   In addition, if you use an unusual directory layout you can give
-options like `--bindir=DIR' to specify different values for particular
-kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
-Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
-There may be some features `configure' cannot figure out automatically,
-but needs to determine by the type of machine the package will run on.
-Usually, assuming the package is built to be run on the _same_
-architectures, `configure' can figure that out, but if it prints a
-message saying it cannot guess the machine type, give it the
-`--build=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
-     CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
-     OS KERNEL-OS
-
-   See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
-   If you are _building_ compiler tools for cross-compiling, you should
-use the option `--target=TYPE' to select the type of system they will
-produce code for.
-
-   If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
-If you want to set default values for `configure' scripts to share, you
-can create a site shell script called `config.site' that gives default
-values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-Variables not defined in a site shell script can be set in the
-environment passed to `configure'.  However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost.  In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'.  For example:
-
-     ./configure CC=/usr/local2/bin/gcc
-
-causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script).  Here is a another example:
-
-     /bin/bash ./configure CONFIG_SHELL=/bin/bash
-
-Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
-configuration-related scripts to be executed by `/bin/bash'.
-
-`configure' Invocation
-======================
-
-`configure' recognizes the following options to control how it operates.
-
-`--help'
-`-h'
-     Print a summary of the options to `configure', and exit.
-
-`--version'
-`-V'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`--cache-file=FILE'
-     Enable the cache: use and save the results of the tests in FILE,
-     traditionally `config.cache'.  FILE defaults to `/dev/null' to
-     disable caching.
-
-`--config-cache'
-`-C'
-     Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`configure' also accepts some other, not widely useful, options.  Run
-`configure --help' for more details.
-
--- /dev/null
+++ b/Makefile
@@ -1,0 +1,122 @@
+#					
+# Makefile for Silk SDK			
+#
+# Copyright (c) 2010, Skype Limited
+# All rights reserved.
+#
+
+#Platform detection and settings
+
+BUILD_OS := $(shell uname | sed -e 's/^.*Darwin.*/MacOS-X/ ; s/^.*CYGWIN.*/Windows/')
+
+BUILD_ARCHITECTURE := $(shell uname -m | sed -e 's/i686/i386/')
+
+EXESUFFIX = 
+LIBPREFIX = lib
+LIBSUFFIX = .a
+OBJSUFFIX = .o
+
+CC     = $(TOOLCHAIN_PREFIX)gcc$(TOOLCHAIN_SUFFIX)
+AR     = $(TOOLCHAIN_PREFIX)ar
+RANLIB = $(TOOLCHAIN_PREFIX)ranlib
+CP     = $(TOOLCHAIN_PREFIX)cp
+
+cflags-from-defines    = $(addprefix -D,$(1))
+cflags-from-includes   = $(addprefix -I,$(1))
+ldflags-from-ldlibdirs = $(addprefix -L,$(1))
+ldlibs-from-libs       = $(addprefix -l,$(1))
+
+CFLAGS	+= -Wall -enable-threads -O3
+
+CFLAGS  += $(call cflags-from-defines,$(CDEFINES))
+CFLAGS  += $(call cflags-from-includes,$(CINCLUDES))
+LDFLAGS += $(call ldflags-from-ldlibdirs,$(LDLIBDIRS))
+LDLIBS  += $(call ldlibs-from-libs,$(LIBS))
+
+COMPILE.c.cmdline   = $(CC) -c $(CFLAGS) -o $@ $<
+LINK.o.cmdline      = $(LINK.o) -lm $^ $(LDLIBS) -o $@$(EXESUFFIX) 
+ARCHIVE.cmdline     = $(AR) $(ARFLAGS) $@ $^ && $(RANLIB) $@
+
+%$(OBJSUFFIX):%.c
+	$(COMPILE.c.cmdline)
+
+ifneq (,$(filter FIXED_POINT, $(CDEFINES)))
+
+# Directives
+
+CINCLUDES += interface src_common src_fix src_SigProc_FIX test
+
+# VPATH e.g. VPATH = src:../headers
+VPATH = ./ \
+        interface \
+	  src_common \
+	  src_fix \
+	  src_SigProc_FIX \
+        test 
+
+SRCS_C = $(wildcard src_common/*.c src_fix/*.c src_SigProc_FIX/*.c )
+
+else
+
+# Directives
+
+CINCLUDES += interface src_common src_fix src_SigProc_FIX src_SigProc_FLP test
+
+# VPATH e.g. VPATH = src:../headers
+VPATH = ./ \
+        interface \
+	  src_common \
+	  src_flp \
+	  src_SigProc_FIX \
+	  src_SigProc_FLP \
+        test 
+
+SRCS_C = $(wildcard src_common/*.c src_flp/*.c src_SigProc_FIX/*.c  src_SigProc_FLP/*.c )
+
+endif
+
+# Variable definitions
+LIB_NAME = SKP_SILK_SDK
+TARGET = $(LIBPREFIX)$(LIB_NAME)$(LIBSUFFIX)
+
+
+OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(SRCS_C))
+
+ENCODER_SRCS_C = test/Encoder.c test/SKP_debug.c
+ENCODER_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(ENCODER_SRCS_C))
+
+DECODER_SRCS_C = test/Decoder.c test/SKP_debug.c
+DECODER_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(DECODER_SRCS_C))
+
+SIGNALCMP_SRCS_C = test/signalCompare.c
+SIGNALCMP_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(SIGNALCMP_SRCS_C))
+
+LIBS = \
+	$(LIB_NAME)
+
+LDLIBDIRS = ./
+
+# Rules
+default: all
+
+all: $(TARGET) encoder decoder signalcompare
+
+lib: $(TARGET)
+
+$(TARGET): $(OBJS)
+	$(ARCHIVE.cmdline)
+
+encoder$(EXESUFFIX): $(ENCODER_OBJS)	
+	$(LINK.o.cmdline)
+
+decoder$(EXESUFFIX): $(DECODER_OBJS)	
+	$(LINK.o.cmdline)
+
+signalcompare$(EXESUFFIX): $(SIGNALCMP_OBJS)	
+	$(LINK.o.cmdline)
+
+clean:
+	$(RM) $(TARGET)* $(OBJS) $(ENCODER_OBJS) $(DECODER_OBJS) \
+		  $(SIGNALCMP_OBJS) $(TEST_OBJS) \
+		  encoder$(EXESUFFIX) decoder$(EXESUFFIX) signalcompare$(EXESUFFIX)
+
--- a/Makefile.am
+++ /dev/null
@@ -1,172 +1,0 @@
-
-AM_CFLAGS = -Isrc -Iinterface -fPIC -Wall -O3 
-AUTOMAKE_OPTS = gnu
-NAME = libSKP_SILK_SDK
-AM_CPPFLAGS = $(AM_CFLAGS)
-
-EXTRA_DIST = Silk_SDK.sln \
-src/Silk_FIX.vcproj \
-test/Encoder.c \
-test/Enc_SDK.vcproj \
-test/Decoder.c \
-test/Dec_SDK.vcproj \
-test/signalCompare.c \
-test/SignalCompare.vcproj 
-
-lib_LTLIBRARIES	= libSKP_SILK_SDK.la
-libSKP_SILK_SDK_la_SOURCES = src/SKP_Silk_A2NLSF.c \
-src/SKP_Silk_allpass_int.c \
-src/SKP_Silk_ana_filt_bank_1.c \
-src/SKP_Silk_apply_sine_window.c \
-src/SKP_Silk_array_maxabs.c \
-src/SKP_Silk_autocorr.c \
-src/SKP_Silk_biquad_alt.c \
-src/SKP_Silk_biquad.c \
-src/SKP_Silk_burg_modified.c \
-src/SKP_Silk_bwexpander_32.c \
-src/SKP_Silk_bwexpander.c \
-src/SKP_Silk_CNG.c \
-src/SKP_Silk_code_signs.c \
-src/SKP_Silk_control_codec_FIX.c \
-src/SKP_Silk_corrMatrix_FIX.c \
-src/SKP_Silk_create_init_destroy.c \
-src/SKP_Silk_dec_API.c \
-src/SKP_Silk_decode_core.c \
-src/SKP_Silk_decode_frame.c \
-src/SKP_Silk_decode_indices_v4.c \
-src/SKP_Silk_decode_parameters.c \
-src/SKP_Silk_decode_parameters_v4.c \
-src/SKP_Silk_decode_pulses.c \
-src/SKP_Silk_decoder_set_fs.c \
-src/SKP_Silk_detect_SWB_input.c \
-src/SKP_Silk_enc_API.c \
-src/SKP_Silk_encode_frame_FIX.c \
-src/SKP_Silk_encode_parameters.c \
-src/SKP_Silk_encode_parameters_v4.c \
-src/SKP_Silk_encode_pulses.c \
-src/SKP_Silk_find_LPC_FIX.c \
-src/SKP_Silk_find_LTP_FIX.c \
-src/SKP_Silk_find_pitch_lags_FIX.c \
-src/SKP_Silk_find_pred_coefs_FIX.c \
-src/SKP_Silk_gain_quant.c \
-src/SKP_Silk_HP_variable_cutoff_FIX.c \
-src/SKP_Silk_init_encoder_FIX.c \
-src/SKP_Silk_inner_prod_aligned.c \
-src/SKP_Silk_interpolate.c \
-src/SKP_Silk_k2a.c \
-src/SKP_Silk_k2a_Q16.c \
-src/SKP_Silk_LBRR_reset.c \
-src/SKP_Silk_lin2log.c \
-src/SKP_Silk_log2lin.c \
-src/SKP_Silk_lowpass_int.c \
-src/SKP_Silk_lowpass_short.c \
-src/SKP_Silk_LPC_inv_pred_gain.c \
-src/SKP_Silk_LPC_stabilize.c \
-src/SKP_Silk_LPC_synthesis_filter.c \
-src/SKP_Silk_LPC_synthesis_order16.c \
-src/SKP_Silk_LP_variable_cutoff.c \
-src/SKP_Silk_LSF_cos_table.c \
-src/SKP_Silk_LTP_analysis_filter_FIX.c \
-src/SKP_Silk_LTP_scale_ctrl_FIX.c \
-src/SKP_Silk_MA.c \
-src/SKP_Silk_NLSF2A.c \
-src/SKP_Silk_NLSF2A_stable.c \
-src/SKP_Silk_NLSF_MSVQ_decode.c \
-src/SKP_Silk_NLSF_MSVQ_encode_FIX.c \
-src/SKP_Silk_NLSF_stabilize.c \
-src/SKP_Silk_NLSF_VQ_rate_distortion_FIX.c \
-src/SKP_Silk_NLSF_VQ_sum_error_FIX.c \
-src/SKP_Silk_NLSF_VQ_weights_laroia.c \
-src/SKP_Silk_noise_shape_analysis_FIX.c \
-src/SKP_Silk_NSQ.c \
-src/SKP_Silk_NSQ_del_dec.c \
-src/SKP_Silk_pitch_analysis_core.c \
-src/SKP_Silk_pitch_est_tables.c \
-src/SKP_Silk_PLC.c \
-src/SKP_Silk_prefilter_FIX.c \
-src/SKP_Silk_process_gains_FIX.c \
-src/SKP_Silk_process_NLSFs_FIX.c \
-src/SKP_Silk_pulses_to_bytes.c \
-src/SKP_Silk_quant_LTP_gains_FIX.c \
-src/SKP_Silk_range_coder.c \
-src/SKP_Silk_regularize_correlations_FIX.c \
-src/SKP_Silk_resample_1_2.c \
-src/SKP_Silk_resample_1_2_coarse.c \
-src/SKP_Silk_resample_1_2_coarsest.c \
-src/SKP_Silk_resample_1_3.c \
-src/SKP_Silk_resample_2_1_coarse.c \
-src/SKP_Silk_resample_2_3.c \
-src/SKP_Silk_resample_2_3_coarse.c \
-src/SKP_Silk_resample_2_3_coarsest.c \
-src/SKP_Silk_resample_2_3_rom.c \
-src/SKP_Silk_resample_3_1.c \
-src/SKP_Silk_resample_3_2.c \
-src/SKP_Silk_resample_3_2_rom.c \
-src/SKP_Silk_resample_3_4.c \
-src/SKP_Silk_resample_4_3.c \
-src/SKP_Silk_residual_energy16_FIX.c \
-src/SKP_Silk_residual_energy_FIX.c \
-src/SKP_Silk_scale_copy_vector16.c \
-src/SKP_Silk_scale_vector.c \
-src/SKP_Silk_schur64.c \
-src/SKP_Silk_schur.c \
-src/SKP_Silk_shell_coder.c \
-src/SKP_Silk_sigm_Q15.c \
-src/SKP_Silk_solve_LS_FIX.c \
-src/SKP_Silk_sort.c \
-src/SKP_Silk_sum_sqr_shift.c \
-src/SKP_Silk_tables_gain.c \
-src/SKP_Silk_tables_LTP.c \
-src/SKP_Silk_tables_NLSF_CB0_10.c \
-src/SKP_Silk_tables_NLSF_CB0_16.c \
-src/SKP_Silk_tables_NLSF_CB1_10.c \
-src/SKP_Silk_tables_NLSF_CB1_16.c \
-src/SKP_Silk_tables_other.c \
-src/SKP_Silk_tables_pitch_lag.c \
-src/SKP_Silk_tables_pulses_per_block.c \
-src/SKP_Silk_tables_sign.c \
-src/SKP_Silk_tables_type_offset.c \
-src/SKP_Silk_VAD.c \
-src/SKP_Silk_VQ_nearest_neighbor_FIX.c 
-
-
-libSKP_SILK_SDK_la_CFLAGS = $(AM_CFLAGS)
-libSKP_SILK_SDK_la_LDFLAGS = $(LIBS)
-
-library_includedir = $(prefix)/include/silk
-library_include_HEADERS	= src/SKP_Silk_common_pitch_est_defines.h \
-src/SKP_Silk_define_FIX.h \
-src/SKP_Silk_define.h \
-src/SKP_Silk_Inlines.h \
-src/SKP_Silk_macros.h \
-src/SKP_Silk_main_FIX.h \
-src/SKP_Silk_main.h \
-src/SKP_Silk_perceptual_parameters_FIX.h \
-src/SKP_Silk_pitch_est_defines.h \
-src/SKP_Silk_PLC.h \
-src/SKP_Silk_resample_rom.h \
-src/SKP_Silk_SigProc_FIX.h \
-src/SKP_Silk_structs_FIX.h \
-src/SKP_Silk_structs.h \
-src/SKP_Silk_tables.h \
-src/SKP_Silk_tables_NLSF_CB0_10.h \
-src/SKP_Silk_tables_NLSF_CB0_16.h \
-src/SKP_Silk_tables_NLSF_CB1_10.h \
-src/SKP_Silk_tables_NLSF_CB1_16.h \
-interface/SKP_Silk_control.h \
-interface/SKP_Silk_errors.h \
-interface/SKP_Silk_SDK_API.h \
-interface/SKP_Silk_typedef.h 
-
-bin_PROGRAMS = Encoder Decoder signalCompare
-Encoder_SOURCES = test/Encoder.c $(top_builddir)/interface/SKP_Silk_SDK_API.h
-Encoder_LDADD = $(lib_LTLIBRARIES) 
-Encoder_LDFLAGS = $(LIBS)
-
-Decoder_SOURCES = test/Decoder.c $(top_builddir)/interface/SKP_Silk_SDK_API.h
-Decoder_LDADD = $(lib_LTLIBRARIES) 
-Decoder_LDFLAGS = $(LIBS)
-
-signalCompare_SOURCES = test/signalCompare.c $(top_builddir)/interface/SKP_Silk_SDK_API.h
-signalCompare_LDADD = $(lib_LTLIBRARIES) 
-signalCompare_LDFLAGS = $(LIBS)
--- /dev/null
+++ b/Silk_FIX.sln
@@ -1,0 +1,91 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dec", "test\Dec_SDK.vcproj", "{82685D7F-0589-42BD-877C-31A952D53A8E}"
+	ProjectSection(ProjectDependencies) = postProject
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74} = {2769AFC5-8FC2-42E8-803C-528ACBA89C74}
+		{0E29E502-AB22-4147-93A1-AC91528ED758} = {0E29E502-AB22-4147-93A1-AC91528ED758}
+		{56B91D01-9150-4BBF-AFA1-5B68AB991B76} = {56B91D01-9150-4BBF-AFA1-5B68AB991B76}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SignalCompare", "test\SignalCompare.vcproj", "{7FE8F544-9175-40C3-A187-7F15CE9A75D8}"
+	ProjectSection(ProjectDependencies) = postProject
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74} = {2769AFC5-8FC2-42E8-803C-528ACBA89C74}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Enc", "test\Enc_SDK.vcproj", "{6D97A8EF-5724-4D85-8BF4-C583714BBA78}"
+	ProjectSection(ProjectDependencies) = postProject
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74} = {2769AFC5-8FC2-42E8-803C-528ACBA89C74}
+		{0E29E502-AB22-4147-93A1-AC91528ED758} = {0E29E502-AB22-4147-93A1-AC91528ED758}
+		{56B91D01-9150-4BBF-AFA1-5B68AB991B76} = {56B91D01-9150-4BBF-AFA1-5B68AB991B76}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Silk_FIX", "src_FIX\Silk_FIX.vcproj", "{56B91D01-9150-4BBF-AFA1-5B68AB991B76}"
+	ProjectSection(ProjectDependencies) = postProject
+		{0E29E502-AB22-4147-93A1-AC91528ED758} = {0E29E502-AB22-4147-93A1-AC91528ED758}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SigProc_FIX", "src_SigProc_FIX\SigProc_FIX.vcproj", "{2769AFC5-8FC2-42E8-803C-528ACBA89C74}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Silk_Common", "src_common\Silk_Common.vcproj", "{0E29E502-AB22-4147-93A1-AC91528ED758}"
+	ProjectSection(ProjectDependencies) = postProject
+		{8181D6A1-DE19-4A5C-9B96-E10A18068C93} = {8181D6A1-DE19-4A5C-9B96-E10A18068C93}
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74} = {2769AFC5-8FC2-42E8-803C-528ACBA89C74}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcelt", "..\..\celt-0.8.0\libcelt\libcelt.vcproj", "{8181D6A1-DE19-4A5C-9B96-E10A18068C93}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug MCD|Win32 = Debug MCD|Win32
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{82685D7F-0589-42BD-877C-31A952D53A8E}.Debug MCD|Win32.ActiveCfg = Debug|Win32
+		{82685D7F-0589-42BD-877C-31A952D53A8E}.Debug MCD|Win32.Build.0 = Debug|Win32
+		{82685D7F-0589-42BD-877C-31A952D53A8E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{82685D7F-0589-42BD-877C-31A952D53A8E}.Debug|Win32.Build.0 = Debug|Win32
+		{82685D7F-0589-42BD-877C-31A952D53A8E}.Release|Win32.ActiveCfg = Release|Win32
+		{82685D7F-0589-42BD-877C-31A952D53A8E}.Release|Win32.Build.0 = Release|Win32
+		{7FE8F544-9175-40C3-A187-7F15CE9A75D8}.Debug MCD|Win32.ActiveCfg = Debug|Win32
+		{7FE8F544-9175-40C3-A187-7F15CE9A75D8}.Debug MCD|Win32.Build.0 = Debug|Win32
+		{7FE8F544-9175-40C3-A187-7F15CE9A75D8}.Debug|Win32.ActiveCfg = Debug|Win32
+		{7FE8F544-9175-40C3-A187-7F15CE9A75D8}.Debug|Win32.Build.0 = Debug|Win32
+		{7FE8F544-9175-40C3-A187-7F15CE9A75D8}.Release|Win32.ActiveCfg = Release|Win32
+		{7FE8F544-9175-40C3-A187-7F15CE9A75D8}.Release|Win32.Build.0 = Release|Win32
+		{6D97A8EF-5724-4D85-8BF4-C583714BBA78}.Debug MCD|Win32.ActiveCfg = Debug|Win32
+		{6D97A8EF-5724-4D85-8BF4-C583714BBA78}.Debug MCD|Win32.Build.0 = Debug|Win32
+		{6D97A8EF-5724-4D85-8BF4-C583714BBA78}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6D97A8EF-5724-4D85-8BF4-C583714BBA78}.Debug|Win32.Build.0 = Debug|Win32
+		{6D97A8EF-5724-4D85-8BF4-C583714BBA78}.Release|Win32.ActiveCfg = Release|Win32
+		{6D97A8EF-5724-4D85-8BF4-C583714BBA78}.Release|Win32.Build.0 = Release|Win32
+		{56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug MCD|Win32.ActiveCfg = Debug|Win32
+		{56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug MCD|Win32.Build.0 = Debug|Win32
+		{56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|Win32.ActiveCfg = Debug|Win32
+		{56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|Win32.Build.0 = Debug|Win32
+		{56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|Win32.ActiveCfg = Release|Win32
+		{56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|Win32.Build.0 = Release|Win32
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74}.Debug MCD|Win32.ActiveCfg = Debug|Win32
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74}.Debug MCD|Win32.Build.0 = Debug|Win32
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74}.Debug|Win32.ActiveCfg = Debug|Win32
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74}.Debug|Win32.Build.0 = Debug|Win32
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74}.Release|Win32.ActiveCfg = Release|Win32
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74}.Release|Win32.Build.0 = Release|Win32
+		{0E29E502-AB22-4147-93A1-AC91528ED758}.Debug MCD|Win32.ActiveCfg = Debug|Win32
+		{0E29E502-AB22-4147-93A1-AC91528ED758}.Debug MCD|Win32.Build.0 = Debug|Win32
+		{0E29E502-AB22-4147-93A1-AC91528ED758}.Debug|Win32.ActiveCfg = Debug|Win32
+		{0E29E502-AB22-4147-93A1-AC91528ED758}.Debug|Win32.Build.0 = Debug|Win32
+		{0E29E502-AB22-4147-93A1-AC91528ED758}.Release|Win32.ActiveCfg = Release|Win32
+		{0E29E502-AB22-4147-93A1-AC91528ED758}.Release|Win32.Build.0 = Release|Win32
+		{8181D6A1-DE19-4A5C-9B96-E10A18068C93}.Debug MCD|Win32.ActiveCfg = Debug MCD|Win32
+		{8181D6A1-DE19-4A5C-9B96-E10A18068C93}.Debug MCD|Win32.Build.0 = Debug MCD|Win32
+		{8181D6A1-DE19-4A5C-9B96-E10A18068C93}.Debug|Win32.ActiveCfg = Debug|Win32
+		{8181D6A1-DE19-4A5C-9B96-E10A18068C93}.Debug|Win32.Build.0 = Debug|Win32
+		{8181D6A1-DE19-4A5C-9B96-E10A18068C93}.Release|Win32.ActiveCfg = Release|Win32
+		{8181D6A1-DE19-4A5C-9B96-E10A18068C93}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
--- /dev/null
+++ b/Silk_FLP.sln
@@ -1,0 +1,99 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dec", "test\Dec_SDK.vcproj", "{82685D7F-0589-42BD-877C-31A952D53A8E}"
+	ProjectSection(ProjectDependencies) = postProject
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74} = {2769AFC5-8FC2-42E8-803C-528ACBA89C74}
+		{0E29E502-AB22-4147-93A1-AC91528ED758} = {0E29E502-AB22-4147-93A1-AC91528ED758}
+		{56B91D01-9150-4BBF-AFA1-5B68AB991B76} = {56B91D01-9150-4BBF-AFA1-5B68AB991B76}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SignalCompare", "test\SignalCompare.vcproj", "{7FE8F544-9175-40C3-A187-7F15CE9A75D8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Enc", "test\Enc_SDK.vcproj", "{6D97A8EF-5724-4D85-8BF4-C583714BBA78}"
+	ProjectSection(ProjectDependencies) = postProject
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74} = {2769AFC5-8FC2-42E8-803C-528ACBA89C74}
+		{793D0EC2-8554-4674-9A97-F25DE5DBE926} = {793D0EC2-8554-4674-9A97-F25DE5DBE926}
+		{0E29E502-AB22-4147-93A1-AC91528ED758} = {0E29E502-AB22-4147-93A1-AC91528ED758}
+		{56B91D01-9150-4BBF-AFA1-5B68AB991B76} = {56B91D01-9150-4BBF-AFA1-5B68AB991B76}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SigProc_FIX", "src_SigProc_FIX\SigProc_FIX.vcproj", "{2769AFC5-8FC2-42E8-803C-528ACBA89C74}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Silk_FLP", "src_FLP\Silk_FLP.vcproj", "{56B91D01-9150-4BBF-AFA1-5B68AB991B76}"
+	ProjectSection(ProjectDependencies) = postProject
+		{793D0EC2-8554-4674-9A97-F25DE5DBE926} = {793D0EC2-8554-4674-9A97-F25DE5DBE926}
+		{0E29E502-AB22-4147-93A1-AC91528ED758} = {0E29E502-AB22-4147-93A1-AC91528ED758}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SigProc_FLP", "src_SigProc_FLP\SigProc_FLP.vcproj", "{793D0EC2-8554-4674-9A97-F25DE5DBE926}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Silk_Common", "src_common\Silk_CommonFLP.vcproj", "{0E29E502-AB22-4147-93A1-AC91528ED758}"
+	ProjectSection(ProjectDependencies) = postProject
+		{8181D6A1-DE19-4A5C-9B96-E10A18068C93} = {8181D6A1-DE19-4A5C-9B96-E10A18068C93}
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74} = {2769AFC5-8FC2-42E8-803C-528ACBA89C74}
+		{793D0EC2-8554-4674-9A97-F25DE5DBE926} = {793D0EC2-8554-4674-9A97-F25DE5DBE926}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcelt", "..\..\celt-0.8.0\libcelt\libcelt.vcproj", "{8181D6A1-DE19-4A5C-9B96-E10A18068C93}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug MCD|Win32 = Debug MCD|Win32
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{82685D7F-0589-42BD-877C-31A952D53A8E}.Debug MCD|Win32.ActiveCfg = Debug|Win32
+		{82685D7F-0589-42BD-877C-31A952D53A8E}.Debug MCD|Win32.Build.0 = Debug|Win32
+		{82685D7F-0589-42BD-877C-31A952D53A8E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{82685D7F-0589-42BD-877C-31A952D53A8E}.Debug|Win32.Build.0 = Debug|Win32
+		{82685D7F-0589-42BD-877C-31A952D53A8E}.Release|Win32.ActiveCfg = Release|Win32
+		{82685D7F-0589-42BD-877C-31A952D53A8E}.Release|Win32.Build.0 = Release|Win32
+		{7FE8F544-9175-40C3-A187-7F15CE9A75D8}.Debug MCD|Win32.ActiveCfg = Debug|Win32
+		{7FE8F544-9175-40C3-A187-7F15CE9A75D8}.Debug MCD|Win32.Build.0 = Debug|Win32
+		{7FE8F544-9175-40C3-A187-7F15CE9A75D8}.Debug|Win32.ActiveCfg = Debug|Win32
+		{7FE8F544-9175-40C3-A187-7F15CE9A75D8}.Debug|Win32.Build.0 = Debug|Win32
+		{7FE8F544-9175-40C3-A187-7F15CE9A75D8}.Release|Win32.ActiveCfg = Release|Win32
+		{7FE8F544-9175-40C3-A187-7F15CE9A75D8}.Release|Win32.Build.0 = Release|Win32
+		{6D97A8EF-5724-4D85-8BF4-C583714BBA78}.Debug MCD|Win32.ActiveCfg = Debug|Win32
+		{6D97A8EF-5724-4D85-8BF4-C583714BBA78}.Debug MCD|Win32.Build.0 = Debug|Win32
+		{6D97A8EF-5724-4D85-8BF4-C583714BBA78}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6D97A8EF-5724-4D85-8BF4-C583714BBA78}.Debug|Win32.Build.0 = Debug|Win32
+		{6D97A8EF-5724-4D85-8BF4-C583714BBA78}.Release|Win32.ActiveCfg = Release|Win32
+		{6D97A8EF-5724-4D85-8BF4-C583714BBA78}.Release|Win32.Build.0 = Release|Win32
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74}.Debug MCD|Win32.ActiveCfg = Debug|Win32
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74}.Debug MCD|Win32.Build.0 = Debug|Win32
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74}.Debug|Win32.ActiveCfg = Debug|Win32
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74}.Debug|Win32.Build.0 = Debug|Win32
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74}.Release|Win32.ActiveCfg = Release|Win32
+		{2769AFC5-8FC2-42E8-803C-528ACBA89C74}.Release|Win32.Build.0 = Release|Win32
+		{56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug MCD|Win32.ActiveCfg = Debug|Win32
+		{56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug MCD|Win32.Build.0 = Debug|Win32
+		{56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|Win32.ActiveCfg = Debug|Win32
+		{56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|Win32.Build.0 = Debug|Win32
+		{56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|Win32.ActiveCfg = Release|Win32
+		{56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|Win32.Build.0 = Release|Win32
+		{793D0EC2-8554-4674-9A97-F25DE5DBE926}.Debug MCD|Win32.ActiveCfg = Debug|Win32
+		{793D0EC2-8554-4674-9A97-F25DE5DBE926}.Debug MCD|Win32.Build.0 = Debug|Win32
+		{793D0EC2-8554-4674-9A97-F25DE5DBE926}.Debug|Win32.ActiveCfg = Debug|Win32
+		{793D0EC2-8554-4674-9A97-F25DE5DBE926}.Debug|Win32.Build.0 = Debug|Win32
+		{793D0EC2-8554-4674-9A97-F25DE5DBE926}.Release|Win32.ActiveCfg = Release|Win32
+		{793D0EC2-8554-4674-9A97-F25DE5DBE926}.Release|Win32.Build.0 = Release|Win32
+		{0E29E502-AB22-4147-93A1-AC91528ED758}.Debug MCD|Win32.ActiveCfg = Debug|Win32
+		{0E29E502-AB22-4147-93A1-AC91528ED758}.Debug MCD|Win32.Build.0 = Debug|Win32
+		{0E29E502-AB22-4147-93A1-AC91528ED758}.Debug|Win32.ActiveCfg = Debug|Win32
+		{0E29E502-AB22-4147-93A1-AC91528ED758}.Debug|Win32.Build.0 = Debug|Win32
+		{0E29E502-AB22-4147-93A1-AC91528ED758}.Release|Win32.ActiveCfg = Release|Win32
+		{0E29E502-AB22-4147-93A1-AC91528ED758}.Release|Win32.Build.0 = Release|Win32
+		{8181D6A1-DE19-4A5C-9B96-E10A18068C93}.Debug MCD|Win32.ActiveCfg = Debug MCD|Win32
+		{8181D6A1-DE19-4A5C-9B96-E10A18068C93}.Debug MCD|Win32.Build.0 = Debug MCD|Win32
+		{8181D6A1-DE19-4A5C-9B96-E10A18068C93}.Debug|Win32.ActiveCfg = Debug|Win32
+		{8181D6A1-DE19-4A5C-9B96-E10A18068C93}.Debug|Win32.Build.0 = Debug|Win32
+		{8181D6A1-DE19-4A5C-9B96-E10A18068C93}.Release|Win32.ActiveCfg = Release|Win32
+		{8181D6A1-DE19-4A5C-9B96-E10A18068C93}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
--- a/Silk_SDK.sln
+++ /dev/null
@@ -1,44 +1,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Silk_FIX", "src\Silk_FIX.vcproj", "{56B91D01-9150-4BBF-AFA1-5B68AB991B76}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dec_SDK", "test\Dec_SDK.vcproj", "{82685D7F-0589-42BD-877C-31A952D53A8E}"
-	ProjectSection(ProjectDependencies) = postProject
-		{56B91D01-9150-4BBF-AFA1-5B68AB991B76} = {56B91D01-9150-4BBF-AFA1-5B68AB991B76}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SignalCompare", "test\SignalCompare.vcproj", "{7FE8F544-9175-40C3-A187-7F15CE9A75D8}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Enc_SDK", "test\Enc_SDK.vcproj", "{6D97A8EF-5724-4D85-8BF4-C583714BBA78}"
-	ProjectSection(ProjectDependencies) = postProject
-		{56B91D01-9150-4BBF-AFA1-5B68AB991B76} = {56B91D01-9150-4BBF-AFA1-5B68AB991B76}
-	EndProjectSection
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Release|Win32 = Release|Win32
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|Win32.ActiveCfg = Debug|Win32
-		{56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Debug|Win32.Build.0 = Debug|Win32
-		{56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|Win32.ActiveCfg = Release|Win32
-		{56B91D01-9150-4BBF-AFA1-5B68AB991B76}.Release|Win32.Build.0 = Release|Win32
-		{82685D7F-0589-42BD-877C-31A952D53A8E}.Debug|Win32.ActiveCfg = Debug|Win32
-		{82685D7F-0589-42BD-877C-31A952D53A8E}.Debug|Win32.Build.0 = Debug|Win32
-		{82685D7F-0589-42BD-877C-31A952D53A8E}.Release|Win32.ActiveCfg = Release|Win32
-		{82685D7F-0589-42BD-877C-31A952D53A8E}.Release|Win32.Build.0 = Release|Win32
-		{7FE8F544-9175-40C3-A187-7F15CE9A75D8}.Debug|Win32.ActiveCfg = Debug|Win32
-		{7FE8F544-9175-40C3-A187-7F15CE9A75D8}.Debug|Win32.Build.0 = Debug|Win32
-		{7FE8F544-9175-40C3-A187-7F15CE9A75D8}.Release|Win32.ActiveCfg = Release|Win32
-		{7FE8F544-9175-40C3-A187-7F15CE9A75D8}.Release|Win32.Build.0 = Release|Win32
-		{6D97A8EF-5724-4D85-8BF4-C583714BBA78}.Debug|Win32.ActiveCfg = Debug|Win32
-		{6D97A8EF-5724-4D85-8BF4-C583714BBA78}.Debug|Win32.Build.0 = Debug|Win32
-		{6D97A8EF-5724-4D85-8BF4-C583714BBA78}.Release|Win32.ActiveCfg = Release|Win32
-		{6D97A8EF-5724-4D85-8BF4-C583714BBA78}.Release|Win32.Build.0 = Release|Win32
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
--- a/configure.gnu
+++ /dev/null
@@ -1,4 +1,0 @@
-#! /bin/sh
-srcpath=$(dirname $0 2>/dev/null )  || srcpath="." 
-$srcpath/configure "$@" --disable-shared --with-pic
-
--- a/configure.in
+++ /dev/null
@@ -1,26 +1,0 @@
-#                                               -*- Autoconf -*-
-# Process this file with autoconf to produce a configure script.
-
-AC_PREREQ([2.59])
-AC_INIT(libSKP_SILK_SDK, 1.0.2, [email protected], libSKP_SILK_SDK)
-AM_INIT_AUTOMAKE(libSKP_SILK_SDK,1.0.2)
-
-# Checks for programs.
-AC_PROG_CC
-AC_PROG_LIBTOOL
-
-# Checks for header files.
-AC_HEADER_STDC
-AC_CHECK_HEADERS([float.h stdint.h stdlib.h string.h])
-
-# Checks for typedefs, structures, and compiler characteristics.
-AC_C_CONST
-AC_C_INLINE
-AC_TYPE_SIZE_T
-
-# Checks for library functions.
-AC_FUNC_MALLOC
-AC_CHECK_LIB([m],[pow])
-
-AC_CONFIG_FILES([Makefile])
-AC_OUTPUT
--- a/interface/SKP_Silk_SDK_API.h
+++ b/interface/SKP_Silk_SDK_API.h
@@ -39,7 +39,7 @@
 
 #define SILK_MAX_FRAMES_PER_PACKET  5
 
-/* Struct for TOC (Table Of Contents) */
+/* Struct for TOC (Table of Contents) */
 typedef struct {
     SKP_int     framesInPacket;                             /* Number of 20 ms frames in packet     */
     SKP_int     fs_kHz;                                     /* Sampling frequency in packet         */
@@ -56,7 +56,7 @@
 /***********************************************/
 /* Get size in bytes of the Silk encoder state */
 /***********************************************/
-SKP_int SKP_Silk_SDK_Get_Encoder_Size( 
+SKP_int SKP_Silk_SDK_Get_Encoder_Size(                  /* O:   Returns error code                              */
     SKP_int32                           *encSizeBytes   /* O:   Number of bytes in SILK encoder state           */
 );
 
@@ -63,7 +63,7 @@
 /*************************/
 /* Init or reset encoder */
 /*************************/
-SKP_int SKP_Silk_SDK_InitEncoder(
+SKP_int SKP_Silk_SDK_InitEncoder(                       /* O:   Returns error code                              */
     void                                *encState,      /* I/O: State                                           */
     SKP_SILK_SDK_EncControlStruct       *encStatus      /* O:   Encoder Status                                  */
 );
@@ -71,7 +71,7 @@
 /***************************************/
 /* Read control structure from encoder */
 /***************************************/
-SKP_int SKP_Silk_SDK_QueryEncoder(
+SKP_int SKP_Silk_SDK_QueryEncoder(                      /* O:   Returns error code                              */
     const void                          *encState,      /* I:   State                                           */
     SKP_SILK_SDK_EncControlStruct       *encStatus      /* O:   Encoder Status                                  */
 );
@@ -79,13 +79,13 @@
 /**************************/
 /* Encode frame with Silk */
 /**************************/
-SKP_int SKP_Silk_SDK_Encode( 
+SKP_int SKP_Silk_SDK_Encode(                            /* O:   Returns error code                              */
     void                                *encState,      /* I/O: State                                           */
     const SKP_SILK_SDK_EncControlStruct *encControl,    /* I:   Control status                                  */
     const SKP_int16                     *samplesIn,     /* I:   Speech sample input vector                      */
     SKP_int                             nSamplesIn,     /* I:   Number of samples in input vector               */
     SKP_uint8                           *outData,       /* O:   Encoded output vector                           */
-    SKP_int16                           *nBytesOut      /* I/O: Number of Bytes in outData (input: Max Bytes)   */
+    SKP_int16                           *nBytesOut      /* I/O: Number of bytes in outData (input: Max bytes)   */
 );
 
 /****************************************/
@@ -95,7 +95,7 @@
 /***********************************************/
 /* Get size in bytes of the Silk decoder state */
 /***********************************************/
-SKP_int SKP_Silk_SDK_Get_Decoder_Size( 
+SKP_int SKP_Silk_SDK_Get_Decoder_Size(                  /* O:   Returns error code                              */
     SKP_int32                           *decSizeBytes   /* O:   Number of bytes in SILK decoder state           */
 );
 
@@ -102,7 +102,7 @@
 /*************************/
 /* Init or Reset decoder */
 /*************************/
-SKP_int SKP_Silk_SDK_InitDecoder( 
+SKP_int SKP_Silk_SDK_InitDecoder(                       /* O:   Returns error code                              */
     void                                *decState       /* I/O: State                                           */
 );
 
@@ -109,12 +109,12 @@
 /******************/
 /* Decode a frame */
 /******************/
-SKP_int SKP_Silk_SDK_Decode(
+SKP_int SKP_Silk_SDK_Decode(                            /* O:   Returns error code                              */
     void*                               decState,       /* I/O: State                                           */
     SKP_SILK_SDK_DecControlStruct*      decControl,     /* I/O: Control Structure                               */
     SKP_int                             lostFlag,       /* I:   0: no loss, 1 loss                              */
     const SKP_uint8                     *inData,        /* I:   Encoded input vector                            */
-    const SKP_int                       nBytesIn,       /* I:   Number of input Bytes                           */
+    const SKP_int                       nBytesIn,       /* I:   Number of input bytes                           */
     SKP_int16                           *samplesOut,    /* O:   Decoded output speech vector                    */
     SKP_int16                           *nSamplesOut    /* I/O: Number of samples (vector/decoded)              */
 );
@@ -123,22 +123,20 @@
 /* Find Low Bit Rate Redundancy (LBRR) information in a packet */
 /***************************************************************/
 void SKP_Silk_SDK_search_for_LBRR(
-    void                                *decState,      /* I:   Decoder state, to select bitstream version only */
     const SKP_uint8                     *inData,        /* I:   Encoded input vector                            */
-    const SKP_int16                     nBytesIn,       /* I:   Number of input Bytes                           */
+    const SKP_int16                     nBytesIn,       /* I:   Number of input bytes                           */
     SKP_int                             lost_offset,    /* I:   Offset from lost packet                         */
     SKP_uint8                           *LBRRData,      /* O:   LBRR payload                                    */
     SKP_int16                           *nLBRRBytes     /* O:   Number of LBRR Bytes                            */
 );
 
-/************************************/
-/* Get type of content for a packet */
-/************************************/
+/**************************************/
+/* Get table of contents for a packet */
+/**************************************/
 void SKP_Silk_SDK_get_TOC(
-    void		                        *decState,      /* I:   Decoder state, to select bitstream version only */
     const SKP_uint8                     *inData,        /* I:   Encoded input vector                            */
     const SKP_int16                     nBytesIn,       /* I:   Number of input bytes                           */
-    SKP_Silk_TOC_struct                 *Silk_TOC       /* O:   Type of content                                 */
+    SKP_Silk_TOC_struct                 *Silk_TOC       /* O:   Table of contents                               */
 );
 
 /**************************/
--- a/interface/SKP_Silk_control.h
+++ b/interface/SKP_Silk_control.h
@@ -39,9 +39,12 @@
 /* Structure for controlling encoder operation */
 /***********************************************/
 typedef struct {
-    /* I:   Sampling rate in Hertz; 8000/12000/16000/24000                                  */
-    SKP_int32 sampleRate;
+    /* I:   Input signal sampling rate in Hertz; 8000/12000/16000/24000                     */
+    SKP_int32 API_sampleRate;
 
+    /* I:   Maximum internal sampling rate in Hertz; 8000/12000/16000/24000                 */
+    SKP_int32 maxInternalSampleRate;
+
     /* I:   Number of samples per packet; must be equivalent of 20, 40, 60, 80 or 100 ms    */
     SKP_int packetSize;
 
@@ -48,7 +51,7 @@
     /* I:   Bitrate during active speech in bits/second; internally limited                 */
     SKP_int32 bitRate;                        
 
-    /* I:   Uplink Packet loss in pct (0...100)                                             */
+    /* I:   Uplink packet loss in percent (0-100)                                           */
     SKP_int packetLossPercentage;
     
     /* I:   Complexity mode; 0 is lowest; 1 is medium and 2 is highest complexity           */
@@ -57,7 +60,7 @@
     /* I:   Flag to enable in-band Forward Error Correction (FEC); 0/1                      */
     SKP_int useInBandFEC;
 
-    /* I:   Flag to enable Discontinous Transmission; 0/1                                   */
+    /* I:   Flag to enable discontinuous transmission (DTX); 0/1                            */
     SKP_int useDTX;
 } SKP_SILK_SDK_EncControlStruct;
 
@@ -65,8 +68,8 @@
 /* Structure for controlling decoder operation and reading decoder status */
 /**************************************************************************/
 typedef struct {
-    /* I:   Sampling rate in Hertz; 8000/12000/16000/24000                                  */
-    SKP_int32 sampleRate;
+    /* I:   Output signal sampling rate in Hertz; 8000/12000/16000/24000                    */
+    SKP_int32 API_sampleRate;
 
     /* O:   Number of samples per frame                                                     */
     SKP_int frameSize;
--- a/interface/SKP_Silk_errors.h
+++ b/interface/SKP_Silk_errors.h
@@ -36,48 +36,45 @@
 /******************/
 /* Error messages */
 /******************/
-#define SKP_SILK_NO_ERROR                                 0
+#define SKP_SILK_NO_ERROR                               0
 
 /**************************/
 /* Encoder error messages */
 /**************************/
 
-/* Input length is not a multiplum of 10 ms, 
-   or length is longer than the packet length */
-#define SKP_SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES         -1
+/* Input length is not a multiplum of 10 ms, or length is longer than the packet length */
+#define SKP_SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES        -1
 
-/* Sampling frequency not 8000, 12000, 16000 
-   or 24000 Hertz */
-#define SKP_SILK_ENC_FS_NOT_SUPPORTED                    -2
+/* Sampling frequency not 8000, 12000, 16000 or 24000 Hertz */
+#define SKP_SILK_ENC_FS_NOT_SUPPORTED                   -2
 
 /* Packet size not 20, 40, 60, 80 or 100 ms */
-#define SKP_SILK_ENC_PACKET_SIZE_NOT_SUPPORTED           -3
+#define SKP_SILK_ENC_PACKET_SIZE_NOT_SUPPORTED          -3
 
 /* Allocated payload buffer too short */
-#define SKP_SILK_ENC_PAYLOAD_BUF_TOO_SHORT               -4
+#define SKP_SILK_ENC_PAYLOAD_BUF_TOO_SHORT              -4
 
 /* Loss rate not between 0 and 100 percent */
-#define SKP_SILK_ENC_WRONG_LOSS_RATE                     -5
+#define SKP_SILK_ENC_INVALID_LOSS_RATE                  -5
 
 /* Complexity setting not valid, use 0, 1 or 2 */
-#define SKP_SILK_ENC_WRONG_COMPLEXITY_SETTING            -6
+#define SKP_SILK_ENC_INVALID_COMPLEXITY_SETTING         -6
 
 /* Inband FEC setting not valid, use 0 or 1 */
-#define SKP_SILK_ENC_WRONG_INBAND_FEC_SETTING            -7
+#define SKP_SILK_ENC_INVALID_INBAND_FEC_SETTING         -7
 
 /* DTX setting not valid, use 0 or 1 */
-#define SKP_SILK_ENC_WRONG_DTX_SETTING                   -8
+#define SKP_SILK_ENC_INVALID_DTX_SETTING                -8
 
 /* Internal encoder error */
-#define SKP_SILK_ENC_INTERNAL_ERROR                      -9
+#define SKP_SILK_ENC_INTERNAL_ERROR                     -9
 
 /**************************/
 /* Decoder error messages */
 /**************************/
 
-/* Output sampling frequency lower than internal 
-   decoded sampling frequency */
-#define SKP_SILK_DEC_WRONG_SAMPLING_FREQUENCY           -10
+/* Output sampling frequency lower than internal decoded sampling frequency */
+#define SKP_SILK_DEC_INVALID_SAMPLING_FREQUENCY         -10
 
 /* Payload size exceeded the maximum allowed 1024 bytes */
 #define SKP_SILK_DEC_PAYLOAD_TOO_LARGE                  -11
@@ -84,7 +81,6 @@
 
 /* Payload has bit errors */
 #define SKP_SILK_DEC_PAYLOAD_ERROR                      -12
-
 
 #ifdef __cplusplus
 }
--- /dev/null
+++ b/interface/SKP_debug.h
@@ -1,0 +1,293 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+
+/*                                                                      *
+ * SKP_debug.h                                                          *
+ *                                                                      *
+ * This contains code to help debugging                                 *
+ *                                                                      *
+ * Copyright 2009 (c), Skype Limited                                    *
+ * Date: 090629                                                         *
+ *                                                                      */
+#ifndef _SKP_DEBUG_H_
+#define _SKP_DEBUG_H_
+
+#ifdef _WIN32
+#define _CRT_SECURE_NO_DEPRECATE    1
+#endif
+
+#include "SKP_Silk_typedef.h"
+#include <stdio.h>      /* file writing */
+#include <string.h>     /* strcpy, strcmp */
+
+#ifdef  __cplusplus
+extern "C"
+{
+#endif
+
+unsigned long GetHighResolutionTime(); /* O: time in usec*/
+
+/* make SKP_DEBUG dependent on compiler's _DEBUG */
+#if defined _WIN32
+    #ifdef _DEBUG
+        #define SKP_DEBUG  1
+    #else
+        #define SKP_DEBUG  0
+    #endif
+
+    /* overrule the above */
+    #if 0
+    //  #define NO_ASSERTS
+    #undef  SKP_DEBUG  
+    #define SKP_DEBUG  1
+    #endif
+#else
+    #define SKP_DEBUG  0
+#endif
+
+/* Flag for using timers */
+#define SKP_TIC_TOC 1
+
+#if SKP_TIC_TOC
+
+#if (defined(_WIN32) || defined(_WINCE)) 
+#include <windows.h>    /* timer */
+#pragma warning( disable : 4996 )       // stop bitching about strcpy in TIC()
+#else   // Linux or Mac
+#include <sys/time.h>
+#endif
+
+/*********************************/
+/* timer functions for profiling */
+/*********************************/
+/* example:                                                         */
+/*                                                                  */
+/* TIC(LPC)                                                         */
+/* do_LPC(in_vec, order, acoef);    // do LPC analysis              */
+/* TOC(LPC)                                                         */
+/*                                                                  */
+/* and call the following just before exiting (from main)           */
+/*                                                                  */
+/* SKP_TimerSave("SKP_TimingData.txt");                             */
+/*                                                                  */
+/* results are now in SKP_TimingData.txt                            */
+
+void SKP_TimerSave(char *file_name);
+
+/* max number of timers (in different locations) */
+#define SKP_NUM_TIMERS_MAX                  50
+/* max length of name tags in TIC(..), TOC(..) */
+#define SKP_NUM_TIMERS_MAX_TAG_LEN          30
+
+extern int           SKP_Timer_nTimers;
+extern int           SKP_Timer_depth_ctr;
+extern char          SKP_Timer_tags[SKP_NUM_TIMERS_MAX][SKP_NUM_TIMERS_MAX_TAG_LEN];
+#ifdef _WIN32
+extern LARGE_INTEGER SKP_Timer_start[SKP_NUM_TIMERS_MAX];
+#else
+extern unsigned long SKP_Timer_start[SKP_NUM_TIMERS_MAX];
+#endif  
+extern unsigned int  SKP_Timer_cnt[SKP_NUM_TIMERS_MAX];
+extern SKP_int64     SKP_Timer_sum[SKP_NUM_TIMERS_MAX];
+extern SKP_int64     SKP_Timer_max[SKP_NUM_TIMERS_MAX];
+extern SKP_int64     SKP_Timer_min[SKP_NUM_TIMERS_MAX];
+extern SKP_int64     SKP_Timer_depth[SKP_NUM_TIMERS_MAX];
+
+/* WARNING: TIC()/TOC can measure only up to 0.1 seconds at a time */
+#ifdef _WIN32
+#define TIC(TAG_NAME) {                                     \
+    static int init = 0;                                    \
+    static int ID = -1;                                     \
+    if( init == 0 )                                         \
+    {                                                       \
+        int k;                                              \
+        init = 1;                                           \
+        for( k = 0; k < SKP_Timer_nTimers; k++ ) {          \
+            if( strcmp(SKP_Timer_tags[k], #TAG_NAME) == 0 ) {   \
+                ID = k;                                     \
+                break;                                      \
+            }                                               \
+        }                                                   \
+        if (ID == -1) {                                     \
+            ID = SKP_Timer_nTimers;                         \
+            SKP_Timer_nTimers++;                            \
+            SKP_Timer_depth[ID] = SKP_Timer_depth_ctr;      \
+            strcpy(SKP_Timer_tags[ID], #TAG_NAME);          \
+            SKP_Timer_cnt[ID] = 0;                          \
+            SKP_Timer_sum[ID] = 0;                          \
+            SKP_Timer_min[ID] = 0xFFFFFFFF;                 \
+            SKP_Timer_max[ID] = 0;                          \
+        }                                                   \
+    }                                                       \
+    SKP_Timer_depth_ctr++;                                  \
+    QueryPerformanceCounter(&SKP_Timer_start[ID]);          \
+}
+#else
+#define TIC(TAG_NAME) {                                     \
+    static int init = 0;                                    \
+    static int ID = -1;                                     \
+    if( init == 0 )                                         \
+    {                                                       \
+        int k;                                              \
+        init = 1;                                           \
+        for( k = 0; k < SKP_Timer_nTimers; k++ ) {          \
+        if( strcmp(SKP_Timer_tags[k], #TAG_NAME) == 0 ) {   \
+                ID = k;                                     \
+                break;                                      \
+            }                                               \
+        }                                                   \
+        if (ID == -1) {                                     \
+            ID = SKP_Timer_nTimers;                         \
+            SKP_Timer_nTimers++;                            \
+            SKP_Timer_depth[ID] = SKP_Timer_depth_ctr;      \
+            strcpy(SKP_Timer_tags[ID], #TAG_NAME);          \
+            SKP_Timer_cnt[ID] = 0;                          \
+            SKP_Timer_sum[ID] = 0;                          \
+            SKP_Timer_min[ID] = 0xFFFFFFFF;                 \
+            SKP_Timer_max[ID] = 0;                          \
+        }                                                   \
+    }                                                       \
+    SKP_Timer_depth_ctr++;                                  \
+    SKP_Timer_start[ID] = GetHighResolutionTime();          \
+}
+#endif
+
+#ifdef _WIN32
+#define TOC(TAG_NAME) {                                             \
+    LARGE_INTEGER lpPerformanceCount;                               \
+    static int init = 0;                                            \
+    static int ID = 0;                                              \
+    if( init == 0 )                                                 \
+    {                                                               \
+        int k;                                                      \
+        init = 1;                                                   \
+        for( k = 0; k < SKP_Timer_nTimers; k++ ) {                  \
+            if( strcmp(SKP_Timer_tags[k], #TAG_NAME) == 0 ) {       \
+                ID = k;                                             \
+                break;                                              \
+            }                                                       \
+        }                                                           \
+    }                                                               \
+    QueryPerformanceCounter(&lpPerformanceCount);                   \
+    lpPerformanceCount.QuadPart -= SKP_Timer_start[ID].QuadPart;    \
+    if((lpPerformanceCount.QuadPart < 100000000) &&                 \
+        (lpPerformanceCount.QuadPart >= 0)) {                       \
+        SKP_Timer_cnt[ID]++;                                        \
+        SKP_Timer_sum[ID] += lpPerformanceCount.QuadPart;           \
+        if( lpPerformanceCount.QuadPart > SKP_Timer_max[ID] )       \
+            SKP_Timer_max[ID] = lpPerformanceCount.QuadPart;        \
+        if( lpPerformanceCount.QuadPart < SKP_Timer_min[ID] )       \
+            SKP_Timer_min[ID] = lpPerformanceCount.QuadPart;        \
+    }                                                               \
+    SKP_Timer_depth_ctr--;                                          \
+}
+#else
+#define TOC(TAG_NAME) {                                             \
+    unsigned long endTime;                                          \
+    static int init = 0;                                            \
+    static int ID = 0;                                              \
+    if( init == 0 )                                                 \
+    {                                                               \
+        int k;                                                      \
+        init = 1;                                                   \
+        for( k = 0; k < SKP_Timer_nTimers; k++ ) {                  \
+            if( strcmp(SKP_Timer_tags[k], #TAG_NAME) == 0 ) {       \
+                ID = k;                                             \
+                break;                                              \
+            }                                                       \
+        }                                                           \
+    }                                                               \
+    endTime = GetHighResolutionTime();                              \
+    endTime -= SKP_Timer_start[ID];                                 \
+    if((endTime < 100000000) &&                                     \
+        (endTime >= 0)) {                                           \
+        SKP_Timer_cnt[ID]++;                                        \
+        SKP_Timer_sum[ID] += endTime;                               \
+        if( endTime > SKP_Timer_max[ID] )                           \
+            SKP_Timer_max[ID] = endTime;                            \
+        if( endTime < SKP_Timer_min[ID] )                           \
+            SKP_Timer_min[ID] = endTime;                            \
+    }                                                               \
+        SKP_Timer_depth_ctr--;                                      \
+}
+#endif
+
+#else /* SKP_TIC_TOC */
+
+/* define macros as empty strings */
+#define TIC(TAG_NAME)
+#define TOC(TAG_NAME)
+#define SKP_TimerSave(FILE_NAME)
+
+#endif /* SKP_TIC_TOC */
+
+
+
+#if SKP_DEBUG
+/************************************/
+/* write data to file for debugging */
+/************************************/
+/* opens an empty file if this file has not yet been open, then writes to the file and closes it            */
+/* if file has been open previously it is opened again and the fwrite is appending, finally it is closed    */
+#define SAVE_DATA(FILE_NAME, DATA_PTR, N_BYTES) { static SKP_int32 init = 0;FILE *fp;if (init == 0) {init = 1;fp = fopen(#FILE_NAME, "wb");}else {fp = fopen(#FILE_NAME, "ab+");}   fwrite((DATA_PTR), (N_BYTES), 1, fp);fclose(fp);}   
+
+/* Example: DEBUG_STORE_DATA(testfile.pcm, &RIN[0], 160*sizeof(SKP_int16)); */
+
+#if 0
+/* Ensure that everything is written to files when an assert breaks */
+#define DEBUG_STORE_DATA(FILE_NAME, DATA_PTR, N_BYTES) SAVE_DATA(FILE_NAME, DATA_PTR, N_BYTES)
+#else
+/* Faster way of storing the data */
+#define DEBUG_STORE_DATA(FILE_NAME, DATA_PTR, N_BYTES) {    \
+    static SKP_int32 init = 0;                              \
+    static FILE *fp;                                        \
+    if (init == 0)                                          \
+    {                                                       \
+        init = 1;                                           \
+        fp = fopen(#FILE_NAME, "wb");                       \
+    }                                                       \
+    fwrite((DATA_PTR), (N_BYTES), 1, fp);                   \
+}
+#endif
+
+/* micro sec */
+#define SKP_GETTIME(void)       time = (SKP_int64) GetHighResolutionTime();     
+
+#else /* SKP_DEBUG */
+
+/* define macros as empty strings */
+#define DEBUG_STORE_DATA(FILE_NAME, DATA_PTR, N_BYTES)
+#define SAVE_DATA(FILE_NAME, DATA_PTR, N_BYTES)
+
+#endif /* SKP_DEBUG */
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* _SKP_DEBUG_H_ */
--- a/readme.txt
+++ b/readme.txt
@@ -8,7 +8,7 @@
 
 I. Description
 
-This package contains files for compiling and testing the fixed
+This package contains files for compilation and evaluation of the fixed
 point SILK SDK library. The following is included in this package:
 
     o Source code for the fixed point SILK SDK library
--- a/src/SKP_Silk_A2NLSF.c
+++ /dev/null
@@ -1,280 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/* Conversion between prediction filter coefficients and NLSFs  */
-/* Requires the order to be an even number                      */
-/* A piecewise linear approximation maps LSF <-> cos(LSF)       */
-/* Therefore the result is not accurate NLSFs, but the two      */
-/* function are accurate inverses of each other                 */
-
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Number of binary divisions, when not in low complexity mode */
-#define BIN_DIV_STEPS_A2NLSF_FIX      2 /* must be no higher than 16 - log2( LSF_COS_TAB_SZ_FIX ) */
-#define QPoly                        16
-#define MAX_ITERATIONS_A2NLSF_FIX    50
-
-/* Flag for using 2x as many cosine sampling points, reduces the risk of missing a root */
-#define OVERSAMPLE_COSINE_TABLE       0
-
-/* Helper function for A2NLSF(..)                    */
-/* Transforms polynomials from cos(n*f) to cos(f)^n  */
-SKP_INLINE void SKP_Silk_A2NLSF_trans_poly(
-    SKP_int32        *p,    /* I/O    Polynomial                                */
-    const SKP_int    dd     /* I      Polynomial order (= filter order / 2 )    */
-)
-{
-    SKP_int k, n;
-    
-    for( k = 2; k <= dd; k++ ) {
-        for( n = dd; n > k; n-- ) {
-            p[ n - 2 ] -= p[ n ];
-        }
-        p[ k - 2 ] -= SKP_LSHIFT( p[ k ], 1 );
-    }
-}    
-
-/* Helper function for A2NLSF(..)                    */
-/* Polynomial evaluation                             */
-SKP_INLINE SKP_int32 SKP_Silk_A2NLSF_eval_poly(    /* return the polynomial evaluation, in QPoly */
-    SKP_int32        *p,    /* I    Polynomial, QPoly        */
-    const SKP_int32    x,   /* I    Evaluation point, Q12    */
-    const SKP_int    dd     /* I    Order                    */
-)
-{
-    SKP_int   n;
-    SKP_int32 x_Q16, y32;
-
-    y32 = p[ dd ];                                    /* QPoly */
-    x_Q16 = SKP_LSHIFT( x, 4 );
-    for( n = dd - 1; n >= 0; n-- ) {
-        y32 = SKP_SMLAWW( p[ n ], y32, x_Q16 );       /* QPoly */
-    }
-    return y32;
-}
-
-SKP_INLINE void SKP_Silk_A2NLSF_init(
-     const SKP_int32    *a_Q16,
-     SKP_int32            *P, 
-     SKP_int32            *Q, 
-     const SKP_int        dd
-) 
-{
-    SKP_int k;
-
-    /* Convert filter coefs to even and odd polynomials */
-    P[dd] = SKP_LSHIFT( 1, QPoly );
-    Q[dd] = SKP_LSHIFT( 1, QPoly );
-    for( k = 0; k < dd; k++ ) {
-#if( QPoly < 16 )
-        P[ k ] = SKP_RSHIFT_ROUND( -a_Q16[ dd - k - 1 ] - a_Q16[ dd + k ], 16 - QPoly ); /* QPoly */
-        Q[ k ] = SKP_RSHIFT_ROUND( -a_Q16[ dd - k - 1 ] + a_Q16[ dd + k ], 16 - QPoly ); /* QPoly */
-#elif( Qpoly == 16 )
-        P[ k ] = -a_Q16[ dd - k - 1 ] - a_Q16[ dd + k ]; // QPoly
-        Q[ k ] = -a_Q16[ dd - k - 1 ] + a_Q16[ dd + k ]; // QPoly
-#else
-        P[ k ] = SKP_LSHIFT( -a_Q16[ dd - k - 1 ] - a_Q16[ dd + k ], QPoly - 16 ); /* QPoly */
-        Q[ k ] = SKP_LSHIFT( -a_Q16[ dd - k - 1 ] + a_Q16[ dd + k ], QPoly - 16 ); /* QPoly */
-#endif
-    }
-
-    /* Divide out zeros as we have that for even filter orders, */
-    /* z =  1 is always a root in Q, and                        */
-    /* z = -1 is always a root in P                             */
-    for( k = dd; k > 0; k-- ) {
-        P[ k - 1 ] -= P[ k ]; 
-        Q[ k - 1 ] += Q[ k ]; 
-    }
-
-    /* Transform polynomials from cos(n*f) to cos(f)^n */
-    SKP_Silk_A2NLSF_trans_poly( P, dd );
-    SKP_Silk_A2NLSF_trans_poly( Q, dd );
-}
-
-/* Compute Normalized Line Spectral Frequencies (NLSFs) from whitening filter coefficients        */
-/* If not all roots are found, the a_Q16 coefficients are bandwidth expanded until convergence.    */
-void SKP_Silk_A2NLSF(
-    SKP_int          *NLSF,                 /* O    Normalized Line Spectral Frequencies, Q15 (0 - (2^15-1)), [d]    */
-    SKP_int32        *a_Q16,                /* I/O  Monic whitening filter coefficients in Q16 [d]                   */
-    const SKP_int    d                      /* I    Filter order (must be even)                                      */
-)
-{
-    SKP_int      i, k, m, dd, root_ix, ffrac;
-    SKP_int32 xlo, xhi, xmid;
-    SKP_int32 ylo, yhi, ymid;
-    SKP_int32 nom, den;
-    SKP_int32 P[ SigProc_MAX_ORDER_LPC / 2 + 1 ];
-    SKP_int32 Q[ SigProc_MAX_ORDER_LPC / 2 + 1 ];
-    SKP_int32 *PQ[ 2 ];
-    SKP_int32 *p;
-
-    /* Store pointers to array */
-    PQ[ 0 ] = P;
-    PQ[ 1 ] = Q;
-
-    dd = SKP_RSHIFT( d, 1 );
-
-    SKP_Silk_A2NLSF_init( a_Q16, P, Q, dd );
-
-    /* Find roots, alternating between P and Q */
-    p = P;    /* Pointer to polynomial */
-    
-    xlo = SKP_Silk_LSFCosTab_FIX_Q12[ 0 ]; // Q12
-    ylo = SKP_Silk_A2NLSF_eval_poly( p, xlo, dd );
-
-    if( ylo < 0 ) {
-        /* Set the first NLSF to zero and move on to the next */
-        NLSF[ 0 ] = 0;
-        p = Q;                      /* Pointer to polynomial */
-        ylo = SKP_Silk_A2NLSF_eval_poly( p, xlo, dd );
-        root_ix = 1;                /* Index of current root */
-    } else {
-        root_ix = 0;                /* Index of current root */
-    }
-    k = 1;                          /* Loop counter */
-    i = 0;                          /* Counter for bandwidth expansions applied */
-    while( 1 ) {
-        /* Evaluate polynomial */
-#if OVERSAMPLE_COSINE_TABLE
-        xhi = SKP_Silk_LSFCosTab_FIX_Q12[   k       >> 1 ] +
-          ( ( SKP_Silk_LSFCosTab_FIX_Q12[ ( k + 1 ) >> 1 ] - 
-              SKP_Silk_LSFCosTab_FIX_Q12[   k       >> 1 ] ) >> 1 );    /* Q12 */
-#else
-        xhi = SKP_Silk_LSFCosTab_FIX_Q12[ k ]; /* Q12 */
-#endif
-        yhi = SKP_Silk_A2NLSF_eval_poly( p, xhi, dd );
-        
-        /* Detect zero crossing */
-        if( ( ylo <= 0 && yhi >= 0 ) || ( ylo >= 0 && yhi <= 0 ) ) {
-            /* Binary division */
-#if OVERSAMPLE_COSINE_TABLE
-            ffrac = -128;
-#else
-            ffrac = -256;
-#endif
-            for( m = 0; m < BIN_DIV_STEPS_A2NLSF_FIX; m++ ) {
-                /* Evaluate polynomial */
-                xmid = SKP_RSHIFT_ROUND( xlo + xhi, 1 );
-                ymid = SKP_Silk_A2NLSF_eval_poly( p, xmid, dd );
-
-                /* Detect zero crossing */
-                if( ( ylo <= 0 && ymid >= 0 ) || ( ylo >= 0 && ymid <= 0 ) ) {
-                    /* Reduce frequency */
-                    xhi = xmid;
-                    yhi = ymid;
-                } else {
-                    /* Increase frequency */
-                    xlo = xmid;
-                    ylo = ymid;
-#if OVERSAMPLE_COSINE_TABLE
-                    ffrac = SKP_ADD_RSHIFT( ffrac,  64, m );
-#else
-                    ffrac = SKP_ADD_RSHIFT( ffrac, 128, m );
-#endif
-                }
-            }
-            
-            /* Interpolate */
-            if( SKP_abs( ylo ) < 65536 ) {
-                /* Avoid dividing by zero */
-                den = ylo - yhi;
-                nom = SKP_LSHIFT( ylo, 8 - BIN_DIV_STEPS_A2NLSF_FIX ) + SKP_RSHIFT( den, 1 );
-                if( den != 0 ) {
-                    ffrac += SKP_DIV32( nom, den );
-                }
-            } else {
-                /* No risk of dividing by zero because abs(ylo - yhi) >= abs(ylo) >= 65536 */
-                ffrac += SKP_DIV32( ylo, SKP_RSHIFT( ylo - yhi, 8 - BIN_DIV_STEPS_A2NLSF_FIX ) );
-            }
-#if OVERSAMPLE_COSINE_TABLE
-            NLSF[ root_ix ] = (SKP_int)SKP_min_32( SKP_LSHIFT( (SKP_int32)k, 7 ) + ffrac, SKP_int16_MAX ); 
-#else
-            NLSF[ root_ix ] = (SKP_int)SKP_min_32( SKP_LSHIFT( (SKP_int32)k, 8 ) + ffrac, SKP_int16_MAX ); 
-#endif
-
-            SKP_assert( NLSF[ root_ix ] >=     0 );
-            SKP_assert( NLSF[ root_ix ] <= 32767 );
-
-            root_ix++;        /* Next root */
-            if( root_ix >= d ) {
-                /* Found all roots */
-                break;
-            }
-            /* Alternate pointer to polynomial */
-            p = PQ[ root_ix & 1 ];
-            
-            /* Evaluate polynomial */
-#if OVERSAMPLE_COSINE_TABLE
-            xlo = SKP_Silk_LSFCosTab_FIX_Q12[ ( k - 1 ) >> 1 ] +
-              ( ( SKP_Silk_LSFCosTab_FIX_Q12[   k       >> 1 ] - 
-                  SKP_Silk_LSFCosTab_FIX_Q12[ ( k - 1 ) >> 1 ] ) >> 1 ); // Q12
-#else
-            xlo = SKP_Silk_LSFCosTab_FIX_Q12[ k - 1 ]; // Q12
-#endif
-            ylo = SKP_LSHIFT( 1 - ( root_ix & 2 ), 12 );
-        } else {
-            /* Increment loop counter */
-            k++;
-            xlo    = xhi;
-            ylo    = yhi;
-            
-#if OVERSAMPLE_COSINE_TABLE
-            if( k > 2 * LSF_COS_TAB_SZ_FIX ) {
-#else
-            if( k > LSF_COS_TAB_SZ_FIX ) {
-#endif
-                i++;
-                if( i > MAX_ITERATIONS_A2NLSF_FIX ) {
-                    /* Set NLSFs to white spectrum and exit */
-                    NLSF[ 0 ] = SKP_DIV32_16( 1 << 15, d + 1 );
-                    for( k = 1; k < d; k++ ) {
-                        NLSF[ k ] = SKP_SMULBB( k + 1, NLSF[ 0 ] );
-                    }
-                    return;
-                }
-
-                /* Error: Apply progressively more bandwidth expansion and run again */
-                SKP_Silk_bwexpander_32( a_Q16, d, 65536 - SKP_SMULBB( 66, i ) ); // 66_Q16 = 0.001
-
-                SKP_Silk_A2NLSF_init( a_Q16, P, Q, dd );
-                p = P;                            /* Pointer to polynomial */
-                xlo = SKP_Silk_LSFCosTab_FIX_Q12[ 0 ]; // Q12
-                ylo = SKP_Silk_A2NLSF_eval_poly( p, xlo, dd );
-                if( ylo < 0 ) {
-                    /* Set the first NLSF to zero and move on to the next */
-                    NLSF[ 0 ] = 0;
-                    p = Q;                        /* Pointer to polynomial */
-                    ylo = SKP_Silk_A2NLSF_eval_poly( p, xlo, dd );
-                    root_ix = 1;                /* Index of current root */
-                } else {
-                    root_ix = 0;                /* Index of current root */
-                }
-                k = 1;                            /* Reset loop counter */
-            }
-        }
-    }
-}
--- a/src/SKP_Silk_CNG.c
+++ /dev/null
@@ -1,149 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-/* Generates excitation for CNG LPC synthesis */
-SKP_INLINE void SKP_Silk_CNG_exc(
-    SKP_int16                       residual[],         /* O    CNG residual signal Q0                      */
-    SKP_int32                       exc_buf_Q10[],      /* I    Random samples buffer Q10                   */
-    SKP_int32                       Gain_Q16,           /* I    Gain to apply                               */
-    SKP_int                         length,             /* I    Length                                      */
-    SKP_int32                       *rand_seed          /* I/O  Seed to random index generator              */
-)
-{
-    SKP_int32 seed;
-    SKP_int   i, idx, exc_mask;
-
-    exc_mask = CNG_BUF_MASK_MAX;
-    while( exc_mask > length ) {
-        exc_mask = SKP_RSHIFT( exc_mask, 1 );
-    }
-
-    seed = *rand_seed;
-    for( i = 0; i < length; i++ ) {
-        seed = SKP_RAND( seed );
-        idx = ( SKP_int )( SKP_RSHIFT( seed, 24 ) & exc_mask );
-        SKP_assert( idx >= 0 );
-        SKP_assert( idx <= CNG_BUF_MASK_MAX );
-        residual[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( exc_buf_Q10[ idx ], Gain_Q16 ), 10 ) );
-    }
-    *rand_seed = seed;
-}
-
-void SKP_Silk_CNG_Reset(
-    SKP_Silk_decoder_state      *psDec              /* I/O  Decoder state                               */
-)
-{
-    SKP_int i, NLSF_step_Q15, NLSF_acc_Q15;
-
-    NLSF_step_Q15 = SKP_DIV32_16( SKP_int16_MAX, psDec->LPC_order + 1 );
-    NLSF_acc_Q15 = 0;
-    for( i = 0; i < psDec->LPC_order; i++ ) {
-        NLSF_acc_Q15 += NLSF_step_Q15;
-        psDec->sCNG.CNG_smth_NLSF_Q15[ i ] = NLSF_acc_Q15;
-    }
-    psDec->sCNG.CNG_smth_Gain_Q16 = 0;
-    psDec->sCNG.rand_seed = 3176576;
-}
-
-/* Updates CNG estimate, and applies the CNG when packet was lost   */
-void SKP_Silk_CNG(
-    SKP_Silk_decoder_state      *psDec,             /* I/O  Decoder state                               */
-    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O  Decoder control                             */
-    SKP_int16                   signal[],           /* I/O  Signal                                      */
-    SKP_int                     length              /* I    Length of residual                          */
-)
-{
-    SKP_int   i, subfr;
-    SKP_int32 tmp_32, Gain_Q26, max_Gain_Q16;
-    SKP_int16 LPC_buf[ MAX_LPC_ORDER ];
-    SKP_int16 CNG_sig[ MAX_FRAME_LENGTH ];
-    SKP_Silk_CNG_struct *psCNG;
-    psCNG = &psDec->sCNG;
-
-    if( psDec->fs_kHz != psCNG->fs_kHz ) {
-        /* Reset state */
-        SKP_Silk_CNG_Reset( psDec );
-
-        psCNG->fs_kHz = psDec->fs_kHz;
-    }
-    if( psDec->lossCnt == 0 && psDec->vadFlag == NO_VOICE_ACTIVITY ) {
-        /* Update CNG parameters */
-
-        /* Smoothing of LSF's  */
-        for( i = 0; i < psDec->LPC_order; i++ ) {
-            psCNG->CNG_smth_NLSF_Q15[ i ] += SKP_SMULWB( psDec->prevNLSF_Q15[ i ] - psCNG->CNG_smth_NLSF_Q15[ i ], CNG_NLSF_SMTH_Q16 );
-        }
-        /* Find the subframe with the highest gain */
-        max_Gain_Q16 = 0;
-        subfr        = 0;
-        for( i = 0; i < NB_SUBFR; i++ ) {
-            if( psDecCtrl->Gains_Q16[ i ] > max_Gain_Q16 ) {
-                max_Gain_Q16 = psDecCtrl->Gains_Q16[ i ];
-                subfr        = i;
-            }
-        }
-        /* Update CNG excitation buffer with excitation from this subframe */
-        SKP_memmove( &psCNG->CNG_exc_buf_Q10[ psDec->subfr_length ], psCNG->CNG_exc_buf_Q10, ( NB_SUBFR - 1 ) * psDec->subfr_length * sizeof( SKP_int32 ) );
-        SKP_memcpy(   psCNG->CNG_exc_buf_Q10, &psDec->exc_Q10[ subfr * psDec->subfr_length ], psDec->subfr_length * sizeof( SKP_int32 ) );
-
-        /* Smooth gains */
-        for( i = 0; i < NB_SUBFR; i++ ) {
-            psCNG->CNG_smth_Gain_Q16 += SKP_SMULWB( psDecCtrl->Gains_Q16[ i ] - psCNG->CNG_smth_Gain_Q16, CNG_GAIN_SMTH_Q16 );
-        }
-    }
-
-    /* Add CNG when packet is lost and / or when low speech activity */
-    if( psDec->lossCnt ) {//|| psDec->vadFlag == NO_VOICE_ACTIVITY ) {
-
-        /* Generate CNG excitation */
-        SKP_Silk_CNG_exc( CNG_sig, psCNG->CNG_exc_buf_Q10, 
-                psCNG->CNG_smth_Gain_Q16, length, &psCNG->rand_seed );
-
-        /* Convert CNG NLSF to filter representation */
-        SKP_Silk_NLSF2A_stable( LPC_buf, psCNG->CNG_smth_NLSF_Q15, psDec->LPC_order );
-
-        Gain_Q26 = ( SKP_int32 )1 << 26; /* 1.0 */
-        
-        /* Generate CNG signal, by synthesis filtering */
-        if( psDec->LPC_order == 16 ) {
-            SKP_Silk_LPC_synthesis_order16( CNG_sig, LPC_buf, 
-                Gain_Q26, psCNG->CNG_synth_state, CNG_sig, length );
-        } else {
-            SKP_Silk_LPC_synthesis_filter( CNG_sig, LPC_buf, 
-                Gain_Q26, psCNG->CNG_synth_state, CNG_sig, length, psDec->LPC_order );
-        }
-        /* Mix with signal */
-        for( i = 0; i < length; i++ ) {
-            tmp_32 = signal[ i ] + CNG_sig[ i ];
-            signal[ i ] = SKP_SAT16( tmp_32 );
-        }
-    } else {
-        SKP_memset( psCNG->CNG_synth_state, 0, psDec->LPC_order *  sizeof( SKP_int32 ) );
-    }
-}
--- a/src/SKP_Silk_HP_variable_cutoff_FIX.c
+++ /dev/null
@@ -1,118 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-#if HIGH_PASS_INPUT
-
-#define SKP_RADIANS_CONSTANT_Q19            1482    // 0.45f * 2.0f * 3.14159265359 / 1000
-#define SKP_LOG2_VARIABLE_HP_MIN_FREQ_Q7    809     // log(80) in Q7
-
-/* High-pass filter with cutoff frequency adaptation based on pitch lag statistics */
-void SKP_Silk_HP_variable_cutoff_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O  Encoder state FIX                           */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl,         /* I/O  Encoder control FIX                         */
-    SKP_int16                       *out,               /* O    high-pass filtered output signal            */
-    const SKP_int16                 *in                 /* I    input signal                                */
-)
-{
-    SKP_int   quality_Q15;
-    SKP_int32 B_Q28[ 3 ], A_Q28[ 2 ];
-    SKP_int32 Fc_Q19, r_Q28, r_Q22;
-    SKP_int32 pitch_freq_Hz_Q16, pitch_freq_log_Q7, delta_freq_Q7;
-
-    /*********************************************/
-    /* Estimate Low End of Pitch Frequency Range */
-    /*********************************************/
-    if( psEnc->sCmn.prev_sigtype == SIG_TYPE_VOICED ) {
-        /* difference, in log domain */
-        pitch_freq_Hz_Q16 = SKP_DIV32_16( SKP_LSHIFT( SKP_MUL( psEnc->sCmn.fs_kHz, 1000 ), 16 ), psEnc->sCmn.prevLag );
-        pitch_freq_log_Q7 = SKP_Silk_lin2log( pitch_freq_Hz_Q16 ) - ( 16 << 7 ); //0x70
-
-        /* adjustment based on quality */
-        quality_Q15 = psEncCtrl->input_quality_bands_Q15[ 0 ];
-        pitch_freq_log_Q7 = SKP_SUB32( pitch_freq_log_Q7, SKP_SMULWB( SKP_SMULWB( SKP_LSHIFT( quality_Q15, 2 ), quality_Q15 ), 
-            pitch_freq_log_Q7 - SKP_LOG2_VARIABLE_HP_MIN_FREQ_Q7 ) );
-        pitch_freq_log_Q7 = SKP_ADD32( pitch_freq_log_Q7, SKP_RSHIFT( 19661 - quality_Q15, 9 ) ); // 19661_Q15 = 0.6_Q0
-
-        //delta_freq = pitch_freq_log - psEnc->variable_HP_smth1;
-        delta_freq_Q7 = pitch_freq_log_Q7 - SKP_RSHIFT( psEnc->variable_HP_smth1_Q15, 8 );
-        if( delta_freq_Q7 < 0 ) {
-            /* less smoothing for decreasing pitch frequency, to track something close to the minimum */
-            delta_freq_Q7 = SKP_MUL( delta_freq_Q7, 3 );
-        }
-
-        /* limit delta, to reduce impact of outliers */
-        delta_freq_Q7 = SKP_LIMIT( delta_freq_Q7, -VARIABLE_HP_MAX_DELTA_FREQ_Q7, VARIABLE_HP_MAX_DELTA_FREQ_Q7 );
-
-        /* update smoother */
-        psEnc->variable_HP_smth1_Q15 = SKP_SMLAWB( psEnc->variable_HP_smth1_Q15, 
-            SKP_MUL( SKP_LSHIFT( psEnc->speech_activity_Q8, 1 ), delta_freq_Q7 ), VARIABLE_HP_SMTH_COEF1_Q16 );
-    }
-    /* second smoother */
-    psEnc->variable_HP_smth2_Q15 = SKP_SMLAWB( psEnc->variable_HP_smth2_Q15, 
-        psEnc->variable_HP_smth1_Q15 - psEnc->variable_HP_smth2_Q15, VARIABLE_HP_SMTH_COEF2_Q16 );
-
-    /* convert from log scale to Hertz */
-    psEncCtrl->pitch_freq_low_Hz = SKP_Silk_log2lin( SKP_RSHIFT( psEnc->variable_HP_smth2_Q15, 8 ) ); //pow( 2.0, psEnc->variable_HP_smth2 );
-
-    /* limit frequency range */
-    psEncCtrl->pitch_freq_low_Hz = SKP_LIMIT( psEncCtrl->pitch_freq_low_Hz, VARIABLE_HP_MIN_FREQ_Q0, VARIABLE_HP_MAX_FREQ_Q0 );
-
-    /********************************/
-    /* Compute Filter Coefficients  */
-    /********************************/
-    /* compute cut-off frequency, in radians */
-    //Fc_num   = (SKP_float)( 0.45f * 2.0f * 3.14159265359 * psEncCtrl->pitch_freq_low_Hz );
-    //Fc_denom = (SKP_float)( 1e3f * psEnc->sCmn.fs_kHz );
-    SKP_assert( psEncCtrl->pitch_freq_low_Hz <= SKP_int32_MAX / SKP_RADIANS_CONSTANT_Q19 );
-    Fc_Q19 = SKP_DIV32_16( SKP_SMULBB( SKP_RADIANS_CONSTANT_Q19, psEncCtrl->pitch_freq_low_Hz ), psEnc->sCmn.fs_kHz ); // range: 3704 - 27787, 11-15 bits
-    SKP_assert( Fc_Q19 >=  3704 );
-    SKP_assert( Fc_Q19 <= 27787 );
-
-    r_Q28 = ( 1 << 28 ) - SKP_MUL( 471, Fc_Q19 ); // 471_Q9 = 0.92_Q0, range: 255347779 to 266690872, 27-28 bits
-    SKP_assert( r_Q28 >= 255347779 );
-    SKP_assert( r_Q28 <= 266690872 );
-
-    /* b = r * [ 1; -2; 1 ]; */
-    /* a = [ 1; -2 * r * ( 1 - 0.5 * Fc^2 ); r^2 ]; */
-    B_Q28[ 0 ] = r_Q28;
-    B_Q28[ 1 ] = SKP_LSHIFT( -r_Q28, 1 );
-    B_Q28[ 2 ] = r_Q28;
-    
-    // -r * ( 2 - Fc * Fc );
-    r_Q22  = SKP_RSHIFT( r_Q28, 6 );
-    A_Q28[ 0 ] = SKP_SMULWW( r_Q22, SKP_SMULWW( Fc_Q19, Fc_Q19 ) - ( 2 << 22 ) );
-    A_Q28[ 1 ] = SKP_SMULWW( r_Q22, r_Q22 );
-
-    /********************************/
-    /* High-Pass Filter             */
-    /********************************/
-    SKP_Silk_biquad_alt( in, B_Q28, A_Q28, psEnc->sCmn.In_HP_State, out, psEnc->sCmn.frame_length );
-}
-
-#endif // HIGH_PASS_INPUT
--- a/src/SKP_Silk_Inlines.h
+++ /dev/null
@@ -1,280 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*! \file SKP_Silk_Inlines.h
- *  \brief SigProcFix_Inlines.h defines inline signal processing functions.
- */
-
-#ifndef _SKP_SILK_FIX_INLINES_H_
-#define _SKP_SILK_FIX_INLINES_H_
-
-#ifdef  __cplusplus
-extern "C"
-{
-#endif
-
-/* count leading zeros of SKP_int64 */
-SKP_INLINE SKP_int32 SKP_Silk_CLZ64(SKP_int64 in)
-{
-    SKP_int32 in_upper;
-
-    in_upper = (SKP_int32)SKP_RSHIFT64(in, 32);
-    if (in_upper == 0) {
-        /* Search in the lower 32 bits */
-        return 32 + SKP_Silk_CLZ32( (SKP_int32) in );
-    } else {
-        /* Search in the upper 32 bits */
-        return SKP_Silk_CLZ32( in_upper );
-    }
-}
-
-/* get number of leading zeros and fractional part (the bits right after the leading one */
-SKP_INLINE void SKP_Silk_CLZ_FRAC(SKP_int32 in,            /* I: input */
-                                    SKP_int32 *lz,           /* O: number of leading zeros */
-                                    SKP_int32 *frac_Q7)      /* O: the 7 bits right after the leading one */
-{
-    SKP_int32 leadingZeros;
-
-    leadingZeros = SKP_Silk_CLZ32(in);
-    *lz = leadingZeros;
-    if( leadingZeros < 24 ) { 
-        *frac_Q7 = SKP_RSHIFT(in, 24 - leadingZeros) & 0x7F;
-    } else {
-        *frac_Q7 = SKP_LSHIFT(in, leadingZeros - 24) & 0x7F;
-    }
-}
-
-/* Approximation of square root                                          */
-/* Accuracy: < +/- 10% for output values > 15                            */
-/*             < +/- 2.5% for output values > 120                        */
-SKP_INLINE SKP_int32 SKP_Silk_SQRT_APPROX(SKP_int32 x)
-{
-    SKP_int32 y, lz, frac_Q7;
-
-    if( x <= 0 ) {
-        return 0;
-    }
-
-    SKP_Silk_CLZ_FRAC(x, &lz, &frac_Q7);
-
-    if( lz & 1 ) {
-        y = 32768;
-    } else {
-        y = 46214;        /* 46214 = sqrt(2) * 32768 */
-    }
-
-    /* get scaling right */
-    y >>= SKP_RSHIFT(lz, 1);
-
-    /* increment using fractional part of input */
-    y = SKP_SMLAWB(y, y, SKP_SMULBB(213, frac_Q7));
-
-    return y;
-}
-
-/* returns the number of left shifts before overflow for a 16 bit number (ITU definition with norm(0)=0) */
-SKP_INLINE SKP_int32 SKP_Silk_norm16(SKP_int16 a) {
-
-  SKP_int32 a32;
-
-  /* if ((a == 0) || (a == SKP_int16_MIN)) return(0); */
-  if ((a << 1) == 0) return(0);
-
-  a32 = a;
-  /* if (a32 < 0) a32 = -a32 - 1; */
-  a32 ^= SKP_RSHIFT(a32, 31);
-
-  return SKP_Silk_CLZ32(a32) - 17;
-}
-
-/* returns the number of left shifts before overflow for a 32 bit number (ITU definition with norm(0)=0) */
-SKP_INLINE SKP_int32 SKP_Silk_norm32(SKP_int32 a) {
-  
-  /* if ((a == 0) || (a == SKP_int32_MIN)) return(0); */
-  if ((a << 1) == 0) return(0);
-
-  /* if (a < 0) a = -a - 1; */
-  a ^= SKP_RSHIFT(a, 31);
-
-  return SKP_Silk_CLZ32(a) - 1;
-}
-
-/* Divide two int32 values and return result as int32 in a given Q-domain */
-SKP_INLINE SKP_int32 SKP_DIV32_varQ(    /* O    returns a good approximation of "(a32 << Qres) / b32" */
-    const SKP_int32        a32,         /* I    numerator (Q0)                  */
-    const SKP_int32        b32,         /* I    denominator (Q0)                */
-    const SKP_int        Qres           /* I    Q-domain of result (>= 0)       */
-)
-{
-    SKP_int   a_headrm, b_headrm, lshift;
-    SKP_int32 b32_inv, a32_nrm, b32_nrm, result;
-
-    SKP_assert( b32 != 0 );
-    SKP_assert( Qres >= 0 );
-
-    /* Compute number of bits head room and normalize inputs */
-    a_headrm = SKP_Silk_CLZ32( SKP_abs(a32) ) - 1;
-    a32_nrm = SKP_LSHIFT(a32, a_headrm);                                    /* Q: a_headrm                    */
-    b_headrm = SKP_Silk_CLZ32( SKP_abs(b32) ) - 1;
-    b32_nrm = SKP_LSHIFT(b32, b_headrm);                                    /* Q: b_headrm                    */
-
-    /* Inverse of b32, with 14 bits of precision */
-    b32_inv = SKP_DIV32_16( SKP_int32_MAX >> 2, SKP_RSHIFT(b32_nrm, 16) );  /* Q: 29 + 16 - b_headrm        */
-
-    /* First approximation */
-    result = SKP_SMULWB(a32_nrm, b32_inv);                                  /* Q: 29 + a_headrm - b_headrm    */
-
-    /* Compute residual by subtracting product of denominator and first approximation */
-    a32_nrm -= SKP_LSHIFT_ovflw( SKP_SMMUL(b32_nrm, result), 3 );           /* Q: a_headrm                    */
-
-    /* Refinement */
-    result = SKP_SMLAWB(result, a32_nrm, b32_inv);                          /* Q: 29 + a_headrm - b_headrm    */
-
-    /* Convert to Qres domain */
-    lshift = 29 + a_headrm - b_headrm - Qres;
-    if( lshift <= 0 ) {
-        return SKP_LSHIFT_SAT32(result, -lshift);
-    } else {
-        if( lshift < 32){
-            return SKP_RSHIFT(result, lshift);
-        } else {
-            /* Avoid undefined result */
-            return 0;
-        }
-    }
-}
-
-/* Invert int32 value and return result as int32 in a given Q-domain */
-SKP_INLINE SKP_int32 SKP_INVERSE32_varQ(    /* O    returns a good approximation of "(1 << Qres) / b32" */
-    const SKP_int32        b32,             /* I    denominator (Q0)                */
-    const SKP_int        Qres               /* I    Q-domain of result (> 0)        */
-)
-{
-    SKP_int   b_headrm, lshift;
-    SKP_int32 b32_inv, b32_nrm, err_Q32, result;
-
-    SKP_assert( b32 != 0 );
-    SKP_assert( Qres > 0 );
-
-    /* Compute number of bits head room and normalize input */
-    b_headrm = SKP_Silk_CLZ32( SKP_abs(b32) ) - 1;
-    b32_nrm = SKP_LSHIFT(b32, b_headrm);                                    /* Q: b_headrm                */
-
-    /* Inverse of b32, with 14 bits of precision */
-    b32_inv = SKP_DIV32_16( SKP_int32_MAX >> 2, SKP_RSHIFT(b32_nrm, 16) );  /* Q: 29 + 16 - b_headrm    */
-
-    /* First approximation */
-    result = SKP_LSHIFT(b32_inv, 16);                                       /* Q: 61 - b_headrm            */
-
-    /* Compute residual by subtracting product of denominator and first approximation from one */
-    err_Q32 = SKP_LSHIFT_ovflw( -SKP_SMULWB(b32_nrm, b32_inv), 3 );         /* Q32                        */
-
-    /* Refinement */
-    result = SKP_SMLAWW(result, err_Q32, b32_inv);                          /* Q: 61 - b_headrm            */
-
-    /* Convert to Qres domain */
-    lshift = 61 - b_headrm - Qres;
-    if( lshift <= 0 ) {
-        return SKP_LSHIFT_SAT32(result, -lshift);
-    } else {
-        if( lshift < 32){
-            return SKP_RSHIFT(result, lshift);
-        }else{
-            /* Avoid undefined result */
-            return 0;
-        }
-    }
-}
-
-#define SKP_SIN_APPROX_CONST0       (1073735400)
-#define SKP_SIN_APPROX_CONST1        (-82778932)
-#define SKP_SIN_APPROX_CONST2          (1059577)
-#define SKP_SIN_APPROX_CONST3            (-5013)
-
-/* Sine approximation; an input of 65536 corresponds to 2 * pi */
-/* Uses polynomial expansion of the input to the power 0, 2, 4 and 6 */
-/* The relative error is below 1e-5 */
-SKP_INLINE SKP_int32 SKP_Silk_SIN_APPROX_Q24(        /* O    returns approximately 2^24 * sin(x * 2 * pi / 65536) */
-    SKP_int32        x
-)
-{
-    SKP_int y_Q30;
-
-    /* Keep only bottom 16 bits (the function repeats itself with period 65536) */
-    x &= 65535;
-
-    /* Split range in four quadrants */
-    if( x <= 32768 ) {
-        if( x < 16384 ) {
-            /* Return cos(pi/2 - x) */
-            x = 16384 - x;
-        } else {
-            /* Return cos(x - pi/2) */
-            x -= 16384;
-        }
-        if( x < 1100 ) {
-            /* Special case: high accuracy */
-            return SKP_SMLAWB( 1 << 24, SKP_MUL( x, x ), -5053 );
-        }
-        x = SKP_SMULWB( SKP_LSHIFT( x, 8 ), x );        /* contains x^2 in Q20 */
-        y_Q30 = SKP_SMLAWB( SKP_SIN_APPROX_CONST2, x, SKP_SIN_APPROX_CONST3 );
-        y_Q30 = SKP_SMLAWW( SKP_SIN_APPROX_CONST1, x, y_Q30 );
-        y_Q30 = SKP_SMLAWW( SKP_SIN_APPROX_CONST0 + 66, x, y_Q30 );
-    } else {
-        if( x < 49152 ) {
-            /* Return -cos(3*pi/2 - x) */
-            x = 49152 - x;
-        } else {
-            /* Return -cos(x - 3*pi/2) */
-            x -= 49152;
-        }
-        if( x < 1100 ) {
-            /* Special case: high accuracy */
-            return SKP_SMLAWB( -1 << 24, SKP_MUL( x, x ), 5053 );
-        }
-        x = SKP_SMULWB( SKP_LSHIFT( x, 8 ), x );        /* contains x^2 in Q20 */
-        y_Q30 = SKP_SMLAWB( -SKP_SIN_APPROX_CONST2, x, -SKP_SIN_APPROX_CONST3 );
-        y_Q30 = SKP_SMLAWW( -SKP_SIN_APPROX_CONST1, x, y_Q30 );
-        y_Q30 = SKP_SMLAWW( -SKP_SIN_APPROX_CONST0, x, y_Q30 );
-    }
-    return SKP_RSHIFT_ROUND( y_Q30, 6 );
-}
-
-/* Cosine approximation; an input of 65536 corresponds to 2 * pi */
-/* The relative error is below 1e-5 */
-SKP_INLINE SKP_int32 SKP_Silk_COS_APPROX_Q24(        /* O    returns approximately 2^24 * cos(x * 2 * pi / 65536) */
-    SKP_int32        x
-)
-{
-    return SKP_Silk_SIN_APPROX_Q24( x + 16384 );
-}
-
-#ifdef  __cplusplus
-}
-#endif
-
-#endif //_SKP_SILK_FIX_INLINES_H_
--- a/src/SKP_Silk_LBRR_reset.c
+++ /dev/null
@@ -1,40 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-/* Resets LBRR buffer, used if packet size changes */
-void SKP_Silk_LBRR_reset( 
-    SKP_Silk_encoder_state      *psEncC             /* I/O  state                                       */
-)
-{
-    SKP_int i;
-
-    for( i = 0; i < MAX_LBRR_DELAY; i++ ) {
-        psEncC->LBRR_buffer[ i ].usage = SKP_SILK_NO_LBRR;
-    }
-}
--- a/src/SKP_Silk_LPC_inv_pred_gain.c
+++ /dev/null
@@ -1,189 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_LPC_inverse_pred_gain.c                                   *
- *                                                                      *
- * Compute inverse of LPC prediction gain, and                          *
- * test if LPC coefficients are stable (all poles within unit circle)   *
- *                                                                      *
- * Copyright 2008 (c), Skype Limited                                           *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-#define QA          16
-#define A_LIMIT     65520
-
-/* Compute inverse of LPC prediction gain, and                          */
-/* test if LPC coefficients are stable (all poles within unit circle)   */
-SKP_int SKP_Silk_LPC_inverse_pred_gain(       /* O:   Returns 1 if unstable, otherwise 0          */
-    SKP_int32           *invGain_Q30,           /* O:   Inverse prediction gain, Q30 energy domain  */
-    const SKP_int16     *A_Q12,                 /* I:   Prediction coefficients, Q12 [order]        */
-    const SKP_int       order                   /* I:   Prediction order                            */
-)
-{
-    SKP_int   k, n, headrm;
-    SKP_int32 rc_Q31, rc_mult1_Q30, rc_mult2_Q16;
-    SKP_int32 Atmp_QA[ 2 ][ SigProc_MAX_ORDER_LPC ], tmp_QA;
-    SKP_int32 *Aold_QA, *Anew_QA;
-
-    Anew_QA = Atmp_QA[ order & 1 ];
-    /* Increase Q domain of the AR coefficients */
-    for( k = 0; k < order; k++ ) {
-        Anew_QA[ k ] = SKP_LSHIFT( (SKP_int32)A_Q12[ k ], QA - 12 );
-    }
-
-    *invGain_Q30 = ( 1 << 30 );
-    for( k = order - 1; k > 0; k-- ) {
-        /* Check for stability */
-        if( ( Anew_QA[ k ] > A_LIMIT ) || ( Anew_QA[ k ] < -A_LIMIT ) ) {
-            return 1;
-        }
-
-        /* Set RC equal to negated AR coef */
-        rc_Q31 = -SKP_LSHIFT( Anew_QA[ k ], 31 - QA );
-        
-        /* rc_mult1_Q30 range: [ 1 : 2^30-1 ] */
-        rc_mult1_Q30 = ( SKP_int32_MAX >> 1 ) - SKP_SMMUL( rc_Q31, rc_Q31 );
-        SKP_assert( rc_mult1_Q30 > ( 1 << 15 ) );                   /* reduce A_LIMIT if fails */
-        SKP_assert( rc_mult1_Q30 < ( 1 << 30 ) );
-
-        /* rc_mult2_Q16 range: [ 2^16 : SKP_int32_MAX ] */
-        rc_mult2_Q16 = SKP_INVERSE32_varQ( rc_mult1_Q30, 46 );      /* 16 = 46 - 30 */
-
-        /* Update inverse gain */
-        /* invGain_Q30 range: [ 0 : 2^30 ] */
-        *invGain_Q30 = SKP_LSHIFT( SKP_SMMUL( *invGain_Q30, rc_mult1_Q30 ), 2 );
-        SKP_assert( *invGain_Q30 >= 0           );
-        SKP_assert( *invGain_Q30 <= ( 1 << 30 ) );
-
-        /* Swap pointers */
-        Aold_QA = Anew_QA;
-        Anew_QA = Atmp_QA[ k & 1 ];
-        
-        /* Update AR coefficient */
-        headrm = SKP_Silk_CLZ32( rc_mult2_Q16 ) - 1;
-        rc_mult2_Q16 = SKP_LSHIFT( rc_mult2_Q16, headrm );          /* Q: 16 + headrm */
-        for( n = 0; n < k; n++ ) {
-            tmp_QA = Aold_QA[ n ] - SKP_LSHIFT( SKP_SMMUL( Aold_QA[ k - n - 1 ], rc_Q31 ), 1 );
-            Anew_QA[ n ] = SKP_LSHIFT( SKP_SMMUL( tmp_QA, rc_mult2_Q16 ), 16 - headrm );
-        }
-    }
-
-    /* Check for stability */
-    if( ( Anew_QA[ 0 ] > A_LIMIT ) || ( Anew_QA[ 0 ] < -A_LIMIT ) ) {
-        return 1;
-    }
-
-    /* Set RC equal to negated AR coef */
-    rc_Q31 = -SKP_LSHIFT( Anew_QA[ 0 ], 31 - QA );
-
-    /* Range: [ 1 : 2^30 ] */
-    rc_mult1_Q30 = ( SKP_int32_MAX >> 1 ) - SKP_SMMUL( rc_Q31, rc_Q31 );
-
-    /* Update inverse gain */
-    /* Range: [ 0 : 2^30 ] */
-    *invGain_Q30 = SKP_LSHIFT( SKP_SMMUL( *invGain_Q30, rc_mult1_Q30 ), 2 );
-    SKP_assert( *invGain_Q30 >= 0     );
-    SKP_assert( *invGain_Q30 <= 1<<30 );
-
-    return 0;
-}
-
-/* For input in Q13 domain */
-SKP_int SKP_Silk_LPC_inverse_pred_gain_Q13(   /* O:   Returns 1 if unstable, otherwise 0          */
-    SKP_int32           *invGain_Q30,           /* O:   Inverse prediction gain, Q30 energy domain  */
-    const SKP_int16     *A_Q13,                 /* I:   Prediction coefficients, Q13 [order]        */
-    const SKP_int       order                   /* I:   Prediction order                            */
-)
-{
-    SKP_int   k, n, headrm;
-    SKP_int32 rc_Q31, rc_mult1_Q30, rc_mult2_Q16;
-    SKP_int32 Atmp_QA[ 2 ][ SigProc_MAX_ORDER_LPC ], tmp_QA;
-    SKP_int32 *Aold_QA, *Anew_QA;
-
-    Anew_QA = Atmp_QA[ order & 1 ];
-    /* Increase Q domain of the AR coefficients */
-    for( k = 0; k < order; k++ ) {
-        Anew_QA[ k ] = SKP_LSHIFT( (SKP_int32)A_Q13[ k ], QA - 13 );
-    }
-
-    *invGain_Q30 = ( 1 << 30 );
-    for( k = order - 1; k > 0; k-- ) {
-        /* Check for stability */
-        if( ( Anew_QA[ k ] > A_LIMIT ) || ( Anew_QA[ k ] < -A_LIMIT ) ) {
-            return 1;
-        }
-
-        /* Set RC equal to negated AR coef */
-        rc_Q31 = -SKP_LSHIFT( Anew_QA[ k ], 31 - QA );
-        
-        /* rc_mult1_Q30 range: [ 1 : 2^30-1 ] */
-        rc_mult1_Q30 = ( SKP_int32_MAX >> 1 ) - SKP_SMMUL( rc_Q31, rc_Q31 );
-        SKP_assert( rc_mult1_Q30 > ( 1 << 15 ) );                   /* reduce A_LIMIT if fails */
-        SKP_assert( rc_mult1_Q30 < ( 1 << 30 ) );
-
-        /* rc_mult2_Q16 range: [ 2^16 : SKP_int32_MAX ] */
-        rc_mult2_Q16 = SKP_INVERSE32_varQ( rc_mult1_Q30, 46 );      /* 16 = 46 - 30 */
-
-        /* Update inverse gain */
-        /* invGain_Q30 range: [ 0 : 2^30 ] */
-        *invGain_Q30 = SKP_LSHIFT( SKP_SMMUL( *invGain_Q30, rc_mult1_Q30 ), 2 );
-        SKP_assert( *invGain_Q30 >= 0     );
-        SKP_assert( *invGain_Q30 <= 1<<30 );
-
-        /* Swap pointers */
-        Aold_QA = Anew_QA;
-        Anew_QA = Atmp_QA[ k & 1 ];
-        
-        /* Update AR coefficient */
-        headrm = SKP_Silk_CLZ32( rc_mult2_Q16 ) - 1;
-        rc_mult2_Q16 = SKP_LSHIFT( rc_mult2_Q16, headrm );          /* Q: 16 + headrm */
-        for( n = 0; n < k; n++ ) {
-            tmp_QA = Aold_QA[ n ] - SKP_LSHIFT( SKP_SMMUL( Aold_QA[ k - n - 1 ], rc_Q31 ), 1 );
-            Anew_QA[ n ] = SKP_LSHIFT( SKP_SMMUL( tmp_QA, rc_mult2_Q16 ), 16 - headrm );
-        }
-    }
-
-    /* Check for stability */
-    if( ( Anew_QA[ 0 ] > A_LIMIT ) || ( Anew_QA[ 0 ] < -A_LIMIT ) ) {
-        return 1;
-    }
-
-    /* Set RC equal to negated AR coef */
-    rc_Q31 = -SKP_LSHIFT( Anew_QA[ 0 ], 31 - QA );
-
-    /* Range: [ 1 : 2^30 ] */
-    rc_mult1_Q30 = ( SKP_int32_MAX >> 1 ) - SKP_SMMUL( rc_Q31, rc_Q31 );
-
-    /* Update inverse gain */
-    /* Range: [ 0 : 2^30 ] */
-    *invGain_Q30 = SKP_LSHIFT( SKP_SMMUL( *invGain_Q30, rc_mult1_Q30 ), 2 );
-    SKP_assert( *invGain_Q30 >= 0     );
-    SKP_assert( *invGain_Q30 <= 1<<30 );
-
-    return 0;
-}
--- a/src/SKP_Silk_LPC_stabilize.c
+++ /dev/null
@@ -1,132 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_typedef.h"
-#include "SKP_Silk_SigProc_FIX.h"
-
-#define LPC_STABILIZE_LPC_MAX_ABS_VALUE_Q16     ( ( (SKP_int32)SKP_int16_MAX ) << 4 )
-
-/* LPC stabilizer, for a single input data vector */
-void SKP_Silk_LPC_stabilize(
-    SKP_int16       *a_Q12,         /* O    stabilized LPC vector [L]                       */
-    SKP_int32       *a_Q16,         /* I    LPC vector [L]                                  */
-    const SKP_int32  bwe_Q16,       /* I    Bandwidth expansion factor                      */
-    const SKP_int    L              /* I    Number of LPC parameters in the input vector    */
-)
-{
-    SKP_int32   maxabs, absval, sc_Q16;
-    SKP_int     i, idx = 0;
-    SKP_int32   invGain_Q30;
-
-    SKP_Silk_bwexpander_32( a_Q16, L, bwe_Q16 );
-
-    /***************************/
-    /* Limit range of the LPCs */
-    /***************************/
-    /* Limit the maximum absolute value of the prediction coefficients */
-    while( SKP_TRUE ) {
-        /* Find maximum absolute value and its index */
-        maxabs = SKP_int32_MIN;
-        for( i = 0; i < L; i++ ) {
-            absval = SKP_abs( a_Q16[ i ] );
-            if( absval > maxabs ) {
-                maxabs = absval;
-                idx    = i;
-            }
-        }
-    
-        if( maxabs >= LPC_STABILIZE_LPC_MAX_ABS_VALUE_Q16 ) {
-            /* Reduce magnitude of prediction coefficients */
-            sc_Q16 = SKP_DIV32( SKP_int32_MAX, SKP_RSHIFT( maxabs, 4 ) );
-            sc_Q16 = 65536 - sc_Q16;
-            sc_Q16 = SKP_DIV32( sc_Q16, idx + 1 );
-            sc_Q16 = 65536 - sc_Q16;
-            sc_Q16 = SKP_LSHIFT( SKP_SMULWB( sc_Q16, 32604 ), 1 ); // 0.995 in Q16
-            SKP_Silk_bwexpander_32( a_Q16, L, sc_Q16 );
-        } else {
-            break;
-        }
-    }
-
-    /* Convert to 16 bit Q12 */
-    for( i = 0; i < L; i++ ) {
-        a_Q12[ i ] = (SKP_int16)SKP_RSHIFT_ROUND( a_Q16[ i ], 4 );
-    }
-
-    /**********************/
-    /* Ensure stable LPCs */
-    /**********************/
-    while( SKP_Silk_LPC_inverse_pred_gain( &invGain_Q30, a_Q12, L ) == 1 ) {
-        SKP_Silk_bwexpander( a_Q12, L, 65339 ); // 0.997 in Q16
-    }
-}
-
-void SKP_Silk_LPC_fit(
-    SKP_int16       *a_QQ,          /* O    Stabilized LPC vector, Q(24-rshift) [L]         */
-    SKP_int32       *a_Q24,         /* I    LPC vector [L]                                  */
-    const SKP_int    QQ,            /* I    Q domain of output LPC vector                   */
-    const SKP_int    L              /* I    Number of LPC parameters in the input vector    */
-)
-{
-    SKP_int     i, rshift, idx = 0;
-    SKP_int32   maxabs, absval, sc_Q16;
-
-    rshift = 24 - QQ;
-
-    /***************************/
-    /* Limit range of the LPCs */
-    /***************************/
-    /* Limit the maximum absolute value of the prediction coefficients */
-    while( SKP_TRUE ) {
-        /* Find maximum absolute value and its index */
-        maxabs = SKP_int32_MIN;
-        for( i = 0; i < L; i++ ) {
-            absval = SKP_abs( a_Q24[ i ] );
-            if( absval > maxabs ) {
-                maxabs = absval;
-                idx    = i;
-            }
-        }
-    
-        maxabs = SKP_RSHIFT( maxabs, rshift );
-        if( maxabs >= SKP_int16_MAX ) {
-            /* Reduce magnitude of prediction coefficients */
-            sc_Q16 = 65470 - SKP_DIV32( SKP_MUL( 65470 >> 2, maxabs - SKP_int16_MAX ), 
-                                        SKP_RSHIFT32( SKP_MUL( maxabs, idx + 1), 2 ) );
-            SKP_Silk_bwexpander_32( a_Q24, L, sc_Q16 );
-        } else {
-            break;
-        }
-    }
-
-    /* Convert to 16 bit Q(24-rshift) */
-    SKP_assert( rshift > 0  );
-    SKP_assert( rshift < 31 );
-    for( i = 0; i < L; i++ ) {
-        a_QQ[ i ] = (SKP_int16)SKP_RSHIFT_ROUND( a_Q24[ i ], rshift );
-    }
-}
--- a/src/SKP_Silk_LPC_synthesis_filter.c
+++ /dev/null
@@ -1,98 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_LPC_synthesis_filter.c                                    *
- * Coefficients are in Q12                                              *
- *                                                                      *
- * even order AR filter                                                 *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* even order AR filter */
-void SKP_Silk_LPC_synthesis_filter(
-    const SKP_int16 *in,        /* I:   excitation signal */
-    const SKP_int16 *A_Q12,     /* I:   AR coefficients [Order], between -8_Q0 and 8_Q0 */
-    const SKP_int32 Gain_Q26,   /* I:   gain */
-    SKP_int32 *S,               /* I/O: state vector [Order] */
-    SKP_int16 *out,             /* O:   output signal */
-    const SKP_int32 len,        /* I:   signal length */
-    const SKP_int Order         /* I:   filter order, must be even */
-)
-{
-    SKP_int   k, j, idx, Order_half = SKP_RSHIFT( Order, 1 );
-    SKP_int32 SA, SB, Atmp, A_align_Q12[SigProc_MAX_ORDER_LPC >> 1], out32_Q10, out32;
-
-    /* Order must be even */
-    SKP_assert( 2*Order_half == Order );
-
-    /* combine two A_Q12 values and ensure 32-bit alignment */
-    for( k = 0; k < Order_half; k++ ) {
-        idx = SKP_SMULBB( 2, k );
-        A_align_Q12[k] = (((SKP_int32)A_Q12[idx]) & 0x0000ffff) | SKP_LSHIFT( (SKP_int32)A_Q12[idx+1], 16 );
-    }
-
-    /* S[] values are in Q14 */
-    for( k = 0; k < len; k++ ) {
-        SA = S[Order-1];
-        out32_Q10 = 0;
-        for( j=0;j<(Order_half-1); j++ ) {
-            idx = SKP_SMULBB( 2, j ) + 1;
-            /* multiply-add two prediction coefficients for each loop */
-            /* NOTE: the code below loads two int16 values in an int32, and multiplies each using the   */
-            /* SMLAWB and SMLAWT instructions. On a big-endian CPU the two int16 variables would be     */
-            /* loaded in reverse order and the code will give the wrong result. In that case swapping   */
-            /* the SMLAWB and SMLAWT instructions should solve the problem.                             */
-            Atmp = A_align_Q12[j];
-            SB = S[Order - 1 - idx];
-            S[Order - 1 - idx] = SA;
-            out32_Q10 = SKP_SMLAWB( out32_Q10, SA, Atmp );
-            out32_Q10 = SKP_SMLAWT( out32_Q10, SB, Atmp );
-            SA = S[Order - 2 - idx];
-            S[Order - 2 - idx] = SB;
-        }
-
-        /* unrolled loop: epilog */
-        Atmp = A_align_Q12[Order_half-1];
-        SB = S[0];
-        S[0] = SA;
-        out32_Q10 = SKP_SMLAWB( out32_Q10, SA, Atmp );
-        out32_Q10 = SKP_SMLAWT( out32_Q10, SB, Atmp );
-
-        /* apply gain to excitation signal and add to prediction */
-        out32_Q10 = SKP_ADD_SAT32( out32_Q10, SKP_SMULWB( Gain_Q26, in[k] ) );
-
-        /* scale to Q0 */
-        out32 = SKP_RSHIFT_ROUND( out32_Q10, 10 );
-
-        /* saturate output */
-        out[k] = (SKP_int16)SKP_SAT16( out32 );
-
-        /* move result into delay line */
-        S[Order - 1] = SKP_LSHIFT_SAT32( out32_Q10, 4 );
-    }
-}
--- a/src/SKP_Silk_LPC_synthesis_order16.c
+++ /dev/null
@@ -1,141 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_LPC_synthesis_order16.c                                   *
- * Coefficients are in Q12                                              *
- *                                                                      *
- * 16th order AR filter                                                 *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* 16th order AR filter */
-void SKP_Silk_LPC_synthesis_order16(const SKP_int16 *in,          /* I:   excitation signal */
-                                      const SKP_int16 *A_Q12,       /* I:   AR coefficients [16], between -8_Q0 and 8_Q0 */
-                                      const SKP_int32 Gain_Q26,     /* I:   gain */
-                                      SKP_int32 *S,                 /* I/O: state vector [16] */
-                                      SKP_int16 *out,               /* O:   output signal */
-                                      const SKP_int32 len           /* I:   signal length, must be multiple of 16 */
-)
-{
-    SKP_int   k;
-    SKP_int32 SA, SB, Atmp, A_align_Q12[8], out32_Q10, out32;
-
-    /* combine two A_Q12 values and ensure 32-bit alignment */
-    for( k = 0; k < 8; k++ ) {
-        A_align_Q12[k] = (((SKP_int32)A_Q12[ 2*k ]) & 0x0000ffff) | SKP_LSHIFT( (SKP_int32)A_Q12[ 2*k + 1 ], 16 );
-    }
-
-    /* S[] values are in Q14 */
-    /* NOTE: the code below loads two int16 values in an int32, and multiplies each using the   */
-    /* SMLAWB and SMLAWT instructions. On a big-endian CPU the two int16 variables would be     */
-    /* loaded in reverse order and the code will give the wrong result. In that case swapping   */
-    /* the SMLAWB and SMLAWT instructions should solve the problem.                             */
-    for( k = 0; k < len; k++ ) {
-        /* unrolled loop: prolog */
-        /* multiply-add two prediction coefficients per iteration */
-        SA = S[15];
-        Atmp = A_align_Q12[0];
-        SB = S[14];
-        S[14] = SA;
-        out32_Q10 = SKP_SMULWB(                  SA, Atmp );
-        out32_Q10 = SKP_SMLAWT_ovflw( out32_Q10, SB, Atmp );
-        SA = S[13];
-        S[13] = SB;
-
-        /* unrolled loop: main loop */
-        Atmp = A_align_Q12[1];
-        SB = S[12];
-        S[12] = SA;
-        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, Atmp );
-        out32_Q10 = SKP_SMLAWT_ovflw( out32_Q10, SB, Atmp );
-        SA = S[11];
-        S[11] = SB;
-
-        Atmp = A_align_Q12[2];
-        SB = S[10];
-        S[10] = SA;
-        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, Atmp );
-        out32_Q10 = SKP_SMLAWT_ovflw( out32_Q10, SB, Atmp );
-        SA = S[9];
-        S[9] = SB;
-
-        Atmp = A_align_Q12[3];
-        SB = S[8];
-        S[8] = SA;
-        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, Atmp );
-        out32_Q10 = SKP_SMLAWT_ovflw( out32_Q10, SB, Atmp );
-        SA = S[7];
-        S[7] = SB;
-
-        Atmp = A_align_Q12[4];
-        SB = S[6];
-        S[6] = SA;
-        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, Atmp );
-        out32_Q10 = SKP_SMLAWT_ovflw( out32_Q10, SB, Atmp );
-        SA = S[5];
-        S[5] = SB;
-
-        Atmp = A_align_Q12[5];
-        SB = S[4];
-        S[4] = SA;
-        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, Atmp );
-        out32_Q10 = SKP_SMLAWT_ovflw( out32_Q10, SB, Atmp );
-        SA = S[3];
-        S[3] = SB;
-
-        Atmp = A_align_Q12[6];
-        SB = S[2];
-        S[2] = SA;
-        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, Atmp );
-        out32_Q10 = SKP_SMLAWT_ovflw( out32_Q10, SB, Atmp );
-        SA = S[1];
-        S[1] = SB;
-
-        /* unrolled loop: epilog */
-        Atmp = A_align_Q12[7];
-        SB = S[0];
-        S[0] = SA;
-        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, Atmp );
-        out32_Q10 = SKP_SMLAWT_ovflw( out32_Q10, SB, Atmp );
-
-        /* unrolled loop: end */
-        /* apply gain to excitation signal and add to prediction */
-        out32_Q10 = SKP_ADD_SAT32( out32_Q10, SKP_SMULWB( Gain_Q26, in[k] ) );
-
-        /* scale to Q0 */
-        out32 = SKP_RSHIFT_ROUND( out32_Q10, 10 );
-
-        /* saturate output */
-        out[k] = (SKP_int16)SKP_SAT16( out32 );
-
-        /* move result into delay line */
-        S[15] = SKP_LSHIFT_SAT32( out32_Q10, 4 );
-    }
-}
-
-
--- a/src/SKP_Silk_LP_variable_cutoff.c
+++ /dev/null
@@ -1,191 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/* 
-
-    Elliptic/Cauer filters designed with 0.1 dB passband ripple, 
-        80 dB minimum stopband attenuation, and
-        [0.95 : 0.15 : 0.35] normalized cut off frequencies.
-
-*/
-#include "SKP_Silk_main.h"
-
-#if SWITCH_TRANSITION_FILTERING
-
-/* Helper function, that interpolates the filter taps */
-SKP_INLINE void SKP_Silk_LP_interpolate_filter_taps( 
-    SKP_int32           B_Q28[ TRANSITION_NB ], 
-    SKP_int32           A_Q28[ TRANSITION_NA ],
-    const SKP_int       ind,
-    const SKP_int32     fac_Q16
-)
-{
-    SKP_int nb, na;
-
-    if( ind < TRANSITION_INT_NUM - 1 ) {
-        if( fac_Q16 > 0 ) {
-            if( fac_Q16 == SKP_SAT16( fac_Q16 ) ) { /* fac_Q16 is in range of a 16-bit int */
-                /* Piece-wise linear interpolation of B and A */
-                for( nb = 0; nb < TRANSITION_NB; nb++ ) {
-                    B_Q28[ nb ] = SKP_SMLAWB(
-                        SKP_Silk_Transition_LP_B_Q28[ ind     ][ nb ],
-                        SKP_Silk_Transition_LP_B_Q28[ ind + 1 ][ nb ] -
-                        SKP_Silk_Transition_LP_B_Q28[ ind     ][ nb ],
-                        fac_Q16 );
-                }
-                for( na = 0; na < TRANSITION_NA; na++ ) {
-                    A_Q28[ na ] = SKP_SMLAWB(
-                        SKP_Silk_Transition_LP_A_Q28[ ind     ][ na ],
-                        SKP_Silk_Transition_LP_A_Q28[ ind + 1 ][ na ] -
-                        SKP_Silk_Transition_LP_A_Q28[ ind     ][ na ],
-                        fac_Q16 );
-                }
-            } else if( fac_Q16 == ( 1 << 15 ) ) { /* Neither fac_Q16 nor ( ( 1 << 16 ) - fac_Q16 ) is in range of a 16-bit int */
-
-                /* Piece-wise linear interpolation of B and A */
-                for( nb = 0; nb < TRANSITION_NB; nb++ ) {
-                    B_Q28[ nb ] = SKP_RSHIFT( 
-                        SKP_Silk_Transition_LP_B_Q28[ ind     ][ nb ] +
-                        SKP_Silk_Transition_LP_B_Q28[ ind + 1 ][ nb ],
-                        1 );
-                }
-                for( na = 0; na < TRANSITION_NA; na++ ) {
-                    A_Q28[ na ] = SKP_RSHIFT( 
-                        SKP_Silk_Transition_LP_A_Q28[ ind     ][ na ] + 
-                        SKP_Silk_Transition_LP_A_Q28[ ind + 1 ][ na ], 
-                        1 );
-                }
-            } else { /* ( ( 1 << 16 ) - fac_Q16 ) is in range of a 16-bit int */
-                
-                SKP_assert( ( ( 1 << 16 ) - fac_Q16 ) == SKP_SAT16( ( ( 1 << 16 ) - fac_Q16) ) );
-                /* Piece-wise linear interpolation of B and A */
-                for( nb = 0; nb < TRANSITION_NB; nb++ ) {
-                    B_Q28[ nb ] = SKP_SMLAWB(
-                        SKP_Silk_Transition_LP_B_Q28[ ind + 1 ][ nb ],
-                        SKP_Silk_Transition_LP_B_Q28[ ind     ][ nb ] -
-                        SKP_Silk_Transition_LP_B_Q28[ ind + 1 ][ nb ],
-                        ( 1 << 16 ) - fac_Q16 );
-                }
-                for( na = 0; na < TRANSITION_NA; na++ ) {
-                    A_Q28[ na ] = SKP_SMLAWB(
-                        SKP_Silk_Transition_LP_A_Q28[ ind + 1 ][ na ],
-                        SKP_Silk_Transition_LP_A_Q28[ ind     ][ na ] -
-                        SKP_Silk_Transition_LP_A_Q28[ ind + 1 ][ na ],
-                        ( 1 << 16 ) - fac_Q16 );
-                }
-            }
-        } else {
-            SKP_memcpy( B_Q28, SKP_Silk_Transition_LP_B_Q28[ ind ], TRANSITION_NB * sizeof( SKP_int32 ) );
-            SKP_memcpy( A_Q28, SKP_Silk_Transition_LP_A_Q28[ ind ], TRANSITION_NA * sizeof( SKP_int32 ) );
-        }
-    } else {
-        SKP_memcpy( B_Q28, SKP_Silk_Transition_LP_B_Q28[ TRANSITION_INT_NUM - 1 ], TRANSITION_NB * sizeof( SKP_int32 ) );
-        SKP_memcpy( A_Q28, SKP_Silk_Transition_LP_A_Q28[ TRANSITION_INT_NUM - 1 ], TRANSITION_NA * sizeof( SKP_int32 ) );
-    }
-}
-
-/* Low-pass filter with variable cutoff frequency based on  */
-/* piece-wise linear interpolation between elliptic filters */
-/* Start by setting psEncC->transition_frame_no = 1;            */
-/* Deactivate by setting psEncC->transition_frame_no = 0;   */
-void SKP_Silk_LP_variable_cutoff(
-    SKP_Silk_LP_state               *psLP,          /* I/O  LP filter state                     */
-    SKP_int16                       *out,           /* O    Low-pass filtered output signal     */
-    const SKP_int16                 *in,            /* I    Input signal                        */
-    const SKP_int                   frame_length    /* I    Frame length                        */
-)
-{
-    SKP_int32   B_Q28[ TRANSITION_NB ], A_Q28[ TRANSITION_NA ];
-    SKP_int     fac_Q16 = 0, ind = 0;
-
-    SKP_assert( psLP->transition_frame_no >= 0 );
-    SKP_assert( ( ( ( psLP->transition_frame_no <= TRANSITION_FRAMES_DOWN ) && ( psLP->mode == 0 ) ) || 
-                  ( ( psLP->transition_frame_no <= TRANSITION_FRAMES_UP   ) && ( psLP->mode == 1 ) ) ) );
-
-    /* Interpolate filter coefficients if needed */
-    if( psLP->transition_frame_no > 0 ) {
-        if( psLP->mode == 0 ) {
-            if( psLP->transition_frame_no < TRANSITION_FRAMES_DOWN ) {
-                /* Calculate index and interpolation factor for interpolation */
-#if( TRANSITION_INT_STEPS_DOWN == 32 )
-                fac_Q16 = SKP_LSHIFT( psLP->transition_frame_no, 16 - 5 );
-#else
-                fac_Q16 = SKP_DIV32_16( SKP_LSHIFT( psLP->transition_frame_no, 16 ), TRANSITION_INT_STEPS_DOWN );
-#endif
-                ind      = SKP_RSHIFT( fac_Q16, 16 );
-                fac_Q16 -= SKP_LSHIFT( ind, 16 );
-
-                SKP_assert( ind >= 0 );
-                SKP_assert( ind < TRANSITION_INT_NUM );
-
-                /* Interpolate filter coefficients */
-                SKP_Silk_LP_interpolate_filter_taps( B_Q28, A_Q28, ind, fac_Q16 );
-
-                /* Increment transition frame number for next frame */
-                psLP->transition_frame_no++;
-
-            } else if( psLP->transition_frame_no == TRANSITION_FRAMES_DOWN ) {
-                /* End of transition phase */
-                SKP_Silk_LP_interpolate_filter_taps( B_Q28, A_Q28, TRANSITION_INT_NUM - 1, 0 );
-            }
-        } else if( psLP->mode == 1 ) {
-            if( psLP->transition_frame_no < TRANSITION_FRAMES_UP ) {
-                /* Calculate index and interpolation factor for interpolation */
-#if( TRANSITION_INT_STEPS_UP == 64 )
-                fac_Q16 = SKP_LSHIFT( TRANSITION_FRAMES_UP - psLP->transition_frame_no, 16 - 6 );
-#else
-                fac_Q16 = SKP_DIV32_16( SKP_LSHIFT( TRANSITION_FRAMES_UP - psLP->transition_frame_no, 16 ), TRANSITION_INT_STEPS_UP );
-#endif
-                ind      = SKP_RSHIFT( fac_Q16, 16 );
-                fac_Q16 -= SKP_LSHIFT( ind, 16 );
-
-                SKP_assert( ind >= 0 );
-                SKP_assert( ind < TRANSITION_INT_NUM );
-
-                /* Interpolate filter coefficients */
-                SKP_Silk_LP_interpolate_filter_taps( B_Q28, A_Q28, ind, fac_Q16 );
-
-                /* Increment transition frame number for next frame */
-                psLP->transition_frame_no++;
-            
-            } else if( psLP->transition_frame_no == TRANSITION_FRAMES_UP ) {
-                /* End of transition phase */
-                SKP_Silk_LP_interpolate_filter_taps( B_Q28, A_Q28, 0, 0 );
-            }
-        }
-    } 
-    
-    if( psLP->transition_frame_no > 0 ) {
-        /* ARMA low-pass filtering */
-        SKP_assert( TRANSITION_NB == 3 && TRANSITION_NA == 2 );
-        SKP_Silk_biquad_alt( in, B_Q28, A_Q28, psLP->In_LP_State, out, frame_length );
-    } else {
-        /* Instead of using the filter, copy input directly to output */
-        SKP_memcpy( out, in, frame_length * sizeof( SKP_int16 ) );
-    }
-}
-#endif
--- a/src/SKP_Silk_LSF_cos_table.c
+++ /dev/null
@@ -1,65 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_SigProc_FIX.h"
-
-// Q12 values (even)
-const SKP_int SKP_Silk_LSFCosTab_FIX_Q12[LSF_COS_TAB_SZ_FIX + 1] = {
-            8192,             8190,             8182,             8170,     
-            8152,             8130,             8104,             8072,     
-            8034,             7994,             7946,             7896,     
-            7840,             7778,             7714,             7644,     
-            7568,             7490,             7406,             7318,     
-            7226,             7128,             7026,             6922,     
-            6812,             6698,             6580,             6458,     
-            6332,             6204,             6070,             5934,     
-            5792,             5648,             5502,             5352,     
-            5198,             5040,             4880,             4718,     
-            4552,             4382,             4212,             4038,     
-            3862,             3684,             3502,             3320,     
-            3136,             2948,             2760,             2570,     
-            2378,             2186,             1990,             1794,     
-            1598,             1400,             1202,             1002,     
-             802,              602,              402,              202,     
-               0,             -202,             -402,             -602,     
-            -802,            -1002,            -1202,            -1400,     
-           -1598,            -1794,            -1990,            -2186,     
-           -2378,            -2570,            -2760,            -2948,     
-           -3136,            -3320,            -3502,            -3684,     
-           -3862,            -4038,            -4212,            -4382,     
-           -4552,            -4718,            -4880,            -5040,     
-           -5198,            -5352,            -5502,            -5648,     
-           -5792,            -5934,            -6070,            -6204,     
-           -6332,            -6458,            -6580,            -6698,     
-           -6812,            -6922,            -7026,            -7128,     
-           -7226,            -7318,            -7406,            -7490,     
-           -7568,            -7644,            -7714,            -7778,     
-           -7840,            -7896,            -7946,            -7994,     
-           -8034,            -8072,            -8104,            -8130,     
-           -8152,            -8170,            -8182,            -8190,     
-           -8192
-};
--- a/src/SKP_Silk_LTP_analysis_filter_FIX.c
+++ /dev/null
@@ -1,85 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-void SKP_Silk_LTP_analysis_filter_FIX(
-    SKP_int16       *LTP_res,                           /* O:   LTP residual signal of length NB_SUBFR * ( pre_length + subfr_length )  */
-    const SKP_int16 *x,                                 /* I:   Pointer to input signal with at least max( pitchL ) preceeding samples  */
-    const SKP_int16 LTPCoef_Q14[ LTP_ORDER * NB_SUBFR ],/* I:   LTP_ORDER LTP coefficients for each NB_SUBFR subframe                   */
-    const SKP_int   pitchL[ NB_SUBFR ],                 /* I:   Pitch lag, one for each subframe                                        */
-    const SKP_int32 invGains_Qxx[ NB_SUBFR ],           /* I:   Inverse quantization gains, one for each subframe                       */
-    const SKP_int   Qxx,                                /* I:   Inverse quantization gains Q domain                                     */
-    const SKP_int   subfr_length,                       /* I:   Length of each subframe                                                 */
-    const SKP_int   pre_length                          /* I:   Length of the preceeding samples starting at &x[0] for each subframe    */
-)
-{
-    const SKP_int16 *x_ptr, *x_lag_ptr;
-    SKP_int16   Btmp_Q14[ LTP_ORDER ];
-    SKP_int16   *LTP_res_ptr;
-    SKP_int     k, i, j;
-    SKP_int32   LTP_est;
-
-    x_ptr = x;
-    LTP_res_ptr = LTP_res;
-    for( k = 0; k < NB_SUBFR; k++ ) {
-
-        x_lag_ptr = x_ptr - pitchL[ k ];
-        for( i = 0; i < LTP_ORDER; i++ ) {
-            Btmp_Q14[ i ] = LTPCoef_Q14[ k * LTP_ORDER + i ];
-        }
-
-        /* LTP analysis FIR filter */
-        for( i = 0; i < subfr_length + pre_length; i++ ) {
-            LTP_res_ptr[ i ] = x_ptr[ i ];
-            
-            /* Long-term prediction */
-            LTP_est = SKP_SMULBB( x_lag_ptr[ LTP_ORDER / 2 ], Btmp_Q14[ 0 ] );
-            for( j = 1; j < LTP_ORDER; j++ ) {
-                LTP_est = SKP_SMLABB_ovflw( LTP_est, x_lag_ptr[ LTP_ORDER / 2 - j ], Btmp_Q14[ j ] );
-            }
-            LTP_est = SKP_RSHIFT_ROUND( LTP_est, 14 ); // round and -> Q0
-
-            /* Subtract long-term prediction */
-            LTP_res_ptr[ i ] = ( SKP_int16 )SKP_SAT16( ( SKP_int32 )x_ptr[ i ] - LTP_est );
-
-            /* Scale residual */
-            if( Qxx == 16 ) {
-                LTP_res_ptr[ i ] = SKP_SMULWB( invGains_Qxx[ k ], LTP_res_ptr[ i ] );
-            } else {
-                LTP_res_ptr[ i ] = ( SKP_int16 )SKP_CHECK_FIT16( SKP_RSHIFT64( SKP_SMULL( invGains_Qxx[ k ], LTP_res_ptr[ i ] ), Qxx ) );
-            }
-
-            x_lag_ptr++;
-        }
-
-        /* Update pointers */
-        LTP_res_ptr += subfr_length + pre_length; 
-        x_ptr       += subfr_length;
-    }
-}
-
--- a/src/SKP_Silk_LTP_scale_ctrl_FIX.c
+++ /dev/null
@@ -1,81 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-#define NB_THRESHOLDS           11
-
-/* Table containing trained thresholds for LTP scaling */
-static const SKP_int16 LTPScaleThresholds_Q15[ NB_THRESHOLDS ] = 
-{
-    31129, 26214, 16384, 13107, 9830, 6554,
-     4915,  3276,  2621,  2458,    0
-};
-
-void SKP_Silk_LTP_scale_ctrl_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,     /* I/O  encoder state FIX                           */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl  /* I/O  encoder control FIX                         */
-)
-{
-    SKP_int round_loss, frames_per_packet;
-    SKP_int g_out_Q5, g_limit_Q15, thrld1_Q15, thrld2_Q15;
-
-    /* 1st order high-pass filter */
-    psEnc->HPLTPredCodGain_Q7 = SKP_max_int( psEncCtrl->LTPredCodGain_Q7 - psEnc->prevLTPredCodGain_Q7, 0 ) 
-        + SKP_RSHIFT_ROUND( psEnc->HPLTPredCodGain_Q7, 1 );
-    
-    psEnc->prevLTPredCodGain_Q7 = psEncCtrl->LTPredCodGain_Q7;
-
-    /* combine input and filtered input */
-    g_out_Q5    = SKP_RSHIFT_ROUND( SKP_RSHIFT( psEncCtrl->LTPredCodGain_Q7, 1 ) + SKP_RSHIFT( psEnc->HPLTPredCodGain_Q7, 1 ), 3 );
-    g_limit_Q15 = SKP_Silk_sigm_Q15( g_out_Q5 - ( 3 << 5 ) ); /* mulitplid with 0.5 */
-            
-    /* Default is minimum scaling */
-    psEncCtrl->sCmn.LTP_scaleIndex = 0;
-
-    /* Round the loss measure to whole pct */
-    round_loss = ( SKP_int )psEnc->sCmn.PacketLoss_perc;
-
-    /* Only scale if first frame in packet 0% */
-    if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) {
-        
-        frames_per_packet = SKP_DIV32_16( psEnc->sCmn.PacketSize_ms, FRAME_LENGTH_MS );
-
-        round_loss += frames_per_packet - 1;
-        thrld1_Q15 = LTPScaleThresholds_Q15[ SKP_min_int( round_loss,     NB_THRESHOLDS - 1 ) ];
-        thrld2_Q15 = LTPScaleThresholds_Q15[ SKP_min_int( round_loss + 1, NB_THRESHOLDS - 1 ) ];
-    
-        if( g_limit_Q15 > thrld1_Q15 ) {
-            /* Maximum scaling */
-            psEncCtrl->sCmn.LTP_scaleIndex = 2;
-        } else if( g_limit_Q15 > thrld2_Q15 ) {
-            /* Medium scaling */
-            psEncCtrl->sCmn.LTP_scaleIndex = 1;
-        }
-    }
-    psEncCtrl->LTP_scale_Q14 = SKP_Silk_LTPScales_table_Q14[ psEncCtrl->sCmn.LTP_scaleIndex ];
-}
--- a/src/SKP_Silk_MA.c
+++ /dev/null
@@ -1,232 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_MA.c                                                      *
- *                                                                      *
- * Variable order MA filter                                             *
- *                                                                      *
- * Copyright 2006 (c), Skype Limited                                    *
- * Date: 060221                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Variable order MA filter */
-void SKP_Silk_MA(
-    const SKP_int16      *in,            /* I:   input signal                                */
-    const SKP_int16      *B,             /* I:   MA coefficients, Q13 [order+1]              */
-    SKP_int32            *S,             /* I/O: state vector [order]                        */
-    SKP_int16            *out,           /* O:   output signal                               */
-    const SKP_int32      len,            /* I:   signal length                               */
-    const SKP_int32      order           /* I:   filter order                                */
-)
-{
-    SKP_int   k, d, in16;
-    SKP_int32 out32;
-    
-    for( k = 0; k < len; k++ ) {
-        in16 = in[ k ];
-        out32 = SKP_SMLABB( S[ 0 ], in16, B[ 0 ] );
-        out32 = SKP_RSHIFT_ROUND( out32, 13 );
-        
-        for( d = 1; d < order; d++ ) {
-            S[ d - 1 ] = SKP_SMLABB( S[ d ], in16, B[ d ] );
-        }
-        S[ order - 1 ] = SKP_SMULBB( in16, B[ order ] );
-
-        /* Limit */
-        out[ k ] = (SKP_int16)SKP_SAT16( out32 );
-    }
-}
-/* Variable order MA prediction error filter */
-void SKP_Silk_MA_Prediction(
-    const SKP_int16      *in,            /* I:   Input signal                                */
-    const SKP_int16      *B,             /* I:   MA prediction coefficients, Q12 [order]     */
-    SKP_int32            *S,             /* I/O: State vector [order]                        */
-    SKP_int16            *out,           /* O:   Output signal                               */
-    const SKP_int32      len,            /* I:   Signal length                               */
-    const SKP_int32      order           /* I:   Filter order                                */
-)
-{
-    SKP_int   k, d, in16;
-    SKP_int32 out32;
-    SKP_int32 B32;
-
-    if( ( order & 1 ) == 0 && (SKP_int32)( (SKP_int_ptr_size)B & 3 ) == 0 ) {
-        /* Even order and 4-byte aligned coefficient array */
-
-        /* NOTE: the code below loads two int16 values in an int32, and multiplies each using the    */
-        /* SMLABB and SMLABT instructions. On a big-endian CPU the two int16 variables would be      */
-        /* loaded in reverse order and the code will give the wrong result. In that case swapping    */
-        /* the SMLABB and SMLABT instructions should solve the problem.                              */
-        for( k = 0; k < len; k++ ) {
-            in16 = in[ k ];
-            out32 = SKP_LSHIFT( in16, 12 ) - S[ 0 ];
-            out32 = SKP_RSHIFT_ROUND( out32, 12 );
-            
-            for( d = 0; d < order - 2; d += 2 ) {
-                B32 = *( (SKP_int32*)&B[ d ] );                /* read two coefficients at once */
-                S[ d ]     = SKP_SMLABB_ovflw( S[ d + 1 ], in16, B32 );
-                S[ d + 1 ] = SKP_SMLABT_ovflw( S[ d + 2 ], in16, B32 );
-            }
-            B32 = *( (SKP_int32*)&B[ d ] );                    /* read two coefficients at once */
-            S[ order - 2 ] = SKP_SMLABB_ovflw( S[ order - 1 ], in16, B32 );
-            S[ order - 1 ] = SKP_SMULBT( in16, B32 );
-
-            /* Limit */
-            out[ k ] = (SKP_int16)SKP_SAT16( out32 );
-        }
-    } else {
-        /* Odd order or not 4-byte aligned coefficient array */
-        for( k = 0; k < len; k++ ) {
-            in16 = in[ k ];
-            out32 = SKP_LSHIFT( in16, 12 ) - S[ 0 ];
-            out32 = SKP_RSHIFT_ROUND( out32, 12 );
-            
-            for( d = 0; d < order - 1; d++ ) {
-                S[ d ] = SKP_SMLABB_ovflw( S[ d + 1 ], in16, B[ d ] );
-            }
-            S[ order - 1 ] = SKP_SMULBB( in16, B[ order - 1 ] );
-
-            /* Limit */
-            out[ k ] = (SKP_int16)SKP_SAT16( out32 );
-        }
-    }
-}
-
-void SKP_Silk_MA_Prediction_Q13(
-    const SKP_int16      *in,            /* I:   input signal                                */
-    const SKP_int16      *B,             /* I:   MA prediction coefficients, Q13 [order]     */
-    SKP_int32            *S,             /* I/O: state vector [order]                        */
-    SKP_int16            *out,           /* O:   output signal                               */
-    SKP_int32            len,            /* I:   signal length                               */
-    SKP_int32            order           /* I:   filter order                                */
-)
-{
-    SKP_int   k, d, in16;
-    SKP_int32 out32, B32;
-    
-    if( ( order & 1 ) == 0 && (SKP_int32)( (SKP_int_ptr_size)B & 3 ) == 0 ) {
-        /* Even order and 4-byte aligned coefficient array */
-        
-        /* NOTE: the code below loads two int16 values in an int32, and multiplies each using the    */
-        /* SMLABB and SMLABT instructions. On a big-endian CPU the two int16 variables would be      */
-        /* loaded in reverse order and the code will give the wrong result. In that case swapping    */
-        /* the SMLABB and SMLABT instructions should solve the problem.                              */
-        for( k = 0; k < len; k++ ) {
-            in16 = in[ k ];
-            out32 = SKP_LSHIFT( in16, 13 ) - S[ 0 ];
-            out32 = SKP_RSHIFT_ROUND( out32, 13 );
-            
-            for( d = 0; d < order - 2; d += 2 ) {
-                B32 = *( (SKP_int32*)&B[ d ] );                /* read two coefficients at once */
-                S[ d ]     = SKP_SMLABB( S[ d + 1 ], in16, B32 );
-                S[ d + 1 ] = SKP_SMLABT( S[ d + 2 ], in16, B32 );
-            }
-            B32 = *( (SKP_int32*)&B[ d ] );                    /* read two coefficients at once */
-            S[ order - 2 ] = SKP_SMLABB( S[ order - 1 ], in16, B32 );
-            S[ order - 1 ] = SKP_SMULBT( in16, B32 );
-
-            /* Limit */
-            out[ k ] = (SKP_int16)SKP_SAT16( out32 );
-        }
-    } else {
-        /* Odd order or not 4-byte aligned coefficient array */
-        for( k = 0; k < len; k++ ) {
-            in16 = in[ k ];
-            out32 = SKP_LSHIFT( in16, 13 ) - S[ 0 ];
-            out32 = SKP_RSHIFT_ROUND( out32, 13 );
-            
-            for( d = 0; d < order - 1; d++ ) {
-                S[ d ] = SKP_SMLABB( S[ d + 1 ], in16, B[ d ] );
-            }
-            S[ order - 1 ] = SKP_SMULBB( in16, B[ order - 1 ] );
-
-            /* Limit */
-            out[ k ] = (SKP_int16)SKP_SAT16( out32 );
-        }
-    }
-}
-/* Variable order MA prediction error filter. */
-/* Inverse filter of SKP_Silk_LPC_synthesis_filter */
-void SKP_Silk_LPC_analysis_filter(
-    const SKP_int16      *in,            /* I:   Input signal                                */
-    const SKP_int16      *B,             /* I:   MA prediction coefficients, Q12 [order]     */
-    SKP_int16            *S,             /* I/O: State vector [order]                        */
-    SKP_int16            *out,           /* O:   Output signal                               */
-    const SKP_int32      len,            /* I:   Signal length                               */
-    const SKP_int32      Order           /* I:   Filter order                                */
-)
-{
-    SKP_int   k, j, idx, Order_half = SKP_RSHIFT( Order, 1 );
-    SKP_int32 Btmp, B_align_Q12[ SigProc_MAX_ORDER_LPC >> 1 ], out32_Q12, out32;
-    SKP_int16 SA, SB;
-    /* Order must be even */
-    SKP_assert( 2 * Order_half == Order );
-
-    /* Combine two A_Q12 values and ensure 32-bit alignment */
-    for( k = 0; k < Order_half; k++ ) {
-        idx = SKP_SMULBB( 2, k );
-        B_align_Q12[ k ] = ( ( (SKP_int32)B[ idx ] ) & 0x0000ffff ) | SKP_LSHIFT( (SKP_int32)B[ idx + 1 ], 16 );
-    }
-
-    /* S[] values are in Q0 */
-    for( k = 0; k < len; k++ ) {
-        SA = S[ 0 ];
-        out32_Q12 = 0;
-        for( j = 0; j < ( Order_half - 1 ); j++ ) {
-            idx = SKP_SMULBB( 2, j ) + 1;
-            /* Multiply-add two prediction coefficients for each loop */
-            Btmp = B_align_Q12[ j ];
-            SB = S[ idx ];
-            S[ idx ] = SA;
-            out32_Q12 = SKP_SMLABB( out32_Q12, SA, Btmp );
-            out32_Q12 = SKP_SMLABT( out32_Q12, SB, Btmp );
-            SA = S[ idx + 1 ];
-            S[ idx + 1 ] = SB;
-        }
-
-        /* Unrolled loop: epilog */
-        Btmp = B_align_Q12[ Order_half - 1 ];
-        SB = S[ Order - 1 ];
-        S[ Order - 1 ] = SA;
-        out32_Q12 = SKP_SMLABB( out32_Q12, SA, Btmp );
-        out32_Q12 = SKP_SMLABT( out32_Q12, SB, Btmp );
-
-        /* Subtract prediction */
-        out32_Q12 = SKP_SUB_SAT32( SKP_LSHIFT( (SKP_int32)in[ k ], 12 ), out32_Q12 );
-
-        /* Scale to Q0 */
-        out32 = SKP_RSHIFT_ROUND( out32_Q12, 12 );
-
-        /* Saturate output */
-        out[ k ] = (SKP_int16)SKP_SAT16( out32 );
-
-        /* Move input line */
-        S[ 0 ] = in[ k ];
-    }
-}
--- a/src/SKP_Silk_NLSF2A.c
+++ /dev/null
@@ -1,150 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/* conversion between prediction filter coefficients and LSFs   */
-/* order should be even                                         */
-/* a piecewise linear approximation maps LSF <-> cos(LSF)       */
-/* therefore the result is not accurate LSFs, but the two       */
-/* function are accurate inverses of each other                 */
-
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* helper function for NLSF2A(..) */
-SKP_INLINE void SKP_Silk_NLSF2A_find_poly(
-    SKP_int32        *out,        /* o    intermediate polynomial, Q20            */
-    const SKP_int32    *cLSF,     /* i    vector of interleaved 2*cos(LSFs), Q20  */
-    SKP_int            dd         /* i    polynomial order (= 1/2 * filter order) */
-)
-{
-    SKP_int        k, n;
-    SKP_int32    ftmp;
-
-    out[0] = SKP_LSHIFT( 1, 20 );
-    out[1] = -cLSF[0];
-    for( k = 1; k < dd; k++ ) {
-        ftmp = cLSF[2*k];            // Q20
-        out[k+1] = SKP_LSHIFT( out[k-1], 1 ) - (SKP_int32)SKP_RSHIFT_ROUND64( SKP_SMULL( ftmp, out[k] ), 20 );
-        for( n = k; n > 1; n-- ) {
-            out[n] += out[n-2] - (SKP_int32)SKP_RSHIFT_ROUND64( SKP_SMULL( ftmp, out[n-1] ), 20 );
-        }
-        out[1] -= ftmp;
-    }
-}
-
-/* compute whitening filter coefficients from normalized line spectral frequencies */
-void SKP_Silk_NLSF2A(
-    SKP_int16       *a,               /* o    monic whitening filter coefficients in Q12,  [d]    */
-    const SKP_int    *NLSF,           /* i    normalized line spectral frequencies in Q15, [d]    */
-    const SKP_int    d                /* i    filter order (should be even)                       */
-)
-{
-    SKP_int k, i, dd;
-    SKP_int32 cos_LSF_Q20[SigProc_MAX_ORDER_LPC];
-    SKP_int32 P[SigProc_MAX_ORDER_LPC/2+1], Q[SigProc_MAX_ORDER_LPC/2+1];
-    SKP_int32 Ptmp, Qtmp;
-    SKP_int32 f_int;
-    SKP_int32 f_frac;
-    SKP_int32 cos_val, delta;
-    SKP_int32 a_int32[SigProc_MAX_ORDER_LPC];
-    SKP_int32 maxabs, absval, idx=0, sc_Q16; 
-
-    SKP_assert(LSF_COS_TAB_SZ_FIX == 128);
-
-    /* convert LSFs to 2*cos(LSF(i)), using piecewise linear curve from table */
-    for( k = 0; k < d; k++ ) {
-        SKP_assert(NLSF[k] >= 0 );
-        SKP_assert(NLSF[k] <= 32767 );
-
-        /* f_int on a scale 0-127 (rounded down) */
-        f_int = SKP_RSHIFT( NLSF[k], 15 - 7 ); 
-        
-        /* f_frac, range: 0..255 */
-        f_frac = NLSF[k] - SKP_LSHIFT( f_int, 15 - 7 ); 
-
-        SKP_assert(f_int >= 0);
-        SKP_assert(f_int < LSF_COS_TAB_SZ_FIX );
-
-        /* Read start and end value from table */
-        cos_val = SKP_Silk_LSFCosTab_FIX_Q12[ f_int ];                /* Q12 */
-        delta   = SKP_Silk_LSFCosTab_FIX_Q12[ f_int + 1 ] - cos_val;  /* Q12, with a range of 0..200 */
-
-        /* Linear interpolation */
-        cos_LSF_Q20[k] = SKP_LSHIFT( cos_val, 8 ) + SKP_MUL( delta, f_frac ); /* Q20 */
-    }
-    
-    dd = SKP_RSHIFT( d, 1 );
-
-    /* generate even and odd polynomials using convolution */
-    SKP_Silk_NLSF2A_find_poly( P, &cos_LSF_Q20[0], dd );
-    SKP_Silk_NLSF2A_find_poly( Q, &cos_LSF_Q20[1], dd );
-
-    /* convert even and odd polynomials to SKP_int32 Q12 filter coefs */
-    for( k = 0; k < dd; k++ ) {
-        Ptmp = P[k+1] + P[k];
-        Qtmp = Q[k+1] - Q[k];
-
-        /* the Ptmp and Qtmp values at this stage need to fit in int32 */
-
-        a_int32[k]     = -SKP_RSHIFT_ROUND( Ptmp + Qtmp, 9 ); /* Q20 -> Q12 */
-        a_int32[d-k-1] =  SKP_RSHIFT_ROUND( Qtmp - Ptmp, 9 ); /* Q20 -> Q12 */
-    }
-
-    /* Limit the maximum absolute value of the prediction coefficients */
-    for( i = 0; i < 10; i++ ) {
-        /* Find maximum absolute value and its index */
-        maxabs = 0;
-        for( k = 0; k < d; k++ ) {
-            absval = SKP_abs( a_int32[k] );
-            if( absval > maxabs ) {
-                maxabs = absval;
-                idx       = k;
-            }    
-        }
-    
-        if( maxabs > SKP_int16_MAX ) {    
-            /* Reduce magnitude of prediction coefficients */
-            sc_Q16 = 65470 - SKP_DIV32( SKP_MUL( 65470 >> 2, maxabs - SKP_int16_MAX ), 
-                                        SKP_RSHIFT32( SKP_MUL( maxabs, idx + 1), 2 ) );
-            SKP_Silk_bwexpander_32( a_int32, d, sc_Q16 );
-        } else {
-            break;
-        }
-    }    
-
-    /* Reached the last iteration */
-    if( i == 10 ) {
-        SKP_assert(0);
-        for( k = 0; k < d; k++ ) {
-            a_int32[k] = SKP_SAT16( a_int32[k] ); 
-        }
-    }
-
-    /* Return as SKP_int16 Q12 coefficients */
-    for( k = 0; k < d; k++ ) {
-        a[k] = (SKP_int16)a_int32[k];
-    }
-}
--- a/src/SKP_Silk_NLSF2A_stable.c
+++ /dev/null
@@ -1,57 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-/* Convert NLSF parameters to stable AR prediction filter coefficients */
-void SKP_Silk_NLSF2A_stable(
-    SKP_int16                       pAR_Q12[ MAX_LPC_ORDER ],   /* O    Stabilized AR coefs [LPC_order]     */ 
-    const SKP_int                   pNLSF[ MAX_LPC_ORDER ],     /* I    NLSF vector         [LPC_order]     */
-    const SKP_int                   LPC_order                   /* I    LPC/LSF order                       */
-)
-{
-    SKP_int   i;
-    SKP_int32 invGain_Q30;
-
-    SKP_Silk_NLSF2A( pAR_Q12, pNLSF, LPC_order );
-
-    /* Ensure stable LPCs */
-    for( i = 0; i < MAX_LPC_STABILIZE_ITERATIONS; i++ ) {
-        if( SKP_Silk_LPC_inverse_pred_gain( &invGain_Q30, pAR_Q12, LPC_order ) == 1 ) {
-            SKP_Silk_bwexpander( pAR_Q12, LPC_order, 65536 - SKP_SMULBB( 66, i ) ); /* 66_Q16 = 0.001 */
-        } else {
-            break;
-        }
-    }
-
-    /* Reached the last iteration */
-    if( i == MAX_LPC_STABILIZE_ITERATIONS ) {
-        for( i = 0; i < LPC_order; i++ ) {
-            pAR_Q12[ i ] = 0;
-        }
-    }
-}
--- a/src/SKP_Silk_NLSF_MSVQ_decode.c
+++ /dev/null
@@ -1,91 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-/* NLSF vector decoder */
-void SKP_Silk_NLSF_MSVQ_decode(
-    SKP_int                         *pNLSF_Q15,     /* O    Pointer to decoded output vector [LPC_ORDER x 1]    */
-    const SKP_Silk_NLSF_CB_struct   *psNLSF_CB,     /* I    Pointer to NLSF codebook struct                     */
-    const SKP_int                   *NLSFIndices,   /* I    Pointer to NLSF indices          [nStages x 1]      */
-    const SKP_int                   LPC_order       /* I    LPC order used                                      */
-) 
-{
-    const SKP_int16 *pCB_element;
-          SKP_int    s;
-          SKP_int    i;
-
-    /* Check that each index is within valid range */
-    SKP_assert( 0 <= NLSFIndices[ 0 ] && NLSFIndices[ 0 ] < psNLSF_CB->CBStages[ 0 ].nVectors );
-
-    /* Point to the first vector element */
-    pCB_element = &psNLSF_CB->CBStages[ 0 ].CB_NLSF_Q15[ SKP_MUL( NLSFIndices[ 0 ], LPC_order ) ];
-
-    /* Initialize with the codebook vector from stage 0 */
-    for( i = 0; i < LPC_order; i++ ) {
-        pNLSF_Q15[ i ] = ( SKP_int )pCB_element[ i ];
-    }
-          
-    for( s = 1; s < psNLSF_CB->nStages; s++ ) {
-        /* Check that each index is within valid range */
-        SKP_assert( 0 <= NLSFIndices[ s ] && NLSFIndices[ s ] < psNLSF_CB->CBStages[ s ].nVectors );
-
-        if( LPC_order == 16 ) {
-            /* Point to the first vector element */
-            pCB_element = &psNLSF_CB->CBStages[ s ].CB_NLSF_Q15[ SKP_LSHIFT( NLSFIndices[ s ], 4 ) ];
-
-            /* Add the codebook vector from the current stage */
-            pNLSF_Q15[  0 ] += pCB_element[  0 ];
-            pNLSF_Q15[  1 ] += pCB_element[  1 ];
-            pNLSF_Q15[  2 ] += pCB_element[  2 ];
-            pNLSF_Q15[  3 ] += pCB_element[  3 ];
-            pNLSF_Q15[  4 ] += pCB_element[  4 ];
-            pNLSF_Q15[  5 ] += pCB_element[  5 ];
-            pNLSF_Q15[  6 ] += pCB_element[  6 ];
-            pNLSF_Q15[  7 ] += pCB_element[  7 ];
-            pNLSF_Q15[  8 ] += pCB_element[  8 ];
-            pNLSF_Q15[  9 ] += pCB_element[  9 ];
-            pNLSF_Q15[ 10 ] += pCB_element[ 10 ];
-            pNLSF_Q15[ 11 ] += pCB_element[ 11 ];
-            pNLSF_Q15[ 12 ] += pCB_element[ 12 ];
-            pNLSF_Q15[ 13 ] += pCB_element[ 13 ];
-            pNLSF_Q15[ 14 ] += pCB_element[ 14 ];
-            pNLSF_Q15[ 15 ] += pCB_element[ 15 ];
-        } else {
-            /* Point to the first vector element */
-            pCB_element = &psNLSF_CB->CBStages[ s ].CB_NLSF_Q15[ SKP_SMULBB( NLSFIndices[ s ], LPC_order ) ];
-
-            /* Add the codebook vector from the current stage */
-            for( i = 0; i < LPC_order; i++ ) {
-                pNLSF_Q15[ i ] += pCB_element[ i ];
-            }
-        }
-    }
-
-    /* NLSF stabilization */
-    SKP_Silk_NLSF_stabilize( pNLSF_Q15, psNLSF_CB->NDeltaMin_Q15, LPC_order );
-}
--- a/src/SKP_Silk_NLSF_MSVQ_encode_FIX.c
+++ /dev/null
@@ -1,231 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-/***********************/
-/* NLSF vector encoder */
-/***********************/
-void SKP_Silk_NLSF_MSVQ_encode_FIX(
-          SKP_int                   *NLSFIndices,           /* O    Codebook path vector [ CB_STAGES ]      */
-          SKP_int                   *pNLSF_Q15,             /* I/O  Quantized NLSF vector [ LPC_ORDER ]     */
-    const SKP_Silk_NLSF_CB_struct   *psNLSF_CB,             /* I    Codebook object                         */
-    const SKP_int                   *pNLSF_q_Q15_prev,      /* I    Prev. quantized NLSF vector [LPC_ORDER] */
-    const SKP_int                   *pW_Q6,                 /* I    NLSF weight vector [ LPC_ORDER ]        */
-    const SKP_int                   NLSF_mu_Q15,            /* I    Rate weight for the RD optimization     */
-    const SKP_int                   NLSF_mu_fluc_red_Q16,   /* I    Fluctuation reduction error weight      */
-    const SKP_int                   NLSF_MSVQ_Survivors,    /* I    Max survivors from each stage           */
-    const SKP_int                   LPC_order,              /* I    LPC order                               */
-    const SKP_int                   deactivate_fluc_red     /* I    Deactivate fluctuation reduction        */
-)
-{
-    SKP_int     i, s, k, cur_survivors = 0, prev_survivors, input_index, cb_index, bestIndex;
-    SKP_int32   rateDistThreshold_Q18;
-    SKP_int     pNLSF_in_Q15[ MAX_LPC_ORDER ];
-#if( NLSF_MSVQ_FLUCTUATION_REDUCTION == 1 )
-    SKP_int32   se_Q15, wsse_Q20, bestRateDist_Q20;
-#endif
-
-#if( LOW_COMPLEXITY_ONLY == 1 )
-    SKP_int32   pRateDist_Q18[  NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED_LC_MODE ];
-    SKP_int32   pRate_Q5[       MAX_NLSF_MSVQ_SURVIVORS_LC_MODE ];
-    SKP_int32   pRate_new_Q5[   MAX_NLSF_MSVQ_SURVIVORS_LC_MODE ];
-    SKP_int     pTempIndices[   MAX_NLSF_MSVQ_SURVIVORS_LC_MODE ];
-    SKP_int     pPath[          MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * NLSF_MSVQ_MAX_CB_STAGES ];
-    SKP_int     pPath_new[      MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * NLSF_MSVQ_MAX_CB_STAGES ];
-    SKP_int     pRes_Q15[       MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * MAX_LPC_ORDER ];
-    SKP_int     pRes_new_Q15[   MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * MAX_LPC_ORDER ];
-#else
-    SKP_int32   pRateDist_Q18[  NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED ];
-    SKP_int32   pRate_Q5[       MAX_NLSF_MSVQ_SURVIVORS ];
-    SKP_int32   pRate_new_Q5[   MAX_NLSF_MSVQ_SURVIVORS ];
-    SKP_int     pTempIndices[   MAX_NLSF_MSVQ_SURVIVORS ];
-    SKP_int     pPath[          MAX_NLSF_MSVQ_SURVIVORS * NLSF_MSVQ_MAX_CB_STAGES ];
-    SKP_int     pPath_new[      MAX_NLSF_MSVQ_SURVIVORS * NLSF_MSVQ_MAX_CB_STAGES ];
-    SKP_int     pRes_Q15[       MAX_NLSF_MSVQ_SURVIVORS * MAX_LPC_ORDER ];
-    SKP_int     pRes_new_Q15[   MAX_NLSF_MSVQ_SURVIVORS * MAX_LPC_ORDER ];
-#endif
-
-    const SKP_int   *pConstInt;
-          SKP_int   *pInt;
-    const SKP_int16 *pCB_element;
-    const SKP_Silk_NLSF_CBS *pCurrentCBStage;
-
-    SKP_assert( NLSF_MSVQ_Survivors <= MAX_NLSF_MSVQ_SURVIVORS );
-    SKP_assert( ( LOW_COMPLEXITY_ONLY == 0 ) || ( NLSF_MSVQ_Survivors <= MAX_NLSF_MSVQ_SURVIVORS_LC_MODE ) );
-
-
-
-    /* Copy the input vector */
-    SKP_memcpy( pNLSF_in_Q15, pNLSF_Q15, LPC_order * sizeof( SKP_int ) );
-
-    /****************************************************/
-    /* Tree search for the multi-stage vector quantizer */
-    /****************************************************/
-
-    /* Clear accumulated rates */
-    SKP_memset( pRate_Q5, 0, NLSF_MSVQ_Survivors * sizeof( SKP_int32 ) );
-    
-    /* Copy NLSFs into residual signal vector */
-    for( i = 0; i < LPC_order; i++ ) {
-        pRes_Q15[ i ] = pNLSF_Q15[ i ];
-    }
-
-    /* Set first stage values */
-    prev_survivors = 1;
-
-    /* Loop over all stages */
-    for( s = 0; s < psNLSF_CB->nStages; s++ ) {
-
-        /* Set a pointer to the current stage codebook */
-        pCurrentCBStage = &psNLSF_CB->CBStages[ s ];
-
-        /* Calculate the number of survivors in the current stage */
-        cur_survivors = SKP_min_32( NLSF_MSVQ_Survivors, SKP_SMULBB( prev_survivors, pCurrentCBStage->nVectors ) );
-
-#if( NLSF_MSVQ_FLUCTUATION_REDUCTION == 0 )
-        /* Find a single best survivor in the last stage, if we */
-        /* do not need candidates for fluctuation reduction     */
-        if( s == psNLSF_CB->nStages - 1 ) {
-            cur_survivors = 1;
-        }
-#endif
-
-        /* Nearest neighbor clustering for multiple input data vectors */
-        SKP_Silk_NLSF_VQ_rate_distortion_FIX( pRateDist_Q18, pCurrentCBStage, pRes_Q15, pW_Q6, 
-            pRate_Q5, NLSF_mu_Q15, prev_survivors, LPC_order );
-
-        /* Sort the rate-distortion errors */
-        SKP_Silk_insertion_sort_increasing( pRateDist_Q18, pTempIndices, 
-            prev_survivors * pCurrentCBStage->nVectors, cur_survivors );
-
-        /* Discard survivors with rate-distortion values too far above the best one */
-        if( pRateDist_Q18[ 0 ] < SKP_int32_MAX / NLSF_MSVQ_SURV_MAX_REL_RD ) {
-            rateDistThreshold_Q18 = SKP_MUL( NLSF_MSVQ_SURV_MAX_REL_RD, pRateDist_Q18[ 0 ] );
-            while( pRateDist_Q18[ cur_survivors - 1 ] > rateDistThreshold_Q18 && cur_survivors > 1 ) {
-                cur_survivors--;
-            }
-        }
-        /* Update accumulated codebook contributions for the 'cur_survivors' best codebook indices */
-        for( k = 0; k < cur_survivors; k++ ) { 
-            if( s > 0 ) {
-                /* Find the indices of the input and the codebook vector */
-                if( pCurrentCBStage->nVectors == 8 ) {
-                    input_index = SKP_RSHIFT( pTempIndices[ k ], 3 );
-                    cb_index    = pTempIndices[ k ] & 7;
-                } else {
-                    input_index = SKP_DIV32_16( pTempIndices[ k ], pCurrentCBStage->nVectors );  
-                    cb_index    = pTempIndices[ k ] - SKP_SMULBB( input_index, pCurrentCBStage->nVectors );
-                }
-            } else {
-                /* Find the indices of the input and the codebook vector */
-                input_index = 0;
-                cb_index    = pTempIndices[ k ];
-            }
-
-            /* Subtract new contribution from the previous residual vector for each of 'cur_survivors' */
-            pConstInt   = &pRes_Q15[ SKP_SMULBB( input_index, LPC_order ) ];
-            pCB_element = &pCurrentCBStage->CB_NLSF_Q15[ SKP_SMULBB( cb_index, LPC_order ) ];
-            pInt        = &pRes_new_Q15[ SKP_SMULBB( k, LPC_order ) ];
-            for( i = 0; i < LPC_order; i++ ) {
-                pInt[ i ] = pConstInt[ i ] - ( SKP_int )pCB_element[ i ];
-            }
-
-            /* Update accumulated rate for stage 1 to the current */
-            pRate_new_Q5[ k ] = pRate_Q5[ input_index ] + pCurrentCBStage->Rates_Q5[ cb_index ];
-
-            /* Copy paths from previous matrix, starting with the best path */
-            pConstInt = &pPath[ SKP_SMULBB( input_index, psNLSF_CB->nStages ) ];
-            pInt      = &pPath_new[ SKP_SMULBB( k, psNLSF_CB->nStages ) ];
-            for( i = 0; i < s; i++ ) {
-                pInt[ i ] = pConstInt[ i ];
-            }
-            /* Write the current stage indices for the 'cur_survivors' to the best path matrix */
-            pInt[ s ] = cb_index;
-        }
-
-        if( s < psNLSF_CB->nStages - 1 ) {
-            /* Copy NLSF residual matrix for next stage */
-            SKP_memcpy( pRes_Q15, pRes_new_Q15, SKP_SMULBB( cur_survivors, LPC_order ) * sizeof( SKP_int ) );
-
-            /* Copy rate vector for next stage */
-            SKP_memcpy( pRate_Q5, pRate_new_Q5, cur_survivors * sizeof( SKP_int32 ) );
-
-            /* Copy best path matrix for next stage */
-            SKP_memcpy( pPath, pPath_new, SKP_SMULBB( cur_survivors, psNLSF_CB->nStages ) * sizeof( SKP_int ) );
-        }
-
-        prev_survivors = cur_survivors;
-    }
-
-    /* (Preliminary) index of the best survivor, later to be decoded */
-    bestIndex = 0;
-
-#if( NLSF_MSVQ_FLUCTUATION_REDUCTION == 1 )
-    /******************************/
-    /* NLSF fluctuation reduction */
-    /******************************/
-    if( deactivate_fluc_red != 1 ) {
-    
-        /* Search among all survivors, now taking also weighted fluctuation errors into account */
-        bestRateDist_Q20 = SKP_int32_MAX;
-        for( s = 0; s < cur_survivors; s++ ) {
-            /* Decode survivor to compare with previous quantized NLSF vector */
-            SKP_Silk_NLSF_MSVQ_decode( pNLSF_Q15, psNLSF_CB, &pPath_new[ SKP_SMULBB( s, psNLSF_CB->nStages ) ], LPC_order );
-
-            /* Compare decoded NLSF vector with the previously quantized vector */ 
-            wsse_Q20 = 0;
-            for( i = 0; i < LPC_order; i += 2 ) {
-                /* Compute weighted squared quantization error for index i */
-                se_Q15 = pNLSF_Q15[ i ] - pNLSF_q_Q15_prev[ i ]; // range: [ -32767 : 32767 ]
-                wsse_Q20 = SKP_SMLAWB( wsse_Q20, SKP_SMULBB( se_Q15, se_Q15 ), pW_Q6[ i ] );
-
-                /* Compute weighted squared quantization error for index i + 1 */
-                se_Q15 = pNLSF_Q15[ i + 1 ] - pNLSF_q_Q15_prev[ i + 1 ]; // range: [ -32767 : 32767 ]
-                wsse_Q20 = SKP_SMLAWB( wsse_Q20, SKP_SMULBB( se_Q15, se_Q15 ), pW_Q6[ i + 1 ] );
-            }
-            SKP_assert( wsse_Q20 >= 0 );
-
-            /* Add the fluctuation reduction penalty to the rate distortion error */
-            wsse_Q20 = SKP_ADD_POS_SAT32( pRateDist_Q18[ s ], SKP_SMULWB( wsse_Q20, NLSF_mu_fluc_red_Q16 ) );
-
-            /* Keep index of best survivor */
-            if( wsse_Q20 < bestRateDist_Q20 ) {
-                bestRateDist_Q20 = wsse_Q20;
-                bestIndex = s;
-            }
-        }
-    }
-#endif
-
-    /* Copy best path to output argument */
-    SKP_memcpy( NLSFIndices, &pPath_new[ SKP_SMULBB( bestIndex, psNLSF_CB->nStages ) ], psNLSF_CB->nStages * sizeof( SKP_int ) );
-
-    /* Decode and stabilize the best survivor */
-    SKP_Silk_NLSF_MSVQ_decode( pNLSF_Q15, psNLSF_CB, NLSFIndices, LPC_order );
-
-}
--- a/src/SKP_Silk_NLSF_VQ_rate_distortion_FIX.c
+++ /dev/null
@@ -1,61 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-/* Rate-Distortion calculations for multiple input data vectors */
-void SKP_Silk_NLSF_VQ_rate_distortion_FIX(
-    SKP_int32                       *pRD_Q20,           /* O    Rate-distortion values [psNLSF_CBS->nVectors*N] */
-    const SKP_Silk_NLSF_CBS         *psNLSF_CBS,        /* I    NLSF codebook stage struct                      */
-    const SKP_int                   *in_Q15,            /* I    Input vectors to be quantized                   */
-    const SKP_int                   *w_Q6,              /* I    Weight vector                                   */
-    const SKP_int32                 *rate_acc_Q5,       /* I    Accumulated rates from previous stage           */
-    const SKP_int                   mu_Q15,             /* I    Weight between weighted error and rate          */
-    const SKP_int                   N,                  /* I    Number of input vectors to be quantized         */
-    const SKP_int                   LPC_order           /* I    LPC order                                       */
-)
-{
-    SKP_int   i, n;
-    SKP_int32 *pRD_vec_Q20;
-
-    /* Compute weighted quantization errors for all input vectors over one codebook stage */
-    SKP_Silk_NLSF_VQ_sum_error_FIX( pRD_Q20, in_Q15, w_Q6, psNLSF_CBS->CB_NLSF_Q15, 
-        N, psNLSF_CBS->nVectors, LPC_order );
-
-    /* Loop over input vectors */
-    pRD_vec_Q20 = pRD_Q20;
-    for( n = 0; n < N; n++ ) {
-        /* Add rate cost to error for each codebook vector */
-        for( i = 0; i < psNLSF_CBS->nVectors; i++ ) {
-            SKP_assert( rate_acc_Q5[ n ] + psNLSF_CBS->Rates_Q5[ i ] >= 0 );
-            SKP_assert( rate_acc_Q5[ n ] + psNLSF_CBS->Rates_Q5[ i ] <= SKP_int16_MAX );
-            pRD_vec_Q20[ i ] = SKP_SMLABB( pRD_vec_Q20[ i ], rate_acc_Q5[ n ] + psNLSF_CBS->Rates_Q5[ i ], mu_Q15 );
-            SKP_assert( pRD_vec_Q20[ i ] >= 0 );
-        }
-        pRD_vec_Q20 += psNLSF_CBS->nVectors;
-    }
-}
--- a/src/SKP_Silk_NLSF_VQ_sum_error_FIX.c
+++ /dev/null
@@ -1,79 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-/* Compute weighted quantization errors for an LPC_order element input vector, over one codebook stage */
-void SKP_Silk_NLSF_VQ_sum_error_FIX(
-    SKP_int32                       *err_Q20,           /* O    Weighted quantization errors  [N*K]         */
-    const SKP_int                   *in_Q15,            /* I    Input vectors to be quantized [N*LPC_order] */
-    const SKP_int                   *w_Q6,              /* I    Weighting vectors             [N*LPC_order] */
-    const SKP_int16                 *pCB_Q15,           /* I    Codebook vectors              [K*LPC_order] */
-    const SKP_int                   N,                  /* I    Number of input vectors                     */
-    const SKP_int                   K,                  /* I    Number of codebook vectors                  */
-    const SKP_int                   LPC_order           /* I    Number of LPCs                              */
-)
-{
-    SKP_int         i, n, m;
-    SKP_int32       diff_Q15, sum_error, Wtmp_Q6;
-    SKP_int32       Wcpy_Q6[ MAX_LPC_ORDER / 2 ];
-    const SKP_int16 *cb_vec_Q15;
-
-    SKP_assert( LPC_order <= 16 );
-    SKP_assert( ( LPC_order & 1 ) == 0 );
-
-    /* Copy to local stack and pack two weights per int32 */
-    for( m = 0; m < SKP_RSHIFT( LPC_order, 1 ); m++ ) {
-        Wcpy_Q6[ m ] = w_Q6[ 2 * m ] | SKP_LSHIFT( ( SKP_int32 )w_Q6[ 2 * m + 1 ], 16 );
-    }
-
-    /* Loop over input vectors */
-    for( n = 0; n < N; n++ ) {
-        /* Loop over codebook */
-        cb_vec_Q15 = pCB_Q15;
-        for( i = 0; i < K; i++ ) {
-            sum_error = 0;
-            for( m = 0; m < LPC_order; m += 2 ) {
-                /* Get two weights packed in an int32 */
-                Wtmp_Q6 = Wcpy_Q6[ SKP_RSHIFT( m, 1 ) ];
-
-                /* Compute weighted squared quantization error for index m */
-                diff_Q15 = in_Q15[ m ] - *cb_vec_Q15++; // range: [ -32767 : 32767 ]
-                sum_error = SKP_SMLAWB( sum_error, SKP_SMULBB( diff_Q15, diff_Q15 ), Wtmp_Q6 );
-
-                /* Compute weighted squared quantization error for index m + 1 */
-                diff_Q15 = in_Q15[m + 1] - *cb_vec_Q15++; // range: [ -32767 : 32767 ]
-                sum_error = SKP_SMLAWT( sum_error, SKP_SMULBB( diff_Q15, diff_Q15 ), Wtmp_Q6 );
-            }
-            SKP_assert( sum_error >= 0 );
-            err_Q20[ i ] = sum_error;
-        }
-        err_Q20 += K;
-        in_Q15 += LPC_order;
-    }
-}
-
--- a/src/SKP_Silk_NLSF_VQ_weights_laroia.c
+++ /dev/null
@@ -1,78 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* 
-R. Laroia, N. Phamdo and N. Farvardin, "Robust and Efficient Quantization of Speech LSP
-Parameters Using Structured Vector Quantization", Proc. IEEE Int. Conf. Acoust., Speech,
-Signal Processing, pp. 641-644, 1991.
-*/
-
-#define Q_OUT                       6
-
-/* Laroia low complexity NLSF weights */
-void SKP_Silk_NLSF_VQ_weights_laroia(
-    SKP_int             *pNLSFW_Q6,         /* O: Pointer to input vector weights           [D x 1]     */
-    const SKP_int       *pNLSF_Q15,         /* I: Pointer to input vector                   [D x 1]     */ 
-    const SKP_int       D                   /* I: Input vector dimension (even)                         */
-)
-{
-    SKP_int   k;
-    SKP_int32 tmp1_int, tmp2_int;
-    
-    /* Check that we are guaranteed to end up within the required range */
-    SKP_assert( D > 0 );
-    SKP_assert( ( D & 1 ) == 0 );
-    
-    /* First value */
-    tmp1_int = SKP_max_int( pNLSF_Q15[ 0 ], 1 );
-    tmp1_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp1_int );
-    tmp2_int = SKP_max_int( pNLSF_Q15[ 1 ] - pNLSF_Q15[ 0 ], 1 );
-    tmp2_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp2_int );
-    pNLSFW_Q6[ 0 ] = (SKP_int)SKP_min_int( tmp1_int + tmp2_int, SKP_int16_MAX );
-    SKP_assert( pNLSFW_Q6[ 0 ] > 0 );
-    
-    /* Main loop */
-    for( k = 1; k < D - 1; k += 2 ) {
-        tmp1_int = SKP_max_int( pNLSF_Q15[ k + 1 ] - pNLSF_Q15[ k ], 1 );
-        tmp1_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp1_int );
-        pNLSFW_Q6[ k ] = (SKP_int)SKP_min_int( tmp1_int + tmp2_int, SKP_int16_MAX );
-        SKP_assert( pNLSFW_Q6[ k ] > 0 );
-
-        tmp2_int = SKP_max_int( pNLSF_Q15[ k + 2 ] - pNLSF_Q15[ k + 1 ], 1 );
-        tmp2_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp2_int );
-        pNLSFW_Q6[ k + 1 ] = (SKP_int)SKP_min_int( tmp1_int + tmp2_int, SKP_int16_MAX );
-        SKP_assert( pNLSFW_Q6[ k + 1 ] > 0 );
-    }
-    
-    /* Last value */
-    tmp1_int = SKP_max_int( ( 1 << 15 ) - pNLSF_Q15[ D - 1 ], 1 );
-    tmp1_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp1_int );
-    pNLSFW_Q6[ D - 1 ] = (SKP_int)SKP_min_int( tmp1_int + tmp2_int, SKP_int16_MAX );
-    SKP_assert( pNLSFW_Q6[ D - 1 ] > 0 );
-}
--- a/src/SKP_Silk_NLSF_stabilize.c
+++ /dev/null
@@ -1,154 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/* NLSF stabilizer:                                         */
-/*                                                          */
-/* - Moves NLSFs futher apart if they are too close         */
-/* - Moves NLSFs away from borders if they are too close    */
-/* - High effort to achieve a modification with minimum     */
-/*     Euclidean distance to input vector                   */
-/* - Output are sorted NLSF coefficients                    */
-/*                                                          */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Constant Definitions */
-#define MAX_LOOPS        20
-
-/* NLSF stabilizer, for a single input data vector */
-void SKP_Silk_NLSF_stabilize(
-          SKP_int    *NLSF_Q15,            /* I/O:  Unstable/stabilized normalized LSF vector in Q15 [L]                    */
-    const SKP_int    *NDeltaMin_Q15,       /* I:    Normalized delta min vector in Q15, NDeltaMin_Q15[L] must be >= 1 [L+1] */
-    const SKP_int     L                    /* I:    Number of NLSF parameters in the input vector                           */
-)
-{
-    SKP_int        center_freq_Q15, diff_Q15, min_center_Q15, max_center_Q15;
-    SKP_int32    min_diff_Q15;
-    SKP_int        loops;
-    SKP_int        i, I=0, k;
-
-    /* This is necessary to ensure an output within range of a SKP_int16 */
-    SKP_assert( NDeltaMin_Q15[L] >= 1 );
-
-    for( loops = 0; loops < MAX_LOOPS; loops++ ) {
-        /**************************/
-        /* Find smallest distance */
-        /**************************/
-        /* First element */
-        min_diff_Q15 = NLSF_Q15[0] - NDeltaMin_Q15[0];
-        I = 0;
-        /* Middle elements */
-        for( i = 1; i <= L-1; i++ ) {
-            diff_Q15 = NLSF_Q15[i] - ( NLSF_Q15[i-1] + NDeltaMin_Q15[i] );
-            if( diff_Q15 < min_diff_Q15 ) {
-                min_diff_Q15 = diff_Q15;
-                I = i;
-            }
-        }
-        /* Last element */
-        diff_Q15 = (1<<15) - ( NLSF_Q15[L-1] + NDeltaMin_Q15[L] );
-        if( diff_Q15 < min_diff_Q15 ) {
-            min_diff_Q15 = diff_Q15;
-            I = L;
-        }
-
-        /***************************************************/
-        /* Now check if the smallest distance non-negative */
-        /***************************************************/
-        if (min_diff_Q15 >= 0) {
-            return;
-        }
-
-        if( I == 0 ) {
-            /* Move away from lower limit */
-            NLSF_Q15[0] = NDeltaMin_Q15[0];
-        
-        } else if( I == L) {
-            /* Move away from higher limit */
-            NLSF_Q15[L-1] = (1<<15) - NDeltaMin_Q15[L];
-        
-        } else {
-            /* Find the lower extreme for the location of the current center frequency */ 
-            min_center_Q15 = 0;
-            for( k = 0; k < I; k++ ) {
-                min_center_Q15 += NDeltaMin_Q15[k];
-            }
-            min_center_Q15 += SKP_RSHIFT( NDeltaMin_Q15[I], 1 );
-
-            /* Find the upper extreme for the location of the current center frequency */
-            max_center_Q15 = (1<<15);
-            for( k = L; k > I; k-- ) {
-                max_center_Q15 -= NDeltaMin_Q15[k];
-            }
-            max_center_Q15 -= ( NDeltaMin_Q15[I] - SKP_RSHIFT( NDeltaMin_Q15[I], 1 ) );
-
-            /* Move apart, sorted by value, keeping the same center frequency */
-            center_freq_Q15 = SKP_LIMIT( SKP_RSHIFT_ROUND( (SKP_int32)NLSF_Q15[I-1] + (SKP_int32)NLSF_Q15[I], 1 ),
-                min_center_Q15, max_center_Q15 );
-            NLSF_Q15[I-1] = center_freq_Q15 - SKP_RSHIFT( NDeltaMin_Q15[I], 1 );
-            NLSF_Q15[I] = NLSF_Q15[I-1] + NDeltaMin_Q15[I];
-        }
-    }
-
-    /* Safe and simple fall back method, which is less ideal than the above */
-    if( loops == MAX_LOOPS )
-    {
-        /* Insertion sort (fast for already almost sorted arrays):   */
-        /* Best case:  O(n)   for an already sorted array            */
-        /* Worst case: O(n^2) for an inversely sorted array          */
-        SKP_Silk_insertion_sort_increasing_all_values(&NLSF_Q15[0], L);
-            
-        /* First NLSF should be no less than NDeltaMin[0] */
-        NLSF_Q15[0] = SKP_max_int( NLSF_Q15[0], NDeltaMin_Q15[0] );
-        
-        /* Keep delta_min distance between the NLSFs */
-        for( i = 1; i < L; i++ )
-            NLSF_Q15[i] = SKP_max_int( NLSF_Q15[i], NLSF_Q15[i-1] + NDeltaMin_Q15[i] );
-
-        /* Last NLSF should be no higher than 1 - NDeltaMin[L] */
-        NLSF_Q15[L-1] = SKP_min_int( NLSF_Q15[L-1], (1<<15) - NDeltaMin_Q15[L] );
-
-        /* Keep NDeltaMin distance between the NLSFs */
-        for( i = L-2; i >= 0; i-- ) 
-            NLSF_Q15[i] = SKP_min_int( NLSF_Q15[i], NLSF_Q15[i+1] - NDeltaMin_Q15[i+1] );
-    }
-}
-
-/* NLSF stabilizer, over multiple input column data vectors */
-void SKP_Silk_NLSF_stabilize_multi(
-          SKP_int        *NLSF_Q15,        /* I/O:  Unstable/stabilized normalized LSF vectors in Q15 [LxN]                 */
-    const SKP_int        *NDeltaMin_Q15,   /* I:    Normalized delta min vector in Q15, NDeltaMin_Q15[L] must be >= 1 [L+1] */
-    const SKP_int         N,               /* I:    Number of input vectors to be stabilized                                */
-    const SKP_int         L                /* I:    NLSF vector dimension                                                   */
-)
-{
-    SKP_int n;
-    
-    /* loop over input data */
-    for( n = 0; n < N; n++ ) {
-        SKP_Silk_NLSF_stabilize( &NLSF_Q15[n * L], NDeltaMin_Q15, L );
-    }
-}
--- a/src/SKP_Silk_NSQ.c
+++ /dev/null
@@ -1,446 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-SKP_INLINE void SKP_Silk_nsq_scale_states(
-    SKP_Silk_nsq_state  *NSQ,               /* I/O NSQ state                        */
-    const SKP_int16     x[],                /* I input in Q0                        */
-    SKP_int32           x_sc_Q10[],         /* O input scaled with 1/Gain           */
-    SKP_int             length,             /* I length of input                    */
-    SKP_int16           sLTP[],             /* I re-whitened LTP state in Q0        */
-    SKP_int32           sLTP_Q16[],         /* O LTP state matching scaled input    */
-    SKP_int             subfr,              /* I subframe number                    */
-    const SKP_int       LTP_scale_Q14,      /* I                                    */
-    const SKP_int32     Gains_Q16[ NB_SUBFR ], /* I                                 */
-    const SKP_int       pitchL[ NB_SUBFR ]  /* I                                    */
-);
-
-SKP_INLINE void SKP_Silk_noise_shape_quantizer(
-    SKP_Silk_nsq_state  *NSQ,               /* I/O  NSQ state                       */
-    SKP_int             sigtype,            /* I    Signal type                     */
-    const SKP_int32     x_sc_Q10[],         /* I                                    */
-    SKP_int             q[],                /* O                                    */
-    SKP_int16           xq[],               /* O                                    */
-    SKP_int32           sLTP_Q16[],         /* I/O  LTP state                       */
-    const SKP_int16     a_Q12[],            /* I    Short term prediction coefs     */
-    const SKP_int16     b_Q14[],            /* I    Long term prediction coefs      */
-    const SKP_int16     AR_shp_Q13[],       /* I    Noise shaping AR coefs          */
-    SKP_int             lag,                /* I    Pitch lag                       */
-    SKP_int32           HarmShapeFIRPacked_Q14, /* I                                */
-    SKP_int             Tilt_Q14,           /* I    Spectral tilt                   */
-    SKP_int32           LF_shp_Q14,         /* I                                    */
-    SKP_int32           Gain_Q16,           /* I                                    */
-    SKP_int             Lambda_Q10,         /* I                                    */
-    SKP_int             offset_Q10,         /* I                                    */
-    SKP_int             length,             /* I    Input length                    */
-    SKP_int             shapingLPCOrder,    /* I    Noise shaping AR filter order   */
-    SKP_int             predictLPCOrder     /* I    Prediction filter order         */
-);
-
-void SKP_Silk_NSQ(
-    SKP_Silk_encoder_state          *psEncC,                                    /* I/O  Encoder State                       */
-    SKP_Silk_encoder_control        *psEncCtrlC,                                /* I    Encoder Control                     */
-    SKP_Silk_nsq_state              *NSQ,                                       /* I/O  NSQ state                           */
-    const SKP_int16                 x[],                                        /* I    prefiltered input signal            */
-    SKP_int                         q[],                                        /* O    quantized qulse signal              */
-    const SKP_int                   LSFInterpFactor_Q2,                         /* I    LSF interpolation factor in Q2      */
-    const SKP_int16                 PredCoef_Q12[ 2 * MAX_LPC_ORDER ],          /* I    Short term prediction coefficients  */
-    const SKP_int16                 LTPCoef_Q14[ LTP_ORDER * NB_SUBFR ],        /* I    Long term prediction coefficients   */
-    const SKP_int16                 AR2_Q13[ NB_SUBFR * SHAPE_LPC_ORDER_MAX ],  /* I                                        */
-    const SKP_int                   HarmShapeGain_Q14[ NB_SUBFR ],              /* I                                        */
-    const SKP_int                   Tilt_Q14[ NB_SUBFR ],                       /* I    Spectral tilt                       */
-    const SKP_int32                 LF_shp_Q14[ NB_SUBFR ],                     /* I                                        */
-    const SKP_int32                 Gains_Q16[ NB_SUBFR ],                      /* I                                        */
-    const SKP_int                   Lambda_Q10,                                 /* I                                        */
-    const SKP_int                   LTP_scale_Q14                               /* I    LTP state scaling                   */
-)
-{
-    SKP_int     k, lag, start_idx, subfr_length, LSF_interpolation_flag;
-    const SKP_int16 *A_Q12, *B_Q14, *AR_shp_Q13;
-    SKP_int16   *pxq;
-    SKP_int32   sLTP_Q16[ 2 * MAX_FRAME_LENGTH ];
-    SKP_int16   sLTP[     2 * MAX_FRAME_LENGTH ];
-    SKP_int32   HarmShapeFIRPacked_Q14;
-    SKP_int     offset_Q10;
-    SKP_int32   FiltState[ MAX_LPC_ORDER ];
-    SKP_int32   x_sc_Q10[ MAX_FRAME_LENGTH / NB_SUBFR ];
-
-    subfr_length = psEncC->frame_length / NB_SUBFR;
-
-    NSQ->rand_seed  =  psEncCtrlC->Seed;
-    /* Set unvoiced lag to the previous one, overwrite later for voiced */
-    lag             = NSQ->lagPrev;
-
-    SKP_assert( NSQ->prev_inv_gain_Q16 != 0 );
-
-    offset_Q10 = SKP_Silk_Quantization_Offsets_Q10[ psEncCtrlC->sigtype ][ psEncCtrlC->QuantOffsetType ];
-
-    if( LSFInterpFactor_Q2 == ( 1 << 2 ) ) {
-        LSF_interpolation_flag = 0;
-    } else {
-        LSF_interpolation_flag = 1;
-    }
-
-    /* Setup pointers to start of sub frame */
-    NSQ->sLTP_shp_buf_idx = psEncC->frame_length;
-    NSQ->sLTP_buf_idx     = psEncC->frame_length;
-    pxq                   = &NSQ->xq[ psEncC->frame_length ];
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        A_Q12      = &PredCoef_Q12[ (( k >> 1 ) | ( 1 - LSF_interpolation_flag )) * MAX_LPC_ORDER ];
-        B_Q14      = &LTPCoef_Q14[ k * LTP_ORDER ];
-        AR_shp_Q13 = &AR2_Q13[     k * SHAPE_LPC_ORDER_MAX ];
-
-        /* Noise shape parameters */
-        SKP_assert( HarmShapeGain_Q14[ k ] >= 0 );
-        HarmShapeFIRPacked_Q14  =                        SKP_RSHIFT( HarmShapeGain_Q14[ k ], 2 );
-        HarmShapeFIRPacked_Q14 |= SKP_LSHIFT( ( SKP_int32 )SKP_RSHIFT( HarmShapeGain_Q14[ k ], 1 ), 16 );
-
-        if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) {
-            /* Voiced */
-            lag = psEncCtrlC->pitchL[ k ];
-
-            NSQ->rewhite_flag = 0;
-            /* Re-whitening */
-            if( ( k & ( 3 - SKP_LSHIFT( LSF_interpolation_flag, 1 ) ) ) == 0 ) {
-                /* Rewhiten with new A coefs */
-                
-                start_idx = psEncC->frame_length - lag - psEncC->predictLPCOrder - LTP_ORDER / 2;
-                start_idx = SKP_LIMIT( start_idx, 0, psEncC->frame_length - psEncC->predictLPCOrder ); /* Limit */
-                
-                SKP_memset( FiltState, 0, psEncC->predictLPCOrder * sizeof( SKP_int32 ) );
-                SKP_Silk_MA_Prediction( &NSQ->xq[ start_idx + k * ( psEncC->frame_length >> 2 ) ], 
-                    A_Q12, FiltState, sLTP + start_idx, psEncC->frame_length - start_idx, psEncC->predictLPCOrder );
-
-                NSQ->rewhite_flag = 1;
-                NSQ->sLTP_buf_idx = psEncC->frame_length;
-            }
-        }
-        
-        SKP_Silk_nsq_scale_states( NSQ, x, x_sc_Q10, psEncC->subfr_length, sLTP, 
-            sLTP_Q16, k, LTP_scale_Q14, Gains_Q16, psEncCtrlC->pitchL );
-
-        SKP_Silk_noise_shape_quantizer( NSQ, psEncCtrlC->sigtype, x_sc_Q10, q, pxq, sLTP_Q16, A_Q12, B_Q14, 
-            AR_shp_Q13, lag, HarmShapeFIRPacked_Q14, Tilt_Q14[ k ], LF_shp_Q14[ k ], Gains_Q16[ k ], Lambda_Q10, 
-            offset_Q10, psEncC->subfr_length, psEncC->shapingLPCOrder, psEncC->predictLPCOrder
-        );
-
-        x          += psEncC->subfr_length;
-        q          += psEncC->subfr_length;
-        pxq        += psEncC->subfr_length;
-    }
-
-    /* Save scalars for this layer */
-    NSQ->sLF_AR_shp_Q12             = NSQ->sLF_AR_shp_Q12;
-    NSQ->prev_inv_gain_Q16          = NSQ->prev_inv_gain_Q16;
-    NSQ->lagPrev                        = psEncCtrlC->pitchL[ NB_SUBFR - 1 ];
-    /* Save quantized speech and noise shaping signals */
-    SKP_memcpy( NSQ->xq,           &NSQ->xq[           psEncC->frame_length ], psEncC->frame_length * sizeof( SKP_int16 ) );
-    SKP_memcpy( NSQ->sLTP_shp_Q10, &NSQ->sLTP_shp_Q10[ psEncC->frame_length ], psEncC->frame_length * sizeof( SKP_int32 ) );
-
-}
-
-/***********************************/
-/* SKP_Silk_noise_shape_quantizer  */
-/***********************************/
-SKP_INLINE void SKP_Silk_noise_shape_quantizer(
-    SKP_Silk_nsq_state  *NSQ,               /* I/O  NSQ state                       */
-    SKP_int             sigtype,            /* I    Signal type                     */
-    const SKP_int32     x_sc_Q10[],         /* I                                    */
-    SKP_int             q[],                /* O                                    */
-    SKP_int16           xq[],               /* O                                    */
-    SKP_int32           sLTP_Q16[],         /* I/O  LTP state                       */
-    const SKP_int16     a_Q12[],            /* I    Short term prediction coefs     */
-    const SKP_int16     b_Q14[],            /* I    Long term prediction coefs      */
-    const SKP_int16     AR_shp_Q13[],       /* I    Noise shaping AR coefs          */
-    SKP_int             lag,                /* I    Pitch lag                       */
-    SKP_int32           HarmShapeFIRPacked_Q14, /* I                                */
-    SKP_int             Tilt_Q14,           /* I    Spectral tilt                   */
-    SKP_int32           LF_shp_Q14,         /* I                                    */
-    SKP_int32           Gain_Q16,           /* I                                    */
-    SKP_int             Lambda_Q10,         /* I                                    */
-    SKP_int             offset_Q10,         /* I                                    */
-    SKP_int             length,             /* I    Input length                    */
-    SKP_int             shapingLPCOrder,    /* I    Noise shaping AR filter order   */
-    SKP_int             predictLPCOrder     /* I    Prediction filter order         */
-)
-{
-    SKP_int     i, j;
-    SKP_int32   LTP_pred_Q14, LPC_pred_Q10, n_AR_Q10, n_LTP_Q14;
-    SKP_int32   n_LF_Q10, r_Q10, q_Q0, q_Q10;
-    SKP_int32   thr1_Q10, thr2_Q10, thr3_Q10;
-    SKP_int32   Atmp, dither;
-    SKP_int32   exc_Q10, LPC_exc_Q10, xq_Q10;
-    SKP_int32   tmp, sLF_AR_shp_Q10;
-    SKP_int32   *psLPC_Q14;
-    SKP_int32   *shp_lag_ptr, *pred_lag_ptr;
-    SKP_int32   a_Q12_tmp[ MAX_LPC_ORDER / 2 ], AR_shp_Q13_tmp[ MAX_LPC_ORDER / 2 ];
-
-    shp_lag_ptr  = &NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - lag + HARM_SHAPE_FIR_TAPS / 2 ];
-    pred_lag_ptr = &sLTP_Q16[ NSQ->sLTP_buf_idx - lag + LTP_ORDER / 2 ];
-    
-    /* Setup short term AR state */
-    psLPC_Q14     = &NSQ->sLPC_Q14[ MAX_LPC_ORDER - 1 ];
-
-    /* Quantization thresholds */
-    thr1_Q10 = SKP_SUB_RSHIFT32( -1536, Lambda_Q10, 1);
-    thr2_Q10 = SKP_SUB_RSHIFT32( -512,  Lambda_Q10, 1);
-    thr2_Q10 = SKP_ADD_RSHIFT32( thr2_Q10, SKP_SMULBB( offset_Q10, Lambda_Q10 ), 10 );
-    thr3_Q10 = SKP_ADD_RSHIFT32(  512,  Lambda_Q10, 1);
-    
-    /* Preload LPC coeficients to array on stack. Gives small performance gain */
-    SKP_memcpy( a_Q12_tmp, a_Q12, predictLPCOrder * sizeof( SKP_int16 ) );
-    SKP_memcpy( AR_shp_Q13_tmp, AR_shp_Q13, shapingLPCOrder * sizeof( SKP_int16 ) );
-    
-    for( i = 0; i < length; i++ ) {
-        /* Generate dither */
-        NSQ->rand_seed = SKP_RAND( NSQ->rand_seed );
-
-        /* dither = rand_seed < 0 ? 0xFFFFFFFF : 0; */
-        dither = SKP_RSHIFT( NSQ->rand_seed, 31 );
-                
-        /* Short-term prediction */
-        SKP_assert( ( predictLPCOrder  & 1 ) == 0 );    /* check that order is even */
-        SKP_assert( ( (SKP_int64)a_Q12 & 3 ) == 0 );    /* check that array starts at 4-byte aligned address */
-        SKP_assert( predictLPCOrder >= 10 );            /* check that unrolling works */
-
-        /* NOTE: the code below loads two int16 values in an int32, and multiplies each using the   */
-        /* SMLAWB and SMLAWT instructions. On a big-endian CPU the two int16 variables would be     */
-        /* loaded in reverse order and the code will give the wrong result. In that case swapping   */
-        /* the SMLAWB and SMLAWT instructions should solve the problem.                             */
-        /* Partially unrolled */
-        Atmp = a_Q12_tmp[ 0 ];      /* read two coefficients at once */
-        LPC_pred_Q10 = SKP_SMULWB(               psLPC_Q14[ 0  ], Atmp );
-        LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -1 ], Atmp );
-        Atmp = a_Q12_tmp[ 1 ];
-        LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -2 ], Atmp );
-        LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -3 ], Atmp );
-        Atmp = a_Q12_tmp[ 2 ];
-        LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -4 ], Atmp );
-        LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -5 ], Atmp );
-        Atmp = a_Q12_tmp[ 3 ];
-        LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -6 ], Atmp );
-        LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -7 ], Atmp );
-        Atmp = a_Q12_tmp[ 4 ];
-        LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -8 ], Atmp );
-        LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -9 ], Atmp );
-        for( j = 10; j < predictLPCOrder; j += 2 ) {
-            Atmp = a_Q12_tmp[ j >> 1 ];     /* read two coefficients at once */
-            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -j     ], Atmp );
-            LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -j - 1 ], Atmp );
-        }
-
-        /* Long-term prediction */
-        if( sigtype == SIG_TYPE_VOICED ) {
-            /* Unrolled loop */
-            LTP_pred_Q14 = SKP_SMULWB(               pred_lag_ptr[  0 ], b_Q14[ 0 ] );
-            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -1 ], b_Q14[ 1 ] );
-            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -2 ], b_Q14[ 2 ] );
-            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -3 ], b_Q14[ 3 ] );
-            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -4 ], b_Q14[ 4 ] );
-            pred_lag_ptr++;
-        } else {
-            LTP_pred_Q14 = 0;
-        }
-
-        /* Noise shape feedback */
-        SKP_assert( ( shapingLPCOrder       & 1 ) == 0 );   /* check that order is even */
-        SKP_assert( ( (SKP_int64)AR_shp_Q13 & 3 ) == 0 );   /* check that array starts at 4-byte aligned address */
-        SKP_assert( shapingLPCOrder >= 12 );                /* check that unrolling works */
-
-        /* Partially unrolled */
-        Atmp = AR_shp_Q13_tmp[ 0 ];     /* read two coefficients at once */
-        n_AR_Q10 = SKP_SMULWB(           psLPC_Q14[ 0  ], Atmp );
-        n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -1 ], Atmp );
-        Atmp = AR_shp_Q13_tmp[ 1 ];
-        n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -2 ], Atmp );
-        n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -3 ], Atmp );
-        Atmp = AR_shp_Q13_tmp[ 2 ];
-        n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -4 ], Atmp );
-        n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -5 ], Atmp );
-        Atmp = AR_shp_Q13_tmp[ 3 ];
-        n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -6 ], Atmp );
-        n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -7 ], Atmp );
-        Atmp = AR_shp_Q13_tmp[ 4 ];
-        n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -8 ], Atmp );
-        n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -9 ], Atmp );
-        Atmp = AR_shp_Q13_tmp[ 5 ];
-        n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -10 ], Atmp );
-        n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -11 ], Atmp );
-        for( j = 12; j < shapingLPCOrder; j += 2 ) {
-            Atmp = AR_shp_Q13_tmp[ j >> 1 ];        /* read two coefficients at once */
-            n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -j     ], Atmp );
-            n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -j - 1 ], Atmp );
-        }
-        n_AR_Q10 = SKP_RSHIFT( n_AR_Q10, 1 );   /* Q11 -> Q10 */
-        n_AR_Q10  = SKP_SMLAWB( n_AR_Q10, NSQ->sLF_AR_shp_Q12, Tilt_Q14 );
-
-        n_LF_Q10   = SKP_LSHIFT( SKP_SMULWB( NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - 1 ], LF_shp_Q14 ), 2 ); 
-        n_LF_Q10   = SKP_SMLAWT( n_LF_Q10, NSQ->sLF_AR_shp_Q12, LF_shp_Q14 );
-
-        SKP_assert( lag > 0 || sigtype == SIG_TYPE_UNVOICED);
-
-        /* Long-term shaping */
-        if( lag > 0 ) {
-            /* Symmetric, packed FIR coefficients */
-            n_LTP_Q14 = SKP_SMULWB( SKP_ADD32( shp_lag_ptr[ 0 ], shp_lag_ptr[ -2 ] ), HarmShapeFIRPacked_Q14 );
-            n_LTP_Q14 = SKP_SMLAWT( n_LTP_Q14, shp_lag_ptr[ -1 ],                     HarmShapeFIRPacked_Q14 );
-            shp_lag_ptr++;
-            n_LTP_Q14 = SKP_LSHIFT( n_LTP_Q14, 6 );
-        } else {
-            n_LTP_Q14 = 0;
-        }
-
-        /* Input minus prediction plus noise feedback  */
-        //r = x[ i ] - LTP_pred - LPC_pred + n_AR + n_Tilt + n_LF + n_LTP;
-        tmp   = SKP_SUB32( LTP_pred_Q14, n_LTP_Q14 );                       /* Add Q14 stuff */
-        tmp   = SKP_RSHIFT_ROUND( tmp, 4 );                                 /* round to Q10  */
-        tmp   = SKP_ADD32( tmp, LPC_pred_Q10 );                             /* add Q10 stuff */ 
-        tmp   = SKP_SUB32( tmp, n_AR_Q10 );                                 /* subtract Q10 stuff */ 
-        tmp   = SKP_SUB32( tmp, n_LF_Q10 );                                 /* subtract Q10 stuff */ 
-        r_Q10 = SKP_SUB32( x_sc_Q10[ i ], tmp );
-
-
-        /* Flip sign depending on dither */
-        r_Q10 = ( r_Q10 ^ dither ) - dither;
-        r_Q10 = SKP_SUB32( r_Q10, offset_Q10 );
-        r_Q10 = SKP_LIMIT( r_Q10, -64 << 10, 64 << 10 );
-
-        /* Quantize */
-        if( r_Q10 < thr1_Q10 ) {
-            q_Q0 = SKP_RSHIFT_ROUND( SKP_ADD_RSHIFT32( r_Q10, Lambda_Q10, 1 ), 10 );
-            q_Q10 = SKP_LSHIFT( q_Q0, 10 );
-        } else if( r_Q10 < thr2_Q10 ) {
-            q_Q0 = -1;
-            q_Q10 = -1024;
-        } else if( r_Q10 > thr3_Q10 ) {
-            q_Q0 = SKP_RSHIFT_ROUND( SKP_SUB_RSHIFT32( r_Q10, Lambda_Q10, 1 ), 10 );
-            q_Q10 = SKP_LSHIFT( q_Q0, 10 );
-        } else {
-            q_Q0 = 0;
-            q_Q10 = 0;
-        }
-        q[ i ] = q_Q0;
-
-        /* Excitation */
-        exc_Q10 = SKP_ADD32( q_Q10, offset_Q10 );
-        exc_Q10 = ( exc_Q10 ^ dither ) - dither;
-
-        /* Add predictions */
-        LPC_exc_Q10 = SKP_ADD32( exc_Q10, SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 ) );
-        xq_Q10      = SKP_ADD32( LPC_exc_Q10, LPC_pred_Q10 );
-        
-        /* Scale XQ back to normal level before saving */
-        xq[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( xq_Q10, Gain_Q16 ), 10 ) );
-        
-        
-        /* Update states */
-        psLPC_Q14++;
-        *psLPC_Q14 = SKP_LSHIFT( xq_Q10, 4 );
-        sLF_AR_shp_Q10 = SKP_SUB32( xq_Q10, n_AR_Q10 );
-        NSQ->sLF_AR_shp_Q12 = SKP_LSHIFT( sLF_AR_shp_Q10, 2 );
-
-        NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx ] = SKP_SUB32( sLF_AR_shp_Q10, n_LF_Q10 );
-        sLTP_Q16[NSQ->sLTP_buf_idx] = SKP_LSHIFT( LPC_exc_Q10, 6 );
-        NSQ->sLTP_shp_buf_idx++;
-        NSQ->sLTP_buf_idx++;
-
-        /* Make dither dependent on quantized signal */
-        NSQ->rand_seed += q[ i ];
-    }
-    /* Update LPC synth buffer */
-    SKP_memcpy( NSQ->sLPC_Q14, &NSQ->sLPC_Q14[ length ], MAX_LPC_ORDER * sizeof( SKP_int32 ) );
-}
-
-SKP_INLINE void SKP_Silk_nsq_scale_states(
-    SKP_Silk_nsq_state  *NSQ,               /* I/O NSQ state                        */
-    const SKP_int16     x[],                /* I input in Q0                        */
-    SKP_int32           x_sc_Q10[],         /* O input scaled with 1/Gain           */
-    SKP_int             length,             /* I length of input                    */
-    SKP_int16           sLTP[],             /* I re-whitened LTP state in Q0        */
-    SKP_int32           sLTP_Q16[],         /* O LTP state matching scaled input    */
-    SKP_int             subfr,              /* I subframe number                    */
-    const SKP_int       LTP_scale_Q14,      /* I                                    */
-    const SKP_int32     Gains_Q16[ NB_SUBFR ], /* I                                 */
-    const SKP_int       pitchL[ NB_SUBFR ]  /* I                                    */
-)
-{
-    SKP_int   i, scale_length, lag;
-    SKP_int32 inv_gain_Q16, gain_adj_Q16, inv_gain_Q32;
-
-    inv_gain_Q16 = SKP_DIV32( SKP_int32_MAX, SKP_RSHIFT( Gains_Q16[ subfr ], 1) );
-    inv_gain_Q16 = SKP_min( inv_gain_Q16, SKP_int16_MAX );
-    lag          = pitchL[ subfr ];
-
-    /* After rewhitening the LTP state is un-scaled */
-    if( NSQ->rewhite_flag ) {
-        inv_gain_Q32 = SKP_LSHIFT( inv_gain_Q16, 16 );
-        if( subfr == 0 ) {
-            /* Do LTP downscaling */
-            inv_gain_Q32 = SKP_LSHIFT( SKP_SMULWB( inv_gain_Q32, LTP_scale_Q14 ), 2 );
-        }
-        for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) {
-            sLTP_Q16[ i ] = SKP_SMULWB( inv_gain_Q32, sLTP[ i ] );
-        }
-    }
-
-    /* Prepare for Worst case. Next frame starts with max lag voiced */
-    scale_length = length * NB_SUBFR;                                           /* approx max lag */
-    scale_length = scale_length - SKP_SMULBB( NB_SUBFR - (subfr + 1), length ); /* subtract samples that will be too old in next frame */
-    scale_length = SKP_max_int( scale_length, lag + LTP_ORDER );                /* make sure to scale whole pitch period if voiced */
-
-    /* Adjust for changing gain */
-    if( inv_gain_Q16 != NSQ->prev_inv_gain_Q16 ) {
-        gain_adj_Q16 =  SKP_DIV32_varQ( inv_gain_Q16, NSQ->prev_inv_gain_Q16, 16 );
-
-        for( i = NSQ->sLTP_shp_buf_idx - scale_length; i < NSQ->sLTP_shp_buf_idx; i++ ) {
-            NSQ->sLTP_shp_Q10[ i ] = SKP_SMULWW( gain_adj_Q16, NSQ->sLTP_shp_Q10[ i ] );
-        }
-
-        /* Scale LTP predict state */
-        if( NSQ->rewhite_flag == 0 ) {
-            for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) {
-                sLTP_Q16[ i ] = SKP_SMULWW( gain_adj_Q16, sLTP_Q16[ i ] );
-            }
-        }
-        NSQ->sLF_AR_shp_Q12 = SKP_SMULWW( gain_adj_Q16, NSQ->sLF_AR_shp_Q12 );
-
-        /* scale short term state */
-        for( i = 0; i < MAX_LPC_ORDER; i++ ) {
-            NSQ->sLPC_Q14[ i ] = SKP_SMULWW( gain_adj_Q16, NSQ->sLPC_Q14[ i ] );
-        }
-    }
-
-    /* Scale input */
-    for( i = 0; i < length; i++ ) {
-        x_sc_Q10[ i ] = SKP_RSHIFT( SKP_SMULBB( x[ i ], ( SKP_int16 )inv_gain_Q16 ), 6 );
-    }
-
-    /* save inv_gain */
-    SKP_assert( inv_gain_Q16 != 0 );
-    NSQ->prev_inv_gain_Q16 = inv_gain_Q16;
-}
--- a/src/SKP_Silk_NSQ_del_dec.c
+++ /dev/null
@@ -1,722 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-typedef struct {
-    SKP_int   RandState[ DECISION_DELAY ];
-    SKP_int32 Q_Q10[     DECISION_DELAY ];
-    SKP_int32 Xq_Q10[    DECISION_DELAY ];
-    SKP_int32 Pred_Q16[  DECISION_DELAY ];
-    SKP_int32 Shape_Q10[ DECISION_DELAY ];
-    SKP_int32 Gain_Q16[  DECISION_DELAY ];
-    SKP_int32 sLPC_Q14[ MAX_FRAME_LENGTH / NB_SUBFR + NSQ_LPC_BUF_LENGTH ];
-    SKP_int32 LF_AR_Q12;
-    SKP_int32 Seed;
-    SKP_int32 SeedInit;
-    SKP_int32 RD_Q10;
-} NSQ_del_dec_struct;
-
-typedef struct {
-    SKP_int32 Q_Q10;
-    SKP_int32 RD_Q10;
-    SKP_int32 xq_Q14;
-    SKP_int32 LF_AR_Q12;
-    SKP_int32 sLTP_shp_Q10;
-    SKP_int32 LPC_exc_Q16;
-} NSQ_sample_struct;
-
-SKP_INLINE void SKP_Silk_copy_del_dec_state(
-    NSQ_del_dec_struct  *DD_dst,                /* I    Dst del dec state                   */
-    NSQ_del_dec_struct  *DD_src,                /* I    Src del dec state                   */
-    SKP_int             LPC_state_idx           /* I    Index to LPC buffer                 */
-);
-
-SKP_INLINE void SKP_Silk_nsq_del_dec_scale_states(
-    SKP_Silk_nsq_state  *NSQ,                   /* I/O  NSQ state                           */
-    NSQ_del_dec_struct  psDelDec[],             /* I/O  Delayed decision states             */
-    const SKP_int16     x[],                    /* I    Input in Q0                         */
-    SKP_int32           x_sc_Q10[],             /* O    Input scaled with 1/Gain in Q10     */
-    SKP_int             length,                 /* I    Length of input                     */
-    SKP_int16           sLTP[],                 /* I    Re-whitened LTP state in Q0         */
-    SKP_int32           sLTP_Q16[],             /* O    LTP state matching scaled input     */
-    SKP_int             subfr,                  /* I    Subframe number                     */
-    SKP_int             nStatesDelayedDecision, /* I    Number of del dec states            */
-    SKP_int             smpl_buf_idx,           /* I    Index to newest samples in buffers  */
-    const SKP_int       LTP_scale_Q14,          /* I    LTP state scaling                   */
-    const SKP_int32     Gains_Q16[ NB_SUBFR ],  /* I                                        */
-    const SKP_int       pitchL[ NB_SUBFR ]      /* I    Pitch lag                           */
-);
-
-/******************************************/
-/* Noise shape quantizer for one subframe */
-/******************************************/
-SKP_INLINE void SKP_Silk_noise_shape_quantizer_del_dec(
-    SKP_Silk_nsq_state  *NSQ,                   /* I/O  NSQ state                           */
-    NSQ_del_dec_struct  psDelDec[],             /* I/O  Delayed decision states             */
-    SKP_int             sigtype,                /* I    Signal type                         */
-    const SKP_int32     x_Q10[],                /* I                                        */
-    SKP_int             q[],                    /* O                                        */
-    SKP_int16           xq[],                   /* O                                        */
-    SKP_int32           sLTP_Q16[],             /* I/O  LTP filter state                    */
-    const SKP_int16     a_Q12[],                /* I    Short term prediction coefs         */
-    const SKP_int16     b_Q14[],                /* I    Long term prediction coefs          */
-    const SKP_int16     AR_shp_Q13[],           /* I    Noise shaping coefs                 */
-    SKP_int             lag,                    /* I    Pitch lag                           */
-    SKP_int32           HarmShapeFIRPacked_Q14, /* I                                        */
-    SKP_int             Tilt_Q14,               /* I    Spectral tilt                       */
-    SKP_int32           LF_shp_Q14,             /* I                                        */
-    SKP_int32           Gain_Q16,               /* I                                        */
-    SKP_int             Lambda_Q10,             /* I                                        */
-    SKP_int             offset_Q10,             /* I                                        */
-    SKP_int             length,                 /* I    Input length                        */
-    SKP_int             subfr,                  /* I    Subframe number                     */
-    SKP_int             shapingLPCOrder,        /* I    Shaping LPC filter order            */
-    SKP_int             predictLPCOrder,        /* I    Prediction LPC filter order         */
-    SKP_int             nStatesDelayedDecision, /* I    Number of states in decision tree   */
-    SKP_int             *smpl_buf_idx,          /* I    Index to newest samples in buffers  */
-    SKP_int             decisionDelay           /* I                                        */
-);
-
-void SKP_Silk_NSQ_del_dec(
-    SKP_Silk_encoder_state          *psEncC,                                    /* I/O  Encoder State                       */
-    SKP_Silk_encoder_control        *psEncCtrlC,                                /* I    Encoder Control                     */
-    SKP_Silk_nsq_state              *NSQ,                                       /* I/O  NSQ state                           */
-    const SKP_int16                 x[],                                        /* I    Prefiltered input signal            */
-    SKP_int                         q[],                                        /* O    Quantized pulse signal              */
-    const SKP_int                   LSFInterpFactor_Q2,                         /* I    LSF interpolation factor in Q2      */
-    const SKP_int16                 PredCoef_Q12[ 2 * MAX_LPC_ORDER ],          /* I    Prediction coefs                    */
-    const SKP_int16                 LTPCoef_Q14[ LTP_ORDER * NB_SUBFR ],        /* I    LT prediction coefs                 */
-    const SKP_int16                 AR2_Q13[ NB_SUBFR * SHAPE_LPC_ORDER_MAX ],  /* I                                        */
-    const SKP_int                   HarmShapeGain_Q14[ NB_SUBFR ],              /* I                                        */
-    const SKP_int                   Tilt_Q14[ NB_SUBFR ],                       /* I    Spectral tilt                       */
-    const SKP_int32                 LF_shp_Q14[ NB_SUBFR ],                     /* I                                        */
-    const SKP_int32                 Gains_Q16[ NB_SUBFR ],                      /* I                                        */
-    const SKP_int                   Lambda_Q10,                                 /* I                                        */
-    const SKP_int                   LTP_scale_Q14                               /* I    LTP state scaling                   */
-)
-{
-    SKP_int     i, k, lag, start_idx, LSF_interpolation_flag, Winner_ind, subfr;
-    SKP_int     last_smple_idx, smpl_buf_idx, decisionDelay, subfr_length;
-    const SKP_int16 *A_Q12, *B_Q14, *AR_shp_Q13;
-    SKP_int16   *pxq;
-    SKP_int32   sLTP_Q16[ 2 * MAX_FRAME_LENGTH ];
-    SKP_int16   sLTP[     2 * MAX_FRAME_LENGTH ];
-    SKP_int32   HarmShapeFIRPacked_Q14;
-    SKP_int     offset_Q10;
-    SKP_int32   FiltState[ MAX_LPC_ORDER ], RDmin_Q10;
-    SKP_int32   x_sc_Q10[ MAX_FRAME_LENGTH / NB_SUBFR ];
-    NSQ_del_dec_struct psDelDec[ DEL_DEC_STATES_MAX ];
-    NSQ_del_dec_struct *psDD;
-
-    subfr_length = psEncC->frame_length / NB_SUBFR;
-
-    /* Set unvoiced lag to the previous one, overwrite later for voiced */
-    lag = NSQ->lagPrev;
-
-    SKP_assert( NSQ->prev_inv_gain_Q16 != 0 );
-
-    /* Initialize delayed decision states */
-    SKP_memset( psDelDec, 0, psEncC->nStatesDelayedDecision * sizeof( NSQ_del_dec_struct ) );
-    for( k = 0; k < psEncC->nStatesDelayedDecision; k++ ) {
-        psDD                 = &psDelDec[ k ];
-        psDD->Seed           = ( k + psEncCtrlC->Seed ) & 3;
-        psDD->SeedInit       = psDD->Seed;
-        psDD->RD_Q10         = 0;
-        psDD->LF_AR_Q12      = NSQ->sLF_AR_shp_Q12;
-        psDD->Shape_Q10[ 0 ] = NSQ->sLTP_shp_Q10[ psEncC->frame_length - 1 ];
-        SKP_memcpy( psDD->sLPC_Q14, NSQ->sLPC_Q14, NSQ_LPC_BUF_LENGTH * sizeof( SKP_int32 ) );
-    }
-
-    offset_Q10   = SKP_Silk_Quantization_Offsets_Q10[ psEncCtrlC->sigtype ][ psEncCtrlC->QuantOffsetType ];
-    smpl_buf_idx = 0; /* index of oldest samples */
-
-    decisionDelay = SKP_min_int( DECISION_DELAY, subfr_length );
-    /* For voiced frames limit the decision delay to lower than the pitch lag */
-    if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) {
-        for( k = 0; k < NB_SUBFR; k++ ) {
-            decisionDelay = SKP_min_int( decisionDelay, psEncCtrlC->pitchL[ k ] - LTP_ORDER / 2 - 1 );
-        }
-    }
-
-    if( LSFInterpFactor_Q2 == ( 1 << 2 ) ) {
-        LSF_interpolation_flag = 0;
-    } else {
-        LSF_interpolation_flag = 1;
-    }
-
-    /* Setup pointers to start of sub frame */
-    pxq                   = &NSQ->xq[ psEncC->frame_length ];
-    NSQ->sLTP_shp_buf_idx = psEncC->frame_length;
-    NSQ->sLTP_buf_idx     = psEncC->frame_length;
-    subfr = 0;
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        A_Q12      = &PredCoef_Q12[ ( ( k >> 1 ) | ( 1 - LSF_interpolation_flag ) ) * MAX_LPC_ORDER ];
-        B_Q14      = &LTPCoef_Q14[ k * LTP_ORDER           ];
-        AR_shp_Q13 = &AR2_Q13[     k * SHAPE_LPC_ORDER_MAX ];
-
-        NSQ->rewhite_flag = 0;
-        if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) {
-            /* Voiced */
-            lag = psEncCtrlC->pitchL[ k ];
-
-            /* Re-whitening */
-            if( ( k & ( 3 - SKP_LSHIFT( LSF_interpolation_flag, 1 ) ) ) == 0 ) {
-                if( k == 2 ) {
-                    /* RESET DELAYED DECISIONS */
-                    /* Find winner */
-                    RDmin_Q10 = psDelDec[ 0 ].RD_Q10;
-                    Winner_ind = 0;
-                    for( i = 1; i < psEncC->nStatesDelayedDecision; i++ ) {
-                        if( psDelDec[ i ].RD_Q10 < RDmin_Q10 ) {
-                            RDmin_Q10 = psDelDec[ i ].RD_Q10;
-                            Winner_ind = i;
-                        }
-                    }
-                    for( i = 0; i < psEncC->nStatesDelayedDecision; i++ ) {
-                        if( i != Winner_ind ) {
-                            psDelDec[ i ].RD_Q10 += ( SKP_int32_MAX >> 4 );
-                            SKP_assert( psDelDec[ i ].RD_Q10 >= 0 );
-                        }
-                    }
-                    
-                    /* Copy final part of signals from winner state to output and long-term filter states */
-                    psDD = &psDelDec[ Winner_ind ];
-                    last_smple_idx = smpl_buf_idx + decisionDelay;
-                    for( i = 0; i < decisionDelay; i++ ) {
-                        last_smple_idx = ( last_smple_idx - 1 ) & DECISION_DELAY_MASK;
-                        q[   i - decisionDelay ] = ( SKP_int )SKP_RSHIFT( psDD->Q_Q10[ last_smple_idx ], 10 );
-                        pxq[ i - decisionDelay ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( 
-                            SKP_SMULWW( psDD->Xq_Q10[ last_smple_idx ], 
-                            psDD->Gain_Q16[ last_smple_idx ] ), 10 ) );
-                        NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - decisionDelay + i ] = psDD->Shape_Q10[ last_smple_idx ];
-                    }
-
-                    subfr = 0;
-                }
-
-                /* Rewhiten with new A coefs */
-                start_idx = psEncC->frame_length - lag - psEncC->predictLPCOrder - LTP_ORDER / 2;
-                start_idx = SKP_LIMIT( start_idx, 0, psEncC->frame_length - psEncC->predictLPCOrder );
-                
-                SKP_memset( FiltState, 0, psEncC->predictLPCOrder * sizeof( SKP_int32 ) );
-                SKP_Silk_MA_Prediction( &NSQ->xq[ start_idx + k * psEncC->subfr_length ], 
-                    A_Q12, FiltState, sLTP + start_idx, psEncC->frame_length - start_idx, psEncC->predictLPCOrder );
-
-                NSQ->sLTP_buf_idx = psEncC->frame_length;
-                NSQ->rewhite_flag = 1;
-            }
-        }
-
-        /* Noise shape parameters */
-        SKP_assert( HarmShapeGain_Q14[ k ] >= 0 );
-        HarmShapeFIRPacked_Q14  =                        SKP_RSHIFT( HarmShapeGain_Q14[ k ], 2 );
-        HarmShapeFIRPacked_Q14 |= SKP_LSHIFT( ( SKP_int32 )SKP_RSHIFT( HarmShapeGain_Q14[ k ], 1 ), 16 );
-
-        SKP_Silk_nsq_del_dec_scale_states( NSQ, psDelDec, x, x_sc_Q10, 
-            subfr_length, sLTP, sLTP_Q16, k, psEncC->nStatesDelayedDecision, smpl_buf_idx,
-            LTP_scale_Q14, Gains_Q16, psEncCtrlC->pitchL );
-
-        SKP_Silk_noise_shape_quantizer_del_dec( NSQ, psDelDec, psEncCtrlC->sigtype, x_sc_Q10, q, pxq, sLTP_Q16,
-            A_Q12, B_Q14, AR_shp_Q13, lag, HarmShapeFIRPacked_Q14, Tilt_Q14[ k ], LF_shp_Q14[ k ], Gains_Q16[ k ], 
-            Lambda_Q10, offset_Q10, psEncC->subfr_length, subfr++, psEncC->shapingLPCOrder, psEncC->predictLPCOrder, 
-            psEncC->nStatesDelayedDecision, &smpl_buf_idx, decisionDelay 
-        );
-        
-        x   += psEncC->subfr_length;
-        q   += psEncC->subfr_length;
-        pxq += psEncC->subfr_length;
-    }
-
-    /* Find winner */
-    RDmin_Q10 = psDelDec[ 0 ].RD_Q10;
-    Winner_ind = 0;
-    for( k = 1; k < psEncC->nStatesDelayedDecision; k++ ) {
-        if( psDelDec[ k ].RD_Q10 < RDmin_Q10 ) {
-            RDmin_Q10 = psDelDec[ k ].RD_Q10;
-            Winner_ind = k;
-        }
-    }
-    
-    /* Copy final part of signals from winner state to output and long-term filter states */
-    psDD = &psDelDec[ Winner_ind ];
-    psEncCtrlC->Seed = psDD->SeedInit;
-    last_smple_idx = smpl_buf_idx + decisionDelay;
-    for( i = 0; i < decisionDelay; i++ ) {
-        last_smple_idx = ( last_smple_idx - 1 ) & DECISION_DELAY_MASK;
-        q[   i - decisionDelay ] = ( SKP_int )SKP_RSHIFT( psDD->Q_Q10[ last_smple_idx ], 10 );
-        pxq[ i - decisionDelay ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( 
-            SKP_SMULWW( psDD->Xq_Q10[ last_smple_idx ], psDD->Gain_Q16[ last_smple_idx ] ), 10 ) );
-        NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - decisionDelay + i ] = psDD->Shape_Q10[ last_smple_idx ];
-        sLTP_Q16[          NSQ->sLTP_buf_idx     - decisionDelay + i ] = psDD->Pred_Q16[  last_smple_idx ];
-
-    }
-    SKP_memcpy( NSQ->sLPC_Q14, &psDD->sLPC_Q14[ psEncC->subfr_length ], NSQ_LPC_BUF_LENGTH * sizeof( SKP_int32 ) );
-
-    /* Update states */
-    NSQ->sLF_AR_shp_Q12    = psDD->LF_AR_Q12;
-    NSQ->prev_inv_gain_Q16 = NSQ->prev_inv_gain_Q16;
-    NSQ->lagPrev           = psEncCtrlC->pitchL[ NB_SUBFR - 1 ];
-
-    /* Save quantized speech and noise shaping signals */
-    SKP_memcpy( NSQ->xq,           &NSQ->xq[           psEncC->frame_length ], psEncC->frame_length * sizeof( SKP_int16 ) );
-    SKP_memcpy( NSQ->sLTP_shp_Q10, &NSQ->sLTP_shp_Q10[ psEncC->frame_length ], psEncC->frame_length * sizeof( SKP_int32 ) );
-
-}
-
-/******************************************/
-/* Noise shape quantizer for one subframe */
-/******************************************/
-SKP_INLINE void SKP_Silk_noise_shape_quantizer_del_dec(
-    SKP_Silk_nsq_state  *NSQ,                   /* I/O  NSQ state                           */
-    NSQ_del_dec_struct  psDelDec[],             /* I/O  Delayed decision states             */
-    SKP_int             sigtype,                /* I    Signal type                         */
-    const SKP_int32     x_Q10[],                /* I                                        */
-    SKP_int             q[],                    /* O                                        */
-    SKP_int16           xq[],                   /* O                                        */
-    SKP_int32           sLTP_Q16[],             /* I/O  LTP filter state                    */
-    const SKP_int16     a_Q12[],                /* I    Short term prediction coefs         */
-    const SKP_int16     b_Q14[],                /* I    Long term prediction coefs          */
-    const SKP_int16     AR_shp_Q13[],           /* I    Noise shaping coefs                 */
-    SKP_int             lag,                    /* I    Pitch lag                           */
-    SKP_int32           HarmShapeFIRPacked_Q14, /* I                                        */
-    SKP_int             Tilt_Q14,               /* I    Spectral tilt                       */
-    SKP_int32           LF_shp_Q14,             /* I                                        */
-    SKP_int32           Gain_Q16,               /* I                                        */
-    SKP_int             Lambda_Q10,             /* I                                        */
-    SKP_int             offset_Q10,             /* I                                        */
-    SKP_int             length,                 /* I    Input length                        */
-    SKP_int             subfr,                  /* I    Subframe number                     */
-    SKP_int             shapingLPCOrder,        /* I    Shaping LPC filter order            */
-    SKP_int             predictLPCOrder,        /* I    Prediction LPC filter order         */
-    SKP_int             nStatesDelayedDecision, /* I    Number of states in decision tree   */
-    SKP_int             *smpl_buf_idx,          /* I    Index to newest samples in buffers  */
-    SKP_int             decisionDelay           /* I                                        */
-)
-{
-    SKP_int     i, j, k, Winner_ind, RDmin_ind, RDmax_ind, last_smple_idx;
-    SKP_int32   Winner_rand_state;
-    SKP_int32   LTP_pred_Q14, LPC_pred_Q10, n_AR_Q10, n_LTP_Q14;
-    SKP_int32   n_LF_Q10;
-    SKP_int32   r_Q10, rr_Q20, rd1_Q10, rd2_Q10, RDmin_Q10, RDmax_Q10;
-    SKP_int32   q1_Q10, q2_Q10;
-    SKP_int32   Atmp, dither;
-    SKP_int32   exc_Q10, LPC_exc_Q10, xq_Q10;
-    SKP_int32   tmp, sLF_AR_shp_Q10;
-    SKP_int32   *pred_lag_ptr, *shp_lag_ptr;
-    SKP_int32   *psLPC_Q14;
-    SKP_int32   a_Q12_tmp[ MAX_LPC_ORDER / 2 ], AR_shp_Q13_tmp[ MAX_LPC_ORDER / 2 ];
-    NSQ_sample_struct  psSampleState[ DEL_DEC_STATES_MAX ][ 2 ];
-    NSQ_del_dec_struct *psDD;
-    NSQ_sample_struct  *psSS;
-
-    shp_lag_ptr  = &NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - lag + HARM_SHAPE_FIR_TAPS / 2 ];
-    pred_lag_ptr = &sLTP_Q16[ NSQ->sLTP_buf_idx - lag + LTP_ORDER / 2 ];
-    
-    /* Preload LPC coeficients to array on stack. Gives small performance gain */
-    SKP_memcpy( a_Q12_tmp, a_Q12, predictLPCOrder * sizeof( SKP_int16 ) );
-    SKP_memcpy( AR_shp_Q13_tmp, AR_shp_Q13, shapingLPCOrder * sizeof( SKP_int16 ) );
-
-    for( i = 0; i < length; i++ ) {
-        /* Perform common calculations used in all states */
-
-        /* Long-term prediction */
-        if( sigtype == SIG_TYPE_VOICED ) {
-            /* Unrolled loop */
-            LTP_pred_Q14 = SKP_SMULWB(               pred_lag_ptr[  0 ], b_Q14[ 0 ] );
-            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -1 ], b_Q14[ 1 ] );
-            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -2 ], b_Q14[ 2 ] );
-            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -3 ], b_Q14[ 3 ] );
-            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -4 ], b_Q14[ 4 ] );
-            pred_lag_ptr++;
-        } else {
-            LTP_pred_Q14 = 0;
-        }
-
-        /* Long-term shaping */
-        if( lag > 0 ) {
-            /* Symmetric, packed FIR coefficients */
-            n_LTP_Q14 = SKP_SMULWB( SKP_ADD32( shp_lag_ptr[ 0 ], shp_lag_ptr[ -2 ] ), HarmShapeFIRPacked_Q14 );
-            n_LTP_Q14 = SKP_SMLAWT( n_LTP_Q14, shp_lag_ptr[ -1 ],                     HarmShapeFIRPacked_Q14 );
-            n_LTP_Q14 = SKP_LSHIFT( n_LTP_Q14, 6 );
-            shp_lag_ptr++;
-        } else {
-            n_LTP_Q14 = 0;
-        }
-
-        for( k = 0; k < nStatesDelayedDecision; k++ ) {
-            /* Delayed decision state */
-            psDD = &psDelDec[ k ];
-
-            /* Sample state */
-            psSS = psSampleState[ k ];
-
-            /* Generate dither */
-            psDD->Seed = SKP_RAND( psDD->Seed );
-
-            /* dither = rand_seed < 0 ? 0xFFFFFFFF : 0; */
-            dither = SKP_RSHIFT( psDD->Seed, 31 );
-            
-            /* Pointer used in short term prediction and shaping */
-            psLPC_Q14 = &psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - 1 + i ];
-            /* Short-term prediction */
-            SKP_assert( ( predictLPCOrder  & 1 ) == 0 );    /* check that order is even */
-            SKP_assert( ( (SKP_int64)a_Q12 & 3 ) == 0 );    /* check that array starts at 4-byte aligned address */
-            SKP_assert( predictLPCOrder >= 10 );            /* check that unrolling works */
-
-            /* Partially unrolled */
-            Atmp = a_Q12_tmp[ 0 ];          /* read two coefficients at once */
-            LPC_pred_Q10 = SKP_SMULWB(               psLPC_Q14[ 0  ], Atmp );
-            LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -1 ], Atmp );
-            Atmp = a_Q12_tmp[ 1 ];
-            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -2 ], Atmp );
-            LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -3 ], Atmp );
-            Atmp = a_Q12_tmp[ 2 ];
-            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -4 ], Atmp );
-            LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -5 ], Atmp );
-            Atmp = a_Q12_tmp[ 3 ];
-            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -6 ], Atmp );
-            LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -7 ], Atmp );
-            Atmp = a_Q12_tmp[ 4 ];
-            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -8 ], Atmp );
-            LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -9 ], Atmp );
-            for( j = 10; j < predictLPCOrder; j += 2 ) {
-                Atmp = a_Q12_tmp[ j >> 1 ]; /* read two coefficients at once */
-                LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -j     ], Atmp );
-                LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psLPC_Q14[ -j - 1 ], Atmp );
-            }
-
-            /* Noise shape feedback */
-            SKP_assert( ( shapingLPCOrder       & 1 ) == 0 );   /* check that order is even */
-            SKP_assert( ( (SKP_int64)AR_shp_Q13 & 3 ) == 0 );   /* check that array starts at 4-byte aligned address */
-            SKP_assert( shapingLPCOrder >= 12 );                /* check that unrolling works */
-            /* NOTE: the code below loads two int16 values in an int32, and multiplies each using the   */
-            /* SMLAWB and SMLAWT instructions. On a big-endian CPU the two int16 variables would be     */
-            /* loaded in reverse order and the code will give the wrong result. In that case swapping   */
-            /* the SMLAWB and SMLAWT instructions should solve the problem.                             */
-
-            /* Partially unrolled */
-            Atmp = AR_shp_Q13_tmp[ 0 ];         /* read two coefficients at once */
-            n_AR_Q10 = SKP_SMULWB(           psLPC_Q14[ 0  ], Atmp );
-            n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -1 ], Atmp );
-            Atmp = AR_shp_Q13_tmp[ 1 ];
-            n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -2 ], Atmp );
-            n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -3 ], Atmp );
-            Atmp = AR_shp_Q13_tmp[ 2 ];
-            n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -4 ], Atmp );
-            n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -5 ], Atmp );
-            Atmp = AR_shp_Q13_tmp[ 3 ];
-            n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -6 ], Atmp );
-            n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -7 ], Atmp );
-            Atmp = AR_shp_Q13_tmp[ 4 ];
-            n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -8 ], Atmp );
-            n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -9 ], Atmp );
-            Atmp = AR_shp_Q13_tmp[ 5 ];
-            n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -10 ], Atmp );
-            n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -11 ], Atmp );
-            for( j = 12; j < shapingLPCOrder; j += 2 ) {
-                Atmp = AR_shp_Q13_tmp[ j >> 1 ];        /* read two coefficients at once */
-                n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psLPC_Q14[ -j     ], Atmp );
-                n_AR_Q10 = SKP_SMLAWT( n_AR_Q10, psLPC_Q14[ -j - 1 ], Atmp );
-            }
-            n_AR_Q10 = SKP_RSHIFT( n_AR_Q10, 1 );           /* Q11 -> Q10 */
-            n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psDD->LF_AR_Q12, Tilt_Q14 );
-
-            n_LF_Q10   = SKP_LSHIFT( SKP_SMULWB( psDD->Shape_Q10[ *smpl_buf_idx ], LF_shp_Q14 ), 2 ); 
-            n_LF_Q10   = SKP_SMLAWT( n_LF_Q10, psDD->LF_AR_Q12, LF_shp_Q14 );       
-
-            /* Input minus prediction plus noise feedback                       */
-            /* r = x[ i ] - LTP_pred - LPC_pred + n_AR + n_Tilt + n_LF + n_LTP  */
-            tmp   = SKP_SUB32( LTP_pred_Q14, n_LTP_Q14 );                       /* Add Q14 stuff */
-            tmp   = SKP_RSHIFT_ROUND( tmp, 4 );                                 /* round to Q10  */
-            tmp   = SKP_ADD32( tmp, LPC_pred_Q10 );                             /* add Q10 stuff */ 
-            tmp   = SKP_SUB32( tmp, n_AR_Q10 );                                 /* subtract Q10 stuff */ 
-            tmp   = SKP_SUB32( tmp, n_LF_Q10 );                                 /* subtract Q10 stuff */ 
-            r_Q10 = SKP_SUB32( x_Q10[ i ], tmp );                               /* residual error Q10 */
-            
-
-            /* Flip sign depending on dither */
-            r_Q10 = ( r_Q10 ^ dither ) - dither;
-            r_Q10 = SKP_SUB32( r_Q10, offset_Q10 );
-            r_Q10 = SKP_LIMIT( r_Q10, -64 << 10, 64 << 10 );
-
-            /* Find two quantization level candidates and measure their rate-distortion */
-            if( r_Q10 < -1536 ) {
-                q1_Q10  = SKP_LSHIFT( SKP_RSHIFT_ROUND( r_Q10, 10 ), 10 );
-                r_Q10   = SKP_SUB32( r_Q10, q1_Q10 );
-                rd1_Q10 = SKP_RSHIFT( SKP_SMLABB( SKP_MUL( -SKP_ADD32( q1_Q10, offset_Q10 ), Lambda_Q10 ), r_Q10, r_Q10 ), 10 );
-                rd2_Q10 = SKP_ADD32( rd1_Q10, 1024 );
-                rd2_Q10 = SKP_SUB32( rd2_Q10, SKP_ADD_LSHIFT32( Lambda_Q10, r_Q10, 1 ) );
-                q2_Q10  = SKP_ADD32( q1_Q10, 1024 );
-            } else if( r_Q10 > 512 ) {
-                q1_Q10  = SKP_LSHIFT( SKP_RSHIFT_ROUND( r_Q10, 10 ), 10 );
-                r_Q10   = SKP_SUB32( r_Q10, q1_Q10 );
-                rd1_Q10 = SKP_RSHIFT( SKP_SMLABB( SKP_MUL( SKP_ADD32( q1_Q10, offset_Q10 ), Lambda_Q10 ), r_Q10, r_Q10 ), 10 );
-                rd2_Q10 = SKP_ADD32( rd1_Q10, 1024 );
-                rd2_Q10 = SKP_SUB32( rd2_Q10, SKP_SUB_LSHIFT32( Lambda_Q10, r_Q10, 1 ) );
-                q2_Q10  = SKP_SUB32( q1_Q10, 1024 );
-            } else {            /* r_Q10 >= -1536 && q1_Q10 <= 512 */
-                rr_Q20  = SKP_SMULBB( offset_Q10, Lambda_Q10 );
-                rd2_Q10 = SKP_RSHIFT( SKP_SMLABB( rr_Q20, r_Q10, r_Q10 ), 10 );
-                rd1_Q10 = SKP_ADD32( rd2_Q10, 1024 );
-                rd1_Q10 = SKP_ADD32( rd1_Q10, SKP_SUB_RSHIFT32( SKP_ADD_LSHIFT32( Lambda_Q10, r_Q10, 1 ), rr_Q20, 9 ) );
-                q1_Q10  = -1024;
-                q2_Q10  = 0;
-            }
-
-            if( rd1_Q10 < rd2_Q10 ) {
-                psSS[ 0 ].RD_Q10 = SKP_ADD32( psDD->RD_Q10, rd1_Q10 ); 
-                psSS[ 1 ].RD_Q10 = SKP_ADD32( psDD->RD_Q10, rd2_Q10 );
-                psSS[ 0 ].Q_Q10 = q1_Q10;
-                psSS[ 1 ].Q_Q10 = q2_Q10;
-            } else {
-                psSS[ 0 ].RD_Q10 = SKP_ADD32( psDD->RD_Q10, rd2_Q10 );
-                psSS[ 1 ].RD_Q10 = SKP_ADD32( psDD->RD_Q10, rd1_Q10 );
-                psSS[ 0 ].Q_Q10 = q2_Q10;
-                psSS[ 1 ].Q_Q10 = q1_Q10;
-            }
-
-            /* Update states for best quantization */
-
-            /* Quantized excitation */
-            exc_Q10 = SKP_ADD32( offset_Q10, psSS[ 0 ].Q_Q10 );
-            exc_Q10 = ( exc_Q10 ^ dither ) - dither;
-
-            /* Add predictions */
-            LPC_exc_Q10 = exc_Q10 + SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 );
-            xq_Q10      = SKP_ADD32( LPC_exc_Q10, LPC_pred_Q10 );
-
-            /* Update states */
-            sLF_AR_shp_Q10         = SKP_SUB32(  xq_Q10, n_AR_Q10 );
-            psSS[ 0 ].sLTP_shp_Q10 = SKP_SUB32(  sLF_AR_shp_Q10, n_LF_Q10 );
-            psSS[ 0 ].LF_AR_Q12    = SKP_LSHIFT( sLF_AR_shp_Q10, 2 );
-            psSS[ 0 ].xq_Q14       = SKP_LSHIFT( xq_Q10,         4 );
-            psSS[ 0 ].LPC_exc_Q16  = SKP_LSHIFT( LPC_exc_Q10,    6 );
-
-            /* Update states for second best quantization */
-
-            /* Quantized excitation */
-            exc_Q10 = SKP_ADD32( offset_Q10, psSS[ 1 ].Q_Q10 );
-            exc_Q10 = ( exc_Q10 ^ dither ) - dither;
-
-            /* Add predictions */
-            LPC_exc_Q10 = exc_Q10 + SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 );
-            xq_Q10      = SKP_ADD32( LPC_exc_Q10, LPC_pred_Q10 );
-
-            /* Update states */
-            sLF_AR_shp_Q10         = SKP_SUB32(  xq_Q10, n_AR_Q10 );
-            psSS[ 1 ].sLTP_shp_Q10 = SKP_SUB32(  sLF_AR_shp_Q10, n_LF_Q10 );
-            psSS[ 1 ].LF_AR_Q12    = SKP_LSHIFT( sLF_AR_shp_Q10, 2 );
-            psSS[ 1 ].xq_Q14       = SKP_LSHIFT( xq_Q10,         4 );
-            psSS[ 1 ].LPC_exc_Q16  = SKP_LSHIFT( LPC_exc_Q10,    6 );
-        }
-
-        *smpl_buf_idx  = ( *smpl_buf_idx - 1 ) & DECISION_DELAY_MASK;                   /* Index to newest samples              */
-        last_smple_idx = ( *smpl_buf_idx + decisionDelay ) & DECISION_DELAY_MASK;       /* Index to decisionDelay old samples   */
-
-        /* Find winner */
-        RDmin_Q10 = psSampleState[ 0 ][ 0 ].RD_Q10;
-        Winner_ind = 0;
-        for( k = 1; k < nStatesDelayedDecision; k++ ) {
-            if( psSampleState[ k ][ 0 ].RD_Q10 < RDmin_Q10 ) {
-                RDmin_Q10   = psSampleState[ k ][ 0 ].RD_Q10;
-                Winner_ind = k;
-            }
-        }
-
-        /* Increase RD values of expired states */
-        Winner_rand_state = psDelDec[ Winner_ind ].RandState[ last_smple_idx ];
-        for( k = 0; k < nStatesDelayedDecision; k++ ) {
-            if( psDelDec[ k ].RandState[ last_smple_idx ] != Winner_rand_state ) {
-                psSampleState[ k ][ 0 ].RD_Q10 = SKP_ADD32( psSampleState[ k ][ 0 ].RD_Q10, ( SKP_int32_MAX >> 4 ) );
-                psSampleState[ k ][ 1 ].RD_Q10 = SKP_ADD32( psSampleState[ k ][ 1 ].RD_Q10, ( SKP_int32_MAX >> 4 ) );
-                SKP_assert( psSampleState[ k ][ 0 ].RD_Q10 >= 0 );
-            }
-        }
-
-        /* Find worst in first set and best in second set */
-        RDmax_Q10  = psSampleState[ 0 ][ 0 ].RD_Q10;
-        RDmin_Q10  = psSampleState[ 0 ][ 1 ].RD_Q10;
-        RDmax_ind = 0;
-        RDmin_ind = 0;
-        for( k = 1; k < nStatesDelayedDecision; k++ ) {
-            /* find worst in first set */
-            if( psSampleState[ k ][ 0 ].RD_Q10 > RDmax_Q10 ) {
-                RDmax_Q10  = psSampleState[ k ][ 0 ].RD_Q10;
-                RDmax_ind = k;
-            }
-            /* find best in second set */
-            if( psSampleState[ k ][ 1 ].RD_Q10 < RDmin_Q10 ) {
-                RDmin_Q10  = psSampleState[ k ][ 1 ].RD_Q10;
-                RDmin_ind = k;
-            }
-        }
-
-        /* Replace a state if best from second set outperforms worst in first set */
-        if( RDmin_Q10 < RDmax_Q10 ) {
-            SKP_Silk_copy_del_dec_state( &psDelDec[ RDmax_ind ], &psDelDec[ RDmin_ind ], i ); 
-            SKP_memcpy( &psSampleState[ RDmax_ind ][ 0 ], &psSampleState[ RDmin_ind ][ 1 ], sizeof( NSQ_sample_struct ) );
-        }
-
-        /* Write samples from winner to output and long-term filter states */
-        psDD = &psDelDec[ Winner_ind ];
-        if( subfr > 0 || i >= decisionDelay ) {
-            q[  i - decisionDelay ] = ( SKP_int )SKP_RSHIFT( psDD->Q_Q10[ last_smple_idx ], 10 );
-            xq[ i - decisionDelay ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( 
-                SKP_SMULWW( psDD->Xq_Q10[ last_smple_idx ], psDD->Gain_Q16[ last_smple_idx ] ), 10 ) );
-            NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - decisionDelay ] = psDD->Shape_Q10[ last_smple_idx ];
-            sLTP_Q16[          NSQ->sLTP_buf_idx     - decisionDelay ] = psDD->Pred_Q16[  last_smple_idx ];
-        }
-        NSQ->sLTP_shp_buf_idx++;
-        NSQ->sLTP_buf_idx++;
-
-        /* Update states */
-        for( k = 0; k < nStatesDelayedDecision; k++ ) {
-            psDD                                     = &psDelDec[ k ];
-            psSS                                     = &psSampleState[ k ][ 0 ];
-            psDD->LF_AR_Q12                          = psSS->LF_AR_Q12;
-            psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH + i ] = psSS->xq_Q14;
-            psDD->Xq_Q10[    *smpl_buf_idx ]         = SKP_RSHIFT( psSS->xq_Q14, 4 );
-            psDD->Q_Q10[     *smpl_buf_idx ]         = psSS->Q_Q10;
-            psDD->Pred_Q16[  *smpl_buf_idx ]         = psSS->LPC_exc_Q16;
-            psDD->Shape_Q10[ *smpl_buf_idx ]         = psSS->sLTP_shp_Q10;
-            psDD->Seed                               = SKP_ADD_RSHIFT32( psDD->Seed, psSS->Q_Q10, 10 );
-            psDD->RandState[ *smpl_buf_idx ]         = psDD->Seed;
-            psDD->RD_Q10                             = psSS->RD_Q10;
-            psDD->Gain_Q16[  *smpl_buf_idx ]         = Gain_Q16;
-        }
-    }
-    /* Update LPC states */
-    for( k = 0; k < nStatesDelayedDecision; k++ ) {
-        psDD = &psDelDec[ k ];
-        SKP_memcpy( psDD->sLPC_Q14, &psDD->sLPC_Q14[ length ], NSQ_LPC_BUF_LENGTH * sizeof( SKP_int32 ) );
-    }
-}
-
-SKP_INLINE void SKP_Silk_nsq_del_dec_scale_states(
-    SKP_Silk_nsq_state  *NSQ,                   /* I/O  NSQ state                           */
-    NSQ_del_dec_struct  psDelDec[],             /* I/O  Delayed decision states             */
-    const SKP_int16     x[],                    /* I    Input in Q0                         */
-    SKP_int32           x_sc_Q10[],             /* O    Input scaled with 1/Gain in Q10     */
-    SKP_int             length,                 /* I    Length of input                     */
-    SKP_int16           sLTP[],                 /* I    Re-whitened LTP state in Q0         */
-    SKP_int32           sLTP_Q16[],             /* O    LTP state matching scaled input     */
-    SKP_int             subfr,                  /* I    Subframe number                     */
-    SKP_int             nStatesDelayedDecision, /* I    Number of del dec states            */
-    SKP_int             smpl_buf_idx,           /* I    Index to newest samples in buffers  */
-    const SKP_int       LTP_scale_Q14,          /* I    LTP state scaling                   */
-    const SKP_int32     Gains_Q16[ NB_SUBFR ],  /* I                                        */
-    const SKP_int       pitchL[ NB_SUBFR ]      /* I    Pitch lag                           */
-)
-{
-    SKP_int            i, k, scale_length, lag;
-    SKP_int32          inv_gain_Q16, gain_adj_Q16, inv_gain_Q32;
-    NSQ_del_dec_struct *psDD;
-
-    inv_gain_Q16 = SKP_DIV32( SKP_int32_MAX, SKP_RSHIFT( Gains_Q16[ subfr ], 1 ) );
-    inv_gain_Q16 = SKP_min( inv_gain_Q16, SKP_int16_MAX );
-    lag          = pitchL[ subfr ];
-    /* After rewhitening the LTP state is un-scaled. So scale with inv_gain_Q16 */
-    if( NSQ->rewhite_flag ) {
-        inv_gain_Q32 = SKP_LSHIFT( inv_gain_Q16, 16 );
-        if( subfr == 0 ) {
-            /* Do LTP downscaling */
-            inv_gain_Q32 = SKP_LSHIFT( SKP_SMULWB( inv_gain_Q32, LTP_scale_Q14 ), 2 );
-        }
-        for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) {
-            SKP_assert( i < MAX_FRAME_LENGTH );
-            sLTP_Q16[ i ] = SKP_SMULWB( inv_gain_Q32, sLTP[ i ] );
-        }
-    }
-
-    /* Adjust for changing gain */
-    if( inv_gain_Q16 != NSQ->prev_inv_gain_Q16 ) {
-        gain_adj_Q16 = SKP_DIV32_varQ( inv_gain_Q16, NSQ->prev_inv_gain_Q16, 16 );
-
-        for( k = 0; k < nStatesDelayedDecision; k++ ) {
-            psDD = &psDelDec[ k ];
-            
-            /* Scale scalar states */
-            psDD->LF_AR_Q12 = SKP_SMULWW( gain_adj_Q16, psDD->LF_AR_Q12 );
-            
-            /* scale short term state */
-            for( i = 0; i < NSQ_LPC_BUF_LENGTH; i++ ) {
-                psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - i - 1 ] = SKP_SMULWW( gain_adj_Q16, psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - i - 1 ] );
-            }
-            for( i = 0; i < DECISION_DELAY; i++ ) {
-                psDD->Pred_Q16[  i ] = SKP_SMULWW( gain_adj_Q16, psDD->Pred_Q16[  i ] );
-                psDD->Shape_Q10[ i ] = SKP_SMULWW( gain_adj_Q16, psDD->Shape_Q10[ i ] );
-            }
-        }
-
-        /* Scale long term shaping state */
-
-        /* Calculate length to be scaled, Worst case: Next frame is voiced with max lag */
-        scale_length = length * NB_SUBFR;                                               /* aprox max lag */
-        scale_length = scale_length - SKP_SMULBB( NB_SUBFR - ( subfr + 1 ), length );   /* subtract samples that will be too old in next frame */
-        scale_length = SKP_max_int( scale_length, lag + LTP_ORDER );                    /* make sure to scale whole pitch period if voiced */
-
-        for( i = NSQ->sLTP_shp_buf_idx - scale_length; i < NSQ->sLTP_shp_buf_idx; i++ ) {
-            NSQ->sLTP_shp_Q10[ i ] = SKP_SMULWW( gain_adj_Q16, NSQ->sLTP_shp_Q10[ i ] );
-        }
-
-        /* Scale LTP predict state */
-        if( NSQ->rewhite_flag == 0 ) {
-            for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) {
-                sLTP_Q16[ i ] = SKP_SMULWW( gain_adj_Q16, sLTP_Q16[ i ] );
-            }
-        }
-    }
-
-    /* Scale input */
-    for( i = 0; i < length; i++ ) {
-        x_sc_Q10[ i ] = SKP_RSHIFT( SKP_SMULBB( x[ i ], ( SKP_int16 )inv_gain_Q16 ), 6 );
-    }
-
-    /* save inv_gain */
-    SKP_assert( inv_gain_Q16 != 0 );
-    NSQ->prev_inv_gain_Q16 = inv_gain_Q16;
-}
-
-SKP_INLINE void SKP_Silk_copy_del_dec_state(
-    NSQ_del_dec_struct  *DD_dst,                /* I    Dst del dec state                   */
-    NSQ_del_dec_struct  *DD_src,                /* I    Src del dec state                   */
-    SKP_int             LPC_state_idx           /* I    Index to LPC buffer                 */
-)
-{
-    SKP_memcpy( DD_dst->RandState, DD_src->RandState,   DECISION_DELAY * sizeof( SKP_int   ) );
-    SKP_memcpy( DD_dst->Q_Q10,     DD_src->Q_Q10,       DECISION_DELAY * sizeof( SKP_int32 ) );
-    SKP_memcpy( DD_dst->Pred_Q16,  DD_src->Pred_Q16,    DECISION_DELAY * sizeof( SKP_int32 ) );
-    SKP_memcpy( DD_dst->Shape_Q10, DD_src->Shape_Q10,   DECISION_DELAY * sizeof( SKP_int32 ) );
-    SKP_memcpy( DD_dst->Xq_Q10,    DD_src->Xq_Q10,      DECISION_DELAY * sizeof( SKP_int32 ) );
-
-    SKP_memcpy( &DD_dst->sLPC_Q14[ LPC_state_idx ], &DD_src->sLPC_Q14[ LPC_state_idx ], NSQ_LPC_BUF_LENGTH * sizeof( SKP_int32 ) );
-    DD_dst->LF_AR_Q12 = DD_src->LF_AR_Q12;
-    DD_dst->Seed      = DD_src->Seed;
-    DD_dst->SeedInit  = DD_src->SeedInit;
-    DD_dst->RD_Q10    = DD_src->RD_Q10;
-}
--- a/src/SKP_Silk_PLC.c
+++ /dev/null
@@ -1,389 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-#include "SKP_Silk_PLC.h"
-
-#define NB_ATT 2
-static const SKP_int16 HARM_ATT_Q15[NB_ATT]              = { 32440, 31130 }; /* 0.99, 0.95 */
-static const SKP_int16 PLC_RAND_ATTENUATE_V_Q15[NB_ATT]  = { 31130, 26214 }; /* 0.95, 0.8 */
-static const SKP_int16 PLC_RAND_ATTENUATE_UV_Q15[NB_ATT] = { 32440, 29491 }; /* 0.99, 0.9 */
-
-void SKP_Silk_PLC_Reset(
-    SKP_Silk_decoder_state      *psDec              /* I/O Decoder state        */
-)
-{
-    psDec->sPLC.pitchL_Q8 = SKP_RSHIFT( psDec->frame_length, 1 );
-}
-
-void SKP_Silk_PLC(
-    SKP_Silk_decoder_state      *psDec,             /* I Decoder state          */
-    SKP_Silk_decoder_control    *psDecCtrl,         /* I Decoder control        */
-    SKP_int16                   signal[],           /* O Concealed signal       */
-    SKP_int                     length,             /* I length of residual     */
-    SKP_int                     lost                /* I Loss flag              */
-)
-{
-    /* PLC control function */
-    if( psDec->fs_kHz != psDec->sPLC.fs_kHz ) {
-        SKP_Silk_PLC_Reset( psDec );
-        psDec->sPLC.fs_kHz = psDec->fs_kHz;
-    }
-
-    if( lost ) {
-        /****************************/
-        /* Generate Signal          */
-        /****************************/
-        SKP_Silk_PLC_conceal( psDec, psDecCtrl, signal, length );
-    } else {
-        /****************************/
-        /* Update state             */
-        /****************************/
-        SKP_Silk_PLC_update( psDec, psDecCtrl, signal, length );
-    }
-}
-
-/**************************************************/
-/* Update state of PLC                            */
-/**************************************************/
-void SKP_Silk_PLC_update(
-    SKP_Silk_decoder_state      *psDec,             /* (I/O) Decoder state          */
-    SKP_Silk_decoder_control    *psDecCtrl,         /* (I/O) Decoder control        */
-    SKP_int16                   signal[],
-    SKP_int                     length
-)
-{
-    SKP_int32 LTP_Gain_Q14, temp_LTP_Gain_Q14;
-    SKP_int   i, j;
-    SKP_Silk_PLC_struct *psPLC;
-
-    psPLC = &psDec->sPLC;
-
-    /* Update parameters used in case of packet loss */
-    psDec->prev_sigtype = psDecCtrl->sigtype;
-    LTP_Gain_Q14 = 0;
-    if( psDecCtrl->sigtype == SIG_TYPE_VOICED ) {
-        /* Find the parameters for the last subframe which contains a pitch pulse */
-        for( j = 0; j * psDec->subfr_length  < psDecCtrl->pitchL[ NB_SUBFR - 1 ]; j++ ) {
-            temp_LTP_Gain_Q14 = 0;
-            for( i = 0; i < LTP_ORDER; i++ ) {
-                temp_LTP_Gain_Q14 += psDecCtrl->LTPCoef_Q14[ ( NB_SUBFR - 1 - j ) * LTP_ORDER  + i ];
-            }
-            if( temp_LTP_Gain_Q14 > LTP_Gain_Q14 ) {
-                LTP_Gain_Q14 = temp_LTP_Gain_Q14;
-                SKP_memcpy( psPLC->LTPCoef_Q14,
-                    &psDecCtrl->LTPCoef_Q14[ SKP_SMULBB( NB_SUBFR - 1 - j, LTP_ORDER ) ],
-                    LTP_ORDER * sizeof( SKP_int16 ) );
-
-                psPLC->pitchL_Q8 = SKP_LSHIFT( psDecCtrl->pitchL[ NB_SUBFR - 1 - j ], 8 );
-            }
-        }
-
-#if USE_SINGLE_TAP
-        SKP_memset( psPLC->LTPCoef_Q14, 0, LTP_ORDER * sizeof( SKP_int16 ) );
-        psPLC->LTPCoef_Q14[ LTP_ORDER / 2 ] = LTP_Gain_Q14;
-#endif
-
-        /* Limit LT coefs */
-        if( LTP_Gain_Q14 < V_PITCH_GAIN_START_MIN_Q14 ) {
-            SKP_int   scale_Q10;
-            SKP_int32 tmp;
-
-            tmp = SKP_LSHIFT( V_PITCH_GAIN_START_MIN_Q14, 10 );
-            scale_Q10 = SKP_DIV32( tmp, SKP_max( LTP_Gain_Q14, 1 ) );
-            for( i = 0; i < LTP_ORDER; i++ ) {
-                psPLC->LTPCoef_Q14[ i ] = SKP_RSHIFT( SKP_SMULBB( psPLC->LTPCoef_Q14[ i ], scale_Q10 ), 10 );
-            }
-        } else if( LTP_Gain_Q14 > V_PITCH_GAIN_START_MAX_Q14 ) {
-            SKP_int   scale_Q14;
-            SKP_int32 tmp;
-
-            tmp = SKP_LSHIFT( V_PITCH_GAIN_START_MAX_Q14, 14 );
-            scale_Q14 = SKP_DIV32( tmp, SKP_max( LTP_Gain_Q14, 1 ) );
-            for( i = 0; i < LTP_ORDER; i++ ) {
-                psPLC->LTPCoef_Q14[ i ] = SKP_RSHIFT( SKP_SMULBB( psPLC->LTPCoef_Q14[ i ], scale_Q14 ), 14 );
-            }
-        }
-    } else {
-        psPLC->pitchL_Q8 = SKP_LSHIFT( SKP_SMULBB( psDec->fs_kHz, 18 ), 8 );
-        SKP_memset( psPLC->LTPCoef_Q14, 0, LTP_ORDER * sizeof( SKP_int16 ));
-    }
-
-    /* Save LPC coeficients */
-    SKP_memcpy( psPLC->prevLPC_Q12, psDecCtrl->PredCoef_Q12[ 1 ], psDec->LPC_order * sizeof( SKP_int16 ) );
-    psPLC->prevLTP_scale_Q14 = psDecCtrl->LTP_scale_Q14;
-
-    /* Save Gains */
-    SKP_memcpy( psPLC->prevGain_Q16, psDecCtrl->Gains_Q16, NB_SUBFR * sizeof( SKP_int32 ) );
-}
-
-void SKP_Silk_PLC_conceal(
-    SKP_Silk_decoder_state      *psDec,             /* I/O Decoder state */
-    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O Decoder control */
-    SKP_int16                   signal[],           /* O concealed signal */
-    SKP_int                     length              /* I length of residual */
-)
-{
-    SKP_int   i, j, k;
-    SKP_int16 *B_Q14, exc_buf[ MAX_FRAME_LENGTH ], *exc_buf_ptr;
-    SKP_int16 rand_scale_Q14, A_Q12_tmp[ MAX_LPC_ORDER ];
-    SKP_int32 rand_seed, harm_Gain_Q15, rand_Gain_Q15;
-    SKP_int   lag, idx, shift1, shift2;
-    SKP_int32 energy1, energy2, *rand_ptr, *pred_lag_ptr, Atmp;
-    SKP_int32 sig_Q10[ MAX_FRAME_LENGTH ], *sig_Q10_ptr, LPC_exc_Q10, LPC_pred_Q10,  LTP_pred_Q14;
-    SKP_Silk_PLC_struct *psPLC;
-
-    psPLC = &psDec->sPLC;
-
-    /* Update LTP buffer */
-    SKP_memcpy( psDec->sLTP_Q16, &psDec->sLTP_Q16[ psDec->frame_length ], psDec->frame_length * sizeof( SKP_int32 ) );
-
-    /* LPC concealment. Apply BWE to previous LPC */
-    SKP_Silk_bwexpander( psPLC->prevLPC_Q12, psDec->LPC_order, BWE_COEF_Q16 );
-
-    /* Find random noise component */
-    /* Scale previous excitation signal */
-    exc_buf_ptr = exc_buf;
-    for( k = ( NB_SUBFR >> 1 ); k < NB_SUBFR; k++ ) {
-        for( i = 0; i < psDec->subfr_length; i++ ) {
-            exc_buf_ptr[ i ] = ( SKP_int16 )SKP_RSHIFT( 
-                SKP_SMULWW( psDec->exc_Q10[ i + k * psDec->subfr_length ], psPLC->prevGain_Q16[ k ] ), 10 );
-        }
-        exc_buf_ptr += psDec->subfr_length;
-    }
-    /* Find the subframe with lowest energy of the last two and use that as random noise generator */ 
-    SKP_Silk_sum_sqr_shift( &energy1, &shift1, exc_buf,                         psDec->subfr_length );
-    SKP_Silk_sum_sqr_shift( &energy2, &shift2, &exc_buf[ psDec->subfr_length ], psDec->subfr_length );
-        
-    if( SKP_RSHIFT( energy1, shift2 ) < SKP_RSHIFT( energy1, shift2 ) ) {
-        /* First sub-frame has lowest energy */
-        rand_ptr = &psDec->exc_Q10[ SKP_max_int( 0, 3 * psDec->subfr_length - RAND_BUF_SIZE ) ];
-    } else {
-        /* Second sub-frame has lowest energy */
-        rand_ptr = &psDec->exc_Q10[ SKP_max_int( 0, psDec->frame_length - RAND_BUF_SIZE ) ];
-    }
-
-    /* Setup Gain to random noise component */ 
-    B_Q14          = psPLC->LTPCoef_Q14;
-    rand_scale_Q14 = psPLC->randScale_Q14;
-
-    /* Setup attenuation gains */
-    harm_Gain_Q15 = HARM_ATT_Q15[ SKP_min_int( NB_ATT - 1, psDec->lossCnt ) ];
-    if( psDec->prev_sigtype == SIG_TYPE_VOICED ) {
-        rand_Gain_Q15 = PLC_RAND_ATTENUATE_V_Q15[  SKP_min_int( NB_ATT - 1, psDec->lossCnt ) ];
-    } else {
-        rand_Gain_Q15 = PLC_RAND_ATTENUATE_UV_Q15[ SKP_min_int( NB_ATT - 1, psDec->lossCnt ) ];
-    }
-
-    /* First Lost frame */
-    if( psDec->lossCnt == 0 ) {
-        rand_scale_Q14 = (1 << 14 );
-    
-        /* Reduce random noise Gain for voiced frames */
-        if( psDec->prev_sigtype == SIG_TYPE_VOICED ) {
-            for( i = 0; i < LTP_ORDER; i++ ) {
-                rand_scale_Q14 -= B_Q14[ i ];
-            }
-            rand_scale_Q14 = SKP_max_16( 3277, rand_scale_Q14 ); /* 0.2 */
-            rand_scale_Q14 = ( SKP_int16 )SKP_RSHIFT( SKP_SMULBB( rand_scale_Q14, psPLC->prevLTP_scale_Q14 ), 14 );
-        }
-
-        /* Reduce random noise for unvoiced frames with high LPC gain */
-        if( psDec->prev_sigtype == SIG_TYPE_UNVOICED ) {
-            SKP_int32 invGain_Q30, down_scale_Q30;
-            
-            SKP_Silk_LPC_inverse_pred_gain( &invGain_Q30, psPLC->prevLPC_Q12, psDec->LPC_order );
-            
-            down_scale_Q30 = SKP_min_32( SKP_RSHIFT( ( 1 << 30 ), LOG2_INV_LPC_GAIN_HIGH_THRES ), invGain_Q30 );
-            down_scale_Q30 = SKP_max_32( SKP_RSHIFT( ( 1 << 30 ), LOG2_INV_LPC_GAIN_LOW_THRES ), down_scale_Q30 );
-            down_scale_Q30 = SKP_LSHIFT( down_scale_Q30, LOG2_INV_LPC_GAIN_HIGH_THRES );
-            
-            rand_Gain_Q15 = SKP_RSHIFT( SKP_SMULWB( down_scale_Q30, rand_Gain_Q15 ), 14 );
-        }
-    }
-
-    rand_seed           = psPLC->rand_seed;
-    lag                 = SKP_RSHIFT_ROUND( psPLC->pitchL_Q8, 8 );
-    psDec->sLTP_buf_idx = psDec->frame_length;
-
-    /***************************/
-    /* LTP synthesis filtering */
-    /***************************/
-    sig_Q10_ptr = sig_Q10;
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        /* Setup pointer */
-        pred_lag_ptr = &psDec->sLTP_Q16[ psDec->sLTP_buf_idx - lag + LTP_ORDER / 2 ];
-        for( i = 0; i < psDec->subfr_length; i++ ) {
-            rand_seed = SKP_RAND( rand_seed );
-            idx = SKP_RSHIFT( rand_seed, 25 ) & RAND_BUF_MASK;
-
-            /* Unrolled loop */
-            LTP_pred_Q14 = SKP_SMULWB(               pred_lag_ptr[  0 ], B_Q14[ 0 ] );
-            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -1 ], B_Q14[ 1 ] );
-            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -2 ], B_Q14[ 2 ] );
-            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -3 ], B_Q14[ 3 ] );
-            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -4 ], B_Q14[ 4 ] );
-            pred_lag_ptr++;
-            
-            /* Generate LPC residual */
-            LPC_exc_Q10 = SKP_LSHIFT( SKP_SMULWB( rand_ptr[ idx ], rand_scale_Q14 ), 2 ); /* Random noise part */
-            LPC_exc_Q10 = SKP_ADD32( LPC_exc_Q10, SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 ) );  /* Harmonic part */
-            
-            /* Update states */
-            psDec->sLTP_Q16[ psDec->sLTP_buf_idx ] = SKP_LSHIFT( LPC_exc_Q10, 6 );
-            psDec->sLTP_buf_idx++;
-                
-            /* Save LPC residual */
-            sig_Q10_ptr[ i ] = LPC_exc_Q10;
-        }
-        sig_Q10_ptr += psDec->subfr_length;
-        /* Gradually reduce LTP gain */
-        for( j = 0; j < LTP_ORDER; j++ ) {
-            B_Q14[ j ] = SKP_RSHIFT( SKP_SMULBB( harm_Gain_Q15, B_Q14[ j ] ), 15 );
-        }
-        /* Gradually reduce excitation gain */
-        rand_scale_Q14 = SKP_RSHIFT( SKP_SMULBB( rand_scale_Q14, rand_Gain_Q15 ), 15 );
-
-        /* Slowly increase pitch lag */
-        psPLC->pitchL_Q8 += SKP_SMULWB( psPLC->pitchL_Q8, PITCH_DRIFT_FAC_Q16 );
-        psPLC->pitchL_Q8 = SKP_min_32( psPLC->pitchL_Q8, SKP_LSHIFT( SKP_SMULBB( MAX_PITCH_LAG_MS, psDec->fs_kHz ), 8 ) );
-        lag = SKP_RSHIFT_ROUND( psPLC->pitchL_Q8, 8 );
-    }
-
-    /***************************/
-    /* LPC synthesis filtering */
-    /***************************/
-    sig_Q10_ptr = sig_Q10;
-    /* Preload LPC coeficients to array on stack. Gives small performance gain */
-    SKP_memcpy( A_Q12_tmp, psPLC->prevLPC_Q12, psDec->LPC_order * sizeof( SKP_int16 ) );
-    SKP_assert( psDec->LPC_order >= 10 ); /* check that unrolling works */
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        for( i = 0; i < psDec->subfr_length; i++ ){
-            /* unrolled */
-            Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 0 ] );    /* read two coefficients at once */
-            LPC_pred_Q10 = SKP_SMULWB(               psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  1 ], Atmp );
-            LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  2 ], Atmp );
-            Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 2 ] );
-            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  3 ], Atmp );
-            LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  4 ], Atmp );
-            Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 4 ] );
-            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  5 ], Atmp );
-            LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  6 ], Atmp );
-            Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 6 ] );
-            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  7 ], Atmp );
-            LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  8 ], Atmp );
-            Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 8 ] );
-            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  9 ], Atmp );
-            LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 10 ], Atmp );
-            for( j = 10 ; j < psDec->LPC_order ; j+=2 ) {
-                Atmp = *( ( SKP_int32* )&A_Q12_tmp[ j ] );
-                LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  1 - j ], Atmp );
-                LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  2 - j ], Atmp );
-            }
-
-            /* Add prediction to LPC residual */
-            sig_Q10_ptr[ i ] = SKP_ADD32( sig_Q10_ptr[ i ], LPC_pred_Q10 );
-                
-            /* Update states */
-            psDec->sLPC_Q14[ MAX_LPC_ORDER + i ] = SKP_LSHIFT( sig_Q10_ptr[ i ], 4 );
-        }
-        sig_Q10_ptr += psDec->subfr_length;
-        /* Update LPC filter state */
-        SKP_memcpy( psDec->sLPC_Q14, &psDec->sLPC_Q14[ psDec->subfr_length ], MAX_LPC_ORDER * sizeof( SKP_int32 ) );
-    }
-
-    /* Scale with Gain */
-    for( i = 0; i < psDec->frame_length; i++ ) {
-        signal[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( sig_Q10[ i ], psPLC->prevGain_Q16[ NB_SUBFR - 1 ] ), 10 ) );
-    }
-
-    /**************************************/
-    /* Update states                      */
-    /**************************************/
-    psPLC->rand_seed     = rand_seed;
-    psPLC->randScale_Q14 = rand_scale_Q14;
-    for( i = 0; i < NB_SUBFR; i++ ) {
-        psDecCtrl->pitchL[ i ] = lag;
-    }
-}
-
-/* Glues concealed frames with new good recieved frames             */
-void SKP_Silk_PLC_glue_frames(
-    SKP_Silk_decoder_state      *psDec,             /* I/O decoder state    */
-    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O Decoder control  */
-    SKP_int16                   signal[],           /* I/O signal           */
-    SKP_int                     length              /* I length of residual */
-)
-{
-    SKP_int   i, energy_shift;
-    SKP_int32 energy;
-    SKP_Silk_PLC_struct *psPLC;
-    psPLC = &psDec->sPLC;
-
-    if( psDec->lossCnt ) {
-        /* Calculate energy in concealed residual */
-        SKP_Silk_sum_sqr_shift( &psPLC->conc_energy, &psPLC->conc_energy_shift, signal, length );
-        
-        psPLC->last_frame_lost = 1;
-    } else {
-        if( psDec->sPLC.last_frame_lost ) {
-            /* Calculate residual in decoded signal if last frame was lost */
-            SKP_Silk_sum_sqr_shift( &energy, &energy_shift, signal, length );
-
-            /* Normalize energies */
-            if( energy_shift > psPLC->conc_energy_shift ) {
-                psPLC->conc_energy = SKP_RSHIFT( psPLC->conc_energy, energy_shift - psPLC->conc_energy_shift );
-            } else if( energy_shift < psPLC->conc_energy_shift ) {
-                energy = SKP_RSHIFT( energy, psPLC->conc_energy_shift - energy_shift );
-            }
-
-            /* Fade in the energy difference */
-            if( energy > psPLC->conc_energy ) {
-                SKP_int32 frac_Q24, LZ;
-                SKP_int32 gain_Q12, slope_Q12;
-
-                LZ = SKP_Silk_CLZ32( psPLC->conc_energy );
-                LZ = LZ - 1;
-                psPLC->conc_energy = SKP_LSHIFT( psPLC->conc_energy, LZ );
-                energy = SKP_RSHIFT( energy, SKP_max_32( 24 - LZ, 0 ) );
-                
-                frac_Q24 = SKP_DIV32( psPLC->conc_energy, SKP_max( energy, 1 ) );
-                
-                gain_Q12 = SKP_Silk_SQRT_APPROX( frac_Q24 );
-                slope_Q12 = SKP_DIV32_16( ( 1 << 12 ) - gain_Q12, length );
-
-                for( i = 0; i < length; i++ ) {
-                    signal[ i ] = SKP_RSHIFT( SKP_MUL( gain_Q12, signal[ i ] ), 12 );
-                    gain_Q12 += slope_Q12;
-                    gain_Q12 = SKP_min( gain_Q12, ( 1 << 12 ) );
-                }
-            }
-        }
-        psPLC->last_frame_lost = 0;
-
-    }
-}
--- a/src/SKP_Silk_PLC.h
+++ /dev/null
@@ -1,79 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef SKP_SILK_PLC_FIX_H
-#define SKP_SILK_PLC_FIX_H
-
-#include "SKP_Silk_main_FIX.h"
-
-#define BWE_COEF_Q16                    64880           /* 0.99 in Q16                      */
-#define V_PITCH_GAIN_START_MIN_Q14      11469           /* 0.7 in Q14                       */
-#define V_PITCH_GAIN_START_MAX_Q14      15565           /* 0.95 in Q14                      */
-#define MAX_PITCH_LAG_MS                18
-#define SA_THRES_Q8                     50
-#define USE_SINGLE_TAP                  1
-#define RAND_BUF_SIZE                   128
-#define RAND_BUF_MASK                   (RAND_BUF_SIZE - 1)
-#define LOG2_INV_LPC_GAIN_HIGH_THRES    4               /* 2^4 = 12 dB LPC gain             */
-#define LOG2_INV_LPC_GAIN_LOW_THRES     8               /* 2^8 = 24 dB LPC gain             */
-#define PITCH_DRIFT_FAC_Q16             655             /* 0.01 in Q16                      */
-
-void SKP_Silk_PLC_Reset(
-    SKP_Silk_decoder_state      *psDec              /* I/O Decoder state        */
-);
-
-void SKP_Silk_PLC(
-    SKP_Silk_decoder_state      *psDec,             /* I/O Decoder state        */
-    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O Decoder control      */
-    SKP_int16                   signal[],           /* I/O  signal              */
-    SKP_int                     length,             /* I length of residual     */
-    SKP_int                     lost                /* I Loss flag              */
-);
-
-void SKP_Silk_PLC_update(
-    SKP_Silk_decoder_state      *psDec,             /* I/O Decoder state        */
-    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O Decoder control      */
-    SKP_int16                   signal[],
-    SKP_int                     length
-);
-
-void SKP_Silk_PLC_conceal(
-    SKP_Silk_decoder_state      *psDec,             /* I/O Decoder state        */
-    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O Decoder control      */
-    SKP_int16                   signal[],           /* O LPC residual signal    */
-    SKP_int                     length              /* I length of signal       */
-);
-
-void SKP_Silk_PLC_glue_frames(
-    SKP_Silk_decoder_state      *psDec,             /* I/O decoder state        */
-    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O Decoder control      */
-    SKP_int16                   signal[],           /* I/O signal               */
-    SKP_int                     length              /* I length of signal       */
-);
-
-#endif
-
--- a/src/SKP_Silk_SigProc_FIX.h
+++ /dev/null
@@ -1,796 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef _SKP_SILK_SIGPROC_FIX_H_
-#define _SKP_SILK_SIGPROC_FIX_H_
-
-#ifdef  __cplusplus
-extern "C"
-{
-#endif
-
-#define SigProc_MAX_ORDER_LPC            16                    /* max order of the LPC analysis in schur() and k2a()    */
-#define SigProc_MAX_CORRELATION_LENGTH   640                   /* max input length to the correlation                    */
-#include "SKP_Silk_typedef.h"
-#include <string.h>
-#include <stdlib.h>                                            /* for abs() */
-#include "SKP_Silk_macros.h"
-#include "SKP_Silk_resample_rom.h"
-
-
-	
-/********************************************************************/
-/*                    SIGNAL PROCESSING FUNCTIONS                   */
-/********************************************************************/
-
-/* downsample by a factor 2 */
-void SKP_Silk_resample_1_2(
-    const SKP_int16      *in,            /* I:   16 kHz signal [2*len]    */
-    SKP_int32            *S,             /* I/O: State vector [6]         */
-    SKP_int16            *out,           /* O:   8 kHz signal [len]       */
-    SKP_int32            *scratch,       /* I:   Scratch memory [4*len]   */
-    const SKP_int32      len             /* I:   Number of OUTPUT samples */
-);
-
-/*! 
- * downsample by a factor 2, coarser (good for resampling audio) 
- */
-void SKP_Silk_resample_1_2_coarse(
-    const SKP_int16    *in,              /* I:   16 kHz signal [2*len]    */
-          SKP_int32    *S,               /* I/O: state vector [4]         */
-          SKP_int16    *out,             /* O:   8 kHz signal [len]       */
-          SKP_int32    *scratch,         /* I:   scratch memory [3*len]   */
-    const SKP_int32    len               /* I:   number of OUTPUT samples */
-);
-
-/*! 
- * downsample by a factor 2, coarsest (good for signals that are already oversampled, or for analysis purposes) 
- */
-void SKP_Silk_resample_1_2_coarsest(
-    const SKP_int16     *in,             /* I:   16 kHz signal [2*len]    */
-    SKP_int32           *S,              /* I/O: State vector [2]         */
-    SKP_int16           *out,            /* O:   8 kHz signal [len]       */
-    SKP_int32           *scratch,        /* I:   Scratch memory [3*len]   */
-    const SKP_int32     len              /* I:   Number of OUTPUT samples */
-);
-
-/*! 
- * upsample by a factor 2, coarser (good for resampling audio) 
- */
-void SKP_Silk_resample_2_1_coarse(
-    const SKP_int16      *in,            /* I:   8 kHz signal [len]      */
-    SKP_int32            *S,             /* I/O: State vector [4]        */
-    SKP_int16            *out,           /* O:   16 kHz signal [2*len]   */
-    SKP_int32            *scratch,       /* I:   Scratch memory [3*len]  */
-    const SKP_int32      len             /* I:   Number of INPUT samples */
-);
-
-/*!
- * Resamples by a factor 1/3 
- */
-void SKP_Silk_resample_1_3(
-    SKP_int16            *out,          /* O:   Fs_low signal  [inLen/3]              */
-    SKP_int32            *S,            /* I/O: State vector   [7]                    */
-    const SKP_int16      *in,           /* I:   Fs_high signal [inLen]                */
-    const SKP_int32      inLen          /* I:   Input length, must be a multiple of 3 */
-);
-
-/*!
- * Resamples by a factor 3/1
- */
-void SKP_Silk_resample_3_1(
-    SKP_int16            *out,          /* O:   Fs_high signal [inLen*3]          */
-    SKP_int32            *S,            /* I/O: State vector   [7]                */
-    const SKP_int16      *in,           /* I:   Fs_low signal  [inLen]            */
-    const SKP_int32      inLen          /* I:   Input length                      */
-);
-
-/*!
- * Resamples by a factor 2/3
- */
-void SKP_Silk_resample_2_3(
-    SKP_int16            *out,          /* O:   Fs_low signal    [inLen * 2/3]        */
-    SKP_int32            *S,            /* I/O: State vector    [7+4]                 */
-    const SKP_int16      *in,           /* I:   Fs_high signal    [inLen]             */
-    const SKP_int        inLen          /* I:   Input length, must be a multiple of 3 */
-); 
-
-/*!
- * Resamples by a factor 3/2
- */
-void SKP_Silk_resample_3_2(
-    SKP_int16            *out,          /*   O: Fs_high signal  [inLen*3/2]              */
-    SKP_int32            *S,            /* I/O: State vector    [7+4]                    */
-    const SKP_int16      *in,           /* I:   Fs_low signal   [inLen]                  */
-    SKP_int              inLen          /* I:   Input length, must be a multiple of 2    */
-);
-
-/*!
- * Resamples by a factor 4/3
- */
-void SKP_Silk_resample_4_3(
-    SKP_int16            *out,          /* O:   Fs_low signal    [inLen * 4/3]           */
-    SKP_int32            *S,            /* I/O: State vector    [7+4+4]                  */
-    const SKP_int16      *in,           /* I:   Fs_high signal    [inLen]                */
-    const SKP_int        inLen          /* I:   input length, must be a multiple of 3    */
-);
-
-/*!
- * Resamples by a factor 3/4
- */
- void SKP_Silk_resample_3_4(
-    SKP_int16            *out,          /* O:   Fs_high signal  [inLen*3/4]              */
-    SKP_int32            *S,            /* I/O: State vector    [7+2+6]                  */
-    const SKP_int16      *in,           /* I:   Fs_low signal   [inLen]                  */
-    SKP_int              inLen          /* I:   Input length, must be a multiple of 4    */
-);
-
-/*! 
- * resample with a factor 2/3 coarse
- */
-void SKP_Silk_resample_2_3_coarse( 
-    SKP_int16            *out,          /* O:   Output signal                                                                 */
-    SKP_int16            *S,            /* I/O: Resampler state [ SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ]             */
-    const SKP_int16      *in,           /* I:   Input signal                                                                  */
-    const SKP_int        frameLenIn,    /* I:   Number of input samples                                                       */
-    SKP_int16            *scratch       /* I:   Scratch memory [ frameLenIn + SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ] */
-);
-
-/*! 
- * resample with a factor 2/3 coarsest
- */
-void SKP_Silk_resample_2_3_coarsest( 
-    SKP_int16            *out,          /* O:   Output signal                                                                   */
-    SKP_int16            *S,            /* I/O: Resampler state [ SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ]             */
-    const SKP_int16      *in,           /* I:   Input signal                                                                    */
-    const SKP_int        frameLenIn,    /* I:   Number of input samples                                                         */
-    SKP_int16            *scratch       /* I:   Scratch memory [ frameLenIn + SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ] */
-);
-
-/*! 
- * First order low-pass filter, with input as SKP_int16, running at 48 kHz 
- */
-void SKP_Silk_lowpass_short(
-    const SKP_int16      *in,           /* I:   Q15 48 kHz signal; [len]    */
-    SKP_int32            *S,            /* I/O: Q25 state; length = 1       */
-    SKP_int32            *out,          /* O:   Q25 48 kHz signal; [len]    */
-    const SKP_int32      len            /* O:   Signal length               */
-);
-
-/*! 
- * First order low-pass filter, with input as SKP_int32, running at 48 kHz 
- */
-void SKP_Silk_lowpass_int(
-    const SKP_int32      *in,           /* I:   Q25 48 kHz signal; length = len  */
-    SKP_int32            *S,            /* I/O: Q25 state; length = 1            */
-    SKP_int32            *out,          /* O:   Q25 48 kHz signal; length = len  */
-    const SKP_int32      len            /* I:   Number of samples                */
-);
-
-/*! 
- * First-order allpass filter 
- */
-void SKP_Silk_allpass_int(
-    const SKP_int32      *in,          /* I:   Q25 input signal [len]               */
-    SKP_int32            *S,           /* I/O: Q25 state [1]                        */
-    SKP_int              A,            /* I:   Q15 coefficient    (0 <= A < 32768)  */
-    SKP_int32            *out,         /* O:   Q25 output signal [len]              */
-    const SKP_int32      len           /* I:   Number of samples                    */
-);
-
-/*! 
- * second order ARMA filter
- * can handle (slowly) varying coefficients 
- */
-void SKP_Silk_biquad(
-    const SKP_int16      *in,          /* I:   input signal                */
-    const SKP_int16      *B,           /* I:   MA coefficients, Q13 [3]    */
-    const SKP_int16      *A,           /* I:   AR coefficients, Q13 [2]    */
-          SKP_int32      *S,           /* I/O: state vector [2]            */
-          SKP_int16      *out,         /* O:   output signal               */
-    const SKP_int32      len           /* I:   signal length               */
-);
-/*!
- * second order ARMA filter; 
- * slower than biquad() but uses more precise coefficients
- * can handle (slowly) varying coefficients 
- */
-void SKP_Silk_biquad_alt(
-    const SKP_int16     *in,           /* I:    input signal                 */
-    const SKP_int32     *B_Q28,        /* I:    MA coefficients [3]          */
-    const SKP_int32     *A_Q28,        /* I:    AR coefficients [2]          */
-    SKP_int32           *S,            /* I/O: state vector [2]              */
-    SKP_int16           *out,          /* O:    output signal                */
-    const SKP_int32     len            /* I:    signal length (must be even) */
-);
-
-/*! 
- * variable order MA filter. Prediction error filter implementation. Coeficients negated and starting with coef to x[n - 1]
- */
-void SKP_Silk_MA_Prediction(
-    const SKP_int16      *in,          /* I:   Input signal                                */
-    const SKP_int16      *B,           /* I:   MA prediction coefficients, Q12 [order]     */
-    SKP_int32            *S,           /* I/O: State vector [order]                        */
-    SKP_int16            *out,         /* O:   Output signal                               */
-    const SKP_int32      len,          /* I:   Signal length                               */
-    const SKP_int32      order         /* I:  Filter order                                 */
-);
-
-void SKP_Silk_MA_Prediction_Q13(
-    const SKP_int16      *in,          /* I:   input signal                                */
-    const SKP_int16      *B,           /* I:   MA prediction coefficients, Q13 [order]     */
-    SKP_int32            *S,           /* I/O: state vector [order]                        */
-    SKP_int16            *out,         /* O:   output signal                               */
-    SKP_int32            len,          /* I:   signal length                               */
-    SKP_int32            order         /* I:   filter order                                */
-);
-
-/*!
- * 16th order AR filter for LPC synthesis, coefficients are in Q12
- */
-void SKP_Silk_LPC_synthesis_order16(
-    const SKP_int16      *in,          /* I:   excitation signal                            */
-    const SKP_int16      *A_Q12,       /* I:   AR coefficients [16], between -8_Q0 and 8_Q0 */
-    const SKP_int32      Gain_Q26,     /* I:   gain                                         */
-          SKP_int32      *S,           /* I/O: state vector [16]                            */
-          SKP_int16      *out,         /* O:   output signal                                */
-    const SKP_int32      len           /* I:   signal length, must be multiple of 16        */
-);
-
-/* variable order MA prediction error filter. */
-/* Inverse filter of SKP_Silk_LPC_synthesis_filter */
-void SKP_Silk_LPC_analysis_filter(
-    const SKP_int16      *in,          /* I:   Input signal                                */
-    const SKP_int16      *B,           /* I:   MA prediction coefficients, Q12 [order]     */
-    SKP_int16            *S,           /* I/O: State vector [order]                        */
-    SKP_int16            *out,         /* O:   Output signal                               */
-    const SKP_int32      len,          /* I:   Signal length                               */
-    const SKP_int32      Order         /* I:   Filter order                                */
-);
-
-/* even order AR filter */
-void SKP_Silk_LPC_synthesis_filter(
-    const SKP_int16      *in,          /* I:   excitation signal                               */
-    const SKP_int16      *A_Q12,       /* I:   AR coefficients [Order], between -8_Q0 and 8_Q0 */
-    const SKP_int32      Gain_Q26,     /* I:   gain                                            */
-    SKP_int32            *S,           /* I/O: state vector [Order]                            */
-    SKP_int16            *out,         /* O:   output signal                                   */
-    const SKP_int32      len,          /* I:   signal length                                   */
-    const SKP_int        Order         /* I:   filter order, must be even                      */
-);
-
-/* Chirp (bandwidth expand) LP AR filter */
-void SKP_Silk_bwexpander( 
-    SKP_int16            *ar,          /* I/O  AR filter to be expanded (without leading 1)    */
-    const SKP_int        d,            /* I    Length of ar                                    */
-    SKP_int32            chirp_Q16     /* I    Chirp factor (typically in the range 0 to 1)    */
-);
-
-/* Chirp (bandwidth expand) LP AR filter */
-void SKP_Silk_bwexpander_32( 
-    SKP_int32            *ar,          /* I/O  AR filter to be expanded (without leading 1)    */
-    const SKP_int        d,            /* I    Length of ar                                    */
-    SKP_int32            chirp_Q16     /* I    Chirp factor in Q16                             */
-);
-
-/* Compute inverse of LPC prediction gain, and                           */
-/* test if LPC coefficients are stable (all poles within unit circle)    */
-SKP_int SKP_Silk_LPC_inverse_pred_gain( /* O:  Returns 1 if unstable, otherwise 0          */
-    SKP_int32            *invGain_Q30,  /* O:  Inverse prediction gain, Q30 energy domain  */
-    const SKP_int16      *A_Q12,        /* I:  Prediction coefficients, Q12 [order]        */
-    const SKP_int        order          /* I:  Prediction order                            */
-);
-
-SKP_int SKP_Silk_LPC_inverse_pred_gain_Q13( /* O:  returns 1 if unstable, otherwise 0      */
-    SKP_int32            *invGain_Q30,  /* O:  Inverse prediction gain, Q30 energy domain  */
-    const SKP_int16      *A_Q13,        /* I:  Prediction coefficients, Q13 [order]        */
-    const SKP_int        order          /* I:  Prediction order                            */
-);
-
-/* split signal in two decimated bands using first-order allpass filters */
-void SKP_Silk_ana_filt_bank_1(
-    const SKP_int16      *in,           /* I:   Input signal [N]        */
-    SKP_int32            *S,            /* I/O: State vector [2]        */
-    SKP_int16            *outL,         /* O:   Low band [N/2]          */
-    SKP_int16            *outH,         /* O:   High band [N/2]         */
-    SKP_int32            *scratch,      /* I:   Scratch memory [3*N/2]  */
-    const SKP_int32      N              /* I:   Number of input samples */
-);
-
-/********************************************************************/
-/*                        SCALAR FUNCTIONS                            */
-/********************************************************************/
-
-/* approximation of 128 * log2() (exact inverse of approx 2^() below) */
-/* convert input to a log scale    */
-SKP_int32 SKP_Silk_lin2log(const SKP_int32 inLin);        /* I: input in linear scale        */
-
-/* Approximation of a sigmoid function */
-SKP_int SKP_Silk_sigm_Q15(SKP_int in_Q5);
-
-/* approximation of 2^() (exact inverse of approx log2() above) */
-/* convert input to a linear scale    */ 
-SKP_int32 SKP_Silk_log2lin(const SKP_int32 inLog_Q7);    /* I: input on log scale */ 
-
-/* Function that returns the maximum absolut value of the input vector */
-SKP_int16 SKP_Silk_int16_array_maxabs(  /* O   Maximum absolute value, max: 2^15-1   */
-    const SKP_int16     *vec,           /* I   Input vector  [len]                   */ 
-    const SKP_int32     len             /* I   Length of input vector                */
-);
-
-/* Compute number of bits to right shift the sum of squares of a vector    */
-/* of int16s to make it fit in an int32                                    */
-void SKP_Silk_sum_sqr_shift(
-    SKP_int32           *energy,        /* O   Energy of x, after shifting to the right            */
-    SKP_int             *shift,         /* O   Number of bits right shift applied to energy        */
-    const SKP_int16     *x,             /* I   Input vector                                        */
-    SKP_int             len             /* I   Length of input vector                              */
-);
-
-/* Calculates the reflection coefficients from the correlation sequence    */
-/* Faster than schur64(), but much less accurate.                          */
-/* Uses SMLAWB(), requiring armv5E and higher.                             */
-void SKP_Silk_schur(
-    SKP_int16           *rc_Q15,        /* O:  reflection coefficients [order] Q15         */
-    const SKP_int32     *c,             /* I:  correlations [order+1]                      */
-    const SKP_int32     order           /* I:  prediction order                            */
-);
-
-/* Calculates the reflection coefficients from the correlation sequence    */
-/* Slower than schur(), but more accurate.                                 */
-/* Uses SMULL(), available on armv4                                        */
-SKP_int32 SKP_Silk_schur64(             /* O:  returns residual energy                     */
-    SKP_int32           rc_Q16[],       /* O:  Reflection coefficients [order] Q16         */
-    const SKP_int32     c[],            /* I:  Correlations [order+1]                      */
-    SKP_int32           order           /* I:  Prediction order                            */
-);
-
-/* Step up function, converts reflection coefficients to prediction coefficients */
-void SKP_Silk_k2a(
-    SKP_int32           *A_Q24,         /* O:  Prediction coefficients [order] Q24         */
-    const SKP_int16     *rc_Q15,        /* I:  Reflection coefficients [order] Q15         */
-    const SKP_int32     order           /* I:  Prediction order                            */
-);
-
-/* Step up function, converts reflection coefficients to prediction coefficients */
-void SKP_Silk_k2a_Q16(
-    SKP_int32           *A_Q24,         /* O:  Prediction coefficients [order] Q24         */
-    const SKP_int32     *rc_Q16,        /* I:  Reflection coefficients [order] Q16         */
-    const SKP_int32     order           /* I:  Prediction order                            */
-);
-
-/* Apply sine window to signal vector.                                      */
-/* Window types:                                                            */
-/*    0 -> sine window from 0 to pi                                         */
-/*    1 -> sine window from 0 to pi/2                                       */
-/*    2 -> sine window from pi/2 to pi                                      */
-/* every other sample of window is linearly interpolated, for speed         */
-void SKP_Silk_apply_sine_window(
-    SKP_int16           px_win[],       /* O  Pointer to windowed signal                  */
-    const SKP_int16     px[],           /* I  Pointer to input signal                     */
-    const SKP_int       win_type,       /* I  Selects a window type                       */
-    const SKP_int       length          /* I  Window length, multiple of 4                */
-);
-
-/* Compute autocorrelation */
-void SKP_Silk_autocorr( 
-    SKP_int32           *results,       /* O  Result (length correlationCount)            */
-    SKP_int32           *scale,         /* O  Scaling of the correlation vector           */
-    const SKP_int16     *inputData,     /* I  Input data to correlate                     */
-    const SKP_int       inputDataSize,  /* I  Length of input                             */
-    const SKP_int       correlationCount /* I  Number of correlation taps to compute      */
-);
-
-/* Pitch estimator */
-#define SigProc_PITCH_EST_MIN_COMPLEX        0
-#define SigProc_PITCH_EST_MID_COMPLEX        1
-#define SigProc_PITCH_EST_MAX_COMPLEX        2
-
-void SKP_Silk_decode_pitch(
-    SKP_int            lagIndex,        /* I                                              */
-    SKP_int            contourIndex,    /* O                                              */
-    SKP_int            pitch_lags[],    /* O 4 pitch values                               */
-    SKP_int            Fs_kHz           /* I sampling frequency (kHz)                     */
-);
-
-SKP_int SKP_Silk_pitch_analysis_core(     /* O    Voicing estimate: 0 voiced, 1 unvoiced                      */
-    const SKP_int16    *signal,           /* I    Signal of length PITCH_EST_FRAME_LENGTH_MS*Fs_kHz           */
-    SKP_int            *pitch_out,        /* O    4 pitch lag values                                          */
-    SKP_int            *lagIndex,         /* O    Lag Index                                                   */
-    SKP_int            *contourIndex,     /* O    Pitch contour Index                                         */
-    SKP_int            *LTPCorr_Q15,      /* I/O  Normalized correlation; input: value from previous frame    */
-    SKP_int            prevLag,           /* I    Last lag of previous frame; set to zero is unvoiced         */
-    const SKP_int32    search_thres1_Q16, /* I    First stage threshold for lag candidates 0 - 1              */
-    const SKP_int      search_thres2_Q15, /* I    Final threshold for lag candidates 0 - 1                    */
-    const SKP_int      Fs_kHz,            /* I    Sample frequency (kHz)                                      */
-    const SKP_int      complexity         /* I    Complexity setting, 0-2, where 2 is highest                 */
-);
-
-/* parameter defining the size and accuracy of the piecewise linear    */
-/* cosine approximatin table.                                        */
-
-#define LSF_COS_TAB_SZ_FIX      128
-/* rom table with cosine values */
-extern const SKP_int SKP_Silk_LSFCosTab_FIX_Q12[ LSF_COS_TAB_SZ_FIX + 1 ];
-
-void SKP_Silk_LPC_fit(
-          SKP_int16    *a_QQ,            /* O    stabilized LPC vector, Q(24-rshift) [L]         */
-          SKP_int32    *a_Q24,           /* I    LPC vector [L]                                  */
-    const SKP_int      QQ,               /* I    Q domain of output LPC vector                   */
-    const SKP_int      L                 /* I    Number of LPC parameters in the input vector    */
-);
-
-/* Compute Normalized Line Spectral Frequencies (NLSFs) from whitening filter coefficients        */
-/* If not all roots are found, the a_Q16 coefficients are bandwidth expanded until convergence.    */
-void SKP_Silk_A2NLSF(
-    SKP_int            *NLSF,            /* O    Normalized Line Spectral Frequencies, Q15 (0 - (2^15-1)), [d] */
-    SKP_int32          *a_Q16,           /* I/O  Monic whitening filter coefficients in Q16 [d]                */
-    const SKP_int      d                 /* I    Filter order (must be even)                                   */
-);
-
-/* compute whitening filter coefficients from normalized line spectral frequencies */
-void SKP_Silk_NLSF2A(
-    SKP_int16          *a,               /* o    monic whitening filter coefficients in Q12,  [d]    */
-    const SKP_int      *NLSF,            /* i    normalized line spectral frequencies in Q15, [d]    */
-    const SKP_int      d                 /* i    filter order (should be even)                       */
-);
-
-void SKP_Silk_insertion_sort_increasing(
-    SKP_int32            *a,            /* I/O   Unsorted / Sorted vector                */
-    SKP_int              *index,        /* O:    Index vector for the sorted elements    */
-    const SKP_int        L,             /* I:    Vector length                           */
-    const SKP_int        K              /* I:    Number of correctly sorted positions    */
-);
-
-void SKP_Silk_insertion_sort_decreasing(
-    SKP_int              *a,            /* I/O:  Unsorted / Sorted vector                */
-    SKP_int              *index,        /* O:    Index vector for the sorted elements    */
-    const SKP_int        L,             /* I:    Vector length                           */
-    const SKP_int        K              /* I:    Number of correctly sorted positions    */
-);
-
-void SKP_Silk_insertion_sort_decreasing_int16(
-    SKP_int16            *a,            /* I/O:  Unsorted / Sorted vector                */
-    SKP_int              *index,        /* O:    Index vector for the sorted elements    */
-    const SKP_int        L,             /* I:    Vector length                           */
-    const SKP_int        K              /* I:    Number of correctly sorted positions    */
-);
-
-void SKP_Silk_insertion_sort_increasing_all_values(
-     SKP_int             *a,            /* I/O:  Unsorted / Sorted vector                */
-     const SKP_int       L              /* I:    Vector length                           */
-);
-
-/* NLSF stabilizer, for a single input data vector */
-void SKP_Silk_NLSF_stabilize(
-          SKP_int        *NLSF_Q15,      /* I/O:  Unstable/stabilized normalized LSF vector in Q15 [L]                    */
-    const SKP_int        *NDeltaMin_Q15, /* I:    Normalized delta min vector in Q15, NDeltaMin_Q15[L] must be >= 1 [L+1] */
-    const SKP_int        L               /* I:    Number of NLSF parameters in the input vector                           */
-);
-
-/* NLSF stabilizer, over multiple input column data vectors */
-void SKP_Silk_NLSF_stabilize_multi(
-          SKP_int        *NLSF_Q15,      /* I/O:  Unstable/stabilized normalized LSF vectors in Q15 [LxN]                 */
-    const SKP_int        *NDeltaMin_Q15, /* I:    Normalized delta min vector in Q15, NDeltaMin_Q15[L] must be >= 1 [L+1] */
-    const SKP_int        N,              /* I:    Number of input vectors to be stabilized                                */
-    const SKP_int        L               /* I:    NLSF vector dimension                                                   */
-);
-
-/* Laroia low complexity NLSF weights */
-void SKP_Silk_NLSF_VQ_weights_laroia(
-    SKP_int              *pNLSFW_Q6,     /* O:    Pointer to input vector weights            [D x 1]       */
-    const SKP_int        *pNLSF_Q15,     /* I:    Pointer to input vector                    [D x 1]       */
-    const SKP_int        D               /* I:    Input vector dimension (even)                            */
-);
-
-/* Compute reflection coefficients from input signal */
-void SKP_Silk_burg_modified(        
-    SKP_int32            *res_nrg,           /* O   residual energy                                                 */
-    SKP_int              *res_nrgQ,          /* O   residual energy Q value                                         */
-    SKP_int32            A_Q16[],            /* O   prediction coefficients (length order)                          */
-    const SKP_int16      x[],                /* I   input signal, length: nb_subfr * ( D + subfr_length )           */
-    const SKP_int        subfr_length,       /* I   input signal subframe length (including D preceeding samples)   */
-    const SKP_int        nb_subfr,           /* I   number of subframes stacked in x                                */
-    const SKP_int32      WhiteNoiseFrac_Q32, /* I   fraction added to zero-lag autocorrelation                      */
-    const SKP_int        D                   /* I   order                                                           */
-);
-
-/* Multiply a vector by a constant */
-void SKP_Silk_scale_vector16_Q14( 
-    SKP_int16            *data1, 
-    SKP_int              gain_Q14,           /* Gain in Q14 */ 
-    SKP_int              dataSize
-);
-
-/* Copy and multiply a vector by a constant */
-void SKP_Silk_scale_copy_vector16( 
-    SKP_int16            *data_out, 
-    const SKP_int16      *data_in, 
-    SKP_int32            gain_Q16,           /* I:   gain in Q16   */
-    const SKP_int        dataSize            /* I:   length        */
-);
-
-void SKP_Silk_scale_vector32_16_Q14( 
-    SKP_int32            *data1,             /* I/O: Q0/Q0         */
-    SKP_int              gain_Q14,           /* I:   Q14           */
-    SKP_int              dataSize            /* I:   length        */
-);
-
-/* Multiply a vector by a constant, does not saturate output data */
-void SKP_Silk_scale_vector32_Q16( 
-    SKP_int32            *data1,             /* I/O: Q0/Q0         */
-    SKP_int32            gain_Q16,           /* I:   gain in Q16 ( SKP_int16_MIN <= gain_Q16 <= SKP_int16_MAX + 65536 ) */
-    const SKP_int        dataSize            /* I:   length        */
-);
-
-/* Some for the LTP related function requires Q26 to work.*/
-void SKP_Silk_scale_vector32_Q26_lshift_18( 
-    SKP_int32            *data1,             /* I/O: Q0/Q18        */
-    SKP_int32            gain_Q26,           /* I:   Q26           */
-    SKP_int              dataSize            /* I:   length        */
-);
-
-/********************************************************************/
-/*                        INLINE ARM MATH                             */
-/********************************************************************/
-
-/*    return sum(inVec1[i]*inVec2[i])    */
-/*    inVec1 and inVec2 should be increasing ordered, and starting address should be 4 byte aligned. (a factor of 4)*/
-SKP_int32 SKP_Silk_inner_prod_aligned(
-    const SKP_int16* const inVec1,           /* I   input vector 1    */ 
-    const SKP_int16* const inVec2,           /* I   input vector 2    */
-    const SKP_int          len               /* I   vector lengths    */
-);
-
-SKP_int32 SKP_Silk_inner_prod16_aligned_sat(
-    const SKP_int16* const inVec1,           /* I   input vector 1  */
-    const SKP_int16* const inVec2,           /* I   input vector 2  */
-    const SKP_int          len               /* I   vector lengths  */
-);
-
-SKP_int64 SKP_Silk_inner_prod_aligned_64(
-    const SKP_int32        *inVec1,          /* I   input vector 1    */ 
-    const SKP_int32        *inVec2,          /* I   input vector 2    */
-    const SKP_int          len               /* I   vector lengths    */
-);
-
-SKP_int64 SKP_Silk_inner_prod16_aligned_64(
-    const SKP_int16        *inVec1,          /* I   input vector 1    */ 
-    const SKP_int16        *inVec2,          /* I   input vector 2    */
-    const SKP_int          len               /* I   vector lengths    */
-);
-/********************************************************************/
-/*                                MACROS                                */
-/********************************************************************/
-
-/* Define 4-byte aligned array of SKP_int16 */
-#define SKP_array_of_int16_4_byte_aligned( arrayName, nElements )    \
-    SKP_int32 dummy_int32 ## arrayName;                                \
-    SKP_int16 arrayName[ (nElements) ]
-
-/* Useful Macros that can be adjusted to other platforms */
-#define SKP_memcpy(a, b, c)                memcpy((a), (b), (c))    /* Dest, Src, ByteCount */
-#define SKP_memset(a, b, c)                memset((a), (b), (c))    /* Dest, value, ByteCount */
-#define SKP_memmove(a, b, c)               memmove((a), (b), (c))    /* Dest, Src, ByteCount */
-/* fixed point macros */
-
-// (a32 * b32) output have to be 32bit int
-#define SKP_MUL(a32, b32)                  ((a32) * (b32))
-
-// (a32 * b32) output have to be 32bit uint
-#define SKP_MUL_uint(a32, b32)             SKP_MUL(a32, b32)
-
-// a32 + (b32 * c32) output have to be 32bit int
-#define SKP_MLA(a32, b32, c32)             SKP_ADD32((a32),((b32) * (c32)))
-
-// a32 + (b32 * c32) output have to be 32bit uint
-#define SKP_MLA_uint(a32, b32, c32)        SKP_MLA(a32, b32, c32)
-
-// ((a32 >> 16)  * (b32 >> 16)) output have to be 32bit int
-#define SKP_SMULTT(a32, b32)               (((a32) >> 16) * ((b32) >> 16))
-
-// a32 + ((a32 >> 16)  * (b32 >> 16)) output have to be 32bit int
-#define SKP_SMLATT(a32, b32, c32)          SKP_ADD32((a32),((b32) >> 16) * ((c32) >> 16))
-
-#define SKP_SMLALBB(a64, b16, c16)         SKP_ADD64((a64),(SKP_int64)((SKP_int32)(b16) * (SKP_int32)(c16)))
-
-// (a32 * b32)
-#define SKP_SMULL(a32, b32)                ((SKP_int64)(a32) * /*(SKP_int64)*/(b32))
-
-// multiply-accumulate macros that allow overflow in the addition (ie, no asserts in debug mode)
-#define SKP_MLA_ovflw(a32, b32, c32)       SKP_MLA(a32, b32, c32)
-#ifndef SKP_SMLABB_ovflw
-#    define SKP_SMLABB_ovflw(a32, b32, c32)    SKP_SMLABB(a32, b32, c32)
-#endif
-#define SKP_SMLABT_ovflw(a32, b32, c32)    SKP_SMLABT(a32, b32, c32)
-#define SKP_SMLATT_ovflw(a32, b32, c32)    SKP_SMLATT(a32, b32, c32)
-#define SKP_SMLAWB_ovflw(a32, b32, c32)    SKP_SMLAWB(a32, b32, c32)
-#define SKP_SMLAWT_ovflw(a32, b32, c32)    SKP_SMLAWT(a32, b32, c32)
-
-#define SKP_DIV64_32(a64, b32)             ((a64)/(b32))        /* TODO: rewrite it as a set of SKP_DIV32.*/
-
-#define SKP_DIV32_16(a32, b16)             ((SKP_int32)((a32) / (b16)))
-#define SKP_DIV32(a32, b32)                ((SKP_int32)((a32) / (b32)))
-
-// These macros enables checking for overflow in SKP_Silk_API_Debug.h
-#define SKP_ADD16(a, b)                    ((a) + (b))
-#define SKP_ADD32(a, b)                    ((a) + (b))
-#define SKP_ADD64(a, b)                    ((a) + (b))
-
-#define SKP_SUB16(a, b)                    ((a) - (b))
-#define SKP_SUB32(a, b)                    ((a) - (b))
-#define SKP_SUB64(a, b)                    ((a) - (b))
-
-#define SKP_SAT8(a)                        ((a) > SKP_int8_MAX ? SKP_int8_MAX  : \
-                                           ((a) < SKP_int8_MIN ? SKP_int8_MIN  : (a)))
-#define SKP_SAT16(a)                       ((a) > SKP_int16_MAX ? SKP_int16_MAX : \
-                                           ((a) < SKP_int16_MIN ? SKP_int16_MIN : (a)))
-#define SKP_SAT32(a)                       ((a) > SKP_int32_MAX ? SKP_int32_MAX : \
-                                           ((a) < SKP_int32_MIN ? SKP_int32_MIN : (a)))
-
-#define SKP_CHECK_FIT8(a)                  (a)
-#define SKP_CHECK_FIT16(a)                 (a)
-#define SKP_CHECK_FIT32(a)                 (a)
-
-#define SKP_ADD_SAT16(a, b)                (SKP_int16)SKP_SAT16( SKP_ADD32( (SKP_int32)(a), (b) ) )
-#define SKP_ADD_SAT64(a, b)                ((((a) + (b)) & 0x8000000000000000LL) == 0 ?                            \
-                                           ((((a) & (b)) & 0x8000000000000000LL) != 0 ? SKP_int64_MIN : (a)+(b)) :    \
-                                           ((((a) | (b)) & 0x8000000000000000LL) == 0 ? SKP_int64_MAX : (a)+(b)) )
-
-#define SKP_SUB_SAT16(a, b)                (SKP_int16)SKP_SAT16( SKP_SUB32( (SKP_int32)(a), (b) ) )
-#define SKP_SUB_SAT64(a, b)                ((((a)-(b)) & 0x8000000000000000LL) == 0 ?                                                    \
-                                           (( (a) & ((b)^0x8000000000000000LL) & 0x8000000000000000LL) ? SKP_int64_MIN : (a)-(b)) :    \
-                                           ((((a)^0x8000000000000000LL) & (b)  & 0x8000000000000000LL) ? SKP_int64_MAX : (a)-(b)) )
-
-/* Saturation for positive input values */ 
-#define SKP_POS_SAT32(a)                   ((a) > SKP_int32_MAX ? SKP_int32_MAX : (a))
-
-/* Add with saturation for positive input values */ 
-#define SKP_ADD_POS_SAT8(a, b)             ((((a)+(b)) & 0x80)                 ? SKP_int8_MAX  : ((a)+(b)))
-#define SKP_ADD_POS_SAT16(a, b)            ((((a)+(b)) & 0x8000)               ? SKP_int16_MAX : ((a)+(b)))
-#define SKP_ADD_POS_SAT32(a, b)            ((((a)+(b)) & 0x80000000)           ? SKP_int32_MAX : ((a)+(b)))
-#define SKP_ADD_POS_SAT64(a, b)            ((((a)+(b)) & 0x8000000000000000LL) ? SKP_int64_MAX : ((a)+(b)))
-
-#define SKP_LSHIFT8(a, shift)              ((a)<<(shift))                // shift >= 0, shift < 8
-#define SKP_LSHIFT16(a, shift)             ((a)<<(shift))                // shift >= 0, shift < 16
-#define SKP_LSHIFT32(a, shift)             ((a)<<(shift))                // shift >= 0, shift < 32
-#define SKP_LSHIFT64(a, shift)             ((a)<<(shift))                // shift >= 0, shift < 64
-#define SKP_LSHIFT(a, shift)               SKP_LSHIFT32(a, shift)        // shift >= 0, shift < 32
-
-#define SKP_RSHIFT8(a, shift)              ((a)>>(shift))                // shift >= 0, shift < 8
-#define SKP_RSHIFT16(a, shift)             ((a)>>(shift))                // shift >= 0, shift < 16
-#define SKP_RSHIFT32(a, shift)             ((a)>>(shift))                // shift >= 0, shift < 32
-#define SKP_RSHIFT64(a, shift)             ((a)>>(shift))                // shift >= 0, shift < 64
-#define SKP_RSHIFT(a, shift)               SKP_RSHIFT32(a, shift)        // shift >= 0, shift < 32
-
-/* saturates before shifting */
-#define SKP_LSHIFT_SAT16(a, shift)         (SKP_LSHIFT16( SKP_LIMIT( (a), SKP_RSHIFT16( SKP_int16_MIN, (shift) ),    \
-                                                                          SKP_RSHIFT16( SKP_int16_MAX, (shift) ) ), (shift) ))
-#define SKP_LSHIFT_SAT32(a, shift)         (SKP_LSHIFT32( SKP_LIMIT( (a), SKP_RSHIFT32( SKP_int32_MIN, (shift) ),    \
-                                                                          SKP_RSHIFT32( SKP_int32_MAX, (shift) ) ), (shift) ))
-
-#define SKP_LSHIFT_ovflw(a, shift)        ((a)<<(shift))        // shift >= 0, allowed to overflow
-#define SKP_LSHIFT_uint(a, shift)         ((a)<<(shift))        // shift >= 0
-#define SKP_RSHIFT_uint(a, shift)         ((a)>>(shift))        // shift >= 0
-
-#define SKP_ADD_LSHIFT(a, b, shift)       ((a) + SKP_LSHIFT((b), (shift)))            // shift >= 0
-#define SKP_ADD_LSHIFT32(a, b, shift)     SKP_ADD32((a), SKP_LSHIFT32((b), (shift)))    // shift >= 0
-#define SKP_ADD_LSHIFT_uint(a, b, shift)  ((a) + SKP_LSHIFT_uint((b), (shift)))        // shift >= 0
-#define SKP_ADD_RSHIFT(a, b, shift)       ((a) + SKP_RSHIFT((b), (shift)))            // shift >= 0
-#define SKP_ADD_RSHIFT32(a, b, shift)     SKP_ADD32((a), SKP_RSHIFT32((b), (shift)))    // shift >= 0
-#define SKP_ADD_RSHIFT_uint(a, b, shift)  ((a) + SKP_RSHIFT_uint((b), (shift)))        // shift >= 0
-#define SKP_SUB_LSHIFT32(a, b, shift)     SKP_SUB32((a), SKP_LSHIFT32((b), (shift)))    // shift >= 0
-#define SKP_SUB_RSHIFT32(a, b, shift)     SKP_SUB32((a), SKP_RSHIFT32((b), (shift)))    // shift >= 0
-
-/* Requires that shift > 0 */
-#define SKP_RSHIFT_ROUND(a, shift)        ((shift) == 1 ? ((a) >> 1) + ((a) & 1) : (((a) >> ((shift) - 1)) + 1) >> 1)
-#define SKP_RSHIFT_ROUND64(a, shift)      ((shift) == 1 ? ((a) >> 1) + ((a) & 1) : (((a) >> ((shift) - 1)) + 1) >> 1)
-
-/* Number of rightshift required to fit the multiplication */
-#define SKP_NSHIFT_MUL_32_32(a, b)        ( -(31- (32-SKP_Silk_CLZ32(SKP_abs(a)) + (32-SKP_Silk_CLZ32(SKP_abs(b))))) )
-#define SKP_NSHIFT_MUL_16_16(a, b)        ( -(15- (16-SKP_Silk_CLZ16(SKP_abs(a)) + (16-SKP_Silk_CLZ16(SKP_abs(b))))) )
-
-
-#define SKP_min(a, b)                     (((a) < (b)) ? (a) : (b)) 
-#define SKP_max(a, b)                     (((a) > (b)) ? (a) : (b))
-
-/* Macro to convert floating-point constants to fixed-point */
-#define SKP_FIX_CONST( C, Q )             ((SKP_int32)((C) * (1 << (Q)) + 0.5))
-
-/* SKP_min() versions with typecast in the function call */
-SKP_INLINE SKP_int SKP_min_int(SKP_int a, SKP_int b)
-{
-    return (((a) < (b)) ? (a) : (b));
-}
-SKP_INLINE SKP_int16 SKP_min_16(SKP_int16 a, SKP_int16 b)
-{
-    return (((a) < (b)) ? (a) : (b));
-}
-SKP_INLINE SKP_int32 SKP_min_32(SKP_int32 a, SKP_int32 b)
-{
-    return (((a) < (b)) ? (a) : (b));
-}
-SKP_INLINE SKP_int64 SKP_min_64(SKP_int64 a, SKP_int64 b)
-{
-    return (((a) < (b)) ? (a) : (b));
-}
-
-/* SKP_min() versions with typecast in the function call */
-SKP_INLINE SKP_int SKP_max_int(SKP_int a, SKP_int b)
-{
-    return (((a) > (b)) ? (a) : (b));
-}
-SKP_INLINE SKP_int16 SKP_max_16(SKP_int16 a, SKP_int16 b)
-{
-    return (((a) > (b)) ? (a) : (b));
-}
-SKP_INLINE SKP_int32 SKP_max_32(SKP_int32 a, SKP_int32 b)
-{
-    return (((a) > (b)) ? (a) : (b));
-}
-SKP_INLINE SKP_int64 SKP_max_64(SKP_int64 a, SKP_int64 b)
-{
-    return (((a) > (b)) ? (a) : (b));
-}
-
-#define SKP_LIMIT( a, limit1, limit2)    ((limit1) > (limit2) ? ((a) > (limit1) ? (limit1) : ((a) < (limit2) ? (limit2) : (a))) \
-                                                             : ((a) > (limit2) ? (limit2) : ((a) < (limit1) ? (limit1) : (a))))
-
-//#define SKP_non_neg(a)                 ((a) & ((-(a)) >> (8 * sizeof(a) - 1)))   /* doesn't seem faster than SKP_max(0, a);
-
-#define SKP_abs(a)                       (((a) >  0)  ? (a) : -(a))            // Be careful, SKP_abs returns wrong when input equals to SKP_intXX_MIN
-#define SKP_abs_int(a)                   (((a) ^ ((a) >> (8 * sizeof(a) - 1))) - ((a) >> (8 * sizeof(a) - 1)))
-#define SKP_abs_int32(a)                 (((a) ^ ((a) >> 31)) - ((a) >> 31))
-#define SKP_abs_int64(a)                 (((a) >  0)  ? (a) : -(a))    
-
-#define SKP_sign(a)                      ((a) > 0 ? 1 : ( (a) < 0 ? -1 : 0 ))
-
-#define SKP_sqrt(a)                      (sqrt(a)) 
-
-/* PSEUDO-RANDOM GENERATOR                                                          */
-/* Make sure to store the result as the seed for the next call (also in between     */
-/* frames), otherwise result won't be random at all. When only using some of the    */
-/* bits, take the most significant bits by right-shifting. Do not just mask off     */
-/* the lowest bits.                                                                 */
-#define SKP_RAND(seed)                   (SKP_MLA_ovflw(907633515, (seed), 196314165))
-
-// Add some multiplication functions that can be easily mapped to ARM.
-
-//    SKP_SMMUL: Signed top word multiply. 
-//        ARMv6        2 instruction cycles. 
-//        ARMv3M+        3 instruction cycles. use SMULL and ignore LSB registers.(except xM) 
-//#define SKP_SMMUL(a32, b32)            (SKP_int32)SKP_RSHIFT(SKP_SMLAL(SKP_SMULWB((a32), (b32)), (a32), SKP_RSHIFT_ROUND((b32), 16)), 16)
-// the following seems faster on x86
-#define SKP_SMMUL(a32, b32)              (SKP_int32)SKP_RSHIFT64(SKP_SMULL((a32), (b32)), 32)
-
-#include "SKP_Silk_Inlines.h"
-
-#ifdef  __cplusplus
-}
-#endif
-
-#endif
--- a/src/SKP_Silk_VAD.c
+++ /dev/null
@@ -1,320 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*
- * File Name:   SKP_Silk_VAD.c
- * Description: Silk VAD.
- */
-
-#include <stdlib.h>
-#include "SKP_Silk_main.h"
-
-/**********************************/
-/* Initialization of the Silk VAD */
-/**********************************/
-SKP_int SKP_Silk_VAD_Init(                              /* O    Return value, 0 if success                  */ 
-    SKP_Silk_VAD_state              *psSilk_VAD         /* I/O  Pointer to Silk VAD state                   */ 
-)
-{
-    SKP_int b, ret = 0;
-
-    /* reset state memory */
-    SKP_memset( psSilk_VAD, 0, sizeof( SKP_Silk_VAD_state ) );
-
-    /* init noise levels */
-    /* Initialize array with approx pink noise levels (psd proportional to inverse of frequency) */
-    for( b = 0; b < VAD_N_BANDS; b++ ) {
-        psSilk_VAD->NoiseLevelBias[ b ] = SKP_max_32( SKP_DIV32_16( VAD_NOISE_LEVELS_BIAS, b + 1 ), 1 );
-    }
-
-    /* Initialize state */
-    for( b = 0; b < VAD_N_BANDS; b++ ) {
-        psSilk_VAD->NL[ b ]     = SKP_MUL( 100, psSilk_VAD->NoiseLevelBias[ b ] );
-        psSilk_VAD->inv_NL[ b ] = SKP_DIV32( SKP_int32_MAX, psSilk_VAD->NL[ b ] );
-    }
-    psSilk_VAD->counter = 15;
-
-    /* init smoothed energy-to-noise ratio*/
-    for( b = 0; b < VAD_N_BANDS; b++ ) {
-        psSilk_VAD->NrgRatioSmth_Q8[ b ] = 100 * 256;       /* 100 * 256 --> 20 dB SNR */
-    }
-
-    return( ret );
-}
-
-/* Weighting factors for tilt measure */
-const static SKP_int32 tiltWeights[ VAD_N_BANDS ] = { 30000, 6000, -12000, -12000 };
-
-/***************************************/
-/* Get the speech activity level in Q8 */
-/***************************************/
-SKP_int SKP_Silk_VAD_GetSA_Q8(                                      /* O    Return value, 0 if success      */
-    SKP_Silk_VAD_state              *psSilk_VAD,                    /* I/O  Silk VAD state                  */
-    SKP_int                         *pSA_Q8,                        /* O    Speech activity level in Q8     */
-    SKP_int                         *pSNR_dB_Q7,                    /* O    SNR for current frame in Q7     */
-    SKP_int                         pQuality_Q15[ VAD_N_BANDS ],    /* O    Smoothed SNR for each band      */
-    SKP_int                         *pTilt_Q15,                     /* O    current frame's frequency tilt  */
-    const SKP_int16                 pIn[],                          /* I    PCM input       [framelength]   */
-    const SKP_int                   framelength                     /* I    Input frame length              */
-)
-{
-    SKP_int   SA_Q15, input_tilt;
-    SKP_int32 scratch[ 3 * MAX_FRAME_LENGTH / 2 ];
-    SKP_int   decimated_framelength, dec_subframe_length, dec_subframe_offset, SNR_Q7, i, b, s;
-    SKP_int32 sumSquared, smooth_coef_Q16;
-    SKP_int16 HPstateTmp;
-
-    SKP_int16 X[ VAD_N_BANDS ][ MAX_FRAME_LENGTH / 2 ];
-    SKP_int32 Xnrg[ VAD_N_BANDS ];
-    SKP_int32 NrgToNoiseRatio_Q8[ VAD_N_BANDS ];
-    SKP_int32 speech_nrg, x_tmp;
-    SKP_int   ret = 0;
-
-    /* Safety checks */
-    SKP_assert( VAD_N_BANDS == 4 );
-    SKP_assert( MAX_FRAME_LENGTH >= framelength );
-    SKP_assert( framelength <= 512 );
-
-    /***********************/
-    /* Filter and Decimate */
-    /***********************/
-    /* 0-8 kHz to 0-4 kHz and 4-8 kHz */
-    SKP_Silk_ana_filt_bank_1( pIn,          &psSilk_VAD->AnaState[  0 ], &X[ 0 ][ 0 ], &X[ 3 ][ 0 ], &scratch[ 0 ], framelength );        
-    
-    /* 0-4 kHz to 0-2 kHz and 2-4 kHz */
-    SKP_Silk_ana_filt_bank_1( &X[ 0 ][ 0 ], &psSilk_VAD->AnaState1[ 0 ], &X[ 0 ][ 0 ], &X[ 2 ][ 0 ], &scratch[ 0 ], SKP_RSHIFT( framelength, 1 ) );
-    
-    /* 0-2 kHz to 0-1 kHz and 1-2 kHz */
-    SKP_Silk_ana_filt_bank_1( &X[ 0 ][ 0 ], &psSilk_VAD->AnaState2[ 0 ], &X[ 0 ][ 0 ], &X[ 1 ][ 0 ], &scratch[ 0 ], SKP_RSHIFT( framelength, 2 ) );
-
-    /*********************************************/
-    /* HP filter on lowest band (differentiator) */
-    /*********************************************/
-    decimated_framelength = SKP_RSHIFT( framelength, 3 );
-    X[ 0 ][ decimated_framelength - 1 ] = SKP_RSHIFT( X[ 0 ][ decimated_framelength - 1 ], 1 );
-    HPstateTmp = X[ 0 ][ decimated_framelength - 1 ];
-    for( i = decimated_framelength - 1; i > 0; i-- ) {
-        X[ 0 ][ i - 1 ]  = SKP_RSHIFT( X[ 0 ][ i - 1 ], 1 );
-        X[ 0 ][ i ]     -= X[ 0 ][ i - 1 ];
-    }
-    X[ 0 ][ 0 ] -= psSilk_VAD->HPstate;
-    psSilk_VAD->HPstate = HPstateTmp;
-
-    /*************************************/
-    /* Calculate the energy in each band */
-    /*************************************/
-    for( b = 0; b < VAD_N_BANDS; b++ ) {        
-        /* Find the decimated framelength in the non-uniformly divided bands */
-        decimated_framelength = SKP_RSHIFT( framelength, SKP_min_int( VAD_N_BANDS - b, VAD_N_BANDS - 1 ) );
-
-        /* Split length into subframe lengths */
-        dec_subframe_length = SKP_RSHIFT( decimated_framelength, VAD_INTERNAL_SUBFRAMES_LOG2 );
-        dec_subframe_offset = 0;
-
-        /* Compute energy per sub-frame */
-        /* initialize with summed energy of last subframe */
-        Xnrg[ b ] = psSilk_VAD->XnrgSubfr[ b ];
-        for( s = 0; s < VAD_INTERNAL_SUBFRAMES; s++ ) {
-            sumSquared = 0;
-            for( i = 0; i < dec_subframe_length; i++ ) {
-                /* The energy will be less than dec_subframe_length * ( SKP_int16_MIN / 8 )^2.              */
-                /* Therefore we can accumulate with no risk of overflow (unless dec_subframe_length > 128)  */
-                x_tmp = SKP_RSHIFT( X[ b ][ i + dec_subframe_offset ], 3 );
-                sumSquared = SKP_SMLABB( sumSquared, x_tmp, x_tmp );
-
-                /* Safety check */
-                SKP_assert( sumSquared >= 0 );
-            }
-
-            /* add/saturate summed energy of current subframe */
-            if( s < VAD_INTERNAL_SUBFRAMES - 1 ) {
-                Xnrg[ b ] = SKP_ADD_POS_SAT32( Xnrg[ b ], sumSquared );
-            } else {
-                /* look-ahead subframe */
-                Xnrg[ b ] = SKP_ADD_POS_SAT32( Xnrg[ b ], SKP_RSHIFT( sumSquared, 1 ) );
-            }
-
-            dec_subframe_offset += dec_subframe_length;
-        }
-        psSilk_VAD->XnrgSubfr[ b ] = sumSquared; 
-    }
-
-    /********************/
-    /* Noise estimation */
-    /********************/
-    SKP_Silk_VAD_GetNoiseLevels( &Xnrg[ 0 ], psSilk_VAD );
-
-    /***********************************************/
-    /* Signal-plus-noise to noise ratio estimation */
-    /***********************************************/
-    sumSquared = 0;
-    input_tilt = 0;
-    for( b = 0; b < VAD_N_BANDS; b++ ) {
-        speech_nrg = Xnrg[ b ] - psSilk_VAD->NL[ b ];
-        if( speech_nrg > 0 ) {
-            /* Divide, with sufficient resolution */
-            if( ( Xnrg[ b ] & 0xFF800000 ) == 0 ) {
-                NrgToNoiseRatio_Q8[ b ] = SKP_DIV32( SKP_LSHIFT( Xnrg[ b ], 8 ), psSilk_VAD->NL[ b ] + 1 );
-            } else {
-                NrgToNoiseRatio_Q8[ b ] = SKP_DIV32( Xnrg[ b ], SKP_RSHIFT( psSilk_VAD->NL[ b ], 8 ) + 1 );
-            }
-
-            /* Convert to log domain */
-            SNR_Q7 = SKP_Silk_lin2log( NrgToNoiseRatio_Q8[ b ] ) - 8 * 128;
-
-            /* Sum-of-squares */
-            sumSquared = SKP_SMLABB( sumSquared, SNR_Q7, SNR_Q7 );          /* Q14 */
-
-            /* Tilt measure */
-            if( speech_nrg < ( 1 << 20 ) ) {
-                /* Scale down SNR value for small subband speech energies */
-                SNR_Q7 = SKP_SMULWB( SKP_LSHIFT( SKP_Silk_SQRT_APPROX( speech_nrg ), 6 ), SNR_Q7 );
-            }
-            input_tilt = SKP_SMLAWB( input_tilt, tiltWeights[ b ], SNR_Q7 );
-        } else {
-            NrgToNoiseRatio_Q8[ b ] = 256;
-        }
-    }
-
-    /* Mean-of-squares */
-    sumSquared = SKP_DIV32_16( sumSquared, VAD_N_BANDS );           /* Q14 */
-
-    /* Root-mean-square approximation, scale to dBs, and write to output pointer */
-    *pSNR_dB_Q7 = ( SKP_int16 )( 3 * SKP_Silk_SQRT_APPROX( sumSquared ) );  /* Q7 */
-
-    /*********************************/
-    /* Speech Probability Estimation */
-    /*********************************/
-    SA_Q15 = SKP_Silk_sigm_Q15( SKP_SMULWB( VAD_SNR_FACTOR_Q16, *pSNR_dB_Q7 ) - VAD_NEGATIVE_OFFSET_Q5 );
-
-    /**************************/
-    /* Frequency Tilt Measure */
-    /**************************/
-    *pTilt_Q15 = SKP_LSHIFT( SKP_Silk_sigm_Q15( input_tilt ) - 16384, 1 );
-
-    /**************************************************/
-    /* Scale the sigmoid output based on power levels */
-    /**************************************************/
-    speech_nrg = 0;
-    for( b = 0; b < VAD_N_BANDS; b++ ) {
-        /* Accumulate signal-without-noise energies, higher frequency bands have more weight */
-        speech_nrg += ( b + 1 ) * SKP_RSHIFT( Xnrg[ b ] - psSilk_VAD->NL[ b ], 4 );
-    }
-
-    /* Power scaling */
-    if( speech_nrg <= 0 ) {
-        SA_Q15 = SKP_RSHIFT( SA_Q15, 1 ); 
-    } else if( speech_nrg < 32768 ) {
-        /* square-root */
-        speech_nrg = SKP_Silk_SQRT_APPROX( SKP_LSHIFT( speech_nrg, 15 ) );
-        SA_Q15 = SKP_SMULWB( 32768 + speech_nrg, SA_Q15 ); 
-    }
-
-    /* Copy the resulting speech activity in Q8 to *pSA_Q8 */
-    *pSA_Q8 = SKP_min_int( SKP_RSHIFT( SA_Q15, 7 ), SKP_uint8_MAX );
-
-    /***********************************/
-    /* Energy Level and SNR estimation */
-    /***********************************/
-    /* smoothing coefficient */
-    smooth_coef_Q16 = SKP_SMULWB( VAD_SNR_SMOOTH_COEF_Q18, SKP_SMULWB( SA_Q15, SA_Q15 ) );
-    for( b = 0; b < VAD_N_BANDS; b++ ) {
-        /* compute smoothed energy-to-noise ratio per band */
-        psSilk_VAD->NrgRatioSmth_Q8[ b ] = SKP_SMLAWB( psSilk_VAD->NrgRatioSmth_Q8[ b ], 
-            NrgToNoiseRatio_Q8[ b ] - psSilk_VAD->NrgRatioSmth_Q8[ b ], smooth_coef_Q16 );
-
-        /* signal to noise ratio in dB per band */
-        SNR_Q7 = 3 * ( SKP_Silk_lin2log( psSilk_VAD->NrgRatioSmth_Q8[b] ) - 8 * 128 );
-        /* quality = sigmoid( 0.25 * ( SNR_dB - 16 ) ); */
-        pQuality_Q15[ b ] = SKP_Silk_sigm_Q15( SKP_RSHIFT( SNR_Q7 - 16 * 128, 4 ) );
-    }
-
-    return( ret );
-}
-
-/**************************/
-/* Noise level estimation */
-/**************************/
-void SKP_Silk_VAD_GetNoiseLevels(
-    const SKP_int32                 pX[ VAD_N_BANDS ],  /* I    subband energies                            */
-    SKP_Silk_VAD_state              *psSilk_VAD         /* I/O  Pointer to Silk VAD state                   */ 
-)
-{
-    SKP_int   k;
-    SKP_int32 nl, nrg, inv_nrg;
-    SKP_int   coef, min_coef;
-
-    /* Initially faster smoothing */
-    if( psSilk_VAD->counter < 1000 ) { /* 1000 = 20 sec */
-        min_coef = SKP_DIV32_16( SKP_int16_MAX, SKP_RSHIFT( psSilk_VAD->counter, 4 ) + 1 );  
-    } else {
-        min_coef = 0;
-    }
-
-    for( k = 0; k < VAD_N_BANDS; k++ ) {
-        /* Get old noise level estimate for current band */
-        nl = psSilk_VAD->NL[ k ];
-        SKP_assert( nl >= 0 );
-        
-        /* Add bias */
-        nrg = SKP_ADD_POS_SAT32( pX[ k ], psSilk_VAD->NoiseLevelBias[ k ] ); 
-        SKP_assert( nrg > 0 );
-        
-        /* Invert energies */
-        inv_nrg = SKP_DIV32( SKP_int32_MAX, nrg );
-        SKP_assert( inv_nrg >= 0 );
-        
-        /* Less update when subband energy is high */
-        if( nrg > SKP_LSHIFT( nl, 3 ) ) {
-            coef = VAD_NOISE_LEVEL_SMOOTH_COEF_Q16 >> 3;
-        } else if( nrg < nl ) {
-            coef = VAD_NOISE_LEVEL_SMOOTH_COEF_Q16;
-        } else {
-            coef = SKP_SMULWB( SKP_SMULWW( inv_nrg, nl ), VAD_NOISE_LEVEL_SMOOTH_COEF_Q16 << 1 );
-        }
-
-        /* Initially faster smoothing */
-        coef = SKP_max_int( coef, min_coef );
-
-        /* Smooth inverse energies */
-        psSilk_VAD->inv_NL[ k ] = SKP_SMLAWB( psSilk_VAD->inv_NL[ k ], inv_nrg - psSilk_VAD->inv_NL[ k ], coef );
-        SKP_assert( psSilk_VAD->inv_NL[ k ] >= 0 );
-
-        /* Compute noise level by inverting again */
-        nl = SKP_DIV32( SKP_int32_MAX, psSilk_VAD->inv_NL[ k ] );
-        SKP_assert( nl >= 0 );
-
-        /* Limit noise levels (guarantee 7 bits of head room) */
-        nl = SKP_min( nl, 0x00FFFFFF );
-
-        /* Store as part of state */
-        psSilk_VAD->NL[ k ] = nl;
-    }
-
-    /* Increment frame counter */
-    psSilk_VAD->counter++;
-}
--- a/src/SKP_Silk_VQ_nearest_neighbor_FIX.c
+++ /dev/null
@@ -1,110 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-/* Entropy constrained MATRIX-weighted VQ, hard-coded to 5-element vectors, for a single input data vector */
-void SKP_Silk_VQ_WMat_EC_FIX(
-    SKP_int                         *ind,               /* O    index of best codebook vector               */
-    SKP_int32                       *rate_dist_Q14,     /* O    best weighted quantization error + mu * rate*/
-    const SKP_int16                 *in_Q14,            /* I    input vector to be quantized                */
-    const SKP_int32                 *W_Q18,             /* I    weighting matrix                            */
-    const SKP_int16                 *cb_Q14,            /* I    codebook                                    */
-    const SKP_int16                 *cl_Q6,             /* I    code length for each codebook vector        */
-    const SKP_int                   mu_Q8,              /* I    tradeoff between weighted error and rate    */
-    SKP_int                         L                   /* I    number of vectors in codebook               */
-)
-{
-    SKP_int   k;
-    const SKP_int16 *cb_row_Q14;
-    SKP_int32 sum1_Q14, sum2_Q16, diff_Q14_01, diff_Q14_23, diff_Q14_4;
-
-    /* Loop over codebook */
-    *rate_dist_Q14 = SKP_int32_MAX;
-    cb_row_Q14 = cb_Q14;
-    for( k = 0; k < L; k++ ) {
-        /* Pack pairs of int16 values per int32 */
-        diff_Q14_01 = (SKP_uint16)( in_Q14[ 0 ] - cb_row_Q14[ 0 ] ) | SKP_LSHIFT( ( SKP_int32 )in_Q14[ 1 ] - cb_row_Q14[ 1 ], 16 );
-        diff_Q14_23 = (SKP_uint16)( in_Q14[ 2 ] - cb_row_Q14[ 2 ] ) | SKP_LSHIFT( ( SKP_int32 )in_Q14[ 3 ] - cb_row_Q14[ 3 ], 16 );
-        diff_Q14_4  = in_Q14[ 4 ] - cb_row_Q14[ 4 ];
-
-        /* Weighted rate */
-        sum1_Q14 = SKP_SMULBB( mu_Q8, cl_Q6[ k ] );
-
-        SKP_assert( sum1_Q14 >= 0 );
-
-        /* Add weighted quantization error, assuming W_Q18 is symmetric */
-        /* NOTE: the code below loads two int16 values as one int32, and multiplies each using the  */
-        /* SMLAWB and SMLAWT instructions. On a big-endian CPU the two int16 variables would be     */
-        /* loaded in reverse order and the code will give the wrong result. In that case swapping   */
-        /* the SMLAWB and SMLAWT instructions should solve the problem.                             */
-        /* first row of W_Q18 */
-        sum2_Q16 = SKP_SMULWT(           W_Q18[ 1 ], diff_Q14_01 );
-        sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[ 2 ], diff_Q14_23 );
-        sum2_Q16 = SKP_SMLAWT( sum2_Q16, W_Q18[ 3 ], diff_Q14_23 );
-        sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[ 4 ], diff_Q14_4  );
-        sum2_Q16 = SKP_LSHIFT( sum2_Q16, 1 );
-        sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[ 0 ], diff_Q14_01 );
-        sum1_Q14 = SKP_SMLAWB( sum1_Q14, sum2_Q16,   diff_Q14_01 );
-
-        /* second row of W_Q18 */
-        sum2_Q16 = SKP_SMULWB(           W_Q18[ 7 ], diff_Q14_23 );
-        sum2_Q16 = SKP_SMLAWT( sum2_Q16, W_Q18[ 8 ], diff_Q14_23 );
-        sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[ 9 ], diff_Q14_4  );
-        sum2_Q16 = SKP_LSHIFT( sum2_Q16, 1 );
-        sum2_Q16 = SKP_SMLAWT( sum2_Q16, W_Q18[ 6 ], diff_Q14_01 );
-        sum1_Q14 = SKP_SMLAWT( sum1_Q14, sum2_Q16,   diff_Q14_01 );
-
-        /* third row of W_Q18 */
-        sum2_Q16 = SKP_SMULWT(           W_Q18[ 13 ], diff_Q14_23 );
-        sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[ 14 ], diff_Q14_4  );
-        sum2_Q16 = SKP_LSHIFT( sum2_Q16, 1 );
-        sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[ 12 ], diff_Q14_23 );
-        sum1_Q14 = SKP_SMLAWB( sum1_Q14, sum2_Q16,    diff_Q14_23 );
-
-        /* fourth row of W_Q18 */
-        sum2_Q16 = SKP_SMULWB(           W_Q18[ 19 ], diff_Q14_4  );
-        sum2_Q16 = SKP_LSHIFT( sum2_Q16, 1 );
-        sum2_Q16 = SKP_SMLAWT( sum2_Q16, W_Q18[ 18 ], diff_Q14_23 );
-        sum1_Q14 = SKP_SMLAWT( sum1_Q14, sum2_Q16,    diff_Q14_23 );
-
-        /* last row of W_Q18 */
-        sum2_Q16 = SKP_SMULWB(           W_Q18[ 24 ], diff_Q14_4  );
-        sum1_Q14 = SKP_SMLAWB( sum1_Q14, sum2_Q16,    diff_Q14_4  );
-
-        SKP_assert( sum1_Q14 >= 0 );
-
-        /* find best */
-        if( sum1_Q14 < *rate_dist_Q14 ) {
-            *rate_dist_Q14 = sum1_Q14;
-            *ind = k;
-        }
-
-        /* Go to next cbk vector */
-        cb_row_Q14 += LTP_ORDER;
-    }
-}
--- a/src/SKP_Silk_allpass_int.c
+++ /dev/null
@@ -1,69 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                        *
- * SKP_Silk_allpass_int.c                                               *
- *                                                                        *
- * First-order allpass filter with                                        *
- * transfer function:                                                     *
- *                                                                        *
- *         A + Z^(-1)                                                     *
- * H(z) = ------------                                                    *
- *        1 + A*Z^(-1)                                                    *
- *                                                                        *
- * Implemented using minimum multiplier filter design.                    *
- *                                                                        *
- * Reference: http://www.univ.trieste.it/~ramponi/teaching/               *
- * DSP/materiale/Ch6(2).pdf                                               *
- *                                                                        *
- * Copyright 2007 (c), Skype Limited                                      *
- * Date: 070525                                                           *
- *                                                                        */
-#include "SKP_Silk_SigProc_FIX.h"
-
-
-/* First-order allpass filter */
-void SKP_Silk_allpass_int(
-    const SKP_int32      *in,    /* I:    Q25 input signal [len]               */
-    SKP_int32            *S,     /* I/O: Q25 state [1]                         */
-    SKP_int              A,      /* I:    Q15 coefficient    (0 <= A < 32768)  */
-    SKP_int32            *out,   /* O:    Q25 output signal [len]              */
-    const SKP_int32      len     /* I:    Number of samples                    */
-)
-{
-    SKP_int32    Y2, X2, S0;
-    SKP_int        k;
-
-    S0 = S[ 0 ];
-    for( k = len - 1; k >= 0; k-- ) {
-        Y2         = *in - S0;
-        X2         = ( Y2 >> 15 ) * A + ( ( ( Y2 & 0x00007FFF ) * A ) >> 15 );
-        ( *out++ ) = S0 + X2;
-        S0         = ( *in++ ) + X2;
-    }
-    S[ 0 ] = S0;
-}
--- a/src/SKP_Silk_ana_filt_bank_1.c
+++ /dev/null
@@ -1,73 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                          *
- * SKP_ana_filt_bank_1.c                                                    *
- *                                                                          *
- * Split signal into two decimated bands using first-order allpass filters  *
- *                                                                          *
- * Copyright 2006 (c), Skype Limited                                        *
- * Date: 060221                                                             *
- *                                                                          */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Coefficients for 2-band filter bank based on first-order allpass filters */
-static SKP_int16 A_fb1_20[ 1 ] = {  5394 };
-static SKP_int16 A_fb1_21[ 1 ] = { 20623 };
-
-/* Split signal into two decimated bands using first-order allpass filters */
-void SKP_Silk_ana_filt_bank_1(
-    const SKP_int16      *in,        /* I:    Input signal [N]       */
-    SKP_int32            *S,         /* I/O: State vector [2]        */
-    SKP_int16            *outL,      /* O:    Low band [N/2]         */
-    SKP_int16            *outH,      /* O:    High band [N/2]        */
-    SKP_int32            *scratch,   /* I:    Scratch memory [3*N/2] */
-    const SKP_int32      N           /* I:   Number of input samples */
-)
-{
-    SKP_int        k, N2 = SKP_RSHIFT( N, 1 );
-    SKP_int32    out_tmp;
-
-    /* De-interleave three allpass inputs, and convert Q15 -> Q25 */
-    for( k = 0; k < N2; k++ ) {
-        scratch[ k + N  ] = SKP_LSHIFT( (SKP_int32)in[ 2 * k     ], 10 );
-        scratch[ k + N2 ] = SKP_LSHIFT( (SKP_int32)in[ 2 * k + 1 ], 10 );
-    }
-
-    /* Allpass filters */
-    SKP_Silk_allpass_int( scratch + N2, S+0, A_fb1_20[ 0 ], scratch,      N2 );
-    SKP_Silk_allpass_int( scratch + N,  S+1, A_fb1_21[ 0 ], scratch + N2, N2 );
-
-    /* Add and subtract two allpass outputs to create bands */
-    for( k = 0; k < N2; k++ ) {
-        out_tmp   = scratch[ k ] + scratch[ k + N2 ];
-        outL[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( out_tmp, 11 ) );
-
-        out_tmp   = scratch[ k ] - scratch[ k + N2 ];
-        outH[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( out_tmp, 11 ) );
-    }        
-}
--- a/src/SKP_Silk_apply_sine_window.c
+++ /dev/null
@@ -1,92 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Apply sine window to signal vector.                                      */
-/* Window types:                                                            */
-/*    0 -> sine window from 0 to pi                                         */
-/*    1 -> sine window from 0 to pi/2                                       */
-/*    2 -> sine window from pi/2 to pi                                      */
-/* every other sample of window is linearly interpolated, for speed         */
-void SKP_Silk_apply_sine_window(
-    SKP_int16                        px_win[],            /* O    Pointer to windowed signal                  */
-    const SKP_int16                  px[],                /* I    Pointer to input signal                     */
-    const SKP_int                    win_type,            /* I    Selects a window type                       */
-    const SKP_int                    length               /* I    Window length, multiple of 4                */
-)
-{
-    SKP_int   k;
-    SKP_int32 px32, f_Q16, c_Q20, S0_Q16, S1_Q16;
-
-    /* Length must be multiple of 4 */
-    SKP_assert( ( length & 3 ) == 0 );
-
-    /* Input pointer must be 4-byte aligned */
-    SKP_assert( ( (SKP_int64)px & 3 ) == 0 );
-
-    if( win_type == 0 ) {
-        f_Q16 = SKP_DIV32_16( 411775, length + 1 );        // 411775 = 2 * 65536 * pi
-    } else {
-        f_Q16 = SKP_DIV32_16( 205887, length + 1 );        // 205887 = 65536 * pi
-    }
-
-    /* factor used for cosine approximation */
-    c_Q20 = -SKP_RSHIFT( SKP_MUL( f_Q16, f_Q16 ), 12 );
-
-    /* c_Q20 becomes too large if length is too small */
-    SKP_assert( c_Q20 >= -32768 );
-
-    /* initialize state */
-    if( win_type < 2 ) {
-        /* start from 0 */
-        S0_Q16 = 0;
-        /* approximation of sin(f) */
-        S1_Q16 = f_Q16;
-    } else {
-        /* start from 1 */
-        S0_Q16 = ( 1 << 16 );
-        /* approximation of cos(f) */
-        S1_Q16 = ( 1 << 16 ) + SKP_RSHIFT( c_Q20, 5 );
-    }
-
-    /* Uses the recursive equation:   sin(n*f) = 2 * cos(f) * sin((n-1)*f) - sin((n-2)*f)    */
-    /* 4 samples at a time */
-    for( k = 0; k < length; k += 4 ) {
-        px32 = *( (SKP_int32 *)&px[ k ] );                        /* load two values at once */
-        px_win[ k ]     = (SKP_int16)SKP_SMULWB( SKP_RSHIFT( S0_Q16 + S1_Q16, 1 ), px32 );
-        px_win[ k + 1 ] = (SKP_int16)SKP_SMULWT( S1_Q16, px32 );
-        S0_Q16 = SKP_RSHIFT( SKP_MUL( c_Q20, S1_Q16 ), 20 ) + SKP_LSHIFT( S1_Q16, 1 ) - S0_Q16 + 1;
-        S0_Q16 = SKP_min( S0_Q16, ( 1 << 16 ) );
-
-        px32 = *( (SKP_int32 *)&px[k + 2] );                    /* load two values at once */
-        px_win[ k + 2 ] = (SKP_int16)SKP_SMULWB( SKP_RSHIFT( S0_Q16 + S1_Q16, 1 ), px32 );
-        px_win[ k + 3 ] = (SKP_int16)SKP_SMULWT( S0_Q16, px32 );
-        S1_Q16 = SKP_RSHIFT( SKP_MUL( c_Q20, S0_Q16 ), 20 ) + SKP_LSHIFT( S0_Q16, 1 ) - S1_Q16;
-        S1_Q16 = SKP_min( S1_Q16, ( 1 << 16 ) );
-    }
-}
--- a/src/SKP_Silk_array_maxabs.c
+++ /dev/null
@@ -1,64 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_int16_array_maxabs.c                                      *
- *                                                                      *
- * Function that returns the maximum absolut value of                   *
- * the input vector                                                     *
- *                                                                      *
- * Copyright 2006 (c), Skype Limited                                    *
- * Date: 060221                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Function that returns the maximum absolut value of the input vector */
-SKP_int16 SKP_Silk_int16_array_maxabs(    /* O    Maximum absolute value, max: 2^15-1   */
-    const SKP_int16        *vec,            /* I    Input vector  [len]                   */
-    const SKP_int32        len              /* I    Length of input vector                */
-)                    
-{
-    SKP_int32 max = 0, i, lvl = 0, ind;
-
-    ind = len - 1;
-    max = SKP_SMULBB( vec[ ind ], vec[ ind ] );
-    for( i = len - 2; i >= 0; i-- ) {
-        lvl = SKP_SMULBB( vec[ i ], vec[ i ] );
-        if( lvl > max ) {
-            max = lvl;
-            ind = i;
-        }
-    }
-
-    /* Do not return 32768, as it will not fit in an int16 so may lead to problems later on */
-    lvl = SKP_abs( vec[ ind ] );
-    if( lvl > SKP_int16_MAX ) {
-        return( SKP_int16_MAX );
-    } else {
-        return( (SKP_int16)lvl );
-    }
-}
--- a/src/SKP_Silk_autocorr.c
+++ /dev/null
@@ -1,81 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_autocorr.c                                                *
- *                                                                      *
- * Calculates the autocorrelation                                       *
- * The result has 29 non-zero bits for the first correlation, to leave  *
- * some    room for adding white noise fractions etc.                   *
- *                                                                      *
- * Copyright 2008 (c), Skype Limited                                    *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Compute autocorrelation */
-void SKP_Silk_autocorr( 
-    SKP_int32        *results,                   /* O    Result (length correlationCount)            */
-    SKP_int32        *scale,                     /* O    Scaling of the correlation vector           */
-    const SKP_int16  *inputData,                 /* I    Input data to correlate                     */
-    const SKP_int    inputDataSize,              /* I    Length of input                             */
-    const SKP_int    correlationCount            /* I    Number of correlation taps to compute       */
-)
-{
-    SKP_int   i, lz, nRightShifts, corrCount;
-    SKP_int64 corr64;
-
-    corrCount = SKP_min_int( inputDataSize, correlationCount );
-
-    /* compute energy (zero-lag correlation) */
-    corr64 = SKP_Silk_inner_prod16_aligned_64( inputData, inputData, inputDataSize );
-
-    /* deal with all-zero input data */
-    corr64 += 1;
-
-    /* number of leading zeros */
-    lz = SKP_Silk_CLZ64( corr64 );
-
-    /* scaling: number of right shifts applied to correlations */
-    nRightShifts = 35 - lz;
-    *scale = nRightShifts;
-
-    if( nRightShifts <= 0 ) {
-        results[ 0 ] = SKP_LSHIFT( (SKP_int32)SKP_CHECK_FIT32( corr64 ), -nRightShifts );
-
-        /* compute remaining correlations based on int32 inner product */
-          for( i = 1; i < corrCount; i++ ) {
-            results[ i ] = SKP_LSHIFT( SKP_Silk_inner_prod_aligned( inputData, inputData + i, inputDataSize - i ), -nRightShifts );
-        }
-    } else {
-        results[ 0 ] = (SKP_int32)SKP_CHECK_FIT32( SKP_RSHIFT64( corr64, nRightShifts ) );
-
-        /* compute remaining correlations based on int64 inner product */
-          for( i = 1; i < corrCount; i++ ) {
-            results[ i ] =  (SKP_int32)SKP_CHECK_FIT32( SKP_RSHIFT64( SKP_Silk_inner_prod16_aligned_64( inputData, inputData + i, inputDataSize - i ), nRightShifts ) );
-        }
-    }
-}
--- a/src/SKP_Silk_biquad.c
+++ /dev/null
@@ -1,72 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_biquad.c                                                  *
- *                                                                      *
- * Second order ARMA filter                                             *
- * Can handle slowly varying filter coefficients                        *
- *                                                                      *
- * Copyright 2006 (c), Skype Limited                                    *
- * Date: 060221                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Second order ARMA filter */
-/* Can handle slowly varying filter coefficients */
-void SKP_Silk_biquad(
-    const SKP_int16      *in,        /* I:    input signal               */
-    const SKP_int16      *B,         /* I:    MA coefficients, Q13 [3]   */
-    const SKP_int16      *A,         /* I:    AR coefficients, Q13 [2]   */
-    SKP_int32            *S,         /* I/O: state vector [2]            */
-    SKP_int16            *out,       /* O:    output signal              */
-    const SKP_int32      len         /* I:    signal length              */
-)
-{
-    SKP_int   k, in16;
-    SKP_int32 A0_neg, A1_neg, S0, S1, out32, tmp32;
-
-    S0 = S[ 0 ];
-    S1 = S[ 1 ];
-    A0_neg = -A[ 0 ];
-    A1_neg = -A[ 1 ];
-    for( k = 0; k < len; k++ ) {
-        /* S[ 0 ], S[ 1 ]: Q13 */
-        in16  = in[ k ];
-        out32 = SKP_SMLABB( S0, in16, B[ 0 ] );
-
-        S0 = SKP_SMLABB( S1, in16, B[ 1 ] );
-        S0 += SKP_LSHIFT( SKP_SMULWB( out32, A0_neg ), 3 );
-
-        S1 = SKP_LSHIFT( SKP_SMULWB( out32, A1_neg ), 3 );
-        S1 = SKP_SMLABB( S1, in16, B[ 2 ] );
-        tmp32    = SKP_RSHIFT_ROUND( out32, 13 ) + 1;
-        out[ k ] = (SKP_int16)SKP_SAT16( tmp32 );
-    }
-    S[ 0 ] = S0;
-    S[ 1 ] = S1;
-}
--- a/src/SKP_Silk_biquad_alt.c
+++ /dev/null
@@ -1,73 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_biquad_alt.c                                              *
- *                                                                      *
- * Second order ARMA filter                                             *
- * Can handle slowly varying filter coefficients                        *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-
-/* Second order ARMA filter, alternative implementation */
-void SKP_Silk_biquad_alt(
-    const SKP_int16      *in,            /* I:    Input signal                   */
-    const SKP_int32      *B_Q28,         /* I:    MA coefficients [3]            */
-    const SKP_int32      *A_Q28,         /* I:    AR coefficients [2]            */
-    SKP_int32            *S,             /* I/O: State vector [2]                */
-    SKP_int16            *out,           /* O:    Output signal                  */
-    const SKP_int32      len             /* I:    Signal length (must be even)   */
-)
-{
-    /* DIRECT FORM II TRANSPOSED (uses 2 element state vector) */
-    SKP_int   k;
-    SKP_int32 inval, A0_U_Q28, A0_L_Q28, A1_U_Q28, A1_L_Q28, out32_Q14;
-
-    /* Negate A_Q28 values and split in two parts */
-    A0_L_Q28 = ( -A_Q28[ 0 ] ) & 0x00003FFF;        /* lower part */
-    A0_U_Q28 = SKP_RSHIFT( -A_Q28[ 0 ], 14 );       /* upper part */
-    A1_L_Q28 = ( -A_Q28[ 1 ] ) & 0x00003FFF;        /* lower part */
-    A1_U_Q28 = SKP_RSHIFT( -A_Q28[ 1 ], 14 );       /* upper part */
-    
-    for( k = 0; k < len; k++ ) {
-        /* S[ 0 ], S[ 1 ]: Q12 */
-        inval = in[ k ];
-        out32_Q14 = SKP_LSHIFT( SKP_SMLAWB( S[ 0 ], B_Q28[ 0 ], inval ), 2 );
-
-        S[ 0 ] = S[1] + SKP_RSHIFT( SKP_SMULWB( out32_Q14, A0_L_Q28 ), 14 );
-        S[ 0 ] = SKP_SMLAWB( S[ 0 ], out32_Q14, A0_U_Q28 );
-        S[ 0 ] = SKP_SMLAWB( S[ 0 ], B_Q28[ 1 ], inval);
-
-        S[ 1 ] = SKP_RSHIFT( SKP_SMULWB( out32_Q14, A1_L_Q28 ), 14 );
-        S[ 1 ] = SKP_SMLAWB( S[ 1 ], out32_Q14, A1_U_Q28 );
-        S[ 1 ] = SKP_SMLAWB( S[ 1 ], B_Q28[ 2 ], inval );
-
-        /* Scale back to Q0 and saturate */
-        out[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT( out32_Q14, 14 ) + 2 );
-    }
-}
--- a/src/SKP_Silk_burg_modified.c
+++ /dev/null
@@ -1,228 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_burg_modified.c                                           *
- *                                                                      *
- * Calculates the reflection coefficients from the input vector         *
- * Input vector contains nb_subfr sub vectors of length L_sub + D       *
- *                                                                      *
- * Copyright 2009 (c), Skype Limited                                    *
- * Date: 100105                                                         *
- */
-
-#include "SKP_Silk_SigProc_FIX.h"
-
-#define MAX_FRAME_SIZE              544 // subfr_length * nb_subfr = ( 0.005 * 24000 + 16 ) * 4 = 544
-#define MAX_NB_SUBFR                4
-
-#define QA                          24
-#define N_BITS_HEAD_ROOM            2
-#define MIN_RSHIFTS                 -16
-#define MAX_RSHIFTS                 (32 - QA)
-
-/* Compute reflection coefficients from input signal */
-void SKP_Silk_burg_modified(
-    SKP_int32       *res_nrg,           /* O    residual energy                                                 */
-    SKP_int         *res_nrg_Q,         /* O    residual energy Q value                                         */
-    SKP_int32       A_Q16[],            /* O    prediction coefficients (length order)                          */
-    const SKP_int16 x[],                /* I    input signal, length: nb_subfr * ( D + subfr_length )           */
-    const SKP_int   subfr_length,       /* I    input signal subframe length (including D preceeding samples)   */
-    const SKP_int   nb_subfr,           /* I    number of subframes stacked in x                                */
-    const SKP_int32 WhiteNoiseFrac_Q32, /* I    fraction added to zero-lag autocorrelation                      */
-    const SKP_int   D                   /* I    order                                                           */
-)
-{
-    SKP_int         k, n, s, lz, rshifts, rshifts_extra;
-    SKP_int32       C0, num, nrg, rc_Q31, Atmp_QA, Atmp1, tmp1, tmp2, x1, x2;
-    const SKP_int16 *x_ptr;
-
-    SKP_int32       C_first_row[ SigProc_MAX_ORDER_LPC ];
-    SKP_int32       C_last_row[  SigProc_MAX_ORDER_LPC ];
-    SKP_int32       Af_QA[       SigProc_MAX_ORDER_LPC ];
-
-    SKP_int32       CAf[ SigProc_MAX_ORDER_LPC + 1 ];
-    SKP_int32       CAb[ SigProc_MAX_ORDER_LPC + 1 ];
-
-    SKP_assert( subfr_length * nb_subfr <= MAX_FRAME_SIZE );
-    SKP_assert( nb_subfr <= MAX_NB_SUBFR );
-
-
-    /* Compute autocorrelations, added over subframes */
-    SKP_Silk_sum_sqr_shift( &C0, &rshifts, x, nb_subfr * subfr_length );
-    if( rshifts > MAX_RSHIFTS ) {
-        C0 = SKP_LSHIFT32( C0, rshifts - MAX_RSHIFTS );
-        SKP_assert( C0 > 0 );
-        rshifts = MAX_RSHIFTS;
-    } else {
-        lz = SKP_Silk_CLZ32( C0 ) - 1;
-        rshifts_extra = N_BITS_HEAD_ROOM - lz;
-        if( rshifts_extra > 0 ) {
-            rshifts_extra = SKP_min( rshifts_extra, MAX_RSHIFTS - rshifts );
-            C0 = SKP_RSHIFT32( C0, rshifts_extra );
-        } else {
-            rshifts_extra = SKP_max( rshifts_extra, MIN_RSHIFTS - rshifts );
-            C0 = SKP_LSHIFT32( C0, -rshifts_extra );
-        }
-        rshifts += rshifts_extra;
-    }
-    SKP_memset( C_first_row, 0, SigProc_MAX_ORDER_LPC * sizeof( SKP_int32 ) );
-    if( rshifts > 0 ) {
-        for( s = 0; s < nb_subfr; s++ ) {
-            x_ptr = x + s * subfr_length;
-            for( n = 1; n < D + 1; n++ ) {
-                C_first_row[ n - 1 ] += (SKP_int32)SKP_RSHIFT64( 
-                    SKP_Silk_inner_prod16_aligned_64( x_ptr, x_ptr + n, subfr_length - n ), rshifts );
-            }
-        }
-    } else {
-        for( s = 0; s < nb_subfr; s++ ) {
-            x_ptr = x + s * subfr_length;
-            for( n = 1; n < D + 1; n++ ) {
-                C_first_row[ n - 1 ] += SKP_LSHIFT32( 
-                    SKP_Silk_inner_prod_aligned( x_ptr, x_ptr + n, subfr_length - n ), -rshifts );
-            }
-        }
-    }
-    SKP_memcpy( C_last_row, C_first_row, SigProc_MAX_ORDER_LPC * sizeof( SKP_int32 ) );
-    
-    /* Initialize */
-    CAb[ 0 ] = CAf[ 0 ] = C0 + SKP_SMMUL( WhiteNoiseFrac_Q32, C0 ) + 1;         // Q(-rshifts)
-
-    for( n = 0; n < D; n++ ) {
-        /* Update first row of correlation matrix (without first element) */
-        /* Update last row of correlation matrix (without last element, stored in reversed order) */
-        /* Update C * Af */
-        /* Update C * flipud(Af) (stored in reversed order) */
-        if( rshifts > -2 ) {
-            for( s = 0; s < nb_subfr; s++ ) {
-                x_ptr = x + s * subfr_length;
-                x1  = -SKP_LSHIFT32( (SKP_int32)x_ptr[ n ],                    16 - rshifts );      // Q(16-rshifts)
-                x2  = -SKP_LSHIFT32( (SKP_int32)x_ptr[ subfr_length - n - 1 ], 16 - rshifts );      // Q(16-rshifts)
-                tmp1 = SKP_LSHIFT32( (SKP_int32)x_ptr[ n ],                    QA - 16 );           // Q(QA-16)
-                tmp2 = SKP_LSHIFT32( (SKP_int32)x_ptr[ subfr_length - n - 1 ], QA - 16 );           // Q(QA-16)
-                for( k = 0; k < n; k++ ) {
-                    C_first_row[ k ] = SKP_SMLAWB( C_first_row[ k ], x1, x_ptr[ n - k - 1 ]            ); // Q( -rshifts )
-                    C_last_row[ k ]  = SKP_SMLAWB( C_last_row[ k ],  x2, x_ptr[ subfr_length - n + k ] ); // Q( -rshifts )
-                    Atmp_QA = Af_QA[ k ];
-                    tmp1 = SKP_SMLAWB( tmp1, Atmp_QA, x_ptr[ n - k - 1 ]            );              // Q(QA-16)
-                    tmp2 = SKP_SMLAWB( tmp2, Atmp_QA, x_ptr[ subfr_length - n + k ] );              // Q(QA-16)
-                }
-                tmp1 = SKP_LSHIFT32( -tmp1, 32 - QA - rshifts );                                    // Q(16-rshifts)
-                tmp2 = SKP_LSHIFT32( -tmp2, 32 - QA - rshifts );                                    // Q(16-rshifts)
-                for( k = 0; k <= n; k++ ) {
-                    CAf[ k ] = SKP_SMLAWB( CAf[ k ], tmp1, x_ptr[ n - k ]                    );     // Q( -rshift )
-                    CAb[ k ] = SKP_SMLAWB( CAb[ k ], tmp2, x_ptr[ subfr_length - n + k - 1 ] );     // Q( -rshift )
-                }
-            }
-        } else {
-            for( s = 0; s < nb_subfr; s++ ) {
-                x_ptr = x + s * subfr_length;
-                x1  = -SKP_LSHIFT32( (SKP_int32)x_ptr[ n ],                    -rshifts );          // Q( -rshifts )
-                x2  = -SKP_LSHIFT32( (SKP_int32)x_ptr[ subfr_length - n - 1 ], -rshifts );          // Q( -rshifts )
-                tmp1 = SKP_LSHIFT32( (SKP_int32)x_ptr[ n ],                    17 );                // Q17
-                tmp2 = SKP_LSHIFT32( (SKP_int32)x_ptr[ subfr_length - n - 1 ], 17 );                // Q17
-                for( k = 0; k < n; k++ ) {
-                    C_first_row[ k ] = SKP_MLA( C_first_row[ k ], x1, x_ptr[ n - k - 1 ]            ); // Q( -rshifts )
-                    C_last_row[ k ]  = SKP_MLA( C_last_row[ k ],  x2, x_ptr[ subfr_length - n + k ] ); // Q( -rshifts )
-                    Atmp1 = SKP_RSHIFT_ROUND( Af_QA[ k ], QA - 17 );                                // Q17
-                    tmp1 = SKP_MLA( tmp1, x_ptr[ n - k - 1 ],            Atmp1 );                   // Q17
-                    tmp2 = SKP_MLA( tmp2, x_ptr[ subfr_length - n + k ], Atmp1 );                   // Q17
-                }
-                tmp1 = -tmp1;                                                                       // Q17
-                tmp2 = -tmp2;                                                                       // Q17
-                for( k = 0; k <= n; k++ ) {
-                    CAf[ k ] = SKP_SMLAWW( CAf[ k ], tmp1, 
-                        SKP_LSHIFT32( (SKP_int32)x_ptr[ n - k ], -rshifts - 1 ) );                  // Q( -rshift )
-                    CAb[ k ] = SKP_SMLAWW( CAb[ k ], tmp2, 
-                        SKP_LSHIFT32( (SKP_int32)x_ptr[ subfr_length - n + k - 1 ], -rshifts - 1 ) );// Q( -rshift )
-                }
-            }
-        }
-
-        /* Calculate nominator and denominator for the next order reflection (parcor) coefficient */
-        tmp1 = C_first_row[ n ];                                                            // Q( -rshifts )
-        tmp2 = C_last_row[ n ];                                                             // Q( -rshifts )
-        num  = 0;                                                                           // Q( -rshifts )
-        nrg  = SKP_ADD32( CAb[ 0 ], CAf[ 0 ] );                                             // Q( 1-rshifts )
-        for( k = 0; k < n; k++ ) {
-            Atmp_QA = Af_QA[ k ];
-            lz = SKP_Silk_CLZ32( SKP_abs( Atmp_QA ) ) - 1;
-            lz = SKP_min( 32 - QA, lz );
-            Atmp1 = SKP_LSHIFT32( Atmp_QA, lz );                                            // Q( QA + lz )
-
-            tmp1 = SKP_ADD_LSHIFT32( tmp1, SKP_SMMUL( C_last_row[  n - k - 1 ], Atmp1 ), 32 - QA - lz );    // Q( -rshifts )
-            tmp2 = SKP_ADD_LSHIFT32( tmp2, SKP_SMMUL( C_first_row[ n - k - 1 ], Atmp1 ), 32 - QA - lz );    // Q( -rshifts )
-            num  = SKP_ADD_LSHIFT32( num,  SKP_SMMUL( CAb[ n - k ],             Atmp1 ), 32 - QA - lz );    // Q( -rshifts )
-            nrg  = SKP_ADD_LSHIFT32( nrg,  SKP_SMMUL( SKP_ADD32( CAb[ k + 1 ], CAf[ k + 1 ] ), 
-                                                                                Atmp1 ), 32 - QA - lz );    // Q( 1-rshifts )
-        }
-        CAf[ n + 1 ] = tmp1;                                                                // Q( -rshifts )
-        CAb[ n + 1 ] = tmp2;                                                                // Q( -rshifts )
-        num = SKP_ADD32( num, tmp2 );                                                       // Q( -rshifts )
-        num = SKP_LSHIFT32( -num, 1 );                                                      // Q( 1-rshifts )
-
-        /* Calculate the next order reflection (parcor) coefficient */
-        if( SKP_abs( num ) < nrg ) {
-            rc_Q31 = SKP_DIV32_varQ( num, nrg, 31 );
-        } else {
-            /* Negative energy or ratio too high; set remaining coefficients to zero and exit loop */
-            SKP_memset( &Af_QA[ n ], 0, ( D - n ) * sizeof( SKP_int32 ) );
-            SKP_assert( 0 );
-            break;
-        }
-
-        /* Update the AR coefficients */
-        for( k = 0; k < (n + 1) >> 1; k++ ) {
-            tmp1 = Af_QA[ k ];                                                              // QA
-            tmp2 = Af_QA[ n - k - 1 ];                                                      // QA
-            Af_QA[ k ]         = SKP_ADD_LSHIFT32( tmp1, SKP_SMMUL( tmp2, rc_Q31 ), 1 );    // QA
-            Af_QA[ n - k - 1 ] = SKP_ADD_LSHIFT32( tmp2, SKP_SMMUL( tmp1, rc_Q31 ), 1 );    // QA
-        }
-        Af_QA[ n ] = SKP_RSHIFT32( rc_Q31, 31 - QA );                                       // QA
-
-        /* Update C * Af and C * Ab */
-        for( k = 0; k <= n + 1; k++ ) {
-            tmp1 = CAf[ k ];                                                                // Q( -rshifts )
-            tmp2 = CAb[ n - k + 1 ];                                                        // Q( -rshifts )
-            CAf[ k ]         = SKP_ADD_LSHIFT32( tmp1, SKP_SMMUL( tmp2, rc_Q31 ), 1 );      // Q( -rshifts )
-            CAb[ n - k + 1 ] = SKP_ADD_LSHIFT32( tmp2, SKP_SMMUL( tmp1, rc_Q31 ), 1 );      // Q( -rshifts )
-        }
-    }
-
-    /* Return residual energy */
-    nrg  = CAf[ 0 ];                                                                        // Q( -rshifts )
-    tmp1 = 1 << 16;                                                                         // Q16
-    for( k = 0; k < D; k++ ) {
-        Atmp1 = SKP_RSHIFT_ROUND( Af_QA[ k ], QA - 16 );                                    // Q16
-        nrg  = SKP_SMLAWW( nrg, CAf[ k + 1 ], Atmp1 );                                      // Q( -rshifts )
-        tmp1 = SKP_SMLAWW( tmp1, Atmp1, Atmp1 );                                            // Q16
-        A_Q16[ k ] = -Atmp1;
-    }
-    *res_nrg = SKP_SMLAWW( nrg, SKP_SMMUL( WhiteNoiseFrac_Q32, C0 ), -tmp1 );               // Q( -rshifts )
-    *res_nrg_Q = -rshifts;
-}
--- a/src/SKP_Silk_bwexpander.c
+++ /dev/null
@@ -1,49 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Chirp (bandwidth expand) LP AR filter */
-void SKP_Silk_bwexpander( 
-    SKP_int16            *ar,        /* I/O  AR filter to be expanded (without leading 1)    */
-    const SKP_int        d,          /* I    Length of ar                                    */
-    SKP_int32            chirp_Q16   /* I    Chirp factor (typically in the range 0 to 1)    */
-)
-{
-    SKP_int   i;
-    SKP_int32 chirp_minus_one_Q16;
-
-    chirp_minus_one_Q16 = chirp_Q16 - 65536;
-
-    /* NB: Dont use SKP_SMULWB, instead of SKP_RSHIFT_ROUND( SKP_MUL() , 16 ), below. */
-    /* Bias in SKP_SMULWB can lead to unstable filters                                */
-    for( i = 0; i < d - 1; i++ ) {
-        ar[ i ]    = (SKP_int16)SKP_RSHIFT_ROUND( SKP_MUL( chirp_Q16, ar[ i ]             ), 16 );
-        chirp_Q16 +=            SKP_RSHIFT_ROUND( SKP_MUL( chirp_Q16, chirp_minus_one_Q16 ), 16 );
-    }
-    ar[ d - 1 ] = (SKP_int16)SKP_RSHIFT_ROUND( SKP_MUL( chirp_Q16, ar[ d - 1 ] ), 16 );
-}
--- a/src/SKP_Silk_bwexpander_32.c
+++ /dev/null
@@ -1,46 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Chirp (bandwidth expand) LP AR filter */
-void SKP_Silk_bwexpander_32( 
-    SKP_int32        *ar,      /* I/O    AR filter to be expanded (without leading 1)    */
-    const SKP_int    d,        /* I    Length of ar                                      */
-    SKP_int32        chirp_Q16 /* I    Chirp factor in Q16                               */
-)
-{
-    SKP_int   i;
-    SKP_int32 tmp_chirp_Q16;
-
-    tmp_chirp_Q16 = chirp_Q16;
-    for( i = 0; i < d - 1; i++ ) {
-        ar[ i ]       = SKP_SMULWW( ar[ i ],   tmp_chirp_Q16 );
-        tmp_chirp_Q16 = SKP_SMULWW( chirp_Q16, tmp_chirp_Q16 );
-    }
-    ar[ d - 1 ] = SKP_SMULWW( ar[ d - 1 ], tmp_chirp_Q16 );
-}
--- a/src/SKP_Silk_code_signs.c
+++ /dev/null
@@ -1,87 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-//#define SKP_enc_map(a)                ((a) > 0 ? 1 : 0)
-//#define SKP_dec_map(a)                ((a) > 0 ? 1 : -1)
-/* shifting avoids if-statement */
-#define SKP_enc_map(a)                  ( SKP_RSHIFT( (a), 15 ) + 1 )
-#define SKP_dec_map(a)                  ( SKP_LSHIFT( (a),  1 ) - 1 )
-
-/* Encodes signs of excitation */
-void SKP_Silk_encode_signs(
-    SKP_Silk_range_coder_state      *sRC,               /* I/O  Range coder state                       */
-    const SKP_int                   q[],                /* I    Pulse signal                            */
-    const SKP_int                   length,             /* I    Length of input                         */
-    const SKP_int                   sigtype,            /* I    Signal type                             */
-    const SKP_int                   QuantOffsetType,    /* I    Quantization offset type                */
-    const SKP_int                   RateLevelIndex      /* I    Rate level index                        */
-)
-{
-    SKP_int i;
-    SKP_int inData;
-    const SKP_uint16 *cdf;
-
-    i = SKP_SMULBB( N_RATE_LEVELS - 1, SKP_LSHIFT( sigtype, 1 ) + QuantOffsetType ) + RateLevelIndex;
-    cdf = SKP_Silk_sign_CDF[ i ];
-    
-    for( i = 0; i < length; i++ ) {
-        if( q[ i ] != 0 ) {
-            inData = SKP_enc_map( q[ i ] ); /* - = 0, + = 1 */
-            SKP_Silk_range_encoder( sRC, inData, cdf );
-        }
-    }
-}
-
-/* Decodes signs of excitation */
-void SKP_Silk_decode_signs(
-    SKP_Silk_range_coder_state      *sRC,               /* I/O  Range coder state                           */
-    SKP_int                         q[],                /* I/O  pulse signal                                */
-    const SKP_int                   length,             /* I    length of output                            */
-    const SKP_int                   sigtype,            /* I    Signal type                                 */
-    const SKP_int                   QuantOffsetType,    /* I    Quantization offset type                    */
-    const SKP_int                   RateLevelIndex      /* I    Rate Level Index                            */
-)
-{
-    SKP_int i;
-    SKP_int data;
-    const SKP_uint16 *cdf;
-
-    i = SKP_SMULBB( N_RATE_LEVELS - 1, SKP_LSHIFT( sigtype, 1 ) + QuantOffsetType ) + RateLevelIndex;
-    cdf = SKP_Silk_sign_CDF[ i ];
-    
-    for( i = 0; i < length; i++ ) {
-        if( q[ i ] > 0 ) {
-            SKP_Silk_range_decoder( &data, sRC, cdf, 1 );
-            /* attach sign */
-            /* implementation with shift, subtraction, multiplication */
-            q[ i ] *= SKP_dec_map( data );
-        }
-    }
-}
-
--- a/src/SKP_Silk_common_pitch_est_defines.h
+++ /dev/null
@@ -1,76 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef SIGPROC_COMMON_PITCH_EST_DEFINES_H
-#define SIGPROC_COMMON_PITCH_EST_DEFINES_H
-
-#include "SKP_Silk_SigProc_FIX.h"
-
-/************************************************************/
-/* Definitions For Fix pitch estimator                      */
-/************************************************************/
-
-#define PITCH_EST_MAX_FS_KHZ                24 /* Maximum sampling frequency used */
-
-#define PITCH_EST_FRAME_LENGTH_MS           40 /* 40 ms */
-
-#define PITCH_EST_MAX_FRAME_LENGTH          (PITCH_EST_FRAME_LENGTH_MS * PITCH_EST_MAX_FS_KHZ)
-#define PITCH_EST_MAX_FRAME_LENGTH_ST_1     (PITCH_EST_MAX_FRAME_LENGTH >> 2)
-#define PITCH_EST_MAX_FRAME_LENGTH_ST_2     (PITCH_EST_MAX_FRAME_LENGTH >> 1)
-#define PITCH_EST_MAX_SF_FRAME_LENGTH       (PITCH_EST_SUB_FRAME * PITCH_EST_MAX_FS_KHZ)
-
-#define PITCH_EST_MAX_LAG_MS                18            /* 18 ms -> 56 Hz */
-#define PITCH_EST_MIN_LAG_MS                2            /* 2 ms -> 500 Hz */
-#define PITCH_EST_MAX_LAG                   (PITCH_EST_MAX_LAG_MS * PITCH_EST_MAX_FS_KHZ)
-#define PITCH_EST_MIN_LAG                   (PITCH_EST_MIN_LAG_MS * PITCH_EST_MAX_FS_KHZ)
-
-#define PITCH_EST_NB_SUBFR                  4
-
-#define PITCH_EST_D_SRCH_LENGTH             24
-
-#define PITCH_EST_MAX_DECIMATE_STATE_LENGTH 7
-
-#define PITCH_EST_NB_STAGE3_LAGS            5
-
-#define PITCH_EST_NB_CBKS_STAGE2            3
-#define PITCH_EST_NB_CBKS_STAGE2_EXT        11
-
-#define PITCH_EST_CB_mn2                    1
-#define PITCH_EST_CB_mx2                    2
-
-#define PITCH_EST_NB_CBKS_STAGE3_MAX        34
-#define PITCH_EST_NB_CBKS_STAGE3_MID        24
-#define PITCH_EST_NB_CBKS_STAGE3_MIN        16
-
-extern const SKP_int16 SKP_Silk_CB_lags_stage2[PITCH_EST_NB_SUBFR][PITCH_EST_NB_CBKS_STAGE2_EXT];
-extern const SKP_int16 SKP_Silk_CB_lags_stage3[PITCH_EST_NB_SUBFR][PITCH_EST_NB_CBKS_STAGE3_MAX];
-extern const SKP_int16 SKP_Silk_Lag_range_stage3[ SigProc_PITCH_EST_MAX_COMPLEX + 1 ] [ PITCH_EST_NB_SUBFR ][ 2 ];
-extern const SKP_int16 SKP_Silk_cbk_sizes_stage3[ SigProc_PITCH_EST_MAX_COMPLEX + 1 ];
-extern const SKP_int16 SKP_Silk_cbk_offsets_stage3[ SigProc_PITCH_EST_MAX_COMPLEX + 1 ];
-
-#endif
-
--- a/src/SKP_Silk_control_codec_FIX.c
+++ /dev/null
@@ -1,656 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-/* Control encoder SNR */
-SKP_int SKP_Silk_control_encoder_FIX( 
-    SKP_Silk_encoder_state_FIX  *psEnc,             /* I/O  Pointer to Silk encoder state                   */
-    const SKP_int               API_fs_kHz,         /* I    External (API) sampling rate (kHz)              */
-    const SKP_int               PacketSize_ms,      /* I    Packet length (ms)                              */
-    SKP_int32                   TargetRate_bps,     /* I    Target max bitrate (bps) (used if SNR_dB == 0)  */
-    const SKP_int               PacketLoss_perc,    /* I    Packet loss rate (in percent)                   */
-    const SKP_int               INBandFec_enabled,  /* I    Enable (1) / disable (0) inband FEC             */
-    const SKP_int               DTX_enabled,        /* I    Enable / disable DTX                            */
-    const SKP_int               InputFramesize_ms,  /* I    Inputframe in ms                                */
-    const SKP_int               Complexity          /* I    Complexity (0->low; 1->medium; 2->high)         */
-)
-{
-    SKP_int32 LBRRRate_thres_bps;
-    SKP_int   k, fs_kHz, ret = 0;
-    SKP_int32 frac_Q6;
-    const SKP_int32 *rateTable;
-
-    /* State machine for the SWB/WB switching */
-    fs_kHz = psEnc->sCmn.fs_kHz;
-    
-    /* Only switch during low speech activity, when no frames are sitting in the payload buffer */
-    if( API_fs_kHz == 8 || fs_kHz == 0 || API_fs_kHz < fs_kHz ) {
-        // Switching is not possible, encoder just initialized, or internal mode higher than external
-        fs_kHz = API_fs_kHz;
-    } else {
-
-        /* Resample all valid data in x_buf. Resampling the last part gets rid of a click, 5ms after switching  */
-        /* this is because the same state is used when downsampling in API.c and is then up to date             */
-        /* the click immidiatly after switching is most of the time still there                                 */
-
-        if( psEnc->sCmn.fs_kHz == 24 ) {
-            /* Accumulate the difference between the target rate and limit */
-            if( psEnc->sCmn.fs_kHz_changed == 0 ) {
-                psEnc->sCmn.bitrateDiff += SKP_MUL( InputFramesize_ms, TargetRate_bps - SWB2WB_BITRATE_BPS_INITIAL );
-            } else {
-                psEnc->sCmn.bitrateDiff += SKP_MUL( InputFramesize_ms, TargetRate_bps - SWB2WB_BITRATE_BPS );
-            }
-            psEnc->sCmn.bitrateDiff = SKP_min( psEnc->sCmn.bitrateDiff, 0 );
-
-            /* Check if we should switch from 24 to 16 kHz */
-#if SWITCH_TRANSITION_FILTERING
-            if( ( psEnc->sCmn.sLP.transition_frame_no == 0 ) && /* Transition phase not active */
-                ( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD || psEnc->sCmn.sSWBdetect.WB_detected == 1 ) &&
-                ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) {
-                psEnc->sCmn.sLP.transition_frame_no = 1; /* Begin transition phase */
-                psEnc->sCmn.sLP.mode = 0; /* Switch down */
-            }
-
-            if( ( psEnc->sCmn.sLP.transition_frame_no >= TRANSITION_FRAMES_DOWN ) && ( psEnc->sCmn.sLP.mode == 0 ) && /* Transition phase complete, ready to switch */
-#else
-            if( ( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD || psEnc->sCmn.sSWBdetect.WB_detected == 1 ) &&
-#endif
-                ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) {
-
-                    SKP_int16 x_buf[    2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; 
-                    SKP_int16 x_bufout[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ];
-                    
-                    psEnc->sCmn.bitrateDiff = 0;
-                    fs_kHz = 16;
-
-                    SKP_memcpy( x_buf, psEnc->x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) );
-
-                    SKP_memset( psEnc->sCmn.resample24To16state, 0, sizeof( psEnc->sCmn.resample24To16state ) );
-                    
-#if LOW_COMPLEXITY_ONLY
-                    {
-                        SKP_int16 scratch[ ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) + SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ];
-                        SKP_Silk_resample_2_3_coarse( &x_bufout[ 0 ], psEnc->sCmn.resample24To16state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape, (SKP_int16*)scratch );
-                    }
-#else
-                    SKP_Silk_resample_2_3( &x_bufout[ 0 ], psEnc->sCmn.resample24To16state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape );
-#endif
-
-                    /* set the first frame to zero, no performance difference was noticed though */
-                    SKP_memset( x_bufout, 0, 320 * sizeof( SKP_int16 ) );
-                    SKP_memcpy( psEnc->x_buf, x_bufout, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) );
-
-#if SWITCH_TRANSITION_FILTERING
-                    psEnc->sCmn.sLP.transition_frame_no = 0; /* Transition phase complete */
-#endif
-            }
-        } else if( psEnc->sCmn.fs_kHz == 16 ) {
-
-            /* Check if we should switch from 16 to 24 kHz */
-#if SWITCH_TRANSITION_FILTERING
-            if( ( psEnc->sCmn.sLP.transition_frame_no == 0 ) && /* No transition phase running, ready to switch */
-#else
-            if(
-#endif
-                ( API_fs_kHz > psEnc->sCmn.fs_kHz && TargetRate_bps >= WB2SWB_BITRATE_BPS && psEnc->sCmn.sSWBdetect.WB_detected == 0 ) && 
-                ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) {
-
-                SKP_int16 x_buf[          2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; 
-                SKP_int16 x_bufout[ 3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) / 2 ]; 
-                SKP_int32 resample16To24state[ 11 ];
-
-                psEnc->sCmn.bitrateDiff = 0;
-                fs_kHz = 24;
-                
-                SKP_memcpy( x_buf, psEnc->x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) );
-
-                SKP_memset( resample16To24state, 0, sizeof(resample16To24state) );
-                
-                SKP_Silk_resample_3_2( &x_bufout[ 0 ], resample16To24state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape );
-
-                /* set the first frame to zero, no performance difference was noticed though */
-                SKP_memset( x_bufout, 0, 480 * sizeof( SKP_int16 ) );
-                SKP_memcpy( psEnc->x_buf, x_bufout, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) );
-#if SWITCH_TRANSITION_FILTERING
-                psEnc->sCmn.sLP.mode = 1; /* Switch up */
-#endif
-            } else { 
-                /* accumulate the difference between the target rate and limit */
-                psEnc->sCmn.bitrateDiff += SKP_MUL( InputFramesize_ms, TargetRate_bps - WB2MB_BITRATE_BPS );
-                psEnc->sCmn.bitrateDiff = SKP_min( psEnc->sCmn.bitrateDiff, 0 );
-
-                /* Check if we should switch from 16 to 12 kHz */
-#if SWITCH_TRANSITION_FILTERING
-                if( ( psEnc->sCmn.sLP.transition_frame_no == 0 ) && /* Transition phase not active */
-                    ( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ) &&
-                    ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) {
-                    psEnc->sCmn.sLP.transition_frame_no = 1; /* Begin transition phase */
-                    psEnc->sCmn.sLP.mode = 0; /* Switch down */
-                }
-
-                if( ( psEnc->sCmn.sLP.transition_frame_no >= TRANSITION_FRAMES_DOWN ) && ( psEnc->sCmn.sLP.mode == 0 ) && /* Transition phase complete, ready to switch */
-#else
-                if( ( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ) &&
-#endif
-                    ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) {
-
-                    SKP_int16 x_buf[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; 
-
-                    SKP_memcpy( x_buf, psEnc->x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) );
-    
-                    psEnc->sCmn.bitrateDiff = 0;
-                    fs_kHz = 12;
-                    
-                    if( API_fs_kHz == 24 ) {
-
-                        /* Intermediate upsampling of x_bufFIX from 16 to 24 kHz */
-                        SKP_int16 x_buf24[ 3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) / 2 ]; 
-                        SKP_int32 scratch[    3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ];
-                        SKP_int32 resample16To24state[ 11 ];
-
-                        SKP_memset( resample16To24state, 0, sizeof( resample16To24state ) );
-                        SKP_Silk_resample_3_2( &x_buf24[ 0 ], resample16To24state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape );
-
-                        /* Update the state of the resampler used in API.c, from 24 to 12 kHz */
-                        SKP_memset( psEnc->sCmn.resample24To12state, 0, sizeof( psEnc->sCmn.resample24To12state ) );
-                        SKP_Silk_resample_1_2_coarse( &x_buf24[ 0 ], psEnc->sCmn.resample24To12state, &x_buf[ 0 ], scratch, SKP_RSHIFT( SKP_SMULBB( 3, SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape ), 2 ) );
-
-                        /* set the first frame to zero, no performance difference was noticed though */
-                        SKP_memset( x_buf, 0, 240 * sizeof( SKP_int16 ) );
-                        SKP_memcpy( psEnc->x_buf, x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) );
-
-                    } else if( API_fs_kHz == 16 ) {
-                        SKP_int16 x_bufout[ 3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) / 4 ]; 
-                        SKP_memset( psEnc->sCmn.resample16To12state, 0, sizeof( psEnc->sCmn.resample16To12state ) );
-                        
-                        SKP_Silk_resample_3_4( &x_bufout[ 0 ], psEnc->sCmn.resample16To12state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape );
-                    
-                        /* set the first frame to zero, no performance difference was noticed though */
-                        SKP_memset( x_bufout, 0, 240 * sizeof( SKP_int16 ) );
-                        SKP_memcpy( psEnc->x_buf, x_bufout, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) );
-                    }
-#if SWITCH_TRANSITION_FILTERING
-                    psEnc->sCmn.sLP.transition_frame_no = 0; /* Transition phase complete */
-#endif
-                }
-            }
-        } else if( psEnc->sCmn.fs_kHz == 12 ) {
-        
-            /* Check if we should switch from 12 to 16 kHz */
-#if SWITCH_TRANSITION_FILTERING
-            if( ( psEnc->sCmn.sLP.transition_frame_no == 0 ) && /* No transition phase running, ready to switch */
-#else
-            if(
-#endif
-                ( API_fs_kHz > psEnc->sCmn.fs_kHz && TargetRate_bps >= MB2WB_BITRATE_BPS ) &&
-                ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) {
-
-                SKP_int16 x_buf[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; 
-
-                SKP_memcpy( x_buf, psEnc->x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) );
-
-                psEnc->sCmn.bitrateDiff = 0;
-                fs_kHz = 16;
-
-                /* Reset state of the resampler to be used */
-                if( API_fs_kHz == 24 ) {
-            
-                    SKP_int16 x_bufout[ 2 * 2 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) / 3 ]; 
-
-                    /* Intermediate upsampling of x_bufFIX from 12 to 24 kHz */
-                    SKP_int16 x_buf24[ 2 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ]; 
-                    SKP_int32 scratch[    3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ];
-                    SKP_int32 resample12To24state[6];
-
-                    SKP_memset( resample12To24state, 0, sizeof( resample12To24state ) );
-                    SKP_Silk_resample_2_1_coarse( &x_buf[ 0 ], resample12To24state, &x_buf24[ 0 ], scratch, SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape );
-
-                    SKP_memset( psEnc->sCmn.resample24To16state, 0, sizeof( psEnc->sCmn.resample24To16state ) );
-                
-#if LOW_COMPLEXITY_ONLY
-                    SKP_assert( sizeof( SKP_int16 ) * ( 2 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) + SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ) <= sizeof( scratch ) );
-                    SKP_Silk_resample_2_3_coarse( &x_bufout[ 0 ], psEnc->sCmn.resample24To16state, &x_buf24[ 0 ], SKP_LSHIFT( SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape, 1 ), (SKP_int16*)scratch );
-#else
-                    SKP_Silk_resample_2_3( &x_bufout[ 0 ], psEnc->sCmn.resample24To16state, &x_buf24[ 0 ], SKP_LSHIFT( SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape, 1 ) );
-#endif
-                
-                    /* set the first frame to zero, no performance difference was noticed though */
-                    SKP_memset( x_bufout, 0, 320 * sizeof( SKP_int16 ) );
-                    SKP_memcpy( psEnc->x_buf, x_bufout, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) );
-                }
-#if SWITCH_TRANSITION_FILTERING
-                psEnc->sCmn.sLP.mode = 1; /* Switch up */
-#endif
-            } else { 
-                /* accumulate the difference between the target rate and limit */
-                psEnc->sCmn.bitrateDiff += SKP_MUL( InputFramesize_ms, TargetRate_bps - MB2NB_BITRATE_BPS );
-                psEnc->sCmn.bitrateDiff  = SKP_min( psEnc->sCmn.bitrateDiff, 0 );
-
-                /* Check if we should switch from 12 to 8 kHz */
-#if SWITCH_TRANSITION_FILTERING
-                if( ( psEnc->sCmn.sLP.transition_frame_no == 0 ) && /* Transition phase not active */
-                    ( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ) &&
-                    ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) {
-                    psEnc->sCmn.sLP.transition_frame_no = 1; /* Begin transition phase */
-                    psEnc->sCmn.sLP.mode = 0; /* Switch down */
-                }
-
-                if( ( psEnc->sCmn.sLP.transition_frame_no >= TRANSITION_FRAMES_DOWN ) && ( psEnc->sCmn.sLP.mode == 0 ) &&
-#else
-                if( ( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ) &&
-#endif
-                    ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) {
-                
-                    SKP_int16 x_buf[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; 
-
-                    SKP_memcpy( x_buf, psEnc->x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) );
-
-                    psEnc->sCmn.bitrateDiff = 0;
-                    fs_kHz = 8;
-
-                    if( API_fs_kHz == 24 ) {
-
-                        SKP_int32 scratch[    3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ];
-                        /* Intermediate upsampling of x_buf from 12 to 24 kHz */
-                        SKP_int16 x_buf24[ 2 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ];
-                        SKP_int32 resample12To24state[ 6 ];
-
-                        SKP_memset( resample12To24state, 0, sizeof( resample12To24state ) );
-                        SKP_Silk_resample_2_1_coarse( &x_buf[ 0 ], resample12To24state, &x_buf24[ 0 ], scratch, SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape );
-
-                        /* Update the state of the resampler used in API.c, from 24 to 8 kHz */
-                        SKP_memset( psEnc->sCmn.resample24To8state, 0, sizeof( psEnc->sCmn.resample24To8state ) );
-                        SKP_Silk_resample_1_3( &x_buf[ 0 ], psEnc->sCmn.resample24To8state, &x_buf24[ 0 ], SKP_LSHIFT( SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape, 1 ) );
-
-                        /* set the first frame to zero, no performance difference was noticed though */
-                        SKP_memset( x_buf, 0, 160 * sizeof( SKP_int16 ) );
-                        SKP_memcpy( psEnc->x_buf, x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) );
-
-                    } else if( API_fs_kHz == 16 ) {
-                        /* Intermediate upsampling of x_bufFIX from 12 to 16 kHz */
-                        SKP_int16 x_buf16[  3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) / 2 ]; 
-                        SKP_int32 resample12To16state[11];
-                        
-                        SKP_memset( resample12To16state, 0, sizeof( resample12To16state ) );
-                        SKP_Silk_resample_3_2( &x_buf16[ 0 ], resample12To16state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape );
-                        
-                        /* set the first frame to zero, no performance difference was noticed though */
-                        SKP_memset( x_buf, 0, 160 * sizeof( SKP_int16 ) );
-                        SKP_memcpy( psEnc->x_buf, x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) );
-
-                    } else if( API_fs_kHz == 12 ) {
-                        SKP_int16 x_bufout[ 2 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) / 3 ]; 
-                        SKP_memset( psEnc->sCmn.resample12To8state, 0, sizeof( psEnc->sCmn.resample12To8state ) );
-#if LOW_COMPLEXITY_ONLY
-                        {
-                            SKP_int16 scratch[ ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) + SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ];
-                            SKP_Silk_resample_2_3_coarse( &x_bufout[ 0 ], psEnc->sCmn.resample12To8state, &x_buf[ 0 ], 
-                                SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape, scratch );
-                        }
-#else
-                        SKP_Silk_resample_2_3( &x_bufout[ 0 ], psEnc->sCmn.resample12To8state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape );
-#endif
-                        /* set the first frame to zero, no performance difference was noticed though */
-                        SKP_memset( x_bufout, 0, 160 * sizeof( SKP_int16 ) );
-                        SKP_memcpy( psEnc->x_buf, x_bufout, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) );
-                    }
-#if SWITCH_TRANSITION_FILTERING
-                    psEnc->sCmn.sLP.transition_frame_no = 0; /* Transition phase complete */
-#endif
-                }
-            }
-        } else if( psEnc->sCmn.fs_kHz == 8 ) {
-
-            /* Check if we should switch from 8 to 12 kHz */
-#if SWITCH_TRANSITION_FILTERING
-            if( ( psEnc->sCmn.sLP.transition_frame_no == 0 ) && /* No transition phase running, ready to switch */
-#else
-            if(
-#endif
-                ( API_fs_kHz > psEnc->sCmn.fs_kHz && TargetRate_bps >= NB2MB_BITRATE_BPS ) &&
-                ( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) {
-
-                SKP_int16 x_buf[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; 
-
-                SKP_memcpy( x_buf, psEnc->x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) );
-
-                psEnc->sCmn.bitrateDiff = 0;
-                fs_kHz = 12;
-
-                /* Reset state of the resampler to be used */
-                if( API_fs_kHz == 24 ) {
-                    SKP_int16 x_buf24[  3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ]; 
-                    SKP_int32 scratch[ 3 * 3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) / 2 ];
-                    SKP_int32 resample8To24state[ 7 ];
-
-                    /* Intermediate upsampling of x_bufFIX from 8 to 24 kHz */
-                    SKP_memset( resample8To24state, 0, sizeof( resample8To24state ) );
-                    SKP_Silk_resample_3_1( &x_buf24[ 0 ], resample8To24state, &x_buf[ 0 ], SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape );
-
-                    SKP_memset( psEnc->sCmn.resample24To12state, 0, sizeof( psEnc->sCmn.resample24To12state ) );
-                
-                    SKP_Silk_resample_1_2_coarse( &x_buf24[ 0 ], psEnc->sCmn.resample24To12state, &x_buf[ 0 ], scratch, SKP_RSHIFT( SKP_SMULBB( 3, SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape ), 1 ) );
-                
-                    /* set the first frame to zero, no performance difference was noticed though */
-                    SKP_memset( x_buf, 0, 240 * sizeof( SKP_int16 ) );
-                    SKP_memcpy( psEnc->x_buf, x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) );
-                
-                } else if( API_fs_kHz == 16 ) {
-                    SKP_int16 x_buf16[ 2 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ]; 
-                    SKP_int32 scratch[ 3 * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ];
-                    SKP_int32 resample8To16state[ 6 ];
-
-                    /* Intermediate upsampling of x_bufFIX from 8 to 16 kHz */
-                    SKP_memset( resample8To16state, 0, sizeof( resample8To16state ) );
-                    SKP_Silk_resample_2_1_coarse( &x_buf[ 0 ], resample8To16state, &x_buf16[ 0 ], scratch, SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape );
-
-                    SKP_memset( psEnc->sCmn.resample16To12state, 0, sizeof( psEnc->sCmn.resample16To12state ) );
-                
-                    SKP_Silk_resample_3_4( &x_buf[ 0 ], psEnc->sCmn.resample16To12state, &x_buf16[ 0 ], SKP_LSHIFT( SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape, 1 ) );
-                
-                    /* set the first frame to zero, no performance difference was noticed though */
-                    SKP_memset( x_buf, 0, 240 * sizeof( SKP_int16 ) );
-                    SKP_memcpy( psEnc->x_buf, x_buf, ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * sizeof( SKP_int16 ) );
-                }
-#if SWITCH_TRANSITION_FILTERING
-                psEnc->sCmn.sLP.mode = 1; /* Switch up */
-#endif
-            } 
-        } else {
-            // Internal sample frequency not supported!
-            SKP_assert( 0 );
-        }
-    }
-
-#if SWITCH_TRANSITION_FILTERING
-    /* After switching up, stop transition filter during speech inactivity */
-    if( ( psEnc->sCmn.sLP.mode == 1 ) &&
-        ( psEnc->sCmn.sLP.transition_frame_no >= TRANSITION_FRAMES_UP ) && 
-        ( psEnc->speech_activity_Q8 < 128 ) && 
-        ( psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) {
-        
-        psEnc->sCmn.sLP.transition_frame_no = 0;
-
-        /* Reset transition filter state */
-        SKP_memset( psEnc->sCmn.sLP.In_LP_State, 0, 2 * sizeof( SKP_int32 ) );
-    }
-#endif
-
-
-
-    /* Set internal sampling frequency */
-    if( psEnc->sCmn.fs_kHz != fs_kHz ) {
-        /* reset part of the state */
-        SKP_memset( &psEnc->sShape,          0, sizeof( SKP_Silk_shape_state_FIX ) );
-        SKP_memset( &psEnc->sPrefilt,        0, sizeof( SKP_Silk_prefilter_state_FIX ) );
-        SKP_memset( &psEnc->sNSQ,            0, sizeof( SKP_Silk_nsq_state ) );
-        SKP_memset( &psEnc->sPred,           0, sizeof( SKP_Silk_predict_state_FIX ) );
-        SKP_memset( psEnc->sNSQ.xq,          0, ( 2 * MAX_FRAME_LENGTH ) * sizeof( SKP_int16 ) );
-        SKP_memset( psEnc->sNSQ_LBRR.xq,     0, ( 2 * MAX_FRAME_LENGTH ) * sizeof( SKP_int16 ) );
-        SKP_memset( psEnc->sCmn.LBRR_buffer, 0, MAX_LBRR_DELAY * sizeof( SKP_SILK_LBRR_struct ) );
-#if SWITCH_TRANSITION_FILTERING
-        SKP_memset( psEnc->sCmn.sLP.In_LP_State, 0, 2 * sizeof( SKP_int32 ) );
-        if( psEnc->sCmn.sLP.mode == 1 ) {
-            /* Begin transition phase */
-            psEnc->sCmn.sLP.transition_frame_no = 1;
-        } else {
-            /* End transition phase */
-            psEnc->sCmn.sLP.transition_frame_no = 0;
-        }
-#endif
-        psEnc->sCmn.inputBufIx          = 0;
-        psEnc->sCmn.nFramesInPayloadBuf = 0;
-        psEnc->sCmn.nBytesInPayloadBuf  = 0;
-        psEnc->sCmn.oldest_LBRR_idx     = 0;
-        psEnc->sCmn.TargetRate_bps      = 0; /* ensures that psEnc->SNR_dB is recomputed */
-
-        SKP_memset( psEnc->sPred.prev_NLSFq_Q15, 0, MAX_LPC_ORDER * sizeof( SKP_int ) );
-
-        /* Initialize non-zero parameters */
-        psEnc->sCmn.prevLag                 = 100;
-        psEnc->sCmn.prev_sigtype            = SIG_TYPE_UNVOICED;
-        psEnc->sCmn.first_frame_after_reset = 1;
-        psEnc->sPrefilt.lagPrev             = 100;
-        psEnc->sShape.LastGainIndex        = 1;
-        psEnc->sNSQ.lagPrev                = 100;
-        psEnc->sNSQ.prev_inv_gain_Q16      = 65536;
-        psEnc->sNSQ_LBRR.prev_inv_gain_Q16 = 65536;
-        psEnc->sCmn.fs_kHz = fs_kHz;
-        if( psEnc->sCmn.fs_kHz == 8 ) {
-            psEnc->sCmn.predictLPCOrder = MIN_LPC_ORDER;
-            psEnc->sCmn.psNLSF_CB[ 0 ]  = &SKP_Silk_NLSF_CB0_10;
-            psEnc->sCmn.psNLSF_CB[ 1 ]  = &SKP_Silk_NLSF_CB1_10;
-        } else {
-            psEnc->sCmn.predictLPCOrder = MAX_LPC_ORDER;
-            psEnc->sCmn.psNLSF_CB[ 0 ]  = &SKP_Silk_NLSF_CB0_16;
-            psEnc->sCmn.psNLSF_CB[ 1 ]  = &SKP_Silk_NLSF_CB1_16;
-        }
-        psEnc->sCmn.frame_length   = SKP_SMULBB( FRAME_LENGTH_MS, fs_kHz );
-        psEnc->sCmn.subfr_length   = SKP_DIV32_16( psEnc->sCmn.frame_length, NB_SUBFR );
-        psEnc->sCmn.la_pitch       = SKP_SMULBB( LA_PITCH_MS, fs_kHz );
-        psEnc->sCmn.la_shape       = SKP_SMULBB( LA_SHAPE_MS, fs_kHz );
-        psEnc->sPred.min_pitch_lag = SKP_SMULBB(  3, fs_kHz );
-        psEnc->sPred.max_pitch_lag = SKP_SMULBB( 18, fs_kHz );
-        psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS, fs_kHz );
-        if( psEnc->sCmn.fs_kHz == 24 ) {
-            psEnc->mu_LTP_Q8 = MU_LTP_QUANT_SWB_Q8;
-        } else if( psEnc->sCmn.fs_kHz == 16 ) {
-            psEnc->mu_LTP_Q8 = MU_LTP_QUANT_WB_Q8;
-        } else if( psEnc->sCmn.fs_kHz == 12 ) {
-            psEnc->mu_LTP_Q8 = MU_LTP_QUANT_MB_Q8;
-        } else {
-            psEnc->mu_LTP_Q8 = MU_LTP_QUANT_NB_Q8;
-        }
-        psEnc->sCmn.fs_kHz_changed = 1;
-        
-        /* Check that settings are valid */
-        SKP_assert( ( psEnc->sCmn.subfr_length * NB_SUBFR ) == psEnc->sCmn.frame_length );
-    } 
-   
-    /* Set encoding complexity */
-    if( Complexity == 0 || LOW_COMPLEXITY_ONLY ) {
-        /* Low complexity */
-        psEnc->sCmn.Complexity                  = 0;
-        psEnc->sCmn.pitchEstimationComplexity   = PITCH_EST_COMPLEXITY_LC_MODE;
-        psEnc->pitchEstimationThreshold_Q16     = FIND_PITCH_CORRELATION_THRESHOLD_Q16_LC_MODE;
-        psEnc->sCmn.pitchEstimationLPCOrder     = 8;
-        psEnc->sCmn.shapingLPCOrder             = 12;
-        psEnc->sCmn.nStatesDelayedDecision      = 1;
-        psEnc->NoiseShapingQuantizer            = SKP_Silk_NSQ;
-        psEnc->sCmn.useInterpolatedNLSFs        = 0;
-        psEnc->sCmn.LTPQuantLowComplexity       = 1;
-        psEnc->sCmn.NLSF_MSVQ_Survivors         = MAX_NLSF_MSVQ_SURVIVORS_LC_MODE;
-    } else if( Complexity == 1 ) {
-        /* Medium complexity */
-        psEnc->sCmn.Complexity                  = 1;
-        psEnc->sCmn.pitchEstimationComplexity   = PITCH_EST_COMPLEXITY_MC_MODE;
-        psEnc->pitchEstimationThreshold_Q16     = FIND_PITCH_CORRELATION_THRESHOLD_Q16_MC_MODE;
-        psEnc->sCmn.pitchEstimationLPCOrder     = 12;
-        psEnc->sCmn.shapingLPCOrder             = 16;
-        psEnc->sCmn.nStatesDelayedDecision      = 2;
-        psEnc->NoiseShapingQuantizer            = SKP_Silk_NSQ_del_dec;
-        psEnc->sCmn.useInterpolatedNLSFs        = 0;
-        psEnc->sCmn.LTPQuantLowComplexity       = 0;
-        psEnc->sCmn.NLSF_MSVQ_Survivors         = MAX_NLSF_MSVQ_SURVIVORS_MC_MODE;
-    } else if( Complexity == 2 ) {
-        /* High complexity */
-        psEnc->sCmn.Complexity                  = 2;
-        psEnc->sCmn.pitchEstimationComplexity   = PITCH_EST_COMPLEXITY_HC_MODE;
-        psEnc->pitchEstimationThreshold_Q16     = FIND_PITCH_CORRELATION_THRESHOLD_Q16_HC_MODE;
-        psEnc->sCmn.pitchEstimationLPCOrder     = 16;
-        psEnc->sCmn.shapingLPCOrder             = 16;
-        psEnc->sCmn.nStatesDelayedDecision      = 4;
-        psEnc->NoiseShapingQuantizer            = SKP_Silk_NSQ_del_dec;
-        psEnc->sCmn.useInterpolatedNLSFs        = 1;
-        psEnc->sCmn.LTPQuantLowComplexity       = 0;
-        psEnc->sCmn.NLSF_MSVQ_Survivors         = MAX_NLSF_MSVQ_SURVIVORS;
-    } else {
-        ret = SKP_SILK_ENC_WRONG_COMPLEXITY_SETTING;
-    }
-
-    /* Dont have higher Pitch estimation LPC order than predict LPC order */
-    psEnc->sCmn.pitchEstimationLPCOrder = SKP_min_int( psEnc->sCmn.pitchEstimationLPCOrder, psEnc->sCmn.predictLPCOrder );
-
-    SKP_assert( psEnc->sCmn.pitchEstimationLPCOrder <= FIND_PITCH_LPC_ORDER_MAX );
-    SKP_assert( psEnc->sCmn.shapingLPCOrder         <= SHAPE_LPC_ORDER_MAX );
-    SKP_assert( psEnc->sCmn.nStatesDelayedDecision  <= DEL_DEC_STATES_MAX );
-
-    /* Set bitrate/coding quality */
-    TargetRate_bps = SKP_min( TargetRate_bps, 100000 );
-    if( psEnc->sCmn.fs_kHz == 8 ) {
-        TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_NB_BPS );
-    } else if( psEnc->sCmn.fs_kHz == 12 ) {
-        TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_MB_BPS );
-    } else if( psEnc->sCmn.fs_kHz == 16 ) {
-        TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_WB_BPS );
-    } else {
-        TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_SWB_BPS );
-    }
-    if( TargetRate_bps != psEnc->sCmn.TargetRate_bps ) {
-        psEnc->sCmn.TargetRate_bps = TargetRate_bps;
-
-        /* if new TargetRate_bps, translate to SNR_dB value */
-        if( psEnc->sCmn.fs_kHz == 8 ) {
-            rateTable = TargetRate_table_NB;
-        } else if( psEnc->sCmn.fs_kHz == 12 ) {
-            rateTable = TargetRate_table_MB;
-        } else if( psEnc->sCmn.fs_kHz == 16 ) {
-            rateTable = TargetRate_table_WB;
-        } else {
-            rateTable = TargetRate_table_SWB;
-        }
-        for( k = 1; k < TARGET_RATE_TAB_SZ; k++ ) {
-            /* find bitrate interval in table and interpolate */
-            if( TargetRate_bps < rateTable[ k ] ) {
-                frac_Q6 = SKP_DIV32( SKP_LSHIFT( TargetRate_bps - rateTable[ k - 1 ], 6 ), rateTable[ k ] - rateTable[ k - 1 ] );
-                psEnc->SNR_dB_Q7 = SKP_LSHIFT( SNR_table_Q1[ k - 1 ], 6 ) + SKP_MUL( frac_Q6, SNR_table_Q1[ k ] - SNR_table_Q1[ k - 1 ] );
-                break;
-            }
-        }
-    }
-
-    /* Set packet size */
-    if( ( PacketSize_ms !=  20 ) && 
-        ( PacketSize_ms !=  40 ) && 
-        ( PacketSize_ms !=  60 ) && 
-        ( PacketSize_ms !=  80 ) && 
-        ( PacketSize_ms != 100 ) ) {
-        ret = SKP_SILK_ENC_PACKET_SIZE_NOT_SUPPORTED;
-    } else {
-        if( PacketSize_ms != psEnc->sCmn.PacketSize_ms ) {
-            psEnc->sCmn.PacketSize_ms = PacketSize_ms;
-
-            /* Packet length changes. Reset LBRR buffer */
-            SKP_Silk_LBRR_reset( &psEnc->sCmn );
-        }
-    }
-
-    /* Set packet loss rate measured by farend */
-    if( ( PacketLoss_perc < 0 ) || ( PacketLoss_perc > 100 ) ) {
-        ret = SKP_SILK_ENC_WRONG_LOSS_RATE;
-    }
-    psEnc->sCmn.PacketLoss_perc = PacketLoss_perc;
-
-#if USE_LBRR
-    if( INBandFec_enabled < 0 || INBandFec_enabled > 1 ) {
-        ret = SKP_SILK_ENC_WRONG_INBAND_FEC_SETTING;
-    }
-    
-    /* Only change settings if first frame in packet */
-    if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) {
-        
-        psEnc->sCmn.LBRR_enabled = INBandFec_enabled;
-        if( psEnc->sCmn.fs_kHz == 8 ) {
-            LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 9000;
-        } else if( psEnc->sCmn.fs_kHz == 12 ) {
-            LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 6000;;
-        } else if( psEnc->sCmn.fs_kHz == 16 ) {
-            LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 3000;
-        } else {
-            LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS;
-        }
-
-        if( psEnc->sCmn.TargetRate_bps >= LBRRRate_thres_bps ) {
-            /* Set gain increase / rate reduction for LBRR usage */
-            /* Coarse tuned with pesq for now. */
-            /* Linear regression coefs G = 8 - 0.5 * loss */
-            /* Meaning that at 16% loss main rate and redundant rate is the same, -> G = 0 */
-            psEnc->sCmn.LBRR_GainIncreases = SKP_max_int( 8 - SKP_RSHIFT( psEnc->sCmn.PacketLoss_perc, 1 ), 0 );
-
-            /* Set main stream rate compensation */
-            if( psEnc->sCmn.LBRR_enabled && psEnc->sCmn.PacketLoss_perc > LBRR_LOSS_THRES ) {
-                /* Tuned to give aprox same mean / weighted bitrate as no inband FEC */
-                psEnc->inBandFEC_SNR_comp_Q8 = ( 6 << 8 ) - SKP_LSHIFT( psEnc->sCmn.LBRR_GainIncreases, 7 );
-            } else {
-                psEnc->inBandFEC_SNR_comp_Q8 = 0;
-                psEnc->sCmn.LBRR_enabled     = 0;
-            }
-        } else {
-            psEnc->inBandFEC_SNR_comp_Q8     = 0;
-            psEnc->sCmn.LBRR_enabled         = 0;
-        }
-    }
-#else
-    psEnc->sCmn.LBRR_enabled = 0;
-#endif
-
-    /* Set DTX mode */
-    if( DTX_enabled < 0 || DTX_enabled > 1 ) {
-        ret = SKP_SILK_ENC_WRONG_DTX_SETTING;
-    }
-    psEnc->sCmn.useDTX = DTX_enabled;
-    
-    return ret;
-}
-
-/* Control low bitrate redundancy usage */
-void SKP_Silk_LBRR_ctrl_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,     /* I/O  encoder state                               */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl  /* I/O  encoder control                             */
-)
-{
-    SKP_int LBRR_usage;
-
-    if( psEnc->sCmn.LBRR_enabled ) {
-        /* Control LBRR */
-
-        /* Usage Control based on sensitivity and packet loss caracteristics */
-        /* For now only enable adding to next for active frames. Make more complex later */
-        LBRR_usage = SKP_SILK_NO_LBRR;
-        if( psEnc->speech_activity_Q8 > LBRR_SPEECH_ACTIVITY_THRES_Q8 && psEnc->sCmn.PacketLoss_perc > LBRR_LOSS_THRES ) { // nb! maybe multiply loss prob and speech activity 
-            //if( psEnc->PacketLoss_burst > BURST_THRES )
-            //  psEncCtrl->LBRR_usage = SKP_SILK_ADD_LBRR_TO_PLUS2;
-            //} else {
-                LBRR_usage = SKP_SILK_ADD_LBRR_TO_PLUS1;//SKP_SILK_NO_LBRR
-            //}
-        }
-        psEncCtrl->sCmn.LBRR_usage = LBRR_usage;
-    } else {
-        psEncCtrl->sCmn.LBRR_usage = SKP_SILK_NO_LBRR;
-    }
-}
--- a/src/SKP_Silk_corrMatrix_FIX.c
+++ /dev/null
@@ -1,152 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/**********************************************************************
- * Correlation Matrix Computations for LS estimate. 
- **********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-/* Calculates correlation vector X'*t */
-void SKP_Silk_corrVector_FIX(
-    const SKP_int16                 *x,         /* I    x vector [L + order - 1] used to form data matrix X */
-    const SKP_int16                 *t,         /* I    target vector [L]                                   */
-    const SKP_int                   L,          /* I    Length of vectors                                   */
-    const SKP_int                   order,      /* I    Max lag for correlation                             */
-    SKP_int32                       *Xt,        /* O    Pointer to X'*t correlation vector [order]          */
-    const SKP_int                   rshifts     /* I    Right shifts of correlations                        */
-)
-{
-    SKP_int         lag, i;
-    const SKP_int16 *ptr1, *ptr2;
-    SKP_int32       inner_prod;
-
-    ptr1 = &x[ order - 1 ]; /* Points to first sample of column 0 of X: X[:,0] */
-    ptr2 = t;
-    /* Calculate X'*t */
-    if( rshifts > 0 ) {
-        /* Right shifting used */
-        for( lag = 0; lag < order; lag++ ) {
-            inner_prod = 0;
-            for( i = 0; i < L; i++ ) {
-                inner_prod += SKP_RSHIFT32( SKP_SMULBB( ptr1[ i ], ptr2[i] ), rshifts );
-            }
-            Xt[ lag ] = inner_prod; /* X[:,lag]'*t */
-            ptr1--; /* Go to next column of X */
-        }
-    } else {
-        SKP_assert( rshifts == 0 );
-        for( lag = 0; lag < order; lag++ ) {
-            Xt[ lag ] = SKP_Silk_inner_prod_aligned( ptr1, ptr2, L ); /* X[:,lag]'*t */
-            ptr1--; /* Go to next column of X */
-        }
-    }
-}
-
-/* Calculates correlation matrix X'*X */
-void SKP_Silk_corrMatrix_FIX(
-    const SKP_int16                 *x,         /* I    x vector [L + order - 1] used to form data matrix X */
-    const SKP_int                   L,          /* I    Length of vectors                                   */
-    const SKP_int                   order,      /* I    Max lag for correlation                             */
-    SKP_int32                       *XX,        /* O    Pointer to X'*X correlation matrix [ order x order ]*/
-    SKP_int                         *rshifts    /* I/O  Right shifts of correlations                        */
-)
-{
-    SKP_int         i, j, lag, rshifts_local, head_room_rshifts;
-    SKP_int32       energy;
-    const SKP_int16 *ptr1, *ptr2;
-
-    /* Calculate energy to find shift used to fit in 32 bits */
-    SKP_Silk_sum_sqr_shift( &energy, &rshifts_local, x, L + order - 1 );
-    /* Add shifts to get the wanted head room */
-
-    head_room_rshifts = SKP_max( LTP_CORRS_HEAD_ROOM - SKP_Silk_CLZ32( energy ), 0 );
-    
-    energy = SKP_RSHIFT32( energy, head_room_rshifts );
-    rshifts_local += head_room_rshifts;
-
-    /* Calculate energy of first column (0) of X: X[:,0]'*X[:,0] */
-    /* Remove contribution of first order - 1 samples */
-    for( i = 0; i < order - 1; i++ ) {
-        energy -= SKP_RSHIFT32( SKP_SMULBB( x[ i ], x[ i ] ), rshifts_local );
-    }
-    if( rshifts_local < *rshifts ) {
-        /* Adjust energy */
-        energy = SKP_RSHIFT32( energy, *rshifts - rshifts_local );
-        rshifts_local = *rshifts;
-    }
-
-    /* Calculate energy of remaining columns of X: X[:,j]'*X[:,j] */
-    /* Fill out the diagonal of the correlation matrix */
-    matrix_ptr( XX, 0, 0, order ) = energy;
-    ptr1 = &x[ order - 1 ]; /* First sample of column 0 of X */
-    for( j = 1; j < order; j++ ) {
-        energy = SKP_SUB32( energy, SKP_RSHIFT32( SKP_SMULBB( ptr1[ L - j ], ptr1[ L - j ] ), rshifts_local ) );
-        energy = SKP_ADD32( energy, SKP_RSHIFT32( SKP_SMULBB( ptr1[ -j ], ptr1[ -j ] ), rshifts_local ) );
-        matrix_ptr( XX, j, j, order ) = energy;
-    }
-
-    ptr2 = &x[ order - 2 ]; /* First sample of column 1 of X */
-    /* Calculate the remaining elements of the correlation matrix */
-    if( rshifts_local > 0 ) {
-        /* Right shifting used */
-        for( lag = 1; lag < order; lag++ ) {
-            /* Inner product of column 0 and column lag: X[:,0]'*X[:,lag] */
-            energy = 0;
-            for( i = 0; i < L; i++ ) {
-                energy += SKP_RSHIFT32( SKP_SMULBB( ptr1[ i ], ptr2[i] ), rshifts_local );
-            }
-            /* Calculate remaining off diagonal: X[:,j]'*X[:,j + lag] */
-            matrix_ptr( XX, lag, 0, order ) = energy;
-            matrix_ptr( XX, 0, lag, order ) = energy;
-            for( j = 1; j < ( order - lag ); j++ ) {
-                energy = SKP_SUB32( energy, SKP_RSHIFT32( SKP_SMULBB( ptr1[ L - j ], ptr2[ L - j ] ), rshifts_local ) );
-                energy = SKP_ADD32( energy, SKP_RSHIFT32( SKP_SMULBB( ptr1[ -j ], ptr2[ -j ] ), rshifts_local ) );
-                matrix_ptr( XX, lag + j, j, order ) = energy;
-                matrix_ptr( XX, j, lag + j, order ) = energy;
-            }
-            ptr2--; /* Update pointer to first sample of next column (lag) in X */
-        }
-    } else {
-        for( lag = 1; lag < order; lag++ ) {
-            /* Inner product of column 0 and column lag: X[:,0]'*X[:,lag] */
-            energy = SKP_Silk_inner_prod_aligned( ptr1, ptr2, L );
-            matrix_ptr( XX, lag, 0, order ) = energy;
-            matrix_ptr( XX, 0, lag, order ) = energy;
-            /* Calculate remaining off diagonal: X[:,j]'*X[:,j + lag] */
-            for( j = 1; j < ( order - lag ); j++ ) {
-                energy = SKP_SUB32( energy, SKP_SMULBB( ptr1[ L - j ], ptr2[ L - j ] ) );
-                energy = SKP_SMLABB( energy, ptr1[ -j ], ptr2[ -j ] );
-                matrix_ptr( XX, lag + j, j, order ) = energy;
-                matrix_ptr( XX, j, lag + j, order ) = energy;
-            }
-            ptr2--;/* Update pointer to first sample of next column (lag) in X */
-        }
-    }
-    *rshifts = rshifts_local;
-}
-
--- a/src/SKP_Silk_create_init_destroy.c
+++ /dev/null
@@ -1,55 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-
-/************************/
-/* Init Decoder State   */
-/************************/
-SKP_int SKP_Silk_init_decoder(
-    SKP_Silk_decoder_state      *psDec              /* I/O  Decoder state pointer                       */
-)
-{
-    SKP_memset( psDec, 0, sizeof( SKP_Silk_decoder_state ) );
-    /* Set sampling rate to 24 kHz, and init non-zero values */
-    SKP_Silk_decoder_set_fs( psDec, 24 );
-
-    /* Used to deactivate e.g. LSF interpolation and fluctuation reduction */
-    psDec->first_frame_after_reset = 1;
-    psDec->prev_inv_gain_Q16 = 65536;
-
-    /* Reset CNG state */
-    SKP_Silk_CNG_Reset( psDec );
-
-    SKP_Silk_PLC_Reset( psDec );
-
-    psDec->bitstream_v = USE_BIT_STREAM_V;
-    
-    return(0);
-}
-
--- a/src/SKP_Silk_dec_API.c
+++ /dev/null
@@ -1,343 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_SDK_API.h"
-#include "SKP_Silk_main_FIX.h"
-
-/*********************/
-/* Decoder functions */
-/*********************/
-
-SKP_int SKP_Silk_SDK_Get_Decoder_Size( SKP_int32 *decSizeBytes ) 
-{
-    SKP_int ret = 0;
-
-    *decSizeBytes = sizeof( SKP_Silk_decoder_state );
-
-    return ret;
-}
-
-/* Reset decoder state */
-SKP_int SKP_Silk_SDK_InitDecoder(
-    void* decState                                      /* I/O: State                                          */
-)
-{
-    SKP_int ret = 0;
-    SKP_Silk_decoder_state *struc;
-
-    struc = (SKP_Silk_decoder_state *)decState;
-
-    ret  = SKP_Silk_init_decoder( struc );
-
-    return ret;
-}
-
-/* Decode a frame */
-SKP_int SKP_Silk_SDK_Decode(
-    void*                               decState,       /* I/O: State                                           */
-    SKP_SILK_SDK_DecControlStruct*      decControl,     /* I/O: Control structure                               */
-    SKP_int                             lostFlag,       /* I:   0: no loss, 1 loss                              */
-    const SKP_uint8                     *inData,        /* I:   Encoded input vector                            */
-    const SKP_int                       nBytesIn,       /* I:   Number of input Bytes                           */
-    SKP_int16                           *samplesOut,    /* O:   Decoded output speech vector                    */
-    SKP_int16                           *nSamplesOut    /* I/O: Number of samples (vector/decoded)              */
-)
-{
-    SKP_int ret = 0, used_bytes, prev_fs_kHz;
-    SKP_Silk_decoder_state *psDec;
-
-    psDec = (SKP_Silk_decoder_state *)decState;
-
-    /**********************************/
-    /* Test if first frame in payload */
-    /**********************************/
-    if( psDec->moreInternalDecoderFrames == 0 ) {
-        /* First Frame in Payload */
-        psDec->nFramesDecoded = 0;  /* Used to count frames in packet */
-    }
-
-    if( psDec->moreInternalDecoderFrames == 0 &&    /* First frame in packet    */
-        lostFlag == 0 &&                            /* Not packet loss          */
-        nBytesIn > MAX_ARITHM_BYTES ) {             /* Too long payload         */
-            /* Avoid trying to decode a too large packet */
-            lostFlag = 1;
-            ret = SKP_SILK_DEC_PAYLOAD_TOO_LARGE;
-    }
-            
-    /* Save previous sample frequency */
-    prev_fs_kHz = psDec->fs_kHz;
-    
-    /* Call decoder for one frame */
-    ret += SKP_Silk_decode_frame( psDec, samplesOut, nSamplesOut, inData, nBytesIn, 
-            lostFlag, &used_bytes );
-    
-    if( used_bytes ) { /* Only Call if not a packet loss */
-        if( psDec->nBytesLeft > 0 && psDec->FrameTermination == SKP_SILK_MORE_FRAMES && psDec->nFramesDecoded < 5 ) {
-            /* We have more frames in the Payload */
-            psDec->moreInternalDecoderFrames = 1;
-        } else {
-            /* Last frame in Payload */
-            psDec->moreInternalDecoderFrames = 0;
-            psDec->nFramesInPacket = psDec->nFramesDecoded;
-        
-            /* Track inband FEC usage */
-            if( psDec->vadFlag == VOICE_ACTIVITY ) {
-                if( psDec->FrameTermination == SKP_SILK_LAST_FRAME ) {
-                    psDec->no_FEC_counter++;
-                    if( psDec->no_FEC_counter > NO_LBRR_THRES ) {
-                        psDec->inband_FEC_offset = 0;
-                    }
-                } else if( psDec->FrameTermination == SKP_SILK_LBRR_VER1 ) {
-                    psDec->inband_FEC_offset = 1; /* FEC info with 1 packet delay */
-                    psDec->no_FEC_counter    = 0;
-                } else if( psDec->FrameTermination == SKP_SILK_LBRR_VER2 ) {
-                    psDec->inband_FEC_offset = 2; /* FEC info with 2 packets delay */
-                    psDec->no_FEC_counter    = 0;
-                }
-            }
-        }
-    }
-
-    if( psDec->fs_kHz * 1000 > decControl->sampleRate ) {
-        ret = SKP_SILK_DEC_WRONG_SAMPLING_FREQUENCY;
-    }
-
-    /* Do any resampling if needed */
-    if( psDec->fs_kHz * 1000 != decControl->sampleRate ) { 
-        SKP_int16 samplesOut_tmp[ 2 * MAX_FRAME_LENGTH ];
-        SKP_int32 scratch[        3 * MAX_FRAME_LENGTH ];
-
-        /* Copy to a tmpbuffer as the resampling writes to samplesOut */
-        memcpy( samplesOut_tmp, samplesOut, *nSamplesOut * sizeof( SKP_int16 ) ); 
-
-        /* Clear resampler state when switching internal sampling frequency */
-        if( prev_fs_kHz != psDec->fs_kHz ) {
-            SKP_memset( psDec->resampleState, 0, sizeof( psDec->resampleState ) );
-        }
-
-        if( psDec->fs_kHz == 16 && decControl->sampleRate == 24000 ) { 
-            /* Resample from 16 kHz to 24 kHz */
-            SKP_Silk_resample_3_2( samplesOut, psDec->resampleState, samplesOut_tmp, *nSamplesOut );
-        } else if( psDec->fs_kHz == 12 && decControl->sampleRate == 24000 ) { 
-            /* Resample from 12 kHz to 24 kHz */
-            SKP_Silk_resample_2_1_coarse( samplesOut_tmp, psDec->resampleState, samplesOut, scratch, *nSamplesOut );
-        } else if( psDec->fs_kHz == 8 && decControl->sampleRate == 24000 ) { 
-            /* Resample from 8 kHz to 24 kHz */
-            SKP_Silk_resample_3_1( samplesOut, psDec->resampleState, samplesOut_tmp, *nSamplesOut );
-        } else if( psDec->fs_kHz == 12 && decControl->sampleRate == 16000 ) { 
-            /* Resample from 12 kHz to 16 kHz */
-            SKP_Silk_resample_4_3( samplesOut, psDec->resampleState, samplesOut_tmp, *nSamplesOut );
-        } else if( psDec->fs_kHz == 8 && decControl->sampleRate == 16000 ) { 
-            /* Resample from 8 kHz to 16 kHz */
-            SKP_Silk_resample_2_1_coarse( samplesOut_tmp, psDec->resampleState, samplesOut, scratch, *nSamplesOut );
-        } else if( psDec->fs_kHz == 8 && decControl->sampleRate == 12000 ) { 
-            /* Resample from 8 kHz to 12 kHz */
-            SKP_Silk_resample_3_2( samplesOut, psDec->resampleState, samplesOut_tmp, *nSamplesOut );
-        }
-
-        *nSamplesOut = SKP_DIV32( ( SKP_int32 )*nSamplesOut * decControl->sampleRate, psDec->fs_kHz * 1000 );
-    }
-
-    /* Copy all parameters that are needed out of internal structure to the control stucture */
-    decControl->frameSize                 = ( SKP_int )psDec->frame_length;
-    decControl->framesPerPacket           = ( SKP_int )psDec->nFramesInPacket;
-    decControl->inBandFECOffset           = ( SKP_int )psDec->inband_FEC_offset;
-    decControl->moreInternalDecoderFrames = ( SKP_int )psDec->moreInternalDecoderFrames;
-
-    return ret;
-}
-
-/* Function to find LBRR information in a packet */
-void SKP_Silk_SDK_search_for_LBRR(
-    void   		                        *decState,      /* I:   Decoder state, to select bitstream version only */
-    const SKP_uint8                     *inData,        /* I:   Encoded input vector                            */
-    const SKP_int16                     nBytesIn,       /* I:   Number of input Bytes                           */
-    SKP_int                             lost_offset,    /* I:   Offset from lost packet                         */
-    SKP_uint8                           *LBRRData,      /* O:   LBRR payload                                    */
-    SKP_int16                           *nLBRRBytes     /* O:   Number of LBRR Bytes                            */
-)
-{
-    SKP_Silk_decoder_state   *psDec;
-    SKP_Silk_decoder_state   sDec; // Local decoder state to avoid interfering with running decoder */
-    SKP_Silk_decoder_control sDecCtrl;
-    SKP_int i, TempQ[ MAX_FRAME_LENGTH ];
-
-    psDec = ( SKP_Silk_decoder_state * )decState;
-
-    if( lost_offset < 1 || lost_offset > MAX_LBRR_DELAY ) {
-        /* No useful FEC in this packet */
-        *nLBRRBytes = 0;
-        return;
-    }
-
-    sDec.nFramesDecoded = 0;
-    sDec.fs_kHz         = 0; /* Force update parameters LPC_order etc */
-    SKP_memset( sDec.prevNLSF_Q15, 0, MAX_LPC_ORDER * sizeof( SKP_int ) );
-    SKP_Silk_range_dec_init( &sDec.sRC, inData, ( SKP_int32 )nBytesIn );
-
-    if( psDec->bitstream_v == BIT_STREAM_V4 ) { /* Silk_v4 payload */
-        /* Decode all parameter indices for the whole packet*/
-        SKP_Silk_decode_indices_v4( &sDec );
-
-        /* Is there usable LBRR in this packet */
-        *nLBRRBytes = 0;
-        if( ( sDec.FrameTermination - 1 ) & lost_offset && sDec.FrameTermination > 0 && sDec.nBytesLeft >= 0 ) {
-            /* The wanted FEC is present in the packet */
-            for( i = 0; i < sDec.nFramesInPacket; i++ ) {
-                SKP_Silk_decode_parameters_v4( &sDec, &sDecCtrl, TempQ, 0 );
-                
-                if( sDec.nBytesLeft <= 0 || sDec.sRC.error ) {
-                    /* Corrupt stream */
-                    LBRRData = NULL;
-                    *nLBRRBytes = 0;
-                    break;
-                } else {
-                    sDec.nFramesDecoded++;
-                }
-            }
-        
-            if( LBRRData != NULL ) {
-                /* The wanted FEC is present in the packet */
-                *nLBRRBytes = sDec.nBytesLeft;
-                SKP_memcpy( LBRRData, &inData[ nBytesIn - sDec.nBytesLeft ], sDec.nBytesLeft * sizeof( SKP_uint8 ) );
-            }
-        }
-    } else { /* Silk_v3 payload */
-        while(1) {
-            SKP_Silk_decode_parameters( &sDec, &sDecCtrl, TempQ, 0 );
-
-            if( sDec.sRC.error ) {
-                /* Corrupt stream */
-                *nLBRRBytes = 0;
-                return;
-            };
-
-            if( ( sDec.FrameTermination - 1 ) & lost_offset && sDec.FrameTermination > 0 && sDec.nBytesLeft >= 0 ) {
-                /* The wanted FEC is present in the packet */
-                *nLBRRBytes = sDec.nBytesLeft;
-                SKP_memcpy( LBRRData, &inData[ nBytesIn - sDec.nBytesLeft ], sDec.nBytesLeft * sizeof( SKP_uint8 ) );
-                break;
-            }
-            if( sDec.nBytesLeft > 0 && sDec.FrameTermination == SKP_SILK_MORE_FRAMES ) {
-                sDec.nFramesDecoded++;
-            } else {
-                LBRRData = NULL;
-                *nLBRRBytes = 0;
-                break;
-            }
-        }
-    }
-}
-
-/* Getting type of content for a packet */
-void SKP_Silk_SDK_get_TOC(
-    void                                *decState,      /* I/O: Decoder state, to select bitstream version only */
-    const SKP_uint8                     *inData,        /* I:   Encoded input vector                            */
-    const SKP_int16                     nBytesIn,       /* I:   Number of input bytes                           */
-    SKP_Silk_TOC_struct                 *Silk_TOC       /* O:   Type of content                                 */
-)
-{
-    SKP_Silk_decoder_state      *psDec;
-    SKP_Silk_decoder_state      sDec; // Local Decoder state to avoid interfering with running decoder */
-    SKP_Silk_decoder_control    sDecCtrl;
-    SKP_int i, TempQ[ MAX_FRAME_LENGTH ];
-
-    psDec = (SKP_Silk_decoder_state *)decState;
-
-    sDec.nFramesDecoded = 0;
-    sDec.fs_kHz         = 0; /* Force update parameters LPC_order etc */
-    SKP_Silk_range_dec_init( &sDec.sRC, inData, ( SKP_int32 )nBytesIn );
-
-    if( psDec->bitstream_v == BIT_STREAM_V4 ) { /* Silk_v4 payload */
-        /* Decode all parameter indices for the whole packet*/
-        SKP_Silk_decode_indices_v4( &sDec );
-        
-        if( sDec.nFramesInPacket > SILK_MAX_FRAMES_PER_PACKET || sDec.sRC.error ) {
-            /* Corrupt packet */
-            SKP_memset( Silk_TOC, 0, sizeof( SKP_Silk_TOC_struct ) );
-            Silk_TOC->corrupt = 1;
-        } else {
-            Silk_TOC->corrupt = 0;
-            Silk_TOC->framesInPacket = sDec.nFramesInPacket;
-            Silk_TOC->fs_kHz         = sDec.fs_kHz;
-            if( sDec.FrameTermination == SKP_SILK_LAST_FRAME ) {
-                Silk_TOC->inbandLBRR = sDec.FrameTermination;
-            } else {
-                Silk_TOC->inbandLBRR = sDec.FrameTermination - 1;
-            }
-            /* Copy data */
-            for( i = 0; i < sDec.nFramesInPacket; i++ ) {
-                Silk_TOC->vadFlags[ i ]     = sDec.vadFlagBuf[ i ];
-                Silk_TOC->sigtypeFlags[ i ] = sDec.sigtype[ i ];
-            }
-        }
-    } else { /* Silk_v3 payload */
-        Silk_TOC->corrupt = 0;
-        while( 1 ) {
-            SKP_Silk_decode_parameters( &sDec, &sDecCtrl, TempQ, 0 );
-            
-            Silk_TOC->vadFlags[     sDec.nFramesDecoded ] = sDec.vadFlag;
-            Silk_TOC->sigtypeFlags[ sDec.nFramesDecoded ] = sDecCtrl.sigtype;
-
-            if( sDec.sRC.error ) {
-                /* Corrupt stream */
-                Silk_TOC->corrupt = 1;
-                break;
-            };
-
-            if( sDec.nBytesLeft > 0 && sDec.FrameTermination == SKP_SILK_MORE_FRAMES ) {
-                sDec.nFramesDecoded++;
-            } else {
-                break;
-            }
-        }
-        if( Silk_TOC->corrupt || sDec.FrameTermination == SKP_SILK_MORE_FRAMES || 
-            sDec.nFramesInPacket > SILK_MAX_FRAMES_PER_PACKET ) {
-            /* Corrupt packet */
-            SKP_memset( Silk_TOC, 0, sizeof( SKP_Silk_TOC_struct ) );
-            Silk_TOC->corrupt = 1;
-        } else {
-            Silk_TOC->framesInPacket = sDec.nFramesDecoded;
-            Silk_TOC->fs_kHz         = sDec.fs_kHz;
-            if( sDec.FrameTermination == SKP_SILK_LAST_FRAME ) {
-                Silk_TOC->inbandLBRR = sDec.FrameTermination;
-            } else {
-                Silk_TOC->inbandLBRR = sDec.FrameTermination - 1;
-            }
-        }
-    }
-}
-
-/**************************/
-/* Get the version number */
-/**************************/
-/* Return a pointer to string specifying the version */ 
-const char *SKP_Silk_SDK_get_version()
-{
-    static const char version[] = "1.0.2";
-    return version;
-}
--- a/src/SKP_Silk_decode_core.c
+++ /dev/null
@@ -1,256 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-/**********************************************************/
-/* Core decoder. Performs inverse NSQ operation LTP + LPC */
-/**********************************************************/
-void SKP_Silk_decode_core(
-    SKP_Silk_decoder_state      *psDec,                             /* I/O  Decoder state               */
-    SKP_Silk_decoder_control    *psDecCtrl,                         /* I    Decoder control             */
-    SKP_int16                   xq[],                               /* O    Decoded speech              */
-    const SKP_int               q[ MAX_FRAME_LENGTH ]               /* I    Pulse signal                */
-)
-{
-    SKP_int     i, k, lag = 0, start_idx, NLSF_interpolation_flag, sigtype, LTP_scale_Q14;
-    SKP_int16   *A_Q12, *B_Q14, *pxq, A_Q12_tmp[ MAX_LPC_ORDER ];
-    SKP_int16   sLTP[ MAX_FRAME_LENGTH ];
-    SKP_int32   Gain_Q16, *pred_lag_ptr, *pexc_Q10, *pres_Q10, LTP_pred_Q14, LPC_pred_Q10;
-    SKP_int32   rand_seed, offset_Q10, dither;
-    SKP_int32   vec_Q10[ MAX_FRAME_LENGTH / NB_SUBFR ], Atmp;
-    SKP_int32   inv_gain_Q16, inv_gain_Q32, gain_adj_Q16, FiltState[ MAX_LPC_ORDER ];
-    SKP_assert( psDec->prev_inv_gain_Q16 != 0 );
-    
-    offset_Q10 = SKP_Silk_Quantization_Offsets_Q10[ psDecCtrl->sigtype ][ psDecCtrl->QuantOffsetType ];
-
-    if( psDecCtrl->NLSFInterpCoef_Q2 < ( 1 << 2 ) ) {
-        NLSF_interpolation_flag = 1;
-    } else {
-        NLSF_interpolation_flag = 0;
-    }
-
-
-    /* Decode excitation */
-    rand_seed = psDecCtrl->Seed;
-    for( i = 0; i < psDec->frame_length; i++ ) {
-        rand_seed = SKP_RAND( rand_seed );
-        /* dither = rand_seed < 0 ? 0xFFFFFFFF : 0; */
-        dither = SKP_RSHIFT( rand_seed, 31 );
-
-        psDec->exc_Q10[ i ] = SKP_LSHIFT( ( SKP_int32 )q[ i ], 10 ) + offset_Q10;
-        psDec->exc_Q10[ i ] = ( psDec->exc_Q10[ i ] ^ dither ) - dither;
-
-        rand_seed += q[ i ];
-    }
-
-
-    pexc_Q10 = psDec->exc_Q10;
-    pres_Q10 = psDec->res_Q10;
-    pxq      = &psDec->outBuf[ psDec->frame_length ];
-    psDec->sLTP_buf_idx = psDec->frame_length;
-    /* Loop over subframes */
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        A_Q12 = psDecCtrl->PredCoef_Q12[ k >> 1 ];
-
-        /* Preload LPC coeficients to array on stack. Gives small performance gain */        
-        SKP_memcpy( A_Q12_tmp, A_Q12, psDec->LPC_order * sizeof( SKP_int16 ) ); 
-        B_Q14         = &psDecCtrl->LTPCoef_Q14[ k * LTP_ORDER ];
-        Gain_Q16      = psDecCtrl->Gains_Q16[ k ];
-        LTP_scale_Q14 = psDecCtrl->LTP_scale_Q14;
-        sigtype       = psDecCtrl->sigtype;
-
-        inv_gain_Q16  = SKP_DIV32( SKP_int32_MAX, SKP_RSHIFT( Gain_Q16, 1 ) );
-        inv_gain_Q16  = SKP_min( inv_gain_Q16, SKP_int16_MAX );
-
-        /* Calculate Gain adjustment factor */
-        gain_adj_Q16 = ( SKP_int32 )1 << 16;
-        if( inv_gain_Q16 != psDec->prev_inv_gain_Q16 ) {
-            gain_adj_Q16 =  SKP_DIV32_varQ( inv_gain_Q16, psDec->prev_inv_gain_Q16, 16 );
-        }
-
-        /* Avoid abrupt transition from voiced PLC to unvoiced normal decoding */
-        if( psDec->lossCnt && psDec->prev_sigtype == SIG_TYPE_VOICED &&
-            psDecCtrl->sigtype == SIG_TYPE_UNVOICED && k < ( NB_SUBFR >> 1 ) ) {
-            
-            SKP_memset( B_Q14, 0, LTP_ORDER * sizeof( SKP_int16 ) );
-            B_Q14[ LTP_ORDER/2 ] = ( SKP_int16 )1 << 12; /* 0.25 */
-        
-            sigtype = SIG_TYPE_VOICED;
-            psDecCtrl->pitchL[ k ] = psDec->lagPrev;
-            LTP_scale_Q14 = ( SKP_int )1 << 14;
-        }
-        if( sigtype == SIG_TYPE_VOICED ) {
-            /* Voiced */
-            
-            lag = psDecCtrl->pitchL[ k ];
-            /* Re-whitening */
-            if( ( k & ( 3 - SKP_LSHIFT( NLSF_interpolation_flag, 1 ) ) ) == 0 ) {
-                /* Rewhiten with new A coefs */
-                start_idx = psDec->frame_length - lag - psDec->LPC_order - LTP_ORDER / 2;
-                start_idx = SKP_LIMIT( start_idx, 0, psDec->frame_length - psDec->LPC_order );
-
-                SKP_Silk_MA_Prediction( &psDec->outBuf[ start_idx + k * ( psDec->frame_length >> 2 ) ], 
-                    A_Q12, FiltState, sLTP + start_idx, psDec->frame_length - start_idx, psDec->LPC_order );
-
-                /* After rewhitening the LTP state is unscaled */
-                inv_gain_Q32 = SKP_LSHIFT( inv_gain_Q16, 16 );
-                if( k == 0 ) {
-                    /* Do LTP downscaling */
-                    inv_gain_Q32 = SKP_LSHIFT( SKP_SMULWB( inv_gain_Q32, psDecCtrl->LTP_scale_Q14 ), 2 );
-                }
-                for( i = 0; i < (lag + LTP_ORDER/2); i++ ) {
-                    psDec->sLTP_Q16[ psDec->sLTP_buf_idx - i - 1 ] = SKP_SMULWB( inv_gain_Q32, sLTP[ psDec->frame_length - i - 1 ] );
-                }
-            } else {
-                /* Update LTP state when Gain changes */
-                if( gain_adj_Q16 != ( SKP_int32 )1 << 16 ) {
-                    for( i = 0; i < ( lag + LTP_ORDER / 2 ); i++ ) {
-                        psDec->sLTP_Q16[ psDec->sLTP_buf_idx - i - 1 ] = SKP_SMULWW( gain_adj_Q16, psDec->sLTP_Q16[ psDec->sLTP_buf_idx - i - 1 ] );
-                    }
-                }
-            }
-        }
-        
-        /* Scale short term state */
-        for( i = 0; i < MAX_LPC_ORDER; i++ ) {
-            psDec->sLPC_Q14[ i ] = SKP_SMULWW( gain_adj_Q16, psDec->sLPC_Q14[ i ] );
-        }
-
-        /* Save inv_gain */
-        SKP_assert( inv_gain_Q16 != 0 );
-        psDec->prev_inv_gain_Q16 = inv_gain_Q16;
-
-
-        /* Long-term prediction */
-        if( sigtype == SIG_TYPE_VOICED ) {
-            /* Setup pointer */
-            pred_lag_ptr = &psDec->sLTP_Q16[ psDec->sLTP_buf_idx - lag + LTP_ORDER / 2 ];
-            for( i = 0; i < psDec->subfr_length; i++ ) {
-                /* Unrolled loop */
-                LTP_pred_Q14 = SKP_SMULWB(               pred_lag_ptr[  0 ], B_Q14[ 0 ] );
-                LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -1 ], B_Q14[ 1 ] );
-                LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -2 ], B_Q14[ 2 ] );
-                LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -3 ], B_Q14[ 3 ] );
-                LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -4 ], B_Q14[ 4 ] );
-                pred_lag_ptr++;
-            
-                /* Generate LPC residual */ 
-                pres_Q10[ i ] = SKP_ADD32( pexc_Q10[ i ], SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 ) );
-            
-                /* Update states */
-                psDec->sLTP_Q16[ psDec->sLTP_buf_idx ] = SKP_LSHIFT( pres_Q10[ i ], 6 );
-                psDec->sLTP_buf_idx++;
-            }
-        } else {
-            SKP_memcpy( pres_Q10, pexc_Q10, psDec->subfr_length * sizeof( SKP_int32 ) );
-        }
-
-
-        /* Short term prediction */
-        /* NOTE: the code below loads two int16 values in an int32, and multiplies each using the   */
-        /* SMLAWB and SMLAWT instructions. On a big-endian CPU the two int16 variables would be     */
-        /* loaded in reverse order and the code will give the wrong result. In that case swapping   */
-        /* the SMLAWB and SMLAWT instructions should solve the problem.                             */
-        if( psDec->LPC_order == 16 ) {
-            for( i = 0; i < psDec->subfr_length; i++ ) {
-                /* unrolled */
-                Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 0 ] );    /* read two coefficients at once */
-                LPC_pred_Q10 = SKP_SMULWB(               psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  1 ], Atmp );
-                LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  2 ], Atmp );
-                Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 2 ] );
-                LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  3 ], Atmp );
-                LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  4 ], Atmp );
-                Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 4 ] );
-                LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  5 ], Atmp );
-                LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  6 ], Atmp );
-                Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 6 ] );
-                LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  7 ], Atmp );
-                LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  8 ], Atmp );
-                Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 8 ] );
-                LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  9 ], Atmp );
-                LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 10 ], Atmp );
-                Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 10 ] );
-                LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 11 ], Atmp );
-                LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 12 ], Atmp );
-                Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 12 ] );
-                LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 13 ], Atmp );
-                LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 14 ], Atmp );
-                Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 14 ] );
-                LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 15 ], Atmp );
-                LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 16 ], Atmp );
-                
-                /* Add prediction to LPC residual */
-                vec_Q10[ i ] = SKP_ADD32( pres_Q10[ i ], LPC_pred_Q10 );
-                
-                /* Update states */
-                psDec->sLPC_Q14[ MAX_LPC_ORDER + i ] = SKP_LSHIFT( vec_Q10[ i ], 4 );
-            }
-        } else {
-            SKP_assert( psDec->LPC_order == 10 );
-            for( i = 0; i < psDec->subfr_length; i++ ) {
-                /* unrolled */
-                Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 0 ] );    /* read two coefficients at once */
-                LPC_pred_Q10 = SKP_SMULWB(               psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  1 ], Atmp );
-                LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  2 ], Atmp );
-                Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 2 ] );
-                LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  3 ], Atmp );
-                LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  4 ], Atmp );
-                Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 4 ] );
-                LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  5 ], Atmp );
-                LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  6 ], Atmp );
-                Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 6 ] );
-                LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  7 ], Atmp );
-                LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  8 ], Atmp );
-                Atmp = *( ( SKP_int32* )&A_Q12_tmp[ 8 ] );
-                LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  9 ], Atmp );
-                LPC_pred_Q10 = SKP_SMLAWT( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 10 ], Atmp );
-                
-                /* Add prediction to LPC residual */
-                vec_Q10[ i ] = SKP_ADD32( pres_Q10[ i ], LPC_pred_Q10 );
-                
-                /* Update states */
-                psDec->sLPC_Q14[ MAX_LPC_ORDER + i ] = SKP_LSHIFT( vec_Q10[ i ], 4 );
-            }
-        }
-
-        /* Scale with Gain */
-        for( i = 0; i < psDec->subfr_length; i++ ) {
-            pxq[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( vec_Q10[ i ], Gain_Q16 ), 10 ) );
-        }
-
-        /* Update LPC filter state */
-        SKP_memcpy( psDec->sLPC_Q14, &psDec->sLPC_Q14[ psDec->subfr_length ], MAX_LPC_ORDER * sizeof( SKP_int32 ) );
-        pexc_Q10 += psDec->subfr_length;
-        pres_Q10 += psDec->subfr_length;
-        pxq      += psDec->subfr_length;
-    }
-    
-    /* Copy to output */
-    SKP_memcpy( xq, &psDec->outBuf[ psDec->frame_length ], psDec->frame_length * sizeof( SKP_int16 ) );
-
-}
--- a/src/SKP_Silk_decode_frame.c
+++ /dev/null
@@ -1,167 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-
-#include "SKP_Silk_main.h"
-#include "SKP_Silk_PLC.h"
-
-/****************/
-/* Decode frame */
-/****************/
-SKP_int SKP_Silk_decode_frame(
-    SKP_Silk_decoder_state          *psDec,             /* I/O  Pointer to Silk decoder state               */
-    SKP_int16                       pOut[],             /* O    Pointer to output speech frame              */
-    SKP_int16                       *pN,                /* O    Pointer to size of output frame             */
-    const SKP_uint8                 pCode[],            /* I    Pointer to payload                          */
-    const SKP_int                   nBytes,             /* I    Payload length                              */
-    SKP_int                         action,             /* I    Action from Jitter Buffer                   */
-    SKP_int                         *decBytes           /* O    Used bytes to decode this frame             */
-)
-{
-    SKP_Silk_decoder_control sDecCtrl;
-    SKP_int         L, fs_Khz_old, LPC_order_old, ret = 0;
-    SKP_int         Pulses[ MAX_FRAME_LENGTH ];
-
-
-    L = psDec->frame_length;
-    sDecCtrl.LTP_scale_Q14 = 0;
-    
-    /* Safety checks */
-    SKP_assert( L > 0 && L <= MAX_FRAME_LENGTH );
-
-    /********************************************/
-    /* Decode Frame if packet is not lost  */
-    /********************************************/
-    *decBytes = 0;
-    if( action == 0 ) {
-        /********************************************/
-        /* Initialize arithmetic coder              */
-        /********************************************/
-        fs_Khz_old    = psDec->fs_kHz;
-        LPC_order_old = psDec->LPC_order;
-        if( psDec->nFramesDecoded == 0 ) {
-            /* Initialize range decoder state */
-            SKP_Silk_range_dec_init( &psDec->sRC, pCode, nBytes );
-        
-            if( psDec->bitstream_v == BIT_STREAM_V4 ) {
-                SKP_Silk_decode_indices_v4( psDec );
-            }
-        }
-
-        /********************************************/
-        /* Decode parameters and pulse signal       */
-        /********************************************/
-        if( psDec->bitstream_v == BIT_STREAM_V4 ) {
-            SKP_Silk_decode_parameters_v4( psDec, &sDecCtrl, Pulses, 1 );
-        } else {
-            SKP_Silk_decode_parameters( psDec, &sDecCtrl, Pulses, 1 );
-        }
-
-
-        if( psDec->sRC.error ) {
-            psDec->nBytesLeft = 0;
-
-            action              = 1; /* PLC operation */
-            psDec->fs_kHz       = fs_Khz_old;    /* revert fs if changed in decode_parameters */
-            psDec->LPC_order    = LPC_order_old; /* revert lpc_order if changed in decode_parameters */
-            psDec->frame_length = fs_Khz_old * FRAME_LENGTH_MS;
-            psDec->subfr_length = fs_Khz_old * FRAME_LENGTH_MS / NB_SUBFR;
-
-            /* Avoid crashing */
-            *decBytes = psDec->sRC.bufferLength;
-
-            if( psDec->sRC.error == RANGE_CODER_DEC_PAYLOAD_TOO_LONG ) {
-                ret = SKP_SILK_DEC_PAYLOAD_TOO_LARGE;
-            } else {
-                ret = SKP_SILK_DEC_PAYLOAD_ERROR;
-            }
-        } else {
-            *decBytes = psDec->sRC.bufferLength - psDec->nBytesLeft;
-            psDec->nFramesDecoded++;
-        
-            /* Update lengths. Sampling frequency could have changed */
-            L = psDec->frame_length;
-
-            /********************************************************/
-            /* Run inverse NSQ                                      */
-            /********************************************************/
-            SKP_Silk_decode_core( psDec, &sDecCtrl, pOut, Pulses );
-
-            /********************************************************/
-            /* Update PLC state                                     */
-            /********************************************************/
-            SKP_Silk_PLC( psDec, &sDecCtrl, pOut, L, action );
-
-            psDec->lossCnt = 0;
-            psDec->prev_sigtype = sDecCtrl.sigtype;
-
-            /* A frame has been decoded without errors */
-            psDec->first_frame_after_reset = 0;
-        }
-    }
-    /*************************************************************/
-    /* Generate Concealment Frame if packet is lost, or corrupt  */
-    /*************************************************************/
-    if( action == 1 ) {
-        /* Handle packet loss by extrapolation */
-        SKP_Silk_PLC( psDec, &sDecCtrl, pOut, L, action );
-        psDec->lossCnt++;
-    
-    }
-
-    /*************************/
-    /* Update output buffer. */
-    /*************************/
-    SKP_memcpy( psDec->outBuf, pOut, L * sizeof( SKP_int16 ) );
-
-    /****************************************************************/
-    /* Ensure smooth connection of extrapolated and good frames     */
-    /****************************************************************/
-    SKP_Silk_PLC_glue_frames( psDec, &sDecCtrl, pOut, L );
-
-    /************************************************/
-    /* Comfort noise generation / estimation        */
-    /************************************************/
-    SKP_Silk_CNG( psDec, &sDecCtrl, pOut , L );
-
-    /********************************************/
-    /* HP filter output                            */
-    /********************************************/
-    SKP_assert( ( ( psDec->fs_kHz == 12 ) && ( L % 3 ) == 0 ) || 
-                ( ( psDec->fs_kHz != 12 ) && ( L % 2 ) == 0 ) );
-    SKP_Silk_biquad( pOut, psDec->HP_B, psDec->HP_A, psDec->HPState, pOut, L );
-
-    /********************************************/
-    /* set output frame length                    */
-    /********************************************/
-    *pN = ( SKP_int16 )L;
-
-    /* Update some decoder state variables */
-    psDec->lagPrev = sDecCtrl.pitchL[ NB_SUBFR - 1 ];
-
-    return ret;
-}
--- a/src/SKP_Silk_decode_indices_v4.c
+++ /dev/null
@@ -1,195 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-/* Decode indices from payload */
-void SKP_Silk_decode_indices_v4(
-    SKP_Silk_decoder_state      *psDec            /* I/O    State                              */
-)
-{
-    SKP_int   i, k, Ix, fs_kHz_dec, FrameIndex = 0, FrameTermination;
-    SKP_int   sigtype, QuantOffsetType, seed_int, nBytesUsed;
-    SKP_int   decode_absolute_lagIndex, delta_lagIndex, prev_lagIndex = 0;
-    const SKP_Silk_NLSF_CB_struct *psNLSF_CB = NULL;
-    SKP_Silk_range_coder_state  *psRC = &psDec->sRC;
-    /************************/
-    /* Decode sampling rate */
-    /************************/
-    /* only done for first frame of packet */
-    if( psDec->nFramesDecoded == 0 ) {
-        SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_SamplingRates_CDF, SKP_Silk_SamplingRates_offset );
-
-        /* check that sampling rate is supported */
-        if( Ix < 0 || Ix > 3 ) {
-            psRC->error = RANGE_CODER_ILLEGAL_SAMPLING_RATE;
-            return;
-        }
-        fs_kHz_dec = SKP_Silk_SamplingRates_table[ Ix ];
-        SKP_Silk_decoder_set_fs( psDec, fs_kHz_dec );
-    
-        FrameIndex       = 0;
-        FrameTermination = SKP_SILK_MORE_FRAMES;
-    }
-
-    while( FrameTermination == SKP_SILK_MORE_FRAMES ) {
-        /*******************/
-        /* Decode VAD flag */
-        /*******************/
-        SKP_Silk_range_decoder( &psDec->vadFlagBuf[ FrameIndex ], psRC, SKP_Silk_vadflag_CDF, SKP_Silk_vadflag_offset );
-
-        /*******************************************/
-        /* Decode signal type and quantizer offset */
-        /*******************************************/
-        if( FrameIndex == 0 ) {
-            /* first frame in packet: independent coding */
-            SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_type_offset_CDF, SKP_Silk_type_offset_CDF_offset );
-        } else {
-            /* condidtional coding */
-            SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_type_offset_joint_CDF[ psDec->typeOffsetPrev ], 
-                    SKP_Silk_type_offset_CDF_offset );
-        }
-        sigtype               = SKP_RSHIFT( Ix, 1 );
-        QuantOffsetType       = Ix & 1;
-        psDec->typeOffsetPrev = Ix;
-
-        /****************/
-        /* Decode gains */
-        /****************/
-        /* first subframe */    
-        if( FrameIndex == 0 ) {
-            /* first frame in packet: independent coding */
-            SKP_Silk_range_decoder( &psDec->GainsIndices[ FrameIndex ][ 0 ], psRC, SKP_Silk_gain_CDF[ sigtype ], SKP_Silk_gain_CDF_offset );
-        } else {
-            /* condidtional coding */
-            SKP_Silk_range_decoder( &psDec->GainsIndices[ FrameIndex ][ 0 ], psRC, SKP_Silk_delta_gain_CDF, SKP_Silk_delta_gain_CDF_offset );
-        }
-
-        /* remaining subframes */
-        for( i = 1; i < NB_SUBFR; i++ ) {
-            SKP_Silk_range_decoder( &psDec->GainsIndices[ FrameIndex ][ i ], psRC, SKP_Silk_delta_gain_CDF, SKP_Silk_delta_gain_CDF_offset );
-        }
-        
-        /**********************/
-        /* Decode LSF Indices */
-        /**********************/
-
-        /* Set pointer to LSF VQ CB for the current signal type */
-        psNLSF_CB = psDec->psNLSF_CB[ sigtype ];
-
-        /* Arithmetically decode NLSF path */
-        SKP_Silk_range_decoder_multi( psDec->NLSFIndices[ FrameIndex ], psRC, psNLSF_CB->StartPtr, psNLSF_CB->MiddleIx, psNLSF_CB->nStages );
-        
-        /***********************************/
-        /* Decode LSF interpolation factor */
-        /***********************************/
-        SKP_Silk_range_decoder( &psDec->NLSFInterpCoef_Q2[ FrameIndex ], psRC, SKP_Silk_NLSF_interpolation_factor_CDF, 
-            SKP_Silk_NLSF_interpolation_factor_offset );
-        
-        if( sigtype == SIG_TYPE_VOICED ) {
-            /*********************/
-            /* Decode pitch lags */
-            /*********************/
-            /* Get lag index */
-            decode_absolute_lagIndex = 1;
-            if( FrameIndex > 0 && psDec->sigtype[ FrameIndex - 1 ] == SIG_TYPE_VOICED ) {
-                /* Decode Delta index */
-                SKP_Silk_range_decoder( &delta_lagIndex,psRC, SKP_Silk_pitch_delta_CDF,  SKP_Silk_pitch_delta_CDF_offset );
-                if( delta_lagIndex < ( MAX_DELTA_LAG << 1 ) + 1 ) {
-                    delta_lagIndex = delta_lagIndex - MAX_DELTA_LAG;
-                    psDec->lagIndex[ FrameIndex ] = prev_lagIndex + delta_lagIndex;
-                    decode_absolute_lagIndex = 0;
-                }
-            }
-            if( decode_absolute_lagIndex ) {
-                /* Absolute decoding */
-                if( psDec->fs_kHz == 8 ) {
-                    SKP_Silk_range_decoder( &psDec->lagIndex[ FrameIndex ], psRC, SKP_Silk_pitch_lag_NB_CDF,  SKP_Silk_pitch_lag_NB_CDF_offset );
-                } else if( psDec->fs_kHz == 12 ) {
-                    SKP_Silk_range_decoder( &psDec->lagIndex[ FrameIndex ], psRC, SKP_Silk_pitch_lag_MB_CDF,  SKP_Silk_pitch_lag_MB_CDF_offset );
-                } else if( psDec->fs_kHz == 16 ) {
-                    SKP_Silk_range_decoder( &psDec->lagIndex[ FrameIndex ], psRC, SKP_Silk_pitch_lag_WB_CDF,  SKP_Silk_pitch_lag_WB_CDF_offset );
-                } else {
-                    SKP_Silk_range_decoder( &psDec->lagIndex[ FrameIndex ], psRC, SKP_Silk_pitch_lag_SWB_CDF, SKP_Silk_pitch_lag_SWB_CDF_offset );
-                }
-            }
-            prev_lagIndex = psDec->lagIndex[ FrameIndex ];
-
-            /* Get countour index */
-            if( psDec->fs_kHz == 8 ) {
-                /* Less codevectors used in 8 khz mode */
-                SKP_Silk_range_decoder( &psDec->contourIndex[ FrameIndex ], psRC, SKP_Silk_pitch_contour_NB_CDF, SKP_Silk_pitch_contour_NB_CDF_offset );
-            } else {
-                /* Joint for 12, 16, and 24 khz */
-                SKP_Silk_range_decoder( &psDec->contourIndex[ FrameIndex ], psRC, SKP_Silk_pitch_contour_CDF, SKP_Silk_pitch_contour_CDF_offset );
-            }
-            
-            /********************/
-            /* Decode LTP gains */
-            /********************/
-            /* Decode PERIndex value */
-            SKP_Silk_range_decoder( &psDec->PERIndex[ FrameIndex ], psRC, SKP_Silk_LTP_per_index_CDF, SKP_Silk_LTP_per_index_CDF_offset );
-            
-            for( k = 0; k < NB_SUBFR; k++ ) {
-                SKP_Silk_range_decoder( &psDec->LTPIndex[ FrameIndex ][ k ], psRC, SKP_Silk_LTP_gain_CDF_ptrs[ psDec->PERIndex[ FrameIndex ] ], 
-                    SKP_Silk_LTP_gain_CDF_offsets[ psDec->PERIndex[ FrameIndex ] ] );
-            }
-
-            /**********************/
-            /* Decode LTP scaling */
-            /**********************/
-            SKP_Silk_range_decoder( &psDec->LTP_scaleIndex[ FrameIndex ], psRC, SKP_Silk_LTPscale_CDF, SKP_Silk_LTPscale_offset );
-        }
-
-        /***************/
-        /* Decode seed */
-        /***************/
-        SKP_Silk_range_decoder( &seed_int, psRC, SKP_Silk_Seed_CDF, SKP_Silk_Seed_offset );
-        psDec->Seed[ FrameIndex ] = ( SKP_int32 )seed_int;
-        /**************************************/
-        /* Decode Frame termination indicator */
-        /**************************************/
-        SKP_Silk_range_decoder( &FrameTermination, psRC, SKP_Silk_FrameTermination_v4_CDF, SKP_Silk_FrameTermination_v4_offset );
-
-        psDec->sigtype[ FrameIndex ]         = sigtype;
-        psDec->QuantOffsetType[ FrameIndex ] = QuantOffsetType;
-
-        FrameIndex++;
-    }
-
-    /****************************************/
-    /* get number of bytes used so far      */
-    /****************************************/
-    SKP_Silk_range_coder_get_length( psRC, &nBytesUsed );
-    psDec->nBytesLeft = psRC->bufferLength - nBytesUsed;
-    if( psDec->nBytesLeft < 0 ) {
-        psRC->error = RANGE_CODER_READ_BEYOND_BUFFER;
-    }
-
-    psDec->nFramesInPacket  = FrameIndex;
-    psDec->FrameTermination = FrameTermination;
-}
--- a/src/SKP_Silk_decode_parameters.c
+++ /dev/null
@@ -1,243 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-/* Decode parameters from payload */
-void SKP_Silk_decode_parameters(
-    SKP_Silk_decoder_state      *psDec,             /* I/O  State                                       */
-    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O  Decoder control                             */
-    SKP_int                     q[],                /* O    Excitation signal                           */
-    const SKP_int               fullDecoding        /* I    Flag to tell if only arithmetic decoding    */
-)
-{
-    SKP_int   i, k, Ix, fs_kHz_dec, nBytesUsed;
-    SKP_int   Ixs[ NB_SUBFR ];
-    SKP_int   GainsIndices[ NB_SUBFR ];
-    SKP_int   NLSFIndices[ NLSF_MSVQ_MAX_CB_STAGES ];
-    SKP_int   pNLSF_Q15[ MAX_LPC_ORDER ], pNLSF0_Q15[ MAX_LPC_ORDER ];
-    const SKP_int16 *cbk_ptr_Q14;
-    const SKP_Silk_NLSF_CB_struct *psNLSF_CB = NULL;
-    SKP_Silk_range_coder_state  *psRC = &psDec->sRC;
-
-    /************************/
-    /* Decode sampling rate */
-    /************************/
-    /* only done for first frame of packet */
-    if( psDec->nFramesDecoded == 0 ) {
-        SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_SamplingRates_CDF, SKP_Silk_SamplingRates_offset );
-
-        /* check that sampling rate is supported */
-        if( Ix < 0 || Ix > 3 ) {
-            psRC->error = RANGE_CODER_ILLEGAL_SAMPLING_RATE;
-            return;
-        }
-        fs_kHz_dec = SKP_Silk_SamplingRates_table[ Ix ];
-        SKP_Silk_decoder_set_fs( psDec, fs_kHz_dec );
-    }
-
-    /*******************************************/
-    /* Decode signal type and quantizer offset */
-    /*******************************************/
-    if( psDec->nFramesDecoded == 0 ) {
-        /* first frame in packet: independent coding */
-        SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_type_offset_CDF, SKP_Silk_type_offset_CDF_offset );
-    } else {
-        /* condidtional coding */
-        SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_type_offset_joint_CDF[ psDec->typeOffsetPrev ], 
-                SKP_Silk_type_offset_CDF_offset );
-    }
-    psDecCtrl->sigtype         = SKP_RSHIFT( Ix, 1 );
-    psDecCtrl->QuantOffsetType = Ix & 1;
-    psDec->typeOffsetPrev      = Ix;
-
-    /****************/
-    /* Decode gains */
-    /****************/
-    /* first subframe */    
-    if( psDec->nFramesDecoded == 0 ) {
-        /* first frame in packet: independent coding */
-        SKP_Silk_range_decoder( &GainsIndices[ 0 ], psRC, SKP_Silk_gain_CDF[ psDecCtrl->sigtype ], SKP_Silk_gain_CDF_offset );
-    } else {
-        /* condidtional coding */
-        SKP_Silk_range_decoder( &GainsIndices[ 0 ], psRC, SKP_Silk_delta_gain_CDF, SKP_Silk_delta_gain_CDF_offset );
-    }
-
-    /* remaining subframes */
-    for( i = 1; i < NB_SUBFR; i++ ) {
-        SKP_Silk_range_decoder( &GainsIndices[ i ], psRC, SKP_Silk_delta_gain_CDF, SKP_Silk_delta_gain_CDF_offset );
-    }
-    
-    /* Dequant Gains */
-    SKP_Silk_gains_dequant( psDecCtrl->Gains_Q16, GainsIndices, &psDec->LastGainIndex, psDec->nFramesDecoded );
-    /****************/
-    /* Decode NLSFs */
-    /****************/
-    /* Set pointer to NLSF VQ CB for the current signal type */
-    psNLSF_CB = psDec->psNLSF_CB[ psDecCtrl->sigtype ];
-
-    /* Arithmetically decode NLSF path */
-    SKP_Silk_range_decoder_multi( NLSFIndices, psRC, psNLSF_CB->StartPtr, psNLSF_CB->MiddleIx, psNLSF_CB->nStages );
-
-    /* From the NLSF path, decode an NLSF vector */
-    SKP_Silk_NLSF_MSVQ_decode( pNLSF_Q15, psNLSF_CB, NLSFIndices, psDec->LPC_order );
-
-    /************************************/
-    /* Decode NLSF interpolation factor */
-    /************************************/
-    SKP_Silk_range_decoder( &psDecCtrl->NLSFInterpCoef_Q2, psRC, SKP_Silk_NLSF_interpolation_factor_CDF, 
-        SKP_Silk_NLSF_interpolation_factor_offset );
-    
-    /* If just reset, e.g., because internal Fs changed, do not allow interpolation */
-    /* improves the case of packet loss in the first frame after a switch           */
-    if( psDec->first_frame_after_reset == 1 ) {
-        psDecCtrl->NLSFInterpCoef_Q2 = 4;
-    }
-
-    if( fullDecoding ) {
-        /* Convert NLSF parameters to AR prediction filter coefficients */
-        SKP_Silk_NLSF2A_stable( psDecCtrl->PredCoef_Q12[ 1 ], pNLSF_Q15, psDec->LPC_order );
-
-        if( psDecCtrl->NLSFInterpCoef_Q2 < 4 ) {
-            /* Calculation of the interpolated NLSF0 vector from the interpolation factor, */ 
-            /* the previous NLSF1, and the current NLSF1                                   */
-            for( i = 0; i < psDec->LPC_order; i++ ) {
-                pNLSF0_Q15[ i ] = psDec->prevNLSF_Q15[ i ] + SKP_RSHIFT( SKP_MUL( psDecCtrl->NLSFInterpCoef_Q2, 
-                    ( pNLSF_Q15[ i ] - psDec->prevNLSF_Q15[ i ] ) ), 2 );
-            }
-
-            /* Convert NLSF parameters to AR prediction filter coefficients */
-            SKP_Silk_NLSF2A_stable( psDecCtrl->PredCoef_Q12[ 0 ], pNLSF0_Q15, psDec->LPC_order );
-        } else {
-            /* Copy LPC coefficients for first half from second half */
-            SKP_memcpy( psDecCtrl->PredCoef_Q12[ 0 ], psDecCtrl->PredCoef_Q12[ 1 ], 
-                psDec->LPC_order * sizeof( SKP_int16 ) );
-        }
-    }
-
-    SKP_memcpy( psDec->prevNLSF_Q15, pNLSF_Q15, psDec->LPC_order * sizeof( SKP_int ) );
-
-    /* After a packet loss do BWE of LPC coefs */
-    if( psDec->lossCnt ) {
-        SKP_Silk_bwexpander( psDecCtrl->PredCoef_Q12[ 0 ], psDec->LPC_order, BWE_AFTER_LOSS_Q16 );
-        SKP_Silk_bwexpander( psDecCtrl->PredCoef_Q12[ 1 ], psDec->LPC_order, BWE_AFTER_LOSS_Q16 );
-    }
-
-    if( psDecCtrl->sigtype == SIG_TYPE_VOICED ) {
-        /*********************/
-        /* Decode pitch lags */
-        /*********************/
-        /* Get lag index */
-        if( psDec->fs_kHz == 8 ) {
-            SKP_Silk_range_decoder( &Ixs[ 0 ], psRC, SKP_Silk_pitch_lag_NB_CDF,  SKP_Silk_pitch_lag_NB_CDF_offset );
-        } else if( psDec->fs_kHz == 12 ) {
-            SKP_Silk_range_decoder( &Ixs[ 0 ], psRC, SKP_Silk_pitch_lag_MB_CDF,  SKP_Silk_pitch_lag_MB_CDF_offset );
-        } else if( psDec->fs_kHz == 16 ) {
-            SKP_Silk_range_decoder( &Ixs[ 0 ], psRC, SKP_Silk_pitch_lag_WB_CDF,  SKP_Silk_pitch_lag_WB_CDF_offset );
-        } else {
-            SKP_Silk_range_decoder( &Ixs[ 0 ], psRC, SKP_Silk_pitch_lag_SWB_CDF, SKP_Silk_pitch_lag_SWB_CDF_offset );
-        }
-        
-        /* Get countour index */
-        if( psDec->fs_kHz == 8 ) {
-            /* Less codevectors used in 8 khz mode */
-            SKP_Silk_range_decoder( &Ixs[ 1 ], psRC, SKP_Silk_pitch_contour_NB_CDF, SKP_Silk_pitch_contour_NB_CDF_offset );
-        } else {
-            /* Joint for 12, 16, and 24 khz */
-            SKP_Silk_range_decoder( &Ixs[ 1 ], psRC, SKP_Silk_pitch_contour_CDF, SKP_Silk_pitch_contour_CDF_offset );
-        }
-        
-        /* Decode pitch values */
-        SKP_Silk_decode_pitch( Ixs[ 0 ], Ixs[ 1 ], psDecCtrl->pitchL, psDec->fs_kHz );
-
-        /********************/
-        /* Decode LTP gains */
-        /********************/
-        /* Decode PERIndex value */
-        SKP_Silk_range_decoder( &psDecCtrl->PERIndex, psRC, SKP_Silk_LTP_per_index_CDF, 
-                SKP_Silk_LTP_per_index_CDF_offset );
-
-        /* Decode Codebook Index */
-        cbk_ptr_Q14 = SKP_Silk_LTP_vq_ptrs_Q14[ psDecCtrl->PERIndex ]; // set pointer to start of codebook
-        
-        for( k = 0; k < NB_SUBFR; k++ ) {
-            SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_LTP_gain_CDF_ptrs[ psDecCtrl->PERIndex ], 
-                SKP_Silk_LTP_gain_CDF_offsets[ psDecCtrl->PERIndex ] );
-
-            for( i = 0; i < LTP_ORDER; i++ ) {
-                psDecCtrl->LTPCoef_Q14[ SKP_SMULBB( k, LTP_ORDER ) + i ] = cbk_ptr_Q14[ SKP_SMULBB( Ix, LTP_ORDER ) + i ];
-            }
-        }
-
-        /**********************/
-        /* Decode LTP scaling */
-        /**********************/
-        SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_LTPscale_CDF, SKP_Silk_LTPscale_offset );
-        psDecCtrl->LTP_scale_Q14 = SKP_Silk_LTPScales_table_Q14[ Ix ];
-    } else {
-        SKP_memset( psDecCtrl->pitchL,      0, NB_SUBFR * sizeof( SKP_int ) );
-        SKP_memset( psDecCtrl->LTPCoef_Q14, 0, NB_SUBFR * LTP_ORDER * sizeof( SKP_int16 ) );
-        psDecCtrl->PERIndex      = 0;
-        psDecCtrl->LTP_scale_Q14 = 0;
-    }
-
-    /***************/
-    /* Decode seed */
-    /***************/
-    SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_Seed_CDF, SKP_Silk_Seed_offset );
-    psDecCtrl->Seed = ( SKP_int32 )Ix;
-    /*********************************************/
-    /* Decode quantization indices of excitation */
-    /*********************************************/
-    SKP_Silk_decode_pulses( psRC, psDecCtrl, q, psDec->frame_length );
-
-    /*********************************************/
-    /* Decode VAD flag                           */
-    /*********************************************/
-    SKP_Silk_range_decoder( &psDec->vadFlag, psRC, SKP_Silk_vadflag_CDF, SKP_Silk_vadflag_offset );
-
-    /**************************************/
-    /* Decode Frame termination indicator */
-    /**************************************/
-    SKP_Silk_range_decoder( &psDec->FrameTermination, psRC, SKP_Silk_FrameTermination_CDF, SKP_Silk_FrameTermination_offset );
-
-    /****************************************/
-    /* get number of bytes used so far      */
-    /****************************************/
-    SKP_Silk_range_coder_get_length( psRC, &nBytesUsed );
-    psDec->nBytesLeft = psRC->bufferLength - nBytesUsed;
-    if( psDec->nBytesLeft < 0 ) {
-        psRC->error = RANGE_CODER_READ_BEYOND_BUFFER;
-    }
-
-    /****************************************/
-    /* check remaining bits in last byte    */
-    /****************************************/
-    if( psDec->nBytesLeft == 0 ) {
-        SKP_Silk_range_coder_check_after_decoding( psRC );
-    }
-}
--- a/src/SKP_Silk_decode_parameters_v4.c
+++ /dev/null
@@ -1,157 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-/* Decode parameters from payload */
-void SKP_Silk_decode_parameters_v4(
-    SKP_Silk_decoder_state      *psDec,                                 /* I/O  State                                    */
-    SKP_Silk_decoder_control    *psDecCtrl,                             /* I/O  Decoder control                          */
-    SKP_int                     q[ MAX_FRAME_LENGTH ],                  /* O    Excitation signal                        */
-    const SKP_int               fullDecoding                            /* I    Flag to tell if only arithmetic decoding */
-)
-{
-    SKP_int   i, k, Ix, nBytesUsed;
-    SKP_int   pNLSF_Q15[ MAX_LPC_ORDER ], pNLSF0_Q15[ MAX_LPC_ORDER ];
-    const SKP_int16 *cbk_ptr_Q14;
-    const SKP_Silk_NLSF_CB_struct *psNLSF_CB = NULL;
-    SKP_Silk_range_coder_state  *psRC = &psDec->sRC;
-    
-    psDec->FrameTermination       = SKP_SILK_MORE_FRAMES;
-    psDecCtrl->sigtype            = psDec->sigtype[ psDec->nFramesDecoded ];
-    psDecCtrl->QuantOffsetType    = psDec->QuantOffsetType[ psDec->nFramesDecoded ];
-    psDec->vadFlag                = psDec->vadFlagBuf[ psDec->nFramesDecoded ];
-    psDecCtrl->NLSFInterpCoef_Q2  = psDec->NLSFInterpCoef_Q2[ psDec->nFramesDecoded ];
-    psDecCtrl->Seed               = psDec->Seed[ psDec->nFramesDecoded ];
-
-    /* Dequant Gains */
-    SKP_Silk_gains_dequant( psDecCtrl->Gains_Q16, psDec->GainsIndices[ psDec->nFramesDecoded ], &psDec->LastGainIndex, psDec->nFramesDecoded );
-    /****************/
-    /* Decode NLSFs */
-    /****************/
-
-    /* Set pointer to NLSF VQ CB for the current signal type */
-    psNLSF_CB = psDec->psNLSF_CB[ psDecCtrl->sigtype ];
-
-    /* From the NLSF path, decode an NLSF vector */
-    SKP_Silk_NLSF_MSVQ_decode( pNLSF_Q15, psNLSF_CB, psDec->NLSFIndices[ psDec->nFramesDecoded ], psDec->LPC_order );
-
-    /* Convert NLSF parameters to AR prediction filter coefficients */
-    SKP_Silk_NLSF2A_stable( psDecCtrl->PredCoef_Q12[ 1 ], pNLSF_Q15, psDec->LPC_order );
-    
-    /* If just reset, e.g., because internal Fs changed, do not allow interpolation */
-    /* improves the case of packet loss in the first frame after a switch           */
-    if( psDec->first_frame_after_reset == 1 ) {
-        psDecCtrl->NLSFInterpCoef_Q2 = 4;
-    }
-
-    if( psDecCtrl->NLSFInterpCoef_Q2 < 4 ) {
-        /* Calculation of the interpolated NLSF0 vector from the interpolation factor, */ 
-        /* the previous NLSF1, and the current NLSF1                                   */
-        for( i = 0; i < psDec->LPC_order; i++ ) {
-            pNLSF0_Q15[ i ] = psDec->prevNLSF_Q15[ i ] + SKP_RSHIFT( SKP_MUL( psDecCtrl->NLSFInterpCoef_Q2, 
-                ( pNLSF_Q15[ i ] - psDec->prevNLSF_Q15[ i ] ) ), 2 );
-        }
-
-        /* Convert NLSF parameters to AR prediction filter coefficients */
-        SKP_Silk_NLSF2A_stable( psDecCtrl->PredCoef_Q12[ 0 ], pNLSF0_Q15, psDec->LPC_order );
-    } else {
-        /* Copy LPC coefficients for first half from second half */
-        SKP_memcpy( psDecCtrl->PredCoef_Q12[ 0 ], psDecCtrl->PredCoef_Q12[ 1 ], 
-            psDec->LPC_order * sizeof( SKP_int16 ) );
-    }
-
-    SKP_memcpy( psDec->prevNLSF_Q15, pNLSF_Q15, psDec->LPC_order * sizeof( SKP_int ) );
-
-    /* After a packet loss do BWE of LPC coefs */
-    if( psDec->lossCnt ) {
-        SKP_Silk_bwexpander( psDecCtrl->PredCoef_Q12[ 0 ], psDec->LPC_order, BWE_AFTER_LOSS_Q16 );
-        SKP_Silk_bwexpander( psDecCtrl->PredCoef_Q12[ 1 ], psDec->LPC_order, BWE_AFTER_LOSS_Q16 );
-    }
-
-    if( psDecCtrl->sigtype == SIG_TYPE_VOICED ) {
-        /*********************/
-        /* Decode pitch lags */
-        /*********************/
-        
-        /* Decode pitch values */
-        SKP_Silk_decode_pitch( psDec->lagIndex[ psDec->nFramesDecoded ], 
-            psDec->contourIndex[ psDec->nFramesDecoded ], psDecCtrl->pitchL, psDec->fs_kHz );
-
-        /********************/
-        /* Decode LTP gains */
-        /********************/
-        psDecCtrl->PERIndex = psDec->PERIndex[ psDec->nFramesDecoded ];
-        
-        /* Decode Codebook Index */
-        cbk_ptr_Q14 = SKP_Silk_LTP_vq_ptrs_Q14[ psDecCtrl->PERIndex ]; /* set pointer to start of codebook */
-
-        for( k = 0; k < NB_SUBFR; k++ ) {
-            Ix = psDec->LTPIndex[ psDec->nFramesDecoded ][ k ];
-            for( i = 0; i < LTP_ORDER; i++ ) {
-                psDecCtrl->LTPCoef_Q14[ SKP_SMULBB( k, LTP_ORDER ) + i ] = cbk_ptr_Q14[ SKP_SMULBB( Ix, LTP_ORDER ) + i ];
-            }
-        }
-
-        /**********************/
-        /* Decode LTP scaling */
-        /**********************/
-        Ix = psDec->LTP_scaleIndex[ psDec->nFramesDecoded ];
-        psDecCtrl->LTP_scale_Q14 = SKP_Silk_LTPScales_table_Q14[ Ix ];
-    } else {
-        SKP_memset( psDecCtrl->pitchL,      0, NB_SUBFR * sizeof( SKP_int ) );
-        SKP_memset( psDecCtrl->LTPCoef_Q14, 0, NB_SUBFR * LTP_ORDER * sizeof( SKP_int16 ) );
-        psDecCtrl->PERIndex      = 0;
-        psDecCtrl->LTP_scale_Q14 = 0;
-    }
-
-    /*********************************************/
-    /* Decode quantization indices of excitation */
-    /*********************************************/
-    SKP_Silk_decode_pulses( psRC, psDecCtrl, q, psDec->frame_length );
-
-    /****************************************/
-    /* get number of bytes used so far      */
-    /****************************************/
-    SKP_Silk_range_coder_get_length( psRC, &nBytesUsed );
-    psDec->nBytesLeft = psRC->bufferLength - nBytesUsed;
-    if( psDec->nBytesLeft < 0 ) {
-        psRC->error = RANGE_CODER_READ_BEYOND_BUFFER;
-    }
-
-    /****************************************/
-    /* check remaining bits in last byte    */
-    /****************************************/
-    if( psDec->nBytesLeft == 0 ) {
-        SKP_Silk_range_coder_check_after_decoding( psRC );
-    }
-
-    if( psDec->nFramesInPacket == (psDec->nFramesDecoded + 1)) {
-        /* To indicate the packet has been fully decoded */
-        psDec->FrameTermination = SKP_SILK_LAST_FRAME;
-    }
-}
--- a/src/SKP_Silk_decode_pulses.c
+++ /dev/null
@@ -1,105 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-/*********************************************/
-/* Decode quantization indices of excitation */
-/*********************************************/
-void SKP_Silk_decode_pulses(
-    SKP_Silk_range_coder_state      *psRC,              /* I/O  Range coder state                           */
-    SKP_Silk_decoder_control        *psDecCtrl,         /* I/O  Decoder control                             */
-    SKP_int                         q[],                /* O    Excitation signal                           */
-    const SKP_int                   frame_length        /* I    Frame length (preliminary)                  */
-)
-{
-    SKP_int   i, j, k, iter, abs_q, nLS, bit;
-    SKP_int   sum_pulses[ MAX_NB_SHELL_BLOCKS ], nLshifts[ MAX_NB_SHELL_BLOCKS ];
-    SKP_int   *pulses_ptr;
-    const SKP_uint16 *cdf_ptr;
-    
-    /*********************/
-    /* Decode rate level */
-    /*********************/
-    SKP_Silk_range_decoder( &psDecCtrl->RateLevelIndex, psRC, 
-            SKP_Silk_rate_levels_CDF[ psDecCtrl->sigtype ], SKP_Silk_rate_levels_CDF_offset );
-
-    /* Calculate number of shell blocks */
-    iter = frame_length / SHELL_CODEC_FRAME_LENGTH;
-    
-    /***************************************************/
-    /* Sum-Weighted-Pulses Decoding                    */
-    /***************************************************/
-    cdf_ptr = SKP_Silk_pulses_per_block_CDF[ psDecCtrl->RateLevelIndex ];
-    for( i = 0; i < iter; i++ ) {
-        nLshifts[ i ] = 0;
-        SKP_Silk_range_decoder( &sum_pulses[ i ], psRC, cdf_ptr, SKP_Silk_pulses_per_block_CDF_offset );
-
-        /* LSB indication */
-        while( sum_pulses[ i ] == ( MAX_PULSES + 1 ) ) {
-            nLshifts[ i ]++;
-            SKP_Silk_range_decoder( &sum_pulses[ i ], psRC, 
-                    SKP_Silk_pulses_per_block_CDF[ N_RATE_LEVELS - 1 ], SKP_Silk_pulses_per_block_CDF_offset );
-        }
-    }
-    
-    /***************************************************/
-    /* Shell decoding                                  */
-    /***************************************************/
-    for( i = 0; i < iter; i++ ) {
-        if( sum_pulses[ i ] > 0 ) {
-            SKP_Silk_shell_decoder( &q[ SKP_SMULBB( i, SHELL_CODEC_FRAME_LENGTH ) ], psRC, sum_pulses[ i ] );
-        } else {
-            SKP_memset( &q[ SKP_SMULBB( i, SHELL_CODEC_FRAME_LENGTH ) ], 0, SHELL_CODEC_FRAME_LENGTH * sizeof( SKP_int ) );
-        }
-    }
-
-    /***************************************************/
-    /* LSB Decoding                                    */
-    /***************************************************/
-    for( i = 0; i < iter; i++ ) {
-        if( nLshifts[ i ] > 0 ) {
-            nLS = nLshifts[ i ];
-            pulses_ptr = &q[ SKP_SMULBB( i, SHELL_CODEC_FRAME_LENGTH ) ];
-            for( k = 0; k < SHELL_CODEC_FRAME_LENGTH; k++ ) {
-                abs_q = pulses_ptr[ k ];
-                for( j = 0; j < nLS; j++ ) {
-                    abs_q = SKP_LSHIFT( abs_q, 1 ); 
-                    SKP_Silk_range_decoder( &bit, psRC, SKP_Silk_lsb_CDF, 1 );
-                    abs_q += bit;
-                }
-                pulses_ptr[ k ] = abs_q;
-            }
-        }
-    }
-
-    /****************************************/
-    /* Decode and add signs to pulse signal */
-    /****************************************/
-    SKP_Silk_decode_signs( psRC, q, frame_length, psDecCtrl->sigtype, 
-        psDecCtrl->QuantOffsetType, psDecCtrl->RateLevelIndex);
-}
--- a/src/SKP_Silk_decoder_set_fs.c
+++ /dev/null
@@ -1,81 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-/* Set decoder sampling rate */
-void SKP_Silk_decoder_set_fs(
-    SKP_Silk_decoder_state          *psDec,             /* I/O  Decoder state pointer                       */
-    SKP_int                         fs_kHz              /* I    Sampling frequency (kHz)                    */
-)
-{
-    if( psDec->fs_kHz != fs_kHz ) {
-        psDec->fs_kHz  = fs_kHz;
-        psDec->frame_length = SKP_SMULBB( FRAME_LENGTH_MS, fs_kHz );
-        psDec->subfr_length = SKP_SMULBB( FRAME_LENGTH_MS / NB_SUBFR, fs_kHz );
-        if( psDec->fs_kHz == 8 ) {
-            psDec->LPC_order = MIN_LPC_ORDER;
-            psDec->psNLSF_CB[ 0 ] = &SKP_Silk_NLSF_CB0_10;
-            psDec->psNLSF_CB[ 1 ] = &SKP_Silk_NLSF_CB1_10;
-        } else {
-            psDec->LPC_order = MAX_LPC_ORDER;
-            psDec->psNLSF_CB[ 0 ] = &SKP_Silk_NLSF_CB0_16;
-            psDec->psNLSF_CB[ 1 ] = &SKP_Silk_NLSF_CB1_16;
-        }
-        /* Reset part of the decoder state */
-        SKP_memset( psDec->sLPC_Q14,     0, MAX_LPC_ORDER      * sizeof( SKP_int32 ) );
-        SKP_memset( psDec->outBuf,       0, MAX_FRAME_LENGTH   * sizeof( SKP_int16 ) );
-        SKP_memset( psDec->prevNLSF_Q15, 0, MAX_LPC_ORDER      * sizeof( SKP_int )   );
-
-        psDec->sLTP_buf_idx            = 0;
-        psDec->lagPrev                 = 100;
-        psDec->LastGainIndex           = 1;
-        psDec->prev_sigtype            = 0;
-        psDec->first_frame_after_reset = 1;
-
-        if( fs_kHz == 24 ) {
-            psDec->HP_A = SKP_Silk_Dec_A_HP_24;
-            psDec->HP_B = SKP_Silk_Dec_B_HP_24;
-        } else if( fs_kHz == 16 ) {
-            psDec->HP_A = SKP_Silk_Dec_A_HP_16;
-            psDec->HP_B = SKP_Silk_Dec_B_HP_16;
-        } else if( fs_kHz == 12 ) {
-            psDec->HP_A = SKP_Silk_Dec_A_HP_12;
-            psDec->HP_B = SKP_Silk_Dec_B_HP_12;
-        } else if( fs_kHz == 8 ) {
-            psDec->HP_A = SKP_Silk_Dec_A_HP_8;
-            psDec->HP_B = SKP_Silk_Dec_B_HP_8;
-        } else {
-            /* unsupported sampling rate */
-            SKP_assert( 0 );
-        }
-    } 
-
-    /* Check that settings are valid */
-    SKP_assert( psDec->frame_length > 0 && psDec->frame_length <= MAX_FRAME_LENGTH );
-}
-
--- a/src/SKP_Silk_define.h
+++ /dev/null
@@ -1,330 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef SKP_SILK_DEFINE_H
-#define SKP_SILK_DEFINE_H
-
-#include "SKP_Silk_errors.h"
-#include "SKP_Silk_typedef.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-#define MAX_FRAMES_PER_PACKET                   5
-#define BIT_STREAM_V3                           3
-#define BIT_STREAM_V4                           4
-#define USE_BIT_STREAM_V                        BIT_STREAM_V3 // Should be moved to a API call
-
-
-/* MAX DELTA LAG used for multiframe packets */
-#define MAX_DELTA_LAG                           10
-
-/* Lower limit on bitrate for each mode */
-#define MIN_TARGET_RATE_NB_BPS                  5000
-#define MIN_TARGET_RATE_MB_BPS                  7000
-#define MIN_TARGET_RATE_WB_BPS                  8000
-#define MIN_TARGET_RATE_SWB_BPS                 20000
-
-/* Transition bitrates between modes */
-#define SWB2WB_BITRATE_BPS                      30000
-#define SWB2WB_BITRATE_BPS_INITIAL              25000
-#define WB2SWB_BITRATE_BPS                      35000
-#define WB2MB_BITRATE_BPS                       15000
-#define MB2WB_BITRATE_BPS                       20000
-#define MB2NB_BITRATE_BPS                       10000
-#define NB2MB_BITRATE_BPS                       14000
-
-/* Integration/hysteresis threshold for lowering internal sample frequency */
-/* 30000000 -> 6 sec if bitrate is 5000 bps below limit; 3 sec if bitrate is 10000 bps below limit */
-#define ACCUM_BITS_DIFF_THRESHOLD               30000000 
-#define TARGET_RATE_TAB_SZ                      8
-
-/* DTX settings                                 */
-#define NO_SPEECH_FRAMES_BEFORE_DTX             5       /* eq 100 ms */
-#define MAX_CONSECUTIVE_DTX                     20      /* eq 400 ms */
-
-#define USE_LBRR                                1
-
-/* Amount of concecutive no FEC packets before telling JB */
-#define NO_LBRR_THRES                           10
-
-/* Maximum delay between real packet and LBRR packet */
-#define MAX_LBRR_DELAY                          2
-#define LBRR_IDX_MASK                           1
-
-#define INBAND_FEC_MIN_RATE_BPS                 18000  /* Dont use inband FEC below this total target rate  */
-#define LBRR_LOSS_THRES                         2   /* Start adding LBRR at this loss rate (needs tuning)   */
-
-/* LBRR usage defines */
-#define SKP_SILK_NO_LBRR                        0   /* No LBRR information for this packet                  */
-#define SKP_SILK_ADD_LBRR_TO_PLUS1              1   /* Add LBRR for this packet to packet n + 1             */
-#define SKP_SILK_ADD_LBRR_TO_PLUS2              2   /* Add LBRR for this packet to packet n + 2             */
-
-/* Frame termination indicator defines */
-#define SKP_SILK_LAST_FRAME                     0   /* Last frames in packet                                */
-#define SKP_SILK_MORE_FRAMES                    1   /* More frames to follow this one                       */
-#define SKP_SILK_LBRR_VER1                      2   /* LBRR information from packet n - 1                   */
-#define SKP_SILK_LBRR_VER2                      3   /* LBRR information from packet n - 2                   */
-#define SKP_SILK_EXT_LAYER                      4   /* Extension layers added                               */
-
-/* Number of Second order Sections for SWB detection HP filter */
-#define NB_SOS                                  3
-#define HP_8_KHZ_THRES                          10          /* average energy per sample, above 8 kHz       */
-#define CONCEC_SWB_SMPLS_THRES                  480 * 15    /* 300 ms                                       */
-#define WB_DETECT_ACTIVE_SPEECH_MS_THRES        15000       /* ms of active speech needed for WB detection  */
-
-/* Low complexity setting */
-#ifdef EMBEDDED_OPT
-#   define LOW_COMPLEXITY_ONLY                  1
-#else
-#   define LOW_COMPLEXITY_ONLY                  0
-#endif
-
-/* Activate bandwidth transition filtering for mode switching */
-#ifdef EMBEDDED_OPT
-#   define SWITCH_TRANSITION_FILTERING          0
-#else
-#ifndef FORCE_FS_KHZ 
-#   define SWITCH_TRANSITION_FILTERING          1
-#else
-#   define SWITCH_TRANSITION_FILTERING          0
-#endif
-#endif
-
-/* Decoder Parameters */
-#define DEC_HP_ORDER                            2
-
-/* Maximum sampling frequency, should be 16 for embedded */
-#define MAX_FS_KHZ                              24 
-
-/* Signal Types used by silk */
-#define SIG_TYPE_VOICED                         0
-#define SIG_TYPE_UNVOICED                       1
-
-/* VAD Types used by silk */
-#define NO_VOICE_ACTIVITY                       0
-#define VOICE_ACTIVITY                          1
-
-/* number of samples per frame */ 
-#define FRAME_LENGTH_MS                         20 /* 20 ms */
-#define MAX_FRAME_LENGTH                        (FRAME_LENGTH_MS * MAX_FS_KHZ)
-
-/* number of lookahead samples for pitch analysis */
-#define LA_PITCH_MS                             3
-#define LA_PITCH_MAX                            (LA_PITCH_MS * MAX_FS_KHZ)
-
-/* number of lookahead samples for noise shape analysis */
-#define LA_SHAPE_MS                             5
-#define LA_SHAPE_MAX                            (LA_SHAPE_MS * MAX_FS_KHZ)
-
-/* Order of LPC used in find pitch */
-#define FIND_PITCH_LPC_ORDER_MAX                16
-
-/* Length of LPC window used in find pitch */
-#define FIND_PITCH_LPC_WIN_MS                   (30 + (LA_PITCH_MS << 1))
-#define FIND_PITCH_LPC_WIN_MAX                  (FIND_PITCH_LPC_WIN_MS * MAX_FS_KHZ)
-
-#define PITCH_EST_COMPLEXITY_HC_MODE            SigProc_PITCH_EST_MAX_COMPLEX
-#define PITCH_EST_COMPLEXITY_MC_MODE            SigProc_PITCH_EST_MID_COMPLEX
-#define PITCH_EST_COMPLEXITY_LC_MODE            SigProc_PITCH_EST_MIN_COMPLEX
-
-
-/* Max number of bytes in payload output buffer (may contain multiple frames) */
-#define MAX_ARITHM_BYTES                        1024
-
-#define RANGE_CODER_WRITE_BEYOND_BUFFER         -1
-#define RANGE_CODER_CDF_OUT_OF_RANGE            -2
-#define RANGE_CODER_NORMALIZATION_FAILED        -3
-#define RANGE_CODER_ZERO_INTERVAL_WIDTH         -4
-#define RANGE_CODER_DECODER_CHECK_FAILED        -5
-#define RANGE_CODER_READ_BEYOND_BUFFER          -6
-#define RANGE_CODER_ILLEGAL_SAMPLING_RATE       -7
-#define RANGE_CODER_DEC_PAYLOAD_TOO_LONG        -8
-
-/* dB level of lowest gain quantization level */
-#define MIN_QGAIN_DB                            6
-/* dB level of highest gain quantization level */
-#define MAX_QGAIN_DB                            86
-/* Number of gain quantization levels */
-#define N_LEVELS_QGAIN                          64
-/* Max increase in gain quantization index */
-#define MAX_DELTA_GAIN_QUANT                    40
-/* Max decrease in gain quantization index */
-#define MIN_DELTA_GAIN_QUANT                    -4
-
-/* Quantization offsets (multiples of 4) */
-#define OFFSET_VL_Q10                           32
-#define OFFSET_VH_Q10                           100
-#define OFFSET_UVL_Q10                          100
-#define OFFSET_UVH_Q10                          256
-
-/* Maximum numbers of iterations used to stabilize a LPC vector */
-#define MAX_LPC_STABILIZE_ITERATIONS            20
-
-#define MAX_LPC_ORDER                           16
-#define MIN_LPC_ORDER                           10
-
-/* Find Pred Coef defines */
-#define LTP_ORDER                               5
-
-/* LTP quantization settings */
-#define NB_LTP_CBKS                             3
-
-/* Number of subframes */
-#define NB_SUBFR                                4
-
-/* Flag to use harmonic noise shaping */
-#define USE_HARM_SHAPING                        1
-
-/* Max LPC order of noise shaping filters */
-#define SHAPE_LPC_ORDER_MAX                     16
-
-#define HARM_SHAPE_FIR_TAPS                     3
-
-/* Length of LPC window used in noise shape analysis */
-#define SHAPE_LPC_WIN_MS                        15
-#define SHAPE_LPC_WIN_16_KHZ                    (SHAPE_LPC_WIN_MS * 16)
-#define SHAPE_LPC_WIN_24_KHZ                    (SHAPE_LPC_WIN_MS * 24)
-#define SHAPE_LPC_WIN_MAX                       (SHAPE_LPC_WIN_MS * MAX_FS_KHZ)
-
-/* Maximum number of delayed decision states */
-#define DEL_DEC_STATES_MAX                      4
-
-#define LTP_BUF_LENGTH                          512
-#define LTP_MASK                                (LTP_BUF_LENGTH - 1)
-
-#define DECISION_DELAY                          32
-#define DECISION_DELAY_MASK                     (DECISION_DELAY - 1)
-
-/* number of subframes for excitation entropy coding */
-#define SHELL_CODEC_FRAME_LENGTH                16
-#define MAX_NB_SHELL_BLOCKS                     (MAX_FRAME_LENGTH / SHELL_CODEC_FRAME_LENGTH)
-
-/* number of rate levels, for entropy coding of excitation */
-#define N_RATE_LEVELS                           10
-
-/* maximum sum of pulses per shell coding frame */
-#define MAX_PULSES                              18
-
-#define MAX_MATRIX_SIZE                         MAX_LPC_ORDER /* Max of LPC Order and LTP order */
-
-#if( MAX_LPC_ORDER > DECISION_DELAY )
-# define NSQ_LPC_BUF_LENGTH                     MAX_LPC_ORDER
-#else
-# define NSQ_LPC_BUF_LENGTH                     DECISION_DELAY
-#endif
-
-/***********************/
-/* High pass filtering */
-/***********************/
-#define HIGH_PASS_INPUT                         1
-
-/***************************/
-/* Voice activity detector */
-/***************************/
-#define VAD_N_BANDS                             4       /* 0-1, 1-2, 2-4, and 4-8 kHz                       */
-
-#define VAD_INTERNAL_SUBFRAMES_LOG2             2
-#define VAD_INTERNAL_SUBFRAMES                  (1 << VAD_INTERNAL_SUBFRAMES_LOG2)
-    
-#define VAD_NOISE_LEVEL_SMOOTH_COEF_Q16         1024    /* Must be <  4096                                  */
-#define VAD_NOISE_LEVELS_BIAS                   50 
-
-/* Sigmoid settings */
-#define VAD_NEGATIVE_OFFSET_Q5                  128     /* sigmoid is 0 at -128                             */
-#define VAD_SNR_FACTOR_Q16                      45000 
-
-/* smoothing for SNR measurement */
-#define VAD_SNR_SMOOTH_COEF_Q18                 4096
-
-/******************/
-/* NLSF quantizer */
-/******************/
-#ifdef NLSF_TRAINING
-#   define NLSF_MSVQ_MAX_CB_STAGES                      30 
-#   define NLSF_MSVQ_MAX_VECTORS_IN_STAGE               256
-#   define NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END    128
-#else
-#   define NLSF_MSVQ_MAX_CB_STAGES                      10  /* Update manually when changing codebooks      */
-#   define NLSF_MSVQ_MAX_VECTORS_IN_STAGE               128 /* Update manually when changing codebooks      */
-#   define NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END    16  /* Update manually when changing codebooks      */
-#endif
-
-#define NLSF_MSVQ_FLUCTUATION_REDUCTION         1
-#define MAX_NLSF_MSVQ_SURVIVORS                 16
-#define MAX_NLSF_MSVQ_SURVIVORS_LC_MODE         2
-#define MAX_NLSF_MSVQ_SURVIVORS_MC_MODE         4
-
-/* Based on above defines, calculate how much memory is necessary to allocate */
-#if( NLSF_MSVQ_MAX_VECTORS_IN_STAGE > ( MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END ) )
-#   define NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED_LC_MODE  NLSF_MSVQ_MAX_VECTORS_IN_STAGE
-#else
-#   define NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED_LC_MODE  MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END
-#endif
-
-#if( NLSF_MSVQ_MAX_VECTORS_IN_STAGE > ( MAX_NLSF_MSVQ_SURVIVORS * NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END ) )
-#   define NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED  NLSF_MSVQ_MAX_VECTORS_IN_STAGE
-#else
-#   define NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED  MAX_NLSF_MSVQ_SURVIVORS * NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END
-#endif
-
-#define NLSF_MSVQ_SURV_MAX_REL_RD               4
-
-/* Transition filtering for mode switching */
-#if SWITCH_TRANSITION_FILTERING
-#  define TRANSITION_TIME_UP_MS             5120 // 5120 = 64 * FRAME_LENGTH_MS * ( TRANSITION_INT_NUM - 1 ) = 64*(20*4)
-#  define TRANSITION_TIME_DOWN_MS           2560 // 2560 = 32 * FRAME_LENGTH_MS * ( TRANSITION_INT_NUM - 1 ) = 32*(20*4)
-#  define TRANSITION_NB                     3 /* Hardcoded in tables */
-#  define TRANSITION_NA                     2 /* Hardcoded in tables */
-#  define TRANSITION_INT_NUM                5 /* Hardcoded in tables */
-#  define TRANSITION_FRAMES_UP          ( TRANSITION_TIME_UP_MS   / FRAME_LENGTH_MS )
-#  define TRANSITION_FRAMES_DOWN        ( TRANSITION_TIME_DOWN_MS / FRAME_LENGTH_MS )
-#  define TRANSITION_INT_STEPS_UP       ( TRANSITION_FRAMES_UP    / ( TRANSITION_INT_NUM - 1 )  )
-#  define TRANSITION_INT_STEPS_DOWN     ( TRANSITION_FRAMES_DOWN  / ( TRANSITION_INT_NUM - 1 )  )
-#endif
-
-/* Row based */
-#define matrix_ptr(Matrix_base_adr, row, column, N)         *(Matrix_base_adr + ((row)*(N)+(column)))
-#define matrix_adr(Matrix_base_adr, row, column, N)          (Matrix_base_adr + ((row)*(N)+(column)))
-
-/* Column based */
-#ifndef matrix_c_ptr
-#   define matrix_c_ptr(Matrix_base_adr, row, column, M)    *(Matrix_base_adr + ((row)+(M)*(column)))
-#endif
-#define matrix_c_adr(Matrix_base_adr, row, column, M)        (Matrix_base_adr + ((row)+(M)*(column)))
-
-/* BWE factors to apply after packet loss */
-#define BWE_AFTER_LOSS_Q16                              63570
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
--- a/src/SKP_Silk_define_FIX.h
+++ /dev/null
@@ -1,97 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef SKP_SILK_DEFINE_FIX_H
-#define SKP_SILK_DEFINE_FIX_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Head room for correlations                           */
-#define LTP_CORRS_HEAD_ROOM                             2
-#define LPC_CORRS_HEAD_ROOM                             10
-
-#define WB_DETECT_ACTIVE_SPEECH_LEVEL_THRES_Q8          179     // 179.2_Q8 = 0.7f required speech activity for counting frame as active
-
-/* DTX settings */
-#define SPEECH_ACTIVITY_DTX_THRES_Q8                    26      // 25.60_Q8 = 0.1f
-
-#define LBRR_SPEECH_ACTIVITY_THRES_Q8                   128
-
-/* level of noise floor for whitening filter LPC analysis in pitch analysis */
-#define FIND_PITCH_WHITE_NOISE_FRACTION_Q16             66
-
-/* bandwdith expansion for whitening filter in pitch analysis */
-#define FIND_PITCH_BANDWITH_EXPANSION_Q16               64881
-
-/* Threshold used by pitch estimator for early escape */
-#define FIND_PITCH_CORRELATION_THRESHOLD_Q16_HC_MODE    45875       // 0.7
-#define FIND_PITCH_CORRELATION_THRESHOLD_Q16_MC_MODE    49152       // 0.75
-#define FIND_PITCH_CORRELATION_THRESHOLD_Q16_LC_MODE    52429       // 0.8
-
-/* Regualarization factor for correlation matrix. Equivalent to adding noise at -50 dB */
-#define FIND_LTP_COND_FAC_Q31                           21475
-#define FIND_LPC_COND_FAC_Q32                           257698       // 6e-5
-
-/* Find Pred Coef defines */
-#define INACTIVE_BWExp_Q16                              64225       // 0.98
-#define ACTIVE_BWExp_Q16                                65470       // 0.999
-#define LTP_DAMPING_Q16                                 66
-#define LTP_SMOOTHING_Q26                               6710886
-
-/* LTP quantization settings */
-#define MU_LTP_QUANT_NB_Q8                              8
-#define MU_LTP_QUANT_MB_Q8                              6
-#define MU_LTP_QUANT_WB_Q8                              5
-#define MU_LTP_QUANT_SWB_Q8                             4
-
-/***********************/
-/* High pass filtering */
-/***********************/
-/* Smoothing parameters for low end of pitch frequency range estimation */
-#define VARIABLE_HP_SMTH_COEF1_Q16                      6554    // 0.1
-#define VARIABLE_HP_SMTH_COEF2_Q16                      983     // 0.015
-
-/* Min and max values for low end of pitch frequency range estimation */
-#define VARIABLE_HP_MIN_FREQ_Q0                         80
-#define VARIABLE_HP_MAX_FREQ_Q0                         150
-
-/* Max absolute difference between log2 of pitch frequency and smoother state, to enter the smoother */
-#define VARIABLE_HP_MAX_DELTA_FREQ_Q7                   51      // 0.4 in Q7
-
-/* Defines for CN generation */
-#define CNG_BUF_MASK_MAX                                255             /* 2^floor(log2(MAX_FRAME_LENGTH))  */
-#define CNG_GAIN_SMTH_Q16                               4634            /* 0.25^(1/4)                       */
-#define CNG_NLSF_SMTH_Q16                               16348           /* 0.25                             */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
--- a/src/SKP_Silk_detect_SWB_input.c
+++ /dev/null
@@ -1,76 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*
- * Detect SWB input by measuring energy above 8 kHz.
- */
-
-#include "SKP_Silk_main.h"
-
-void SKP_Silk_detect_SWB_input(
-    SKP_Silk_detect_SWB_state   *psSWBdetect,   /* (I/O) encoder state  */
-    const SKP_int16             samplesIn[],    /* (I) input to encoder */
-    SKP_int                     nSamplesIn      /* (I) length of input */
-)
-{
-    SKP_int     HP_8_kHz_len, i;
-    SKP_int16   in_HP_8_kHz[ MAX_FRAME_LENGTH ];
-    SKP_int32   energy_32, shift;
-    
-    /* High pass filter with cutoff at 8 khz */
-    HP_8_kHz_len = SKP_min_int( nSamplesIn, MAX_FRAME_LENGTH );
-    HP_8_kHz_len = SKP_max_int( HP_8_kHz_len, 0 );
-
-    /* Cutoff around 9 khz */
-    /* A = conv(conv([8192,14613, 6868], [8192,12883, 7337]), [8192,11586, 7911]); */
-    /* B = conv(conv([575, -948, 575], [575, -221, 575]), [575, 104, 575]); */
-    SKP_Silk_biquad( samplesIn, SKP_Silk_SWB_detect_B_HP_Q13[ 0 ], SKP_Silk_SWB_detect_A_HP_Q13[ 0 ], 
-        psSWBdetect->S_HP_8_kHz[ 0 ], in_HP_8_kHz, HP_8_kHz_len );
-    for( i = 1; i < NB_SOS; i++ ) {
-        SKP_Silk_biquad( in_HP_8_kHz, SKP_Silk_SWB_detect_B_HP_Q13[ i ], SKP_Silk_SWB_detect_A_HP_Q13[ i ], 
-            psSWBdetect->S_HP_8_kHz[ i ], in_HP_8_kHz, HP_8_kHz_len );
-    }
-
-    /* Calculate energy in HP signal */
-    SKP_Silk_sum_sqr_shift( &energy_32, &shift, in_HP_8_kHz, HP_8_kHz_len );
-
-    /* Count concecutive samples above threshold, after adjusting threshold for number of input samples and shift */
-    if( energy_32 > SKP_RSHIFT( SKP_SMULBB( HP_8_KHZ_THRES, HP_8_kHz_len ), shift ) ) {
-        psSWBdetect->ConsecSmplsAboveThres += nSamplesIn;
-        if( psSWBdetect->ConsecSmplsAboveThres > CONCEC_SWB_SMPLS_THRES ) {
-            psSWBdetect->SWB_detected = 1;
-        }
-    } else {
-        psSWBdetect->ConsecSmplsAboveThres -= nSamplesIn;
-        psSWBdetect->ConsecSmplsAboveThres = SKP_max( psSWBdetect->ConsecSmplsAboveThres, 0 );
-    }
-
-    /* If sufficient speech activity and no SWB detected, we detect the signal as being WB */
-    if( ( psSWBdetect->ActiveSpeech_ms > WB_DETECT_ACTIVE_SPEECH_MS_THRES ) && ( psSWBdetect->SWB_detected == 0 ) ) {
-        psSWBdetect->WB_detected = 1;
-    }
-}
--- a/src/SKP_Silk_enc_API.c
+++ /dev/null
@@ -1,268 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-
-#include "SKP_Silk_define.h"
-#include "SKP_Silk_main_FIX.h"
-#include "SKP_Silk_SDK_API.h"
-#include "SKP_Silk_control.h"
-#include "SKP_Silk_typedef.h"
-#include "SKP_Silk_structs.h"
-#define SKP_Silk_EncodeControlStruct SKP_SILK_SDK_EncControlStruct
-
-/****************************************/
-/* Encoder functions                    */
-/****************************************/
-
-SKP_int SKP_Silk_SDK_Get_Encoder_Size( SKP_int *encSizeBytes )
-{
-    SKP_int ret = 0;
-    
-    *encSizeBytes = sizeof( SKP_Silk_encoder_state_FIX );
-    
-    return ret;
-}
-
-
-/***************************************/
-/* Read control structure from encoder */
-/***************************************/
-SKP_int SKP_Silk_SDK_QueryEncoder(
-    const void *encState,                       /* I:   State Vector                                    */
-    SKP_Silk_EncodeControlStruct *encStatus     /* O:   Control Structure                               */
-)
-{
-    SKP_Silk_encoder_state_FIX *psEnc;
-    SKP_int ret = 0;    
-
-    psEnc = ( SKP_Silk_encoder_state_FIX* )encState;
-
-    encStatus->sampleRate = ( unsigned short )SKP_SMULBB( psEnc->sCmn.fs_kHz, 1000 );                       /* convert kHz -> Hz */ 
-    encStatus->packetSize = ( unsigned short )SKP_SMULBB( psEnc->sCmn.fs_kHz, psEnc->sCmn.PacketSize_ms );  /* convert samples -> ms */
-    encStatus->bitRate    = ( unsigned short )psEnc->sCmn.TargetRate_bps;
-    encStatus->packetLossPercentage = psEnc->sCmn.PacketLoss_perc;
-    encStatus->complexity           = psEnc->sCmn.Complexity;
-
-    return ret;
-}
-
-/*************************/
-/* Init or Reset encoder */
-/*************************/
-SKP_int SKP_Silk_SDK_InitEncoder(
-    void                            *encState,          /* I/O: State                                           */
-    SKP_Silk_EncodeControlStruct    *encStatus          /* O:   Control structure                               */
-)
-{
-    SKP_Silk_encoder_state_FIX *psEnc;
-    SKP_int ret = 0;
-
-        
-    psEnc = ( SKP_Silk_encoder_state_FIX* )encState;
-
-    /* Reset Encoder */
-    if( ret += SKP_Silk_init_encoder_FIX( psEnc ) ) {
-        SKP_assert( 0 );
-    }
-
-    /* Read Control structure */
-    if( ret += SKP_Silk_SDK_QueryEncoder( encState, encStatus ) ) {
-        SKP_assert( 0 );
-    }
-
-
-    return ret;
-}
-
-/**************************/
-/* Encode frame with Silk */
-/**************************/
-SKP_int SKP_Silk_SDK_Encode( 
-    void                                *encState,      /* I/O: State                                           */
-    const SKP_Silk_EncodeControlStruct  *encControl,    /* I:   Control structure                               */
-    const SKP_int16                     *samplesIn,     /* I:   Speech sample input vector                      */
-    SKP_int                             nSamplesIn,     /* I:   Number of samples in input vector               */
-    SKP_uint8                           *outData,       /* O:   Encoded output vector                           */
-    SKP_int16                           *nBytesOut      /* I/O: Number of bytes in outData (input: Max bytes)   */
-)
-{
-    SKP_int   API_fs_kHz, PacketSize_ms, PacketLoss_perc, UseInBandFec, UseDTX, ret = 0;
-    SKP_int   nSamplesToBuffer, Complexity, input_ms, nSamplesFromInput = 0;
-    SKP_int32 TargetRate_bps;
-    SKP_int16 MaxBytesOut;
-    SKP_Silk_encoder_state_FIX *psEnc = ( SKP_Silk_encoder_state_FIX* )encState;
-
-
-    SKP_assert( encControl != NULL );
-
-    /* Check sampling frequency first, to avoid divide by zero later */
-    if( ( encControl->sampleRate !=  8000 ) && ( encControl->sampleRate != 12000 ) && 
-        ( encControl->sampleRate != 16000 ) && ( encControl->sampleRate != 24000 ) ) {
-        ret = SKP_SILK_ENC_FS_NOT_SUPPORTED;
-        SKP_assert( 0 );
-        return( ret );
-    }
-
-    /* Set Encoder parameters from Control structure */
-    API_fs_kHz      = SKP_DIV32_16( ( SKP_int )encControl->sampleRate, 1000 );          /* convert Hz -> kHz */
-    PacketSize_ms   = SKP_DIV32_16( ( SKP_int )encControl->packetSize, API_fs_kHz );    /* convert samples -> ms */
-    TargetRate_bps  =             ( SKP_int32 )encControl->bitRate;
-    PacketLoss_perc =               ( SKP_int )encControl->packetLossPercentage;
-    UseInBandFec    =               ( SKP_int )encControl->useInBandFEC;
-    Complexity      =               ( SKP_int )encControl->complexity;
-    UseDTX          =               ( SKP_int )encControl->useDTX;
-
-    /* Only accept input lengths that are multiplum of 10 ms */
-    input_ms = SKP_DIV32_16( nSamplesIn, API_fs_kHz );
-    if( ( input_ms % 10) != 0 || nSamplesIn < 0 ) {
-        ret = SKP_SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES;
-        SKP_assert( 0 );
-        return( ret );
-    }
-
-    /* Make sure no more than one packet can be produced */
-    if( nSamplesIn > SKP_SMULBB( psEnc->sCmn.PacketSize_ms, API_fs_kHz ) ) {
-        ret = SKP_SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES;
-        SKP_assert( 0 );
-        return( ret );
-    }
-
-    if( ( ret = SKP_Silk_control_encoder_FIX( psEnc, API_fs_kHz, PacketSize_ms, TargetRate_bps, 
-                    PacketLoss_perc, UseInBandFec, UseDTX, input_ms, Complexity ) ) != 0 ) {
-        SKP_assert( 0 );
-        return( ret );
-    }
-
-    /* Detect energy above 8 kHz */
-    if( encControl->sampleRate == 24000 && psEnc->sCmn.sSWBdetect.SWB_detected == 0 && psEnc->sCmn.sSWBdetect.WB_detected == 0 ) {
-        SKP_Silk_detect_SWB_input( &psEnc->sCmn.sSWBdetect, samplesIn, ( SKP_int )nSamplesIn );
-    }
-
-    /* Input buffering/resampling and encoding */
-    MaxBytesOut = 0;                    /* return 0 output bytes if no encoder called */
-    while( 1 ) {
-        /* Resample/buffer */
-        nSamplesToBuffer = psEnc->sCmn.frame_length - psEnc->sCmn.inputBufIx;
-        if( encControl->sampleRate == SKP_SMULBB( psEnc->sCmn.fs_kHz, 1000 ) ) { 
-            /* Same sample frequency - copy the data */
-            nSamplesToBuffer  = SKP_min_int( nSamplesToBuffer, nSamplesIn );
-            nSamplesFromInput = nSamplesToBuffer;
-            SKP_memcpy( &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], samplesIn, SKP_SMULBB( nSamplesToBuffer, sizeof( SKP_int16 ) ) );
-        } else if( encControl->sampleRate == 24000 && psEnc->sCmn.fs_kHz == 16 ) {
-            /* Resample the data from 24 kHz to 16 kHz */
-            nSamplesToBuffer  = SKP_min_int( nSamplesToBuffer, SKP_SMULWB( SKP_LSHIFT( nSamplesIn, 1 ), 21846 ) ); // 21846 = ceil(2/3)*2^15
-            nSamplesFromInput = SKP_RSHIFT( SKP_SMULBB( nSamplesToBuffer, 3 ), 1 );
-#if LOW_COMPLEXITY_ONLY
-            {
-                SKP_int16 scratch[ MAX_FRAME_LENGTH + SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ];
-                SKP_assert( nSamplesFromInput <= MAX_FRAME_LENGTH );
-                SKP_Silk_resample_2_3_coarse( &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], psEnc->sCmn.resample24To16state, 
-                    samplesIn, nSamplesFromInput, scratch );
-            }
-#else
-            SKP_Silk_resample_2_3( &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], psEnc->sCmn.resample24To16state, 
-                samplesIn, nSamplesFromInput );
-#endif
-        } else if( encControl->sampleRate == 24000 && psEnc->sCmn.fs_kHz == 12 ) {
-            SKP_int32 scratch[ 3 * MAX_FRAME_LENGTH ];
-            /* Resample the data from 24 kHz to 12 kHz */
-            nSamplesToBuffer  = SKP_min_int( nSamplesToBuffer, SKP_RSHIFT( nSamplesIn, 1 ) );
-            nSamplesFromInput = SKP_LSHIFT16( nSamplesToBuffer, 1 );
-            SKP_Silk_resample_1_2_coarse( samplesIn, psEnc->sCmn.resample24To12state, 
-                &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], scratch, nSamplesToBuffer );
-        } else if( encControl->sampleRate == 24000 && psEnc->sCmn.fs_kHz == 8 ) {
-            /* Resample the data from 24 kHz to 8 kHz */
-            nSamplesToBuffer  = SKP_min_int( nSamplesToBuffer, SKP_DIV32_16( nSamplesIn, 3 ) );
-            nSamplesFromInput = SKP_SMULBB( nSamplesToBuffer, 3 );
-            SKP_Silk_resample_1_3( &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], psEnc->sCmn.resample24To8state, 
-                samplesIn, nSamplesFromInput);
-        } else if( encControl->sampleRate == 16000 && psEnc->sCmn.fs_kHz == 12 ) {
-            /* Resample the data from 16 kHz to 12 kHz */
-            nSamplesToBuffer  = SKP_min_int( nSamplesToBuffer, SKP_RSHIFT( SKP_SMULBB( nSamplesIn, 3 ), 2 ) );
-            nSamplesFromInput = SKP_SMULWB( SKP_LSHIFT16( nSamplesToBuffer, 2 ), 21846 ); // 21846 = ceil((1/3)*2^16)
-            SKP_Silk_resample_3_4( &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], psEnc->sCmn.resample16To12state, 
-                samplesIn, nSamplesFromInput );
-        } else if( encControl->sampleRate == 16000 && psEnc->sCmn.fs_kHz == 8 ) {
-            SKP_int32 scratch[ 3 * MAX_FRAME_LENGTH ];
-            /* Resample the data from 16 kHz to 8 kHz */
-            nSamplesToBuffer  = SKP_min_int( nSamplesToBuffer, SKP_RSHIFT( nSamplesIn, 1 ) );
-            nSamplesFromInput = SKP_LSHIFT16( nSamplesToBuffer, 1 );
-            SKP_Silk_resample_1_2_coarse( samplesIn, psEnc->sCmn.resample16To8state, 
-                &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], scratch, nSamplesToBuffer );
-        } else if( encControl->sampleRate == 12000 && psEnc->sCmn.fs_kHz == 8 ) {
-            /* Resample the data from 12 kHz to 8 kHz */
-            nSamplesToBuffer  = SKP_min_int( nSamplesToBuffer, SKP_SMULWB( SKP_LSHIFT( nSamplesIn, 1 ), 21846 ) );
-            nSamplesFromInput = SKP_RSHIFT( SKP_SMULBB( nSamplesToBuffer, 3 ), 1 );
-#if LOW_COMPLEXITY_ONLY
-            {
-                SKP_int16 scratch[ MAX_FRAME_LENGTH + SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ];
-                SKP_assert( nSamplesFromInput <= MAX_FRAME_LENGTH );
-                SKP_Silk_resample_2_3_coarse( &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], psEnc->sCmn.resample12To8state, 
-                    samplesIn, nSamplesFromInput, scratch );
-            }
-#else
-            SKP_Silk_resample_2_3( &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], psEnc->sCmn.resample12To8state, 
-                samplesIn, nSamplesFromInput );
-#endif
-        }
-        samplesIn  += nSamplesFromInput;
-        nSamplesIn -= nSamplesFromInput;
-        psEnc->sCmn.inputBufIx += nSamplesToBuffer;
-
-        /* Silk encoder */
-        if( psEnc->sCmn.inputBufIx >= psEnc->sCmn.frame_length ) {
-            /* Enough data in input buffer, so encode */
-            if( MaxBytesOut == 0 ) {
-                /* No payload obtained so far */
-                MaxBytesOut = *nBytesOut;
-                if( ( ret = SKP_Silk_encode_frame_FIX( psEnc, outData, &MaxBytesOut, psEnc->sCmn.inputBuf ) ) != 0 ) {
-                    SKP_assert( 0 );
-                }
-            } else {
-                /* outData already contains a payload */
-                if( ( ret = SKP_Silk_encode_frame_FIX( psEnc, outData, nBytesOut, psEnc->sCmn.inputBuf ) ) != 0 ) {
-                    SKP_assert( 0 );
-                }
-                /* Check that no second payload was created */
-                SKP_assert( *nBytesOut == 0 );
-            }
-            psEnc->sCmn.inputBufIx = 0;
-        } else {
-            break;
-        }
-    }
-
-    *nBytesOut = MaxBytesOut;
-    if( psEnc->sCmn.useDTX && psEnc->sCmn.inDTX ) {
-        /* Dtx simulation */
-        *nBytesOut = 0;
-    }
-
-
-    return ret;
-}
-
--- a/src/SKP_Silk_encode_frame_FIX.c
+++ /dev/null
@@ -1,432 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-/****************/
-/* Encode frame */
-/****************/
-SKP_int SKP_Silk_encode_frame_FIX( 
-    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O  Pointer to Silk FIX encoder state           */
-    SKP_uint8                       *pCode,             /* O    Pointer to payload                          */
-    SKP_int16                       *pnBytesOut,        /* I/O  Pointer to number of payload bytes          */
-                                                        /*      input: max length; output: used             */
-    const SKP_int16                 *pIn                /* I    Pointer to input speech frame               */
-)
-{
-    SKP_Silk_encoder_control_FIX sEncCtrl;
-    SKP_int     i, nBytes, ret = 0;
-    SKP_int16   *x_frame, *res_pitch_frame;
-    SKP_int16   xfw[ MAX_FRAME_LENGTH ];
-    SKP_int16   pIn_HP[ MAX_FRAME_LENGTH ];
-    SKP_int16   res_pitch[ 2 * MAX_FRAME_LENGTH + LA_PITCH_MAX ];
-    SKP_int     LBRR_idx, frame_terminator, SNR_dB_Q7;
-    const SKP_uint16 *FrameTermination_CDF;
-
-    /* Low bitrate redundancy parameters */
-    SKP_uint8   LBRRpayload[ MAX_ARITHM_BYTES ];
-    SKP_int16   nBytesLBRR;
-
-    //SKP_int32   Seed[ MAX_LAYERS ];
-    sEncCtrl.sCmn.Seed = psEnc->sCmn.frameCounter++ & 3;
-
-
-    /**************************************************************/
-    /* Setup Input Pointers, and insert frame in input buffer    */
-    /*************************************************************/
-    x_frame         = psEnc->x_buf + psEnc->sCmn.frame_length; /* start of frame to encode */
-    res_pitch_frame = res_pitch    + psEnc->sCmn.frame_length; /* start of pitch LPC residual frame */
-
-    /****************************/
-    /* Voice Activity Detection */
-    /****************************/
-    ret = SKP_Silk_VAD_GetSA_Q8( &psEnc->sCmn.sVAD, &psEnc->speech_activity_Q8, &SNR_dB_Q7, 
-                                 sEncCtrl.input_quality_bands_Q15, &sEncCtrl.input_tilt_Q15,
-                                 pIn,psEnc->sCmn.frame_length );
-
-    /*******************************************/
-    /* High-pass filtering of the input signal */
-    /*******************************************/
-#if HIGH_PASS_INPUT
-    /* Variable high-pass filter */
-    SKP_Silk_HP_variable_cutoff_FIX( psEnc, &sEncCtrl, pIn_HP, pIn );
-#else
-    SKP_memcpy( pIn_HP, pIn,psEnc->sCmn.frame_length * sizeof( SKP_int16 ) );
-#endif
-
-#if SWITCH_TRANSITION_FILTERING
-    /* Ensure smooth bandwidth transitions */
-    SKP_Silk_LP_variable_cutoff( &psEnc->sCmn.sLP, x_frame + psEnc->sCmn.la_shape, pIn_HP, psEnc->sCmn.frame_length );
-#else
-    SKP_memcpy( x_frame + psEnc->sCmn.la_shape, pIn_HP,psEnc->sCmn.frame_length * sizeof( SKP_int16 ) );
-#endif
-    
-    /*****************************************/
-    /* Find pitch lags, initial LPC analysis */
-    /*****************************************/
-    SKP_Silk_find_pitch_lags_FIX( psEnc, &sEncCtrl, res_pitch, x_frame );
-
-    /************************/
-    /* Noise shape analysis */
-    /************************/
-    SKP_Silk_noise_shape_analysis_FIX( psEnc, &sEncCtrl, res_pitch_frame, x_frame );    
-
-    /*****************************************/
-    /* Prefiltering for noise shaper         */
-    /*****************************************/
-    SKP_Silk_prefilter_FIX( psEnc, &sEncCtrl, xfw, x_frame );
-
-
-    /***************************************************/
-    /* Find linear prediction coefficients (LPC + LTP) */
-    /***************************************************/
-    SKP_Silk_find_pred_coefs_FIX( psEnc, &sEncCtrl, res_pitch );
-
-    /****************************************/
-    /* Process gains                        */
-    /****************************************/
-    SKP_Silk_process_gains_FIX( psEnc, &sEncCtrl );
- 
-    psEnc->sCmn.sigtype[         psEnc->sCmn.nFramesInPayloadBuf ] = sEncCtrl.sCmn.sigtype;
-    psEnc->sCmn.QuantOffsetType[ psEnc->sCmn.nFramesInPayloadBuf ] = sEncCtrl.sCmn.QuantOffsetType;
-
-    /****************************************/
-    /* Low Bitrate Redundant Encoding       */
-    /****************************************/
-    nBytesLBRR = MAX_ARITHM_BYTES;
-    SKP_Silk_LBRR_encode_FIX( psEnc, &sEncCtrl, LBRRpayload, &nBytesLBRR, xfw );
-
-    /*****************************************/
-    /* Noise shaping quantization            */
-    /*****************************************/
-    psEnc->NoiseShapingQuantizer( &psEnc->sCmn, &sEncCtrl.sCmn, &psEnc->sNSQ, xfw, 
-        &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf *psEnc->sCmn.frame_length ], sEncCtrl.sCmn.NLSFInterpCoef_Q2, 
-        sEncCtrl.PredCoef_Q12[ 0 ], sEncCtrl.LTPCoef_Q14, sEncCtrl.AR2_Q13, sEncCtrl.HarmShapeGain_Q14, 
-        sEncCtrl.Tilt_Q14, sEncCtrl.LF_shp_Q14, sEncCtrl.Gains_Q16, sEncCtrl.Lambda_Q10, 
-        sEncCtrl.LTP_scale_Q14 );
-
-    /**************************************************/
-    /* Convert speech activity into VAD and DTX flags */
-    /**************************************************/
-    if( psEnc->speech_activity_Q8 < SPEECH_ACTIVITY_DTX_THRES_Q8 ) {
-        psEnc->sCmn.vadFlag = NO_VOICE_ACTIVITY;
-        psEnc->sCmn.noSpeechCounter++;
-        if( psEnc->sCmn.noSpeechCounter > NO_SPEECH_FRAMES_BEFORE_DTX ) {
-            psEnc->sCmn.inDTX = 1;
-        }
-        if( psEnc->sCmn.noSpeechCounter > MAX_CONSECUTIVE_DTX ) {
-            psEnc->sCmn.noSpeechCounter = 0;
-            psEnc->sCmn.inDTX           = 0;
-        }
-    } else {
-        psEnc->sCmn.noSpeechCounter = 0;
-        psEnc->sCmn.inDTX           = 0;
-        psEnc->sCmn.vadFlag         = VOICE_ACTIVITY;
-    }
-
-    /****************************************/
-    /* Initialize arithmetic coder          */
-    /****************************************/
-    if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) {
-        SKP_Silk_range_enc_init( &psEnc->sCmn.sRC );
-        psEnc->sCmn.nBytesInPayloadBuf = 0;
-    }
-
-    /****************************************/
-    /* Encode Parameters                    */
-    /****************************************/
-    if( psEnc->sCmn.bitstream_v == BIT_STREAM_V4 ) {
-        SKP_Silk_encode_parameters_v4( &psEnc->sCmn, &sEncCtrl.sCmn, &psEnc->sCmn.sRC );
-        FrameTermination_CDF = SKP_Silk_FrameTermination_v4_CDF;
-    } else {
-        SKP_Silk_encode_parameters( &psEnc->sCmn, &sEncCtrl.sCmn, &psEnc->sCmn.sRC, 
-            &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf *psEnc->sCmn.frame_length ] );
-        FrameTermination_CDF = SKP_Silk_FrameTermination_CDF;
-    }
-
-    /****************************************/
-    /* Update Buffers and State             */
-    /****************************************/
-    /* Update Input buffer */
-    SKP_memmove( psEnc->x_buf, &psEnc->x_buf[ psEnc->sCmn.frame_length ], ( psEnc->sCmn.frame_length + psEnc->sCmn.la_shape ) * sizeof( SKP_int16 ) );
-    
-    /* parameters needed for next frame */
-    psEnc->sCmn.prev_sigtype            = sEncCtrl.sCmn.sigtype;
-    psEnc->sCmn.prevLag                 = sEncCtrl.sCmn.pitchL[ NB_SUBFR - 1];
-    psEnc->sCmn.first_frame_after_reset = 0;
-
-    if( psEnc->sCmn.sRC.error ) {
-        /* encoder returned error: clear payload buffer */
-        psEnc->sCmn.nFramesInPayloadBuf = 0;
-    } else {
-        psEnc->sCmn.nFramesInPayloadBuf++;
-    }
-
-    /****************************************/
-    /* finalize payload and copy to output  */
-    /****************************************/
-    if( psEnc->sCmn.nFramesInPayloadBuf * FRAME_LENGTH_MS >= psEnc->sCmn.PacketSize_ms ) {
-
-        LBRR_idx = ( psEnc->sCmn.oldest_LBRR_idx + 1 ) & LBRR_IDX_MASK;
-
-        /* Check if FEC information should be added */
-        frame_terminator = SKP_SILK_LAST_FRAME;
-        if( psEnc->sCmn.LBRR_buffer[ LBRR_idx ].usage == SKP_SILK_ADD_LBRR_TO_PLUS1 ) {
-            frame_terminator = SKP_SILK_LBRR_VER1;
-        }
-        if( psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].usage == SKP_SILK_ADD_LBRR_TO_PLUS2 ) {
-            frame_terminator = SKP_SILK_LBRR_VER2;
-            LBRR_idx = psEnc->sCmn.oldest_LBRR_idx;
-        }
-        /* Add the frame termination info to stream */
-        SKP_Silk_range_encoder( &psEnc->sCmn.sRC, frame_terminator, FrameTermination_CDF );
-
-        if( psEnc->sCmn.bitstream_v == BIT_STREAM_V4 ) {
-            /* Code excitation signal */
-            for( i = 0; i <psEnc->sCmn.nFramesInPayloadBuf; i++ ) {
-                SKP_Silk_encode_pulses( &psEnc->sCmn.sRC, psEnc->sCmn.sigtype[ i ],psEnc->sCmn.QuantOffsetType[ i ], 
-                    &psEnc->sCmn.q[ i * psEnc->sCmn.frame_length],psEnc->sCmn.frame_length );
-            }
-        }
-        /* payload length so far */
-        SKP_Silk_range_coder_get_length( &psEnc->sCmn.sRC, &nBytes );
-
-        /* check that there is enough space in external output buffer, and move data */
-        if( *pnBytesOut >= nBytes ) {
-            SKP_Silk_range_enc_wrap_up( &psEnc->sCmn.sRC );
-            SKP_memcpy( pCode, psEnc->sCmn.sRC.buffer, nBytes * sizeof( SKP_uint8 ) );
-            
-            if( frame_terminator > SKP_SILK_MORE_FRAMES && 
-                    *pnBytesOut >= nBytes + psEnc->sCmn.LBRR_buffer[ LBRR_idx ].nBytes ) {
-                /* Get old packet and add to payload. */
-                SKP_memcpy( &pCode[ nBytes ],
-                    psEnc->sCmn.LBRR_buffer[ LBRR_idx ].payload,
-                    psEnc->sCmn.LBRR_buffer[ LBRR_idx ].nBytes * sizeof( SKP_uint8 ) );
-                nBytes += psEnc->sCmn.LBRR_buffer[ LBRR_idx ].nBytes;
-            }
-                        
-            *pnBytesOut = nBytes;
-        
-            /* Update FEC buffer */
-            SKP_memcpy( psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].payload, LBRRpayload, 
-                nBytesLBRR * sizeof( SKP_uint8 ) );
-            psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].nBytes = nBytesLBRR;
-            /* This line tells describes how FEC should be used */
-            psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].usage = sEncCtrl.sCmn.LBRR_usage;
-            psEnc->sCmn.oldest_LBRR_idx = ( psEnc->sCmn.oldest_LBRR_idx + 1 ) & LBRR_IDX_MASK;
-
-            /* Reset number of frames in payload buffer */
-            psEnc->sCmn.nFramesInPayloadBuf = 0;
-        } else {
-            /* Not enough space: Payload will be discarded */
-            *pnBytesOut = 0;
-            nBytes      = 0;
-            psEnc->sCmn.nFramesInPayloadBuf = 0;
-            ret = SKP_SILK_ENC_PAYLOAD_BUF_TOO_SHORT;
-        }
-    } else {
-        /* no payload for you this time */
-        *pnBytesOut = 0;
-
-        /* Encode that more frames follows */
-        frame_terminator = SKP_SILK_MORE_FRAMES;
-        SKP_Silk_range_encoder( &psEnc->sCmn.sRC, frame_terminator, FrameTermination_CDF );
-
-        /* payload length so far */
-        SKP_Silk_range_coder_get_length( &psEnc->sCmn.sRC, &nBytes );
-        
-        if( psEnc->sCmn.bitstream_v == BIT_STREAM_V4 ) {
-            /* Take into account the q signal that isnt in the bitstream yet */
-            nBytes +=  SKP_Silk_pulses_to_bytes( &psEnc->sCmn, 
-                &psEnc->sCmn.q[ (psEnc->sCmn.nFramesInPayloadBuf - 1) * psEnc->sCmn.frame_length ] );
-        }
-    }
-
-    /* Check for arithmetic coder errors */
-    if( psEnc->sCmn.sRC.error ) {
-        ret = SKP_SILK_ENC_INTERNAL_ERROR;
-    }
-
-    /* simulate number of ms buffered in channel because of exceeding TargetRate */
-    SKP_assert(  ( 8 * 1000 * ( (SKP_int64)nBytes - (SKP_int64)psEnc->sCmn.nBytesInPayloadBuf ) ) == 
-        SKP_SAT32( 8 * 1000 * ( (SKP_int64)nBytes - (SKP_int64)psEnc->sCmn.nBytesInPayloadBuf ) ) );
-    SKP_assert( psEnc->sCmn.TargetRate_bps > 0 );
-    psEnc->BufferedInChannel_ms   += SKP_DIV32( 8 * 1000 * ( nBytes -psEnc->sCmn.nBytesInPayloadBuf ),psEnc->sCmn.TargetRate_bps );
-    psEnc->BufferedInChannel_ms   -= FRAME_LENGTH_MS;
-    psEnc->BufferedInChannel_ms    = SKP_LIMIT( psEnc->BufferedInChannel_ms, 0, 100 );
-    psEnc->sCmn.nBytesInPayloadBuf = nBytes;
-
-    if( psEnc->speech_activity_Q8 > WB_DETECT_ACTIVE_SPEECH_LEVEL_THRES_Q8 ) {
-        psEnc->sCmn.sSWBdetect.ActiveSpeech_ms = SKP_ADD_POS_SAT32( psEnc->sCmn.sSWBdetect.ActiveSpeech_ms, FRAME_LENGTH_MS ); 
-    }
-
-
-    return( ret );
-}
-
-/* Low BitRate Redundancy encoding functionality. Reuse all parameters but encode residual with lower bitrate */
-void SKP_Silk_LBRR_encode_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  Pointer to Silk encoder state           */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  Pointer to Silk encoder control struct  */
-    SKP_uint8                       *pCode,         /* O    Pointer to payload                      */
-    SKP_int16                       *pnBytesOut,    /* I/O  Pointer to number of payload bytes      */
-    SKP_int16                       xfw[]           /* I    Input signal                            */
-)
-{
-    SKP_int     i, TempGainsIndices[ NB_SUBFR ], frame_terminator;
-    SKP_int     nBytes, nFramesInPayloadBuf;
-    SKP_int32   TempGains_Q16[ NB_SUBFR ];
-    SKP_int     typeOffset, LTP_scaleIndex, Rate_only_parameters = 0;
-    /*******************************************/
-    /* Control use of inband LBRR              */
-    /*******************************************/
-    SKP_Silk_LBRR_ctrl_FIX( psEnc, psEncCtrl );
-
-    if( psEnc->sCmn.LBRR_enabled ) {
-        /* Save original Gains */
-        SKP_memcpy( TempGainsIndices, psEncCtrl->sCmn.GainsIndices, NB_SUBFR * sizeof( SKP_int   ) );
-        SKP_memcpy( TempGains_Q16,    psEncCtrl->Gains_Q16,    NB_SUBFR * sizeof( SKP_int32 ) );
-
-        typeOffset     = psEnc->sCmn.typeOffsetPrev; // Temp save as cannot be overwritten
-        LTP_scaleIndex = psEncCtrl->sCmn.LTP_scaleIndex;
-
-        /* Set max rate where quant signal is encoded */
-        if( psEnc->sCmn.fs_kHz == 8 ) {
-            Rate_only_parameters = 13500;
-        } else if( psEnc->sCmn.fs_kHz == 12 ) {
-            Rate_only_parameters = 15500;
-        } else if( psEnc->sCmn.fs_kHz == 16 ) {
-            Rate_only_parameters = 17500;
-        } else if( psEnc->sCmn.fs_kHz == 24 ) {
-            Rate_only_parameters = 19500;
-        } else {
-            SKP_assert( 0 );
-        }
-
-        if( psEnc->sCmn.Complexity > 0 && psEnc->sCmn.TargetRate_bps > Rate_only_parameters ) {
-            if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) {
-                /* First frame in packet copy Everything */
-                SKP_memcpy( &psEnc->sNSQ_LBRR, &psEnc->sNSQ, sizeof( SKP_Silk_nsq_state ) );
-            
-                psEnc->sCmn.LBRRprevLastGainIndex = psEnc->sShape.LastGainIndex;
-                /* Increase Gains to get target LBRR rate */
-                psEncCtrl->sCmn.GainsIndices[ 0 ] = psEncCtrl->sCmn.GainsIndices[ 0 ] + psEnc->sCmn.LBRR_GainIncreases;
-                psEncCtrl->sCmn.GainsIndices[ 0 ] = SKP_LIMIT( psEncCtrl->sCmn.GainsIndices[ 0 ], 0, N_LEVELS_QGAIN - 1 );
-            }
-            /* Decode to get Gains in sync with decoder         */
-            /* Overwrite unquantized gains with quantized gains */
-            SKP_Silk_gains_dequant( psEncCtrl->Gains_Q16, psEncCtrl->sCmn.GainsIndices, 
-                &psEnc->sCmn.LBRRprevLastGainIndex, psEnc->sCmn.nFramesInPayloadBuf );
-            /*****************************************/
-            /* Noise shaping quantization            */
-            /*****************************************/
-            psEnc->NoiseShapingQuantizer( &psEnc->sCmn, &psEncCtrl->sCmn,
-                &psEnc->sNSQ_LBRR, xfw, &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], 
-                psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEncCtrl->PredCoef_Q12[ 0 ], psEncCtrl->LTPCoef_Q14, 
-                psEncCtrl->AR2_Q13, psEncCtrl->HarmShapeGain_Q14, psEncCtrl->Tilt_Q14, psEncCtrl->LF_shp_Q14, 
-                psEncCtrl->Gains_Q16, psEncCtrl->Lambda_Q10, psEncCtrl->LTP_scale_Q14 );
-        } else {
-            SKP_memset( &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf *psEnc->sCmn.frame_length ], 0,
-                psEnc->sCmn.frame_length * sizeof( SKP_int ) );
-            psEncCtrl->sCmn.LTP_scaleIndex = 0;
-        }
-        /****************************************/
-        /* Initialize arithmetic coder          */
-        /****************************************/
-        if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) {
-            SKP_Silk_range_enc_init( &psEnc->sCmn.sRC_LBRR );
-            psEnc->sCmn.nBytesInPayloadBuf = 0;
-        }
-
-        /****************************************/
-        /* Encode Parameters                    */
-        /****************************************/
-        if( psEnc->sCmn.bitstream_v == BIT_STREAM_V4 ) {
-            SKP_Silk_encode_parameters_v4( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sCmn.sRC_LBRR );
-        } else {
-            SKP_Silk_encode_parameters( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sCmn.sRC_LBRR, 
-                &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length] );
-        }
-
-        if( psEnc->sCmn.sRC_LBRR.error ) {
-            /* encoder returned error: clear payload buffer */
-            nFramesInPayloadBuf = 0;
-        } else {
-            nFramesInPayloadBuf = psEnc->sCmn.nFramesInPayloadBuf + 1;
-        }
-
-        /****************************************/
-        /* finalize payload and copy to output  */
-        /****************************************/
-        if( SKP_SMULBB( nFramesInPayloadBuf, FRAME_LENGTH_MS ) >= psEnc->sCmn.PacketSize_ms ) {
-
-            /* Check if FEC information should be added */
-            frame_terminator = SKP_SILK_LAST_FRAME;
-
-            /* Add the frame termination info to stream */
-            SKP_Silk_range_encoder( &psEnc->sCmn.sRC_LBRR, frame_terminator, SKP_Silk_FrameTermination_CDF );
-            
-            if( psEnc->sCmn.bitstream_v == BIT_STREAM_V4 ) {
-                /*********************************************/
-                /* Encode quantization indices of excitation */
-                /*********************************************/
-                for( i = 0; i < nFramesInPayloadBuf; i++ ) {
-                    SKP_Silk_encode_pulses( &psEnc->sCmn.sRC_LBRR, psEnc->sCmn.sigtype[ i ], psEnc->sCmn.QuantOffsetType[ i ],
-                        &psEnc->sCmn.q_LBRR[ i * psEnc->sCmn.frame_length ], psEnc->sCmn.frame_length );
-                }
-            }
-            /* payload length so far */
-            SKP_Silk_range_coder_get_length( &psEnc->sCmn.sRC_LBRR, &nBytes );
-
-            /* check that there is enough space in external output buffer, and move data */
-            if( *pnBytesOut >= nBytes ) {
-                SKP_Silk_range_enc_wrap_up( &psEnc->sCmn.sRC_LBRR );
-                SKP_memcpy( pCode, psEnc->sCmn.sRC_LBRR.buffer, nBytes * sizeof( SKP_uint8 ) );
-                
-                *pnBytesOut = nBytes;
-            } else {
-                /* not enough space: payload will be discarded */
-                *pnBytesOut = 0;
-                SKP_assert( 0 );
-            }
-        } else {
-            /* no payload for you this time */
-            *pnBytesOut = 0;
-
-            /* Encode that more frames follows */
-            frame_terminator = SKP_SILK_MORE_FRAMES;
-            SKP_Silk_range_encoder( &psEnc->sCmn.sRC_LBRR, frame_terminator, SKP_Silk_FrameTermination_CDF );
-        }
-
-        /* Restore original Gains */
-        SKP_memcpy( psEncCtrl->sCmn.GainsIndices, TempGainsIndices, NB_SUBFR * sizeof( SKP_int   ) );
-        SKP_memcpy( psEncCtrl->Gains_Q16,  TempGains_Q16,    NB_SUBFR * sizeof( SKP_int32 ) );
-    
-        /* Restore LTP scale index and typeoffset */
-        psEncCtrl->sCmn.LTP_scaleIndex = LTP_scaleIndex;
-        psEnc->sCmn.typeOffsetPrev = typeOffset;
-    }
-}
--- a/src/SKP_Silk_encode_parameters.c
+++ /dev/null
@@ -1,167 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-/*******************************************/
-/* Encode parameters to create the payload */
-/*******************************************/
-void SKP_Silk_encode_parameters(
-    SKP_Silk_encoder_state          *psEncC,        /* I/O  Encoder state                   */
-    SKP_Silk_encoder_control        *psEncCtrlC,    /* I/O  Encoder control                 */
-    SKP_Silk_range_coder_state      *psRC,          /* I/O  Range encoder state             */
-    const SKP_int                   *q              /* I    Quantization indices            */
-)
-{
-    SKP_int   i, k, typeOffset;
-    const SKP_Silk_NLSF_CB_struct *psNLSF_CB;
-
-
-    /************************/
-    /* Encode sampling rate */
-    /************************/
-    /* only done for first frame in packet */
-    if( psEncC->nFramesInPayloadBuf == 0 ) {
-        
-        /* Initialize arithmetic coder */
-        SKP_Silk_range_enc_init( &psEncC->sRC );
-        psEncC->nBytesInPayloadBuf = 0;
-
-        /* get sampling rate index */
-        for( i = 0; i < 3; i++ ) {
-            if( SKP_Silk_SamplingRates_table[ i ] == psEncC->fs_kHz ) {
-                break;
-            }
-        }
-        SKP_Silk_range_encoder( psRC, i, SKP_Silk_SamplingRates_CDF );
-    }
-
-    /*******************************************/
-    /* Encode signal type and quantizer offset */
-    /*******************************************/
-    typeOffset = 2 * psEncCtrlC->sigtype + psEncCtrlC->QuantOffsetType;
-    if( psEncC->nFramesInPayloadBuf == 0 ) {
-        /* first frame in packet: independent coding */
-        SKP_Silk_range_encoder( psRC, typeOffset, SKP_Silk_type_offset_CDF );
-    } else {
-        /* condidtional coding */
-        SKP_Silk_range_encoder( psRC, typeOffset, SKP_Silk_type_offset_joint_CDF[ psEncC->typeOffsetPrev ] );
-    }
-    psEncC->typeOffsetPrev = typeOffset;
-
-    /****************/
-    /* Encode gains */
-    /****************/
-    /* first subframe */
-    if( psEncC->nFramesInPayloadBuf == 0 ) {
-        /* first frame in packet: independent coding */
-        SKP_Silk_range_encoder( psRC, psEncCtrlC->GainsIndices[ 0 ], SKP_Silk_gain_CDF[ psEncCtrlC->sigtype ] );
-    } else {
-        /* condidtional coding */
-        SKP_Silk_range_encoder( psRC, psEncCtrlC->GainsIndices[ 0 ], SKP_Silk_delta_gain_CDF );
-    }
-
-    /* remaining subframes */
-    for( i = 1; i < NB_SUBFR; i++ ) {
-        SKP_Silk_range_encoder( psRC, psEncCtrlC->GainsIndices[ i ], SKP_Silk_delta_gain_CDF );
-    }
-
-
-    /****************/
-    /* Encode NLSFs */
-    /****************/
-    /* Range encoding of the NLSF path */
-    psNLSF_CB = psEncC->psNLSF_CB[ psEncCtrlC->sigtype ];
-    SKP_Silk_range_encoder_multi( psRC, psEncCtrlC->NLSFIndices, psNLSF_CB->StartPtr, psNLSF_CB->nStages );
-
-    /* Encode NLSF interpolation factor */
-    SKP_assert( psEncC->useInterpolatedNLSFs == 1 || psEncCtrlC->NLSFInterpCoef_Q2 == ( 1 << 2 ) );
-    SKP_Silk_range_encoder( psRC, psEncCtrlC->NLSFInterpCoef_Q2, SKP_Silk_NLSF_interpolation_factor_CDF );
-
-
-    if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) {
-        /*********************/
-        /* Encode pitch lags */
-        /*********************/
-
-
-        /* lag index */
-        if( psEncC->fs_kHz == 8 ) {
-            SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_NB_CDF );
-        } else if( psEncC->fs_kHz == 12 ) {
-            SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_MB_CDF );
-        } else if( psEncC->fs_kHz == 16 ) {
-            SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_WB_CDF );
-        } else {
-            SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_SWB_CDF );
-        }
-
-
-        /* countour index */
-        if( psEncC->fs_kHz == 8 ) {
-            /* Less codevectors used in 8 khz mode */
-            SKP_Silk_range_encoder( psRC, psEncCtrlC->contourIndex, SKP_Silk_pitch_contour_NB_CDF );
-        } else {
-            /* Joint for 12, 16, 24 khz */
-            SKP_Silk_range_encoder( psRC, psEncCtrlC->contourIndex, SKP_Silk_pitch_contour_CDF );
-        }
-
-        /********************/
-        /* Encode LTP gains */
-        /********************/
-
-        /* PERIndex value */
-        SKP_Silk_range_encoder( psRC, psEncCtrlC->PERIndex, SKP_Silk_LTP_per_index_CDF );
-
-        /* Codebook Indices */
-        for( k = 0; k < NB_SUBFR; k++ ) {
-            SKP_Silk_range_encoder( psRC, psEncCtrlC->LTPIndex[ k ], SKP_Silk_LTP_gain_CDF_ptrs[ psEncCtrlC->PERIndex ] );
-        }
-
-        /**********************/
-        /* Encode LTP scaling */
-        /**********************/
-        SKP_Silk_range_encoder( psRC, psEncCtrlC->LTP_scaleIndex, SKP_Silk_LTPscale_CDF );
-    }
-
-
-    /***************/
-    /* Encode seed */
-    /***************/
-    SKP_Silk_range_encoder( psRC, psEncCtrlC->Seed, SKP_Silk_Seed_CDF );
-
-    /*********************************************/
-    /* Encode quantization indices of excitation */
-    /*********************************************/
-    SKP_Silk_encode_pulses( psRC, psEncCtrlC->sigtype, psEncCtrlC->QuantOffsetType, q, psEncC->frame_length );
-
-
-    /*********************************************/
-    /* Encode VAD flag                           */
-    /*********************************************/
-    SKP_Silk_range_encoder( psRC, psEncC->vadFlag, SKP_Silk_vadflag_CDF );
-}
--- a/src/SKP_Silk_encode_parameters_v4.c
+++ /dev/null
@@ -1,179 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-/*******************************************/
-/* Encode parameters to create the payload */
-/*******************************************/
-void SKP_Silk_encode_parameters_v4(
-    SKP_Silk_encoder_state          *psEncC,        /* I/O  Encoder state                   */
-    SKP_Silk_encoder_control        *psEncCtrlC,    /* I/O  Encoder control                 */
-    SKP_Silk_range_coder_state      *psRC           /* I/O  Range encoder state             */
-)
-{
-    SKP_int   i, k, typeOffset;
-    SKP_int   encode_absolute_lagIndex, delta_lagIndex;
-    const SKP_Silk_NLSF_CB_struct *psNLSF_CB;
-
-
-    /************************/
-    /* Encode sampling rate */
-    /************************/
-    /* only done for first frame in packet */
-    if( psEncC->nFramesInPayloadBuf == 0 ) {
-        
-        /* Initialize arithmetic coder */
-        SKP_Silk_range_enc_init( &psEncC->sRC );
-        psEncC->nBytesInPayloadBuf = 0;
-
-        /* get sampling rate index */
-        for( i = 0; i < 3; i++ ) {
-            if( SKP_Silk_SamplingRates_table[ i ] == psEncC->fs_kHz ) {
-                break;
-            }
-        }
-        SKP_Silk_range_encoder( psRC, i, SKP_Silk_SamplingRates_CDF );
-    }
-
-    /*********************************************/
-    /* Encode VAD flag                           */
-    /*********************************************/
-    SKP_Silk_range_encoder( psRC, psEncC->vadFlag, SKP_Silk_vadflag_CDF );
-
-    /*******************************************/
-    /* Encode signal type and quantizer offset */
-    /*******************************************/
-    typeOffset = 2 * psEncCtrlC->sigtype + psEncCtrlC->QuantOffsetType;
-    if( psEncC->nFramesInPayloadBuf == 0 ) {
-        /* first frame in packet: independent coding */
-        SKP_Silk_range_encoder( psRC, typeOffset, SKP_Silk_type_offset_CDF );
-    } else {
-        /* condidtional coding */
-        SKP_Silk_range_encoder( psRC, typeOffset, SKP_Silk_type_offset_joint_CDF[ psEncC->typeOffsetPrev ] );
-    }
-    psEncC->typeOffsetPrev = typeOffset;
-
-    /****************/
-    /* Encode gains */
-    /****************/
-    /* first subframe */
-    if( psEncC->nFramesInPayloadBuf == 0 ) {
-        /* first frame in packet: independent coding */
-        SKP_Silk_range_encoder( psRC, psEncCtrlC->GainsIndices[ 0 ], SKP_Silk_gain_CDF[ psEncCtrlC->sigtype ] );
-    } else {
-        /* condidtional coding */
-        SKP_Silk_range_encoder( psRC, psEncCtrlC->GainsIndices[ 0 ], SKP_Silk_delta_gain_CDF );
-    }
-
-    /* remaining subframes */
-    for( i = 1; i < NB_SUBFR; i++ ) {
-        SKP_Silk_range_encoder( psRC, psEncCtrlC->GainsIndices[ i ], SKP_Silk_delta_gain_CDF );
-    }
-
-
-    /****************/
-    /* Encode NLSFs */
-    /****************/
-    /* Range encoding of the NLSF path */
-    psNLSF_CB = psEncC->psNLSF_CB[ psEncCtrlC->sigtype ];
-    SKP_Silk_range_encoder_multi( psRC, psEncCtrlC->NLSFIndices, psNLSF_CB->StartPtr, psNLSF_CB->nStages );
-
-    /* Encode NLSF interpolation factor */
-    SKP_assert( psEncC->useInterpolatedNLSFs == 1 || psEncCtrlC->NLSFInterpCoef_Q2 == ( 1 << 2 ) );
-    SKP_Silk_range_encoder( psRC, psEncCtrlC->NLSFInterpCoef_Q2, SKP_Silk_NLSF_interpolation_factor_CDF );
-
-
-    if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) {
-        /*********************/
-        /* Encode pitch lags */
-        /*********************/
-
-
-        /* lag index */
-        encode_absolute_lagIndex = 1;
-        if( psEncC->nFramesInPayloadBuf > 0 && psEncC->prev_sigtype == SIG_TYPE_VOICED ) {
-            /* Delta Encoding */
-            delta_lagIndex = psEncCtrlC->lagIndex - psEncC->prev_lagIndex;
-            if( delta_lagIndex > MAX_DELTA_LAG ) {
-                delta_lagIndex = ( MAX_DELTA_LAG << 1 ) + 1;
-            } else if ( delta_lagIndex < -MAX_DELTA_LAG ) {
-                delta_lagIndex = ( MAX_DELTA_LAG << 1 ) + 1;
-            } else {
-                delta_lagIndex = delta_lagIndex + MAX_DELTA_LAG;
-                encode_absolute_lagIndex = 0; /* Only use delta */
-            }
-            SKP_Silk_range_encoder( psRC, delta_lagIndex, SKP_Silk_pitch_delta_CDF );
-        }
-        if( encode_absolute_lagIndex ) {
-            /* Absolute encoding */
-            if( psEncC->fs_kHz == 8 ) {
-                SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_NB_CDF );
-            } else if( psEncC->fs_kHz == 12 ) {
-                SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_MB_CDF );
-            } else if( psEncC->fs_kHz == 16 ) {
-                SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_WB_CDF );
-            } else {
-                SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_SWB_CDF );
-            }
-        }
-        psEncC->prev_lagIndex = psEncCtrlC->lagIndex;
-
-
-        /* countour index */
-        if( psEncC->fs_kHz == 8 ) {
-            /* Less codevectors used in 8 khz mode */
-            SKP_Silk_range_encoder( psRC, psEncCtrlC->contourIndex, SKP_Silk_pitch_contour_NB_CDF );
-        } else {
-            /* Joint for 12, 16, 24 khz */
-            SKP_Silk_range_encoder( psRC, psEncCtrlC->contourIndex, SKP_Silk_pitch_contour_CDF );
-        }
-
-        /********************/
-        /* Encode LTP gains */
-        /********************/
-
-        /* PERIndex value */
-        SKP_Silk_range_encoder( psRC, psEncCtrlC->PERIndex, SKP_Silk_LTP_per_index_CDF );
-
-        /* Codebook Indices */
-        for( k = 0; k < NB_SUBFR; k++ ) {
-            SKP_Silk_range_encoder( psRC, psEncCtrlC->LTPIndex[ k ], SKP_Silk_LTP_gain_CDF_ptrs[ psEncCtrlC->PERIndex ] );
-        }
-
-        /**********************/
-        /* Encode LTP scaling */
-        /**********************/
-        SKP_Silk_range_encoder( psRC, psEncCtrlC->LTP_scaleIndex, SKP_Silk_LTPscale_CDF );
-    }
-
-
-    /***************/
-    /* Encode seed */
-    /***************/
-    SKP_Silk_range_encoder( psRC, psEncCtrlC->Seed, SKP_Silk_Seed_CDF );
-}
--- a/src/SKP_Silk_encode_pulses.c
+++ /dev/null
@@ -1,195 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-/*********************************************/
-/* Encode quantization indices of excitation */
-/*********************************************/
-
-SKP_INLINE SKP_int combine_and_check(       /* return ok */
-    SKP_int         *pulses_comb,           /* O */
-    const SKP_int   *pulses_in,             /* I */
-    SKP_int         max_pulses,             /* I    max value for sum of pulses */
-    SKP_int         len                     /* I    number of output values */
-) 
-{
-    SKP_int k, sum;
-
-    for( k = 0; k < len; k++ ) {
-        sum = pulses_in[ 2 * k ] + pulses_in[ 2 * k + 1 ];
-        if( sum > max_pulses ) {
-            return 1;
-        }
-        pulses_comb[ k ] = sum;
-    }
-
-    return 0;
-}
-
-/* Encode quantization indices of excitation */
-void SKP_Silk_encode_pulses(
-    SKP_Silk_range_coder_state      *psRC,          /* I/O  Range coder state               */
-    const SKP_int                   sigtype,        /* I    Sigtype                         */
-    const SKP_int                   QuantOffsetType,/* I    QuantOffsetType                 */
-    const SKP_int                   q[],            /* I    quantization indices            */
-    const SKP_int                   frame_length    /* I    Frame length                    */
-)
-{
-    SKP_int   i, k, j, iter, bit, nLS, scale_down, RateLevelIndex = 0;
-    SKP_int32 abs_q, minSumBits_Q6, sumBits_Q6;
-    SKP_int   abs_pulses[ MAX_FRAME_LENGTH ];
-    SKP_int   sum_pulses[ MAX_NB_SHELL_BLOCKS ];
-	SKP_int   nRshifts[   MAX_NB_SHELL_BLOCKS ]; 
-    SKP_int   pulses_comb[ 8 ];
-    SKP_int   *abs_pulses_ptr;
-    const SKP_int *pulses_ptr;
-    const SKP_uint16 *cdf_ptr;
-    const SKP_int16 *nBits_ptr;
-
-    SKP_memset( pulses_comb, 0, 8 * sizeof( SKP_int ) ); // Fixing Valgrind reported problem
-
-    /****************************/
-    /* Prepare for shell coding */
-    /****************************/
-    /* Calculate number of shell blocks */
-    iter = frame_length / SHELL_CODEC_FRAME_LENGTH;
-    
-    /* Take the absolute value of the pulses */
-    for( i = 0; i < frame_length; i+=4 ) {
-        abs_pulses[i+0] = ( SKP_int )SKP_abs( q[ i + 0 ] );
-        abs_pulses[i+1] = ( SKP_int )SKP_abs( q[ i + 1 ] );
-        abs_pulses[i+2] = ( SKP_int )SKP_abs( q[ i + 2 ] );
-        abs_pulses[i+3] = ( SKP_int )SKP_abs( q[ i + 3 ] );
-    }
-
-    /* Calc sum pulses per shell code frame */
-    abs_pulses_ptr = abs_pulses;
-    for( i = 0; i < iter; i++ ) {
-        nRshifts[ i ] = 0;
-
-        while( 1 ) {
-            /* 1+1 -> 2 */
-            scale_down = combine_and_check( pulses_comb, abs_pulses_ptr, SKP_Silk_max_pulses_table[ 0 ], 8 );
-
-            /* 2+2 -> 4 */
-            scale_down += combine_and_check( pulses_comb, pulses_comb, SKP_Silk_max_pulses_table[ 1 ], 4 );
-
-            /* 4+4 -> 8 */
-            scale_down += combine_and_check( pulses_comb, pulses_comb, SKP_Silk_max_pulses_table[ 2 ], 2 );
-
-            /* 8+8 -> 16 */
-            sum_pulses[ i ] = pulses_comb[ 0 ] + pulses_comb[ 1 ];
-            if( sum_pulses[ i ] > SKP_Silk_max_pulses_table[ 3 ] ) {
-                scale_down++;
-            }
-
-            if( scale_down ) {
-                /* We need to down scale the quantization signal */
-                nRshifts[ i ]++;                
-                for( k = 0; k < SHELL_CODEC_FRAME_LENGTH; k++ ) {
-                    abs_pulses_ptr[ k ] = SKP_RSHIFT( abs_pulses_ptr[ k ], 1 );
-                }
-            } else {
-                /* Jump out of while(1) loop and go to next shell coding frame */
-                break;
-            }
-        }
-        abs_pulses_ptr += SHELL_CODEC_FRAME_LENGTH;
-    }
-
-    /**************/
-    /* Rate level */
-    /**************/
-    /* find rate level that leads to fewest bits for coding of pulses per block info */
-    minSumBits_Q6 = SKP_int32_MAX;
-    for( k = 0; k < N_RATE_LEVELS - 1; k++ ) {
-        nBits_ptr  = SKP_Silk_pulses_per_block_BITS_Q6[ k ];
-        sumBits_Q6 = SKP_Silk_rate_levels_BITS_Q6[sigtype][ k ];
-        for( i = 0; i < iter; i++ ) {
-            if( nRshifts[ i ] > 0 ) {
-                sumBits_Q6 += nBits_ptr[ MAX_PULSES + 1 ];
-            } else {
-                sumBits_Q6 += nBits_ptr[ sum_pulses[ i ] ];
-            }
-        }
-        if( sumBits_Q6 < minSumBits_Q6 ) {
-            minSumBits_Q6 = sumBits_Q6;
-            RateLevelIndex = k;
-        }
-    }
-    SKP_Silk_range_encoder( psRC, RateLevelIndex, SKP_Silk_rate_levels_CDF[ sigtype ] );
-
-    /***************************************************/
-    /* Sum-Weighted-Pulses Encoding                    */
-    /***************************************************/
-    cdf_ptr = SKP_Silk_pulses_per_block_CDF[ RateLevelIndex ];
-    for( i = 0; i < iter; i++ ) {
-        if( nRshifts[ i ] == 0 ) {
-            SKP_Silk_range_encoder( psRC, sum_pulses[ i ], cdf_ptr );
-        } else {
-            SKP_Silk_range_encoder( psRC, MAX_PULSES + 1, cdf_ptr );
-            for( k = 0; k < nRshifts[ i ] - 1; k++ ) {
-                SKP_Silk_range_encoder( psRC, MAX_PULSES + 1, SKP_Silk_pulses_per_block_CDF[ N_RATE_LEVELS - 1 ] );
-            }
-            SKP_Silk_range_encoder( psRC, sum_pulses[ i ], SKP_Silk_pulses_per_block_CDF[ N_RATE_LEVELS - 1 ] );
-        }
-    }
-
-    /******************/
-    /* Shell Encoding */
-    /******************/
-    for( i = 0; i < iter; i++ ) {
-        if( sum_pulses[ i ] > 0 ) {
-            SKP_Silk_shell_encoder( psRC, &abs_pulses[ i * SHELL_CODEC_FRAME_LENGTH ] );
-        }
-    }
-
-    /****************/
-    /* LSB Encoding */
-    /****************/
-    for( i = 0; i < iter; i++ ) {
-        if( nRshifts[ i ] > 0 ) {
-            pulses_ptr = &q[ i * SHELL_CODEC_FRAME_LENGTH ];
-            nLS = nRshifts[ i ] - 1;
-            for( k = 0; k < SHELL_CODEC_FRAME_LENGTH; k++ ) {
-                abs_q = SKP_abs( pulses_ptr[ k ] );
-                for( j = nLS; j > 0; j-- ) {
-                    bit = SKP_RSHIFT( abs_q, j ) & 1;
-                    SKP_Silk_range_encoder( psRC, bit, SKP_Silk_lsb_CDF );
-                }
-                bit = abs_q & 1;
-                SKP_Silk_range_encoder( psRC, bit, SKP_Silk_lsb_CDF );
-            }
-        }
-    }
-
-    /****************/
-    /* Encode signs */
-    /****************/
-    SKP_Silk_encode_signs( psRC, q, frame_length, sigtype, QuantOffsetType, RateLevelIndex );
-}
--- a/src/SKP_Silk_find_LPC_FIX.c
+++ /dev/null
@@ -1,147 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-/* Finds LPC vector from correlations, and converts to NLSF */
-void SKP_Silk_find_LPC_FIX(
-    SKP_int             NLSF_Q15[],             /* O    NLSFs                                                                       */
-    SKP_int             *interpIndex,           /* O    NLSF interpolation index, only used for NLSF interpolation                  */
-    const SKP_int       prev_NLSFq_Q15[],       /* I    previous NLSFs, only used for NLSF interpolation                            */
-    const SKP_int       useInterpolatedNLSFs,   /* I    Flag                                                                        */
-    const SKP_int       LPC_order,              /* I    LPC order                                                                   */
-    const SKP_int16     x[],                    /* I    Input signal                                                                */
-    const SKP_int       subfr_length            /* I    Input signal subframe length including preceeding samples                   */
-)
-{
-    SKP_int     k;
-    SKP_int32   a_Q16[ MAX_LPC_ORDER ];
-
-    SKP_int     isInterpLower, shift;
-    SKP_int16   S[ MAX_LPC_ORDER ];
-    SKP_int32   res_nrg0, res_nrg1;
-    SKP_int     rshift0, rshift1; 
-
-    /* Used only for LSF interpolation */
-    SKP_int32   a_tmp_Q16[ MAX_LPC_ORDER ], res_nrg_interp, res_nrg, res_tmp_nrg, res_nrg_2nd;
-    SKP_int     res_nrg_interp_Q, res_nrg_Q, res_tmp_nrg_Q, res_nrg_2nd_Q;
-    SKP_int16   a_tmp_Q12[ MAX_LPC_ORDER ];
-    SKP_int     NLSF0_Q15[ MAX_LPC_ORDER ];
-    SKP_int16   LPC_res[ ( MAX_FRAME_LENGTH + NB_SUBFR * MAX_LPC_ORDER ) / 2 ];
-
-    /* Default: no interpolation */
-    *interpIndex = 4;
-
-    /* Burg AR analysis for the full frame */
-    SKP_Silk_burg_modified( &res_nrg, &res_nrg_Q, a_Q16, x, subfr_length, NB_SUBFR, FIND_LPC_COND_FAC_Q32, LPC_order );
-
-    if( useInterpolatedNLSFs == 1 ) {
-
-        /* Optimal solution for last 10 ms */
-        SKP_Silk_burg_modified( &res_tmp_nrg, &res_tmp_nrg_Q, a_tmp_Q16, x + ( NB_SUBFR >> 1 ) * subfr_length, 
-            subfr_length, ( NB_SUBFR >> 1 ), FIND_LPC_COND_FAC_Q32, LPC_order );
-
-        /* subtract residual energy here, as that's easier than adding it to the    */
-        /* residual energy of the first 10 ms in each iteration of the search below */
-        shift = res_tmp_nrg_Q - res_nrg_Q;
-        if( shift >= 0 ) {
-            if( shift < 32 ) { 
-                res_nrg = res_nrg - SKP_RSHIFT( res_tmp_nrg, shift );
-            }
-        } else {
-            SKP_assert( shift > -32 ); 
-            res_nrg   = SKP_RSHIFT( res_nrg, -shift ) - res_tmp_nrg;
-            res_nrg_Q = res_tmp_nrg_Q; 
-        }
-        
-        /* Convert to NLSFs */
-        SKP_Silk_A2NLSF( NLSF_Q15, a_tmp_Q16, LPC_order );
-
-        /* Search over interpolation indices to find the one with lowest residual energy */
-        res_nrg_2nd = SKP_int32_MAX;
-        for( k = 3; k >= 0; k-- ) {
-            /* Interpolate NLSFs for first half */
-            SKP_Silk_interpolate( NLSF0_Q15, prev_NLSFq_Q15, NLSF_Q15, k, LPC_order );
-
-            /* Convert to LPC for residual energy evaluation */
-            SKP_Silk_NLSF2A_stable( a_tmp_Q12, NLSF0_Q15, LPC_order );
-
-            /* Calculate residual energy with NLSF interpolation */
-            SKP_memset( S, 0, LPC_order * sizeof( SKP_int16 ) );
-            SKP_Silk_LPC_analysis_filter( x, a_tmp_Q12, S, LPC_res, 2 * subfr_length, LPC_order );
-
-            SKP_Silk_sum_sqr_shift( &res_nrg0, &rshift0, LPC_res + LPC_order,                subfr_length - LPC_order );
-            SKP_Silk_sum_sqr_shift( &res_nrg1, &rshift1, LPC_res + LPC_order + subfr_length, subfr_length - LPC_order );
-
-            /* Add subframe energies from first half frame */
-            shift = rshift0 - rshift1;
-            if( shift >= 0 ) {
-                res_nrg1         = SKP_RSHIFT( res_nrg1, shift );
-                res_nrg_interp_Q = -rshift0;
-            } else {
-                res_nrg0         = SKP_RSHIFT( res_nrg0, -shift );
-                res_nrg_interp_Q = -rshift1;
-            }
-            res_nrg_interp = SKP_ADD32( res_nrg0, res_nrg1 );
-
-            /* Compare with first half energy without NLSF interpolation, or best interpolated value so far */
-            shift = res_nrg_interp_Q - res_nrg_Q;
-            if( shift >= 0 ) {
-                if( SKP_RSHIFT( res_nrg_interp, shift ) < res_nrg ) {
-                    isInterpLower = SKP_TRUE;
-                } else {
-                    isInterpLower = SKP_FALSE;
-                }
-            } else {
-                if( -shift < 32 ) { 
-                    if( res_nrg_interp < SKP_RSHIFT( res_nrg, -shift ) ) {
-                        isInterpLower = SKP_TRUE;
-                    } else {
-                        isInterpLower = SKP_FALSE;
-                    }
-                } else {
-                    isInterpLower = SKP_FALSE;
-                }
-            }
-
-            /* Determine whether current interpolated NLSFs are best so far */
-            if( isInterpLower == SKP_TRUE ) {
-                /* Interpolation has lower residual energy */
-                res_nrg   = res_nrg_interp;
-                res_nrg_Q = res_nrg_interp_Q;
-                *interpIndex = k;
-            }
-            res_nrg_2nd   = res_nrg_interp;
-            res_nrg_2nd_Q = res_nrg_interp_Q;
-        }
-    }
-
-    if( *interpIndex == 4 ) {
-        /* NLSF interpolation is currently inactive, calculate NLSFs from full frame AR coefficients */
-        SKP_Silk_A2NLSF( NLSF_Q15, a_Q16, LPC_order );
-    }
-}
--- a/src/SKP_Silk_find_LTP_FIX.c
+++ /dev/null
@@ -1,234 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-void SKP_Silk_fit_LTP(
-    SKP_int32 LTP_coefs_Q16[ LTP_ORDER ],
-    SKP_int16 LTP_coefs_Q14[ LTP_ORDER ]
-);
-
-void SKP_Silk_find_LTP_FIX(
-    SKP_int16           b_Q14[ NB_SUBFR * LTP_ORDER ],              /* O    LTP coefs                                                   */
-    SKP_int32           WLTP[ NB_SUBFR * LTP_ORDER * LTP_ORDER ],   /* O    Weight for LTP quantization                                 */
-    SKP_int             *LTPredCodGain_Q7,                          /* O    LTP coding gain                                             */
-    const SKP_int16     r_first[],                                  /* I    residual signal after LPC signal + state for first 10 ms    */
-    const SKP_int16     r_last[],                                   /* I    residual signal after LPC signal + state for last 10 ms     */
-    const SKP_int       lag[ NB_SUBFR ],                            /* I    LTP lags                                                    */
-    const SKP_int32     Wght_Q15[ NB_SUBFR ],                       /* I    weights                                                     */
-    const SKP_int       subfr_length,                               /* I    subframe length                                             */
-    const SKP_int       mem_offset,                                 /* I    number of samples in LTP memory                             */
-    SKP_int             corr_rshifts[ NB_SUBFR ]                    /* O    right shifts applied to correlations                        */
-)
-{
-    SKP_int   i, k, lshift;
-    const SKP_int16 *r_ptr, *lag_ptr;
-    SKP_int16 *b_Q14_ptr;
-
-    SKP_int32 regu;
-    SKP_int32 *WLTP_ptr;
-    SKP_int32 b_Q16[ LTP_ORDER ], delta_b_Q14[ LTP_ORDER ], d_Q14[ NB_SUBFR ], nrg[ NB_SUBFR ], g_Q26;
-    SKP_int32 w[ NB_SUBFR ], WLTP_max, max_abs_d_Q14, max_w_bits;
-
-    SKP_int32 temp32, denom32;
-    SKP_int   extra_shifts;
-    SKP_int   rr_shifts, maxRshifts, maxRshifts_wxtra, LZs;
-    SKP_int32 LPC_res_nrg, LPC_LTP_res_nrg, div_Q16;
-    SKP_int32 Rr[ LTP_ORDER ], rr[ NB_SUBFR ];
-    SKP_int32 wd, m_Q12;
-    
-    b_Q14_ptr = b_Q14;
-    WLTP_ptr  = WLTP;
-    r_ptr     = &r_first[ mem_offset ];
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        if( k == ( NB_SUBFR >> 1 ) ) { /* shift residual for last 10 ms */
-            r_ptr = &r_last[ mem_offset ];
-        }
-        lag_ptr = r_ptr - ( lag[ k ] + LTP_ORDER / 2 );
-
-        SKP_Silk_sum_sqr_shift( &rr[ k ], &rr_shifts, r_ptr, subfr_length ); /* rr[ k ] in Q( -rr_shifts ) */
-        /* Assure headroom */
-        LZs = SKP_Silk_CLZ32( rr[k] );
-        if( LZs < LTP_CORRS_HEAD_ROOM ) {
-            rr[ k ] = SKP_RSHIFT_ROUND( rr[ k ], LTP_CORRS_HEAD_ROOM - LZs );
-            rr_shifts += (LTP_CORRS_HEAD_ROOM - LZs);
-        }
-        corr_rshifts[ k ] = rr_shifts;
-        SKP_Silk_corrMatrix_FIX( lag_ptr, subfr_length, LTP_ORDER, WLTP_ptr, &corr_rshifts[ k ] );     /* WLTP_fix_ptr in Q( -corr_rshifts[ k ] ) */
-        /* The correlation vector always have lower max abs value than rr and/or RR so head room is assured */
-        SKP_Silk_corrVector_FIX( lag_ptr, r_ptr, subfr_length, LTP_ORDER, Rr, corr_rshifts[ k ] ); /* Rr_fix_ptr   in Q( -corr_rshifts[ k ] ) */
-        if( corr_rshifts[ k ] > rr_shifts ) {
-            rr[ k ] = SKP_RSHIFT( rr[ k ], corr_rshifts[ k ] - rr_shifts ); /* rr[ k ] in Q( -corr_rshifts[ k ] ) */
-        }
-        SKP_assert( rr[ k ] >= 0 );
-
-        regu = SKP_SMULWB( rr[ k ] + 1, LTP_DAMPING_Q16 );
-        SKP_Silk_regularize_correlations_FIX( WLTP_ptr, &rr[k], regu, LTP_ORDER );
-
-        SKP_Silk_solve_LDL_FIX( WLTP_ptr, LTP_ORDER, Rr, b_Q16 ); /* WLTP_fix_ptr and Rr_fix_ptr both in Q(-corr_rshifts[k]) */
-
-        /* Limit and store in Q14 */
-        SKP_Silk_fit_LTP( b_Q16, b_Q14_ptr );
-
-        /* Calculate residual energy */
-        nrg[ k ] = SKP_Silk_residual_energy16_covar_FIX( b_Q14_ptr, WLTP_ptr, Rr, rr[ k ], LTP_ORDER, 14 ); /* nrg_fix in Q( -corr_rshifts[ k ] ) */
-
-        /* temp = Wght[ k ] / ( nrg[ k ] * Wght[ k ] + 0.01f * subfr_length ); */
-        extra_shifts = SKP_min_int( corr_rshifts[ k ], LTP_CORRS_HEAD_ROOM );
-        denom32 = SKP_LSHIFT_SAT32( SKP_SMULWB( nrg[ k ], Wght_Q15[ k ] ), 1 + extra_shifts ) +  /* Q( -corr_rshifts[ k ] + extra_shifts ) */
-            SKP_RSHIFT( SKP_SMULWB( subfr_length, 655 ), corr_rshifts[ k ] - extra_shifts );     /* Q( -corr_rshifts[ k ] + extra_shifts ) */
-        denom32 = SKP_max( denom32, 1 );
-        SKP_assert( ((SKP_int64)Wght_Q15[ k ] << 16 ) < SKP_int32_MAX ); /* Wght always < 0.5 in Q0 */
-        temp32 = SKP_DIV32( SKP_LSHIFT( ( SKP_int32 )Wght_Q15[ k ], 16 ), denom32 );  /* Q( 15 + 16 + corr_rshifts[k] - extra_shifts ) */
-        temp32 = SKP_RSHIFT( temp32, 31 + corr_rshifts[ k ] - extra_shifts - 26 );  /* Q26 */
-        
-        /* Limit temp such that the below scaling never wraps around */
-        WLTP_max = 0;
-        for( i = 0; i < LTP_ORDER * LTP_ORDER; i++ ) {
-            WLTP_max = SKP_max( WLTP_ptr[ i ], WLTP_max );
-        }
-        lshift = SKP_Silk_CLZ32( WLTP_max ) - 1 - 3; /* keep 3 bits free for vq_nearest_neighbor_fix */
-        SKP_assert( 26 - 18 + lshift >= 0 );
-        if( 26 - 18 + lshift < 31 ) {
-            temp32 = SKP_min_32( temp32, SKP_LSHIFT( ( SKP_int32 )1, 26 - 18 + lshift ) );
-        }
-
-        SKP_Silk_scale_vector32_Q26_lshift_18( WLTP_ptr, temp32, LTP_ORDER * LTP_ORDER ); /* WLTP_ptr in Q( 18 - corr_rshifts[ k ] ) */
-        
-        w[ k ] = matrix_ptr( WLTP_ptr, ( LTP_ORDER >> 1 ), ( LTP_ORDER >> 1 ), LTP_ORDER ); /* w in Q( 18 - corr_rshifts[ k ] ) */
-        SKP_assert( w[k] >= 0 );
-
-        r_ptr     += subfr_length;
-        b_Q14_ptr += LTP_ORDER;
-        WLTP_ptr  += LTP_ORDER * LTP_ORDER;
-    }
-
-    maxRshifts = 0;
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        maxRshifts = SKP_max_int( corr_rshifts[ k ], maxRshifts );
-    }
-
-    /* compute LTP coding gain */
-    if( LTPredCodGain_Q7 != NULL ) {
-        LPC_LTP_res_nrg = 0;
-        LPC_res_nrg     = 0;
-        SKP_assert( LTP_CORRS_HEAD_ROOM >= 2 ); /* Check that no overflow will happen when adding */
-        for( k = 0; k < NB_SUBFR; k++ ) {
-            LPC_res_nrg     = SKP_ADD32( LPC_res_nrg,     SKP_RSHIFT( SKP_ADD32( SKP_SMULWB(  rr[ k ], Wght_Q15[ k ] ), 1 ), 1 + ( maxRshifts - corr_rshifts[ k ] ) ) ); /*  Q( -maxRshifts ) */
-            LPC_LTP_res_nrg = SKP_ADD32( LPC_LTP_res_nrg, SKP_RSHIFT( SKP_ADD32( SKP_SMULWB( nrg[ k ], Wght_Q15[ k ] ), 1 ), 1 + ( maxRshifts - corr_rshifts[ k ] ) ) ); /*  Q( -maxRshifts ) */
-        }
-        LPC_LTP_res_nrg = SKP_max( LPC_LTP_res_nrg, 1 ); /* avoid division by zero */
-
-        div_Q16 = SKP_DIV32_varQ( LPC_res_nrg, LPC_LTP_res_nrg, 16 );
-        *LTPredCodGain_Q7 = ( SKP_int )SKP_SMULBB( 3, SKP_Silk_lin2log( div_Q16 ) - ( 16 << 7 ) );
-
-        SKP_assert( *LTPredCodGain_Q7 == ( SKP_int )SKP_SAT16( SKP_MUL( 3, SKP_Silk_lin2log( div_Q16 ) - ( 16 << 7 ) ) ) );
-    }
-
-    /* smoothing */
-    /* d = sum( B, 1 ); */
-    b_Q14_ptr = b_Q14;
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        d_Q14[ k ] = 0;
-        for( i = 0; i < LTP_ORDER; i++ ) {
-            d_Q14[ k ] += b_Q14_ptr[ i ];
-        }
-        b_Q14_ptr += LTP_ORDER;
-    }
-
-    /* m = ( w * d' ) / ( sum( w ) + 1e-3 ); */
-        
-    /* Find maximum absolute value of d_Q14 and the bits used by w in Q0 */
-    max_abs_d_Q14 = 0;
-    max_w_bits    = 0;
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        max_abs_d_Q14 = SKP_max_32( max_abs_d_Q14, SKP_abs( d_Q14[ k ] ) );
-        /* w[ k ] is in Q( 18 - corr_rshifts[ k ] ) */
-        /* Find bits needed in Q( 18 - maxRshifts ) */
-        max_w_bits = SKP_max_32( max_w_bits, 32 - SKP_Silk_CLZ32( w[ k ] ) + corr_rshifts[ k ] - maxRshifts ); 
-    }
-
-    /* max_abs_d_Q14 = (5 << 15); worst case, i.e. LTP_ORDER * -SKP_int16_MIN */
-    SKP_assert( max_abs_d_Q14 <= ( 5 << 15 ) );
-
-    /* How many bits is needed for w*d' in Q( 18 - maxRshifts ) in the worst case, of all d_Q14's being equal to max_abs_d_Q14 */
-    extra_shifts = max_w_bits + 32 - SKP_Silk_CLZ32( max_abs_d_Q14 ) - 14;
-    
-    /* Subtract what we got available; bits in output var plus maxRshifts */
-    extra_shifts -= ( 32 - 1 - 2 + maxRshifts ); /* Keep sign bit free as well as 2 bits for accumulation */
-    extra_shifts = SKP_max_int( extra_shifts, 0 );
-
-    maxRshifts_wxtra = maxRshifts + extra_shifts;
-    
-    temp32 = SKP_RSHIFT( 262, maxRshifts + extra_shifts ) + 1; /* 1e-3f in Q( 18 - (maxRshifts + extra_shifts) ) */
-    wd = 0;
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        /* w has at least 2 bits of headroom so no overflow should happen */
-        temp32 = SKP_ADD32( temp32,                     SKP_RSHIFT( w[ k ], maxRshifts_wxtra - corr_rshifts[ k ] ) );                    /* Q( 18 - maxRshifts_wxtra ) */
-        wd     = SKP_ADD32( wd, SKP_LSHIFT( SKP_SMULWW( SKP_RSHIFT( w[ k ], maxRshifts_wxtra - corr_rshifts[ k ] ), d_Q14[ k ] ), 2 ) ); /* Q( 18 - maxRshifts_wxtra ) */
-    }
-    m_Q12 = SKP_DIV32_varQ( wd, temp32, 12 );
-
-    b_Q14_ptr = b_Q14;
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        /* w_fix[ k ] from Q( 18 - corr_rshifts[ k ] ) to Q( 16 ) */
-        if( 2 - corr_rshifts[k] > 0 ) {
-            temp32 = SKP_RSHIFT( w[ k ], 2 - corr_rshifts[ k ] );
-        } else {
-            temp32 = SKP_LSHIFT_SAT32( w[ k ], corr_rshifts[ k ] - 2 );
-        }
-
-        g_Q26 = SKP_MUL( 
-            SKP_DIV32( 
-                LTP_SMOOTHING_Q26, 
-                SKP_RSHIFT( LTP_SMOOTHING_Q26, 10 ) + temp32 ),                                       /* Q10 */ 
-            SKP_LSHIFT_SAT32( SKP_SUB_SAT32( ( SKP_int32 )m_Q12, SKP_RSHIFT( d_Q14[ k ], 2 ) ), 4 ) );  /* Q16 */
-
-        temp32 = 0;
-        for( i = 0; i < LTP_ORDER; i++ ) {
-            delta_b_Q14[ i ] = SKP_max_16( b_Q14_ptr[ i ], 1638 );  /* 1638_Q14 = 0.1_Q0 */
-            temp32 += delta_b_Q14[ i ];                          /* Q14 */
-        }
-        temp32 = SKP_DIV32( g_Q26, temp32 ); /* Q14->Q12 */
-        for( i = 0; i < LTP_ORDER; i++ ) {
-            b_Q14_ptr[ i ] = SKP_LIMIT( ( SKP_int32 )b_Q14_ptr[ i ] + SKP_SMULWB( SKP_LSHIFT_SAT32( temp32, 4 ), delta_b_Q14[ i ] ), -16000, 28000 );
-        }
-        b_Q14_ptr += LTP_ORDER;
-    }
-}
-
-void SKP_Silk_fit_LTP(
-    SKP_int32 LTP_coefs_Q16[ LTP_ORDER ],
-    SKP_int16 LTP_coefs_Q14[ LTP_ORDER ]
-)
-{
-    SKP_int i;
-
-    for( i = 0; i < LTP_ORDER; i++ ) {
-        LTP_coefs_Q14[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( LTP_coefs_Q16[ i ], 2 ) );
-    }
-}
--- a/src/SKP_Silk_find_pitch_lags_FIX.c
+++ /dev/null
@@ -1,122 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-/* Find pitch lags */
-void SKP_Silk_find_pitch_lags_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  encoder state                               */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  encoder control                             */
-    SKP_int16                       res[],          /* O    residual                                    */
-    const SKP_int16                 x[]             /* I    Speech signal                               */
-)
-{
-    SKP_Silk_predict_state_FIX *psPredSt = &psEnc->sPred;
-    SKP_int   buf_len, i;
-    SKP_int32 scale;
-    SKP_int32 thrhld_Q15;
-    const SKP_int16 *x_buf, *x_buf_ptr;
-    SKP_int16 Wsig[      FIND_PITCH_LPC_WIN_MAX ], *Wsig_ptr;
-    SKP_int32 auto_corr[ FIND_PITCH_LPC_ORDER_MAX + 1 ];
-    SKP_int16 rc_Q15[    FIND_PITCH_LPC_ORDER_MAX ];
-    SKP_int32 A_Q24[     FIND_PITCH_LPC_ORDER_MAX ];
-    SKP_int32 FiltState[ FIND_PITCH_LPC_ORDER_MAX ];
-    SKP_int16 A_Q12[     FIND_PITCH_LPC_ORDER_MAX ];
-
-    /******************************************/
-    /* Setup buffer lengths etc based of Fs.  */
-    /******************************************/
-    buf_len = SKP_ADD_LSHIFT( psEnc->sCmn.la_pitch, psEnc->sCmn.frame_length, 1 );
-
-    /* Safty check */
-    SKP_assert( buf_len >= psPredSt->pitch_LPC_win_length );
-
-    x_buf = x - psEnc->sCmn.frame_length;
-
-    /*************************************/
-    /* Estimate LPC AR coeficients */
-    /*************************************/
-    
-    /* Calculate windowed signal */
-    
-    /* First LA_LTP samples */
-    x_buf_ptr = x_buf + buf_len - psPredSt->pitch_LPC_win_length;
-    Wsig_ptr  = Wsig;
-    SKP_Silk_apply_sine_window( Wsig_ptr, x_buf_ptr, 1, psEnc->sCmn.la_pitch );
-
-    /* Middle un - windowed samples */
-    Wsig_ptr  += psEnc->sCmn.la_pitch;
-    x_buf_ptr += psEnc->sCmn.la_pitch;
-    SKP_memcpy( Wsig_ptr, x_buf_ptr, ( psPredSt->pitch_LPC_win_length - SKP_LSHIFT( psEnc->sCmn.la_pitch, 1 ) ) * sizeof( SKP_int16 ) );
-
-    /* Last LA_LTP samples */
-    Wsig_ptr  += psPredSt->pitch_LPC_win_length - SKP_LSHIFT( psEnc->sCmn.la_pitch, 1 );
-    x_buf_ptr += psPredSt->pitch_LPC_win_length - SKP_LSHIFT( psEnc->sCmn.la_pitch, 1 );
-    SKP_Silk_apply_sine_window( Wsig_ptr, x_buf_ptr, 2, psEnc->sCmn.la_pitch );
-
-    /* Calculate autocorrelation sequence */
-    SKP_Silk_autocorr( auto_corr, &scale, Wsig, psPredSt->pitch_LPC_win_length, psEnc->sCmn.pitchEstimationLPCOrder + 1 ); 
-        
-    /* add white noise, as fraction of energy */
-    auto_corr[ 0 ] = SKP_SMLAWB( auto_corr[ 0 ], auto_corr[ 0 ], FIND_PITCH_WHITE_NOISE_FRACTION_Q16 );
-
-    /* calculate the reflection coefficients using schur */
-    SKP_Silk_schur( rc_Q15, auto_corr, psEnc->sCmn.pitchEstimationLPCOrder );
-
-    /* convert reflection coefficients to prediction coefficients */
-    SKP_Silk_k2a( A_Q24, rc_Q15, psEnc->sCmn.pitchEstimationLPCOrder );
-    
-    /* Convert From 32 bit Q24 to 16 bit Q12 coefs */
-    for( i = 0; i < psEnc->sCmn.pitchEstimationLPCOrder; i++ ) {
-        A_Q12[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT( A_Q24[ i ], 12 ) );
-    }
-
-    /* Do BWE */
-    SKP_Silk_bwexpander( A_Q12, psEnc->sCmn.pitchEstimationLPCOrder, FIND_PITCH_BANDWITH_EXPANSION_Q16 );
-    
-    /*****************************************/
-    /* LPC analysis filtering                */
-    /*****************************************/
-    SKP_memset( FiltState, 0, psEnc->sCmn.pitchEstimationLPCOrder * sizeof( SKP_int16 ) );
-    SKP_Silk_MA_Prediction( x_buf, A_Q12, FiltState, res, buf_len, psEnc->sCmn.pitchEstimationLPCOrder );
-    SKP_memset( res, 0, psEnc->sCmn.pitchEstimationLPCOrder * sizeof( SKP_int16 ) );
-
-    /* Threshold for pitch estimator */
-    thrhld_Q15 = ( 1 << 14 ); // 0.5f in Q15
-    thrhld_Q15 = SKP_SMLABB( thrhld_Q15, -131, psEnc->sCmn.pitchEstimationLPCOrder );
-    thrhld_Q15 = SKP_SMLABB( thrhld_Q15,  -13, ( SKP_int16 )SKP_Silk_SQRT_APPROX( SKP_LSHIFT( ( SKP_int32 )psEnc->speech_activity_Q8, 8 ) ) );
-    thrhld_Q15 = SKP_SMLABB( thrhld_Q15, 4587, psEnc->sCmn.prev_sigtype );
-    thrhld_Q15 = SKP_MLA(    thrhld_Q15,  -31, SKP_RSHIFT( psEncCtrl->input_tilt_Q15, 8 ) );
-    thrhld_Q15 = SKP_SAT16(  thrhld_Q15 );
-
-    /*****************************************/
-    /* Call Pitch estimator */
-    /*****************************************/
-    psEncCtrl->sCmn.sigtype = SKP_Silk_pitch_analysis_core( res, psEncCtrl->sCmn.pitchL, &psEncCtrl->sCmn.lagIndex, 
-        &psEncCtrl->sCmn.contourIndex, &psEnc->LTPCorr_Q15, psEnc->sCmn.prevLag, psEnc->pitchEstimationThreshold_Q16, 
-        ( SKP_int16 )thrhld_Q15, psEnc->sCmn.fs_kHz, psEnc->sCmn.pitchEstimationComplexity );
-}
--- a/src/SKP_Silk_find_pred_coefs_FIX.c
+++ /dev/null
@@ -1,148 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-
-#define VARQ        1 // EXPERIMENTAL
-#define Qx          0 // EXPERIMENTAL
-
-void SKP_Silk_find_pred_coefs_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  encoder state                               */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  encoder control                             */
-    const SKP_int16                 res_pitch[]     /* I    Residual from pitch analysis                */
-)
-{
-    SKP_int         i;
-    SKP_int32       WLTP[ NB_SUBFR * LTP_ORDER * LTP_ORDER ];
-    SKP_int32       invGains_Q16[ NB_SUBFR ], local_gains_Qx[ NB_SUBFR ], Wght_Q15[ NB_SUBFR ];
-    SKP_int         NLSF_Q15[ MAX_LPC_ORDER ];
-    const SKP_int16 *x_ptr;
-    SKP_int16       *x_pre_ptr, LPC_in_pre[ NB_SUBFR * MAX_LPC_ORDER + MAX_FRAME_LENGTH ];
-
-    SKP_int32       tmp, min_gain_Q16;
-#if !VARQ
-    SKP_int         LZ;
-#endif
-    SKP_int         LTP_corrs_rshift[ NB_SUBFR ];
-
-
-    /* weighting for weighted least squares */
-    min_gain_Q16 = SKP_int32_MAX >> 6;
-    for( i = 0; i < NB_SUBFR; i++ ) {
-        min_gain_Q16 = SKP_min( min_gain_Q16, psEncCtrl->Gains_Q16[ i ] );
-    }
-#if !VARQ
-    LZ = SKP_Silk_CLZ32( min_gain_Q16 ) - 1;
-    LZ = SKP_LIMIT( LZ, 0, 16 );
-    min_gain_Q16 = SKP_RSHIFT( min_gain_Q16, 2 ); /* Ensure that maximum invGains_Q16 is within range of a 16 bit int */
-#endif
-    for( i = 0; i < NB_SUBFR; i++ ) {
-        /* Divide to Q16 */
-        SKP_assert( psEncCtrl->Gains_Q16[ i ] > 0 );
-#if VARQ
-        /* Invert and normalize gains, and ensure that maximum invGains_Q16 is within range of a 16 bit int */
-        invGains_Q16[ i ] = SKP_DIV32_varQ( min_gain_Q16, psEncCtrl->Gains_Q16[ i ], 16 - 2 );
-#else
-        invGains_Q16[ i ] = SKP_DIV32( SKP_LSHIFT( min_gain_Q16, LZ ), SKP_RSHIFT( psEncCtrl->Gains_Q16[ i ], 16 - LZ ) );
-#endif
-
-        /* Ensure Wght_Q15 a minimum value 1 */
-        invGains_Q16[ i ] = SKP_max( invGains_Q16[ i ], 363 ); 
-        
-        /* Square the inverted gains */
-        SKP_assert( invGains_Q16[ i ] == SKP_SAT16( invGains_Q16[ i ] ) );
-        tmp = SKP_SMULWB( invGains_Q16[ i ], invGains_Q16[ i ] );
-        Wght_Q15[ i ] = SKP_RSHIFT( tmp, 1 );
-
-        /* Invert the inverted and normalized gains */
-        local_gains_Qx[ i ] = SKP_DIV32( ( 1 << ( 16 + Qx ) ), invGains_Q16[ i ] );
-    }
-
-    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
-        /**********/
-        /* VOICED */
-        /**********/
-        SKP_assert( psEnc->sCmn.frame_length - psEnc->sCmn.predictLPCOrder >= psEncCtrl->sCmn.pitchL[ 0 ] + LTP_ORDER / 2 );
-
-        /* LTP analysis */
-        SKP_Silk_find_LTP_FIX( psEncCtrl->LTPCoef_Q14, WLTP, &psEncCtrl->LTPredCodGain_Q7, res_pitch, 
-            res_pitch + SKP_RSHIFT( psEnc->sCmn.frame_length, 1 ), psEncCtrl->sCmn.pitchL, Wght_Q15, 
-            psEnc->sCmn.subfr_length, psEnc->sCmn.frame_length, LTP_corrs_rshift );
-
-
-        /* Quantize LTP gain parameters */
-        SKP_Silk_quant_LTP_gains_FIX( psEncCtrl->LTPCoef_Q14, psEncCtrl->sCmn.LTPIndex, &psEncCtrl->sCmn.PERIndex, 
-            WLTP, psEnc->mu_LTP_Q8, psEnc->sCmn.LTPQuantLowComplexity );
-
-        /* Control LTP scaling */
-        SKP_Silk_LTP_scale_ctrl_FIX( psEnc, psEncCtrl );
-
-        /* Create LTP residual */
-        SKP_Silk_LTP_analysis_filter_FIX( LPC_in_pre, psEnc->x_buf + psEnc->sCmn.frame_length - psEnc->sCmn.predictLPCOrder, 
-            psEncCtrl->LTPCoef_Q14, psEncCtrl->sCmn.pitchL, invGains_Q16, 16, psEnc->sCmn.subfr_length, psEnc->sCmn.predictLPCOrder );
-
-    } else {
-        /************/
-        /* UNVOICED */
-        /************/
-        /* Create signal with prepended subframes, scaled by inverse gains */
-        x_ptr     = psEnc->x_buf + psEnc->sCmn.frame_length - psEnc->sCmn.predictLPCOrder;
-        x_pre_ptr = LPC_in_pre;
-        for( i = 0; i < NB_SUBFR; i++ ) {
-            SKP_Silk_scale_copy_vector16( x_pre_ptr, x_ptr, invGains_Q16[ i ], 
-                psEnc->sCmn.subfr_length + psEnc->sCmn.predictLPCOrder );
-            x_pre_ptr += psEnc->sCmn.subfr_length + psEnc->sCmn.predictLPCOrder;
-            x_ptr     += psEnc->sCmn.subfr_length;
-        }
-
-        SKP_memset( psEncCtrl->LTPCoef_Q14, 0, NB_SUBFR * LTP_ORDER * sizeof( SKP_int16 ) );
-        psEncCtrl->LTPredCodGain_Q7 = 0;
-    }
-
-    /* LPC_in_pre contains the LTP-filtered input for voiced, and the unfiltered input for unvoiced */
-    TIC(FIND_LPC)
-    SKP_Silk_find_LPC_FIX( NLSF_Q15, &psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEnc->sPred.prev_NLSFq_Q15, 
-        psEnc->sCmn.useInterpolatedNLSFs * ( 1 - psEnc->sCmn.first_frame_after_reset ), psEnc->sCmn.predictLPCOrder, 
-        LPC_in_pre, psEnc->sCmn.subfr_length + psEnc->sCmn.predictLPCOrder );
-    TOC(FIND_LPC)
-
-
-    /* Quantize LSFs */
-    TIC(PROCESS_LSFS)
-        SKP_Silk_process_NLSFs_FIX( psEnc, psEncCtrl, NLSF_Q15 );
-    TOC(PROCESS_LSFS)
-
-    /* Calculate residual energy using quantized LPC coefficients */
-    SKP_Silk_residual_energy_FIX( psEncCtrl->ResNrg, psEncCtrl->ResNrgQ, LPC_in_pre, psEncCtrl->PredCoef_Q12, local_gains_Qx, Qx,
-        psEnc->sCmn.subfr_length, psEnc->sCmn.predictLPCOrder );
-
-    /* Copy to prediction struct for use in next frame for fluctuation reduction */
-    SKP_memcpy( psEnc->sPred.prev_NLSFq_Q15, NLSF_Q15, psEnc->sCmn.predictLPCOrder * sizeof( SKP_int ) );
-
-}
-
--- a/src/SKP_Silk_gain_quant.c
+++ /dev/null
@@ -1,94 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-#define OFFSET          ( ( MIN_QGAIN_DB * 128 ) / 6 + 16 * 128 )
-#define SCALE_Q16       ( ( 65536 * ( N_LEVELS_QGAIN - 1 ) ) / ( ( ( MAX_QGAIN_DB - MIN_QGAIN_DB ) * 128 ) / 6 ) )
-#define INV_SCALE_Q16   ( ( 65536 * ( ( ( MAX_QGAIN_DB - MIN_QGAIN_DB ) * 128 ) / 6 ) ) / ( N_LEVELS_QGAIN - 1 ) )
-
-/* Gain scalar quantization with hysteresis, uniform on log scale */
-void SKP_Silk_gains_quant(
-    SKP_int                         ind[ NB_SUBFR ],        /* O    gain indices                            */
-    SKP_int32                       gain_Q16[ NB_SUBFR ],   /* I/O  gains (quantized out)                   */
-    SKP_int                         *prev_ind,              /* I/O  last index in previous frame            */
-    const SKP_int                   conditional             /* I    first gain is delta coded if 1          */
-)
-{
-    SKP_int k;
-
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        /* Add half of previous quantization error, convert to log scale, scale, floor() */
-        ind[ k ] = SKP_SMULWB( SCALE_Q16, SKP_Silk_lin2log( gain_Q16[ k ] ) - OFFSET );
-
-        /* Round towards previous quantized gain (hysteresis) */
-        if( ind[ k ] < *prev_ind ) {
-            ind[ k ]++;
-        }
-
-        /* Compute delta indices and limit */
-        if( k == 0 && conditional == 0 ) {
-            /* Full index */
-            ind[ k ] = SKP_LIMIT( ind[ k ], 0, N_LEVELS_QGAIN - 1 );
-            ind[ k ] = SKP_max_int( ind[ k ], *prev_ind + MIN_DELTA_GAIN_QUANT );
-            *prev_ind = ind[ k ];
-        } else {
-            /* Delta index */
-            ind[ k ] = SKP_LIMIT( ind[ k ] - *prev_ind, MIN_DELTA_GAIN_QUANT, MAX_DELTA_GAIN_QUANT );
-            /* Accumulate deltas */
-            *prev_ind += ind[ k ];
-            /* Shift to make non-negative */
-            ind[ k ] -= MIN_DELTA_GAIN_QUANT;
-        }
-
-        /* Convert to linear scale and scale */
-        gain_Q16[ k ] = SKP_Silk_log2lin( SKP_min_32( SKP_SMULWB( INV_SCALE_Q16, *prev_ind ) + OFFSET, 3967 ) ); /* 3967 = 31 in Q7 */
-    }
-}
-
-/* Gains scalar dequantization, uniform on log scale */
-void SKP_Silk_gains_dequant(
-    SKP_int32                       gain_Q16[ NB_SUBFR ],   /* O    quantized gains                         */
-    const SKP_int                   ind[ NB_SUBFR ],        /* I    gain indices                            */
-    SKP_int                         *prev_ind,              /* I/O  last index in previous frame            */
-    const SKP_int                   conditional             /* I    first gain is delta coded if 1          */
-)
-{
-    SKP_int   k;
-
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        if( k == 0 && conditional == 0 ) {
-            *prev_ind = ind[ k ];
-        } else {
-            /* Delta index */
-            *prev_ind += ind[ k ] + MIN_DELTA_GAIN_QUANT;
-        }
-
-        /* Convert to linear scale and scale */
-        gain_Q16[ k ] = SKP_Silk_log2lin( SKP_min_32( SKP_SMULWB( INV_SCALE_Q16, *prev_ind ) + OFFSET, 3967 ) ); /* 3967 = 31 in Q7 */
-    }
-}
--- a/src/SKP_Silk_init_encoder_FIX.c
+++ /dev/null
@@ -1,64 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-/*********************************/
-/* Initialize Silk Encoder state */
-/*********************************/
-SKP_int SKP_Silk_init_encoder_FIX(
-    SKP_Silk_encoder_state_FIX  *psEnc          /* I/O  Pointer to Silk encoder state               */
-)
-{
-    SKP_int ret = 0;
-    /* Clear the entire encoder state */
-    SKP_memset( psEnc, 0, sizeof( SKP_Silk_encoder_state_FIX ) );
-
-    /* Initialize to 24 kHz sampling, 20 ms packets, 25 kbps, 0% packet loss, and init non-zero values */
-    ret = SKP_Silk_control_encoder_FIX( psEnc, 24, 20, 25, 0, 0, 0, 10, 1 );
-
-#if HIGH_PASS_INPUT
-    psEnc->variable_HP_smth1_Q15 = 200844; /* = SKP_Silk_log2(70)_Q0; */
-    psEnc->variable_HP_smth2_Q15 = 200844; /* = SKP_Silk_log2(70)_Q0; */
-#endif
-
-    /* Used to deactivate e.g. LSF interpolation and fluctuation reduction */
-    psEnc->sCmn.first_frame_after_reset = 1;
-    psEnc->sCmn.fs_kHz_changed          = 0;
-    psEnc->sCmn.LBRR_enabled            = 0;
-
-    /* Initialize Silk VAD */
-    ret += SKP_Silk_VAD_Init( &psEnc->sCmn.sVAD );
-
-    /* Initialize NSQ */
-    psEnc->sNSQ.prev_inv_gain_Q16      = 65536; /* 1.0 in Q16 */
-    psEnc->sNSQ_LBRR.prev_inv_gain_Q16 = 65536; /* 1.0 in Q16 */
-
-    psEnc->sCmn.bitstream_v     = USE_BIT_STREAM_V;
-
-    return( ret );
-}
--- a/src/SKP_Silk_inner_prod_aligned.c
+++ /dev/null
@@ -1,96 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                                *
- * SKP_Silk_inner_prod_aligned.c                                                *
- *                                                                                *
- *                                                                                *
- * Copyright 2008 (c), Skype Limited                                              *
- * Date: 080601                                                                   *
- *                                                                                */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* sum= for(i=0;i<len;i++)inVec1[i]*inVec2[i];      ---        inner product    */
-/* Note for ARM asm:                                                            */
-/*        * inVec1 and inVec2 should be at least 2 byte aligned.    (Or defined as short/int16) */
-/*        * len should be positive 16bit integer.                               */
-/*        * only when len>6, memory access can be reduced by half.              */
-
-SKP_int32 SKP_Silk_inner_prod_aligned(
-    const SKP_int16* const inVec1,  /*    I input vector 1    */
-    const SKP_int16* const inVec2,  /*    I input vector 2    */
-    const SKP_int             len   /*    I vector lengths    */
-)
-{
-    SKP_int   i; 
-    SKP_int32 sum = 0;
-    for( i = 0; i < len; i++ ) {
-        sum = SKP_SMLABB( sum, inVec1[ i ], inVec2[ i ] );
-    }
-    return sum;
-}
-
-SKP_int64 SKP_Silk_inner_prod_aligned_64(
-    const SKP_int32 *inVec1,        /*    I input vector 1    */ 
-    const SKP_int32 *inVec2,        /*    I input vector 2    */
-    const SKP_int   len             /*    I vector lengths    */
-)
-{
-    SKP_int   i; 
-    SKP_int64 sum = 0;
-    for( i = 0; i < len; i++ ) {
-        sum = SKP_SMLAL( sum, inVec1[ i ], inVec2[ i ] );
-    }
-    return sum;
-}
-SKP_int64 SKP_Silk_inner_prod16_aligned_64(
-    const SKP_int16 *inVec1,        /*    I input vector 1    */ 
-    const SKP_int16 *inVec2,        /*    I input vector 2    */
-    const SKP_int   len             /*    I vector lengths    */
-)
-{
-    SKP_int   i; 
-    SKP_int64 sum = 0;
-    for( i = 0; i < len; i++ ) {
-        sum = SKP_SMLALBB( sum, inVec1[ i ], inVec2[ i ] );
-    }
-    return sum;
-}
-
-SKP_int32 SKP_Silk_inner_prod16_aligned_sat(
-    const SKP_int16* const inVec1,  /*    I input vector 1  */ 
-    const SKP_int16* const inVec2,  /*    I input vector 2  */
-    const SKP_int    len            /*    I vector lengths  */ 
-)
-{
-    SKP_int   i; 
-    SKP_int32 sum = 0;
-    for( i = 0; i < len; i++ ) {
-        sum = SKP_ADD_SAT32( sum, SKP_SMULBB( inVec1[ i ], inVec2[ i ] ) );
-    }
-    return sum;
-}
--- a/src/SKP_Silk_interpolate.c
+++ /dev/null
@@ -1,47 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-/* Interpolate two vectors */
-void SKP_Silk_interpolate(
-    SKP_int                         xi[ MAX_LPC_ORDER ],    /* O    interpolated vector                     */
-    const SKP_int                   x0[ MAX_LPC_ORDER ],    /* I    first vector                            */
-    const SKP_int                   x1[ MAX_LPC_ORDER ],    /* I    second vector                           */
-    const SKP_int                   ifact_Q2,               /* I    interp. factor, weight on 2nd vector    */
-    const SKP_int                   d                       /* I    number of parameters                    */
-)
-{
-    SKP_int i;
-
-    SKP_assert( ifact_Q2 >= 0 );
-    SKP_assert( ifact_Q2 <= ( 1 << 2 ) );
-
-    for( i = 0; i < d; i++ ) {
-        xi[ i ] = ( SKP_int )( ( SKP_int32 )x0[ i ] + SKP_RSHIFT( SKP_MUL( ( SKP_int32 )x1[ i ] - ( SKP_int32 )x0[ i ], ifact_Q2 ), 2 ) );
-    }
-}
--- a/src/SKP_Silk_k2a.c
+++ /dev/null
@@ -1,58 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_k2a.c                                                     *
- *                                                                      *
- * Step up function, converts reflection coefficients to prediction     *
- * coefficients                                                         *
- *                                                                      *
- * Copyright 2008 (c), Skype Limited                                    *
- * Date: 080103                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Step up function, converts reflection coefficients to prediction coefficients */
-void SKP_Silk_k2a(
-    SKP_int32            *A_Q24,                 /* O:    Prediction coefficients [order] Q24         */
-    const SKP_int16      *rc_Q15,                /* I:    Reflection coefficients [order] Q15         */
-    const SKP_int32      order                   /* I:    Prediction order                            */
-)
-{
-    SKP_int   k, n;
-    SKP_int32 Atmp[ SigProc_MAX_ORDER_LPC ];
-
-    for( k = 0; k < order; k++ ) {
-        for( n = 0; n < k; n++ ) {
-            Atmp[ n ] = A_Q24[ n ];
-        }
-        for( n = 0; n < k; n++ ) {
-            A_Q24[ n ] = SKP_SMLAWB( A_Q24[ n ], SKP_LSHIFT( Atmp[ k - n - 1 ], 1 ), rc_Q15[ k ] );
-        }
-        A_Q24[ k ] = -SKP_LSHIFT( (SKP_int32)rc_Q15[ k ], 9 );
-    }
-}
--- a/src/SKP_Silk_k2a_Q16.c
+++ /dev/null
@@ -1,58 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_k2a.c                                                     *
- *                                                                      *
- * Step up function, converts reflection coefficients to prediction     *
- * coefficients                                                         *
- *                                                                      *
- * Copyright 2008 (c), Skype Limited                                    *
- * Date: 080103                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Step up function, converts reflection coefficients to prediction coefficients */
-void SKP_Silk_k2a_Q16(
-    SKP_int32            *A_Q24,                 /* O:    Prediction coefficients [order] Q24         */
-    const SKP_int32      *rc_Q16,                /* I:    Reflection coefficients [order] Q16         */
-    const SKP_int32      order                   /* I:    Prediction order                            */
-)
-{
-    SKP_int   k, n;
-    SKP_int32 Atmp[ SigProc_MAX_ORDER_LPC ];
-
-    for( k = 0; k < order; k++ ) {
-        for( n = 0; n < k; n++ ) {
-            Atmp[ n ] = A_Q24[ n ];
-        }
-        for( n = 0; n < k; n++ ) {
-            A_Q24[ n ] = SKP_SMLAWW( A_Q24[ n ], Atmp[ k - n - 1 ], rc_Q16[ k ] );
-        }
-        A_Q24[ k ] = -SKP_LSHIFT( rc_Q16[ k ], 8 );
-    }
-}
--- a/src/SKP_Silk_lin2log.c
+++ /dev/null
@@ -1,49 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_lin2log.c                                                 *
- *                                                                      *
- * Convert input to a log scale                                         *
- * Approximation of 128 * log2()                                        *
- *                                                                      *
- * Copyright 2006 (c), Skype Limited                                    *
- * Date: 060221                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-/* Approximation of 128 * log2() (very close inverse of approx 2^() below) */
-/* Convert input to a log scale    */ 
-SKP_int32 SKP_Silk_lin2log( const SKP_int32 inLin )    /* I:    Input in linear scale */
-{
-    SKP_int32 lz, frac_Q7;
-
-    SKP_Silk_CLZ_FRAC( inLin, &lz, &frac_Q7 );
-
-    /* Piece-wise parabolic approximation */
-    return( SKP_LSHIFT( 31 - lz, 7 ) + SKP_SMLAWB( frac_Q7, SKP_MUL( frac_Q7, 128 - frac_Q7 ), 179 ) );
-}
-
--- a/src/SKP_Silk_log2lin.c
+++ /dev/null
@@ -1,58 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_log2lin.c                                                 *
- *                                                                      *
- * Convert input to a linear scale                                      *
- *                                                                      *
- * Copyright 2006 (c), Skype Limited                                    *
- * Date: 060221                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Approximation of 2^() (very close inverse of SKP_Silk_lin2log()) */
-/* Convert input to a linear scale    */ 
-SKP_int32 SKP_Silk_log2lin( const SKP_int32 inLog_Q7 )    /* I:    Input on log scale */ 
-{
-    SKP_int32 out, frac_Q7;
-
-    if( inLog_Q7 < 0 ) {
-        return 0;
-    }
-
-    out = SKP_LSHIFT( 1, SKP_RSHIFT( inLog_Q7, 7 ) );
-    frac_Q7 = inLog_Q7 & 0x7F;
-    if( inLog_Q7 < 2048 ) {
-        /* Piece-wise parabolic approximation */
-        out = SKP_ADD_RSHIFT( out, SKP_MUL( out, SKP_SMLAWB( frac_Q7, SKP_MUL( frac_Q7, 128 - frac_Q7 ), -174 ) ), 7 );
-    } else {
-        /* Piece-wise parabolic approximation */
-        out = SKP_MLA( out, SKP_RSHIFT( out, 7 ), SKP_SMLAWB( frac_Q7, SKP_MUL( frac_Q7, 128 - frac_Q7 ), -174 ) );
-    }
-    return out;
-}
--- a/src/SKP_Silk_lowpass_int.c
+++ /dev/null
@@ -1,61 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_lowpass_int.c                                             *
- *                                                                      *
- * First order low-pass filter, with input as SKP_int32, running at     *
- * 48 kHz                                                               *
- *                                                                      *
- * Copyright 2006 (c), Skype Limited                                    *
- * Date: 060221                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* First order low-pass filter, with input as SKP_int32, running at 48 kHz        */
-void SKP_Silk_lowpass_int(
-    const SKP_int32      *in,            /* I:    Q25 48 kHz signal; length = len */
-    SKP_int32            *S,             /* I/O: Q25 state; length = 1            */
-    SKP_int32            *out,           /* O:    Q25 48 kHz signal; length = len */
-    const SKP_int32      len             /* I:    Number of samples               */
-)
-{
-    SKP_int        k;
-    SKP_int32    in_tmp, out_tmp, state;
-    
-    state = S[ 0 ];
-    for( k = len; k > 0; k-- ) {    
-        in_tmp  = *in++;
-        in_tmp -= SKP_RSHIFT( in_tmp, 2 );              /* multiply by 0.75 */
-        out_tmp = state + in_tmp;                       /* zero at nyquist  */
-        state   = in_tmp - SKP_RSHIFT( out_tmp, 1 );    /* pole             */
-        *out++  = out_tmp;
-    }
-    S[ 0 ] = state;
-}
-
-
--- a/src/SKP_Silk_lowpass_short.c
+++ /dev/null
@@ -1,61 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_lowpass_short.c                                           *
- *                                                                      *
- * First order low-pass filter, with input as SKP_int16, running at     *
- * 48 kHz                                                               *
- *                                                                      *
- * Copyright 2006 (c), Skype Limited                                    *
- * Date: 060221                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-
-/* First order low-pass filter, with input as SKP_int16, running at 48 kHz   */
-void SKP_Silk_lowpass_short(
-    const SKP_int16          *in,        /* I:   Q15 48 kHz signal; [len]    */
-    SKP_int32                *S,         /* I/O: Q25 state; length = 1       */
-    SKP_int32                *out,       /* O:   Q25 48 kHz signal; [len]    */
-    const SKP_int32          len         /* O:   Signal length               */
-)
-{
-    SKP_int        k;
-    SKP_int32    in_tmp, out_tmp, state;
-    
-    state = S[ 0 ];
-    for( k = 0; k < len; k++ ) {    
-        in_tmp   = SKP_MUL( 768, (SKP_int32)in[k] );    /* multiply by 0.75, going from Q15 to Q25 */
-        out_tmp  = state + in_tmp;                      /* zero at nyquist                         */
-        state    = in_tmp - SKP_RSHIFT( out_tmp, 1 );   /* pole                                    */
-        out[ k ] = out_tmp;
-    }
-    S[ 0 ] = state;
-}
-
-
--- a/src/SKP_Silk_macros.h
+++ /dev/null
@@ -1,122 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef _SKP_SILK_API_C_H_
-#define _SKP_SILK_API_C_H_
-
-// This is an inline header file for general platform.
-
-// (a32 * (SKP_int32)((SKP_int16)(b32))) >> 16 output have to be 32bit int
-#define SKP_SMULWB(a32, b32)			((((a32) >> 16) * (SKP_int32)((SKP_int16)(b32))) + ((((a32) & 0x0000FFFF) * (SKP_int32)((SKP_int16)(b32))) >> 16))
-
-// a32 + (b32 * (SKP_int32)((SKP_int16)(c32))) >> 16 output have to be 32bit int
-#define SKP_SMLAWB(a32, b32, c32)		((a32) + ((((b32) >> 16) * (SKP_int32)((SKP_int16)(c32))) + ((((b32) & 0x0000FFFF) * (SKP_int32)((SKP_int16)(c32))) >> 16)))
-
-// (a32 * (b32 >> 16)) >> 16
-#define SKP_SMULWT(a32, b32)			(((a32) >> 16) * ((b32) >> 16) + ((((a32) & 0x0000FFFF) * ((b32) >> 16)) >> 16))
-
-// a32 + (b32 * (c32 >> 16)) >> 16
-#define SKP_SMLAWT(a32, b32, c32)		((a32) + (((b32) >> 16) * ((c32) >> 16)) + ((((b32) & 0x0000FFFF) * ((c32) >> 16)) >> 16))
-
-// (SKP_int32)((SKP_int16)(a3))) * (SKP_int32)((SKP_int16)(b32)) output have to be 32bit int
-#define SKP_SMULBB(a32, b32)			((SKP_int32)((SKP_int16)(a32)) * (SKP_int32)((SKP_int16)(b32)))
-
-// a32 + (SKP_int32)((SKP_int16)(b32)) * (SKP_int32)((SKP_int16)(c32)) output have to be 32bit int
-#define SKP_SMLABB(a32, b32, c32)		((a32) + ((SKP_int32)((SKP_int16)(b32))) * (SKP_int32)((SKP_int16)(c32)))
-
-// (SKP_int32)((SKP_int16)(a32)) * (b32 >> 16)
-#define SKP_SMULBT(a32, b32)			((SKP_int32)((SKP_int16)(a32)) * ((b32) >> 16))
-
-// a32 + (SKP_int32)((SKP_int16)(b32)) * (c32 >> 16)
-#define SKP_SMLABT(a32, b32, c32)		((a32) + ((SKP_int32)((SKP_int16)(b32))) * ((c32) >> 16))
-
-// a64 + (b32 * c32)
-#define SKP_SMLAL(a64, b32, c32)		(SKP_ADD64((a64), ((SKP_int64)(b32) * (SKP_int64)(c32))))
-
-// (a32 * b32) >> 16
-#define SKP_SMULWW(a32, b32)			SKP_MLA(SKP_SMULWB((a32), (b32)), (a32), SKP_RSHIFT_ROUND((b32), 16))
-
-// a32 + ((b32 * c32) >> 16)
-#define SKP_SMLAWW(a32, b32, c32)		SKP_MLA(SKP_SMLAWB((a32), (b32), (c32)), (b32), SKP_RSHIFT_ROUND((c32), 16))
-
-/* add/subtract with output saturated */
-#define SKP_ADD_SAT32(a, b)				((((a) + (b)) & 0x80000000) == 0 ?								\
-										((((a) & (b)) & 0x80000000) != 0 ? SKP_int32_MIN : (a)+(b)) :	\
-										((((a) | (b)) & 0x80000000) == 0 ? SKP_int32_MAX : (a)+(b)) )
-
-#define SKP_SUB_SAT32(a, b)				((((a)-(b)) & 0x80000000) == 0 ?										\
-										(( (a) & ((b)^0x80000000) & 0x80000000) ? SKP_int32_MIN : (a)-(b)) :	\
-										((((a)^0x80000000) & (b)  & 0x80000000) ? SKP_int32_MAX : (a)-(b)) )
-	
-SKP_INLINE SKP_int32 SKP_Silk_CLZ16(SKP_int16 in16)
-{
-	SKP_int32 out32 = 0;
-	if( in16 == 0 ) {
-		return 16;
-	}
-	/* test nibbles */
-	if( in16 & 0xFF00 ) {
-		if( in16 & 0xF000 )	{
-			in16 >>= 12;
-		} else {
-			out32 += 4;
-			in16 >>= 8;
-		}
-	} else {
-		if( in16 & 0xFFF0 )	{
-			out32 += 8;
-			in16 >>= 4;
-		} else {
-			out32 += 12;
-		}
-	}
-	/* test bits and return */
-	if( in16 & 0xC ) {
-		if( in16 & 0x8 )
-			return out32 + 0;
-		else
-			return out32 + 1;
-	} else {
-		if( in16 & 0xE )
-			return out32 + 2;
-		else
-			return out32 + 3;
-	}
-}
-
-SKP_INLINE SKP_int32 SKP_Silk_CLZ32(SKP_int32 in32)
-{
-	/* test highest 16 bits and convert to SKP_int16 */
-	if( in32 & 0xFFFF0000 ) {
-		return SKP_Silk_CLZ16((SKP_int16)(in32 >> 16));
-	} else {
-		return SKP_Silk_CLZ16((SKP_int16)in32) + 16;
-	}
-}
-
-#endif //_SKP_SILK_API_C_H_
-
--- a/src/SKP_Silk_main.h
+++ /dev/null
@@ -1,405 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef SKP_SILK_MAIN_H
-#define SKP_SILK_MAIN_H
-
-#include "SKP_Silk_SigProc_FIX.h"
-#include "SKP_Silk_define.h"
-#include "SKP_Silk_structs.h"
-#include "SKP_Silk_tables.h"
-#include "SKP_Silk_PLC.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Encodes signs of excitation */
-void SKP_Silk_encode_signs(
-    SKP_Silk_range_coder_state  *psRC,              /* I/O  Range coder state                           */
-    const SKP_int               q[],                /* I    pulse signal                                */
-    const SKP_int               length,             /* I    length of input                             */
-    const SKP_int               sigtype,            /* I    Signal type                                 */
-    const SKP_int               QuantOffsetType,    /* I    Quantization offset type                    */
-    const SKP_int               RateLevelIndex      /* I    Rate Level Index                            */
-);
-
-/* Decodes signs of excitation */
-void SKP_Silk_decode_signs(
-    SKP_Silk_range_coder_state  *psRC,              /* I/O  Range coder state                           */
-    SKP_int                     q[],                /* I/O  pulse signal                                */
-    const SKP_int               length,             /* I    length of output                            */
-    const SKP_int               sigtype,            /* I    Signal type                                 */
-    const SKP_int               QuantOffsetType,    /* I    Quantization offset type                    */
-    const SKP_int               RateLevelIndex      /* I    Rate Level Index                            */
-);
-
-/***************/
-/* Shell coder */
-/***************/
-
-/* Encode quantization indices of excitation */
-void SKP_Silk_encode_pulses(
-    SKP_Silk_range_coder_state  *psRC,              /* I/O  Range coder state                           */
-    const SKP_int               sigtype,            /* I    Sigtype                                     */
-    const SKP_int               QuantOffsetType,    /* I    QuantOffsetType                             */
-    const SKP_int               q[],                /* I    quantization indices                        */
-    const SKP_int               frame_length        /* I    Frame length                                */
-);
-
-/* Shell encoder, operates on one shell code frame of 16 pulses */
-void SKP_Silk_shell_encoder(
-    SKP_Silk_range_coder_state  *psRC,              /* I/O  compressor data structure                   */
-    const SKP_int               *pulses0            /* I    data: nonnegative pulse amplitudes          */
-);
-
-/* Shell decoder, operates on one shell code frame of 16 pulses */
-void SKP_Silk_shell_decoder(
-    SKP_int                     *pulses0,           /* O    data: nonnegative pulse amplitudes          */
-    SKP_Silk_range_coder_state  *psRC,              /* I/O  compressor data structure                   */
-    const SKP_int               pulses4             /* I    number of pulses per pulse-subframe         */
-);
-
-/***************/
-/* Range coder */
-/***************/
-/* Range encoder for one symbol */
-void SKP_Silk_range_encoder(
-    SKP_Silk_range_coder_state  *psRC,              /* I/O  compressor data structure                   */
-    const SKP_int               data,               /* I    uncompressed data                           */
-    const SKP_uint16            prob[]              /* I    cumulative density functions                */
-);
-    
-/* Range encoder for multiple symbols */
-void SKP_Silk_range_encoder_multi(
-    SKP_Silk_range_coder_state  *psRC,              /* I/O  compressor data structure                   */
-    const SKP_int               data[],             /* I    uncompressed data    [nSymbols]             */
-    const SKP_uint16 * const    prob[],             /* I    cumulative density functions                */
-    const SKP_int               nSymbols            /* I    number of data symbols                      */
-);
-
-/* Range decoder for one symbol */
-void SKP_Silk_range_decoder(
-    SKP_int                     data[],             /* O    uncompressed data                           */
-    SKP_Silk_range_coder_state  *psRC,              /* I/O  compressor data structure                   */
-    const SKP_uint16            prob[],             /* I    cumulative density function                 */
-    SKP_int                     probIx              /* I    initial (middle) entry of cdf               */
-);
-
-/* Range decoder for multiple symbols */
-void SKP_Silk_range_decoder_multi(
-    SKP_int                     data[],             /* O    uncompressed data                [nSymbols] */
-    SKP_Silk_range_coder_state  *psRC,              /* I/O  compressor data structure                   */
-    const SKP_uint16 * const    prob[],             /* I    cumulative density functions                */
-    const SKP_int               probStartIx[],      /* I    initial (middle) entries of cdfs [nSymbols] */
-    const SKP_int               nSymbols            /* I    number of data symbols                      */
-);
-
-/* Initialize range coder structure for encoder */
-void SKP_Silk_range_enc_init(
-    SKP_Silk_range_coder_state  *psRC               /* O    compressor data structure                   */
-);
-
-/* Initialize range coder structure for decoder */
-void SKP_Silk_range_dec_init(
-    SKP_Silk_range_coder_state  *psRC,              /* O    compressor data structure                   */
-    const SKP_uint8             buffer[],           /* I    buffer for compressed data [bufferLength]   */
-    const SKP_int32             bufferLength        /* I    buffer length (in bytes)                    */
-);
-
-/* Determine length of bitstream */
-SKP_int SKP_Silk_range_coder_get_length(            /* O    returns number of BITS in stream            */
-    const SKP_Silk_range_coder_state    *psRC,      /* I    compressed data structure                   */
-    SKP_int                             *nBytes     /* O    number of BYTES in stream                   */
-);
-
-/* Write decodable stream to buffer, and determine its length */
-void SKP_Silk_range_enc_wrap_up(
-    SKP_Silk_range_coder_state  *psRC               /* I/O  compressed data structure                   */
-);
-
-/* Check that any remaining bits in the last byte are set to 1 */
-void SKP_Silk_range_coder_check_after_decoding(
-    SKP_Silk_range_coder_state  *psRC               /* I/O  compressed data structure                   */
-);
-
-/* Gain scalar quantization with hysteresis, uniform on log scale */
-void SKP_Silk_gains_quant(
-    SKP_int                     ind[ NB_SUBFR ],        /* O    gain indices                            */
-    SKP_int32                   gain_Q16[ NB_SUBFR ],   /* I/O  gains (quantized out)                   */
-    SKP_int                     *prev_ind,              /* I/O  last index in previous frame            */
-    const SKP_int               conditional             /* I    first gain is delta coded if 1          */
-);
-
-/* Gains scalar dequantization, uniform on log scale */
-void SKP_Silk_gains_dequant(
-    SKP_int32                   gain_Q16[ NB_SUBFR ],   /* O    quantized gains                         */
-    const SKP_int               ind[ NB_SUBFR ],        /* I    gain indices                            */
-    SKP_int                     *prev_ind,              /* I/O  last index in previous frame            */
-    const SKP_int               conditional             /* I    first gain is delta coded if 1          */
-);
-
-/* Convert NLSF parameters to stable AR prediction filter coefficients */
-void SKP_Silk_NLSF2A_stable(
-    SKP_int16                   pAR_Q12[ MAX_LPC_ORDER ],   /* O    Stabilized AR coefs [LPC_order]     */ 
-    const SKP_int               pNLSF[ MAX_LPC_ORDER ],     /* I    NLSF vector         [LPC_order]     */
-    const SKP_int               LPC_order                   /* I    LPC/LSF order                       */
-);
-
-/* Interpolate two vectors */
-void SKP_Silk_interpolate(
-    SKP_int                     xi[ MAX_LPC_ORDER ],    /* O    interpolated vector                     */
-    const SKP_int               x0[ MAX_LPC_ORDER ],    /* I    first vector                            */
-    const SKP_int               x1[ MAX_LPC_ORDER ],    /* I    second vector                           */
-    const SKP_int               ifact_Q2,               /* I    interp. factor, weight on 2nd vector    */
-    const SKP_int               d                       /* I    number of parameters                    */
-);
-
-/***********************************/
-/* Noise shaping quantization (NSQ)*/
-/***********************************/
-void SKP_Silk_NSQ(
-    SKP_Silk_encoder_state          *psEncC,                                    /* I/O  Encoder State                       */
-    SKP_Silk_encoder_control        *psEncCtrlC,                                /* I    Encoder Control                     */
-    SKP_Silk_nsq_state              *NSQ,                                       /* I/O  NSQ state                           */
-    const SKP_int16                 x[],                                        /* I    prefiltered input signal            */
-    SKP_int                         q[],                                        /* O    quantized qulse signal              */
-    const SKP_int                   LSFInterpFactor_Q2,                         /* I    LSF interpolation factor in Q2      */
-    const SKP_int16                 PredCoef_Q12[ 2 * MAX_LPC_ORDER ],          /* I    Short term prediction coefficients  */
-    const SKP_int16                 LTPCoef_Q14[ LTP_ORDER * NB_SUBFR ],        /* I    Long term prediction coefficients   */
-    const SKP_int16                 AR2_Q13[ NB_SUBFR * SHAPE_LPC_ORDER_MAX ],  /* I                                        */
-    const SKP_int                   HarmShapeGain_Q14[ NB_SUBFR ],              /* I                                        */
-    const SKP_int                   Tilt_Q14[ NB_SUBFR ],                       /* I    Spectral tilt                       */
-    const SKP_int32                 LF_shp_Q14[ NB_SUBFR ],                     /* I                                        */
-    const SKP_int32                 Gains_Q16[ NB_SUBFR ],                      /* I                                        */
-    const SKP_int                   Lambda_Q10,                                 /* I                                        */
-    const SKP_int                   LTP_scale_Q14                               /* I    LTP state scaling                   */
-);
-
-/* Noise shaping using delayed decision */
-void SKP_Silk_NSQ_del_dec(
-    SKP_Silk_encoder_state          *psEncC,                                    /* I/O  Encoder State                       */
-    SKP_Silk_encoder_control        *psEncCtrlC,                                /* I    Encoder Control                     */
-    SKP_Silk_nsq_state              *NSQ,                                       /* I/O  NSQ state                           */
-    const SKP_int16                 x[],                                        /* I    Prefiltered input signal            */
-    SKP_int                         q[],                                        /* O    Quantized pulse signal              */
-    const SKP_int                   LSFInterpFactor_Q2,                         /* I    LSF interpolation factor in Q2      */
-    const SKP_int16                 PredCoef_Q12[ 2 * MAX_LPC_ORDER ],          /* I    Prediction coefs                    */
-    const SKP_int16                 LTPCoef_Q14[ LTP_ORDER * NB_SUBFR ],        /* I    LT prediction coefs                 */
-    const SKP_int16                 AR2_Q13[ NB_SUBFR * SHAPE_LPC_ORDER_MAX ],  /* I                                        */
-    const SKP_int                   HarmShapeGain_Q14[ NB_SUBFR ],              /* I                                        */
-    const SKP_int                   Tilt_Q14[ NB_SUBFR ],                       /* I    Spectral tilt                       */
-    const SKP_int32                 LF_shp_Q14[ NB_SUBFR ],                     /* I                                        */
-    const SKP_int32                 Gains_Q16[ NB_SUBFR ],                      /* I                                        */
-    const SKP_int                   Lambda_Q10,                                 /* I                                        */
-    const SKP_int                   LTP_scale_Q14                               /* I    LTP state scaling                   */
-);
-
-/************/
-/* Silk VAD */
-/************/
-/* Initialize the Silk VAD */
-SKP_int SKP_Silk_VAD_Init(                          /* O    Return value, 0 if success                  */ 
-    SKP_Silk_VAD_state          *psSilk_VAD         /* I/O  Pointer to Silk VAD state                   */ 
-); 
-
-/* Silk VAD noise level estimation */
-void SKP_Silk_VAD_GetNoiseLevels(
-    const SKP_int32             pX[ VAD_N_BANDS ],  /* I    subband energies                            */
-    SKP_Silk_VAD_state          *psSilk_VAD         /* I/O  Pointer to Silk VAD state                   */ 
-);
-
-/* Get speech activity level in Q8 */
-SKP_int SKP_Silk_VAD_GetSA_Q8(                                  /* O    Return value, 0 if success      */
-    SKP_Silk_VAD_state          *psSilk_VAD,                    /* I/O  Silk VAD state                  */
-    SKP_int                     *pSA_Q8,                        /* O    Speech activity level in Q8     */
-    SKP_int                     *pSNR_dB_Q7,                    /* O    SNR for current frame in Q7     */
-    SKP_int                     pQuality_Q15[ VAD_N_BANDS ],    /* O    Smoothed SNR for each band      */
-    SKP_int                     *pTilt_Q15,                     /* O    current frame's frequency tilt  */
-    const SKP_int16             pIn[],                          /* I    PCM input       [framelength]   */
-    const SKP_int               framelength                     /* I    Input frame length              */
-);
-
-/* Detect signal in 8 - 12 khz range */
-void SKP_Silk_detect_SWB_input(
-    SKP_Silk_detect_SWB_state   *psSWBdetect,       /* I/O  Encoder state                               */
-    const SKP_int16             samplesIn[],        /* I    Input to encoder                            */
-    SKP_int                     nSamplesIn          /* I    Length of input                             */
-);
-
-#if SWITCH_TRANSITION_FILTERING
-/* Low-pass filter with variable cutoff frequency based on  */
-/* piece-wise linear interpolation between elliptic filters */
-/* Start by setting transition_frame_no = 1;                */
-void SKP_Silk_LP_variable_cutoff(
-    SKP_Silk_LP_state           *psLP,              /* I/O  LP filter state                             */
-    SKP_int16                   *out,               /* O    Low-pass filtered output signal             */
-    const SKP_int16             *in,                /* I    Input signal                                */
-    const SKP_int               frame_length        /* I    Frame length                                */
-);
-#endif
-
-/****************************************************/
-/* Decoder Functions                                */
-/****************************************************/
-SKP_int SKP_Silk_create_decoder(
-    SKP_Silk_decoder_state      **ppsDec            /* I/O  Decoder state pointer pointer               */
-);
-
-SKP_int SKP_Silk_free_decoder(
-    SKP_Silk_decoder_state      *psDec              /* I/O  Decoder state pointer                       */
-);
-
-SKP_int SKP_Silk_init_decoder(
-    SKP_Silk_decoder_state      *psDec              /* I/O  Decoder state pointer                       */
-);
-
-/* Set decoder sampling rate */
-void SKP_Silk_decoder_set_fs(
-    SKP_Silk_decoder_state      *psDec,             /* I/O  Decoder state pointer                       */
-    SKP_int                     fs_kHz              /* I    Sampling frequency (kHz)                    */
-);
-
-/****************/
-/* Decode frame */
-/****************/
-SKP_int SKP_Silk_decode_frame(
-    SKP_Silk_decoder_state      *psDec,             /* I/O  Pointer to Silk decoder state               */
-    SKP_int16                   pOut[],             /* O    Pointer to output speech frame              */
-    SKP_int16                   *pN,                /* O    Pointer to size of output frame             */
-    const SKP_uint8             pCode[],            /* I    Pointer to payload                          */
-    const SKP_int               nBytes,             /* I    Payload length                              */
-    SKP_int                     action,             /* I    Action from Jitter Buffer                   */
-    SKP_int                     *decBytes           /* O    Used bytes to decode this frame             */
-);
-
-/* Decode parameters from payload */
-void SKP_Silk_decode_parameters(
-    SKP_Silk_decoder_state      *psDec,             /* I/O  State                                       */
-    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O  Decoder control                             */
-    SKP_int                     q[],                /* O    Excitation signal                           */
-    const SKP_int               fullDecoding        /* I    Flag to tell if only arithmetic decoding    */
-);
-
-/* Decode indices from payload v4 Bitstream */
-void SKP_Silk_decode_indices_v4(
-    SKP_Silk_decoder_state      *psDec              /* I/O  State                                       */
-);
-
-/* Decode parameters from payload v4 Bitstream */
-void SKP_Silk_decode_parameters_v4(
-    SKP_Silk_decoder_state      *psDec,                                 /* I/O  State                                    */
-    SKP_Silk_decoder_control    *psDecCtrl,                             /* I/O  Decoder control                          */
-    SKP_int                     q[ MAX_FRAME_LENGTH ],                  /* O    Excitation signal                        */
-    const SKP_int               fullDecoding                            /* I    Flag to tell if only arithmetic decoding */
-);
-
-/* Core decoder. Performs inverse NSQ operation LTP + LPC */
-void SKP_Silk_decode_core(
-    SKP_Silk_decoder_state      *psDec,                             /* I/O  Decoder state               */
-    SKP_Silk_decoder_control    *psDecCtrl,                         /* I    Decoder control             */
-    SKP_int16                   xq[],                               /* O    Decoded speech              */
-    const SKP_int               q[ MAX_FRAME_LENGTH ]               /* I    Pulse signal                */
-);
-
-/* NLSF vector decoder */
-void SKP_Silk_NLSF_MSVQ_decode(
-    SKP_int                         *pNLSF_Q15,     /* O    Pointer to decoded output [LPC_ORDER x 1]   */
-    const SKP_Silk_NLSF_CB_struct   *psNLSF_CB,     /* I    Pointer to NLSF codebook struct             */
-    const SKP_int                   *NLSFIndices,   /* I    Pointer to NLSF indices [nStages x 1]       */
-    const SKP_int                   LPC_order       /* I    LPC order                                   */
-);
-
-/**********************/
-/* Arithmetic coding */
-/*********************/
-
-/* Decode quantization indices of excitation (Shell coding) */
-void SKP_Silk_decode_pulses(
-    SKP_Silk_range_coder_state  *psRC,              /* I/O  Range coder state                           */
-    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O  Decoder control                             */
-    SKP_int                     q[],                /* O    Excitation signal                           */
-    const SKP_int               frame_length        /* I    Frame length (preliminary)                  */
-);
-
-/******************/
-/* CNG */
-/******************/
-
-/* Reset CNG */
-void SKP_Silk_CNG_Reset(
-    SKP_Silk_decoder_state      *psDec              /* I/O  Decoder state                               */
-);
-
-/* Updates CNG estimate, and applies the CNG when packet was lost   */
-void SKP_Silk_CNG(
-    SKP_Silk_decoder_state      *psDec,             /* I/O  Decoder state                               */
-    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O  Decoder control                             */
-    SKP_int16                   signal[],           /* I/O  Signal                                      */
-    SKP_int                     length              /* I    Length of residual                          */
-);
-
-/* Encoding of various parameters */
-void SKP_Silk_encode_parameters(
-    SKP_Silk_encoder_state      *psEncC,            /* I/O  Encoder state                               */
-    SKP_Silk_encoder_control    *psEncCtrlC,        /* I/O  Encoder control                             */
-    SKP_Silk_range_coder_state  *psRC,              /* I/O  Range coder state                           */
-    const SKP_int               *q                  /* I    Quantization indices                        */
-);
-
-/* Encoding of various parameters */
-void SKP_Silk_encode_parameters_v4(
-    SKP_Silk_encoder_state      *psEncC,            /* I/O  Encoder state                               */
-    SKP_Silk_encoder_control    *psEncCtrlC,        /* I/O  Encoder control                             */
-    SKP_Silk_range_coder_state  *psRC               /* I/O  Range encoder state                         */
-);
-
-/* Extract lowest layer encoding */
-void SKP_Silk_get_low_layer_internal(
-    const SKP_uint8             *indata,            /* I:   Encoded input vector                        */
-    const SKP_int16             nBytesIn,           /* I:   Number of input Bytes                       */
-    SKP_uint8                   *Layer0data,        /* O:   Layer0 payload                              */
-    SKP_int16                   *nLayer0Bytes       /* O:   Number of FEC Bytes                         */
-);
-
-/* Resets LBRR buffer, used if packet size changes */
-void SKP_Silk_LBRR_reset( 
-    SKP_Silk_encoder_state      *psEncC             /* I/O  Pointer to Silk encoder state               */
-);
-
-/* Predict number of bytes used to encode q */
-SKP_int SKP_Silk_pulses_to_bytes( /* O  Return value, predicted number of bytes used to encode q */ 
-    SKP_Silk_encoder_state      *psEncC,            /* I/O  Encoder State*/
-    SKP_int                     q[]                 /* I     Pulse signal */
-);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
--- a/src/SKP_Silk_main_FIX.h
+++ /dev/null
@@ -1,324 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef SKP_SILK_MAIN_FIX_H
-#define SKP_SILK_MAIN_FIX_H
-
-#include <stdlib.h>
-#include "SKP_Silk_SigProc_FIX.h"
-#include "SKP_Silk_structs_FIX.h"
-#include "SKP_Silk_main.h"
-#include "SKP_Silk_define_FIX.h"
-#include "SKP_Silk_PLC.h"
-#define TIC(TAG_NAME)
-#define TOC(TAG_NAME)
-
-#ifndef FORCE_CPP_BUILD
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-#endif
-
-/*********************/
-/* Encoder Functions */
-/*********************/
-
-/* Initializes the Silk encoder state */
-SKP_int SKP_Silk_init_encoder_FIX(
-    SKP_Silk_encoder_state_FIX  *psEnc              /* I/O  Pointer to Silk FIX encoder state           */
-);
-
-/* Control the Silk encoder */
-SKP_int SKP_Silk_control_encoder_FIX( 
-    SKP_Silk_encoder_state_FIX  *psEnc,             /* I/O  Pointer to Silk FIX encoder state               */
-    const SKP_int               API_fs_kHz,         /* I    External (API) sampling rate (kHz)              */
-    const SKP_int               PacketSize_ms,      /* I    Packet length (ms)                              */
-    SKP_int32                   TargetRate_bps,     /* I    Target max bitrate (bps) (used if SNR_dB == 0)  */
-    const SKP_int               PacketLoss_perc,    /* I    Packet loss rate (in percent)                   */
-    const SKP_int               INBandFec_enabled,  /* I    Enable (1) / disable (0) inband FEC             */
-    const SKP_int               DTX_enabled,        /* I    Enable / disable DTX                            */
-    const SKP_int               InputFramesize_ms,  /* I    Inputframe in ms                                */
-    const SKP_int               Complexity          /* I    Complexity (0->low; 1->medium; 2->high)         */
-);
-
-/* Encoder main function */
-SKP_int SKP_Silk_encode_frame_FIX( 
-    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O  Pointer to Silk FIX encoder state           */
-    SKP_uint8                       *pCode,             /* O    Pointer to payload                          */
-    SKP_int16                       *pnBytesOut,        /* I/O  Pointer to number of payload bytes;         */
-                                                        /*      input: max length; output: used             */
-    const SKP_int16                 *pIn                /* I    Pointer to input speech frame               */
-);
-
-/* Low BitRate Redundancy encoding functionality. Reuse all parameters but encode with lower bitrate */
-void SKP_Silk_LBRR_encode_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  Pointer to Silk FIX encoder state           */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  Pointer to Silk FIX encoder control struct  */
-    SKP_uint8                       *pCode,         /* O    Pointer to payload                          */
-    SKP_int16                       *pnBytesOut,    /* I/O  Pointer to number of payload bytes          */
-    SKP_int16                       xfw[]           /* I    Input signal                                */
-);
-
-/* High-pass filter with cutoff frequency adaptation based on pitch lag statistics */
-void SKP_Silk_HP_variable_cutoff_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  Encoder state                               */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  Encoder control                             */
-    SKP_int16                       *out,           /* O    high-pass filtered output signal            */
-    const SKP_int16                 *in             /* I    input signal                                */
-);
-
-/****************/
-/* Prefiltering */
-/****************/
-void SKP_Silk_prefilter_FIX(
-    SKP_Silk_encoder_state_FIX          *psEnc,         /* I/O  Encoder state                               */
-    const SKP_Silk_encoder_control_FIX  *psEncCtrl,     /* I    Encoder control                             */
-    SKP_int16                           xw[],           /* O    Weighted signal                             */
-    const SKP_int16                     x[]             /* I    Speech signal                               */
-);
-
-/**************************************************************/
-/* Compute noise shaping coefficients and initial gain values */
-/**************************************************************/
-void SKP_Silk_noise_shape_analysis_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  Encoder state                               */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  Encoder control                             */
-    const SKP_int16                 *pitch_res,     /* I    LPC residual from pitch analysis            */
-    const SKP_int16                 *x              /* I    Input signal [ 2 * frame_length + la_shape ]*/
-);
-
-/* Processing of gains */
-void SKP_Silk_process_gains_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  Encoder state                               */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl      /* I/O  Encoder control                             */
-);
-
-
-/* Control low bitrate redundancy usage */
-void SKP_Silk_LBRR_ctrl_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  encoder state                               */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl      /* I/O  encoder control                             */
-);
-
-/* Calculation of LTP state scaling */
-void SKP_Silk_LTP_scale_ctrl_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  encoder state                               */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl      /* I/O  encoder control                             */
-);
-
-/**********************************************/
-/* Prediction Analysis                        */
-/**********************************************/
-
-/* Find pitch lags */
-void SKP_Silk_find_pitch_lags_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  encoder state                               */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  encoder control                             */
-    SKP_int16                       res[],          /* O    residual                                    */
-    const SKP_int16                 x[]             /* I    Speech signal                               */
-);
-
-void SKP_Silk_find_pred_coefs_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  encoder state                               */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  encoder control                             */
-    const SKP_int16                 res_pitch[]     /* I    Residual from pitch analysis                */
-);
-
-void SKP_Silk_find_LPC_FIX(
-    SKP_int             NLSF_Q15[],             /* O    LSFs                                                                        */
-    SKP_int             *interpIndex,           /* O    LSF interpolation index, only used for LSF interpolation                    */
-    const SKP_int       prev_NLSFq_Q15[],       /* I    previous LSFs, only used for LSF interpolation                              */
-    const SKP_int       useInterpolatedLSFs,    /* I    Flag                                                                        */
-    const SKP_int       LPC_order,              /* I    LPC order                                                                   */
-    const SKP_int16     x[],                    /* I    Input signal                                                                */
-    const SKP_int       subfr_length            /* I    Input signal subframe length including preceeding samples                   */
-);
-
-void SKP_Silk_LTP_analysis_filter_FIX(
-    SKP_int16       *LTP_res,                           /* O:   LTP residual signal of length NB_SUBFR * ( pre_length + subfr_length )  */
-    const SKP_int16 *x,                                 /* I:   Pointer to input signal with at least max( pitchL ) preceeding samples  */
-    const SKP_int16 LTPCoef_Q14[ LTP_ORDER * NB_SUBFR ],/* I:   LTP_ORDER LTP coefficients for each NB_SUBFR subframe                   */
-    const SKP_int   pitchL[ NB_SUBFR ],                 /* I:   Pitch lag, one for each subframe                                        */
-    const SKP_int32 invGains_Qxx[ NB_SUBFR ],           /* I:   Inverse quantization gains, one for each subframe                       */
-    const SKP_int   Qxx,                                /* I:   Inverse quantization gains Q domain                                     */
-    const SKP_int   subfr_length,                       /* I:   Length of each subframe                                                 */
-    const SKP_int   pre_length                          /* I:   Length of the preceeding samples starting at &x[0] for each subframe    */
-);
-
-/* Finds LTP vector from correlations */
-void SKP_Silk_find_LTP_FIX(
-    SKP_int16           b_Q14[ NB_SUBFR * LTP_ORDER ],              /* O    LTP coefs                                                   */
-    SKP_int32           WLTP[ NB_SUBFR * LTP_ORDER * LTP_ORDER ],   /* O    Weight for LTP quantization                                 */
-    SKP_int             *LTPredCodGain_Q7,                          /* O    LTP coding gain                                             */
-    const SKP_int16     r_first[],                                  /* I    residual signal after LPC signal + state for first 10 ms    */
-    const SKP_int16     r_last[],                                   /* I    residual signal after LPC signal + state for last 10 ms     */
-    const SKP_int       lag[ NB_SUBFR ],                            /* I    LTP lags                                                    */
-    const SKP_int32     Wght_Q15[ NB_SUBFR ],                       /* I    weights                                                     */
-    const SKP_int       subfr_length,                               /* I    subframe length                                             */
-    const SKP_int       mem_offset,                                 /* I    number of samples in LTP memory                             */
-    SKP_int             corr_rshifts[ NB_SUBFR ]                    /* O    right shifts applied to correlations                        */
-);
-
-/* LTP tap quantizer */
-void SKP_Silk_quant_LTP_gains_FIX(
-    SKP_int16               B_Q14[],                /* I/O  (un)quantized LTP gains     */
-    SKP_int                 cbk_index[],            /* O    Codebook Index              */
-    SKP_int                 *periodicity_index,     /* O    Periodicity Index           */
-    const SKP_int32         W_Q18[],                /* I    Error Weights in Q18        */
-    SKP_int                 mu_Q8,                  /* I    Mu value (R/D tradeoff)     */
-    SKP_int                 lowComplexity           /* I    Flag for low complexity     */
-);
-
-/******************/
-/* NLSF Quantizer */
-/******************/
-
-/* Limit, stabilize, convert and quantize NLSFs.    */ 
-void SKP_Silk_process_NLSFs_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,     /* I/O  encoder state                               */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl, /* I/O  encoder control                             */
-    SKP_int                         *pNLSF_Q15  /* I/O  Normalized LSFs (quant out) (0 - (2^15-1))  */
-);
-
-/* LSF vector encoder */
-void SKP_Silk_NLSF_MSVQ_encode_FIX(
-          SKP_int                   *NLSFIndices,           /* O    Codebook path vector [ CB_STAGES ]      */
-          SKP_int                   *pNLSF_Q15,             /* I/O  Quantized NLSF vector [ LPC_ORDER ]     */
-    const SKP_Silk_NLSF_CB_struct   *psNLSF_CB,             /* I    Codebook object                         */
-    const SKP_int                   *pNLSF_q_Q15_prev,      /* I    Prev. quantized NLSF vector [LPC_ORDER] */
-    const SKP_int                   *pW_Q6,                 /* I    NLSF weight vector [ LPC_ORDER ]        */
-    const SKP_int                   NLSF_mu_Q15,            /* I    Rate weight for the RD optimization     */
-    const SKP_int                   NLSF_mu_fluc_red_Q16,   /* I    Fluctuation reduction error weight      */
-    const SKP_int                   NLSF_MSVQ_Survivors,    /* I    Max survivors from each stage           */
-    const SKP_int                   LPC_order,              /* I    LPC order                               */
-    const SKP_int                   deactivate_fluc_red     /* I    Deactivate fluctuation reduction        */
-);
-
-/* Rate-Distortion calculations for multiple input data vectors */
-void SKP_Silk_NLSF_VQ_rate_distortion_FIX(
-    SKP_int32                       *pRD_Q20,           /* O    Rate-distortion values [psNLSF_CBS->nVectors*N] */
-    const SKP_Silk_NLSF_CBS         *psNLSF_CBS,        /* I    NLSF codebook stage struct                      */
-    const SKP_int                   *in_Q15,            /* I    Input vectors to be quantized                   */
-    const SKP_int                   *w_Q6,              /* I    Weight vector                                   */
-    const SKP_int32                 *rate_acc_Q5,       /* I    Accumulated rates from previous stage           */
-    const SKP_int                   mu_Q15,             /* I    Weight between weighted error and rate          */
-    const SKP_int                   N,                  /* I    Number of input vectors to be quantized         */
-    const SKP_int                   LPC_order           /* I    LPC order                                       */
-);
-
-/* Compute weighted quantization errors for an LPC_order element input vector, over one codebook stage */
-void SKP_Silk_NLSF_VQ_sum_error_FIX(
-    SKP_int32                       *err_Q20,           /* O    Weighted quantization errors  [N*K]         */
-    const SKP_int                   *in_Q15,            /* I    Input vectors to be quantized [N*LPC_order] */
-    const SKP_int                   *w_Q6,              /* I    Weighting vectors             [N*LPC_order] */
-    const SKP_int16                 *pCB_Q15,           /* I    Codebook vectors              [K*LPC_order] */
-    const SKP_int                   N,                  /* I    Number of input vectors                     */
-    const SKP_int                   K,                  /* I    Number of codebook vectors                  */
-    const SKP_int                   LPC_order           /* I    Number of LPCs                              */
-);
-
-/* Entropy constrained MATRIX-weighted VQ, for a single input data vector */
-void SKP_Silk_VQ_WMat_EC_FIX(
-    SKP_int                         *ind,               /* O    index of best codebook vector               */
-    SKP_int32                       *rate_dist_Q14,     /* O    best weighted quantization error + mu * rate*/
-    const SKP_int16                 *in_Q14,            /* I    input vector to be quantized                */
-    const SKP_int32                 *W_Q18,             /* I    weighting matrix                            */
-    const SKP_int16                 *cb_Q14,            /* I    codebook                                    */
-    const SKP_int16                 *cl_Q6,             /* I    code length for each codebook vector        */
-    const SKP_int                   mu_Q8,              /* I    tradeoff between weighted error and rate    */
-    SKP_int                         L                   /* I    number of vectors in codebook               */
-);
-
-/******************/
-/* Linear Algebra */
-/******************/
-
-/* Calculates correlation matrix X'*X */
-void SKP_Silk_corrMatrix_FIX(
-    const SKP_int16                 *x,         /* I    x vector [L + order - 1] used to form data matrix X */
-    const SKP_int                   L,          /* I    Length of vectors                                   */
-    const SKP_int                   order,      /* I    Max lag for correlation                             */
-    SKP_int32                       *XX,        /* O    Pointer to X'*X correlation matrix [ order x order ]*/
-    SKP_int                         *rshifts    /* I/O  Right shifts of correlations                        */
-);
-
-/* Calculates correlation vector X'*t */
-void SKP_Silk_corrVector_FIX(
-    const SKP_int16                 *x,         /* I    x vector [L + order - 1] used to form data matrix X */
-    const SKP_int16                 *t,         /* I    target vector [L]                                   */
-    const SKP_int                   L,          /* I    Length of vectors                                   */
-    const SKP_int                   order,      /* I    Max lag for correlation                             */
-    SKP_int32                       *Xt,        /* O    Pointer to X'*t correlation vector [order]          */
-    const SKP_int                   rshifts     /* I    Right shifts of correlations                        */
-);
-
-/* Add noise to matrix diagonal */
-void SKP_Silk_regularize_correlations_FIX(
-    SKP_int32                       *XX,                /* I/O  Correlation matrices                        */
-    SKP_int32                       *xx,                /* I/O  Correlation values                          */
-    SKP_int32                       noise,              /* I    Noise to add                                */
-    SKP_int                         D                   /* I    Dimension of XX                             */
-);
-
-/* Solves Ax = b, assuming A is symmetric */
-void SKP_Silk_solve_LDL_FIX(
-    SKP_int32                       *A,                 /* I    Pointer to symetric square matrix A         */
-    SKP_int                         M,                  /* I    Size of matrix                              */
-    const SKP_int32                 *b,                 /* I    Pointer to b vector                         */
-    SKP_int32                       *x_Q16              /* O    Pointer to x solution vector                */
-);
-
-/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */
-SKP_int32 SKP_Silk_residual_energy16_covar_FIX(
-    const SKP_int16                 *c,                 /* I    Prediction vector                           */
-    const SKP_int32                 *wXX,               /* I    Correlation matrix                          */
-    const SKP_int32                 *wXx,               /* I    Correlation vector                          */
-    SKP_int32                       wxx,                /* I    Signal energy                               */
-    SKP_int                         D,                  /* I    Dimension                                   */
-    SKP_int                         cQ                  /* I    Q value for c vector 0 - 15                 */
-);
-
-/* Calculates residual energies of input subframes where all subframes have LPC_order   */
-/* of preceeding samples                                                                */
-void SKP_Silk_residual_energy_FIX(
-          SKP_int32 nrgs[ NB_SUBFR ],           /* O    Residual energy per subframe    */
-          SKP_int   nrgsQ[ NB_SUBFR ],          /* O    Q value per subframe            */
-    const SKP_int16 x[],                        /* I    Input signal                    */
-    const SKP_int16 a_Q12[ 2 ][ MAX_LPC_ORDER ],/* I    AR coefs for each frame half    */
-    const SKP_int32 gains_Qx[ NB_SUBFR ],       /* I    Quantization gains in Qx        */
-    const SKP_int   Qx,                         /* I    Quantization gains Q value      */
-    const SKP_int   subfr_length,               /* I    Subframe length                 */
-    const SKP_int   LPC_order                   /* I    LPC order                       */
-);
-
-#ifndef FORCE_CPP_BUILD
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* FORCE_CPP_BUILD */
-#endif /* SKP_SILK_MAIN_FIX_H */
--- a/src/SKP_Silk_noise_shape_analysis_FIX.c
+++ /dev/null
@@ -1,338 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-#include "SKP_Silk_perceptual_parameters_FIX.h"
-
-
-/**************************************************************/
-/* Compute noise shaping coefficients and initial gain values */
-/**************************************************************/
-void SKP_Silk_noise_shape_analysis_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  Encoder state FIX                           */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  Encoder control FIX                         */
-    const SKP_int16                 *pitch_res,     /* I    LPC residual from pitch analysis            */
-    const SKP_int16                 *x              /* I    Input signal [ 2 * frame_length + la_shape ]*/
-)
-{
-    SKP_Silk_shape_state_FIX *psShapeSt = &psEnc->sShape;
-    SKP_int     k, nSamples, lz, Qnrg, b_Q14, scale = 0, sz;
-    SKP_int32   SNR_adj_dB_Q7, HarmBoost_Q16, HarmShapeGain_Q16, Tilt_Q16, tmp32;
-    SKP_int32   nrg, pre_nrg_Q30, log_energy_Q7, log_energy_prev_Q7, energy_variation_Q7;
-    SKP_int32   delta_Q16, BWExp1_Q16, BWExp2_Q16, gain_mult_Q16, gain_add_Q16, strength_Q16, b_Q8;
-    SKP_int32   auto_corr[     SHAPE_LPC_ORDER_MAX + 1 ];
-    SKP_int32   refl_coef_Q16[ SHAPE_LPC_ORDER_MAX ];
-    SKP_int32   AR_Q24[        SHAPE_LPC_ORDER_MAX ];
-    SKP_int16   x_windowed[    SHAPE_LPC_WIN_MAX ];
-    const SKP_int16 *x_ptr, *pitch_res_ptr;
-
-    SKP_int32   sqrt_nrg[ NB_SUBFR ], Qnrg_vec[ NB_SUBFR ];
-
-    /* Point to start of first LPC analysis block */
-    x_ptr = x + psEnc->sCmn.la_shape - SKP_SMULBB( SHAPE_LPC_WIN_MS, psEnc->sCmn.fs_kHz ) + psEnc->sCmn.frame_length / NB_SUBFR;
-
-    /****************/
-    /* CONTROL SNR  */
-    /****************/
-    /* Reduce SNR_dB values if recent bitstream has exceeded TargetRate */
-    psEncCtrl->current_SNR_dB_Q7 = psEnc->SNR_dB_Q7 - SKP_SMULWB( SKP_LSHIFT( ( SKP_int32 )psEnc->BufferedInChannel_ms, 7 ), 3277 );
-
-    /* Reduce SNR_dB if inband FEC used */
-    if( psEnc->speech_activity_Q8 > LBRR_SPEECH_ACTIVITY_THRES_Q8 ) {
-        psEncCtrl->current_SNR_dB_Q7 -= SKP_RSHIFT( psEnc->inBandFEC_SNR_comp_Q8, 1 );
-    }
-
-    /****************/
-    /* GAIN CONTROL */
-    /****************/
-    /* Input quality is the average of the quality in the lowest two VAD bands */
-    psEncCtrl->input_quality_Q14 = ( SKP_int )SKP_RSHIFT( ( SKP_int32 )psEncCtrl->input_quality_bands_Q15[ 0 ] 
-        + psEncCtrl->input_quality_bands_Q15[ 1 ], 2 );
-    /* Coding quality level, between 0.0_Q0 and 1.0_Q0, but in Q14 */
-    psEncCtrl->coding_quality_Q14 = SKP_RSHIFT( SKP_Silk_sigm_Q15( SKP_RSHIFT_ROUND( psEncCtrl->current_SNR_dB_Q7 - ( 18 << 7 ), 4 ) ), 1 );
-
-    /* Reduce coding SNR during low speech activity */
-    b_Q8 = ( 1 << 8 ) - psEnc->speech_activity_Q8;
-    b_Q8 = SKP_SMULWB( SKP_LSHIFT( b_Q8, 8 ), b_Q8 );
-    SNR_adj_dB_Q7 = SKP_SMLAWB( psEncCtrl->current_SNR_dB_Q7,
-        SKP_SMULBB( -BG_SNR_DECR_dB_Q7 >> ( 4 + 1 ), b_Q8 ),                                            // Q11
-        SKP_SMULWB( ( 1 << 14 ) + psEncCtrl->input_quality_Q14, psEncCtrl->coding_quality_Q14 ) );      // Q12
-
-    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
-        /* Reduce gains for periodic signals */
-        SNR_adj_dB_Q7 = SKP_SMLAWB( SNR_adj_dB_Q7, HARM_SNR_INCR_dB_Q7 << 1, psEnc->LTPCorr_Q15 );
-    } else { 
-        /* For unvoiced signals and low-quality input, adjust the quality slower than SNR_dB setting */
-        SNR_adj_dB_Q7 = SKP_SMLAWB( SNR_adj_dB_Q7, 
-            SKP_SMLAWB( 6 << ( 7 + 2 ), -104856, psEncCtrl->current_SNR_dB_Q7 ),    //-104856_Q18 = -0.4_Q0, Q9
-            ( 1 << 14 ) - psEncCtrl->input_quality_Q14 );                           // Q14
-    }
-
-    /*************************/
-    /* SPARSENESS PROCESSING */
-    /*************************/
-    /* Set quantizer offset */
-    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
-        /* Initally set to 0; may be overruled in process_gains(..) */
-        psEncCtrl->sCmn.QuantOffsetType = 0;
-        psEncCtrl->sparseness_Q8 = 0;
-    } else {
-        /* Sparseness measure, based on relative fluctuations of energy per 2 milliseconds */
-        nSamples = SKP_LSHIFT( psEnc->sCmn.fs_kHz, 1 );
-        energy_variation_Q7 = 0;
-        log_energy_prev_Q7  = 0;
-        pitch_res_ptr = pitch_res;
-        for( k = 0; k < FRAME_LENGTH_MS / 2; k++ ) {    
-            SKP_Silk_sum_sqr_shift( &nrg, &scale, pitch_res_ptr, nSamples );
-            nrg += SKP_RSHIFT( nSamples, scale );           // Q(-scale)
-            
-            log_energy_Q7 = SKP_Silk_lin2log( nrg );
-            if( k > 0 ) {
-                energy_variation_Q7 += SKP_abs( log_energy_Q7 - log_energy_prev_Q7 );
-            }
-            log_energy_prev_Q7 = log_energy_Q7;
-            pitch_res_ptr += nSamples;
-        }
-
-        psEncCtrl->sparseness_Q8 = SKP_RSHIFT( SKP_Silk_sigm_Q15( SKP_SMULWB( energy_variation_Q7 - ( 5 << 7 ), 6554 ) ), 7 );    // 6554_Q16 = 0.1_Q0
-
-        /* Set quantization offset depending on sparseness measure */
-        if( psEncCtrl->sparseness_Q8 > SPARSENESS_THRESHOLD_QNT_OFFSET_Q8 ) {
-            psEncCtrl->sCmn.QuantOffsetType = 0;
-        } else {
-            psEncCtrl->sCmn.QuantOffsetType = 1;
-        }
-        
-        /* Increase coding SNR for sparse signals */
-        SNR_adj_dB_Q7 = SKP_SMLAWB( SNR_adj_dB_Q7, SPARSE_SNR_INCR_dB_Q7 << 8, psEncCtrl->sparseness_Q8 - ( 1 << 7 ) );
-    }
-
-    /*******************************/
-    /* Control bandwidth expansion */
-    /*******************************/
-    delta_Q16  = SKP_SMULWB( ( 1 << 16 ) - SKP_SMULBB( 3, psEncCtrl->coding_quality_Q14 ), LOW_RATE_BANDWIDTH_EXPANSION_DELTA_Q16 );
-    BWExp1_Q16 = BANDWIDTH_EXPANSION_Q16 - delta_Q16;
-    BWExp2_Q16 = BANDWIDTH_EXPANSION_Q16 + delta_Q16;
-    if( psEnc->sCmn.fs_kHz == 24 ) {
-        /* Less bandwidth expansion for super wideband */
-        BWExp1_Q16 = ( 1 << 16 ) - SKP_SMULWB( SWB_BANDWIDTH_EXPANSION_REDUCTION_Q16, ( 1 << 16 ) - BWExp1_Q16 );
-        BWExp2_Q16 = ( 1 << 16 ) - SKP_SMULWB( SWB_BANDWIDTH_EXPANSION_REDUCTION_Q16, ( 1 << 16 ) - BWExp2_Q16 );
-    }
-    /* BWExp1 will be applied after BWExp2, so make it relative */
-    BWExp1_Q16 = SKP_DIV32_16( SKP_LSHIFT( BWExp1_Q16, 14 ), SKP_RSHIFT( BWExp2_Q16, 2 ) );
-
-    /********************************************/
-    /* Compute noise shaping AR coefs and gains */
-    /********************************************/
-    sz = ( SKP_int )SKP_SMULBB( SHAPE_LPC_WIN_MS, psEnc->sCmn.fs_kHz );
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        /* Apply window */
-        SKP_Silk_apply_sine_window( x_windowed, x_ptr, 0, SHAPE_LPC_WIN_MS * psEnc->sCmn.fs_kHz );
-
-        /* Update pointer: next LPC analysis block */
-        x_ptr += psEnc->sCmn.frame_length / NB_SUBFR;
-
-        /* Calculate auto correlation */
-        SKP_Silk_autocorr( auto_corr, &scale, x_windowed, sz, psEnc->sCmn.shapingLPCOrder + 1 );
-
-        /* Add white noise, as a fraction of energy */
-        auto_corr[0] = SKP_ADD32( auto_corr[0], SKP_max_32( SKP_SMULWB( SKP_RSHIFT( auto_corr[ 0 ], 4 ), SHAPE_WHITE_NOISE_FRACTION_Q20 ), 1 ) ); 
-
-        /* Calculate the reflection coefficients using schur */
-        nrg = SKP_Silk_schur64( refl_coef_Q16, auto_corr, psEnc->sCmn.shapingLPCOrder );
-
-        /* Convert reflection coefficients to prediction coefficients */
-        SKP_Silk_k2a_Q16( AR_Q24, refl_coef_Q16, psEnc->sCmn.shapingLPCOrder );
-
-        /* Bandwidth expansion for synthesis filter shaping */
-        SKP_Silk_bwexpander_32( AR_Q24, psEnc->sCmn.shapingLPCOrder, BWExp2_Q16 );
-
-        /* Make sure to fit in Q13 SKP_int16 */
-        SKP_Silk_LPC_fit( &psEncCtrl->AR2_Q13[ k * SHAPE_LPC_ORDER_MAX ], AR_Q24, 13, psEnc->sCmn.shapingLPCOrder );
-
-        /* Compute noise shaping filter coefficients */
-        SKP_memcpy(
-            &psEncCtrl->AR1_Q13[ k * SHAPE_LPC_ORDER_MAX ], 
-            &psEncCtrl->AR2_Q13[ k * SHAPE_LPC_ORDER_MAX ], 
-            psEnc->sCmn.shapingLPCOrder * sizeof( SKP_int16 ) );
-
-        /* Bandwidth expansion for analysis filter shaping */
-        SKP_assert( BWExp1_Q16 <= ( 1 << 16 ) ); // If ever breaking, use LPC_stabilize() in these cases to stay within range
-        SKP_Silk_bwexpander( &psEncCtrl->AR1_Q13[ k * SHAPE_LPC_ORDER_MAX ], psEnc->sCmn.shapingLPCOrder, BWExp1_Q16 );
-
-        /* Increase residual energy */
-        nrg = SKP_SMLAWB( nrg, SKP_RSHIFT( auto_corr[ 0 ], 8 ), SHAPE_MIN_ENERGY_RATIO_Q24 );
-
-        Qnrg = -scale;          // range: -12...30
-        SKP_assert( Qnrg >= -12 );
-        SKP_assert( Qnrg <=  30 );
-
-        /* Make sure that Qnrg is an even number */
-        if( Qnrg & 1 ) {
-            Qnrg -= 1;
-            nrg >>= 1;
-        }
-
-        tmp32 = SKP_Silk_SQRT_APPROX( nrg );
-        Qnrg >>= 1;             // range: -6...15
-
-        sqrt_nrg[ k ] = tmp32;
-        Qnrg_vec[ k ] = Qnrg;
-
-        psEncCtrl->Gains_Q16[ k ] = SKP_LSHIFT_SAT32( tmp32, 16 - Qnrg );
-        /* Ratio of prediction gains, in energy domain */
-        SKP_Silk_LPC_inverse_pred_gain_Q13( &pre_nrg_Q30, &psEncCtrl->AR2_Q13[ k * SHAPE_LPC_ORDER_MAX ], psEnc->sCmn.shapingLPCOrder );
-        SKP_Silk_LPC_inverse_pred_gain_Q13( &nrg,         &psEncCtrl->AR1_Q13[ k * SHAPE_LPC_ORDER_MAX ], psEnc->sCmn.shapingLPCOrder );
-
-        lz = SKP_min_32( SKP_Silk_CLZ32( pre_nrg_Q30 ) - 1, 19 );
-        pre_nrg_Q30 = SKP_DIV32( SKP_LSHIFT( pre_nrg_Q30, lz ), SKP_RSHIFT( nrg, 20 - lz ) + 1 ); // Q20
-        pre_nrg_Q30 = SKP_RSHIFT( SKP_LSHIFT_SAT32( pre_nrg_Q30, 9 ), 1 );  /* Q28 */
-        psEncCtrl->GainsPre_Q14[ k ] = ( SKP_int )SKP_Silk_SQRT_APPROX( pre_nrg_Q30 );
-    }
-
-    /*****************/
-    /* Gain tweaking */
-    /*****************/
-    /* Increase gains during low speech activity and put lower limit on gains */
-    gain_mult_Q16 = SKP_Silk_log2lin( -SKP_SMLAWB( -16 << 7, SNR_adj_dB_Q7,           10486 ) ); // 10486_Q16 = 0.16_Q0
-    gain_add_Q16  = SKP_Silk_log2lin(  SKP_SMLAWB(  16 << 7, NOISE_FLOOR_dB_Q7,       10486 ) ); // 10486_Q16 = 0.16_Q0
-    tmp32         = SKP_Silk_log2lin(  SKP_SMLAWB(  16 << 7, RELATIVE_MIN_GAIN_dB_Q7, 10486 ) ); // 10486_Q16 = 0.16_Q0
-    tmp32 = SKP_SMULWW( psEnc->avgGain_Q16, tmp32 );
-    gain_add_Q16 = SKP_ADD_SAT32( gain_add_Q16, tmp32 );
-    SKP_assert( gain_mult_Q16 >= 0 );
-
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        psEncCtrl->Gains_Q16[ k ] = SKP_SMULWW( psEncCtrl->Gains_Q16[ k ], gain_mult_Q16 );
-        SKP_assert( psEncCtrl->Gains_Q16[ k ] >= 0 );
-    }
-
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        psEncCtrl->Gains_Q16[ k ] = SKP_ADD_POS_SAT32( psEncCtrl->Gains_Q16[ k ], gain_add_Q16 );
-        psEnc->avgGain_Q16 = SKP_ADD_SAT32( 
-            psEnc->avgGain_Q16, 
-            SKP_SMULWB(
-                psEncCtrl->Gains_Q16[ k ] - psEnc->avgGain_Q16, 
-                SKP_RSHIFT_ROUND( SKP_SMULBB( psEnc->speech_activity_Q8, GAIN_SMOOTHING_COEF_Q10 ), 2 ) 
-            ) );
-    }
-
-    /************************************************/
-    /* Decrease level during fricatives (de-essing) */
-    /************************************************/
-    gain_mult_Q16 = ( 1 << 16 ) + SKP_RSHIFT_ROUND( SKP_MLA( INPUT_TILT_Q26, psEncCtrl->coding_quality_Q14, HIGH_RATE_INPUT_TILT_Q12 ), 10 );
-
-    if( psEncCtrl->input_tilt_Q15 <= 0 && psEncCtrl->sCmn.sigtype == SIG_TYPE_UNVOICED ) {
-        if( psEnc->sCmn.fs_kHz == 24 ) {
-            SKP_int32 essStrength_Q15 = SKP_SMULWW( -psEncCtrl->input_tilt_Q15, 
-                SKP_SMULBB( psEnc->speech_activity_Q8, ( 1 << 8 ) - psEncCtrl->sparseness_Q8 ) );
-            tmp32 = SKP_Silk_log2lin( ( 16 << 7 ) - SKP_SMULWB( essStrength_Q15, 
-                SKP_SMULWB( DE_ESSER_COEF_SWB_dB_Q7, 20972 ) ) ); // 20972_Q17 = 0.16_Q0
-            gain_mult_Q16 = SKP_SMULWW( gain_mult_Q16, tmp32 );
-        } else if( psEnc->sCmn.fs_kHz == 16 ) {
-            SKP_int32 essStrength_Q15 = SKP_SMULWW(-psEncCtrl->input_tilt_Q15, 
-                SKP_SMULBB( psEnc->speech_activity_Q8, ( 1 << 8 ) - psEncCtrl->sparseness_Q8 ));
-            tmp32 = SKP_Silk_log2lin( ( 16 << 7 ) - SKP_SMULWB( essStrength_Q15, 
-                SKP_SMULWB( DE_ESSER_COEF_WB_dB_Q7, 20972 ) ) ); // 20972_Q17 = 0.16_Q0
-            gain_mult_Q16 = SKP_SMULWW( gain_mult_Q16, tmp32 );
-        } else {
-            SKP_assert( psEnc->sCmn.fs_kHz == 12 || psEnc->sCmn.fs_kHz == 8 );
-        }
-    }
-
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        psEncCtrl->GainsPre_Q14[ k ] = SKP_SMULWB( gain_mult_Q16, psEncCtrl->GainsPre_Q14[ k ] );
-    }
-
-    /************************************************/
-    /* Control low-frequency shaping and noise tilt */
-    /************************************************/
-    /* Less low frequency shaping for noisy inputs */
-    strength_Q16 = SKP_MUL( LOW_FREQ_SHAPING_Q0, ( 1 << 16 ) + SKP_SMULBB( LOW_QUALITY_LOW_FREQ_SHAPING_DECR_Q1, psEncCtrl->input_quality_bands_Q15[ 0 ] - ( 1 << 15 ) ) );
-    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
-        /* Reduce low frequencies quantization noise for periodic signals, depending on pitch lag */
-        /*f = 400; freqz([1, -0.98 + 2e-4 * f], [1, -0.97 + 7e-4 * f], 2^12, Fs); axis([0, 1000, -10, 1])*/
-        SKP_int fs_kHz_inv = SKP_DIV32_16( 3277, psEnc->sCmn.fs_kHz );      // 0.2_Q0 = 3277_Q14
-        for( k = 0; k < NB_SUBFR; k++ ) {
-            b_Q14 = fs_kHz_inv + SKP_DIV32_16( ( 3 << 14 ), psEncCtrl->sCmn.pitchL[ k ] ); 
-            /* Pack two coefficients in one int32 */
-            psEncCtrl->LF_shp_Q14[ k ]  = SKP_LSHIFT( ( 1 << 14 ) - b_Q14 - SKP_SMULWB( strength_Q16, b_Q14 ), 16 );
-            psEncCtrl->LF_shp_Q14[ k ] |= (SKP_uint16)( b_Q14 - ( 1 << 14 ) );
-        }
-        SKP_assert( HARM_HP_NOISE_COEF_Q24 < ( 1 << 23 ) ); // Guarantees that second argument to SMULWB() is within range of an SKP_int16
-        Tilt_Q16 = - HP_NOISE_COEF_Q16 - 
-            SKP_SMULWB( ( 1 << 16 ) - HP_NOISE_COEF_Q16, SKP_SMULWB( HARM_HP_NOISE_COEF_Q24, psEnc->speech_activity_Q8 ) );
-    } else {
-        b_Q14 = SKP_DIV32_16( 21299, psEnc->sCmn.fs_kHz ); // 1.3_Q0 = 21299_Q14
-        /* Pack two coefficients in one int32 */
-        psEncCtrl->LF_shp_Q14[ 0 ]  = SKP_LSHIFT( ( 1 << 14 ) - b_Q14 - SKP_SMULWB( strength_Q16, SKP_SMULWB( 39322, b_Q14 ) ), 16 ); // 0.6_Q0 = 39322_Q16
-        psEncCtrl->LF_shp_Q14[ 0 ] |= (SKP_uint16)( b_Q14 - ( 1 << 14 ) );
-        for( k = 1; k < NB_SUBFR; k++ ) {
-            psEncCtrl->LF_shp_Q14[ k ] = psEncCtrl->LF_shp_Q14[ k - 1 ];
-        }
-        Tilt_Q16 = -HP_NOISE_COEF_Q16;
-    }
-
-    /****************************/
-    /* HARMONIC SHAPING CONTROL */
-    /****************************/
-    /* Control boosting of harmonic frequencies */
-    HarmBoost_Q16 = SKP_SMULWB( SKP_SMULWB( ( 1 << 17 ) - SKP_LSHIFT( psEncCtrl->coding_quality_Q14, 3 ), 
-        psEnc->LTPCorr_Q15 ), LOW_RATE_HARMONIC_BOOST_Q16 );
-
-    /* More harmonic boost for noisy input signals */
-    HarmBoost_Q16 = SKP_SMLAWB( HarmBoost_Q16, 
-        ( 1 << 16 ) - SKP_LSHIFT( psEncCtrl->input_quality_Q14, 2 ), LOW_INPUT_QUALITY_HARMONIC_BOOST_Q16 );
-
-    if( USE_HARM_SHAPING && psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
-        /* More harmonic noise shaping for high bitrates or noisy input */
-        HarmShapeGain_Q16 = SKP_SMLAWB( HARMONIC_SHAPING_Q16, 
-                ( 1 << 16 ) - SKP_SMULWB( ( 1 << 18 ) - SKP_LSHIFT( psEncCtrl->coding_quality_Q14, 4 ),
-                psEncCtrl->input_quality_Q14 ), HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING_Q16 );
-
-        /* Less harmonic noise shaping for less periodic signals */
-        HarmShapeGain_Q16 = SKP_SMULWB( SKP_LSHIFT( HarmShapeGain_Q16, 1 ), 
-            SKP_Silk_SQRT_APPROX( SKP_LSHIFT( psEnc->LTPCorr_Q15, 15 ) ) );
-    } else {
-        HarmShapeGain_Q16 = 0;
-    }
-
-    /*************************/
-    /* Smooth over subframes */
-    /*************************/
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        psShapeSt->HarmBoost_smth_Q16 =
-            SKP_SMLAWB( psShapeSt->HarmBoost_smth_Q16,     HarmBoost_Q16     - psShapeSt->HarmBoost_smth_Q16,     SUBFR_SMTH_COEF_Q16 );
-        psShapeSt->HarmShapeGain_smth_Q16 =
-            SKP_SMLAWB( psShapeSt->HarmShapeGain_smth_Q16, HarmShapeGain_Q16 - psShapeSt->HarmShapeGain_smth_Q16, SUBFR_SMTH_COEF_Q16 );
-        psShapeSt->Tilt_smth_Q16 =
-            SKP_SMLAWB( psShapeSt->Tilt_smth_Q16,          Tilt_Q16          - psShapeSt->Tilt_smth_Q16,          SUBFR_SMTH_COEF_Q16 );
-
-        psEncCtrl->HarmBoost_Q14[ k ]     = ( SKP_int )SKP_RSHIFT_ROUND( psShapeSt->HarmBoost_smth_Q16,     2 );
-        psEncCtrl->HarmShapeGain_Q14[ k ] = ( SKP_int )SKP_RSHIFT_ROUND( psShapeSt->HarmShapeGain_smth_Q16, 2 );
-        psEncCtrl->Tilt_Q14[ k ]          = ( SKP_int )SKP_RSHIFT_ROUND( psShapeSt->Tilt_smth_Q16,          2 );
-    }
-}
--- a/src/SKP_Silk_perceptual_parameters_FIX.h
+++ /dev/null
@@ -1,121 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef SKP_SILK_PERCEPTUAL_PARAMETERS_FIX_H
-#define SKP_SILK_PERCEPTUAL_PARAMETERS_FIX_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* reduction in coding SNR during low speech activity */
-#define BG_SNR_DECR_dB_Q7                               (3<<7)
-
-/* factor for reducing quantization noise during voiced speech */
-#define HARM_SNR_INCR_dB_Q7                             (2<<7)
-
-/* factor for reducing quantization noise for unvoiced sparse signals */
-#define SPARSE_SNR_INCR_dB_Q7                           (2<<7)
-
-/* threshold for sparseness measure above which to use lower quantization offset during unvoiced */
-#define SPARSENESS_THRESHOLD_QNT_OFFSET_Q8              (3<<6) // 0.75
-
-
-/* noise shaping filter chirp factor */
-#define BANDWIDTH_EXPANSION_Q16                         61604 // 0.94
-
-/* difference between chirp factors for analysis and synthesis noise shaping filters at low bitrates */
-#define LOW_RATE_BANDWIDTH_EXPANSION_DELTA_Q16          655 //0.01f
-
-/* factor to reduce all bandwidth expansion coefficients for super wideband, relative to wideband */
-#define SWB_BANDWIDTH_EXPANSION_REDUCTION_Q16           (1<<16) // 1.0f;
-
-/* gain reduction for fricatives */
-#define DE_ESSER_COEF_SWB_dB_Q7                         (2 << 7)
-#define DE_ESSER_COEF_WB_dB_Q7                          (1 << 7)
-
-
-/* extra harmonic boosting (signal shaping) at low bitrates */
-#define LOW_RATE_HARMONIC_BOOST_Q16                     6554 // 0.1
-
-/* extra harmonic boosting (signal shaping) for noisy input signals */
-#define LOW_INPUT_QUALITY_HARMONIC_BOOST_Q16            6554 // 0.1
-
-/* harmonic noise shaping */
-#define HARMONIC_SHAPING_Q16                            19661 // 0.3
-
-/* extra harmonic noise shaping for high bitrates or noisy input */
-#define HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING_Q16   13107 // 0.2
-
-
-/* parameter for shaping noise towards higher frequencies */
-#define HP_NOISE_COEF_Q16                               19661 // 0.3
-
-/* parameter for shaping noise extra towards higher frequencies during voiced speech */
-#define HARM_HP_NOISE_COEF_Q24                          7549747 // 0.45
-
-/* parameter for applying a high-pass tilt to the input signal */
-#define INPUT_TILT_Q26                                  2684355 // 0.04
-
-/* parameter for extra high-pass tilt to the input signal at high rates */
-#define HIGH_RATE_INPUT_TILT_Q12                        246 // 0.06
-
-/* parameter for reducing noise at the very low frequencies */
-#define LOW_FREQ_SHAPING_Q0                             3
-
-/* less reduction of noise at the very low frequencies for signals with low SNR at low frequencies */
-#define LOW_QUALITY_LOW_FREQ_SHAPING_DECR_Q1            1 // 0.5_Q0
-
-/* fraction added to first autocorrelation value */
-#define SHAPE_WHITE_NOISE_FRACTION_Q20                  50 // 50_Q20 = 4.7684e-5
-
-/* fraction of first autocorrelation value added to residual energy value; limits prediction gain */
-#define SHAPE_MIN_ENERGY_RATIO_Q24                      256
-
-/* noise floor to put a low limit on the quantization step size */
-#define NOISE_FLOOR_dB_Q7                               (4 << 7)
-
-/* noise floor relative to active speech gain level */
-#define RELATIVE_MIN_GAIN_dB_Q7                         -6400 // -50_Q0 = -6400_Q7
-
-/* subframe smoothing coefficient for determining active speech gain level (lower -> more smoothing) */
-#define GAIN_SMOOTHING_COEF_Q10                         1 // 1e-3_Q0 = 1.024_Q10
-
-/* subframe smoothing coefficient for HarmBoost, HarmShapeGain, Tilt (lower -> more smoothing) */
-#define SUBFR_SMTH_COEF_Q16                             26214 // 0.4
-
-#define NOISE_GAIN_VL_Q16                               7864
-#define NOISE_GAIN_VH_Q16                               7864
-#define NOISE_GAIN_UVL_Q16                              6554
-#define NOISE_GAIN_UVH_Q16                              9830
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //SKP_SILK_PERCEPTUAL_PARAMETERS_FIX_H
--- a/src/SKP_Silk_pitch_analysis_core.c
+++ /dev/null
@@ -1,747 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/***********************************************************
-* Pitch analyser function
-********************************************************** */
-#include "SKP_Silk_SigProc_FIX.h"
-#include "SKP_Silk_pitch_est_defines.h"
-#include "SKP_Silk_resample_rom.h"
-
-#define SCRATCH_SIZE    22
-
-/************************************************************/
-/* Internally used functions                                */
-/************************************************************/
-void SKP_FIX_P_Ana_calc_corr_st3(
-    SKP_int32        cross_corr_st3[PITCH_EST_NB_SUBFR][PITCH_EST_NB_CBKS_STAGE3_MAX][PITCH_EST_NB_STAGE3_LAGS],/* (O) 3 DIM correlation array */
-    const SKP_int16  signal[],                        /* I vector to correlate         */
-    SKP_int          start_lag,                       /* I lag offset to search around */
-    SKP_int          sf_length,                       /* I length of a 5 ms subframe   */
-    SKP_int          complexity                       /* I Complexity setting          */
-);
-
-void SKP_FIX_P_Ana_calc_energy_st3(
-    SKP_int32        energies_st3[PITCH_EST_NB_SUBFR][PITCH_EST_NB_CBKS_STAGE3_MAX][PITCH_EST_NB_STAGE3_LAGS],/* (O) 3 DIM energy array */
-    const SKP_int16  signal[],                        /* I vector to calc energy in    */
-    SKP_int          start_lag,                       /* I lag offset to search around */
-    SKP_int          sf_length,                       /* I length of one 5 ms subframe */
-    SKP_int          complexity                       /* I Complexity setting          */
-);
-
-SKP_int32 SKP_FIX_P_Ana_find_scaling(
-    const SKP_int16  *signal,
-    const SKP_int    signal_length, 
-    const SKP_int    sum_sqr_len
-);
-
-void SKP_Silk_decode_pitch(
-    SKP_int          lagIndex,                        /* I                             */
-    SKP_int          contourIndex,                    /* O                             */
-    SKP_int          pitch_lags[],                    /* O 4 pitch values              */
-    SKP_int          Fs_kHz                           /* I sampling frequency (kHz)    */
-)
-{
-    SKP_int lag, i, min_lag;
-
-    min_lag = SKP_SMULBB( PITCH_EST_MIN_LAG_MS, Fs_kHz );
-
-    /* Only for 24 / 16 kHz version for now */
-    lag = min_lag + lagIndex;
-    if( Fs_kHz == 8 ) {
-        /* Only a small codebook for 8 khz */
-        for( i = 0; i < PITCH_EST_NB_SUBFR; i++ ) {
-            pitch_lags[ i ] = lag + SKP_Silk_CB_lags_stage2[ i ][ contourIndex ];
-        }
-    } else {
-        for( i = 0; i < PITCH_EST_NB_SUBFR; i++ ) {
-            pitch_lags[ i ] = lag + SKP_Silk_CB_lags_stage3[ i ][ contourIndex ];
-        }
-    }
-}
-
-/*************************************************************/
-/*      FIXED POINT CORE PITCH ANALYSIS FUNCTION             */
-/*************************************************************/
-SKP_int SKP_Silk_pitch_analysis_core(  /* O    Voicing estimate: 0 voiced, 1 unvoiced                      */
-    const SKP_int16  *signal,            /* I    Signal of length PITCH_EST_FRAME_LENGTH_MS*Fs_kHz           */
-    SKP_int          *pitch_out,         /* O    4 pitch lag values                                          */
-    SKP_int          *lagIndex,          /* O    Lag Index                                                   */
-    SKP_int          *contourIndex,      /* O    Pitch contour Index                                         */
-    SKP_int          *LTPCorr_Q15,       /* I/O  Normalized correlation; input: value from previous frame    */
-    SKP_int          prevLag,            /* I    Last lag of previous frame; set to zero is unvoiced         */
-    const SKP_int32  search_thres1_Q16,  /* I    First stage threshold for lag candidates 0 - 1              */
-    const SKP_int    search_thres2_Q15,  /* I    Final threshold for lag candidates 0 - 1                    */
-    const SKP_int    Fs_kHz,             /* I    Sample frequency (kHz)                                      */
-    const SKP_int    complexity          /* I    Complexity setting, 0-2, where 2 is highest                 */
-)
-{
-    SKP_int16 signal_8kHz[ PITCH_EST_MAX_FRAME_LENGTH_ST_2 ];
-    SKP_int16 signal_4kHz[ PITCH_EST_MAX_FRAME_LENGTH_ST_1 ];
-    SKP_int32 scratch_mem[ 3 * PITCH_EST_MAX_FRAME_LENGTH ];
-    SKP_int16 *input_signal_ptr;
-    SKP_int32 filt_state[ PITCH_EST_MAX_DECIMATE_STATE_LENGTH ];
-    SKP_int   i, k, d, j;
-    SKP_int16 C[ PITCH_EST_NB_SUBFR ][ ( PITCH_EST_MAX_LAG >> 1 ) + 5 ];
-    const SKP_int16 *target_ptr, *basis_ptr;
-    SKP_int32 cross_corr, normalizer, energy, shift, energy_basis, energy_target;
-    SKP_int   d_srch[ PITCH_EST_D_SRCH_LENGTH ];
-    SKP_int16 d_comp[ ( PITCH_EST_MAX_LAG >> 1 ) + 5 ];
-    SKP_int   Cmax, length_d_srch, length_d_comp;
-    SKP_int32 sum, threshold, temp32;
-    SKP_int   CBimax, CBimax_new, CBimax_old, lag, start_lag, end_lag, lag_new;
-    SKP_int32 CC[ PITCH_EST_NB_CBKS_STAGE2_EXT ], CCmax, CCmax_b, CCmax_new_b, CCmax_new;
-    SKP_int32 energies_st3[  PITCH_EST_NB_SUBFR ][ PITCH_EST_NB_CBKS_STAGE3_MAX ][ PITCH_EST_NB_STAGE3_LAGS ];
-    SKP_int32 crosscorr_st3[ PITCH_EST_NB_SUBFR ][ PITCH_EST_NB_CBKS_STAGE3_MAX ][ PITCH_EST_NB_STAGE3_LAGS ];
-    SKP_int32 lag_counter;
-    SKP_int   frame_length, frame_length_8kHz, frame_length_4kHz, max_sum_sq_length;
-    SKP_int   sf_length, sf_length_8kHz, sf_length_4kHz;
-    SKP_int   min_lag, min_lag_8kHz, min_lag_4kHz;
-    SKP_int   max_lag, max_lag_8kHz, max_lag_4kHz;
-    SKP_int32 contour_bias, diff;
-    SKP_int32 lz, lshift;
-    SKP_int   cbk_offset, cbk_size, nb_cbks_stage2;
-    SKP_int32 delta_lag_log2_sqr_Q7, lag_log2_Q7, prevLag_log2_Q7, prev_lag_bias_Q15, corr_thres_Q15;
-
-    /* Check for valid sampling frequency */
-    SKP_assert( Fs_kHz == 8 || Fs_kHz == 12 || Fs_kHz == 16 || Fs_kHz == 24 );
-
-    /* Check for valid complexity setting */
-    SKP_assert( complexity >= SigProc_PITCH_EST_MIN_COMPLEX );
-    SKP_assert( complexity <= SigProc_PITCH_EST_MAX_COMPLEX );
-
-    SKP_assert( search_thres1_Q16 >= 0 && search_thres1_Q16 <= (1<<16) );
-    SKP_assert( search_thres2_Q15 >= 0 && search_thres2_Q15 <= (1<<15) );
-
-    /* Setup frame lengths max / min lag for the sampling frequency */
-    frame_length      = PITCH_EST_FRAME_LENGTH_MS * Fs_kHz;
-    frame_length_4kHz = PITCH_EST_FRAME_LENGTH_MS * 4;
-    frame_length_8kHz = PITCH_EST_FRAME_LENGTH_MS * 8;
-    sf_length         = SKP_RSHIFT( frame_length,      3 );
-    sf_length_4kHz    = SKP_RSHIFT( frame_length_4kHz, 3 );
-    sf_length_8kHz    = SKP_RSHIFT( frame_length_8kHz, 3 );
-    min_lag           = PITCH_EST_MIN_LAG_MS * Fs_kHz;
-    min_lag_4kHz      = PITCH_EST_MIN_LAG_MS * 4;
-    min_lag_8kHz      = PITCH_EST_MIN_LAG_MS * 8;
-    max_lag           = PITCH_EST_MAX_LAG_MS * Fs_kHz;
-    max_lag_4kHz      = PITCH_EST_MAX_LAG_MS * 4;
-    max_lag_8kHz      = PITCH_EST_MAX_LAG_MS * 8;
-
-    SKP_memset( C, 0, sizeof( SKP_int16 ) * PITCH_EST_NB_SUBFR * ( ( PITCH_EST_MAX_LAG >> 1 ) + 5) );
-    
-    /* Resample from input sampled at Fs_kHz to 8 kHz */
-    if( Fs_kHz == 12 ) {
-        SKP_int16 R23[ SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ];
-        SKP_memset( R23, 0, ( SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ) * sizeof( SKP_int16 ) );
-        
-        SKP_Silk_resample_2_3_coarsest( signal_8kHz, R23, signal, 
-            PITCH_EST_FRAME_LENGTH_MS * 12, (SKP_int16*)scratch_mem );
-    } else if( Fs_kHz == 16 ) {
-        if( complexity == SigProc_PITCH_EST_MAX_COMPLEX ) {
-            SKP_assert( 4 <= PITCH_EST_MAX_DECIMATE_STATE_LENGTH );
-            SKP_memset( filt_state, 0, 4 * sizeof( SKP_int32 ) );
-
-            SKP_Silk_resample_1_2_coarse( signal, filt_state, signal_8kHz,
-                scratch_mem, frame_length_8kHz );
-        } else {
-            SKP_assert( 2 <= PITCH_EST_MAX_DECIMATE_STATE_LENGTH );
-            SKP_memset( filt_state, 0, 2 * sizeof( SKP_int32 ) );
-            
-            SKP_Silk_resample_1_2_coarsest( signal, filt_state, signal_8kHz,
-                scratch_mem, frame_length_8kHz );
-        }
-    } else if( Fs_kHz == 24 ) {
-        /* Resample to 24 -> 8 khz */
-        SKP_assert( 7 <= PITCH_EST_MAX_DECIMATE_STATE_LENGTH );
-        SKP_memset( filt_state, 0, 7 * sizeof( SKP_int32 ) );
-
-        SKP_Silk_resample_1_3( signal_8kHz, filt_state, signal, 24 * PITCH_EST_FRAME_LENGTH_MS );
-    
-    } else {
-        SKP_assert( Fs_kHz == 8 );
-        SKP_memcpy( signal_8kHz, signal, frame_length_8kHz * sizeof( SKP_int16 ) );
-    }
-
-    /* Decimate again to 4 kHz. Set mem to zero */
-    if( complexity == SigProc_PITCH_EST_MAX_COMPLEX ) {
-        SKP_assert( 4 <= PITCH_EST_MAX_DECIMATE_STATE_LENGTH );
-        SKP_memset( filt_state, 0, 4 * sizeof( SKP_int32 ) );    
-        SKP_Silk_resample_1_2_coarse( signal_8kHz, filt_state,
-            signal_4kHz, scratch_mem, frame_length_4kHz );
-    } else {
-        SKP_assert( 2 <= PITCH_EST_MAX_DECIMATE_STATE_LENGTH );
-        SKP_memset( filt_state, 0, 2 * sizeof( SKP_int32 ) );    
-        SKP_Silk_resample_1_2_coarsest( signal_8kHz, filt_state,
-            signal_4kHz, scratch_mem, frame_length_4kHz );
-    }
-
-    /* Low-pass filter */
-    for( i = frame_length_4kHz - 1; i > 0; i-- ) {
-        signal_4kHz[ i ] = SKP_ADD_SAT16( signal_4kHz[ i ], signal_4kHz[ i - 1 ] );
-    }
-
-    /*******************************************************************************
-    ** Scale 4 kHz signal down to prevent correlations measures from overflowing
-    ** find scaling as max scaling for each 8kHz(?) subframe
-    *******************************************************************************/
-    
-    /* Inner product is calculated with different lengths, so scale for the worst case */
-    max_sum_sq_length = SKP_max_32( sf_length_8kHz, SKP_RSHIFT( frame_length_4kHz, 1 ) );
-    shift = SKP_FIX_P_Ana_find_scaling( signal_4kHz, frame_length_4kHz, max_sum_sq_length );
-    if( shift > 0 ) {
-        for( i = 0; i < frame_length_4kHz; i++ ) {
-            signal_4kHz[ i ] = SKP_RSHIFT( signal_4kHz[ i ], shift );
-        }
-    }
-
-    /******************************************************************************
-    * FIRST STAGE, operating in 4 khz
-    ******************************************************************************/
-    target_ptr = &signal_4kHz[ SKP_RSHIFT( frame_length_4kHz, 1 ) ];
-    for( k = 0; k < 2; k++ ) {
-        /* Check that we are within range of the array */
-        SKP_assert( target_ptr >= signal_4kHz );
-        SKP_assert( target_ptr + sf_length_8kHz <= signal_4kHz + frame_length_4kHz );
-
-        basis_ptr = target_ptr - min_lag_4kHz;
-
-        /* Check that we are within range of the array */
-        SKP_assert( basis_ptr >= signal_4kHz );
-        SKP_assert( basis_ptr + sf_length_8kHz <= signal_4kHz + frame_length_4kHz );
-
-        normalizer = 0;
-        cross_corr = 0;
-        /* Calculate first vector products before loop */
-        cross_corr = SKP_Silk_inner_prod_aligned( target_ptr, basis_ptr, sf_length_8kHz );
-        normalizer = SKP_Silk_inner_prod_aligned( basis_ptr,  basis_ptr, sf_length_8kHz );
-        normalizer = SKP_ADD_SAT32( normalizer, 1000 );
-
-        temp32 = SKP_DIV32( cross_corr, SKP_Silk_SQRT_APPROX( normalizer ) + 1 );
-        C[ k ][ min_lag_4kHz ] = (SKP_int16)SKP_SAT16( temp32 );        /* Q0 */
-
-        /* From now on normalizer is computed recursively */
-        for( d = min_lag_4kHz + 1; d <= max_lag_4kHz; d++ ) {
-            basis_ptr--;
-
-            /* Check that we are within range of the array */
-            SKP_assert( basis_ptr >= signal_4kHz );
-            SKP_assert( basis_ptr + sf_length_8kHz <= signal_4kHz + frame_length_4kHz );
-
-            cross_corr = SKP_Silk_inner_prod_aligned( target_ptr, basis_ptr, sf_length_8kHz );
-
-            /* Add contribution of new sample and remove contribution from oldest sample */
-            normalizer +=
-                SKP_SMULBB( basis_ptr[ 0 ], basis_ptr[ 0 ] ) - 
-                SKP_SMULBB( basis_ptr[ sf_length_8kHz ], basis_ptr[ sf_length_8kHz ] ); 
-    
-            temp32 = SKP_DIV32( cross_corr, SKP_Silk_SQRT_APPROX( normalizer ) + 1 );
-            C[ k ][ d ] = (SKP_int16)SKP_SAT16( temp32 );                        /* Q0 */
-        }
-        /* Update target pointer */
-        target_ptr += sf_length_8kHz;
-    }
-
-    /* Combine two subframes into single correlation measure and apply short-lag bias */
-    for( i = max_lag_4kHz; i >= min_lag_4kHz; i-- ) {
-        sum = (SKP_int32)C[ 0 ][ i ] + (SKP_int32)C[ 1 ][ i ];                /* Q0 */
-        SKP_assert( SKP_RSHIFT( sum, 1 ) == SKP_SAT16( SKP_RSHIFT( sum, 1 ) ) );
-        sum = SKP_RSHIFT( sum, 1 );                                           /* Q-1 */
-        SKP_assert( SKP_LSHIFT( (SKP_int32)-i, 4 ) == SKP_SAT16( SKP_LSHIFT( (SKP_int32)-i, 4 ) ) );
-        sum = SKP_SMLAWB( sum, sum, SKP_LSHIFT( -i, 4 ) );                    /* Q-1 */
-        SKP_assert( sum == SKP_SAT16( sum ) );
-        C[ 0 ][ i ] = (SKP_int16)sum;                                         /* Q-1 */
-    }
-
-    /* Sort */
-    length_d_srch = 5 + complexity;
-    SKP_assert( length_d_srch <= PITCH_EST_D_SRCH_LENGTH );
-    SKP_Silk_insertion_sort_decreasing_int16( &C[ 0 ][ min_lag_4kHz ], d_srch, max_lag_4kHz - min_lag_4kHz + 1, length_d_srch );
-
-    /* Escape if correlation is very low already here */
-    target_ptr = &signal_4kHz[ SKP_RSHIFT( frame_length_4kHz, 1 ) ];
-    energy = SKP_Silk_inner_prod_aligned( target_ptr, target_ptr, SKP_RSHIFT( frame_length_4kHz, 1 ) );
-    energy = SKP_ADD_SAT32( energy, 1000 );                                  /* Q0 */
-    Cmax = (SKP_int)C[ 0 ][ min_lag_4kHz ];                                  /* Q-1 */
-    threshold = SKP_SMULBB( Cmax, Cmax );                                    /* Q-2 */
-    /* Compare in Q-2 domain */
-    if( SKP_RSHIFT( energy, 4 + 2 ) > threshold ) {                            
-        SKP_memset( pitch_out, 0, PITCH_EST_NB_SUBFR * sizeof( SKP_int ) );
-        *LTPCorr_Q15  = 0;
-        *lagIndex     = 0;
-        *contourIndex = 0;
-        return 1;
-    }
-
-    threshold = SKP_SMULWB( search_thres1_Q16, Cmax );
-    for( i = 0; i < length_d_srch; i++ ) {
-        /* Convert to 8 kHz indices for the sorted correlation that exceeds the threshold */
-        if( C[ 0 ][ min_lag_4kHz + i ] > threshold ) {
-            d_srch[ i ] = SKP_LSHIFT( d_srch[ i ] + min_lag_4kHz, 1 );
-        } else {
-            length_d_srch = i;
-            break;
-        }
-    }
-    SKP_assert( length_d_srch > 0 );
-
-    for( i = min_lag_8kHz - 5; i < max_lag_8kHz + 5; i++ ) {
-        d_comp[ i ] = 0;
-    }
-    for( i = 0; i < length_d_srch; i++ ) {
-        d_comp[ d_srch[ i ] ] = 1;
-    }
-
-    /* Convolution */
-    for( i = max_lag_8kHz + 3; i >= min_lag_8kHz; i-- ) {
-        d_comp[ i ] += d_comp[ i - 1 ] + d_comp[ i - 2 ];
-    }
-
-    length_d_srch = 0;
-    for( i = min_lag_8kHz; i < max_lag_8kHz + 1; i++ ) {    
-        if( d_comp[ i + 1 ] > 0 ) {
-            d_srch[ length_d_srch ] = i;
-            length_d_srch++;
-        }
-    }
-
-    /* Convolution */
-    for( i = max_lag_8kHz + 3; i >= min_lag_8kHz; i-- ) {
-        d_comp[ i ] += d_comp[ i - 1 ] + d_comp[ i - 2 ] + d_comp[ i - 3 ];
-    }
-
-    length_d_comp = 0;
-    for( i = min_lag_8kHz; i < max_lag_8kHz + 4; i++ ) {    
-        if( d_comp[ i ] > 0 ) {
-            d_comp[ length_d_comp ] = i - 2;
-            length_d_comp++;
-        }
-    }
-
-    /**********************************************************************************
-    ** SECOND STAGE, operating at 8 kHz, on lag sections with high correlation
-    *************************************************************************************/
-
-    /******************************************************************************
-    ** Scale signal down to avoid correlations measures from overflowing
-    *******************************************************************************/
-    /* find scaling as max scaling for each subframe */
-    shift = SKP_FIX_P_Ana_find_scaling( signal_8kHz, frame_length_8kHz, sf_length_8kHz );
-    if( shift > 0 ) {
-        for( i = 0; i < frame_length_8kHz; i++ ) {
-            signal_8kHz[ i ] = SKP_RSHIFT( signal_8kHz[ i ], shift );
-        }
-    }
-
-    /********************************************************************************* 
-    * Find energy of each subframe projected onto its history, for a range of delays
-    *********************************************************************************/
-    SKP_memset( C, 0, PITCH_EST_NB_SUBFR * ( ( PITCH_EST_MAX_LAG >> 1 ) + 5 ) * sizeof( SKP_int16 ) );
-    
-    target_ptr = &signal_8kHz[ frame_length_4kHz ]; /* point to middle of frame */
-    for( k = 0; k < PITCH_EST_NB_SUBFR; k++ ) {
-
-        /* Check that we are within range of the array */
-        SKP_assert( target_ptr >= signal_8kHz );
-        SKP_assert( target_ptr + sf_length_8kHz <= signal_8kHz + frame_length_8kHz );
-
-        energy_target = SKP_Silk_inner_prod_aligned( target_ptr, target_ptr, sf_length_8kHz );
-        // ToDo: Calculate 1 / energy_target here and save one division inside next for loop
-        for( j = 0; j < length_d_comp; j++ ) {
-            d = d_comp[ j ];
-            basis_ptr = target_ptr - d;
-
-            /* Check that we are within range of the array */
-            SKP_assert( basis_ptr >= signal_8kHz );
-            SKP_assert( basis_ptr + sf_length_8kHz <= signal_8kHz + frame_length_8kHz );
-        
-            cross_corr   = SKP_Silk_inner_prod_aligned( target_ptr, basis_ptr, sf_length_8kHz );
-            energy_basis = SKP_Silk_inner_prod_aligned( basis_ptr,  basis_ptr, sf_length_8kHz );
-            if( cross_corr > 0 ) {
-                energy = SKP_max( energy_target, energy_basis ); /* Find max to make sure first division < 1.0 */
-                lz = SKP_Silk_CLZ32( cross_corr );
-                lshift = SKP_LIMIT( lz - 1, 0, 15 );
-                temp32 = SKP_DIV32( SKP_LSHIFT( cross_corr, lshift ), SKP_RSHIFT( energy, 15 - lshift ) + 1 ); /* Q15 */
-                SKP_assert( temp32 == SKP_SAT16( temp32 ) );
-                temp32 = SKP_SMULWB( cross_corr, temp32 ); /* Q(-1), cc * ( cc / max(b, t) ) */
-                temp32 = SKP_ADD_SAT32( temp32, temp32 );  /* Q(0) */
-                lz = SKP_Silk_CLZ32( temp32 );
-                lshift = SKP_LIMIT( lz - 1, 0, 15 );
-                energy = SKP_min( energy_target, energy_basis );
-                C[ k ][ d ] = SKP_DIV32( SKP_LSHIFT( temp32, lshift ), SKP_RSHIFT( energy, 15 - lshift ) + 1 ); // Q15
-            } else {
-                C[ k ][ d ] = 0;
-            }
-        }
-        target_ptr += sf_length_8kHz;
-    }
-
-    /* search over lag range and lags codebook */
-    /* scale factor for lag codebook, as a function of center lag */
-
-    CCmax   = SKP_int32_MIN;
-    CCmax_b = SKP_int32_MIN;
-
-    CBimax = 0; /* To avoid returning undefined lag values */
-    lag = -1;   /* To check if lag with strong enough correlation has been found */
-
-    if( prevLag > 0 ) {
-        if( Fs_kHz == 12 ) {
-            prevLag = SKP_DIV32_16( SKP_LSHIFT( prevLag, 1 ), 3 );
-        } else if( Fs_kHz == 16 ) {
-            prevLag = SKP_RSHIFT( prevLag, 1 );
-        } else if( Fs_kHz == 24 ) {
-            prevLag = SKP_DIV32_16( prevLag, 3 );
-        }
-        prevLag_log2_Q7 = SKP_Silk_lin2log( (SKP_int32)prevLag );
-    } else {
-        prevLag_log2_Q7 = 0;
-    }
-    SKP_assert( search_thres2_Q15 == SKP_SAT16( search_thres2_Q15 ) );
-    corr_thres_Q15 = SKP_RSHIFT( SKP_SMULBB( search_thres2_Q15, search_thres2_Q15 ), 13 );
-
-    /* If input is 8 khz use a larger codebook here because it is last stage */
-    if( Fs_kHz == 8 && complexity > SigProc_PITCH_EST_MIN_COMPLEX ) {
-        nb_cbks_stage2 = PITCH_EST_NB_CBKS_STAGE2_EXT;    
-    } else {
-        nb_cbks_stage2 = PITCH_EST_NB_CBKS_STAGE2;
-    }
-
-    for( k = 0; k < length_d_srch; k++ ) {
-        d = d_srch[ k ];
-        for( j = 0; j < nb_cbks_stage2; j++ ) {
-            CC[ j ] = 0;
-            for( i = 0; i < PITCH_EST_NB_SUBFR; i++ ) {
-                /* Try all codebooks */
-                CC[ j ] = CC[ j ] + (SKP_int32)C[ i ][ d + SKP_Silk_CB_lags_stage2[ i ][ j ] ];
-            }
-        }
-        /* Find best codebook */
-        CCmax_new = SKP_int32_MIN;
-        CBimax_new = 0;
-        for( i = 0; i < nb_cbks_stage2; i++ ) {
-            if( CC[ i ] > CCmax_new ) {
-                CCmax_new = CC[ i ];
-                CBimax_new = i;
-            }
-        }
-
-        /* Bias towards shorter lags */
-        lag_log2_Q7 = SKP_Silk_lin2log( (SKP_int32)d ); /* Q7 */
-        SKP_assert( lag_log2_Q7 == SKP_SAT16( lag_log2_Q7 ) );
-        SKP_assert( PITCH_EST_NB_SUBFR * PITCH_EST_SHORTLAG_BIAS_Q15 == SKP_SAT16( PITCH_EST_NB_SUBFR * PITCH_EST_SHORTLAG_BIAS_Q15 ) );
-        CCmax_new_b = CCmax_new - SKP_RSHIFT( SKP_SMULBB( PITCH_EST_NB_SUBFR * PITCH_EST_SHORTLAG_BIAS_Q15, lag_log2_Q7 ), 7 ); /* Q15 */
-
-        /* Bias towards previous lag */
-        SKP_assert( PITCH_EST_NB_SUBFR * PITCH_EST_PREVLAG_BIAS_Q15 == SKP_SAT16( PITCH_EST_NB_SUBFR * PITCH_EST_PREVLAG_BIAS_Q15 ) );
-        if( prevLag > 0 ) {
-            delta_lag_log2_sqr_Q7 = lag_log2_Q7 - prevLag_log2_Q7;
-            SKP_assert( delta_lag_log2_sqr_Q7 == SKP_SAT16( delta_lag_log2_sqr_Q7 ) );
-            delta_lag_log2_sqr_Q7 = SKP_RSHIFT( SKP_SMULBB( delta_lag_log2_sqr_Q7, delta_lag_log2_sqr_Q7 ), 7 );
-            prev_lag_bias_Q15 = SKP_RSHIFT( SKP_SMULBB( PITCH_EST_NB_SUBFR * PITCH_EST_PREVLAG_BIAS_Q15, ( *LTPCorr_Q15 ) ), 15 ); /* Q15 */
-            prev_lag_bias_Q15 = SKP_DIV32( SKP_MUL( prev_lag_bias_Q15, delta_lag_log2_sqr_Q7 ), delta_lag_log2_sqr_Q7 + ( 1 << 6 ) );
-            CCmax_new_b -= prev_lag_bias_Q15; /* Q15 */
-        }
-
-        if( CCmax_new_b > CCmax_b && CCmax_new > corr_thres_Q15 ) {
-            CCmax_b = CCmax_new_b;
-            CCmax   = CCmax_new;
-            lag     = d;
-            CBimax  = CBimax_new;
-        }
-    }
-
-    if( lag == -1 ) {
-        /* No suitable candidate found */
-        SKP_memset( pitch_out, 0, PITCH_EST_NB_SUBFR * sizeof( SKP_int ) );
-        *LTPCorr_Q15  = 0;
-        *lagIndex     = 0;
-        *contourIndex = 0;
-        return 1;
-    }
-
-    if( Fs_kHz > 8 ) {
-
-        /******************************************************************************
-        ** Scale input signal down to avoid correlations measures from overflowing
-        *******************************************************************************/
-        /* find scaling as max scaling for each subframe */
-        shift = SKP_FIX_P_Ana_find_scaling( signal, frame_length, sf_length );
-        if( shift > 0 ) {
-            /* Move signal to scratch mem because the input signal should be unchanged */
-            /* Reuse the 32 bit scratch mem vector, use a 16 bit pointer from now */
-            input_signal_ptr = (SKP_int16*)scratch_mem;
-            for( i = 0; i < frame_length; i++ ) {
-                input_signal_ptr[ i ] = SKP_RSHIFT( signal[ i ], shift );
-            }
-        } else {
-            input_signal_ptr = (SKP_int16*)signal;
-        }
-        /*********************************************************************************/
-
-        /* Search in original signal */
-                    
-        CBimax_old = CBimax;
-        /* Compensate for decimation */
-        SKP_assert( lag == SKP_SAT16( lag ) );
-        if( Fs_kHz == 12 ) {
-            lag = SKP_RSHIFT( SKP_SMULBB( lag, 3 ), 1 );
-        } else if( Fs_kHz == 16 ) {
-            lag = SKP_LSHIFT( lag, 1 );
-        } else {
-            lag = SKP_SMULBB( lag, 3 );
-        }
-
-        lag = SKP_LIMIT( lag, min_lag, max_lag );
-        start_lag = SKP_max_int( lag - 2, min_lag );
-        end_lag   = SKP_min_int( lag + 2, max_lag );
-        lag_new   = lag;                                    /* to avoid undefined lag */
-        CBimax    = 0;                                        /* to avoid undefined lag */
-        SKP_assert( SKP_LSHIFT( CCmax, 13 ) >= 0 ); 
-        *LTPCorr_Q15 = (SKP_int)SKP_Silk_SQRT_APPROX( SKP_LSHIFT( CCmax, 13 ) ); /* Output normalized correlation */
-
-        CCmax = SKP_int32_MIN;
-        /* pitch lags according to second stage */
-        for( k = 0; k < PITCH_EST_NB_SUBFR; k++ ) {
-            pitch_out[ k ] = lag + 2 * SKP_Silk_CB_lags_stage2[ k ][ CBimax_old ];
-        }
-        /* Calculate the correlations and energies needed in stage 3 */
-        SKP_FIX_P_Ana_calc_corr_st3(  crosscorr_st3, input_signal_ptr, start_lag, sf_length, complexity );
-        SKP_FIX_P_Ana_calc_energy_st3( energies_st3, input_signal_ptr, start_lag, sf_length, complexity );
-
-        lag_counter = 0;
-        SKP_assert( lag == SKP_SAT16( lag ) );
-        contour_bias = SKP_DIV32_16( PITCH_EST_FLATCONTOUR_BIAS_Q20, lag );
-
-        /* Setup cbk parameters acording to complexity setting */
-        cbk_size   = (SKP_int)SKP_Silk_cbk_sizes_stage3[   complexity ];
-        cbk_offset = (SKP_int)SKP_Silk_cbk_offsets_stage3[ complexity ];
-
-        for( d = start_lag; d <= end_lag; d++ ) {
-            for( j = cbk_offset; j < ( cbk_offset + cbk_size ); j++ ) {
-                cross_corr = 0;
-                energy     = 0;
-                for( k = 0; k < PITCH_EST_NB_SUBFR; k++ ) {
-                    SKP_assert( PITCH_EST_NB_SUBFR == 4 );
-                    energy     += SKP_RSHIFT( energies_st3[  k ][ j ][ lag_counter ], 2 ); /* use mean, to avoid overflow */
-                    SKP_assert( energy >= 0 );
-                    cross_corr += SKP_RSHIFT( crosscorr_st3[ k ][ j ][ lag_counter ], 2 ); /* use mean, to avoid overflow */
-                }
-                if( cross_corr > 0 ) {
-                    /* Divide cross_corr / energy and get result in Q15 */
-                    lz = SKP_Silk_CLZ32( cross_corr );
-                    /* Divide with result in Q13, cross_corr could be larger than energy */
-                    lshift = SKP_LIMIT( lz - 1, 0, 13 );
-                    CCmax_new = SKP_DIV32( SKP_LSHIFT( cross_corr, lshift ), SKP_RSHIFT( energy, 13 - lshift ) + 1 );
-                    CCmax_new = SKP_SAT16( CCmax_new );
-                    CCmax_new = SKP_SMULWB( cross_corr, CCmax_new );
-                    /* Saturate */
-                    if( CCmax_new > SKP_RSHIFT( SKP_int32_MAX, 3 ) ) {
-                        CCmax_new = SKP_int32_MAX;
-                    } else {
-                        CCmax_new = SKP_LSHIFT( CCmax_new, 3 );
-                    }
-                    /* Reduce depending on flatness of contour */
-                    diff = j - SKP_RSHIFT( PITCH_EST_NB_CBKS_STAGE3_MAX, 1 );
-                    diff = SKP_MUL( diff, diff );
-                    diff = SKP_int16_MAX - SKP_RSHIFT( SKP_MUL( contour_bias, diff ), 5 ); /* Q20 -> Q15 */
-                    SKP_assert( diff == SKP_SAT16( diff ) );
-                    CCmax_new = SKP_LSHIFT( SKP_SMULWB( CCmax_new, diff ), 1 );
-                } else {
-                    CCmax_new = 0;
-                }
-
-                if( CCmax_new > CCmax ) {
-                    CCmax   = CCmax_new;
-                    lag_new = d;
-                    CBimax  = j;
-                }
-            }
-            lag_counter++;
-        }
-
-        for( k = 0; k < PITCH_EST_NB_SUBFR; k++ ) {
-            pitch_out[ k ] = lag_new + SKP_Silk_CB_lags_stage3[ k ][ CBimax ];
-        }
-        *lagIndex = lag_new - min_lag;
-        *contourIndex = CBimax;
-    } else {
-        /* Save Lags and correlation */
-        CCmax = SKP_max( CCmax, 0 );
-        *LTPCorr_Q15 = (SKP_int)SKP_Silk_SQRT_APPROX( SKP_LSHIFT( CCmax, 13 ) ); /* Output normalized correlation */
-        for( k = 0; k < PITCH_EST_NB_SUBFR; k++ ) {
-            pitch_out[ k ] = lag + SKP_Silk_CB_lags_stage2[ k ][ CBimax ];
-        }
-        *lagIndex = lag - min_lag_8kHz;
-        *contourIndex = CBimax;
-    }
-    SKP_assert( *lagIndex >= 0 );
-    /* return as voiced */
-    return 0;
-}
-
-/*************************************************************************/
-/* Calculates the correlations used in stage 3 search. In order to cover */
-/* the whole lag codebook for all the searched offset lags (lag +- 2),   */
-/*************************************************************************/
-void SKP_FIX_P_Ana_calc_corr_st3(
-    SKP_int32        cross_corr_st3[ PITCH_EST_NB_SUBFR ][ PITCH_EST_NB_CBKS_STAGE3_MAX ][ PITCH_EST_NB_STAGE3_LAGS ],/* (O) 3 DIM correlation array */
-    const SKP_int16  signal[],                        /* I vector to correlate         */
-    SKP_int          start_lag,                       /* I lag offset to search around */
-    SKP_int          sf_length,                       /* I length of a 5 ms subframe   */
-    SKP_int          complexity                       /* I Complexity setting          */
-)
-{
-    const SKP_int16 *target_ptr, *basis_ptr;
-    SKP_int32    cross_corr;
-    SKP_int        i, j, k, lag_counter;
-    SKP_int        cbk_offset, cbk_size, delta, idx;
-    SKP_int32    scratch_mem[ SCRATCH_SIZE ];
-
-    SKP_assert( complexity >= SigProc_PITCH_EST_MIN_COMPLEX );
-    SKP_assert( complexity <= SigProc_PITCH_EST_MAX_COMPLEX );
-
-    cbk_offset = SKP_Silk_cbk_offsets_stage3[ complexity ];
-    cbk_size   = SKP_Silk_cbk_sizes_stage3[   complexity ];
-
-    target_ptr = &signal[ SKP_LSHIFT( sf_length, 2 ) ]; /* Pointer to middle of frame */
-    for( k = 0; k < PITCH_EST_NB_SUBFR; k++ ) {
-        lag_counter = 0;
-
-        /* Calculate the correlations for each subframe */
-        for( j = SKP_Silk_Lag_range_stage3[ complexity ][ k ][ 0 ]; j <= SKP_Silk_Lag_range_stage3[ complexity ][ k ][ 1 ]; j++ ) {
-            basis_ptr = target_ptr - ( start_lag + j );
-            cross_corr = SKP_Silk_inner_prod_aligned( (SKP_int16*)target_ptr, (SKP_int16*)basis_ptr, sf_length );
-            SKP_assert( lag_counter < SCRATCH_SIZE );
-            scratch_mem[ lag_counter ] = cross_corr;
-            lag_counter++;
-        }
-
-        delta = SKP_Silk_Lag_range_stage3[ complexity ][ k ][ 0 ];
-        for( i = cbk_offset; i < ( cbk_offset + cbk_size ); i++ ) { 
-            /* Fill out the 3 dim array that stores the correlations for */
-            /* each code_book vector for each start lag */
-            idx = SKP_Silk_CB_lags_stage3[ k ][ i ] - delta;
-            for( j = 0; j < PITCH_EST_NB_STAGE3_LAGS; j++ ) {
-                SKP_assert( idx + j < SCRATCH_SIZE );
-                SKP_assert( idx + j < lag_counter );
-                cross_corr_st3[ k ][ i ][ j ] = scratch_mem[ idx + j ];
-            }
-        }
-        target_ptr += sf_length;
-    }
-}
-
-/********************************************************************/
-/* Calculate the energies for first two subframes. The energies are */
-/* calculated recursively.                                          */
-/********************************************************************/
-void SKP_FIX_P_Ana_calc_energy_st3(
-    SKP_int32        energies_st3[ PITCH_EST_NB_SUBFR ][ PITCH_EST_NB_CBKS_STAGE3_MAX ][ PITCH_EST_NB_STAGE3_LAGS ],/* (O) 3 DIM energy array */
-    const SKP_int16  signal[],                        /* I vector to calc energy in    */
-    SKP_int          start_lag,                       /* I lag offset to search around */
-    SKP_int          sf_length,                       /* I length of one 5 ms subframe */
-    SKP_int          complexity                       /* I Complexity setting          */
-)
-{
-    const SKP_int16 *target_ptr, *basis_ptr;
-    SKP_int32    energy;
-    SKP_int        k, i, j, lag_counter;
-    SKP_int        cbk_offset, cbk_size, delta, idx;
-    SKP_int32    scratch_mem[ SCRATCH_SIZE ];
-
-    SKP_assert( complexity >= SigProc_PITCH_EST_MIN_COMPLEX );
-    SKP_assert( complexity <= SigProc_PITCH_EST_MAX_COMPLEX );
-
-    cbk_offset = SKP_Silk_cbk_offsets_stage3[ complexity ];
-    cbk_size   = SKP_Silk_cbk_sizes_stage3[   complexity ];
-
-    target_ptr = &signal[ SKP_LSHIFT( sf_length, 2 ) ];
-    for( k = 0; k < PITCH_EST_NB_SUBFR; k++ ) {
-        lag_counter = 0;
-
-        /* Calculate the energy for first lag */
-        basis_ptr = target_ptr - ( start_lag + SKP_Silk_Lag_range_stage3[ complexity ][ k ][ 0 ] );
-        energy = SKP_Silk_inner_prod_aligned( basis_ptr, basis_ptr, sf_length );
-        SKP_assert( energy >= 0 );
-        scratch_mem[ lag_counter ] = energy;
-        lag_counter++;
-
-        for( i = 1; i < ( SKP_Silk_Lag_range_stage3[ complexity ][ k ][ 1 ] - SKP_Silk_Lag_range_stage3[ complexity ][ k ][ 0 ] + 1 ); i++ ) {
-            /* remove part outside new window */
-            energy -= SKP_SMULBB( basis_ptr[ sf_length - i ], basis_ptr[ sf_length - i ] );
-            SKP_assert( energy >= 0 );
-
-            /* add part that comes into window */
-            energy = SKP_ADD_SAT32( energy, SKP_SMULBB( basis_ptr[ -i ], basis_ptr[ -i ] ) );
-            SKP_assert( energy >= 0 );
-            SKP_assert( lag_counter < SCRATCH_SIZE );
-            scratch_mem[ lag_counter ] = energy;
-            lag_counter++;
-        }
-
-        delta = SKP_Silk_Lag_range_stage3[ complexity ][ k ][ 0 ];
-        for( i = cbk_offset; i < ( cbk_offset + cbk_size ); i++ ) { 
-            /* Fill out the 3 dim array that stores the correlations for    */
-            /* each code_book vector for each start lag                        */
-            idx = SKP_Silk_CB_lags_stage3[ k ][ i ] - delta;
-            for( j = 0; j < PITCH_EST_NB_STAGE3_LAGS; j++ ) {
-                SKP_assert( idx + j < SCRATCH_SIZE );
-                SKP_assert( idx + j < lag_counter );
-                energies_st3[ k ][ i ][ j ] = scratch_mem[ idx + j ];
-                SKP_assert( energies_st3[ k ][ i ][ j ] >= 0.0f );
-            }
-        }
-        target_ptr += sf_length;
-    }
-}
-
-SKP_int32 SKP_FIX_P_Ana_find_scaling(
-    const SKP_int16  *signal,
-    const SKP_int    signal_length, 
-    const SKP_int    sum_sqr_len
-)
-{
-    SKP_int32 nbits, x_max;
-    
-    x_max = SKP_Silk_int16_array_maxabs( signal, signal_length );
-
-    if( x_max < SKP_int16_MAX ) {
-        /* Number of bits needed for the sum of the squares */
-        nbits = 32 - SKP_Silk_CLZ32( SKP_SMULBB( x_max, x_max ) ); 
-    } else {
-        /* Here we don't know if x_max should have been SKP_int16_MAX + 1, so we expect the worst case */
-        nbits = 30;
-    }
-    nbits += 17 - SKP_Silk_CLZ16( sum_sqr_len );
-
-    /* Without a guarantee of saturation, we need to keep the 31st bit free */
-    if( nbits < 31 ) {
-        return 0;
-    } else {
-        return( nbits - 30 );
-    }
-}
--- a/src/SKP_Silk_pitch_est_defines.h
+++ /dev/null
@@ -1,43 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef SIGPROCFIX_PITCH_EST_DEFINES_H
-#define SIGPROCFIX_PITCH_EST_DEFINES_H
-
-#include "SKP_Silk_SigProc_FIX.h"
-#include "SKP_Silk_common_pitch_est_defines.h"
-
-/************************************************************/
-/* Definitions For Fix pitch estimator						*/
-/************************************************************/
-
-#define PITCH_EST_SHORTLAG_BIAS_Q15			6554	/* 0.2f. for logarithmic weighting	*/
-#define PITCH_EST_PREVLAG_BIAS_Q15			6554	/* Prev lag bias	*/
-#define PITCH_EST_FLATCONTOUR_BIAS_Q20		52429	/* 0.05f */
-
-#endif
-
--- a/src/SKP_Silk_pitch_est_tables.c
+++ /dev/null
@@ -1,89 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_typedef.h"
-#include "SKP_Silk_pitch_est_defines.h"
-
-/********************************************************/
-/* Auto Generated File from generate_pitch_est_tables.m */
-/********************************************************/
-
-const SKP_int16 SKP_Silk_CB_lags_stage2[PITCH_EST_NB_SUBFR][PITCH_EST_NB_CBKS_STAGE2_EXT] =
-{
-    {0, 2,-1,-1,-1, 0, 0, 1, 1, 0, 1},
-    {0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0},
-    {0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0},
-    {0,-1, 2, 1, 0, 1, 1, 0, 0,-1,-1} 
-};
-
-const SKP_int16 SKP_Silk_CB_lags_stage3[PITCH_EST_NB_SUBFR][PITCH_EST_NB_CBKS_STAGE3_MAX] =
-{
-    {-9,-7,-6,-5,-5,-4,-4,-3,-3,-2,-2,-2,-1,-1,-1, 0, 0, 0, 1, 1, 0, 1, 2, 2, 2, 3, 3, 4, 4, 5, 6, 5, 6, 8},
-    {-3,-2,-2,-2,-1,-1,-1,-1,-1, 0, 0,-1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 2, 1, 2, 2, 2, 2, 3},
-    { 3, 3, 2, 2, 2, 2, 1, 2, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,-1, 0, 0,-1,-1,-1,-1,-1,-2,-2,-2},
-    { 9, 8, 6, 5, 6, 5, 4, 4, 3, 3, 2, 2, 2, 1, 0, 1, 1, 0, 0, 0,-1,-1,-1,-2,-2,-2,-3,-3,-4,-4,-5,-5,-6,-7}
- };
-
-const SKP_int16 SKP_Silk_Lag_range_stage3[ SigProc_PITCH_EST_MAX_COMPLEX + 1 ] [ PITCH_EST_NB_SUBFR ][ 2 ] =
-{
-    /* Lags to search for low number of stage3 cbks */
-    {
-        {-2,6},
-        {-1,5},
-        {-1,5},
-        {-2,7}
-    },
-    /* Lags to search for middle number of stage3 cbks */
-    {
-        {-4,8},
-        {-1,6},
-        {-1,6},
-        {-4,9}
-    },
-    /* Lags to search for max number of stage3 cbks */
-    {
-        {-9,12},
-        {-3,7},
-        {-2,7},
-        {-7,13}
-    }
-};
-
-const SKP_int16 SKP_Silk_cbk_sizes_stage3[SigProc_PITCH_EST_MAX_COMPLEX + 1] = 
-{
-    PITCH_EST_NB_CBKS_STAGE3_MIN,
-    PITCH_EST_NB_CBKS_STAGE3_MID,
-    PITCH_EST_NB_CBKS_STAGE3_MAX
-};
-
-const SKP_int16 SKP_Silk_cbk_offsets_stage3[SigProc_PITCH_EST_MAX_COMPLEX + 1] = 
-{
-    ((PITCH_EST_NB_CBKS_STAGE3_MAX - PITCH_EST_NB_CBKS_STAGE3_MIN) >> 1),
-    ((PITCH_EST_NB_CBKS_STAGE3_MAX - PITCH_EST_NB_CBKS_STAGE3_MID) >> 1),
-    0
-};
-
--- a/src/SKP_Silk_prefilter_FIX.c
+++ /dev/null
@@ -1,166 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-#include "SKP_Silk_perceptual_parameters_FIX.h"
-
-/* SKP_Silk_prefilter. Prefilter for finding Quantizer input signal */
-SKP_INLINE void SKP_Silk_prefilt_FIX(
-    SKP_Silk_prefilter_state_FIX *P,                    /* I/O state                          */
-    SKP_int32   st_res_Q12[],                           /* I short term residual signal       */
-    SKP_int16   xw[],                                   /* O prefiltered signal               */
-    SKP_int32   HarmShapeFIRPacked_Q12,                 /* I Harmonic shaping coeficients     */
-    SKP_int     Tilt_Q14,                               /* I Tilt shaping coeficient          */
-    SKP_int32   LF_shp_Q14,                             /* I Low-frequancy shaping coeficients*/
-    SKP_int     lag,                                    /* I Lag for harmonic shaping         */
-    SKP_int     length                                  /* I Length of signals                */
-);
-
-void SKP_Silk_prefilter_FIX(
-    SKP_Silk_encoder_state_FIX          *psEnc,         /* I/O  Encoder state FIX                           */
-    const SKP_Silk_encoder_control_FIX  *psEncCtrl,     /* I    Encoder control FIX                         */
-    SKP_int16                           xw[],           /* O    Weighted signal                             */
-    const SKP_int16                     x[]             /* I    Speech signal                               */
-)
-{
-    SKP_Silk_prefilter_state_FIX *P = &psEnc->sPrefilt;
-    SKP_int   j, k, lag;
-    SKP_int32 tmp_32, B_Q12;
-    const SKP_int16 *AR1_shp_Q13;
-    const SKP_int16 *px;
-    SKP_int16 *pxw, *pst_res;
-    SKP_int   HarmShapeGain_Q12, Tilt_Q14, LF_shp_Q14;
-    SKP_int32 HarmShapeFIRPacked_Q12;
-    SKP_int32 x_filt_Q12[ MAX_FRAME_LENGTH / NB_SUBFR ], filterState[ MAX_LPC_ORDER ];
-    SKP_int16 st_res[ ( MAX_FRAME_LENGTH / NB_SUBFR ) + MAX_LPC_ORDER ];
-
-    /* Setup pointers */
-    px  = x;
-    pxw = xw;
-    lag = P->lagPrev;
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        /* Update Variables that change per sub frame */
-        if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
-            lag = psEncCtrl->sCmn.pitchL[ k ];
-        }
-
-        /* Noise shape parameters */
-        HarmShapeGain_Q12 = SKP_SMULWB( psEncCtrl->HarmShapeGain_Q14[ k ], 16384 - psEncCtrl->HarmBoost_Q14[ k ] );
-        SKP_assert( HarmShapeGain_Q12 >= 0 );
-        HarmShapeFIRPacked_Q12  =                        SKP_RSHIFT( HarmShapeGain_Q12, 2 );
-        HarmShapeFIRPacked_Q12 |= SKP_LSHIFT( ( SKP_int32 )SKP_RSHIFT( HarmShapeGain_Q12, 1 ), 16 );
-        Tilt_Q14    = psEncCtrl->Tilt_Q14[   k ];
-        LF_shp_Q14  = psEncCtrl->LF_shp_Q14[ k ];
-        AR1_shp_Q13 = &psEncCtrl->AR1_Q13[   k * SHAPE_LPC_ORDER_MAX ];
-
-        /* Short term FIR filtering*/
-        SKP_memset( filterState, 0, psEnc->sCmn.shapingLPCOrder * sizeof( SKP_int32 ) );
-        SKP_Silk_MA_Prediction_Q13( px - psEnc->sCmn.shapingLPCOrder, AR1_shp_Q13, filterState, 
-            st_res, psEnc->sCmn.subfr_length + psEnc->sCmn.shapingLPCOrder, psEnc->sCmn.shapingLPCOrder );
-
-        pst_res = st_res + psEnc->sCmn.shapingLPCOrder; /* Point to first sample */
-
-        /* reduce (mainly) low frequencies during harmonic emphasis */
-        B_Q12 = SKP_RSHIFT_ROUND( psEncCtrl->GainsPre_Q14[ k ], 2 );
-        tmp_32 = SKP_SMLABB( INPUT_TILT_Q26, psEncCtrl->HarmBoost_Q14[ k ], HarmShapeGain_Q12 ); /* Q26 */
-        tmp_32 = SKP_SMLABB( tmp_32, psEncCtrl->coding_quality_Q14, HIGH_RATE_INPUT_TILT_Q12 );  /* Q26 */
-        tmp_32 = SKP_SMULWB( tmp_32, -psEncCtrl->GainsPre_Q14[ k ] );                            /* Q24 */
-        tmp_32 = SKP_RSHIFT_ROUND( tmp_32, 12 );                                                 /* Q12 */
-        B_Q12 |= SKP_LSHIFT( SKP_SAT16( tmp_32 ), 16 );
-
-        /* NOTE: the code below loads two int16 values in an int32, and multiplies each using the   */
-        /* SMLABB and SMLABT instructions. On a big-endian CPU the two int16 variables would be     */
-        /* loaded in reverse order and the code will give the wrong result. In that case swapping   */
-        /* the SMLABB and SMLABT instructions should solve the problem.                             */
-        x_filt_Q12[ 0 ] = SKP_SMLABT( SKP_SMULBB( pst_res[ 0 ], B_Q12 ), P->sHarmHP, B_Q12 );
-        for( j = 1; j < psEnc->sCmn.subfr_length; j++ ) {
-            x_filt_Q12[ j ] = SKP_SMLABT( SKP_SMULBB( pst_res[ j ], B_Q12 ), pst_res[ j - 1 ], B_Q12 );
-        }
-        P->sHarmHP = pst_res[ psEnc->sCmn.subfr_length - 1 ];
-
-        SKP_Silk_prefilt_FIX( P, x_filt_Q12, pxw, HarmShapeFIRPacked_Q12, Tilt_Q14, 
-            LF_shp_Q14, lag, psEnc->sCmn.subfr_length );
-
-        px  += psEnc->sCmn.subfr_length;
-        pxw += psEnc->sCmn.subfr_length;
-    }
-
-    P->lagPrev = psEncCtrl->sCmn.pitchL[ NB_SUBFR - 1 ];
-}
-
-/* SKP_Silk_prefilter. Prefilter for finding Quantizer input signal                           */
-SKP_INLINE void SKP_Silk_prefilt_FIX(
-    SKP_Silk_prefilter_state_FIX *P,                    /* I/O state                          */
-    SKP_int32   st_res_Q12[],                           /* I short term residual signal       */
-    SKP_int16   xw[],                                   /* O prefiltered signal               */
-    SKP_int32   HarmShapeFIRPacked_Q12,                 /* I Harmonic shaping coeficients     */
-    SKP_int     Tilt_Q14,                               /* I Tilt shaping coeficient          */
-    SKP_int32   LF_shp_Q14,                             /* I Low-frequancy shaping coeficients*/
-    SKP_int     lag,                                    /* I Lag for harmonic shaping         */
-    SKP_int     length                                  /* I Length of signals                */
-)
-{
-    SKP_int   i, idx, LTP_shp_buf_idx;
-    SKP_int32 n_LTP_Q12, n_Tilt_Q10, n_LF_Q10;
-    SKP_int32 sLF_MA_shp_Q12, sLF_AR_shp_Q12;
-    SKP_int16 *LTP_shp_buf;
-
-    /* To speed up use temp variables instead of using the struct */
-    LTP_shp_buf     = P->sLTP_shp1;
-    LTP_shp_buf_idx = P->sLTP_shp_buf_idx1;
-    sLF_AR_shp_Q12  = P->sLF_AR_shp1_Q12;
-    sLF_MA_shp_Q12  = P->sLF_MA_shp1_Q12;
-
-    for( i = 0; i < length; i++ ) {
-        if( lag > 0 ) {
-            /* unrolled loop */
-            SKP_assert( HARM_SHAPE_FIR_TAPS == 3 );
-            idx = lag + LTP_shp_buf_idx;
-            n_LTP_Q12 = SKP_SMULBB(            LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 - 1) & LTP_MASK ], HarmShapeFIRPacked_Q12 );
-            n_LTP_Q12 = SKP_SMLABT( n_LTP_Q12, LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2    ) & LTP_MASK ], HarmShapeFIRPacked_Q12 );
-            n_LTP_Q12 = SKP_SMLABB( n_LTP_Q12, LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 + 1) & LTP_MASK ], HarmShapeFIRPacked_Q12 );
-        } else {
-            n_LTP_Q12 = 0;
-        }
-
-        n_LF_Q10   = SKP_SMLAWB( SKP_SMULWT( sLF_AR_shp_Q12, LF_shp_Q14 ), sLF_MA_shp_Q12, LF_shp_Q14 );
-        n_Tilt_Q10 = SKP_SMULWB( sLF_AR_shp_Q12, Tilt_Q14 );
-
-        sLF_AR_shp_Q12 = SKP_SUB32( st_res_Q12[ i ], SKP_LSHIFT( n_Tilt_Q10, 2 ) );
-        sLF_MA_shp_Q12 = SKP_SUB32( sLF_AR_shp_Q12,  SKP_LSHIFT( n_LF_Q10,   2 ) );
-
-        LTP_shp_buf_idx                = ( LTP_shp_buf_idx - 1 ) & LTP_MASK;
-        LTP_shp_buf[ LTP_shp_buf_idx ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( sLF_MA_shp_Q12, 12 ) );
-
-        xw[i] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SUB32( sLF_MA_shp_Q12, n_LTP_Q12 ), 12 ) );
-    }
-
-    /* Copy temp variable back to state */
-    P->sLF_AR_shp1_Q12   = sLF_AR_shp_Q12;
-    P->sLF_MA_shp1_Q12   = sLF_MA_shp_Q12;
-    P->sLTP_shp_buf_idx1 = LTP_shp_buf_idx;
-}
--- a/src/SKP_Silk_process_NLSFs_FIX.c
+++ /dev/null
@@ -1,127 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-/* Limit, stabilize, convert and quantize NLSFs.    */ 
-void SKP_Silk_process_NLSFs_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O  Encoder state FIX                           */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl,         /* I/O  Encoder control FIX                         */
-    SKP_int                         *pNLSF_Q15          /* I/O  Normalized LSFs (quant out) (0 - (2^15-1))  */
-)
-{
-    SKP_int     doInterpolate;
-    SKP_int     pNLSFW_Q6[ MAX_LPC_ORDER ];
-    SKP_int     NLSF_mu_Q15, NLSF_mu_fluc_red_Q16;
-    SKP_int32   i_sqr_Q15;
-    const SKP_Silk_NLSF_CB_struct *psNLSF_CB;
-
-    /* Used only for NLSF interpolation */
-    SKP_int     pNLSF0_temp_Q15[ MAX_LPC_ORDER ];
-    SKP_int     pNLSFW0_temp_Q6[ MAX_LPC_ORDER ];
-    SKP_int     i;
-
-    SKP_assert( psEnc->speech_activity_Q8 >=   0 );
-    SKP_assert( psEnc->speech_activity_Q8 <= 256 );
-    SKP_assert( psEncCtrl->sparseness_Q8  >=   0 );
-    SKP_assert( psEncCtrl->sparseness_Q8  <= 256 );
-    SKP_assert( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED || psEncCtrl->sCmn.sigtype == SIG_TYPE_UNVOICED );
-
-    /***********************/
-    /* Calculate mu values */
-    /***********************/
-    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
-        /* NLSF_mu           = 0.002f - 0.001f * psEnc->speech_activity; */
-        /* NLSF_mu_fluc_red  = 0.1f   - 0.05f  * psEnc->speech_activity; */
-        NLSF_mu_Q15          = SKP_SMLAWB(   66,   -8388, psEnc->speech_activity_Q8 );
-        NLSF_mu_fluc_red_Q16 = SKP_SMLAWB( 6554, -838848, psEnc->speech_activity_Q8 );
-    } else { 
-        /* NLSF_mu           = 0.005f - 0.004f * psEnc->speech_activity; */
-        /* NLSF_mu_fluc_red  = 0.2f   - 0.1f   * psEnc->speech_activity - 0.1f * psEncCtrl->sparseness; */
-        NLSF_mu_Q15          = SKP_SMLAWB(   164,   -33554, psEnc->speech_activity_Q8 );
-        NLSF_mu_fluc_red_Q16 = SKP_SMLAWB( 13107, -1677696, psEnc->speech_activity_Q8 + psEncCtrl->sparseness_Q8 ); 
-    }
-    SKP_assert( NLSF_mu_Q15          >= 0     );
-    SKP_assert( NLSF_mu_Q15          <= 164   );
-    SKP_assert( NLSF_mu_fluc_red_Q16 >= 0     );
-    SKP_assert( NLSF_mu_fluc_red_Q16 <= 13107 );
-
-    NLSF_mu_Q15 = SKP_max( NLSF_mu_Q15, 1 );
-
-    /* Calculate NLSF weights */
-    TIC(NLSF_weights_FIX)
-    SKP_Silk_NLSF_VQ_weights_laroia( pNLSFW_Q6, pNLSF_Q15, psEnc->sCmn.predictLPCOrder );
-    TOC(NLSF_weights_FIX)
-
-    /* Update NLSF weights for interpolated NLSFs */
-    doInterpolate = ( psEnc->sCmn.useInterpolatedNLSFs == 1 ) && ( psEncCtrl->sCmn.NLSFInterpCoef_Q2 < ( 1 << 2 ) );
-    if( doInterpolate ) {
-
-        /* Calculate the interpolated NLSF vector for the first half */
-        SKP_Silk_interpolate( pNLSF0_temp_Q15, psEnc->sPred.prev_NLSFq_Q15, pNLSF_Q15, 
-            psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEnc->sCmn.predictLPCOrder );
-
-        /* Calculate first half NLSF weights for the interpolated NLSFs */
-        TIC(NLSF_weights_FIX)
-        SKP_Silk_NLSF_VQ_weights_laroia( pNLSFW0_temp_Q6, pNLSF0_temp_Q15, psEnc->sCmn.predictLPCOrder );
-        TOC(NLSF_weights_FIX)
-
-        /* Update NLSF weights with contribution from first half */
-        i_sqr_Q15 = SKP_LSHIFT( SKP_SMULBB( psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEncCtrl->sCmn.NLSFInterpCoef_Q2 ), 11 );
-        for( i = 0; i < psEnc->sCmn.predictLPCOrder; i++ ) {
-            pNLSFW_Q6[ i ] = SKP_SMLAWB( SKP_RSHIFT( pNLSFW_Q6[ i ], 1 ), pNLSFW0_temp_Q6[ i ], i_sqr_Q15 );
-            SKP_assert( pNLSFW_Q6[ i ] <= SKP_int16_MAX );
-            SKP_assert( pNLSFW_Q6[ i ] >= 1 );
-        }
-    }
-
-    /* Set pointer to the NLSF codebook for the current signal type and LPC order */
-    psNLSF_CB = psEnc->sCmn.psNLSF_CB[ psEncCtrl->sCmn.sigtype ];
-
-    /* Quantize NLSF parameters given the trained NLSF codebooks */
-    TIC(MSVQ_encode_FIX)
-    SKP_Silk_NLSF_MSVQ_encode_FIX( psEncCtrl->sCmn.NLSFIndices, pNLSF_Q15, psNLSF_CB, 
-        psEnc->sPred.prev_NLSFq_Q15, pNLSFW_Q6, NLSF_mu_Q15, NLSF_mu_fluc_red_Q16, 
-        psEnc->sCmn.NLSF_MSVQ_Survivors, psEnc->sCmn.predictLPCOrder, psEnc->sCmn.first_frame_after_reset );
-    TOC(MSVQ_encode_FIX)
-
-    /* Convert quantized NLSFs back to LPC coefficients */
-    SKP_Silk_NLSF2A_stable( psEncCtrl->PredCoef_Q12[ 1 ], pNLSF_Q15, psEnc->sCmn.predictLPCOrder );
-
-    if( doInterpolate ) {
-        /* Calculate the interpolated, quantized LSF vector for the first half */
-        SKP_Silk_interpolate( pNLSF0_temp_Q15, psEnc->sPred.prev_NLSFq_Q15, pNLSF_Q15, 
-            psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEnc->sCmn.predictLPCOrder );
-
-        /* Convert back to LPC coefficients */
-        SKP_Silk_NLSF2A_stable( psEncCtrl->PredCoef_Q12[ 0 ], pNLSF0_temp_Q15, psEnc->sCmn.predictLPCOrder );
-
-    } else {
-        /* Copy LPC coefficients for first half from second half */
-        SKP_memcpy( psEncCtrl->PredCoef_Q12[ 0 ], psEncCtrl->PredCoef_Q12[ 1 ], psEnc->sCmn.predictLPCOrder * sizeof( SKP_int16 ) );
-    }
-}
--- a/src/SKP_Silk_process_gains_FIX.c
+++ /dev/null
@@ -1,114 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-/* Processing of gains */
-void SKP_Silk_process_gains_FIX(
-    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  Encoder state_FIX                           */
-    SKP_Silk_encoder_control_FIX    *psEncCtrl      /* I/O  Encoder control_FIX                         */
-)
-{
-    SKP_Silk_shape_state_FIX    *psShapeSt = &psEnc->sShape;
-    SKP_int     k;
-    SKP_int32   s_Q16, InvMaxSqrVal_Q16, gain, gain_squared, ResNrg, ResNrgPart;
-
-    /* Gain reduction when LTP coding gain is high */
-    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
-        /*s = -0.5f * SKP_sigmoid( 0.25f * ( psEncCtrl->LTPredCodGain - 12.0f ) ); */
-        s_Q16 = -SKP_Silk_sigm_Q15( SKP_RSHIFT_ROUND( psEncCtrl->LTPredCodGain_Q7 - (12 << 7), 4 ) );
-        for( k = 0; k < NB_SUBFR; k++ ) {
-            psEncCtrl->Gains_Q16[ k ] = SKP_SMLAWB( psEncCtrl->Gains_Q16[ k ], psEncCtrl->Gains_Q16[ k ], s_Q16 );
-        }
-    }
-
-    /* Limit the quantized signal */
-    /*  69 = 21.0f + 16/0.33    */
-    InvMaxSqrVal_Q16 = SKP_DIV32_16( SKP_Silk_log2lin( 
-        SKP_SMULWB( (69 << 7) - psEncCtrl->current_SNR_dB_Q7, SKP_FIX_CONST( 0.33, 16 )) ), psEnc->sCmn.subfr_length );
-
-    for( k = 0; k < NB_SUBFR; k++ ) {
-        /* Soft limit on ratio residual energy and squared gains */
-        ResNrg     = psEncCtrl->ResNrg[ k ];
-        ResNrgPart = SKP_SMULWW( ResNrg, InvMaxSqrVal_Q16 );
-        if( psEncCtrl->ResNrgQ[ k ] > 0 ) {
-            if( psEncCtrl->ResNrgQ[ k ] < 32 ) {
-                ResNrgPart = SKP_RSHIFT_ROUND( ResNrgPart, psEncCtrl->ResNrgQ[ k ] );
-            } else {
-                ResNrgPart = 0;
-            }
-        } else if( psEncCtrl->ResNrgQ[k] != 0 ) {
-            if( ResNrgPart > SKP_RSHIFT( SKP_int32_MAX, -psEncCtrl->ResNrgQ[ k ] ) ) {
-                ResNrgPart = SKP_int32_MAX;
-            } else {
-                ResNrgPart = SKP_LSHIFT( ResNrgPart, -psEncCtrl->ResNrgQ[ k ] );
-            }
-        }
-        gain = psEncCtrl->Gains_Q16[ k ];
-        gain_squared = SKP_ADD_SAT32( ResNrgPart, SKP_SMMUL( gain, gain ) );
-        if( gain_squared < SKP_int16_MAX ) {
-            /* recalculate with higher precision */
-            gain_squared = SKP_SMLAWW( SKP_LSHIFT( ResNrgPart, 16 ), gain, gain );
-            SKP_assert( gain_squared > 0 );
-            gain = SKP_Silk_SQRT_APPROX( gain_squared );                  /* Q8   */
-            psEncCtrl->Gains_Q16[ k ] = SKP_LSHIFT_SAT32( gain, 8 );        /* Q16  */
-        } else {
-            gain = SKP_Silk_SQRT_APPROX( gain_squared );                  /* Q0   */
-            psEncCtrl->Gains_Q16[ k ] = SKP_LSHIFT_SAT32( gain, 16 );       /* Q16  */
-        }
-    }
-
-    /* Noise shaping quantization */
-    SKP_Silk_gains_quant( psEncCtrl->sCmn.GainsIndices, psEncCtrl->Gains_Q16, 
-        &psShapeSt->LastGainIndex, psEnc->sCmn.nFramesInPayloadBuf );
-    /* Set quantizer offset for voiced signals. Larger offset when LTP coding gain is low or tilt is high (ie low-pass) */
-    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
-        if( psEncCtrl->LTPredCodGain_Q7 + SKP_RSHIFT( psEncCtrl->input_tilt_Q15, 8 ) > ( 1 << 7 ) ) {
-            psEncCtrl->sCmn.QuantOffsetType = 0;
-        } else {
-            psEncCtrl->sCmn.QuantOffsetType = 1;
-        }
-    }
-
-    /* Quantizer boundary adjustment */
-    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
-        psEncCtrl->Lambda_Q10 = SKP_FIX_CONST( 1.3, 10 )
-                  - SKP_SMULWB( SKP_FIX_CONST( 0.5, 18 ), psEnc->speech_activity_Q8       )
-                  - SKP_SMULWB( SKP_FIX_CONST( 0.3, 12 ), psEncCtrl->input_quality_Q14    )
-                  + SKP_SMULBB( SKP_FIX_CONST( 0.2, 10 ), psEncCtrl->sCmn.QuantOffsetType )
-                  - SKP_SMULWB( SKP_FIX_CONST( 0.1, 12 ), psEncCtrl->coding_quality_Q14   );
-    } else {
-        psEncCtrl->Lambda_Q10 = SKP_FIX_CONST( 1.3, 10 )
-                  - SKP_SMULWB( SKP_FIX_CONST( 0.5, 18 ), psEnc->speech_activity_Q8       )
-                  - SKP_SMULWB( SKP_FIX_CONST( 0.4, 12 ), psEncCtrl->input_quality_Q14    )
-                  + SKP_SMULBB( SKP_FIX_CONST( 0.4, 10 ), psEncCtrl->sCmn.QuantOffsetType )
-                  - SKP_SMULWB( SKP_FIX_CONST( 0.1, 12 ), psEncCtrl->coding_quality_Q14   );
-    }
-    SKP_assert( psEncCtrl->Lambda_Q10 >= 0 );
-    SKP_assert( psEncCtrl->Lambda_Q10 < SKP_FIX_CONST( 2, 10 ) );
-    
-}
--- a/src/SKP_Silk_pulses_to_bytes.c
+++ /dev/null
@@ -1,77 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*
- * File Name:   SKP_Silk_pulses_to_bytes.c
- */
-
-#include <stdlib.h>
-#include "SKP_Silk_main.h"
-
-/* nBytes = sum_over_shell_blocks( POLY_FIT_0 + POLY_FIT_1 * sum_abs_val + POLY_FIT_2 * sum_abs_val^2 ) */
-#define POLY_FIT_0_Q15     12520
-#define POLY_FIT_1_Q15     15862
-#define POLY_FIT_2_Q20     -9222 // ToDo better training with 
-
-/* Predict number of bytes used to encode q */
-SKP_int SKP_Silk_pulses_to_bytes( /* O  Return value, predicted number of bytes used to encode q */ 
-    SKP_Silk_encoder_state          *psEncC,        /* I/O  Encoder State */
-    SKP_int                         q[]             /* I    Pulse signal  */
-)
-{
-    SKP_int i, j, iter, *q_ptr;
-    SKP_int32 sum_abs_val, nBytes, acc_nBytes;
-    /* Take the absolute value of the pulses */
-    iter = psEncC->frame_length / SHELL_CODEC_FRAME_LENGTH;
-    
-    /* Calculate rate as a nonlinaer mapping of sum abs value of each Shell block */
-    q_ptr      = q;
-    acc_nBytes = 0;
-    for( j = 0; j < iter; j++ ) {
-        sum_abs_val = 0;
-        for(i = 0; i < SHELL_CODEC_FRAME_LENGTH; i+=4){
-            sum_abs_val += SKP_abs( q_ptr[ i + 0 ] );
-            sum_abs_val += SKP_abs( q_ptr[ i + 1 ] );
-            sum_abs_val += SKP_abs( q_ptr[ i + 2 ] );
-            sum_abs_val += SKP_abs( q_ptr[ i + 3 ] );
-        }
-        /* Calculate nBytes used for thi sshell frame */
-        nBytes = SKP_SMULWB( SKP_SMULBB( sum_abs_val, sum_abs_val ), POLY_FIT_2_Q20 );  // Q4
-        nBytes = SKP_LSHIFT_SAT32( nBytes, 11 );                                        // Q15
-        nBytes += SKP_SMULBB( sum_abs_val, POLY_FIT_1_Q15 );                            // Q15
-        nBytes += POLY_FIT_0_Q15;                                                       // Q15
-
-        acc_nBytes += nBytes;
-
-        q_ptr += SHELL_CODEC_FRAME_LENGTH; /* update pointer */
-    }
-
-    acc_nBytes = SKP_RSHIFT_ROUND( acc_nBytes, 15 );                                    // Q0
-    acc_nBytes = SKP_SAT16( acc_nBytes ); // just to be sure                            // Q0
-    
-    return(( SKP_int )acc_nBytes);
-}
--- a/src/SKP_Silk_quant_LTP_gains_FIX.c
+++ /dev/null
@@ -1,106 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-void SKP_Silk_quant_LTP_gains_FIX(
-    SKP_int16               B_Q14[],                /* I/O  (un)quantized LTP gains     */
-    SKP_int                 cbk_index[],            /* O    Codebook Index              */
-    SKP_int                 *periodicity_index,     /* O    Periodicity Index           */
-    const SKP_int32         W_Q18[],                /* I    Error Weights in Q18        */
-    SKP_int                 mu_Q8,                  /* I    Mu value (R/D tradeoff)     */
-    SKP_int                 lowComplexity           /* I    Flag for low complexity     */
-)
-{
-    SKP_int             j, k, temp_idx[ NB_SUBFR ], cbk_size;
-    const SKP_uint16    *cdf_ptr;
-    const SKP_int16     *cl_ptr;
-    const SKP_int16     *cbk_ptr_Q14;
-    const SKP_int16     *b_Q14_ptr;
-    const SKP_int32     *W_Q18_ptr;
-    SKP_int32           rate_dist_subfr, rate_dist, min_rate_dist;
-
-
-
-    /***************************************************/
-    /* iterate over different codebooks with different */
-    /* rates/distortions, and choose best */
-    /***************************************************/
-    min_rate_dist = SKP_int32_MAX;
-    for( k = 0; k < 3; k++ ) {
-        cdf_ptr     = SKP_Silk_LTP_gain_CDF_ptrs[     k ];
-        cl_ptr      = SKP_Silk_LTP_gain_BITS_Q6_ptrs[ k ];
-        cbk_ptr_Q14 = SKP_Silk_LTP_vq_ptrs_Q14[       k ];
-        cbk_size    = SKP_Silk_LTP_vq_sizes[          k ];
-
-        /* Setup pointer to first subframe */
-        W_Q18_ptr = W_Q18;
-        b_Q14_ptr = B_Q14;
-
-        rate_dist = 0;
-        for( j = 0; j < NB_SUBFR; j++ ) {
-
-            SKP_Silk_VQ_WMat_EC_FIX(
-                &temp_idx[ j ],         /* O    index of best codebook vector                           */
-                &rate_dist_subfr,       /* O    best weighted quantization error + mu * rate            */
-                b_Q14_ptr,              /* I    input vector to be quantized                            */
-                W_Q18_ptr,              /* I    weighting matrix                                        */
-                cbk_ptr_Q14,            /* I    codebook                                                */
-                cl_ptr,                 /* I    code length for each codebook vector                    */
-                mu_Q8,                  /* I    tradeoff between weighted error and rate                */
-                cbk_size                /* I    number of vectors in codebook                           */
-            );
-
-            rate_dist = SKP_ADD_POS_SAT32( rate_dist, rate_dist_subfr );
-
-            b_Q14_ptr += LTP_ORDER;
-            W_Q18_ptr += LTP_ORDER * LTP_ORDER;
-        }
-
-        /* Avoid never finding a codebook */
-        rate_dist = SKP_min( SKP_int32_MAX - 1, rate_dist );
-
-        if( rate_dist < min_rate_dist ) {
-            min_rate_dist = rate_dist;
-            SKP_memcpy( cbk_index, temp_idx, NB_SUBFR * sizeof( SKP_int ) );
-            *periodicity_index = k;
-        }
-
-        /* Break early in low-complexity mode if rate distortion is below threshold */
-        if( lowComplexity && ( rate_dist < SKP_Silk_LTP_gain_middle_avg_RD_Q14 ) ) {
-            break;
-        }
-    }
-
-    cbk_ptr_Q14 = SKP_Silk_LTP_vq_ptrs_Q14[ *periodicity_index ];
-    for( j = 0; j < NB_SUBFR; j++ ) {
-        for( k = 0; k < LTP_ORDER; k++ ) { 
-            B_Q14[ j * LTP_ORDER + k ] = cbk_ptr_Q14[ SKP_MLA( k, cbk_index[ j ], LTP_ORDER ) ];
-        }
-    }
-}
-
--- a/src/SKP_Silk_range_coder.c
+++ /dev/null
@@ -1,372 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-/* Range encoder for one symbol */
-void SKP_Silk_range_encoder(
-    SKP_Silk_range_coder_state      *psRC,              /* I/O  compressor data structure                   */
-    const SKP_int                   data,               /* I    uncompressed data                           */
-    const SKP_uint16                prob[]              /* I    cumulative density functions                */
-)
-{
-    SKP_uint32 low_Q16, high_Q16;
-    SKP_uint32 base_tmp, range_Q32;
-
-    /* Copy structure data */
-    SKP_uint32 base_Q32  = psRC->base_Q32;
-    SKP_uint32 range_Q16 = psRC->range_Q16;
-    SKP_int32  bufferIx  = psRC->bufferIx;
-    SKP_uint8  *buffer   = psRC->buffer;
-
-    if( psRC->error ) {
-        return;
-    }
-
-    /* Update interval */
-    low_Q16  = prob[ data ];
-    high_Q16 = prob[ data + 1 ];
-    base_tmp = base_Q32; /* save current base, to test for carry */
-    base_Q32 += SKP_MUL_uint( range_Q16, low_Q16 );
-    range_Q32 = SKP_MUL_uint( range_Q16, high_Q16 - low_Q16 );
-
-    /* Check for carry */
-    if( base_Q32 < base_tmp ) {
-        /* Propagate carry in buffer */
-        SKP_int bufferIx_tmp = bufferIx;
-        while( ( ++buffer[ --bufferIx_tmp ] ) == 0 );
-    }
-
-    /* Check normalization */
-    if( range_Q32 & 0xFF000000 ) {
-        /* No normalization */
-        range_Q16 = SKP_RSHIFT_uint( range_Q32, 16 );
-    } else {
-        if( range_Q32 & 0xFFFF0000 ) {
-            /* Normalization of 8 bits shift */
-            range_Q16 = SKP_RSHIFT_uint( range_Q32, 8 );
-        } else {
-            /* Normalization of 16 bits shift */
-            range_Q16 = range_Q32;
-            /* Make sure not to write beyond buffer */
-            if( bufferIx >= psRC->bufferLength ) {
-                psRC->error = RANGE_CODER_WRITE_BEYOND_BUFFER;
-                return;
-            }
-            /* Write one byte to buffer */
-            buffer[ bufferIx++ ] = (SKP_uint8)( SKP_RSHIFT_uint( base_Q32, 24 ) );
-            base_Q32 = SKP_LSHIFT_ovflw( base_Q32, 8 );
-        }
-        /* Make sure not to write beyond buffer */
-        if( bufferIx >= psRC->bufferLength ) {
-            psRC->error = RANGE_CODER_WRITE_BEYOND_BUFFER;
-            return;
-        }
-        /* Write one byte to buffer */
-        buffer[ bufferIx++ ] = (SKP_uint8)( SKP_RSHIFT_uint( base_Q32, 24 ) );
-        base_Q32 = SKP_LSHIFT_ovflw( base_Q32, 8 );
-    }
-
-    /* Copy structure data back */
-    psRC->base_Q32  = base_Q32;
-    psRC->range_Q16 = range_Q16;
-    psRC->bufferIx  = bufferIx;
-}
-
-/* Range encoder for multiple symbols */
-void SKP_Silk_range_encoder_multi(
-    SKP_Silk_range_coder_state      *psRC,              /* I/O  compressor data structure                   */
-    const SKP_int                   data[],             /* I    uncompressed data    [nSymbols]             */
-    const SKP_uint16 * const        prob[],             /* I    cumulative density functions                */
-    const SKP_int                   nSymbols            /* I    number of data symbols                      */
-)
-{
-    SKP_int k;
-    for( k = 0; k < nSymbols; k++ ) {
-        SKP_Silk_range_encoder( psRC, data[ k ], prob[ k ] );
-    }
-}
-
-/* Range decoder for one symbol */
-void SKP_Silk_range_decoder(
-    SKP_int                         data[],             /* O    uncompressed data                           */
-    SKP_Silk_range_coder_state      *psRC,              /* I/O  compressor data structure                   */
-    const SKP_uint16                prob[],             /* I    cumulative density function                 */
-    SKP_int                         probIx              /* I    initial (middle) entry of cdf               */
-)
-{
-    SKP_uint32 low_Q16, high_Q16;
-    SKP_uint32 base_tmp, range_Q32;
-
-    /* Copy structure data */
-    SKP_uint32 base_Q32  = psRC->base_Q32;
-    SKP_uint32 range_Q16 = psRC->range_Q16;
-    SKP_int32  bufferIx  = psRC->bufferIx;
-    SKP_uint8  *buffer   = &psRC->buffer[ 4 ];
-
-    if( psRC->error ) {
-        /* Set output to zero */
-        *data = 0;
-        return;
-    }
-
-    high_Q16 = prob[ probIx ];
-    base_tmp = SKP_MUL_uint( range_Q16, high_Q16 );
-    if( base_tmp > base_Q32 ) {
-        while( 1 ) {
-            low_Q16 = prob[ --probIx ];
-            base_tmp = SKP_MUL_uint( range_Q16, low_Q16 );
-            if( base_tmp <= base_Q32 ) {
-                break;
-            }
-            high_Q16 = low_Q16;
-            /* Test for out of range */
-            if( high_Q16 == 0 ) {
-                psRC->error = RANGE_CODER_CDF_OUT_OF_RANGE;
-                /* Set output to zero */
-                *data = 0;
-                return;
-            }
-        }
-    } else {
-        while( 1 ) {
-            low_Q16  = high_Q16;
-            high_Q16 = prob[ ++probIx ];
-            base_tmp = SKP_MUL_uint( range_Q16, high_Q16 );
-            if( base_tmp > base_Q32 ) {
-                probIx--;
-                break;
-            }
-            /* Test for out of range */
-            if( high_Q16 == 0xFFFF ) {
-                psRC->error = RANGE_CODER_CDF_OUT_OF_RANGE;
-                /* Set output to zero */
-                *data = 0;
-                return;
-            }
-        }
-    }
-    *data = probIx;
-    base_Q32 -= SKP_MUL_uint( range_Q16, low_Q16 );
-    range_Q32 = SKP_MUL_uint( range_Q16, high_Q16 - low_Q16 );
-
-    /* Check normalization */
-    if( range_Q32 & 0xFF000000 ) {
-        /* No normalization */
-        range_Q16 = SKP_RSHIFT_uint( range_Q32, 16 );
-    } else {
-        if( range_Q32 & 0xFFFF0000 ) {
-            /* Normalization of 8 bits shift */
-            range_Q16 = SKP_RSHIFT_uint( range_Q32, 8 );
-            /* Check for errors */
-            if( SKP_RSHIFT_uint( base_Q32, 24 ) ) {
-                psRC->error = RANGE_CODER_NORMALIZATION_FAILED;
-                /* Set output to zero */
-                *data = 0;
-                return;
-            }
-        } else {
-            /* Normalization of 16 bits shift */
-            range_Q16 = range_Q32;
-            /* Check for errors */
-            if( SKP_RSHIFT( base_Q32, 16 ) ) {
-                psRC->error = RANGE_CODER_NORMALIZATION_FAILED;
-                /* Set output to zero */
-                *data = 0;
-                return;
-            }
-            /* Update base */
-            base_Q32 = SKP_LSHIFT_uint( base_Q32, 8 );
-            /* Make sure not to read beyond buffer */
-            if( bufferIx < psRC->bufferLength ) {
-                /* Read one byte from buffer */
-                base_Q32 |= (SKP_uint32)buffer[ bufferIx++ ];
-            }
-        }
-        /* Update base */
-        base_Q32 = SKP_LSHIFT_uint( base_Q32, 8 );
-        /* Make sure not to read beyond buffer */
-        if( bufferIx < psRC->bufferLength ) {
-            /* Read one byte from buffer */
-            base_Q32 |= (SKP_uint32)buffer[ bufferIx++ ];
-        }
-    }
-
-    /* Check for zero interval length */
-    if( range_Q16 == 0 ) {
-        psRC->error = RANGE_CODER_ZERO_INTERVAL_WIDTH;
-        /* Set output to zero */
-        *data = 0;
-        return;
-    }
-
-    /* Copy structure data back */
-    psRC->base_Q32  = base_Q32;
-    psRC->range_Q16 = range_Q16;
-    psRC->bufferIx  = bufferIx;
-}
-
-/* Range decoder for multiple symbols */
-void SKP_Silk_range_decoder_multi(
-    SKP_int                         data[],             /* O    uncompressed data                [nSymbols] */
-    SKP_Silk_range_coder_state      *psRC,              /* I/O  compressor data structure                   */
-    const SKP_uint16 * const        prob[],             /* I    cumulative density functions                */
-    const SKP_int                   probStartIx[],      /* I    initial (middle) entries of cdfs [nSymbols] */
-    const SKP_int                   nSymbols            /* I    number of data symbols                      */
-)
-{
-    SKP_int k;
-    for( k = 0; k < nSymbols; k++ ) {
-        SKP_Silk_range_decoder( &data[ k ], psRC, prob[ k ], probStartIx[ k ] );
-    }
-}
-
-/* Initialize range encoder */
-void SKP_Silk_range_enc_init(
-    SKP_Silk_range_coder_state      *psRC               /* O    compressor data structure                   */
-)
-{
-    /* Initialize structure */
-    psRC->bufferLength = MAX_ARITHM_BYTES;
-    psRC->range_Q16    = 0x0000FFFF;
-    psRC->bufferIx     = 0;
-    psRC->base_Q32     = 0;
-    psRC->error        = 0;
-}
-
-/* Initialize range decoder */
-void SKP_Silk_range_dec_init(
-    SKP_Silk_range_coder_state      *psRC,              /* O    compressor data structure                   */
-    const SKP_uint8                 buffer[],           /* I    buffer for compressed data [bufferLength]   */
-    const SKP_int32                 bufferLength        /* I    buffer length (in bytes)                    */
-)
-{
-    /* check input */
-    if( bufferLength > MAX_ARITHM_BYTES ) {
-        psRC->error = RANGE_CODER_DEC_PAYLOAD_TOO_LONG;
-        return;
-    }
-    /* Initialize structure */
-    /* Copy to internal buffer */
-    SKP_memcpy( psRC->buffer, buffer, bufferLength * sizeof( SKP_uint8 ) ); 
-    psRC->bufferLength = bufferLength;
-    psRC->bufferIx = 0;
-    psRC->base_Q32 = 
-        SKP_LSHIFT_uint( (SKP_uint32)buffer[ 0 ], 24 ) | 
-        SKP_LSHIFT_uint( (SKP_uint32)buffer[ 1 ], 16 ) | 
-        SKP_LSHIFT_uint( (SKP_uint32)buffer[ 2 ],  8 ) | 
-                         (SKP_uint32)buffer[ 3 ];
-    psRC->range_Q16 = 0x0000FFFF;
-    psRC->error     = 0;
-}
-
-/* Determine length of bitstream */
-SKP_int SKP_Silk_range_coder_get_length(                /* O    returns number of BITS in stream            */
-    const SKP_Silk_range_coder_state    *psRC,          /* I    compressed data structure                   */
-    SKP_int                             *nBytes         /* O    number of BYTES in stream                   */
-)
-{
-    SKP_int nBits;
-
-    /* Number of additional bits (1..9) required to be stored to stream */
-    nBits = SKP_LSHIFT( psRC->bufferIx, 3 ) + SKP_Silk_CLZ32( psRC->range_Q16 - 1 ) - 14;
-
-    *nBytes = SKP_RSHIFT( nBits + 7, 3 );
-
-    /* Return number of bits in bitstream */
-    return nBits;
-}
-
-/* Write shortest uniquely decodable stream to buffer, and determine its length */
-void SKP_Silk_range_enc_wrap_up(
-    SKP_Silk_range_coder_state      *psRC               /* I/O  compressed data structure                   */
-)
-{
-    SKP_int bufferIx_tmp, bits_to_store, bits_in_stream, nBytes, mask;
-    SKP_uint32 base_Q24;
-
-    /* Lower limit of interval, shifted 8 bits to the right */
-    base_Q24 = SKP_RSHIFT_uint( psRC->base_Q32, 8 );
-
-    bits_in_stream = SKP_Silk_range_coder_get_length( psRC, &nBytes );
-
-    /* Number of additional bits (1..9) required to be stored to stream */
-    bits_to_store = bits_in_stream - SKP_LSHIFT( psRC->bufferIx, 3 );
-    /* Round up to required resolution */
-    base_Q24 += SKP_RSHIFT_uint(  0x00800000, bits_to_store - 1 );
-    base_Q24 &= SKP_LSHIFT_ovflw( 0xFFFFFFFF, 24 - bits_to_store );
-
-    /* Check for carry */
-    if( base_Q24 & 0x01000000 ) {
-        /* Propagate carry in buffer */
-        bufferIx_tmp = psRC->bufferIx;
-        while( ( ++( psRC->buffer[ --bufferIx_tmp ] ) ) == 0 );
-    }
-
-    /* Store to stream, making sure not to write beyond buffer */
-    if( psRC->bufferIx < psRC->bufferLength ) {
-        psRC->buffer[ psRC->bufferIx++ ] = (SKP_uint8)SKP_RSHIFT_uint( base_Q24, 16 );
-        if( bits_to_store > 8 ) {
-            if( psRC->bufferIx < psRC->bufferLength ) {
-                psRC->buffer[ psRC->bufferIx++ ] = (SKP_uint8)SKP_RSHIFT_uint( base_Q24, 8 );
-            }
-        }
-    }
-
-    /* Fill up any remaining bits in the last byte with 1s */
-    if( bits_in_stream & 7 ) {
-        mask = SKP_RSHIFT( 0xFF, bits_in_stream & 7 );
-        if( nBytes - 1 < psRC->bufferLength ) {
-            psRC->buffer[ nBytes - 1 ] |= mask;
-        }
-    }
-}
-
-/* Check that any remaining bits in the last byte are set to 1 */
-void SKP_Silk_range_coder_check_after_decoding(
-    SKP_Silk_range_coder_state      *psRC               /* I/O  compressed data structure                   */
-)
-{
-    SKP_int bits_in_stream, nBytes, mask;
-
-    bits_in_stream = SKP_Silk_range_coder_get_length( psRC, &nBytes );
-
-    /* Make sure not to read beyond buffer */
-    if( nBytes - 1 >= psRC->bufferLength ) {
-        psRC->error = RANGE_CODER_DECODER_CHECK_FAILED;
-        return;
-    }
-
-    /* Test any remaining bits in last byte */
-    if( bits_in_stream & 7 ) {
-        mask = SKP_RSHIFT( 0xFF, bits_in_stream & 7 );
-        if( ( psRC->buffer[ nBytes - 1 ] & mask ) != mask ) {
-            psRC->error = RANGE_CODER_DECODER_CHECK_FAILED;
-            return;
-        }
-    }
-}
--- a/src/SKP_Silk_regularize_correlations_FIX.c
+++ /dev/null
@@ -1,43 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-/* Add noise to matrix diagonal */
-void SKP_Silk_regularize_correlations_FIX(
-    SKP_int32                       *XX,                /* I/O  Correlation matrices                        */
-    SKP_int32                       *xx,                /* I/O  Correlation values                          */
-    SKP_int32                       noise,              /* I    Noise to add                                */
-    SKP_int                         D                   /* I    Dimension of XX                             */
-)
-{
-    SKP_int i;
-    for( i = 0; i < D; i++ ) {
-        matrix_ptr( &XX[ 0 ], i, i, D ) = SKP_ADD32( matrix_ptr( &XX[ 0 ], i, i, D ), noise );
-    }
-    xx[ 0 ] += noise;
-}
--- a/src/SKP_Silk_resample_1_2.c
+++ /dev/null
@@ -1,77 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_resample_1_2                                              *
- *                                                                      *
- * Downsample by a factor 2                                             *
- *                                                                      *
- * Copyright 2006 (c), Skype Limited                                    *
- * Date: 060221                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Coefficients for 2-fold resampling */
-static SKP_int16 A20_Resample_1_2[ 3 ] = { 1254, 10102, 22898 };
-static SKP_int16 A21_Resample_1_2[ 3 ] = { 4810, 16371, 29374 };
-
-
-/* Downsample by a factor 2 */
-void SKP_Silk_resample_1_2(
-    const SKP_int16      *in,            /* I:   16 kHz signal [2*len]   */
-    SKP_int32            *S,             /* I/O: State vector [6]        */
-    SKP_int16            *out,           /* O:   8 kHz signal [len]      */
-    SKP_int32            *scratch,       /* I:   Scratch memory [4*len]  */
-    const SKP_int32      len             /* I:   Number of OUTPUT samples*/
-)
-{
-    SKP_int32    k, idx;
-
-    /* De-interleave allpass inputs, and convert Q15 -> Q25 */
-    for( k = 0; k < len; k++ ) {
-        idx = SKP_LSHIFT( k, 1 );
-        scratch[ k ]       = SKP_LSHIFT( (SKP_int32)in[ idx     ], 10 );
-        scratch[ k + len ] = SKP_LSHIFT( (SKP_int32)in[ idx + 1 ], 10 );
-    }
-
-    idx = SKP_LSHIFT( len, 1 );
-
-    /* Allpass filters */
-    SKP_Silk_allpass_int( scratch,             S,     A21_Resample_1_2[ 0 ], scratch + idx,       len );
-    SKP_Silk_allpass_int( scratch + idx,       S + 1, A21_Resample_1_2[ 1 ], scratch + idx + len, len );
-    SKP_Silk_allpass_int( scratch + idx + len, S + 2, A21_Resample_1_2[ 2 ], scratch,             len );
-
-    SKP_Silk_allpass_int( scratch + len,       S + 3, A20_Resample_1_2[ 0 ], scratch + idx,       len );
-    SKP_Silk_allpass_int( scratch + idx,       S + 4, A20_Resample_1_2[ 1 ], scratch + idx + len, len );
-    SKP_Silk_allpass_int( scratch + idx + len, S + 5, A20_Resample_1_2[ 2 ], scratch + len,       len );
-
-    /* Add two allpass outputs */
-    for( k = 0; k < len; k++ ) {
-        out[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( scratch[ k ] + scratch[ k + len ], 11 ) );
-    }
-}
-
--- a/src/SKP_Silk_resample_1_2_coarse.c
+++ /dev/null
@@ -1,74 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_resample_1_2_coarse.c                                     *
- *                                                                      *
- * Downsample by a factor 2, coarser                                    *
- *                                                                      *
- * Copyright 2006 (c), Skype Limited                                    *
- * Date: 060221                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* downsample by a factor 2, coarser */
-void SKP_Silk_resample_1_2_coarse(
-    const SKP_int16      *in,            /* I:   16 kHz signal [2*len]   */
-    SKP_int32            *S,             /* I/O: State vector [4]        */
-    SKP_int16            *out,           /* O:   8 kHz signal [len]      */
-    SKP_int32            *scratch,       /* I:   Scratch memory [3*len]  */
-    const SKP_int32      len             /* I:   Number of OUTPUT samples*/
-)
-{
-    SKP_int32 k, idx;
-    
-    /* Coefficients for coarser 2-fold resampling */
-    const SKP_int16 A20c[ 2 ] = { 2119, 16663 };
-    const SKP_int16 A21c[ 2 ] = { 8050, 26861 };
-
-    /* De-interleave allpass inputs, and convert Q15 -> Q25 */
-    for( k = 0; k < len; k++ ) {
-        idx = SKP_LSHIFT( k, 1 );
-        scratch[ k ]       = SKP_LSHIFT( (SKP_int32)in[ idx     ], 10 );
-        scratch[ k + len ] = SKP_LSHIFT( (SKP_int32)in[ idx + 1 ], 10 );
-    }
-
-    idx = SKP_LSHIFT( len, 1 );
-    /* Allpass filters */
-    SKP_Silk_allpass_int( scratch,       S,     A21c[ 0 ], scratch + idx, len );
-    SKP_Silk_allpass_int( scratch + idx, S + 1, A21c[ 1 ], scratch,       len );
-
-    SKP_Silk_allpass_int( scratch + len, S + 2, A20c[ 0 ], scratch + idx, len );
-    SKP_Silk_allpass_int( scratch + idx, S + 3, A20c[ 1 ], scratch + len, len );
-
-    /* Add two allpass outputs */
-    for( k = 0; k < len; k++ ) {
-        out[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( scratch[ k ] + scratch[ k + len ], 11 ) );
-    }
-}
-
-
--- a/src/SKP_Silk_resample_1_2_coarsest.c
+++ /dev/null
@@ -1,71 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_resample_1_2_coarsest.c                                   *
- *                                                                      *
- * Downsample by a factor 2, coarsest                                   *
- *                                                                      *
- * Copyright 2006 (c), Skype Limited                                    *
- * Date: 060221                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-
-/* Coefficients for coarsest 2-fold resampling */
-static SKP_int16 A20cst[ 1 ] = {  3786 };
-static SKP_int16 A21cst[ 1 ] = { 17908 };
-
-/* Downsample by a factor 2, coarsest */
-void SKP_Silk_resample_1_2_coarsest(
-    const SKP_int16     *in,                /* I:   16 kHz signal [2*len]   */
-    SKP_int32           *S,                 /* I/O: State vector [2]        */
-    SKP_int16           *out,               /* O:   8 kHz signal [len]      */
-    SKP_int32           *scratch,           /* I:   Scratch memory [3*len]  */
-    const SKP_int32     len                 /* I:   Number of OUTPUT samples*/
-)
-{
-    SKP_int32 k, idx;
-
-    /* De-interleave allpass inputs, and convert Q15 -> Q25 */
-    for( k = 0; k < len; k++ ) {
-        idx = SKP_LSHIFT( k, 1 );
-        scratch[ k ]       = SKP_LSHIFT( (SKP_int32)in[ idx     ], 10 );
-        scratch[ k + len ] = SKP_LSHIFT( (SKP_int32)in[ idx + 1 ], 10 );
-    }
-
-    idx = SKP_LSHIFT( len, 1 );
-    /* Allpass filters */
-    SKP_Silk_allpass_int( scratch,       S,     A21cst[ 0 ], scratch + idx, len );
-    SKP_Silk_allpass_int( scratch + len, S + 1, A20cst[ 0 ], scratch,       len );
-
-    /* Add two allpass outputs */
-    for( k = 0; k < len; k++ ) {
-        out[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( scratch[ k ] + scratch[ k + idx ], 11 ) );
-    }
-}
-
--- a/src/SKP_Silk_resample_1_3.c
+++ /dev/null
@@ -1,101 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_resample_1_3.c                                            *
- *                                                                      *
- * Downsamples by a factor 3                                            *
- *                                                                      *
- * Copyright 2008 (c), Skype Limited                                    *
- * Date: 081113                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-#define OUT_SUBFR_LEN        80
-
-/* Downsamples by a factor 3 */
-void SKP_Silk_resample_1_3(
-    SKP_int16            *out,       /* O:   Fs_low signal  [inLen/3]                */
-    SKP_int32            *S,         /* I/O: State vector   [7]                      */
-    const SKP_int16      *in,        /* I:   Fs_high signal [inLen]                  */
-    const SKP_int32      inLen       /* I:   Input length, must be a multiple of 3   */
-)
-{
-    SKP_int      k, outLen, LSubFrameIn, LSubFrameOut;
-    SKP_int32    out_tmp, limit = 102258000; // (102258000 + 1560) * 21 * 2^(-16) = 32767.5
-    SKP_int32    scratch0[ 3 * OUT_SUBFR_LEN ];
-    SKP_int32    scratch10[ OUT_SUBFR_LEN ], scratch11[ OUT_SUBFR_LEN ], scratch12[ OUT_SUBFR_LEN ];
-    /* coefficients for 3-fold resampling */
-    const SKP_int16 A30[ 2 ] = {  1773, 17818 };
-    const SKP_int16 A31[ 2 ] = {  4942, 25677 };
-    const SKP_int16 A32[ 2 ] = { 11786, 29304 };
-
-    /* Check that input is multiple of 3 */
-    SKP_assert( inLen % 3 == 0 );
-
-    outLen = SKP_DIV32_16( inLen, 3 );
-    while( outLen > 0 ) {
-        LSubFrameOut = SKP_min_int( OUT_SUBFR_LEN, outLen );
-        LSubFrameIn  = SKP_SMULBB( 3, LSubFrameOut );
-
-        /* Low-pass filter, Q15 -> Q25 */
-        SKP_Silk_lowpass_short( in, S, scratch0, LSubFrameIn );
-
-        /* De-interleave three allpass inputs */
-        for( k = 0; k < LSubFrameOut; k++ ) {
-            scratch10[ k ] = scratch0[ 3 * k     ];
-            scratch11[ k ] = scratch0[ 3 * k + 1 ];
-            scratch12[ k ] = scratch0[ 3 * k + 2 ];
-        }
-
-        /* Allpass filters */
-        SKP_Silk_allpass_int( scratch10, S + 1, A32[ 0 ], scratch0,  LSubFrameOut );
-        SKP_Silk_allpass_int( scratch0,  S + 2, A32[ 1 ], scratch10, LSubFrameOut );
-
-        SKP_Silk_allpass_int( scratch11, S + 3, A31[ 0 ], scratch0,  LSubFrameOut );
-        SKP_Silk_allpass_int( scratch0,  S + 4, A31[ 1 ], scratch11, LSubFrameOut );
-
-        SKP_Silk_allpass_int( scratch12, S + 5, A30[ 0 ], scratch0,  LSubFrameOut );
-        SKP_Silk_allpass_int( scratch0,  S + 6, A30[ 1 ], scratch12, LSubFrameOut );
-
-        /* Add three allpass outputs */
-        for( k = 0; k < LSubFrameOut; k++ ) {
-            out_tmp = scratch10[ k ] + scratch11[ k ] + scratch12[ k ];
-            if( out_tmp - limit > 0 ) {
-                out[ k ] = SKP_int16_MAX;
-            } else if( out_tmp + limit < 0 ) {
-                out[ k ] = SKP_int16_MIN;
-            } else {
-                out[ k ] = (SKP_int16) SKP_SMULWB( out_tmp + 1560, 21 );
-            }
-        }
-
-        in     += LSubFrameIn;
-        out    += LSubFrameOut;
-        outLen -= LSubFrameOut;
-    }
-}
--- a/src/SKP_Silk_resample_2_1_coarse.c
+++ /dev/null
@@ -1,73 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_resample_2_1_coarse.c                                     *
- *                                                                      *
- * Upsample by a factor 2, coarser                                      *
- *                                                                      *
- * Copyright 2006 (c), Skype Limited                                    *
- * Date: 060221                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Upsample by a factor 2, coarser */
-void SKP_Silk_resample_2_1_coarse(
-    const SKP_int16      *in,            /* I:   8 kHz signal [len]      */
-    SKP_int32            *S,             /* I/O: State vector [4]        */
-    SKP_int16            *out,           /* O:   16 kHz signal [2*len]   */
-    SKP_int32            *scratch,       /* I:   Scratch memory [3*len]  */
-    const SKP_int32      len             /* I:   Number of INPUT samples */
-)
-{
-    SKP_int32 k, idx;
-    
-    /* Coefficients for coarser 2-fold resampling */
-    const SKP_int16 A20c[ 2 ] = { 2119, 16663 };
-    const SKP_int16 A21c[ 2 ] = { 8050, 26861 };
-
-    /* Convert Q15 -> Q25 */
-    for( k = 0; k < len; k++ ) {
-        scratch[ k ] = SKP_LSHIFT( (SKP_int32)in[ k ], 10 );
-    }
-       
-    idx = SKP_LSHIFT( len, 1 );
-    
-    /* Allpass filters */
-    SKP_Silk_allpass_int( scratch,       S,     A20c[ 0 ], scratch + idx, len );
-    SKP_Silk_allpass_int( scratch + idx, S + 1, A20c[ 1 ], scratch + len, len );
-
-    SKP_Silk_allpass_int( scratch,       S + 2, A21c[ 0 ], scratch + idx, len );
-    SKP_Silk_allpass_int( scratch + idx, S + 3, A21c[ 1 ], scratch,       len );
-
-    /* Interleave two allpass outputs */
-    for( k = 0; k < len; k++ ) {
-        idx = SKP_LSHIFT( k, 1 );
-        out[ idx     ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( scratch[ k + len ], 10 ) );
-        out[ idx + 1 ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( scratch[ k ],       10 ) );
-    }
-}
--- a/src/SKP_Silk_resample_2_3.c
+++ /dev/null
@@ -1,74 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * File Name:    SKP_Silk_resample_2_3.c                              *
- *                                                                      *
- * Resamples by a factor 2/3                                            *
- *                                                                      *
- * Copyright 2008 (c), Skype Limited                                    *
- * All rights reserved.                                                 *
- *                                                                      *
- * Date: 081113                                                         *
- *                                                                      */
-
-#include "SKP_Silk_SigProc_FIX.h"
-
-#define OUT_SUBFR_LEN        80
-
-/* Resamples by a factor 2/3 */
-void SKP_Silk_resample_2_3(
-    SKP_int16            *out,       /* O:   Fs_low signal    [inLen * 2/3]           */
-    SKP_int32            *S,         /* I/O: State vector     [7+4]                   */
-    const SKP_int16      *in,        /* I:   Fs_high signal   [inLen]                 */
-    const SKP_int        inLen       /* I:   Input length, must be a multiple of 3    */
-)
-{
-    SKP_int      outLen, LSubFrameIn, LSubFrameOut;
-    SKP_int16    outH[      3 * OUT_SUBFR_LEN ];
-    SKP_int32    scratch[ ( 9 * OUT_SUBFR_LEN ) / 2 ];
-
-    /* Check that input length is multiple of 3 */
-    SKP_assert( inLen % 3 == 0 );
-
-    outLen = SKP_DIV32_16( SKP_LSHIFT( inLen, 1 ), 3 );
-    while( outLen > 0 ) {
-        LSubFrameOut = SKP_min_int( OUT_SUBFR_LEN, outLen );
-        LSubFrameIn  = SKP_SMULWB( 98304, LSubFrameOut ); /* 98304_Q16 = 3/2_Q0 */
-            
-        /* Upsample by a factor 2 */
-        /* Scratch size needs to be: 3 * LSubFrameIn * sizeof( SKP_int32 ) */
-        SKP_Silk_resample_2_1_coarse( in, &S[ 0 ], outH, scratch, LSubFrameIn );
-
-        /* Downsample by a factor 3 */
-        SKP_Silk_resample_1_3( out, &S[ 4 ], outH, SKP_LSHIFT( LSubFrameIn, 1 ) );
-
-        in     += LSubFrameIn;
-        out    += LSubFrameOut;
-        outLen -= LSubFrameOut;
-    }
-}
--- a/src/SKP_Silk_resample_2_3_coarse.c
+++ /dev/null
@@ -1,112 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * File Name:   SKP_Silk_resample_2_3_coarse.c                        *
- *                                                                      *
- * Description: Linear phase FIR polyphase implementation of resampling *
- *                                                                      *
- * Copyright 2009 (c), Skype Limited                                    *
- * All rights reserved.                                                 *
- *                                                                      *
- * Date: 090423                                                         *
- *                                                                      */
-
-#include "SKP_Silk_SigProc_FIX.h"
-#include "SKP_Silk_resample_rom.h"
-
-/* Resamples input data with a factor 2/3 */
-void SKP_Silk_resample_2_3_coarse( 
-    SKP_int16           *out,           /* O:   Output signal                                                                   */
-    SKP_int16           *S,             /* I/O: Resampler state [ SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ]               */
-    const SKP_int16     *in,            /* I:   Input signal                                                                    */
-    const SKP_int       frameLenIn,     /* I:   Number of input samples                                                         */
-    SKP_int16           *scratch        /* I:   Scratch memory [ frameLenIn + SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ]   */
-)
-{
-    SKP_int32 n, ind, interpol_ind, tmp, index_Q16;
-    SKP_int16 *in_ptr;
-    SKP_int   frameLenOut;
-    const SKP_int16 *interpol_ptr;
-
-    /* Copy buffered samples to start of scratch */
-    SKP_memcpy( scratch, S, ( SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ) * sizeof( SKP_int16 ) );
-    
-    /* Then append by the input signal */
-    SKP_memcpy( &scratch[ SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ], in, frameLenIn * sizeof( SKP_int16 ) ); 
-
-    frameLenOut = SKP_DIV32_16( SKP_MUL( 2, frameLenIn ), 3 );
-    index_Q16 = 0;
-
-    SKP_assert( frameLenIn == ( ( frameLenOut * 3 ) / 2 ) );
-    
-    /* Interpolate */
-    for( n = frameLenOut; n > 0; n-- ) {
-
-        /* Integer part */
-        ind = SKP_RSHIFT( index_Q16, 16 );
-
-        /* Pointer to buffered input */
-        in_ptr = scratch + ind;
-
-        /* Fractional part */
-        interpol_ind = ( SKP_SMULWB( index_Q16, SigProc_Resample_2_3_coarse_NUM_INTERPOLATORS ) & 
-                       ( SigProc_Resample_2_3_coarse_NUM_INTERPOLATORS - 1 ) );
-
-        /* Pointer to FIR taps */
-        interpol_ptr = SigProc_Resample_2_3_coarse_INTERPOL[ interpol_ind ];
-
-        /* Interpolate */
-        /* Hardcoded for 32 FIR taps */
-        SKP_assert( SigProc_Resample_2_3_coarse_NUM_FIR_COEFS == 32 );
-        tmp = (SKP_int32)interpol_ptr[  0 ] * in_ptr[  0 ] + (SKP_int32)interpol_ptr[  1 ] * in_ptr[  1 ] +
-              (SKP_int32)interpol_ptr[  2 ] * in_ptr[  2 ] + (SKP_int32)interpol_ptr[  3 ] * in_ptr[  3 ] +
-              (SKP_int32)interpol_ptr[  4 ] * in_ptr[  4 ] + (SKP_int32)interpol_ptr[  5 ] * in_ptr[  5 ] +
-              (SKP_int32)interpol_ptr[  6 ] * in_ptr[  6 ] + (SKP_int32)interpol_ptr[  7 ] * in_ptr[  7 ] +
-              (SKP_int32)interpol_ptr[  8 ] * in_ptr[  8 ] + (SKP_int32)interpol_ptr[  9 ] * in_ptr[  9 ] +
-              (SKP_int32)interpol_ptr[ 10 ] * in_ptr[ 10 ] + (SKP_int32)interpol_ptr[ 11 ] * in_ptr[ 11 ] +
-              (SKP_int32)interpol_ptr[ 12 ] * in_ptr[ 12 ] + (SKP_int32)interpol_ptr[ 13 ] * in_ptr[ 13 ] +
-              (SKP_int32)interpol_ptr[ 14 ] * in_ptr[ 14 ] + (SKP_int32)interpol_ptr[ 15 ] * in_ptr[ 15 ] +
-              (SKP_int32)interpol_ptr[ 16 ] * in_ptr[ 16 ] + (SKP_int32)interpol_ptr[ 17 ] * in_ptr[ 17 ] +
-              (SKP_int32)interpol_ptr[ 18 ] * in_ptr[ 18 ] + (SKP_int32)interpol_ptr[ 19 ] * in_ptr[ 19 ] +
-              (SKP_int32)interpol_ptr[ 20 ] * in_ptr[ 20 ] + (SKP_int32)interpol_ptr[ 21 ] * in_ptr[ 21 ] +
-              (SKP_int32)interpol_ptr[ 22 ] * in_ptr[ 22 ] + (SKP_int32)interpol_ptr[ 23 ] * in_ptr[ 23 ] +
-              (SKP_int32)interpol_ptr[ 24 ] * in_ptr[ 24 ] + (SKP_int32)interpol_ptr[ 25 ] * in_ptr[ 25 ] +
-              (SKP_int32)interpol_ptr[ 26 ] * in_ptr[ 26 ] + (SKP_int32)interpol_ptr[ 27 ] * in_ptr[ 27 ] +
-              (SKP_int32)interpol_ptr[ 28 ] * in_ptr[ 28 ] + (SKP_int32)interpol_ptr[ 29 ] * in_ptr[ 29 ];
-
-        /* Round, saturate and store to output array */
-        *out++ = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( tmp, 15 ) );
-
-        /* Update index */
-        index_Q16 += ( ( 1 << 16 ) + ( 1 << 15 ) ); // (3/2)_Q0;
-    }
-
-    /* Move last part of input signal to the sample buffer to prepare for the next call */
-    SKP_memcpy( S, &in[ frameLenIn - ( SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ) ],
-                ( SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ) * sizeof( SKP_int16 ) );
-}
--- a/src/SKP_Silk_resample_2_3_coarsest.c
+++ /dev/null
@@ -1,131 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * File Name:   SKP_Silk_resample_2_3_coarsest.c                      *
- *                                                                      *
- * Description: Linear phase FIR polyphase implementation of resampling *
- *                                                                      *
- * Copyright 2009 (c), Skype Limited                                    *
- * All rights reserved.                                                 *
- *                                                                      *
- * Date: 090423                                                         *
- *                                                                      */
-
-#include "SKP_Silk_SigProc_FIX.h"
-#include "SKP_Silk_resample_rom.h"
-
-/* Resamples input data with a factor 2/3 */
-void SKP_Silk_resample_2_3_coarsest( 
-    SKP_int16           *out,           /* O:   Output signal                                                                   */
-    SKP_int16           *S,             /* I/O: Resampler state [ SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ]             */
-    const SKP_int16     *in,            /* I:   Input signal                                                                    */
-    const SKP_int       frameLenIn,     /* I:   Number of input samples                                                         */
-    SKP_int16           *scratch        /* I:   Scratch memory [ frameLenIn + SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ] */
-)
-{
-    SKP_int32 n, ind, interpol_ind, tmp, index_Q16;
-    SKP_int16 *in_ptr;
-    SKP_int   frameLenOut;
-    const SKP_int16 *interpol_ptr;
-#if ( EMBEDDED_ARM>=6 ) && defined (__GNUC__)
-    SKP_int32   in_val, interpol_val;
-#endif
-
-    /* Copy buffered samples to start of scratch */
-    SKP_memcpy( scratch, S, ( SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ) * sizeof( SKP_int16 ) );    
-    
-    /* Then append by the input signal */
-    SKP_memcpy( &scratch[ SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ], in, frameLenIn * sizeof( SKP_int16 ) ); 
-
-    frameLenOut = SKP_SMULWB( SKP_LSHIFT( (SKP_int32)frameLenIn, 1 ), 21846 ); // 21846_Q15 = (2/3)_Q0 rounded _up_
-    index_Q16 = 0;
-
-    SKP_assert( frameLenIn == ( ( frameLenOut * 3 ) / 2 ) );
-    
-    /* Interpolate */
-    for( n = frameLenOut; n > 0; n-- ) {
-
-        /* Integer part */
-        ind = SKP_RSHIFT( index_Q16, 16 );
-
-        /* Pointer to buffered input */
-        in_ptr = scratch + ind;
-
-        /* Fractional part */
-        interpol_ind = ( SKP_SMULWB( index_Q16, SigProc_Resample_2_3_coarsest_NUM_INTERPOLATORS ) & 
-                       ( SigProc_Resample_2_3_coarsest_NUM_INTERPOLATORS - 1 ) );
-
-        /* Pointer to FIR taps */
-        interpol_ptr = SigProc_Resample_2_3_coarsest_INTERPOL[ interpol_ind ];
-
-        /* Interpolate: Hardcoded for 10 FIR taps */
-#if ( EMBEDDED_ARM>=6 ) && defined (__GNUC__)       /*It doesn't improve efficiency on iphone.*/
-        /*tmp = SKP_SMUAD(    *((SKP_int32 *)interpol_ptr)++, *((SKP_int32 *)in_ptr)++);
-        tmp = SKP_SMLAD( tmp, *((SKP_int32 *)interpol_ptr)++, *((SKP_int32 *)in_ptr)++);
-        tmp = SKP_SMLAD( tmp, *((SKP_int32 *)interpol_ptr),   *((SKP_int32 *)in_ptr)  );*/
-        __asm__ __volatile__ (  "ldr    %1, [%3], #4 \n\t"
-                                "ldr    %2, [%4], #4 \n\t"
-                                "smuad  %0, %1, %2 \n\t"
-                                "ldr    %1, [%3], #4 \n\t"
-                                "ldr    %2, [%4], #4 \n\t"
-                                "smlad  %0, %1, %2, %0\n\t"
-                                "ldr    %1, [%3], #4 \n\t"
-                                "ldr    %2, [%4], #4 \n\t"
-                                "smlad  %0, %1, %2, %0\n\t"
-                                "ldr    %1, [%3], #4 \n\t"
-                                "ldr    %2, [%4], #4 \n\t"
-                                "smlad  %0, %1, %2, %0\n\t"
-                                "ldr    %1, [%3] \n\t"
-                                "ldr    %2, [%4] \n\t"
-                                "smlad  %0, %1, %2, %0\n\t"
-                                : "=r" (tmp), "=r" (interpol_val), "=r" (in_val), "=r" (interpol_ptr), "=r" (in_ptr) 
-                                : "3" (interpol_ptr), "4" (in_ptr));    
-#else
-        SKP_assert( SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS == 10 );
-        tmp = SKP_SMULBB(      interpol_ptr[ 0 ], in_ptr[ 0 ] );
-        tmp = SKP_SMLABB( tmp, interpol_ptr[ 1 ], in_ptr[ 1 ] ); 
-        tmp = SKP_SMLABB( tmp, interpol_ptr[ 2 ], in_ptr[ 2 ] );    
-        tmp = SKP_SMLABB( tmp, interpol_ptr[ 3 ], in_ptr[ 3 ] );    
-        tmp = SKP_SMLABB( tmp, interpol_ptr[ 4 ], in_ptr[ 4 ] );    
-        tmp = SKP_SMLABB( tmp, interpol_ptr[ 5 ], in_ptr[ 5 ] );    
-        tmp = SKP_SMLABB( tmp, interpol_ptr[ 6 ], in_ptr[ 6 ] );    
-        tmp = SKP_SMLABB( tmp, interpol_ptr[ 7 ], in_ptr[ 7 ] );    
-        tmp = SKP_SMLABB( tmp, interpol_ptr[ 8 ], in_ptr[ 8 ] );    
-        tmp = SKP_SMLABB( tmp, interpol_ptr[ 9 ], in_ptr[ 9 ] );
-#endif
-        /* Round, saturate and store to output array */
-        *out++ = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( tmp, 15 ) );
-
-        /* Update index */
-        index_Q16 += ( ( 1 << 16 ) + ( 1 << 15 ) ); // (3/2)_Q0;
-    }
-
-    /* Move last part of input signal to the sample buffer to prepare for the next call */
-    SKP_memcpy( S, &in[ frameLenIn - ( SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ) ],
-                ( SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS - 1 ) * sizeof( SKP_int16 ) );
-}
--- a/src/SKP_Silk_resample_2_3_rom.c
+++ /dev/null
@@ -1,50 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * File Name:    SKP_Silk_resample_2_3_rom.c                          *
- *                                                                      *
- * Description: Filter coefficients for FIR polyphase resampling        *
- *                                                                      *
- * Copyright 2009 (c), Skype Limited                                    *
- * All rights reserved.                                                 *
- *                                                                      *
- * Date: 090424                                                         *
- *                                                                      */
-
-#include "SKP_Silk_resample_rom.h"
-
-const SKP_int16 SigProc_Resample_2_3_coarse_INTERPOL[ SigProc_Resample_2_3_coarse_NUM_INTERPOLATORS ][ SigProc_Resample_2_3_coarse_NUM_FIR_COEFS ] = {
-    {    0,   -74,   109,     0,  -234,   329,     0,  -610,   813,     0, -1437,  1954,     0, -4358,  8953, 21845,  8953, -4358,     0,  1954, -1437,     0,   813,  -610,     0,   329,  -234,     0,   109,   -74,     0,    45 },
-    {   48,   -62,     0,   133,  -195,     0,   386,  -526,     0,   936, -1243,     0,  2311, -3417,     0, 18026, 18026,     0, -3417,  2311,     0, -1243,   936,     0,  -526,   386,     0,  -195,   133,     0,   -62,    48 },
-};
-
-const SKP_int16 SigProc_Resample_2_3_coarsest_INTERPOL[ SigProc_Resample_2_3_coarsest_NUM_INTERPOLATORS ][ SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS ] = {
-    {  379,     0, -3081,  8239, 21845,  8239, -3081,     0,   379,  -145 },
-    {    0,   696, -1951,     0, 17659, 17659,     0, -1951,   696,     0 },
-};
-
--- a/src/SKP_Silk_resample_3_1.c
+++ /dev/null
@@ -1,100 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_resample_3_1.c                                            *
- *                                                                      *
- * Upsamples by a factor 3                                              *
- *                                                                      *
- * Copyright 2008 (c), Skype Limited                                    *
- * Date: 081113                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-#define IN_SUBFR_LEN_RESAMPLE_3_1       40
-
-/* Resamples by a factor 3/1 */
-void SKP_Silk_resample_3_1(
-    SKP_int16           *out,       /* O:   Fs_high signal [inLen*3]        */
-    SKP_int32           *S,         /* I/O: State vector   [7]              */
-    const SKP_int16     *in,        /* I:   Fs_low signal  [inLen]          */
-    const SKP_int32     inLen       /* I:   Input length                    */
-)
-{
-    SKP_int     k, LSubFrameIn, LSubFrameOut;
-    SKP_int32   out_tmp, idx, inLenTmp = inLen;
-    SKP_int32   scratch00[    IN_SUBFR_LEN_RESAMPLE_3_1 ];
-    SKP_int32   scratch0[ 3 * IN_SUBFR_LEN_RESAMPLE_3_1 ];
-    SKP_int32   scratch1[ 3 * IN_SUBFR_LEN_RESAMPLE_3_1 ];
-    
-    /* Coefficients for 3-fold resampling */
-    const SKP_int16 A30[ 2 ] = {  1773, 17818 };
-    const SKP_int16 A31[ 2 ] = {  4942, 25677 };
-    const SKP_int16 A32[ 2 ] = { 11786, 29304 };
-
-    while( inLenTmp > 0 ) {
-        LSubFrameIn  = SKP_min_int( IN_SUBFR_LEN_RESAMPLE_3_1, inLenTmp );
-        LSubFrameOut = SKP_SMULBB( 3, LSubFrameIn );
-
-        /* Convert Q15 -> Q25 */
-        for( k = 0; k < LSubFrameIn; k++ ) {
-            scratch00[k] = SKP_LSHIFT( (SKP_int32)in[ k ], 10 );
-        }
-
-        /* Allpass filtering */
-        /* Scratch size: 2 * 3* LSubFrame * sizeof(SKP_int32) */
-        SKP_Silk_allpass_int( scratch00, S + 1, A30[ 0 ], scratch1, LSubFrameIn );
-        SKP_Silk_allpass_int( scratch1,  S + 2, A30[ 1 ], scratch0, LSubFrameIn );
-
-        SKP_Silk_allpass_int( scratch00, S + 3, A31[ 0 ], scratch1, LSubFrameIn );
-        SKP_Silk_allpass_int( scratch1,  S + 4, A31[ 1 ], scratch0 +     IN_SUBFR_LEN_RESAMPLE_3_1, LSubFrameIn );
-
-        SKP_Silk_allpass_int( scratch00, S + 5, A32[ 0 ], scratch1, LSubFrameIn );
-        SKP_Silk_allpass_int( scratch1,  S + 6, A32[ 1 ], scratch0 + 2 * IN_SUBFR_LEN_RESAMPLE_3_1, LSubFrameIn );
-
-        /* Interleave three allpass outputs */
-        for( k = 0; k < LSubFrameIn; k++ ) {
-            idx = SKP_SMULBB( 3, k );
-            scratch1[ idx     ] = scratch0[ k ];
-            scratch1[ idx + 1 ] = scratch0[ k +     IN_SUBFR_LEN_RESAMPLE_3_1 ];
-            scratch1[ idx + 2 ] = scratch0[ k + 2 * IN_SUBFR_LEN_RESAMPLE_3_1 ];
-        }
-
-        /* Low-pass filtering */
-        SKP_Silk_lowpass_int( scratch1, S, scratch0, LSubFrameOut );
-
-        /* Saturate and convert to SKP_int16 */
-        for( k = 0; k < LSubFrameOut; k++ ) {
-            out_tmp  = scratch0[ k ];
-            out[ k ] = (SKP_int16) SKP_SAT16( SKP_RSHIFT_ROUND( out_tmp, 10 ) );
-        }
-
-        in       += LSubFrameIn;
-        inLenTmp -= LSubFrameIn;
-        out      += LSubFrameOut;
-    }
-}
--- a/src/SKP_Silk_resample_3_2.c
+++ /dev/null
@@ -1,73 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * File Name:   SKP_Silk_resample_3_2.c                               *
- *                                                                      *
- * Resamples by a factor 3/2                                            *
- *                                                                      *
- * Copyright 2008 (c), Skype Limited                                    *
- * All rights reserved.                                                 *
- *                                                                      *
- * Date: 081113                                                         *
- *                                                                      */
-
-#include "SKP_Silk_SigProc_FIX.h"
-
-#define IN_SUBFR_LEN_RESAMPLE_3_2       80
-
-/* Resamples by a factor 3/2 */
-void SKP_Silk_resample_3_2(
-    SKP_int16           *out,       /*   O: Fs_high signal  [inLen*3/2]             */
-    SKP_int32           *S,         /* I/O: State vector    [7+4]                   */
-    const SKP_int16     *in,        /* I:   Fs_low signal   [inLen]                 */
-    SKP_int             inLen       /* I:   Input length, must be a multiple of 2   */
-)
-{
-    SKP_int     LSubFrameIn, LSubFrameOut;
-    SKP_int16   outH[      3 * IN_SUBFR_LEN_RESAMPLE_3_2 ];
-    SKP_int32   scratch[ ( 9 * IN_SUBFR_LEN_RESAMPLE_3_2 ) / 2 ];
-
-    /* Check that input is multiple of 2 */
-    SKP_assert( inLen % 2 == 0 );
-
-    while( inLen > 0 ) {
-        LSubFrameIn  = SKP_min_int( IN_SUBFR_LEN_RESAMPLE_3_2, inLen );
-        LSubFrameOut = SKP_SMULWB( 98304, LSubFrameIn );
-
-        /* Upsample by a factor 3 */
-        SKP_Silk_resample_3_1( outH, &S[ 0 ], in, LSubFrameIn );
-        
-        /* Downsample by a factor 2 */
-        /* Scratch size needs to be: 3 * LSubFrameOut * sizeof( SKP_int32 ) */
-        SKP_Silk_resample_1_2_coarse( outH, &S[ 7 ], out, scratch, LSubFrameOut );
-
-        in    += LSubFrameIn;
-        out   += LSubFrameOut;
-        inLen -= LSubFrameIn;
-    }
-}
--- a/src/SKP_Silk_resample_3_2_rom.c
+++ /dev/null
@@ -1,46 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * File Name:   SKP_Silk_resample_3_2_rom.c                           *
- *                                                                      *
- * Description: Filter coefficients for FIR polyphase resampling        *
- *                                                                      *
- * Copyright 2009 (c), Skype Limited                                    *
- * All rights reserved.                                                 *
- *                                                                      *
- * Date: 090424                                                         *
- *                                                                      */
-
-#include "SKP_Silk_resample_rom.h"
-
-const SKP_int16 SigProc_Resample_3_2_coarse_INTERPOL[ SigProc_Resample_3_2_coarse_NUM_INTERPOLATORS ][ SigProc_Resample_3_2_coarse_NUM_FIR_COEFS ] = {
-    {    0,     0,     0, 32768,     0,     0,     0,     0 },
-    { -384,  1630, -5217, 26674, 12714, -3572,  1050,  -236 },
-    { -236,  1050, -3572, 12714, 26674, -5217,  1630,  -384 },
-};
-
--- a/src/SKP_Silk_resample_3_4.c
+++ /dev/null
@@ -1,79 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * File Name:    SKP_Silk_resample_3_4.c                              *
- *                                                                      *
- * Resamples by a factor 3/4                                            *
- *                                                                      *
- * Copyright 2009 (c), Skype Limited                                    *
- * All rights reserved.                                                 *
- *                                                                      *
- * Date: 090408                                                         *
- *                                                                      */
-
-#include "SKP_Silk_SigProc_FIX.h"
-
-#define IN_SUBFR_LEN_RESAMPLE_3_4        80
-
-/* Resamples by a factor 3/4 */
-void SKP_Silk_resample_3_4(
-    SKP_int16            *out,       /* O:   Fs_high signal  [inLen*3/4]              */
-    SKP_int32            *S,         /* I/O: State vector    [7+2+6]                  */
-    const SKP_int16      *in,        /* I:   Fs_low signal   [inLen]                  */
-    SKP_int              inLen       /* I:   Input length, must be a multiple of 4    */
-)
-{
-    SKP_int      LSubFrameIn, LSubFrameOut;
-    SKP_int16    outH[      3 * IN_SUBFR_LEN_RESAMPLE_3_4 ];
-    SKP_int16    outL[    ( 3 * IN_SUBFR_LEN_RESAMPLE_3_4 ) / 2 ];
-    SKP_int32    scratch[ ( 9 * IN_SUBFR_LEN_RESAMPLE_3_4 ) / 2 ];
-
-    /* Check that input is multiple of 4 */
-    SKP_assert( inLen % 4 == 0 );
-
-    while( inLen > 0 ) {
-        LSubFrameIn  = SKP_min_int( IN_SUBFR_LEN_RESAMPLE_3_4, inLen );
-        LSubFrameOut = SKP_SMULWB( 49152, LSubFrameIn );
-
-        /* Upsample by a factor 3 */
-        SKP_Silk_resample_3_1( outH, &S[ 0 ], in, LSubFrameIn );
-        
-        /* Downsample by a factor 2 twice */
-        /* Scratch size needs to be: 3 * 2 * LSubFrameOut * sizeof( SKP_int32 ) */
-        /* I: state vector [2], scratch memory [3*len] */
-        SKP_Silk_resample_1_2_coarsest( outH, &S[ 7 ], outL, scratch, SKP_LSHIFT( LSubFrameOut, 1 ) ); 
-        
-        /* Scratch size needs to be: 3 * LSubFrameOut * sizeof( SKP_int32 ) */
-        /* I: state vector [6], scratch memory [3*len]    */
-        SKP_Silk_resample_1_2_coarse( outL, &S[ 9 ], out, scratch, LSubFrameOut );
-
-        in    += LSubFrameIn;
-        out   += LSubFrameOut;
-        inLen -= LSubFrameIn;
-    }
-}
--- a/src/SKP_Silk_resample_4_3.c
+++ /dev/null
@@ -1,77 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * File Name:    SKP_Silk_resample_4_3.c                              *
- *                                                                      *
- * Resamples by a factor 4/3                                            *
- *                                                                      *
- * Copyright 2009 (c), Skype Limited                                    *
- * All rights reserved.                                                 *
- *                                                                      *
- * Date: 090407                                                         *
- *                                                                      */
-
-#include "SKP_Silk_SigProc_FIX.h"
-
-#define OUT_SUBFR_LEN        80
-
-/* Resamples by a factor 4/3 */
-void SKP_Silk_resample_4_3(
-    SKP_int16            *out,       /* O:   Fs_low signal    [inLen * 4/3]           */
-    SKP_int32            *S,         /* I/O: State vector    [7+4+4]                  */
-    const SKP_int16      *in,        /* I:   Fs_high signal    [inLen]                */
-    const SKP_int        inLen       /* I:   input length, must be a multiple of 3    */
-) 
-{
-    SKP_int      outLen, LSubFrameIn, LSubFrameOut;
-    SKP_int16    outH[    3 * OUT_SUBFR_LEN ];
-    SKP_int16    outHH[   6 * OUT_SUBFR_LEN ];
-    SKP_int32    scratch[ 9 * OUT_SUBFR_LEN / 2 ];
-
-    /* Check that input is multiple of 3 */
-    SKP_assert( inLen % 3 == 0 );
-
-    outLen = SKP_DIV32_16( SKP_LSHIFT( inLen, 2 ), 3 );
-    while( outLen > 0 ) {
-        LSubFrameOut = SKP_min_int( OUT_SUBFR_LEN, outLen );
-        LSubFrameIn  = SKP_SMULWB( 49152, LSubFrameOut );
-
-        /* Upsample two times by a factor 2 */
-        /* Scratch size needs to be: 3 * LSubFrameIn * sizeof( SKP_int32 ) */
-        SKP_Silk_resample_2_1_coarse( in,   &S[ 0 ], outH,  scratch,             LSubFrameIn      );
-        /* Scratch size needs to be: 6 * LSubFrameIn * sizeof( SKP_int32 ) */
-        SKP_Silk_resample_2_1_coarse( outH, &S[ 4 ], outHH, scratch, SKP_LSHIFT( LSubFrameIn, 1 ) );
-        
-        /* Downsample by a factor 3 */
-        SKP_Silk_resample_1_3( out, &S[ 8 ], outHH, SKP_LSHIFT( LSubFrameIn, 2 ) );
-
-        in     += LSubFrameIn;
-        out    += LSubFrameOut;
-        outLen -= LSubFrameOut;
-    }
-}
--- a/src/SKP_Silk_resample_rom.h
+++ /dev/null
@@ -1,107 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*																		*
- * File Name:	SKP_Silk_resample_rom.h								*
- *																		*
- * Description: Header file for FIR resampling of						*
- *				32 and 44 kHz input 									*
- *                                                                      *
- * Copyright 2007 (c), Skype Limited                                    *
- * All rights reserved.													*
- *																		*
- * Date: 070807                                                         *
- *                                                                      */
-
-#ifndef _SKP_SILK_FIX_RESAMPLE_ROM_H_
-#define _SKP_SILK_FIX_RESAMPLE_ROM_H_
-
-#include "SKP_Silk_typedef.h"
-
-#ifdef  __cplusplus
-extern "C"
-{
-#endif
-
-#define SigProc_Resample_bw_1_4_NUM_INTERPOLATORS_LOG2				7
-#define SigProc_Resample_bw_1_4_NUM_INTERPOLATORS					(1 << SigProc_Resample_bw_1_4_NUM_INTERPOLATORS_LOG2)
-#define SigProc_Resample_bw_1_4_NUM_FIR_COEFS						6 
-
-extern const SKP_int16 SigProc_Resample_bw_1_4_INTERPOL[SigProc_Resample_bw_1_4_NUM_INTERPOLATORS][SigProc_Resample_bw_1_4_NUM_FIR_COEFS];
-
-
-#define SigProc_Resample_bw_80_441_NUM_INTERPOLATORS_LOG2			6
-#define SigProc_Resample_bw_80_441_NUM_INTERPOLATORS				(1 << SigProc_Resample_bw_80_441_NUM_INTERPOLATORS_LOG2)
-#define SigProc_Resample_bw_80_441_NUM_FIR_COEFS					4 
-
-extern const SKP_int16 SigProc_Resample_bw_80_441_INTERPOL[SigProc_Resample_bw_80_441_NUM_INTERPOLATORS][SigProc_Resample_bw_80_441_NUM_FIR_COEFS];
-
-#define SigProc_Resample_2_3_coarse_NUM_INTERPOLATORS				 2
-#define SigProc_Resample_2_3_coarse_NUM_FIR_COEFS					32
-
-extern const SKP_int16 SigProc_Resample_2_3_coarse_INTERPOL[SigProc_Resample_2_3_coarse_NUM_INTERPOLATORS][SigProc_Resample_2_3_coarse_NUM_FIR_COEFS];
-
-#define SigProc_Resample_2_3_coarsest_NUM_INTERPOLATORS				 2
-#define SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS					10
-
-extern const SKP_int16 SigProc_Resample_2_3_coarsest_INTERPOL[SigProc_Resample_2_3_coarsest_NUM_INTERPOLATORS][SigProc_Resample_2_3_coarsest_NUM_FIR_COEFS];
-
-#define SigProc_Resample_3_2_coarse_NUM_INTERPOLATORS				 3
-#define SigProc_Resample_3_2_coarse_NUM_FIR_COEFS					 8
-
-extern const SKP_int16 SigProc_Resample_3_2_coarse_INTERPOL[SigProc_Resample_3_2_coarse_NUM_INTERPOLATORS][SigProc_Resample_3_2_coarse_NUM_FIR_COEFS];
-
-#define SigProc_Resample_147_40_NUM_INTERPOLATORS					 147
-#define SigProc_Resample_147_40_NUM_FIR_COEFS						 20
-
-extern const SKP_int16 SigProc_Resample_147_40_INTERPOL[SigProc_Resample_147_40_NUM_INTERPOLATORS][SigProc_Resample_147_40_NUM_FIR_COEFS];
-
-#define SigProc_Resample_147_40_alt_NUM_INTERPOLATORS				 147
-#define SigProc_Resample_147_40_alt_NUM_FIR_COEFS					 10
-
-extern const SKP_int16 SigProc_Resample_147_40_alt_INTERPOL[SigProc_Resample_147_40_alt_NUM_INTERPOLATORS][SigProc_Resample_147_40_alt_NUM_FIR_COEFS];
-
-#define SigProc_Resample_147_40_coarse_NUM_INTERPOLATORS			 147
-#define SigProc_Resample_147_40_coarse_NUM_FIR_COEFS				 16
-
-extern const SKP_int16 SigProc_Resample_147_40_coarse_INTERPOL[SigProc_Resample_147_40_coarse_NUM_INTERPOLATORS][SigProc_Resample_147_40_coarse_NUM_FIR_COEFS];
-
-#define SigProc_Resample_40_147_NUM_INTERPOLATORS					 40
-#define SigProc_Resample_40_147_NUM_FIR_COEFS						 60
-
-extern const SKP_int16 SigProc_Resample_40_147_INTERPOL[SigProc_Resample_40_147_NUM_INTERPOLATORS][SigProc_Resample_40_147_NUM_FIR_COEFS];
-
-#define SigProc_Resample_40_147_coarse_NUM_INTERPOLATORS			 40
-#define SigProc_Resample_40_147_coarse_NUM_FIR_COEFS				 30
-
-extern const SKP_int16 SigProc_Resample_40_147_coarse_INTERPOL[SigProc_Resample_40_147_coarse_NUM_INTERPOLATORS][SigProc_Resample_40_147_coarse_NUM_FIR_COEFS];
-
-#ifdef  __cplusplus
-}
-#endif
-
-#endif // _SKP_SILK_FIX_RESAMPLE_ROM_H_
--- a/src/SKP_Silk_residual_energy16_FIX.c
+++ /dev/null
@@ -1,99 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */
-SKP_int32 SKP_Silk_residual_energy16_covar_FIX(
-    const SKP_int16                 *c,                 /* I    Prediction vector                           */
-    const SKP_int32                 *wXX,               /* I    Correlation matrix                          */
-    const SKP_int32                 *wXx,               /* I    Correlation vector                          */
-    SKP_int32                       wxx,                /* I    Signal energy                               */
-    SKP_int                         D,                  /* I    Dimension                                   */
-    SKP_int                         cQ                  /* I    Q value for c vector 0 - 15                 */
-)
-{
-    SKP_int   i, j, lshifts, Qxtra;
-    SKP_int32 c_max, w_max, tmp, tmp2, nrg;
-    SKP_int   cn[ MAX_MATRIX_SIZE ]; 
-    const SKP_int32 *pRow;
-
-    /* Safety checks */
-    SKP_assert( D >=  0 );
-    SKP_assert( D <= 16 );
-    SKP_assert( cQ >  0 );
-    SKP_assert( cQ < 16 );
-
-    lshifts = 16 - cQ;
-    Qxtra = lshifts;
-
-    c_max = 0;
-    for( i = 0; i < D; i++ ) {
-        c_max = SKP_max_32( c_max, SKP_abs( ( SKP_int32 )c[ i ] ) );
-    }
-    Qxtra = SKP_min_int( Qxtra, SKP_Silk_CLZ32( c_max ) - 17 );
-
-    w_max = SKP_max_32( wXX[ 0 ], wXX[ D * D - 1 ] );
-    Qxtra = SKP_min_int( Qxtra, SKP_Silk_CLZ32( SKP_MUL( D, SKP_RSHIFT( SKP_SMULWB( w_max, c_max ), 4 ) ) ) - 5 );
-    Qxtra = SKP_max_int( Qxtra, 0 );
-    for( i = 0; i < D; i++ ) {
-        cn[ i ] = SKP_LSHIFT( ( SKP_int )c[ i ], Qxtra );
-        SKP_assert( SKP_abs(cn[i]) <= ( SKP_int16_MAX + 1 ) ); /* Check that SKP_SMLAWB can be used */
-    }
-    lshifts -= Qxtra;
-
-    /* Compute wxx - 2 * wXx * c */
-    tmp = 0;
-    for( i = 0; i < D; i++ ) {
-        tmp = SKP_SMLAWB( tmp, wXx[ i ], cn[ i ] );
-    }
-    nrg = SKP_RSHIFT( wxx, 1 + lshifts ) - tmp;                         /* Q: -lshifts - 1 */
-
-    /* Add c' * wXX * c, assuming wXX is symmetric */
-    tmp2 = 0;
-    for( i = 0; i < D; i++ ) {
-        tmp = 0;
-        pRow = &wXX[ i * D ];
-        for( j = i + 1; j < D; j++ ) {
-            tmp = SKP_SMLAWB( tmp, pRow[ j ], cn[ j ] );
-        }
-        tmp  = SKP_SMLAWB( tmp,  SKP_RSHIFT( pRow[ i ], 1 ), cn[ i ] );
-        tmp2 = SKP_SMLAWB( tmp2, tmp,                        cn[ i ] );
-    }
-    nrg = SKP_ADD_LSHIFT32( nrg, tmp2, lshifts );                       /* Q: -lshifts - 1 */
-
-    /* Keep one bit free always, because we add them for LSF interpolation */
-    if( nrg < 1 ) {
-        nrg = 1;
-    } else if( nrg > SKP_RSHIFT( SKP_int32_MAX, lshifts + 2 ) ) {
-        nrg = SKP_int32_MAX >> 1;
-    } else {
-        nrg = SKP_LSHIFT( nrg, lshifts + 1 );                           /* Q0 */
-    }
-    return nrg;
-
-}
--- a/src/SKP_Silk_residual_energy_FIX.c
+++ /dev/null
@@ -1,89 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-/* Calculates residual energies of input subframes where all subframes have LPC_order   */
-/* of preceeding samples                                                                */
-void SKP_Silk_residual_energy_FIX(
-          SKP_int32 nrgs[ NB_SUBFR ],           /* O    Residual energy per subframe    */
-          SKP_int   nrgsQ[ NB_SUBFR ],          /* O    Q value per subframe            */
-    const SKP_int16 x[],                        /* I    Input signal                    */
-    const SKP_int16 a_Q12[ 2 ][ MAX_LPC_ORDER ],/* I    AR coefs for each frame half    */
-    const SKP_int32 gains_Qx[ NB_SUBFR ],       /* I    Quantization gains in Qx        */
-    const SKP_int   Qx,                         /* I    Quantization gains Q value      */
-    const SKP_int   subfr_length,               /* I    Subframe length                 */
-    const SKP_int   LPC_order                   /* I    LPC order                       */
-)
-{
-    SKP_int         offset, i, j, rshift, lz1, lz2;
-    SKP_int16       *LPC_res_ptr, LPC_res[ ( MAX_FRAME_LENGTH + NB_SUBFR * MAX_LPC_ORDER ) / 2 ];
-    const SKP_int16 *x_ptr;
-    SKP_int16       S[ MAX_LPC_ORDER ];
-    SKP_int32       tmp32;
-
-    x_ptr  = x;
-    offset = LPC_order + subfr_length;
-    
-    /* Filter input to create the LPC residual for each frame half, and measure subframe energies */
-    for( i = 0; i < 2; i++ ) {
-        /* Calculate half frame LPC residual signal including preceeding samples */
-        SKP_memset( S, 0, LPC_order * sizeof( SKP_int16 ) );
-        SKP_Silk_LPC_analysis_filter( x_ptr, a_Q12[ i ], S, LPC_res, ( NB_SUBFR >> 1 ) * offset, LPC_order );
-
-        /* Point to first subframe of the just calculated LPC residual signal */
-        LPC_res_ptr = LPC_res + LPC_order;
-        for( j = 0; j < ( NB_SUBFR >> 1 ); j++ ) {
-            /* Measure subframe energy */
-            SKP_Silk_sum_sqr_shift( &nrgs[ i * ( NB_SUBFR >> 1 ) + j ], &rshift, LPC_res_ptr, subfr_length ); 
-            
-            /* Set Q values for the measured energy */
-            nrgsQ[ i * ( NB_SUBFR >> 1 ) + j ] = -rshift;
-            
-            /* Move to next subframe */
-            LPC_res_ptr += offset;
-        }
-        /* Move to next frame half */
-        x_ptr += ( NB_SUBFR >> 1 ) * offset;
-    }
-
-    /* Apply the squared subframe gains */
-    for( i = 0; i < NB_SUBFR; i++ ) {
-        /* Fully upscale gains and energies */
-        lz1 = SKP_Silk_CLZ32( nrgs[ i ] ) - 1; 
-        lz2 = SKP_Silk_CLZ32( gains_Qx[ i ] ) - 1; 
-        
-        tmp32 = SKP_LSHIFT32( gains_Qx[ i ], lz2 );
-
-        /* Find squared gains */
-        tmp32 = SKP_SMMUL( tmp32, tmp32 ); // Q( 2 * ( Qx + lz2 ) - 32 )
-
-        /* Scale energies */
-        nrgs[ i ] = SKP_SMMUL( tmp32, SKP_LSHIFT32( nrgs[ i ], lz1 ) ); // Q( nrgsQ[ i ] + lz1 + 2 * ( Qx + lz2 ) - 32 - 32 )
-        nrgsQ[ i ] += lz1 + 2 * ( Qx + lz2 ) - 32 - 32;
-    }
-}
--- a/src/SKP_Silk_scale_copy_vector16.c
+++ /dev/null
@@ -1,45 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Copy and multiply a vector by a constant */
-void SKP_Silk_scale_copy_vector16( 
-    SKP_int16           *data_out, 
-    const SKP_int16     *data_in, 
-    SKP_int32           gain_Q16,                   /* (I):   gain in Q16   */
-    const SKP_int       dataSize                    /* (I):   length        */
-)
-{
-    SKP_int  i;
-    SKP_int32 tmp32;
-
-    for( i = 0; i < dataSize; i++ ) {
-        tmp32 = SKP_SMULWB( gain_Q16, data_in[ i ] );
-        data_out[ i ] = (SKP_int16)SKP_CHECK_FIT16( tmp32 );
-    }
-}
--- a/src/SKP_Silk_scale_vector.c
+++ /dev/null
@@ -1,122 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Multiply a vector by a constant */
-void SKP_Silk_scale_vector16_Q14( 
-    SKP_int16           *data1, 
-    SKP_int             gain_Q14,       /* Gain in Q14 */ 
-    SKP_int             dataSize
-)
-{
-    SKP_int   i;
-    SKP_int32 data32, gain_Q16;
-
-    SKP_assert( gain_Q14 <   32768 );
-    SKP_assert( gain_Q14 >= -32768 );
-
-    gain_Q16 = SKP_LSHIFT( gain_Q14, 2 );
-
-    if( (SKP_int32)( (SKP_int_ptr_size)data1 & 3 ) != 0 ) {
-        /* Input is not 4-byte aligned */
-        data1[ 0 ] = SKP_SMULWB( gain_Q16, data1[ 0 ] );
-        i = 1;
-    } else {
-        i = 0;
-    }
-    dataSize--;
-    for( ; i < dataSize; i += 2 ) {
-        data32 = *( (SKP_int32 *)&data1[ i ] );                     /* load two values at once */
-        data1[ i     ] = SKP_SMULWB( gain_Q16, data32 );
-        data1[ i + 1 ] = SKP_SMULWT( gain_Q16, data32 );
-    }
-    if( i == dataSize ) {
-        /* One sample left to process */
-        data1[ i ] = SKP_SMULWB( gain_Q16, data1[ i ] );
-    }
-}
-
-/* Multiply a vector by a constant */
-void SKP_Silk_scale_vector32_Q26_lshift_18( 
-    SKP_int32           *data1,                     /* (I/O): Q0/Q18        */
-    SKP_int32           gain_Q26,                   /* (I):   Q26           */
-    SKP_int             dataSize                    /* (I):   length        */
-)
-{
-    SKP_int  i;
-
-    for( i = 0; i < dataSize; i++ ) {
-        data1[ i ] = (SKP_int32)SKP_CHECK_FIT32( SKP_RSHIFT64( SKP_SMULL( data1[ i ], gain_Q26 ), 8 ) );// OUTPUT: Q18
-    }
-}
-
-/* Multiply a vector by a constant */
-void SKP_Silk_scale_vector32_16_Q14( 
-    SKP_int32           *data1,                     /* (I/O): Q0/Q0         */
-    SKP_int             gain_Q14,                   /* (I):   Q14           */
-    SKP_int             dataSize                    /* (I):   length        */
-)
-{
-    SKP_int  i, gain_Q16;
-
-    if( gain_Q14 < ( SKP_int16_MAX >> 2 ) ) {
-        gain_Q16 = SKP_LSHIFT( gain_Q14, 2 );
-        for( i = 0; i < dataSize; i++ ) {
-            data1[ i ] = SKP_SMULWB( data1[ i ], gain_Q16 );
-        }
-    } else {
-        SKP_assert( gain_Q14 >= SKP_int16_MIN );
-        for( i = 0; i < dataSize; i++ ) {
-            data1[ i ] = SKP_LSHIFT( SKP_SMULWB( data1[ i ], gain_Q14 ), 2 );
-        }
-    }
-}
-
-/* Multiply a vector by a constant, does not saturate output data */
-void SKP_Silk_scale_vector32_Q16( 
-    SKP_int32           *data1,                     /* (I/O): Q0/Q0         */
-    SKP_int32           gain_Q16,                   /* (I):   gain in Q16 ( SKP_int16_MIN <= gain_Q16 <= SKP_int16_MAX + 65536 ) */
-    const SKP_int       dataSize                    /* (I):   length        */
-)
-{
-    SKP_int     i;
-
-    SKP_assert( gain_Q16 <= SKP_int16_MAX + 65536 );
-    SKP_assert( gain_Q16 >= SKP_int16_MIN );
-
-    if( gain_Q16 > SKP_int16_MAX ) {
-        gain_Q16 -= 65536;
-        for( i = 0; i < dataSize; i++ ) {
-            data1[ i ] = SKP_SMLAWB( data1[ i ], data1[ i ], gain_Q16 );
-        }
-    } else {
-        for( i = 0; i < dataSize; i++ ) {
-            data1[ i ] = SKP_SMULWB( data1[ i ], gain_Q16 );
-        }
-    }
-}
--- a/src/SKP_Silk_schur.c
+++ /dev/null
@@ -1,91 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_schur.c                                                   *
- *                                                                      *
- * Calculates the reflection coefficients from the correlation sequence *
- *                                                                      *
- * Copyright 2008 (c), Skype Limited                                    *
- * Date: 080103                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Faster than schur64(), but much less accurate.                       */
-/* uses SMLAWB(), requiring armv5E and higher.                          */ 
-void SKP_Silk_schur(
-    SKP_int16            *rc_Q15,                /* O:    reflection coefficients [order] Q15         */
-    const SKP_int32      *c,                     /* I:    correlations [order+1]                      */
-    const SKP_int32      order                   /* I:    prediction order                            */
-)
-{
-    SKP_int        k, n, lz;
-    SKP_int32    C[ SigProc_MAX_ORDER_LPC + 1 ][ 2 ];
-    SKP_int32    Ctmp1, Ctmp2, rc_tmp_Q15;
-
-    /* Get number of leading zeros */
-    lz = SKP_Silk_CLZ32( c[ 0 ] );
-
-    /* Copy correlations and adjust level to Q30 */
-    if( lz < 2 ) {
-        /* lz must be 1, so shift one to the right */
-        for( k = 0; k < order + 1; k++ ) {
-            C[ k ][ 0 ] = C[ k ][ 1 ] = SKP_RSHIFT( c[ k ], 1 );
-        }
-    } else if( lz > 2 ) {
-        /* Shift to the left */
-        lz -= 2; 
-        for( k = 0; k < order + 1; k++ ) {
-            C[ k ][ 0 ] = C[ k ][ 1 ] = SKP_LSHIFT( c[k], lz );
-        }
-    } else {
-        /* No need to shift */
-        for( k = 0; k < order + 1; k++ ) {
-            C[ k ][ 0 ] = C[ k ][ 1 ] = c[ k ];
-        }
-    }
-
-    for( k = 0; k < order; k++ ) {
-        
-        /* Get reflection coefficient */
-        rc_tmp_Q15 = -SKP_DIV32_16( C[ k + 1 ][ 0 ], SKP_max_32( SKP_RSHIFT( C[ 0 ][ 1 ], 15 ), 1 ) );
-
-        /* Clip (shouldn't happen for properly conditioned inputs) */
-        rc_tmp_Q15 = SKP_SAT16( rc_tmp_Q15 );
-
-        /* Store */
-        rc_Q15[ k ] = (SKP_int16)rc_tmp_Q15;
-
-        /* Update correlations */
-        for( n = 0; n < order - k; n++ ) {
-            Ctmp1 = C[ n + k + 1 ][ 0 ];
-            Ctmp2 = C[ n ][ 1 ];
-            C[ n + k + 1 ][ 0 ] = SKP_SMLAWB( Ctmp1, SKP_LSHIFT( Ctmp2, 1 ), rc_tmp_Q15 );
-            C[ n ][ 1 ]         = SKP_SMLAWB( Ctmp2, SKP_LSHIFT( Ctmp1, 1 ), rc_tmp_Q15 );
-        }
-    }
-}
--- a/src/SKP_Silk_schur64.c
+++ /dev/null
@@ -1,80 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_schur64.c                                                 *
- *                                                                      *
- * Calculates the reflection coefficients from the correlation sequence *
- * using extra precision                                                *
- *                                                                      *
- * Copyright 2008 (c), Skype Limited                                    *
- * Date: 080103                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-
-/* Slower than schur(), but more accurate.                              */
-/* Uses SMULL(), available on armv4                                     */ 
-SKP_int32 SKP_Silk_schur64(                    /* O:    Returns residual energy                     */
-    SKP_int32            rc_Q16[],               /* O:    Reflection coefficients [order] Q16         */
-    const SKP_int32      c[],                    /* I:    Correlations [order+1]                      */
-    SKP_int32            order                   /* I:    Prediction order                            */
-)
-{
-    SKP_int   k, n;
-    SKP_int32 C[ SigProc_MAX_ORDER_LPC + 1 ][ 2 ];
-    SKP_int32 Ctmp1_Q30, Ctmp2_Q30, rc_tmp_Q31;
-
-    /* Check for invalid input */
-    if( c[ 0 ] <= 0 ) {
-        SKP_memset( rc_Q16, 0, order * sizeof( SKP_int32 ) );
-        return 0;
-    }
-    
-    for( k = 0; k < order + 1; k++ ) {
-        C[ k ][ 0 ] = C[ k ][ 1 ] = c[ k ];
-    }
-
-    for( k = 0; k < order; k++ ) {
-        /* Get reflection coefficient: divide two Q30 values and get result in Q31 */
-        rc_tmp_Q31 = SKP_DIV32_varQ( -C[ k + 1 ][ 0 ], C[ 0 ][ 1 ], 31 );
-
-        /* Save the output */
-        rc_Q16[ k ] = SKP_RSHIFT_ROUND( rc_tmp_Q31, 15 );
-
-        /* Update correlations */
-        for( n = 0; n < order - k; n++ ) {
-            Ctmp1_Q30 = C[ n + k + 1 ][ 0 ];
-            Ctmp2_Q30 = C[ n ][ 1 ];
-            
-            /* Multiply and add the highest int32 */
-            C[ n + k + 1 ][ 0 ] = Ctmp1_Q30 + SKP_SMMUL( SKP_LSHIFT( Ctmp2_Q30, 1 ), rc_tmp_Q31 );
-            C[ n ][ 1 ]         = Ctmp2_Q30 + SKP_SMMUL( SKP_LSHIFT( Ctmp1_Q30, 1 ), rc_tmp_Q31 );
-        }
-    }
-
-    return( C[ 0 ][ 1 ] );
-}
--- a/src/SKP_Silk_shell_coder.c
+++ /dev/null
@@ -1,155 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main.h"
-
-/* shell coder; pulse-subframe length is hardcoded */
-
-SKP_INLINE void combine_pulses(
-    SKP_int         *out,   /* O:   combined pulses vector [len] */
-    const SKP_int   *in,    /* I:   input vector       [2 * len] */
-    const SKP_int   len     /* I:   number of OUTPUT samples     */
-)
-{
-    SKP_int k;
-    for( k = 0; k < len; k++ ) {
-        out[ k ] = in[ 2 * k ] + in[ 2 * k + 1 ];
-    }
-}
-
-SKP_INLINE void encode_split(
-    SKP_Silk_range_coder_state  *sRC,           /* I/O: compressor data structure                   */
-    const SKP_int               p_child1,       /* I:   pulse amplitude of first child subframe     */
-    const SKP_int               p,              /* I:   pulse amplitude of current subframe         */
-    const SKP_uint16            *shell_table    /* I:   table of shell cdfs                         */
-)
-{
-    const SKP_uint16 *cdf;
-
-    if( p > 0 ) {
-        cdf = &shell_table[ SKP_Silk_shell_code_table_offsets[ p ] ];
-        SKP_Silk_range_encoder( sRC, p_child1, cdf );
-    }
-}
-
-SKP_INLINE void decode_split(
-    SKP_int                     *p_child1,      /* O:   pulse amplitude of first child subframe     */
-    SKP_int                     *p_child2,      /* O:   pulse amplitude of second child subframe    */
-    SKP_Silk_range_coder_state  *sRC,           /* I/O: compressor data structure                   */
-    const SKP_int               p,              /* I:   pulse amplitude of current subframe         */
-    const SKP_uint16            *shell_table    /* I:   table of shell cdfs                         */
-)
-{
-    SKP_int cdf_middle;
-    const SKP_uint16 *cdf;
-
-    if( p > 0 ) {
-        cdf_middle = SKP_RSHIFT( p, 1 );
-        cdf = &shell_table[ SKP_Silk_shell_code_table_offsets[ p ] ];
-        SKP_Silk_range_decoder( p_child1, sRC, cdf, cdf_middle );
-        p_child2[ 0 ] = p - p_child1[ 0 ];
-    } else {
-        p_child1[ 0 ] = 0;
-        p_child2[ 0 ] = 0;
-    }
-}
-
-/* Shell encoder, operates on one shell code frame of 16 pulses */
-void SKP_Silk_shell_encoder(
-    SKP_Silk_range_coder_state      *sRC,               /* I/O  compressor data structure                   */
-    const SKP_int                   *pulses0            /* I    data: nonnegative pulse amplitudes          */
-)
-{
-    SKP_int pulses1[ 8 ], pulses2[ 4 ], pulses3[ 2 ], pulses4[ 1 ];
-
-    /* this function operates on one shell code frame of 16 pulses */
-    SKP_assert( SHELL_CODEC_FRAME_LENGTH == 16 );
-
-    /* tree representation per pulse-subframe */
-    combine_pulses( pulses1, pulses0, 8 );
-    combine_pulses( pulses2, pulses1, 4 );
-    combine_pulses( pulses3, pulses2, 2 );
-    combine_pulses( pulses4, pulses3, 1 );
-
-    encode_split( sRC, pulses3[  0 ], pulses4[ 0 ], SKP_Silk_shell_code_table3 );
-
-    encode_split( sRC, pulses2[  0 ], pulses3[ 0 ], SKP_Silk_shell_code_table2 );
-
-    encode_split( sRC, pulses1[  0 ], pulses2[ 0 ], SKP_Silk_shell_code_table1 );
-    encode_split( sRC, pulses0[  0 ], pulses1[ 0 ], SKP_Silk_shell_code_table0 );
-    encode_split( sRC, pulses0[  2 ], pulses1[ 1 ], SKP_Silk_shell_code_table0 );
-
-    encode_split( sRC, pulses1[  2 ], pulses2[ 1 ], SKP_Silk_shell_code_table1 );
-    encode_split( sRC, pulses0[  4 ], pulses1[ 2 ], SKP_Silk_shell_code_table0 );
-    encode_split( sRC, pulses0[  6 ], pulses1[ 3 ], SKP_Silk_shell_code_table0 );
-
-    encode_split( sRC, pulses2[  2 ], pulses3[ 1 ], SKP_Silk_shell_code_table2 );
-
-    encode_split( sRC, pulses1[  4 ], pulses2[ 2 ], SKP_Silk_shell_code_table1 );
-    encode_split( sRC, pulses0[  8 ], pulses1[ 4 ], SKP_Silk_shell_code_table0 );
-    encode_split( sRC, pulses0[ 10 ], pulses1[ 5 ], SKP_Silk_shell_code_table0 );
-
-    encode_split( sRC, pulses1[  6 ], pulses2[ 3 ], SKP_Silk_shell_code_table1 );
-    encode_split( sRC, pulses0[ 12 ], pulses1[ 6 ], SKP_Silk_shell_code_table0 );
-    encode_split( sRC, pulses0[ 14 ], pulses1[ 7 ], SKP_Silk_shell_code_table0 );
-}
-
-
-/* Shell decoder, operates on one shell code frame of 16 pulses */
-void SKP_Silk_shell_decoder(
-    SKP_int                         *pulses0,           /* O    data: nonnegative pulse amplitudes          */
-    SKP_Silk_range_coder_state      *sRC,               /* I/O  compressor data structure                   */
-    const SKP_int                   pulses4             /* I    number of pulses per pulse-subframe         */
-)
-{
-    SKP_int pulses3[ 2 ], pulses2[ 4 ], pulses1[ 8 ];
-
-    /* this function operates on one shell code frame of 16 pulses */
-    SKP_assert( SHELL_CODEC_FRAME_LENGTH == 16 );
-
-    decode_split( &pulses3[  0 ], &pulses3[  1 ], sRC, pulses4,      SKP_Silk_shell_code_table3 );
-
-    decode_split( &pulses2[  0 ], &pulses2[  1 ], sRC, pulses3[ 0 ], SKP_Silk_shell_code_table2 );
-
-    decode_split( &pulses1[  0 ], &pulses1[  1 ], sRC, pulses2[ 0 ], SKP_Silk_shell_code_table1 );
-    decode_split( &pulses0[  0 ], &pulses0[  1 ], sRC, pulses1[ 0 ], SKP_Silk_shell_code_table0 );
-    decode_split( &pulses0[  2 ], &pulses0[  3 ], sRC, pulses1[ 1 ], SKP_Silk_shell_code_table0 );
-
-    decode_split( &pulses1[  2 ], &pulses1[  3 ], sRC, pulses2[ 1 ], SKP_Silk_shell_code_table1 );
-    decode_split( &pulses0[  4 ], &pulses0[  5 ], sRC, pulses1[ 2 ], SKP_Silk_shell_code_table0 );
-    decode_split( &pulses0[  6 ], &pulses0[  7 ], sRC, pulses1[ 3 ], SKP_Silk_shell_code_table0 );
-
-    decode_split( &pulses2[  2 ], &pulses2[  3 ], sRC, pulses3[ 1 ], SKP_Silk_shell_code_table2 );
-
-    decode_split( &pulses1[  4 ], &pulses1[  5 ], sRC, pulses2[ 2 ], SKP_Silk_shell_code_table1 );
-    decode_split( &pulses0[  8 ], &pulses0[  9 ], sRC, pulses1[ 4 ], SKP_Silk_shell_code_table0 );
-    decode_split( &pulses0[ 10 ], &pulses0[ 11 ], sRC, pulses1[ 5 ], SKP_Silk_shell_code_table0 );
-
-    decode_split( &pulses1[  6 ], &pulses1[  7 ], sRC, pulses2[ 3 ], SKP_Silk_shell_code_table1 );
-    decode_split( &pulses0[ 12 ], &pulses0[ 13 ], sRC, pulses1[ 6 ], SKP_Silk_shell_code_table0 );
-    decode_split( &pulses0[ 14 ], &pulses0[ 15 ], sRC, pulses1[ 7 ], SKP_Silk_shell_code_table0 );
-}
--- a/src/SKP_Silk_sigm_Q15.c
+++ /dev/null
@@ -1,78 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_sigm_Q15.c                                                       *
- *                                                                      *
- * Approximate sigmoid function                                         *
- *                                                                      *
- * Copyright 2006 (c), Skype Limited                                    *
- * Date: 060221                                                         *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-/********************************/
-/* approximate sigmoid function */
-/********************************/
-/* fprintf(1, '%d, ', round(1024 * ([1 ./ (1 + exp(-(1:5))), 1] - 1 ./ (1 + exp(-(0:5)))))); */
-static const SKP_int32 sigm_LUT_slope_Q10[ 6 ] = {
-    237, 153, 73, 30, 12, 7
-};
-/* fprintf(1, '%d, ', round(32767 * 1 ./ (1 + exp(-(0:5))))); */
-static const SKP_int32 sigm_LUT_pos_Q15[ 6 ] = {
-    16384, 23955, 28861, 31213, 32178, 32548
-};
-/* fprintf(1, '%d, ', round(32767 * 1 ./ (1 + exp((0:5))))); */
-static const SKP_int32 sigm_LUT_neg_Q15[ 6 ] = {
-    16384, 8812, 3906, 1554, 589, 219
-};
-
-SKP_int SKP_Silk_sigm_Q15( SKP_int in_Q5 ) 
-{
-    SKP_int ind;
-
-    if( in_Q5 < 0 ) {
-        /* Negative input */
-        in_Q5 = -in_Q5;
-        if( in_Q5 >= 6 * 32 ) {
-            return 0;        /* Clip */
-        } else {
-            /* Linear interpolation of look up table */
-            ind = SKP_RSHIFT( in_Q5, 5 );
-            return( sigm_LUT_neg_Q15[ ind ] - SKP_SMULBB( sigm_LUT_slope_Q10[ ind ], in_Q5 & 0x1F ) );
-        }
-    } else {
-        /* Positive input */
-        if( in_Q5 >= 6 * 32 ) {
-            return 32767;        /* clip */
-        } else {
-            /* Linear interpolation of look up table */
-            ind = SKP_RSHIFT( in_Q5, 5 );
-            return( sigm_LUT_pos_Q15[ ind ] + SKP_SMULBB( sigm_LUT_slope_Q10[ ind ], in_Q5 & 0x1F ) );
-        }
-    }
-}
-
--- a/src/SKP_Silk_solve_LS_FIX.c
+++ /dev/null
@@ -1,240 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_main_FIX.h"
-
-/*****************************/
-/* Internal function headers */
-/*****************************/
-
-typedef struct {
-    SKP_int32 Q36_part;
-    SKP_int32 Q48_part;
-} inv_D_t;
-
-/* Factorize square matrix A into LDL form */
-SKP_INLINE void SKP_Silk_LDL_factorize_FIX(
-    SKP_int32           *A,         /* I/O Pointer to Symetric Square Matrix */
-    SKP_int             M,          /* I   Size of Matrix */
-    SKP_int32           *L_Q16,     /* I/O Pointer to Square Upper triangular Matrix */
-    inv_D_t             *inv_D      /* I/O Pointer to vector holding inverted diagonal elements of D */
-);
-
-/* Solve Lx = b, when L is lower triangular and has ones on the diagonal */
-SKP_INLINE void SKP_Silk_LS_SolveFirst_FIX(
-    const SKP_int32     *L_Q16,     /* I Pointer to Lower Triangular Matrix */
-    SKP_int             M,          /* I Dim of Matrix equation */
-    const SKP_int32     *b,         /* I b Vector */
-    SKP_int32           *x_Q16      /* O x Vector */  
-);
-
-/* Solve L^t*x = b, where L is lower triangular with ones on the diagonal */
-SKP_INLINE void SKP_Silk_LS_SolveLast_FIX(
-    const SKP_int32     *L_Q16,     /* I Pointer to Lower Triangular Matrix */
-    const SKP_int       M,          /* I Dim of Matrix equation */
-    const SKP_int32     *b,         /* I b Vector */
-    SKP_int32           *x_Q16      /* O x Vector */  
-);
-
-SKP_INLINE void SKP_Silk_LS_divide_Q16_FIX(
-    SKP_int32           T[],    /* I/O Numenator vector */
-    inv_D_t             *inv_D, /* I   1 / D vector     */
-    SKP_int             M       /* I   dimension        */
-);
-
-/* Solves Ax = b, assuming A is symmetric */
-void SKP_Silk_solve_LDL_FIX(
-    SKP_int32                       *A,                 /* I    Pointer to symetric square matrix A         */
-    SKP_int                         M,                  /* I    Size of matrix                              */
-    const SKP_int32                 *b,                 /* I    Pointer to b vector                         */
-    SKP_int32                       *x_Q16              /* O    Pointer to x solution vector                */
-)
-{
-    SKP_int32 L_Q16[  MAX_MATRIX_SIZE * MAX_MATRIX_SIZE ]; 
-    SKP_int32 Y[      MAX_MATRIX_SIZE ];
-    inv_D_t   inv_D[  MAX_MATRIX_SIZE ];
-
-    SKP_assert( M <= MAX_MATRIX_SIZE );
-
-    /***************************************************
-    Factorize A by LDL such that A = L*D*L',
-    where L is lower triangular with ones on diagonal
-    ****************************************************/
-    SKP_Silk_LDL_factorize_FIX( A, M, L_Q16, inv_D );
-        
-    /****************************************************
-    * substitute D*L'*x = Y. ie:
-    L*D*L'*x = b => L*Y = b <=> Y = inv(L)*b
-    ******************************************************/
-    SKP_Silk_LS_SolveFirst_FIX( L_Q16, M, b, Y );
-
-    /****************************************************
-    D*L'*x = Y <=> L'*x = inv(D)*Y, because D is 
-    diagonal just multiply with 1/d_i
-    ****************************************************/
-    SKP_Silk_LS_divide_Q16_FIX( Y, inv_D, M );
-
-    /****************************************************
-    x = inv(L') * inv(D) * Y
-    *****************************************************/
-    SKP_Silk_LS_SolveLast_FIX( L_Q16, M, Y, x_Q16 );
-}
-
-SKP_INLINE void SKP_Silk_LDL_factorize_FIX(
-    SKP_int32           *A,         /* I   Pointer to Symetric Square Matrix */
-    SKP_int             M,          /* I   Size of Matrix */
-    SKP_int32           *L_Q16,     /* I/O Pointer to Square Upper triangular Matrix */
-    inv_D_t             *inv_D      /* I/O Pointer to vector holding inverted diagonal elements of D */
-)
-{
-    SKP_int   i, j, k, status, loop_count;
-    const SKP_int32 *ptr1, *ptr2;
-    SKP_int32 diag_min_value, tmp_32, err;
-    SKP_int32 v_Q0[ MAX_MATRIX_SIZE ], D_Q0[ MAX_MATRIX_SIZE ];
-    SKP_int32 one_div_diag_Q36, one_div_diag_Q40, one_div_diag_Q48;
-
-    SKP_assert( M <= MAX_MATRIX_SIZE );
-
-    status = 1;
-    diag_min_value = SKP_max_32( SKP_SMMUL( SKP_ADD_SAT32( A[ 0 ], A[ SKP_SMULBB( M, M ) - 1 ] ), FIND_LTP_COND_FAC_Q31 ), 1 << 9 );
-    for( loop_count = 0; loop_count < M && status == 1; loop_count++ ) {
-        status = 0;
-        for( j = 0; j < M; j++ ) {
-            ptr1 = matrix_adr( L_Q16, j, 0, M );
-            tmp_32 = 0;
-            for( i = 0; i < j; i++ ) {
-                v_Q0[ i ] = SKP_SMULWW(         D_Q0[ i ], ptr1[ i ] ); /* Q0 */
-                tmp_32    = SKP_SMLAWW( tmp_32, v_Q0[ i ], ptr1[ i ] ); /* Q0 */
-            }
-            tmp_32 = SKP_SUB32( matrix_ptr( A, j, j, M ), tmp_32 );
-
-            if( tmp_32 < diag_min_value ) {
-                tmp_32 = SKP_SUB32( SKP_SMULBB( loop_count + 1, diag_min_value ), tmp_32 );
-                /* Matrix not positive semi-definite, or ill conditioned */
-                for( i = 0; i < M; i++ ) {
-                    matrix_ptr( A, i, i, M ) = SKP_ADD32( matrix_ptr( A, i, i, M ), tmp_32 );
-                }
-                status = 1;
-                break;
-            }
-            D_Q0[ j ] = tmp_32;                         /* always < max(Correlation) */
-        
-            /* two-step division */
-            one_div_diag_Q36 = SKP_INVERSE32_varQ( tmp_32, 36 );                    /* Q36 */
-            one_div_diag_Q40 = SKP_LSHIFT( one_div_diag_Q36, 4 );                   /* Q40 */
-            err = SKP_SUB32( 1 << 24, SKP_SMULWW( tmp_32, one_div_diag_Q40 ) );     /* Q24 */
-            one_div_diag_Q48 = SKP_SMULWW( err, one_div_diag_Q40 );                 /* Q48 */
-
-            /* Save 1/Ds */
-            inv_D[ j ].Q36_part = one_div_diag_Q36;
-            inv_D[ j ].Q48_part = one_div_diag_Q48;
-
-            matrix_ptr( L_Q16, j, j, M ) = 65536; /* 1.0 in Q16 */
-            ptr1 = matrix_adr( A, j, 0, M );
-            ptr2 = matrix_adr( L_Q16, j + 1, 0, M );
-            for( i = j + 1; i < M; i++ ) { 
-                tmp_32 = 0;
-                for( k = 0; k < j; k++ ) {
-                    tmp_32 = SKP_SMLAWW( tmp_32, v_Q0[ k ], ptr2[ k ] ); /* Q0 */
-                }
-                tmp_32 = SKP_SUB32( ptr1[ i ], tmp_32 ); /* always < max(Correlation) */
-
-                /* tmp_32 / D_Q0[j] : Divide to Q16 */
-                matrix_ptr( L_Q16, i, j, M ) = SKP_ADD32( SKP_SMMUL( tmp_32, one_div_diag_Q48 ),
-                    SKP_RSHIFT( SKP_SMULWW( tmp_32, one_div_diag_Q36 ), 4 ) );
-
-                /* go to next column */
-                ptr2 += M; 
-            }
-        }
-    }
-
-    SKP_assert( status == 0 );
-}
-
-SKP_INLINE void SKP_Silk_LS_divide_Q16_FIX(
-    SKP_int32 T[],      /* I/O Numenator vector */
-    inv_D_t *inv_D,     /* I   1 / D vector     */
-    SKP_int M           /* I   Order */
-)
-{
-    SKP_int   i;
-    SKP_int32 tmp_32;
-    SKP_int32 one_div_diag_Q36, one_div_diag_Q48;
-
-    for( i = 0; i < M; i++ ) {
-        one_div_diag_Q36 = inv_D[ i ].Q36_part;
-        one_div_diag_Q48 = inv_D[ i ].Q48_part;
-
-        tmp_32 = T[ i ];
-        T[ i ] = SKP_ADD32( SKP_SMMUL( tmp_32, one_div_diag_Q48 ), SKP_RSHIFT( SKP_SMULWW( tmp_32, one_div_diag_Q36 ), 4 ) );
-    }
-}
-
-/* Solve Lx = b, when L is lower triangular and has ones on the diagonal */
-SKP_INLINE void SKP_Silk_LS_SolveFirst_FIX(
-    const SKP_int32     *L_Q16, /* I Pointer to Lower Triangular Matrix */
-    SKP_int             M,      /* I Dim of Matrix equation */
-    const SKP_int32     *b,     /* I b Vector */
-    SKP_int32           *x_Q16  /* O x Vector */  
-)
-{
-    SKP_int i, j;
-    const SKP_int32 *ptr32;
-    SKP_int32 tmp_32;
-
-    for( i = 0; i < M; i++ ) {
-        ptr32 = matrix_adr( L_Q16, i, 0, M );
-        tmp_32 = 0;
-        for( j = 0; j < i; j++ ) {
-            tmp_32 = SKP_SMLAWW( tmp_32, ptr32[ j ], x_Q16[ j ] );
-        }
-        x_Q16[ i ] = SKP_SUB32( b[ i ], tmp_32 );
-    }
-}
-
-/* Solve L^t*x = b, where L is lower triangular with ones on the diagonal */
-SKP_INLINE void SKP_Silk_LS_SolveLast_FIX(
-    const SKP_int32     *L_Q16,     /* I Pointer to Lower Triangular Matrix */
-    const SKP_int       M,          /* I Dim of Matrix equation */
-    const SKP_int32     *b,         /* I b Vector */
-    SKP_int32           *x_Q16      /* O x Vector */  
-)
-{
-    SKP_int i, j;
-    const SKP_int32 *ptr32;
-    SKP_int32 tmp_32;
-
-    for( i = M - 1; i >= 0; i-- ) {
-        ptr32 = matrix_adr( L_Q16, 0, i, M );
-        tmp_32 = 0;
-        for( j = M - 1; j > i; j-- ) {
-            tmp_32 = SKP_SMLAWW( tmp_32, ptr32[ SKP_SMULBB( j, M ) ], x_Q16[ j ] );
-        }
-        x_Q16[ i ] = SKP_SUB32( b[ i ], tmp_32 );
-    }
-}
--- a/src/SKP_Silk_sort.c
+++ /dev/null
@@ -1,195 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/* Insertion sort (fast for already almost sorted arrays):   */
-/* Best case:  O(n)   for an already sorted array            */
-/* Worst case: O(n^2) for an inversely sorted array          */
-/*                                                           */
-/* To be implemented:                                        */
-/* Shell short:    http://en.wikipedia.org/wiki/Shell_sort   */
-
-#include "SKP_Silk_SigProc_FIX.h"
-
-void SKP_Silk_insertion_sort_increasing(
-    SKP_int32           *a,             /* I/O:  Unsorted / Sorted vector               */
-    SKP_int             *index,         /* O:    Index vector for the sorted elements   */
-    const SKP_int       L,              /* I:    Vector length                          */
-    const SKP_int       K               /* I:    Number of correctly sorted positions   */
-)
-{
-    SKP_int32    value;
-    SKP_int        i, j;
-
-    /* Safety checks */
-    SKP_assert( K >  0 );
-    SKP_assert( L >  0 );
-    SKP_assert( L >= K );
-
-    /* Write start indices in index vector */
-    for( i = 0; i < K; i++ ) {
-        index[ i ] = i;
-    }
-
-    /* Sort vector elements by value, increasing order */
-    for( i = 1; i < K; i++ ) {
-        value = a[ i ];
-        for( j = i - 1; ( j >= 0 ) && ( value < a[ j ] ); j-- ) {
-            a[ j + 1 ]     = a[ j ];     /* Shift value */
-            index[ j + 1 ] = index[ j ]; /* Shift index */
-        }
-        a[ j + 1 ]     = value; /* Write value */
-        index[ j + 1 ] = i;     /* Write index */
-    }
-
-    /* If less than L values are asked check the remaining values,      */
-    /* but only spend CPU to ensure that the K first values are correct */
-    for( i = K; i < L; i++ ) {
-        value = a[ i ];
-        if( value < a[ K - 1 ] ) {
-            for( j = K - 2; ( j >= 0 ) && ( value < a[ j ] ); j-- ) {
-                a[ j + 1 ]     = a[ j ];     /* Shift value */
-                index[ j + 1 ] = index[ j ]; /* Shift index */
-            }
-            a[ j + 1 ]     = value; /* Write value */
-            index[ j + 1 ] = i;        /* Write index */
-        }
-    }
-}
-
-void SKP_Silk_insertion_sort_decreasing(
-    SKP_int             *a,             /* I/O: Unsorted / Sorted vector                */
-    SKP_int             *index,         /* O:   Index vector for the sorted elements    */
-    const SKP_int       L,              /* I:   Vector length                           */
-    const SKP_int       K               /* I:   Number of correctly sorted positions    */
-)
-{
-    SKP_int    value;
-    SKP_int    i, j;
-
-    /* Safety checks */
-    SKP_assert( K >  0 );
-    SKP_assert( L >  0 );
-    SKP_assert( L >= K );
-
-    /* Write start indices in index vector */
-    for( i = 0; i < K; i++ ) {
-        index[ i ] = i;
-    }
-
-    /* Sort vector elements by value, decreasing order */
-    for( i = 1; i < K; i++ ) {
-        value = a[ i ];
-        for( j = i - 1; ( j >= 0 ) && ( value > a[ j ] ); j-- ) {
-            a[ j + 1 ]     = a[ j ];     /* Shift value */
-            index[ j + 1 ] = index[ j ]; /* Shift index */
-        }
-        a[ j + 1 ]     = value; /* Write value */
-        index[ j + 1 ] = i;     /* Write index */
-    }
-
-    /* If less than L values are asked check the remaining values,      */
-    /* but only spend CPU to ensure that the K first values are correct */
-    for( i = K; i < L; i++ ) {
-        value = a[ i ];
-        if( value > a[ K - 1 ] ) {
-            for( j = K - 2; ( j >= 0 ) && ( value > a[ j ] ); j-- ) {
-                a[ j + 1 ]     = a[ j ];     /* Shift value */
-                index[ j + 1 ] = index[ j ]; /* Shift index */
-            }
-            a[ j + 1 ]     = value; /* Write value */
-            index[ j + 1 ] = i;     /* Write index */
-        }
-    }
-}
-
-void SKP_Silk_insertion_sort_decreasing_int16(
-    SKP_int16           *a,             /* I/O: Unsorted / Sorted vector                */
-    SKP_int             *index,         /* O:   Index vector for the sorted elements    */
-    const SKP_int       L,              /* I:   Vector length                           */
-    const SKP_int       K               /* I:   Number of correctly sorted positions    */
-)
-{
-    SKP_int i, j;
-    SKP_int value;
-
-    /* Safety checks */
-    SKP_assert( K >  0 );
-    SKP_assert( L >  0 );
-    SKP_assert( L >= K );
-
-    /* Write start indices in index vector */
-    for( i = 0; i < K; i++ ) {
-        index[ i ] = i;
-    }
-
-    /* Sort vector elements by value, decreasing order */
-    for( i = 1; i < K; i++ ) {
-        value = a[ i ];
-        for( j = i - 1; ( j >= 0 ) && ( value > a[ j ] ); j-- ) {    
-            a[ j + 1 ]     = a[ j ];     /* Shift value */
-            index[ j + 1 ] = index[ j ]; /* Shift index */
-        }
-        a[ j + 1 ]     = value; /* Write value */
-        index[ j + 1 ] = i;     /* Write index */
-    }
-
-    /* If less than L values are asked check the remaining values,        */
-    /* but only spend CPU to ensure that the K first values are correct */
-    for( i = K; i < L; i++ ) {
-        value = a[ i ];
-        if( value > a[ K - 1 ] ) {
-            for( j = K - 2; ( j >= 0 ) && ( value > a[ j ] ); j-- ) {    
-                a[ j + 1 ]     = a[ j ];     /* Shift value */
-                index[ j + 1 ] = index[ j ]; /* Shift index */
-            }
-            a[ j + 1 ]     = value; /* Write value */
-            index[ j + 1 ] = i;     /* Write index */
-        }
-    }
-}
-
-void SKP_Silk_insertion_sort_increasing_all_values(
-    SKP_int             *a,             /* I/O: Unsorted / Sorted vector                */
-    const SKP_int       L               /* I:   Vector length                           */
-)
-{
-    SKP_int    value;
-    SKP_int    i, j;
-
-    /* Safety checks */
-    SKP_assert( L >  0 );
-
-    /* Sort vector elements by value, increasing order */
-    for( i = 1; i < L; i++ ) {
-        value = a[ i ];
-        for( j = i - 1; ( j >= 0 ) && ( value < a[ j ] ); j-- ) {
-            a[ j + 1 ] = a[ j ]; /* Shift value */
-        }
-        a[ j + 1 ] = value; /* Write value */
-    }
-}
-
--- a/src/SKP_Silk_structs.h
+++ /dev/null
@@ -1,381 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef SKP_SILK_STRUCTS_H
-#define SKP_SILK_STRUCTS_H
-
-#include "SKP_Silk_typedef.h"
-#include "SKP_Silk_SigProc_FIX.h"
-#include "SKP_Silk_define.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-/************************************/
-/* Noise shaping quantization state */
-/************************************/
-typedef struct {
-    SKP_int16   xq[           2 * MAX_FRAME_LENGTH ]; /* Buffer for quantized output signal */
-    SKP_int32   sLTP_shp_Q10[ 2 * MAX_FRAME_LENGTH ];
-    SKP_int32   sLPC_Q14[ MAX_FRAME_LENGTH / NB_SUBFR + MAX_LPC_ORDER ];
-    SKP_int32   sLF_AR_shp_Q12;
-    SKP_int     lagPrev;
-    SKP_int     sLTP_buf_idx;
-    SKP_int     sLTP_shp_buf_idx;
-    SKP_int32   rand_seed;
-    SKP_int32   prev_inv_gain_Q16;
-    SKP_int     rewhite_flag;
-} SKP_Silk_nsq_state; /* FIX*/
-
-/* Struct for Low BitRate Redundant (LBRR) information */
-typedef struct {
-    SKP_uint8   payload[ MAX_ARITHM_BYTES ];    
-    SKP_int     nBytes;                         /* Number of bytes in payload                               */
-    SKP_int     usage;                          /* Tells how the payload should be used as FEC              */
-} SKP_SILK_LBRR_struct;
-
-/********************************/
-/* VAD state                    */
-/********************************/
-typedef struct {
-    SKP_int32   AnaState[ 2 ];                  /* Analysis filterbank state: 0-8 kHz                       */
-    SKP_int32   AnaState1[ 2 ];                 /* Analysis filterbank state: 0-4 kHz                       */
-    SKP_int32   AnaState2[ 2 ];                 /* Analysis filterbank state: 0-2 kHz                       */
-    SKP_int32   XnrgSubfr[ VAD_N_BANDS ];       /* Subframe energies                                        */
-    SKP_int32   NrgRatioSmth_Q8[ VAD_N_BANDS ]; /* Smoothed energy level in each band                       */
-    SKP_int16   HPstate;                        /* State of differentiator in the lowest band               */
-    SKP_int32   NL[ VAD_N_BANDS ];              /* Noise energy level in each band                          */
-    SKP_int32   inv_NL[ VAD_N_BANDS ];          /* Inverse noise energy level in each band                  */
-    SKP_int32   NoiseLevelBias[ VAD_N_BANDS ];  /* Noise level estimator bias/offset                        */
-    SKP_int32   counter;                        /* Frame counter used in the initial phase                  */
-} SKP_Silk_VAD_state;
-
-/*******************************/
-/* Range encoder/decoder state */
-/*******************************/
-typedef struct {
-    SKP_int32   bufferLength;
-    SKP_int32   bufferIx;
-    SKP_uint32  base_Q32;
-    SKP_uint32  range_Q16;
-    SKP_int32   error;
-    SKP_uint8   buffer[ MAX_ARITHM_BYTES ];     /* Buffer containing payload                                */
-} SKP_Silk_range_coder_state;
-
-/* Input frequency range detection struct */
-typedef struct {
-    SKP_int32                   S_HP_8_kHz[ NB_SOS ][ 2 ];  /* HP filter State */
-    SKP_int32                   ConsecSmplsAboveThres;
-    SKP_int32                   ActiveSpeech_ms;            /* Accumulated time with active speech */
-    SKP_int                     SWB_detected;               /* Flag to indicate SWB input */
-    SKP_int                     WB_detected;                /* Flag to indicate WB input */
-} SKP_Silk_detect_SWB_state;
-
-#if SWITCH_TRANSITION_FILTERING
-/* Variable cut-off low-pass filter state */
-typedef struct {
-    SKP_int32                   In_LP_State[ 2 ];           /* Low pass filter state */
-    SKP_int32                   transition_frame_no;        /* Counter which is mapped to a cut-off frequency */
-    SKP_int                     mode;                       /* Operating mode, 0: switch down, 1: switch up */
-} SKP_Silk_LP_state;
-#endif
-
-/* Structure for one stage of MSVQ */
-typedef struct {
-    const SKP_int32             nVectors;
-    const SKP_int16             *CB_NLSF_Q15;
-    const SKP_int16             *Rates_Q5;
-} SKP_Silk_NLSF_CBS;
-
-/* Structure containing NLSF MSVQ codebook */
-typedef struct {
-    const SKP_int32             nStages;
-
-    /* Fields for (de)quantizing */
-    const SKP_Silk_NLSF_CBS     *CBStages;
-    const SKP_int               *NDeltaMin_Q15;
-
-    /* Fields for arithmetic (de)coding */
-    const SKP_uint16            *CDF;
-    const SKP_uint16 * const    *StartPtr;
-    const SKP_int               *MiddleIx;
-} SKP_Silk_NLSF_CB_struct;
-
-/********************************/
-/* Encoder state                */
-/********************************/
-typedef struct {
-    SKP_Silk_range_coder_state      sRC;                            /* Range coder state                                                    */
-    SKP_Silk_range_coder_state      sRC_LBRR;                       /* Range coder state (for low bitrate redundancy)                       */
-#if HIGH_PASS_INPUT
-    SKP_int32                       In_HP_State[ 2 ];               /* High pass filter state                                               */
-#endif
-#if SWITCH_TRANSITION_FILTERING
-    SKP_Silk_LP_state               sLP;                            /* Low pass filter state */
-#endif
-    SKP_Silk_VAD_state              sVAD;                           /* Voice activity detector state                                        */
-
-    SKP_int                         LBRRprevLastGainIndex;
-    SKP_int                         prev_sigtype;
-    SKP_int                         typeOffsetPrev;                 /* Previous signal type and quantization offset                         */
-    SKP_int                         prevLag;
-    SKP_int                         prev_lagIndex;
-    SKP_int                         fs_kHz;                         /* Sampling frequency (kHz)                                             */
-    SKP_int                         fs_kHz_changed;                 /* Did we switch yet?                                                   */
-    SKP_int                         frame_length;                   /* Frame length (samples)                                               */
-    SKP_int                         subfr_length;                   /* Subframe length (samples)                                            */
-    SKP_int                         la_pitch;                       /* Look-ahead for pitch analysis (samples)                              */
-    SKP_int                         la_shape;                       /* Look-ahead for noise shape analysis (samples)                        */
-    SKP_int32                       TargetRate_bps;                 /* Target bitrate (bps)                                                 */
-    SKP_int                         PacketSize_ms;                  /* Number of milliseconds to put in each packet                         */
-    SKP_int                         PacketLoss_perc;                /* Packet loss rate measured by farend                                  */
-    SKP_int32                       frameCounter;
-    SKP_int                         Complexity;                     /* Complexity setting: 0-> low; 1-> medium; 2->high                     */
-    SKP_int                         nStatesDelayedDecision;         /* Number of states in delayed decision quantization                    */
-    SKP_int                         useInterpolatedNLSFs;           /* Flag for using NLSF interpolation                                    */
-    SKP_int                         shapingLPCOrder;                /* Filter order for noise shaping filters                               */
-    SKP_int                         predictLPCOrder;                /* Filter order for prediction filters                                  */
-    SKP_int                         pitchEstimationComplexity;      /* Complexity level for pitch estimator                                 */
-    SKP_int                         pitchEstimationLPCOrder;        /* Whitening filter order for pitch estimator                           */
-    SKP_int                         LTPQuantLowComplexity;          /* Flag for low complexity LTP quantization                             */
-    SKP_int                         NLSF_MSVQ_Survivors;            /* Number of survivors in NLSF MSVQ                                     */
-    SKP_int                         first_frame_after_reset;        /* Flag for deactivating NLSF interp. and fluc. reduction after resets  */
-
-    /* Input/output buffering */
-    SKP_int16                       inputBuf[ MAX_FRAME_LENGTH ];   /* buffer containin input signal                                        */
-    SKP_int                         inputBufIx;
-    SKP_int                         nFramesInPayloadBuf;            /* number of frames sitting in outputBuf                                */
-    SKP_int                         nBytesInPayloadBuf;             /* number of bytes sitting in outputBuf                                 */
-
-    /* Parameters For LTP scaling Control */
-    SKP_int                         frames_since_onset;
-
-    const SKP_Silk_NLSF_CB_struct   *psNLSF_CB[ 2 ];                /* Pointers to voiced/unvoiced NLSF codebooks */
-
-    /* Struct for Inband LBRR */ 
-    SKP_SILK_LBRR_struct            LBRR_buffer[ MAX_LBRR_DELAY ];
-    SKP_int                         oldest_LBRR_idx;
-    SKP_int                         LBRR_enabled;
-    SKP_int                         LBRR_GainIncreases;             /* Number of shifts to Gains to get LBRR rate Voiced frames             */
-
-    /* Bitrate control */
-    SKP_int32                       bitrateDiff;                    /* accumulated diff. between the target bitrate and the SWB/WB limits   */
-
-#if LOW_COMPLEXITY_ONLY
-    /* state for downsampling from 24 to 16 kHz in low complexity mode */
-    SKP_int16                       resample24To16state[ SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ];
-#else
-    SKP_int32                       resample24To16state[ 11 ];      /* state for downsampling from 24 to 16 kHz                             */
-#endif
-    SKP_int32                       resample24To12state[ 6 ];       /* state for downsampling from 24 to 12 kHz                             */
-    SKP_int32                       resample24To8state[ 7 ];        /* state for downsampling from 24 to  8 kHz                             */
-    SKP_int32                       resample16To12state[ 15 ];      /* state for downsampling from 16 to 12 kHz                             */
-    SKP_int32                       resample16To8state[ 6 ];        /* state for downsampling from 16 to  8 kHz                             */
-#if LOW_COMPLEXITY_ONLY
-    /* state for downsampling from 12 to 8 kHz in low complexity mode */
-    SKP_int16                       resample12To8state[ SigProc_Resample_2_3_coarse_NUM_FIR_COEFS - 1 ];    
-#else
-    SKP_int32                       resample12To8state[ 11 ];       /* state for downsampling from 12 to  8 kHz                             */
-#endif
-
-    /* DTX */
-    SKP_int                         noSpeechCounter;                /* Counts concecutive nonactive frames, used by DTX                     */
-    SKP_int                         useDTX;                         /* Flag to enable DTX                                                   */
-    SKP_int                         inDTX;                          /* Flag to signal DTX period                                            */
-    SKP_int                         vadFlag;                        /* Flag to indicate Voice Activity                                      */
-
-    /* Struct for detecting SWB input */
-    SKP_Silk_detect_SWB_state       sSWBdetect;
-
-
-    /********************************************/
-    /* Buffers etc used by the new bitstream V4 */
-    /********************************************/
-    SKP_int                         q[ MAX_FRAME_LENGTH * MAX_FRAMES_PER_PACKET ];      /* pulse signal buffer */
-    SKP_int                         q_LBRR[ MAX_FRAME_LENGTH * MAX_FRAMES_PER_PACKET ]; /* pulse signal buffer */
-    SKP_int                         sigtype[ MAX_FRAMES_PER_PACKET ];
-    SKP_int                         QuantOffsetType[ MAX_FRAMES_PER_PACKET ];
-    SKP_int                         extension_layer;                                    /* Add extension layer      */
-    SKP_int                         bitstream_v;                                        /* Holds bitstream version  */
-} SKP_Silk_encoder_state;
-
-
-/************************/
-/* Encoder control      */
-/************************/
-typedef struct {
-    /* Quantization indices */
-    SKP_int     lagIndex;
-    SKP_int     contourIndex;
-    SKP_int     PERIndex;
-    SKP_int     LTPIndex[ NB_SUBFR ];
-    SKP_int     NLSFIndices[ NLSF_MSVQ_MAX_CB_STAGES ];  /* NLSF path of quantized LSF vector   */
-    SKP_int     NLSFInterpCoef_Q2;
-    SKP_int     GainsIndices[ NB_SUBFR ];
-    SKP_int32   Seed;
-    SKP_int     LTP_scaleIndex;
-    SKP_int     RateLevelIndex;
-    SKP_int     QuantOffsetType;
-    SKP_int     sigtype;
-
-    /* Prediction and coding parameters */
-    SKP_int     pitchL[ NB_SUBFR ];
-
-    SKP_int     LBRR_usage;                     /* Low bitrate redundancy usage                             */
-} SKP_Silk_encoder_control;
-
-/* Struct for Packet Loss Concealment */
-typedef struct {
-    SKP_int32   pitchL_Q8;                      /* Pitch lag to use for voiced concealment                  */
-    SKP_int16   LTPCoef_Q14[ LTP_ORDER ];       /* LTP coeficients to use for voiced concealment            */
-    SKP_int16   prevLPC_Q12[ MAX_LPC_ORDER ];
-    SKP_int     last_frame_lost;                /* Was previous frame lost                                  */
-    SKP_int32   rand_seed;                      /* Seed for unvoiced signal generation                      */
-    SKP_int16   randScale_Q14;                  /* Scaling of unvoiced random signal                        */
-    SKP_int32   conc_energy;
-    SKP_int     conc_energy_shift;
-    SKP_int16   prevLTP_scale_Q14;
-    SKP_int32   prevGain_Q16[ NB_SUBFR ];
-    SKP_int     fs_kHz;
-} SKP_Silk_PLC_struct;
-
-/* Struct for CNG */
-typedef struct {
-    SKP_int32   CNG_exc_buf_Q10[ MAX_FRAME_LENGTH ];
-    SKP_int     CNG_smth_NLSF_Q15[ MAX_LPC_ORDER ];
-    SKP_int32   CNG_synth_state[ MAX_LPC_ORDER ];
-    SKP_int32   CNG_smth_Gain_Q16;
-    SKP_int32   rand_seed;
-    SKP_int     fs_kHz;
-} SKP_Silk_CNG_struct;
-
-/********************************/
-/* Decoder state                */
-/********************************/
-typedef struct {
-    SKP_Silk_range_coder_state  sRC;                            /* Range coder state                                                    */
-    SKP_int32       prev_inv_gain_Q16;
-    SKP_int32       sLTP_Q16[ 2 * MAX_FRAME_LENGTH ];
-    SKP_int32       sLPC_Q14[ MAX_FRAME_LENGTH / NB_SUBFR + MAX_LPC_ORDER ];
-    SKP_int32       exc_Q10[ MAX_FRAME_LENGTH ];
-    SKP_int32       res_Q10[ MAX_FRAME_LENGTH ];
-    SKP_int16       outBuf[ 2 * MAX_FRAME_LENGTH ];             /* Buffer for output signal                                             */
-    SKP_int         sLTP_buf_idx;                               /* LTP_buf_index                                                        */
-    SKP_int         lagPrev;                                    /* Previous Lag                                                         */
-    SKP_int         LastGainIndex;                              /* Previous gain index                                                  */
-    SKP_int         LastGainIndex_EnhLayer;                     /* Previous gain index                                                  */
-    SKP_int         typeOffsetPrev;                             /* Previous signal type and quantization offset                         */
-    SKP_int32       HPState[ DEC_HP_ORDER ];                    /* HP filter state                                                      */
-    const SKP_int16 *HP_A;                                      /* HP filter AR coefficients                                            */
-    const SKP_int16 *HP_B;                                      /* HP filter MA coefficients                                            */
-    SKP_int         fs_kHz;                                     /* Sampling frequency in kHz                                            */
-    SKP_int         frame_length;                               /* Frame length (samples)                                               */
-    SKP_int         subfr_length;                               /* Subframe length (samples)                                            */
-    SKP_int         LPC_order;                                  /* LPC order                                                            */
-    SKP_int         prevNLSF_Q15[ MAX_LPC_ORDER ];              /* Used to interpolate LSFs                                             */
-    SKP_int         first_frame_after_reset;                    /* Flag for deactivating NLSF interp. and fluc. reduction after resets  */
-
-    /* For buffering payload in case of more frames per packet */
-    SKP_int         nBytesLeft;
-    SKP_int         nFramesDecoded;
-    SKP_int         nFramesInPacket;
-    SKP_int         moreInternalDecoderFrames;
-    SKP_int         FrameTermination;
-
-    SKP_int32       resampleState[ 15 ];
-
-    const SKP_Silk_NLSF_CB_struct *psNLSF_CB[ 2 ];      /* Pointers to voiced/unvoiced NLSF codebooks */
-
-    SKP_int         sigtype[               MAX_FRAMES_PER_PACKET ];
-    SKP_int         QuantOffsetType[       MAX_FRAMES_PER_PACKET ];
-    SKP_int         GainsIndices[          MAX_FRAMES_PER_PACKET ][ NB_SUBFR ];
-    SKP_int         GainsIndices_EnhLayer[ MAX_FRAMES_PER_PACKET ][ NB_SUBFR ];
-    SKP_int         NLSFIndices[           MAX_FRAMES_PER_PACKET ][ NLSF_MSVQ_MAX_CB_STAGES ];
-    SKP_int         NLSFInterpCoef_Q2[     MAX_FRAMES_PER_PACKET ];
-    SKP_int         lagIndex[              MAX_FRAMES_PER_PACKET ];
-    SKP_int         contourIndex[          MAX_FRAMES_PER_PACKET ];
-    SKP_int         PERIndex[              MAX_FRAMES_PER_PACKET ];
-    SKP_int         LTPIndex[              MAX_FRAMES_PER_PACKET ][ NB_SUBFR ];
-    SKP_int         LTP_scaleIndex[        MAX_FRAMES_PER_PACKET ];
-    SKP_int         Seed[                  MAX_FRAMES_PER_PACKET ];
-    SKP_int         vadFlagBuf[            MAX_FRAMES_PER_PACKET ];
-    
-    /* Parameters used to investigate if inband FEC is used */
-    SKP_int         vadFlag;
-    SKP_int         no_FEC_counter;                             /* Counts number of frames wo inband FEC                                */
-    SKP_int         inband_FEC_offset;                          /* 0: no FEC, 1: FEC with 1 packet offset, 2: FEC w 2 packets offset    */ 
-
-    /* CNG state */
-    SKP_Silk_CNG_struct sCNG;
-
-    /* Stuff used for PLC */
-    SKP_Silk_PLC_struct sPLC;
-    SKP_int         lossCnt;
-    SKP_int         prev_sigtype;                               /* Previous sigtype                                                     */
-#ifdef USE_INTERPOLATION_PLC
-    SKP_int16       prevQuant[ MAX_FRAME_LENGTH ];
-    SKP_int         prevPitchL[ NB_SUBFR ];                     /* Previous Lags used                                                   */
-    SKP_int16       prevLTPCoef_Q14[ NB_SUBFR * LTP_ORDER ];    /* Previous LTCoefs used                                                */
-    SKP_int16       prevAR_Q12[ MAX_LPC_ORDER ];
-    SKP_int         interpolDistance;                           /* Number of frames between old and new recieved packet                 */
-#endif
-
-
-
-
-    SKP_int                 bitstream_v;                        /* Holds bitstream version                                              */
-} SKP_Silk_decoder_state;
-
-/************************/
-/* Decoder control      */
-/************************/
-typedef struct {
-    /* prediction and coding parameters */
-    SKP_int             pitchL[ NB_SUBFR ];
-    SKP_int32           Gains_Q16[ NB_SUBFR ];
-    SKP_int32           Seed;
-    /* holds interpolated and final coefficients, 4-byte aligned */
-    SKP_array_of_int16_4_byte_aligned( PredCoef_Q12[ 2 ], MAX_LPC_ORDER );
-    SKP_int16           LTPCoef_Q14[ LTP_ORDER * NB_SUBFR ];
-    SKP_int             LTP_scale_Q14;
-
-    /* quantization indices */
-    SKP_int             PERIndex;
-    SKP_int             RateLevelIndex;
-    SKP_int             QuantOffsetType;
-    SKP_int             sigtype;
-    SKP_int             NLSFInterpCoef_Q2;
-} SKP_Silk_decoder_control;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
--- a/src/SKP_Silk_structs_FIX.h
+++ /dev/null
@@ -1,195 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef SKP_SILK_STRUCTS_FIX_H
-#define SKP_SILK_STRUCTS_FIX_H
-
-#include "SKP_Silk_typedef.h"
-#include "SKP_Silk_define_FIX.h"
-#include "SKP_Silk_main.h"
-#include "SKP_Silk_structs.h"
-
-#if LOW_COMPLEXITY_ONLY
-#include "SKP_Silk_resample_rom.h"
-#endif
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/********************************/
-/* Noise shaping analysis state */
-/********************************/
-typedef struct {
-    SKP_int     LastGainIndex;
-    SKP_int32   HarmBoost_smth_Q16;
-    SKP_int32   HarmShapeGain_smth_Q16;
-    SKP_int32   Tilt_smth_Q16;
-} SKP_Silk_shape_state_FIX;
-
-/********************************/
-/* Prefilter state              */
-/********************************/
-typedef struct {
-    SKP_int16   sLTP_shp1[ LTP_BUF_LENGTH ];
-    SKP_int32   sAR_shp2_Q14[ SHAPE_LPC_ORDER_MAX ];
-    SKP_int16   sLTP_shp2_FIX[ LTP_BUF_LENGTH ];
-    SKP_int     sLTP_shp_buf_idx1;
-    SKP_int     sAR_shp_buf_idx2;
-    SKP_int     sLTP_shp_buf_idx2;
-    SKP_int32   sLF_AR_shp1_Q12;
-    SKP_int32   sLF_MA_shp1_Q12;
-    SKP_int32   sLF_AR_shp2_Q12;
-    SKP_int32   sLF_MA_shp2_Q12;
-    SKP_int     sHarmHP;
-    SKP_int32   rand_seed;
-    SKP_int     lagPrev;
-} SKP_Silk_prefilter_state_FIX;
-
-/*****************************/
-/* Prediction analysis state */
-/*****************************/
-typedef struct {
-    SKP_int   pitch_LPC_win_length;
-    SKP_int   min_pitch_lag;                                        /* Lowest possible pitch lag (samples)  */
-    SKP_int   max_pitch_lag;                                        /* Highest possible pitch lag (samples) */
-    SKP_int   prev_NLSFq_Q15[ MAX_LPC_ORDER ];                      /* Prev. quant. normalized LSF vector   */
-} SKP_Silk_predict_state_FIX;
-
-#if( defined( SAVE_ALL_INTERNAL_DATA ) || defined( USE_FLT2FIX_WRAPPER ) )
-/*******************************************/
-/* Structure containing NLSF MSVQ codebook */
-/*******************************************/
-/* structure for one stage of MSVQ */
-typedef struct {
-    const SKP_int32     nVectors;
-    const SKP_float     *CB;
-    const SKP_float     *Rates;
-} SKP_Silk_NLSF_CBS_FLP_TMP;
-
-typedef struct {
-    const SKP_int32                 nStages;
-
-    /* fields for (de)quantizing */
-    const SKP_Silk_NLSF_CBS_FLP_TMP *CBStages;
-    const SKP_float                 *NDeltaMin;
-
-    /* fields for arithmetic (de)coding */
-    const SKP_uint16                *CDF;
-    const SKP_uint16 * const        *StartPtr;
-    const SKP_int                   *MiddleIx;
-} SKP_Silk_NLSF_CB_struct_FLP_TMP;
-#endif
-
-/********************************/
-/* Encoder state FIX            */
-/********************************/
-typedef struct {
-    SKP_Silk_encoder_state          sCmn;                           /* Common struct, shared with floating-point code */
-
-#if HIGH_PASS_INPUT
-    SKP_int32                       variable_HP_smth1_Q15;          /* State of first smoother                                              */
-    SKP_int32                       variable_HP_smth2_Q15;          /* State of second smoother                                             */
-#endif
-    SKP_Silk_shape_state_FIX        sShape;                         /* Shape state                                                          */
-    SKP_Silk_prefilter_state_FIX    sPrefilt;                       /* Prefilter State                                                      */
-    SKP_Silk_predict_state_FIX      sPred;                          /* Prediction state                                                     */
-    SKP_Silk_nsq_state              sNSQ;                           /* Noise Shape Quantizer State                                          */
-    SKP_Silk_nsq_state              sNSQ_LBRR;                      /* Noise Shape Quantizer State ( for low bitrate redundancy )           */
-    
-    /* Function pointer to noise shaping quantizer (will be set to SKP_Silk_NSQ or SKP_Silk_NSQ_del_dec) */
-    void    (* NoiseShapingQuantizer)( SKP_Silk_encoder_state *, SKP_Silk_encoder_control *, SKP_Silk_nsq_state *, const SKP_int16 *, 
-                                        SKP_int *, const SKP_int, const SKP_int16 *, const SKP_int16 *, const SKP_int16 *, const SKP_int *, 
-                                        const SKP_int *, const SKP_int32 *, const SKP_int32 *, SKP_int, const SKP_int
-    );
-
-    /* Buffer for find pitch and noise shape analysis */
-    SKP_array_of_int16_4_byte_aligned( x_buf, 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX );    
-    SKP_int                         LTPCorr_Q15;                    /* Normalized correlation from pitch lag estimator                      */
-    SKP_int                         mu_LTP_Q8;                      /* Rate-distortion tradeoff in LTP quantization                         */
-    SKP_int32                       SNR_dB_Q7;                      /* Quality setting                                                      */
-    SKP_int32                       avgGain_Q16;                    /* average gain during active speech                                    */
-    SKP_int32                       avgGain_Q16_one_bit_per_sample; /* average gain during active speech                                    */
-    SKP_int                         BufferedInChannel_ms;           /* Simulated number of ms buffer because of exceeded TargetRate_bps     */
-    SKP_int                         speech_activity_Q8;             /* Speech activity in Q8                                                */
-    SKP_int32                       pitchEstimationThreshold_Q16;   /* Threshold for pitch estimator                                        */
-    
-    /* Parameters For LTP scaling Control */
-    SKP_int                         prevLTPredCodGain_Q7;
-    SKP_int                         HPLTPredCodGain_Q7;
-
-    SKP_int32                       inBandFEC_SNR_comp_Q8;          /* Compensation to SNR_dB when using inband FEC Voiced      */
-
-#ifdef USE_FLT2FIX_WRAPPER
-    const SKP_Silk_NLSF_CB_struct_FLP_TMP *psNLSF_CB_FLP[ 2 ];      /* Pointers to voiced/unvoiced NLSF codebooks */    
-#endif
-} SKP_Silk_encoder_state_FIX;
-
-/************************/
-/* Encoder control FIX  */
-/************************/
-typedef struct {
-    SKP_Silk_encoder_control        sCmn;                           /* Common struct, shared with floating-point code */
-
-    /* Prediction and coding parameters */
-    SKP_int32                   Gains_Q16[ NB_SUBFR ];
-    SKP_array_of_int16_4_byte_aligned( PredCoef_Q12[ 2 ], MAX_LPC_ORDER );
-    SKP_int16                   LTPCoef_Q14[ LTP_ORDER * NB_SUBFR ];
-    SKP_int                     LTP_scale_Q14;
-
-    /* Noise shaping parameters */
-    /* Testing */
-    SKP_array_of_int16_4_byte_aligned( AR1_Q13, NB_SUBFR * SHAPE_LPC_ORDER_MAX );
-    SKP_array_of_int16_4_byte_aligned( AR2_Q13, NB_SUBFR * SHAPE_LPC_ORDER_MAX );
-    SKP_int32   LF_shp_Q14[        NB_SUBFR ];          /* Packs two int16 coefficients per int32 value             */
-    SKP_int     GainsPre_Q14[      NB_SUBFR ];
-    SKP_int     HarmBoost_Q14[     NB_SUBFR ];
-    SKP_int     Tilt_Q14[          NB_SUBFR ];
-    SKP_int     HarmShapeGain_Q14[ NB_SUBFR ];
-    SKP_int     Lambda_Q10;
-    SKP_int     input_quality_Q14;
-    SKP_int     coding_quality_Q14;
-    SKP_int32   pitch_freq_low_Hz;
-    SKP_int     current_SNR_dB_Q7;
-
-    /* measures */
-    SKP_int     sparseness_Q8;
-    SKP_int     LTPredCodGain_Q7;
-    SKP_int     input_quality_bands_Q15[ VAD_N_BANDS ];
-    SKP_int     input_tilt_Q15;
-    SKP_int32   ResNrg[ NB_SUBFR ];             /* Residual energy per subframe                             */
-    SKP_int     ResNrgQ[ NB_SUBFR ];            /* Q domain for the residual energy > 0                     */
-    
-} SKP_Silk_encoder_control_FIX;
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
--- a/src/SKP_Silk_sum_sqr_shift.c
+++ /dev/null
@@ -1,98 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/*                                                                      *
- * SKP_Silk_sum_sqr_shift.c                                           *
- *                                                                      *
- * compute number of bits to right shift the sum of squares of a vector *
- * of int16s to make it fit in an int32                                 *
- *                                                                      *
- * Copyright 2006-2008 (c), Skype Limited                               *
- *                                                                      */
-#include "SKP_Silk_SigProc_FIX.h"
-/* Compute number of bits to right shift the sum of squares of a vector */
-/* of int16s to make it fit in an int32                                 */
-void SKP_Silk_sum_sqr_shift(
-    SKP_int32            *energy,            /* O    Energy of x, after shifting to the right            */
-    SKP_int              *shift,             /* O    Number of bits right shift applied to energy        */
-    const SKP_int16      *x,                 /* I    Input vector                                        */
-    SKP_int              len                 /* I    Length of input vector                              */
-)
-{
-    SKP_int   i, shft;
-    SKP_int32 in32, nrg_tmp, nrg;
-
-    if( (SKP_int32)( (SKP_int_ptr_size)x & 2 ) != 0 ) {
-        /* Input is not 4-byte aligned */
-        nrg = SKP_SMULBB( x[ 0 ], x[ 0 ] );
-        i = 1;
-    } else {
-        nrg = 0;
-        i   = 0;
-    }
-    shft = 0;
-    len--;
-    for( ; i < len; i += 2 ) {
-        /* Load two values at once */
-        in32 = *( (SKP_int32 *)&x[ i ] );
-        nrg = SKP_SMLABB_ovflw( nrg, in32, in32 );
-        nrg = SKP_SMLATT_ovflw( nrg, in32, in32 );
-        if( nrg < 0 ) {
-            /* Scale down */
-            nrg = (SKP_int32)SKP_RSHIFT_uint( (SKP_uint32)nrg, 2 );
-            shft = 2;
-            break;
-        }
-    }
-    for( ; i < len; i += 2 ) {
-        /* Load two values at once */
-        in32 = *( (SKP_int32 *)&x[ i ] );
-        nrg_tmp = SKP_SMULBB( in32, in32 );
-        nrg_tmp = SKP_SMLATT_ovflw( nrg_tmp, in32, in32 );
-        nrg = (SKP_int32)SKP_ADD_RSHIFT_uint( nrg, (SKP_uint32)nrg_tmp, shft );
-        if( nrg < 0 ) {
-            /* Scale down */
-            nrg = (SKP_int32)SKP_RSHIFT_uint( (SKP_uint32)nrg, 2 );
-            shft += 2;
-        }
-    }
-    if( i == len ) {
-        /* One sample left to process */
-        nrg_tmp = SKP_SMULBB( x[ i ], x[ i ] );
-        nrg = (SKP_int32)SKP_ADD_RSHIFT_uint( nrg, nrg_tmp, shft );
-    }
-
-    /* Make sure to have at least one extra leading zero (two leading zeros in total) */
-    if( nrg & 0xC0000000 ) {
-        nrg = SKP_RSHIFT_uint( (SKP_uint32)nrg, 2 );
-        shft += 2;
-    }
-
-    /* Output arguments */
-    *shift  = shft;
-    *energy = nrg;
-}
--- a/src/SKP_Silk_tables.h
+++ /dev/null
@@ -1,171 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef SKP_SILK_TABLES_H
-#define SKP_SILK_TABLES_H
-
-#include "SKP_Silk_define.h"
-#include "SKP_Silk_structs.h"
-
-#define PITCH_EST_MAX_LAG_MS                18          /* 18 ms -> 56 Hz */
-#define PITCH_EST_MIN_LAG_MS                2           /* 2 ms -> 500 Hz */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* entropy coding tables */
-extern const SKP_uint16 SKP_Silk_type_offset_CDF[ 5 ];                                              /*   5 */
-extern const SKP_uint16 SKP_Silk_type_offset_joint_CDF[ 4 ][ 5 ];                                   /*  20 */
-extern const SKP_int    SKP_Silk_type_offset_CDF_offset;
-
-extern const SKP_uint16 SKP_Silk_gain_CDF[ 2 ][ N_LEVELS_QGAIN + 1 ];                               /* 130 */
-extern const SKP_int    SKP_Silk_gain_CDF_offset;
-extern const SKP_uint16 SKP_Silk_delta_gain_CDF[ MAX_DELTA_GAIN_QUANT - MIN_DELTA_GAIN_QUANT + 2 ]; /*  46 */
-extern const SKP_int    SKP_Silk_delta_gain_CDF_offset;
-
-extern const SKP_uint16 SKP_Silk_pitch_lag_NB_CDF[ 8 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ];   /* 130 */
-extern const SKP_int    SKP_Silk_pitch_lag_NB_CDF_offset;
-extern const SKP_uint16 SKP_Silk_pitch_lag_MB_CDF[ 12 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ];  /* 194 */
-extern const SKP_int    SKP_Silk_pitch_lag_MB_CDF_offset;
-extern const SKP_uint16 SKP_Silk_pitch_lag_WB_CDF[ 16 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ];  /* 258 */
-extern const SKP_int    SKP_Silk_pitch_lag_WB_CDF_offset;
-extern const SKP_uint16 SKP_Silk_pitch_lag_SWB_CDF[ 24 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ]; /* 386 */
-extern const SKP_int    SKP_Silk_pitch_lag_SWB_CDF_offset;
-
-extern const SKP_uint16 SKP_Silk_pitch_contour_CDF[ 35 ];                                           /*  35 */
-extern const SKP_int    SKP_Silk_pitch_contour_CDF_offset;
-extern const SKP_uint16 SKP_Silk_pitch_contour_NB_CDF[ 12 ];                                        /*  12 */
-extern const SKP_int    SKP_Silk_pitch_contour_NB_CDF_offset;
-extern const SKP_uint16 SKP_Silk_pitch_delta_CDF[23];                                               /* 23 */
-extern const SKP_int    SKP_Silk_pitch_delta_CDF_offset;
-
-extern const SKP_uint16 SKP_Silk_pulses_per_block_CDF[ N_RATE_LEVELS ][ MAX_PULSES + 3 ];           /* 210 */
-extern const SKP_int    SKP_Silk_pulses_per_block_CDF_offset;
-extern const SKP_int16  SKP_Silk_pulses_per_block_BITS_Q6[ N_RATE_LEVELS - 1 ][ MAX_PULSES + 2 ];   /* 180 */
-
-extern const SKP_uint16 SKP_Silk_rate_levels_CDF[ 2 ][ N_RATE_LEVELS ];                             /*  20 */
-extern const SKP_int    SKP_Silk_rate_levels_CDF_offset;
-extern const SKP_int16  SKP_Silk_rate_levels_BITS_Q6[ 2 ][ N_RATE_LEVELS - 1 ];                     /*  18 */
-
-extern const SKP_int    SKP_Silk_max_pulses_table[ 4 ];                                             /*   4 */
-
-extern const SKP_uint16 SKP_Silk_shell_code_table0[  33 ];                                          /*  33 */
-extern const SKP_uint16 SKP_Silk_shell_code_table1[  52 ];                                          /*  52 */
-extern const SKP_uint16 SKP_Silk_shell_code_table2[ 102 ];                                          /* 102 */
-extern const SKP_uint16 SKP_Silk_shell_code_table3[ 207 ];                                          /* 207 */
-extern const SKP_uint16 SKP_Silk_shell_code_table_offsets[ 19 ];                                    /*  19 */
-
-extern const SKP_uint16 SKP_Silk_lsb_CDF[ 3 ];                                                      /*   3 */
-
-extern const SKP_uint16 SKP_Silk_sign_CDF[ 36 ][ 3 ];                                               /* 108 */
-
-extern const SKP_uint16 SKP_Silk_LTP_per_index_CDF[ 4 ];                                            /*   4 */
-extern const SKP_int    SKP_Silk_LTP_per_index_CDF_offset;
-extern const SKP_int16  * const SKP_Silk_LTP_gain_BITS_Q6_ptrs[ NB_LTP_CBKS ];                      /*   3 */
-extern const SKP_uint16 * const SKP_Silk_LTP_gain_CDF_ptrs[ NB_LTP_CBKS ];                          /*   3 */
-extern const SKP_int    SKP_Silk_LTP_gain_CDF_offsets[ NB_LTP_CBKS ];                               /*   3 */
-extern const SKP_int32  SKP_Silk_LTP_gain_middle_avg_RD_Q14;
-extern const SKP_uint16 SKP_Silk_LTPscale_CDF[ 4 ];                                                 /*   4 */
-extern const SKP_int    SKP_Silk_LTPscale_offset;
-
-/* Tables for LTPScale */
-extern const SKP_int16  SKP_Silk_LTPScales_table_Q14[ 3 ];
-
-extern const SKP_uint16 SKP_Silk_vadflag_CDF[ 3 ];                                                  /*   3 */
-extern const SKP_int    SKP_Silk_vadflag_offset;
-
-extern const SKP_int    SKP_Silk_SamplingRates_table[ 4 ];                                          /*   4 */
-extern const SKP_uint16 SKP_Silk_SamplingRates_CDF[ 5 ];                                            /*   5 */
-extern const SKP_int    SKP_Silk_SamplingRates_offset;
-
-extern const SKP_uint16 SKP_Silk_NLSF_interpolation_factor_CDF[ 6 ];
-extern const SKP_int    SKP_Silk_NLSF_interpolation_factor_offset;
-
-/* NLSF codebooks */
-extern const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB0_16, SKP_Silk_NLSF_CB1_16;
-extern const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB0_10, SKP_Silk_NLSF_CB1_10;
-
-/* quantization tables */
-extern const SKP_int16 * const SKP_Silk_LTP_vq_ptrs_Q14[ NB_LTP_CBKS ];                             /* 168 */
-extern const SKP_int    SKP_Silk_LTP_vq_sizes[ NB_LTP_CBKS ];                                       /*   3 */
-
-/* Piece-wise linear mapping from bitrate in kbps to coding quality in dB SNR */
-extern const SKP_int32  TargetRate_table_NB[  TARGET_RATE_TAB_SZ ];
-extern const SKP_int32  TargetRate_table_MB[  TARGET_RATE_TAB_SZ ];
-extern const SKP_int32  TargetRate_table_WB[  TARGET_RATE_TAB_SZ ];
-extern const SKP_int32  TargetRate_table_SWB[ TARGET_RATE_TAB_SZ ];
-extern const SKP_int32  SNR_table_Q1[         TARGET_RATE_TAB_SZ ];
-
-extern const SKP_int32  SNR_table_one_bit_per_sample_Q7[ 4 ];
-
-/* Filter coeficicnts for HP filter: 4. Order filter implementad as two biquad filters  */
-extern const SKP_int16  SKP_Silk_SWB_detect_B_HP_Q13[ NB_SOS ][ 3 ];
-extern const SKP_int16  SKP_Silk_SWB_detect_A_HP_Q13[ NB_SOS ][ 2 ];
-
-/* Decoder high-pass filter coefficients for 24 kHz sampling */
-extern const SKP_int16  SKP_Silk_Dec_A_HP_24[ DEC_HP_ORDER ];                                       /*   2 */
-extern const SKP_int16  SKP_Silk_Dec_B_HP_24[ DEC_HP_ORDER + 1 ];                                   /*   3 */
-
-/* Decoder high-pass filter coefficients for 16 kHz sampling */
-extern const SKP_int16  SKP_Silk_Dec_A_HP_16[ DEC_HP_ORDER ];                                       /*   2 */
-extern const SKP_int16  SKP_Silk_Dec_B_HP_16[ DEC_HP_ORDER + 1 ];                                   /*   3 */
-
-/* Decoder high-pass filter coefficients for 12 kHz sampling */
-extern const SKP_int16  SKP_Silk_Dec_A_HP_12[ DEC_HP_ORDER ];                                       /*   2 */
-extern const SKP_int16  SKP_Silk_Dec_B_HP_12[ DEC_HP_ORDER + 1 ];                                   /*   3 */
-
-/* Decoder high-pass filter coefficients for 8 kHz sampling */
-extern const SKP_int16  SKP_Silk_Dec_A_HP_8[ DEC_HP_ORDER ];                                        /*   2 */
-extern const SKP_int16  SKP_Silk_Dec_B_HP_8[ DEC_HP_ORDER + 1 ];                                    /*   3 */
-
-/* Table for frame termination indication */
-extern const SKP_uint16 SKP_Silk_FrameTermination_CDF[ 5 ];
-extern const SKP_int    SKP_Silk_FrameTermination_offset;
-
-extern const SKP_uint16 SKP_Silk_FrameTermination_v4_CDF[ 6 ];
-extern const SKP_int    SKP_Silk_FrameTermination_v4_offset;
-
-/* Table for random seed */
-extern const SKP_uint16 SKP_Silk_Seed_CDF[ 5 ];
-extern const SKP_int    SKP_Silk_Seed_offset;
-
-/* Quantization offsets */
-extern const SKP_int16  SKP_Silk_Quantization_Offsets_Q10[ 2 ][ 2 ];
-
-#if SWITCH_TRANSITION_FILTERING
-/* Interpolation points for filter coefficients used in the bandwidth transition smoother */
-extern const SKP_int32 SKP_Silk_Transition_LP_B_Q28[ TRANSITION_INT_NUM ][ TRANSITION_NB ];
-extern const SKP_int32 SKP_Silk_Transition_LP_A_Q28[ TRANSITION_INT_NUM ][ TRANSITION_NA ];
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
--- a/src/SKP_Silk_tables_LTP.c
+++ /dev/null
@@ -1,324 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_tables.h"
-
-const SKP_uint16 SKP_Silk_LTP_per_index_CDF[ 4 ] = {
-         0,  20992,  40788,  65535
-};
-
-const SKP_int SKP_Silk_LTP_per_index_CDF_offset = 1;
-
-
-const SKP_uint16 SKP_Silk_LTP_gain_CDF_0[ 11 ] = {
-         0,  49380,  54463,  56494,  58437,  60101,  61683,  62985,
-     64066,  64823,  65535
-};
-
-const SKP_uint16 SKP_Silk_LTP_gain_CDF_1[ 21 ] = {
-         0,  25290,  30654,  35710,  40386,  42937,  45250,  47459,
-     49411,  51348,  52974,  54517,  55976,  57423,  58865,  60285,
-     61667,  62895,  63827,  64724,  65535
-};
-
-const SKP_uint16 SKP_Silk_LTP_gain_CDF_2[ 41 ] = {
-         0,   4958,   9439,  13581,  17638,  21651,  25015,  28025,
-     30287,  32406,  34330,  36240,  38130,  39790,  41281,  42764,
-     44229,  45676,  47081,  48431,  49675,  50849,  51932,  52966,
-     53957,  54936,  55869,  56789,  57708,  58504,  59285,  60043,
-     60796,  61542,  62218,  62871,  63483,  64076,  64583,  65062,
-     65535
-};
-
-const SKP_int SKP_Silk_LTP_gain_CDF_offsets[ 3 ] = {
-         1,     3,     10
-};
-
-const SKP_int32 SKP_Silk_LTP_gain_middle_avg_RD_Q14 = 11010;
-
-const SKP_int16 SKP_Silk_LTP_gain_BITS_Q6_0[ 10 ] = {
-        26,    236,    321,    325,    339,    344,    362,    379,
-       412,    418
-};
-
-const SKP_int16 SKP_Silk_LTP_gain_BITS_Q6_1[ 20 ] = {
-        88,    231,    237,    244,    300,    309,    313,    324,
-       325,    341,    346,    351,    352,    352,    354,    356,
-       367,    393,    396,    406
-};
-
-const SKP_int16 SKP_Silk_LTP_gain_BITS_Q6_2[ 40 ] = {
-       238,    248,    255,    257,    258,    274,    284,    311,
-       317,    326,    326,    327,    339,    349,    350,    351,
-       352,    355,    358,    366,    371,    379,    383,    387,
-       388,    393,    394,    394,    407,    409,    412,    412,
-       413,    422,    426,    432,    434,    449,    454,    455
-};
-
-const SKP_uint16 * const SKP_Silk_LTP_gain_CDF_ptrs[ NB_LTP_CBKS ] = {
-    SKP_Silk_LTP_gain_CDF_0,
-    SKP_Silk_LTP_gain_CDF_1,
-    SKP_Silk_LTP_gain_CDF_2
-};
-
-const SKP_int16 * const SKP_Silk_LTP_gain_BITS_Q6_ptrs[ NB_LTP_CBKS ] = {
-    SKP_Silk_LTP_gain_BITS_Q6_0,
-    SKP_Silk_LTP_gain_BITS_Q6_1,
-    SKP_Silk_LTP_gain_BITS_Q6_2
-};
-
-const SKP_int16 SKP_Silk_LTP_gain_vq_0_Q14[ 10 ][ 5 ] = 
-{
-{
-       594,    984,   2840,   1021,    669
-},
-{
-        10,     35,    304,     -1,     23
-},
-{
-      -694,   1923,   4603,   2975,   2335
-},
-{
-      2437,   3176,   3778,   1940,    481
-},
-{
-       214,    -46,   7870,   4406,   -521
-},
-{
-      -896,   4818,   8501,   1623,   -887
-},
-{
-      -696,   3178,   6480,   -302,   1081
-},
-{
-       517,    599,   1002,    567,    560
-},
-{
-     -2075,   -834,   4712,   -340,    896
-},
-{
-      1435,   -644,   3993,   -612,  -2063
-}
-};
-
-const SKP_int16 SKP_Silk_LTP_gain_vq_1_Q14[ 20 ][ 5 ] = 
-{
-{
-      1655,   2918,   5001,   3010,   1775
-},
-{
-       113,    198,    856,    176,    178
-},
-{
-      -843,   2479,   7858,   5371,    574
-},
-{
-        59,   5356,   7648,   2850,   -315
-},
-{
-      3840,   4851,   6527,   1583,  -1233
-},
-{
-      1620,   1760,   2330,   1876,   2045
-},
-{
-      -545,   1854,  11792,   1547,   -307
-},
-{
-      -604,    689,   5369,   5074,   4265
-},
-{
-       521,  -1331,   9829,   6209,  -1211
-},
-{
-     -1315,   6747,   9929,  -1410,    546
-},
-{
-       117,   -144,   2810,   1649,   5240
-},
-{
-      5392,   3476,   2425,    -38,    633
-},
-{
-        14,   -449,   5274,   3547,   -171
-},
-{
-       -98,    395,   9114,   1676,    844
-},
-{
-      -908,   3843,   8861,   -957,   1474
-},
-{
-       396,   6747,   5379,   -329,   1269
-},
-{
-      -335,   2830,   4281,    270,    -54
-},
-{
-      1502,   5609,   8958,   6045,   2059
-},
-{
-      -370,    479,   5267,   5726,   1174
-},
-{
-      5237,  -1144,   6510,    455,    512
-}
-};
-
-const SKP_int16 SKP_Silk_LTP_gain_vq_2_Q14[ 40 ][ 5 ] = 
-{
-{
-      -278,    415,   9345,   7106,   -431
-},
-{
-     -1006,   3863,   9524,   4724,   -871
-},
-{
-      -954,   4624,  11722,    973,   -300
-},
-{
-      -117,   7066,   8331,   1959,   -901
-},
-{
-       593,   3412,   6070,   4914,   1567
-},
-{
-        54,    -51,  12618,   4228,   -844
-},
-{
-      3157,   4822,   5229,   2313,    717
-},
-{
-      -244,   1161,  14198,    779,     69
-},
-{
-     -1218,   5603,  12894,  -2301,   1001
-},
-{
-      -132,   3960,   9526,    577,   1806
-},
-{
-     -1633,   8815,  10484,  -2452,    895
-},
-{
-       235,    450,   1243,    667,    437
-},
-{
-       959,  -2630,  10897,   8772,  -1852
-},
-{
-      2420,   2046,   8893,   4427,  -1569
-},
-{
-        23,   7091,   8356,  -1285,   1508
-},
-{
-     -1133,    835,   7662,   6043,   2800
-},
-{
-       439,    391,  11016,   2253,   1362
-},
-{
-     -1020,   2876,  13436,   4015,  -3020
-},
-{
-      1060,  -2690,  13512,   5565,  -1394
-},
-{
-     -1420,   8007,  11421,   -152,  -1672
-},
-{
-      -893,   2895,  15434,  -1490,    159
-},
-{
-     -1054,    428,  12208,   8538,  -3344
-},
-{
-      1772,  -1304,   7593,   6185,    561
-},
-{
-       525,  -1207,   6659,  11151,  -1170
-},
-{
-       439,   2667,   4743,   2359,   5515
-},
-{
-      2951,   7432,   7909,   -230,  -1564
-},
-{
-       -72,   2140,   5477,   1391,   1580
-},
-{
-       476,  -1312,  15912,   2174,  -1027
-},
-{
-      5737,    441,   2493,   2043,   2757
-},
-{
-       228,    -43,   1803,   6663,   7064
-},
-{
-      4596,   9182,   1917,   -200,    203
-},
-{
-      -704,  12039,   5451,  -1188,    542
-},
-{
-      1782,  -1040,  10078,   7513,  -2767
-},
-{
-     -2626,   7747,   9019,     62,   1710
-},
-{
-       235,   -233,   2954,  10921,   1947
-},
-{
-     10854,   2814,   1232,   -111,    222
-},
-{
-      2267,   2778,  12325,    156,  -1658
-},
-{
-     -2950,   8095,  16330,    268,  -3626
-},
-{
-        67,   2083,   7950,    -80,  -2432
-},
-{
-       518,    -66,   1718,    415,  11435
-}
-};
-
-const SKP_int16 * const SKP_Silk_LTP_vq_ptrs_Q14[ NB_LTP_CBKS ] = {
-    &SKP_Silk_LTP_gain_vq_0_Q14[ 0 ][ 0 ],
-    &SKP_Silk_LTP_gain_vq_1_Q14[ 0 ][ 0 ],
-    &SKP_Silk_LTP_gain_vq_2_Q14[ 0 ][ 0 ]
-};
- 
-const SKP_int SKP_Silk_LTP_vq_sizes[ NB_LTP_CBKS ] = {
-    10, 20, 40 
-};
--- a/src/SKP_Silk_tables_NLSF_CB0_10.c
+++ /dev/null
@@ -1,889 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/**********************************************/
-/* This file has been automatically generated */
-/*                                            */
-/* ROM usage:   138+1331 Words                */
-/**********************************************/
-
-#include "SKP_Silk_structs.h"
-#include "SKP_Silk_tables_NLSF_CB0_10.h"
-
-const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ NLSF_MSVQ_CB0_10_VECTORS + NLSF_MSVQ_CB0_10_STAGES ] =
-{
-            0,
-         2658,
-         4420,
-         6107,
-         7757,
-         9408,
-        10955,
-        12502,
-        13983,
-        15432,
-        16882,
-        18331,
-        19750,
-        21108,
-        22409,
-        23709,
-        25010,
-        26256,
-        27501,
-        28747,
-        29965,
-        31158,
-        32351,
-        33544,
-        34736,
-        35904,
-        36997,
-        38091,
-        39185,
-        40232,
-        41280,
-        42327,
-        43308,
-        44290,
-        45271,
-        46232,
-        47192,
-        48132,
-        49032,
-        49913,
-        50775,
-        51618,
-        52462,
-        53287,
-        54095,
-        54885,
-        55675,
-        56449,
-        57222,
-        57979,
-        58688,
-        59382,
-        60076,
-        60726,
-        61363,
-        61946,
-        62505,
-        63052,
-        63543,
-        63983,
-        64396,
-        64766,
-        65023,
-        65279,
-        65535,
-            0,
-         4977,
-         9542,
-        14106,
-        18671,
-        23041,
-        27319,
-        31596,
-        35873,
-        39969,
-        43891,
-        47813,
-        51652,
-        55490,
-        59009,
-        62307,
-        65535,
-            0,
-         8571,
-        17142,
-        25529,
-        33917,
-        42124,
-        49984,
-        57844,
-        65535,
-            0,
-         8732,
-        17463,
-        25825,
-        34007,
-        42189,
-        50196,
-        58032,
-        65535,
-            0,
-         8948,
-        17704,
-        25733,
-        33762,
-        41791,
-        49821,
-        57678,
-        65535,
-            0,
-         4374,
-         8655,
-        12936,
-        17125,
-        21313,
-        25413,
-        29512,
-        33611,
-        37710,
-        41809,
-        45820,
-        49832,
-        53843,
-        57768,
-        61694,
-        65535
-};
-
-const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr[ NLSF_MSVQ_CB0_10_STAGES ] =
-{
-     &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[   0 ],
-     &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[  65 ],
-     &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[  82 ],
-     &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[  91 ],
-     &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ 100 ],
-     &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ 109 ]
-};
-
-const SKP_int SKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx[ NLSF_MSVQ_CB0_10_STAGES ] =
-{
-      23,
-       8,
-       5,
-       5,
-       5,
-       9
-};
-
-const SKP_int16 SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ NLSF_MSVQ_CB0_10_VECTORS ] =
-{
-              148,              167,
-              169,              170,
-              170,              173,
-              173,              175,
-              176,              176,
-              176,              177,
-              179,              181,
-              181,              181,
-              183,              183,
-              183,              184,
-              185,              185,
-              185,              185,
-              186,              189,
-              189,              189,
-              191,              191,
-              191,              194,
-              194,              194,
-              195,              195,
-              196,              198,
-              199,              200,
-              201,              201,
-              202,              203,
-              204,              204,
-              205,              205,
-              206,              209,
-              210,              210,
-              213,              214,
-              218,              220,
-              221,              226,
-              231,              234,
-              239,              256,
-              256,              256,
-              119,              123,
-              123,              123,
-              125,              126,
-              126,              126,
-              128,              130,
-              130,              131,
-              131,              135,
-              138,              139,
-               94,               94,
-               95,               95,
-               96,               98,
-               98,               99,
-               93,               93,
-               95,               96,
-               96,               97,
-               98,              100,
-               92,               93,
-               97,               97,
-               97,               97,
-               98,               98,
-              125,              126,
-              126,              127,
-              127,              128,
-              128,              128,
-              128,              128,
-              129,              129,
-              129,              130,
-              130,              131
-};
-
-const SKP_int SKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min_Q15[ 10 + 1 ] =
-{
-              563,
-                3,
-               22,
-               20,
-                3,
-                3,
-              132,
-              119,
-              358,
-               86,
-              964
-};
-
-const SKP_int16 SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * NLSF_MSVQ_CB0_10_VECTORS ] =
-{
-             2210,             4023,
-             6981,             9260,
-            12573,            15687,
-            19207,            22383,
-            25981,            29142,
-             3285,             4172,
-             6116,            10856,
-            15289,            16826,
-            19701,            22010,
-            24721,            29313,
-             1554,             2511,
-             6577,            10337,
-            13837,            16511,
-            20086,            23214,
-            26480,            29464,
-             3062,             4017,
-             5771,            10037,
-            13365,            14952,
-            20140,            22891,
-            25229,            29603,
-             2085,             3457,
-             5934,             8718,
-            11501,            13670,
-            17997,            21817,
-            24935,            28745,
-             2776,             4093,
-             6421,            10413,
-            15111,            16806,
-            20825,            23826,
-            26308,            29411,
-             2717,             4034,
-             5697,             8463,
-            14301,            16354,
-            19007,            23413,
-            25812,            28506,
-             2872,             3702,
-             5881,            11034,
-            17141,            18879,
-            21146,            23451,
-            25817,            29600,
-             2999,             4015,
-             7357,            11219,
-            12866,            17307,
-            20081,            22644,
-            26774,            29107,
-             2942,             3866,
-             5918,            11915,
-            13909,            16072,
-            20453,            22279,
-            27310,            29826,
-             2271,             3527,
-             6606,             9729,
-            12943,            17382,
-            20224,            22345,
-            24602,            28290,
-             2207,             3310,
-             5844,             9339,
-            11141,            15651,
-            18576,            21177,
-            25551,            28228,
-             3963,             4975,
-             6901,            11588,
-            13466,            15577,
-            19231,            21368,
-            25510,            27759,
-             2749,             3549,
-             6966,            13808,
-            15653,            17645,
-            20090,            22599,
-            26467,            28537,
-             2126,             3504,
-             5109,             9954,
-            12550,            14620,
-            19703,            21687,
-            26457,            29106,
-             3966,             5745,
-             7442,             9757,
-            14468,            16404,
-            19135,            23048,
-            25375,            28391,
-             3197,             4751,
-             6451,             9298,
-            13038,            14874,
-            17962,            20627,
-            23835,            28464,
-             3195,             4081,
-             6499,            12252,
-            14289,            16040,
-            18357,            20730,
-            26980,            29309,
-             1533,             2471,
-             4486,             7796,
-            12332,            15758,
-            19567,            22298,
-            25673,            29051,
-             2002,             2971,
-             4985,             8083,
-            13181,            15435,
-            18237,            21517,
-            24595,            28351,
-             3808,             4925,
-             6710,            10201,
-            12011,            14300,
-            18457,            20391,
-            26525,            28956,
-             2281,             3418,
-             4979,             8726,
-            15964,            18104,
-            20250,            22771,
-            25286,            28954,
-             3051,             5479,
-             7290,             9848,
-            12744,            14503,
-            18665,            23684,
-            26065,            28947,
-             2364,             3565,
-             5502,             9621,
-            14922,            16621,
-            19005,            20996,
-            26310,            29302,
-             4093,             5212,
-             6833,             9880,
-            16303,            18286,
-            20571,            23614,
-            26067,            29128,
-             2941,             3996,
-             6038,            10638,
-            12668,            14451,
-            16798,            19392,
-            26051,            28517,
-             3863,             5212,
-             7019,             9468,
-            11039,            13214,
-            19942,            22344,
-            25126,            29539,
-             4615,             6172,
-             7853,            10252,
-            12611,            14445,
-            19719,            22441,
-            24922,            29341,
-             3566,             4512,
-             6985,             8684,
-            10544,            16097,
-            18058,            22475,
-            26066,            28167,
-             4481,             5489,
-             7432,            11414,
-            13191,            15225,
-            20161,            22258,
-            26484,            29716,
-             3320,             4320,
-             6621,             9867,
-            11581,            14034,
-            21168,            23210,
-            26588,            29903,
-             3794,             4689,
-             6916,             8655,
-            10143,            16144,
-            19568,            21588,
-            27557,            29593,
-             2446,             3276,
-             5918,            12643,
-            16601,            18013,
-            21126,            23175,
-            27300,            29634,
-             2450,             3522,
-             5437,             8560,
-            15285,            19911,
-            21826,            24097,
-            26567,            29078,
-             2580,             3796,
-             5580,             8338,
-             9969,            12675,
-            18907,            22753,
-            25450,            29292,
-             3325,             4312,
-             6241,             7709,
-             9164,            14452,
-            21665,            23797,
-            27096,            29857,
-             3338,             4163,
-             7738,            11114,
-            12668,            14753,
-            16931,            22736,
-            25671,            28093,
-             3840,             4755,
-             7755,            13471,
-            15338,            17180,
-            20077,            22353,
-            27181,            29743,
-             2504,             4079,
-             8351,            12118,
-            15046,            18595,
-            21684,            24704,
-            27519,            29937,
-             5234,             6342,
-             8267,            11821,
-            15155,            16760,
-            20667,            23488,
-            25949,            29307,
-             2681,             3562,
-             6028,            10827,
-            18458,            20458,
-            22303,            24701,
-            26912,            29956,
-             3374,             4528,
-             6230,             8256,
-             9513,            12730,
-            18666,            20720,
-            26007,            28425,
-             2731,             3629,
-             8320,            12450,
-            14112,            16431,
-            18548,            22098,
-            25329,            27718,
-             3481,             4401,
-             7321,             9319,
-            11062,            13093,
-            15121,            22315,
-            26331,            28740,
-             3577,             4945,
-             6669,             8792,
-            10299,            12645,
-            19505,            24766,
-            26996,            29634,
-             4058,             5060,
-             7288,            10190,
-            11724,            13936,
-            15849,            18539,
-            26701,            29845,
-             4262,             5390,
-             7057,             8982,
-            10187,            15264,
-            20480,            22340,
-            25958,            28072,
-             3404,             4329,
-             6629,             7946,
-            10121,            17165,
-            19640,            22244,
-            25062,            27472,
-             3157,             4168,
-             6195,             9319,
-            10771,            13325,
-            15416,            19816,
-            24672,            27634,
-             2503,             3473,
-             5130,             6767,
-             8571,            14902,
-            19033,            21926,
-            26065,            28728,
-             4133,             5102,
-             7553,            10054,
-            11757,            14924,
-            17435,            20186,
-            23987,            26272,
-             4972,             6139,
-             7894,             9633,
-            11320,            14295,
-            21737,            24306,
-            26919,            29907,
-             2958,             3816,
-             6851,             9204,
-            10895,            18052,
-            20791,            23338,
-            27556,            29609,
-             5234,             6028,
-             8034,            10154,
-            11242,            14789,
-            18948,            20966,
-            26585,            29127,
-             5241,             6838,
-            10526,            12819,
-            14681,            17328,
-            19928,            22336,
-            26193,            28697,
-             3412,             4251,
-             5988,             7094,
-             9907,            18243,
-            21669,            23777,
-            26969,            29087,
-             2470,             3217,
-             7797,            15296,
-            17365,            19135,
-            21979,            24256,
-            27322,            29442,
-             4939,             5804,
-             8145,            11809,
-            13873,            15598,
-            17234,            19423,
-            26476,            29645,
-             5051,             6167,
-             8223,             9655,
-            12159,            17995,
-            20464,            22832,
-            26616,            28462,
-             4987,             5907,
-             9319,            11245,
-            13132,            15024,
-            17485,            22687,
-            26011,            28273,
-             5137,             6884,
-            11025,            14950,
-            17191,            19425,
-            21807,            24393,
-            26938,            29288,
-             7057,             7884,
-             9528,            10483,
-            10960,            14811,
-            19070,            21675,
-            25645,            28019,
-             6759,             7160,
-             8546,            11779,
-            12295,            13023,
-            16627,            21099,
-            24697,            28287,
-             3863,             9762,
-            11068,            11445,
-            12049,            13960,
-            18085,            21507,
-            25224,            28997,
-              397,              335,
-              651,             1168,
-              640,              765,
-              465,              331,
-              214,             -194,
-             -578,             -647,
-             -657,              750,
-              564,              613,
-              549,              630,
-              304,              -52,
-              828,              922,
-              443,              111,
-              138,              124,
-              169,               14,
-              144,               83,
-              132,               58,
-             -413,             -752,
-              869,              336,
-              385,               69,
-               56,              830,
-             -227,             -266,
-             -368,             -440,
-            -1195,              163,
-              126,             -228,
-              802,              156,
-              188,              120,
-              376,               59,
-             -358,             -558,
-            -1326,             -254,
-             -202,             -789,
-              296,               92,
-              -70,             -129,
-             -718,            -1135,
-              292,              -29,
-             -631,              487,
-             -157,             -153,
-             -279,                2,
-             -419,             -342,
-              -34,             -514,
-             -799,            -1571,
-             -687,             -609,
-             -546,             -130,
-             -215,             -252,
-             -446,             -574,
-            -1337,              207,
-              -72,               32,
-              103,             -642,
-              942,              733,
-              187,               29,
-             -211,             -814,
-              143,              225,
-               20,               24,
-             -268,             -377,
-             1623,             1133,
-              667,              164,
-              307,              366,
-              187,               34,
-               62,             -313,
-             -832,            -1482,
-            -1181,              483,
-              -42,              -39,
-             -450,            -1406,
-             -587,              -52,
-             -760,              334,
-               98,              -60,
-             -500,             -488,
-            -1058,              299,
-              131,             -250,
-             -251,             -703,
-             1037,              568,
-             -413,             -265,
-             1687,              573,
-              345,              323,
-               98,               61,
-             -102,               31,
-              135,              149,
-              617,              365,
-              -39,               34,
-             -611,             1201,
-             1421,              736,
-             -414,             -393,
-             -492,             -343,
-             -316,             -532,
-              528,              172,
-               90,              322,
-             -294,             -319,
-             -541,              503,
-              639,              401,
-                1,             -149,
-              -73,             -167,
-              150,              118,
-              308,              218,
-              121,              195,
-             -143,             -261,
-            -1013,             -802,
-              387,              436,
-              130,             -427,
-             -448,             -681,
-              123,              -87,
-             -251,             -113,
-              274,              310,
-              445,              501,
-              354,              272,
-              141,             -285,
-              569,              656,
-               37,              -49,
-              251,             -386,
-             -263,             1122,
-              604,              606,
-              336,               95,
-               34,                0,
-               85,              180,
-              207,             -367,
-             -622,             1070,
-               -6,              -79,
-             -160,              -92,
-             -137,             -276,
-             -323,             -371,
-             -696,            -1036,
-              407,              102,
-              -86,             -214,
-             -482,             -647,
-              -28,             -291,
-              -97,             -180,
-             -250,             -435,
-              -18,              -76,
-             -332,              410,
-              407,              168,
-              539,              411,
-              254,              111,
-               58,             -145,
-              200,               30,
-              187,              116,
-              131,             -367,
-             -475,              781,
-             -559,              561,
-              195,             -115,
-                8,             -168,
-               30,               55,
-             -122,              131,
-               82,               -5,
-             -273,              -50,
-             -632,              668,
-                4,               32,
-              -26,             -279,
-              315,              165,
-              197,              377,
-              155,              -41,
-             -138,             -324,
-             -109,             -617,
-              360,               98,
-              -53,             -319,
-             -114,             -245,
-              -82,              507,
-              468,              263,
-             -137,             -389,
-              652,              354,
-              -18,             -227,
-             -462,             -135,
-              317,               53,
-              -16,               66,
-              -72,             -126,
-             -356,             -347,
-             -328,              -72,
-             -337,              324,
-              152,              349,
-              169,             -196,
-              179,              254,
-              260,              325,
-              -74,              -80,
-               75,              -31,
-              270,              275,
-               87,              278,
-             -446,             -301,
-              309,               71,
-              -25,             -242,
-              516,              161,
-             -162,              -83,
-              329,              230,
-             -311,             -259,
-              177,              -26,
-             -462,               89,
-              257,                6,
-             -130,              -93,
-             -456,             -317,
-             -221,             -206,
-             -417,             -182,
-              -74,              234,
-               48,              261,
-              359,              231,
-              258,               85,
-             -282,              252,
-             -147,             -222,
-              251,             -207,
-              443,              123,
-             -417,              -36,
-              273,             -241,
-              240,             -112,
-               44,             -167,
-              126,             -124,
-              -77,               58,
-             -401,              333,
-             -118,               82,
-              126,              151,
-             -433,              359,
-             -130,             -102,
-              131,             -244,
-               86,               85,
-             -462,              414,
-             -240,               16,
-              145,               28,
-             -205,             -481,
-              373,              293,
-              -72,             -174,
-               62,              259,
-               -8,              -18,
-              362,              233,
-              185,               43,
-              278,               27,
-              193,              570,
-             -248,              189,
-               92,               31,
-             -275,               -3,
-              243,              176,
-              438,              209,
-              206,              -51,
-               79,              109,
-              168,             -185,
-             -308,              -68,
-             -618,              385,
-             -310,             -108,
-             -164,              165,
-               61,             -152,
-             -101,             -412,
-             -268,             -257,
-              -40,              -20,
-              -28,             -158,
-             -301,              271,
-              380,             -338,
-             -367,             -132,
-               64,              114,
-             -131,             -225,
-             -156,             -260,
-              -63,             -116,
-              155,             -586,
-             -202,              254,
-             -287,              178,
-              227,             -106,
-             -294,              164,
-              298,             -100,
-              185,              317,
-              193,              -45,
-               28,               80,
-              -87,             -433,
-               22,              -48,
-               48,             -237,
-             -229,             -139,
-              120,             -364,
-              268,             -136,
-              396,              125,
-              130,              -89,
-             -272,              118,
-             -256,              -68,
-             -451,              488,
-              143,             -165,
-              -48,             -190,
-              106,              219,
-               47,              435,
-              245,               97,
-               75,             -418,
-              121,             -187,
-              570,             -200,
-             -351,              225,
-              -21,             -217,
-              234,             -111,
-              194,               14,
-              242,              118,
-              140,             -397,
-              355,              361,
-              -45,             -195
-};
-
-const SKP_Silk_NLSF_CBS SKP_Silk_NLSF_CB0_10_Stage_info[ NLSF_MSVQ_CB0_10_STAGES ] =
-{
-        {  64, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 *   0 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[   0 ] },
-        {  16, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 *  64 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[  64 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 *  80 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[  80 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 *  88 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[  88 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 *  96 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[  96 ] },
-        {  16, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * 104 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ 104 ] }
-};
-
-const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB0_10 =
-{
-        NLSF_MSVQ_CB0_10_STAGES,
-        SKP_Silk_NLSF_CB0_10_Stage_info,
-        SKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min_Q15,
-        SKP_Silk_NLSF_MSVQ_CB0_10_CDF,
-        SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr,
-        SKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx
-};
-
--- a/src/SKP_Silk_tables_NLSF_CB0_10.h
+++ /dev/null
@@ -1,51 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef SKP_SILK_TABLES_NLSF_CB0_10_H
-#define SKP_SILK_TABLES_NLSF_CB0_10_H
-
-#include "SKP_Silk_define.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#define NLSF_MSVQ_CB0_10_STAGES       6
-#define NLSF_MSVQ_CB0_10_VECTORS      120
-
-/* NLSF codebook entropy coding tables */
-extern const SKP_uint16         SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ NLSF_MSVQ_CB0_10_VECTORS + NLSF_MSVQ_CB0_10_STAGES ];
-extern const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr[                  NLSF_MSVQ_CB0_10_STAGES ];
-extern const SKP_int            SKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx[                 NLSF_MSVQ_CB0_10_STAGES ];
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
--- a/src/SKP_Silk_tables_NLSF_CB0_16.c
+++ /dev/null
@@ -1,1319 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/**********************************************/
-/* This file has been automatically generated */
-/*                                            */
-/* ROM usage:   246+3689 Words                */
-/**********************************************/
-
-#include "SKP_Silk_structs.h"
-#include "SKP_Silk_tables_NLSF_CB0_16.h"
-
-const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ NLSF_MSVQ_CB0_16_VECTORS + NLSF_MSVQ_CB0_16_STAGES ] =
-{
-            0,
-         1449,
-         2749,
-         4022,
-         5267,
-         6434,
-         7600,
-         8647,
-         9695,
-        10742,
-        11681,
-        12601,
-        13444,
-        14251,
-        15008,
-        15764,
-        16521,
-        17261,
-        18002,
-        18710,
-        19419,
-        20128,
-        20837,
-        21531,
-        22225,
-        22919,
-        23598,
-        24277,
-        24956,
-        25620,
-        26256,
-        26865,
-        27475,
-        28071,
-        28667,
-        29263,
-        29859,
-        30443,
-        31026,
-        31597,
-        32168,
-        32727,
-        33273,
-        33808,
-        34332,
-        34855,
-        35379,
-        35902,
-        36415,
-        36927,
-        37439,
-        37941,
-        38442,
-        38932,
-        39423,
-        39914,
-        40404,
-        40884,
-        41364,
-        41844,
-        42324,
-        42805,
-        43285,
-        43754,
-        44224,
-        44694,
-        45164,
-        45623,
-        46083,
-        46543,
-        46993,
-        47443,
-        47892,
-        48333,
-        48773,
-        49213,
-        49653,
-        50084,
-        50515,
-        50946,
-        51377,
-        51798,
-        52211,
-        52614,
-        53018,
-        53422,
-        53817,
-        54212,
-        54607,
-        55002,
-        55388,
-        55775,
-        56162,
-        56548,
-        56910,
-        57273,
-        57635,
-        57997,
-        58352,
-        58698,
-        59038,
-        59370,
-        59702,
-        60014,
-        60325,
-        60630,
-        60934,
-        61239,
-        61537,
-        61822,
-        62084,
-        62346,
-        62602,
-        62837,
-        63072,
-        63302,
-        63517,
-        63732,
-        63939,
-        64145,
-        64342,
-        64528,
-        64701,
-        64867,
-        65023,
-        65151,
-        65279,
-        65407,
-        65535,
-            0,
-         5099,
-         9982,
-        14760,
-        19538,
-        24213,
-        28595,
-        32976,
-        36994,
-        41012,
-        44944,
-        48791,
-        52557,
-        56009,
-        59388,
-        62694,
-        65535,
-            0,
-         9955,
-        19697,
-        28825,
-        36842,
-        44686,
-        52198,
-        58939,
-        65535,
-            0,
-         8949,
-        17335,
-        25720,
-        33926,
-        41957,
-        49987,
-        57845,
-        65535,
-            0,
-         9724,
-        18642,
-        26998,
-        35355,
-        43532,
-        51534,
-        59365,
-        65535,
-            0,
-         8750,
-        17499,
-        26249,
-        34448,
-        42471,
-        50494,
-        58178,
-        65535,
-            0,
-         8730,
-        17273,
-        25816,
-        34176,
-        42536,
-        50203,
-        57869,
-        65535,
-            0,
-         8769,
-        17538,
-        26307,
-        34525,
-        42742,
-        50784,
-        58319,
-        65535,
-            0,
-         8736,
-        17101,
-        25466,
-        33653,
-        41839,
-        50025,
-        57864,
-        65535,
-            0,
-         4368,
-         8735,
-        12918,
-        17100,
-        21283,
-        25465,
-        29558,
-        33651,
-        37744,
-        41836,
-        45929,
-        50022,
-        54027,
-        57947,
-        61782,
-        65535
-};
-
-const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr[ NLSF_MSVQ_CB0_16_STAGES ] =
-{
-     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[   0 ],
-     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 129 ],
-     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 146 ],
-     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 155 ],
-     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 164 ],
-     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 173 ],
-     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 182 ],
-     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 191 ],
-     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 200 ],
-     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 209 ]
-};
-
-const SKP_int SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx[ NLSF_MSVQ_CB0_16_STAGES ] =
-{
-      42,
-       8,
-       4,
-       5,
-       5,
-       5,
-       5,
-       5,
-       5,
-       9
-};
-
-const SKP_int16 SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ NLSF_MSVQ_CB0_16_VECTORS ] =
-{
-              176,              181,
-              182,              183,
-              186,              186,
-              191,              191,
-              191,              196,
-              197,              201,
-              203,              206,
-              206,              206,
-              207,              207,
-              209,              209,
-              209,              209,
-              210,              210,
-              210,              211,
-              211,              211,
-              212,              214,
-              216,              216,
-              217,              217,
-              217,              217,
-              218,              218,
-              219,              219,
-              220,              221,
-              222,              223,
-              223,              223,
-              223,              224,
-              224,              224,
-              225,              225,
-              226,              226,
-              226,              226,
-              227,              227,
-              227,              227,
-              227,              227,
-              228,              228,
-              228,              228,
-              229,              229,
-              229,              230,
-              230,              230,
-              231,              231,
-              231,              231,
-              232,              232,
-              232,              232,
-              233,              234,
-              235,              235,
-              235,              236,
-              236,              236,
-              236,              237,
-              237,              237,
-              237,              240,
-              240,              240,
-              240,              241,
-              242,              243,
-              244,              244,
-              247,              247,
-              248,              248,
-              248,              249,
-              251,              255,
-              255,              256,
-              260,              260,
-              261,              264,
-              264,              266,
-              266,              268,
-              271,              274,
-              276,              279,
-              288,              288,
-              288,              288,
-              118,              120,
-              121,              121,
-              122,              125,
-              125,              129,
-              129,              130,
-              131,              132,
-              136,              137,
-              138,              145,
-               87,               88,
-               91,               97,
-               98,              100,
-              105,              106,
-               92,               95,
-               95,               96,
-               97,               97,
-               98,               99,
-               88,               92,
-               95,               95,
-               96,               97,
-               98,              109,
-               93,               93,
-               93,               96,
-               97,               97,
-               99,              101,
-               93,               94,
-               94,               95,
-               95,               99,
-               99,               99,
-               93,               93,
-               93,               96,
-               96,               97,
-              100,              102,
-               93,               95,
-               95,               96,
-               96,               96,
-               98,               99,
-              125,              125,
-              127,              127,
-              127,              127,
-              128,              128,
-              128,              128,
-              128,              128,
-              129,              130,
-              131,              132
-};
-
-const SKP_int SKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min_Q15[ 16 + 1 ] =
-{
-              266,
-                3,
-               40,
-                3,
-                3,
-               16,
-               78,
-               89,
-              107,
-              141,
-              188,
-              146,
-              272,
-              240,
-              235,
-              215,
-              632
-};
-
-const SKP_int16 SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * NLSF_MSVQ_CB0_16_VECTORS ] =
-{
-             1170,             2278,             3658,             5374,
-             7666,             9113,            11298,            13304,
-            15371,            17549,            19587,            21487,
-            23798,            26038,            28318,            30201,
-             1628,             2334,             4115,             6036,
-             7818,             9544,            11777,            14021,
-            15787,            17408,            19466,            21261,
-            22886,            24565,            26714,            28059,
-             1724,             2670,             4056,             6532,
-             8357,            10119,            12093,            14061,
-            16491,            18795,            20417,            22402,
-            24251,            26224,            28410,            29956,
-             1493,             3427,             4789,             6399,
-             8435,            10168,            12000,            14066,
-            16229,            18210,            20040,            22098,
-            24153,            26095,            28183,            30121,
-             1119,             2089,             4295,             6245,
-             8691,            10741,            12688,            15057,
-            17028,            18792,            20717,            22514,
-            24497,            26548,            28619,            30630,
-             1363,             2417,             3927,             5556,
-             7422,             9315,            11879,            13767,
-            16143,            18520,            20458,            22578,
-            24539,            26436,            28318,            30318,
-             1122,             2503,             5216,             7148,
-             9310,            11078,            13175,            14800,
-            16864,            18700,            20436,            22488,
-            24572,            26602,            28555,            30426,
-              600,             1317,             2970,             5609,
-             7694,             9784,            12169,            14087,
-            16379,            18378,            20551,            22686,
-            24739,            26697,            28646,            30355,
-              941,             1882,             4274,             5540,
-             8482,             9858,            11940,            14287,
-            16091,            18501,            20326,            22612,
-            24711,            26638,            28814,            30430,
-              635,             1699,             4376,             5948,
-             8097,            10115,            12274,            14178,
-            16111,            17813,            19695,            21773,
-            23927,            25866,            28022,            30134,
-             1408,             2222,             3524,             5615,
-             7345,             8849,            10989,            12772,
-            15352,            17026,            18919,            21062,
-            23329,            25215,            27209,            29023,
-              701,             1307,             3548,             6301,
-             7744,             9574,            11227,            12978,
-            15170,            17565,            19775,            22097,
-            24230,            26335,            28377,            30231,
-             1752,             2364,             4879,             6569,
-             7813,             9796,            11199,            14290,
-            15795,            18000,            20396,            22417,
-            24308,            26124,            28360,            30633,
-              901,             1629,             3356,             4635,
-             7256,             8767,             9971,            11558,
-            15215,            17544,            19523,            21852,
-            23900,            25978,            28133,            30184,
-              981,             1669,             3323,             4693,
-             6213,             8692,            10614,            12956,
-            15211,            17711,            19856,            22122,
-            24344,            26592,            28723,            30481,
-             1607,             2577,             4220,             5512,
-             8532,            10388,            11627,            13671,
-            15752,            17199,            19840,            21859,
-            23494,            25786,            28091,            30131,
-              811,             1471,             3144,             5041,
-             7430,             9389,            11174,            13255,
-            15157,            16741,            19583,            22167,
-            24115,            26142,            28383,            30395,
-             1543,             2144,             3629,             6347,
-             7333,             9339,            10710,            13596,
-            15099,            17340,            20102,            21886,
-            23732,            25637,            27818,            29917,
-              492,             1185,             2940,             5488,
-             7095,             8751,            11596,            13579,
-            16045,            18015,            20178,            22127,
-            24265,            26406,            28484,            30357,
-             1547,             2282,             3693,             6341,
-             7758,             9607,            11848,            13236,
-            16564,            18069,            19759,            21404,
-            24110,            26606,            28786,            30655,
-              685,             1338,             3409,             5262,
-             6950,             9222,            11414,            14523,
-            16337,            17893,            19436,            21298,
-            23293,            25181,            27973,            30520,
-              887,             1581,             3057,             4318,
-             7192,             8617,            10047,            13106,
-            16265,            17893,            20233,            22350,
-            24379,            26384,            28314,            30189,
-             2285,             3745,             5662,             7576,
-             9323,            11320,            13239,            15191,
-            17175,            19225,            21108,            22972,
-            24821,            26655,            28561,            30460,
-             1496,             2108,             3448,             6898,
-             8328,             9656,            11252,            12823,
-            14979,            16482,            18180,            20085,
-            22962,            25160,            27705,            29629,
-              575,             1261,             3861,             6627,
-             8294,            10809,            12705,            14768,
-            17076,            19047,            20978,            23055,
-            24972,            26703,            28720,            30345,
-             1682,             2213,             3882,             6238,
-             7208,             9646,            10877,            13431,
-            14805,            16213,            17941,            20873,
-            23550,            25765,            27756,            29461,
-              888,             1616,             3924,             5195,
-             7206,             8647,             9842,            11473,
-            16067,            18221,            20343,            22774,
-            24503,            26412,            28054,            29731,
-              805,             1454,             2683,             4472,
-             7936,             9360,            11398,            14345,
-            16205,            17832,            19453,            21646,
-            23899,            25928,            28387,            30463,
-             1640,             2383,             3484,             5082,
-             6032,             8606,            11640,            12966,
-            15842,            17368,            19346,            21182,
-            23638,            25889,            28368,            30299,
-             1632,             2204,             4510,             7580,
-             8718,            10512,            11962,            14096,
-            15640,            17194,            19143,            22247,
-            24563,            26561,            28604,            30509,
-             2043,             2612,             3985,             6851,
-             8038,             9514,            10979,            12789,
-            15426,            16728,            18899,            20277,
-            22902,            26209,            28711,            30618,
-             2224,             2798,             4465,             5320,
-             7108,             9436,            10986,            13222,
-            14599,            18317,            20141,            21843,
-            23601,            25700,            28184,            30582,
-              835,             1541,             4083,             5769,
-             7386,             9399,            10971,            12456,
-            15021,            18642,            20843,            23100,
-            25292,            26966,            28952,            30422,
-             1795,             2343,             4809,             5896,
-             7178,             8545,            10223,            13370,
-            14606,            16469,            18273,            20736,
-            23645,            26257,            28224,            30390,
-             1734,             2254,             4031,             5188,
-             6506,             7872,             9651,            13025,
-            14419,            17305,            19495,            22190,
-            24403,            26302,            28195,            30177,
-             1841,             2349,             3968,             4764,
-             6376,             9825,            11048,            13345,
-            14682,            16252,            18183,            21363,
-            23918,            26156,            28031,            29935,
-             1432,             2047,             5631,             6927,
-             8198,             9675,            11358,            13506,
-            14802,            16419,            18339,            22019,
-            24124,            26177,            28130,            30586,
-             1730,             2320,             3744,             4808,
-             6007,             9666,            10997,            13622,
-            15234,            17495,            20088,            22002,
-            23603,            25400,            27379,            29254,
-             1267,             1915,             5483,             6812,
-             8229,             9919,            11589,            13337,
-            14747,            17965,            20552,            22167,
-            24519,            26819,            28883,            30642,
-             1526,             2229,             4240,             7388,
-             8953,            10450,            11899,            13718,
-            16861,            18323,            20379,            22672,
-            24797,            26906,            28906,            30622,
-             2175,             2791,             4104,             6875,
-             8612,             9798,            12152,            13536,
-            15623,            17682,            19213,            21060,
-            24382,            26760,            28633,            30248,
-              454,             1231,             4339,             5738,
-             7550,             9006,            10320,            13525,
-            16005,            17849,            20071,            21992,
-            23949,            26043,            28245,            30175,
-             2250,             2791,             4230,             5283,
-             6762,            10607,            11879,            13821,
-            15797,            17264,            20029,            22266,
-            24588,            26437,            28244,            30419,
-             1696,             2216,             4308,             8385,
-             9766,            11030,            12556,            14099,
-            16322,            17640,            19166,            20590,
-            23967,            26858,            28798,            30562,
-             2452,             3236,             4369,             6118,
-             7156,             9003,            11509,            12796,
-            15749,            17291,            19491,            22241,
-            24530,            26474,            28273,            30073,
-             1811,             2541,             3555,             5480,
-             9123,            10527,            11894,            13659,
-            15262,            16899,            19366,            21069,
-            22694,            24314,            27256,            29983,
-             1553,             2246,             4559,             5500,
-             6754,             7874,            11739,            13571,
-            15188,            17879,            20281,            22510,
-            24614,            26649,            28786,            30755,
-             1982,             2768,             3834,             5964,
-             8732,             9908,            11797,            14813,
-            16311,            17946,            21097,            22851,
-            24456,            26304,            28166,            29755,
-             1824,             2529,             3817,             5449,
-             6854,             8714,            10381,            12286,
-            14194,            15774,            19524,            21374,
-            23695,            26069,            28096,            30212,
-             2212,             2854,             3947,             5898,
-             9930,            11556,            12854,            14788,
-            16328,            17700,            20321,            22098,
-            23672,            25291,            26976,            28586,
-             2023,             2599,             4024,             4916,
-             6613,            11149,            12457,            14626,
-            16320,            17822,            19673,            21172,
-            23115,            26051,            28825,            30758,
-             1628,             2206,             3467,             4364,
-             8679,            10173,            11864,            13679,
-            14998,            16938,            19207,            21364,
-            23850,            26115,            28124,            30273,
-             2014,             2603,             4114,             7254,
-             8516,            10043,            11822,            13503,
-            16329,            17826,            19697,            21280,
-            23151,            24661,            26807,            30161,
-             2376,             2980,             4422,             5770,
-             7016,             9723,            11125,            13516,
-            15485,            16985,            19160,            20587,
-            24401,            27180,            29046,            30647,
-             2454,             3502,             4624,             6019,
-             7632,             8849,            10792,            13964,
-            15523,            17085,            19611,            21238,
-            22856,            25108,            28106,            29890,
-             1573,             2274,             3308,             5999,
-             8977,            10104,            12457,            14258,
-            15749,            18180,            19974,            21253,
-            23045,            25058,            27741,            30315,
-             1943,             2730,             4140,             6160,
-             7491,             8986,            11309,            12775,
-            14820,            16558,            17909,            19757,
-            21512,            23605,            27274,            29527,
-             2021,             2582,             4494,             5835,
-             6993,             8245,             9827,            14733,
-            16462,            17894,            19647,            21083,
-            23764,            26667,            29072,            30990,
-             1052,             1775,             3218,             4378,
-             7666,             9403,            11248,            13327,
-            14972,            17962,            20758,            22354,
-            25071,            27209,            29001,            30609,
-             2218,             2866,             4223,             5352,
-             6581,             9980,            11587,            13121,
-            15193,            16583,            18386,            20080,
-            22013,            25317,            28127,            29880,
-             2146,             2840,             4397,             5840,
-             7449,             8721,            10512,            11936,
-            13595,            17253,            19310,            20891,
-            23417,            25627,            27749,            30231,
-             1972,             2619,             3756,             6367,
-             7641,             8814,            12286,            13768,
-            15309,            18036,            19557,            20904,
-            22582,            24876,            27800,            30440,
-             2005,             2577,             4272,             7373,
-             8558,            10223,            11770,            13402,
-            16502,            18000,            19645,            21104,
-            22990,            26806,            29505,            30942,
-             1153,             1822,             3724,             5443,
-             6990,             8702,            10289,            11899,
-            13856,            15315,            17601,            21064,
-            23692,            26083,            28586,            30639,
-             1304,             1869,             3318,             7195,
-             9613,            10733,            12393,            13728,
-            15822,            17474,            18882,            20692,
-            23114,            25540,            27684,            29244,
-             2093,             2691,             4018,             6658,
-             7947,             9147,            10497,            11881,
-            15888,            17821,            19333,            21233,
-            23371,            25234,            27553,            29998,
-              575,             1331,             5304,             6910,
-             8425,            10086,            11577,            13498,
-            16444,            18527,            20565,            22847,
-            24914,            26692,            28759,            30157,
-             1435,             2024,             3283,             4156,
-             7611,            10592,            12049,            13927,
-            15459,            18413,            20495,            22270,
-            24222,            26093,            28065,            30099,
-             1632,             2168,             5540,             7478,
-             8630,            10391,            11644,            14321,
-            15741,            17357,            18756,            20434,
-            22799,            26060,            28542,            30696,
-             1407,             2245,             3405,             5639,
-             9419,            10685,            12104,            13495,
-            15535,            18357,            19996,            21689,
-            24351,            26550,            28853,            30564,
-             1675,             2226,             4005,             8223,
-             9975,            11155,            12822,            14316,
-            16504,            18137,            19574,            21050,
-            22759,            24912,            28296,            30634,
-             1080,             1614,             3622,             7565,
-             8748,            10303,            11713,            13848,
-            15633,            17434,            19761,            21825,
-            23571,            25393,            27406,            29063,
-             1693,             2229,             3456,             4354,
-             5670,            10890,            12563,            14167,
-            15879,            17377,            19817,            21971,
-            24094,            26131,            28298,            30099,
-             2042,             2959,             4195,             5740,
-             7106,             8267,            11126,            14973,
-            16914,            18295,            20532,            21982,
-            23711,            25769,            27609,            29351,
-              984,             1612,             3808,             5265,
-             6885,             8411,             9547,            10889,
-            12522,            16520,            19549,            21639,
-            23746,            26058,            28310,            30374,
-             2036,             2538,             4166,             7761,
-             9146,            10412,            12144,            13609,
-            15588,            17169,            18559,            20113,
-            21820,            24313,            28029,            30612,
-             1871,             2355,             4061,             5143,
-             7464,            10129,            11941,            15001,
-            16680,            18354,            19957,            22279,
-            24861,            26872,            28988,            30615,
-             2566,             3161,             4643,             6227,
-             7406,             9970,            11618,            13416,
-            15889,            17364,            19121,            20817,
-            22592,            24720,            28733,            31082,
-             1700,             2327,             4828,             5939,
-             7567,             9154,            11087,            12771,
-            14209,            16121,            20222,            22671,
-            24648,            26656,            28696,            30745,
-             3169,             3873,             5046,             6868,
-             8184,             9480,            12335,            14068,
-            15774,            17971,            20231,            21711,
-            23520,            25245,            27026,            28730,
-             1564,             2391,             4229,             6730,
-             8905,            10459,            13026,            15033,
-            17265,            19809,            21849,            23741,
-            25490,            27312,            29061,            30527,
-             2864,             3559,             4719,             6441,
-             9592,            11055,            12763,            14784,
-            16428,            18164,            20486,            22262,
-            24183,            26263,            28383,            30224,
-             2673,             3449,             4581,             5983,
-             6863,             8311,            12464,            13911,
-            15738,            17791,            19416,            21182,
-            24025,            26561,            28723,            30440,
-             2419,             3049,             4274,             6384,
-             8564,             9661,            11288,            12676,
-            14447,            17578,            19816,            21231,
-            23099,            25270,            26899,            28926,
-             1278,             2001,             3000,             5353,
-             9995,            11777,            13018,            14570,
-            16050,            17762,            19982,            21617,
-            23371,            25083,            27656,            30172,
-              932,             1624,             2798,             4570,
-             8592,             9988,            11552,            13050,
-            16921,            18677,            20415,            22810,
-            24817,            26819,            28804,            30385,
-             2324,             2973,             4156,             5702,
-             6919,             8806,            10259,            12503,
-            15015,            16567,            19418,            21375,
-            22943,            24550,            27024,            29849,
-             1564,             2373,             3455,             4907,
-             5975,             7436,            11786,            14505,
-            16107,            18148,            20019,            21653,
-            23740,            25814,            28578,            30372,
-             3025,             3729,             4866,             6520,
-             9487,            10943,            12358,            14258,
-            16174,            17501,            19476,            21408,
-            23227,            24906,            27347,            29407,
-             1270,             1965,             6802,             7995,
-             9204,            10828,            12507,            14230,
-            15759,            17860,            20369,            22502,
-            24633,            26514,            28535,            30525,
-             2210,             2749,             4266,             7487,
-             9878,            11018,            12823,            14431,
-            16247,            18626,            20450,            22054,
-            23739,            25291,            27074,            29169,
-             1275,             1926,             4330,             6573,
-             8441,            10920,            13260,            15008,
-            16927,            18573,            20644,            22217,
-            23983,            25474,            27372,            28645,
-             3015,             3670,             5086,             6372,
-             7888,             9309,            10966,            12642,
-            14495,            16172,            18080,            19972,
-            22454,            24899,            27362,            29975,
-             2882,             3733,             5113,             6482,
-             8125,             9685,            11598,            13288,
-            15405,            17192,            20178,            22426,
-            24801,            27014,            29212,            30811,
-             2300,             2968,             4101,             5442,
-             6327,             7910,            12455,            13862,
-            15747,            17505,            19053,            20679,
-            22615,            24658,            27499,            30065,
-             2257,             2940,             4430,             5991,
-             7042,             8364,             9414,            11224,
-            15723,            17420,            19253,            21469,
-            23915,            26053,            28430,            30384,
-             1227,             2045,             3818,             5011,
-             6990,             9231,            11024,            13011,
-            17341,            19017,            20583,            22799,
-            25195,            26876,            29351,            30805,
-             1354,             1924,             3789,             8077,
-            10453,            11639,            13352,            14817,
-            16743,            18189,            20095,            22014,
-            24593,            26677,            28647,            30256,
-             3142,             4049,             6197,             7417,
-             8753,            10156,            11533,            13181,
-            15947,            17655,            19606,            21402,
-            23487,            25659,            28123,            30304,
-             1317,             2263,             4725,             7611,
-             9667,            11634,            14143,            16258,
-            18724,            20698,            22379,            24007,
-            25775,            27251,            28930,            30593,
-             1570,             2323,             3818,             6215,
-             9893,            11556,            13070,            14631,
-            16152,            18290,            21386,            23346,
-            25114,            26923,            28712,            30168,
-             2297,             3905,             6287,             8558,
-            10668,            12766,            15019,            17102,
-            19036,            20677,            22341,            23871,
-            25478,            27085,            28851,            30520,
-             1915,             2507,             4033,             5749,
-             7059,             8871,            10659,            12198,
-            13937,            15383,            16869,            18707,
-            23175,            25818,            28514,            30501,
-             2404,             2918,             5190,             6252,
-             7426,             9887,            12387,            14795,
-            16754,            18368,            20338,            22003,
-            24236,            26456,            28490,            30397,
-             1621,             2227,             3479,             5085,
-             9425,            12892,            14246,            15652,
-            17205,            18674,            20446,            22209,
-            23778,            25867,            27931,            30093,
-             1869,             2390,             4105,             7021,
-            11221,            12775,            14059,            15590,
-            17024,            18608,            20595,            22075,
-            23649,            25154,            26914,            28671,
-             2551,             3252,             4688,             6562,
-             7869,             9125,            10475,            11800,
-            15402,            18780,            20992,            22555,
-            24289,            25968,            27465,            29232,
-             2705,             3493,             4735,             6360,
-             7905,             9352,            11538,            13430,
-            15239,            16919,            18619,            20094,
-            21800,            23342,            25200,            29257,
-             2166,             2791,             4011,             5081,
-             5896,             9038,            13407,            14703,
-            16543,            18189,            19896,            21857,
-            24872,            26971,            28955,            30514,
-             1865,             3021,             4696,             6534,
-             8343,             9914,            12789,            14103,
-            16533,            17729,            21340,            22439,
-            24873,            26330,            28428,            30154,
-             3369,             4345,             6573,             8763,
-            10309,            11713,            13367,            14784,
-            16483,            18145,            19839,            21247,
-            23292,            25477,            27555,            29447,
-             1265,             2184,             5443,             7893,
-            10591,            13139,            15105,            16639,
-            18402,            19826,            21419,            22995,
-            24719,            26437,            28363,            30125,
-             1584,             2004,             3535,             4450,
-             8662,            10764,            12832,            14978,
-            16972,            18794,            20932,            22547,
-            24636,            26521,            28701,            30567,
-             3419,             4528,             6602,             7890,
-             9508,            10875,            12771,            14357,
-            16051,            18330,            20630,            22490,
-            25070,            26936,            28946,            30542,
-             1726,             2252,             4597,             6950,
-             8379,             9823,            11363,            12794,
-            14306,            15476,            16798,            18018,
-            21671,            25550,            28148,            30367,
-             3385,             3870,             5307,             6388,
-             7141,             8684,            12695,            14939,
-            16480,            18277,            20537,            22048,
-            23947,            25965,            28214,            29956,
-             2771,             3306,             4450,             5560,
-             6453,             9493,            13548,            14754,
-            16743,            18447,            20028,            21736,
-            23746,            25353,            27141,            29066,
-             3028,             3900,             6617,             7893,
-             9211,            10480,            12047,            13583,
-            15182,            16662,            18502,            20092,
-            22190,            24358,            26302,            28957,
-             2000,             2550,             4067,             6837,
-             9628,            11002,            12594,            14098,
-            15589,            17195,            18679,            20099,
-            21530,            23085,            24641,            29022,
-             2844,             3302,             5103,             6107,
-             6911,             8598,            12416,            14054,
-            16026,            18567,            20672,            22270,
-            23952,            25771,            27658,            30026,
-             4043,             5150,             7268,             9056,
-            10916,            12638,            14543,            16184,
-            17948,            19691,            21357,            22981,
-            24825,            26591,            28479,            30233,
-             2109,             2625,             4320,             5525,
-             7454,            10220,            12980,            14698,
-            17627,            19263,            20485,            22381,
-            24279,            25777,            27847,            30458,
-             1550,             2667,             6473,             9496,
-            10985,            12352,            13795,            15233,
-            17099,            18642,            20461,            22116,
-            24197,            26291,            28403,            30132,
-             2411,             3084,             4145,             5394,
-             6367,             8154,            13125,            16049,
-            17561,            19125,            21258,            22762,
-            24459,            26317,            28255,            29702,
-             4159,             4516,             5956,             7635,
-             8254,             8980,            11208,            14133,
-            16210,            17875,            20196,            21864,
-            23840,            25747,            28058,            30012,
-             2026,             2431,             2845,             3618,
-             7950,             9802,            12721,            14460,
-            16576,            18984,            21376,            23319,
-            24961,            26718,            28971,            30640,
-             3429,             3833,             4472,             4912,
-             7723,            10386,            12981,            15322,
-            16699,            18807,            20778,            22551,
-            24627,            26494,            28334,            30482,
-             4740,             5169,             5796,             6485,
-             6998,             8830,            11777,            14414,
-            16831,            18413,            20789,            22369,
-            24236,            25835,            27807,            30021,
-              150,              168,              -17,             -107,
-             -142,             -229,             -320,             -406,
-             -503,             -620,             -867,             -935,
-             -902,             -680,             -398,             -114,
-             -398,             -355,               49,              255,
-              114,              260,              399,              264,
-              317,              431,              514,              531,
-              435,              356,              238,              106,
-              -43,              -36,             -169,             -224,
-             -391,             -633,             -776,             -970,
-             -844,             -455,             -181,              -12,
-               85,               85,              164,              195,
-              122,               85,             -158,             -640,
-             -903,                9,                7,             -124,
-              149,               32,              220,              369,
-              242,              115,               79,               84,
-             -146,             -216,              -70,             1024,
-              751,              574,              440,              377,
-              352,              203,               30,               16,
-               -3,               81,              161,              100,
-             -148,             -176,              933,              750,
-              404,              171,               -2,             -146,
-             -411,             -442,             -541,             -552,
-             -442,             -269,             -240,              -52,
-              603,              635,              405,              178,
-              215,               19,             -153,             -167,
-             -290,             -219,              151,              271,
-              151,              119,              303,              266,
-              100,               69,             -293,             -657,
-              939,              659,              442,              351,
-              132,               98,              -16,               -1,
-             -135,             -200,             -223,              -89,
-              167,              154,              172,              237,
-              -45,             -183,             -228,             -486,
-              263,              608,              158,             -125,
-             -390,             -227,             -118,               43,
-             -457,             -392,             -769,             -840,
-               20,             -117,             -194,             -189,
-             -173,             -173,              -33,               32,
-              174,              144,              115,              167,
-               57,               44,               14,              147,
-               96,              -54,             -142,             -129,
-             -254,             -331,              304,              310,
-              -52,             -419,             -846,            -1060,
-              -88,             -123,             -202,             -343,
-             -554,             -961,             -951,              327,
-              159,               81,              255,              227,
-              120,              203,              256,              192,
-              164,              224,              290,              195,
-              216,              209,              128,              832,
-             1028,              889,              698,              504,
-              408,              355,              218,               32,
-             -115,              -84,             -276,             -100,
-             -312,             -484,              899,              682,
-              465,              456,              241,              -12,
-             -275,             -425,             -461,             -367,
-              -33,              -28,             -102,             -194,
-             -527,              863,              906,              463,
-              245,               13,             -212,             -305,
-             -105,              163,              279,              176,
-               93,               67,              115,              192,
-               61,              -50,             -132,             -175,
-             -224,             -271,             -629,             -252,
-             1158,              972,              638,              280,
-              300,              326,              143,             -152,
-             -214,             -287,               53,              -42,
-             -236,             -352,             -423,             -248,
-             -129,             -163,             -178,             -119,
-               85,               57,              514,              382,
-              374,              402,              424,              423,
-              271,              197,               97,               40,
-               39,              -97,             -191,             -164,
-             -230,             -256,             -410,              396,
-              327,              127,               10,             -119,
-             -167,             -291,             -274,             -141,
-              -99,             -226,             -218,             -139,
-             -224,             -209,             -268,             -442,
-             -413,              222,               58,              521,
-              344,              258,               76,              -42,
-             -142,             -165,             -123,              -92,
-               47,                8,               -3,             -191,
-              -11,             -164,             -167,             -351,
-             -740,              311,              538,              291,
-              184,               29,             -105,                9,
-              -30,              -54,              -17,              -77,
-             -271,             -412,             -622,             -648,
-              476,              186,              -66,             -197,
-              -73,              -94,              -15,               47,
-               28,              112,              -58,              -33,
-               65,               19,               84,               86,
-              276,              114,              472,              786,
-              799,              625,              415,              178,
-              -35,              -26,                5,                9,
-               83,               39,               37,               39,
-             -184,             -374,             -265,             -362,
-             -501,              337,              716,              478,
-              -60,             -125,             -163,              362,
-               17,             -122,             -233,              279,
-              138,              157,              318,              193,
-              189,              209,              266,              252,
-              -46,              -56,             -277,             -429,
-              464,              386,              142,               44,
-              -43,               66,              264,              182,
-               47,               14,              -26,              -79,
-               49,               15,             -128,             -203,
-             -400,             -478,              325,               27,
-              234,              411,              205,              129,
-               12,               58,              123,               57,
-              171,              137,               96,              128,
-              -32,              134,              -12,               57,
-              119,               26,              -22,             -165,
-             -500,             -701,             -528,             -116,
-               64,               -8,               97,               -9,
-             -162,              -66,             -156,             -194,
-             -303,             -546,             -341,              546,
-              358,               95,               45,               76,
-              270,              403,              205,              100,
-              123,               50,              -53,             -144,
-             -110,              -13,               32,             -228,
-             -130,              353,              296,               56,
-             -372,             -253,              365,               73,
-               10,              -34,             -139,             -191,
-              -96,                5,               44,              -85,
-             -179,             -129,             -192,             -246,
-              -85,             -110,             -155,              -44,
-              -27,              145,              138,               79,
-               32,             -148,             -577,             -634,
-              191,               94,               -9,              -35,
-              -77,              -84,              -56,             -171,
-             -298,             -271,             -243,             -156,
-             -328,             -235,              -76,             -128,
-             -121,              129,               13,              -22,
-               32,               45,             -248,              -65,
-              193,              -81,              299,               57,
-             -147,              192,             -165,             -354,
-             -334,             -106,             -156,              -40,
-               -3,              -68,              124,             -257,
-               78,              124,              170,              412,
-              227,              105,             -104,               12,
-              154,              250,              274,              258,
-                4,              -27,              235,              152,
-               51,              338,              300,                7,
-             -314,             -411,              215,              170,
-               -9,              -93,              -77,               76,
-               67,               54,              200,              315,
-              163,               72,              -91,             -402,
-              158,              187,             -156,              -91,
-              290,              267,              167,               91,
-              140,              171,              112,                9,
-              -42,             -177,             -440,              385,
-               80,               15,              172,              129,
-               41,             -129,             -372,              -24,
-              -75,              -30,             -170,               10,
-             -118,               57,               78,             -101,
-              232,              161,              123,              256,
-              277,              101,             -192,             -629,
-             -100,              -60,             -232,               66,
-               13,              -13,              -80,             -239,
-              239,               37,               32,               89,
-             -319,             -579,              450,              360,
-                3,              -29,             -299,              -89,
-              -54,             -110,             -246,             -164,
-                6,             -188,              338,              176,
-              -92,              197,              137,              134,
-               12,               -2,               56,             -183,
-              114,              -36,             -131,             -204,
-               75,              -25,             -174,              191,
-              -15,             -290,             -429,             -267,
-               79,               37,              106,               23,
-             -384,              425,               70,              -14,
-              212,              105,               15,               -2,
-              -42,              -37,             -123,              108,
-               28,              -48,              193,              197,
-              173,              -33,               37,               73,
-              -57,              256,              137,              -58,
-             -430,             -228,              217,              -51,
-              -10,              -58,               -6,               22,
-              104,               61,             -119,              169,
-              144,               16,              -46,             -394,
-               60,              454,              -80,             -298,
-              -65,               25,                0,              -24,
-              -65,             -417,              465,              276,
-               -3,             -194,              -13,              130,
-               19,               -6,              -21,              -24,
-             -180,              -53,              -85,               20,
-              118,              147,              113,              -75,
-             -289,              226,             -122,              227,
-              270,              125,              109,              197,
-              125,              138,               44,               60,
-               25,              -55,             -167,              -32,
-             -139,             -193,             -173,             -316,
-              287,             -208,              253,              239,
-               27,              -80,             -188,              -28,
-             -182,             -235,              156,             -117,
-              128,              -48,              -58,             -226,
-              172,              181,              167,               19,
-               62,               10,                2,              181,
-              151,              108,              -16,              -11,
-              -78,             -331,              411,              133,
-               17,              104,               64,             -184,
-               24,              -30,               -3,             -283,
-              121,              204,               -8,             -199,
-              -21,              -80,             -169,             -157,
-             -191,             -136,               81,              155,
-               14,             -131,              244,               74,
-              -57,              -47,             -280,              347,
-              111,              -77,             -128,             -142,
-             -194,             -125,               -6,              -68,
-               91,                1,               23,               14,
-             -154,              -34,               23,              -38,
-             -343,              503,              146,              -38,
-              -46,              -41,               58,               31,
-               63,              -48,             -117,               45,
-               28,                1,              -89,               -5,
-              -44,              -29,             -448,              487,
-              204,               81,               46,             -106,
-             -302,              380,              120,              -38,
-              -12,              -39,               70,               -3,
-               25,              -65,               30,              -11,
-               34,              -15,               22,             -115,
-                0,              -79,              -83,               45,
-              114,               43,              150,               36,
-              233,              149,              195,                5,
-               25,              -52,             -475,              274,
-               28,              -39,               -8,              -66,
-             -255,              258,               56,              143,
-              -45,             -190,              165,              -60,
-               20,                2,              125,             -129,
-               51,               -8,             -335,              288,
-               38,               59,               25,              -42,
-               23,             -118,             -112,               11,
-              -55,             -133,             -109,               24,
-             -105,               78,              -64,             -245,
-              202,              -65,             -127,              162,
-               40,              -94,               89,              -85,
-             -119,             -103,               97,                9,
-              -70,              -28,              194,               86,
-             -112,              -92,             -114,               74,
-              -49,               46,              -84,             -178,
-              113,               52,             -205,              333,
-               88,              222,               56,              -55,
-               13,               86,                4,              -77,
-              224,              114,             -105,              112,
-              125,              -29,              -18,             -144,
-               22,              -58,              -99,               28,
-              114,              -66,              -32,             -169,
-             -314,              285,               72,              -74,
-              179,               28,              -79,             -182,
-               13,              -55,              147,               13,
-               12,              -54,               31,              -84,
-              -17,              -75,             -228,               83,
-             -375,              436,              110,              -63,
-              -27,             -136,              169,              -56,
-               -8,             -171,              184,              -42,
-              148,               68,              204,              235,
-              110,             -229,               91,              171,
-              -43,               -3,              -26,              -99,
-             -111,               71,             -170,              202,
-              -67,              181,              -37,              109,
-             -120,                3,              -55,             -260,
-              -16,              152,               91,              142,
-               42,               44,              134,               47,
-               17,              -35,               22,               79,
-             -169,               41,               46,              277,
-              -93,              -49,             -126,               37,
-             -103,              -34,              -22,              -90,
-             -134,             -205,               92,               -9,
-                1,             -195,             -239,               45,
-               54,               18,              -23,               -1,
-              -80,              -98,              -20,             -261,
-              306,               72,               20,              -89,
-             -217,               11,                6,              -82,
-               89,               13,             -129,              -89,
-               83,              -71,              -55,              130,
-              -98,             -146,              -27,              -57,
-               53,              275,               17,              170,
-               -5,              -54,              132,              -64,
-               72,              160,             -125,             -168,
-               72,               40,              170,               78,
-              248,              116,               20,               84,
-               31,              -34,              190,               38,
-               13,             -106,              225,               27,
-             -168,               24,             -157,             -122,
-              165,               11,             -161,             -213,
-              -12,              -51,             -101,               42,
-              101,               27,               55,              111,
-               75,               71,              -96,               -1,
-               65,             -277,              393,              -26,
-              -44,              -68,              -84,              -66,
-              -95,              235,              179,              -25,
-              -41,               27,              -91,             -128,
-             -222,              146,              -72,              -30,
-              -24,               55,             -126,              -68,
-              -58,             -127,               13,              -97,
-             -106,              174,             -100,              155,
-              101,             -146,              -21,              261,
-               22,               38,              -66,               65,
-                4,               70,               64,              144,
-               59,              213,               71,             -337,
-              303,              -52,               51,              -56,
-                1,               10,              -15,               -5,
-               34,               52,              228,              131,
-              161,             -127,             -214,              238,
-              123,               64,             -147,              -50,
-              -34,             -127,              204,              162,
-               85,               41,                5,             -140,
-               73,             -150,               56,              -96,
-              -66,              -20,                2,             -235,
-               59,              -22,             -107,              150,
-              -16,              -47,               -4,               81,
-              -67,              167,              149,              149,
-             -157,              288,             -156,              -27,
-               -8,               18,               83,              -24,
-              -41,             -167,              158,             -100,
-               93,               53,              201,               15,
-               42,              266,              278,              -12,
-               -6,              -37,               85,                6,
-               20,             -188,             -271,              107,
-              -13,              -80,               51,              202,
-              173,              -69,               78,             -188,
-               46,                4,              153,               12,
-             -138,              169,                5,              -58,
-             -123,             -108,             -243,              150,
-               10,             -191,              246,              -15,
-               38,               25,              -10,               14,
-               61,               50,             -206,             -215,
-             -220,               90,                5,             -149,
-             -219,               56,              142,               24,
-             -376,               77,              -80,               75,
-                6,               42,             -101,               16,
-               56,               14,              -57,                3,
-              -17,               80,               57,              -36,
-               88,              -59,              -97,              -19,
-             -148,               46,             -219,              226,
-              114,               -4,              -72,              -15,
-               37,              -49,              -28,              247,
-               44,              123,               47,             -122,
-              -38,               17,                4,             -113,
-              -32,             -224,              154,             -134,
-              196,               71,             -267,              -85,
-               28,              -70,               89,             -120,
-               99,               -2,               64,               76,
-             -166,              -48,              189,              -35,
-              -92,             -169,             -123,              339,
-               38,              -25,               38,              -35,
-              225,             -139,              -50,              -63,
-              246,               60,             -185,             -109,
-              -49,              -53,             -167,               51,
-              149,               60,             -101,              -33,
-               25,              -76,              120,               32,
-              -30,              -83,              102,               91,
-             -186,             -261,              131,             -197
-};
-
-const SKP_Silk_NLSF_CBS SKP_Silk_NLSF_CB0_16_Stage_info[ NLSF_MSVQ_CB0_16_STAGES ] =
-{
-        { 128, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 *   0 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[   0 ] },
-        {  16, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 128 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 128 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 144 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 144 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 152 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 152 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 160 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 160 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 168 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 168 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 176 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 176 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 184 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 184 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 192 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 192 ] },
-        {  16, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 200 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 200 ] }
-};
-
-const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB0_16 =
-{
-        NLSF_MSVQ_CB0_16_STAGES,
-        SKP_Silk_NLSF_CB0_16_Stage_info,
-        SKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min_Q15,
-        SKP_Silk_NLSF_MSVQ_CB0_16_CDF,
-        SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr,
-        SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx
-};
-
--- a/src/SKP_Silk_tables_NLSF_CB0_16.h
+++ /dev/null
@@ -1,51 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef SKP_SILK_TABLES_NLSF_CB0_16_H
-#define SKP_SILK_TABLES_NLSF_CB0_16_H
-
-#include "SKP_Silk_define.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#define NLSF_MSVQ_CB0_16_STAGES       10
-#define NLSF_MSVQ_CB0_16_VECTORS      216
-
-/* NLSF codebook entropy coding tables */
-extern const SKP_uint16         SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ NLSF_MSVQ_CB0_16_VECTORS + NLSF_MSVQ_CB0_16_STAGES ];
-extern const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr[                  NLSF_MSVQ_CB0_16_STAGES ];
-extern const SKP_int            SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx[                 NLSF_MSVQ_CB0_16_STAGES ];
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
--- a/src/SKP_Silk_tables_NLSF_CB1_10.c
+++ /dev/null
@@ -1,577 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/**********************************************/
-/* This file has been automatically generated */
-/*                                            */
-/* ROM usage:    90+803 Words                 */
-/**********************************************/
-
-#include "SKP_Silk_structs.h"
-#include "SKP_Silk_tables_NLSF_CB1_10.h"
-
-const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ NLSF_MSVQ_CB1_10_VECTORS + NLSF_MSVQ_CB1_10_STAGES ] =
-{
-            0,
-        17096,
-        24130,
-        28997,
-        33179,
-        36696,
-        40213,
-        42493,
-        44252,
-        45973,
-        47551,
-        49095,
-        50542,
-        51898,
-        53196,
-        54495,
-        55685,
-        56851,
-        57749,
-        58628,
-        59435,
-        60207,
-        60741,
-        61220,
-        61700,
-        62179,
-        62659,
-        63138,
-        63617,
-        64097,
-        64576,
-        65056,
-        65535,
-            0,
-        20378,
-        33032,
-        40395,
-        46721,
-        51707,
-        56585,
-        61157,
-        65535,
-            0,
-        15055,
-        25472,
-        35447,
-        42501,
-        48969,
-        54773,
-        60212,
-        65535,
-            0,
-        12069,
-        22440,
-        32812,
-        40145,
-        46870,
-        53595,
-        59630,
-        65535,
-            0,
-        10839,
-        19954,
-        27957,
-        35961,
-        43965,
-        51465,
-        58805,
-        65535,
-            0,
-         8933,
-        17674,
-        26415,
-        34785,
-        42977,
-        50820,
-        58496,
-        65535
-};
-
-const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr[ NLSF_MSVQ_CB1_10_STAGES ] =
-{
-     &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[   0 ],
-     &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[  33 ],
-     &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[  42 ],
-     &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[  51 ],
-     &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[  60 ],
-     &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[  69 ]
-};
-
-const SKP_int SKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx[ NLSF_MSVQ_CB1_10_STAGES ] =
-{
-       5,
-       3,
-       4,
-       4,
-       5,
-       5
-};
-
-const SKP_int16 SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[ NLSF_MSVQ_CB1_10_VECTORS ] =
-{
-               62,              103,
-              120,              127,
-              135,              135,
-              155,              167,
-              168,              172,
-              173,              176,
-              179,              181,
-              181,              185,
-              186,              198,
-              199,              203,
-              205,              222,
-              227,              227,
-              227,              227,
-              227,              227,
-              227,              227,
-              227,              227,
-               54,               76,
-              101,              108,
-              119,              120,
-              123,              125,
-               68,               85,
-               87,              103,
-              107,              112,
-              115,              116,
-               78,               85,
-               85,              101,
-              105,              105,
-              110,              111,
-               83,               91,
-               97,               97,
-               97,              100,
-              101,              105,
-               92,               93,
-               93,               95,
-               96,               98,
-               99,              103
-};
-
-const SKP_int SKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min_Q15[ 10 + 1 ] =
-{
-              462,
-                3,
-               64,
-               74,
-               98,
-               50,
-               97,
-               68,
-              120,
-               53,
-              639
-};
-
-const SKP_int16 SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 * NLSF_MSVQ_CB1_10_VECTORS ] =
-{
-             1877,             4646,
-             7712,            10745,
-            13964,            17028,
-            20239,            23182,
-            26471,            29287,
-             1612,             3278,
-             7086,             9975,
-            13228,            16264,
-            19596,            22690,
-            26037,            28965,
-             2169,             3830,
-             6460,             8958,
-            11960,            14750,
-            18408,            21659,
-            25018,            28043,
-             3680,             6024,
-             8986,            12256,
-            15201,            18188,
-            21741,            24460,
-            27484,            30059,
-             2584,             5187,
-             7799,            10902,
-            13179,            15765,
-            19017,            22431,
-            25891,            28698,
-             3731,             5751,
-             8650,            11742,
-            15090,            17407,
-            20391,            23421,
-            26228,            29247,
-             2107,             6323,
-             8915,            12226,
-            14775,            17791,
-            20664,            23679,
-            26829,            29353,
-             1677,             2870,
-             5386,             8077,
-            11817,            15176,
-            18657,            22006,
-            25513,            28689,
-             2111,             3625,
-             7027,            10588,
-            14059,            17193,
-            21137,            24260,
-            27577,            30036,
-             2428,             4010,
-             5765,             9376,
-            13805,            15821,
-            19444,            22389,
-            25295,            29310,
-             2256,             4628,
-             8377,            12441,
-            15283,            19462,
-            22257,            25551,
-            28432,            30304,
-             2352,             3675,
-             6129,            11868,
-            14551,            16655,
-            19624,            21883,
-            26526,            28849,
-             5243,             7248,
-            10558,            13269,
-            15651,            17919,
-            21141,            23827,
-            27102,            29519,
-             4422,             6725,
-            10449,            13273,
-            16124,            19921,
-            22826,            26061,
-            28763,            30583,
-             4508,             6291,
-             9504,            11809,
-            13827,            15950,
-            19077,            22084,
-            25740,            28658,
-             2540,             4297,
-             8579,            13578,
-            16634,            19101,
-            21547,            23887,
-            26777,            29146,
-             3377,             6358,
-            10224,            14518,
-            17905,            21056,
-            23637,            25784,
-            28161,            30109,
-             4177,             5942,
-             8159,            10108,
-            12130,            15470,
-            20191,            23326,
-            26782,            29359,
-             2492,             3801,
-             6144,             9825,
-            16000,            18671,
-            20893,            23663,
-            25899,            28974,
-             3011,             4727,
-             6834,            10505,
-            12465,            14496,
-            17065,            20052,
-            25265,            28057,
-             4149,             7197,
-            12338,            15076,
-            18002,            20190,
-            22187,            24723,
-            27083,            29125,
-             2975,             4578,
-             6448,             8378,
-             9671,            13225,
-            19502,            22277,
-            26058,            28850,
-             4102,             5760,
-             7744,             9484,
-            10744,            12308,
-            14677,            19607,
-            24841,            28381,
-             4931,             9287,
-            12477,            13395,
-            13712,            14351,
-            16048,            19867,
-            24188,            28994,
-             4141,             7867,
-            13140,            17720,
-            20064,            21108,
-            21692,            22722,
-            23736,            27449,
-             4011,             8720,
-            13234,            16206,
-            17601,            18289,
-            18524,            19689,
-            23234,            27882,
-             3420,             5995,
-            11230,            15117,
-            15907,            16783,
-            17762,            23347,
-            26898,            29946,
-             3080,             6786,
-            10465,            13676,
-            18059,            23615,
-            27058,            29082,
-            29563,            29905,
-             3038,             5620,
-             9266,            12870,
-            18803,            19610,
-            20010,            20802,
-            23882,            29306,
-             3314,             6420,
-             9046,            13262,
-            15869,            23117,
-            23667,            24215,
-            24487,            25915,
-             3469,             6963,
-            10103,            15282,
-            20531,            23240,
-            25024,            26021,
-            26736,            27255,
-             3041,             6459,
-             9777,            12896,
-            16315,            19410,
-            24070,            29353,
-            31795,            32075,
-             -200,             -134,
-             -113,             -204,
-             -347,             -440,
-             -352,             -211,
-             -418,             -172,
-             -313,               59,
-              495,              772,
-              721,              614,
-              334,              444,
-              225,              242,
-              161,               16,
-              274,              564,
-              -73,             -188,
-             -395,             -171,
-              777,              508,
-             1340,             1145,
-              699,              196,
-              223,              173,
-               90,               25,
-              -26,               18,
-              133,             -105,
-             -360,             -277,
-              859,              634,
-               41,             -557,
-             -768,             -926,
-             -601,            -1021,
-            -1189,             -365,
-              225,              107,
-              374,              -50,
-              433,              417,
-              156,               39,
-             -597,            -1397,
-            -1594,             -592,
-             -485,             -292,
-              253,               87,
-               -0,               -6,
-              -25,             -345,
-             -240,              120,
-             1261,              946,
-              166,             -277,
-              241,              167,
-              170,              429,
-              518,              714,
-              602,              254,
-              134,               92,
-             -152,             -324,
-             -394,               49,
-             -151,             -304,
-             -724,             -657,
-             -162,             -369,
-              -35,                3,
-               -2,             -312,
-             -200,              -92,
-             -227,              242,
-              628,              565,
-             -124,             1056,
-              770,              101,
-              -84,              -33,
-                4,             -192,
-             -272,                5,
-             -627,             -977,
-              419,              472,
-               53,             -103,
-              145,              322,
-              -95,              -31,
-             -100,             -303,
-             -560,            -1067,
-             -413,              714,
-              283,                2,
-             -223,             -367,
-              523,              360,
-              -38,             -115,
-              378,             -591,
-             -718,              448,
-             -481,             -274,
-              180,              -88,
-             -581,             -157,
-             -696,            -1265,
-              394,             -479,
-              -23,              124,
-              -43,               19,
-             -113,             -236,
-             -412,             -659,
-             -200,                2,
-              -69,             -342,
-              199,               55,
-               58,              -36,
-              -51,              -62,
-              507,              507,
-              427,              442,
-               36,              601,
-             -141,               68,
-              274,              274,
-               68,              -12,
-               -4,               71,
-             -193,             -464,
-             -425,             -383,
-              408,              203,
-             -337,              236,
-              410,              -59,
-              -25,             -341,
-             -449,               28,
-               -9,               90,
-              332,              -14,
-             -905,               96,
-             -540,             -242,
-              679,              -59,
-              192,              -24,
-               60,             -217,
-                5,              -37,
-              179,              -20,
-              311,              519,
-              274,               72,
-             -326,            -1030,
-             -262,              213,
-              380,               82,
-              328,              411,
-             -540,              574,
-             -283,              151,
-              181,             -402,
-             -278,             -240,
-             -110,             -227,
-             -264,              -89,
-             -250,             -259,
-              -27,              106,
-             -239,              -98,
-             -390,              118,
-               61,              104,
-              294,              532,
-               92,              -13,
-               60,             -233,
-              335,              541,
-              307,              -26,
-             -110,              -91,
-             -231,             -460,
-              170,              201,
-               96,             -372,
-              132,              435,
-             -302,              216,
-             -279,              -41,
-               74,              190,
-              368,              273,
-             -186,             -608,
-             -157,              159,
-               12,              278,
-              245,              307,
-               25,             -187,
-              -16,               55,
-               30,             -163,
-              548,             -307,
-              106,               -5,
-               27,              330,
-             -416,              475,
-              438,             -235,
-              104,              137,
-               21,               -5,
-             -300,             -468,
-              521,             -347,
-              170,             -200,
-             -219,              308,
-             -122,             -133,
-              219,              -16,
-              359,              412,
-              -89,             -111,
-               48,              322,
-              142,              177,
-             -286,             -127,
-              -39,              -63,
-              -42,             -451,
-              160,              308,
-              -57,              193,
-              -48,               74,
-             -346,               59,
-              -27,               27,
-             -469,             -277,
-             -344,              282,
-              262,              122,
-              171,             -249,
-               27,              258,
-              188,               -3,
-               67,             -206,
-             -284,              291,
-             -117,              -88,
-             -477,              375,
-               50,              106,
-               99,             -182,
-              438,             -376,
-             -401,              -49,
-              119,              -23,
-              -10,              -48,
-             -116,             -200,
-             -310,              121,
-               73,                7,
-              237,             -226,
-              139,             -456,
-              397,               35,
-                3,             -108,
-              323,              -75,
-              332,              198,
-              -99,              -21
-};
-
-const SKP_Silk_NLSF_CBS SKP_Silk_NLSF_CB1_10_Stage_info[ NLSF_MSVQ_CB1_10_STAGES ] =
-{
-        {  32, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 *   0 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[   0 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 *  32 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[  32 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 *  40 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[  40 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 *  48 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[  48 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 *  56 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[  56 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 *  64 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[  64 ] }
-};
-
-const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB1_10 =
-{
-        NLSF_MSVQ_CB1_10_STAGES,
-        SKP_Silk_NLSF_CB1_10_Stage_info,
-        SKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min_Q15,
-        SKP_Silk_NLSF_MSVQ_CB1_10_CDF,
-        SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr,
-        SKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx
-};
-
--- a/src/SKP_Silk_tables_NLSF_CB1_10.h
+++ /dev/null
@@ -1,51 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef SKP_SILK_TABLES_NLSF_CB1_10_H
-#define SKP_SILK_TABLES_NLSF_CB1_10_H
-
-#include "SKP_Silk_define.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#define NLSF_MSVQ_CB1_10_STAGES       6
-#define NLSF_MSVQ_CB1_10_VECTORS      72
-
-/* NLSF codebook entropy coding tables */
-extern const SKP_uint16         SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ NLSF_MSVQ_CB1_10_VECTORS + NLSF_MSVQ_CB1_10_STAGES ];
-extern const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr[                  NLSF_MSVQ_CB1_10_STAGES ];
-extern const SKP_int            SKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx[                 NLSF_MSVQ_CB1_10_STAGES ];
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
--- a/src/SKP_Silk_tables_NLSF_CB1_16.c
+++ /dev/null
@@ -1,703 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-/**********************************************/
-/* This file has been automatically generated */
-/*                                            */
-/* ROM usage:   134+1785 Words                */
-/**********************************************/
-
-#include "SKP_Silk_structs.h"
-#include "SKP_Silk_tables_NLSF_CB1_16.h"
-
-const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ NLSF_MSVQ_CB1_16_VECTORS + NLSF_MSVQ_CB1_16_STAGES ] =
-{
-            0,
-        19099,
-        26957,
-        30639,
-        34242,
-        37546,
-        40447,
-        43287,
-        46005,
-        48445,
-        49865,
-        51284,
-        52673,
-        53975,
-        55221,
-        56441,
-        57267,
-        58025,
-        58648,
-        59232,
-        59768,
-        60248,
-        60729,
-        61210,
-        61690,
-        62171,
-        62651,
-        63132,
-        63613,
-        64093,
-        64574,
-        65054,
-        65535,
-            0,
-        28808,
-        38775,
-        46801,
-        51785,
-        55886,
-        59410,
-        62572,
-        65535,
-            0,
-        27376,
-        38639,
-        45052,
-        51465,
-        55448,
-        59021,
-        62594,
-        65535,
-            0,
-        33403,
-        39569,
-        45102,
-        49961,
-        54047,
-        57959,
-        61788,
-        65535,
-            0,
-        25851,
-        43356,
-        47828,
-        52204,
-        55964,
-        59413,
-        62507,
-        65535,
-            0,
-        34277,
-        40337,
-        45432,
-        50311,
-        54326,
-        58171,
-        61853,
-        65535,
-            0,
-        33538,
-        39865,
-        45302,
-        50076,
-        54549,
-        58478,
-        62159,
-        65535,
-            0,
-        27445,
-        35258,
-        40665,
-        46072,
-        51362,
-        56540,
-        61086,
-        65535,
-            0,
-        22080,
-        30779,
-        37065,
-        43085,
-        48849,
-        54613,
-        60133,
-        65535,
-            0,
-        13417,
-        21748,
-        30078,
-        38231,
-        46383,
-        53091,
-        59515,
-        65535
-};
-
-const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr[ NLSF_MSVQ_CB1_16_STAGES ] =
-{
-     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[   0 ],
-     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[  33 ],
-     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[  42 ],
-     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[  51 ],
-     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[  60 ],
-     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[  69 ],
-     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[  78 ],
-     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[  87 ],
-     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[  96 ],
-     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ 105 ]
-};
-
-const SKP_int SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx[ NLSF_MSVQ_CB1_16_STAGES ] =
-{
-       5,
-       2,
-       2,
-       2,
-       2,
-       2,
-       2,
-       3,
-       3,
-       4
-};
-
-const SKP_int16 SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ NLSF_MSVQ_CB1_16_VECTORS ] =
-{
-               57,               98,
-              133,              134,
-              138,              144,
-              145,              147,
-              152,              177,
-              177,              178,
-              181,              183,
-              184,              202,
-              206,              215,
-              218,              222,
-              227,              227,
-              227,              227,
-              227,              227,
-              227,              227,
-              227,              227,
-              227,              227,
-               38,               87,
-               97,              119,
-              128,              135,
-              140,              143,
-               40,               81,
-              107,              107,
-              129,              134,
-              134,              143,
-               31,              109,
-              114,              120,
-              128,              130,
-              131,              132,
-               43,               61,
-              124,              125,
-              132,              136,
-              141,              142,
-               30,              110,
-              118,              120,
-              129,              131,
-              133,              133,
-               31,              108,
-              115,              121,
-              124,              130,
-              133,              137,
-               40,               98,
-              115,              115,
-              116,              117,
-              123,              124,
-               50,               93,
-              108,              110,
-              112,              112,
-              114,              115,
-               73,               95,
-               95,               96,
-               96,              105,
-              107,              110
-};
-
-const SKP_int SKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min_Q15[ 16 + 1 ] =
-{
-              148,
-                3,
-               60,
-               68,
-              117,
-               86,
-              121,
-              124,
-              152,
-              153,
-              207,
-              151,
-              225,
-              239,
-              126,
-              183,
-              792
-};
-
-const SKP_int16 SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * NLSF_MSVQ_CB1_16_VECTORS ] =
-{
-             1309,             3060,             5071,             6996,
-             9028,            10938,            12934,            14891,
-            16933,            18854,            20792,            22764,
-            24753,            26659,            28626,            30501,
-             1264,             2745,             4610,             6408,
-             8286,            10043,            12084,            14108,
-            16118,            18163,            20095,            22164,
-            24264,            26316,            28329,            30251,
-             1044,             2080,             3672,             5179,
-             7140,             9100,            11070,            13065,
-            15423,            17790,            19931,            22101,
-            24290,            26361,            28499,            30418,
-             1131,             2476,             4478,             6149,
-             7902,             9875,            11938,            13809,
-            15869,            17730,            19948,            21707,
-            23761,            25535,            27426,            28917,
-             1040,             2004,             4026,             6100,
-             8432,            10494,            12610,            14694,
-            16797,            18775,            20799,            22782,
-            24772,            26682,            28631,            30516,
-             2310,             3812,             5913,             7933,
-            10033,            11881,            13885,            15798,
-            17751,            19576,            21482,            23276,
-            25157,            27010,            28833,            30623,
-             1254,             2847,             5013,             6781,
-             8626,            10370,            12726,            14633,
-            16281,            17852,            19870,            21472,
-            23002,            24629,            26710,            27960,
-             1468,             3059,             4987,             7026,
-             8741,            10412,            12281,            14020,
-            15970,            17723,            19640,            21522,
-            23472,            25661,            27986,            30225,
-             2171,             3566,             5605,             7384,
-             9404,            11220,            13030,            14758,
-            16687,            18417,            20346,            22091,
-            24055,            26212,            28356,            30397,
-             2409,             4676,             7543,             9786,
-            11419,            12935,            14368,            15653,
-            17366,            18943,            20762,            22477,
-            24440,            26327,            28284,            30242,
-             2354,             4222,             6820,             9107,
-            11596,            13934,            15973,            17682,
-            19158,            20517,            21991,            23420,
-            25178,            26936,            28794,            30527,
-             1323,             2414,             4184,             6039,
-             7534,             9398,            11099,            13097,
-            14799,            16451,            18434,            20887,
-            23490,            25838,            28046,            30225,
-             1361,             3243,             6048,             8511,
-            11001,            13145,            15073,            16608,
-            18126,            19381,            20912,            22607,
-            24660,            26668,            28663,            30566,
-             1216,             2648,             5901,             8422,
-            10037,            11425,            12973,            14603,
-            16686,            18600,            20555,            22415,
-            24450,            26280,            28206,            30077,
-             2417,             4048,             6316,             8433,
-            10510,            12757,            15072,            17295,
-            19573,            21503,            23329,            24782,
-            26235,            27689,            29214,            30819,
-             1012,             2345,             4991,             7377,
-             9465,            11916,            14296,            16566,
-            18672,            20544,            22292,            23838,
-            25415,            27050,            28848,            30551,
-             1937,             3693,             6267,             8019,
-            10372,            12194,            14287,            15657,
-            17431,            18864,            20769,            22206,
-            24037,            25463,            27383,            28602,
-             1969,             3305,             5017,             6726,
-             8375,             9993,            11634,            13280,
-            15078,            16751,            18464,            20119,
-            21959,            23858,            26224,            29298,
-             1198,             2647,             5428,             7423,
-             9775,            12155,            14665,            16344,
-            18121,            19790,            21557,            22847,
-            24484,            25742,            27639,            28711,
-             1636,             3353,             5447,             7597,
-             9837,            11647,            13964,            16019,
-            17862,            20116,            22319,            24037,
-            25966,            28086,            29914,            31294,
-             2676,             4105,             6378,             8223,
-            10058,            11549,            13072,            14453,
-            15956,            17355,            18931,            20402,
-            22183,            23884,            25717,            27723,
-             1373,             2593,             4449,             5633,
-             7300,             8425,             9474,            10818,
-            12769,            15722,            19002,            21429,
-            23682,            25924,            28135,            30333,
-             1596,             3183,             5378,             7164,
-             8670,            10105,            11470,            12834,
-            13991,            15042,            16642,            17903,
-            20759,            25283,            27770,            30240,
-             2037,             3987,             6237,             8117,
-             9954,            12245,            14217,            15892,
-            17775,            20114,            22314,            25942,
-            26305,            26483,            26796,            28561,
-             2181,             3858,             5760,             7924,
-            10041,            11577,            13769,            15700,
-            17429,            19879,            23583,            24538,
-            25212,            25693,            28688,            30507,
-             1992,             3882,             6474,             7883,
-             9381,            12672,            14340,            15701,
-            16658,            17832,            20850,            22885,
-            24677,            26457,            28491,            30460,
-             2391,             3988,             5448,             7432,
-            11014,            12579,            13140,            14146,
-            15898,            18592,            21104,            22993,
-            24673,            27186,            28142,            29612,
-             1713,             5102,             6989,             7798,
-             8670,            10110,            12746,            14881,
-            16709,            18407,            20126,            22107,
-            24181,            26198,            28237,            30137,
-             1612,             3617,             6148,             8359,
-             9576,            11528,            14936,            17809,
-            18287,            18729,            19001,            21111,
-            24631,            26596,            28740,            30643,
-             2266,             4168,             7862,             9546,
-             9618,             9703,            10134,            13897,
-            16265,            18432,            20587,            22605,
-            24754,            26994,            29125,            30840,
-             1840,             3917,             6272,             7809,
-             9714,            11438,            13767,            15799,
-            19244,            21972,            22980,            23180,
-            23723,            25650,            29117,            31085,
-             1458,             3612,             6008,             7488,
-             9827,            11893,            14086,            15734,
-            17440,            19535,            22424,            24767,
-            29246,            29928,            30516,            30947,
-             -102,             -121,              -31,               -6,
-                5,               -2,                8,              -18,
-               -4,                6,               14,               -2,
-              -12,              -16,              -12,              -60,
-             -126,             -353,             -574,             -677,
-             -657,             -617,             -498,             -393,
-             -348,             -277,             -225,             -164,
-             -102,              -70,              -31,               33,
-                4,              379,              387,              551,
-              605,              620,              532,              482,
-              442,              454,              385,              347,
-              322,              299,              266,              200,
-             1168,              951,              672,              246,
-               60,             -161,             -259,             -234,
-             -253,             -282,             -203,             -187,
-             -155,             -176,             -198,             -178,
-               10,              170,              393,              609,
-              555,              208,             -330,             -571,
-             -769,             -633,             -319,              -43,
-               95,              105,              106,              116,
-             -152,             -140,             -125,                5,
-              173,              274,              264,              331,
-              -37,             -293,             -609,             -786,
-             -959,             -814,             -645,             -238,
-              -91,               36,              -11,             -101,
-             -279,             -227,              -40,               90,
-              530,              677,              890,             1104,
-              999,              835,              564,              295,
-             -280,             -364,             -340,             -331,
-             -284,              288,              761,              880,
-              988,              627,              146,             -226,
-             -203,             -181,             -142,               39,
-               24,              -26,             -107,              -92,
-             -161,             -135,             -131,              -88,
-             -160,             -156,              -75,              -43,
-              -36,               -6,              -33,               33,
-             -324,             -415,             -108,              124,
-              157,              191,              203,              197,
-              144,              109,              152,              176,
-              190,              122,              101,              159,
-              663,              668,              480,              400,
-              379,              444,              446,              458,
-              343,              351,              310,              228,
-              133,               44,               75,               63,
-              -84,               39,              -29,               35,
-              -94,             -233,             -261,             -354,
-               77,              262,              -24,             -145,
-             -333,             -409,             -404,             -597,
-             -488,             -300,              910,              592,
-              412,              120,              130,              -51,
-              -37,              -77,             -172,             -181,
-             -159,             -148,              -72,              -62,
-              510,              516,              113,             -585,
-            -1075,             -957,             -417,             -195,
-                9,                7,              -88,             -173,
-              -91,               54,               98,               95,
-              -28,              197,             -527,             -621,
-              157,              122,             -168,              147,
-              309,              300,              336,              315,
-              396,              408,              376,              106,
-             -162,             -170,             -315,               98,
-              821,              908,              570,              -33,
-             -312,             -568,             -572,             -378,
-             -107,               23,              156,               93,
-             -129,              -87,               20,              -72,
-              -37,               40,               21,               27,
-               48,               75,               77,               65,
-               46,               71,               66,               47,
-              136,              344,              236,              322,
-              170,              283,              269,              291,
-              162,              -43,             -204,             -259,
-             -240,             -305,             -350,             -312,
-              447,              348,              345,              257,
-               71,             -131,              -77,             -190,
-             -202,              -40,               35,              133,
-              261,              365,              438,              303,
-               -8,               22,              140,              137,
-             -300,             -641,             -764,             -268,
-              -23,              -25,               73,             -162,
-             -150,             -212,              -72,                6,
-               39,               78,              104,              -93,
-             -308,             -136,              117,              -71,
-             -513,             -820,             -700,             -450,
-             -161,              -23,               29,               78,
-              337,              106,             -406,             -782,
-             -112,              233,              383,               62,
-             -126,                6,              -77,              -29,
-             -146,             -123,              -51,              -27,
-              -27,             -381,             -641,              402,
-              539,                8,             -207,             -366,
-              -36,              -27,             -204,             -227,
-             -237,             -189,              -64,               51,
-              -92,             -137,             -281,               62,
-              233,               92,              148,              294,
-              363,              416,              564,              625,
-              370,              -36,             -469,             -462,
-              102,              168,               32,              117,
-              -21,               97,              139,               89,
-              104,               35,                4,               82,
-               66,               58,               73,               93,
-              -76,             -320,             -236,             -189,
-             -203,             -142,              -27,              -73,
-                9,               -9,              -25,               12,
-              -15,                4,                4,              -50,
-              314,              180,              162,              -49,
-              199,             -108,             -227,              -66,
-             -447,              -67,             -264,             -394,
-                5,               55,             -133,             -176,
-             -116,             -241,              272,              109,
-              282,              262,              192,              -64,
-             -392,             -514,              156,              203,
-              154,               72,              -34,             -160,
-              -73,                3,              -33,             -431,
-              321,               18,             -567,             -590,
-             -108,               88,               66,               51,
-              -31,             -193,              -46,               65,
-              -29,              -23,              215,              -31,
-              101,             -113,               32,              304,
-               88,              320,              448,                5,
-             -439,             -562,             -508,             -135,
-              -13,             -171,               -8,              182,
-              -99,             -181,             -149,              376,
-              476,               64,             -396,             -652,
-             -150,              176,              222,               65,
-             -590,              719,              271,              399,
-              245,               72,             -156,             -152,
-             -176,               59,               94,              125,
-               -9,               -7,                9,                1,
-              -61,             -116,              -82,                1,
-               79,               22,              -44,              -15,
-              -48,              -65,              -62,             -101,
-             -102,              -54,              -70,              -78,
-              -80,              -25,              398,               71,
-              139,               38,               90,              194,
-              222,              249,              165,               94,
-              221,              262,              163,               91,
-             -206,              573,              200,             -287,
-             -147,                5,              -18,              -85,
-              -74,             -125,              -87,               85,
-              141,                4,               -4,               28,
-              234,               48,             -150,             -111,
-             -506,              237,             -209,              345,
-               94,             -124,               77,              121,
-              143,               12,              -80,              -48,
-              191,              144,              -93,              -65,
-             -151,             -643,              435,              106,
-               87,                7,               65,              102,
-               94,               68,                5,               99,
-              222,               93,               94,              355,
-              -13,              -89,             -228,             -503,
-              287,              109,              108,              449,
-              253,              -29,             -109,             -116,
-               15,              -73,              -20,              131,
-             -147,               72,               59,             -150,
-             -594,              273,              316,              132,
-              199,              106,              198,              212,
-              220,               82,               45,              -13,
-              223,              137,              270,               38,
-              252,              135,             -177,             -207,
-             -360,             -102,              403,              406,
-              -14,               83,               64,               51,
-               -7,              -99,              -97,              -88,
-             -124,              -65,               42,               32,
-               28,               29,               12,               20,
-              119,              -26,             -212,             -201,
-              373,              251,              141,              103,
-               36,              -52,               66,               18,
-               -6,              -95,             -196,                5,
-               98,              -85,             -108,              218,
-             -164,               20,              356,              172,
-               37,              266,               23,              112,
-              -24,              -99,              -92,             -178,
-               29,             -278,              388,              -60,
-             -220,              300,              -13,              154,
-              191,               15,              -37,             -110,
-             -153,             -150,             -114,               -7,
-              -94,              -31,              -62,             -177,
-                4,              -70,               35,              453,
-              147,             -247,             -328,              101,
-               20,             -114,              147,              108,
-             -119,             -109,             -102,             -238,
-               55,             -102,              173,              -89,
-              129,              138,             -330,             -160,
-              485,              154,              -59,             -170,
-              -20,              -34,             -261,              -40,
-             -129,               77,              -84,               69,
-               83,              160,              169,               63,
-             -516,               30,              336,               52,
-               -0,              -52,             -124,              158,
-               19,              197,              -10,             -375,
-              405,              285,              114,             -395,
-              -47,              196,               62,               87,
-             -106,              -65,              -75,              -69,
-              -13,               34,               99,               59,
-               83,               98,               44,                0,
-               24,               18,               17,               70,
-              -22,              194,              208,              144,
-              -79,              -15,               32,             -104,
-              -28,             -105,             -186,             -212,
-             -228,              -79,              -76,               51,
-              -71,               72,              118,              -34,
-               -3,             -171,                5,                2,
-             -108,             -125,               62,              -58,
-               58,             -121,               73,             -466,
-               92,               63,              -94,              -78,
-              -76,              212,               36,             -225,
-              -71,             -354,              152,              143,
-              -79,             -246,              -51,              -31,
-               -6,             -270,              240,              210,
-               30,             -157,             -231,               74,
-             -146,               88,             -273,              156,
-               92,               56,               71,                2,
-              318,              164,               32,             -110,
-              -35,              -41,              -95,             -106,
-               11,              132,              -68,               55,
-              123,              -83,             -149,              212,
-              132,                0,             -194,               55,
-              206,             -108,             -353,              289,
-             -195,                1,              233,              -22,
-              -60,               20,               26,               68,
-              166,               27,              -58,              130,
-              112,              107,               27,             -165,
-              115,              -93,              -37,               38,
-               83,              483,               65,             -229,
-              -13,              157,               85,               50,
-              136,               10,               32,               83,
-               82,               55,                5,               -9,
-              -52,              -78,              -81,              -51,
-               40,               18,             -127,             -224,
-              -41,               53,             -210,             -113,
-               24,              -17,             -187,              -89,
-                8,              121,               83,               77,
-               91,              -74,              -35,             -112,
-             -161,             -173,              102,              132,
-             -125,              -61,              103,             -260,
-               52,              166,              -32,             -156,
-              -87,              -56,               60,              -70,
-             -124,              242,              114,             -251,
-             -166,              201,              127,               28,
-              -11,               23,              -80,             -115,
-              -20,              -51,             -348,              340,
-              -34,              133,               13,               92,
-             -124,             -136,             -120,              -26,
-               -6,               17,               28,               21,
-              120,             -168,              160,              -35,
-              115,               28,                9,                7,
-              -56,               39,              156,              256,
-              -18,                1,              277,               82,
-              -70,             -144,              -88,              -13,
-              -59,             -157,                8,             -134,
-               21,              -40,               58,              -21,
-              194,             -276,               97,              279,
-              -56,             -140,              125,               57,
-             -184,             -204,              -70,               -2,
-              128,             -202,              -78,              230,
-              -23,              161,             -102,                1,
-                1,              180,              -31,              -86,
-             -167,              -57,              -60,               27,
-              -13,               99,              108,              111,
-               76,               69,               34,              -21,
-               53,               38,               34,               78,
-               73,              219,               51,               15,
-              -72,             -103,             -207,               30,
-              213,              -14,               31,              -94,
-              -40,             -144,               67,                4,
-              105,               59,             -240,               25,
-              244,               69,               58,               23,
-              -24,               -5,              -15,             -133,
-              -71,              -67,              181,               29,
-              -45,              121,               96,               51,
-              -72,              -53,               56,             -153,
-              -27,               85,              183,              211,
-              105,              -34,              -46,               43,
-              -72,              -93,               36,             -128,
-               29,              111,              -95,             -156,
-             -179,             -235,               21,              -39,
-              -71,              -33,              -61,             -252,
-              230,             -131,              157,              -21,
-              -85,              -28,             -123,               80,
-             -160,               63,               47,               -6,
-              -49,              -96,              -19,               17,
-              -58,               17,               -0,              -13,
-             -170,               25,              -35,               59,
-               10,              -31,             -413,               81,
-               62,               18,             -164,              245,
-               92,             -165,               42,               26,
-              126,             -248,              193,              -55,
-               16,               39,               14,               50
-};
-
-const SKP_Silk_NLSF_CBS SKP_Silk_NLSF_CB1_16_Stage_info[ NLSF_MSVQ_CB1_16_STAGES ] =
-{
-        {  32, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *   0 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[   0 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  32 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  32 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  40 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  40 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  48 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  48 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  56 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  56 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  64 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  64 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  72 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  72 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  80 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  80 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  88 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  88 ] },
-        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  96 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  96 ] }
-};
-
-const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB1_16 =
-{
-        NLSF_MSVQ_CB1_16_STAGES,
-        SKP_Silk_NLSF_CB1_16_Stage_info,
-        SKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min_Q15,
-        SKP_Silk_NLSF_MSVQ_CB1_16_CDF,
-        SKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr,
-        SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx
-};
-
--- a/src/SKP_Silk_tables_NLSF_CB1_16.h
+++ /dev/null
@@ -1,51 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#ifndef SKP_SILK_TABLES_NLSF_CB1_16_H
-#define SKP_SILK_TABLES_NLSF_CB1_16_H
-
-#include "SKP_Silk_define.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#define NLSF_MSVQ_CB1_16_STAGES       10
-#define NLSF_MSVQ_CB1_16_VECTORS      104
-
-/* NLSF codebook entropy coding tables */
-extern const SKP_uint16         SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ NLSF_MSVQ_CB1_16_VECTORS + NLSF_MSVQ_CB1_16_STAGES ];
-extern const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr[                  NLSF_MSVQ_CB1_16_STAGES ];
-extern const SKP_int            SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx[                 NLSF_MSVQ_CB1_16_STAGES ];
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
--- a/src/SKP_Silk_tables_gain.c
+++ /dev/null
@@ -1,77 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_tables.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-const SKP_uint16 SKP_Silk_gain_CDF[ 2 ][ 65 ] = 
-{
-{
-         0,     18,     45,     94,    181,    320,    519,    777,
-      1093,   1468,   1909,   2417,   2997,   3657,   4404,   5245,
-      6185,   7228,   8384,   9664,  11069,  12596,  14244,  16022,
-     17937,  19979,  22121,  24345,  26646,  29021,  31454,  33927,
-     36438,  38982,  41538,  44068,  46532,  48904,  51160,  53265,
-     55184,  56904,  58422,  59739,  60858,  61793,  62568,  63210,
-     63738,  64165,  64504,  64769,  64976,  65133,  65249,  65330,
-     65386,  65424,  65451,  65471,  65487,  65501,  65513,  65524,
-     65535
-},
-{
-         0,    214,    581,   1261,   2376,   3920,   5742,   7632,
-      9449,  11157,  12780,  14352,  15897,  17427,  18949,  20462,
-     21957,  23430,  24889,  26342,  27780,  29191,  30575,  31952,
-     33345,  34763,  36200,  37642,  39083,  40519,  41930,  43291,
-     44602,  45885,  47154,  48402,  49619,  50805,  51959,  53069,
-     54127,  55140,  56128,  57101,  58056,  58979,  59859,  60692,
-     61468,  62177,  62812,  63368,  63845,  64242,  64563,  64818,
-     65023,  65184,  65306,  65391,  65447,  65482,  65505,  65521,
-     65535
-}
-};
-
-const SKP_int SKP_Silk_gain_CDF_offset = 32;
-
-
-const SKP_uint16 SKP_Silk_delta_gain_CDF[ 46 ] = {
-         0,   2358,   3856,   7023,  15376,  53058,  59135,  61555,
-     62784,  63498,  63949,  64265,  64478,  64647,  64783,  64894,
-     64986,  65052,  65113,  65169,  65213,  65252,  65284,  65314,
-     65338,  65359,  65377,  65392,  65403,  65415,  65424,  65432,
-     65440,  65448,  65455,  65462,  65470,  65477,  65484,  65491,
-     65499,  65506,  65513,  65521,  65528,  65535
-};
-
-const SKP_int SKP_Silk_delta_gain_CDF_offset = 5;
-
-#ifdef __cplusplus
-}
-#endif
--- a/src/SKP_Silk_tables_other.c
+++ /dev/null
@@ -1,151 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_structs.h"
-#include "SKP_Silk_define.h"
-#include "SKP_Silk_tables.h"
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Piece-wise linear mapping from bitrate in kbps to coding quality in dB SNR */
-const SKP_int32 TargetRate_table_NB[ TARGET_RATE_TAB_SZ ] = {
-    0,      8000,   9000,   11000,  13000,  16000,  22000,  100000
-};
-const SKP_int32 TargetRate_table_MB[ TARGET_RATE_TAB_SZ ] = {
-    0,      10000,  12000,  14000,  17000,  21000,  28000,  100000
-};
-const SKP_int32 TargetRate_table_WB[ TARGET_RATE_TAB_SZ ] = {
-    0,      11000,  14000,  17000,  21000,  26000,  36000,  100000
-};
-const SKP_int32 TargetRate_table_SWB[ TARGET_RATE_TAB_SZ ] = {
-    0,      13000,  16000,  19000,  25000,  32000,  46000,  100000
-};
-const SKP_int32 SNR_table_Q1[ TARGET_RATE_TAB_SZ ] = {
-    19,     31,     35,     39,     43,     47,     54,     59
-};
-
-const SKP_int32 SNR_table_one_bit_per_sample_Q7[ 4 ] = {
-    1984,   2240,   2408,   2708
-};
-
-/* Filter coeficicnts for HP filter: 4. Order filter implementad as two biquad filters  */
-const SKP_int16 SKP_Silk_SWB_detect_B_HP_Q13[ NB_SOS ][ 3 ] = {
-    //{400, -550, 400}, {400, 130, 400}, {400, 390, 400}
-    {575, -948, 575}, {575, -221, 575}, {575, 104, 575} 
-};
-const SKP_int16 SKP_Silk_SWB_detect_A_HP_Q13[ NB_SOS ][ 2 ] = {
-    {14613, 6868}, {12883, 7337}, {11586, 7911}
-    //{14880, 6900}, {14400, 7300}, {13700, 7800}
-};
-
-/* Decoder high-pass filter coefficients for 24 kHz sampling, -6 dB @ 44 Hz */
-const SKP_int16 SKP_Silk_Dec_A_HP_24[ DEC_HP_ORDER     ] = {-16220, 8030};              // second order AR coefs, Q13
-const SKP_int16 SKP_Silk_Dec_B_HP_24[ DEC_HP_ORDER + 1 ] = {8000, -16000, 8000};        // second order MA coefs, Q13
-
-/* Decoder high-pass filter coefficients for 16 kHz sampling, - 6 dB @ 46 Hz */
-const SKP_int16 SKP_Silk_Dec_A_HP_16[ DEC_HP_ORDER     ] = {-16127, 7940};              // second order AR coefs, Q13
-const SKP_int16 SKP_Silk_Dec_B_HP_16[ DEC_HP_ORDER + 1 ] = {8000, -16000, 8000};        // second order MA coefs, Q13
-
-/* Decoder high-pass filter coefficients for 12 kHz sampling, -6 dB @ 44 Hz */
-const SKP_int16 SKP_Silk_Dec_A_HP_12[ DEC_HP_ORDER     ] = {-16043, 7859};              // second order AR coefs, Q13
-const SKP_int16 SKP_Silk_Dec_B_HP_12[ DEC_HP_ORDER + 1 ] = {8000, -16000, 8000};        // second order MA coefs, Q13
-
-/* Decoder high-pass filter coefficients for 8 kHz sampling, -6 dB @ 43 Hz */
-const SKP_int16 SKP_Silk_Dec_A_HP_8[ DEC_HP_ORDER     ] = {-15885, 7710};               // second order AR coefs, Q13
-const SKP_int16 SKP_Silk_Dec_B_HP_8[ DEC_HP_ORDER + 1 ] = {8000, -16000, 8000};         // second order MA coefs, Q13
-
-/* table for LSB coding */
-const SKP_uint16 SKP_Silk_lsb_CDF[ 3 ] = {0,  40000,  65535};
-
-/* tables for LTPScale */
-const SKP_uint16 SKP_Silk_LTPscale_CDF[ 4 ] = {0,  32000,  48000,  65535};
-const SKP_int    SKP_Silk_LTPscale_offset   = 2;
-
-/* tables for VAD flag */
-const SKP_uint16 SKP_Silk_vadflag_CDF[ 3 ] = {0,  22000,  65535}; // 66% for speech, 33% for no speech
-const SKP_int    SKP_Silk_vadflag_offset   = 1;
-
-/* tables for sampling rate */
-const SKP_int    SKP_Silk_SamplingRates_table[ 4 ] = {8, 12, 16, 24};
-const SKP_uint16 SKP_Silk_SamplingRates_CDF[ 5 ]   = {0,  16000,  32000,  48000,  65535};
-const SKP_int    SKP_Silk_SamplingRates_offset     = 2;
-
-/* tables for NLSF interpolation factor */
-const SKP_uint16 SKP_Silk_NLSF_interpolation_factor_CDF[ 6 ] = {0,   3706,   8703,  19226,  30926,  65535};
-const SKP_int    SKP_Silk_NLSF_interpolation_factor_offset   = 4;
-
-/* Table for frame termination indication */
-const SKP_uint16 SKP_Silk_FrameTermination_CDF[ 5 ] = {0, 20000, 45000, 56000, 65535};
-const SKP_int    SKP_Silk_FrameTermination_offset   = 2;
-
-const SKP_uint16 SKP_Silk_FrameTermination_v4_CDF[ 6 ] = {0,   13107,   26214,   39321,   52428,   65535};
-const SKP_int    SKP_Silk_FrameTermination_v4_offset   = 4;
-
-/* Table for random seed */
-const SKP_uint16 SKP_Silk_Seed_CDF[ 5 ] = {0, 16384, 32768, 49152, 65535};
-const SKP_int    SKP_Silk_Seed_offset   = 2;
-
-/* Quantization offsets */
-const SKP_int16  SKP_Silk_Quantization_Offsets_Q10[ 2 ][ 2 ] = {
-    { OFFSET_VL_Q10, OFFSET_VH_Q10 }, { OFFSET_UVL_Q10, OFFSET_UVH_Q10 }
-};
-
-/* Table for LTPScale */
-const SKP_int16 SKP_Silk_LTPScales_table_Q14[ 3 ] = { 15565, 11469, 8192 };
-
-#if SWITCH_TRANSITION_FILTERING
-/*  Elliptic/Cauer filters designed with 0.1 dB passband ripple, 
-        80 dB minimum stopband attenuation, and
-        [0.95 : 0.15 : 0.35] normalized cut off frequencies. */
-
-/* Interpolation points for filter coefficients used in the bandwidth transition smoother */
-const SKP_int32 SKP_Silk_Transition_LP_B_Q28[ TRANSITION_INT_NUM ][ TRANSITION_NB ] = 
-{
-{    250767114,  501534038,  250767114  },
-{    209867381,  419732057,  209867381  },
-{    170987846,  341967853,  170987846  },
-{    131531482,  263046905,  131531482  },
-{     89306658,  178584282,   89306658  }
-};
-
-/* Interpolation points for filter coefficients used in the bandwidth transition smoother */
-const SKP_int32 SKP_Silk_Transition_LP_A_Q28[ TRANSITION_INT_NUM ][ TRANSITION_NA ] = 
-{
-{    506393414,  239854379  },
-{    411067935,  169683996  },
-{    306733530,  116694253  },
-{    185807084,   77959395  },
-{     35497197,   57401098  }
-};
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
--- a/src/SKP_Silk_tables_pitch_lag.c
+++ /dev/null
@@ -1,199 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_tables.h"
-
-const SKP_uint16 SKP_Silk_pitch_lag_NB_CDF[ 8 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ] = {
-         0,    194,    395,    608,    841,   1099,   1391,   1724,
-      2105,   2544,   3047,   3624,   4282,   5027,   5865,   6799,
-      7833,   8965,  10193,  11510,  12910,  14379,  15905,  17473,
-     19065,  20664,  22252,  23814,  25335,  26802,  28206,  29541,
-     30803,  31992,  33110,  34163,  35156,  36098,  36997,  37861,
-     38698,  39515,  40319,  41115,  41906,  42696,  43485,  44273,
-     45061,  45847,  46630,  47406,  48175,  48933,  49679,  50411,
-     51126,  51824,  52502,  53161,  53799,  54416,  55011,  55584,
-     56136,  56666,  57174,  57661,  58126,  58570,  58993,  59394,
-     59775,  60134,  60472,  60790,  61087,  61363,  61620,  61856,
-     62075,  62275,  62458,  62625,  62778,  62918,  63045,  63162,
-     63269,  63368,  63459,  63544,  63623,  63698,  63769,  63836,
-     63901,  63963,  64023,  64081,  64138,  64194,  64248,  64301,
-     64354,  64406,  64457,  64508,  64558,  64608,  64657,  64706,
-     64754,  64803,  64851,  64899,  64946,  64994,  65041,  65088,
-     65135,  65181,  65227,  65272,  65317,  65361,  65405,  65449,
-     65492,  65535
-};
-
-const SKP_int SKP_Silk_pitch_lag_NB_CDF_offset = 43;
-
-const SKP_uint16 SKP_Silk_pitch_contour_NB_CDF[ 12 ] = {
-         0,  14445,  18587,  25628,  30013,  34859,  40597,  48426,
-     54460,  59033,  62990,  65535
-};
-
-const SKP_int SKP_Silk_pitch_contour_NB_CDF_offset = 5;
-
-const SKP_uint16 SKP_Silk_pitch_lag_MB_CDF[ 12 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ] = {
-         0,    132,    266,    402,    542,    686,    838,    997,
-      1167,   1349,   1546,   1760,   1993,   2248,   2528,   2835,
-      3173,   3544,   3951,   4397,   4882,   5411,   5984,   6604,
-      7270,   7984,   8745,   9552,  10405,  11300,  12235,  13206,
-     14209,  15239,  16289,  17355,  18430,  19507,  20579,  21642,
-     22688,  23712,  24710,  25677,  26610,  27507,  28366,  29188,
-     29971,  30717,  31427,  32104,  32751,  33370,  33964,  34537,
-     35091,  35630,  36157,  36675,  37186,  37692,  38195,  38697,
-     39199,  39701,  40206,  40713,  41222,  41733,  42247,  42761,
-     43277,  43793,  44309,  44824,  45336,  45845,  46351,  46851,
-     47347,  47836,  48319,  48795,  49264,  49724,  50177,  50621,
-     51057,  51484,  51902,  52312,  52714,  53106,  53490,  53866,
-     54233,  54592,  54942,  55284,  55618,  55944,  56261,  56571,
-     56873,  57167,  57453,  57731,  58001,  58263,  58516,  58762,
-     58998,  59226,  59446,  59656,  59857,  60050,  60233,  60408,
-     60574,  60732,  60882,  61024,  61159,  61288,  61410,  61526,
-     61636,  61742,  61843,  61940,  62033,  62123,  62210,  62293,
-     62374,  62452,  62528,  62602,  62674,  62744,  62812,  62879,
-     62945,  63009,  63072,  63135,  63196,  63256,  63316,  63375,
-     63434,  63491,  63549,  63605,  63661,  63717,  63772,  63827,
-     63881,  63935,  63988,  64041,  64094,  64147,  64199,  64252,
-     64304,  64356,  64409,  64461,  64513,  64565,  64617,  64669,
-     64721,  64773,  64824,  64875,  64925,  64975,  65024,  65072,
-     65121,  65168,  65215,  65262,  65308,  65354,  65399,  65445,
-     65490,  65535
-};
-
-const SKP_int SKP_Silk_pitch_lag_MB_CDF_offset = 64;
-
-const SKP_uint16 SKP_Silk_pitch_lag_WB_CDF[ 16 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ] = {
-         0,    106,    213,    321,    429,    539,    651,    766,
-       884,   1005,   1132,   1264,   1403,   1549,   1705,   1870,
-      2047,   2236,   2439,   2658,   2893,   3147,   3420,   3714,
-      4030,   4370,   4736,   5127,   5546,   5993,   6470,   6978,
-      7516,   8086,   8687,   9320,   9985,  10680,  11405,  12158,
-     12938,  13744,  14572,  15420,  16286,  17166,  18057,  18955,
-     19857,  20759,  21657,  22547,  23427,  24293,  25141,  25969,
-     26774,  27555,  28310,  29037,  29736,  30406,  31048,  31662,
-     32248,  32808,  33343,  33855,  34345,  34815,  35268,  35704,
-     36127,  36537,  36938,  37330,  37715,  38095,  38471,  38844,
-     39216,  39588,  39959,  40332,  40707,  41084,  41463,  41844,
-     42229,  42615,  43005,  43397,  43791,  44186,  44583,  44982,
-     45381,  45780,  46179,  46578,  46975,  47371,  47765,  48156,
-     48545,  48930,  49312,  49690,  50064,  50433,  50798,  51158,
-     51513,  51862,  52206,  52544,  52877,  53204,  53526,  53842,
-     54152,  54457,  54756,  55050,  55338,  55621,  55898,  56170,
-     56436,  56697,  56953,  57204,  57449,  57689,  57924,  58154,
-     58378,  58598,  58812,  59022,  59226,  59426,  59620,  59810,
-     59994,  60173,  60348,  60517,  60681,  60840,  60993,  61141,
-     61284,  61421,  61553,  61679,  61800,  61916,  62026,  62131,
-     62231,  62326,  62417,  62503,  62585,  62663,  62737,  62807,
-     62874,  62938,  62999,  63057,  63113,  63166,  63217,  63266,
-     63314,  63359,  63404,  63446,  63488,  63528,  63567,  63605,
-     63642,  63678,  63713,  63748,  63781,  63815,  63847,  63879,
-     63911,  63942,  63973,  64003,  64033,  64063,  64092,  64121,
-     64150,  64179,  64207,  64235,  64263,  64291,  64319,  64347,
-     64374,  64401,  64428,  64455,  64481,  64508,  64534,  64560,
-     64585,  64610,  64635,  64660,  64685,  64710,  64734,  64758,
-     64782,  64807,  64831,  64855,  64878,  64902,  64926,  64950,
-     64974,  64998,  65022,  65045,  65069,  65093,  65116,  65139,
-     65163,  65186,  65209,  65231,  65254,  65276,  65299,  65321,
-     65343,  65364,  65386,  65408,  65429,  65450,  65471,  65493,
-     65514,  65535
-};
-
-const SKP_int SKP_Silk_pitch_lag_WB_CDF_offset = 86;
-
-
-const SKP_uint16 SKP_Silk_pitch_lag_SWB_CDF[ 24 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ] = {
-         0,    253,    505,    757,   1008,   1258,   1507,   1755,
-      2003,   2249,   2494,   2738,   2982,   3225,   3469,   3713,
-      3957,   4202,   4449,   4698,   4949,   5203,   5460,   5720,
-      5983,   6251,   6522,   6798,   7077,   7361,   7650,   7942,
-      8238,   8539,   8843,   9150,   9461,   9775,  10092,  10411,
-     10733,  11057,  11383,  11710,  12039,  12370,  12701,  13034,
-     13368,  13703,  14040,  14377,  14716,  15056,  15398,  15742,
-     16087,  16435,  16785,  17137,  17492,  17850,  18212,  18577,
-     18946,  19318,  19695,  20075,  20460,  20849,  21243,  21640,
-     22041,  22447,  22856,  23269,  23684,  24103,  24524,  24947,
-     25372,  25798,  26225,  26652,  27079,  27504,  27929,  28352,
-     28773,  29191,  29606,  30018,  30427,  30831,  31231,  31627,
-     32018,  32404,  32786,  33163,  33535,  33902,  34264,  34621,
-     34973,  35320,  35663,  36000,  36333,  36662,  36985,  37304,
-     37619,  37929,  38234,  38535,  38831,  39122,  39409,  39692,
-     39970,  40244,  40513,  40778,  41039,  41295,  41548,  41796,
-     42041,  42282,  42520,  42754,  42985,  43213,  43438,  43660,
-     43880,  44097,  44312,  44525,  44736,  44945,  45153,  45359,
-     45565,  45769,  45972,  46175,  46377,  46578,  46780,  46981,
-     47182,  47383,  47585,  47787,  47989,  48192,  48395,  48599,
-     48804,  49009,  49215,  49422,  49630,  49839,  50049,  50259,
-     50470,  50682,  50894,  51107,  51320,  51533,  51747,  51961,
-     52175,  52388,  52601,  52813,  53025,  53236,  53446,  53655,
-     53863,  54069,  54274,  54477,  54679,  54879,  55078,  55274,
-     55469,  55662,  55853,  56042,  56230,  56415,  56598,  56779,
-     56959,  57136,  57311,  57484,  57654,  57823,  57989,  58152,
-     58314,  58473,  58629,  58783,  58935,  59084,  59230,  59373,
-     59514,  59652,  59787,  59919,  60048,  60174,  60297,  60417,
-     60533,  60647,  60757,  60865,  60969,  61070,  61167,  61262,
-     61353,  61442,  61527,  61609,  61689,  61765,  61839,  61910,
-     61979,  62045,  62109,  62170,  62230,  62287,  62343,  62396,
-     62448,  62498,  62547,  62594,  62640,  62685,  62728,  62770,
-     62811,  62852,  62891,  62929,  62967,  63004,  63040,  63075,
-     63110,  63145,  63178,  63212,  63244,  63277,  63308,  63340,
-     63371,  63402,  63432,  63462,  63491,  63521,  63550,  63578,
-     63607,  63635,  63663,  63690,  63718,  63744,  63771,  63798,
-     63824,  63850,  63875,  63900,  63925,  63950,  63975,  63999,
-     64023,  64046,  64069,  64092,  64115,  64138,  64160,  64182,
-     64204,  64225,  64247,  64268,  64289,  64310,  64330,  64351,
-     64371,  64391,  64411,  64431,  64450,  64470,  64489,  64508,
-     64527,  64545,  64564,  64582,  64600,  64617,  64635,  64652,
-     64669,  64686,  64702,  64719,  64735,  64750,  64766,  64782,
-     64797,  64812,  64827,  64842,  64857,  64872,  64886,  64901,
-     64915,  64930,  64944,  64959,  64974,  64988,  65003,  65018,
-     65033,  65048,  65063,  65078,  65094,  65109,  65125,  65141,
-     65157,  65172,  65188,  65204,  65220,  65236,  65252,  65268,
-     65283,  65299,  65314,  65330,  65345,  65360,  65375,  65390,
-     65405,  65419,  65434,  65449,  65463,  65477,  65492,  65506,
-     65521,  65535
-};
-
-const SKP_int SKP_Silk_pitch_lag_SWB_CDF_offset = 128;
-
-
-const SKP_uint16 SKP_Silk_pitch_contour_CDF[ 35 ] = {
-         0,    372,    843,   1315,   1836,   2644,   3576,   4719,
-      6088,   7621,   9396,  11509,  14245,  17618,  20777,  24294,
-     27992,  33116,  40100,  44329,  47558,  50679,  53130,  55557,
-     57510,  59022,  60285,  61345,  62316,  63140,  63762,  64321,
-     64729,  65099,  65535
-};
-
-const SKP_int SKP_Silk_pitch_contour_CDF_offset = 17;
-
-const SKP_uint16 SKP_Silk_pitch_delta_CDF[23] = {
-         0,    343,    740,   1249,   1889,   2733,   3861,   5396,
-      7552,  10890,  16053,  24152,  30220,  34680,  37973,  40405,
-     42243,  43708,  44823,  45773,  46462,  47055,  65535
-};
-
-const SKP_int SKP_Silk_pitch_delta_CDF_offset = 11;
--- a/src/SKP_Silk_tables_pulses_per_block.c
+++ /dev/null
@@ -1,235 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_tables.h"
-
-const SKP_int SKP_Silk_max_pulses_table[ 4 ] = {
-         6,      8,     12,     18
-};
-
-const SKP_uint16 SKP_Silk_pulses_per_block_CDF[ 10 ][ 21 ] = 
-{
-{
-         0,  47113,  61501,  64590,  65125,  65277,  65352,  65407,
-     65450,  65474,  65488,  65501,  65508,  65514,  65516,  65520,
-     65521,  65523,  65524,  65526,  65535
-},
-{
-         0,  26368,  47760,  58803,  63085,  64567,  65113,  65333,
-     65424,  65474,  65498,  65511,  65517,  65520,  65523,  65525,
-     65526,  65528,  65529,  65530,  65535
-},
-{
-         0,   9601,  28014,  45877,  57210,  62560,  64611,  65260,
-     65447,  65500,  65511,  65519,  65521,  65525,  65526,  65529,
-     65530,  65531,  65532,  65534,  65535
-},
-{
-         0,   3351,  12462,  25972,  39782,  50686,  57644,  61525,
-     63521,  64506,  65009,  65255,  65375,  65441,  65471,  65488,
-     65497,  65505,  65509,  65512,  65535
-},
-{
-         0,    488,   2944,   9295,  19712,  32160,  43976,  53121,
-     59144,  62518,  64213,  65016,  65346,  65470,  65511,  65515,
-     65525,  65529,  65531,  65534,  65535
-},
-{
-         0,  17013,  30405,  40812,  48142,  53466,  57166,  59845,
-     61650,  62873,  63684,  64223,  64575,  64811,  64959,  65051,
-     65111,  65143,  65165,  65183,  65535
-},
-{
-         0,   2994,   8323,  15845,  24196,  32300,  39340,  45140,
-     49813,  53474,  56349,  58518,  60167,  61397,  62313,  62969,
-     63410,  63715,  63906,  64056,  65535
-},
-{
-         0,     88,    721,   2795,   7542,  14888,  24420,  34593,
-     43912,  51484,  56962,  60558,  62760,  64037,  64716,  65069,
-     65262,  65358,  65398,  65420,  65535
-},
-{
-         0,    287,    789,   2064,   4398,   8174,  13534,  20151,
-     27347,  34533,  41295,  47242,  52070,  55772,  58458,  60381,
-     61679,  62533,  63109,  63519,  65535
-},
-{
-         0,      1,      3,     91,   4521,  14708,  28329,  41955,
-     52116,  58375,  61729,  63534,  64459,  64924,  65092,  65164,
-     65182,  65198,  65203,  65211,  65535
-}
-};
-
-const SKP_int SKP_Silk_pulses_per_block_CDF_offset = 6;
-
-
-const SKP_int16 SKP_Silk_pulses_per_block_BITS_Q6[ 9 ][ 20 ] = 
-{
-{
-        30,    140,    282,    444,    560,    625,    654,    677,
-       731,    780,    787,    844,    859,    960,    896,   1024,
-       960,   1024,    960,    821
-},
-{
-        84,    103,    164,    252,    350,    442,    526,    607,
-       663,    731,    787,    859,    923,    923,    960,   1024,
-       960,   1024,   1024,    875
-},
-{
-       177,    117,    120,    162,    231,    320,    426,    541,
-       657,    803,    832,    960,    896,   1024,    923,   1024,
-      1024,   1024,    960,   1024
-},
-{
-       275,    182,    146,    144,    166,    207,    261,    322,
-       388,    450,    516,    582,    637,    710,    762,    821,
-       832,    896,    923,    734
-},
-{
-       452,    303,    216,    170,    153,    158,    182,    220,
-       274,    337,    406,    489,    579,    681,    896,    811,
-       896,    960,    923,   1024
-},
-{
-       125,    147,    170,    202,    232,    265,    295,    332,
-       368,    406,    443,    483,    520,    563,    606,    646,
-       704,    739,    757,    483
-},
-{
-       285,    232,    200,    190,    193,    206,    224,    244,
-       266,    289,    315,    340,    367,    394,    425,    462,
-       496,    539,    561,    350
-},
-{
-       611,    428,    319,    242,    202,    178,    172,    180,
-       199,    229,    268,    313,    364,    422,    482,    538,
-       603,    683,    739,    586
-},
-{
-       501,    450,    364,    308,    264,    231,    212,    204,
-       204,    210,    222,    241,    265,    295,    326,    362,
-       401,    437,    469,    321
-}
-};
-
-const SKP_uint16 SKP_Silk_rate_levels_CDF[ 2 ][ 10 ] = 
-{
-{
-         0,   2005,  12717,  20281,  31328,  36234,  45816,  57753,
-     63104,  65535
-},
-{
-         0,   8553,  23489,  36031,  46295,  53519,  56519,  59151,
-     64185,  65535
-}
-};
-
-const SKP_int SKP_Silk_rate_levels_CDF_offset = 4;
-
-
-const SKP_int16 SKP_Silk_rate_levels_BITS_Q6[ 2 ][ 9 ] = 
-{
-{
-       322,    167,    199,    164,    239,    178,    157,    231,
-       304
-},
-{
-       188,    137,    153,    171,    204,    285,    297,    237,
-       358
-}
-};
-
-const SKP_uint16 SKP_Silk_shell_code_table0[ 33 ] = {
-         0,  32748,  65535,      0,   9505,  56230,  65535,      0,
-      4093,  32204,  61720,  65535,      0,   2285,  16207,  48750,
-     63424,  65535,      0,   1709,   9446,  32026,  55752,  63876,
-     65535,      0,   1623,   6986,  21845,  45381,  59147,  64186,
-     65535
-};
-
-const SKP_uint16 SKP_Silk_shell_code_table1[ 52 ] = {
-         0,  32691,  65535,      0,  12782,  52752,  65535,      0,
-      4847,  32665,  60899,  65535,      0,   2500,  17305,  47989,
-     63369,  65535,      0,   1843,  10329,  32419,  55433,  64277,
-     65535,      0,   1485,   7062,  21465,  43414,  59079,  64623,
-     65535,      0,      0,   4841,  14797,  31799,  49667,  61309,
-     65535,  65535,      0,      0,      0,   8032,  21695,  41078,
-     56317,  65535,  65535,  65535
-};
-
-const SKP_uint16 SKP_Silk_shell_code_table2[ 102 ] = {
-         0,  32615,  65535,      0,  14447,  50912,  65535,      0,
-      6301,  32587,  59361,  65535,      0,   3038,  18640,  46809,
-     62852,  65535,      0,   1746,  10524,  32509,  55273,  64278,
-     65535,      0,   1234,   6360,  21259,  43712,  59651,  64805,
-     65535,      0,   1020,   4461,  14030,  32286,  51249,  61904,
-     65100,  65535,      0,    851,   3435,  10006,  23241,  40797,
-     55444,  63009,  65252,  65535,      0,      0,   2075,   7137,
-     17119,  31499,  46982,  58723,  63976,  65535,  65535,      0,
-         0,      0,   3820,  11572,  23038,  37789,  51969,  61243,
-     65535,  65535,  65535,      0,      0,      0,      0,   6882,
-     16828,  30444,  44844,  57365,  65535,  65535,  65535,  65535,
-         0,      0,      0,      0,      0,  10093,  22963,  38779,
-     54426,  65535,  65535,  65535,  65535,  65535
-};
-
-const SKP_uint16 SKP_Silk_shell_code_table3[ 207 ] = {
-         0,  32324,  65535,      0,  15328,  49505,  65535,      0,
-      7474,  32344,  57955,  65535,      0,   3944,  19450,  45364,
-     61873,  65535,      0,   2338,  11698,  32435,  53915,  63734,
-     65535,      0,   1506,   7074,  21778,  42972,  58861,  64590,
-     65535,      0,   1027,   4490,  14383,  32264,  50980,  61712,
-     65043,  65535,      0,    760,   3022,   9696,  23264,  41465,
-     56181,  63253,  65251,  65535,      0,    579,   2256,   6873,
-     16661,  31951,  48250,  59403,  64198,  65360,  65535,      0,
-       464,   1783,   5181,  12269,  24247,  39877,  53490,  61502,
-     64591,  65410,  65535,      0,    366,   1332,   3880,   9273,
-     18585,  32014,  45928,  56659,  62616,  64899,  65483,  65535,
-         0,    286,   1065,   3089,   6969,  14148,  24859,  38274,
-     50715,  59078,  63448,  65091,  65481,  65535,      0,      0,
-       482,   2010,   5302,  10408,  18988,  30698,  43634,  54233,
-     60828,  64119,  65288,  65535,  65535,      0,      0,      0,
-      1006,   3531,   7857,  14832,  24543,  36272,  47547,  56883,
-     62327,  64746,  65535,  65535,  65535,      0,      0,      0,
-         0,   1863,   4950,  10730,  19284,  29397,  41382,  52335,
-     59755,  63834,  65535,  65535,  65535,  65535,      0,      0,
-         0,      0,      0,   2513,   7290,  14487,  24275,  35312,
-     46240,  55841,  62007,  65535,  65535,  65535,  65535,  65535,
-         0,      0,      0,      0,      0,      0,   3606,   9573,
-     18764,  28667,  40220,  51290,  59924,  65535,  65535,  65535,
-     65535,  65535,  65535,      0,      0,      0,      0,      0,
-         0,      0,   4879,  13091,  23376,  36061,  49395,  59315,
-     65535,  65535,  65535,  65535,  65535,  65535,  65535
-};
-
-const SKP_uint16 SKP_Silk_shell_code_table_offsets[ 19 ] = {
-         0,      0,      3,      7,     12,     18,     25,     33,
-        42,     52,     63,     75,     88,    102,    117,    133,
-       150,    168,    187
-};
-
--- a/src/SKP_Silk_tables_sign.c
+++ /dev/null
@@ -1,141 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_tables.h"
-
-const SKP_uint16 SKP_Silk_sign_CDF[ 36 ][ 3 ] = 
-{
-{
-         0,  37840,  65535
-},
-{
-         0,  36944,  65535
-},
-{
-         0,  36251,  65535
-},
-{
-         0,  35304,  65535
-},
-{
-         0,  34715,  65535
-},
-{
-         0,  35503,  65535
-},
-{
-         0,  34529,  65535
-},
-{
-         0,  34296,  65535
-},
-{
-         0,  34016,  65535
-},
-{
-         0,  47659,  65535
-},
-{
-         0,  44945,  65535
-},
-{
-         0,  42503,  65535
-},
-{
-         0,  40235,  65535
-},
-{
-         0,  38569,  65535
-},
-{
-         0,  40254,  65535
-},
-{
-         0,  37851,  65535
-},
-{
-         0,  37243,  65535
-},
-{
-         0,  36595,  65535
-},
-{
-         0,  43410,  65535
-},
-{
-         0,  44121,  65535
-},
-{
-         0,  43127,  65535
-},
-{
-         0,  40978,  65535
-},
-{
-         0,  38845,  65535
-},
-{
-         0,  40433,  65535
-},
-{
-         0,  38252,  65535
-},
-{
-         0,  37795,  65535
-},
-{
-         0,  36637,  65535
-},
-{
-         0,  59159,  65535
-},
-{
-         0,  55630,  65535
-},
-{
-         0,  51806,  65535
-},
-{
-         0,  48073,  65535
-},
-{
-         0,  45036,  65535
-},
-{
-         0,  48416,  65535
-},
-{
-         0,  43857,  65535
-},
-{
-         0,  42678,  65535
-},
-{
-         0,  41146,  65535
-}
-};
-
--- a/src/SKP_Silk_tables_type_offset.c
+++ /dev/null
@@ -1,52 +1,0 @@
-/***********************************************************************
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
-Redistribution and use in source and binary forms, with or without 
-modification, (subject to the limitations in the disclaimer below) 
-are permitted provided that the following conditions are met:
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-- Redistributions in binary form must reproduce the above copyright 
-notice, this list of conditions and the following disclaimer in the 
-documentation and/or other materials provided with the distribution.
-- Neither the name of Skype Limited, nor the names of specific 
-contributors, may be used to endorse or promote products derived from 
-this software without specific prior written permission.
-NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
-BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-***********************************************************************/
-
-#include "SKP_Silk_tables.h"
-
-const SKP_uint16 SKP_Silk_type_offset_CDF[ 5 ] = {
-         0,  37522,  41030,  44212,  65535
-};
-
-const SKP_int SKP_Silk_type_offset_CDF_offset = 2;
-
-
-const SKP_uint16 SKP_Silk_type_offset_joint_CDF[ 4 ][ 5 ] = 
-{
-{
-         0,  57686,  61230,  62358,  65535
-},
-{
-         0,  18346,  40067,  43659,  65535
-},
-{
-         0,  22694,  24279,  35507,  65535
-},
-{
-         0,   6067,   7215,  13010,  65535
-}
-};
-
--- a/src/Silk_FIX.2008.vcproj
+++ /dev/null
@@ -1,837 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9.00"
-	Name="Silk_FIX"
-	ProjectGUID="{56B91D01-9150-4BBF-AFA1-5B68AB991B76}"
-	RootNamespace="Silk"
-	Keyword="Win32Proj"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-		<Platform
-			Name="x64"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories="../interface"
-				PreprocessorDefinitions="WIN32;_DEBUG;_LIB;"
-				MinimalRebuild="true"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="1"
-				FloatingPointModel="2"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="true"
-				DebugInformationFormat="4"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-				CommandLine=""
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="0"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories="../interface"
-				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
-				GeneratePreprocessedFile="0"
-				RuntimeLibrary="0"
-				FloatingPointModel="2"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="true"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-				CommandLine=""
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|x64"
-			OutputDirectory="$(PlatformName)\$(ConfigurationName)"
-			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
-			ConfigurationType="4"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				TargetEnvironment="3"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories="../interface"
-				PreprocessorDefinitions="WIN32;_DEBUG;_LIB;"
-				MinimalRebuild="true"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="1"
-				FloatingPointModel="2"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="true"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-				CommandLine=""
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|x64"
-			OutputDirectory="$(PlatformName)\$(ConfigurationName)"
-			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
-			ConfigurationType="4"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				TargetEnvironment="3"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="0"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories="../interface"
-				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
-				GeneratePreprocessedFile="0"
-				RuntimeLibrary="0"
-				FloatingPointModel="2"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="true"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-				CommandLine=""
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
-			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
-			>
-			<File
-				RelativePath=".\SKP_Silk_A2NLSF.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_allpass_int.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_ana_filt_bank_1.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_apply_sine_window.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_array_maxabs.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_autocorr.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_biquad.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_biquad_alt.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_burg_modified.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_bwexpander.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_bwexpander_32.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_CNG.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_code_signs.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_control_codec_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_corrMatrix_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_create_init_destroy.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_dec_API.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_decode_core.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_decode_frame.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_decode_indices_v4.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_decode_parameters.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_decode_parameters_v4.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_decode_pulses.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_decoder_set_fs.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_detect_SWB_input.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_enc_API.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_encode_frame_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_encode_parameters.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_encode_parameters_v4.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_encode_pulses.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_find_LPC_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_find_LTP_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_find_pitch_lags_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_find_pred_coefs_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_gain_quant.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_HP_variable_cutoff_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_init_encoder_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_inner_prod_aligned.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_interpolate.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_k2a.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_k2a_Q16.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LBRR_reset.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_lin2log.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_log2lin.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_lowpass_int.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_lowpass_short.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LP_variable_cutoff.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LPC_inv_pred_gain.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LPC_stabilize.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LPC_synthesis_filter.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LPC_synthesis_order16.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LSF_cos_table.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LTP_analysis_filter_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LTP_scale_ctrl_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_MA.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NLSF2A.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NLSF2A_stable.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NLSF_MSVQ_decode.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NLSF_MSVQ_encode_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NLSF_stabilize.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NLSF_VQ_rate_distortion_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NLSF_VQ_sum_error_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NLSF_VQ_weights_laroia.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_noise_shape_analysis_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NSQ.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NSQ_del_dec.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_pitch_analysis_core.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_pitch_est_tables.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_PLC.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_prefilter_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_process_gains_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_process_NLSFs_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_pulses_to_bytes.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_quant_LTP_gains_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_range_coder.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_regularize_correlations_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_1_2.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_1_2_coarse.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_1_2_coarsest.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_1_3.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_2_1_coarse.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_2_3.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_2_3_coarse.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_2_3_coarsest.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_2_3_rom.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_3_1.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_3_2.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_3_2_rom.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_3_4.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_4_3.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_residual_energy16_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_residual_energy_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_scale_copy_vector16.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_scale_vector.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_schur.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_schur64.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_shell_coder.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_sigm_Q15.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_solve_LS_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_sort.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_sum_sqr_shift.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_gain.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_LTP.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_NLSF_CB0_10.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_NLSF_CB0_16.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_NLSF_CB1_10.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_NLSF_CB1_16.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_other.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_pitch_lag.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_pulses_per_block.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_sign.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_type_offset.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_VAD.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_VQ_nearest_neighbor_FIX.c"
-				>
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc;xsd"
-			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
-			>
-			<File
-				RelativePath="..\interface\SKP_Silk_control.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_define.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_define_FIX.h"
-				>
-			</File>
-			<File
-				RelativePath="..\interface\SKP_Silk_errors.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_Inlines.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_macros.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_main.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_main_FIX.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_perceptual_parameters_FIX.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_pitch_est_defines.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_PLC.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_rom.h"
-				>
-			</File>
-			<File
-				RelativePath="..\interface\SKP_Silk_SDK_API.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_SigProc_FIX.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_structs.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_structs_FIX.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables.h"
-				>
-			</File>
-			<File
-				RelativePath="..\interface\SKP_Silk_typedef.h"
-				>
-			</File>
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/src/Silk_FIX.2010.vcxproj
+++ /dev/null
@@ -1,300 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>Silk_FIX</ProjectName>
-    <ProjectGuid>{56B91D01-9150-4BBF-AFA1-5B68AB991B76}</ProjectGuid>
-    <RootNamespace>Silk</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <CharacterSet>Unicode</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <CharacterSet>Unicode</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>../interface;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <FloatingPointModel>Fast</FloatingPointModel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-    </ClCompile>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>../interface;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <PreprocessToFile>false</PreprocessToFile>
-      <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <FloatingPointModel>Fast</FloatingPointModel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>../interface;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <FloatingPointModel>Fast</FloatingPointModel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>../interface;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <PreprocessToFile>false</PreprocessToFile>
-      <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <FloatingPointModel>Fast</FloatingPointModel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="SKP_Silk_A2NLSF.c" />
-    <ClCompile Include="SKP_Silk_allpass_int.c" />
-    <ClCompile Include="SKP_Silk_ana_filt_bank_1.c" />
-    <ClCompile Include="SKP_Silk_apply_sine_window.c" />
-    <ClCompile Include="SKP_Silk_array_maxabs.c" />
-    <ClCompile Include="SKP_Silk_autocorr.c" />
-    <ClCompile Include="SKP_Silk_biquad.c" />
-    <ClCompile Include="SKP_Silk_biquad_alt.c" />
-    <ClCompile Include="SKP_Silk_burg_modified.c" />
-    <ClCompile Include="SKP_Silk_bwexpander.c" />
-    <ClCompile Include="SKP_Silk_bwexpander_32.c" />
-    <ClCompile Include="SKP_Silk_CNG.c" />
-    <ClCompile Include="SKP_Silk_code_signs.c" />
-    <ClCompile Include="SKP_Silk_control_codec_FIX.c" />
-    <ClCompile Include="SKP_Silk_corrMatrix_FIX.c" />
-    <ClCompile Include="SKP_Silk_create_init_destroy.c" />
-    <ClCompile Include="SKP_Silk_dec_API.c" />
-    <ClCompile Include="SKP_Silk_decode_core.c" />
-    <ClCompile Include="SKP_Silk_decode_frame.c" />
-    <ClCompile Include="SKP_Silk_decode_indices_v4.c" />
-    <ClCompile Include="SKP_Silk_decode_parameters.c" />
-    <ClCompile Include="SKP_Silk_decode_parameters_v4.c" />
-    <ClCompile Include="SKP_Silk_decode_pulses.c" />
-    <ClCompile Include="SKP_Silk_decoder_set_fs.c" />
-    <ClCompile Include="SKP_Silk_detect_SWB_input.c" />
-    <ClCompile Include="SKP_Silk_enc_API.c" />
-    <ClCompile Include="SKP_Silk_encode_frame_FIX.c" />
-    <ClCompile Include="SKP_Silk_encode_parameters.c" />
-    <ClCompile Include="SKP_Silk_encode_parameters_v4.c" />
-    <ClCompile Include="SKP_Silk_encode_pulses.c" />
-    <ClCompile Include="SKP_Silk_find_LPC_FIX.c" />
-    <ClCompile Include="SKP_Silk_find_LTP_FIX.c" />
-    <ClCompile Include="SKP_Silk_find_pitch_lags_FIX.c" />
-    <ClCompile Include="SKP_Silk_find_pred_coefs_FIX.c" />
-    <ClCompile Include="SKP_Silk_gain_quant.c" />
-    <ClCompile Include="SKP_Silk_HP_variable_cutoff_FIX.c" />
-    <ClCompile Include="SKP_Silk_init_encoder_FIX.c" />
-    <ClCompile Include="SKP_Silk_inner_prod_aligned.c" />
-    <ClCompile Include="SKP_Silk_interpolate.c" />
-    <ClCompile Include="SKP_Silk_k2a.c" />
-    <ClCompile Include="SKP_Silk_k2a_Q16.c" />
-    <ClCompile Include="SKP_Silk_LBRR_reset.c" />
-    <ClCompile Include="SKP_Silk_lin2log.c" />
-    <ClCompile Include="SKP_Silk_log2lin.c" />
-    <ClCompile Include="SKP_Silk_lowpass_int.c" />
-    <ClCompile Include="SKP_Silk_lowpass_short.c" />
-    <ClCompile Include="SKP_Silk_LP_variable_cutoff.c" />
-    <ClCompile Include="SKP_Silk_LPC_inv_pred_gain.c" />
-    <ClCompile Include="SKP_Silk_LPC_stabilize.c" />
-    <ClCompile Include="SKP_Silk_LPC_synthesis_filter.c" />
-    <ClCompile Include="SKP_Silk_LPC_synthesis_order16.c" />
-    <ClCompile Include="SKP_Silk_LSF_cos_table.c" />
-    <ClCompile Include="SKP_Silk_LTP_analysis_filter_FIX.c" />
-    <ClCompile Include="SKP_Silk_LTP_scale_ctrl_FIX.c" />
-    <ClCompile Include="SKP_Silk_MA.c" />
-    <ClCompile Include="SKP_Silk_NLSF2A.c" />
-    <ClCompile Include="SKP_Silk_NLSF2A_stable.c" />
-    <ClCompile Include="SKP_Silk_NLSF_MSVQ_decode.c" />
-    <ClCompile Include="SKP_Silk_NLSF_MSVQ_encode_FIX.c" />
-    <ClCompile Include="SKP_Silk_NLSF_stabilize.c" />
-    <ClCompile Include="SKP_Silk_NLSF_VQ_rate_distortion_FIX.c" />
-    <ClCompile Include="SKP_Silk_NLSF_VQ_sum_error_FIX.c" />
-    <ClCompile Include="SKP_Silk_NLSF_VQ_weights_laroia.c" />
-    <ClCompile Include="SKP_Silk_noise_shape_analysis_FIX.c" />
-    <ClCompile Include="SKP_Silk_NSQ.c" />
-    <ClCompile Include="SKP_Silk_NSQ_del_dec.c" />
-    <ClCompile Include="SKP_Silk_pitch_analysis_core.c" />
-    <ClCompile Include="SKP_Silk_pitch_est_tables.c" />
-    <ClCompile Include="SKP_Silk_PLC.c" />
-    <ClCompile Include="SKP_Silk_prefilter_FIX.c" />
-    <ClCompile Include="SKP_Silk_process_gains_FIX.c" />
-    <ClCompile Include="SKP_Silk_process_NLSFs_FIX.c" />
-    <ClCompile Include="SKP_Silk_pulses_to_bytes.c" />
-    <ClCompile Include="SKP_Silk_quant_LTP_gains_FIX.c" />
-    <ClCompile Include="SKP_Silk_range_coder.c" />
-    <ClCompile Include="SKP_Silk_regularize_correlations_FIX.c" />
-    <ClCompile Include="SKP_Silk_resample_1_2.c" />
-    <ClCompile Include="SKP_Silk_resample_1_2_coarse.c" />
-    <ClCompile Include="SKP_Silk_resample_1_2_coarsest.c" />
-    <ClCompile Include="SKP_Silk_resample_1_3.c" />
-    <ClCompile Include="SKP_Silk_resample_2_1_coarse.c" />
-    <ClCompile Include="SKP_Silk_resample_2_3.c" />
-    <ClCompile Include="SKP_Silk_resample_2_3_coarse.c" />
-    <ClCompile Include="SKP_Silk_resample_2_3_coarsest.c" />
-    <ClCompile Include="SKP_Silk_resample_2_3_rom.c" />
-    <ClCompile Include="SKP_Silk_resample_3_1.c" />
-    <ClCompile Include="SKP_Silk_resample_3_2.c" />
-    <ClCompile Include="SKP_Silk_resample_3_2_rom.c" />
-    <ClCompile Include="SKP_Silk_resample_3_4.c" />
-    <ClCompile Include="SKP_Silk_resample_4_3.c" />
-    <ClCompile Include="SKP_Silk_residual_energy16_FIX.c" />
-    <ClCompile Include="SKP_Silk_residual_energy_FIX.c" />
-    <ClCompile Include="SKP_Silk_scale_copy_vector16.c" />
-    <ClCompile Include="SKP_Silk_scale_vector.c" />
-    <ClCompile Include="SKP_Silk_schur.c" />
-    <ClCompile Include="SKP_Silk_schur64.c" />
-    <ClCompile Include="SKP_Silk_shell_coder.c" />
-    <ClCompile Include="SKP_Silk_sigm_Q15.c" />
-    <ClCompile Include="SKP_Silk_solve_LS_FIX.c" />
-    <ClCompile Include="SKP_Silk_sort.c" />
-    <ClCompile Include="SKP_Silk_sum_sqr_shift.c" />
-    <ClCompile Include="SKP_Silk_tables_gain.c" />
-    <ClCompile Include="SKP_Silk_tables_LTP.c" />
-    <ClCompile Include="SKP_Silk_tables_NLSF_CB0_10.c" />
-    <ClCompile Include="SKP_Silk_tables_NLSF_CB0_16.c" />
-    <ClCompile Include="SKP_Silk_tables_NLSF_CB1_10.c" />
-    <ClCompile Include="SKP_Silk_tables_NLSF_CB1_16.c" />
-    <ClCompile Include="SKP_Silk_tables_other.c" />
-    <ClCompile Include="SKP_Silk_tables_pitch_lag.c" />
-    <ClCompile Include="SKP_Silk_tables_pulses_per_block.c" />
-    <ClCompile Include="SKP_Silk_tables_sign.c" />
-    <ClCompile Include="SKP_Silk_tables_type_offset.c" />
-    <ClCompile Include="SKP_Silk_VAD.c" />
-    <ClCompile Include="SKP_Silk_VQ_nearest_neighbor_FIX.c" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\interface\SKP_Silk_control.h" />
-    <ClInclude Include="SKP_Silk_define.h" />
-    <ClInclude Include="SKP_Silk_define_FIX.h" />
-    <ClInclude Include="..\interface\SKP_Silk_errors.h" />
-    <ClInclude Include="SKP_Silk_Inlines.h" />
-    <ClInclude Include="SKP_Silk_macros.h" />
-    <ClInclude Include="SKP_Silk_main.h" />
-    <ClInclude Include="SKP_Silk_main_FIX.h" />
-    <ClInclude Include="SKP_Silk_perceptual_parameters_FIX.h" />
-    <ClInclude Include="SKP_Silk_pitch_est_defines.h" />
-    <ClInclude Include="SKP_Silk_PLC.h" />
-    <ClInclude Include="SKP_Silk_resample_rom.h" />
-    <ClInclude Include="..\interface\SKP_Silk_SDK_API.h" />
-    <ClInclude Include="SKP_Silk_SigProc_FIX.h" />
-    <ClInclude Include="SKP_Silk_structs.h" />
-    <ClInclude Include="SKP_Silk_structs_FIX.h" />
-    <ClInclude Include="SKP_Silk_tables.h" />
-    <ClInclude Include="..\interface\SKP_Silk_typedef.h" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/src/Silk_FIX.vcproj
+++ /dev/null
@@ -1,700 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="8,00"
-	Name="Silk_FIX"
-	ProjectGUID="{56B91D01-9150-4BBF-AFA1-5B68AB991B76}"
-	RootNamespace="Silk"
-	Keyword="Win32Proj"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="$(SolutionDir)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories="../interface"
-				PreprocessorDefinitions="WIN32;_DEBUG;_LIB;"
-				MinimalRebuild="true"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="1"
-				FloatingPointModel="2"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="true"
-				DebugInformationFormat="4"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="SKP_Silk_FIX_Win32_debug.lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-				CommandLine=""
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="$(SolutionDir)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			CharacterSet="1"
-			WholeProgramOptimization="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="0"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories="../interface"
-				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
-				GeneratePreprocessedFile="0"
-				RuntimeLibrary="0"
-				FloatingPointModel="2"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="true"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="SKP_Silk_FIX_Win32_mt.lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-				CommandLine=""
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
-			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
-			>
-			<File
-				RelativePath=".\SKP_Silk_A2NLSF.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_allpass_int.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_ana_filt_bank_1.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_apply_sine_window.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_array_maxabs.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_autocorr.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_biquad.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_biquad_alt.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_burg_modified.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_bwexpander.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_bwexpander_32.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_CNG.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_code_signs.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_control_codec_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_corrMatrix_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_create_init_destroy.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_dec_API.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_decode_core.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_decode_frame.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_decode_indices_v4.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_decode_parameters.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_decode_parameters_v4.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_decode_pulses.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_decoder_set_fs.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_detect_SWB_input.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_enc_API.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_encode_frame_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_encode_parameters.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_encode_parameters_v4.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_encode_pulses.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_find_LPC_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_find_LTP_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_find_pitch_lags_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_find_pred_coefs_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_gain_quant.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_HP_variable_cutoff_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_init_encoder_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_inner_prod_aligned.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_interpolate.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_k2a.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_k2a_Q16.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LBRR_reset.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_lin2log.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_log2lin.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_lowpass_int.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_lowpass_short.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LP_variable_cutoff.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LPC_inv_pred_gain.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LPC_stabilize.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LPC_synthesis_filter.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LPC_synthesis_order16.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LSF_cos_table.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LTP_analysis_filter_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_LTP_scale_ctrl_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_MA.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NLSF2A.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NLSF2A_stable.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NLSF_MSVQ_decode.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NLSF_MSVQ_encode_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NLSF_stabilize.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NLSF_VQ_rate_distortion_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NLSF_VQ_sum_error_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NLSF_VQ_weights_laroia.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_noise_shape_analysis_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NSQ.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_NSQ_del_dec.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_pitch_analysis_core.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_pitch_est_tables.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_PLC.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_prefilter_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_process_gains_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_process_NLSFs_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_pulses_to_bytes.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_quant_LTP_gains_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_range_coder.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_regularize_correlations_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_1_2.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_1_2_coarse.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_1_2_coarsest.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_1_3.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_2_1_coarse.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_2_3.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_2_3_coarse.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_2_3_coarsest.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_2_3_rom.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_3_1.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_3_2.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_3_2_rom.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_3_4.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_4_3.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_residual_energy16_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_residual_energy_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_scale_copy_vector16.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_scale_vector.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_schur.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_schur64.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_shell_coder.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_sigm_Q15.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_solve_LS_FIX.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_sort.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_sum_sqr_shift.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_gain.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_LTP.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_NLSF_CB0_10.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_NLSF_CB0_16.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_NLSF_CB1_10.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_NLSF_CB1_16.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_other.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_pitch_lag.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_pulses_per_block.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_sign.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables_type_offset.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_VAD.c"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_VQ_nearest_neighbor_FIX.c"
-				>
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc;xsd"
-			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
-			>
-			<File
-				RelativePath="..\interface\SKP_Silk_control.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_define.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_define_FIX.h"
-				>
-			</File>
-			<File
-				RelativePath="..\interface\SKP_Silk_errors.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_Inlines.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_macros.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_main.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_main_FIX.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_perceptual_parameters_FIX.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_pitch_est_defines.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_PLC.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_resample_rom.h"
-				>
-			</File>
-			<File
-				RelativePath="..\interface\SKP_Silk_SDK_API.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_SigProc_FIX.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_structs.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_structs_FIX.h"
-				>
-			</File>
-			<File
-				RelativePath=".\SKP_Silk_tables.h"
-				>
-			</File>
-			<File
-				RelativePath="..\interface\SKP_Silk_typedef.h"
-				>
-			</File>
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- /dev/null
+++ b/src_FIX/SKP_Silk_HP_variable_cutoff_FIX.c
@@ -1,0 +1,118 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+#if HIGH_PASS_INPUT
+
+#define SKP_RADIANS_CONSTANT_Q19            1482    // 0.45f * 2.0f * 3.14159265359 / 1000
+#define SKP_LOG2_VARIABLE_HP_MIN_FREQ_Q7    809     // log(80) in Q7
+
+/* High-pass filter with cutoff frequency adaptation based on pitch lag statistics */
+void SKP_Silk_HP_variable_cutoff_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O  Encoder state FIX                           */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl,         /* I/O  Encoder control FIX                         */
+    SKP_int16                       *out,               /* O    high-pass filtered output signal            */
+    const SKP_int16                 *in                 /* I    input signal                                */
+)
+{
+    SKP_int   quality_Q15;
+    SKP_int32 B_Q28[ 3 ], A_Q28[ 2 ];
+    SKP_int32 Fc_Q19, r_Q28, r_Q22;
+    SKP_int32 pitch_freq_Hz_Q16, pitch_freq_log_Q7, delta_freq_Q7;
+
+    /*********************************************/
+    /* Estimate Low End of Pitch Frequency Range */
+    /*********************************************/
+    if( psEnc->sCmn.prev_sigtype == SIG_TYPE_VOICED ) {
+        /* difference, in log domain */
+        pitch_freq_Hz_Q16 = SKP_DIV32_16( SKP_LSHIFT( SKP_MUL( psEnc->sCmn.fs_kHz, 1000 ), 16 ), psEnc->sCmn.prevLag );
+        pitch_freq_log_Q7 = SKP_Silk_lin2log( pitch_freq_Hz_Q16 ) - ( 16 << 7 ); //0x70
+
+        /* adjustment based on quality */
+        quality_Q15 = psEncCtrl->input_quality_bands_Q15[ 0 ];
+        pitch_freq_log_Q7 = SKP_SUB32( pitch_freq_log_Q7, SKP_SMULWB( SKP_SMULWB( SKP_LSHIFT( quality_Q15, 2 ), quality_Q15 ), 
+            pitch_freq_log_Q7 - SKP_LOG2_VARIABLE_HP_MIN_FREQ_Q7 ) );
+        pitch_freq_log_Q7 = SKP_ADD32( pitch_freq_log_Q7, SKP_RSHIFT( 19661 - quality_Q15, 9 ) ); // 19661_Q15 = 0.6_Q0
+
+        //delta_freq = pitch_freq_log - psEnc->variable_HP_smth1;
+        delta_freq_Q7 = pitch_freq_log_Q7 - SKP_RSHIFT( psEnc->variable_HP_smth1_Q15, 8 );
+        if( delta_freq_Q7 < 0 ) {
+            /* less smoothing for decreasing pitch frequency, to track something close to the minimum */
+            delta_freq_Q7 = SKP_MUL( delta_freq_Q7, 3 );
+        }
+
+        /* limit delta, to reduce impact of outliers */
+        delta_freq_Q7 = SKP_LIMIT_32( delta_freq_Q7, -VARIABLE_HP_MAX_DELTA_FREQ_Q7, VARIABLE_HP_MAX_DELTA_FREQ_Q7 );
+
+        /* update smoother */
+        psEnc->variable_HP_smth1_Q15 = SKP_SMLAWB( psEnc->variable_HP_smth1_Q15, 
+            SKP_MUL( SKP_LSHIFT( psEnc->speech_activity_Q8, 1 ), delta_freq_Q7 ), VARIABLE_HP_SMTH_COEF1_Q16 );
+    }
+    /* second smoother */
+    psEnc->variable_HP_smth2_Q15 = SKP_SMLAWB( psEnc->variable_HP_smth2_Q15, 
+        psEnc->variable_HP_smth1_Q15 - psEnc->variable_HP_smth2_Q15, VARIABLE_HP_SMTH_COEF2_Q16 );
+
+    /* convert from log scale to Hertz */
+    psEncCtrl->pitch_freq_low_Hz = SKP_Silk_log2lin( SKP_RSHIFT( psEnc->variable_HP_smth2_Q15, 8 ) ); //pow( 2.0, psEnc->variable_HP_smth2 );
+
+    /* limit frequency range */
+    psEncCtrl->pitch_freq_low_Hz = SKP_LIMIT_32( psEncCtrl->pitch_freq_low_Hz, VARIABLE_HP_MIN_FREQ_Q0, VARIABLE_HP_MAX_FREQ_Q0 );
+
+    /********************************/
+    /* Compute Filter Coefficients  */
+    /********************************/
+    /* compute cut-off frequency, in radians */
+    //Fc_num   = (SKP_float)( 0.45f * 2.0f * 3.14159265359 * psEncCtrl->pitch_freq_low_Hz );
+    //Fc_denom = (SKP_float)( 1e3f * psEnc->sCmn.fs_kHz );
+    SKP_assert( psEncCtrl->pitch_freq_low_Hz <= SKP_int32_MAX / SKP_RADIANS_CONSTANT_Q19 );
+    Fc_Q19 = SKP_DIV32_16( SKP_SMULBB( SKP_RADIANS_CONSTANT_Q19, psEncCtrl->pitch_freq_low_Hz ), psEnc->sCmn.fs_kHz ); // range: 3704 - 27787, 11-15 bits
+    SKP_assert( Fc_Q19 >=  3704 );
+    SKP_assert( Fc_Q19 <= 27787 );
+
+    r_Q28 = ( 1 << 28 ) - SKP_MUL( 471, Fc_Q19 ); // 471_Q9 = 0.92_Q0, range: 255347779 to 266690872, 27-28 bits
+    SKP_assert( r_Q28 >= 255347779 );
+    SKP_assert( r_Q28 <= 266690872 );
+
+    /* b = r * [ 1; -2; 1 ]; */
+    /* a = [ 1; -2 * r * ( 1 - 0.5 * Fc^2 ); r^2 ]; */
+    B_Q28[ 0 ] = r_Q28;
+    B_Q28[ 1 ] = SKP_LSHIFT( -r_Q28, 1 );
+    B_Q28[ 2 ] = r_Q28;
+    
+    // -r * ( 2 - Fc * Fc );
+    r_Q22  = SKP_RSHIFT( r_Q28, 6 );
+    A_Q28[ 0 ] = SKP_SMULWW( r_Q22, SKP_SMULWW( Fc_Q19, Fc_Q19 ) - ( 2 << 22 ) );
+    A_Q28[ 1 ] = SKP_SMULWW( r_Q22, r_Q22 );
+
+    /********************************/
+    /* High-Pass Filter             */
+    /********************************/
+    SKP_Silk_biquad_alt( in, B_Q28, A_Q28, psEnc->sCmn.In_HP_State, out, psEnc->sCmn.frame_length );
+}
+
+#endif // HIGH_PASS_INPUT
--- /dev/null
+++ b/src_FIX/SKP_Silk_LTP_analysis_filter_FIX.c
@@ -1,0 +1,81 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+void SKP_Silk_LTP_analysis_filter_FIX(
+    SKP_int16       *LTP_res,                               /* O:   LTP residual signal of length MAX_NB_SUBFR * ( pre_length + subfr_length )  */
+    const SKP_int16 *x,                                     /* I:   Pointer to input signal with at least max( pitchL ) preceeding samples      */
+    const SKP_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ],/* I:   LTP_ORDER LTP coefficients for each MAX_NB_SUBFR subframe                   */
+    const SKP_int   pitchL[ MAX_NB_SUBFR ],                 /* I:   Pitch lag, one for each subframe                                            */
+    const SKP_int32 invGains_Q16[ MAX_NB_SUBFR ],           /* I:   Inverse quantization gains, one for each subframe                           */
+    const SKP_int   subfr_length,                           /* I:   Length of each subframe                                                     */
+    const SKP_int   nb_subfr,                               /* I:   Number of subframes                                                         */
+    const SKP_int   pre_length                              /* I:   Length of the preceeding samples starting at &x[0] for each subframe        */
+)
+{
+    const SKP_int16 *x_ptr, *x_lag_ptr;
+    SKP_int16   Btmp_Q14[ LTP_ORDER ];
+    SKP_int16   *LTP_res_ptr;
+    SKP_int     k, i, j;
+    SKP_int32   LTP_est;
+
+    x_ptr = x;
+    LTP_res_ptr = LTP_res;
+    for( k = 0; k < nb_subfr; k++ ) {
+
+        x_lag_ptr = x_ptr - pitchL[ k ];
+        for( i = 0; i < LTP_ORDER; i++ ) {
+            Btmp_Q14[ i ] = LTPCoef_Q14[ k * LTP_ORDER + i ];
+        }
+
+        /* LTP analysis FIR filter */
+        for( i = 0; i < subfr_length + pre_length; i++ ) {
+            LTP_res_ptr[ i ] = x_ptr[ i ];
+            
+            /* Long-term prediction */
+            LTP_est = SKP_SMULBB( x_lag_ptr[ LTP_ORDER / 2 ], Btmp_Q14[ 0 ] );
+            for( j = 1; j < LTP_ORDER; j++ ) {
+                LTP_est = SKP_SMLABB_ovflw( LTP_est, x_lag_ptr[ LTP_ORDER / 2 - j ], Btmp_Q14[ j ] );
+			}
+            LTP_est = SKP_RSHIFT_ROUND( LTP_est, 14 ); // round and -> Q0
+
+            /* Subtract long-term prediction */
+            LTP_res_ptr[ i ] = ( SKP_int16 )SKP_SAT16( ( SKP_int32 )x_ptr[ i ] - LTP_est );
+
+            /* Scale residual */
+            LTP_res_ptr[ i ] = SKP_SMULWB( invGains_Q16[ k ], LTP_res_ptr[ i ] );
+
+            x_lag_ptr++;
+        }
+
+        /* Update pointers */
+        LTP_res_ptr += subfr_length + pre_length; 
+        x_ptr       += subfr_length;
+    }
+}
+
--- /dev/null
+++ b/src_FIX/SKP_Silk_LTP_scale_ctrl_FIX.c
@@ -1,0 +1,81 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+#define NB_THRESHOLDS           11
+
+/* Table containing trained thresholds for LTP scaling */
+static const SKP_int16 LTPScaleThresholds_Q15[ NB_THRESHOLDS ] = 
+{
+    31129, 26214, 16384, 13107, 9830, 6554,
+     4915,  3276,  2621,  2458,    0
+};
+
+void SKP_Silk_LTP_scale_ctrl_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,     /* I/O  encoder state FIX                           */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl  /* I/O  encoder control FIX                         */
+)
+{
+    SKP_int round_loss, frames_per_packet;
+    SKP_int g_out_Q5, g_limit_Q15, thrld1_Q15, thrld2_Q15;
+
+    /* 1st order high-pass filter */
+    psEnc->HPLTPredCodGain_Q7 = SKP_max_int( psEncCtrl->LTPredCodGain_Q7 - psEnc->prevLTPredCodGain_Q7, 0 ) 
+        + SKP_RSHIFT_ROUND( psEnc->HPLTPredCodGain_Q7, 1 );
+    
+    psEnc->prevLTPredCodGain_Q7 = psEncCtrl->LTPredCodGain_Q7;
+
+    /* combine input and filtered input */
+    g_out_Q5    = SKP_RSHIFT_ROUND( SKP_RSHIFT( psEncCtrl->LTPredCodGain_Q7, 1 ) + SKP_RSHIFT( psEnc->HPLTPredCodGain_Q7, 1 ), 3 );
+    g_limit_Q15 = SKP_Silk_sigm_Q15( g_out_Q5 - ( 3 << 5 ) ); /* mulitplid with 0.5 */
+            
+    /* Default is minimum scaling */
+    psEncCtrl->sCmn.LTP_scaleIndex = 0;
+
+    /* Round the loss measure to whole pct */
+    round_loss = ( SKP_int )psEnc->sCmn.PacketLoss_perc;
+
+    /* Only scale if first frame in packet 0% */
+    if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) {
+        
+        frames_per_packet = SKP_DIV32_16( psEnc->sCmn.PacketSize_ms, SKP_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr ) );
+
+        round_loss += frames_per_packet - 1;
+        thrld1_Q15 = LTPScaleThresholds_Q15[ SKP_min_int( round_loss,     NB_THRESHOLDS - 1 ) ];
+        thrld2_Q15 = LTPScaleThresholds_Q15[ SKP_min_int( round_loss + 1, NB_THRESHOLDS - 1 ) ];
+    
+        if( g_limit_Q15 > thrld1_Q15 ) {
+            /* Maximum scaling */
+            psEncCtrl->sCmn.LTP_scaleIndex = 2;
+        } else if( g_limit_Q15 > thrld2_Q15 ) {
+            /* Medium scaling */
+            psEncCtrl->sCmn.LTP_scaleIndex = 1;
+        }
+    }
+    psEncCtrl->LTP_scale_Q14 = SKP_Silk_LTPScales_table_Q14[ psEncCtrl->sCmn.LTP_scaleIndex ];
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_NLSF_MSVQ_encode_FIX.c
@@ -1,0 +1,250 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+/***********************/
+/* NLSF vector encoder */
+/***********************/
+void SKP_Silk_NLSF_MSVQ_encode_FIX(
+          SKP_int                   *NLSFIndices,           /* O    Codebook path vector [ CB_STAGES ]      */
+          SKP_int                   *pNLSF_Q15,             /* I/O  Quantized NLSF vector [ LPC_ORDER ]     */
+    const SKP_Silk_NLSF_CB_struct   *psNLSF_CB,             /* I    Codebook object                         */
+    const SKP_int                   *pNLSF_q_Q15_prev,      /* I    Prev. quantized NLSF vector [LPC_ORDER] */
+    const SKP_int                   *pW_Q6,                 /* I    NLSF weight vector [ LPC_ORDER ]        */
+    const SKP_int                   NLSF_mu_Q15,            /* I    Rate weight for the RD optimization     */
+    const SKP_int                   NLSF_mu_fluc_red_Q16,   /* I    Fluctuation reduction error weight      */
+    const SKP_int                   NLSF_MSVQ_Survivors,    /* I    Max survivors from each stage           */
+    const SKP_int                   LPC_order,              /* I    LPC order                               */
+    const SKP_int                   deactivate_fluc_red     /* I    Deactivate fluctuation reduction        */
+)
+{
+    SKP_int     i, s, k, cur_survivors = 0, prev_survivors, input_index, cb_index, bestIndex;
+    SKP_int32   rateDistThreshold_Q18;
+    SKP_int     pNLSF_in_Q15[ MAX_LPC_ORDER ];
+#if( NLSF_MSVQ_FLUCTUATION_REDUCTION == 1 )
+    SKP_int32   se_Q15, wsse_Q20, bestRateDist_Q20;
+#endif
+
+#if( LOW_COMPLEXITY_ONLY == 1 )
+    SKP_int32   pRateDist_Q18[  NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED_LC_MODE ];
+    SKP_int32   pRate_Q5[       MAX_NLSF_MSVQ_SURVIVORS_LC_MODE ];
+    SKP_int32   pRate_new_Q5[   MAX_NLSF_MSVQ_SURVIVORS_LC_MODE ];
+    SKP_int     pTempIndices[   MAX_NLSF_MSVQ_SURVIVORS_LC_MODE ];
+    SKP_int     pPath[          MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * NLSF_MSVQ_MAX_CB_STAGES ];
+    SKP_int     pPath_new[      MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * NLSF_MSVQ_MAX_CB_STAGES ];
+    SKP_int     pRes_Q15[       MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * MAX_LPC_ORDER ];
+    SKP_int     pRes_new_Q15[   MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * MAX_LPC_ORDER ];
+#else
+    SKP_int32   pRateDist_Q18[  NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED ];
+    SKP_int32   pRate_Q5[       MAX_NLSF_MSVQ_SURVIVORS ];
+    SKP_int32   pRate_new_Q5[   MAX_NLSF_MSVQ_SURVIVORS ];
+    SKP_int     pTempIndices[   MAX_NLSF_MSVQ_SURVIVORS ];
+    SKP_int     pPath[          MAX_NLSF_MSVQ_SURVIVORS * NLSF_MSVQ_MAX_CB_STAGES ];
+    SKP_int     pPath_new[      MAX_NLSF_MSVQ_SURVIVORS * NLSF_MSVQ_MAX_CB_STAGES ];
+    SKP_int     pRes_Q15[       MAX_NLSF_MSVQ_SURVIVORS * MAX_LPC_ORDER ];
+    SKP_int     pRes_new_Q15[   MAX_NLSF_MSVQ_SURVIVORS * MAX_LPC_ORDER ];
+#endif
+
+    const SKP_int   *pConstInt;
+          SKP_int   *pInt;
+    const SKP_int16 *pCB_element;
+    const SKP_Silk_NLSF_CBS *pCurrentCBStage;
+
+    SKP_assert( NLSF_MSVQ_Survivors <= MAX_NLSF_MSVQ_SURVIVORS );
+    SKP_assert( ( LOW_COMPLEXITY_ONLY == 0 ) || ( NLSF_MSVQ_Survivors <= MAX_NLSF_MSVQ_SURVIVORS_LC_MODE ) );
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+    /* Use sigtype.dat to seperate into signal types */
+    DEBUG_STORE_DATA( NLSF.dat,    pNLSF_Q15,    LPC_order * sizeof( SKP_int   ) );
+    DEBUG_STORE_DATA( WNLSF.dat,   pW_Q6,        LPC_order * sizeof( SKP_int   ) );
+    DEBUG_STORE_DATA( NLSF_mu.dat, &NLSF_mu_Q15,             sizeof( SKP_int32 ) );
+#endif
+
+
+    /* Copy the input vector */
+    SKP_memcpy( pNLSF_in_Q15, pNLSF_Q15, LPC_order * sizeof( SKP_int ) );
+
+    /****************************************************/
+    /* Tree search for the multi-stage vector quantizer */
+    /****************************************************/
+
+    /* Clear accumulated rates */
+    SKP_memset( pRate_Q5, 0, NLSF_MSVQ_Survivors * sizeof( SKP_int32 ) );
+    
+    /* Copy NLSFs into residual signal vector */
+    for( i = 0; i < LPC_order; i++ ) {
+        pRes_Q15[ i ] = pNLSF_Q15[ i ];
+    }
+
+    /* Set first stage values */
+    prev_survivors = 1;
+
+    /* Loop over all stages */
+    for( s = 0; s < psNLSF_CB->nStages; s++ ) {
+
+        /* Set a pointer to the current stage codebook */
+        pCurrentCBStage = &psNLSF_CB->CBStages[ s ];
+
+        /* Calculate the number of survivors in the current stage */
+        cur_survivors = SKP_min_32( NLSF_MSVQ_Survivors, SKP_SMULBB( prev_survivors, pCurrentCBStage->nVectors ) );
+
+#if( NLSF_MSVQ_FLUCTUATION_REDUCTION == 0 )
+        /* Find a single best survivor in the last stage, if we */
+        /* do not need candidates for fluctuation reduction     */
+        if( s == psNLSF_CB->nStages - 1 ) {
+            cur_survivors = 1;
+        }
+#endif
+
+        /* Nearest neighbor clustering for multiple input data vectors */
+        SKP_Silk_NLSF_VQ_rate_distortion_FIX( pRateDist_Q18, pCurrentCBStage, pRes_Q15, pW_Q6, 
+            pRate_Q5, NLSF_mu_Q15, prev_survivors, LPC_order );
+
+        /* Sort the rate-distortion errors */
+        SKP_Silk_insertion_sort_increasing( pRateDist_Q18, pTempIndices, 
+            prev_survivors * pCurrentCBStage->nVectors, cur_survivors );
+
+        /* Discard survivors with rate-distortion values too far above the best one */
+        if( pRateDist_Q18[ 0 ] < SKP_int32_MAX / NLSF_MSVQ_SURV_MAX_REL_RD ) {
+            rateDistThreshold_Q18 = SKP_MUL( NLSF_MSVQ_SURV_MAX_REL_RD, pRateDist_Q18[ 0 ] );
+            while( pRateDist_Q18[ cur_survivors - 1 ] > rateDistThreshold_Q18 && cur_survivors > 1 ) {
+                cur_survivors--;
+            }
+        }
+        /* Update accumulated codebook contributions for the 'cur_survivors' best codebook indices */
+        for( k = 0; k < cur_survivors; k++ ) { 
+            if( s > 0 ) {
+                /* Find the indices of the input and the codebook vector */
+                if( pCurrentCBStage->nVectors == 8 ) {
+                    input_index = SKP_RSHIFT( pTempIndices[ k ], 3 );
+                    cb_index    = pTempIndices[ k ] & 7;
+                } else {
+                    input_index = SKP_DIV32_16( pTempIndices[ k ], pCurrentCBStage->nVectors );  
+                    cb_index    = pTempIndices[ k ] - SKP_SMULBB( input_index, pCurrentCBStage->nVectors );
+                }
+            } else {
+                /* Find the indices of the input and the codebook vector */
+                input_index = 0;
+                cb_index    = pTempIndices[ k ];
+            }
+
+            /* Subtract new contribution from the previous residual vector for each of 'cur_survivors' */
+            pConstInt   = &pRes_Q15[ SKP_SMULBB( input_index, LPC_order ) ];
+            pCB_element = &pCurrentCBStage->CB_NLSF_Q15[ SKP_SMULBB( cb_index, LPC_order ) ];
+            pInt        = &pRes_new_Q15[ SKP_SMULBB( k, LPC_order ) ];
+            for( i = 0; i < LPC_order; i++ ) {
+                pInt[ i ] = pConstInt[ i ] - ( SKP_int )pCB_element[ i ];
+            }
+
+            /* Update accumulated rate for stage 1 to the current */
+            pRate_new_Q5[ k ] = pRate_Q5[ input_index ] + pCurrentCBStage->Rates_Q5[ cb_index ];
+
+            /* Copy paths from previous matrix, starting with the best path */
+            pConstInt = &pPath[ SKP_SMULBB( input_index, psNLSF_CB->nStages ) ];
+            pInt      = &pPath_new[ SKP_SMULBB( k, psNLSF_CB->nStages ) ];
+            for( i = 0; i < s; i++ ) {
+                pInt[ i ] = pConstInt[ i ];
+            }
+            /* Write the current stage indices for the 'cur_survivors' to the best path matrix */
+            pInt[ s ] = cb_index;
+        }
+
+        if( s < psNLSF_CB->nStages - 1 ) {
+            /* Copy NLSF residual matrix for next stage */
+            SKP_memcpy( pRes_Q15, pRes_new_Q15, SKP_SMULBB( cur_survivors, LPC_order ) * sizeof( SKP_int ) );
+
+            /* Copy rate vector for next stage */
+            SKP_memcpy( pRate_Q5, pRate_new_Q5, cur_survivors * sizeof( SKP_int32 ) );
+
+            /* Copy best path matrix for next stage */
+            SKP_memcpy( pPath, pPath_new, SKP_SMULBB( cur_survivors, psNLSF_CB->nStages ) * sizeof( SKP_int ) );
+        }
+
+        prev_survivors = cur_survivors;
+    }
+
+    /* (Preliminary) index of the best survivor, later to be decoded */
+    bestIndex = 0;
+
+#if( NLSF_MSVQ_FLUCTUATION_REDUCTION == 1 )
+    /******************************/
+    /* NLSF fluctuation reduction */
+    /******************************/
+    if( deactivate_fluc_red != 1 ) {
+    
+        /* Search among all survivors, now taking also weighted fluctuation errors into account */
+        bestRateDist_Q20 = SKP_int32_MAX;
+        for( s = 0; s < cur_survivors; s++ ) {
+            /* Decode survivor to compare with previous quantized NLSF vector */
+            SKP_Silk_NLSF_MSVQ_decode( pNLSF_Q15, psNLSF_CB, &pPath_new[ SKP_SMULBB( s, psNLSF_CB->nStages ) ], LPC_order );
+
+            /* Compare decoded NLSF vector with the previously quantized vector */ 
+            wsse_Q20 = 0;
+            for( i = 0; i < LPC_order; i += 2 ) {
+                /* Compute weighted squared quantization error for index i */
+                se_Q15 = pNLSF_Q15[ i ] - pNLSF_q_Q15_prev[ i ]; // range: [ -32767 : 32767 ]
+                wsse_Q20 = SKP_SMLAWB( wsse_Q20, SKP_SMULBB( se_Q15, se_Q15 ), pW_Q6[ i ] );
+
+                /* Compute weighted squared quantization error for index i + 1 */
+                se_Q15 = pNLSF_Q15[ i + 1 ] - pNLSF_q_Q15_prev[ i + 1 ]; // range: [ -32767 : 32767 ]
+                wsse_Q20 = SKP_SMLAWB( wsse_Q20, SKP_SMULBB( se_Q15, se_Q15 ), pW_Q6[ i + 1 ] );
+            }
+            SKP_assert( wsse_Q20 >= 0 );
+
+            /* Add the fluctuation reduction penalty to the rate distortion error */
+            wsse_Q20 = SKP_ADD_POS_SAT32( pRateDist_Q18[ s ], SKP_SMULWB( wsse_Q20, NLSF_mu_fluc_red_Q16 ) );
+
+            /* Keep index of best survivor */
+            if( wsse_Q20 < bestRateDist_Q20 ) {
+                bestRateDist_Q20 = wsse_Q20;
+                bestIndex = s;
+            }
+        }
+    }
+#endif
+
+    /* Copy best path to output argument */
+    SKP_memcpy( NLSFIndices, &pPath_new[ SKP_SMULBB( bestIndex, psNLSF_CB->nStages ) ], psNLSF_CB->nStages * sizeof( SKP_int ) );
+
+    /* Decode and stabilize the best survivor */
+    SKP_Silk_NLSF_MSVQ_decode( pNLSF_Q15, psNLSF_CB, NLSFIndices, LPC_order );
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+    {
+        SKP_float rateBPF_LSF;
+        SKP_float NLSF_coef;
+
+        rateBPF_LSF = (SKP_float)pRate_new_Q5[ bestIndex ] / 32.0f; // Q5 -> Q0
+        DEBUG_STORE_DATA( rateBPF_LSF.dat, &rateBPF_LSF, sizeof( SKP_float ));
+        for( i = 0; i < LPC_order; i++ ) {
+            NLSF_coef = ( (SKP_float)pNLSF_Q15[ i ] ) * ( 1.0f / 32768.0f );
+            DEBUG_STORE_DATA( NLSFq.dat, &NLSF_coef, sizeof( SKP_float ) );
+        }
+    }
+#endif
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_NLSF_VQ_rate_distortion_FIX.c
@@ -1,0 +1,61 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+/* Rate-Distortion calculations for multiple input data vectors */
+void SKP_Silk_NLSF_VQ_rate_distortion_FIX(
+    SKP_int32                       *pRD_Q20,           /* O    Rate-distortion values [psNLSF_CBS->nVectors*N] */
+    const SKP_Silk_NLSF_CBS         *psNLSF_CBS,        /* I    NLSF codebook stage struct                      */
+    const SKP_int                   *in_Q15,            /* I    Input vectors to be quantized                   */
+    const SKP_int                   *w_Q6,              /* I    Weight vector                                   */
+    const SKP_int32                 *rate_acc_Q5,       /* I    Accumulated rates from previous stage           */
+    const SKP_int                   mu_Q15,             /* I    Weight between weighted error and rate          */
+    const SKP_int                   N,                  /* I    Number of input vectors to be quantized         */
+    const SKP_int                   LPC_order           /* I    LPC order                                       */
+)
+{
+    SKP_int   i, n;
+    SKP_int32 *pRD_vec_Q20;
+
+    /* Compute weighted quantization errors for all input vectors over one codebook stage */
+    SKP_Silk_NLSF_VQ_sum_error_FIX( pRD_Q20, in_Q15, w_Q6, psNLSF_CBS->CB_NLSF_Q15, 
+        N, psNLSF_CBS->nVectors, LPC_order );
+
+    /* Loop over input vectors */
+    pRD_vec_Q20 = pRD_Q20;
+    for( n = 0; n < N; n++ ) {
+        /* Add rate cost to error for each codebook vector */
+        for( i = 0; i < psNLSF_CBS->nVectors; i++ ) {
+            SKP_assert( rate_acc_Q5[ n ] + psNLSF_CBS->Rates_Q5[ i ] >= 0 );
+            SKP_assert( rate_acc_Q5[ n ] + psNLSF_CBS->Rates_Q5[ i ] <= SKP_int16_MAX );
+            pRD_vec_Q20[ i ] = SKP_SMLABB( pRD_vec_Q20[ i ], rate_acc_Q5[ n ] + psNLSF_CBS->Rates_Q5[ i ], mu_Q15 );
+            SKP_assert( pRD_vec_Q20[ i ] >= 0 );
+        }
+        pRD_vec_Q20 += psNLSF_CBS->nVectors;
+    }
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_NLSF_VQ_sum_error_FIX.c
@@ -1,0 +1,79 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+/* Compute weighted quantization errors for an LPC_order element input vector, over one codebook stage */
+void SKP_Silk_NLSF_VQ_sum_error_FIX(
+    SKP_int32                       *err_Q20,           /* O    Weighted quantization errors  [N*K]         */
+    const SKP_int                   *in_Q15,            /* I    Input vectors to be quantized [N*LPC_order] */
+    const SKP_int                   *w_Q6,              /* I    Weighting vectors             [N*LPC_order] */
+    const SKP_int16                 *pCB_Q15,           /* I    Codebook vectors              [K*LPC_order] */
+    const SKP_int                   N,                  /* I    Number of input vectors                     */
+    const SKP_int                   K,                  /* I    Number of codebook vectors                  */
+    const SKP_int                   LPC_order           /* I    Number of LPCs                              */
+)
+{
+    SKP_int         i, n, m;
+    SKP_int32       diff_Q15, sum_error, Wtmp_Q6;
+    SKP_int32       Wcpy_Q6[ MAX_LPC_ORDER / 2 ];
+    const SKP_int16 *cb_vec_Q15;
+
+    SKP_assert( LPC_order <= 16 );
+    SKP_assert( ( LPC_order & 1 ) == 0 );
+
+    /* Copy to local stack and pack two weights per int32 */
+    for( m = 0; m < SKP_RSHIFT( LPC_order, 1 ); m++ ) {
+        Wcpy_Q6[ m ] = w_Q6[ 2 * m ] | SKP_LSHIFT( ( SKP_int32 )w_Q6[ 2 * m + 1 ], 16 );
+    }
+
+    /* Loop over input vectors */
+    for( n = 0; n < N; n++ ) {
+        /* Loop over codebook */
+        cb_vec_Q15 = pCB_Q15;
+        for( i = 0; i < K; i++ ) {
+            sum_error = 0;
+            for( m = 0; m < LPC_order; m += 2 ) {
+                /* Get two weights packed in an int32 */
+                Wtmp_Q6 = Wcpy_Q6[ SKP_RSHIFT( m, 1 ) ];
+
+                /* Compute weighted squared quantization error for index m */
+                diff_Q15 = in_Q15[ m ] - *cb_vec_Q15++; // range: [ -32767 : 32767 ]
+                sum_error = SKP_SMLAWB( sum_error, SKP_SMULBB( diff_Q15, diff_Q15 ), Wtmp_Q6 );
+
+                /* Compute weighted squared quantization error for index m + 1 */
+                diff_Q15 = in_Q15[m + 1] - *cb_vec_Q15++; // range: [ -32767 : 32767 ]
+                sum_error = SKP_SMLAWT( sum_error, SKP_SMULBB( diff_Q15, diff_Q15 ), Wtmp_Q6 );
+            }
+            SKP_assert( sum_error >= 0 );
+            err_Q20[ i ] = sum_error;
+        }
+        err_Q20 += K;
+        in_Q15 += LPC_order;
+    }
+}
+
--- /dev/null
+++ b/src_FIX/SKP_Silk_VQ_nearest_neighbor_FIX.c
@@ -1,0 +1,107 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+/* Entropy constrained MATRIX-weighted VQ, hard-coded to 5-element vectors, for a single input data vector */
+void SKP_Silk_VQ_WMat_EC_FIX(
+    SKP_int                         *ind,               /* O    index of best codebook vector               */
+    SKP_int32                       *rate_dist_Q14,     /* O    best weighted quantization error + mu * rate*/
+    const SKP_int16                 *in_Q14,            /* I    input vector to be quantized                */
+    const SKP_int32                 *W_Q18,             /* I    weighting matrix                            */
+    const SKP_int16                 *cb_Q14,            /* I    codebook                                    */
+    const SKP_int16                 *cl_Q6,             /* I    code length for each codebook vector        */
+    const SKP_int                   mu_Q8,              /* I    tradeoff between weighted error and rate    */
+    SKP_int                         L                   /* I    number of vectors in codebook               */
+)
+{
+    SKP_int   k;
+    const SKP_int16 *cb_row_Q14;
+    SKP_int16 diff_Q14[ 5 ];
+    SKP_int32 sum1_Q14, sum2_Q16;
+
+    /* Loop over codebook */
+    *rate_dist_Q14 = SKP_int32_MAX;
+    cb_row_Q14 = cb_Q14;
+    for( k = 0; k < L; k++ ) {
+        diff_Q14[ 0 ] = in_Q14[ 0 ] - cb_row_Q14[ 0 ];
+        diff_Q14[ 1 ] = in_Q14[ 1 ] - cb_row_Q14[ 1 ];
+        diff_Q14[ 2 ] = in_Q14[ 2 ] - cb_row_Q14[ 2 ];
+        diff_Q14[ 3 ] = in_Q14[ 3 ] - cb_row_Q14[ 3 ];
+        diff_Q14[ 4 ] = in_Q14[ 4 ] - cb_row_Q14[ 4 ];
+
+        /* Weighted rate */
+        sum1_Q14 = SKP_SMULBB( mu_Q8, cl_Q6[ k ] );
+
+        SKP_assert( sum1_Q14 >= 0 );
+
+        /* first row of W_Q18 */
+        sum2_Q16 = SKP_SMULWB(           W_Q18[  1 ], diff_Q14[ 1 ] );
+        sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[  2 ], diff_Q14[ 2 ] );
+        sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[  3 ], diff_Q14[ 3 ] );
+        sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[  4 ], diff_Q14[ 4 ] );
+        sum2_Q16 = SKP_LSHIFT( sum2_Q16, 1 );
+        sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[  0 ], diff_Q14[ 0 ] );
+        sum1_Q14 = SKP_SMLAWB( sum1_Q14, sum2_Q16,    diff_Q14[ 0 ] );
+
+        /* second row of W_Q18 */
+        sum2_Q16 = SKP_SMULWB(           W_Q18[  7 ], diff_Q14[ 2 ] ); 
+        sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[  8 ], diff_Q14[ 3 ] );
+        sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[  9 ], diff_Q14[ 4 ] );
+        sum2_Q16 = SKP_LSHIFT( sum2_Q16, 1 );
+        sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[  6 ], diff_Q14[ 1 ] );
+        sum1_Q14 = SKP_SMLAWB( sum1_Q14, sum2_Q16,    diff_Q14[ 1 ] );
+
+        /* third row of W_Q18 */
+        sum2_Q16 = SKP_SMULWB(           W_Q18[ 13 ], diff_Q14[ 3 ] ); 
+        sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[ 14 ], diff_Q14[ 4 ] );
+        sum2_Q16 = SKP_LSHIFT( sum2_Q16, 1 );
+        sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[ 12 ], diff_Q14[ 2 ] );
+        sum1_Q14 = SKP_SMLAWB( sum1_Q14, sum2_Q16,    diff_Q14[ 2 ] );
+
+        /* fourth row of W_Q18 */
+        sum2_Q16 = SKP_SMULWB(           W_Q18[ 19 ], diff_Q14[ 4 ] ); 
+        sum2_Q16 = SKP_LSHIFT( sum2_Q16, 1 );
+        sum2_Q16 = SKP_SMLAWB( sum2_Q16, W_Q18[ 18 ], diff_Q14[ 3 ] );
+        sum1_Q14 = SKP_SMLAWB( sum1_Q14, sum2_Q16,    diff_Q14[ 3 ] );
+
+        /* last row of W_Q18 */
+        sum2_Q16 = SKP_SMULWB(           W_Q18[ 24 ], diff_Q14[ 4 ] ); 
+        sum1_Q14 = SKP_SMLAWB( sum1_Q14, sum2_Q16,    diff_Q14[ 4 ] );
+
+        SKP_assert( sum1_Q14 >= 0 );
+
+        /* find best */
+        if( sum1_Q14 < *rate_dist_Q14 ) {
+            *rate_dist_Q14 = sum1_Q14;
+            *ind = k;
+        }
+
+        /* Go to next cbk vector */
+        cb_row_Q14 += LTP_ORDER;
+    }
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_control_codec_FIX.c
@@ -1,0 +1,583 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+/* ToDo: Move the functions belowto common to be able to use them in FLP control codec also */
+SKP_INLINE SKP_int SKP_Silk_setup_resamplers(
+    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O                      */
+    SKP_int                         API_fs_Hz,          /* I                        */
+    SKP_int                         fs_kHz              /* I                        */
+);
+
+SKP_INLINE SKP_int SKP_Silk_setup_packetsize(
+    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O                      */
+    SKP_int                         PacketSize_ms,      /* I                        */
+    SKP_int                         fs_kHz              /* I                        */
+);
+
+SKP_INLINE SKP_int SKP_Silk_setup_fs(
+    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O                      */
+    SKP_int                         fs_kHz              /* I                        */
+);
+
+SKP_INLINE SKP_int SKP_Silk_setup_complexity(
+    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O                      */
+    SKP_int                         Complexity          /* I                        */
+);
+
+SKP_INLINE SKP_int SKP_Silk_setup_rate(
+    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O                      */
+    SKP_int                         TargetRate_bps      /* I                        */
+);
+
+SKP_INLINE SKP_int SKP_Silk_setup_LBRR(
+    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O                      */
+    SKP_int                         INBandFEC_enabled   /* I                        */
+);
+
+/* Control encoder SNR */
+SKP_int SKP_Silk_control_encoder_FIX( 
+    SKP_Silk_encoder_state_FIX  *psEnc,             /* I/O  Pointer to Silk encoder state                   */
+    const SKP_int32             API_fs_Hz,          /* I    External (API) sampling rate (Hz)               */
+    const SKP_int               max_internal_fs_kHz,/* I    Maximum internal sampling rate (kHz)            */
+    const SKP_int               PacketSize_ms,      /* I    Packet length (ms)                              */
+    SKP_int32                   TargetRate_bps,     /* I    Target max bitrate (bps) (used if SNR_dB == 0)  */
+    const SKP_int               PacketLoss_perc,    /* I    Packet loss rate (in percent)                   */
+    const SKP_int               INBandFEC_enabled,  /* I    Enable (1) / disable (0) inband FEC             */
+    const SKP_int               DTX_enabled,        /* I    Enable / disable DTX                            */
+    const SKP_int               InputFramesize_ms,  /* I    Inputframe in ms                                */
+    const SKP_int               Complexity          /* I    Complexity (0->low; 1->medium; 2->high)         */
+)
+{
+    SKP_int   fs_kHz, ret = 0;
+
+    /* State machine for the SWB/WB switching */
+    fs_kHz = psEnc->sCmn.fs_kHz;
+    
+    /* Only switch during low speech activity, when no frames are sitting in the payload buffer */
+    if( API_fs_Hz == 8000 || fs_kHz == 0 || API_fs_Hz < SKP_SMULBB( fs_kHz, 1000 ) || fs_kHz > max_internal_fs_kHz ) {
+        /* Switching is not possible, encoder just initialized, internal mode higher than external, */
+        /* or internal mode higher than maximum allowed internal mode                               */
+        fs_kHz = SKP_min( SKP_DIV32_16( API_fs_Hz, 1000 ), max_internal_fs_kHz );
+    } else {
+        /* Accumulate the difference between the target rate and limit for switching down */
+        psEnc->sCmn.bitrateDiff += SKP_MUL( InputFramesize_ms, TargetRate_bps - psEnc->sCmn.bitrate_threshold_down );
+        psEnc->sCmn.bitrateDiff  = SKP_min( psEnc->sCmn.bitrateDiff, 0 );
+
+        if( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) { /* Low speech activity and payload buffer empty */
+            /* Check if we should switch down */
+#if SWITCH_TRANSITION_FILTERING 
+            if( ( psEnc->sCmn.sLP.transition_frame_no == 0 ) &&                         /* Transition phase not active */
+                ( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ||              /* Bitrate threshold is met */
+                ( psEnc->sCmn.sSWBdetect.WB_detected * psEnc->sCmn.fs_kHz == 24 ) ) ) { /* Forced down-switching due to WB input */
+                psEnc->sCmn.sLP.transition_frame_no = 1;                                /* Begin transition phase */
+                psEnc->sCmn.sLP.mode                = 0;                                /* Switch down */
+            } else if( 
+                ( psEnc->sCmn.sLP.transition_frame_no >= TRANSITION_FRAMES_DOWN ) &&    /* Transition phase complete */
+                ( psEnc->sCmn.sLP.mode == 0 ) ) {                                       /* Ready to switch down */
+                psEnc->sCmn.sLP.transition_frame_no = 0;                                /* Ready for new transition phase */
+#else
+            if( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ) {               /* Bitrate threshold is met */ 
+#endif            
+                psEnc->sCmn.bitrateDiff = 0;
+
+                /* Switch to a lower sample frequency */
+                if( psEnc->sCmn.fs_kHz == 24 ) {
+                    fs_kHz = 16;
+                } else if( psEnc->sCmn.fs_kHz == 16 ) {
+                    fs_kHz = 12;
+                } else {
+                    SKP_assert( psEnc->sCmn.fs_kHz == 12 );
+                    fs_kHz = 8;
+                }
+            }
+
+            /* Check if we should switch up */
+            if( ( ( SKP_SMULBB( psEnc->sCmn.fs_kHz, 1000 ) < API_fs_Hz ) &&
+                ( TargetRate_bps >= psEnc->sCmn.bitrate_threshold_up ) && 
+                ( psEnc->sCmn.sSWBdetect.WB_detected * psEnc->sCmn.fs_kHz != 16 ) ) && 
+                ( ( psEnc->sCmn.fs_kHz == 16 ) && ( max_internal_fs_kHz >= 24 ) || 
+                  ( psEnc->sCmn.fs_kHz == 12 ) && ( max_internal_fs_kHz >= 16 ) ||
+                  ( psEnc->sCmn.fs_kHz ==  8 ) && ( max_internal_fs_kHz >= 12 ) ) 
+#if SWITCH_TRANSITION_FILTERING
+                  && ( psEnc->sCmn.sLP.transition_frame_no == 0 ) ) { /* No transition phase running, ready to switch */
+                    psEnc->sCmn.sLP.mode = 1; /* Switch up */
+#else
+                ) {
+#endif
+                psEnc->sCmn.bitrateDiff = 0;
+
+                /* Switch to a higher sample frequency */
+                if( psEnc->sCmn.fs_kHz == 8 ) {
+                    fs_kHz = 12;
+                } else if( psEnc->sCmn.fs_kHz == 12 ) {
+                    fs_kHz = 16;
+                } else {
+                    SKP_assert( psEnc->sCmn.fs_kHz == 16 );
+                    fs_kHz = 24;
+                } 
+            }
+        }
+    }
+
+#if SWITCH_TRANSITION_FILTERING
+    /* After switching up, stop transition filter during speech inactivity */
+    if( ( psEnc->sCmn.sLP.mode == 1 ) &&
+        ( psEnc->sCmn.sLP.transition_frame_no >= TRANSITION_FRAMES_UP ) && 
+        ( psEnc->speech_activity_Q8 < 128 ) && 
+        ( psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) {
+        
+        psEnc->sCmn.sLP.transition_frame_no = 0;
+
+        /* Reset transition filter state */
+        SKP_memset( psEnc->sCmn.sLP.In_LP_State, 0, 2 * sizeof( SKP_int32 ) );
+    }
+#endif
+
+#ifdef FORCE_FS_KHZ
+    SKP_assert( FORCE_FS_KHZ == 8 || FORCE_FS_KHZ == 12 || FORCE_FS_KHZ == 16 || FORCE_FS_KHZ == 24 );
+    if( psEnc->sCmn.fs_kHz != 0 ) {
+        /* Force except during init */
+        fs_kHz = FORCE_FS_KHZ;
+    }
+#endif
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+    DEBUG_STORE_DATA( bitrate.dat,  &TargetRate_bps,          1 * sizeof( SKP_int32 ) ); 
+    DEBUG_STORE_DATA( fs.dat,       &fs_kHz,                  1 * sizeof( SKP_int32 ) ); 
+    DEBUG_STORE_DATA( diff.dat,     &psEnc->sCmn.bitrateDiff, 1 * sizeof( SKP_int32 ) ); 
+    DEBUG_STORE_DATA( lashape.dat,  &psEnc->sCmn.la_shape,    1 * sizeof( SKP_int32 ) ); 
+#endif
+    /********************************************/
+    /* Prepare resampler and buffered data      */    
+    /********************************************/
+    SKP_Silk_setup_resamplers( psEnc, API_fs_Hz, fs_kHz );
+
+    /********************************************/
+    /* Set packet size                          */
+    /********************************************/
+    ret += SKP_Silk_setup_packetsize( psEnc, PacketSize_ms, fs_kHz );
+
+    /********************************************/
+    /* Set internal sampling frequency          */
+    /********************************************/
+    ret += SKP_Silk_setup_fs( psEnc, fs_kHz );
+
+    /********************************************/
+    /* Set encoding complexity                  */
+    /********************************************/
+    ret += SKP_Silk_setup_complexity( psEnc, Complexity );
+
+    /********************************************/
+    /* Set bitrate/coding quality               */
+    /********************************************/
+    ret += SKP_Silk_setup_rate( psEnc, TargetRate_bps );
+
+    /********************************************/
+    /* Set packet loss rate measured by farend  */
+    /********************************************/
+    if( ( PacketLoss_perc < 0 ) || ( PacketLoss_perc > 100 ) ) {
+        ret = SKP_SILK_ENC_INVALID_LOSS_RATE;
+    }
+    psEnc->sCmn.PacketLoss_perc = PacketLoss_perc;
+
+    /********************************************/
+    /* Set LBRR usage                           */
+    /********************************************/
+    ret += SKP_Silk_setup_LBRR( psEnc, INBandFEC_enabled );
+
+    /********************************************/
+    /* Set DTX mode                             */
+    /********************************************/
+    if( DTX_enabled < 0 || DTX_enabled > 1 ) {
+        ret = SKP_SILK_ENC_INVALID_DTX_SETTING;
+    }
+    psEnc->sCmn.useDTX = DTX_enabled;
+
+    return ret;
+}
+
+/* Control low bitrate redundancy usage */
+void SKP_Silk_LBRR_ctrl_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,     /* I/O  encoder state                               */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl  /* I/O  encoder control                             */
+)
+{
+    SKP_int LBRR_usage;
+
+    if( psEnc->sCmn.LBRR_enabled ) {
+        /* Control LBRR */
+
+        /* Usage Control based on sensitivity and packet loss caracteristics */
+        /* For now only enable adding to next for active frames. Make more complex later */
+        LBRR_usage = SKP_SILK_NO_LBRR;
+        if( psEnc->speech_activity_Q8 > LBRR_SPEECH_ACTIVITY_THRES_Q8 && psEnc->sCmn.PacketLoss_perc > LBRR_LOSS_THRES ) { // nb! maybe multiply loss prob and speech activity 
+            LBRR_usage = SKP_SILK_ADD_LBRR_TO_PLUS1;
+        }
+        psEncCtrl->sCmn.LBRR_usage = LBRR_usage;
+    } else {
+        psEncCtrl->sCmn.LBRR_usage = SKP_SILK_NO_LBRR;
+    }
+}
+
+SKP_INLINE SKP_int SKP_Silk_setup_packetsize(
+    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O                      */
+    SKP_int                         PacketSize_ms,      /* I                        */
+    SKP_int                         fs_kHz              /* I                        */
+)
+{
+    SKP_int ret = SKP_SILK_NO_ERROR;
+    if( ( PacketSize_ms !=  10 ) &&
+        ( PacketSize_ms !=  20 ) &&
+        ( PacketSize_ms !=  40 ) && 
+        ( PacketSize_ms !=  60 ) && 
+        ( PacketSize_ms !=  80 ) && 
+        ( PacketSize_ms != 100 ) ) {
+        ret = SKP_SILK_ENC_PACKET_SIZE_NOT_SUPPORTED;
+    } else {
+        if( PacketSize_ms != psEnc->sCmn.PacketSize_ms ) {
+            if( PacketSize_ms == 10 ) {
+                if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) {
+                    /* Only allowed when the payload buffer is empty */
+                    psEnc->sCmn.nb_subfr      = MAX_NB_SUBFR >> 1;
+                    psEnc->sCmn.frame_length  = SKP_SMULBB( psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr );
+                    psEnc->sCmn.PacketSize_ms = PacketSize_ms;
+                    psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS_2_SF, fs_kHz );
+                    /* Packet length changes. Reset LBRR buffer */
+                    SKP_Silk_LBRR_reset( &psEnc->sCmn );
+                }
+            } else{
+                psEnc->sCmn.nb_subfr      = MAX_NB_SUBFR;
+                psEnc->sCmn.frame_length  = SKP_SMULBB( psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr );
+                psEnc->sCmn.PacketSize_ms = PacketSize_ms;
+                psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS, fs_kHz );
+                /* Packet length changes. Reset LBRR buffer */
+                SKP_Silk_LBRR_reset( &psEnc->sCmn );
+            }
+        }
+    }
+    return(ret);
+}
+
+SKP_INLINE SKP_int SKP_Silk_setup_resamplers(
+    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O                      */
+    SKP_int                         API_fs_Hz,          /* I                        */
+    SKP_int                         fs_kHz              /* I                        */
+)
+{
+    SKP_int ret = SKP_SILK_NO_ERROR;
+    
+    if( psEnc->sCmn.fs_kHz != fs_kHz || psEnc->sCmn.prev_API_fs_Hz != API_fs_Hz ) {
+
+        /* Allocate space for worst case temporary upsampling, 8 to 48 kHz, so a factor 6 */
+        SKP_int16 x_buf_API_fs_Hz[ ( MAX_API_FS_KHZ / 8 ) * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ];
+
+        SKP_int32 nSamples_temp = SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape;
+
+        if( SKP_SMULBB( fs_kHz, 1000 ) < API_fs_Hz && psEnc->sCmn.fs_kHz != 0 ) {
+            /* Resample buffered data in x_buf to API_fs_Hz */
+
+            SKP_Silk_resampler_state_struct  temp_resampler_state;
+
+            /* Initialize resampler for temporary resampling of x_buf data to API_fs_Hz */
+            ret += SKP_Silk_resampler_init( &temp_resampler_state, SKP_SMULBB( psEnc->sCmn.fs_kHz, 1000 ), API_fs_Hz );
+
+            /* Temporary resampling of x_buf data to API_fs_Hz */
+            ret += SKP_Silk_resampler( &temp_resampler_state, x_buf_API_fs_Hz, psEnc->x_buf, nSamples_temp );
+
+            /* Calculate number of samples that has been temporarily upsampled */
+            nSamples_temp = SKP_DIV32_16( nSamples_temp * API_fs_Hz, SKP_SMULBB( psEnc->sCmn.fs_kHz, 1000 ) );
+
+            /* Initialize the resampler for enc_API.c preparing resampling from API_fs_Hz to fs_kHz */
+            ret += SKP_Silk_resampler_init( &psEnc->sCmn.resampler_state, API_fs_Hz, SKP_SMULBB( fs_kHz, 1000 ) );
+
+        } else {
+            /* Copy data */
+            SKP_memcpy( x_buf_API_fs_Hz, psEnc->x_buf, nSamples_temp * sizeof( SKP_int16 ) );
+        }
+
+        if( 1000 * fs_kHz != API_fs_Hz ) {
+            /* Correct resampler state (unless resampling by a factor 1) by resampling buffered data from API_fs_Hz to fs_kHz */
+            ret += SKP_Silk_resampler( &psEnc->sCmn.resampler_state, psEnc->x_buf, x_buf_API_fs_Hz, nSamples_temp );
+        }
+    }
+    psEnc->sCmn.prev_API_fs_Hz = API_fs_Hz;
+ 
+    return(ret);
+}
+
+SKP_INLINE SKP_int SKP_Silk_setup_fs(
+    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O                      */
+    SKP_int                         fs_kHz              /* I                        */
+)
+{
+    SKP_int ret = 0;
+
+    if( psEnc->sCmn.fs_kHz != fs_kHz ) {
+        /* reset part of the state */
+        SKP_memset( &psEnc->sShape,          0,                            sizeof( SKP_Silk_shape_state_FIX ) );
+        SKP_memset( &psEnc->sPrefilt,        0,                            sizeof( SKP_Silk_prefilter_state_FIX ) );
+        SKP_memset( &psEnc->sNSQ,            0,                            sizeof( SKP_Silk_nsq_state ) );
+        SKP_memset( &psEnc->sPred,           0,                            sizeof( SKP_Silk_predict_state_FIX ) );
+        SKP_memset( psEnc->sNSQ.xq,          0, ( 2 * MAX_FRAME_LENGTH ) * sizeof( SKP_int16 ) );
+        SKP_memset( psEnc->sNSQ_LBRR.xq,     0, ( 2 * MAX_FRAME_LENGTH ) * sizeof( SKP_int16 ) );
+        SKP_memset( psEnc->sCmn.LBRR_buffer, 0,           MAX_LBRR_DELAY * sizeof( SKP_SILK_LBRR_struct ) );
+#if SWITCH_TRANSITION_FILTERING
+        SKP_memset( psEnc->sCmn.sLP.In_LP_State, 0, 2 * sizeof( SKP_int32 ) );
+        if( psEnc->sCmn.sLP.mode == 1 ) {
+            /* Begin transition phase */
+            psEnc->sCmn.sLP.transition_frame_no = 1;
+        } else {
+            /* End transition phase */
+            psEnc->sCmn.sLP.transition_frame_no = 0;
+        }
+#endif
+        psEnc->sCmn.inputBufIx          = 0;
+        psEnc->sCmn.nFramesInPayloadBuf = 0;
+        psEnc->sCmn.nBytesInPayloadBuf  = 0;
+        psEnc->sCmn.oldest_LBRR_idx     = 0;
+        psEnc->sCmn.TargetRate_bps      = 0; /* Ensures that psEnc->SNR_dB is recomputed */
+
+        SKP_memset( psEnc->sPred.prev_NLSFq_Q15, 0, MAX_LPC_ORDER * sizeof( SKP_int ) );
+
+        /* Initialize non-zero parameters */
+        psEnc->sCmn.prevLag                 = 100;
+        psEnc->sCmn.prev_sigtype            = SIG_TYPE_UNVOICED;
+        psEnc->sCmn.first_frame_after_reset = 1;
+        psEnc->sPrefilt.lagPrev             = 100;
+        psEnc->sShape.LastGainIndex         = 1;
+        psEnc->sNSQ.lagPrev                 = 100;
+        psEnc->sNSQ.prev_inv_gain_Q16       = 65536;
+        psEnc->sNSQ_LBRR.prev_inv_gain_Q16  = 65536;
+        psEnc->sCmn.fs_kHz = fs_kHz;
+        if( psEnc->sCmn.fs_kHz == 8 ) {
+            psEnc->sCmn.predictLPCOrder = MIN_LPC_ORDER;
+            psEnc->sCmn.psNLSF_CB[ 0 ]  = &SKP_Silk_NLSF_CB0_10;
+            psEnc->sCmn.psNLSF_CB[ 1 ]  = &SKP_Silk_NLSF_CB1_10;
+        } else {
+            psEnc->sCmn.predictLPCOrder = MAX_LPC_ORDER;
+            psEnc->sCmn.psNLSF_CB[ 0 ]  = &SKP_Silk_NLSF_CB0_16;
+            psEnc->sCmn.psNLSF_CB[ 1 ]  = &SKP_Silk_NLSF_CB1_16;
+        }
+        psEnc->sCmn.subfr_length   = SKP_SMULBB( SUB_FRAME_LENGTH_MS, fs_kHz );
+        psEnc->sCmn.frame_length   = SKP_SMULBB( psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr );
+        psEnc->sCmn.ltp_mem_length = SKP_SMULBB( LTP_MEM_LENGTH_MS, fs_kHz ); 
+        psEnc->sCmn.la_pitch       = SKP_SMULBB( LA_PITCH_MS, fs_kHz );
+        psEnc->sCmn.la_shape       = SKP_SMULBB( LA_SHAPE_MS, fs_kHz );
+        psEnc->sPred.min_pitch_lag = SKP_SMULBB(  3, fs_kHz );
+        psEnc->sPred.max_pitch_lag = SKP_SMULBB( 18, fs_kHz );
+        if( psEnc->sCmn.nb_subfr == MAX_NB_SUBFR ){
+            psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS, fs_kHz );
+        } else {
+            psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS_2_SF, fs_kHz );
+        }
+        if( psEnc->sCmn.fs_kHz == 24 ) {
+            psEnc->mu_LTP_Q8 = MU_LTP_QUANT_SWB_Q8;
+            psEnc->sCmn.bitrate_threshold_up   = SKP_int32_MAX;
+            psEnc->sCmn.bitrate_threshold_down = SWB2WB_BITRATE_BPS; 
+        } else if( psEnc->sCmn.fs_kHz == 16 ) {
+            psEnc->mu_LTP_Q8 = MU_LTP_QUANT_WB_Q8;
+            psEnc->sCmn.bitrate_threshold_up   = WB2SWB_BITRATE_BPS;
+            psEnc->sCmn.bitrate_threshold_down = WB2MB_BITRATE_BPS; 
+        } else if( psEnc->sCmn.fs_kHz == 12 ) {
+            psEnc->mu_LTP_Q8 = MU_LTP_QUANT_MB_Q8;
+            psEnc->sCmn.bitrate_threshold_up   = MB2WB_BITRATE_BPS;
+            psEnc->sCmn.bitrate_threshold_down = MB2NB_BITRATE_BPS;
+        } else {
+            psEnc->mu_LTP_Q8 = MU_LTP_QUANT_NB_Q8;
+            psEnc->sCmn.bitrate_threshold_up   = NB2MB_BITRATE_BPS;
+            psEnc->sCmn.bitrate_threshold_down = 0;
+        }
+        psEnc->sCmn.fs_kHz_changed = 1;
+
+        /* Check that settings are valid */
+        SKP_assert( ( psEnc->sCmn.subfr_length * psEnc->sCmn.nb_subfr ) == psEnc->sCmn.frame_length );
+    }
+    return( ret );
+}
+
+SKP_INLINE SKP_int SKP_Silk_setup_complexity(
+    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O                      */
+    SKP_int                         Complexity          /* I                        */
+)
+{
+    SKP_int ret = 0;
+
+    /* Check that settings are valid */
+    if( LOW_COMPLEXITY_ONLY && Complexity != 0 ) { 
+        ret = SKP_SILK_ENC_INVALID_COMPLEXITY_SETTING;
+    }
+
+    /* Set encoding complexity */
+    if( Complexity == 0 || LOW_COMPLEXITY_ONLY ) {
+        /* Low complexity */
+        psEnc->sCmn.Complexity                  = 0;
+        psEnc->sCmn.pitchEstimationComplexity   = PITCH_EST_COMPLEXITY_LC_MODE;
+        psEnc->pitchEstimationThreshold_Q16     = FIND_PITCH_CORRELATION_THRESHOLD_Q16_LC_MODE;
+        psEnc->sCmn.pitchEstimationLPCOrder     = 8;
+        psEnc->sCmn.shapingLPCOrder             = 8;
+        psEnc->sCmn.nStatesDelayedDecision      = 1;
+        psEnc->sCmn.useInterpolatedNLSFs        = 0;
+        psEnc->sCmn.LTPQuantLowComplexity       = 1;
+        psEnc->sCmn.NLSF_MSVQ_Survivors         = MAX_NLSF_MSVQ_SURVIVORS_LC_MODE;
+    } else if( Complexity == 1 ) {
+        /* Medium complexity */
+        psEnc->sCmn.Complexity                  = 1;
+        psEnc->sCmn.pitchEstimationComplexity   = PITCH_EST_COMPLEXITY_MC_MODE;
+        psEnc->pitchEstimationThreshold_Q16     = FIND_PITCH_CORRELATION_THRESHOLD_Q16_MC_MODE;
+        psEnc->sCmn.pitchEstimationLPCOrder     = 12;
+        psEnc->sCmn.shapingLPCOrder             = 12;
+        psEnc->sCmn.nStatesDelayedDecision      = 2;
+        psEnc->sCmn.useInterpolatedNLSFs        = 0;
+        psEnc->sCmn.LTPQuantLowComplexity       = 0;
+        psEnc->sCmn.NLSF_MSVQ_Survivors         = MAX_NLSF_MSVQ_SURVIVORS_MC_MODE;
+    } else if( Complexity == 2 ) {
+        /* High complexity */
+        psEnc->sCmn.Complexity                  = 2;
+        psEnc->sCmn.pitchEstimationComplexity   = PITCH_EST_COMPLEXITY_HC_MODE;
+        psEnc->pitchEstimationThreshold_Q16     = FIND_PITCH_CORRELATION_THRESHOLD_Q16_HC_MODE;
+        psEnc->sCmn.pitchEstimationLPCOrder     = 16;
+        psEnc->sCmn.shapingLPCOrder             = 16;
+        psEnc->sCmn.nStatesDelayedDecision      = 4;
+        psEnc->sCmn.useInterpolatedNLSFs        = 1;
+        psEnc->sCmn.LTPQuantLowComplexity       = 0;
+        psEnc->sCmn.NLSF_MSVQ_Survivors         = MAX_NLSF_MSVQ_SURVIVORS;
+    } else {
+        ret = SKP_SILK_ENC_INVALID_COMPLEXITY_SETTING;
+    }
+
+    /* Do not allow higher pitch estimation LPC order than predict LPC order */
+    psEnc->sCmn.pitchEstimationLPCOrder = SKP_min_int( psEnc->sCmn.pitchEstimationLPCOrder, psEnc->sCmn.predictLPCOrder );
+
+    SKP_assert( psEnc->sCmn.pitchEstimationLPCOrder <= MAX_FIND_PITCH_LPC_ORDER );
+    SKP_assert( psEnc->sCmn.shapingLPCOrder         <= MAX_SHAPE_LPC_ORDER      );
+    SKP_assert( psEnc->sCmn.nStatesDelayedDecision  <= MAX_DEL_DEC_STATES       );
+
+    return( ret );
+}
+
+SKP_INLINE SKP_int SKP_Silk_setup_rate(
+    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O                      */
+    SKP_int                         TargetRate_bps      /* I                        */
+)
+{
+    SKP_int k, ret = 0;
+    SKP_int32 frac_Q6;
+    const SKP_int32 *rateTable;
+
+    TargetRate_bps = SKP_min( TargetRate_bps, 100000 );
+    if( psEnc->sCmn.fs_kHz == 8 ) {
+        TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_NB_BPS );
+    } else if( psEnc->sCmn.fs_kHz == 12 ) {
+        TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_MB_BPS );
+    } else if( psEnc->sCmn.fs_kHz == 16 ) {
+        TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_WB_BPS );
+    } else {
+        TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_SWB_BPS );
+    }
+    if( TargetRate_bps != psEnc->sCmn.TargetRate_bps ) {
+        psEnc->sCmn.TargetRate_bps = TargetRate_bps;
+
+        /* If new TargetRate_bps, translate to SNR_dB value */
+        if( psEnc->sCmn.fs_kHz == 8 ) {
+            rateTable = TargetRate_table_NB;
+        } else if( psEnc->sCmn.fs_kHz == 12 ) {
+            rateTable = TargetRate_table_MB;
+        } else if( psEnc->sCmn.fs_kHz == 16 ) {
+            rateTable = TargetRate_table_WB;
+        } else {
+            rateTable = TargetRate_table_SWB;
+        }
+        for( k = 1; k < TARGET_RATE_TAB_SZ; k++ ) {
+            /* Find bitrate interval in table and interpolate */
+            if( TargetRate_bps < rateTable[ k ] ) {
+                frac_Q6 = SKP_DIV32( SKP_LSHIFT( TargetRate_bps - rateTable[ k - 1 ], 6 ), 
+                                                 rateTable[ k ] - rateTable[ k - 1 ] );
+                psEnc->SNR_dB_Q7 = SKP_LSHIFT( SNR_table_Q1[ k - 1 ], 6 ) + SKP_MUL( frac_Q6, SNR_table_Q1[ k ] - SNR_table_Q1[ k - 1 ] );
+                break;
+            }
+        }
+    }
+    return( ret );
+}
+
+SKP_INLINE SKP_int SKP_Silk_setup_LBRR(
+    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O                      */
+    SKP_int                         INBandFEC_enabled   /* I                        */
+)
+{
+    SKP_int   ret = 0;
+    SKP_int32 LBRRRate_thres_bps;
+
+#if USE_LBRR
+    if( INBandFEC_enabled < 0 || INBandFEC_enabled > 1 ) {
+        ret = SKP_SILK_ENC_INVALID_INBAND_FEC_SETTING;
+    }
+    
+    /* Only change settings if first frame in packet */
+    if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) {
+        
+        psEnc->sCmn.LBRR_enabled = INBandFEC_enabled;
+        if( psEnc->sCmn.fs_kHz == 8 ) {
+            LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 9000;
+        } else if( psEnc->sCmn.fs_kHz == 12 ) {
+            LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 6000;;
+        } else if( psEnc->sCmn.fs_kHz == 16 ) {
+            LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 3000;
+        } else {
+            LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS;
+        }
+
+        if( psEnc->sCmn.TargetRate_bps >= LBRRRate_thres_bps ) {
+            /* Set gain increase / rate reduction for LBRR usage */
+            /* Coarsely tuned with PESQ for now. */
+            /* Linear regression coefs G = 8 - 0.5 * loss */
+            /* Meaning that at 16% loss main rate and redundant rate is the same, -> G = 0 */
+            psEnc->sCmn.LBRR_GainIncreases = SKP_max_int( 8 - SKP_RSHIFT( psEnc->sCmn.PacketLoss_perc, 1 ), 0 );
+
+            /* Set main stream rate compensation */
+            if( psEnc->sCmn.LBRR_enabled && psEnc->sCmn.PacketLoss_perc > LBRR_LOSS_THRES ) {
+                /* Tuned to give aprox same mean / weighted bitrate as no inband FEC */
+                psEnc->inBandFEC_SNR_comp_Q8 = ( 6 << 8 ) - SKP_LSHIFT( psEnc->sCmn.LBRR_GainIncreases, 7 );
+            } else {
+                psEnc->inBandFEC_SNR_comp_Q8 = 0;
+                psEnc->sCmn.LBRR_enabled     = 0;
+            }
+        } else {
+            psEnc->inBandFEC_SNR_comp_Q8     = 0;
+            psEnc->sCmn.LBRR_enabled         = 0;
+        }
+    }
+#else
+    if( INBandFEC_enabled != 0 ) {
+        ret = SKP_SILK_ENC_INVALID_INBAND_FEC_SETTING;
+    }
+    psEnc->sCmn.LBRR_enabled = 0;
+#endif
+    return( ret );
+}
\ No newline at end of file
--- /dev/null
+++ b/src_FIX/SKP_Silk_corrMatrix_FIX.c
@@ -1,0 +1,152 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/**********************************************************************
+ * Correlation Matrix Computations for LS estimate. 
+ **********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+/* Calculates correlation vector X'*t */
+void SKP_Silk_corrVector_FIX(
+    const SKP_int16                 *x,         /* I    x vector [L + order - 1] used to form data matrix X */
+    const SKP_int16                 *t,         /* I    target vector [L]                                   */
+    const SKP_int                   L,          /* I    Length of vectors                                   */
+    const SKP_int                   order,      /* I    Max lag for correlation                             */
+    SKP_int32                       *Xt,        /* O    Pointer to X'*t correlation vector [order]          */
+    const SKP_int                   rshifts     /* I    Right shifts of correlations                        */
+)
+{
+    SKP_int         lag, i;
+    const SKP_int16 *ptr1, *ptr2;
+    SKP_int32       inner_prod;
+
+    ptr1 = &x[ order - 1 ]; /* Points to first sample of column 0 of X: X[:,0] */
+    ptr2 = t;
+    /* Calculate X'*t */
+    if( rshifts > 0 ) {
+        /* Right shifting used */
+        for( lag = 0; lag < order; lag++ ) {
+            inner_prod = 0;
+            for( i = 0; i < L; i++ ) {
+                inner_prod += SKP_RSHIFT32( SKP_SMULBB( ptr1[ i ], ptr2[i] ), rshifts );
+            }
+            Xt[ lag ] = inner_prod; /* X[:,lag]'*t */
+            ptr1--; /* Go to next column of X */
+        }
+    } else {
+        SKP_assert( rshifts == 0 );
+        for( lag = 0; lag < order; lag++ ) {
+            Xt[ lag ] = SKP_Silk_inner_prod_aligned( ptr1, ptr2, L ); /* X[:,lag]'*t */
+            ptr1--; /* Go to next column of X */
+        }
+    }
+}
+
+/* Calculates correlation matrix X'*X */
+void SKP_Silk_corrMatrix_FIX(
+    const SKP_int16                 *x,         /* I    x vector [L + order - 1] used to form data matrix X */
+    const SKP_int                   L,          /* I    Length of vectors                                   */
+    const SKP_int                   order,      /* I    Max lag for correlation                             */
+    SKP_int32                       *XX,        /* O    Pointer to X'*X correlation matrix [ order x order ]*/
+    SKP_int                         *rshifts    /* I/O  Right shifts of correlations                        */
+)
+{
+    SKP_int         i, j, lag, rshifts_local, head_room_rshifts;
+    SKP_int32       energy;
+    const SKP_int16 *ptr1, *ptr2;
+
+    /* Calculate energy to find shift used to fit in 32 bits */
+    SKP_Silk_sum_sqr_shift( &energy, &rshifts_local, x, L + order - 1 );
+    /* Add shifts to get the wanted head room */
+
+    head_room_rshifts = SKP_max( LTP_CORRS_HEAD_ROOM - SKP_Silk_CLZ32( energy ), 0 );
+    
+    energy = SKP_RSHIFT32( energy, head_room_rshifts );
+    rshifts_local += head_room_rshifts;
+
+    /* Calculate energy of first column (0) of X: X[:,0]'*X[:,0] */
+    /* Remove contribution of first order - 1 samples */
+    for( i = 0; i < order - 1; i++ ) {
+        energy -= SKP_RSHIFT32( SKP_SMULBB( x[ i ], x[ i ] ), rshifts_local );
+    }
+    if( rshifts_local < *rshifts ) {
+        /* Adjust energy */
+        energy = SKP_RSHIFT32( energy, *rshifts - rshifts_local );
+        rshifts_local = *rshifts;
+    }
+
+    /* Calculate energy of remaining columns of X: X[:,j]'*X[:,j] */
+    /* Fill out the diagonal of the correlation matrix */
+    matrix_ptr( XX, 0, 0, order ) = energy;
+    ptr1 = &x[ order - 1 ]; /* First sample of column 0 of X */
+    for( j = 1; j < order; j++ ) {
+        energy = SKP_SUB32( energy, SKP_RSHIFT32( SKP_SMULBB( ptr1[ L - j ], ptr1[ L - j ] ), rshifts_local ) );
+        energy = SKP_ADD32( energy, SKP_RSHIFT32( SKP_SMULBB( ptr1[ -j ], ptr1[ -j ] ), rshifts_local ) );
+        matrix_ptr( XX, j, j, order ) = energy;
+    }
+
+    ptr2 = &x[ order - 2 ]; /* First sample of column 1 of X */
+    /* Calculate the remaining elements of the correlation matrix */
+    if( rshifts_local > 0 ) {
+        /* Right shifting used */
+        for( lag = 1; lag < order; lag++ ) {
+            /* Inner product of column 0 and column lag: X[:,0]'*X[:,lag] */
+            energy = 0;
+            for( i = 0; i < L; i++ ) {
+                energy += SKP_RSHIFT32( SKP_SMULBB( ptr1[ i ], ptr2[i] ), rshifts_local );
+            }
+            /* Calculate remaining off diagonal: X[:,j]'*X[:,j + lag] */
+            matrix_ptr( XX, lag, 0, order ) = energy;
+            matrix_ptr( XX, 0, lag, order ) = energy;
+            for( j = 1; j < ( order - lag ); j++ ) {
+                energy = SKP_SUB32( energy, SKP_RSHIFT32( SKP_SMULBB( ptr1[ L - j ], ptr2[ L - j ] ), rshifts_local ) );
+                energy = SKP_ADD32( energy, SKP_RSHIFT32( SKP_SMULBB( ptr1[ -j ], ptr2[ -j ] ), rshifts_local ) );
+                matrix_ptr( XX, lag + j, j, order ) = energy;
+                matrix_ptr( XX, j, lag + j, order ) = energy;
+            }
+            ptr2--; /* Update pointer to first sample of next column (lag) in X */
+        }
+    } else {
+        for( lag = 1; lag < order; lag++ ) {
+            /* Inner product of column 0 and column lag: X[:,0]'*X[:,lag] */
+            energy = SKP_Silk_inner_prod_aligned( ptr1, ptr2, L );
+            matrix_ptr( XX, lag, 0, order ) = energy;
+            matrix_ptr( XX, 0, lag, order ) = energy;
+            /* Calculate remaining off diagonal: X[:,j]'*X[:,j + lag] */
+            for( j = 1; j < ( order - lag ); j++ ) {
+                energy = SKP_SUB32( energy, SKP_SMULBB( ptr1[ L - j ], ptr2[ L - j ] ) );
+                energy = SKP_SMLABB( energy, ptr1[ -j ], ptr2[ -j ] );
+                matrix_ptr( XX, lag + j, j, order ) = energy;
+                matrix_ptr( XX, j, lag + j, order ) = energy;
+            }
+            ptr2--;/* Update pointer to first sample of next column (lag) in X */
+        }
+    }
+    *rshifts = rshifts_local;
+}
+
--- /dev/null
+++ b/src_FIX/SKP_Silk_define_FIX.h
@@ -1,0 +1,92 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_DEFINE_FIX_H
+#define SKP_SILK_DEFINE_FIX_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* Head room for correlations                           */
+#define LTP_CORRS_HEAD_ROOM                             2
+#define LPC_CORRS_HEAD_ROOM                             10
+
+#define WB_DETECT_ACTIVE_SPEECH_LEVEL_THRES_Q8          179     // 179.2_Q8 = 0.7f required speech activity for counting frame as active
+
+/* DTX settings */
+#define SPEECH_ACTIVITY_DTX_THRES_Q8                    26      // 25.60_Q8 = 0.1f
+
+#define LBRR_SPEECH_ACTIVITY_THRES_Q8                   128
+
+/* level of noise floor for whitening filter LPC analysis in pitch analysis */
+#define FIND_PITCH_WHITE_NOISE_FRACTION_Q16             66
+
+/* bandwdith expansion for whitening filter in pitch analysis */
+#define FIND_PITCH_BANDWITH_EXPANSION_Q16               64881
+
+/* Threshold used by pitch estimator for early escape */
+#define FIND_PITCH_CORRELATION_THRESHOLD_Q16_HC_MODE    45875       // 0.7
+#define FIND_PITCH_CORRELATION_THRESHOLD_Q16_MC_MODE    49152       // 0.75
+#define FIND_PITCH_CORRELATION_THRESHOLD_Q16_LC_MODE    52429       // 0.8
+
+/* Regualarization factor for correlation matrix. Equivalent to adding noise at -50 dB */
+#define FIND_LTP_COND_FAC_Q31                           21475
+#define FIND_LPC_COND_FAC_Q32                           257698       // 6e-5
+
+/* Find Pred Coef defines */
+#define INACTIVE_BWExp_Q16                              64225       // 0.98
+#define ACTIVE_BWExp_Q16                                65470       // 0.999
+#define LTP_DAMPING_Q16                                 66
+#define LTP_SMOOTHING_Q26                               6710886
+
+/* LTP quantization settings */
+#define MU_LTP_QUANT_NB_Q8                              8
+#define MU_LTP_QUANT_MB_Q8                              6
+#define MU_LTP_QUANT_WB_Q8                              5
+#define MU_LTP_QUANT_SWB_Q8                             4
+
+/***********************/
+/* High pass filtering */
+/***********************/
+/* Smoothing parameters for low end of pitch frequency range estimation */
+#define VARIABLE_HP_SMTH_COEF1_Q16                      6554    // 0.1
+#define VARIABLE_HP_SMTH_COEF2_Q16                      983     // 0.015
+
+/* Min and max values for low end of pitch frequency range estimation */
+#define VARIABLE_HP_MIN_FREQ_Q0                         80
+#define VARIABLE_HP_MAX_FREQ_Q0                         150
+
+/* Max absolute difference between log2 of pitch frequency and smoother state, to enter the smoother */
+#define VARIABLE_HP_MAX_DELTA_FREQ_Q7                   51      // 0.4 in Q7
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+++ b/src_FIX/SKP_Silk_encode_frame_FIX.c
@@ -1,0 +1,529 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+/****************/
+/* Encode frame */
+/****************/
+SKP_int SKP_Silk_encode_frame_FIX( 
+    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O  Pointer to Silk FIX encoder state           */
+    SKP_uint8                       *pCode,             /* O    Pointer to payload                          */
+    SKP_int16                       *pnBytesOut,        /* I/O  Pointer to number of payload bytes          */
+                                                        /*      input: max length; output: used             */
+    const SKP_int16                 *pIn                /* I    Pointer to input speech frame               */
+)
+{
+    SKP_Silk_encoder_control_FIX sEncCtrl;
+    SKP_int     i, nBytes, ret = 0;
+    SKP_int16   *x_frame, *res_pitch_frame;
+    SKP_int16   xfw[ MAX_FRAME_LENGTH ];
+    SKP_int16   pIn_HP[ MAX_FRAME_LENGTH ];
+    SKP_int16   res_pitch[ 2 * MAX_FRAME_LENGTH + LA_PITCH_MAX ];
+    SKP_int     LBRR_idx, frame_terminator;
+    const SKP_uint16 *FrameTermination_CDF;
+
+    /* Low bitrate redundancy parameters */
+    SKP_uint8   LBRRpayload[ MAX_ARITHM_BYTES ];
+    SKP_int16   nBytesLBRR;
+    ec_byte_buffer range_enc_celt_buf;
+
+    sEncCtrl.sCmn.Seed = psEnc->sCmn.frameCounter++ & 3;
+
+TIC(ENCODE_FRAME)
+
+    /**************************************************************/
+    /* Setup Input Pointers, and insert frame in input buffer    */
+    /*************************************************************/
+    x_frame         = psEnc->x_buf + psEnc->sCmn.ltp_mem_length; /* start of frame to encode */
+    res_pitch_frame = res_pitch    + psEnc->sCmn.ltp_mem_length; /* start of pitch LPC residual frame */
+
+    /****************************/
+    /* Voice Activity Detection */
+    /****************************/
+TIC(VAD)
+    ret = SKP_Silk_VAD_GetSA_Q8( &psEnc->sCmn.sVAD, &psEnc->speech_activity_Q8, 
+                                 sEncCtrl.input_quality_bands_Q15, &sEncCtrl.input_tilt_Q15,
+                                 pIn, psEnc->sCmn.frame_length, psEnc->sCmn.fs_kHz );
+TOC(VAD)
+
+    /*******************************************/
+    /* High-pass filtering of the input signal */
+    /*******************************************/
+TIC(HP_IN)
+#if HIGH_PASS_INPUT
+    /* Variable high-pass filter */
+    SKP_Silk_HP_variable_cutoff_FIX( psEnc, &sEncCtrl, pIn_HP, pIn );
+#else
+    SKP_memcpy( pIn_HP, pIn,psEnc->sCmn.frame_length * sizeof( SKP_int16 ) );
+#endif
+TOC(HP_IN)
+
+#if SWITCH_TRANSITION_FILTERING
+    /* Ensure smooth bandwidth transitions */
+    SKP_Silk_LP_variable_cutoff( &psEnc->sCmn.sLP, x_frame + psEnc->sCmn.la_shape, pIn_HP, psEnc->sCmn.frame_length );
+#else
+    SKP_memcpy( x_frame + psEnc->sCmn.la_shape, pIn_HP,psEnc->sCmn.frame_length * sizeof( SKP_int16 ) );
+#endif
+    
+    /*****************************************/
+    /* Find pitch lags, initial LPC analysis */
+    /*****************************************/
+TIC(FIND_PITCH)
+    SKP_Silk_find_pitch_lags_FIX( psEnc, &sEncCtrl, res_pitch, x_frame );
+TOC(FIND_PITCH)
+
+    /************************/
+    /* Noise shape analysis */
+    /************************/
+TIC(NOISE_SHAPE_ANALYSIS)
+    SKP_Silk_noise_shape_analysis_FIX( psEnc, &sEncCtrl, res_pitch_frame, x_frame );
+TOC(NOISE_SHAPE_ANALYSIS)
+
+    /*****************************************/
+    /* Prefiltering for noise shaper         */
+    /*****************************************/
+TIC(PREFILTER)
+    SKP_Silk_prefilter_FIX( psEnc, &sEncCtrl, xfw, x_frame );
+TOC(PREFILTER)
+
+    /***************************************************/
+    /* Find linear prediction coefficients (LPC + LTP) */
+    /***************************************************/
+TIC(FIND_PRED_COEF)
+    SKP_Silk_find_pred_coefs_FIX( psEnc, &sEncCtrl, res_pitch );
+TOC(FIND_PRED_COEF)
+
+    /****************************************/
+    /* Process gains                        */
+    /****************************************/
+TIC(PROCESS_GAINS)
+    SKP_Silk_process_gains_FIX( psEnc, &sEncCtrl );
+TOC(PROCESS_GAINS)
+ 
+    psEnc->sCmn.sigtype[         psEnc->sCmn.nFramesInPayloadBuf ] = sEncCtrl.sCmn.sigtype;
+    psEnc->sCmn.QuantOffsetType[ psEnc->sCmn.nFramesInPayloadBuf ] = sEncCtrl.sCmn.QuantOffsetType;
+
+    /****************************************/
+    /* Low Bitrate Redundant Encoding       */
+    /****************************************/
+    nBytesLBRR = MAX_ARITHM_BYTES;
+TIC(LBRR)
+    SKP_Silk_LBRR_encode_FIX( psEnc, &sEncCtrl, LBRRpayload, &nBytesLBRR, xfw );
+TOC(LBRR)
+
+    /*****************************************/
+    /* Noise shaping quantization            */
+    /*****************************************/
+TIC(NSQ)
+    if( psEnc->sCmn.nStatesDelayedDecision > 1 ) {
+        SKP_Silk_NSQ_del_dec( &psEnc->sCmn, &sEncCtrl.sCmn, &psEnc->sNSQ, xfw,
+            &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf *psEnc->sCmn.frame_length ], sEncCtrl.sCmn.NLSFInterpCoef_Q2, 
+            sEncCtrl.PredCoef_Q12[ 0 ], sEncCtrl.LTPCoef_Q14, sEncCtrl.AR2_Q13, sEncCtrl.HarmShapeGain_Q14, 
+            sEncCtrl.Tilt_Q14, sEncCtrl.LF_shp_Q14, sEncCtrl.Gains_Q16, sEncCtrl.Lambda_Q10, 
+            sEncCtrl.LTP_scale_Q14 );
+    } else {
+        SKP_Silk_NSQ( &psEnc->sCmn, &sEncCtrl.sCmn, &psEnc->sNSQ, xfw, 
+	        &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf *psEnc->sCmn.frame_length ], sEncCtrl.sCmn.NLSFInterpCoef_Q2, 
+	        sEncCtrl.PredCoef_Q12[ 0 ], sEncCtrl.LTPCoef_Q14, sEncCtrl.AR2_Q13, sEncCtrl.HarmShapeGain_Q14, 
+	        sEncCtrl.Tilt_Q14, sEncCtrl.LF_shp_Q14, sEncCtrl.Gains_Q16, sEncCtrl.Lambda_Q10, 
+            sEncCtrl.LTP_scale_Q14 );
+    }
+TOC(NSQ)
+
+    /**************************************************/
+    /* Convert speech activity into VAD and DTX flags */
+    /**************************************************/
+    if( psEnc->speech_activity_Q8 < SPEECH_ACTIVITY_DTX_THRES_Q8 ) {
+        psEnc->sCmn.vadFlag = NO_VOICE_ACTIVITY;
+        psEnc->sCmn.noSpeechCounter++;
+        if( psEnc->sCmn.noSpeechCounter > NO_SPEECH_FRAMES_BEFORE_DTX ) {
+            psEnc->sCmn.inDTX = 1;
+        }
+        if( psEnc->sCmn.noSpeechCounter > MAX_CONSECUTIVE_DTX ) {
+            psEnc->sCmn.noSpeechCounter = 0;
+            psEnc->sCmn.inDTX           = 0;
+        }
+    } else {
+        psEnc->sCmn.noSpeechCounter = 0;
+        psEnc->sCmn.inDTX           = 0;
+        psEnc->sCmn.vadFlag         = VOICE_ACTIVITY;
+    }
+
+    /****************************************/
+    /* Initialize arithmetic coder          */
+    /****************************************/
+    if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) {
+        ec_byte_writeinit_buffer( &range_enc_celt_buf, psEnc->sCmn.sRC.buffer, MAX_ARITHM_BYTES );
+        ec_enc_init( &psEnc->sCmn.sRC.range_enc_celt_state, &range_enc_celt_buf );
+
+        SKP_Silk_range_enc_init( &psEnc->sCmn.sRC );
+        psEnc->sCmn.nBytesInPayloadBuf = 0;
+    }
+
+    /****************************************/
+    /* Encode Parameters                    */
+    /****************************************/
+TIC(ENCODE_PARAMS)
+    SKP_Silk_encode_parameters_v4( &psEnc->sCmn, &sEncCtrl.sCmn, &psEnc->sCmn.sRC );
+    FrameTermination_CDF = SKP_Silk_FrameTermination_v4_CDF;
+TOC(ENCODE_PARAMS)
+
+    /****************************************/
+    /* Update Buffers and State             */
+    /****************************************/
+    /* Update Input buffer */
+    SKP_memmove( psEnc->x_buf, &psEnc->x_buf[ psEnc->sCmn.frame_length ], ( psEnc->sCmn.ltp_mem_length + psEnc->sCmn.la_shape ) * sizeof( SKP_int16 ) );
+    
+    /* parameters needed for next frame */
+    psEnc->sCmn.prev_sigtype            = sEncCtrl.sCmn.sigtype;
+    psEnc->sCmn.prevLag                 = sEncCtrl.sCmn.pitchL[  psEnc->sCmn.nb_subfr - 1 ];
+    psEnc->sCmn.first_frame_after_reset = 0;
+
+    if( psEnc->sCmn.sRC.error ) {
+        /* encoder returned error: clear payload buffer */
+        psEnc->sCmn.nFramesInPayloadBuf = 0;
+    } else {
+        psEnc->sCmn.nFramesInPayloadBuf++;
+    }
+
+    /****************************************/
+    /* finalize payload and copy to output  */
+    /****************************************/
+    if( psEnc->sCmn.nFramesInPayloadBuf * SUB_FRAME_LENGTH_MS * psEnc->sCmn.nb_subfr >= psEnc->sCmn.PacketSize_ms ) {
+
+        LBRR_idx = ( psEnc->sCmn.oldest_LBRR_idx + 1 ) & LBRR_IDX_MASK;
+
+        /* Check if FEC information should be added */
+        frame_terminator = SKP_SILK_LAST_FRAME;
+        if( psEnc->sCmn.LBRR_buffer[ LBRR_idx ].usage == SKP_SILK_ADD_LBRR_TO_PLUS1 ) {
+            frame_terminator = SKP_SILK_LBRR_VER1;
+        }
+        if( psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].usage == SKP_SILK_ADD_LBRR_TO_PLUS2 ) {
+            frame_terminator = SKP_SILK_LBRR_VER2;
+            LBRR_idx = psEnc->sCmn.oldest_LBRR_idx;
+        }
+
+        /* Add the frame termination info to stream */
+        SKP_Silk_range_encoder( &psEnc->sCmn.sRC, frame_terminator, FrameTermination_CDF );
+
+        /* Code excitation signal */
+        for( i = 0; i <psEnc->sCmn.nFramesInPayloadBuf; i++ ) {
+            SKP_Silk_encode_pulses( &psEnc->sCmn.sRC, psEnc->sCmn.sigtype[ i ],psEnc->sCmn.QuantOffsetType[ i ], 
+                &psEnc->sCmn.q[ i * psEnc->sCmn.frame_length],psEnc->sCmn.frame_length );
+        }
+        /* payload length so far */
+        SKP_Silk_range_encoder_get_length( &psEnc->sCmn.sRC, &nBytes );
+
+        /* check that there is enough space in external output buffer, and move data */
+        if( *pnBytesOut >= nBytes ) {
+            SKP_int bits_in_stream, mask;
+            bits_in_stream = ec_enc_tell( &psEnc->sCmn.sRC.range_enc_celt_state, 0 );
+            ec_enc_done( &psEnc->sCmn.sRC.range_enc_celt_state );
+            
+            /* Fill up any remaining bits in the last byte with 1s */
+            if( bits_in_stream & 7 ) {
+                mask = SKP_RSHIFT( 0xFF, bits_in_stream & 7 );
+                if( nBytes - 1 < *pnBytesOut ) {
+                    psEnc->sCmn.sRC.range_enc_celt_state.buf->buf[ nBytes - 1 ] |= mask;
+                }
+            }
+            SKP_memcpy( pCode, psEnc->sCmn.sRC.range_enc_celt_state.buf->buf, nBytes * sizeof( SKP_uint8 ) );
+
+            if( frame_terminator > SKP_SILK_MORE_FRAMES && 
+                    *pnBytesOut >= nBytes + psEnc->sCmn.LBRR_buffer[ LBRR_idx ].nBytes ) {
+                /* Get old packet and add to payload. */
+                SKP_memcpy( &pCode[ nBytes ],
+                    psEnc->sCmn.LBRR_buffer[ LBRR_idx ].payload,
+                    psEnc->sCmn.LBRR_buffer[ LBRR_idx ].nBytes * sizeof( SKP_uint8 ) );
+                nBytes += psEnc->sCmn.LBRR_buffer[ LBRR_idx ].nBytes;
+            }
+                        
+            *pnBytesOut = nBytes;
+        
+            /* Update FEC buffer */
+            SKP_memcpy( psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].payload, LBRRpayload, 
+                nBytesLBRR * sizeof( SKP_uint8 ) );
+            psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].nBytes = nBytesLBRR;
+            /* This line tells describes how FEC should be used */
+            psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].usage = sEncCtrl.sCmn.LBRR_usage;
+            psEnc->sCmn.oldest_LBRR_idx = ( psEnc->sCmn.oldest_LBRR_idx + 1 ) & LBRR_IDX_MASK;
+
+            /* Reset number of frames in payload buffer */
+            psEnc->sCmn.nFramesInPayloadBuf = 0;
+        } else {
+            /* Not enough space: Payload will be discarded */
+            *pnBytesOut = 0;
+            nBytes      = 0;
+            psEnc->sCmn.nFramesInPayloadBuf = 0;
+            ret = SKP_SILK_ENC_PAYLOAD_BUF_TOO_SHORT;
+        }
+    } else {
+        /* no payload for you this time */
+        *pnBytesOut = 0;
+
+        /* Encode that more frames follows */
+        frame_terminator = SKP_SILK_MORE_FRAMES;
+        SKP_Silk_range_encoder( &psEnc->sCmn.sRC, frame_terminator, FrameTermination_CDF );
+
+        /* payload length so far */
+        SKP_Silk_range_encoder_get_length( &psEnc->sCmn.sRC, &nBytes );
+
+        /* Take into account the q signal that isnt in the bitstream yet */
+        nBytes +=  SKP_Silk_pulses_to_bytes( &psEnc->sCmn, 
+            &psEnc->sCmn.q[ (psEnc->sCmn.nFramesInPayloadBuf - 1) * psEnc->sCmn.frame_length ] );
+    }
+
+    /* Check for arithmetic coder errors */
+    if( psEnc->sCmn.sRC.error ) {
+        ret = SKP_SILK_ENC_INTERNAL_ERROR;
+    }
+
+    /* simulate number of ms buffered in channel because of exceeding TargetRate */
+    SKP_assert(  ( 8 * 1000 * ( (SKP_int64)nBytes - (SKP_int64)psEnc->sCmn.nBytesInPayloadBuf ) ) == 
+        SKP_SAT32( 8 * 1000 * ( (SKP_int64)nBytes - (SKP_int64)psEnc->sCmn.nBytesInPayloadBuf ) ) );
+    SKP_assert( psEnc->sCmn.TargetRate_bps > 0 );
+    psEnc->BufferedInChannel_ms   += SKP_DIV32( 8 * 1000 * ( nBytes -psEnc->sCmn.nBytesInPayloadBuf ),psEnc->sCmn.TargetRate_bps );
+    psEnc->BufferedInChannel_ms   -= SKP_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr );
+    psEnc->BufferedInChannel_ms    = SKP_LIMIT_int( psEnc->BufferedInChannel_ms, 0, 100 );
+    psEnc->sCmn.nBytesInPayloadBuf = nBytes;
+
+    if( psEnc->speech_activity_Q8 > WB_DETECT_ACTIVE_SPEECH_LEVEL_THRES_Q8 ) {
+        psEnc->sCmn.sSWBdetect.ActiveSpeech_ms = SKP_ADD_POS_SAT32( psEnc->sCmn.sSWBdetect.ActiveSpeech_ms, SKP_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr ) ); 
+    }
+
+TOC(ENCODE_FRAME)
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+    {
+        SKP_float tmp[ MAX_NB_SUBFR * LTP_ORDER ];
+        int i;
+        DEBUG_STORE_DATA( xf.dat,                   x_frame +psEnc->sCmn.la_shape,  psEnc->sCmn.frame_length    * sizeof( SKP_int16 ) );
+        DEBUG_STORE_DATA( xfw.dat,                  xfw,                            psEnc->sCmn.frame_length    * sizeof( SKP_int16 ) );
+        //	DEBUG_STORE_DATA( q.dat,                    &psEnc->sCmn.q[ ( psEnc->sCmn.nFramesInPayloadBuf - 1)*psEnc->sCmn.frame_length ],  psEnc->sCmn.frame_length    * sizeof( SKP_int8 ) );
+        DEBUG_STORE_DATA( pitchL.dat,               sEncCtrl.sCmn.pitchL,           psEnc->sCmn.nb_subfr            * sizeof( SKP_int ) );
+        for( i = 0; i < psEnc->sCmn.nb_subfr * LTP_ORDER; i++ ) {
+            tmp[ i ] = (SKP_float)sEncCtrl.LTPCoef_Q14[ i ] / 16384.0f;
+        }
+        DEBUG_STORE_DATA( pitchG_quantized.dat,     tmp,                            psEnc->sCmn.nb_subfr * LTP_ORDER * sizeof( SKP_float ) );
+        for( i = 0; i <psEnc->sCmn.predictLPCOrder; i++ ) {
+            tmp[ i ] = (SKP_float)sEncCtrl.PredCoef_Q12[ 1 ][ i ] / 4096.0f;
+        }
+        DEBUG_STORE_DATA( PredCoef.dat,             tmp,                            psEnc->sCmn.predictLPCOrder * sizeof( SKP_float ) );
+        
+        tmp[ 0 ] = (SKP_float)sEncCtrl.pitch_freq_low_Hz;
+        DEBUG_STORE_DATA( pitch_freq_low_Hz.dat,    tmp,                            sizeof( SKP_float ) );
+        tmp[ 0 ] = (SKP_float)sEncCtrl.LTPredCodGain_Q7 / 128.0f;
+        DEBUG_STORE_DATA( LTPredCodGain.dat,        tmp,                            sizeof( SKP_float ) );
+        tmp[ 0 ] = (SKP_float)psEnc->LTPCorr_Q15 / 32768.0f;
+        DEBUG_STORE_DATA( LTPcorr.dat,              tmp,                            sizeof( SKP_float ) );
+        tmp[ 0 ] = (SKP_float)sEncCtrl.input_tilt_Q15 / 32768.0f;
+        DEBUG_STORE_DATA( tilt.dat,                 tmp,                            sizeof( SKP_float ) );
+        for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
+            tmp[ i ] = (SKP_float)sEncCtrl.Gains_Q16[ i ] / 65536.0f;
+        }
+        DEBUG_STORE_DATA( gains.dat,                tmp,                            psEnc->sCmn.nb_subfr * sizeof( SKP_float ) );
+        DEBUG_STORE_DATA( gains_indices.dat,        &sEncCtrl.sCmn.GainsIndices,    psEnc->sCmn.nb_subfr * sizeof( SKP_int ) );
+        DEBUG_STORE_DATA( nBytes.dat,               &nBytes,                        sizeof( SKP_int ) );
+        tmp[ 0 ] = (SKP_float)sEncCtrl.current_SNR_dB_Q7 / 128.0f;
+        DEBUG_STORE_DATA( current_SNR_db.dat,       tmp,                            sizeof( SKP_float ) );
+        DEBUG_STORE_DATA( QuantOffsetType.dat,      &sEncCtrl.sCmn.QuantOffsetType, sizeof( SKP_int ) );
+        tmp[ 0 ] = (SKP_float)psEnc->speech_activity_Q8 / 256.0f;
+        DEBUG_STORE_DATA( speech_activity.dat,      tmp,                            sizeof( SKP_float ) );
+        for( i = 0; i < VAD_N_BANDS; i++ ) {
+            tmp[ i ] = (SKP_float)sEncCtrl.input_quality_bands_Q15[ i ] / 32768.0f;
+        }
+        DEBUG_STORE_DATA( input_quality_bands.dat,  tmp,                            VAD_N_BANDS * sizeof( SKP_float ) );
+        DEBUG_STORE_DATA( sigtype.dat,              &sEncCtrl.sCmn.sigtype,         sizeof( SKP_int ) ); 
+        DEBUG_STORE_DATA( ratelevel.dat,            &sEncCtrl.sCmn.RateLevelIndex,  sizeof( SKP_int ) ); 
+        DEBUG_STORE_DATA( lag_index.dat,            &sEncCtrl.sCmn.lagIndex,        sizeof( SKP_int ) ); 
+        DEBUG_STORE_DATA( contour_index.dat,        &sEncCtrl.sCmn.contourIndex,    sizeof( SKP_int ) ); 
+        DEBUG_STORE_DATA( per_index.dat,            &sEncCtrl.sCmn.PERIndex,        sizeof( SKP_int ) ); 
+    }
+#endif
+    return( ret );
+}
+
+/* Low BitRate Redundancy encoding functionality. Reuse all parameters but encode residual with lower bitrate */
+void SKP_Silk_LBRR_encode_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  Pointer to Silk encoder state           */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  Pointer to Silk encoder control struct  */
+    SKP_uint8                       *pCode,         /* O    Pointer to payload                      */
+    SKP_int16                       *pnBytesOut,    /* I/O  Pointer to number of payload bytes      */
+    SKP_int16                       xfw[]           /* I    Input signal                            */
+)
+{
+    SKP_int     i, TempGainsIndices[ MAX_NB_SUBFR ], frame_terminator;
+    SKP_int     nBytes, nFramesInPayloadBuf;
+    SKP_int32   TempGains_Q16[ MAX_NB_SUBFR ];
+    SKP_int     typeOffset, LTP_scaleIndex, Rate_only_parameters = 0;
+    ec_byte_buffer range_enc_celt_buf;
+
+    /*******************************************/
+    /* Control use of inband LBRR              */
+    /*******************************************/
+    SKP_Silk_LBRR_ctrl_FIX( psEnc, psEncCtrl );
+
+    if( psEnc->sCmn.LBRR_enabled ) {
+        /* Save original Gains */
+        SKP_memcpy( TempGainsIndices, psEncCtrl->sCmn.GainsIndices, MAX_NB_SUBFR * sizeof( SKP_int   ) );
+        SKP_memcpy( TempGains_Q16,    psEncCtrl->Gains_Q16,         MAX_NB_SUBFR * sizeof( SKP_int32 ) );
+
+        typeOffset     = psEnc->sCmn.typeOffsetPrev; // Temp save as cannot be overwritten
+        LTP_scaleIndex = psEncCtrl->sCmn.LTP_scaleIndex;
+
+        /* Set max rate where quant signal is encoded */
+        if( psEnc->sCmn.fs_kHz == 8 ) {
+            Rate_only_parameters = 13500;
+        } else if( psEnc->sCmn.fs_kHz == 12 ) {
+            Rate_only_parameters = 15500;
+        } else if( psEnc->sCmn.fs_kHz == 16 ) {
+            Rate_only_parameters = 17500;
+        } else if( psEnc->sCmn.fs_kHz == 24 ) {
+            Rate_only_parameters = 19500;
+        } else {
+            SKP_assert( 0 );
+        }
+
+        if( psEnc->sCmn.Complexity > 0 && psEnc->sCmn.TargetRate_bps > Rate_only_parameters ) {
+            if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) {
+                /* First frame in packet copy Everything */
+                SKP_memcpy( &psEnc->sNSQ_LBRR, &psEnc->sNSQ, sizeof( SKP_Silk_nsq_state ) );
+            
+                psEnc->sCmn.LBRRprevLastGainIndex = psEnc->sShape.LastGainIndex;
+                /* Increase Gains to get target LBRR rate */
+                psEncCtrl->sCmn.GainsIndices[ 0 ] = psEncCtrl->sCmn.GainsIndices[ 0 ] + psEnc->sCmn.LBRR_GainIncreases;
+                psEncCtrl->sCmn.GainsIndices[ 0 ] = SKP_LIMIT_int( psEncCtrl->sCmn.GainsIndices[ 0 ], 0, N_LEVELS_QGAIN - 1 );
+            }
+            /* Decode to get Gains in sync with decoder         */
+            /* Overwrite unquantized gains with quantized gains */
+            SKP_Silk_gains_dequant( psEncCtrl->Gains_Q16, psEncCtrl->sCmn.GainsIndices, 
+                &psEnc->sCmn.LBRRprevLastGainIndex, psEnc->sCmn.nFramesInPayloadBuf, psEnc->sCmn.nb_subfr );
+            /*****************************************/
+            /* Noise shaping quantization            */
+            /*****************************************/
+            if( psEnc->sCmn.nStatesDelayedDecision > 1 ) {
+                SKP_Silk_NSQ_del_dec( &psEnc->sCmn, &psEncCtrl->sCmn,
+                    &psEnc->sNSQ_LBRR, xfw, &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], 
+                    psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEncCtrl->PredCoef_Q12[ 0 ], psEncCtrl->LTPCoef_Q14, 
+                    psEncCtrl->AR2_Q13, psEncCtrl->HarmShapeGain_Q14, psEncCtrl->Tilt_Q14, psEncCtrl->LF_shp_Q14, 
+                    psEncCtrl->Gains_Q16, psEncCtrl->Lambda_Q10, psEncCtrl->LTP_scale_Q14 );
+            } else {
+                SKP_Silk_NSQ( &psEnc->sCmn, &psEncCtrl->sCmn,
+                    &psEnc->sNSQ_LBRR, xfw, &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], 
+                    psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEncCtrl->PredCoef_Q12[ 0 ], psEncCtrl->LTPCoef_Q14, 
+                    psEncCtrl->AR2_Q13, psEncCtrl->HarmShapeGain_Q14, psEncCtrl->Tilt_Q14, psEncCtrl->LF_shp_Q14, 
+                    psEncCtrl->Gains_Q16, psEncCtrl->Lambda_Q10, psEncCtrl->LTP_scale_Q14 );
+            }
+        } else {
+            SKP_memset( &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf *psEnc->sCmn.frame_length ], 0,
+                psEnc->sCmn.frame_length * sizeof( SKP_int ) );
+            psEncCtrl->sCmn.LTP_scaleIndex = 0;
+        }
+        /****************************************/
+        /* Initialize arithmetic coder          */
+        /****************************************/
+        if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) {
+            ec_byte_writeinit_buffer( &range_enc_celt_buf, psEnc->sCmn.sRC_LBRR.buffer, MAX_ARITHM_BYTES );
+            ec_enc_init( &psEnc->sCmn.sRC_LBRR.range_enc_celt_state, &range_enc_celt_buf );
+
+            SKP_Silk_range_enc_init( &psEnc->sCmn.sRC_LBRR );
+            psEnc->sCmn.nBytesInPayloadBuf = 0;
+        }
+
+        /****************************************/
+        /* Encode Parameters                    */
+        /****************************************/
+        SKP_Silk_encode_parameters_v4( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sCmn.sRC_LBRR );
+
+        if( psEnc->sCmn.sRC_LBRR.error ) {
+            /* encoder returned error: clear payload buffer */
+            nFramesInPayloadBuf = 0;
+        } else {
+            nFramesInPayloadBuf = psEnc->sCmn.nFramesInPayloadBuf + 1;
+        }
+
+        /****************************************/
+        /* finalize payload and copy to output  */
+        /****************************************/
+        if( SKP_SMULBB( nFramesInPayloadBuf, SKP_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr ) ) >= psEnc->sCmn.PacketSize_ms ) {
+
+            /* Check if FEC information should be added */
+            frame_terminator = SKP_SILK_LAST_FRAME;
+
+            /* Add the frame termination info to stream */
+            SKP_Silk_range_encoder( &psEnc->sCmn.sRC_LBRR, frame_terminator, SKP_Silk_FrameTermination_v4_CDF );
+            
+            /*********************************************/
+            /* Encode quantization indices of excitation */
+            /*********************************************/
+            for( i = 0; i < nFramesInPayloadBuf; i++ ) {
+                SKP_Silk_encode_pulses( &psEnc->sCmn.sRC_LBRR, psEnc->sCmn.sigtype[ i ], psEnc->sCmn.QuantOffsetType[ i ],
+                    &psEnc->sCmn.q_LBRR[ i * psEnc->sCmn.frame_length ], psEnc->sCmn.frame_length );
+            }
+            /* payload length so far */
+            SKP_Silk_range_encoder_get_length( &psEnc->sCmn.sRC_LBRR, &nBytes );
+
+            /* check that there is enough space in external output buffer, and move data */
+            if( *pnBytesOut >= nBytes ) {
+                SKP_int bits_in_stream, mask;
+                bits_in_stream = ec_enc_tell( &psEnc->sCmn.sRC_LBRR.range_enc_celt_state, 0 );
+                ec_enc_done( &psEnc->sCmn.sRC_LBRR.range_enc_celt_state );
+
+                /* Fill up any remaining bits in the last byte with 1s */
+                if( bits_in_stream & 7 ) {
+                    mask = SKP_RSHIFT( 0xFF, bits_in_stream & 7 );
+                    if( nBytes - 1 < *pnBytesOut ) {
+                        psEnc->sCmn.sRC_LBRR.range_enc_celt_state.buf->buf[ nBytes - 1 ] |= mask;
+                    }
+                }
+                SKP_memcpy( pCode, psEnc->sCmn.sRC_LBRR.range_enc_celt_state.buf->buf, nBytes * sizeof( SKP_uint8 ) );
+//#endif
+                *pnBytesOut = nBytes;
+            } else {
+                /* not enough space: payload will be discarded */
+                *pnBytesOut = 0;
+                SKP_assert( 0 );
+            }
+        } else {
+            /* no payload for you this time */
+            *pnBytesOut = 0;
+
+            /* Encode that more frames follows */
+            frame_terminator = SKP_SILK_MORE_FRAMES;
+            SKP_Silk_range_encoder( &psEnc->sCmn.sRC_LBRR, frame_terminator, SKP_Silk_FrameTermination_v4_CDF );
+        }
+
+        /* Restore original Gains */
+        SKP_memcpy( psEncCtrl->sCmn.GainsIndices, TempGainsIndices, MAX_NB_SUBFR * sizeof( SKP_int   ) );
+        SKP_memcpy( psEncCtrl->Gains_Q16,         TempGains_Q16,    MAX_NB_SUBFR * sizeof( SKP_int32 ) );
+    
+        /* Restore LTP scale index and typeoffset */
+        psEncCtrl->sCmn.LTP_scaleIndex = LTP_scaleIndex;
+        psEnc->sCmn.typeOffsetPrev = typeOffset;
+    }
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_find_LPC_FIX.c
@@ -1,0 +1,148 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+/* Finds LPC vector from correlations, and converts to NLSF */
+void SKP_Silk_find_LPC_FIX(
+    SKP_int             NLSF_Q15[],             /* O    NLSFs                                                                       */
+    SKP_int             *interpIndex,           /* O    NLSF interpolation index, only used for NLSF interpolation                  */
+    const SKP_int       prev_NLSFq_Q15[],       /* I    previous NLSFs, only used for NLSF interpolation                            */
+    const SKP_int       useInterpolatedNLSFs,   /* I    Flag                                                                        */
+    const SKP_int       LPC_order,              /* I    LPC order                                                                   */
+    const SKP_int16     x[],                    /* I    Input signal                                                                */
+    const SKP_int       subfr_length,           /* I    Input signal subframe length including preceeding samples                   */
+    const SKP_int       nb_subfr                /* I:   Number of subframes                                                         */
+)
+{
+    SKP_int     k;
+    SKP_int32   a_Q16[ MAX_LPC_ORDER ];
+
+    SKP_int     isInterpLower, shift;
+    SKP_int16   S[ MAX_LPC_ORDER ];
+    SKP_int32   res_nrg0, res_nrg1;
+    SKP_int     rshift0, rshift1; 
+
+    /* Used only for LSF interpolation */
+    SKP_int32   a_tmp_Q16[ MAX_LPC_ORDER ], res_nrg_interp, res_nrg, res_tmp_nrg, res_nrg_2nd;
+    SKP_int     res_nrg_interp_Q, res_nrg_Q, res_tmp_nrg_Q, res_nrg_2nd_Q;
+    SKP_int16   a_tmp_Q12[ MAX_LPC_ORDER ];
+    SKP_int     NLSF0_Q15[ MAX_LPC_ORDER ];
+    SKP_int16   LPC_res[ ( MAX_FRAME_LENGTH + MAX_NB_SUBFR * MAX_LPC_ORDER ) / 2 ];
+
+    /* Default: no interpolation */
+    *interpIndex = 4;
+
+    /* Burg AR analysis for the full frame */
+    SKP_Silk_burg_modified( &res_nrg, &res_nrg_Q, a_Q16, x, subfr_length, nb_subfr, FIND_LPC_COND_FAC_Q32, LPC_order );
+
+    if( useInterpolatedNLSFs == 1 && nb_subfr == MAX_NB_SUBFR ) {
+
+        /* Optimal solution for last 10 ms */
+        SKP_Silk_burg_modified( &res_tmp_nrg, &res_tmp_nrg_Q, a_tmp_Q16, x + ( MAX_NB_SUBFR >> 1 ) * subfr_length, 
+            subfr_length, ( MAX_NB_SUBFR >> 1 ), FIND_LPC_COND_FAC_Q32, LPC_order );
+
+        /* subtract residual energy here, as that's easier than adding it to the    */
+        /* residual energy of the first 10 ms in each iteration of the search below */
+        shift = res_tmp_nrg_Q - res_nrg_Q;
+        if( shift >= 0 ) {
+            if( shift < 32 ) { 
+                res_nrg = res_nrg - SKP_RSHIFT( res_tmp_nrg, shift );
+            }
+        } else {
+            SKP_assert( shift > -32 ); 
+            res_nrg   = SKP_RSHIFT( res_nrg, -shift ) - res_tmp_nrg;
+            res_nrg_Q = res_tmp_nrg_Q; 
+        }
+        
+        /* Convert to NLSFs */
+        SKP_Silk_A2NLSF( NLSF_Q15, a_tmp_Q16, LPC_order );
+
+        /* Search over interpolation indices to find the one with lowest residual energy */
+        res_nrg_2nd = SKP_int32_MAX;
+        for( k = 3; k >= 0; k-- ) {
+            /* Interpolate NLSFs for first half */
+            SKP_Silk_interpolate( NLSF0_Q15, prev_NLSFq_Q15, NLSF_Q15, k, LPC_order );
+
+            /* Convert to LPC for residual energy evaluation */
+            SKP_Silk_NLSF2A_stable( a_tmp_Q12, NLSF0_Q15, LPC_order );
+
+            /* Calculate residual energy with NLSF interpolation */
+            SKP_memset( S, 0, LPC_order * sizeof( SKP_int16 ) );
+            SKP_Silk_LPC_analysis_filter( x, a_tmp_Q12, S, LPC_res, 2 * subfr_length, LPC_order );
+
+            SKP_Silk_sum_sqr_shift( &res_nrg0, &rshift0, LPC_res + LPC_order,                subfr_length - LPC_order );
+            SKP_Silk_sum_sqr_shift( &res_nrg1, &rshift1, LPC_res + LPC_order + subfr_length, subfr_length - LPC_order );
+
+            /* Add subframe energies from first half frame */
+            shift = rshift0 - rshift1;
+            if( shift >= 0 ) {
+                res_nrg1         = SKP_RSHIFT( res_nrg1, shift );
+                res_nrg_interp_Q = -rshift0;
+            } else {
+                res_nrg0         = SKP_RSHIFT( res_nrg0, -shift );
+                res_nrg_interp_Q = -rshift1;
+            }
+            res_nrg_interp = SKP_ADD32( res_nrg0, res_nrg1 );
+
+            /* Compare with first half energy without NLSF interpolation, or best interpolated value so far */
+            shift = res_nrg_interp_Q - res_nrg_Q;
+            if( shift >= 0 ) {
+                if( SKP_RSHIFT( res_nrg_interp, shift ) < res_nrg ) {
+                    isInterpLower = SKP_TRUE;
+                } else {
+                    isInterpLower = SKP_FALSE;
+                }
+            } else {
+                if( -shift < 32 ) { 
+                    if( res_nrg_interp < SKP_RSHIFT( res_nrg, -shift ) ) {
+                        isInterpLower = SKP_TRUE;
+                    } else {
+                        isInterpLower = SKP_FALSE;
+                    }
+                } else {
+                    isInterpLower = SKP_FALSE;
+                }
+            }
+
+            /* Determine whether current interpolated NLSFs are best so far */
+            if( isInterpLower == SKP_TRUE ) {
+                /* Interpolation has lower residual energy */
+                res_nrg   = res_nrg_interp;
+                res_nrg_Q = res_nrg_interp_Q;
+                *interpIndex = k;
+            }
+            res_nrg_2nd   = res_nrg_interp;
+            res_nrg_2nd_Q = res_nrg_interp_Q;
+        }
+    }
+
+    if( *interpIndex == 4 ) {
+        /* NLSF interpolation is currently inactive, calculate NLSFs from full frame AR coefficients */
+        SKP_Silk_A2NLSF( NLSF_Q15, a_Q16, LPC_order );
+    }
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_find_LTP_FIX.c
@@ -1,0 +1,232 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+void SKP_Silk_fit_LTP(
+    SKP_int32 LTP_coefs_Q16[ LTP_ORDER ],
+    SKP_int16 LTP_coefs_Q14[ LTP_ORDER ]
+);
+
+void SKP_Silk_find_LTP_FIX(
+    SKP_int16           b_Q14[ MAX_NB_SUBFR * LTP_ORDER ],              /* O    LTP coefs                                                   */
+    SKP_int32           WLTP[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ],   /* O    Weight for LTP quantization                                 */
+    SKP_int             *LTPredCodGain_Q7,                              /* O    LTP coding gain                                             */
+    const SKP_int16     r_lpc[]  ,                                      /* I    residual signal after LPC signal + state for first 10 ms    */
+    const SKP_int       lag[ MAX_NB_SUBFR ],                            /* I    LTP lags                                                    */
+    const SKP_int32     Wght_Q15[ MAX_NB_SUBFR ],                       /* I    weights                                                     */
+    const SKP_int       subfr_length,                                   /* I    subframe length                                             */
+    const SKP_int       nb_subfr,                                       /* I    number of subframes                                         */
+    const SKP_int       mem_offset,                                     /* I    number of samples in LTP memory                             */
+    SKP_int             corr_rshifts[ MAX_NB_SUBFR ]                    /* O    right shifts applied to correlations                        */
+)
+{
+    SKP_int   i, k, lshift;
+    const SKP_int16 *r_ptr, *lag_ptr;
+    SKP_int16 *b_Q14_ptr;
+
+    SKP_int32 regu;
+    SKP_int32 *WLTP_ptr;
+    SKP_int32 b_Q16[ LTP_ORDER ], delta_b_Q14[ LTP_ORDER ], d_Q14[ MAX_NB_SUBFR ], nrg[ MAX_NB_SUBFR ], g_Q26;
+    SKP_int32 w[ MAX_NB_SUBFR ], WLTP_max, max_abs_d_Q14, max_w_bits;
+
+    SKP_int32 temp32, denom32;
+    SKP_int   extra_shifts;
+    SKP_int   rr_shifts, maxRshifts, maxRshifts_wxtra, LZs;
+    SKP_int32 LPC_res_nrg, LPC_LTP_res_nrg, div_Q16;
+    SKP_int32 Rr[ LTP_ORDER ], rr[ MAX_NB_SUBFR ];
+    SKP_int32 wd, m_Q12;
+    
+    b_Q14_ptr = b_Q14;
+    WLTP_ptr  = WLTP;
+    r_ptr     = &r_lpc[ mem_offset ];
+    for( k = 0; k < nb_subfr; k++ ) {
+        lag_ptr = r_ptr - ( lag[ k ] + LTP_ORDER / 2 );
+
+        SKP_Silk_sum_sqr_shift( &rr[ k ], &rr_shifts, r_ptr, subfr_length ); /* rr[ k ] in Q( -rr_shifts ) */
+        /* Assure headroom */
+        LZs = SKP_Silk_CLZ32( rr[k] );
+        if( LZs < LTP_CORRS_HEAD_ROOM ) {
+            rr[ k ] = SKP_RSHIFT_ROUND( rr[ k ], LTP_CORRS_HEAD_ROOM - LZs );
+            rr_shifts += (LTP_CORRS_HEAD_ROOM - LZs);
+        }
+        corr_rshifts[ k ] = rr_shifts;
+        SKP_Silk_corrMatrix_FIX( lag_ptr, subfr_length, LTP_ORDER, WLTP_ptr, &corr_rshifts[ k ] );     /* WLTP_fix_ptr in Q( -corr_rshifts[ k ] ) */
+        /* The correlation vector always have lower max abs value than rr and/or RR so head room is assured */
+        SKP_Silk_corrVector_FIX( lag_ptr, r_ptr, subfr_length, LTP_ORDER, Rr, corr_rshifts[ k ] ); /* Rr_fix_ptr   in Q( -corr_rshifts[ k ] ) */
+        if( corr_rshifts[ k ] > rr_shifts ) {
+            rr[ k ] = SKP_RSHIFT( rr[ k ], corr_rshifts[ k ] - rr_shifts ); /* rr[ k ] in Q( -corr_rshifts[ k ] ) */
+        }
+        SKP_assert( rr[ k ] >= 0 );
+
+        regu = SKP_SMULWB( rr[ k ] + 1, LTP_DAMPING_Q16 );
+        SKP_Silk_regularize_correlations_FIX( WLTP_ptr, &rr[k], regu, LTP_ORDER );
+
+        SKP_Silk_solve_LDL_FIX( WLTP_ptr, LTP_ORDER, Rr, b_Q16 ); /* WLTP_fix_ptr and Rr_fix_ptr both in Q(-corr_rshifts[k]) */
+
+        /* Limit and store in Q14 */
+        SKP_Silk_fit_LTP( b_Q16, b_Q14_ptr );
+
+        /* Calculate residual energy */
+        nrg[ k ] = SKP_Silk_residual_energy16_covar_FIX( b_Q14_ptr, WLTP_ptr, Rr, rr[ k ], LTP_ORDER, 14 ); /* nrg_fix in Q( -corr_rshifts[ k ] ) */
+
+        /* temp = Wght[ k ] / ( nrg[ k ] * Wght[ k ] + 0.01f * subfr_length ); */
+        extra_shifts = SKP_min_int( corr_rshifts[ k ], LTP_CORRS_HEAD_ROOM );
+        denom32 = SKP_LSHIFT_SAT32( SKP_SMULWB( nrg[ k ], Wght_Q15[ k ] ), 1 + extra_shifts ) +  /* Q( -corr_rshifts[ k ] + extra_shifts ) */
+            SKP_RSHIFT( SKP_SMULWB( subfr_length, 655 ), corr_rshifts[ k ] - extra_shifts );     /* Q( -corr_rshifts[ k ] + extra_shifts ) */
+        denom32 = SKP_max( denom32, 1 );
+        SKP_assert( ((SKP_int64)Wght_Q15[ k ] << 16 ) < SKP_int32_MAX ); /* Wght always < 0.5 in Q0 */
+        temp32 = SKP_DIV32( SKP_LSHIFT( ( SKP_int32 )Wght_Q15[ k ], 16 ), denom32 );  /* Q( 15 + 16 + corr_rshifts[k] - extra_shifts ) */
+        temp32 = SKP_RSHIFT( temp32, 31 + corr_rshifts[ k ] - extra_shifts - 26 );  /* Q26 */
+        
+        /* Limit temp such that the below scaling never wraps around */
+        WLTP_max = 0;
+        for( i = 0; i < LTP_ORDER * LTP_ORDER; i++ ) {
+            WLTP_max = SKP_max( WLTP_ptr[ i ], WLTP_max );
+        }
+        lshift = SKP_Silk_CLZ32( WLTP_max ) - 1 - 3; /* keep 3 bits free for vq_nearest_neighbor_fix */
+        SKP_assert( 26 - 18 + lshift >= 0 );
+        if( 26 - 18 + lshift < 31 ) {
+            temp32 = SKP_min_32( temp32, SKP_LSHIFT( ( SKP_int32 )1, 26 - 18 + lshift ) );
+        }
+
+        SKP_Silk_scale_vector32_Q26_lshift_18( WLTP_ptr, temp32, LTP_ORDER * LTP_ORDER ); /* WLTP_ptr in Q( 18 - corr_rshifts[ k ] ) */
+        
+        w[ k ] = matrix_ptr( WLTP_ptr, ( LTP_ORDER >> 1 ), ( LTP_ORDER >> 1 ), LTP_ORDER ); /* w in Q( 18 - corr_rshifts[ k ] ) */
+        SKP_assert( w[k] >= 0 );
+
+        r_ptr     += subfr_length;
+        b_Q14_ptr += LTP_ORDER;
+        WLTP_ptr  += LTP_ORDER * LTP_ORDER;
+    }
+
+    maxRshifts = 0;
+    for( k = 0; k < nb_subfr; k++ ) {
+        maxRshifts = SKP_max_int( corr_rshifts[ k ], maxRshifts );
+    }
+
+    /* compute LTP coding gain */
+    if( LTPredCodGain_Q7 != NULL ) {
+        LPC_LTP_res_nrg = 0;
+        LPC_res_nrg     = 0;
+        SKP_assert( LTP_CORRS_HEAD_ROOM >= 2 ); /* Check that no overflow will happen when adding */
+        for( k = 0; k < nb_subfr; k++ ) {
+            LPC_res_nrg     = SKP_ADD32( LPC_res_nrg,     SKP_RSHIFT( SKP_ADD32( SKP_SMULWB(  rr[ k ], Wght_Q15[ k ] ), 1 ), 1 + ( maxRshifts - corr_rshifts[ k ] ) ) ); /*  Q( -maxRshifts ) */
+            LPC_LTP_res_nrg = SKP_ADD32( LPC_LTP_res_nrg, SKP_RSHIFT( SKP_ADD32( SKP_SMULWB( nrg[ k ], Wght_Q15[ k ] ), 1 ), 1 + ( maxRshifts - corr_rshifts[ k ] ) ) ); /*  Q( -maxRshifts ) */
+        }
+        LPC_LTP_res_nrg = SKP_max( LPC_LTP_res_nrg, 1 ); /* avoid division by zero */
+
+        div_Q16 = SKP_DIV32_varQ( LPC_res_nrg, LPC_LTP_res_nrg, 16 );
+        *LTPredCodGain_Q7 = ( SKP_int )SKP_SMULBB( 3, SKP_Silk_lin2log( div_Q16 ) - ( 16 << 7 ) );
+
+        SKP_assert( *LTPredCodGain_Q7 == ( SKP_int )SKP_SAT16( SKP_MUL( 3, SKP_Silk_lin2log( div_Q16 ) - ( 16 << 7 ) ) ) );
+    }
+
+    /* smoothing */
+    /* d = sum( B, 1 ); */
+    b_Q14_ptr = b_Q14;
+    for( k = 0; k < nb_subfr; k++ ) {
+        d_Q14[ k ] = 0;
+        for( i = 0; i < LTP_ORDER; i++ ) {
+            d_Q14[ k ] += b_Q14_ptr[ i ];
+        }
+        b_Q14_ptr += LTP_ORDER;
+    }
+
+    /* m = ( w * d' ) / ( sum( w ) + 1e-3 ); */
+        
+    /* Find maximum absolute value of d_Q14 and the bits used by w in Q0 */
+    max_abs_d_Q14 = 0;
+    max_w_bits    = 0;
+    for( k = 0; k < nb_subfr; k++ ) {
+        max_abs_d_Q14 = SKP_max_32( max_abs_d_Q14, SKP_abs( d_Q14[ k ] ) );
+        /* w[ k ] is in Q( 18 - corr_rshifts[ k ] ) */
+        /* Find bits needed in Q( 18 - maxRshifts ) */
+        max_w_bits = SKP_max_32( max_w_bits, 32 - SKP_Silk_CLZ32( w[ k ] ) + corr_rshifts[ k ] - maxRshifts ); 
+    }
+
+    /* max_abs_d_Q14 = (5 << 15); worst case, i.e. LTP_ORDER * -SKP_int16_MIN */
+    SKP_assert( max_abs_d_Q14 <= ( 5 << 15 ) );
+
+    /* How many bits is needed for w*d' in Q( 18 - maxRshifts ) in the worst case, of all d_Q14's being equal to max_abs_d_Q14 */
+    extra_shifts = max_w_bits + 32 - SKP_Silk_CLZ32( max_abs_d_Q14 ) - 14;
+    
+    /* Subtract what we got available; bits in output var plus maxRshifts */
+    extra_shifts -= ( 32 - 1 - 2 + maxRshifts ); /* Keep sign bit free as well as 2 bits for accumulation */
+    extra_shifts = SKP_max_int( extra_shifts, 0 );
+
+    maxRshifts_wxtra = maxRshifts + extra_shifts;
+    
+    temp32 = SKP_RSHIFT( 262, maxRshifts + extra_shifts ) + 1; /* 1e-3f in Q( 18 - (maxRshifts + extra_shifts) ) */
+    wd = 0;
+    for( k = 0; k < nb_subfr; k++ ) {
+        /* w has at least 2 bits of headroom so no overflow should happen */
+        temp32 = SKP_ADD32( temp32,                     SKP_RSHIFT( w[ k ], maxRshifts_wxtra - corr_rshifts[ k ] ) );                    /* Q( 18 - maxRshifts_wxtra ) */
+        wd     = SKP_ADD32( wd, SKP_LSHIFT( SKP_SMULWW( SKP_RSHIFT( w[ k ], maxRshifts_wxtra - corr_rshifts[ k ] ), d_Q14[ k ] ), 2 ) ); /* Q( 18 - maxRshifts_wxtra ) */
+    }
+    m_Q12 = SKP_DIV32_varQ( wd, temp32, 12 );
+
+    b_Q14_ptr = b_Q14;
+    for( k = 0; k < nb_subfr; k++ ) {
+        /* w_fix[ k ] from Q( 18 - corr_rshifts[ k ] ) to Q( 16 ) */
+        if( 2 - corr_rshifts[k] > 0 ) {
+            temp32 = SKP_RSHIFT( w[ k ], 2 - corr_rshifts[ k ] );
+        } else {
+            temp32 = SKP_LSHIFT_SAT32( w[ k ], corr_rshifts[ k ] - 2 );
+        }
+
+        g_Q26 = SKP_MUL( 
+            SKP_DIV32( 
+                LTP_SMOOTHING_Q26, 
+                SKP_RSHIFT( LTP_SMOOTHING_Q26, 10 ) + temp32 ),                                       /* Q10 */ 
+            SKP_LSHIFT_SAT32( SKP_SUB_SAT32( ( SKP_int32 )m_Q12, SKP_RSHIFT( d_Q14[ k ], 2 ) ), 4 ) );  /* Q16 */
+
+        temp32 = 0;
+        for( i = 0; i < LTP_ORDER; i++ ) {
+            delta_b_Q14[ i ] = SKP_max_16( b_Q14_ptr[ i ], 1638 );  /* 1638_Q14 = 0.1_Q0 */
+            temp32 += delta_b_Q14[ i ];                          /* Q14 */
+        }
+        temp32 = SKP_DIV32( g_Q26, temp32 ); /* Q14->Q12 */
+        for( i = 0; i < LTP_ORDER; i++ ) {
+            b_Q14_ptr[ i ] = SKP_LIMIT_32( ( SKP_int32 )b_Q14_ptr[ i ] + SKP_SMULWB( SKP_LSHIFT_SAT32( temp32, 4 ), delta_b_Q14[ i ] ), -16000, 28000 );
+        }
+        b_Q14_ptr += LTP_ORDER;
+    }
+TOC(find_LTP_FIX)
+}
+
+void SKP_Silk_fit_LTP(
+    SKP_int32 LTP_coefs_Q16[ LTP_ORDER ],
+    SKP_int16 LTP_coefs_Q14[ LTP_ORDER ]
+)
+{
+    SKP_int i;
+
+    for( i = 0; i < LTP_ORDER; i++ ) {
+        LTP_coefs_Q14[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( LTP_coefs_Q16[ i ], 2 ) );
+    }
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_find_pitch_lags_FIX.c
@@ -1,0 +1,124 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+#include "SKP_Silk_common_pitch_est_defines.h"
+
+/* Find pitch lags */
+void SKP_Silk_find_pitch_lags_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  encoder state                               */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  encoder control                             */
+    SKP_int16                       res[],          /* O    residual                                    */
+    const SKP_int16                 x[]             /* I    Speech signal                               */
+)
+{
+    SKP_Silk_predict_state_FIX *psPredSt = &psEnc->sPred;
+    SKP_int   buf_len, i, scale;
+    SKP_int32 thrhld_Q15;
+    const SKP_int16 *x_buf, *x_buf_ptr;
+    SKP_int16 Wsig[      FIND_PITCH_LPC_WIN_MAX ], *Wsig_ptr;
+    SKP_int32 auto_corr[ MAX_FIND_PITCH_LPC_ORDER + 1 ];
+    SKP_int16 rc_Q15[    MAX_FIND_PITCH_LPC_ORDER ];
+    SKP_int32 A_Q24[     MAX_FIND_PITCH_LPC_ORDER ];
+    SKP_int32 FiltState[ MAX_FIND_PITCH_LPC_ORDER ];
+    SKP_int16 A_Q12[     MAX_FIND_PITCH_LPC_ORDER ];
+
+    /******************************************/
+    /* Setup buffer lengths etc based on Fs   */
+    /******************************************/
+    buf_len = psEnc->sCmn.la_pitch + psEnc->sCmn.frame_length + psEnc->sCmn.ltp_mem_length;
+
+    /* Safty check */
+    SKP_assert( buf_len >= psPredSt->pitch_LPC_win_length );
+
+    x_buf = x - psEnc->sCmn.ltp_mem_length;
+
+    /*************************************/
+    /* Estimate LPC AR coefficients      */
+    /*************************************/
+    
+    /* Calculate windowed signal */
+    
+    /* First LA_LTP samples */
+    x_buf_ptr = x_buf + buf_len - psPredSt->pitch_LPC_win_length;
+    Wsig_ptr  = Wsig;
+    SKP_Silk_apply_sine_window( Wsig_ptr, x_buf_ptr, 1, psEnc->sCmn.la_pitch );
+
+    /* Middle un - windowed samples */
+    Wsig_ptr  += psEnc->sCmn.la_pitch;
+    x_buf_ptr += psEnc->sCmn.la_pitch;
+    SKP_memcpy( Wsig_ptr, x_buf_ptr, ( psPredSt->pitch_LPC_win_length - SKP_LSHIFT( psEnc->sCmn.la_pitch, 1 ) ) * sizeof( SKP_int16 ) );
+
+    /* Last LA_LTP samples */
+    Wsig_ptr  += psPredSt->pitch_LPC_win_length - SKP_LSHIFT( psEnc->sCmn.la_pitch, 1 );
+    x_buf_ptr += psPredSt->pitch_LPC_win_length - SKP_LSHIFT( psEnc->sCmn.la_pitch, 1 );
+    SKP_Silk_apply_sine_window( Wsig_ptr, x_buf_ptr, 2, psEnc->sCmn.la_pitch );
+
+    /* Calculate autocorrelation sequence */
+    SKP_Silk_autocorr( auto_corr, &scale, Wsig, psPredSt->pitch_LPC_win_length, psEnc->sCmn.pitchEstimationLPCOrder + 1 ); 
+        
+    /* add white noise, as fraction of energy */
+    auto_corr[ 0 ] = SKP_SMLAWB( auto_corr[ 0 ], auto_corr[ 0 ], FIND_PITCH_WHITE_NOISE_FRACTION_Q16 );
+
+    /* calculate the reflection coefficients using schur */
+    SKP_Silk_schur( rc_Q15, auto_corr, psEnc->sCmn.pitchEstimationLPCOrder );
+
+    /* convert reflection coefficients to prediction coefficients */
+    SKP_Silk_k2a( A_Q24, rc_Q15, psEnc->sCmn.pitchEstimationLPCOrder );
+    
+    /* Convert From 32 bit Q24 to 16 bit Q12 coefs */
+    for( i = 0; i < psEnc->sCmn.pitchEstimationLPCOrder; i++ ) {
+        A_Q12[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT( A_Q24[ i ], 12 ) );
+    }
+
+    /* Do BWE */
+    SKP_Silk_bwexpander( A_Q12, psEnc->sCmn.pitchEstimationLPCOrder, FIND_PITCH_BANDWITH_EXPANSION_Q16 );
+    
+    /*****************************************/
+    /* LPC analysis filtering                */
+    /*****************************************/
+    SKP_memset( FiltState, 0, psEnc->sCmn.pitchEstimationLPCOrder * sizeof( SKP_int32 ) ); /* Not really necessary, but Valgrind will complain otherwise */
+    SKP_Silk_MA_Prediction( x_buf, A_Q12, FiltState, res, buf_len, psEnc->sCmn.pitchEstimationLPCOrder );
+    SKP_memset( res, 0, psEnc->sCmn.pitchEstimationLPCOrder * sizeof( SKP_int16 ) );
+
+    /* Threshold for pitch estimator */
+    thrhld_Q15 = ( 1 << 14 ); // 0.5f in Q15
+    thrhld_Q15 = SKP_SMLABB( thrhld_Q15, -131, psEnc->sCmn.pitchEstimationLPCOrder );
+    thrhld_Q15 = SKP_SMLABB( thrhld_Q15,  -13, ( SKP_int16 )SKP_Silk_SQRT_APPROX( SKP_LSHIFT( ( SKP_int32 )psEnc->speech_activity_Q8, 8 ) ) );
+    thrhld_Q15 = SKP_SMLABB( thrhld_Q15, 4587, psEnc->sCmn.prev_sigtype );
+    thrhld_Q15 = SKP_MLA(    thrhld_Q15,  -31, SKP_RSHIFT( psEncCtrl->input_tilt_Q15, 8 ) );
+    thrhld_Q15 = SKP_SAT16(  thrhld_Q15 );
+
+    /*****************************************/
+    /* Call pitch estimator                  */
+    /*****************************************/
+TIC(pitch_analysis_core_FIX)
+    psEncCtrl->sCmn.sigtype = SKP_Silk_pitch_analysis_core( res, psEncCtrl->sCmn.pitchL, &psEncCtrl->sCmn.lagIndex, 
+        &psEncCtrl->sCmn.contourIndex, &psEnc->LTPCorr_Q15, psEnc->sCmn.prevLag, psEnc->pitchEstimationThreshold_Q16, 
+        ( SKP_int16 )thrhld_Q15, psEnc->sCmn.fs_kHz, psEnc->sCmn.pitchEstimationComplexity, psEnc->sCmn.nb_subfr );
+TOC(pitch_analysis_core_FIX)
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_find_pred_coefs_FIX.c
@@ -1,0 +1,442 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+#include <math.h>
+
+void SKP_Silk_LTP_ana_core(
+    SKP_float                       r_LPC[],        /* I    LPC residual            */
+    SKP_float                       r_LTP[],        /* O    LTP residual            */
+    const SKP_int                   pitchL[],       /* I    pitch lags              */
+    const SKP_float                 LTPCoef[],      /* I    LTP Coeficients         */
+    SKP_int                         subfr_length,   /* I    smpls in one sub frame  */
+    SKP_int                         LTP_mem_length  /* I    Length of LTP state of input */
+);
+
+void SKP_Silk_LPC_analysis_filter_FLP(
+    SKP_float                       r_LPC[],        /* O    LPC residual signal             */
+    const SKP_float                 PredCoef[],     /* I    LPC coeficicnts                 */
+    const SKP_float                 s[],            /* I    Input Signal                    */
+    SKP_int                         length,         /* I    length of signal                */
+    SKP_int                         Order           /* I    LPC order                       */
+);
+
+double SKP_Silk_energy_FLP( 
+    const SKP_float     *data, 
+    SKP_int             dataSize
+);
+
+/* integer to floating-point conversion */
+SKP_INLINE void SKP_short2float_array(
+	SKP_float		*out, 
+	const SKP_int16 *in, 
+	SKP_int32		length
+);
+
+SKP_INLINE SKP_float SKP_Silk_log2( double x ) { return ( SKP_float )( 3.32192809488736 * log10( x ) ); }
+
+#endif
+
+void SKP_Silk_find_pred_coefs_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  encoder state                               */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  encoder control                             */
+    const SKP_int16                 res_pitch[]     /* I    Residual from pitch analysis                */
+)
+{
+    SKP_int         i;
+    SKP_int32       WLTP[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ];
+    SKP_int32       invGains_Q16[ MAX_NB_SUBFR ], local_gains[ MAX_NB_SUBFR ], Wght_Q15[ MAX_NB_SUBFR ];
+    SKP_int         NLSF_Q15[ MAX_LPC_ORDER ];
+    const SKP_int16 *x_ptr;
+    SKP_int16       *x_pre_ptr, LPC_in_pre[ MAX_NB_SUBFR * MAX_LPC_ORDER + MAX_FRAME_LENGTH ];
+    SKP_int32       tmp, min_gain_Q16;
+    SKP_int         LTP_corrs_rshift[ MAX_NB_SUBFR ];
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+    SKP_int16 uq_PredCoef_Q12[ MAX_NB_SUBFR >> 1 ][ MAX_LPC_ORDER ];
+    SKP_float uq_PredCoef[     MAX_NB_SUBFR >> 1 ][ MAX_LPC_ORDER ];
+    SKP_float uq_LTPCoef[ MAX_NB_SUBFR * LTP_ORDER ];
+#endif
+
+    /* weighting for weighted least squares */
+    min_gain_Q16 = SKP_int32_MAX >> 6;
+    for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
+        min_gain_Q16 = SKP_min( min_gain_Q16, psEncCtrl->Gains_Q16[ i ] );
+    }
+    for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
+        /* Divide to Q16 */
+        SKP_assert( psEncCtrl->Gains_Q16[ i ] > 0 );
+        /* Invert and normalize gains, and ensure that maximum invGains_Q16 is within range of a 16 bit int */
+        invGains_Q16[ i ] = SKP_DIV32_varQ( min_gain_Q16, psEncCtrl->Gains_Q16[ i ], 16 - 2 );
+
+        /* Ensure Wght_Q15 a minimum value 1 */
+        invGains_Q16[ i ] = SKP_max( invGains_Q16[ i ], 363 ); 
+        
+        /* Square the inverted gains */
+        SKP_assert( invGains_Q16[ i ] == SKP_SAT16( invGains_Q16[ i ] ) );
+        tmp = SKP_SMULWB( invGains_Q16[ i ], invGains_Q16[ i ] );
+        Wght_Q15[ i ] = SKP_RSHIFT( tmp, 1 );
+
+        /* Invert the inverted and normalized gains */
+        local_gains[ i ] = SKP_DIV32( ( 1 << 16 ), invGains_Q16[ i ] );
+    }
+
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        /**********/
+        /* VOICED */
+        /**********/
+        SKP_assert( psEnc->sCmn.ltp_mem_length - psEnc->sCmn.predictLPCOrder >= psEncCtrl->sCmn.pitchL[ 0 ] + LTP_ORDER / 2 );
+
+        /* LTP analysis */
+        SKP_Silk_find_LTP_FIX( psEncCtrl->LTPCoef_Q14, WLTP, &psEncCtrl->LTPredCodGain_Q7, 
+            res_pitch, psEncCtrl->sCmn.pitchL, Wght_Q15, psEnc->sCmn.subfr_length, 
+            psEnc->sCmn.nb_subfr, psEnc->sCmn.ltp_mem_length, LTP_corrs_rshift );
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+        /* Save unquantized LTP coefficients */
+        for( i = 0; i < LTP_ORDER * psEnc->sCmn.nb_subfr; i++ ) {
+            uq_LTPCoef[ i ] = (SKP_float)psEncCtrl->LTPCoef_Q14[ i ] / 16384.0f;
+        }
+#endif
+
+        /* Quantize LTP gain parameters */
+        SKP_Silk_quant_LTP_gains_FIX( psEncCtrl->LTPCoef_Q14, psEncCtrl->sCmn.LTPIndex, &psEncCtrl->sCmn.PERIndex, 
+            WLTP, psEnc->mu_LTP_Q8, psEnc->sCmn.LTPQuantLowComplexity, psEnc->sCmn.nb_subfr);
+
+        /* Control LTP scaling */
+        SKP_Silk_LTP_scale_ctrl_FIX( psEnc, psEncCtrl );
+
+        /* Create LTP residual */
+        SKP_Silk_LTP_analysis_filter_FIX( LPC_in_pre, psEnc->x_buf + psEnc->sCmn.ltp_mem_length - psEnc->sCmn.predictLPCOrder, 
+            psEncCtrl->LTPCoef_Q14, psEncCtrl->sCmn.pitchL, invGains_Q16, psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr, psEnc->sCmn.predictLPCOrder );
+
+    } else {
+        /************/
+        /* UNVOICED */
+        /************/
+        /* Create signal with prepended subframes, scaled by inverse gains */
+        x_ptr     = psEnc->x_buf + psEnc->sCmn.ltp_mem_length - psEnc->sCmn.predictLPCOrder;
+        x_pre_ptr = LPC_in_pre;
+        for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
+            SKP_Silk_scale_copy_vector16( x_pre_ptr, x_ptr, invGains_Q16[ i ], 
+                psEnc->sCmn.subfr_length + psEnc->sCmn.predictLPCOrder );
+            x_pre_ptr += psEnc->sCmn.subfr_length + psEnc->sCmn.predictLPCOrder;
+            x_ptr     += psEnc->sCmn.subfr_length;
+        }
+
+        SKP_memset( psEncCtrl->LTPCoef_Q14, 0, psEnc->sCmn.nb_subfr * LTP_ORDER * sizeof( SKP_int16 ) );
+        psEncCtrl->LTPredCodGain_Q7 = 0;
+    }
+
+    /* LPC_in_pre contains the LTP-filtered input for voiced, and the unfiltered input for unvoiced */
+    TIC(FIND_LPC)
+    SKP_Silk_find_LPC_FIX( NLSF_Q15, &psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEnc->sPred.prev_NLSFq_Q15, 
+        psEnc->sCmn.useInterpolatedNLSFs * ( 1 - psEnc->sCmn.first_frame_after_reset ), psEnc->sCmn.predictLPCOrder, 
+        LPC_in_pre, psEnc->sCmn.subfr_length + psEnc->sCmn.predictLPCOrder, psEnc->sCmn.nb_subfr );
+    TOC(FIND_LPC)
+
+#ifdef SAVE_ALL_INTERNAL_DATA /* Save unquantized LPC's */
+    if( psEnc->sCmn.useInterpolatedNLSFs == 0 ) {
+        /* Convert back to filter representation */
+        SKP_Silk_NLSF2A_stable( uq_PredCoef_Q12[ 0 ], NLSF_Q15, psEnc->sCmn.predictLPCOrder );
+        SKP_memcpy( uq_PredCoef_Q12[ 1 ], uq_PredCoef_Q12[ 0 ], psEnc->sCmn.predictLPCOrder * sizeof( SKP_int16 ) );
+    } else { /* i.e. if( psEnc->useInterpolatedLSFs != 0 ) */
+        SKP_int iNLSF_Q15[ MAX_LPC_ORDER ];
+
+        /* Update interpolated LSF0 coefficients taking quantization of LSF1 coefficients into account */
+        SKP_Silk_interpolate( iNLSF_Q15, psEnc->sPred.prev_NLSFq_Q15, NLSF_Q15, 
+            psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEnc->sCmn.predictLPCOrder );
+
+        /* Convert back to filter representation */
+        SKP_Silk_NLSF2A_stable( uq_PredCoef_Q12[ 0 ], iNLSF_Q15, psEnc->sCmn.predictLPCOrder );
+
+        /* Convert back to filter representation */
+        SKP_Silk_NLSF2A_stable( uq_PredCoef_Q12[ 1 ], NLSF_Q15, psEnc->sCmn.predictLPCOrder );
+    }
+    
+    /* Convert to FLP */
+    for( i = 0; i < psEnc->sCmn.predictLPCOrder; i++ ) {
+        uq_PredCoef[ 0 ][ i ] = (SKP_float)uq_PredCoef_Q12[ 0 ][ i ] / 4096.0f;
+        uq_PredCoef[ 1 ][ i ] = (SKP_float)uq_PredCoef_Q12[ 1 ][ i ] / 4096.0f;
+    }
+#endif
+
+    /* Quantize LSFs */
+    TIC(PROCESS_LSFS)
+        SKP_Silk_process_NLSFs_FIX( psEnc, psEncCtrl, NLSF_Q15 );
+    TOC(PROCESS_LSFS)
+
+    /* Calculate residual energy using quantized LPC coefficients */
+    SKP_Silk_residual_energy_FIX( psEncCtrl->ResNrg, psEncCtrl->ResNrgQ, LPC_in_pre, psEncCtrl->PredCoef_Q12, local_gains,
+        psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr, psEnc->sCmn.predictLPCOrder );
+
+    /* Copy to prediction struct for use in next frame for fluctuation reduction */
+    SKP_memcpy( psEnc->sPred.prev_NLSFq_Q15, NLSF_Q15, psEnc->sCmn.predictLPCOrder * sizeof( SKP_int ) );
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+    {
+        SKP_int   j, k;
+        SKP_float in_nrg, *in_ptr;
+        SKP_float LPC_res_nrg, qLPC_res_nrg, LTP_res_nrg, qLTP_res_nrg;
+        SKP_float LPC_predCodGain, QLPC_predCodGain, QLTP_predCodGain, LTPredCodGain, predCodGain;
+        SKP_float LPC_res[ MAX_FRAME_LENGTH << 1 ], LTP_res[ MAX_FRAME_LENGTH ];
+        SKP_float SF_resNrg[ MAX_NB_SUBFR ];
+
+        SKP_float x_flp[ 2 * MAX_FRAME_LENGTH ];
+        SKP_float Wght[ MAX_NB_SUBFR ];
+        SKP_float PredCoef[ 2 ][ MAX_LPC_ORDER ];
+        SKP_float LTPCoef[ MAX_NB_SUBFR * LTP_ORDER ];
+
+        /* Convert various FIX data to FLP */
+        SKP_short2float_array( x_flp, psEnc->x_buf, psEnc->sCmn.ltp_mem_length + psEnc->sCmn.frame_length );
+        for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+            Wght[ k ] = ( (SKP_float)Wght_Q15[ k ] / 32768.0f );
+        }
+        for( i = 0; i < psEnc->sCmn.predictLPCOrder; i++ ) {
+            PredCoef[ 0 ][ i ] = (SKP_float)psEncCtrl->PredCoef_Q12[ 0 ][ i ] / 4096.0f;
+            PredCoef[ 1 ][ i ] = (SKP_float)psEncCtrl->PredCoef_Q12[ 1 ][ i ] / 4096.0f;
+        }
+        for( i = 0; i < psEnc->sCmn.nb_subfr * LTP_ORDER; i++ ) {
+            LTPCoef[ i ] = (SKP_float)psEncCtrl->LTPCoef_Q14[ i ] / 16384.0f;
+        }
+
+        /* Weighted input energy */
+        in_ptr = &x_flp[ psEnc->sCmn.ltp_mem_length ];
+        DEBUG_STORE_DATA( x_flp.dat, x_flp, psEnc->sCmn.frame_length * sizeof(SKP_float));
+        DEBUG_STORE_DATA( in_ptr.dat, in_ptr, psEnc->sCmn.frame_length * sizeof(SKP_float));
+        in_nrg = 0.0f;
+        for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+            in_nrg += (SKP_float)SKP_Silk_energy_FLP( in_ptr, psEnc->sCmn.subfr_length ) * Wght[ k ];
+            in_ptr += psEnc->sCmn.subfr_length;
+        }
+
+        if( psEnc->sCmn.useInterpolatedNLSFs == 0 ) {
+            SKP_memcpy( PredCoef[ 0 ], PredCoef[ 1 ], psEnc->sCmn.predictLPCOrder * sizeof( SKP_float ) );
+        }
+
+        DEBUG_STORE_DATA( uq_PredCoef.dat, uq_PredCoef[0], psEnc->sCmn.predictLPCOrder * sizeof( SKP_float ) );
+        DEBUG_STORE_DATA( PredCoef.dat, PredCoef[0], psEnc->sCmn.predictLPCOrder * sizeof( SKP_float ) );
+
+        LPC_res_nrg  = 0.0f;
+        LTP_res_nrg  = 0.0f;
+        qLPC_res_nrg = 0.0f;
+        qLTP_res_nrg = 0.0f;
+        for( j = 0; j < psEnc->sCmn.nb_subfr; j+=2 ) {
+            /* Calculate LPC residual with unquantized LPC */
+            SKP_Silk_LPC_analysis_filter_FLP( LPC_res, uq_PredCoef[ j >> 1 ], &x_flp[ j * psEnc->sCmn.subfr_length ],
+                ( psEnc->sCmn.ltp_mem_length + ( psEnc->sCmn.subfr_length << 1 ) ), psEnc->sCmn.predictLPCOrder );
+
+            /* Weighted energy */
+            in_ptr = &LPC_res[ psEnc->sCmn.ltp_mem_length ];
+            for( k = 0; k < 2; k++ ) {
+                LPC_res_nrg += (SKP_float)SKP_Silk_energy_FLP( in_ptr, psEnc->sCmn.subfr_length ) * Wght[ j + k ];
+                in_ptr      += psEnc->sCmn.subfr_length;
+            }
+                
+            if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+                /* Calculate LTP residual with unquantized LTP and unquantized LPC */
+                SKP_Silk_LTP_ana_core( LPC_res, LTP_res, &psEncCtrl->sCmn.pitchL[ j ],
+                    &uq_LTPCoef[ j * LTP_ORDER ], psEnc->sCmn.subfr_length, psEnc->sCmn.ltp_mem_length );
+
+                /* Weighted energy */
+                in_ptr = LTP_res;
+                for( k = 0; k < 2; k++ ) {
+                    LTP_res_nrg += (SKP_float)SKP_Silk_energy_FLP( in_ptr, psEnc->sCmn.subfr_length ) * Wght[ j + k ];
+                    in_ptr      += psEnc->sCmn.subfr_length;
+                }
+            }
+
+            /* Calculate LPC residual with quantized LPC */
+            SKP_Silk_LPC_analysis_filter_FLP( LPC_res, PredCoef[ j >> 1 ], &x_flp[ j * psEnc->sCmn.subfr_length ],
+                ( psEnc->sCmn.ltp_mem_length + ( psEnc->sCmn.subfr_length << 1 ) ), psEnc->sCmn.predictLPCOrder );
+
+            /* Weighted energy */
+            in_ptr = &LPC_res[ psEnc->sCmn.ltp_mem_length ];
+            for( k = 0; k < 2; k++ ) {
+                SF_resNrg[ k + j ] = (SKP_float)SKP_Silk_energy_FLP( in_ptr, psEnc->sCmn.subfr_length );
+                qLPC_res_nrg += SF_resNrg[ k + j ] * Wght[ j + k ];
+                in_ptr       += psEnc->sCmn.subfr_length;
+            }
+
+            if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+                /* Calculate LTP residual with unquantized LTP and unquantized LPC */
+                SKP_Silk_LTP_ana_core( LPC_res, LTP_res, &psEncCtrl->sCmn.pitchL[ j ],
+                    &LTPCoef[ j * LTP_ORDER ], psEnc->sCmn.subfr_length, psEnc->sCmn.ltp_mem_length );
+
+                /* Weighted energy */
+                in_ptr = LTP_res;
+                for( k = 0; k < 2; k++ ) {
+                    SF_resNrg[ k + j ] = (SKP_float)SKP_Silk_energy_FLP( in_ptr, psEnc->sCmn.subfr_length );
+                    qLTP_res_nrg += SF_resNrg[ k + j ] * Wght[ j + k ];
+                    in_ptr       += psEnc->sCmn.subfr_length;
+                }
+            } else {
+                SKP_memcpy( LTP_res, &LPC_res[ psEnc->sCmn.ltp_mem_length ], ( psEnc->sCmn.subfr_length << 1 ) * sizeof( SKP_float ) );
+            }
+            /* Save residual */
+            DEBUG_STORE_DATA( LPC_res.dat,          &LPC_res[ psEnc->sCmn.ltp_mem_length ], (psEnc->sCmn.subfr_length << 1) * sizeof( SKP_float ) );
+            DEBUG_STORE_DATA( res.dat,              LTP_res,                              ( psEnc->sCmn.subfr_length << 1 ) * sizeof( SKP_float ) );
+        }
+        if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+            LPC_predCodGain  = 3.0f * SKP_Silk_log2( in_nrg       / LPC_res_nrg  );
+            QLPC_predCodGain = 3.0f * SKP_Silk_log2( in_nrg       / qLPC_res_nrg );
+            LTPredCodGain    = 3.0f * SKP_Silk_log2( LPC_res_nrg  / LTP_res_nrg  );
+            QLTP_predCodGain = 3.0f * SKP_Silk_log2( qLPC_res_nrg / qLTP_res_nrg );
+        } else {
+            LPC_predCodGain  = 3.0f * SKP_Silk_log2( in_nrg       / LPC_res_nrg  );
+            QLPC_predCodGain = 3.0f * SKP_Silk_log2( in_nrg       / qLPC_res_nrg );
+            LTPredCodGain    = 0.0f;
+            QLTP_predCodGain = 0.0f;
+        }
+        predCodGain = QLPC_predCodGain + QLTP_predCodGain;
+
+        DEBUG_STORE_DATA( LTPredCodGain.dat,    &LTPredCodGain,                                        sizeof( SKP_float ) );
+        DEBUG_STORE_DATA( QLTP_predCodGain.dat, &QLTP_predCodGain,                                     sizeof( SKP_float ) ); 
+        DEBUG_STORE_DATA( LPC_predCodGain.dat,  &LPC_predCodGain,                                      sizeof( SKP_float ) );
+        DEBUG_STORE_DATA( QLPC_predCodGain.dat, &QLPC_predCodGain,                                     sizeof( SKP_float ) );
+        DEBUG_STORE_DATA( predCodGain.dat,      &predCodGain,                                          sizeof( SKP_float ) ); 
+        DEBUG_STORE_DATA( ResNrg.dat,           SF_resNrg,                                  psEnc->sCmn.nb_subfr * sizeof( SKP_float ) );
+    }
+#endif
+}
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+/****************************************************/
+/* LTP analysis filter. Filters two subframes       */
+/****************************************************/
+void SKP_Silk_LTP_ana_core(
+    SKP_float                       r_LPC[],        /* I    LPC residual            */
+    SKP_float                       r_LTP[],        /* O    LTP residual            */
+    const SKP_int                   pitchL[],       /* I    pitch lags              */
+    const SKP_float                 LTPCoef[],      /* I    LTP Coeficients         */
+    SKP_int                         subfr_length,   /* I    smpls in one sub frame  */
+    SKP_int                         LTP_mem_length  /* I    Length of LTP state of input */
+)
+{
+    SKP_int   k, i;
+    SKP_float LTP_pred;
+    const SKP_float *r, *b_ptr, *lag_ptr;
+
+    r = &r_LPC[ LTP_mem_length ];
+    b_ptr = LTPCoef;
+    for( k = 0; k < (MAX_NB_SUBFR >> 1); k++ ) {
+        lag_ptr = r - pitchL[k];
+        /* LTP analysis FIR filter */
+        for( i = 0; i < subfr_length; i++ ) {
+            /* long-term prediction */
+            LTP_pred  = lag_ptr[LTP_ORDER/2]     * b_ptr[0];
+            LTP_pred += lag_ptr[LTP_ORDER/2 - 1] * b_ptr[1];
+            LTP_pred += lag_ptr[LTP_ORDER/2 - 2] * b_ptr[2];
+            LTP_pred += lag_ptr[LTP_ORDER/2 - 3] * b_ptr[3];
+            LTP_pred += lag_ptr[LTP_ORDER/2 - 4] * b_ptr[4];
+
+            /* subtract prediction */
+            r_LTP[i] = r[i] - LTP_pred;
+            lag_ptr++;
+        }
+        r += subfr_length;
+        r_LTP += subfr_length;
+        b_ptr += LTP_ORDER;
+    }
+}
+
+/*******************************************/
+/* LPC analysis filter                     */
+/* NB! State is kept internally and the    */
+/* filter always starts with zero state    */
+/* first Order output samples are not set  */
+/*******************************************/
+void SKP_Silk_LPC_analysis_filter_FLP(
+    SKP_float                       r_LPC[],        /* O    LPC residual signal             */
+    const SKP_float                 PredCoef[],     /* I    LPC coeficicnts                 */
+    const SKP_float                 s[],            /* I    Input Signal                    */
+    SKP_int                         length,         /* I    length of signal                */
+    SKP_int                         Order           /* I    LPC order                       */
+)
+{
+    SKP_int   i, j;
+    SKP_float LPC_pred;
+    const SKP_float *s_ptr;
+
+    for ( i = Order; i < length; i++ ) {
+        s_ptr = &s[i - 1];
+
+        LPC_pred = 0;
+        /* short-term prediction */
+        for( j = 0; j < Order; j++ ) {
+            LPC_pred += s_ptr[ -j ] * PredCoef[ j ];
+        }
+
+        /* prediction error */
+        r_LPC[ i ] = s_ptr[ 1 ] - LPC_pred;
+    }
+}
+
+/* sum of squares of a SKP_float array, with result as double */
+double SKP_Silk_energy_FLP( 
+    const SKP_float     *data, 
+    SKP_int             dataSize
+)
+{
+    SKP_int  i, dataSize4;
+    double   result;
+
+    /* 4x unrolled loop */
+    result = 0.0f;
+    dataSize4 = dataSize & 0xFFFC;
+    for( i = 0; i < dataSize4; i += 4 ) {
+        result += data[ i + 0 ] * data[ i + 0 ] + 
+                  data[ i + 1 ] * data[ i + 1 ] +
+                  data[ i + 2 ] * data[ i + 2 ] +
+                  data[ i + 3 ] * data[ i + 3 ];
+    }
+
+    /* add any remaining products */
+    for( ; i < dataSize; i++ ) {
+        result += data[ i ] * data[ i ];
+    }
+
+    SKP_assert( result >= 0.0 );
+    return result;
+}
+
+/* integer to floating-point conversion */
+SKP_INLINE void SKP_short2float_array(
+	SKP_float		*out, 
+	const SKP_int16 *in, 
+	SKP_int32		length
+) 
+{
+	SKP_int32 k;
+	for (k = length-1; k >= 0; k--) {
+		out[k] = (SKP_float)in[k];
+	}
+}
+
+#endif
--- /dev/null
+++ b/src_FIX/SKP_Silk_init_encoder_FIX.c
@@ -1,0 +1,61 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+/*********************************/
+/* Initialize Silk Encoder state */
+/*********************************/
+SKP_int SKP_Silk_init_encoder_FIX(
+    SKP_Silk_encoder_state_FIX  *psEnc          /* I/O  Pointer to Silk encoder state               */
+) {
+    SKP_int ret = 0;
+    /* Clear the entire encoder state */
+    SKP_memset( psEnc, 0, sizeof( SKP_Silk_encoder_state_FIX ) );
+
+    /* Initialize to 24 kHz API sampling, 24 kHz max internal sampling, 20 ms packets, 25 kbps, 0% packet loss, and init non-zero values */
+    ret = SKP_Silk_control_encoder_FIX( psEnc, 24000, 24, 20, 25, 0, 0, 0, 10, 0 );
+
+#if HIGH_PASS_INPUT
+    psEnc->variable_HP_smth1_Q15 = 200844; /* = SKP_Silk_log2(70)_Q0; */
+    psEnc->variable_HP_smth2_Q15 = 200844; /* = SKP_Silk_log2(70)_Q0; */
+#endif
+
+    /* Used to deactivate e.g. LSF interpolation and fluctuation reduction */
+    psEnc->sCmn.first_frame_after_reset = 1;
+    psEnc->sCmn.fs_kHz_changed          = 0;
+    psEnc->sCmn.LBRR_enabled            = 0;
+
+    /* Initialize Silk VAD */
+    ret += SKP_Silk_VAD_Init( &psEnc->sCmn.sVAD );
+
+    /* Initialize NSQ */
+    psEnc->sNSQ.prev_inv_gain_Q16      = 65536;
+    psEnc->sNSQ_LBRR.prev_inv_gain_Q16 = 65536;
+
+    return( ret );
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_main_FIX.h
@@ -1,0 +1,336 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_MAIN_FIX_H
+#define SKP_SILK_MAIN_FIX_H
+
+#include <stdlib.h>
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_structs_FIX.h"
+#include "SKP_Silk_main.h"
+#include "SKP_Silk_define_FIX.h"
+#include "SKP_Silk_PLC.h"
+#include "SKP_debug.h"
+#include "entenc.h"
+
+#ifndef FORCE_CPP_BUILD
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+#endif
+
+/*********************/
+/* Encoder Functions */
+/*********************/
+
+/* Initializes the Silk encoder state */
+SKP_int SKP_Silk_init_encoder_FIX(
+    SKP_Silk_encoder_state_FIX  *psEnc              /* I/O  Pointer to Silk FIX encoder state           */
+);
+
+/* Control the Silk encoder */
+SKP_int SKP_Silk_control_encoder_FIX( 
+    SKP_Silk_encoder_state_FIX  *psEnc,             /* I/O  Pointer to Silk encoder state                   */
+    const SKP_int32             API_fs_Hz,          /* I    External (API) sampling rate (Hz)               */
+    const SKP_int               max_internal_fs_kHz,/* I    Maximum internal sampling rate (kHz)            */
+    const SKP_int               PacketSize_ms,      /* I    Packet length (ms)                              */
+    SKP_int32                   TargetRate_bps,     /* I    Target max bitrate (bps) (used if SNR_dB == 0)  */
+    const SKP_int               PacketLoss_perc,    /* I    Packet loss rate (in percent)                   */
+    const SKP_int               INBandFEC_enabled,  /* I    Enable (1) / disable (0) inband FEC             */
+    const SKP_int               DTX_enabled,        /* I    Enable / disable DTX                            */
+    const SKP_int               InputFramesize_ms,  /* I    Inputframe in ms                                */
+    const SKP_int               Complexity          /* I    Complexity (0->low; 1->medium; 2->high)         */
+);
+
+/* Encoder main function */
+SKP_int SKP_Silk_encode_frame_FIX( 
+    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O  Pointer to Silk FIX encoder state           */
+    SKP_uint8                       *pCode,             /* O    Pointer to payload                          */
+    SKP_int16                       *pnBytesOut,        /* I/O  Pointer to number of payload bytes;         */
+                                                        /*      input: max length; output: used             */
+    const SKP_int16                 *pIn                /* I    Pointer to input speech frame               */
+);
+
+/* Low BitRate Redundancy encoding functionality. Reuse all parameters but encode with lower bitrate */
+void SKP_Silk_LBRR_encode_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  Pointer to Silk FIX encoder state           */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  Pointer to Silk FIX encoder control struct  */
+    SKP_uint8                       *pCode,         /* O    Pointer to payload                          */
+    SKP_int16                       *pnBytesOut,    /* I/O  Pointer to number of payload bytes          */
+    SKP_int16                       xfw[]           /* I    Input signal                                */
+);
+
+/* High-pass filter with cutoff frequency adaptation based on pitch lag statistics */
+void SKP_Silk_HP_variable_cutoff_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  Encoder state                               */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  Encoder control                             */
+    SKP_int16                       *out,           /* O    high-pass filtered output signal            */
+    const SKP_int16                 *in             /* I    input signal                                */
+);
+
+/****************/
+/* Prefiltering */
+/****************/
+void SKP_Silk_prefilter_FIX(
+    SKP_Silk_encoder_state_FIX          *psEnc,         /* I/O  Encoder state                               */
+    const SKP_Silk_encoder_control_FIX  *psEncCtrl,     /* I    Encoder control                             */
+    SKP_int16                           xw[],           /* O    Weighted signal                             */
+    const SKP_int16                     x[]             /* I    Speech signal                               */
+);
+
+/**************************************************************/
+/* Compute noise shaping coefficients and initial gain values */
+/**************************************************************/
+void SKP_Silk_noise_shape_analysis_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  Encoder state FIX                           */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  Encoder control FIX                         */
+    const SKP_int16                 *pitch_res,     /* I    LPC residual from pitch analysis            */
+    const SKP_int16                 *x              /* I    Input signal [ frame_length + la_shape ]    */
+);
+
+/* Autocorrelations for a warped frequency axis */
+void SKP_Silk_warped_autocorrelation_FIX(
+          SKP_int32                 *corr,              /* O    Result [order + 1]                      */
+          SKP_int                   *scale,             /* O    Scaling of the correlation vector       */
+    const SKP_int16                 *input,             /* I    Input data to correlate                 */
+    const SKP_int16                 warping_Q16,        /* I    Warping coefficient                     */
+    const SKP_int                   length,             /* I    Length of input                         */
+    const SKP_int                   order               /* I    Correlation order (even)                */
+);
+
+/* Processing of gains */
+void SKP_Silk_process_gains_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  Encoder state                               */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl      /* I/O  Encoder control                             */
+);
+
+/* Control low bitrate redundancy usage */
+void SKP_Silk_LBRR_ctrl_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  encoder state                               */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl      /* I/O  encoder control                             */
+);
+
+/* Calculation of LTP state scaling */
+void SKP_Silk_LTP_scale_ctrl_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  encoder state                               */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl      /* I/O  encoder control                             */
+);
+
+/**********************************************/
+/* Prediction Analysis                        */
+/**********************************************/
+
+/* Find pitch lags */
+void SKP_Silk_find_pitch_lags_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  encoder state                               */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  encoder control                             */
+    SKP_int16                       res[],          /* O    residual                                    */
+    const SKP_int16                 x[]             /* I    Speech signal                               */
+);
+
+void SKP_Silk_find_pred_coefs_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  encoder state                               */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  encoder control                             */
+    const SKP_int16                 res_pitch[]     /* I    Residual from pitch analysis                */
+);
+
+void SKP_Silk_find_LPC_FIX(
+    SKP_int             NLSF_Q15[],                 /* O    NLSFs                                                                       */
+    SKP_int             *interpIndex,               /* O    NLSF interpolation index, only used for NLSF interpolation                  */
+    const SKP_int       prev_NLSFq_Q15[],           /* I    previous NLSFs, only used for NLSF interpolation                            */
+    const SKP_int       useInterpolatedNLSFs,       /* I    Flag                                                                        */
+    const SKP_int       LPC_order,                  /* I    LPC order                                                                   */
+    const SKP_int16     x[],                        /* I    Input signal                                                                */
+    const SKP_int       subfr_length,               /* I    Input signal subframe length including preceeding samples                   */
+    const SKP_int       nb_subfr                    /* I:   Number of subframes                                                         */
+);
+
+void SKP_Silk_LTP_analysis_filter_FIX(
+    SKP_int16           *LTP_res,                               /* O:   LTP residual signal of length MAX_NB_SUBFR * ( pre_length + subfr_length )  */
+    const SKP_int16     *x,                                     /* I:   Pointer to input signal with at least max( pitchL ) preceeding samples      */
+    const SKP_int16     LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ],/* I:   LTP_ORDER LTP coefficients for each MAX_NB_SUBFR subframe                   */
+    const SKP_int       pitchL[ MAX_NB_SUBFR ],                 /* I:   Pitch lag, one for each subframe                                            */
+    const SKP_int32     invGains_Q16[ MAX_NB_SUBFR ],           /* I:   Inverse quantization gains, one for each subframe                           */
+    const SKP_int       subfr_length,                           /* I:   Length of each subframe                                                     */
+    const SKP_int       nb_subfr,                               /* I:   Number of subframes                                                         */
+    const SKP_int       pre_length                              /* I:   Length of the preceeding samples starting at &x[0] for each subframe        */
+);
+
+/* Finds LTP vector from correlations */
+void SKP_Silk_find_LTP_FIX(
+    SKP_int16           b_Q14[ MAX_NB_SUBFR * LTP_ORDER ],              /* O    LTP coefs                                                   */
+    SKP_int32           WLTP[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ],   /* O    Weight for LTP quantization                                 */
+    SKP_int             *LTPredCodGain_Q7,                              /* O    LTP coding gain                                             */
+    const SKP_int16     r_lpc[],                                        /* I    residual signal after LPC signal + state for first 10 ms    */
+    const SKP_int       lag[ MAX_NB_SUBFR ],                            /* I    LTP lags                                                    */
+    const SKP_int32     Wght_Q15[ MAX_NB_SUBFR ],                       /* I    weights                                                     */
+    const SKP_int       subfr_length,                                   /* I    subframe length                                             */
+    const SKP_int       nb_subfr,                                       /* I    number of subframes                                         */
+    const SKP_int       mem_offset,                                     /* I    number of samples in LTP memory                             */
+    SKP_int             corr_rshifts[ MAX_NB_SUBFR ]                    /* O    right shifts applied to correlations                        */
+);
+
+/* LTP tap quantizer */
+void SKP_Silk_quant_LTP_gains_FIX(
+    SKP_int16           B_Q14[],                /* I/O  (un)quantized LTP gains     */
+    SKP_int             cbk_index[],            /* O    Codebook Index              */
+    SKP_int             *periodicity_index,     /* O    Periodicity Index           */
+    const SKP_int32     W_Q18[],                /* I    Error Weights in Q18        */
+    SKP_int             mu_Q8,                  /* I    Mu value (R/D tradeoff)     */
+    SKP_int             lowComplexity,          /* I    Flag for low complexity     */
+    const SKP_int       nb_subfr                /* I    number of subframes         */
+);
+
+/******************/
+/* NLSF Quantizer */
+/******************/
+
+/* Limit, stabilize, convert and quantize NLSFs.    */ 
+void SKP_Silk_process_NLSFs_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,     /* I/O  encoder state                               */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl, /* I/O  encoder control                             */
+    SKP_int                         *pNLSF_Q15  /* I/O  Normalized LSFs (quant out) (0 - (2^15-1))  */
+);
+
+/* LSF vector encoder */
+void SKP_Silk_NLSF_MSVQ_encode_FIX(
+          SKP_int                   *NLSFIndices,           /* O    Codebook path vector [ CB_STAGES ]      */
+          SKP_int                   *pNLSF_Q15,             /* I/O  Quantized NLSF vector [ LPC_ORDER ]     */
+    const SKP_Silk_NLSF_CB_struct   *psNLSF_CB,             /* I    Codebook object                         */
+    const SKP_int                   *pNLSF_q_Q15_prev,      /* I    Prev. quantized NLSF vector [LPC_ORDER] */
+    const SKP_int                   *pW_Q6,                 /* I    NLSF weight vector [ LPC_ORDER ]        */
+    const SKP_int                   NLSF_mu_Q15,            /* I    Rate weight for the RD optimization     */
+    const SKP_int                   NLSF_mu_fluc_red_Q16,   /* I    Fluctuation reduction error weight      */
+    const SKP_int                   NLSF_MSVQ_Survivors,    /* I    Max survivors from each stage           */
+    const SKP_int                   LPC_order,              /* I    LPC order                               */
+    const SKP_int                   deactivate_fluc_red     /* I    Deactivate fluctuation reduction        */
+);
+
+/* Rate-Distortion calculations for multiple input data vectors */
+void SKP_Silk_NLSF_VQ_rate_distortion_FIX(
+    SKP_int32                       *pRD_Q20,           /* O    Rate-distortion values [psNLSF_CBS->nVectors*N] */
+    const SKP_Silk_NLSF_CBS         *psNLSF_CBS,        /* I    NLSF codebook stage struct                      */
+    const SKP_int                   *in_Q15,            /* I    Input vectors to be quantized                   */
+    const SKP_int                   *w_Q6,              /* I    Weight vector                                   */
+    const SKP_int32                 *rate_acc_Q5,       /* I    Accumulated rates from previous stage           */
+    const SKP_int                   mu_Q15,             /* I    Weight between weighted error and rate          */
+    const SKP_int                   N,                  /* I    Number of input vectors to be quantized         */
+    const SKP_int                   LPC_order           /* I    LPC order                                       */
+);
+
+/* Compute weighted quantization errors for an LPC_order element input vector, over one codebook stage */
+void SKP_Silk_NLSF_VQ_sum_error_FIX(
+    SKP_int32                       *err_Q20,           /* O    Weighted quantization errors  [N*K]         */
+    const SKP_int                   *in_Q15,            /* I    Input vectors to be quantized [N*LPC_order] */
+    const SKP_int                   *w_Q6,              /* I    Weighting vectors             [N*LPC_order] */
+    const SKP_int16                 *pCB_Q15,           /* I    Codebook vectors              [K*LPC_order] */
+    const SKP_int                   N,                  /* I    Number of input vectors                     */
+    const SKP_int                   K,                  /* I    Number of codebook vectors                  */
+    const SKP_int                   LPC_order           /* I    Number of LPCs                              */
+);
+
+/* Entropy constrained MATRIX-weighted VQ, for a single input data vector */
+void SKP_Silk_VQ_WMat_EC_FIX(
+    SKP_int                         *ind,               /* O    index of best codebook vector               */
+    SKP_int32                       *rate_dist_Q14,     /* O    best weighted quantization error + mu * rate*/
+    const SKP_int16                 *in_Q14,            /* I    input vector to be quantized                */
+    const SKP_int32                 *W_Q18,             /* I    weighting matrix                            */
+    const SKP_int16                 *cb_Q14,            /* I    codebook                                    */
+    const SKP_int16                 *cl_Q6,             /* I    code length for each codebook vector        */
+    const SKP_int                   mu_Q8,              /* I    tradeoff between weighted error and rate    */
+    SKP_int                         L                   /* I    number of vectors in codebook               */
+);
+
+/******************/
+/* Linear Algebra */
+/******************/
+
+/* Calculates correlation matrix X'*X */
+void SKP_Silk_corrMatrix_FIX(
+    const SKP_int16                 *x,         /* I    x vector [L + order - 1] used to form data matrix X */
+    const SKP_int                   L,          /* I    Length of vectors                                   */
+    const SKP_int                   order,      /* I    Max lag for correlation                             */
+    SKP_int32                       *XX,        /* O    Pointer to X'*X correlation matrix [ order x order ]*/
+    SKP_int                         *rshifts    /* I/O  Right shifts of correlations                        */
+);
+
+/* Calculates correlation vector X'*t */
+void SKP_Silk_corrVector_FIX(
+    const SKP_int16                 *x,         /* I    x vector [L + order - 1] used to form data matrix X */
+    const SKP_int16                 *t,         /* I    Target vector [L]                                   */
+    const SKP_int                   L,          /* I    Length of vectors                                   */
+    const SKP_int                   order,      /* I    Max lag for correlation                             */
+    SKP_int32                       *Xt,        /* O    Pointer to X'*t correlation vector [order]          */
+    const SKP_int                   rshifts     /* I    Right shifts of correlations                        */
+);
+
+/* Add noise to matrix diagonal */
+void SKP_Silk_regularize_correlations_FIX(
+    SKP_int32                       *XX,                /* I/O  Correlation matrices                        */
+    SKP_int32                       *xx,                /* I/O  Correlation values                          */
+    SKP_int32                       noise,              /* I    Noise to add                                */
+    SKP_int                         D                   /* I    Dimension of XX                             */
+);
+
+/* Solves Ax = b, assuming A is symmetric */
+void SKP_Silk_solve_LDL_FIX(
+    SKP_int32                       *A,                 /* I    Pointer to symetric square matrix A         */
+    SKP_int                         M,                  /* I    Size of matrix                              */
+    const SKP_int32                 *b,                 /* I    Pointer to b vector                         */
+    SKP_int32                       *x_Q16              /* O    Pointer to x solution vector                */
+);
+
+/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */
+SKP_int32 SKP_Silk_residual_energy16_covar_FIX(
+    const SKP_int16                 *c,                 /* I    Prediction vector                           */
+    const SKP_int32                 *wXX,               /* I    Correlation matrix                          */
+    const SKP_int32                 *wXx,               /* I    Correlation vector                          */
+    SKP_int32                       wxx,                /* I    Signal energy                               */
+    SKP_int                         D,                  /* I    Dimension                                   */
+    SKP_int                         cQ                  /* I    Q value for c vector 0 - 15                 */
+);
+
+/* Calculates residual energies of input subframes where all subframes have LPC_order   */
+/* of preceeding samples                                                                */
+void SKP_Silk_residual_energy_FIX(
+          SKP_int32 nrgs[ MAX_NB_SUBFR ],           /* O    Residual energy per subframe    */
+          SKP_int   nrgsQ[ MAX_NB_SUBFR ],          /* O    Q value per subframe            */
+    const SKP_int16 x[],                            /* I    Input signal                    */
+    const SKP_int16 a_Q12[ 2 ][ MAX_LPC_ORDER ],    /* I    AR coefs for each frame half    */
+    const SKP_int32 gains[ MAX_NB_SUBFR ],          /* I    Quantization gains              */
+    const SKP_int   subfr_length,                   /* I    Subframe length                 */
+    const SKP_int   nb_subfr,                       /* I    Number of subframes             */
+    const SKP_int   LPC_order                       /* I    LPC order                       */
+);
+
+#ifndef FORCE_CPP_BUILD
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* FORCE_CPP_BUILD */
+#endif /* SKP_SILK_MAIN_FIX_H */
--- /dev/null
+++ b/src_FIX/SKP_Silk_noise_shape_analysis_FIX.c
@@ -1,0 +1,451 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+#include "SKP_Silk_perceptual_parameters_FIX.h"
+
+/* Compute gain to make warped filter coefficients have a zero mean log frequency response on a     */
+/* non-warped frequency scale. (So that it can be implemented with a minimum-phase monic filter.)   */
+SKP_INLINE SKP_int32 warped_gain( // gain in Q16
+    const SKP_int32     *coefs_Q24, 
+    SKP_int             lambda_Q16, 
+    SKP_int             order 
+) {
+    SKP_int   i;
+    SKP_int32 gain_Q24;
+
+    lambda_Q16 = -lambda_Q16;
+    gain_Q24 = coefs_Q24[ order - 1 ];
+    for( i = order - 2; i >= 0; i-- ) {
+        gain_Q24 = SKP_SMLAWB( coefs_Q24[ i ], gain_Q24, lambda_Q16 );
+    }
+    gain_Q24  = SKP_SMLAWB( 1 << 24, gain_Q24, -lambda_Q16 );
+    return SKP_INVERSE32_varQ( gain_Q24, 40 );
+}
+
+/* Convert warped filter coefficients to monic pseudo-warped coefficients */
+SKP_INLINE void warped_true2monic_coefs( 
+    SKP_int32           *coefs_Q24,
+    SKP_int             lambda_Q16,
+    SKP_int             order 
+) {
+    SKP_int   i;
+    SKP_int32 gain_Q16, nom_Q16, den_Q24;
+
+    lambda_Q16 = -lambda_Q16;
+    for( i = order - 1; i > 0; i-- ) {
+        coefs_Q24[ i - 1 ] = SKP_SMLAWB( coefs_Q24[ i - 1 ], coefs_Q24[ i ], lambda_Q16 );
+    }
+    nom_Q16  = SKP_SMLAWB( 1 << 16, lambda_Q16,     -lambda_Q16 );
+    den_Q24  = SKP_SMLAWB( 1 << 24, coefs_Q24[ 0 ], -lambda_Q16 );
+    gain_Q16 = SKP_DIV32_varQ( nom_Q16, den_Q24, 24 );
+    for( i = 0; i < order; i++ ) {
+        coefs_Q24[ i ] = SKP_SMULWW( gain_Q16, coefs_Q24[ i ] );
+    }
+}
+
+/* Limit max amplitude of monic warped coefficients by using bandwidth expansion on the true coefficients */
+SKP_INLINE void limit_warped_coefs( 
+    SKP_int32           *coefs_syn_Q24,
+    SKP_int32           *coefs_ana_Q24,
+    SKP_int             lambda_Q16,
+    SKP_int32           limit_Q24,
+    SKP_int             order
+) {
+    SKP_int   i, iter, ind;
+    SKP_int32 tmp, maxabs_Q24, chirp_Q16;
+
+    for( iter = 0; iter < 10; iter++ ) {
+        /* Find maximum absolute value */
+        ind = 1;
+        maxabs_Q24 = SKP_abs( coefs_syn_Q24[ ind ] );
+        for( i = 2; i < order - 1; i++ ) {
+            tmp = SKP_abs( coefs_syn_Q24[ i ] );
+            if( tmp > maxabs_Q24 ) {
+                maxabs_Q24 = tmp;
+                ind = i;
+            }
+        }
+        if( maxabs_Q24 <= limit_Q24 ) {
+            return;
+        }
+
+        /* Convert to true warped coefficients */
+        for( i = 1; i < order; i++ ) {
+            coefs_syn_Q24[ i - 1 ] = SKP_SMLAWB( coefs_syn_Q24[ i - 1 ], coefs_syn_Q24[ i ], lambda_Q16 );
+            coefs_ana_Q24[ i - 1 ] = SKP_SMLAWB( coefs_ana_Q24[ i - 1 ], coefs_ana_Q24[ i ], lambda_Q16 );
+        }
+
+        /* Apply bandwidth expansion */
+        chirp_Q16 = SKP_FIX_CONST( 0.99, 16 ) - SKP_DIV32_varQ(
+            SKP_SMULWB( maxabs_Q24 - limit_Q24, SKP_SMLABB( SKP_FIX_CONST( 0.8, 10 ), SKP_FIX_CONST( 0.1, 10 ), iter ) ), 
+            SKP_MUL( maxabs_Q24, ind + 1 ), 22 );
+        SKP_Silk_bwexpander_32( coefs_syn_Q24, order, chirp_Q16 );
+        SKP_Silk_bwexpander_32( coefs_ana_Q24, order, chirp_Q16 );
+
+        /* Convert back to monic warped coefficients */
+        lambda_Q16 = -lambda_Q16;
+        for( i = order - 1; i > 0; i-- ) {
+            coefs_syn_Q24[ i - 1 ] = SKP_SMLAWB( coefs_syn_Q24[ i - 1 ], coefs_syn_Q24[ i ], lambda_Q16 );
+            coefs_ana_Q24[ i - 1 ] = SKP_SMLAWB( coefs_ana_Q24[ i - 1 ], coefs_ana_Q24[ i ], lambda_Q16 );
+        }
+        lambda_Q16 = -lambda_Q16;
+    }
+}
+
+/**************************************************************/
+/* Compute noise shaping coefficients and initial gain values */
+/**************************************************************/
+void SKP_Silk_noise_shape_analysis_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  Encoder state FIX                           */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl,     /* I/O  Encoder control FIX                         */
+    const SKP_int16                 *pitch_res,     /* I    LPC residual from pitch analysis            */
+    const SKP_int16                 *x              /* I    Input signal [ frame_length + la_shape ]    */
+)
+{
+    SKP_Silk_shape_state_FIX *psShapeSt = &psEnc->sShape;
+    SKP_int     k, i, nSamples, Qnrg, b_Q14, scale = 0, sz;
+    SKP_int32   SNR_adj_dB_Q7, HarmBoost_Q16, HarmShapeGain_Q16, Tilt_Q16, tmp32;
+    SKP_int32   nrg, pre_nrg_Q30, log_energy_Q7, log_energy_prev_Q7, energy_variation_Q7;
+    SKP_int32   delta_Q16, BWExp1_Q16, BWExp2_Q16, gain_mult_Q16, gain_add_Q16, strength_Q16, b_Q8;
+    SKP_int32   auto_corr[     MAX_SHAPE_LPC_ORDER + 1 ];
+    SKP_int32   refl_coef_Q16[ MAX_SHAPE_LPC_ORDER ];
+    SKP_int32   AR1_Q24[       MAX_SHAPE_LPC_ORDER ];
+    SKP_int32   AR2_Q24[       MAX_SHAPE_LPC_ORDER ];
+    SKP_int16   x_windowed[    SHAPE_LPC_WIN_MAX ];
+    const SKP_int16 *x_ptr, *pitch_res_ptr;
+
+    SKP_int32   sqrt_nrg[ MAX_NB_SUBFR ], Qnrg_vec[ MAX_NB_SUBFR ];
+
+    /* Point to start of first LPC analysis block */
+    x_ptr = x + psEnc->sCmn.la_shape - SKP_SMULBB( SHAPE_LPC_WIN_MS, psEnc->sCmn.fs_kHz ) + psEnc->sCmn.subfr_length;
+
+    /****************/
+    /* CONTROL SNR  */
+    /****************/
+#if DEACTIVATE_SNR_FEEDBACK
+    psEncCtrl->current_SNR_dB_Q7 = psEnc->SNR_dB_Q7;
+#else
+    /* Reduce SNR_dB values if recent bitstream has exceeded TargetRate */
+    psEncCtrl->current_SNR_dB_Q7 = psEnc->SNR_dB_Q7 - SKP_SMULWB( SKP_LSHIFT( ( SKP_int32 )psEnc->BufferedInChannel_ms, 7 ), 3277 );
+#endif
+
+    /* Reduce SNR_dB if inband FEC used */
+    if( psEnc->speech_activity_Q8 > LBRR_SPEECH_ACTIVITY_THRES_Q8 ) {
+        psEncCtrl->current_SNR_dB_Q7 -= SKP_RSHIFT( psEnc->inBandFEC_SNR_comp_Q8, 1 );
+    }
+
+    /****************/
+    /* GAIN CONTROL */
+    /****************/
+    /* Input quality is the average of the quality in the lowest two VAD bands */
+    psEncCtrl->input_quality_Q14 = ( SKP_int )SKP_RSHIFT( ( SKP_int32 )psEncCtrl->input_quality_bands_Q15[ 0 ] 
+        + psEncCtrl->input_quality_bands_Q15[ 1 ], 2 );
+
+    /* Coding quality level, between 0.0_Q0 and 1.0_Q0, but in Q14 */
+    psEncCtrl->coding_quality_Q14 = SKP_RSHIFT( SKP_Silk_sigm_Q15( SKP_RSHIFT_ROUND( psEncCtrl->current_SNR_dB_Q7 - ( 17 << 7 ), 4 ) ), 1 );
+
+    /* Reduce coding SNR during low speech activity */
+    b_Q8 = ( 1 << 8 ) - psEnc->speech_activity_Q8;
+    b_Q8 = SKP_SMULWB( SKP_LSHIFT( b_Q8, 8 ), b_Q8 );
+    SNR_adj_dB_Q7 = SKP_SMLAWB( psEncCtrl->current_SNR_dB_Q7,
+        SKP_SMULBB( -BG_SNR_DECR_dB_Q7 >> ( 4 + 1 ), b_Q8 ),                                            // Q11
+        SKP_SMULWB( ( 1 << 14 ) + psEncCtrl->input_quality_Q14, psEncCtrl->coding_quality_Q14 ) );      // Q12
+
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        /* Reduce gains for periodic signals */
+        SNR_adj_dB_Q7 = SKP_SMLAWB( SNR_adj_dB_Q7, HARM_SNR_INCR_dB_Q7 << 1, psEnc->LTPCorr_Q15 );
+    } else { 
+        /* For unvoiced signals and low-quality input, adjust the quality slower than SNR_dB setting */
+        SNR_adj_dB_Q7 = SKP_SMLAWB( SNR_adj_dB_Q7, 
+            SKP_SMLAWB( 6 << ( 7 + 2 ), -104856, psEncCtrl->current_SNR_dB_Q7 ),    //-104856_Q18 = -0.4_Q0, Q9
+            ( 1 << 14 ) - psEncCtrl->input_quality_Q14 );                           // Q14
+    }
+
+    /*************************/
+    /* SPARSENESS PROCESSING */
+    /*************************/
+    /* Set quantizer offset */
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        /* Initally set to 0; may be overruled in process_gains(..) */
+        psEncCtrl->sCmn.QuantOffsetType = 0;
+        psEncCtrl->sparseness_Q8 = 0;
+    } else {
+        /* Sparseness measure, based on relative fluctuations of energy per 2 milliseconds */
+        nSamples = SKP_LSHIFT( psEnc->sCmn.fs_kHz, 1 );
+        energy_variation_Q7 = 0;
+        log_energy_prev_Q7  = 0;
+        pitch_res_ptr = pitch_res;
+        for( k = 0; k < SKP_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr ) / 2; k++ ) {
+            SKP_Silk_sum_sqr_shift( &nrg, &scale, pitch_res_ptr, nSamples );
+            nrg += SKP_RSHIFT( nSamples, scale );           // Q(-scale)
+            
+            log_energy_Q7 = SKP_Silk_lin2log( nrg );
+            if( k > 0 ) {
+                energy_variation_Q7 += SKP_abs( log_energy_Q7 - log_energy_prev_Q7 );
+            }
+            log_energy_prev_Q7 = log_energy_Q7;
+            pitch_res_ptr += nSamples;
+        }
+
+        psEncCtrl->sparseness_Q8 = SKP_RSHIFT( SKP_Silk_sigm_Q15( SKP_SMULWB( energy_variation_Q7 - ( 5 << 7 ), 6554 ) ), 7 ); // 6554_Q16 = 0.1_Q0
+
+        /* Set quantization offset depending on sparseness measure */
+        if( psEncCtrl->sparseness_Q8 > SPARSENESS_THRESHOLD_QNT_OFFSET_Q8 ) {
+            psEncCtrl->sCmn.QuantOffsetType = 0;
+        } else {
+            psEncCtrl->sCmn.QuantOffsetType = 1;
+        }
+        
+        /* Increase coding SNR for sparse signals */
+        SNR_adj_dB_Q7 = SKP_SMLAWB( SNR_adj_dB_Q7, SPARSE_SNR_INCR_dB_Q7 << 8, psEncCtrl->sparseness_Q8 - ( 1 << 7 ) );
+    }
+
+    /*******************************/
+    /* Control bandwidth expansion */
+    /*******************************/
+    delta_Q16  = SKP_SMULWB( ( 1 << 16 ) - SKP_SMULBB( 3, psEncCtrl->coding_quality_Q14 ), LOW_RATE_BANDWIDTH_EXPANSION_DELTA_Q16 );
+    BWExp1_Q16 = BANDWIDTH_EXPANSION_Q16 - delta_Q16;
+    BWExp2_Q16 = BANDWIDTH_EXPANSION_Q16 + delta_Q16;
+    if( psEnc->sCmn.fs_kHz == 24 ) {
+        /* Less bandwidth expansion for super wideband */
+        BWExp1_Q16 = ( 1 << 16 ) - SKP_SMULWB( SWB_BANDWIDTH_EXPANSION_REDUCTION_Q16, ( 1 << 16 ) - BWExp1_Q16 );
+        BWExp2_Q16 = ( 1 << 16 ) - SKP_SMULWB( SWB_BANDWIDTH_EXPANSION_REDUCTION_Q16, ( 1 << 16 ) - BWExp2_Q16 );
+    }
+    /* BWExp1 will be applied after BWExp2, so make it relative */
+    BWExp1_Q16 = SKP_DIV32_16( SKP_LSHIFT( BWExp1_Q16, 14 ), SKP_RSHIFT( BWExp2_Q16, 2 ) );
+
+    /* Warping coefficient */
+    psEncCtrl->sCmn.warping_Q16 = psEnc->sCmn.fs_kHz * WARPING_MULTIPLIER_Q16;
+    psEncCtrl->sCmn.warping_Q16 = SKP_min( psEncCtrl->sCmn.warping_Q16, 32767 );
+
+    /********************************************/
+    /* Compute noise shaping AR coefs and gains */
+    /********************************************/
+    sz = ( SKP_int )SKP_SMULBB( SHAPE_LPC_WIN_MS, psEnc->sCmn.fs_kHz );
+    for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+        /* Apply window */
+        SKP_Silk_apply_sine_window( x_windowed, x_ptr, 0, SHAPE_LPC_WIN_MS * psEnc->sCmn.fs_kHz );
+
+        /* Update pointer: next LPC analysis block */
+        x_ptr += psEnc->sCmn.subfr_length;
+
+        /* Calculate warped auto correlation */
+        SKP_Silk_warped_autocorrelation_FIX( auto_corr, &scale, x_windowed, psEncCtrl->sCmn.warping_Q16, sz, psEnc->sCmn.shapingLPCOrder ); 
+
+        /* Add white noise, as a fraction of energy */
+        auto_corr[0] = SKP_ADD32( auto_corr[0], SKP_max_32( SKP_SMULWB( SKP_RSHIFT( auto_corr[ 0 ], 4 ), SHAPE_WHITE_NOISE_FRACTION_Q20 ), 1 ) ); 
+
+        /* Calculate the reflection coefficients using schur */
+        nrg = SKP_Silk_schur64( refl_coef_Q16, auto_corr, psEnc->sCmn.shapingLPCOrder );
+        SKP_assert( nrg >= 0 );
+
+        /* Convert reflection coefficients to prediction coefficients */
+        SKP_Silk_k2a_Q16( AR2_Q24, refl_coef_Q16, psEnc->sCmn.shapingLPCOrder );
+
+        /* Convert residual energy to non-warped scale */
+        gain_mult_Q16 = warped_gain( AR2_Q24, psEncCtrl->sCmn.warping_Q16, psEnc->sCmn.shapingLPCOrder );
+        gain_mult_Q16 = SKP_SMULWW( gain_mult_Q16, gain_mult_Q16 );
+        SKP_assert( gain_mult_Q16 >= 0 ); // If breaking, add dynamic scaling
+        nrg = SKP_SMULWW( nrg, gain_mult_Q16 );
+        SKP_assert( nrg >= 0 ); // If breaking, add dynamic scaling
+
+        /* Bandwidth expansion for synthesis filter shaping */
+        SKP_Silk_bwexpander_32( AR2_Q24, psEnc->sCmn.shapingLPCOrder, BWExp2_Q16 );
+
+        /* Compute noise shaping filter coefficients */
+        SKP_memcpy( AR1_Q24, AR2_Q24, psEnc->sCmn.shapingLPCOrder * sizeof( SKP_int32 ) );
+
+        /* Bandwidth expansion for analysis filter shaping */
+        SKP_assert( BWExp1_Q16 <= ( 1 << 16 ) ); // If ever breaking, use LPC_stabilize() in these cases to stay within range
+        SKP_Silk_bwexpander_32( AR1_Q24, psEnc->sCmn.shapingLPCOrder, BWExp1_Q16 );
+
+        /* Increase residual energy */
+        nrg = SKP_SMLAWB( nrg, SKP_RSHIFT( auto_corr[ 0 ], 8 ), SHAPE_MIN_ENERGY_RATIO_Q24 );
+
+        Qnrg = -scale;          // range: -12...30
+        SKP_assert( Qnrg >= -12 );
+        SKP_assert( Qnrg <=  30 );
+
+        /* Make sure that Qnrg is an even number */
+        if( Qnrg & 1 ) {
+            Qnrg -= 1;
+            nrg >>= 1;
+        }
+
+        tmp32 = SKP_Silk_SQRT_APPROX( nrg );
+        Qnrg >>= 1;             // range: -6...15
+
+        sqrt_nrg[ k ] = tmp32;
+        Qnrg_vec[ k ] = Qnrg;
+
+        psEncCtrl->Gains_Q16[ k ] = SKP_LSHIFT_SAT32( tmp32, 16 - Qnrg );
+
+        /* Ratio of prediction gains, in energy domain */
+        SKP_Silk_LPC_inverse_pred_gain_Q24( &pre_nrg_Q30, AR2_Q24, psEnc->sCmn.shapingLPCOrder );
+        SKP_Silk_LPC_inverse_pred_gain_Q24( &nrg,         AR1_Q24, psEnc->sCmn.shapingLPCOrder );
+
+        //psEncCtrl->GainsPre[ k ] = 1.0f - 0.7f * ( 1.0f - pre_nrg / nrg ) = 0.3f + 0.7f * pre_nrg / nrg;
+        pre_nrg_Q30 = SKP_LSHIFT32( SKP_SMULWB( pre_nrg_Q30, SKP_FIX_CONST( 0.7, 15 ) ), 1 );
+        psEncCtrl->GainsPre_Q14[ k ] = ( SKP_int ) SKP_FIX_CONST( 0.3, 14 ) + SKP_DIV32_varQ( pre_nrg_Q30, nrg, 14 );
+
+        /* Convert to monic warped prediction coefficients */
+        warped_true2monic_coefs( AR1_Q24, psEncCtrl->sCmn.warping_Q16, psEnc->sCmn.shapingLPCOrder );
+        warped_true2monic_coefs( AR2_Q24, psEncCtrl->sCmn.warping_Q16, psEnc->sCmn.shapingLPCOrder );
+
+        /* Limit absolute values */
+        limit_warped_coefs( AR2_Q24, AR1_Q24, psEncCtrl->sCmn.warping_Q16, SKP_FIX_CONST( 3.999, 24 ), psEnc->sCmn.shapingLPCOrder );
+
+        /* Convert from Q24 to Q13 and store in int16 */
+        for( i = 0; i < psEnc->sCmn.shapingLPCOrder; i++ ) {
+            psEncCtrl->AR1_Q13[ k * MAX_SHAPE_LPC_ORDER + i ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( AR1_Q24[ i ], 11 ) );
+            psEncCtrl->AR2_Q13[ k * MAX_SHAPE_LPC_ORDER + i ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( AR2_Q24[ i ], 11 ) );
+        }
+    }
+
+    /*****************/
+    /* Gain tweaking */
+    /*****************/
+    /* Increase gains during low speech activity and put lower limit on gains */
+    gain_mult_Q16 = SKP_Silk_log2lin( -SKP_SMLAWB( -16 << 7, SNR_adj_dB_Q7,           10486 ) ); // 10486_Q16 = 0.16_Q0
+    gain_add_Q16  = SKP_Silk_log2lin(  SKP_SMLAWB(  16 << 7, NOISE_FLOOR_dB_Q7,       10486 ) ); // 10486_Q16 = 0.16_Q0
+    tmp32         = SKP_Silk_log2lin(  SKP_SMLAWB(  16 << 7, RELATIVE_MIN_GAIN_dB_Q7, 10486 ) ); // 10486_Q16 = 0.16_Q0
+    tmp32 = SKP_SMULWW( psEnc->avgGain_Q16, tmp32 );
+    gain_add_Q16 = SKP_ADD_SAT32( gain_add_Q16, tmp32 );
+    SKP_assert( gain_mult_Q16 >= 0 );
+
+    for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+        psEncCtrl->Gains_Q16[ k ] = SKP_SMULWW( psEncCtrl->Gains_Q16[ k ], gain_mult_Q16 );
+        SKP_assert( psEncCtrl->Gains_Q16[ k ] >= 0 );
+    }
+
+    for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+        psEncCtrl->Gains_Q16[ k ] = SKP_ADD_POS_SAT32( psEncCtrl->Gains_Q16[ k ], gain_add_Q16 );
+        psEnc->avgGain_Q16 = SKP_ADD_SAT32( 
+            psEnc->avgGain_Q16, 
+            SKP_SMULWB(
+                psEncCtrl->Gains_Q16[ k ] - psEnc->avgGain_Q16, 
+                SKP_RSHIFT_ROUND( SKP_SMULBB( psEnc->speech_activity_Q8, GAIN_SMOOTHING_COEF_Q10 ), 2 ) 
+            ) );
+    }
+
+    /************************************************/
+    /* Decrease level during fricatives (de-essing) */
+    /************************************************/
+    gain_mult_Q16 = ( 1 << 16 ) + SKP_RSHIFT_ROUND( SKP_MLA( INPUT_TILT_Q26, psEncCtrl->coding_quality_Q14, HIGH_RATE_INPUT_TILT_Q12 ), 10 );
+
+    if( psEncCtrl->input_tilt_Q15 <= 0 && psEncCtrl->sCmn.sigtype == SIG_TYPE_UNVOICED ) {
+        if( psEnc->sCmn.fs_kHz == 24 ) {
+            SKP_int32 essStrength_Q15 = SKP_SMULWW( -psEncCtrl->input_tilt_Q15, 
+                SKP_SMULBB( psEnc->speech_activity_Q8, ( 1 << 8 ) - psEncCtrl->sparseness_Q8 ) );
+            tmp32 = SKP_Silk_log2lin( ( 16 << 7 ) - SKP_SMULWB( essStrength_Q15, 
+                SKP_SMULWB( DE_ESSER_COEF_SWB_dB_Q7, 20972 ) ) ); // 20972_Q17 = 0.16_Q0
+            gain_mult_Q16 = SKP_SMULWW( gain_mult_Q16, tmp32 );
+        } else if( psEnc->sCmn.fs_kHz == 16 ) {
+            SKP_int32 essStrength_Q15 = SKP_SMULWW(-psEncCtrl->input_tilt_Q15, 
+                SKP_SMULBB( psEnc->speech_activity_Q8, ( 1 << 8 ) - psEncCtrl->sparseness_Q8 ));
+            tmp32 = SKP_Silk_log2lin( ( 16 << 7 ) - SKP_SMULWB( essStrength_Q15, 
+                SKP_SMULWB( DE_ESSER_COEF_WB_dB_Q7, 20972 ) ) ); // 20972_Q17 = 0.16_Q0
+            gain_mult_Q16 = SKP_SMULWW( gain_mult_Q16, tmp32 );
+        } else {
+            SKP_assert( psEnc->sCmn.fs_kHz == 12 || psEnc->sCmn.fs_kHz == 8 );
+        }
+    }
+
+    for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+        psEncCtrl->GainsPre_Q14[ k ] = SKP_SMULWB( gain_mult_Q16, psEncCtrl->GainsPre_Q14[ k ] );
+    }
+
+    /************************************************/
+    /* Control low-frequency shaping and noise tilt */
+    /************************************************/
+    /* Less low frequency shaping for noisy inputs */
+    strength_Q16 = SKP_MUL( LOW_FREQ_SHAPING_Q0, ( 1 << 16 ) + SKP_SMULBB( LOW_QUALITY_LOW_FREQ_SHAPING_DECR_Q1, psEncCtrl->input_quality_bands_Q15[ 0 ] - ( 1 << 15 ) ) );
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        /* Reduce low frequencies quantization noise for periodic signals, depending on pitch lag */
+        /*f = 400; freqz([1, -0.98 + 2e-4 * f], [1, -0.97 + 7e-4 * f], 2^12, Fs); axis([0, 1000, -10, 1])*/
+        SKP_int fs_kHz_inv = SKP_DIV32_16( 3277, psEnc->sCmn.fs_kHz );      // 0.2_Q0 = 3277_Q14
+        for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+            b_Q14 = fs_kHz_inv + SKP_DIV32_16( ( 3 << 14 ), psEncCtrl->sCmn.pitchL[ k ] ); 
+            /* Pack two coefficients in one int32 */
+            psEncCtrl->LF_shp_Q14[ k ]  = SKP_LSHIFT( ( 1 << 14 ) - b_Q14 - SKP_SMULWB( strength_Q16, b_Q14 ), 16 );
+            psEncCtrl->LF_shp_Q14[ k ] |= (SKP_uint16)( b_Q14 - ( 1 << 14 ) );
+        }
+        SKP_assert( HARM_HP_NOISE_COEF_Q24 < ( 1 << 23 ) ); // Guarantees that second argument to SMULWB() is within range of an SKP_int16
+        Tilt_Q16 = - HP_NOISE_COEF_Q16 - 
+            SKP_SMULWB( ( 1 << 16 ) - HP_NOISE_COEF_Q16, SKP_SMULWB( HARM_HP_NOISE_COEF_Q24, psEnc->speech_activity_Q8 ) );
+    } else {
+        b_Q14 = SKP_DIV32_16( 21299, psEnc->sCmn.fs_kHz ); // 1.3_Q0 = 21299_Q14
+        /* Pack two coefficients in one int32 */
+        psEncCtrl->LF_shp_Q14[ 0 ]  = SKP_LSHIFT( ( 1 << 14 ) - b_Q14 - SKP_SMULWB( strength_Q16, SKP_SMULWB( 39322, b_Q14 ) ), 16 ); // 0.6_Q0 = 39322_Q16
+        psEncCtrl->LF_shp_Q14[ 0 ] |= (SKP_uint16)( b_Q14 - ( 1 << 14 ) );
+        for( k = 1; k < psEnc->sCmn.nb_subfr; k++ ) {
+            psEncCtrl->LF_shp_Q14[ k ] = psEncCtrl->LF_shp_Q14[ k - 1 ];
+        }
+        Tilt_Q16 = -HP_NOISE_COEF_Q16;
+    }
+
+    /****************************/
+    /* HARMONIC SHAPING CONTROL */
+    /****************************/
+    /* Control boosting of harmonic frequencies */
+    HarmBoost_Q16 = SKP_SMULWB( SKP_SMULWB( ( 1 << 17 ) - SKP_LSHIFT( psEncCtrl->coding_quality_Q14, 3 ), 
+        psEnc->LTPCorr_Q15 ), LOW_RATE_HARMONIC_BOOST_Q16 );
+
+    /* More harmonic boost for noisy input signals */
+    HarmBoost_Q16 = SKP_SMLAWB( HarmBoost_Q16, 
+        ( 1 << 16 ) - SKP_LSHIFT( psEncCtrl->input_quality_Q14, 2 ), LOW_INPUT_QUALITY_HARMONIC_BOOST_Q16 );
+
+    if( USE_HARM_SHAPING && psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        /* More harmonic noise shaping for high bitrates or noisy input */
+        HarmShapeGain_Q16 = SKP_SMLAWB( HARMONIC_SHAPING_Q16, 
+                ( 1 << 16 ) - SKP_SMULWB( ( 1 << 18 ) - SKP_LSHIFT( psEncCtrl->coding_quality_Q14, 4 ),
+                psEncCtrl->input_quality_Q14 ), HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING_Q16 );
+
+        /* Less harmonic noise shaping for less periodic signals */
+        HarmShapeGain_Q16 = SKP_SMULWB( SKP_LSHIFT( HarmShapeGain_Q16, 1 ), 
+            SKP_Silk_SQRT_APPROX( SKP_LSHIFT( psEnc->LTPCorr_Q15, 15 ) ) );
+    } else {
+        HarmShapeGain_Q16 = 0;
+    }
+
+    /*************************/
+    /* Smooth over subframes */
+    /*************************/
+    for( k = 0; k < MAX_NB_SUBFR; k++ ) {
+        psShapeSt->HarmBoost_smth_Q16 =
+            SKP_SMLAWB( psShapeSt->HarmBoost_smth_Q16,     HarmBoost_Q16     - psShapeSt->HarmBoost_smth_Q16,     SUBFR_SMTH_COEF_Q16 );
+        psShapeSt->HarmShapeGain_smth_Q16 =
+            SKP_SMLAWB( psShapeSt->HarmShapeGain_smth_Q16, HarmShapeGain_Q16 - psShapeSt->HarmShapeGain_smth_Q16, SUBFR_SMTH_COEF_Q16 );
+        psShapeSt->Tilt_smth_Q16 =
+            SKP_SMLAWB( psShapeSt->Tilt_smth_Q16,          Tilt_Q16          - psShapeSt->Tilt_smth_Q16,          SUBFR_SMTH_COEF_Q16 );
+
+        psEncCtrl->HarmBoost_Q14[ k ]     = ( SKP_int )SKP_RSHIFT_ROUND( psShapeSt->HarmBoost_smth_Q16,     2 );
+        psEncCtrl->HarmShapeGain_Q14[ k ] = ( SKP_int )SKP_RSHIFT_ROUND( psShapeSt->HarmShapeGain_smth_Q16, 2 );
+        psEncCtrl->Tilt_Q14[ k ]          = ( SKP_int )SKP_RSHIFT_ROUND( psShapeSt->Tilt_smth_Q16,          2 );
+    }
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_perceptual_parameters_FIX.h
@@ -1,0 +1,117 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_PERCEPTUAL_PARAMETERS_FIX_H
+#define SKP_SILK_PERCEPTUAL_PARAMETERS_FIX_H
+
+#include "SKP_Silk_perceptual_parameters.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* reduction in coding SNR during low speech activity */
+#define BG_SNR_DECR_dB_Q7                               SKP_FIX_CONST( BG_SNR_DECR_dB, 7 )
+
+/* factor for reducing quantization noise during voiced speech */
+#define HARM_SNR_INCR_dB_Q7                             SKP_FIX_CONST( HARM_SNR_INCR_dB, 7 )
+
+/* factor for reducing quantization noise for unvoiced sparse signals */
+#define SPARSE_SNR_INCR_dB_Q7                           SKP_FIX_CONST( SPARSE_SNR_INCR_dB, 7 )
+
+/* threshold for sparseness measure above which to use lower quantization offset during unvoiced */
+#define SPARSENESS_THRESHOLD_QNT_OFFSET_Q8              SKP_FIX_CONST( SPARSENESS_THRESHOLD_QNT_OFFSET, 8 )
+
+
+/* noise shaping filter chirp factor */
+#define BANDWIDTH_EXPANSION_Q16                         SKP_FIX_CONST( BANDWIDTH_EXPANSION, 16 )
+
+/* difference between chirp factors for analysis and synthesis noise shaping filters at low bitrates */
+#define LOW_RATE_BANDWIDTH_EXPANSION_DELTA_Q16          SKP_FIX_CONST( LOW_RATE_BANDWIDTH_EXPANSION_DELTA, 16 )
+
+/* factor to reduce all bandwidth expansion coefficients for super wideband, relative to wideband */
+#define SWB_BANDWIDTH_EXPANSION_REDUCTION_Q16           SKP_FIX_CONST( SWB_BANDWIDTH_EXPANSION_REDUCTION, 16 )
+
+/* gain reduction for fricatives */
+#define DE_ESSER_COEF_SWB_dB_Q7                         SKP_FIX_CONST( DE_ESSER_COEF_SWB_dB, 7 )
+#define DE_ESSER_COEF_WB_dB_Q7                          SKP_FIX_CONST( DE_ESSER_COEF_WB_dB, 7 )
+
+/* extra harmonic boosting (signal shaping) at low bitrates */
+#define LOW_RATE_HARMONIC_BOOST_Q16                     SKP_FIX_CONST( LOW_RATE_HARMONIC_BOOST, 16 )
+
+/* extra harmonic boosting (signal shaping) for noisy input signals */
+#define LOW_INPUT_QUALITY_HARMONIC_BOOST_Q16            SKP_FIX_CONST( LOW_INPUT_QUALITY_HARMONIC_BOOST, 16 )
+
+/* harmonic noise shaping */
+#define HARMONIC_SHAPING_Q16                            SKP_FIX_CONST( HARMONIC_SHAPING, 16 )
+
+/* extra harmonic noise shaping for high bitrates or noisy input */
+#define HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING_Q16   SKP_FIX_CONST( HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING, 16 )
+
+
+/* parameter for shaping noise towards higher frequencies */
+#define HP_NOISE_COEF_Q16                               SKP_FIX_CONST( HP_NOISE_COEF, 16 )
+
+/* parameter for shaping noise extra towards higher frequencies during voiced speech */
+#define HARM_HP_NOISE_COEF_Q24                          SKP_FIX_CONST( HARM_HP_NOISE_COEF, 24 )
+
+/* parameter for applying a high-pass tilt to the input signal */
+#define INPUT_TILT_Q26                                  SKP_FIX_CONST( INPUT_TILT, 26 )
+
+/* parameter for extra high-pass tilt to the input signal at high rates */
+#define HIGH_RATE_INPUT_TILT_Q12                        SKP_FIX_CONST( HIGH_RATE_INPUT_TILT, 12 )
+
+/* parameter for reducing noise at the very low frequencies */
+#define LOW_FREQ_SHAPING_Q0                             SKP_FIX_CONST( LOW_FREQ_SHAPING, 0 )
+
+/* less reduction of noise at the very low frequencies for signals with low SNR at low frequencies */
+#define LOW_QUALITY_LOW_FREQ_SHAPING_DECR_Q1            SKP_FIX_CONST( LOW_QUALITY_LOW_FREQ_SHAPING_DECR, 1 )
+
+/* fraction added to first autocorrelation value */
+#define SHAPE_WHITE_NOISE_FRACTION_Q20                  SKP_FIX_CONST( SHAPE_WHITE_NOISE_FRACTION, 20 )
+
+/* fraction of first autocorrelation value added to residual energy value; limits prediction gain */
+#define SHAPE_MIN_ENERGY_RATIO_Q24                      SKP_FIX_CONST( SHAPE_MIN_ENERGY_RATIO, 24 )
+
+/* noise floor to put a low limit on the quantization step size */
+#define NOISE_FLOOR_dB_Q7                               SKP_FIX_CONST( NOISE_FLOOR_dB, 7 )
+
+/* noise floor relative to active speech gain level */
+#define RELATIVE_MIN_GAIN_dB_Q7                         SKP_FIX_CONST( RELATIVE_MIN_GAIN_dB, 7 )
+
+/* subframe smoothing coefficient for determining active speech gain level (lower -> more smoothing) */
+#define GAIN_SMOOTHING_COEF_Q10                         SKP_FIX_CONST( GAIN_SMOOTHING_COEF, 10 )
+
+/* subframe smoothing coefficient for HarmBoost, HarmShapeGain, Tilt (lower -> more smoothing) */
+#define SUBFR_SMTH_COEF_Q16                             SKP_FIX_CONST( SUBFR_SMTH_COEF, 16 )
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //SKP_SILK_PERCEPTUAL_PARAMETERS_FIX_H
--- /dev/null
+++ b/src_FIX/SKP_Silk_prefilter_FIX.c
@@ -1,0 +1,201 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+#include "SKP_Silk_perceptual_parameters_FIX.h"
+
+/* SKP_Silk_prefilter. Prefilter for finding Quantizer input signal */
+SKP_INLINE void SKP_Silk_prefilt_FIX(
+    SKP_Silk_prefilter_state_FIX *P,                    /* I/O state                          */
+    SKP_int32   st_res_Q12[],                           /* I short term residual signal       */
+    SKP_int16   xw[],                                   /* O prefiltered signal               */
+    SKP_int32   HarmShapeFIRPacked_Q12,                 /* I Harmonic shaping coeficients     */
+    SKP_int     Tilt_Q14,                               /* I Tilt shaping coeficient          */
+    SKP_int32   LF_shp_Q14,                             /* I Low-frequancy shaping coeficients*/
+    SKP_int     lag,                                    /* I Lag for harmonic shaping         */
+    SKP_int     length                                  /* I Length of signals                */
+);
+
+void SKP_Silk_warped_LPC_analysis_filter_FIX(
+          SKP_int32                 state[],            /* I/O  State [order + 1]                       */
+          SKP_int16                 res[],              /* O    Residual signal [length]                */
+    const SKP_int16                 coef_Q13[],         /* I    Coefficients [order]                    */
+    const SKP_int16                 input[],            /* I    Input signal [length]                   */
+    const SKP_int16                 lambda_Q16,         /* I    Warping factor                          */
+    const SKP_int                   length,             /* I    Length of input signal                  */
+    const SKP_int                   order               /* I    Filter order (even)                     */
+)
+{
+    SKP_int     n, i;
+    SKP_int32   acc_Q11, tmp1, tmp2;
+
+    /* Order must be even */
+    SKP_assert( ( order & 1 ) == 0 );
+
+    for( n = 0; n < length; n++ ) {
+        /* Output of lowpass section */  
+        tmp2 = SKP_SMLAWB( state[ 0 ], state[ 1 ], lambda_Q16 );
+        state[ 0 ] = SKP_LSHIFT( input[ n ], 14 );
+        /* Output of allpass section */
+        tmp1 = SKP_SMLAWB( state[ 1 ], state[ 2 ] - tmp2, lambda_Q16 );
+        state[ 1 ] = tmp2;
+        acc_Q11 = SKP_SMULWB( tmp2, coef_Q13[ 0 ] );
+        /* Loop over allpass sections */
+        for( i = 2; i < order; i += 2 ) {
+            /* Output of allpass section */
+            tmp2 = SKP_SMLAWB( state[ i ], state[ i + 1 ] - tmp1, lambda_Q16 );
+            state[ i ] = tmp1;
+            acc_Q11 = SKP_SMLAWB( acc_Q11, tmp1, coef_Q13[ i - 1 ] );
+            /* Output of allpass section */
+            tmp1 = SKP_SMLAWB( state[ i + 1 ], state[ i + 2 ] - tmp2, lambda_Q16 );
+            state[ i + 1 ] = tmp2;
+            acc_Q11 = SKP_SMLAWB( acc_Q11, tmp2, coef_Q13[ i ] );
+        }
+        state[ order ] = tmp1;
+        acc_Q11 = SKP_SMLAWB( acc_Q11, tmp1, coef_Q13[ order - 1 ] );
+        res[ n ] = ( SKP_int16 )SKP_SAT16( ( SKP_int32 )input[ n ] - SKP_RSHIFT_ROUND( acc_Q11, 11 ) );
+    }
+}
+
+void SKP_Silk_prefilter_FIX(
+    SKP_Silk_encoder_state_FIX          *psEnc,         /* I/O  Encoder state FIX                           */
+    const SKP_Silk_encoder_control_FIX  *psEncCtrl,     /* I    Encoder control FIX                         */
+    SKP_int16                           xw[],           /* O    Weighted signal                             */
+    const SKP_int16                     x[]             /* I    Speech signal                               */
+)
+{
+    SKP_Silk_prefilter_state_FIX *P = &psEnc->sPrefilt;
+    SKP_int   j, k, lag;
+    SKP_int32 tmp_32;
+    const SKP_int16 *AR1_shp_Q13;
+    const SKP_int16 *px;
+    SKP_int16 *pxw;
+    SKP_int   HarmShapeGain_Q12, Tilt_Q14;
+    SKP_int32 HarmShapeFIRPacked_Q12, LF_shp_Q14;
+    SKP_int32 x_filt_Q12[ MAX_FRAME_LENGTH / MAX_NB_SUBFR ];
+    SKP_int16 st_res[ ( MAX_FRAME_LENGTH / MAX_NB_SUBFR ) + MAX_LPC_ORDER ];
+    SKP_int16 B_Q12[ 2 ];
+
+    /* Setup pointers */
+    px  = x;
+    pxw = xw;
+    lag = P->lagPrev;
+    for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+        /* Update Variables that change per sub frame */
+        if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+            lag = psEncCtrl->sCmn.pitchL[ k ];
+        }
+
+        /* Noise shape parameters */
+        HarmShapeGain_Q12 = SKP_SMULWB( psEncCtrl->HarmShapeGain_Q14[ k ], 16384 - psEncCtrl->HarmBoost_Q14[ k ] );
+        SKP_assert( HarmShapeGain_Q12 >= 0 );
+        HarmShapeFIRPacked_Q12  =                          SKP_RSHIFT( HarmShapeGain_Q12, 2 );
+        HarmShapeFIRPacked_Q12 |= SKP_LSHIFT( ( SKP_int32 )SKP_RSHIFT( HarmShapeGain_Q12, 1 ), 16 );
+        Tilt_Q14    = psEncCtrl->Tilt_Q14[   k ];
+        LF_shp_Q14  = psEncCtrl->LF_shp_Q14[ k ];
+        AR1_shp_Q13 = &psEncCtrl->AR1_Q13[   k * MAX_SHAPE_LPC_ORDER ];
+
+        /* Short term FIR filtering*/
+        SKP_Silk_warped_LPC_analysis_filter_FIX( P->sAR_shp1, st_res, AR1_shp_Q13, px, 
+            psEncCtrl->sCmn.warping_Q16, psEnc->sCmn.subfr_length, psEnc->sCmn.shapingLPCOrder );
+
+        /* reduce (mainly) low frequencies during harmonic emphasis */
+        B_Q12[ 0 ] = SKP_RSHIFT_ROUND( psEncCtrl->GainsPre_Q14[ k ], 2 );
+        tmp_32 = SKP_SMLABB( INPUT_TILT_Q26, psEncCtrl->HarmBoost_Q14[ k ], HarmShapeGain_Q12 ); /* Q26 */
+        tmp_32 = SKP_SMLABB( tmp_32, psEncCtrl->coding_quality_Q14, HIGH_RATE_INPUT_TILT_Q12 );  /* Q26 */
+        tmp_32 = SKP_SMULWB( tmp_32, -psEncCtrl->GainsPre_Q14[ k ] );                            /* Q24 */
+        tmp_32 = SKP_RSHIFT_ROUND( tmp_32, 12 );                                                 /* Q12 */
+        B_Q12[ 1 ]= SKP_SAT16( tmp_32 );
+
+        x_filt_Q12[ 0 ] = SKP_SMLABB( SKP_SMULBB( st_res[ 0 ], B_Q12[ 0 ] ), P->sHarmHP, B_Q12[ 1 ] );
+        for( j = 1; j < psEnc->sCmn.subfr_length; j++ ) {
+            x_filt_Q12[ j ] = SKP_SMLABB( SKP_SMULBB( st_res[ j ], B_Q12[ 0 ] ), st_res[ j - 1 ], B_Q12[ 1 ] );
+        }
+        P->sHarmHP = st_res[ psEnc->sCmn.subfr_length - 1 ];
+
+        SKP_Silk_prefilt_FIX( P, x_filt_Q12, pxw, HarmShapeFIRPacked_Q12, Tilt_Q14, 
+            LF_shp_Q14, lag, psEnc->sCmn.subfr_length );
+
+        px  += psEnc->sCmn.subfr_length;
+        pxw += psEnc->sCmn.subfr_length;
+    }
+
+    P->lagPrev = psEncCtrl->sCmn.pitchL[ MAX_NB_SUBFR - 1 ];
+}
+
+/* SKP_Silk_prefilter. Prefilter for finding Quantizer input signal                           */
+SKP_INLINE void SKP_Silk_prefilt_FIX(
+    SKP_Silk_prefilter_state_FIX *P,                    /* I/O state                          */
+    SKP_int32   st_res_Q12[],                           /* I short term residual signal       */
+    SKP_int16   xw[],                                   /* O prefiltered signal               */
+    SKP_int32   HarmShapeFIRPacked_Q12,                 /* I Harmonic shaping coeficients     */
+    SKP_int     Tilt_Q14,                               /* I Tilt shaping coeficient          */
+    SKP_int32   LF_shp_Q14,                             /* I Low-frequancy shaping coeficients*/
+    SKP_int     lag,                                    /* I Lag for harmonic shaping         */
+    SKP_int     length                                  /* I Length of signals                */
+)
+{
+    SKP_int   i, idx, LTP_shp_buf_idx;
+    SKP_int32 n_LTP_Q12, n_Tilt_Q10, n_LF_Q10;
+    SKP_int32 sLF_MA_shp_Q12, sLF_AR_shp_Q12;
+    SKP_int16 *LTP_shp_buf;
+
+    /* To speed up use temp variables instead of using the struct */
+    LTP_shp_buf     = P->sLTP_shp1;
+    LTP_shp_buf_idx = P->sLTP_shp_buf_idx1;
+    sLF_AR_shp_Q12  = P->sLF_AR_shp1_Q12;
+    sLF_MA_shp_Q12  = P->sLF_MA_shp1_Q12;
+
+    for( i = 0; i < length; i++ ) {
+        if( lag > 0 ) {
+            /* unrolled loop */
+            SKP_assert( HARM_SHAPE_FIR_TAPS == 3 );
+            idx = lag + LTP_shp_buf_idx;
+            n_LTP_Q12 = SKP_SMULBB(            LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 - 1) & LTP_MASK ], HarmShapeFIRPacked_Q12 );
+            n_LTP_Q12 = SKP_SMLABT( n_LTP_Q12, LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2    ) & LTP_MASK ], HarmShapeFIRPacked_Q12 );
+            n_LTP_Q12 = SKP_SMLABB( n_LTP_Q12, LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 + 1) & LTP_MASK ], HarmShapeFIRPacked_Q12 );
+        } else {
+            n_LTP_Q12 = 0;
+        }
+
+        n_Tilt_Q10 = SKP_SMULWB( sLF_AR_shp_Q12, Tilt_Q14 );
+        n_LF_Q10   = SKP_SMLAWB( SKP_SMULWT( sLF_AR_shp_Q12, LF_shp_Q14 ), sLF_MA_shp_Q12, LF_shp_Q14 );
+
+        sLF_AR_shp_Q12 = SKP_SUB32( st_res_Q12[ i ], SKP_LSHIFT( n_Tilt_Q10, 2 ) );
+        sLF_MA_shp_Q12 = SKP_SUB32( sLF_AR_shp_Q12,  SKP_LSHIFT( n_LF_Q10,   2 ) );
+
+        LTP_shp_buf_idx = ( LTP_shp_buf_idx - 1 ) & LTP_MASK;
+        LTP_shp_buf[ LTP_shp_buf_idx ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( sLF_MA_shp_Q12, 12 ) );
+
+        xw[i] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SUB32( sLF_MA_shp_Q12, n_LTP_Q12 ), 12 ) );
+    }
+
+    /* Copy temp variable back to state */
+    P->sLF_AR_shp1_Q12   = sLF_AR_shp_Q12;
+    P->sLF_MA_shp1_Q12   = sLF_MA_shp_Q12;
+    P->sLTP_shp_buf_idx1 = LTP_shp_buf_idx;
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_process_NLSFs_FIX.c
@@ -1,0 +1,127 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+/* Limit, stabilize, convert and quantize NLSFs.    */ 
+void SKP_Silk_process_NLSFs_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,             /* I/O  Encoder state FIX                           */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl,         /* I/O  Encoder control FIX                         */
+    SKP_int                         *pNLSF_Q15          /* I/O  Normalized LSFs (quant out) (0 - (2^15-1))  */
+)
+{
+    SKP_int     doInterpolate;
+    SKP_int     pNLSFW_Q6[ MAX_LPC_ORDER ];
+    SKP_int     NLSF_mu_Q15, NLSF_mu_fluc_red_Q16;
+    SKP_int32   i_sqr_Q15;
+    const SKP_Silk_NLSF_CB_struct *psNLSF_CB;
+
+    /* Used only for NLSF interpolation */
+    SKP_int     pNLSF0_temp_Q15[ MAX_LPC_ORDER ];
+    SKP_int     pNLSFW0_temp_Q6[ MAX_LPC_ORDER ];
+    SKP_int     i;
+
+    SKP_assert( psEnc->speech_activity_Q8 >=   0 );
+    SKP_assert( psEnc->speech_activity_Q8 <= 256 );
+    SKP_assert( psEncCtrl->sparseness_Q8  >=   0 );
+    SKP_assert( psEncCtrl->sparseness_Q8  <= 256 );
+    SKP_assert( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED || psEncCtrl->sCmn.sigtype == SIG_TYPE_UNVOICED );
+
+    /***********************/
+    /* Calculate mu values */
+    /***********************/
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        /* NLSF_mu           = 0.002f - 0.001f * psEnc->speech_activity; */
+        /* NLSF_mu_fluc_red  = 0.1f   - 0.05f  * psEnc->speech_activity; */
+        NLSF_mu_Q15          = SKP_SMLAWB(   66,   -8388, psEnc->speech_activity_Q8 );
+        NLSF_mu_fluc_red_Q16 = SKP_SMLAWB( 6554, -838848, psEnc->speech_activity_Q8 );
+    } else { 
+        /* NLSF_mu           = 0.005f - 0.004f * psEnc->speech_activity; */
+        /* NLSF_mu_fluc_red  = 0.2f   - 0.1f   * psEnc->speech_activity - 0.1f * psEncCtrl->sparseness; */
+        NLSF_mu_Q15          = SKP_SMLAWB(   164,   -33554, psEnc->speech_activity_Q8 );
+        NLSF_mu_fluc_red_Q16 = SKP_SMLAWB( 13107, -1677696, psEnc->speech_activity_Q8 + psEncCtrl->sparseness_Q8 ); 
+    }
+    SKP_assert( NLSF_mu_Q15          >= 0     );
+    SKP_assert( NLSF_mu_Q15          <= 164   );
+    SKP_assert( NLSF_mu_fluc_red_Q16 >= 0     );
+    SKP_assert( NLSF_mu_fluc_red_Q16 <= 13107 );
+
+    NLSF_mu_Q15 = SKP_max( NLSF_mu_Q15, 1 );
+
+    /* Calculate NLSF weights */
+    TIC(NLSF_weights_FIX)
+    SKP_Silk_NLSF_VQ_weights_laroia( pNLSFW_Q6, pNLSF_Q15, psEnc->sCmn.predictLPCOrder );
+    TOC(NLSF_weights_FIX)
+
+    /* Update NLSF weights for interpolated NLSFs */
+    doInterpolate = ( psEnc->sCmn.useInterpolatedNLSFs == 1 ) && ( psEncCtrl->sCmn.NLSFInterpCoef_Q2 < ( 1 << 2 ) );
+    if( doInterpolate ) {
+
+        /* Calculate the interpolated NLSF vector for the first half */
+        SKP_Silk_interpolate( pNLSF0_temp_Q15, psEnc->sPred.prev_NLSFq_Q15, pNLSF_Q15, 
+            psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEnc->sCmn.predictLPCOrder );
+
+        /* Calculate first half NLSF weights for the interpolated NLSFs */
+        TIC(NLSF_weights_FIX)
+        SKP_Silk_NLSF_VQ_weights_laroia( pNLSFW0_temp_Q6, pNLSF0_temp_Q15, psEnc->sCmn.predictLPCOrder );
+        TOC(NLSF_weights_FIX)
+
+        /* Update NLSF weights with contribution from first half */
+        i_sqr_Q15 = SKP_LSHIFT( SKP_SMULBB( psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEncCtrl->sCmn.NLSFInterpCoef_Q2 ), 11 );
+        for( i = 0; i < psEnc->sCmn.predictLPCOrder; i++ ) {
+            pNLSFW_Q6[ i ] = SKP_SMLAWB( SKP_RSHIFT( pNLSFW_Q6[ i ], 1 ), pNLSFW0_temp_Q6[ i ], i_sqr_Q15 );
+            SKP_assert( pNLSFW_Q6[ i ] <= SKP_int16_MAX );
+            SKP_assert( pNLSFW_Q6[ i ] >= 1 );
+        }
+    }
+
+    /* Set pointer to the NLSF codebook for the current signal type and LPC order */
+    psNLSF_CB = psEnc->sCmn.psNLSF_CB[ psEncCtrl->sCmn.sigtype ];
+
+    /* Quantize NLSF parameters given the trained NLSF codebooks */
+    TIC(MSVQ_encode_FIX)
+    SKP_Silk_NLSF_MSVQ_encode_FIX( psEncCtrl->sCmn.NLSFIndices, pNLSF_Q15, psNLSF_CB, 
+        psEnc->sPred.prev_NLSFq_Q15, pNLSFW_Q6, NLSF_mu_Q15, NLSF_mu_fluc_red_Q16, 
+        psEnc->sCmn.NLSF_MSVQ_Survivors, psEnc->sCmn.predictLPCOrder, psEnc->sCmn.first_frame_after_reset );
+    TOC(MSVQ_encode_FIX)
+
+    /* Convert quantized NLSFs back to LPC coefficients */
+    SKP_Silk_NLSF2A_stable( psEncCtrl->PredCoef_Q12[ 1 ], pNLSF_Q15, psEnc->sCmn.predictLPCOrder );
+
+    if( doInterpolate ) {
+        /* Calculate the interpolated, quantized LSF vector for the first half */
+        SKP_Silk_interpolate( pNLSF0_temp_Q15, psEnc->sPred.prev_NLSFq_Q15, pNLSF_Q15, 
+            psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEnc->sCmn.predictLPCOrder );
+
+        /* Convert back to LPC coefficients */
+        SKP_Silk_NLSF2A_stable( psEncCtrl->PredCoef_Q12[ 0 ], pNLSF0_temp_Q15, psEnc->sCmn.predictLPCOrder );
+
+    } else {
+        /* Copy LPC coefficients for first half from second half */
+        SKP_memcpy( psEncCtrl->PredCoef_Q12[ 0 ], psEncCtrl->PredCoef_Q12[ 1 ], psEnc->sCmn.predictLPCOrder * sizeof( SKP_int16 ) );
+    }
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_process_gains_FIX.c
@@ -1,0 +1,113 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+/* Processing of gains */
+void SKP_Silk_process_gains_FIX(
+    SKP_Silk_encoder_state_FIX      *psEnc,         /* I/O  Encoder state_FIX                           */
+    SKP_Silk_encoder_control_FIX    *psEncCtrl      /* I/O  Encoder control_FIX                         */
+)
+{
+    SKP_Silk_shape_state_FIX    *psShapeSt = &psEnc->sShape;
+    SKP_int     k;
+    SKP_int32   s_Q16, InvMaxSqrVal_Q16, gain, gain_squared, ResNrg, ResNrgPart;
+
+    /* Gain reduction when LTP coding gain is high */
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        /*s = -0.5f * SKP_sigmoid( 0.25f * ( psEncCtrl->LTPredCodGain - 12.0f ) ); */
+        s_Q16 = -SKP_Silk_sigm_Q15( SKP_RSHIFT_ROUND( psEncCtrl->LTPredCodGain_Q7 - (12 << 7), 4 ) );
+        for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+            psEncCtrl->Gains_Q16[ k ] = SKP_SMLAWB( psEncCtrl->Gains_Q16[ k ], psEncCtrl->Gains_Q16[ k ], s_Q16 );
+        }
+    }
+
+    /* Limit the quantized signal */
+    /*  69 = 21.0f + 16/0.33    */
+    InvMaxSqrVal_Q16 = SKP_DIV32_16( SKP_Silk_log2lin( 
+        SKP_SMULWB( (69 << 7) - psEncCtrl->current_SNR_dB_Q7, SKP_FIX_CONST( 0.33, 16 )) ), psEnc->sCmn.subfr_length );
+
+    for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+        /* Soft limit on ratio residual energy and squared gains */
+        ResNrg     = psEncCtrl->ResNrg[ k ];
+        ResNrgPart = SKP_SMULWW( ResNrg, InvMaxSqrVal_Q16 );
+        if( psEncCtrl->ResNrgQ[ k ] > 0 ) {
+            if( psEncCtrl->ResNrgQ[ k ] < 32 ) {
+                ResNrgPart = SKP_RSHIFT_ROUND( ResNrgPart, psEncCtrl->ResNrgQ[ k ] );
+            } else {
+                ResNrgPart = 0;
+            }
+        } else if( psEncCtrl->ResNrgQ[k] != 0 ) {
+            if( ResNrgPart > SKP_RSHIFT( SKP_int32_MAX, -psEncCtrl->ResNrgQ[ k ] ) ) {
+                ResNrgPart = SKP_int32_MAX;
+            } else {
+                ResNrgPart = SKP_LSHIFT( ResNrgPart, -psEncCtrl->ResNrgQ[ k ] );
+            }
+        }
+        gain = psEncCtrl->Gains_Q16[ k ];
+        gain_squared = SKP_ADD_SAT32( ResNrgPart, SKP_SMMUL( gain, gain ) );
+        if( gain_squared < SKP_int16_MAX ) {
+            /* recalculate with higher precision */
+            gain_squared = SKP_SMLAWW( SKP_LSHIFT( ResNrgPart, 16 ), gain, gain );
+            SKP_assert( gain_squared > 0 );
+            gain = SKP_Silk_SQRT_APPROX( gain_squared );                  /* Q8   */
+            psEncCtrl->Gains_Q16[ k ] = SKP_LSHIFT_SAT32( gain, 8 );        /* Q16  */
+        } else {
+            gain = SKP_Silk_SQRT_APPROX( gain_squared );                  /* Q0   */
+            psEncCtrl->Gains_Q16[ k ] = SKP_LSHIFT_SAT32( gain, 16 );       /* Q16  */
+        }
+    }
+
+    /* Noise shaping quantization */
+    SKP_Silk_gains_quant( psEncCtrl->sCmn.GainsIndices, psEncCtrl->Gains_Q16, 
+        &psShapeSt->LastGainIndex, psEnc->sCmn.nFramesInPayloadBuf, psEnc->sCmn.nb_subfr );
+    /* Set quantizer offset for voiced signals. Larger offset when LTP coding gain is low or tilt is high (ie low-pass) */
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        if( psEncCtrl->LTPredCodGain_Q7 + SKP_RSHIFT( psEncCtrl->input_tilt_Q15, 8 ) > ( 1 << 7 ) ) {
+            psEncCtrl->sCmn.QuantOffsetType = 0;
+        } else {
+            psEncCtrl->sCmn.QuantOffsetType = 1;
+        }
+    }
+
+    /* Quantizer boundary adjustment */
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        psEncCtrl->Lambda_Q10 = SKP_FIX_CONST( 1.2, 10 )
+                  - SKP_SMULWB( SKP_FIX_CONST( 0.4, 18 ), psEnc->speech_activity_Q8       )
+                  - SKP_SMULWB( SKP_FIX_CONST( 0.3, 12 ), psEncCtrl->input_quality_Q14    )
+                  + SKP_SMULBB( SKP_FIX_CONST( 0.2, 10 ), psEncCtrl->sCmn.QuantOffsetType )
+                  - SKP_SMULWB( SKP_FIX_CONST( 0.1, 12 ), psEncCtrl->coding_quality_Q14   );
+    } else {
+        psEncCtrl->Lambda_Q10 = SKP_FIX_CONST( 1.2, 10 )
+                  - SKP_SMULWB( SKP_FIX_CONST( 0.4, 18 ), psEnc->speech_activity_Q8       )
+                  - SKP_SMULWB( SKP_FIX_CONST( 0.4, 12 ), psEncCtrl->input_quality_Q14    )
+                  + SKP_SMULBB( SKP_FIX_CONST( 0.4, 10 ), psEncCtrl->sCmn.QuantOffsetType )
+                  - SKP_SMULWB( SKP_FIX_CONST( 0.1, 12 ), psEncCtrl->coding_quality_Q14   );
+    }
+    SKP_assert( psEncCtrl->Lambda_Q10 >= 0 );
+    SKP_assert( psEncCtrl->Lambda_Q10 < SKP_FIX_CONST( 2, 10 ) );
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_quant_LTP_gains_FIX.c
@@ -1,0 +1,124 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+void SKP_Silk_quant_LTP_gains_FIX(
+    SKP_int16           B_Q14[],                /* I/O  (un)quantized LTP gains     */
+    SKP_int             cbk_index[],            /* O    Codebook Index              */
+    SKP_int             *periodicity_index,     /* O    Periodicity Index           */
+    const SKP_int32     W_Q18[],                /* I    Error Weights in Q18        */
+    SKP_int             mu_Q8,                  /* I    Mu value (R/D tradeoff)     */
+    SKP_int             lowComplexity,          /* I    Flag for low complexity     */
+    const SKP_int       nb_subfr                /* I    number of subframes         */
+)
+{
+    SKP_int             j, k, temp_idx[ MAX_NB_SUBFR ], cbk_size;
+    const SKP_uint16    *cdf_ptr;
+    const SKP_int16     *cl_ptr;
+    const SKP_int16     *cbk_ptr_Q14;
+    const SKP_int16     *b_Q14_ptr;
+    const SKP_int32     *W_Q18_ptr;
+    SKP_int32           rate_dist_subfr, rate_dist, min_rate_dist;
+
+
+TIC(quant_LTP_fix)
+
+    /***************************************************/
+    /* iterate over different codebooks with different */
+    /* rates/distortions, and choose best */
+    /***************************************************/
+    min_rate_dist = SKP_int32_MAX;
+    for( k = 0; k < 3; k++ ) {
+        cdf_ptr     = SKP_Silk_LTP_gain_CDF_ptrs[     k ];
+        cl_ptr      = SKP_Silk_LTP_gain_BITS_Q6_ptrs[ k ];
+        cbk_ptr_Q14 = SKP_Silk_LTP_vq_ptrs_Q14[       k ];
+        cbk_size    = SKP_Silk_LTP_vq_sizes[          k ];
+
+        /* Setup pointer to first subframe */
+        W_Q18_ptr = W_Q18;
+        b_Q14_ptr = B_Q14;
+
+        rate_dist = 0;
+        for( j = 0; j < nb_subfr; j++ ) {
+
+            SKP_Silk_VQ_WMat_EC_FIX(
+                &temp_idx[ j ],         /* O    index of best codebook vector                           */
+                &rate_dist_subfr,       /* O    best weighted quantization error + mu * rate            */
+                b_Q14_ptr,              /* I    input vector to be quantized                            */
+                W_Q18_ptr,              /* I    weighting matrix                                        */
+                cbk_ptr_Q14,            /* I    codebook                                                */
+                cl_ptr,                 /* I    code length for each codebook vector                    */
+                mu_Q8,                  /* I    tradeoff between weighted error and rate                */
+                cbk_size                /* I    number of vectors in codebook                           */
+            );
+
+            rate_dist = SKP_ADD_POS_SAT32( rate_dist, rate_dist_subfr );
+
+            b_Q14_ptr += LTP_ORDER;
+            W_Q18_ptr += LTP_ORDER * LTP_ORDER;
+        }
+
+        /* Avoid never finding a codebook */
+        rate_dist = SKP_min( SKP_int32_MAX - 1, rate_dist );
+
+        if( rate_dist < min_rate_dist ) {
+            min_rate_dist = rate_dist;
+            SKP_memcpy( cbk_index, temp_idx, nb_subfr * sizeof( SKP_int ) );
+            *periodicity_index = k;
+        }
+
+        /* Break early in low-complexity mode if rate distortion is below threshold */
+        if( lowComplexity && ( rate_dist < SKP_Silk_LTP_gain_middle_avg_RD_Q14 ) ) {
+            break;
+        }
+    }
+
+    cbk_ptr_Q14 = SKP_Silk_LTP_vq_ptrs_Q14[ *periodicity_index ];
+    for( j = 0; j < nb_subfr; j++ ) {
+        for( k = 0; k < LTP_ORDER; k++ ) { 
+            B_Q14[ j * LTP_ORDER + k ] = cbk_ptr_Q14[ SKP_MLA( k, cbk_index[ j ], LTP_ORDER ) ];
+        }
+    }
+TOC(quant_LTP_fix)
+#ifdef SAVE_ALL_INTERNAL_DATA
+	/* save rate */
+	{
+		SKP_int nbits_LTP;
+		SKP_float rateBPF_LTP;
+
+		cl_ptr   = SKP_Silk_LTP_gain_BITS_Q6_ptrs[*periodicity_index];
+		nbits_LTP = 0;
+		for(j = 0; j < nb_subfr; j++){
+			nbits_LTP += cl_ptr[cbk_index[j]];
+		}
+		rateBPF_LTP = (SKP_float)nbits_LTP / 64.0f; // Q6 -> Q0
+		SAVE_DATA( rateBPF_LTP.dat, &rateBPF_LTP, sizeof(SKP_float));
+	}
+#endif
+}
+
--- /dev/null
+++ b/src_FIX/SKP_Silk_regularize_correlations_FIX.c
@@ -1,0 +1,43 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+/* Add noise to matrix diagonal */
+void SKP_Silk_regularize_correlations_FIX(
+    SKP_int32                       *XX,                /* I/O  Correlation matrices                        */
+    SKP_int32                       *xx,                /* I/O  Correlation values                          */
+    SKP_int32                       noise,              /* I    Noise to add                                */
+    SKP_int                         D                   /* I    Dimension of XX                             */
+)
+{
+    SKP_int i;
+    for( i = 0; i < D; i++ ) {
+        matrix_ptr( &XX[ 0 ], i, i, D ) = SKP_ADD32( matrix_ptr( &XX[ 0 ], i, i, D ), noise );
+    }
+    xx[ 0 ] += noise;
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_residual_energy16_FIX.c
@@ -1,0 +1,99 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */
+SKP_int32 SKP_Silk_residual_energy16_covar_FIX(
+    const SKP_int16                 *c,                 /* I    Prediction vector                           */
+    const SKP_int32                 *wXX,               /* I    Correlation matrix                          */
+    const SKP_int32                 *wXx,               /* I    Correlation vector                          */
+    SKP_int32                       wxx,                /* I    Signal energy                               */
+    SKP_int                         D,                  /* I    Dimension                                   */
+    SKP_int                         cQ                  /* I    Q value for c vector 0 - 15                 */
+)
+{
+    SKP_int   i, j, lshifts, Qxtra;
+    SKP_int32 c_max, w_max, tmp, tmp2, nrg;
+    SKP_int   cn[ MAX_MATRIX_SIZE ]; 
+    const SKP_int32 *pRow;
+
+    /* Safety checks */
+    SKP_assert( D >=  0 );
+    SKP_assert( D <= 16 );
+    SKP_assert( cQ >  0 );
+    SKP_assert( cQ < 16 );
+
+    lshifts = 16 - cQ;
+    Qxtra = lshifts;
+
+    c_max = 0;
+    for( i = 0; i < D; i++ ) {
+        c_max = SKP_max_32( c_max, SKP_abs( ( SKP_int32 )c[ i ] ) );
+    }
+    Qxtra = SKP_min_int( Qxtra, SKP_Silk_CLZ32( c_max ) - 17 );
+
+    w_max = SKP_max_32( wXX[ 0 ], wXX[ D * D - 1 ] );
+    Qxtra = SKP_min_int( Qxtra, SKP_Silk_CLZ32( SKP_MUL( D, SKP_RSHIFT( SKP_SMULWB( w_max, c_max ), 4 ) ) ) - 5 );
+    Qxtra = SKP_max_int( Qxtra, 0 );
+    for( i = 0; i < D; i++ ) {
+        cn[ i ] = SKP_LSHIFT( ( SKP_int )c[ i ], Qxtra );
+        SKP_assert( SKP_abs(cn[i]) <= ( SKP_int16_MAX + 1 ) ); /* Check that SKP_SMLAWB can be used */
+    }
+    lshifts -= Qxtra;
+
+    /* Compute wxx - 2 * wXx * c */
+    tmp = 0;
+    for( i = 0; i < D; i++ ) {
+        tmp = SKP_SMLAWB( tmp, wXx[ i ], cn[ i ] );
+    }
+    nrg = SKP_RSHIFT( wxx, 1 + lshifts ) - tmp;                         /* Q: -lshifts - 1 */
+
+    /* Add c' * wXX * c, assuming wXX is symmetric */
+    tmp2 = 0;
+    for( i = 0; i < D; i++ ) {
+        tmp = 0;
+        pRow = &wXX[ i * D ];
+        for( j = i + 1; j < D; j++ ) {
+            tmp = SKP_SMLAWB( tmp, pRow[ j ], cn[ j ] );
+        }
+        tmp  = SKP_SMLAWB( tmp,  SKP_RSHIFT( pRow[ i ], 1 ), cn[ i ] );
+        tmp2 = SKP_SMLAWB( tmp2, tmp,                        cn[ i ] );
+    }
+    nrg = SKP_ADD_LSHIFT32( nrg, tmp2, lshifts );                       /* Q: -lshifts - 1 */
+
+    /* Keep one bit free always, because we add them for LSF interpolation */
+    if( nrg < 1 ) {
+        nrg = 1;
+    } else if( nrg > SKP_RSHIFT( SKP_int32_MAX, lshifts + 2 ) ) {
+        nrg = SKP_int32_MAX >> 1;
+    } else {
+        nrg = SKP_LSHIFT( nrg, lshifts + 1 );                           /* Q0 */
+    }
+    return nrg;
+
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_residual_energy_FIX.c
@@ -1,0 +1,89 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+/* Calculates residual energies of input subframes where all subframes have LPC_order   */
+/* of preceeding samples                                                                */
+void SKP_Silk_residual_energy_FIX(
+          SKP_int32 nrgs[ MAX_NB_SUBFR ],           /* O    Residual energy per subframe    */
+          SKP_int   nrgsQ[ MAX_NB_SUBFR ],          /* O    Q value per subframe            */
+    const SKP_int16 x[],                            /* I    Input signal                    */
+    const SKP_int16 a_Q12[ 2 ][ MAX_LPC_ORDER ],    /* I    AR coefs for each frame half    */
+    const SKP_int32 gains[ MAX_NB_SUBFR ],          /* I    Quantization gains              */
+    const SKP_int   subfr_length,                   /* I    Subframe length                 */
+    const SKP_int   nb_subfr,                       /* I    Number of subframes             */
+    const SKP_int   LPC_order                       /* I    LPC order                       */
+)
+{
+    SKP_int         offset, i, j, rshift, lz1, lz2;
+    SKP_int16       *LPC_res_ptr, LPC_res[ ( MAX_FRAME_LENGTH + MAX_NB_SUBFR * MAX_LPC_ORDER ) / 2 ];
+    const SKP_int16 *x_ptr;
+    SKP_int16       S[ MAX_LPC_ORDER ];
+    SKP_int32       tmp32;
+
+    x_ptr  = x;
+    offset = LPC_order + subfr_length;
+    
+    /* Filter input to create the LPC residual for each frame half, and measure subframe energies */
+    for( i = 0; i < nb_subfr >> 1; i++ ) {
+        /* Calculate half frame LPC residual signal including preceeding samples */
+        SKP_memset( S, 0, LPC_order * sizeof( SKP_int16 ) );
+        SKP_Silk_LPC_analysis_filter( x_ptr, a_Q12[ i ], S, LPC_res, ( MAX_NB_SUBFR >> 1 ) * offset, LPC_order );
+
+        /* Point to first subframe of the just calculated LPC residual signal */
+        LPC_res_ptr = LPC_res + LPC_order;
+        for( j = 0; j < ( MAX_NB_SUBFR >> 1 ); j++ ) {
+            /* Measure subframe energy */
+            SKP_Silk_sum_sqr_shift( &nrgs[ i * ( MAX_NB_SUBFR >> 1 ) + j ], &rshift, LPC_res_ptr, subfr_length ); 
+            
+            /* Set Q values for the measured energy */
+            nrgsQ[ i * ( MAX_NB_SUBFR >> 1 ) + j ] = -rshift;
+            
+            /* Move to next subframe */
+            LPC_res_ptr += offset;
+        }
+        /* Move to next frame half */
+        x_ptr += ( MAX_NB_SUBFR >> 1 ) * offset;
+    }
+
+    /* Apply the squared subframe gains */
+    for( i = 0; i < nb_subfr; i++ ) {
+        /* Fully upscale gains and energies */
+        lz1 = SKP_Silk_CLZ32( nrgs[  i ] ) - 1; 
+        lz2 = SKP_Silk_CLZ32( gains[ i ] ) - 1; 
+        
+        tmp32 = SKP_LSHIFT32( gains[ i ], lz2 );
+
+        /* Find squared gains */
+        tmp32 = SKP_SMMUL( tmp32, tmp32 ); // Q( 2 * lz2 - 32 )
+
+        /* Scale energies */
+        nrgs[ i ] = SKP_SMMUL( tmp32, SKP_LSHIFT32( nrgs[ i ], lz1 ) ); // Q( nrgsQ[ i ] + lz1 + 2 * lz2 - 32 - 32 )
+        nrgsQ[ i ] += lz1 + 2 * lz2 - 32 - 32;
+    }
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_solve_LS_FIX.c
@@ -1,0 +1,240 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+/*****************************/
+/* Internal function headers */
+/*****************************/
+
+typedef struct {
+    SKP_int32 Q36_part;
+    SKP_int32 Q48_part;
+} inv_D_t;
+
+/* Factorize square matrix A into LDL form */
+SKP_INLINE void SKP_Silk_LDL_factorize_FIX(
+    SKP_int32           *A,         /* I/O Pointer to Symetric Square Matrix */
+    SKP_int             M,          /* I   Size of Matrix */
+    SKP_int32           *L_Q16,     /* I/O Pointer to Square Upper triangular Matrix */
+    inv_D_t             *inv_D      /* I/O Pointer to vector holding inverted diagonal elements of D */
+);
+
+/* Solve Lx = b, when L is lower triangular and has ones on the diagonal */
+SKP_INLINE void SKP_Silk_LS_SolveFirst_FIX(
+    const SKP_int32     *L_Q16,     /* I Pointer to Lower Triangular Matrix */
+    SKP_int             M,          /* I Dim of Matrix equation */
+    const SKP_int32     *b,         /* I b Vector */
+    SKP_int32           *x_Q16      /* O x Vector */  
+);
+
+/* Solve L^t*x = b, where L is lower triangular with ones on the diagonal */
+SKP_INLINE void SKP_Silk_LS_SolveLast_FIX(
+    const SKP_int32     *L_Q16,     /* I Pointer to Lower Triangular Matrix */
+    const SKP_int       M,          /* I Dim of Matrix equation */
+    const SKP_int32     *b,         /* I b Vector */
+    SKP_int32           *x_Q16      /* O x Vector */  
+);
+
+SKP_INLINE void SKP_Silk_LS_divide_Q16_FIX(
+    SKP_int32           T[],    /* I/O Numenator vector */
+    inv_D_t             *inv_D, /* I   1 / D vector     */
+    SKP_int             M       /* I   dimension        */
+);
+
+/* Solves Ax = b, assuming A is symmetric */
+void SKP_Silk_solve_LDL_FIX(
+    SKP_int32                       *A,                 /* I    Pointer to symetric square matrix A         */
+    SKP_int                         M,                  /* I    Size of matrix                              */
+    const SKP_int32                 *b,                 /* I    Pointer to b vector                         */
+    SKP_int32                       *x_Q16              /* O    Pointer to x solution vector                */
+)
+{
+    SKP_int32 L_Q16[  MAX_MATRIX_SIZE * MAX_MATRIX_SIZE ]; 
+    SKP_int32 Y[      MAX_MATRIX_SIZE ];
+    inv_D_t   inv_D[  MAX_MATRIX_SIZE ];
+
+    SKP_assert( M <= MAX_MATRIX_SIZE );
+
+    /***************************************************
+    Factorize A by LDL such that A = L*D*L',
+    where L is lower triangular with ones on diagonal
+    ****************************************************/
+    SKP_Silk_LDL_factorize_FIX( A, M, L_Q16, inv_D );
+        
+    /****************************************************
+    * substitute D*L'*x = Y. ie:
+    L*D*L'*x = b => L*Y = b <=> Y = inv(L)*b
+    ******************************************************/
+    SKP_Silk_LS_SolveFirst_FIX( L_Q16, M, b, Y );
+
+    /****************************************************
+    D*L'*x = Y <=> L'*x = inv(D)*Y, because D is 
+    diagonal just multiply with 1/d_i
+    ****************************************************/
+    SKP_Silk_LS_divide_Q16_FIX( Y, inv_D, M );
+
+    /****************************************************
+    x = inv(L') * inv(D) * Y
+    *****************************************************/
+    SKP_Silk_LS_SolveLast_FIX( L_Q16, M, Y, x_Q16 );
+}
+
+SKP_INLINE void SKP_Silk_LDL_factorize_FIX(
+    SKP_int32           *A,         /* I   Pointer to Symetric Square Matrix */
+    SKP_int             M,          /* I   Size of Matrix */
+    SKP_int32           *L_Q16,     /* I/O Pointer to Square Upper triangular Matrix */
+    inv_D_t             *inv_D      /* I/O Pointer to vector holding inverted diagonal elements of D */
+)
+{
+    SKP_int   i, j, k, status, loop_count;
+    const SKP_int32 *ptr1, *ptr2;
+    SKP_int32 diag_min_value, tmp_32, err;
+    SKP_int32 v_Q0[ MAX_MATRIX_SIZE ], D_Q0[ MAX_MATRIX_SIZE ];
+    SKP_int32 one_div_diag_Q36, one_div_diag_Q40, one_div_diag_Q48;
+
+    SKP_assert( M <= MAX_MATRIX_SIZE );
+
+    status = 1;
+    diag_min_value = SKP_max_32( SKP_SMMUL( SKP_ADD_SAT32( A[ 0 ], A[ SKP_SMULBB( M, M ) - 1 ] ), FIND_LTP_COND_FAC_Q31 ), 1 << 9 );
+    for( loop_count = 0; loop_count < M && status == 1; loop_count++ ) {
+        status = 0;
+        for( j = 0; j < M; j++ ) {
+            ptr1 = matrix_adr( L_Q16, j, 0, M );
+            tmp_32 = 0;
+            for( i = 0; i < j; i++ ) {
+                v_Q0[ i ] = SKP_SMULWW(         D_Q0[ i ], ptr1[ i ] ); /* Q0 */
+                tmp_32    = SKP_SMLAWW( tmp_32, v_Q0[ i ], ptr1[ i ] ); /* Q0 */
+            }
+            tmp_32 = SKP_SUB32( matrix_ptr( A, j, j, M ), tmp_32 );
+
+            if( tmp_32 < diag_min_value ) {
+                tmp_32 = SKP_SUB32( SKP_SMULBB( loop_count + 1, diag_min_value ), tmp_32 );
+                /* Matrix not positive semi-definite, or ill conditioned */
+                for( i = 0; i < M; i++ ) {
+                    matrix_ptr( A, i, i, M ) = SKP_ADD32( matrix_ptr( A, i, i, M ), tmp_32 );
+                }
+                status = 1;
+                break;
+            }
+            D_Q0[ j ] = tmp_32;                         /* always < max(Correlation) */
+        
+            /* two-step division */
+            one_div_diag_Q36 = SKP_INVERSE32_varQ( tmp_32, 36 );                    /* Q36 */
+            one_div_diag_Q40 = SKP_LSHIFT( one_div_diag_Q36, 4 );                   /* Q40 */
+            err = SKP_SUB32( 1 << 24, SKP_SMULWW( tmp_32, one_div_diag_Q40 ) );     /* Q24 */
+            one_div_diag_Q48 = SKP_SMULWW( err, one_div_diag_Q40 );                 /* Q48 */
+
+            /* Save 1/Ds */
+            inv_D[ j ].Q36_part = one_div_diag_Q36;
+            inv_D[ j ].Q48_part = one_div_diag_Q48;
+
+            matrix_ptr( L_Q16, j, j, M ) = 65536; /* 1.0 in Q16 */
+            ptr1 = matrix_adr( A, j, 0, M );
+            ptr2 = matrix_adr( L_Q16, j + 1, 0, M );
+            for( i = j + 1; i < M; i++ ) { 
+                tmp_32 = 0;
+                for( k = 0; k < j; k++ ) {
+                    tmp_32 = SKP_SMLAWW( tmp_32, v_Q0[ k ], ptr2[ k ] ); /* Q0 */
+                }
+                tmp_32 = SKP_SUB32( ptr1[ i ], tmp_32 ); /* always < max(Correlation) */
+
+                /* tmp_32 / D_Q0[j] : Divide to Q16 */
+                matrix_ptr( L_Q16, i, j, M ) = SKP_ADD32( SKP_SMMUL( tmp_32, one_div_diag_Q48 ),
+                    SKP_RSHIFT( SKP_SMULWW( tmp_32, one_div_diag_Q36 ), 4 ) );
+
+                /* go to next column */
+                ptr2 += M; 
+            }
+        }
+    }
+
+    SKP_assert( status == 0 );
+}
+
+SKP_INLINE void SKP_Silk_LS_divide_Q16_FIX(
+    SKP_int32 T[],      /* I/O Numenator vector */
+    inv_D_t *inv_D,     /* I   1 / D vector     */
+    SKP_int M           /* I   Order */
+)
+{
+    SKP_int   i;
+    SKP_int32 tmp_32;
+    SKP_int32 one_div_diag_Q36, one_div_diag_Q48;
+
+    for( i = 0; i < M; i++ ) {
+        one_div_diag_Q36 = inv_D[ i ].Q36_part;
+        one_div_diag_Q48 = inv_D[ i ].Q48_part;
+
+        tmp_32 = T[ i ];
+        T[ i ] = SKP_ADD32( SKP_SMMUL( tmp_32, one_div_diag_Q48 ), SKP_RSHIFT( SKP_SMULWW( tmp_32, one_div_diag_Q36 ), 4 ) );
+    }
+}
+
+/* Solve Lx = b, when L is lower triangular and has ones on the diagonal */
+SKP_INLINE void SKP_Silk_LS_SolveFirst_FIX(
+    const SKP_int32     *L_Q16, /* I Pointer to Lower Triangular Matrix */
+    SKP_int             M,      /* I Dim of Matrix equation */
+    const SKP_int32     *b,     /* I b Vector */
+    SKP_int32           *x_Q16  /* O x Vector */  
+)
+{
+    SKP_int i, j;
+    const SKP_int32 *ptr32;
+    SKP_int32 tmp_32;
+
+    for( i = 0; i < M; i++ ) {
+        ptr32 = matrix_adr( L_Q16, i, 0, M );
+        tmp_32 = 0;
+        for( j = 0; j < i; j++ ) {
+            tmp_32 = SKP_SMLAWW( tmp_32, ptr32[ j ], x_Q16[ j ] );
+        }
+        x_Q16[ i ] = SKP_SUB32( b[ i ], tmp_32 );
+    }
+}
+
+/* Solve L^t*x = b, where L is lower triangular with ones on the diagonal */
+SKP_INLINE void SKP_Silk_LS_SolveLast_FIX(
+    const SKP_int32     *L_Q16,     /* I Pointer to Lower Triangular Matrix */
+    const SKP_int       M,          /* I Dim of Matrix equation */
+    const SKP_int32     *b,         /* I b Vector */
+    SKP_int32           *x_Q16      /* O x Vector */  
+)
+{
+    SKP_int i, j;
+    const SKP_int32 *ptr32;
+    SKP_int32 tmp_32;
+
+    for( i = M - 1; i >= 0; i-- ) {
+        ptr32 = matrix_adr( L_Q16, 0, i, M );
+        tmp_32 = 0;
+        for( j = M - 1; j > i; j-- ) {
+            tmp_32 = SKP_SMLAWW( tmp_32, ptr32[ SKP_SMULBB( j, M ) ], x_Q16[ j ] );
+        }
+        x_Q16[ i ] = SKP_SUB32( b[ i ], tmp_32 );
+    }
+}
--- /dev/null
+++ b/src_FIX/SKP_Silk_structs_FIX.h
@@ -1,0 +1,159 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_STRUCTS_FIX_H
+#define SKP_SILK_STRUCTS_FIX_H
+
+#include "SKP_Silk_typedef.h"
+#include "SKP_Silk_define_FIX.h"
+#include "SKP_Silk_main.h"
+#include "SKP_Silk_structs.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/********************************/
+/* Noise shaping analysis state */
+/********************************/
+typedef struct {
+    SKP_int     LastGainIndex;
+    SKP_int32   HarmBoost_smth_Q16;
+    SKP_int32   HarmShapeGain_smth_Q16;
+    SKP_int32   Tilt_smth_Q16;
+} SKP_Silk_shape_state_FIX;
+
+/********************************/
+/* Prefilter state              */
+/********************************/
+typedef struct {
+    SKP_int16   sLTP_shp1[ LTP_BUF_LENGTH ];
+    SKP_int32   sAR_shp1[ MAX_SHAPE_LPC_ORDER + 1 ];
+    SKP_int32   sAR_shp2_Q14[ MAX_SHAPE_LPC_ORDER ];
+    SKP_int16   sLTP_shp2_FIX[ LTP_BUF_LENGTH ];
+    SKP_int     sLTP_shp_buf_idx1;
+    SKP_int     sAR_shp_buf_idx2;
+    SKP_int     sLTP_shp_buf_idx2;
+    SKP_int32   sLF_AR_shp1_Q12;
+    SKP_int32   sLF_MA_shp1_Q12;
+    SKP_int32   sLF_AR_shp2_Q12;
+    SKP_int32   sLF_MA_shp2_Q12;
+    SKP_int     sHarmHP;
+    SKP_int32   rand_seed;
+    SKP_int     lagPrev;
+} SKP_Silk_prefilter_state_FIX;
+
+/*****************************/
+/* Prediction analysis state */
+/*****************************/
+typedef struct {
+    SKP_int   pitch_LPC_win_length;
+    SKP_int   min_pitch_lag;                                        /* Lowest possible pitch lag (samples)  */
+    SKP_int   max_pitch_lag;                                        /* Highest possible pitch lag (samples) */
+    SKP_int   prev_NLSFq_Q15[ MAX_LPC_ORDER ];                      /* Previously quantized NLSF vector     */
+} SKP_Silk_predict_state_FIX;
+
+
+/********************************/
+/* Encoder state FIX            */
+/********************************/
+typedef struct {
+    SKP_Silk_encoder_state          sCmn;                           /* Common struct, shared with floating-point code */
+
+#if HIGH_PASS_INPUT
+    SKP_int32                       variable_HP_smth1_Q15;          /* State of first smoother                                              */
+    SKP_int32                       variable_HP_smth2_Q15;          /* State of second smoother                                             */
+#endif
+    SKP_Silk_shape_state_FIX        sShape;                         /* Shape state                                                          */
+    SKP_Silk_prefilter_state_FIX    sPrefilt;                       /* Prefilter State                                                      */
+    SKP_Silk_predict_state_FIX      sPred;                          /* Prediction state                                                     */
+    SKP_Silk_nsq_state              sNSQ;                           /* Noise Shape Quantizer State                                          */
+    SKP_Silk_nsq_state              sNSQ_LBRR;                      /* Noise Shape Quantizer State ( for low bitrate redundancy )           */
+
+    /* Buffer for find pitch and noise shape analysis */
+    SKP_array_of_int16_4_byte_aligned( x_buf, 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX );    
+    SKP_int                         LTPCorr_Q15;                    /* Normalized correlation from pitch lag estimator                      */
+    SKP_int                         mu_LTP_Q8;                      /* Rate-distortion tradeoff in LTP quantization                         */
+    SKP_int32                       SNR_dB_Q7;                      /* Quality setting                                                      */
+    SKP_int32                       avgGain_Q16;                    /* average gain during active speech                                    */
+    SKP_int32                       avgGain_Q16_one_bit_per_sample; /* average gain during active speech                                    */
+    SKP_int                         BufferedInChannel_ms;           /* Simulated number of ms buffer because of exceeded TargetRate_bps     */
+    SKP_int                         speech_activity_Q8;             /* Speech activity in Q8                                                */
+    SKP_int32                       pitchEstimationThreshold_Q16;   /* Threshold for pitch estimator                                        */
+
+    /* Parameters For LTP scaling Control */
+    SKP_int                         prevLTPredCodGain_Q7;
+    SKP_int                         HPLTPredCodGain_Q7;
+
+    SKP_int32                       inBandFEC_SNR_comp_Q8;          /* Compensation to SNR_dB when using inband FEC Voiced      */
+
+} SKP_Silk_encoder_state_FIX;
+
+/************************/
+/* Encoder control FIX  */
+/************************/
+typedef struct {
+    SKP_Silk_encoder_control        sCmn;                           /* Common struct, shared with floating-point code */
+
+    /* Prediction and coding parameters */
+    SKP_int32                   Gains_Q16[ MAX_NB_SUBFR ];
+    SKP_array_of_int16_4_byte_aligned( PredCoef_Q12[ 2 ], MAX_LPC_ORDER );
+    SKP_int16                   LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ];
+    SKP_int                     LTP_scale_Q14;
+
+    /* Noise shaping parameters */
+    /* Testing */
+    SKP_array_of_int16_4_byte_aligned( AR1_Q13, MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER );
+    SKP_array_of_int16_4_byte_aligned( AR2_Q13, MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER );
+    SKP_int32   LF_shp_Q14[        MAX_NB_SUBFR ];          /* Packs two int16 coefficients per int32 value             */
+    SKP_int     GainsPre_Q14[      MAX_NB_SUBFR ];
+    SKP_int     HarmBoost_Q14[     MAX_NB_SUBFR ];
+    SKP_int     Tilt_Q14[          MAX_NB_SUBFR ];
+    SKP_int     HarmShapeGain_Q14[ MAX_NB_SUBFR ];
+    SKP_int     Lambda_Q10;
+    SKP_int     input_quality_Q14;
+    SKP_int     coding_quality_Q14;
+    SKP_int32   pitch_freq_low_Hz;
+    SKP_int     current_SNR_dB_Q7;
+
+    /* measures */
+    SKP_int     sparseness_Q8;
+    SKP_int     LTPredCodGain_Q7;
+    SKP_int     input_quality_bands_Q15[ VAD_N_BANDS ];
+    SKP_int     input_tilt_Q15;
+    SKP_int32   ResNrg[ MAX_NB_SUBFR ];             /* Residual energy per subframe                             */
+    SKP_int     ResNrgQ[ MAX_NB_SUBFR ];            /* Q domain for the residual energy > 0                     */
+    
+} SKP_Silk_encoder_control_FIX;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+++ b/src_FIX/SKP_Silk_warped_autocorrelation_FIX.c
@@ -1,0 +1,82 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FIX.h"
+
+#define QC  10
+
+/* Autocorrelations for a warped frequency axis */
+void SKP_Silk_warped_autocorrelation_FIX(
+          SKP_int32                 *corr,              /* O    Result [order + 1]                      */
+          SKP_int                   *scale,             /* O    Scaling of the correlation vector       */
+    const SKP_int16                 *input,             /* I    Input data to correlate                 */
+    const SKP_int16                 warping_Q16,        /* I    Warping coefficient                     */
+    const SKP_int                   length,             /* I    Length of input                         */
+    const SKP_int                   order               /* I    Correlation order (even)                */
+)
+{
+    SKP_int   n, i, lsh;
+    SKP_int32 tmp1_Q16, tmp2_Q16;
+    SKP_int32 state_Q16[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0 };
+    SKP_int64 corr_QC[   MAX_SHAPE_LPC_ORDER + 1 ] = { 0 };
+
+    /* Order must be even */
+    SKP_assert( ( order & 1 ) == 0 );
+
+    /* Loop over samples */
+    for( n = 0; n < length; n++ ) {
+        tmp1_Q16 = SKP_LSHIFT32( ( SKP_int32 )input[ n ], 16 );
+        /* Loop over allpass sections */
+        for( i = 0; i < order; i += 2 ) {
+            /* Output of allpass section */
+            tmp2_Q16 = SKP_SMLAWB( state_Q16[ i ], state_Q16[ i + 1 ] - tmp1_Q16, warping_Q16 );
+            state_Q16[ i ] = tmp1_Q16;
+            corr_QC[ i ] += SKP_RSHIFT64( SKP_SMULL( tmp1_Q16, state_Q16[ 0 ] ), 32 - QC );
+            /* Output of allpass section */
+            tmp1_Q16 = SKP_SMLAWB( state_Q16[ i + 1 ], state_Q16[ i + 2 ] - tmp2_Q16, warping_Q16 );
+            state_Q16[ i + 1 ] = tmp2_Q16;
+            corr_QC[ i + 1 ] += SKP_RSHIFT64( SKP_SMULL( tmp2_Q16, state_Q16[ 0 ] ), 32 - QC );
+        }
+        state_Q16[ order ] = tmp1_Q16;
+        corr_QC[ order ] += SKP_RSHIFT64( SKP_SMULL( tmp1_Q16, state_Q16[ 0 ] ), 32 - QC );
+    }
+
+    lsh = SKP_Silk_CLZ64( corr_QC[ 0 ] ) - 35;
+    lsh = SKP_LIMIT( lsh, -12 - QC, 30 - QC );
+    *scale = -( QC + lsh ); 
+    SKP_assert( *scale >= -30 && *scale <= 12 );
+    if( lsh >= 0 ) {
+        for( i = 0; i < order + 1; i++ ) {
+            corr[ i ] = ( SKP_int32 )SKP_CHECK_FIT32( SKP_LSHIFT64( corr_QC[ i ], lsh ) );
+        }
+    } else {
+        for( i = 0; i < order + 1; i++ ) {
+            corr[ i ] = ( SKP_int32 )SKP_CHECK_FIT32( SKP_RSHIFT64( corr_QC[ i ], -lsh ) );
+        }    
+    }
+    SKP_assert( corr_QC[ 0 ] >= 0 ); // If breaking, decrease QC
+}
--- /dev/null
+++ b/src_FIX/Silk_FIX.vcproj
@@ -1,0 +1,288 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="Silk_FIX"
+	ProjectGUID="{56B91D01-9150-4BBF-AFA1-5B68AB991B76}"
+	RootNamespace="Silk"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				FavorSizeOrSpeed="0"
+				AdditionalIncludeDirectories="&quot;../../../celt-0.8.0/libcelt&quot;;../interface;../src_common;../src_SigProc_FIX"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				FloatingPointModel="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="SKP_Silk_FIX_Win32_debug.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="0"
+				FavorSizeOrSpeed="0"
+				AdditionalIncludeDirectories="&quot;../../../celt-0.8.0/libcelt&quot;;../interface;../src_common;../src_SigProc_FIX"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB;HAVE_CONFIG_H"
+				GeneratePreprocessedFile="0"
+				RuntimeLibrary="0"
+				FloatingPointModel="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="SKP_Silk_FIX_Win32_mt.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine=""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\SKP_Silk_control_codec_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_corrMatrix_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_encode_frame_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_find_LPC_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_find_LTP_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_find_pitch_lags_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_find_pred_coefs_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_HP_variable_cutoff_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_init_encoder_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_LTP_analysis_filter_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_LTP_scale_ctrl_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NLSF_MSVQ_encode_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NLSF_VQ_rate_distortion_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NLSF_VQ_sum_error_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_noise_shape_analysis_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_prefilter_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_process_gains_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_process_NLSFs_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_quant_LTP_gains_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_regularize_correlations_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_residual_energy16_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_residual_energy_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_solve_LS_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_VQ_nearest_neighbor_FIX.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_warped_autocorrelation_FIX.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath=".\SKP_Silk_define_FIX.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_main_FIX.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_perceptual_parameters_FIX.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_structs_FIX.h"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
--- /dev/null
+++ b/src_FLP/SKP_Silk_HP_variable_cutoff_FLP.c
@@ -1,0 +1,103 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+#if HIGH_PASS_INPUT
+
+/* High-pass filter with cutoff frequency adaptation based on pitch lag statistics */
+void SKP_Silk_HP_variable_cutoff_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl,         /* I/O  Encoder control FLP                     */
+          SKP_int16                 *out,               /* O    High-pass filtered output signal        */
+    const SKP_int16                 *in                 /* I    Input signal                            */
+)
+{
+    SKP_float pitch_freq_Hz, pitch_freq_log, quality, delta_freq, smth_coef, Fc, r;
+    SKP_int32 B_Q28[ 3 ], A_Q28[ 2 ];
+
+    /*********************************************/
+    /* Estimate low end of pitch frequency range */
+    /*********************************************/
+    if( psEnc->sCmn.prev_sigtype == SIG_TYPE_VOICED ) {
+
+        /* Difference, in log domain */
+        pitch_freq_Hz  = 1e3f * psEnc->sCmn.fs_kHz / psEnc->sCmn.prevLag;
+        pitch_freq_log = SKP_Silk_log2( pitch_freq_Hz );
+
+        /* Adjustment based on quality */
+        quality = psEncCtrl->input_quality_bands[ 0 ];
+        pitch_freq_log -= quality * quality * ( pitch_freq_log - SKP_Silk_log2( VARIABLE_HP_MIN_FREQ ) );
+        pitch_freq_log += 0.5f * ( 0.6f - quality );
+
+        delta_freq = pitch_freq_log - psEnc->variable_HP_smth1;
+        if( delta_freq < 0.0 ) {
+            /* Less smoothing for decreasing pitch frequency, to track something close to the minimum */
+            delta_freq *= 3.0f;
+        }
+
+        /* Limit delta, to reduce impact of outliers */
+        delta_freq = SKP_LIMIT_float( delta_freq, -VARIABLE_HP_MAX_DELTA_FREQ, VARIABLE_HP_MAX_DELTA_FREQ );
+    
+        /* Update smoother */
+        smth_coef = VARIABLE_HP_SMTH_COEF1 * psEnc->speech_activity;
+        psEnc->variable_HP_smth1 += smth_coef * delta_freq;
+    }
+
+    /* Second smoother */
+    psEnc->variable_HP_smth2 += VARIABLE_HP_SMTH_COEF2 * ( psEnc->variable_HP_smth1 - psEnc->variable_HP_smth2 );
+
+    /* Convert from log scale to Hertz */
+    psEncCtrl->pitch_freq_low_Hz = ( SKP_float )pow( 2.0, psEnc->variable_HP_smth2 );
+
+    /* Limit frequency range */
+    psEncCtrl->pitch_freq_low_Hz = SKP_LIMIT_float( psEncCtrl->pitch_freq_low_Hz, VARIABLE_HP_MIN_FREQ, VARIABLE_HP_MAX_FREQ );
+
+    /*******************************/
+    /* Compute filter coefficients */
+    /*******************************/
+    /* Compute cut-off frequency, in radians */
+    Fc = ( SKP_float )( 0.45f * 2.0f * 3.14159265359 * psEncCtrl->pitch_freq_low_Hz / ( 1e3f * psEnc->sCmn.fs_kHz ) );
+
+    /* 2nd order ARMA coefficients */
+    r = 1.0f - 0.92f * Fc;
+
+    /* b = r * [1; -2; 1]; */
+    /* a = [1; -2 * r * (1 - 0.5 * Fc^2); r^2]; */
+    B_Q28[ 0 ] = SKP_float2int( ( 1 << 28 ) * r );
+    B_Q28[ 1 ] = SKP_float2int( ( 1 << 28 ) * -2.0f * r );
+    B_Q28[ 2 ] = B_Q28[ 0 ];
+    A_Q28[ 0 ] = SKP_float2int( ( 1 << 28 ) * -2.0f * r * ( 1.0f - 0.5f * Fc * Fc ) );
+    A_Q28[ 1 ] = SKP_float2int( ( 1 << 28 ) * r * r );
+
+    /********************/
+    /* High-pass filter */
+    /********************/
+    SKP_Silk_biquad_alt( in, B_Q28, A_Q28, psEnc->sCmn.In_HP_State, out, psEnc->sCmn.frame_length );
+}
+
+#endif // HIGH_PASS_INPUT
--- /dev/null
+++ b/src_FLP/SKP_Silk_LPC_analysis_filter_FLP.c
@@ -1,0 +1,206 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include <stdlib.h>
+#include "SKP_Silk_main_FLP.h"
+
+/*******************************************/
+/* LPC analysis filter                     */
+/* NB! State is kept internally and the    */
+/* filter always starts with zero state    */
+/* first Order output samples are not set  */
+/*******************************************/
+
+void SKP_Silk_LPC_analysis_filter_FLP(
+          SKP_float                 r_LPC[],            /* O    LPC residual signal                     */
+    const SKP_float                 PredCoef[],         /* I    LPC coefficients                        */
+    const SKP_float                 s[],                /* I    Input signal                            */
+    const SKP_int                   length,             /* I    Length of input signal                  */
+    const SKP_int                   Order               /* I    LPC order                               */
+)
+{
+    SKP_assert( Order <= length );
+
+    switch( Order ) {
+        case 8:
+            SKP_Silk_LPC_analysis_filter8_FLP(  r_LPC, PredCoef, s, length );
+        break;
+
+        case 10:
+            SKP_Silk_LPC_analysis_filter10_FLP( r_LPC, PredCoef, s, length );
+        break;
+
+        case 12:
+            SKP_Silk_LPC_analysis_filter12_FLP( r_LPC, PredCoef, s, length );
+        break;
+
+        case 16:
+            SKP_Silk_LPC_analysis_filter16_FLP( r_LPC, PredCoef, s, length );
+        break;
+
+        default:
+            SKP_assert( 0 );
+        break;
+    }
+
+    /* Set first LPC Order samples to zero instead of undefined */
+    SKP_memset( r_LPC, 0, Order * sizeof( SKP_float ) );
+}
+
+/* 16th order LPC analysis filter, does not write first 16 samples */
+void SKP_Silk_LPC_analysis_filter16_FLP(
+          SKP_float                 r_LPC[],            /* O    LPC residual signal                     */
+    const SKP_float                 PredCoef[],         /* I    LPC coefficients                        */
+    const SKP_float                 s[],                /* I    Input signal                            */
+    const SKP_int                   length              /* I    Length of input signal                  */
+)
+{
+    SKP_int   ix = 16;
+    SKP_float LPC_pred;
+    const SKP_float *s_ptr;
+
+    for ( ; ix < length; ix++) {
+        s_ptr = &s[ix - 1];
+
+        /* short-term prediction */
+        LPC_pred = s_ptr[ 0 ]   * PredCoef[ 0 ]  + 
+                   s_ptr[-1]  * PredCoef[ 1 ]  +
+                   s_ptr[-2]  * PredCoef[ 2 ]  +
+                   s_ptr[-3]  * PredCoef[ 3 ]  +
+                   s_ptr[-4]  * PredCoef[ 4 ]  +
+                   s_ptr[-5]  * PredCoef[ 5 ]  +
+                   s_ptr[-6]  * PredCoef[ 6 ]  +
+                   s_ptr[-7]  * PredCoef[ 7 ]  +
+                   s_ptr[-8]  * PredCoef[ 8 ]  +
+                   s_ptr[-9]  * PredCoef[ 9 ]  +
+                   s_ptr[-10] * PredCoef[ 10 ] +
+                   s_ptr[-11] * PredCoef[ 11 ] +
+                   s_ptr[-12] * PredCoef[ 12 ] +
+                   s_ptr[-13] * PredCoef[ 13 ] +
+                   s_ptr[-14] * PredCoef[ 14 ] +
+                   s_ptr[-15] * PredCoef[ 15 ];
+
+        /* prediction error */
+        r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;
+    }
+}
+
+/* 12th order LPC analysis filter, does not write first 12 samples */
+void SKP_Silk_LPC_analysis_filter12_FLP(
+          SKP_float                 r_LPC[],            /* O    LPC residual signal                     */
+    const SKP_float                 PredCoef[],         /* I    LPC coefficients                        */
+    const SKP_float                 s[],                /* I    Input signal                            */
+    const SKP_int                   length              /* I    Length of input signal                  */
+)
+{
+    SKP_int   ix = 12;
+    SKP_float LPC_pred;
+    const SKP_float *s_ptr;
+
+    for ( ; ix < length; ix++) {
+        s_ptr = &s[ix - 1];
+
+        /* short-term prediction */
+        LPC_pred = s_ptr[ 0 ]   * PredCoef[ 0 ]  + 
+                   s_ptr[-1]  * PredCoef[ 1 ]  +
+                   s_ptr[-2]  * PredCoef[ 2 ]  +
+                   s_ptr[-3]  * PredCoef[ 3 ]  +
+                   s_ptr[-4]  * PredCoef[ 4 ]  +
+                   s_ptr[-5]  * PredCoef[ 5 ]  +
+                   s_ptr[-6]  * PredCoef[ 6 ]  +
+                   s_ptr[-7]  * PredCoef[ 7 ]  +
+                   s_ptr[-8]  * PredCoef[ 8 ]  +
+                   s_ptr[-9]  * PredCoef[ 9 ]  +
+                   s_ptr[-10] * PredCoef[ 10 ] +
+                   s_ptr[-11] * PredCoef[ 11 ];
+
+        /* prediction error */
+        r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;
+    }
+}
+
+/* 10th order LPC analysis filter, does not write first 10 samples */
+void SKP_Silk_LPC_analysis_filter10_FLP(
+          SKP_float                 r_LPC[],            /* O    LPC residual signal                     */
+    const SKP_float                 PredCoef[],         /* I    LPC coefficients                        */
+    const SKP_float                 s[],                /* I    Input signal                            */
+    const SKP_int                   length              /* I    Length of input signal                  */
+)
+{
+    SKP_int   ix = 10;
+    SKP_float LPC_pred;
+    const SKP_float *s_ptr;
+
+    for ( ; ix < length; ix++) {
+        s_ptr = &s[ix - 1];
+
+        /* short-term prediction */
+        LPC_pred = s_ptr[ 0 ]   * PredCoef[ 0 ]  + 
+                   s_ptr[-1]  * PredCoef[ 1 ]  +
+                   s_ptr[-2]  * PredCoef[ 2 ]  +
+                   s_ptr[-3]  * PredCoef[ 3 ]  +
+                   s_ptr[-4]  * PredCoef[ 4 ]  +
+                   s_ptr[-5]  * PredCoef[ 5 ]  +
+                   s_ptr[-6]  * PredCoef[ 6 ]  +
+                   s_ptr[-7]  * PredCoef[ 7 ]  +
+                   s_ptr[-8]  * PredCoef[ 8 ]  +
+                   s_ptr[-9]  * PredCoef[ 9 ];
+
+        /* prediction error */
+        r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;
+    }
+}
+
+/* 8th order LPC analysis filter, does not write first 8 samples */
+void SKP_Silk_LPC_analysis_filter8_FLP(
+          SKP_float                 r_LPC[],            /* O    LPC residual signal                     */
+    const SKP_float                 PredCoef[],         /* I    LPC coefficients                        */
+    const SKP_float                 s[],                /* I    Input signal                            */
+    const SKP_int                   length              /* I    Length of input signal                  */
+)
+{
+    SKP_int   ix = 8;
+    SKP_float LPC_pred;
+    const SKP_float *s_ptr;
+
+    for ( ; ix < length; ix++) {
+        s_ptr = &s[ix - 1];
+
+        /* short-term prediction */
+        LPC_pred = s_ptr[  0 ] * PredCoef[ 0 ]  + 
+                   s_ptr[ -1 ] * PredCoef[ 1 ]  +
+                   s_ptr[ -2 ] * PredCoef[ 2 ]  +
+                   s_ptr[ -3 ] * PredCoef[ 3 ]  +
+                   s_ptr[ -4 ] * PredCoef[ 4 ]  +
+                   s_ptr[ -5 ] * PredCoef[ 5 ]  +
+                   s_ptr[ -6 ] * PredCoef[ 6 ]  +
+                   s_ptr[ -7 ] * PredCoef[ 7 ];
+
+        /* prediction error */
+        r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;
+    }
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_LTP_analysis_filter_FLP.c
@@ -1,0 +1,71 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+void SKP_Silk_LTP_analysis_filter_FLP(
+          SKP_float         *LTP_res,                   /* O    LTP res MAX_NB_SUBFR*(pre_lgth+subfr_lngth) */
+    const SKP_float         *x,                         /* I    Input signal, with preceeding samples       */
+    const SKP_float         B[ LTP_ORDER * MAX_NB_SUBFR ],  /* I    LTP coefficients for each subframe      */
+    const SKP_int           pitchL[   MAX_NB_SUBFR ],   /* I    Pitch lags                                  */
+    const SKP_float         invGains[ MAX_NB_SUBFR ],   /* I    Inverse quantization gains                  */
+    const SKP_int           subfr_length,               /* I    Length of each subframe                     */
+    const SKP_int           nb_subfr,                   /* I    number of subframes                         */
+    const SKP_int           pre_length                  /* I    Preceeding samples for each subframe        */
+)
+{
+    const SKP_float *x_ptr, *x_lag_ptr;
+    SKP_float   Btmp[ LTP_ORDER ];
+    SKP_float   *LTP_res_ptr;
+    SKP_float   inv_gain;
+    SKP_int     k, i, j;
+
+    x_ptr = x;
+    LTP_res_ptr = LTP_res;
+    for( k = 0; k < nb_subfr; k++ ) {
+        x_lag_ptr = x_ptr - pitchL[ k ];
+        inv_gain = invGains[ k ];
+        for( i = 0; i < LTP_ORDER; i++ ) {
+            Btmp[ i ] = B[ k * LTP_ORDER + i ];
+        }
+        
+        /* LTP analysis FIR filter */
+        for( i = 0; i < subfr_length + pre_length; i++ ) {
+            LTP_res_ptr[ i ] = x_ptr[ i ];
+            /* Subtract long-term prediction */ 
+            for( j = 0; j < LTP_ORDER; j++ ) {
+                LTP_res_ptr[ i ] -= Btmp[ j ] * x_lag_ptr[ LTP_ORDER / 2 - j ];
+            }
+            LTP_res_ptr[ i ] *= inv_gain;
+            x_lag_ptr++;
+        }
+
+        /* Update pointers */
+        LTP_res_ptr += subfr_length + pre_length; 
+        x_ptr       += subfr_length;
+    }
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_LTP_scale_ctrl_FLP.c
@@ -1,0 +1,84 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+#define NB_THRESHOLDS           11
+/* Table containing trained thresholds for LTP scaling */
+static const SKP_float LTPScaleThresholds[ NB_THRESHOLDS ] = 
+{
+    0.95f, 0.8f, 0.50f, 0.400f, 0.3f, 0.2f,
+    0.15f, 0.1f, 0.08f, 0.075f, 0.0f
+};
+
+
+void SKP_Silk_LTP_scale_ctrl_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl          /* I/O  Encoder control FLP                     */
+)
+{
+    SKP_int round_loss, frames_per_packet;
+    SKP_float g_out, g_limit, thrld1, thrld2;
+
+    /* 1st order high-pass filter */
+    //g_HP(n) = g(n) - g(n-1) + 0.5 * g_HP(n-1);       // tune the 0.5: higher means longer impact of jump
+    psEnc->HPLTPredCodGain = SKP_max_float( psEncCtrl->LTPredCodGain - psEnc->prevLTPredCodGain, 0.0f ) 
+                            + 0.5f * psEnc->HPLTPredCodGain;
+    
+    psEnc->prevLTPredCodGain = psEncCtrl->LTPredCodGain;
+
+    /* combine input and filtered input */
+    g_out = 0.5f * psEncCtrl->LTPredCodGain + ( 1.0f - 0.5f ) * psEnc->HPLTPredCodGain;
+    g_limit = SKP_sigmoid( 0.5f * ( g_out - 6 ) );
+    
+    
+    /* Default is minimum scaling */
+    psEncCtrl->sCmn.LTP_scaleIndex = 0;
+
+    /* Round the loss measure to whole pct */
+    round_loss = ( SKP_int )( psEnc->sCmn.PacketLoss_perc );
+    round_loss = SKP_max( 0, round_loss );
+
+    /* Only scale if first frame in packet 0% */
+    if( psEnc->sCmn.nFramesInPayloadBuf == 0 ){
+        
+        frames_per_packet = psEnc->sCmn.PacketSize_ms / ( SUB_FRAME_LENGTH_MS * psEnc->sCmn.nb_subfr );
+
+        round_loss += ( frames_per_packet - 1 );
+        thrld1 = LTPScaleThresholds[ SKP_min_int( round_loss,     NB_THRESHOLDS - 1 ) ];
+        thrld2 = LTPScaleThresholds[ SKP_min_int( round_loss + 1, NB_THRESHOLDS - 1 ) ];
+    
+        if( g_limit > thrld1 ) {
+            /* High Scaling */
+            psEncCtrl->sCmn.LTP_scaleIndex = 2;
+        } else if( g_limit > thrld2 ) {
+            /* Middle Scaling */
+            psEncCtrl->sCmn.LTP_scaleIndex = 1;
+        }
+    }
+    psEncCtrl->LTP_scale = ( SKP_float)SKP_Silk_LTPScales_table_Q14[ psEncCtrl->sCmn.LTP_scaleIndex ] / 16384.0f;
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_NLSF_MSVQ_decode_FLP.c
@@ -1,0 +1,90 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+/* NLSF vector decoder */
+void SKP_Silk_NLSF_MSVQ_decode_FLP(
+          SKP_float                 *pNLSF,             /* O    Decoded output vector [ LPC_ORDER ]     */
+    const SKP_Silk_NLSF_CB_FLP      *psNLSF_CB_FLP,     /* I    NLSF codebook struct                    */  
+    const SKP_int                   *NLSFIndices,       /* I    NLSF indices [ nStages ]                */
+    const SKP_int                   LPC_order           /* I    LPC order used                          */
+)
+{
+    const SKP_float *pCB_element;
+          SKP_int    s;
+          SKP_int    i;
+
+
+    /* Check that each index is within valid range */
+    SKP_assert( 0 <= NLSFIndices[ 0 ] && NLSFIndices[ 0 ] < psNLSF_CB_FLP->CBStages[ 0 ].nVectors );
+
+    /* Point to the first vector element */
+    pCB_element = &psNLSF_CB_FLP->CBStages[ 0 ].CB[ SKP_MUL( NLSFIndices[ 0 ], LPC_order ) ];
+
+    /* Initialize with the codebook vector from stage 0 */
+    SKP_memcpy( pNLSF, pCB_element, LPC_order * sizeof( SKP_float ) );
+          
+    for( s = 1; s < psNLSF_CB_FLP->nStages; s++ ) {
+        /* Check that each index is within valid range */
+        SKP_assert( 0 <= NLSFIndices[ s ] && NLSFIndices[ s ] < psNLSF_CB_FLP->CBStages[ s ].nVectors );
+
+        if( LPC_order == 16 ) {
+            /* Point to the first vector element */
+            pCB_element = &psNLSF_CB_FLP->CBStages[ s ].CB[ SKP_LSHIFT( NLSFIndices[ s ], 4 ) ];
+
+            /* Add the codebook vector from the current stage */
+            pNLSF[ 0 ]  += pCB_element[ 0 ];
+            pNLSF[ 1 ]  += pCB_element[ 1 ];
+            pNLSF[ 2 ]  += pCB_element[ 2 ];
+            pNLSF[ 3 ]  += pCB_element[ 3 ];
+            pNLSF[ 4 ]  += pCB_element[ 4 ];
+            pNLSF[ 5 ]  += pCB_element[ 5 ];
+            pNLSF[ 6 ]  += pCB_element[ 6 ];
+            pNLSF[ 7 ]  += pCB_element[ 7 ];
+            pNLSF[ 8 ]  += pCB_element[ 8 ];
+            pNLSF[ 9 ]  += pCB_element[ 9 ];
+            pNLSF[ 10 ] += pCB_element[ 10 ];
+            pNLSF[ 11 ] += pCB_element[ 11 ];
+            pNLSF[ 12 ] += pCB_element[ 12 ];
+            pNLSF[ 13 ] += pCB_element[ 13 ];
+            pNLSF[ 14 ] += pCB_element[ 14 ];
+            pNLSF[ 15 ] += pCB_element[ 15 ];
+        } else {
+            /* Point to the first vector element */
+            pCB_element = &psNLSF_CB_FLP->CBStages[ s ].CB[ NLSFIndices[ s ] * LPC_order ];
+
+            /* Add the codebook vector from the current stage */
+            for( i = 0; i < LPC_order; i++ ) {
+                pNLSF[ i ] += pCB_element[ i ];
+            }
+        }
+    }
+
+    /* NLSF stabilization */
+    SKP_Silk_NLSF_stabilize_FLP( pNLSF, psNLSF_CB_FLP->NDeltaMin, LPC_order );
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_NLSF_MSVQ_encode_FLP.c
@@ -1,0 +1,225 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+/***********************/
+/* NLSF vector encoder */
+/***********************/
+void SKP_Silk_NLSF_MSVQ_encode_FLP(
+          SKP_int                   *NLSFIndices,       /* O    Codebook path vector [ CB_STAGES ]      */
+          SKP_float                 *pNLSF,             /* I/O  Quantized NLSF vector [ LPC_ORDER ]     */
+    const SKP_Silk_NLSF_CB_FLP      *psNLSF_CB_FLP,     /* I    Codebook object                         */
+    const SKP_float                 *pNLSF_q_prev,      /* I    Prev. quantized NLSF vector [LPC_ORDER] */
+    const SKP_float                 *pW,                /* I    NLSF weight vector [ LPC_ORDER ]        */
+    const SKP_float                 NLSF_mu,            /* I    Rate weight for the RD optimization     */
+    const SKP_float                 NLSF_mu_fluc_red,   /* I    Fluctuation reduction error weight      */
+    const SKP_int                   NLSF_MSVQ_Survivors,/* I    Max survivors from each stage           */
+    const SKP_int                   LPC_order,          /* I    LPC order                               */
+    const SKP_int                   deactivate_fluc_red /* I    Deactivate fluctuation reduction        */
+)
+{
+    SKP_int     i, s, k, cur_survivors, prev_survivors, input_index, cb_index, bestIndex;
+    SKP_float   se, wsse, rateDistThreshold, bestRateDist;
+    SKP_float   pNLSF_in[ MAX_LPC_ORDER ];
+
+#if( LOW_COMPLEXITY_ONLY == 1 )
+    SKP_float   pRateDist[      NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED_LC_MODE ];
+    SKP_float   pRate[          MAX_NLSF_MSVQ_SURVIVORS_LC_MODE ];
+    SKP_float   pRate_new[      MAX_NLSF_MSVQ_SURVIVORS_LC_MODE ];
+    SKP_int     pTempIndices[   MAX_NLSF_MSVQ_SURVIVORS_LC_MODE ];
+    SKP_int     pPath[          MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * NLSF_MSVQ_MAX_CB_STAGES ];
+    SKP_int     pPath_new[      MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * NLSF_MSVQ_MAX_CB_STAGES ];
+    SKP_float   pRes[           MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * MAX_LPC_ORDER ];
+    SKP_float   pRes_new[       MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * MAX_LPC_ORDER ];
+#else
+    SKP_float   pRateDist[      NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED ];
+    SKP_float   pRate[          MAX_NLSF_MSVQ_SURVIVORS ];
+    SKP_float   pRate_new[      MAX_NLSF_MSVQ_SURVIVORS ];
+    SKP_int     pTempIndices[   MAX_NLSF_MSVQ_SURVIVORS ];
+    SKP_int     pPath[          MAX_NLSF_MSVQ_SURVIVORS * NLSF_MSVQ_MAX_CB_STAGES ];
+    SKP_int     pPath_new[      MAX_NLSF_MSVQ_SURVIVORS * NLSF_MSVQ_MAX_CB_STAGES ];
+    SKP_float   pRes[           MAX_NLSF_MSVQ_SURVIVORS * MAX_LPC_ORDER ];
+    SKP_float   pRes_new[       MAX_NLSF_MSVQ_SURVIVORS * MAX_LPC_ORDER ];
+#endif
+
+    const SKP_float *pConstFloat;
+          SKP_float *pFloat;
+    const SKP_int   *pConstInt;
+          SKP_int   *pInt;
+    const SKP_float *pCB_element;
+    const SKP_Silk_NLSF_CBS_FLP *pCurrentCBStage;
+
+    SKP_assert( NLSF_MSVQ_Survivors <= MAX_NLSF_MSVQ_SURVIVORS );
+    SKP_assert( ( LOW_COMPLEXITY_ONLY == 0 ) || ( NLSF_MSVQ_Survivors <= MAX_NLSF_MSVQ_SURVIVORS_LC_MODE ) );
+
+    cur_survivors = NLSF_MSVQ_Survivors;
+
+
+
+    /* Copy the input vector */
+    SKP_memcpy( pNLSF_in, pNLSF, LPC_order * sizeof(SKP_float) );
+
+    /****************************************************/
+    /* Tree search for the multi-stage vector quantizer */
+    /****************************************************/
+
+    /* Clear accumulated rates */
+    SKP_memset( pRate, 0, NLSF_MSVQ_Survivors * sizeof( SKP_float ) );
+    
+    /* Copy NLSFs into residual signal vector */
+    SKP_memcpy( pRes, pNLSF, LPC_order * sizeof( SKP_float ) );
+
+    /* Set first stage values */
+    prev_survivors = 1;
+
+    /* Loop over all stages */
+    for( s = 0; s < psNLSF_CB_FLP->nStages; s++ ) {
+
+        /* Set a pointer to the current stage codebook */
+        pCurrentCBStage = &psNLSF_CB_FLP->CBStages[ s ];
+
+        /* Calculate the number of survivors in the current stage */
+        cur_survivors = SKP_min_32( NLSF_MSVQ_Survivors, prev_survivors * pCurrentCBStage->nVectors );
+
+#if( NLSF_MSVQ_FLUCTUATION_REDUCTION == 0 )
+        /* Find a single best survivor in the last stage, if we */
+        /* do not need candidates for fluctuation reduction     */
+        if( s == psNLSF_CB_FLP->nStages - 1 ) {
+            cur_survivors = 1;
+        }
+#endif
+        /* Nearest neighbor clustering for multiple input data vectors */
+        SKP_Silk_NLSF_VQ_rate_distortion_FLP( pRateDist, pCurrentCBStage, pRes, pW, pRate, NLSF_mu, prev_survivors, LPC_order );
+
+        /* Sort the rate-distortion errors */
+        SKP_Silk_insertion_sort_increasing_FLP( pRateDist, pTempIndices, prev_survivors * pCurrentCBStage->nVectors, cur_survivors );
+
+        /* Discard survivors with rate-distortion values too far above the best one */
+        rateDistThreshold = NLSF_MSVQ_SURV_MAX_REL_RD * pRateDist[ 0 ];
+        while( pRateDist[ cur_survivors - 1 ] > rateDistThreshold && cur_survivors > 1 ) {
+            cur_survivors--;
+        }
+
+        /* Update accumulated codebook contributions for the 'cur_survivors' best codebook indices */
+        for( k = 0; k < cur_survivors; k++ ) { 
+            if( s > 0 ) {
+                /* Find the indices of the input and the codebook vector */
+                if( pCurrentCBStage->nVectors == 8 ) {
+                    input_index = SKP_RSHIFT( pTempIndices[ k ], 3 );
+                    cb_index    = pTempIndices[ k ] & 7;
+                } else {
+                    input_index = pTempIndices[ k ] / pCurrentCBStage->nVectors;  
+                    cb_index    = pTempIndices[ k ] - input_index * pCurrentCBStage->nVectors;
+                }
+            } else {
+                /* Find the indices of the input and the codebook vector */
+                input_index = 0;
+                cb_index    = pTempIndices[ k ];
+            }
+
+            /* Subtract new contribution from the previous residual vector for each of 'cur_survivors' */
+            pConstFloat = &pRes[ input_index * LPC_order ];
+            pCB_element = &pCurrentCBStage->CB[ cb_index * LPC_order ];
+            pFloat      = &pRes_new[ k * LPC_order ];
+            for( i = 0; i < LPC_order; i++ ) {
+                pFloat[ i ] = pConstFloat[ i ] - pCB_element[ i ];
+            }
+
+            /* Update accumulated rate for stage 1 to the current */
+            pRate_new[ k ] = pRate[ input_index ] + pCurrentCBStage->Rates[ cb_index ];
+
+            /* Copy paths from previous matrix, starting with the best path */
+            pConstInt = &pPath[ input_index * psNLSF_CB_FLP->nStages ];
+            pInt      = &pPath_new[       k * psNLSF_CB_FLP->nStages ];
+            for( i = 0; i < s; i++ ) {
+                pInt[ i ] = pConstInt[ i ];
+            }
+            /* Write the current stage indices for the 'cur_survivors' to the best path matrix */
+            pInt[ s ] = cb_index;
+        }
+
+        if( s < psNLSF_CB_FLP->nStages - 1 ) {
+            /* Copy NLSF residual matrix for next stage */
+            SKP_memcpy(pRes, pRes_new, cur_survivors * LPC_order * sizeof( SKP_float ) );
+
+            /* Copy rate vector for next stage */
+            SKP_memcpy(pRate, pRate_new, cur_survivors * sizeof( SKP_float ) );
+
+            /* Copy best path matrix for next stage */
+            SKP_memcpy(pPath, pPath_new, cur_survivors * psNLSF_CB_FLP->nStages * sizeof( SKP_int ) );
+        }
+
+        prev_survivors = cur_survivors;
+    }
+
+    /* (Preliminary) index of the best survivor, later to be decoded */
+    bestIndex = 0;
+
+#if( NLSF_MSVQ_FLUCTUATION_REDUCTION == 1 )
+    /******************************/
+    /* NLSF fluctuation reduction */
+    /******************************/
+    if( deactivate_fluc_red != 1 ) {
+    
+        /* Search among all survivors, now taking also weighted fluctuation errors into account */
+        bestRateDist = SKP_float_MAX;
+        for( s = 0; s < cur_survivors; s++ ) {
+            /* Decode survivor to compare with previous quantized NLSF vector */
+            SKP_Silk_NLSF_MSVQ_decode_FLP( pNLSF, psNLSF_CB_FLP, &pPath_new[ s * psNLSF_CB_FLP->nStages ], LPC_order );
+
+            /* Compare decoded NLSF vector with the previously quantized vector */ 
+            wsse = 0;
+            for( i = 0; i < LPC_order; i += 2 ) {
+                /* Compute weighted squared quantization error for index i */
+                se = pNLSF[ i ] - pNLSF_q_prev[ i ];
+                wsse += pW[ i ] * se * se;
+
+                /* Compute weighted squared quantization error for index i + 1 */
+                se = pNLSF[ i + 1 ] - pNLSF_q_prev[ i + 1 ];
+                wsse += pW[ i + 1 ] * se * se;
+            }
+
+            /* Add the fluctuation reduction penalty to the rate distortion error */
+            wsse = pRateDist[s] + wsse * NLSF_mu_fluc_red;
+
+            /* Keep index of best survivor */
+            if( wsse < bestRateDist ) {
+                bestRateDist = wsse;
+                bestIndex = s;
+            }
+        }
+    }
+#endif
+
+    /* Copy best path to output argument */
+    SKP_memcpy( NLSFIndices, &pPath_new[ bestIndex * psNLSF_CB_FLP->nStages ], psNLSF_CB_FLP->nStages * sizeof( SKP_int ) );
+
+    /* Decode and stabilize the best survivor */
+    SKP_Silk_NLSF_MSVQ_decode_FLP( pNLSF, psNLSF_CB_FLP, NLSFIndices, LPC_order );
+
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_NLSF_VQ_rate_distortion_FLP.c
@@ -1,0 +1,57 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+    
+/* Rate-Distortion calculations for multiple input data vectors */
+void SKP_Silk_NLSF_VQ_rate_distortion_FLP(
+          SKP_float             *pRD,               /* O   Rate-distortion values [psNLSF_CBS_FLP->nVectors*N] */
+    const SKP_Silk_NLSF_CBS_FLP *psNLSF_CBS_FLP,    /* I   NLSF codebook stage struct                          */
+    const SKP_float             *in,                /* I   Input vectors to be quantized                       */
+    const SKP_float             *w,                 /* I   Weight vector                                       */
+    const SKP_float             *rate_acc,          /* I   Accumulated rates from previous stage               */
+    const SKP_float             mu,                 /* I   Weight between weighted error and rate              */
+    const SKP_int               N,                  /* I   Number of input vectors to be quantized             */
+    const SKP_int               LPC_order           /* I   LPC order                                           */
+)
+{
+    SKP_float *pRD_vec;
+    SKP_int   i, n;
+
+    /* Compute weighted quantization errors for all input vectors over one codebook stage */
+    SKP_Silk_NLSF_VQ_sum_error_FLP( pRD, in, w, psNLSF_CBS_FLP->CB, N, psNLSF_CBS_FLP->nVectors, LPC_order );
+
+    /* Loop over input vectors */
+    pRD_vec = pRD;
+    for( n = 0; n < N; n++ ) {
+        /* Add rate cost to error for each codebook vector */
+        for( i = 0; i < psNLSF_CBS_FLP->nVectors; i++ ) {
+            pRD_vec[ i ] += mu * ( rate_acc[n] + psNLSF_CBS_FLP->Rates[ i ] );
+        }
+        pRD_vec += psNLSF_CBS_FLP->nVectors;
+    }
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_NLSF_VQ_sum_error_FLP.c
@@ -1,0 +1,132 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+/* compute weighted quantization errors for LPC_order element input vectors, over one codebook stage */
+void SKP_Silk_NLSF_VQ_sum_error_FLP(
+          SKP_float                 *err,               /* O    Weighted quantization errors [ N * K ]  */
+    const SKP_float                 *in,                /* I    Input vectors [ N * LPC_order ]         */
+    const SKP_float                 *w,                 /* I    Weighting vectors [ N * LPC_order ]     */
+    const SKP_float                 *pCB,               /* I    Codebook vectors [ K * LPC_order ]      */
+    const SKP_int                   N,                  /* I    Number of input vectors                 */
+    const SKP_int                   K,                  /* I    Number of codebook vectors              */
+    const SKP_int                   LPC_order           /* I    LPC order                               */
+)
+{
+    SKP_int     i, n;
+    SKP_float   diff, sum_error;
+    SKP_float   Wcpy[ MAX_LPC_ORDER ];
+    const SKP_float *cb_vec;
+
+    /* Copy to local stack */
+    SKP_memcpy( Wcpy, w, LPC_order * sizeof( SKP_float ) );
+
+    if( LPC_order == 16 ) {
+        /* Loop over input vectors */
+        for( n = 0; n < N; n++ ) {
+            /* Loop over codebook */
+            cb_vec = pCB;
+            for( i = 0; i < K; i++ ) {
+                /* Compute weighted squared quantization error */
+                diff = in[ 0 ] - cb_vec[ 0 ];
+                sum_error  = Wcpy[ 0 ] * diff * diff;
+                diff = in[ 1 ] - cb_vec[ 1 ];
+                sum_error += Wcpy[ 1 ] * diff * diff;
+                diff = in[ 2 ] - cb_vec[ 2 ];
+                sum_error += Wcpy[ 2 ] * diff * diff;
+                diff = in[ 3 ] - cb_vec[ 3 ];
+                sum_error += Wcpy[ 3 ] * diff * diff;
+                diff = in[ 4 ] - cb_vec[ 4 ];
+                sum_error += Wcpy[ 4 ] * diff * diff;
+                diff = in[ 5 ] - cb_vec[ 5 ];
+                sum_error += Wcpy[ 5 ] * diff * diff;
+                diff = in[ 6 ] - cb_vec[ 6 ];
+                sum_error += Wcpy[ 6 ] * diff * diff;
+                diff = in[ 7 ] - cb_vec[ 7 ];
+                sum_error += Wcpy[ 7 ] * diff * diff;
+                diff = in[ 8 ] - cb_vec[ 8 ];
+                sum_error += Wcpy[ 8 ] * diff * diff;
+                diff = in[ 9 ] - cb_vec[ 9 ];
+                sum_error += Wcpy[ 9 ] * diff * diff;
+                diff = in[ 10 ] - cb_vec[ 10 ];
+                sum_error += Wcpy[ 10 ] * diff * diff;
+                diff = in[ 11 ] - cb_vec[ 11 ];
+                sum_error += Wcpy[ 11 ] * diff * diff;
+                diff = in[ 12 ] - cb_vec[ 12 ];
+                sum_error += Wcpy[ 12 ] * diff * diff;
+                diff = in[ 13 ] - cb_vec[ 13 ];
+                sum_error += Wcpy[ 13 ] * diff * diff;
+                diff = in[ 14 ] - cb_vec[ 14 ];
+                sum_error += Wcpy[ 14 ] * diff * diff;
+                diff = in[ 15 ] - cb_vec[ 15 ];
+                sum_error += Wcpy[ 15 ] * diff * diff;
+
+                err[ i ] = sum_error;
+                cb_vec += 16;
+            }
+            err += K;
+            in  += 16;
+        }
+    } else {
+        SKP_assert( LPC_order == 10 );
+
+        /* Loop over input vectors */
+        for( n = 0; n < N; n++ ) {
+            /* Loop over codebook */
+            cb_vec = pCB;
+            for( i = 0; i < K; i++ ) {
+                /* Compute weighted squared quantization error */
+                diff = in[ 0 ] - cb_vec[ 0 ];
+                sum_error  = Wcpy[ 0 ] * diff * diff;
+                diff = in[ 1 ] - cb_vec[ 1 ];
+                sum_error += Wcpy[ 1 ] * diff * diff;
+                diff = in[ 2 ] - cb_vec[ 2 ];
+                sum_error += Wcpy[ 2 ] * diff * diff;
+                diff = in[ 3 ] - cb_vec[ 3 ];
+                sum_error += Wcpy[ 3 ] * diff * diff;
+                diff = in[ 4 ] - cb_vec[ 4 ];
+                sum_error += Wcpy[ 4 ] * diff * diff;
+                diff = in[ 5 ] - cb_vec[ 5 ];
+                sum_error += Wcpy[ 5 ] * diff * diff;
+                diff = in[ 6 ] - cb_vec[ 6 ];
+                sum_error += Wcpy[ 6 ] * diff * diff;
+                diff = in[ 7 ] - cb_vec[ 7 ];
+                sum_error += Wcpy[ 7 ] * diff * diff;
+                diff = in[ 8 ] - cb_vec[ 8 ];
+                sum_error += Wcpy[ 8 ] * diff * diff;
+                diff = in[ 9 ] - cb_vec[ 9 ];
+                sum_error += Wcpy[ 9 ] * diff * diff;
+
+                err[ i ] = sum_error;
+                cb_vec += 10;
+            }
+            err += K;
+            in  += 10;
+        }
+    }
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_NLSF_VQ_weights_laroia_FLP.c
@@ -1,0 +1,69 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_SigProc_FLP.h"
+
+/* 
+R. Laroia, N. Phamdo and N. Farvardin, "Robust and Efficient Quantization of Speech LSP
+Parameters Using Structured Vector Quantization", Proc. IEEE Int. Conf. Acoust., Speech,
+Signal Processing, pp. 641-644, 1991.
+*/
+
+#define MIN_NDELTA      ( 1e-6f / PI )
+
+/* Laroia low complexity NLSF weights */
+void SKP_Silk_NLSF_VQ_weights_laroia_FLP( 
+          SKP_float     *pXW,           /* 0: Pointer to input vector weights           [D x 1] */
+    const SKP_float     *pX,            /* I: Pointer to input vector                   [D x 1] */ 
+    const SKP_int        D              /* I: Input vector dimension                            */
+)
+{
+    SKP_int   k;
+    SKP_float tmp1, tmp2;
+    
+    /* Safety checks */
+    SKP_assert( D > 0 );
+    SKP_assert( ( D & 1 ) == 0 );
+    
+    /* First value */
+    tmp1 = 1.0f / SKP_max_float( pX[ 0 ],           MIN_NDELTA );
+    tmp2 = 1.0f / SKP_max_float( pX[ 1 ] - pX[ 0 ], MIN_NDELTA );
+    pXW[ 0 ] = tmp1 + tmp2;
+    
+    /* Main loop */
+    for( k = 1; k < D - 1; k += 2 ) {
+        tmp1 = 1.0f / SKP_max_float( pX[ k + 1 ] - pX[ k ], MIN_NDELTA );
+        pXW[ k ] = tmp1 + tmp2;
+
+        tmp2 = 1.0f / SKP_max_float( pX[ k + 2 ] - pX[ k + 1 ], MIN_NDELTA );
+        pXW[ k + 1 ] = tmp1 + tmp2;
+    }
+    
+    /* Last value */
+    tmp1 = 1.0f / SKP_max_float( 1.0f - pX[ D - 1 ], MIN_NDELTA );
+    pXW[ D - 1 ] = tmp1 + tmp2;
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_VQ_nearest_neighbor_FLP.c
@@ -1,0 +1,96 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+/* entropy constrained MATRIX-weighted VQ, for a single input data vector */
+void SKP_Silk_VQ_WMat_EC_FLP(
+          SKP_int                   *ind,               /* O    Index of best codebook vector           */
+          SKP_float                 *rate_dist,         /* O    Best weighted quant. error + mu * rate  */
+    const SKP_float                 *in,                /* I    Input vector to be quantized            */
+    const SKP_float                 *W,                 /* I    Weighting matrix                        */
+    const SKP_int16                 *cb,                /* I    Codebook                                */
+    const SKP_int16                 *cl_Q6,             /* I    Code length for each codebook vector    */
+    const SKP_float                 mu,                 /* I    Tradeoff between WSSE and rate          */
+    const SKP_int                   L                   /* I    Number of vectors in codebook           */
+)
+{
+    SKP_int   k;
+    SKP_float sum1;
+    SKP_float diff[ 5 ];
+    const SKP_int16 *cb_row;
+
+    /* Loop over codebook */
+    *rate_dist = SKP_float_MAX;
+    cb_row = cb;
+    for( k = 0; k < L; k++ ) {
+        /* Calc difference between in vector and cbk vector */
+        diff[ 0 ] = in[ 0 ] - ( SKP_float )cb_row[ 0 ] * Q14_CONVERSION_FAC;
+        diff[ 1 ] = in[ 1 ] - ( SKP_float )cb_row[ 1 ] * Q14_CONVERSION_FAC;
+        diff[ 2 ] = in[ 2 ] - ( SKP_float )cb_row[ 2 ] * Q14_CONVERSION_FAC;
+        diff[ 3 ] = in[ 3 ] - ( SKP_float )cb_row[ 3 ] * Q14_CONVERSION_FAC;
+        diff[ 4 ] = in[ 4 ] - ( SKP_float )cb_row[ 4 ] * Q14_CONVERSION_FAC;
+
+        /* Weighted rate */
+        sum1 = mu * cl_Q6[ k ] / 64.0f;
+
+        /* Add weighted quantization error, assuming W is symmetric */
+        /* first row of W */
+        sum1 += diff[ 0 ] * ( W[ 0 ] * diff[ 0 ] + 
+                     2.0f * ( W[ 1 ] * diff[ 1 ] + 
+                              W[ 2 ] * diff[ 2 ] + 
+                              W[ 3 ] * diff[ 3 ] + 
+                              W[ 4 ] * diff[ 4 ] ) );
+
+        /* second row of W */
+        sum1 += diff[ 1 ] * ( W[ 6 ] * diff[ 1 ] + 
+                     2.0f * ( W[ 7 ] * diff[ 2 ] + 
+                              W[ 8 ] * diff[ 3 ] + 
+                              W[ 9 ] * diff[ 4 ] ) );
+
+        /* third row of W */
+        sum1 += diff[ 2 ] * ( W[ 12 ] * diff[ 2 ] + 
+                    2.0f *  ( W[ 13 ] * diff[ 3 ] + 
+                              W[ 14 ] * diff[ 4 ] ) );
+
+        /* fourth row of W */
+        sum1 += diff[ 3 ] * ( W[ 18 ] * diff[ 3 ] + 
+                     2.0f * ( W[ 19 ] * diff[ 4 ] ) );
+
+        /* last row of W */
+        sum1 += diff[ 4 ] * ( W[ 24 ] * diff[ 4 ] );
+
+        /* find best */
+        if( sum1 < *rate_dist ) {
+            *rate_dist = sum1;
+            *ind = k;
+        }
+
+        /* Go to next cbk vector */
+        cb_row += LTP_ORDER;
+    }
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_apply_sine_window_FLP.c
@@ -1,0 +1,79 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+/* Apply sine window to signal vector.                                                                  */
+/* Window types:                                                                                        */
+/*  0 -> sine window from 0 to pi                                                                       */
+/*  1 -> sine window from 0 to pi/2                                                                     */
+/*  2 -> sine window from pi/2 to pi                                                                    */
+void SKP_Silk_apply_sine_window_FLP(
+          SKP_float                 px_win[],           /* O    Pointer to windowed signal              */
+    const SKP_float                 px[],               /* I    Pointer to input signal                 */
+    const SKP_int                   win_type,           /* I    Selects a window type                   */
+    const SKP_int                   length              /* I    Window length, multiple of 4            */
+)
+{
+    SKP_int   k;
+    SKP_float freq, c, S0, S1;
+
+    /* Length must be multiple of 4 */
+    SKP_assert( ( length & 3 ) == 0 );
+
+    freq = PI / ( length + 1 );
+    if( win_type == 0 ) {
+        freq = 2.0f * freq;
+    }
+
+    /* Approximation of 2 * cos(f) */
+    c = 2.0f - freq * freq;
+
+    /* Initialize state */
+    if( win_type < 2 ) {
+        /* Start from 0 */
+        S0 = 0.0f;
+        /* Approximation of sin(f) */
+        S1 = freq;
+    } else {
+        /* Start from 1 */
+        S0 = 1.0f;
+        /* Approximation of cos(f) */
+        S1 = 0.5f * c;
+    }
+
+    /* Uses the recursive equation:   sin(n*f) = 2 * cos(f) * sin((n-1)*f) - sin((n-2)*f)   */
+    /* 4 samples at a time */
+    for( k = 0; k < length; k += 4 ) {
+        px_win[ k + 0 ] = px[ k + 0 ] * 0.5f * ( S0 + S1 );
+        px_win[ k + 1 ] = px[ k + 1 ] * S1;
+        S0 = c * S1 - S0;
+        px_win[ k + 2 ] = px[ k + 2 ] * 0.5f * ( S1 + S0 );
+        px_win[ k + 3 ] = px[ k + 3 ] * S0;
+        S1 = c * S0 - S1;
+    }
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_assembler_FLP.h
@@ -1,0 +1,42 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_ASSEMBLER_FLP_H
+#define SKP_SILK_ASSEMBLER_FLP_H
+
+#include "SKP_Silk_typedef.h"
+
+/* Declaration of assembler functions */
+
+void SKP_Silk_LPC_ana_sse( 
+	float							*r_LPC,				/* O	LPC residual signal						*/
+	const float						*coefs, 			/* I	LPC coefficients						*/
+	const float						*speech,			/* I	Input signal							*/
+	int								len					/* I	Length of input signal					*/
+);
+
+#endif
--- /dev/null
+++ b/src_FLP/SKP_Silk_control_codec_FLP.c
@@ -1,0 +1,578 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+/* ToDo: Move the functions below to common to be able to use them in FLP control codec also */
+SKP_INLINE SKP_int SKP_Silk_setup_resamplers(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O                      */
+    SKP_int                         API_fs_Hz,          /* I                        */
+    SKP_int                         fs_kHz              /* I                        */
+);
+
+SKP_INLINE SKP_int SKP_Silk_setup_packetsize(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O                      */
+    SKP_int                         PacketSize_ms       /* I                        */
+);
+
+SKP_INLINE SKP_int SKP_Silk_setup_fs(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O                      */
+    SKP_int                         fs_kHz              /* I                        */
+);
+
+SKP_INLINE SKP_int SKP_Silk_setup_complexity(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O                      */
+    SKP_int                         Complexity          /* I                        */
+);
+
+SKP_INLINE SKP_int SKP_Silk_setup_rate(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O                      */
+    SKP_int                         TargetRate_bps      /* I                        */
+);
+
+SKP_INLINE SKP_int SKP_Silk_setup_LBRR(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O                      */
+    SKP_int                         INBandFEC_enabled   /* I                        */
+);
+
+/* Control encoder SNR */
+SKP_int SKP_Silk_control_encoder_FLP( 
+    SKP_Silk_encoder_state_FLP  *psEnc,             /* I/O  Pointer to Silk encoder state FLP       */
+    const SKP_int32             API_fs_Hz,          /* I    External (API) sampling rate (Hz)       */
+    const SKP_int               max_internal_fs_kHz,/* I    Maximum internal sampling rate (kHz)    */
+    const SKP_int               PacketSize_ms,      /* I    Packet length (ms)                      */
+          SKP_int32             TargetRate_bps,     /* I    Target max bitrate (if SNR_dB == 0)     */
+    const SKP_int               PacketLoss_perc,    /* I    Packet loss rate (in percent)           */
+    const SKP_int               INBandFEC_enabled,  /* I    Enable (1) / disable (0) inband FEC     */
+    const SKP_int               DTX_enabled,        /* I    Enable / disable DTX                    */
+    const SKP_int               InputFramesize_ms,  /* I    Inputframe in ms                        */
+    const SKP_int               Complexity          /* I    Complexity (0->low; 1->medium; 2->high) */
+)
+{
+    SKP_int   fs_kHz, ret = 0;
+
+    /* State machine for the SWB/WB switching */
+    fs_kHz = psEnc->sCmn.fs_kHz;
+    
+    /* Only switch during low speech activity, when no frames are sitting in the payload buffer */
+    if( API_fs_Hz == 8000 || fs_kHz == 0 || API_fs_Hz < fs_kHz * 1000 || fs_kHz > max_internal_fs_kHz ) {
+        /* Switching is not possible, encoder just initialized, internal mode higher than external, */
+        /* or internal mode higher than maximum allowed internal mode                               */
+        fs_kHz = SKP_min( SKP_DIV32_16( API_fs_Hz, 1000 ), max_internal_fs_kHz );
+    } else {
+        /* Accumulate the difference between the target rate and limit for switching down */
+        psEnc->sCmn.bitrateDiff += SKP_MUL( InputFramesize_ms, TargetRate_bps - psEnc->sCmn.bitrate_threshold_down );
+        psEnc->sCmn.bitrateDiff  = SKP_min( psEnc->sCmn.bitrateDiff, 0 );
+
+        if( psEnc->speech_activity < 0.5f && psEnc->sCmn.nFramesInPayloadBuf == 0 ) { /* Low speech activity and payload buffer empty */
+            /* Check if we should switch down */
+#if SWITCH_TRANSITION_FILTERING 
+            if( ( psEnc->sCmn.sLP.transition_frame_no == 0 ) &&                         /* Transition phase not active */
+                ( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ||              /* Bitrate threshold is met */
+                ( psEnc->sCmn.sSWBdetect.WB_detected * psEnc->sCmn.fs_kHz == 24 ) ) ) { /* Forced down-switching due to WB input */
+                psEnc->sCmn.sLP.transition_frame_no = 1;                                /* Begin transition phase */
+                psEnc->sCmn.sLP.mode                = 0;                                /* Switch down */
+            } else if( 
+                ( psEnc->sCmn.sLP.transition_frame_no >= TRANSITION_FRAMES_DOWN ) &&    /* Transition phase complete */
+                ( psEnc->sCmn.sLP.mode == 0 ) ) {                                       /* Ready to switch down */
+                psEnc->sCmn.sLP.transition_frame_no = 0;                                /* Ready for new transition phase */
+#else
+            if( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ) {               /* Bitrate threshold is met */ 
+#endif            
+                psEnc->sCmn.bitrateDiff = 0;
+
+                /* Switch to a lower sample frequency */
+                if( psEnc->sCmn.fs_kHz == 24 ) {
+                    fs_kHz = 16;
+                } else if( psEnc->sCmn.fs_kHz == 16 ) {
+                    fs_kHz = 12;
+                } else {
+                    SKP_assert( psEnc->sCmn.fs_kHz == 12 );
+                    fs_kHz = 8;
+                }
+            }
+
+            /* Check if we should switch up */
+            if( ( ( psEnc->sCmn.fs_kHz * 1000 < API_fs_Hz ) &&
+                ( TargetRate_bps >= psEnc->sCmn.bitrate_threshold_up ) && 
+                ( psEnc->sCmn.sSWBdetect.WB_detected * psEnc->sCmn.fs_kHz != 16 ) ) && 
+                ( ( psEnc->sCmn.fs_kHz == 16 ) && ( max_internal_fs_kHz >= 24 ) || 
+                  ( psEnc->sCmn.fs_kHz == 12 ) && ( max_internal_fs_kHz >= 16 ) ||
+                  ( psEnc->sCmn.fs_kHz ==  8 ) && ( max_internal_fs_kHz >= 12 ) ) 
+#if SWITCH_TRANSITION_FILTERING
+                  && ( psEnc->sCmn.sLP.transition_frame_no == 0 ) ) { /* No transition phase running, ready to switch */
+                    psEnc->sCmn.sLP.mode = 1; /* Switch up */
+#else
+                ) {
+#endif
+                psEnc->sCmn.bitrateDiff = 0;
+
+                /* Switch to a higher sample frequency */
+                if( psEnc->sCmn.fs_kHz == 8 ) {
+                    fs_kHz = 12;
+                } else if( psEnc->sCmn.fs_kHz == 12 ) {
+                    fs_kHz = 16;
+                } else {
+                    SKP_assert( psEnc->sCmn.fs_kHz == 16 );
+                    fs_kHz = 24;
+                } 
+            }
+        }
+    }
+
+#if SWITCH_TRANSITION_FILTERING
+    /* After switching up, stop transition filter during speech inactivity */
+    if( ( psEnc->sCmn.sLP.mode == 1 ) &&
+        ( psEnc->sCmn.sLP.transition_frame_no >= TRANSITION_FRAMES_UP ) && 
+        ( psEnc->speech_activity < 0.5f ) && 
+        ( psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) {
+        
+        psEnc->sCmn.sLP.transition_frame_no = 0;
+
+        /* Reset transition filter state */
+        SKP_memset( psEnc->sCmn.sLP.In_LP_State, 0, 2 * sizeof( SKP_int32 ) );
+    }
+#endif
+
+    /********************************************/
+    /* Prepare resampler and buffered data      */    
+    /********************************************/
+    SKP_Silk_setup_resamplers( psEnc, API_fs_Hz, fs_kHz );
+
+    /********************************************/
+    /* Set packet size                          */
+    /********************************************/
+    ret += SKP_Silk_setup_packetsize( psEnc, PacketSize_ms );
+
+    /********************************************/
+    /* Set internal sampling frequency          */
+    /********************************************/
+    ret += SKP_Silk_setup_fs( psEnc, fs_kHz );
+
+    /********************************************/
+    /* Set encoding complexity                  */
+    /********************************************/
+    ret += SKP_Silk_setup_complexity( psEnc, Complexity );
+
+    /********************************************/
+    /* Set bitrate/coding quality               */
+    /********************************************/
+    ret += SKP_Silk_setup_rate( psEnc, TargetRate_bps );
+
+    /********************************************/
+    /* Set packet loss rate measured by farend  */
+    /********************************************/
+    if( ( PacketLoss_perc < 0 ) || ( PacketLoss_perc > 100 ) ) {
+        ret = SKP_SILK_ENC_INVALID_LOSS_RATE;
+    }
+    psEnc->sCmn.PacketLoss_perc = PacketLoss_perc;
+
+    /********************************************/
+    /* Set LBRR usage                           */
+    /********************************************/
+    ret += SKP_Silk_setup_LBRR( psEnc, INBandFEC_enabled );
+
+    /********************************************/
+    /* Set DTX mode                             */
+    /********************************************/
+    if( DTX_enabled < 0 || DTX_enabled > 1 ) {
+        ret = SKP_SILK_ENC_INVALID_DTX_SETTING;
+    }
+    psEnc->sCmn.useDTX = DTX_enabled;
+
+    return ret;
+}
+
+/* Control low bitrate redundancy usage */
+void SKP_Silk_LBRR_ctrl_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I    Encoder state FLP                       */
+    SKP_Silk_encoder_control        *psEncCtrl          /* I/O  Encoder control                         */
+)
+{
+    SKP_int LBRR_usage;
+
+    if( psEnc->sCmn.LBRR_enabled ) {
+        /* Control LBRR */
+
+        /* Usage Control based on sensitivity and packet loss caracteristics */
+        /* For now only enable adding to next for active frames. Make more complex later */
+        LBRR_usage = SKP_SILK_NO_LBRR;
+        if( psEnc->speech_activity > LBRR_SPEECH_ACTIVITY_THRES && psEnc->sCmn.PacketLoss_perc > LBRR_LOSS_THRES ) { // nb! maybe multiply loss prob and speech activity 
+            LBRR_usage = SKP_SILK_ADD_LBRR_TO_PLUS1;
+        }
+        psEncCtrl->LBRR_usage = LBRR_usage;
+    } else {
+        psEncCtrl->LBRR_usage = SKP_SILK_NO_LBRR;
+    }
+}
+
+SKP_INLINE SKP_int SKP_Silk_setup_packetsize(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O                      */
+    SKP_int                         PacketSize_ms       /* I                        */
+)
+{
+    SKP_int ret = SKP_SILK_NO_ERROR;
+    if( ( PacketSize_ms !=  10 ) &&
+        ( PacketSize_ms !=  20 ) &&
+        ( PacketSize_ms !=  40 ) && 
+        ( PacketSize_ms !=  60 ) && 
+        ( PacketSize_ms !=  80 ) && 
+        ( PacketSize_ms != 100 ) ) {
+        ret = SKP_SILK_ENC_PACKET_SIZE_NOT_SUPPORTED;
+    } else {
+        if( PacketSize_ms != psEnc->sCmn.PacketSize_ms ) {
+            if( PacketSize_ms == 10 ) {
+                if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) {
+                    /* Only allowed when the payload buffer is empty */
+                    psEnc->sCmn.nb_subfr = MAX_NB_SUBFR >> 1;
+                    psEnc->sCmn.frame_length   = SKP_SMULBB( psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr );
+                    psEnc->sCmn.PacketSize_ms = PacketSize_ms;
+                    psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS_2_SF, psEnc->sCmn.fs_kHz );
+                    /* Packet length changes. Reset LBRR buffer */
+                    SKP_Silk_LBRR_reset( &psEnc->sCmn );
+                }
+            } else{
+                psEnc->sCmn.nb_subfr = MAX_NB_SUBFR;
+                psEnc->sCmn.frame_length   = SKP_SMULBB( psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr );
+                psEnc->sCmn.PacketSize_ms = PacketSize_ms;
+                psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS, psEnc->sCmn.fs_kHz );
+                /* Packet length changes. Reset LBRR buffer */
+                SKP_Silk_LBRR_reset( &psEnc->sCmn );
+            }
+        }
+    }
+    return(ret);
+}
+
+SKP_INLINE SKP_int SKP_Silk_setup_resamplers(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O                      */
+    SKP_int                         API_fs_Hz,          /* I                        */
+    SKP_int                         fs_kHz              /* I                        */
+)
+{
+    SKP_int ret = SKP_SILK_NO_ERROR;
+    
+    if( psEnc->sCmn.fs_kHz != fs_kHz || psEnc->sCmn.prev_API_fs_Hz != API_fs_Hz ) {
+
+        /* Allocate space for worst case temporary upsampling, 8 to 48 kHz, so a factor 6 */
+        SKP_int16 x_buf_API_fs_Hz[ ( MAX_API_FS_KHZ / 8 ) * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ];
+        SKP_int16 x_bufFIX[               2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; 
+
+        SKP_int32 nSamples_temp = 2 * psEnc->sCmn.frame_length + psEnc->sCmn.la_shape;
+
+        SKP_float2short_array( x_bufFIX, psEnc->x_buf, 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX );
+
+        if( fs_kHz * 1000 < API_fs_Hz && psEnc->sCmn.fs_kHz != 0 ) {
+            /* Resample buffered data in x_buf to API_fs_Hz */
+
+            SKP_Silk_resampler_state_struct  temp_resampler_state;
+
+            /* Initialize resampler for temporary resampling of x_buf data to API_fs_Hz */
+            ret += SKP_Silk_resampler_init( &temp_resampler_state, psEnc->sCmn.fs_kHz * 1000, API_fs_Hz );
+
+            /* Temporary resampling of x_buf data to API_fs_Hz */
+            ret += SKP_Silk_resampler( &temp_resampler_state, x_buf_API_fs_Hz, x_bufFIX, nSamples_temp );
+
+            /* Calculate number of samples that has been temporarily upsampled */
+            nSamples_temp = SKP_DIV32_16( nSamples_temp * API_fs_Hz, psEnc->sCmn.fs_kHz * 1000 );
+
+            /* Initialize the resampler for enc_API.c preparing resampling from API_fs_Hz to fs_kHz */
+            ret += SKP_Silk_resampler_init( &psEnc->sCmn.resampler_state, API_fs_Hz, fs_kHz * 1000 );
+
+        } else {
+            /* Copy data */
+            SKP_memcpy( x_buf_API_fs_Hz, x_bufFIX, nSamples_temp * sizeof( SKP_int16 ) );
+        }
+
+        if( 1000 * fs_kHz != API_fs_Hz ) {
+            /* Correct resampler state (unless resampling by a factor 1) by resampling buffered data from API_fs_Hz to fs_kHz */
+            ret += SKP_Silk_resampler( &psEnc->sCmn.resampler_state, x_bufFIX, x_buf_API_fs_Hz, nSamples_temp );
+        }
+        SKP_short2float_array( psEnc->x_buf, x_bufFIX, 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX );
+    }
+
+    psEnc->sCmn.prev_API_fs_Hz = API_fs_Hz;
+
+    return(ret);
+}
+
+SKP_INLINE SKP_int SKP_Silk_setup_fs(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O                      */
+    SKP_int                         fs_kHz              /* I                        */
+)
+{
+    SKP_int ret = SKP_SILK_NO_ERROR;
+
+    /* Set internal sampling frequency */
+    if( psEnc->sCmn.fs_kHz != fs_kHz ) {
+        /* reset part of the state */
+        SKP_memset( &psEnc->sShape,          0,                            sizeof( SKP_Silk_shape_state_FLP ) );
+        SKP_memset( &psEnc->sPrefilt,        0,                            sizeof( SKP_Silk_prefilter_state_FLP ) );
+        SKP_memset( &psEnc->sNSQ,            0,                            sizeof( SKP_Silk_nsq_state ) );
+        SKP_memset( &psEnc->sPred,           0,                            sizeof( SKP_Silk_predict_state_FLP ) );
+        SKP_memset( psEnc->sNSQ.xq,          0, ( 2 * MAX_FRAME_LENGTH ) * sizeof( SKP_int16 ) );
+        SKP_memset( psEnc->sNSQ_LBRR.xq,     0, ( 2 * MAX_FRAME_LENGTH ) * sizeof( SKP_int16 ) );
+        SKP_memset( psEnc->sCmn.LBRR_buffer, 0,           MAX_LBRR_DELAY * sizeof( SKP_SILK_LBRR_struct ) );
+#if SWITCH_TRANSITION_FILTERING
+        SKP_memset( psEnc->sCmn.sLP.In_LP_State, 0, 2 * sizeof( SKP_int32 ) );
+        if( psEnc->sCmn.sLP.mode == 1 ) {
+            /* Begin transition phase */
+            psEnc->sCmn.sLP.transition_frame_no = 1;
+        } else {
+            /* End transition phase */
+            psEnc->sCmn.sLP.transition_frame_no = 0;
+        }
+#endif
+        psEnc->sCmn.inputBufIx          = 0;
+        psEnc->sCmn.nFramesInPayloadBuf = 0;
+        psEnc->sCmn.nBytesInPayloadBuf  = 0;
+        psEnc->sCmn.oldest_LBRR_idx     = 0;
+        psEnc->sCmn.TargetRate_bps      = 0; /* Ensures that psEnc->SNR_dB is recomputed */
+
+        SKP_memset( psEnc->sPred.prev_NLSFq, 0, MAX_LPC_ORDER * sizeof( SKP_float ) );
+
+        /* Initialize non-zero parameters */
+        psEnc->sCmn.prevLag                 = 100;
+        psEnc->sCmn.prev_sigtype            = SIG_TYPE_UNVOICED;
+        psEnc->sCmn.first_frame_after_reset = 1;
+        psEnc->sPrefilt.lagPrev             = 100;
+        psEnc->sShape.LastGainIndex         = 1;
+        psEnc->sNSQ.lagPrev                 = 100;
+        psEnc->sNSQ.prev_inv_gain_Q16       = 65536;
+        psEnc->sNSQ_LBRR.prev_inv_gain_Q16  = 65536;
+
+        psEnc->sCmn.fs_kHz = fs_kHz;
+        if( psEnc->sCmn.fs_kHz == 8 ) {
+            psEnc->sCmn.predictLPCOrder = MIN_LPC_ORDER;
+            psEnc->sCmn.psNLSF_CB[ 0 ]  = &SKP_Silk_NLSF_CB0_10;
+            psEnc->sCmn.psNLSF_CB[ 1 ]  = &SKP_Silk_NLSF_CB1_10;
+            psEnc->psNLSF_CB_FLP[  0 ]  = &SKP_Silk_NLSF_CB0_10_FLP;
+            psEnc->psNLSF_CB_FLP[  1 ]  = &SKP_Silk_NLSF_CB1_10_FLP;
+        } else {
+            psEnc->sCmn.predictLPCOrder = MAX_LPC_ORDER;
+            psEnc->sCmn.psNLSF_CB[ 0 ]  = &SKP_Silk_NLSF_CB0_16;
+            psEnc->sCmn.psNLSF_CB[ 1 ]  = &SKP_Silk_NLSF_CB1_16;
+            psEnc->psNLSF_CB_FLP[  0 ]  = &SKP_Silk_NLSF_CB0_16_FLP;
+            psEnc->psNLSF_CB_FLP[  1 ]  = &SKP_Silk_NLSF_CB1_16_FLP;
+        }
+        psEnc->sCmn.subfr_length   = SUB_FRAME_LENGTH_MS * fs_kHz;
+        psEnc->sCmn.frame_length   = psEnc->sCmn.subfr_length * psEnc->sCmn.nb_subfr;
+        psEnc->sCmn.ltp_mem_length = LTP_MEM_LENGTH_MS * fs_kHz; 
+        psEnc->sCmn.la_pitch       = LA_PITCH_MS * fs_kHz;
+        psEnc->sCmn.la_shape       = LA_SHAPE_MS * fs_kHz;
+        psEnc->sPred.min_pitch_lag =  3 * fs_kHz;
+        psEnc->sPred.max_pitch_lag = 18 * fs_kHz;
+        if( psEnc->sCmn.nb_subfr == MAX_NB_SUBFR ){
+            psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS, fs_kHz );
+        } else {
+            psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS_2_SF, fs_kHz );
+        }
+        if( psEnc->sCmn.fs_kHz == 24 ) {
+            psEnc->mu_LTP = MU_LTP_QUANT_SWB;
+            psEnc->sCmn.bitrate_threshold_up   = SKP_int32_MAX;
+            psEnc->sCmn.bitrate_threshold_down = SWB2WB_BITRATE_BPS; 
+        } else if( psEnc->sCmn.fs_kHz == 16 ) {
+            psEnc->mu_LTP = MU_LTP_QUANT_WB;
+            psEnc->sCmn.bitrate_threshold_up   = WB2SWB_BITRATE_BPS;
+            psEnc->sCmn.bitrate_threshold_down = WB2MB_BITRATE_BPS; 
+        } else if( psEnc->sCmn.fs_kHz == 12 ) {
+            psEnc->mu_LTP = MU_LTP_QUANT_MB;
+            psEnc->sCmn.bitrate_threshold_up   = MB2WB_BITRATE_BPS;
+            psEnc->sCmn.bitrate_threshold_down = MB2NB_BITRATE_BPS;
+        } else {
+            psEnc->mu_LTP = MU_LTP_QUANT_NB;
+            psEnc->sCmn.bitrate_threshold_up   = NB2MB_BITRATE_BPS;
+            psEnc->sCmn.bitrate_threshold_down = 0;
+        }
+        psEnc->sCmn.fs_kHz_changed = 1;
+
+        /* Check that settings are valid */
+        SKP_assert( ( psEnc->sCmn.subfr_length * psEnc->sCmn.nb_subfr ) == psEnc->sCmn.frame_length );
+    }
+    return( ret );
+}
+
+SKP_INLINE SKP_int SKP_Silk_setup_complexity(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O                      */
+    SKP_int                         Complexity          /* I                        */
+)
+{
+    SKP_int ret = SKP_SILK_NO_ERROR;
+
+    /* Check that settings are valid */
+    if( LOW_COMPLEXITY_ONLY && Complexity != 0 ) { 
+        ret = SKP_SILK_ENC_INVALID_COMPLEXITY_SETTING;
+    }
+
+    /* Set encoding complexity */
+    if( Complexity == 0 || LOW_COMPLEXITY_ONLY ) {
+        /* Low complexity */
+        psEnc->sCmn.Complexity                  = 0;
+        psEnc->sCmn.pitchEstimationComplexity   = PITCH_EST_COMPLEXITY_LC_MODE;
+        psEnc->pitchEstimationThreshold         = FIND_PITCH_CORRELATION_THRESHOLD_LC_MODE;
+        psEnc->sCmn.pitchEstimationLPCOrder     = 8;
+        psEnc->sCmn.shapingLPCOrder             = 8;
+        psEnc->sCmn.nStatesDelayedDecision      = 1;
+        psEnc->sCmn.useInterpolatedNLSFs        = 0;
+        psEnc->sCmn.LTPQuantLowComplexity       = 1;
+        psEnc->sCmn.NLSF_MSVQ_Survivors         = MAX_NLSF_MSVQ_SURVIVORS_LC_MODE;
+    } else if( Complexity == 1 ) {
+        /* Medium complexity */
+        psEnc->sCmn.Complexity                  = 1;
+        psEnc->sCmn.pitchEstimationComplexity   = PITCH_EST_COMPLEXITY_MC_MODE;
+        psEnc->pitchEstimationThreshold         = FIND_PITCH_CORRELATION_THRESHOLD_MC_MODE;
+        psEnc->sCmn.pitchEstimationLPCOrder     = 12;
+        psEnc->sCmn.shapingLPCOrder             = 12;
+        psEnc->sCmn.nStatesDelayedDecision      = 2;
+        psEnc->sCmn.useInterpolatedNLSFs        = 0;
+        psEnc->sCmn.LTPQuantLowComplexity       = 0;
+        psEnc->sCmn.NLSF_MSVQ_Survivors         = MAX_NLSF_MSVQ_SURVIVORS_MC_MODE;
+    } else if( Complexity == 2 ) {
+        /* High complexity */
+        psEnc->sCmn.Complexity                  = 2;
+        psEnc->sCmn.pitchEstimationComplexity   = PITCH_EST_COMPLEXITY_HC_MODE;
+        psEnc->pitchEstimationThreshold         = FIND_PITCH_CORRELATION_THRESHOLD_HC_MODE;
+        psEnc->sCmn.pitchEstimationLPCOrder     = 16;
+        psEnc->sCmn.shapingLPCOrder             = 16;
+        psEnc->sCmn.nStatesDelayedDecision      = 4;
+        psEnc->sCmn.useInterpolatedNLSFs        = 1;
+        psEnc->sCmn.LTPQuantLowComplexity       = 0;
+        psEnc->sCmn.NLSF_MSVQ_Survivors         = MAX_NLSF_MSVQ_SURVIVORS;
+    } else {
+        ret = SKP_SILK_ENC_INVALID_COMPLEXITY_SETTING;
+    }
+
+    /* Do not allow higher pitch estimation LPC order than predict LPC order */
+    psEnc->sCmn.pitchEstimationLPCOrder = SKP_min_int( psEnc->sCmn.pitchEstimationLPCOrder, psEnc->sCmn.predictLPCOrder );
+
+    SKP_assert( psEnc->sCmn.pitchEstimationLPCOrder <= MAX_FIND_PITCH_LPC_ORDER );
+    SKP_assert( psEnc->sCmn.shapingLPCOrder         <= MAX_SHAPE_LPC_ORDER      );
+    SKP_assert( psEnc->sCmn.nStatesDelayedDecision  <= MAX_DEL_DEC_STATES       );
+    return( ret );
+}
+
+SKP_INLINE SKP_int SKP_Silk_setup_rate(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O                      */
+    SKP_int                         TargetRate_bps      /* I                        */
+)
+{
+    SKP_int k, ret = SKP_SILK_NO_ERROR;
+    SKP_float frac;
+    const SKP_int32 *rateTable;
+
+    /* Set bitrate/coding quality */
+    TargetRate_bps = SKP_min( TargetRate_bps, 100000 );
+    if( psEnc->sCmn.fs_kHz == 8 ) {
+        TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_NB_BPS );
+    } else if( psEnc->sCmn.fs_kHz == 12 ) {
+        TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_MB_BPS );
+    } else if( psEnc->sCmn.fs_kHz == 16 ) {
+        TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_WB_BPS );
+    } else {
+        TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_SWB_BPS );
+    }
+    if( TargetRate_bps != psEnc->sCmn.TargetRate_bps ) {
+        psEnc->sCmn.TargetRate_bps = TargetRate_bps;
+
+        /* If new TargetRate_bps, translate to SNR_dB value */
+        if( psEnc->sCmn.fs_kHz == 8 ) {
+            rateTable = TargetRate_table_NB;
+        } else if( psEnc->sCmn.fs_kHz == 12 ) {
+            rateTable = TargetRate_table_MB;
+        } else if( psEnc->sCmn.fs_kHz == 16 ) {
+            rateTable = TargetRate_table_WB;
+        } else {
+            rateTable = TargetRate_table_SWB;
+        }
+        for( k = 1; k < TARGET_RATE_TAB_SZ; k++ ) {
+            /* Find bitrate interval in table and interpolate */
+            if( TargetRate_bps < rateTable[ k ] ) {
+                frac = (SKP_float)( TargetRate_bps - rateTable[ k - 1 ] ) / 
+                       (SKP_float)( rateTable[ k ] - rateTable[ k - 1 ] );
+                psEnc->SNR_dB = 0.5f * ( SNR_table_Q1[ k - 1 ] + frac * ( SNR_table_Q1[ k ] - SNR_table_Q1[ k - 1 ] ) );
+                break;
+            }
+        }
+    }
+    return( ret );
+}
+
+SKP_INLINE SKP_int SKP_Silk_setup_LBRR(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O                      */
+    SKP_int                         INBandFEC_enabled   /* I                        */
+)
+{
+    SKP_int   ret = SKP_SILK_NO_ERROR;
+    SKP_int32 LBRRRate_thres_bps;
+
+#if USE_LBRR
+    if( INBandFEC_enabled < 0 || INBandFEC_enabled > 1 ) {
+        ret = SKP_SILK_ENC_INVALID_INBAND_FEC_SETTING;
+    }
+    
+    /* Only change settings if first frame in packet */
+    if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) {
+        
+        psEnc->sCmn.LBRR_enabled = INBandFEC_enabled;
+        if( psEnc->sCmn.fs_kHz == 8 ) {
+            LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 9000;
+        } else if( psEnc->sCmn.fs_kHz == 12 ) {
+            LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 6000;;
+        } else if( psEnc->sCmn.fs_kHz == 16 ) {
+            LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 3000;
+        } else {
+            LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS;
+        }
+
+        if( psEnc->sCmn.TargetRate_bps >= LBRRRate_thres_bps ) {
+            /* Set gain increase / rate reduction for LBRR usage */
+            /* Coarsely tuned with PESQ for now. */
+            /* Linear regression coefs G = 8 - 0.5 * loss */
+            /* Meaning that at 16% loss main rate and redundant rate is the same, -> G = 0 */
+            psEnc->sCmn.LBRR_GainIncreases = SKP_max_int( 8 - SKP_RSHIFT( psEnc->sCmn.PacketLoss_perc, 1 ), 0 );
+
+            /* Set main stream rate compensation */
+            if( psEnc->sCmn.LBRR_enabled && psEnc->sCmn.PacketLoss_perc > LBRR_LOSS_THRES ) {
+                /* Tuned to give aprox same mean / weighted bitrate as no inband FEC */
+                psEnc->inBandFEC_SNR_comp = 6.0f - 0.5f * psEnc->sCmn.LBRR_GainIncreases;
+            } else {
+                psEnc->inBandFEC_SNR_comp = 0;
+                psEnc->sCmn.LBRR_enabled  = 0;
+            }
+        } else {
+            psEnc->inBandFEC_SNR_comp     = 0;
+            psEnc->sCmn.LBRR_enabled      = 0;
+        }
+    }
+#else
+    if( INBandFEC_enabled != 0 ) {
+        ret = SKP_SILK_ENC_INVALID_INBAND_FEC_SETTING;
+    }
+    psEnc->sCmn.LBRR_enabled = 0;
+#endif
+    return( ret );
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_corrMatrix_FLP.c
@@ -1,0 +1,89 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/**********************************************************************
+ * Correlation matrix computations for LS estimate. 
+ **********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+/* Calculates correlation vector X'*t */
+void SKP_Silk_corrVector_FLP(
+    const SKP_float                 *x,                 /* I    x vector [L+order-1] used to create X   */
+    const SKP_float                 *t,                 /* I    Target vector [L]                       */
+    const SKP_int                   L,                  /* I    Length of vecors                        */
+    const SKP_int                   Order,              /* I    Max lag for correlation                 */
+          SKP_float                 *Xt                 /* O    X'*t correlation vector [order]         */
+)
+{
+    SKP_int lag;
+    const SKP_float *ptr1;
+    
+    ptr1 = &x[ Order - 1 ];                     /* Points to first sample of column 0 of X: X[:,0] */
+    for( lag = 0; lag < Order; lag++ ) {
+        /* Calculate X[:,lag]'*t */
+        Xt[ lag ] = (SKP_float)SKP_Silk_inner_product_FLP( ptr1, t, L );
+        ptr1--;                                 /* Next column of X */
+    }   
+}
+
+/* Calculates correlation matrix X'*X */
+void SKP_Silk_corrMatrix_FLP(
+    const SKP_float                 *x,                 /* I    x vector [ L+order-1 ] used to create X */
+    const SKP_int                   L,                  /* I    Length of vectors                       */
+    const SKP_int                   Order,              /* I    Max lag for correlation                 */
+          SKP_float                 *XX                 /* O    X'*X correlation matrix [order x order] */
+)
+{
+    SKP_int j, lag;
+    double  energy;
+    const SKP_float *ptr1, *ptr2;
+
+    ptr1 = &x[ Order - 1 ];                     /* First sample of column 0 of X */
+    energy = SKP_Silk_energy_FLP( ptr1, L );  /* X[:,0]'*X[:,0] */
+    matrix_ptr( XX, 0, 0, Order ) = ( SKP_float )energy;
+    for( j = 1; j < Order; j++ ) {
+        /* Calculate X[:,j]'*X[:,j] */
+        energy += ptr1[ -j ] * ptr1[ -j ] - ptr1[ L - j ] * ptr1[ L - j ];
+        matrix_ptr( XX, j, j, Order ) = ( SKP_float )energy;
+    }
+ 
+    ptr2 = &x[ Order - 2 ];                     /* First sample of column 1 of X */
+    for( lag = 1; lag < Order; lag++ ) {
+        /* Calculate X[:,0]'*X[:,lag] */
+        energy = SKP_Silk_inner_product_FLP( ptr1, ptr2, L );   
+        matrix_ptr( XX, lag, 0, Order ) = ( SKP_float )energy;
+        matrix_ptr( XX, 0, lag, Order ) = ( SKP_float )energy;
+        /* Calculate X[:,j]'*X[:,j + lag] */
+        for( j = 1; j < ( Order - lag ); j++ ) {
+            energy += ptr1[ -j ] * ptr2[ -j ] - ptr1[ L - j ] * ptr2[ L - j ];
+            matrix_ptr( XX, lag + j, j, Order ) = ( SKP_float )energy;
+            matrix_ptr( XX, j, lag + j, Order ) = ( SKP_float )energy;
+        }
+        ptr2--;                                 /* Next column of X */
+    }
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_define_FLP.h
@@ -1,0 +1,103 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_DEFINE_FLP_H
+#define SKP_SILK_DEFINE_FLP_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*******************/
+/* Pitch estimator */
+/*******************/
+
+/* Level of noise floor for whitening filter LPC analysis in pitch analysis */
+#define FIND_PITCH_WHITE_NOISE_FRACTION                 1e-3f
+
+/* Bandwidth expansion for whitening filter in pitch analysis */
+#define FIND_PITCH_BANDWITH_EXPANSION                   0.99f
+
+/* Threshold used by pitch estimator for early escape */
+#define FIND_PITCH_CORRELATION_THRESHOLD_HC_MODE        0.7f
+#define FIND_PITCH_CORRELATION_THRESHOLD_MC_MODE        0.75f
+#define FIND_PITCH_CORRELATION_THRESHOLD_LC_MODE        0.8f
+
+/***********************/
+/* Long-Term predictor */
+/***********************/
+
+/* Regualarization factor for correlation matrix. Equivalent to adding noise at -50 dB */
+#define FIND_LTP_COND_FAC                               1e-5f
+#define FIND_LPC_COND_FAC                               6e-5f
+
+/* Find prediction coefficients defines */
+#define LTP_DAMPING                                     0.001f
+#define LTP_SMOOTHING                                   0.1f
+
+/* LTP quantization settings */
+#define MU_LTP_QUANT_NB                                 0.03f
+#define MU_LTP_QUANT_MB                                 0.025f
+#define MU_LTP_QUANT_WB                                 0.02f
+#define MU_LTP_QUANT_SWB                                0.016f
+
+/***********************/
+/* High pass filtering */
+/***********************/
+
+/* Smoothing parameters for low end of pitch frequency range estimation */
+#define VARIABLE_HP_SMTH_COEF1                          0.1f
+#define VARIABLE_HP_SMTH_COEF2                          0.015f
+
+/* Min and max values for low end of pitch frequency range estimation */
+#define VARIABLE_HP_MIN_FREQ                            80.0f
+#define VARIABLE_HP_MAX_FREQ                            150.0f
+
+/* Max absolute difference between log2 of pitch frequency and smoother state, to enter the smoother */
+#define VARIABLE_HP_MAX_DELTA_FREQ                      0.4f
+
+/***********/
+/* Various */
+/***********/
+
+/* Required speech activity for counting frame as active */
+#define WB_DETECT_ACTIVE_SPEECH_LEVEL_THRES             0.7f        
+
+#define SPEECH_ACTIVITY_DTX_THRES                       0.1f
+
+/* Speech Activity LBRR enable threshold (needs tuning) */
+#define LBRR_SPEECH_ACTIVITY_THRES                      0.5f        
+
+#define Q14_CONVERSION_FAC                              6.1035e-005f // 1 / 2^14
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+++ b/src_FLP/SKP_Silk_encode_frame_FLP.c
@@ -1,0 +1,472 @@
+#include <stdlib.h>
+#include "SKP_Silk_main_FLP.h"
+
+/****************/
+/* Encode frame */
+/****************/
+SKP_int SKP_Silk_encode_frame_FLP( 
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+          SKP_uint8                 *pCode,             /* O    Payload                                 */
+          SKP_int16                 *pnBytesOut,        /* I/O  Number of payload bytes;                */
+                                                        /*      input: max length; output: used         */
+    const SKP_int16                 *pIn                /* I    Input speech frame                      */
+)
+{
+    SKP_Silk_encoder_control_FLP sEncCtrl;
+    SKP_int     k, i, nBytes, ret = 0;
+    SKP_float   *x_frame, *res_pitch_frame;
+    SKP_int16   pIn_HP[    MAX_FRAME_LENGTH ];
+    SKP_int16   pIn_HP_LP[ MAX_FRAME_LENGTH ];
+    SKP_float   xfw[       MAX_FRAME_LENGTH ];
+    SKP_float   res_pitch[ 2 * MAX_FRAME_LENGTH + LA_PITCH_MAX ];
+    SKP_int     LBRR_idx, frame_terminator;
+
+    /* Low bitrate redundancy parameters */
+    SKP_uint8   LBRRpayload[ MAX_ARITHM_BYTES ];
+    SKP_int16   nBytesLBRR;
+
+    ec_byte_buffer range_enc_celt_buf;
+
+    const SKP_uint16 *FrameTermination_CDF;
+
+TIC(ENCODE_FRAME)
+
+    sEncCtrl.sCmn.Seed = psEnc->sCmn.frameCounter++ & 3;
+    /**************************************************************/
+    /* Setup Input Pointers, and insert frame in input buffer    */
+    /*************************************************************/
+    /* pointers aligned with start of frame to encode */
+    x_frame         = psEnc->x_buf + psEnc->sCmn.ltp_mem_length;    /* start of frame to encode */
+    res_pitch_frame = res_pitch    + psEnc->sCmn.ltp_mem_length;    /* start of pitch LPC residual frame */
+
+    /****************************/
+    /* Voice Activity Detection */
+    /****************************/
+TIC(VAD)
+    SKP_Silk_VAD_FLP( psEnc, &sEncCtrl, pIn );
+TOC(VAD)
+
+    /*******************************************/
+    /* High-pass filtering of the input signal */
+    /*******************************************/
+TIC(HP_IN)
+#if HIGH_PASS_INPUT
+    /* Variable high-pass filter */
+    SKP_Silk_HP_variable_cutoff_FLP( psEnc, &sEncCtrl, pIn_HP, pIn );
+#else
+    SKP_memcpy( pIn_HP, pIn, psEnc->sCmn.frame_length * sizeof( SKP_int16 ) );
+#endif
+TOC(HP_IN)
+
+#if SWITCH_TRANSITION_FILTERING
+    /* Ensure smooth bandwidth transitions */
+    SKP_Silk_LP_variable_cutoff( &psEnc->sCmn.sLP, pIn_HP_LP, pIn_HP, psEnc->sCmn.frame_length );
+#else
+    SKP_memcpy( pIn_HP_LP, pIn_HP, psEnc->sCmn.frame_length * sizeof( SKP_int16 ) );
+#endif
+
+    /*******************************************/
+    /* Copy new frame to front of input buffer */
+    /*******************************************/
+    SKP_short2float_array( x_frame + psEnc->sCmn.la_shape, pIn_HP_LP, psEnc->sCmn.frame_length );
+
+    /* Add tiny signal to avoid high CPU load from denormalized floating point numbers */
+    for( k = 0; k < 8; k++ ) {
+        x_frame[ psEnc->sCmn.la_shape + k * ( psEnc->sCmn.frame_length >> 3 ) ] += ( 1 - ( k & 2 ) ) * 1e-6f;
+    }
+
+    /*****************************************/
+    /* Find pitch lags, initial LPC analysis */
+    /*****************************************/
+TIC(FIND_PITCH)
+    SKP_Silk_find_pitch_lags_FLP( psEnc, &sEncCtrl, res_pitch, x_frame );
+TOC(FIND_PITCH)
+
+    /************************/
+    /* Noise shape analysis */
+    /************************/
+TIC(NOISE_SHAPE_ANALYSIS)
+    SKP_Silk_noise_shape_analysis_FLP( psEnc, &sEncCtrl, res_pitch_frame, x_frame );
+TOC(NOISE_SHAPE_ANALYSIS)
+
+    /*****************************************/
+    /* Prefiltering for noise shaper         */
+    /*****************************************/
+TIC(PREFILTER)
+    SKP_Silk_prefilter_FLP( psEnc, &sEncCtrl, xfw, x_frame );
+TOC(PREFILTER)
+
+    /***************************************************/
+    /* Find linear prediction coefficients (LPC + LTP) */
+    /***************************************************/
+TIC(FIND_PRED_COEF)
+    SKP_Silk_find_pred_coefs_FLP( psEnc, &sEncCtrl, res_pitch );
+TOC(FIND_PRED_COEF)
+
+    /****************************************/
+    /* Process gains                        */
+    /****************************************/
+TIC(PROCESS_GAINS)
+    SKP_Silk_process_gains_FLP( psEnc, &sEncCtrl );
+TOC(PROCESS_GAINS)
+    
+    psEnc->sCmn.sigtype[         psEnc->sCmn.nFramesInPayloadBuf ] = sEncCtrl.sCmn.sigtype;
+    psEnc->sCmn.QuantOffsetType[ psEnc->sCmn.nFramesInPayloadBuf ] = sEncCtrl.sCmn.QuantOffsetType;
+    /****************************************/
+    /* Low Bitrate Redundant Encoding       */
+    /****************************************/
+    nBytesLBRR = MAX_ARITHM_BYTES;
+TIC(LBRR)
+    SKP_Silk_LBRR_encode_FLP( psEnc, &sEncCtrl, LBRRpayload, &nBytesLBRR, xfw );
+TOC(LBRR)
+
+    /*****************************************/
+    /* Noise shaping quantization            */
+    /*****************************************/
+TIC(NSQ)
+    SKP_Silk_NSQ_wrapper_FLP( psEnc, &sEncCtrl, xfw,
+        &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], 0 );
+TOC(NSQ)
+
+    /**************************************************/
+    /* Convert speech activity into VAD and DTX flags */
+    /**************************************************/
+    if( psEnc->speech_activity < SPEECH_ACTIVITY_DTX_THRES ) {
+        psEnc->sCmn.vadFlag = NO_VOICE_ACTIVITY;
+        psEnc->sCmn.noSpeechCounter++;
+        if( psEnc->sCmn.noSpeechCounter > NO_SPEECH_FRAMES_BEFORE_DTX ) {
+            psEnc->sCmn.inDTX = 1;
+        }
+        if( psEnc->sCmn.noSpeechCounter > MAX_CONSECUTIVE_DTX ) {
+            psEnc->sCmn.noSpeechCounter = 0;
+            psEnc->sCmn.inDTX           = 0;
+        }
+    } else {
+        psEnc->sCmn.noSpeechCounter = 0;
+        psEnc->sCmn.inDTX           = 0;
+        psEnc->sCmn.vadFlag         = VOICE_ACTIVITY;
+    }
+
+    /****************************************/
+    /* Initialize arithmetic coder          */
+    /****************************************/
+    if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) {
+        ec_byte_writeinit_buffer( &range_enc_celt_buf, psEnc->sCmn.sRC.buffer, MAX_ARITHM_BYTES );
+        ec_enc_init( &psEnc->sCmn.sRC.range_enc_celt_state, &range_enc_celt_buf );
+
+        SKP_Silk_range_enc_init( &psEnc->sCmn.sRC );
+        psEnc->sCmn.nBytesInPayloadBuf = 0;
+    }
+
+    /****************************************/
+    /* Encode Parameters                    */
+    /****************************************/
+TIC(ENCODE_PARAMS)
+    SKP_Silk_encode_parameters_v4( &psEnc->sCmn, &sEncCtrl.sCmn, &psEnc->sCmn.sRC );
+    FrameTermination_CDF = SKP_Silk_FrameTermination_v4_CDF;
+TOC(ENCODE_PARAMS)
+
+    /****************************************/
+    /* Update Buffers and State             */
+    /****************************************/
+    /* Update input buffer */
+    SKP_memmove( psEnc->x_buf, &psEnc->x_buf[ psEnc->sCmn.frame_length ], 
+        ( psEnc->sCmn.ltp_mem_length + psEnc->sCmn.la_shape ) * sizeof( SKP_float ) );
+    
+    /* Parameters needed for next frame */
+    psEnc->sCmn.prev_sigtype = sEncCtrl.sCmn.sigtype;
+    psEnc->sCmn.prevLag      = sEncCtrl.sCmn.pitchL[ psEnc->sCmn.nb_subfr - 1 ];
+    psEnc->sCmn.first_frame_after_reset = 0;
+
+    if( psEnc->sCmn.sRC.error ) {
+        /* Encoder returned error: Clear payload buffer */
+        psEnc->sCmn.nFramesInPayloadBuf = 0;
+    } else {
+        psEnc->sCmn.nFramesInPayloadBuf++;
+    }
+
+    /****************************************/
+    /* Finalize payload and copy to output  */
+    /****************************************/
+    if( psEnc->sCmn.nFramesInPayloadBuf * SUB_FRAME_LENGTH_MS * psEnc->sCmn.nb_subfr >= psEnc->sCmn.PacketSize_ms ) {
+
+        LBRR_idx = ( psEnc->sCmn.oldest_LBRR_idx + 1 ) & LBRR_IDX_MASK;
+
+        /* Check if FEC information should be added */
+        frame_terminator = SKP_SILK_LAST_FRAME;
+        if( psEnc->sCmn.LBRR_buffer[ LBRR_idx ].usage == SKP_SILK_ADD_LBRR_TO_PLUS1 ) {
+            frame_terminator = SKP_SILK_LBRR_VER1;
+        }
+        if( psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].usage == SKP_SILK_ADD_LBRR_TO_PLUS2 ) {
+            frame_terminator = SKP_SILK_LBRR_VER2;
+            LBRR_idx = psEnc->sCmn.oldest_LBRR_idx;
+        }
+
+        /* Add the frame termination info to stream */
+        SKP_Silk_range_encoder( &psEnc->sCmn.sRC, frame_terminator, FrameTermination_CDF );
+        for( i = 0; i < psEnc->sCmn.nFramesInPayloadBuf; i++ ) {
+            SKP_Silk_encode_pulses( &psEnc->sCmn.sRC, psEnc->sCmn.sigtype[ i ], psEnc->sCmn.QuantOffsetType[ i ], 
+                &psEnc->sCmn.q[ i * psEnc->sCmn.frame_length ], psEnc->sCmn.frame_length );
+        }
+
+        /* Payload length so far */
+        SKP_Silk_range_encoder_get_length( &psEnc->sCmn.sRC, &nBytes );
+
+        /* Check that there is enough space in external output buffer, and move data */
+        if( *pnBytesOut >= nBytes ) {
+            SKP_int bits_in_stream, mask;
+            bits_in_stream = ec_enc_tell( &psEnc->sCmn.sRC.range_enc_celt_state, 0 );
+            ec_enc_done( &psEnc->sCmn.sRC.range_enc_celt_state );
+            
+            /* Fill up any remaining bits in the last byte with 1s */
+            if( bits_in_stream & 7 ) {
+                mask = SKP_RSHIFT( 0xFF, bits_in_stream & 7 );
+                if( nBytes - 1 < *pnBytesOut ) {
+                    psEnc->sCmn.sRC.range_enc_celt_state.buf->buf[ nBytes - 1 ] |= mask;
+                }
+            }
+            SKP_memcpy( pCode, psEnc->sCmn.sRC.range_enc_celt_state.buf->buf, nBytes * sizeof( SKP_uint8 ) );
+
+            if( frame_terminator > SKP_SILK_MORE_FRAMES && 
+                    *pnBytesOut >= nBytes + psEnc->sCmn.LBRR_buffer[ LBRR_idx ].nBytes ) {
+                /* Get old packet and add to payload. */
+                SKP_memcpy( &pCode[ nBytes ],
+                    psEnc->sCmn.LBRR_buffer[ LBRR_idx ].payload,
+                    psEnc->sCmn.LBRR_buffer[ LBRR_idx ].nBytes * sizeof( SKP_uint8 ) );
+                nBytes += psEnc->sCmn.LBRR_buffer[ LBRR_idx ].nBytes;
+            }
+            *pnBytesOut = nBytes;
+        
+            /* Update FEC buffer */
+            SKP_memcpy( psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].payload, LBRRpayload, 
+                nBytesLBRR * sizeof( SKP_uint8 ) );
+            psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].nBytes = nBytesLBRR;
+            /* The below line describes how FEC should be used */ 
+            psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].usage = sEncCtrl.sCmn.LBRR_usage;
+            psEnc->sCmn.oldest_LBRR_idx = ( ( psEnc->sCmn.oldest_LBRR_idx + 1 ) & LBRR_IDX_MASK );
+
+            /* Reset the number of frames in payload buffer */
+            psEnc->sCmn.nFramesInPayloadBuf = 0;
+        } else {
+            /* Not enough space: Payload will be discarded */
+            *pnBytesOut = 0;
+            nBytes      = 0;
+            psEnc->sCmn.nFramesInPayloadBuf = 0;
+            ret = SKP_SILK_ENC_PAYLOAD_BUF_TOO_SHORT;
+        }
+    } else {
+        /* No payload for you this time */
+        *pnBytesOut = 0;
+
+        /* Encode that more frames follows */
+        frame_terminator = SKP_SILK_MORE_FRAMES;
+        SKP_Silk_range_encoder( &psEnc->sCmn.sRC, frame_terminator, FrameTermination_CDF );
+
+        /* Payload length so far */
+        SKP_Silk_range_encoder_get_length( &psEnc->sCmn.sRC, &nBytes );
+
+        /* Take into account the q signal that isn't in the bitstream yet */
+        nBytes += SKP_Silk_pulses_to_bytes( &psEnc->sCmn, 
+            &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ] );
+    }
+
+    /* Check for arithmetic coder errors */
+    if( psEnc->sCmn.sRC.error ) {
+        ret = SKP_SILK_ENC_INTERNAL_ERROR;
+    }
+
+    /* simulate number of ms buffered in channel because of exceeding TargetRate */
+    psEnc->BufferedInChannel_ms   += ( 8.0f * 1000.0f * ( nBytes - psEnc->sCmn.nBytesInPayloadBuf ) ) / psEnc->sCmn.TargetRate_bps;
+    psEnc->BufferedInChannel_ms   -= SUB_FRAME_LENGTH_MS * psEnc->sCmn.nb_subfr;
+    psEnc->BufferedInChannel_ms    = SKP_LIMIT_float( psEnc->BufferedInChannel_ms, 0.0f, 100.0f );
+    psEnc->sCmn.nBytesInPayloadBuf = nBytes;
+
+    if( psEnc->speech_activity > WB_DETECT_ACTIVE_SPEECH_LEVEL_THRES ) {
+        psEnc->sCmn.sSWBdetect.ActiveSpeech_ms = SKP_ADD_POS_SAT32( psEnc->sCmn.sSWBdetect.ActiveSpeech_ms, SUB_FRAME_LENGTH_MS * psEnc->sCmn.nb_subfr ); 
+    }
+
+TOC(ENCODE_FRAME)
+#ifdef SAVE_ALL_INTERNAL_DATA
+    DEBUG_STORE_DATA( xf.dat,                   pIn_HP_LP,                           psEnc->sCmn.frame_length * sizeof( SKP_int16 ) );
+    DEBUG_STORE_DATA( xfw.dat,                  xfw,                                 psEnc->sCmn.frame_length * sizeof( SKP_float ) );
+//  DEBUG_STORE_DATA( q.dat,                    q,                                   psEnc->sCmn.frame_length * sizeof( SKP_int   ) );
+    DEBUG_STORE_DATA( pitchL.dat,               sEncCtrl.sCmn.pitchL,                            MAX_NB_SUBFR * sizeof( SKP_int   ) );
+    DEBUG_STORE_DATA( pitchG_quantized.dat,     sEncCtrl.LTPCoef,            psEnc->sCmn.nb_subfr * LTP_ORDER * sizeof( SKP_float ) );
+    DEBUG_STORE_DATA( pitch_freq_low_Hz.dat,    &sEncCtrl.pitch_freq_low_Hz,                                    sizeof( SKP_float ) );
+    DEBUG_STORE_DATA( LTPcorr.dat,              &psEnc->LTPCorr,                                                sizeof( SKP_float ) );
+    DEBUG_STORE_DATA( tilt.dat,                 &sEncCtrl.input_tilt,                                           sizeof( SKP_float ) );
+    DEBUG_STORE_DATA( gains.dat,                sEncCtrl.Gains,                          psEnc->sCmn.nb_subfr * sizeof( SKP_float ) );
+//    DEBUG_STORE_DATA( gains_indices.dat,        sEncCtrl.sCmn.GainsIndices, MAX_LAYERS * psEnc->sCmn.nb_subfr * sizeof( SKP_int   ) );
+    DEBUG_STORE_DATA( nBytes.dat,               &nBytes,                                                        sizeof( SKP_int   ) );
+    DEBUG_STORE_DATA( current_SNR_db.dat,       &sEncCtrl.current_SNR_dB,                                       sizeof( SKP_float ) );
+    DEBUG_STORE_DATA( QuantOffsetType.dat,      &sEncCtrl.sCmn.QuantOffsetType,                                 sizeof( SKP_int   ) );
+    DEBUG_STORE_DATA( speech_activity.dat,      &psEnc->speech_activity,                                        sizeof( SKP_float ) );
+    DEBUG_STORE_DATA( input_quality_bands.dat,  sEncCtrl.input_quality_bands,                     VAD_N_BANDS * sizeof( SKP_float ) );
+    DEBUG_STORE_DATA( sigtype.dat,              &sEncCtrl.sCmn.sigtype,                                         sizeof( SKP_int   ) ); 
+    DEBUG_STORE_DATA( ratelevel.dat,            &sEncCtrl.sCmn.RateLevelIndex,                                  sizeof( SKP_int   ) ); 
+    DEBUG_STORE_DATA( lag_index.dat,            &sEncCtrl.sCmn.lagIndex,                                        sizeof( SKP_int   ) ); 
+    DEBUG_STORE_DATA( contour_index.dat,        &sEncCtrl.sCmn.contourIndex,                                    sizeof( SKP_int   ) ); 
+    DEBUG_STORE_DATA( per_index.dat,            &sEncCtrl.sCmn.PERIndex,                                        sizeof( SKP_int   ) );
+    DEBUG_STORE_DATA( PredCoef.dat,             &sEncCtrl.PredCoef[ 1 ],          psEnc->sCmn.predictLPCOrder * sizeof( SKP_float ) );
+    DEBUG_STORE_DATA( ltp_scale_idx.dat,        &sEncCtrl.sCmn.LTP_scaleIndex,                                  sizeof( SKP_int   ) );
+//  DEBUG_STORE_DATA( xq.dat,                   psEnc->sNSQ.xqBuf,                   psEnc->sCmn.frame_length * sizeof( SKP_float ) );
+#endif
+    return( ret );
+}
+
+/* Low Bitrate Redundancy (LBRR) encoding. Reuse all parameters but encode with lower bitrate           */
+void SKP_Silk_LBRR_encode_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl,         /* I/O  Encoder control FLP                     */
+          SKP_uint8                 *pCode,             /* O    Payload                                 */
+          SKP_int16                 *pnBytesOut,        /* I/O  Payload bytes; in: max; out: used       */
+    const SKP_float                 xfw[]               /* I    Input signal                            */
+)
+{
+    SKP_int32   Gains_Q16[ MAX_NB_SUBFR ];
+    SKP_int     i, k, TempGainsIndices[ MAX_NB_SUBFR ], frame_terminator;
+    SKP_int     nBytes, nFramesInPayloadBuf;
+    SKP_float   TempGains[ MAX_NB_SUBFR ];
+    SKP_int     typeOffset, LTP_scaleIndex, Rate_only_parameters = 0;
+    ec_byte_buffer range_enc_celt_buf;
+
+    /* Control use of inband LBRR */
+    SKP_Silk_LBRR_ctrl_FLP( psEnc, &psEncCtrl->sCmn );
+
+    if( psEnc->sCmn.LBRR_enabled ) {
+        /* Save original gains */
+        SKP_memcpy( TempGainsIndices, psEncCtrl->sCmn.GainsIndices, MAX_NB_SUBFR * sizeof( SKP_int   ) );
+        SKP_memcpy( TempGains,        psEncCtrl->Gains,             MAX_NB_SUBFR * sizeof( SKP_float ) );
+
+        typeOffset     = psEnc->sCmn.typeOffsetPrev; // Temp save as cannot be overwritten
+        LTP_scaleIndex = psEncCtrl->sCmn.LTP_scaleIndex;
+
+        /* Set max rate where quant signal is encoded */
+        if( psEnc->sCmn.fs_kHz == 8 ) {
+            Rate_only_parameters = 13500;
+        } else if( psEnc->sCmn.fs_kHz == 12 ) {
+            Rate_only_parameters = 15500;
+        } else if( psEnc->sCmn.fs_kHz == 16 ) {
+            Rate_only_parameters = 17500;
+        } else if( psEnc->sCmn.fs_kHz == 24 ) {
+            Rate_only_parameters = 19500;
+        } else {
+            SKP_assert( 0 );
+        }
+
+        if( psEnc->sCmn.Complexity > 0 && psEnc->sCmn.TargetRate_bps > Rate_only_parameters ) {
+            if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) {
+                /* First frame in packet copy everything */
+                SKP_memcpy( &psEnc->sNSQ_LBRR, &psEnc->sNSQ, sizeof( SKP_Silk_nsq_state ) );
+                psEnc->sCmn.LBRRprevLastGainIndex = psEnc->sShape.LastGainIndex;
+                /* Increase Gains to get target LBRR rate */
+                psEncCtrl->sCmn.GainsIndices[ 0 ] += psEnc->sCmn.LBRR_GainIncreases;
+                psEncCtrl->sCmn.GainsIndices[ 0 ]  = SKP_LIMIT( psEncCtrl->sCmn.GainsIndices[ 0 ], 0, N_LEVELS_QGAIN - 1 );
+            }
+            /* Decode to get Gains in sync with decoder */
+            SKP_Silk_gains_dequant( Gains_Q16, psEncCtrl->sCmn.GainsIndices, 
+                &psEnc->sCmn.LBRRprevLastGainIndex, psEnc->sCmn.nFramesInPayloadBuf, psEnc->sCmn.nb_subfr );
+
+            /* Overwrite unquantized gains with quantized gains and convert back to Q0 from Q16 */
+            for( k = 0; k <  psEnc->sCmn.nb_subfr; k++ ) {
+                psEncCtrl->Gains[ k ] = Gains_Q16[ k ] / 65536.0f;
+            }
+
+            /*****************************************/
+            /* Noise shaping quantization            */
+            /*****************************************/
+            SKP_Silk_NSQ_wrapper_FLP( psEnc, psEncCtrl, xfw, 
+                &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], 1 );
+        } else {
+            SKP_memset( &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], 0, 
+                psEnc->sCmn.frame_length * sizeof( SKP_int ) );
+
+            psEncCtrl->sCmn.LTP_scaleIndex = 0;
+        }
+        /****************************************/
+        /* Initialize arithmetic coder          */
+        /****************************************/
+        if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) {
+            ec_byte_writeinit_buffer( &range_enc_celt_buf, psEnc->sCmn.sRC_LBRR.buffer, MAX_ARITHM_BYTES );
+            ec_enc_init( &psEnc->sCmn.sRC_LBRR.range_enc_celt_state, &range_enc_celt_buf );
+
+            SKP_Silk_range_enc_init( &psEnc->sCmn.sRC_LBRR );
+            psEnc->sCmn.nBytesInPayloadBuf = 0;
+        }
+
+        /****************************************/
+        /* Encode Parameters                    */
+        /****************************************/
+        SKP_Silk_encode_parameters_v4( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sCmn.sRC_LBRR );
+        
+        /****************************************/
+        /* Encode Parameters                    */
+        /****************************************/
+        if( psEnc->sCmn.sRC_LBRR.error ) {
+            /* Encoder returned error: Clear payload buffer */
+            nFramesInPayloadBuf = 0;
+        } else {
+            nFramesInPayloadBuf = psEnc->sCmn.nFramesInPayloadBuf + 1;
+        }
+
+        /****************************************/
+        /* Finalize payload and copy to output  */
+        /****************************************/
+        if( psEnc->sCmn.nFramesInPayloadBuf * SUB_FRAME_LENGTH_MS * psEnc->sCmn.nb_subfr >= psEnc->sCmn.PacketSize_ms ) {
+
+            /* Check if FEC information should be added */
+            frame_terminator = SKP_SILK_LAST_FRAME;
+
+            /* Add the frame termination info to stream */
+            SKP_Silk_range_encoder( &psEnc->sCmn.sRC_LBRR, frame_terminator, SKP_Silk_FrameTermination_v4_CDF );
+
+            /*********************************************/
+            /* Encode quantization indices of excitation */
+            /*********************************************/
+            for( i = 0; i < nFramesInPayloadBuf; i++ ) {
+                SKP_Silk_encode_pulses( &psEnc->sCmn.sRC_LBRR, psEnc->sCmn.sigtype[ i ], psEnc->sCmn.QuantOffsetType[ i ],
+                    &psEnc->sCmn.q_LBRR[ i * psEnc->sCmn.frame_length ], psEnc->sCmn.frame_length );
+            }
+
+            /* Payload length so far */
+            SKP_Silk_range_encoder_get_length( &psEnc->sCmn.sRC_LBRR, &nBytes );
+
+            /* Check that there is enough space in external output buffer and move data */
+            if( *pnBytesOut >= nBytes ) {
+                SKP_int bits_in_stream, mask;
+                bits_in_stream = ec_enc_tell( &psEnc->sCmn.sRC_LBRR.range_enc_celt_state, 0 );
+                ec_enc_done( &psEnc->sCmn.sRC_LBRR.range_enc_celt_state );
+
+                /* Fill up any remaining bits in the last byte with 1s */
+                if( bits_in_stream & 7 ) {
+                    mask = SKP_RSHIFT( 0xFF, bits_in_stream & 7 );
+                    if( nBytes - 1 < *pnBytesOut ) {
+                        psEnc->sCmn.sRC_LBRR.range_enc_celt_state.buf->buf[ nBytes - 1 ] |= mask;
+                    }
+                }
+                SKP_memcpy( pCode, psEnc->sCmn.sRC_LBRR.range_enc_celt_state.buf->buf, nBytes * sizeof( SKP_uint8 ) );
+
+                *pnBytesOut = nBytes;               
+            } else {
+                /* Not enough space: Payload will be discarded */
+                *pnBytesOut = 0;
+                SKP_assert( 0 );
+            }
+        } else {
+            /* No payload for you this time */
+            *pnBytesOut = 0;
+
+            /* Encode that more frames follows */
+            frame_terminator = SKP_SILK_MORE_FRAMES;
+            SKP_Silk_range_encoder( &psEnc->sCmn.sRC_LBRR, frame_terminator, SKP_Silk_FrameTermination_v4_CDF );
+        }
+
+        /* Restore original Gains */
+        SKP_memcpy( psEncCtrl->sCmn.GainsIndices, TempGainsIndices,  psEnc->sCmn.nb_subfr * sizeof( SKP_int   ) );
+        SKP_memcpy( psEncCtrl->Gains,             TempGains,         psEnc->sCmn.nb_subfr * sizeof( SKP_float ) );
+    
+        /* Restore LTP scale index and typeoffset */
+        psEncCtrl->sCmn.LTP_scaleIndex = LTP_scaleIndex;
+        psEnc->sCmn.typeOffsetPrev     = typeOffset;
+    }
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_find_LPC_FLP.c
@@ -1,0 +1,97 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+void SKP_Silk_find_LPC_FLP(
+          SKP_float                 NLSF[],             /* O    NLSFs                                   */
+          SKP_int                   *interpIndex,       /* O    NLSF interp. index for NLSF interp.     */
+    const SKP_float                 prev_NLSFq[],       /* I    Previous NLSFs, for NLSF interpolation  */
+    const SKP_int                   useInterpNLSFs,     /* I    Flag                                    */
+    const SKP_int                   LPC_order,          /* I    LPC order                               */
+    const SKP_float                 x[],                /* I    Input signal                            */
+    const SKP_int                   subfr_length,       /* I    Subframe length incl preceeding samples */
+    const SKP_int                   nb_subfr            /* I:   Number of subframes                     */
+)
+{
+    SKP_int     k;
+    SKP_float   a[ MAX_LPC_ORDER ];
+
+    /* Used only for NLSF interpolation */
+    double      res_nrg, res_nrg_2nd, res_nrg_interp;
+    SKP_float   a_tmp[ MAX_LPC_ORDER ], NLSF0[ MAX_LPC_ORDER ];
+    SKP_float   LPC_res[ ( MAX_FRAME_LENGTH + MAX_NB_SUBFR * MAX_LPC_ORDER ) / 2 ];
+
+    /* Default: No interpolation */
+    *interpIndex = 4;
+
+    /* Burg AR analysis for the full frame */
+    res_nrg = SKP_Silk_burg_modified_FLP( a, x, subfr_length, nb_subfr, FIND_LPC_COND_FAC, LPC_order );
+
+    if( useInterpNLSFs == 1 && nb_subfr == MAX_NB_SUBFR ) {
+        /* Optimal solution for last 10 ms; subtract residual energy here, as that's easier than        */
+        /* adding it to the residual energy of the first 10 ms in each iteration of the search below    */
+        res_nrg -= SKP_Silk_burg_modified_FLP( a_tmp, x + ( MAX_NB_SUBFR / 2 ) * subfr_length, 
+            subfr_length, MAX_NB_SUBFR / 2, FIND_LPC_COND_FAC, LPC_order );
+
+        /* Convert to NLSFs */
+        SKP_Silk_A2NLSF_FLP( NLSF, a_tmp, LPC_order );
+
+        /* Search over interpolation indices to find the one with lowest residual energy */
+        res_nrg_2nd = SKP_float_MAX;
+        for( k = 3; k >= 0; k-- ) {
+            /* Interpolate NLSFs for first half */
+            SKP_Silk_interpolate_wrapper_FLP( NLSF0, prev_NLSFq, NLSF, 0.25f * k, LPC_order );
+
+            /* Convert to LPC for residual energy evaluation */
+            SKP_Silk_NLSF2A_stable_FLP( a_tmp, NLSF0, LPC_order );
+
+            /* Calculate residual energy with LSF interpolation */
+            SKP_Silk_LPC_analysis_filter_FLP( LPC_res, a_tmp, x, 2 * subfr_length, LPC_order );
+            res_nrg_interp = 
+                SKP_Silk_energy_FLP( LPC_res + LPC_order,                subfr_length - LPC_order ) + 
+                SKP_Silk_energy_FLP( LPC_res + LPC_order + subfr_length, subfr_length - LPC_order );
+
+            /* Determine whether current interpolated NLSFs are best so far */
+            if( res_nrg_interp < res_nrg ) {
+                /* Interpolation has lower residual energy */
+                res_nrg = res_nrg_interp;
+                *interpIndex = k;
+            } else if( res_nrg_interp > res_nrg_2nd ) {
+                /* No reason to continue iterating - residual energies will continue to climb */
+                break;
+            }
+            res_nrg_2nd = res_nrg_interp;
+        }
+    }
+
+    if( *interpIndex == 4 ) {
+        /* NLSF interpolation is currently inactive, calculate NLSFs from full frame AR coefficients */
+        SKP_Silk_A2NLSF_FLP( NLSF, a, LPC_order );
+    }
+
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_find_LTP_FLP.c
@@ -1,0 +1,124 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+void SKP_Silk_find_LTP_FLP(
+          SKP_float b[ MAX_NB_SUBFR * LTP_ORDER ],          /* O    LTP coefs                               */
+          SKP_float WLTP[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* O    Weight for LTP quantization       */
+          SKP_float *LTPredCodGain,                         /* O    LTP coding gain                         */
+    const SKP_float r_lpc[],                                /* I    LPC residual                            */
+    const SKP_int   lag[  MAX_NB_SUBFR ],                   /* I    LTP lags                                */
+    const SKP_float Wght[ MAX_NB_SUBFR ],                   /* I    Weights                                 */
+    const SKP_int   subfr_length,                           /* I    Subframe length                         */
+    const SKP_int   nb_subfr,                               /* I    number of subframes                     */
+    const SKP_int   mem_offset                              /* I    Number of samples in LTP memory         */
+)
+{
+    SKP_int   i, k;
+    SKP_float *b_ptr, temp, *WLTP_ptr;
+    SKP_float LPC_res_nrg, LPC_LTP_res_nrg;
+    SKP_float d[ MAX_NB_SUBFR ], m, g, delta_b[ LTP_ORDER ];
+    SKP_float w[ MAX_NB_SUBFR ], nrg[ MAX_NB_SUBFR ], regu;
+    SKP_float Rr[ LTP_ORDER ], rr[ MAX_NB_SUBFR ];
+    const SKP_float *r_ptr, *lag_ptr;
+
+    b_ptr    = b;
+    WLTP_ptr = WLTP;
+    r_ptr    = &r_lpc[ mem_offset ];
+    for( k = 0; k < nb_subfr; k++ ) {
+        lag_ptr = r_ptr - ( lag[ k ] + LTP_ORDER / 2 );
+
+        SKP_Silk_corrMatrix_FLP( lag_ptr, subfr_length, LTP_ORDER, WLTP_ptr );
+        SKP_Silk_corrVector_FLP( lag_ptr, r_ptr, subfr_length, LTP_ORDER, Rr );
+
+        rr[ k ] = ( SKP_float )SKP_Silk_energy_FLP( r_ptr, subfr_length );
+        regu = LTP_DAMPING * ( rr[ k ] + 1.0f );
+        SKP_Silk_regularize_correlations_FLP( WLTP_ptr, &rr[ k ], regu, LTP_ORDER );
+        SKP_Silk_solve_LDL_FLP( WLTP_ptr, LTP_ORDER, Rr, b_ptr );
+
+        /* Calculate residual energy */
+        nrg[ k ] = SKP_Silk_residual_energy_covar_FLP( b_ptr, WLTP_ptr, Rr, rr[ k ], LTP_ORDER );
+
+        temp = Wght[ k ] / ( nrg[ k ] * Wght[ k ] + 0.01f * subfr_length );
+        SKP_Silk_scale_vector_FLP( WLTP_ptr, temp, LTP_ORDER * LTP_ORDER );
+        w[ k ] = matrix_ptr( WLTP_ptr, LTP_ORDER / 2, LTP_ORDER / 2, LTP_ORDER );
+    
+        r_ptr    += subfr_length;
+        b_ptr    += LTP_ORDER;
+        WLTP_ptr += LTP_ORDER * LTP_ORDER;
+    }
+
+    /* Compute LTP coding gain */
+    if( LTPredCodGain != NULL ) {
+        LPC_LTP_res_nrg = 1e-6f;
+        LPC_res_nrg     = 0.0f;
+        for( k = 0; k < nb_subfr; k++ ) {
+            LPC_res_nrg     += rr[  k ] * Wght[ k ];
+            LPC_LTP_res_nrg += nrg[ k ] * Wght[ k ];
+        }
+        
+        SKP_assert( LPC_LTP_res_nrg > 0 );
+        *LTPredCodGain = 3.0f * SKP_Silk_log2( LPC_res_nrg / LPC_LTP_res_nrg );
+    }
+
+    /* Smoothing */
+    /* d = sum( B, 1 ); */
+    b_ptr = b;
+    for( k = 0; k < nb_subfr; k++ ) {
+        d[ k ] = 0;
+        for( i = 0; i < LTP_ORDER; i++ ) {
+            d[ k ] += b_ptr[ i ];
+        }
+        b_ptr += LTP_ORDER;
+    }
+    /* m = ( w * d' ) / ( sum( w ) + 1e-3 ); */
+    temp = 1e-3f;
+    for( k = 0; k < nb_subfr; k++ ) {
+        temp += w[ k ];
+    }
+    m = 0;
+    for( k = 0; k < nb_subfr; k++ ) {
+        m += d[ k ] * w[ k ];
+    }
+    m = m / temp;
+
+    b_ptr = b;
+    for( k = 0; k < nb_subfr; k++ ) {
+        g = LTP_SMOOTHING / ( LTP_SMOOTHING + w[ k ] ) * ( m - d[ k ] );
+        temp = 0;
+        for( i = 0; i < LTP_ORDER; i++ ) {
+            delta_b[ i ] = SKP_max_float( b_ptr[ i ], 0.1f );
+            temp += delta_b[ i ];
+        }
+        temp = g / temp;
+        for( i = 0; i < LTP_ORDER; i++ ) {
+            b_ptr[ i ] = b_ptr[ i ] + delta_b[ i ] * temp;
+        }
+        b_ptr += LTP_ORDER;
+    }
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_find_pitch_lags_FLP.c
@@ -1,0 +1,112 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include <stdlib.h>
+#include "SKP_Silk_main_FLP.h"
+
+void SKP_Silk_find_pitch_lags_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl,         /* I/O  Encoder control FLP                     */
+          SKP_float                 res[],              /* O    Residual                                */
+    const SKP_float                 x[]                 /* I    Speech signal                           */
+)
+{
+    SKP_Silk_predict_state_FLP *psPredSt = &psEnc->sPred;
+    const SKP_float *x_buf_ptr, *x_buf;
+    SKP_float auto_corr[ MAX_FIND_PITCH_LPC_ORDER + 1 ];
+    SKP_float A[         MAX_FIND_PITCH_LPC_ORDER ];
+    SKP_float refl_coef[ MAX_FIND_PITCH_LPC_ORDER ];
+    SKP_float Wsig[      FIND_PITCH_LPC_WIN_MAX ];
+    SKP_float thrhld, *Wsig_ptr;
+    SKP_int   buf_len;
+
+    /******************************************/
+    /* Setup buffer lengths etc based on Fs   */
+    /******************************************/
+    buf_len = psEnc->sCmn.la_pitch + psEnc->sCmn.frame_length + psEnc->sCmn.ltp_mem_length;
+
+    /* Safty check */
+    SKP_assert( buf_len >= psPredSt->pitch_LPC_win_length );
+
+    x_buf = x - psEnc->sCmn.ltp_mem_length;
+
+    /******************************************/
+    /* Estimate LPC AR coeficients            */
+    /******************************************/
+    
+    /* Calculate windowed signal */
+    
+    /* First LA_LTP samples */
+    x_buf_ptr = x_buf + buf_len - psPredSt->pitch_LPC_win_length;
+    Wsig_ptr  = Wsig;
+    SKP_Silk_apply_sine_window_FLP( Wsig_ptr, x_buf_ptr, 1, psEnc->sCmn.la_pitch );
+
+    /* Middle non-windowed samples */
+    Wsig_ptr  += psEnc->sCmn.la_pitch;
+    x_buf_ptr += psEnc->sCmn.la_pitch;
+    SKP_memcpy( Wsig_ptr, x_buf_ptr, ( psPredSt->pitch_LPC_win_length - ( psEnc->sCmn.la_pitch << 1 ) ) * sizeof( SKP_float ) );
+
+    /* Last LA_LTP samples */
+    Wsig_ptr  += psPredSt->pitch_LPC_win_length - ( psEnc->sCmn.la_pitch << 1 );
+    x_buf_ptr += psPredSt->pitch_LPC_win_length - ( psEnc->sCmn.la_pitch << 1 );
+    SKP_Silk_apply_sine_window_FLP( Wsig_ptr, x_buf_ptr, 2, psEnc->sCmn.la_pitch );
+
+    /* Calculate autocorrelation sequence */
+    SKP_Silk_autocorrelation_FLP( auto_corr, Wsig, psPredSt->pitch_LPC_win_length, psEnc->sCmn.pitchEstimationLPCOrder + 1 );
+
+    /* Add white noise, as a fraction of the energy */
+    auto_corr[ 0 ] += auto_corr[ 0 ] * FIND_PITCH_WHITE_NOISE_FRACTION;
+
+    /* Calculate the reflection coefficients using Schur */
+    SKP_Silk_schur_FLP( refl_coef, auto_corr, psEnc->sCmn.pitchEstimationLPCOrder );
+
+    /* Convert reflection coefficients to prediction coefficients */
+    SKP_Silk_k2a_FLP( A, refl_coef, psEnc->sCmn.pitchEstimationLPCOrder );
+
+    /* Bandwidth expansion */
+    SKP_Silk_bwexpander_FLP( A, psEnc->sCmn.pitchEstimationLPCOrder, FIND_PITCH_BANDWITH_EXPANSION );
+    
+    /*****************************************/
+    /* LPC analysis filtering                */
+    /*****************************************/
+    SKP_Silk_LPC_analysis_filter_FLP( res, A, x_buf, buf_len, psEnc->sCmn.pitchEstimationLPCOrder );
+    SKP_memset( res, 0, psEnc->sCmn.pitchEstimationLPCOrder * sizeof( SKP_float ) );
+
+    /* Threshold for pitch estimator */
+    thrhld  = 0.5f;
+    thrhld -= 0.004f * psEnc->sCmn.pitchEstimationLPCOrder;
+    thrhld -= 0.1f  * ( SKP_float )sqrt( psEnc->speech_activity );
+    thrhld += 0.14f * psEnc->sCmn.prev_sigtype;
+    thrhld -= 0.12f * psEncCtrl->input_tilt;
+
+    /*****************************************/
+    /* Call Pitch estimator                  */
+    /*****************************************/
+    psEncCtrl->sCmn.sigtype = SKP_Silk_pitch_analysis_core_FLP( res, psEncCtrl->sCmn.pitchL, &psEncCtrl->sCmn.lagIndex, 
+        &psEncCtrl->sCmn.contourIndex, &psEnc->LTPCorr, psEnc->sCmn.prevLag, psEnc->pitchEstimationThreshold, 
+        thrhld, psEnc->sCmn.fs_kHz, psEnc->sCmn.pitchEstimationComplexity, psEnc->sCmn.nb_subfr );
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_find_pred_coefs_FLP.c
@@ -1,0 +1,110 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+
+void SKP_Silk_find_pred_coefs_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,         /* I/O  Encoder state FLP               */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl,     /* I/O  Encoder control FLP             */
+    const SKP_float                 res_pitch[]     /* I    Residual from pitch analysis    */
+)
+{
+    SKP_int         i;
+    SKP_float       WLTP[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ];
+    SKP_float       invGains[ MAX_NB_SUBFR ], Wght[ MAX_NB_SUBFR ];
+    SKP_float       NLSF[ MAX_LPC_ORDER ];
+    const SKP_float *x_ptr;
+    SKP_float       *x_pre_ptr, LPC_in_pre[ MAX_NB_SUBFR * MAX_LPC_ORDER + MAX_FRAME_LENGTH ];
+
+
+    /* Weighting for weighted least squares */
+    for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
+        SKP_assert( psEncCtrl->Gains[ i ] > 0.0f );
+        invGains[ i ] = 1.0f / psEncCtrl->Gains[ i ];
+        Wght[ i ]     = invGains[ i ] * invGains[ i ];
+    }
+
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        /**********/
+        /* VOICED */
+        /**********/
+        SKP_assert( psEnc->sCmn.ltp_mem_length - psEnc->sCmn.predictLPCOrder >= psEncCtrl->sCmn.pitchL[ 0 ] + LTP_ORDER / 2 );
+
+        /* LTP analysis */
+        SKP_Silk_find_LTP_FLP( psEncCtrl->LTPCoef, WLTP, &psEncCtrl->LTPredCodGain, res_pitch, 
+            psEncCtrl->sCmn.pitchL, Wght, psEnc->sCmn.subfr_length,
+            psEnc->sCmn.nb_subfr, psEnc->sCmn.ltp_mem_length );
+
+        /* Quantize LTP gain parameters */
+        SKP_Silk_quant_LTP_gains_FLP( psEncCtrl->LTPCoef, psEncCtrl->sCmn.LTPIndex, &psEncCtrl->sCmn.PERIndex, 
+            WLTP, psEnc->mu_LTP, psEnc->sCmn.LTPQuantLowComplexity , psEnc->sCmn.nb_subfr );
+
+        /* Control LTP scaling */
+        SKP_Silk_LTP_scale_ctrl_FLP( psEnc, psEncCtrl );
+
+        /* Create LTP residual */
+        SKP_Silk_LTP_analysis_filter_FLP( LPC_in_pre, psEnc->x_buf + psEnc->sCmn.ltp_mem_length - psEnc->sCmn.predictLPCOrder, 
+            psEncCtrl->LTPCoef, psEncCtrl->sCmn.pitchL, invGains, psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr, psEnc->sCmn.predictLPCOrder );
+
+    } else {
+        /************/
+        /* UNVOICED */
+        /************/
+        /* Create signal with prepended subframes, scaled by inverse gains */
+        x_ptr     = psEnc->x_buf + psEnc->sCmn.ltp_mem_length - psEnc->sCmn.predictLPCOrder;
+        x_pre_ptr = LPC_in_pre;
+        for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
+            SKP_Silk_scale_copy_vector_FLP( x_pre_ptr, x_ptr, invGains[ i ], 
+                psEnc->sCmn.subfr_length + psEnc->sCmn.predictLPCOrder );
+            x_pre_ptr += psEnc->sCmn.subfr_length + psEnc->sCmn.predictLPCOrder;
+            x_ptr     += psEnc->sCmn.subfr_length;
+        }
+
+        SKP_memset( psEncCtrl->LTPCoef, 0, psEnc->sCmn.nb_subfr * LTP_ORDER * sizeof( SKP_float ) );
+        psEncCtrl->LTPredCodGain = 0.0f;
+    }
+
+    /* LPC_in_pre contains the LTP-filtered input for voiced, and the unfiltered input for unvoiced */
+    SKP_Silk_find_LPC_FLP( NLSF, &psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEnc->sPred.prev_NLSFq, 
+        psEnc->sCmn.useInterpolatedNLSFs * ( 1 - psEnc->sCmn.first_frame_after_reset ), psEnc->sCmn.predictLPCOrder, 
+        LPC_in_pre, psEnc->sCmn.subfr_length + psEnc->sCmn.predictLPCOrder, psEnc->sCmn.nb_subfr );
+
+
+    /* Quantize LSFs */
+    SKP_Silk_process_NLSFs_FLP( psEnc, psEncCtrl, NLSF );
+
+    /* Calculate residual energy using quantized LPC coefficients */
+    SKP_Silk_residual_energy_FLP( psEncCtrl->ResNrg, LPC_in_pre, psEncCtrl->PredCoef, psEncCtrl->Gains,
+        psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr, psEnc->sCmn.predictLPCOrder );
+
+    /* Copy to prediction struct for use in next frame for fluctuation reduction */
+    SKP_memcpy( psEnc->sPred.prev_NLSFq, NLSF, psEnc->sCmn.predictLPCOrder * sizeof( SKP_float ) );
+
+
+}
+
--- /dev/null
+++ b/src_FLP/SKP_Silk_init_encoder_FLP.c
@@ -1,0 +1,63 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include <stdlib.h>
+#include "SKP_Silk_main_FLP.h"
+
+/*********************************/
+/* Initialize Silk Encoder state */
+/*********************************/
+SKP_int SKP_Silk_init_encoder_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc              /* I/O  Encoder state FLP                       */
+) {
+    SKP_int ret = 0;
+
+    /* Clear the entire encoder state */
+    SKP_memset( psEnc, 0, sizeof( SKP_Silk_encoder_state_FLP ) );
+
+    /* Initialize to 24 kHz API sampling, 24 kHz max internal sampling, 20 ms packets, 25 kbps, 0% packet loss, and init non-zero values */
+    ret = SKP_Silk_control_encoder_FLP( psEnc, 24000, 24, 20, 25, 0, 0, 0, 10, 0 );
+
+#if HIGH_PASS_INPUT
+    psEnc->variable_HP_smth1 = SKP_Silk_log2( 70.0 );
+    psEnc->variable_HP_smth2 = SKP_Silk_log2( 70.0 );
+#endif
+
+    /* Used to deactivate e.g. LSF interpolation and fluctuation reduction */
+    psEnc->sCmn.first_frame_after_reset = 1;
+    psEnc->sCmn.fs_kHz_changed          = 0;
+    psEnc->sCmn.LBRR_enabled            = 0;
+
+    /* Initialize Silk VAD */
+    ret += SKP_Silk_VAD_Init( &psEnc->sCmn.sVAD );
+
+    /* Initialize NSQ */
+    psEnc->sNSQ.prev_inv_gain_Q16      = 65536;
+    psEnc->sNSQ_LBRR.prev_inv_gain_Q16 = 65536;
+
+    return( ret );
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_main_FLP.h
@@ -1,0 +1,435 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_MAIN_FLP_H
+#define SKP_SILK_MAIN_FLP_H
+
+#include "SKP_Silk_SigProc_FLP.h"
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_structs_FLP.h"
+#include "SKP_Silk_tables_FLP.h"
+#include "SKP_Silk_main.h"
+#include "SKP_Silk_define_FLP.h"
+
+/* uncomment to compile without SSE optimizations */
+//#undef SKP_USE_SSE
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+void SKP_Silk_LBRR_ctrl_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I    Encoder state FLP                       */
+    SKP_Silk_encoder_control        *psEncCtrl          /* I/O  Encoder control                         */
+);
+
+void SKP_Silk_LTP_scale_ctrl_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl          /* I/O  Encoder control FLP                     */
+);
+
+void SKP_Silk_quant_LTP_gains_FLP(
+          SKP_float B[ MAX_NB_SUBFR * LTP_ORDER ],          /* I/O  (Un-)quantized LTP gains                */
+          SKP_int   cbk_index[ MAX_NB_SUBFR ],              /* O    Codebook index                          */
+          SKP_int   *periodicity_index,                     /* O    Periodicity index                       */
+    const SKP_float W[ MAX_NB_SUBFR*LTP_ORDER*LTP_ORDER ],  /* I    Error weights                           */
+    const SKP_float mu,                                     /* I    Mu value (R/D tradeoff)                 */
+    const SKP_int   lowComplexity,                          /* I    Flag for low complexity                 */
+    const SKP_int   nb_subfr                                /* I    number of subframes                     */
+);
+
+/*********************/
+/* Encoder Functions */
+/*********************/
+
+/* High-pass filter with cutoff frequency adaptation based on pitch lag statistics */
+void SKP_Silk_HP_variable_cutoff_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl,         /* I/O  Encoder control FLP                     */
+          SKP_int16                 *out,               /* O    High-pass filtered output signal        */
+    const SKP_int16                 *in                 /* I    Input signal                            */
+);
+
+/* Encoder main function */
+SKP_int SKP_Silk_encode_frame_FLP( 
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+          SKP_uint8                 *pCode,             /* O    Payload                                 */
+          SKP_int16                 *pnBytesOut,        /* I/O  Number of payload bytes;                */
+                                                        /*      input: max length; output: used         */
+    const SKP_int16                 *pIn                /* I    Input speech frame                      */
+);
+
+/* Limit, stabilize, and quantize NLSFs */
+void SKP_Silk_process_NLSFs_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl,         /* I/O  Encoder control FLP                     */
+    SKP_float                       *pNLSF              /* I/O  NLSFs (quantized output)                */
+);
+
+/* Low Bitrate Redundancy (LBRR) encoding. Reuse all parameters but encode with lower bitrate           */
+void SKP_Silk_LBRR_encode_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl,         /* I/O  Encoder control FLP                     */
+          SKP_uint8                 *pCode,             /* O    Payload                                 */
+          SKP_int16                 *pnBytesOut,        /* I/O  Payload bytes; in: max; out: used       */
+    const SKP_float                 xfw[]               /* I    Input signal                            */
+);
+
+/* Initializes the Silk encoder state */
+SKP_int SKP_Silk_init_encoder_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc              /* I/O  Encoder state FLP                       */
+);
+
+/* Control the Silk encoder */
+SKP_int SKP_Silk_control_encoder_FLP( 
+    SKP_Silk_encoder_state_FLP  *psEnc,             /* I/O  Pointer to Silk encoder state FLP               */
+    const SKP_int32             API_fs_Hz,          /* I    External (API) sampling rate (Hz)               */
+    const SKP_int               max_internal_fs_kHz,/* I    Maximum internal sampling rate (kHz)            */
+    const SKP_int               PacketSize_ms,      /* I    Packet length (ms)                              */
+    SKP_int32                   TargetRate_bps,     /* I    Target max bitrate (bps) (used if SNR_dB == 0)  */
+    const SKP_int               PacketLoss_perc,    /* I    Packet loss rate (in percent)                   */
+    const SKP_int               INBandFEC_enabled,  /* I    Enable (1) / disable (0) inband FEC             */
+    const SKP_int               DTX_enabled,        /* I    Enable / disable DTX                            */
+    const SKP_int               InputFramesize_ms,  /* I    Inputframe in ms                                */
+    const SKP_int               Complexity          /* I    Complexity (0->low; 1->medium; 2->high)         */
+);
+
+/****************/
+/* Prefiltering */
+/****************/
+/* Main Prefilter Function */
+void SKP_Silk_prefilter_FLP(
+    SKP_Silk_encoder_state_FLP          *psEnc,         /* I/O  Encoder state FLP                       */
+    const SKP_Silk_encoder_control_FLP  *psEncCtrl,     /* I    Encoder control FLP                     */
+          SKP_float                     xw[],           /* O    Weighted signal                         */
+    const SKP_float                     x[]             /* I    Speech signal                           */
+);
+
+/**************************/
+/* Noise shaping analysis */
+/**************************/
+/* Compute noise shaping coefficients and initial gain values */
+void SKP_Silk_noise_shape_analysis_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl,         /* I/O  Encoder control FLP                     */
+    const SKP_float                 *pitch_res,         /* I    LPC residual from pitch analysis        */
+    const SKP_float                 *x                  /* I    Input signal [frame_length + la_shape]  */
+);
+
+/* Autocorrelations for a warped frequency axis */
+void SKP_Silk_warped_autocorrelation_FLP( 
+          SKP_float                 *corr,              /* O    Result [order + 1]                      */
+    const SKP_float                 *input,             /* I    Input data to correlate                 */
+    const SKP_float                 warping,            /* I    Warping coefficient                     */
+    const SKP_int                   length,             /* I    Length of input                         */
+    const SKP_int                   order               /* I    Correlation order (even)                */
+);
+
+/**************/
+/* Find pitch */
+/**************/
+void SKP_Silk_find_pitch_lags_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl,         /* I/O  Encoder control FLP                     */
+          SKP_float                 res[],              /* O    Residual                                */
+    const SKP_float                 x[]                 /* I    Speech signal                           */
+);
+
+/******************/
+/* NLSF Quantizer */
+/******************/
+/* NLSF vector encoder */
+void SKP_Silk_NLSF_MSVQ_encode_FLP(
+          SKP_int                   *NLSFIndices,       /* O    Codebook path vector [ CB_STAGES ]      */
+          SKP_float                 *pNLSF,             /* I/O  Quantized NLSF vector [ LPC_ORDER ]     */
+    const SKP_Silk_NLSF_CB_FLP      *psNLSF_CB_FLP,     /* I    Codebook object                         */
+    const SKP_float                 *pNLSF_q_prev,      /* I    Prev. quantized NLSF vector [LPC_ORDER] */
+    const SKP_float                 *pW,                /* I    NLSF weight vector [ LPC_ORDER ]        */
+    const SKP_float                 NLSF_mu,            /* I    Rate weight for the RD optimization     */
+    const SKP_float                 NLSF_mu_fluc_red,   /* I    Fluctuation reduction error weight      */
+    const SKP_int                   NLSF_MSVQ_Survivors,/* I    Max survivors from each stage           */
+    const SKP_int                   LPC_order,          /* I    LPC order                               */
+    const SKP_int                   deactivate_fluc_red /* I    Deactivate fluctuation reduction        */
+);
+
+/* NLSF vector decoder */
+void SKP_Silk_NLSF_MSVQ_decode_FLP(
+          SKP_float                 *pNLSF,             /* O    Decoded output vector [ LPC_ORDER ]     */
+    const SKP_Silk_NLSF_CB_FLP      *psNLSF_CB_FLP,     /* I    NLSF codebook struct                    */
+    const SKP_int                   *NLSFIndices,       /* I    NLSF indices [ nStages ]                */
+    const SKP_int                   LPC_order           /* I    LPC order used                          */
+);
+
+/* Rate-Distortion calculations for multiple input data vectors */
+void SKP_Silk_NLSF_VQ_rate_distortion_FLP(
+          SKP_float             *pRD,               /* O   Rate-distortion values [psNLSF_CBS_FLP->nVectors*N] */
+    const SKP_Silk_NLSF_CBS_FLP *psNLSF_CBS_FLP,    /* I   NLSF codebook stage struct                          */
+    const SKP_float             *in,                /* I   Input vectors to be quantized                       */
+    const SKP_float             *w,                 /* I   Weight vector                                       */
+    const SKP_float             *rate_acc,          /* I   Accumulated rates from previous stage               */
+    const SKP_float             mu,                 /* I   Weight between weighted error and rate              */
+    const SKP_int               N,                  /* I   Number of input vectors to be quantized             */
+    const SKP_int               LPC_order           /* I   LPC order                                           */
+);
+
+/* compute weighted quantization errors for LPC_order element input vectors, over one codebook stage */
+void SKP_Silk_NLSF_VQ_sum_error_FLP(
+          SKP_float                 *err,               /* O    Weighted quantization errors [ N * K ]  */
+    const SKP_float                 *in,                /* I    Input vectors [ N * LPC_order ]         */
+    const SKP_float                 *w,                 /* I    Weighting vectors [ N * LPC_order ]     */
+    const SKP_float                 *pCB,               /* I    Codebook vectors [ K * LPC_order ]      */
+    const SKP_int                   N,                  /* I    Number of input vectors                 */
+    const SKP_int                   K,                  /* I    Number of codebook vectors              */
+    const SKP_int                   LPC_order           /* I    LPC order                               */
+);
+
+/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */
+SKP_float SKP_Silk_residual_energy_covar_FLP(           /* O    Weighted residual energy                */
+    const SKP_float                 *c,                 /* I    Filter coefficients                     */
+          SKP_float                 *wXX,               /* I/O  Weighted correlation matrix, reg. out   */
+    const SKP_float                 *wXx,               /* I    Weighted correlation vector             */
+    const SKP_float                 wxx,                /* I    Weighted correlation value              */
+    const SKP_int                   D                   /* I    Dimension                               */
+);
+
+/* Entropy constrained MATRIX-weighted VQ, for a single input data vector */
+void SKP_Silk_VQ_WMat_EC_FLP(
+          SKP_int                   *ind,               /* O    Index of best codebook vector           */
+          SKP_float                 *rate_dist,         /* O    Best weighted quant. error + mu * rate  */
+    const SKP_float                 *in,                /* I    Input vector to be quantized            */
+    const SKP_float                 *W,                 /* I    Weighting matrix                        */
+    const SKP_int16                 *cb,                /* I    Codebook                                */
+    const SKP_int16                 *cl_Q6,             /* I    Code length for each codebook vector    */
+    const SKP_float                 mu,                 /* I    Tradeoff between WSSE and rate          */
+    const SKP_int                   L                   /* I    Number of vectors in codebook           */
+);
+
+/* Processing of gains */
+void SKP_Silk_process_gains_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl          /* I/O  Encoder control FLP                     */
+);
+
+void SKP_Silk_find_LTP_FLP(
+          SKP_float b[ MAX_NB_SUBFR * LTP_ORDER ],          /* O    LTP coefs                               */
+          SKP_float WLTP[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* O    Weight for LTP quantization       */
+          SKP_float *LTPredCodGain,                         /* O    LTP coding gain                         */
+    const SKP_float r_lpc[],                                /* I    LPC residual                            */
+    const SKP_int   lag[  MAX_NB_SUBFR ],                   /* I    LTP lags                                */
+    const SKP_float Wght[ MAX_NB_SUBFR ],                   /* I    Weights                                 */
+    const SKP_int   subfr_length,                           /* I    Subframe length                         */
+    const SKP_int   nb_subfr,                               /* I    number of subframes                     */
+    const SKP_int   mem_offset                              /* I    Number of samples in LTP memory         */
+);
+
+void SKP_Silk_find_LPC_FLP(
+          SKP_float                 NLSF[],             /* O    NLSFs                                   */
+          SKP_int                   *interpIndex,       /* O    NLSF interp. index for NLSF interp.     */
+    const SKP_float                 prev_NLSFq[],       /* I    Previous NLSFs, for NLSF interpolation  */
+    const SKP_int                   useInterpNLSFs,     /* I    Flag                                    */
+    const SKP_int                   LPC_order,          /* I    LPC order                               */
+    const SKP_float                 x[],                /* I    Input signal                            */
+    const SKP_int                   subfr_length,       /* I    Subframe length incl preceeding samples */
+    const SKP_int                   nb_subfr            /* I:   Number of subframes                     */
+);
+
+void SKP_Silk_LTP_analysis_filter_FLP(
+          SKP_float         *LTP_res,                   /* O    LTP res MAX_NB_SUBFR*(pre_lgth+subfr_lngth) */
+    const SKP_float         *x,                         /* I    Input signal, with preceeding samples       */
+    const SKP_float         B[ LTP_ORDER * MAX_NB_SUBFR ],  /* I    LTP coefficients for each subframe      */
+    const SKP_int           pitchL[   MAX_NB_SUBFR ],   /* I    Pitch lags                                  */
+    const SKP_float         invGains[ MAX_NB_SUBFR ],   /* I    Inverse quantization gains                  */
+    const SKP_int           subfr_length,               /* I    Length of each subframe                     */
+    const SKP_int           nb_subfr,                   /* I    number of subframes                         */
+    const SKP_int           pre_length                  /* I    Preceeding samples for each subframe        */
+);
+
+void SKP_Silk_residual_energy_FLP(  
+          SKP_float             nrgs[ MAX_NB_SUBFR ],   /* O    Residual energy per subframe            */
+    const SKP_float             x[],                    /* I    Input signal                            */
+    const SKP_float             a[ 2 ][ MAX_LPC_ORDER ],/* I    AR coefs for each frame half            */
+    const SKP_float             gains[],                /* I    Quantization gains                      */
+    const SKP_int               subfr_length,           /* I    Subframe length                         */
+    const SKP_int               nb_subfr,               /* I    number of subframes                     */
+    const SKP_int               LPC_order               /* I    LPC order                               */
+);
+
+void SKP_Silk_find_pred_coefs_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl,         /* I/O  Encoder control FLP                     */
+    const SKP_float                 res_pitch[]         /* I    Residual from pitch analysis            */
+);
+
+/* 16th order LPC analysis filter */
+void SKP_Silk_LPC_analysis_filter_FLP(
+          SKP_float                 r_LPC[],            /* O    LPC residual signal                     */
+    const SKP_float                 PredCoef[],         /* I    LPC coefficients                        */
+    const SKP_float                 s[],                /* I    Input signal                            */
+    const SKP_int                   length,             /* I    Length of input signal                  */
+    const SKP_int                   Order               /* I    LPC order                               */
+);
+
+/* 16th order LPC analysis filter, does not write first 16 samples */
+void SKP_Silk_LPC_analysis_filter16_FLP(
+          SKP_float                 r_LPC[],            /* O    LPC residual signal                     */
+    const SKP_float                 PredCoef[],         /* I    LPC coefficients                        */
+    const SKP_float                 s[],                /* I    Input signal                            */
+    const SKP_int                   length              /* I    Length of input signal                  */
+);
+
+/* 12th order LPC analysis filter, does not write first 12 samples */
+void SKP_Silk_LPC_analysis_filter12_FLP(
+          SKP_float                 r_LPC[],            /* O    LPC residual signal                     */
+    const SKP_float                 PredCoef[],         /* I    LPC coefficients                        */
+    const SKP_float                 s[],                /* I    Input signal                            */
+    const SKP_int                   length              /* I    Length of input signal                  */
+);
+
+/* 10th order LPC analysis filter, does not write first 10 samples */
+void SKP_Silk_LPC_analysis_filter10_FLP(
+          SKP_float                 r_LPC[],            /* O    LPC residual signal                     */
+    const SKP_float                 PredCoef[],         /* I    LPC coefficients                        */
+    const SKP_float                 s[],                /* I    Input signal                            */
+    const SKP_int                   length              /* I    Length of input signal                  */
+);
+
+/* 8th order LPC analysis filter, does not write first 8 samples */
+void SKP_Silk_LPC_analysis_filter8_FLP(
+          SKP_float                 r_LPC[],            /* O    LPC residual signal                     */
+    const SKP_float                 PredCoef[],         /* I    LPC coefficients                        */
+    const SKP_float                 s[],                /* I    Input signal                            */
+    const SKP_int                   length              /* I    Length of input signal                  */
+);
+
+/******************/
+/* Linear Algebra */
+/******************/
+/* Calculates correlation matrix X'*X */
+void SKP_Silk_corrMatrix_FLP(
+    const SKP_float                 *x,                 /* I    x vector [ L+order-1 ] used to create X */
+    const SKP_int                   L,                  /* I    Length of vectors                       */
+    const SKP_int                   Order,              /* I    Max lag for correlation                 */
+          SKP_float                 *XX                 /* O    X'*X correlation matrix [order x order] */
+);
+
+/* Calculates correlation vector X'*t */
+void SKP_Silk_corrVector_FLP(
+    const SKP_float                 *x,                 /* I    x vector [L+order-1] used to create X   */
+    const SKP_float                 *t,                 /* I    Target vector [L]                       */
+    const SKP_int                   L,                  /* I    Length of vecors                        */
+    const SKP_int                   Order,              /* I    Max lag for correlation                 */
+          SKP_float                 *Xt                 /* O    X'*t correlation vector [order]         */
+);
+
+void SKP_Silk_regularize_correlations_FLP(
+          SKP_float                 *XX,                /* I/O  Correlation matrices                    */
+          SKP_float                 *xx,                /* I/O  Correlation values                      */
+    const SKP_float                 noise,              /* I    Noise energy to add                     */
+    const SKP_int                   D                   /* I    Dimension of XX                         */
+);
+
+/* Function to solve linear equation Ax = b, when A is an MxM symmetric square matrix */
+void SKP_Silk_solve_LDL_FLP(
+          SKP_float                 *A,                 /* I/O  Symmetric square matrix, out: reg.      */
+    const SKP_int                   M,                  /* I    Size of matrix                          */
+    const SKP_float                 *b,                 /* I    Pointer to b vector                     */
+          SKP_float                 *x                  /* O    Pointer to x solution vector            */
+);
+
+/* Apply sine window to signal vector.                                                                  */
+/* Window types:                                                                                        */
+/*  0 -> sine window from 0 to pi                                                                       */
+/*  1 -> sine window from 0 to pi/2                                                                     */
+/*  2 -> sine window from pi/2 to pi                                                                    */
+void SKP_Silk_apply_sine_window_FLP(
+          SKP_float                 px_win[],           /* O    Pointer to windowed signal              */
+    const SKP_float                 px[],               /* I    Pointer to input signal                 */
+    const SKP_int                   win_type,           /* I    Selects a window type                   */
+    const SKP_int                   length              /* I    Window length, multiple of 4            */
+);
+
+/* Wrappers. Calls flp / fix code */
+
+/* Convert AR filter coefficients to NLSF parameters */
+void SKP_Silk_A2NLSF_FLP( 
+          SKP_float                 *pNLSF,             /* O    NLSF vector      [ LPC_order ]          */
+    const SKP_float                 *pAR,               /* I    LPC coefficients [ LPC_order ]          */
+    const SKP_int                   LPC_order           /* I    LPC order                               */
+);
+
+/* Convert NLSF parameters to AR prediction filter coefficients */
+void SKP_Silk_NLSF2A_stable_FLP( 
+          SKP_float                 *pAR,               /* O    LPC coefficients [ LPC_order ]          */
+    const SKP_float                 *pNLSF,             /* I    NLSF vector      [ LPC_order ]          */
+    const SKP_int                   LPC_order           /* I    LPC order                               */
+);
+
+/* NLSF stabilizer, for a single input data vector */
+void SKP_Silk_NLSF_stabilize_FLP(
+          SKP_float                 *pNLSF,             /* I/O  (Un)stable NLSF vector [ LPC_order ]    */
+    const SKP_float                 *pNDelta_min,       /* I    Normalized delta min vector[LPC_order+1]*/
+    const SKP_int                   LPC_order           /* I    LPC order                               */
+);
+
+/* Interpolation function with fixed point rounding */
+void SKP_Silk_interpolate_wrapper_FLP(
+          SKP_float                 xi[],               /* O    Interpolated vector                     */
+    const SKP_float                 x0[],               /* I    First vector                            */
+    const SKP_float                 x1[],               /* I    Second vector                           */
+    const SKP_float                 ifact,              /* I    Interp. factor, weight on second vector */
+    const SKP_int                   d                   /* I    Number of parameters                    */
+);
+
+/****************************************/
+/* Floating-point Silk VAD wrapper      */
+/****************************************/
+SKP_int SKP_Silk_VAD_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl,         /* I/O  Encoder control FLP                     */
+    const SKP_int16                 *pIn                /* I    Input signal                            */
+);
+
+/****************************************/
+/* Floating-point Silk NSQ wrapper      */
+/****************************************/
+void SKP_Silk_NSQ_wrapper_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,         /* I/O  Encoder state FLP                           */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl,     /* I/O  Encoder control FLP                         */
+    const SKP_float                 x[],            /* I    Prefiltered input signal                    */
+          SKP_int8                  q[],            /* O    Quantized pulse signal                      */
+    const SKP_int                   useLBRR         /* I    LBRR flag                                   */
+);
+
+/* using log2() helps the fixed-point conversion */
+SKP_INLINE SKP_float SKP_Silk_log2( double x ) { return ( SKP_float )( 3.32192809488736 * log10( x ) ); }
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+++ b/src_FLP/SKP_Silk_noise_shape_analysis_FLP.c
@@ -1,0 +1,367 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+#include "SKP_Silk_perceptual_parameters.h"
+
+/* Compute gain to make warped filter coefficients have a zero mean log frequency response on a     */
+/* non-warped frequency scale. (So that it can be implemented with a minimum-phase monic filter.)   */
+SKP_INLINE SKP_float warped_gain( 
+    const SKP_float     *coefs, 
+    SKP_float           lambda, 
+    SKP_int             order 
+) {
+    SKP_int   i;
+    SKP_float gain;
+
+    lambda = -lambda;
+    gain = coefs[ order - 1 ];
+    for( i = order - 2; i >= 0; i-- ) {
+        gain = lambda * gain + coefs[ i ];
+    }
+    return (SKP_float)( 1.0f / ( 1.0f - lambda * gain ) );
+}
+
+/* Convert warped filter coefficients to monic pseudo-warped coefficients */
+SKP_INLINE void warped_true2monic_coefs( 
+    SKP_float           *coefs, 
+    SKP_float           lambda, 
+    SKP_int             order 
+) {
+    SKP_int   i;
+    SKP_float gain;
+
+    lambda = -lambda;
+    for( i = order - 1; i > 0; i-- ) {
+        coefs[ i - 1 ] += lambda * coefs[ i ];
+    }
+    gain = ( 1.0f - lambda * lambda ) / ( 1.0f - lambda * coefs[ 0 ] );
+    for( i = 0; i < order; i++ ) {
+        coefs[ i ] *= gain;
+    }
+}
+
+/* Limit max amplitude of monic warped coefficients by using bandwidth expansion on the true coefficients */
+SKP_INLINE void limit_warped_coefs( 
+    SKP_float           *coefs_syn,
+    SKP_float           *coefs_ana,
+    SKP_float           lambda,
+    SKP_float           limit,
+    SKP_int             order
+) {
+    SKP_int   i, iter, ind;
+    SKP_float tmp, maxabs, chirp;
+
+    for( iter = 0; iter < 10; iter++ ) {
+        /* Find maximum absolute value */
+        ind = 1;
+        maxabs = SKP_abs( coefs_syn[ ind ] );
+        for( i = 2; i < order - 1; i++ ) {
+            tmp = SKP_abs( coefs_syn[ i ] );
+            if( tmp > maxabs ) {
+                maxabs = tmp;
+                ind = i;
+            }
+        }
+        if( maxabs <= limit ) {
+            return;
+        }
+
+        /* Convert to true warped coefficients */
+        for( i = 1; i < order; i++ ) {
+            coefs_syn[ i - 1 ] += lambda * coefs_syn[ i ];
+            coefs_ana[ i - 1 ] += lambda * coefs_ana[ i ];
+        }
+
+        /* Apply bandwidth expansion */
+        chirp = 0.99f - ( 0.8f + 0.1f * iter ) * ( maxabs - limit ) / ( maxabs * ( ind + 1 ) );
+        SKP_Silk_bwexpander_FLP( coefs_syn, order, chirp );
+        SKP_Silk_bwexpander_FLP( coefs_ana, order, chirp );
+
+        /* Convert back to monic warped coefficients */
+        for( i = order - 1; i > 0; i-- ) {
+            coefs_syn[ i - 1 ] -= lambda * coefs_syn[ i ];
+            coefs_ana[ i - 1 ] -= lambda * coefs_ana[ i ];
+        }
+    }
+}
+
+/* Compute noise shaping coefficients and initial gain values */
+void SKP_Silk_noise_shape_analysis_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl,         /* I/O  Encoder control FLP                     */
+    const SKP_float                 *pitch_res,         /* I    LPC residual from pitch analysis        */
+    const SKP_float                 *x                  /* I    Input signal [frame_length + la_shape]  */
+)
+{
+    SKP_Silk_shape_state_FLP *psShapeSt = &psEnc->sShape;
+    SKP_int     k, nSamples;
+    SKP_float   SNR_adj_dB, HarmBoost, HarmShapeGain, Tilt;
+    SKP_float   nrg, pre_nrg, log_energy, log_energy_prev, energy_variation;
+    SKP_float   delta, BWExp1, BWExp2, gain_mult, gain_add, strength, b, warping;
+    SKP_float   x_windowed[ SHAPE_LPC_WIN_MAX ];
+    SKP_float   auto_corr[ MAX_SHAPE_LPC_ORDER + 1 ];
+    const SKP_float *x_ptr, *pitch_res_ptr;
+
+    /* Point to start of first LPC analysis block */
+    x_ptr = x + psEnc->sCmn.la_shape - SHAPE_LPC_WIN_MS * psEnc->sCmn.fs_kHz + psEnc->sCmn.subfr_length;
+
+    /****************/
+    /* CONTROL SNR  */
+    /****************/
+    /* Reduce SNR_dB values if recent bitstream has exceeded TargetRate */
+    psEncCtrl->current_SNR_dB = psEnc->SNR_dB - 0.05f * psEnc->BufferedInChannel_ms;
+
+    /* Reduce SNR_dB if inband FEC used */
+    if( psEnc->speech_activity > LBRR_SPEECH_ACTIVITY_THRES ) {
+        psEncCtrl->current_SNR_dB -= psEnc->inBandFEC_SNR_comp;
+    }
+
+    /****************/
+    /* GAIN CONTROL */
+    /****************/
+    /* Input quality is the average of the quality in the lowest two VAD bands */
+    psEncCtrl->input_quality = 0.5f * ( psEncCtrl->input_quality_bands[ 0 ] + psEncCtrl->input_quality_bands[ 1 ] );
+
+    /* Coding quality level, between 0.0 and 1.0 */
+    psEncCtrl->coding_quality = SKP_sigmoid( 0.25f * ( psEncCtrl->current_SNR_dB - 17.0f ) );
+
+    /* Reduce coding SNR during low speech activity */
+    b = 1.0f - psEnc->speech_activity;
+    SNR_adj_dB = psEncCtrl->current_SNR_dB - 
+        BG_SNR_DECR_dB * psEncCtrl->coding_quality * ( 0.5f + 0.5f * psEncCtrl->input_quality ) * b * b;
+
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        /* Reduce gains for periodic signals */
+        SNR_adj_dB += HARM_SNR_INCR_dB * psEnc->LTPCorr;
+    } else { 
+        /* For unvoiced signals and low-quality input, adjust the quality slower than SNR_dB setting */
+        SNR_adj_dB += ( -0.4f * psEncCtrl->current_SNR_dB + 6.0f ) * ( 1.0f - psEncCtrl->input_quality );
+    }
+
+    /*************************/
+    /* SPARSENESS PROCESSING */
+    /*************************/
+    /* Set quantizer offset */
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        /* Initally set to 0; may be overruled in process_gains(..) */
+        psEncCtrl->sCmn.QuantOffsetType = 0;
+        psEncCtrl->sparseness = 0.0f;
+    } else {
+        /* Sparseness measure, based on relative fluctuations of energy per 2 milliseconds */
+        nSamples = 2 * psEnc->sCmn.fs_kHz;
+        energy_variation = 0.0f;
+        log_energy_prev  = 0.0f;
+        pitch_res_ptr = pitch_res;
+        for( k = 0; k < SKP_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr ) / 2; k++ ) {
+            nrg = ( SKP_float )nSamples + ( SKP_float )SKP_Silk_energy_FLP( pitch_res_ptr, nSamples );
+            log_energy = SKP_Silk_log2( nrg );
+            if( k > 0 ) {
+                energy_variation += SKP_abs_float( log_energy - log_energy_prev );
+            }
+            log_energy_prev = log_energy;
+            pitch_res_ptr += nSamples;
+        }
+        psEncCtrl->sparseness = SKP_sigmoid( 0.4f * ( energy_variation - 5.0f ) );
+
+        /* Set quantization offset depending on sparseness measure */
+        if( psEncCtrl->sparseness > SPARSENESS_THRESHOLD_QNT_OFFSET ) {
+            psEncCtrl->sCmn.QuantOffsetType = 0;
+        } else {
+            psEncCtrl->sCmn.QuantOffsetType = 1;
+        }
+        
+        /* Increase coding SNR for sparse signals */
+        SNR_adj_dB += SPARSE_SNR_INCR_dB * ( psEncCtrl->sparseness - 0.5f );
+    }
+
+    /*******************************/
+    /* Control bandwidth expansion */
+    /*******************************/
+    delta  = LOW_RATE_BANDWIDTH_EXPANSION_DELTA * ( 1.0f - 0.75f * psEncCtrl->coding_quality );
+    BWExp1 = BANDWIDTH_EXPANSION - delta;
+    BWExp2 = BANDWIDTH_EXPANSION + delta;
+    if( psEnc->sCmn.fs_kHz == 24 ) {
+        /* Less bandwidth expansion for super wideband */
+        BWExp1 = 1.0f - ( 1.0f - BWExp1 ) * SWB_BANDWIDTH_EXPANSION_REDUCTION;
+        BWExp2 = 1.0f - ( 1.0f - BWExp2 ) * SWB_BANDWIDTH_EXPANSION_REDUCTION;
+    }
+    /* BWExp1 will be applied after BWExp2, so make it relative */
+    BWExp1 /= BWExp2;
+
+    /* Warping coefficient */
+    psEncCtrl->sCmn.warping_Q16 = psEnc->sCmn.fs_kHz * WARPING_MULTIPLIER_Q16;
+    psEncCtrl->sCmn.warping_Q16 = SKP_min( psEncCtrl->sCmn.warping_Q16, 32767 );
+    warping = (SKP_float)psEncCtrl->sCmn.warping_Q16 / 65536.0f;
+
+    /********************************************/
+    /* Compute noise shaping AR coefs and gains */
+    /********************************************/
+    for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+        /* Apply window */
+        SKP_Silk_apply_sine_window_FLP( x_windowed, x_ptr, 0, SHAPE_LPC_WIN_MS * psEnc->sCmn.fs_kHz );
+
+        /* Update pointer: next LPC analysis block */
+        x_ptr += psEnc->sCmn.subfr_length;
+
+        /* Calculate warped auto correlation */
+        SKP_Silk_warped_autocorrelation_FLP( auto_corr, x_windowed, warping, 
+            SHAPE_LPC_WIN_MS * psEnc->sCmn.fs_kHz, psEnc->sCmn.shapingLPCOrder );
+
+        /* Add white noise, as a fraction of energy */
+        auto_corr[ 0 ] += auto_corr[ 0 ] * SHAPE_WHITE_NOISE_FRACTION; 
+
+        /* Convert correlations to prediction coefficients, and compute residual energy */
+        nrg = SKP_Silk_levinsondurbin_FLP( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], auto_corr, psEnc->sCmn.shapingLPCOrder );
+
+        /* Convert residual energy to non-warped scale */
+        gain_mult = warped_gain( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], warping, psEnc->sCmn.shapingLPCOrder );
+        nrg *= gain_mult * gain_mult; 
+
+        /* Bandwidth expansion for synthesis filter shaping */
+        SKP_Silk_bwexpander_FLP( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], psEnc->sCmn.shapingLPCOrder, BWExp2 );
+
+        /* Compute noise shaping filter coefficients */
+        SKP_memcpy(
+            &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ], 
+            &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], 
+            psEnc->sCmn.shapingLPCOrder * sizeof( SKP_float ) );
+
+        /* Bandwidth expansion for analysis filter shaping */
+        SKP_Silk_bwexpander_FLP( &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ], psEnc->sCmn.shapingLPCOrder, BWExp1 );
+
+        /* Increase residual energy */
+        nrg += SHAPE_MIN_ENERGY_RATIO * auto_corr[ 0 ];
+        psEncCtrl->Gains[ k ] = ( SKP_float )sqrt( nrg );
+        
+        /* Ratio of prediction gains, in energy domain */
+        SKP_Silk_LPC_inverse_pred_gain_FLP( &pre_nrg, &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], psEnc->sCmn.shapingLPCOrder );
+        SKP_Silk_LPC_inverse_pred_gain_FLP( &nrg,     &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ], psEnc->sCmn.shapingLPCOrder );
+        psEncCtrl->GainsPre[ k ] = 1.0f - 0.7f * ( 1.0f - pre_nrg / nrg );
+
+        /* Convert to monic warped prediction coefficients */
+        warped_true2monic_coefs( &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ], warping, psEnc->sCmn.shapingLPCOrder );
+        warped_true2monic_coefs( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], warping, psEnc->sCmn.shapingLPCOrder );
+
+        /* Limit absolute values */
+        limit_warped_coefs( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ], 
+            warping, 3.999f, psEnc->sCmn.shapingLPCOrder );
+    }
+
+    /*****************/
+    /* Gain tweaking */
+    /*****************/
+    /* Increase gains during low speech activity and put lower limit on gains */
+    gain_mult = ( SKP_float )pow( 2.0f, -0.16f * SNR_adj_dB );
+    gain_add  = ( SKP_float )pow( 2.0f,  0.16f * NOISE_FLOOR_dB ) + 
+                ( SKP_float )pow( 2.0f,  0.16f * RELATIVE_MIN_GAIN_dB ) * psEnc->avgGain;
+    for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+        psEncCtrl->Gains[ k ] *= gain_mult;
+        psEncCtrl->Gains[ k ] += gain_add;
+        psEnc->avgGain += psEnc->speech_activity * GAIN_SMOOTHING_COEF * ( psEncCtrl->Gains[ k ] - psEnc->avgGain );
+    }
+
+    /************************************************/
+    /* Decrease level during fricatives (de-essing) */
+    /************************************************/
+    gain_mult = 1.0f + INPUT_TILT + psEncCtrl->coding_quality * HIGH_RATE_INPUT_TILT;
+    if( psEncCtrl->input_tilt <= 0.0f && psEncCtrl->sCmn.sigtype == SIG_TYPE_UNVOICED ) {
+        SKP_float essStrength = -psEncCtrl->input_tilt * psEnc->speech_activity * ( 1.0f - psEncCtrl->sparseness );
+        if( psEnc->sCmn.fs_kHz == 24 ) {
+            gain_mult *= ( SKP_float )pow( 2.0f, -0.16f * DE_ESSER_COEF_SWB_dB * essStrength );
+        } else if( psEnc->sCmn.fs_kHz == 16 ) {
+            gain_mult *= (SKP_float)pow( 2.0f, -0.16f * DE_ESSER_COEF_WB_dB * essStrength );
+        } else {
+            SKP_assert( psEnc->sCmn.fs_kHz == 12 || psEnc->sCmn.fs_kHz == 8 );
+        }
+    }
+
+    for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+        psEncCtrl->GainsPre[ k ] *= gain_mult;
+    }
+
+    /************************************************/
+    /* Control low-frequency shaping and noise tilt */
+    /************************************************/
+    /* Less low frequency shaping for noisy inputs */
+    strength = LOW_FREQ_SHAPING * ( 1.0f + LOW_QUALITY_LOW_FREQ_SHAPING_DECR * ( psEncCtrl->input_quality_bands[ 0 ] - 1.0f ) );
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        /* Reduce low frequencies quantization noise for periodic signals, depending on pitch lag */
+        /*f = 400; freqz([1, -0.98 + 2e-4 * f], [1, -0.97 + 7e-4 * f], 2^12, Fs); axis([0, 1000, -10, 1])*/
+        for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+            b = 0.2f / psEnc->sCmn.fs_kHz + 3.0f / psEncCtrl->sCmn.pitchL[ k ];
+            psEncCtrl->LF_MA_shp[ k ] = -1.0f + b;
+            psEncCtrl->LF_AR_shp[ k ] =  1.0f - b - b * strength;
+        }
+        Tilt = - HP_NOISE_COEF - 
+            (1 - HP_NOISE_COEF) * HARM_HP_NOISE_COEF * psEnc->speech_activity;
+    } else {
+        b = 1.3f / psEnc->sCmn.fs_kHz;
+        psEncCtrl->LF_MA_shp[ 0 ] = -1.0f + b;
+        psEncCtrl->LF_AR_shp[ 0 ] =  1.0f - b - b * strength * 0.6f;
+        for( k = 1; k < psEnc->sCmn.nb_subfr; k++ ) {
+            psEncCtrl->LF_MA_shp[ k ] = psEncCtrl->LF_MA_shp[ k - 1 ];
+            psEncCtrl->LF_AR_shp[ k ] = psEncCtrl->LF_AR_shp[ k - 1 ];
+        }
+        Tilt = -HP_NOISE_COEF;
+    }
+
+    /****************************/
+    /* HARMONIC SHAPING CONTROL */
+    /****************************/
+    /* Control boosting of harmonic frequencies */
+    HarmBoost = LOW_RATE_HARMONIC_BOOST * ( 1.0f - psEncCtrl->coding_quality ) * psEnc->LTPCorr;
+
+    /* More harmonic boost for noisy input signals */
+    HarmBoost += LOW_INPUT_QUALITY_HARMONIC_BOOST * ( 1.0f - psEncCtrl->input_quality );
+
+    if( USE_HARM_SHAPING && psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        /* Harmonic noise shaping */
+        HarmShapeGain = HARMONIC_SHAPING;
+
+        /* More harmonic noise shaping for high bitrates or noisy input */
+        HarmShapeGain += HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING * 
+            ( 1.0f - ( 1.0f - psEncCtrl->coding_quality ) * psEncCtrl->input_quality );
+
+        /* Less harmonic noise shaping for less periodic signals */
+        HarmShapeGain *= ( SKP_float )sqrt( psEnc->LTPCorr );
+    } else {
+        HarmShapeGain = 0.0f;
+    }
+
+    /*************************/
+    /* Smooth over subframes */
+    /*************************/
+    for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+        psShapeSt->HarmBoost_smth     += SUBFR_SMTH_COEF * ( HarmBoost - psShapeSt->HarmBoost_smth );
+        psEncCtrl->HarmBoost[ k ]      = psShapeSt->HarmBoost_smth;
+        psShapeSt->HarmShapeGain_smth += SUBFR_SMTH_COEF * ( HarmShapeGain - psShapeSt->HarmShapeGain_smth );
+        psEncCtrl->HarmShapeGain[ k ]  = psShapeSt->HarmShapeGain_smth;
+        psShapeSt->Tilt_smth          += SUBFR_SMTH_COEF * ( Tilt - psShapeSt->Tilt_smth );
+        psEncCtrl->Tilt[ k ]           = psShapeSt->Tilt_smth;
+    }
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_prefilter_FLP.c
@@ -1,0 +1,202 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+#include "SKP_Silk_perceptual_parameters.h"
+
+/*
+* SKP_Silk_prefilter. Prefilter for finding Quantizer input signal  
+*/
+SKP_INLINE void SKP_Silk_prefilt_FLP(
+    SKP_Silk_prefilter_state_FLP *P,/* I/O state */
+    SKP_float st_res[],             /* I */
+    SKP_float xw[],                 /* O */
+    SKP_float *HarmShapeFIR,        /* I */
+    SKP_float Tilt,                 /* I */
+    SKP_float LF_MA_shp,            /* I */
+    SKP_float LF_AR_shp,            /* I */
+    SKP_int   lag,                  /* I */
+    SKP_int   length                /* I */
+);
+
+void SKP_Silk_warped_LPC_analysis_filter_FLP(
+          SKP_float                 state[],            /* I/O  State [order + 1]                       */
+          SKP_float                 res[],              /* O    Residual signal [length]                */
+    const SKP_float                 coef[],             /* I    Coefficients [order]                    */
+    const SKP_float                 input[],            /* I    Input signal [length]                   */
+    const SKP_float                 lambda,             /* I    Warping factor                          */
+    const SKP_int                   length,             /* I    Length of input signal                  */
+    const SKP_int                   order               /* I    Filter order (even)                     */
+)
+{
+    SKP_int     n, i;
+    SKP_float   acc, tmp1, tmp2;
+
+    /* Order must be even */
+    SKP_assert( ( order & 1 ) == 0 );
+
+    for( n = 0; n < length; n++ ) {
+        /* Output of lowpass section */
+        tmp2 = state[ 0 ] + lambda * state[ 1 ];
+        state[ 0 ] = input[ n ];
+        /* Output of allpass section */
+        tmp1 = state[ 1 ] + lambda * ( state[ 2 ] - tmp2 );
+        state[ 1 ] = tmp2;
+        acc = coef[ 0 ] * tmp2;
+        /* Loop over allpass sections */
+        for( i = 2; i < order; i += 2 ) {
+            /* Output of allpass section */
+            tmp2 = state[ i ] + lambda * ( state[ i + 1 ] - tmp1 );
+            state[ i ] = tmp1;
+            acc += coef[ i - 1 ] * tmp1;
+            /* Output of allpass section */
+            tmp1 = state[ i + 1 ] + lambda * ( state[ i + 2 ] - tmp2 );
+            state[ i + 1 ] = tmp2;
+            acc += coef[ i ] * tmp2;
+        }
+        state[ order ] = tmp1;
+        acc += coef[ order - 1 ] * tmp1;
+        res[ n ] = input[ n ] - acc;
+    }
+}
+
+/*
+* SKP_Silk_prefilter. Main prefilter function   
+*/
+void SKP_Silk_prefilter_FLP(
+    SKP_Silk_encoder_state_FLP          *psEnc,         /* I/O  Encoder state FLP                       */
+    const SKP_Silk_encoder_control_FLP  *psEncCtrl,     /* I    Encoder control FLP                     */
+          SKP_float                     xw[],           /* O    Weighted signal                         */
+    const SKP_float                     x[]             /* I    Speech signal                           */
+)
+{
+    SKP_Silk_prefilter_state_FLP *P = &psEnc->sPrefilt;
+    SKP_int   j, k, lag;
+    SKP_float HarmShapeGain, Tilt, LF_MA_shp, LF_AR_shp;
+    SKP_float B[ 2 ];
+    const SKP_float *AR1_shp;
+    const SKP_float *px;
+    SKP_float *pxw;
+    SKP_float HarmShapeFIR[ 3 ];
+    SKP_float st_res[ MAX_SUB_FRAME_LENGTH + MAX_LPC_ORDER ];
+
+    /* Setup pointers */
+    px  = x;
+    pxw = xw;
+    lag = P->lagPrev;
+    for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+        /* Update Variables that change per sub frame */
+        if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+            lag = psEncCtrl->sCmn.pitchL[ k ];
+        }
+
+        /* Noise shape parameters */
+        HarmShapeGain = psEncCtrl->HarmShapeGain[ k ] * ( 1.0f - psEncCtrl->HarmBoost[ k ] );
+        HarmShapeFIR[ 0 ] = SKP_Silk_HarmShapeFIR_FLP[ 0 ] * HarmShapeGain;
+        HarmShapeFIR[ 1 ] = SKP_Silk_HarmShapeFIR_FLP[ 1 ] * HarmShapeGain;
+        HarmShapeFIR[ 2 ] = SKP_Silk_HarmShapeFIR_FLP[ 2 ] * HarmShapeGain;
+        Tilt      =  psEncCtrl->Tilt[ k ];
+        LF_MA_shp =  psEncCtrl->LF_MA_shp[ k ];
+        LF_AR_shp =  psEncCtrl->LF_AR_shp[ k ];
+        AR1_shp   = &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ];
+
+        /* Short term FIR filtering*/
+        SKP_Silk_warped_LPC_analysis_filter_FLP( P->sAR_shp1, st_res, AR1_shp, px, 
+            (SKP_float)psEncCtrl->sCmn.warping_Q16 / 65536.0f, psEnc->sCmn.subfr_length, psEnc->sCmn.shapingLPCOrder );
+
+        /* reduce (mainly) low frequencies during harmonic emphasis */
+        B[ 0 ] =  psEncCtrl->GainsPre[ k ];
+        B[ 1 ] = -psEncCtrl->GainsPre[ k ] * 
+            ( psEncCtrl->HarmBoost[ k ] * HarmShapeGain + INPUT_TILT + psEncCtrl->coding_quality * HIGH_RATE_INPUT_TILT );
+        pxw[ 0 ] = B[ 0 ] * st_res[ 0 ] + B[ 1 ] * P->sHarmHP;
+        for( j = 1; j < psEnc->sCmn.subfr_length; j++ ) {
+            pxw[ j ] = B[ 0 ] * st_res[ j ] + B[ 1 ] * st_res[ j - 1 ];
+        }
+        P->sHarmHP = st_res[ psEnc->sCmn.subfr_length - 1 ];
+
+        SKP_Silk_prefilt_FLP( P, pxw, pxw, HarmShapeFIR, Tilt, LF_MA_shp, LF_AR_shp, lag, psEnc->sCmn.subfr_length );
+
+        px  += psEnc->sCmn.subfr_length;
+        pxw += psEnc->sCmn.subfr_length;
+    }
+    P->lagPrev = psEncCtrl->sCmn.pitchL[ psEnc->sCmn.nb_subfr - 1 ];
+}
+
+/*
+* SKP_Silk_prefilter_part1. Prefilter for finding Quantizer input signal    
+*/
+SKP_INLINE void SKP_Silk_prefilt_FLP(
+    SKP_Silk_prefilter_state_FLP *P,/* I/O state */
+    SKP_float st_res[],				/* I */
+    SKP_float xw[],					/* O */
+    SKP_float *HarmShapeFIR,		/* I */
+    SKP_float Tilt,					/* I */
+    SKP_float LF_MA_shp,			/* I */
+    SKP_float LF_AR_shp,			/* I */
+    SKP_int   lag,					/* I */
+    SKP_int   length				/* I */
+)
+{
+    SKP_int   i;
+    SKP_int   idx, LTP_shp_buf_idx;
+    SKP_float n_Tilt, n_LF, n_LTP; 
+    SKP_float sLF_AR_shp, sLF_MA_shp;
+    SKP_float *LTP_shp_buf;
+
+    /* To speed up use temp variables instead of using the struct */
+    LTP_shp_buf     = P->sLTP_shp1;
+    LTP_shp_buf_idx = P->sLTP_shp_buf_idx1;
+    sLF_AR_shp      = P->sLF_AR_shp1;
+    sLF_MA_shp      = P->sLF_MA_shp1;
+
+    for( i = 0; i < length; i++ ) {
+        if( lag > 0 ) {
+            SKP_assert( HARM_SHAPE_FIR_TAPS == 3 );
+            idx = lag + LTP_shp_buf_idx;
+            n_LTP  = LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 - 1) & LTP_MASK ] * HarmShapeFIR[ 0 ];
+            n_LTP += LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2    ) & LTP_MASK ] * HarmShapeFIR[ 1 ];
+            n_LTP += LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 + 1) & LTP_MASK ] * HarmShapeFIR[ 2 ];
+        } else {
+            n_LTP = 0;
+        }
+
+        n_Tilt = sLF_AR_shp * Tilt;
+        n_LF   = sLF_AR_shp * LF_AR_shp + sLF_MA_shp * LF_MA_shp;
+
+        sLF_AR_shp = st_res[ i ] - n_Tilt;
+        sLF_MA_shp = sLF_AR_shp - n_LF;
+
+        LTP_shp_buf_idx = ( LTP_shp_buf_idx - 1 ) & LTP_MASK;
+        LTP_shp_buf[ LTP_shp_buf_idx ] = sLF_MA_shp;
+
+        xw[ i ] = sLF_MA_shp - n_LTP;
+    }
+    /* Copy temp variable back to state */
+    P->sLF_AR_shp1       = sLF_AR_shp;
+    P->sLF_MA_shp1       = sLF_MA_shp;
+    P->sLTP_shp_buf_idx1 = LTP_shp_buf_idx;
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_process_NLSFs_FLP.c
@@ -1,0 +1,106 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include <stdlib.h>
+#include "SKP_Silk_main_FLP.h"
+
+/* Limit, stabilize, convert and quantize NLSFs */
+void SKP_Silk_process_NLSFs_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl,         /* I/O  Encoder control FLP                     */
+    SKP_float                       *pNLSF              /* I/O  NLSFs (quantized output)                */
+)
+{
+    SKP_int     doInterpolate;
+    SKP_float   pNLSFW[ MAX_LPC_ORDER ];
+    SKP_float   NLSF_mu, NLSF_mu_fluc_red, i_sqr, NLSF_interpolation_factor = 0.0f;
+    const SKP_Silk_NLSF_CB_FLP *psNLSF_CB_FLP;
+
+    /* Used only for NLSF interpolation */
+    SKP_float   pNLSF0_temp[  MAX_LPC_ORDER ];
+    SKP_float   pNLSFW0_temp[ MAX_LPC_ORDER ];
+    SKP_int     i;
+
+    SKP_assert( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED || psEncCtrl->sCmn.sigtype == SIG_TYPE_UNVOICED );
+
+    /***********************/
+    /* Calculate mu values */
+    /***********************/
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        NLSF_mu          = 0.002f - 0.001f * psEnc->speech_activity;
+        NLSF_mu_fluc_red = 0.1f   - 0.05f  * psEnc->speech_activity;
+    } else { 
+        NLSF_mu          = 0.005f - 0.004f * psEnc->speech_activity;
+        NLSF_mu_fluc_red = 0.2f   - 0.1f   * ( psEnc->speech_activity + psEncCtrl->sparseness );
+    }
+
+    /* Calculate NLSF weights */
+    SKP_Silk_NLSF_VQ_weights_laroia_FLP( pNLSFW, pNLSF, psEnc->sCmn.predictLPCOrder );
+
+    /* Update NLSF weights for interpolated NLSFs */
+    doInterpolate = ( psEnc->sCmn.useInterpolatedNLSFs == 1 ) && ( psEncCtrl->sCmn.NLSFInterpCoef_Q2 < ( 1 << 2 ) );
+    if( doInterpolate ) {
+
+        /* Calculate the interpolated NLSF vector for the first half */
+        NLSF_interpolation_factor = 0.25f * psEncCtrl->sCmn.NLSFInterpCoef_Q2;
+        SKP_Silk_interpolate_wrapper_FLP( pNLSF0_temp, psEnc->sPred.prev_NLSFq, pNLSF, 
+            NLSF_interpolation_factor, psEnc->sCmn.predictLPCOrder );
+
+        /* Calculate first half NLSF weights for the interpolated NLSFs */
+        SKP_Silk_NLSF_VQ_weights_laroia_FLP( pNLSFW0_temp, pNLSF0_temp, psEnc->sCmn.predictLPCOrder );
+
+        /* Update NLSF weights with contribution from first half */
+        i_sqr = NLSF_interpolation_factor * NLSF_interpolation_factor;
+        for( i = 0; i < psEnc->sCmn.predictLPCOrder; i++ ) {
+            pNLSFW[ i ] = 0.5f * ( pNLSFW[ i ] + i_sqr * pNLSFW0_temp[ i ] );
+        }
+    }
+
+    /* Set pointer to the NLSF codebook for the current signal type and LPC order */
+    psNLSF_CB_FLP = psEnc->psNLSF_CB_FLP[ psEncCtrl->sCmn.sigtype ];
+
+    /* Quantize NLSF parameters given the trained NLSF codebooks */
+    SKP_Silk_NLSF_MSVQ_encode_FLP( psEncCtrl->sCmn.NLSFIndices, pNLSF, psNLSF_CB_FLP, psEnc->sPred.prev_NLSFq, pNLSFW, NLSF_mu, 
+        NLSF_mu_fluc_red, psEnc->sCmn.NLSF_MSVQ_Survivors, psEnc->sCmn.predictLPCOrder, psEnc->sCmn.first_frame_after_reset );
+
+    /* Convert quantized NLSFs back to LPC coefficients */
+    SKP_Silk_NLSF2A_stable_FLP( psEncCtrl->PredCoef[ 1 ], pNLSF, psEnc->sCmn.predictLPCOrder );
+
+    if( doInterpolate ) {
+        /* Calculate the interpolated, quantized NLSF vector for the first half */
+        SKP_Silk_interpolate_wrapper_FLP( pNLSF0_temp, psEnc->sPred.prev_NLSFq, pNLSF, 
+            NLSF_interpolation_factor, psEnc->sCmn.predictLPCOrder );
+
+        /* Convert back to LPC coefficients */
+        SKP_Silk_NLSF2A_stable_FLP( psEncCtrl->PredCoef[ 0 ], pNLSF0_temp, psEnc->sCmn.predictLPCOrder );
+
+    } else {
+        /* Copy LPC coefficients for first half from second half */
+        SKP_memcpy( psEncCtrl->PredCoef[ 0 ], psEncCtrl->PredCoef[ 1 ], psEnc->sCmn.predictLPCOrder * sizeof( SKP_float ) );
+    }
+}
+
--- /dev/null
+++ b/src_FLP/SKP_Silk_process_gains_FLP.c
@@ -1,0 +1,96 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+/* Processing of gains */
+void SKP_Silk_process_gains_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl          /* I/O  Encoder control FLP                     */
+)
+{
+    SKP_Silk_shape_state_FLP *psShapeSt = &psEnc->sShape;
+    SKP_int     k;
+    SKP_int32   pGains_Q16[ MAX_NB_SUBFR ];
+    SKP_float   s, InvMaxSqrVal, gain;
+
+    /* Gain reduction when LTP coding gain is high */
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        s = 1.0f - 0.5f * SKP_sigmoid( 0.25f * ( psEncCtrl->LTPredCodGain - 12.0f ) );
+        for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+            psEncCtrl->Gains[ k ] *= s;
+        }
+    }
+
+    /* Limit the quantized signal */
+    InvMaxSqrVal = ( SKP_float )( pow( 2.0f, 0.33f * ( 21.0f - psEncCtrl->current_SNR_dB ) ) / psEnc->sCmn.subfr_length );
+
+    for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+        /* Soft limit on ratio residual energy and squared gains */
+        gain = psEncCtrl->Gains[ k ];
+        gain = ( SKP_float )sqrt( gain * gain + psEncCtrl->ResNrg[ k ] * InvMaxSqrVal );
+        psEncCtrl->Gains[ k ] = SKP_min_float( gain, 32767.0f );
+    }
+
+    /* Prepare gains for noise shaping quantization */
+    for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+        pGains_Q16[ k ] = ( SKP_int32 ) ( psEncCtrl->Gains[ k ] * 65536.0f ); 
+    }
+
+    /* Noise shaping quantization */
+    SKP_Silk_gains_quant( psEncCtrl->sCmn.GainsIndices, pGains_Q16, 
+            &psShapeSt->LastGainIndex, psEnc->sCmn.nFramesInPayloadBuf, psEnc->sCmn.nb_subfr );
+    /* Overwrite unquantized gains with quantized gains and convert back to Q0 from Q16 */
+    for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
+        psEncCtrl->Gains[ k ] = pGains_Q16[ k ] / 65536.0f;
+    }
+
+    /* Set quantizer offset for voiced signals. Larger offset when LTP coding gain is low or tilt is high (ie low-pass) */
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        if( psEncCtrl->LTPredCodGain + psEncCtrl->input_tilt > 1.0f ) {
+            psEncCtrl->sCmn.QuantOffsetType = 0;
+        } else {
+            psEncCtrl->sCmn.QuantOffsetType = 1;
+        }
+    }
+
+    /* Quantizer boundary adjustment */
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        psEncCtrl->Lambda = 1.2f - 0.4f * psEnc->speech_activity 
+                                 - 0.3f * psEncCtrl->input_quality   
+                                 + 0.2f * psEncCtrl->sCmn.QuantOffsetType
+                                 - 0.1f * psEncCtrl->coding_quality;
+    } else {
+        psEncCtrl->Lambda = 1.2f - 0.4f * psEnc->speech_activity 
+                                 - 0.4f * psEncCtrl->input_quality
+                                 + 0.4f * psEncCtrl->sCmn.QuantOffsetType
+                                 - 0.1f * psEncCtrl->coding_quality;
+    }
+
+    SKP_assert( psEncCtrl->Lambda >= 0.0f );
+    SKP_assert( psEncCtrl->Lambda <  2.0f );
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_quant_LTP_gains_FLP.c
@@ -1,0 +1,108 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+void SKP_Silk_quant_LTP_gains_FLP(
+          SKP_float B[ MAX_NB_SUBFR * LTP_ORDER ],          /* I/O  (Un-)quantized LTP gains                */
+          SKP_int   cbk_index[ MAX_NB_SUBFR ],              /* O    Codebook index                          */
+          SKP_int   *periodicity_index,                     /* O    Periodicity index                       */
+    const SKP_float W[ MAX_NB_SUBFR*LTP_ORDER*LTP_ORDER ],  /* I    Error weights                           */
+    const SKP_float mu,                                     /* I    Mu value (R/D tradeoff)                 */
+    const SKP_int   lowComplexity,                          /* I    Flag for low complexity                 */
+    const SKP_int   nb_subfr                                /* I    number of subframes                     */
+)
+{
+    SKP_int             j, k, temp_idx[ MAX_NB_SUBFR ], cbk_size;
+    const SKP_uint16    *cdf_ptr;
+    const SKP_int16     *cl_ptr;
+    const SKP_int16     *cbk_ptr_Q14;
+    const SKP_float     *b_ptr, *W_ptr;
+    SKP_float           rate_dist_subfr, rate_dist, min_rate_dist;
+
+
+
+    /***************************************************/
+    /* Iterate over different codebooks with different */
+    /* rates/distortions, and choose best */
+    /***************************************************/
+    min_rate_dist = SKP_float_MAX;
+    for( k = 0; k < 3; k++ ) {
+        cdf_ptr     = SKP_Silk_LTP_gain_CDF_ptrs[     k ];
+        cl_ptr      = SKP_Silk_LTP_gain_BITS_Q6_ptrs[ k ];
+        cbk_ptr_Q14 = SKP_Silk_LTP_vq_ptrs_Q14[       k ];
+        cbk_size    = SKP_Silk_LTP_vq_sizes[          k ];
+
+        /* Setup pointer to first subframe */
+        W_ptr = W;
+        b_ptr = B;
+
+        rate_dist = 0.0f;
+        for( j = 0; j < nb_subfr; j++ ) {
+
+            SKP_Silk_VQ_WMat_EC_FLP(
+                &temp_idx[ j ],         /* O    index of best codebook vector                           */
+                &rate_dist_subfr,       /* O    best weighted quantization error + mu * rate            */
+                b_ptr,                  /* I    input vector to be quantized                            */
+                W_ptr,                  /* I    weighting matrix                                        */
+                cbk_ptr_Q14,            /* I    codebook                                                */
+                cl_ptr,                 /* I    code length for each codebook vector                    */
+                mu,                     /* I    tradeoff between weighted error and rate                */
+                cbk_size                /* I    number of vectors in codebook                           */
+            );
+
+            rate_dist += rate_dist_subfr;
+
+            b_ptr += LTP_ORDER;
+            W_ptr += LTP_ORDER * LTP_ORDER;
+        }
+
+        if( rate_dist < min_rate_dist ) {
+            min_rate_dist = rate_dist;
+            SKP_memcpy( cbk_index, temp_idx, nb_subfr    * sizeof( SKP_int ) );
+            *periodicity_index = k;
+        }
+
+        /* Break early in low-complexity mode if rate distortion is below threshold */
+        if( lowComplexity && ( rate_dist * 16384.0f < ( SKP_float )SKP_Silk_LTP_gain_middle_avg_RD_Q14 ) ) {
+            break;
+        }
+    }
+
+    cbk_ptr_Q14 = SKP_Silk_LTP_vq_ptrs_Q14[ *periodicity_index ];
+    for( j = 0; j < nb_subfr; j++ ) {
+        SKP_short2float_array( &B[ j * LTP_ORDER ],
+            &cbk_ptr_Q14[ cbk_index[ j ] * LTP_ORDER ],
+            LTP_ORDER );
+    }
+
+    for( j = 0; j < nb_subfr * LTP_ORDER; j++ ) {
+        B[ j ] *= Q14_CONVERSION_FAC;
+    }
+
+}
+
--- /dev/null
+++ b/src_FLP/SKP_Silk_regularize_correlations_FLP.c
@@ -1,0 +1,43 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+void SKP_Silk_regularize_correlations_FLP(
+          SKP_float                 *XX,                /* I/O  Correlation matrices                    */
+          SKP_float                 *xx,                /* I/O  Correlation values                      */
+    const SKP_float                 noise,              /* I    Noise energy to add                     */
+    const SKP_int                   D                   /* I    Dimension of XX                         */
+)
+{
+    SKP_int i;
+
+    for( i = 0; i < D; i++ ) {
+        matrix_ptr( &XX[ 0 ], i, i, D ) += noise;
+    }
+    xx[ 0 ] += noise;
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_residual_energy_FLP.c
@@ -1,0 +1,113 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+#define MAX_ITERATIONS_RESIDUAL_NRG         10
+#define REGULARIZATION_FACTOR               1e-8f
+
+/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */
+SKP_float SKP_Silk_residual_energy_covar_FLP(           /* O    Weighted residual energy                */
+    const SKP_float                 *c,                 /* I    Filter coefficients                     */
+          SKP_float                 *wXX,               /* I/O  Weighted correlation matrix, reg. out   */
+    const SKP_float                 *wXx,               /* I    Weighted correlation vector             */
+    const SKP_float                 wxx,                /* I    Weighted correlation value              */
+    const SKP_int                   D                   /* I    Dimension                               */
+)
+{
+    SKP_int   i, j, k;
+    SKP_float tmp, nrg, regularization;
+
+    /* Safety checks */
+    SKP_assert( D >= 0 );
+
+    regularization = REGULARIZATION_FACTOR * ( wXX[ 0 ] + wXX[ D * D - 1 ] );
+    for( k = 0; k < MAX_ITERATIONS_RESIDUAL_NRG; k++ ) {
+        nrg = wxx;
+
+        tmp = 0.0f;
+        for( i = 0; i < D; i++ ) {
+            tmp += wXx[ i ] * c[ i ];
+        }
+        nrg -= 2.0f * tmp;
+
+        /* compute c' * wXX * c, assuming wXX is symmetric */
+        for( i = 0; i < D; i++ ) {
+            tmp = 0.0f;
+            for( j = i + 1; j < D; j++ ) {
+                tmp += matrix_c_ptr( wXX, i, j, D ) * c[ j ];
+            }
+            nrg += c[ i ] * ( 2.0f * tmp + matrix_c_ptr( wXX, i, i, D ) * c[ i ] );
+        }
+        if( nrg > 0 ) {
+            break;
+        } else {
+            /* Add white noise */
+            for( i = 0; i < D; i++ ) {
+                matrix_c_ptr( wXX, i, i, D ) +=  regularization;
+            }
+            /* Increase noise for next run */
+            regularization *= 2.0f;
+        }
+    }
+    if( k == MAX_ITERATIONS_RESIDUAL_NRG ) {
+        SKP_assert( nrg == 0 );
+        nrg = 1.0f;
+    }
+
+    return nrg;
+}
+
+/* Calculates residual energies of input subframes where all subframes have LPC_order   */
+/* of preceeding samples                                                                */
+void SKP_Silk_residual_energy_FLP(  
+          SKP_float nrgs[ MAX_NB_SUBFR ],       /* O    Residual energy per subframe    */
+    const SKP_float x[],                        /* I    Input signal                    */
+    const SKP_float a[ 2 ][ MAX_LPC_ORDER ],    /* I    AR coefs for each frame half    */
+    const SKP_float gains[],                    /* I    Quantization gains              */
+    const SKP_int   subfr_length,               /* I    Subframe length                 */
+    const SKP_int   nb_subfr,                   /* I    number of subframes             */
+    const SKP_int   LPC_order                   /* I    LPC order                       */
+)
+{
+    SKP_int     shift;
+    SKP_float   *LPC_res_ptr, LPC_res[ ( MAX_FRAME_LENGTH + MAX_NB_SUBFR * MAX_LPC_ORDER ) / 2 ];
+
+    LPC_res_ptr = LPC_res + LPC_order;
+    shift = LPC_order + subfr_length;
+
+    /* Filter input to create the LPC residual for each frame half, and measure subframe energies */
+    SKP_Silk_LPC_analysis_filter_FLP( LPC_res, a[ 0 ], x + 0 * shift, 2 * shift, LPC_order );
+    nrgs[ 0 ] = ( SKP_float )( gains[ 0 ] * gains[ 0 ] * SKP_Silk_energy_FLP( LPC_res_ptr + 0 * shift, subfr_length ) );
+    nrgs[ 1 ] = ( SKP_float )( gains[ 1 ] * gains[ 1 ] * SKP_Silk_energy_FLP( LPC_res_ptr + 1 * shift, subfr_length ) );
+
+    if( nb_subfr == MAX_NB_SUBFR ) {
+        SKP_Silk_LPC_analysis_filter_FLP( LPC_res, a[ 1 ], x + 2 * shift, 2 * shift, LPC_order );
+        nrgs[ 2 ] = ( SKP_float )( gains[ 2 ] * gains[ 2 ] * SKP_Silk_energy_FLP( LPC_res_ptr + 0 * shift, subfr_length ) );
+        nrgs[ 3 ] = ( SKP_float )( gains[ 3 ] * gains[ 3 ] * SKP_Silk_energy_FLP( LPC_res_ptr + 1 * shift, subfr_length ) );
+    }
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_solve_LS_FLP.c
@@ -1,0 +1,203 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+
+#include "SKP_Silk_main_FLP.h" 
+
+/**********************************************************************
+ * LDL Factorisation. Finds the upper triangular matrix L and the diagonal
+ * Matrix D (only the diagonal elements returned in a vector)such that 
+ * the symmetric matric A is given by A = L*D*L'.
+ **********************************************************************/
+void SKP_Silk_LDL_FLP(
+    SKP_float           *A,      /* (I/O) Pointer to Symetric Square Matrix */
+    SKP_int             M,       /* (I) Size of Matrix */
+    SKP_float           *L,      /* (I/O) Pointer to Square Upper triangular Matrix */
+    SKP_float           *Dinv    /* (I/O) Pointer to vector holding the inverse diagonal elements of D */
+);
+
+/**********************************************************************
+ * Function to solve linear equation Ax = b, when A is a MxM lower 
+ * triangular matrix, with ones on the diagonal.
+ **********************************************************************/
+void SKP_Silk_SolveWithLowerTriangularWdiagOnes_FLP(
+    const SKP_float     *L,     /* (I) Pointer to Lower Triangular Matrix */
+    SKP_int             M,      /* (I) Dim of Matrix equation */
+    const SKP_float     *b,     /* (I) b Vector */
+    SKP_float           *x      /* (O) x Vector */  
+);
+
+/**********************************************************************
+ * Function to solve linear equation (A^T)x = b, when A is a MxM lower 
+ * triangular, with ones on the diagonal. (ie then A^T is upper triangular)
+ **********************************************************************/
+void SKP_Silk_SolveWithUpperTriangularFromLowerWdiagOnes_FLP(
+    const SKP_float     *L,     /* (I) Pointer to Lower Triangular Matrix */
+    SKP_int             M,      /* (I) Dim of Matrix equation */
+    const SKP_float     *b,     /* (I) b Vector */
+    SKP_float           *x      /* (O) x Vector */  
+);
+
+/**********************************************************************
+ * Function to solve linear equation Ax = b, when A is a MxM  
+ * symmetric square matrix - using LDL factorisation
+ **********************************************************************/
+void SKP_Silk_solve_LDL_FLP(
+          SKP_float                 *A,                 /* I/O  Symmetric square matrix, out: reg.      */
+    const SKP_int                   M,                  /* I    Size of matrix                          */
+    const SKP_float                 *b,                 /* I    Pointer to b vector                     */
+          SKP_float                 *x                  /* O    Pointer to x solution vector            */
+)
+{
+    SKP_int   i;
+    SKP_float L[    MAX_MATRIX_SIZE ][ MAX_MATRIX_SIZE ];
+    SKP_float T[    MAX_MATRIX_SIZE ];
+    SKP_float Dinv[ MAX_MATRIX_SIZE ]; // inverse diagonal elements of D
+
+    SKP_assert( M <= MAX_MATRIX_SIZE );
+
+    /***************************************************
+    Factorize A by LDL such that A = L*D*(L^T),
+    where L is lower triangular with ones on diagonal
+    ****************************************************/
+    SKP_Silk_LDL_FLP( A, M, &L[ 0 ][ 0 ], Dinv );
+
+    /****************************************************
+    * substitute D*(L^T) = T. ie:
+    L*D*(L^T)*x = b => L*T = b <=> T = inv(L)*b
+    ******************************************************/
+    SKP_Silk_SolveWithLowerTriangularWdiagOnes_FLP( &L[ 0 ][ 0 ], M, b, T );
+
+    /****************************************************
+    D*(L^T)*x = T <=> (L^T)*x = inv(D)*T, because D is 
+    diagonal just multiply with 1/d_i
+    ****************************************************/
+    for( i = 0; i < M; i++ ) {
+        T[ i ] = T[ i ] * Dinv[ i ];
+    }
+    /****************************************************
+    x = inv(L') * inv(D) * T
+    *****************************************************/
+    SKP_Silk_SolveWithUpperTriangularFromLowerWdiagOnes_FLP( &L[ 0 ][ 0 ], M, T, x );
+}
+
+void SKP_Silk_SolveWithUpperTriangularFromLowerWdiagOnes_FLP(
+    const SKP_float     *L,     /* (I) Pointer to Lower Triangular Matrix */
+    SKP_int             M,      /* (I) Dim of Matrix equation */
+    const SKP_float     *b,     /* (I) b Vector */
+    SKP_float           *x      /* (O) x Vector */  
+)
+{
+    SKP_int   i, j;
+    SKP_float temp;
+    const SKP_float *ptr1;
+    
+    for( i = M - 1; i >= 0; i-- ) {
+        ptr1 =  matrix_adr( L, 0, i, M );
+        temp = 0;
+        for( j = M - 1; j > i ; j-- ) {
+            temp += ptr1[ j * M ] * x[ j ];
+        }
+        temp = b[ i ] - temp;
+        x[ i ] = temp;      
+    }
+}
+
+void SKP_Silk_SolveWithLowerTriangularWdiagOnes_FLP(
+    const SKP_float     *L,     /* (I) Pointer to Lower Triangular Matrix */
+    SKP_int             M,      /* (I) Dim of Matrix equation */
+    const SKP_float     *b,     /* (I) b Vector */
+    SKP_float           *x      /* (O) x Vector */  
+)
+{
+    SKP_int   i, j;
+    SKP_float temp;
+    const SKP_float *ptr1;
+    
+    for( i = 0; i < M; i++ ) {
+        ptr1 =  matrix_adr( L, i, 0, M );
+        temp = 0;
+        for( j = 0; j < i; j++ ) {
+            temp += ptr1[ j ] * x[ j ];
+        }
+        temp = b[ i ] - temp;
+        x[ i ] = temp;
+    }
+}
+
+void SKP_Silk_LDL_FLP(
+    SKP_float           *A,      /* (I/O) Pointer to Symetric Square Matrix */
+    SKP_int             M,       /* (I) Size of Matrix */
+    SKP_float           *L,      /* (I/O) Pointer to Square Upper triangular Matrix */
+    SKP_float           *Dinv    /* (I/O) Pointer to vector holding the inverse diagonal elements of D */
+)
+{
+    SKP_int i, j, k, loop_count, err = 1;
+    SKP_float *ptr1, *ptr2;
+    double temp, diag_min_value;
+    SKP_float v[ MAX_MATRIX_SIZE ], D[ MAX_MATRIX_SIZE ]; // temp arrays
+
+    SKP_assert( M <= MAX_MATRIX_SIZE );
+
+    diag_min_value = FIND_LTP_COND_FAC * 0.5f * ( A[ 0 ] + A[ M * M - 1 ] ); 
+    for( loop_count = 0; loop_count < M && err == 1; loop_count++ ) {
+        err = 0;
+        for( j = 0; j < M; j++ ) {
+            ptr1 = matrix_adr( L, j, 0, M );
+            temp = matrix_ptr( A, j, j, M ); // element in row j column j
+            for( i = 0; i < j; i++ ) {
+                v[ i ] = ptr1[ i ] * D[ i ];
+                temp  -= ptr1[ i ] * v[ i ];
+            }
+            if( temp < diag_min_value ) {
+                /* Badly conditioned matrix: add white noise and run again */
+                temp = ( loop_count + 1 ) * diag_min_value - temp;
+                for( i = 0; i < M; i++ ) {
+                    matrix_ptr( A, i, i, M ) += ( SKP_float )temp;
+                }
+                err = 1;
+                break;
+            }
+            D[ j ]    = ( SKP_float )temp;
+            Dinv[ j ] = ( SKP_float )( 1.0f / temp );
+            matrix_ptr( L, j, j, M ) = 1.0f;
+            
+            ptr1 = matrix_adr( A, j, 0, M );
+            ptr2 = matrix_adr( L, j + 1, 0, M);
+            for( i = j + 1; i < M; i++ ) {
+                temp = 0.0;
+                for( k = 0; k < j; k++ ) {                
+                    temp += ptr2[ k ] * v[ k ];
+                }
+                matrix_ptr( L, i, j, M ) = ( SKP_float )( ( ptr1[ i ] - temp ) * Dinv[ j ] );
+                ptr2 += M; // go to next column
+            }   
+        }
+    }
+    SKP_assert( err == 0 );
+}
+
--- /dev/null
+++ b/src_FLP/SKP_Silk_structs_FLP.h
@@ -1,0 +1,176 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_STRUCTS_FLP_H
+#define SKP_SILK_STRUCTS_FLP_H
+
+#include "SKP_Silk_typedef.h"
+#include "SKP_Silk_main.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/********************************/
+/* Noise shaping analysis state */
+/********************************/
+typedef struct {
+    SKP_int     LastGainIndex;
+    SKP_float   HarmBoost_smth;
+    SKP_float   HarmShapeGain_smth;
+    SKP_float   Tilt_smth;
+} SKP_Silk_shape_state_FLP;
+
+/********************************/
+/* Prefilter state              */
+/********************************/
+typedef struct {
+    SKP_float   sLTP_shp1[ LTP_BUF_LENGTH ];
+    SKP_float   sLTP_shp2[ LTP_BUF_LENGTH ];
+    SKP_float   sAR_shp1[ MAX_SHAPE_LPC_ORDER + 1 ];
+    SKP_float   sAR_shp2[ MAX_SHAPE_LPC_ORDER ];
+    SKP_int     sLTP_shp_buf_idx1;
+    SKP_int     sLTP_shp_buf_idx2;
+    SKP_int     sAR_shp_buf_idx2;
+    SKP_float   sLF_AR_shp1;
+    SKP_float   sLF_MA_shp1;
+    SKP_float   sLF_AR_shp2;
+    SKP_float   sLF_MA_shp2;
+    SKP_float   sHarmHP;
+    SKP_int32   rand_seed;
+    SKP_int     lagPrev;
+} SKP_Silk_prefilter_state_FLP;
+
+/*****************************/
+/* Prediction analysis state */
+/*****************************/
+typedef struct {
+    SKP_int     pitch_LPC_win_length;
+    SKP_int     min_pitch_lag;                      /* Lowest possible pitch lag (samples)  */
+    SKP_int     max_pitch_lag;                      /* Highest possible pitch lag (samples) */
+    SKP_float   prev_NLSFq[ MAX_LPC_ORDER ];        /* Previously quantized NLSF vector     */
+} SKP_Silk_predict_state_FLP;
+
+/*******************************************/
+/* Structure containing NLSF MSVQ codebook */
+/*******************************************/
+/* structure for one stage of MSVQ */
+typedef struct {
+    const SKP_int32     nVectors;
+    const SKP_float     *CB;
+    const SKP_float     *Rates;
+} SKP_Silk_NLSF_CBS_FLP;
+
+typedef struct {
+    const SKP_int32                         nStages;
+
+    /* fields for (de)quantizing */
+    const SKP_Silk_NLSF_CBS_FLP *CBStages;
+    const SKP_float                         *NDeltaMin;
+
+    /* fields for arithmetic (de)coding */
+    const SKP_uint16                        *CDF;
+    const SKP_uint16 * const                *StartPtr;
+    const SKP_int                           *MiddleIx;
+} SKP_Silk_NLSF_CB_FLP;
+
+/********************************/
+/* Encoder state FLP            */
+/********************************/
+typedef struct {
+    SKP_Silk_encoder_state              sCmn;                       /* Common struct, shared with fixed-point code */
+
+    SKP_float                           variable_HP_smth1;          /* State of first smoother */
+    SKP_float                           variable_HP_smth2;          /* State of second smoother */
+
+    SKP_Silk_shape_state_FLP            sShape;                     /* Noise shaping state */
+    SKP_Silk_prefilter_state_FLP        sPrefilt;                   /* Prefilter State */
+    SKP_Silk_predict_state_FLP          sPred;                      /* Prediction State */
+    SKP_Silk_nsq_state                  sNSQ;                       /* Noise Shape Quantizer State */
+    SKP_Silk_nsq_state                  sNSQ_LBRR;                  /* Noise Shape Quantizer State ( for low bitrate redundancy )*/
+
+    /* Buffer for find pitch and noise shape analysis */
+    SKP_float                           x_buf[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ];/* Buffer for find pitch and noise shape analysis */
+    SKP_float                           LTPCorr;                    /* Normalized correlation from pitch lag estimator */
+    SKP_float                           mu_LTP;                     /* Rate-distortion tradeoff in LTP quantization */
+    SKP_float                           SNR_dB;                     /* Quality setting */
+    SKP_float                           avgGain;                    /* average gain during active speech */
+    SKP_float                           BufferedInChannel_ms;       /* Simulated number of ms buffer in channel because of exceeded TargetRate_bps */
+    SKP_float                           speech_activity;            /* Speech activity */
+    SKP_float                           pitchEstimationThreshold;   /* Threshold for pitch estimator */
+
+    /* Parameters for LTP scaling control */
+    SKP_float                           prevLTPredCodGain;
+    SKP_float                           HPLTPredCodGain;
+
+    SKP_float                           inBandFEC_SNR_comp;         /* Compensation to SNR_DB when using inband FEC Voiced */
+
+    const SKP_Silk_NLSF_CB_FLP  *psNLSF_CB_FLP[ 2 ];        /* Pointers to voiced/unvoiced NLSF codebooks */
+} SKP_Silk_encoder_state_FLP;
+
+
+/************************/
+/* Encoder control FLP  */
+/************************/
+typedef struct {
+    SKP_Silk_encoder_control    sCmn;                               /* Common struct, shared with fixed-point code */
+
+    /* Prediction and coding parameters */
+	SKP_float					Gains[MAX_NB_SUBFR];
+	SKP_float					PredCoef[ 2 ][ MAX_LPC_ORDER ];		/* holds interpolated and final coefficients */
+	SKP_float					LTPCoef[LTP_ORDER * MAX_NB_SUBFR];
+	SKP_float					LTP_scale;
+
+    /* Noise shaping parameters */
+	SKP_float					AR1[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ];
+	SKP_float					AR2[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ];
+	SKP_float					LF_MA_shp[     MAX_NB_SUBFR ];
+	SKP_float					LF_AR_shp[     MAX_NB_SUBFR ];
+	SKP_float					GainsPre[      MAX_NB_SUBFR ];
+	SKP_float					HarmBoost[     MAX_NB_SUBFR ];
+	SKP_float					Tilt[          MAX_NB_SUBFR ];
+	SKP_float					HarmShapeGain[ MAX_NB_SUBFR ];
+	SKP_float					Lambda;
+	SKP_float					input_quality;
+	SKP_float					coding_quality;
+	SKP_float					pitch_freq_low_Hz;
+	SKP_float					current_SNR_dB;
+
+	/* Measures */
+	SKP_float					sparseness;
+	SKP_float					LTPredCodGain;
+	SKP_float					input_quality_bands[ VAD_N_BANDS ];
+	SKP_float					input_tilt;
+	SKP_float					ResNrg[ MAX_NB_SUBFR ];					/* Residual energy per subframe */
+} SKP_Silk_encoder_control_FLP;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+++ b/src_FLP/SKP_Silk_tables_FLP.h
@@ -1,0 +1,43 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_TABLES_FLP_H
+#define SKP_SILK_TABLES_FLP_H
+
+#include "SKP_Silk_structs_FLP.h"
+
+/* filters */
+extern const SKP_float SKP_Silk_HarmShapeFIR_FLP[ HARM_SHAPE_FIR_TAPS ];
+
+/* Table of quantization offset values */
+extern const SKP_float SKP_Silk_Quantization_Offsets[ 2 ][ 2 ];
+
+/* NLSF codebooks */
+extern const SKP_Silk_NLSF_CB_FLP SKP_Silk_NLSF_CB0_16_FLP, SKP_Silk_NLSF_CB1_16_FLP;
+extern const SKP_Silk_NLSF_CB_FLP SKP_Silk_NLSF_CB0_10_FLP, SKP_Silk_NLSF_CB1_10_FLP;
+
+#endif
--- /dev/null
+++ b/src_FLP/SKP_Silk_tables_NLSF_CB0_10_FLP.c
@@ -1,0 +1,739 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/**********************************************/
+/* This file has been automatically generated */
+/*                                            */
+/* ROM usage:  5.32 kB                        */
+/**********************************************/
+
+#include "SKP_Silk_tables_FLP.h"
+#include "SKP_Silk_tables_NLSF_CB0_10.h"
+
+const SKP_float SKP_Silk_NLSF_MSVQ_CB0_10_rates[ NLSF_MSVQ_CB0_10_VECTORS ] =
+{
+      4.62500000000000000000f,      5.21875000000000000000f,
+      5.28125000000000000000f,      5.31250000000000000000f,
+      5.31250000000000000000f,      5.40625000000000000000f,
+      5.40625000000000000000f,      5.46875000000000000000f,
+      5.50000000000000000000f,      5.50000000000000000000f,
+      5.50000000000000000000f,      5.53125000000000000000f,
+      5.59375000000000000000f,      5.65625000000000000000f,
+      5.65625000000000000000f,      5.65625000000000000000f,
+      5.71875000000000000000f,      5.71875000000000000000f,
+      5.71875000000000000000f,      5.75000000000000000000f,
+      5.78125000000000000000f,      5.78125000000000000000f,
+      5.78125000000000000000f,      5.78125000000000000000f,
+      5.81250000000000000000f,      5.90625000000000000000f,
+      5.90625000000000000000f,      5.90625000000000000000f,
+      5.96875000000000000000f,      5.96875000000000000000f,
+      5.96875000000000000000f,      6.06250000000000000000f,
+      6.06250000000000000000f,      6.06250000000000000000f,
+      6.09375000000000000000f,      6.09375000000000000000f,
+      6.12500000000000000000f,      6.18750000000000000000f,
+      6.21875000000000000000f,      6.25000000000000000000f,
+      6.28125000000000000000f,      6.28125000000000000000f,
+      6.31250000000000000000f,      6.34375000000000000000f,
+      6.37500000000000000000f,      6.37500000000000000000f,
+      6.40625000000000000000f,      6.40625000000000000000f,
+      6.43750000000000000000f,      6.53125000000000000000f,
+      6.56250000000000000000f,      6.56250000000000000000f,
+      6.65625000000000000000f,      6.68750000000000000000f,
+      6.81250000000000000000f,      6.87500000000000000000f,
+      6.90625000000000000000f,      7.06250000000000000000f,
+      7.21875000000000000000f,      7.31250000000000000000f,
+      7.46875000000000000000f,      8.00000000000000000000f,
+      8.00000000000000000000f,      8.00000000000000000000f,
+      3.71875000000000000000f,      3.84375000000000000000f,
+      3.84375000000000000000f,      3.84375000000000000000f,
+      3.90625000000000000000f,      3.93750000000000000000f,
+      3.93750000000000000000f,      3.93750000000000000000f,
+      4.00000000000000000000f,      4.06250000000000000000f,
+      4.06250000000000000000f,      4.09375000000000000000f,
+      4.09375000000000000000f,      4.21875000000000000000f,
+      4.31250000000000000000f,      4.34375000000000000000f,
+      2.93750000000000000000f,      2.93750000000000000000f,
+      2.96875000000000000000f,      2.96875000000000000000f,
+      3.00000000000000000000f,      3.06250000000000000000f,
+      3.06250000000000000000f,      3.09375000000000000000f,
+      2.90625000000000000000f,      2.90625000000000000000f,
+      2.96875000000000000000f,      3.00000000000000000000f,
+      3.00000000000000000000f,      3.03125000000000000000f,
+      3.06250000000000000000f,      3.12500000000000000000f,
+      2.87500000000000000000f,      2.90625000000000000000f,
+      3.03125000000000000000f,      3.03125000000000000000f,
+      3.03125000000000000000f,      3.03125000000000000000f,
+      3.06250000000000000000f,      3.06250000000000000000f,
+      3.90625000000000000000f,      3.93750000000000000000f,
+      3.93750000000000000000f,      3.96875000000000000000f,
+      3.96875000000000000000f,      4.00000000000000000000f,
+      4.00000000000000000000f,      4.00000000000000000000f,
+      4.00000000000000000000f,      4.00000000000000000000f,
+      4.03125000000000000000f,      4.03125000000000000000f,
+      4.03125000000000000000f,      4.06250000000000000000f,
+      4.06250000000000000000f,      4.09375000000000000000f
+};
+
+const SKP_float SKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min[ 10 + 1 ] =
+{
+      0.01718139648437500000f,
+      0.00009155273437500000f,
+      0.00067138671874999989f,
+      0.00061035156250000000f,
+      0.00009155273437500000f,
+      0.00009155273437500000f,
+      0.00402832031250000000f,
+      0.00363159179687500000f,
+      0.01092529296875000000f,
+      0.00262451171875000000f,
+      0.02941894531250000300f
+};
+
+const SKP_float SKP_Silk_NLSF_MSVQ_CB0_10[ 10 * NLSF_MSVQ_CB0_10_VECTORS ] =
+{
+      0.06744384765625000000f,      0.12277221679687500000f,
+      0.21304321289062497000f,      0.28259277343750000000f,
+      0.38369750976562500000f,      0.47872924804687500000f,
+      0.58615112304687500000f,      0.68307495117187489000f,
+      0.79287719726562500000f,      0.88934326171875011000f,
+      0.10025024414062500000f,      0.12731933593750000000f,
+      0.18664550781250003000f,      0.33129882812500000000f,
+      0.46658325195312494000f,      0.51348876953125000000f,
+      0.60122680664062500000f,      0.67169189453125000000f,
+      0.75442504882812500000f,      0.89456176757812500000f,
+      0.04742431640624999300f,      0.07662963867187500000f,
+      0.20071411132812500000f,      0.31546020507812500000f,
+      0.42227172851562494000f,      0.50387573242187500000f,
+      0.61297607421875000000f,      0.70843505859375000000f,
+      0.80810546875000000000f,      0.89916992187500000000f,
+      0.09344482421875000000f,      0.12258911132812500000f,
+      0.17611694335937500000f,      0.30630493164062500000f,
+      0.40786743164062500000f,      0.45629882812500000000f,
+      0.61462402343750000000f,      0.69857788085937500000f,
+      0.76992797851562500000f,      0.90341186523437500000f,
+      0.06362915039062500000f,      0.10549926757812500000f,
+      0.18109130859375000000f,      0.26605224609375000000f,
+      0.35098266601562494000f,      0.41717529296875000000f,
+      0.54922485351562500000f,      0.66580200195312500000f,
+      0.76095581054687489000f,      0.87722778320312500000f,
+      0.08471679687500000000f,      0.12490844726562501000f,
+      0.19595336914062500000f,      0.31777954101562500000f,
+      0.46115112304687500000f,      0.51287841796875000000f,
+      0.63552856445312500000f,      0.72711181640625000000f,
+      0.80285644531250000000f,      0.89755249023437500000f,
+      0.08291625976562498600f,      0.12310791015625000000f,
+      0.17385864257812500000f,      0.25827026367187500000f,
+      0.43643188476562500000f,      0.49908447265625000000f,
+      0.58004760742187500000f,      0.71450805664062500000f,
+      0.78771972656249989000f,      0.86993408203125011000f,
+      0.08764648437500000000f,      0.11297607421875001000f,
+      0.17947387695312500000f,      0.33673095703124994000f,
+      0.52310180664062500000f,      0.57614135742187500000f,
+      0.64532470703125000000f,      0.71566772460937500000f,
+      0.78787231445312500000f,      0.90332031250000000000f,
+      0.09152221679687500000f,      0.12252807617187500000f,
+      0.22451782226562500000f,      0.34237670898437500000f,
+      0.39263916015625000000f,      0.52816772460937500000f,
+      0.61282348632812500000f,      0.69104003906250000000f,
+      0.81707763671875000000f,      0.88827514648437500000f,
+      0.08978271484375000000f,      0.11798095703125000000f,
+      0.18060302734375003000f,      0.36361694335937500000f,
+      0.42446899414062500000f,      0.49047851562500000000f,
+      0.62417602539062500000f,      0.67990112304687500000f,
+      0.83343505859375000000f,      0.91021728515625011000f,
+      0.06930541992187500000f,      0.10763549804687500000f,
+      0.20159912109375000000f,      0.29690551757812500000f,
+      0.39498901367187506000f,      0.53045654296875000000f,
+      0.61718750000000000000f,      0.68191528320312500000f,
+      0.75079345703125000000f,      0.86334228515624989000f,
+      0.06735229492187500000f,      0.10101318359375000000f,
+      0.17834472656250000000f,      0.28500366210937500000f,
+      0.33999633789062500000f,      0.47763061523437506000f,
+      0.56689453125000000000f,      0.64627075195312511000f,
+      0.77975463867187489000f,      0.86145019531250011000f,
+      0.12094116210937500000f,      0.15182495117187500000f,
+      0.21060180664062500000f,      0.35363769531250000000f,
+      0.41094970703125000000f,      0.47537231445312494000f,
+      0.58688354492187500000f,      0.65209960937500000000f,
+      0.77850341796875000000f,      0.84713745117187500000f,
+      0.08389282226562500000f,      0.10830688476562500000f,
+      0.21258544921875000000f,      0.42138671875000000000f,
+      0.47769165039062500000f,      0.53848266601562500000f,
+      0.61309814453125000000f,      0.68966674804687511000f,
+      0.80770874023437500000f,      0.87088012695312489000f,
+      0.06488037109375000000f,      0.10693359375000001000f,
+      0.15591430664062500000f,      0.30377197265625000000f,
+      0.38299560546875006000f,      0.44616699218750000000f,
+      0.60128784179687500000f,      0.66183471679687500000f,
+      0.80740356445312500000f,      0.88824462890625000000f,
+      0.12103271484375000000f,      0.17532348632812500000f,
+      0.22711181640625000000f,      0.29776000976562500000f,
+      0.44152832031250000000f,      0.50061035156250000000f,
+      0.58395385742187500000f,      0.70336914062500000000f,
+      0.77438354492187489000f,      0.86642456054687500000f,
+      0.09756469726562500000f,      0.14498901367187500000f,
+      0.19686889648437500000f,      0.28375244140625000000f,
+      0.39788818359374994000f,      0.45391845703125000000f,
+      0.54815673828125000000f,      0.62948608398437500000f,
+      0.72738647460937500000f,      0.86865234375000000000f,
+      0.09750366210937500000f,      0.12454223632812500000f,
+      0.19833374023437500000f,      0.37390136718750000000f,
+      0.43606567382812500000f,      0.48950195312500000000f,
+      0.56021118164062500000f,      0.63262939453125000000f,
+      0.82336425781250000000f,      0.89443969726562489000f,
+      0.04678344726562500000f,      0.07540893554687500000f,
+      0.13690185546875000000f,      0.23791503906250000000f,
+      0.37634277343750000000f,      0.48089599609375000000f,
+      0.59713745117187500000f,      0.68048095703124989000f,
+      0.78347778320312489000f,      0.88656616210937511000f,
+      0.06109619140625000000f,      0.09066772460937500000f,
+      0.15213012695312500000f,      0.24667358398437497000f,
+      0.40225219726562500000f,      0.47103881835937500000f,
+      0.55654907226562500000f,      0.65664672851562500000f,
+      0.75057983398437500000f,      0.86520385742187500000f,
+      0.11621093750000000000f,      0.15029907226562500000f,
+      0.20477294921875003000f,      0.31130981445312500000f,
+      0.36654663085937500000f,      0.43640136718750000000f,
+      0.56326293945312500000f,      0.62228393554687500000f,
+      0.80947875976562500000f,      0.88366699218750000000f,
+      0.06961059570312500000f,      0.10430908203125000000f,
+      0.15194702148437500000f,      0.26629638671875000000f,
+      0.48718261718750000000f,      0.55249023437500000000f,
+      0.61798095703125000000f,      0.69491577148437500000f,
+      0.77166748046875000000f,      0.88360595703125000000f,
+      0.09310913085937500000f,      0.16720581054687500000f,
+      0.22247314453125000000f,      0.30053710937500000000f,
+      0.38891601562500000000f,      0.44259643554687500000f,
+      0.56961059570312500000f,      0.72277832031250000000f,
+      0.79544067382812511000f,      0.88339233398437500000f,
+      0.07214355468750000000f,      0.10879516601562499000f,
+      0.16790771484375000000f,      0.29360961914062500000f,
+      0.45538330078125000000f,      0.50723266601562500000f,
+      0.57998657226562500000f,      0.64074707031250000000f,
+      0.80291748046875000000f,      0.89422607421875000000f,
+      0.12490844726562501000f,      0.15905761718750000000f,
+      0.20852661132812500000f,      0.30151367187500000000f,
+      0.49752807617187500000f,      0.55804443359375000000f,
+      0.62777709960937500000f,      0.72064208984375000000f,
+      0.79550170898437500000f,      0.88891601562500000000f,
+      0.08975219726562500000f,      0.12194824218750000000f,
+      0.18426513671875000000f,      0.32464599609374994000f,
+      0.38659667968750000000f,      0.44100952148437500000f,
+      0.51263427734375000000f,      0.59179687500000000000f,
+      0.79501342773437500000f,      0.87026977539062489000f,
+      0.11788940429687500000f,      0.15905761718750000000f,
+      0.21420288085937500000f,      0.28894042968750000000f,
+      0.33688354492187500000f,      0.40325927734374994000f,
+      0.60858154296875000000f,      0.68188476562500000000f,
+      0.76678466796875000000f,      0.90145874023437489000f,
+      0.14083862304687500000f,      0.18835449218749997000f,
+      0.23965454101562500000f,      0.31286621093750000000f,
+      0.38485717773437506000f,      0.44082641601562500000f,
+      0.60177612304687500000f,      0.68484497070312500000f,
+      0.76055908203125000000f,      0.89541625976562500000f,
+      0.10882568359375000000f,      0.13769531250000000000f,
+      0.21316528320312500000f,      0.26501464843750000000f,
+      0.32177734375000000000f,      0.49124145507812500000f,
+      0.55108642578125000000f,      0.68588256835937500000f,
+      0.79547119140625000000f,      0.85958862304687500000f,
+      0.13674926757812500000f,      0.16751098632812500000f,
+      0.22680664062500000000f,      0.34832763671875000000f,
+      0.40255737304687500000f,      0.46463012695312500000f,
+      0.61526489257812500000f,      0.67926025390625000000f,
+      0.80822753906250000000f,      0.90686035156250000000f,
+      0.10131835937500000000f,      0.13183593750000000000f,
+      0.20205688476562500000f,      0.30111694335937500000f,
+      0.35342407226562500000f,      0.42828369140625000000f,
+      0.64599609375000000000f,      0.70831298828125000000f,
+      0.81140136718750000000f,      0.91256713867187500000f,
+      0.11578369140625000000f,      0.14309692382812500000f,
+      0.21105957031250000000f,      0.26412963867187500000f,
+      0.30953979492187500000f,      0.49267578125000000000f,
+      0.59716796875000000000f,      0.65881347656250000000f,
+      0.84097290039062500000f,      0.90310668945312489000f,
+      0.07464599609375000000f,      0.09997558593750000000f,
+      0.18060302734375003000f,      0.38583374023437500000f,
+      0.50662231445312500000f,      0.54971313476562500000f,
+      0.64471435546875011000f,      0.70724487304687489000f,
+      0.83312988281250000000f,      0.90435791015625000000f,
+      0.07476806640625000000f,      0.10748291015625000000f,
+      0.16592407226562500000f,      0.26123046875000000000f,
+      0.46646118164062500000f,      0.60763549804687500000f,
+      0.66607666015625000000f,      0.73538208007812500000f,
+      0.81076049804687489000f,      0.88739013671875000000f,
+      0.07873535156250000000f,      0.11584472656249999000f,
+      0.17028808593750000000f,      0.25445556640625000000f,
+      0.30422973632812500000f,      0.38681030273437500000f,
+      0.57699584960937500000f,      0.69436645507812500000f,
+      0.77667236328125000000f,      0.89392089843749989000f,
+      0.10147094726562500000f,      0.13159179687500000000f,
+      0.19046020507812500000f,      0.23526000976562500000f,
+      0.27966308593750000000f,      0.44104003906250000000f,
+      0.66116333007812489000f,      0.72622680664062511000f,
+      0.82690429687500000000f,      0.91116333007812489000f,
+      0.10186767578125000000f,      0.12704467773437500000f,
+      0.23614501953125000000f,      0.33917236328125000000f,
+      0.38659667968750000000f,      0.45022583007812500000f,
+      0.51669311523437500000f,      0.69384765625000000000f,
+      0.78341674804687500000f,      0.85733032226562500000f,
+      0.11718749999999999000f,      0.14511108398437500000f,
+      0.23666381835937500000f,      0.41110229492187506000f,
+      0.46807861328125000000f,      0.52429199218750000000f,
+      0.61270141601562500000f,      0.68215942382812500000f,
+      0.82949829101562500000f,      0.90768432617187500000f,
+      0.07641601562500000000f,      0.12448120117187500000f,
+      0.25485229492187500000f,      0.36981201171875000000f,
+      0.45916748046875000000f,      0.56747436523437500000f,
+      0.66174316406250000000f,      0.75390625000000000000f,
+      0.83981323242187500000f,      0.91360473632812500000f,
+      0.15972900390625000000f,      0.19354248046875000000f,
+      0.25228881835937500000f,      0.36074829101562500000f,
+      0.46249389648437500000f,      0.51147460937500000000f,
+      0.63070678710937500000f,      0.71679687500000000000f,
+      0.79190063476562500000f,      0.89437866210937500000f,
+      0.08181762695312500000f,      0.10870361328125000000f,
+      0.18395996093750003000f,      0.33041381835937506000f,
+      0.56329345703125000000f,      0.62432861328125000000f,
+      0.68063354492187500000f,      0.75381469726562500000f,
+      0.82128906250000000000f,      0.91418457031250000000f,
+      0.10296630859375000000f,      0.13818359375000000000f,
+      0.19012451171875000000f,      0.25195312500000000000f,
+      0.29031372070312500000f,      0.38848876953124994000f,
+      0.56964111328125000000f,      0.63232421875000000000f,
+      0.79367065429687500000f,      0.86746215820312500000f,
+      0.08334350585937500000f,      0.11074829101562500000f,
+      0.25390625000000000000f,      0.37994384765625000000f,
+      0.43066406250000000000f,      0.50143432617187500000f,
+      0.56604003906250000000f,      0.67437744140625000000f,
+      0.77297973632812500000f,      0.84588623046875000000f,
+      0.10623168945312500000f,      0.13430786132812500000f,
+      0.22341918945312503000f,      0.28439331054687500000f,
+      0.33758544921875000000f,      0.39956665039062500000f,
+      0.46145629882812500000f,      0.68099975585937489000f,
+      0.80355834960937500000f,      0.87707519531250000000f,
+      0.10916137695312500000f,      0.15090942382812500000f,
+      0.20352172851562500000f,      0.26831054687500000000f,
+      0.31430053710937500000f,      0.38589477539062506000f,
+      0.59524536132812500000f,      0.75579833984375000000f,
+      0.82385253906250011000f,      0.90435791015625000000f,
+      0.12384033203125000000f,      0.15441894531250000000f,
+      0.22241210937500000000f,      0.31097412109375000000f,
+      0.35778808593750000000f,      0.42529296875000000000f,
+      0.48367309570312500000f,      0.56576538085937500000f,
+      0.81484985351562500000f,      0.91079711914062500000f,
+      0.13006591796875000000f,      0.16448974609374997000f,
+      0.21536254882812503000f,      0.27410888671875000000f,
+      0.31088256835937500000f,      0.46582031250000000000f,
+      0.62500000000000000000f,      0.68176269531250000000f,
+      0.79217529296875000000f,      0.85668945312500000000f,
+      0.10388183593750000000f,      0.13211059570312500000f,
+      0.20230102539062497000f,      0.24249267578125000000f,
+      0.30886840820312500000f,      0.52383422851562500000f,
+      0.59936523437500000000f,      0.67883300781249989000f,
+      0.76483154296875000000f,      0.83837890625000000000f,
+      0.09634399414062501400f,      0.12719726562500000000f,
+      0.18905639648437500000f,      0.28439331054687500000f,
+      0.32870483398437500000f,      0.40664672851562500000f,
+      0.47045898437500000000f,      0.60473632812500000000f,
+      0.75292968750000000000f,      0.84332275390625000000f,
+      0.07638549804687500000f,      0.10598754882812500000f,
+      0.15655517578125000000f,      0.20651245117187500000f,
+      0.26156616210937500000f,      0.45477294921875000000f,
+      0.58084106445312500000f,      0.66912841796874989000f,
+      0.79544067382812511000f,      0.87670898437500000000f,
+      0.12612915039062500000f,      0.15570068359375000000f,
+      0.23049926757812503000f,      0.30682373046875000000f,
+      0.35879516601562500000f,      0.45544433593750000000f,
+      0.53207397460937500000f,      0.61602783203125000000f,
+      0.73202514648437489000f,      0.80175781249999989000f,
+      0.15173339843750000000f,      0.18734741210937500000f,
+      0.24090576171875000000f,      0.29397583007812500000f,
+      0.34545898437500000000f,      0.43624877929687500000f,
+      0.66336059570312500000f,      0.74176025390625000000f,
+      0.82150268554687489000f,      0.91268920898437500000f,
+      0.09027099609375000000f,      0.11645507812500000000f,
+      0.20907592773437500000f,      0.28088378906250000000f,
+      0.33248901367187506000f,      0.55090332031250000000f,
+      0.63449096679687500000f,      0.71221923828125000000f,
+      0.84094238281250000000f,      0.90359497070312500000f,
+      0.15972900390625000000f,      0.18395996093750003000f,
+      0.24517822265625000000f,      0.30987548828125000000f,
+      0.34307861328125000000f,      0.45132446289062500000f,
+      0.57824707031250000000f,      0.63983154296875000000f,
+      0.81130981445312500000f,      0.88888549804687500000f,
+      0.15994262695312503000f,      0.20867919921875000000f,
+      0.32122802734375006000f,      0.39120483398437500000f,
+      0.44802856445312500000f,      0.52880859375000000000f,
+      0.60815429687500000000f,      0.68164062500000000000f,
+      0.79934692382812500000f,      0.87576293945312500000f,
+      0.10412597656250000000f,      0.12973022460937500000f,
+      0.18273925781250000000f,      0.21649169921875000000f,
+      0.30233764648437500000f,      0.55673217773437500000f,
+      0.66128540039062500000f,      0.72561645507812511000f,
+      0.82302856445312500000f,      0.88766479492187500000f,
+      0.07537841796875000000f,      0.09817504882812500000f,
+      0.23794555664062500000f,      0.46679687499999994000f,
+      0.52993774414062500000f,      0.58395385742187500000f,
+      0.67074584960937500000f,      0.74023437500000000000f,
+      0.83380126953124989000f,      0.89849853515625000000f,
+      0.15072631835937500000f,      0.17712402343750000000f,
+      0.24856567382812500000f,      0.36038208007812506000f,
+      0.42337036132812500000f,      0.47601318359375000000f,
+      0.52593994140625000000f,      0.59274291992187500000f,
+      0.80798339843750000000f,      0.90469360351562500000f,
+      0.15414428710937500000f,      0.18820190429687497000f,
+      0.25094604492187500000f,      0.29464721679687500000f,
+      0.37106323242187500000f,      0.54916381835937500000f,
+      0.62451171875000000000f,      0.69677734375000011000f,
+      0.81225585937500000000f,      0.86859130859375000000f,
+      0.15219116210937500000f,      0.18026733398437500000f,
+      0.28439331054687500000f,      0.34317016601562500000f,
+      0.40075683593750000000f,      0.45849609375000000000f,
+      0.53359985351562500000f,      0.69235229492187511000f,
+      0.79379272460937511000f,      0.86282348632812489000f,
+      0.15676879882812500000f,      0.21008300781250000000f,
+      0.33645629882812500000f,      0.45623779296875000000f,
+      0.52462768554687500000f,      0.59280395507812500000f,
+      0.66549682617187489000f,      0.74441528320312511000f,
+      0.82208251953125000000f,      0.89379882812500000000f,
+      0.21536254882812503000f,      0.24060058593750000000f,
+      0.29077148437500000000f,      0.31991577148437500000f,
+      0.33447265625000000000f,      0.45199584960937500000f,
+      0.58197021484375000000f,      0.66146850585937500000f,
+      0.78262329101562511000f,      0.85507202148437500000f,
+      0.20626831054687500000f,      0.21850585937500000000f,
+      0.26080322265625000000f,      0.35946655273437500000f,
+      0.37521362304687500000f,      0.39743041992187500000f,
+      0.50741577148437500000f,      0.64389038085937500000f,
+      0.75369262695312500000f,      0.86325073242187500000f,
+      0.11788940429687500000f,      0.29791259765625000000f,
+      0.33776855468749994000f,      0.34927368164062500000f,
+      0.36770629882812506000f,      0.42602539062500000000f,
+      0.55191040039062500000f,      0.65634155273437500000f,
+      0.76977539062500000000f,      0.88491821289062489000f,
+      0.01211547851562500000f,      0.01022338867187500000f,
+      0.01986694335937500000f,      0.03564453125000000000f,
+      0.01953125000000000000f,      0.02334594726562500000f,
+      0.01419067382812500000f,      0.01010131835937500000f,
+      0.00653076171875000000f,     -0.00592041015625000000f,
+     -0.01763916015625000000f,     -0.01974487304687500000f,
+     -0.02005004882812500000f,      0.02288818359375000000f,
+      0.01721191406250000000f,      0.01870727539062500000f,
+      0.01675415039062500000f,      0.01922607421875000000f,
+      0.00927734375000000000f,     -0.00158691406250000020f,
+      0.02526855468749999700f,      0.02813720703125000000f,
+      0.01351928710937500000f,      0.00338745117187500000f,
+      0.00421142578125000000f,      0.00378417968750000000f,
+      0.00515747070312500000f,      0.00042724609375000000f,
+      0.00439453125000000000f,      0.00253295898437500040f,
+      0.00402832031250000000f,      0.00177001953125000000f,
+     -0.01260375976562500000f,     -0.02294921875000000000f,
+      0.02651977539062500000f,      0.01025390625000000000f,
+      0.01174926757812500200f,      0.00210571289062500000f,
+      0.00170898437500000000f,      0.02532958984375000000f,
+     -0.00692749023437500000f,     -0.00811767578125000000f,
+     -0.01123046875000000000f,     -0.01342773437500000000f,
+     -0.03646850585937500000f,      0.00497436523437500000f,
+      0.00384521484375000000f,     -0.00695800781250000000f,
+      0.02447509765625000000f,      0.00476074218750000000f,
+      0.00573730468750000000f,      0.00366210937499999960f,
+      0.01147460937500000000f,      0.00180053710937500000f,
+     -0.01092529296875000000f,     -0.01702880859375000000f,
+     -0.04046630859375000000f,     -0.00775146484375000000f,
+     -0.00616455078125000000f,     -0.02407836914062500000f,
+      0.00903320312500000000f,      0.00280761718750000000f,
+     -0.00213623046875000000f,     -0.00393676757812500000f,
+     -0.02191162109375000000f,     -0.03463745117187500000f,
+      0.00891113281250000000f,     -0.00088500976562500000f,
+     -0.01925659179687500000f,      0.01486206054687500000f,
+     -0.00479125976562500000f,     -0.00466918945312500000f,
+     -0.00851440429687500000f,      0.00006103515625000000f,
+     -0.01278686523437500000f,     -0.01043701171875000000f,
+     -0.00103759765625000000f,     -0.01568603515625000000f,
+     -0.02438354492187499700f,     -0.04794311523437500000f,
+     -0.02096557617187500000f,     -0.01858520507812500000f,
+     -0.01666259765625000000f,     -0.00396728515625000000f,
+     -0.00656127929687500000f,     -0.00769042968750000000f,
+     -0.01361083984375000000f,     -0.01751708984375000000f,
+     -0.04080200195312500000f,      0.00631713867187499910f,
+     -0.00219726562500000000f,      0.00097656250000000000f,
+      0.00314331054687500000f,     -0.01959228515625000000f,
+      0.02874755859375000300f,      0.02236938476562499700f,
+      0.00570678710937500090f,      0.00088500976562500000f,
+     -0.00643920898437500000f,     -0.02484130859375000300f,
+      0.00436401367187500000f,      0.00686645507812500000f,
+      0.00061035156250000000f,      0.00073242187500000000f,
+     -0.00817871093750000000f,     -0.01150512695312500000f,
+      0.04953002929687499300f,      0.03457641601562500000f,
+      0.02035522460937500000f,      0.00500488281250000000f,
+      0.00936889648437500000f,      0.01116943359375000000f,
+      0.00570678710937500090f,      0.00103759765625000000f,
+      0.00189208984375000000f,     -0.00955200195312500000f,
+     -0.02539062500000000300f,     -0.04522705078125000000f,
+     -0.03604125976562500000f,      0.01473999023437500000f,
+     -0.00128173828125000000f,     -0.00119018554687500000f,
+     -0.01373291015625000000f,     -0.04290771484375000000f,
+     -0.01791381835937500000f,     -0.00158691406250000020f,
+     -0.02319335937500000000f,      0.01019287109375000000f,
+      0.00299072265625000000f,     -0.00183105468749999980f,
+     -0.01525878906249999800f,     -0.01489257812500000000f,
+     -0.03228759765625000000f,      0.00912475585937500000f,
+      0.00399780273437500000f,     -0.00762939453124999910f,
+     -0.00765991210937500090f,     -0.02145385742187500000f,
+      0.03164672851562500000f,      0.01733398437500000000f,
+     -0.01260375976562500000f,     -0.00808715820312500000f,
+      0.05148315429687500000f,      0.01748657226562500000f,
+      0.01052856445312500000f,      0.00985717773437500000f,
+      0.00299072265625000000f,      0.00186157226562500000f,
+     -0.00311279296875000000f,      0.00094604492187500000f,
+      0.00411987304687500000f,      0.00454711914062500000f,
+      0.01882934570312500000f,      0.01113891601562500000f,
+     -0.00119018554687500000f,      0.00103759765625000000f,
+     -0.01864624023437500000f,      0.03665161132812500000f,
+      0.04336547851562500000f,      0.02246093750000000000f,
+     -0.01263427734374999800f,     -0.01199340820312500000f,
+     -0.01501464843750000000f,     -0.01046752929687500200f,
+     -0.00964355468750000000f,     -0.01623535156250000000f,
+      0.01611328125000000000f,      0.00524902343750000000f,
+      0.00274658203125000000f,      0.00982666015625000000f,
+     -0.00897216796875000000f,     -0.00973510742187500000f,
+     -0.01651000976562500000f,      0.01535034179687500000f,
+      0.01950073242187500000f,      0.01223754882812500000f,
+      0.00003051757812500000f,     -0.00454711914062500000f,
+     -0.00222778320312500000f,     -0.00509643554687500000f,
+      0.00457763671875000000f,      0.00360107421875000000f,
+      0.00939941406250000000f,      0.00665283203124999910f,
+      0.00369262695312500000f,      0.00595092773437500000f,
+     -0.00436401367187500000f,     -0.00796508789062500000f,
+     -0.03091430664062500000f,     -0.02447509765625000000f,
+      0.01181030273437500000f,      0.01330566406249999800f,
+      0.00396728515625000000f,     -0.01303100585937500200f,
+     -0.01367187500000000000f,     -0.02078247070312500000f,
+      0.00375366210937500000f,     -0.00265502929687500000f,
+     -0.00765991210937500090f,     -0.00344848632812500000f,
+      0.00836181640625000000f,      0.00946044921875000000f,
+      0.01358032226562500000f,      0.01528930664062500000f,
+      0.01080322265625000200f,      0.00830078125000000000f,
+      0.00430297851562500000f,     -0.00869750976562500000f,
+      0.01736450195312500000f,      0.02001953125000000000f,
+      0.00112915039062500000f,     -0.00149536132812500000f,
+      0.00765991210937500090f,     -0.01177978515625000000f,
+     -0.00802612304687500000f,      0.03424072265625000000f,
+      0.01843261718750000000f,      0.01849365234375000000f,
+      0.01025390625000000000f,      0.00289916992187500000f,
+      0.00103759765625000000f,      0.00000000000000000000f,
+      0.00259399414062500000f,      0.00549316406250000000f,
+      0.00631713867187499910f,     -0.01119995117187500000f,
+     -0.01898193359375000000f,      0.03265380859375000000f,
+     -0.00018310546875000000f,     -0.00241088867187500000f,
+     -0.00488281250000000000f,     -0.00280761718750000000f,
+     -0.00418090820312500000f,     -0.00842285156250000000f,
+     -0.00985717773437500000f,     -0.01132202148437500000f,
+     -0.02124023437500000000f,     -0.03161621093750000000f,
+      0.01242065429687500200f,      0.00311279296875000000f,
+     -0.00262451171875000000f,     -0.00653076171875000000f,
+     -0.01470947265625000200f,     -0.01974487304687500000f,
+     -0.00085449218750000000f,     -0.00888061523437500000f,
+     -0.00296020507812500000f,     -0.00549316406250000000f,
+     -0.00762939453124999910f,     -0.01327514648437500000f,
+     -0.00054931640625000000f,     -0.00231933593750000000f,
+     -0.01013183593750000200f,      0.01251220703125000000f,
+      0.01242065429687500200f,      0.00512695312500000000f,
+      0.01644897460937500000f,      0.01254272460937500000f,
+      0.00775146484375000000f,      0.00338745117187500000f,
+      0.00177001953125000000f,     -0.00442504882812500000f,
+      0.00610351562500000000f,      0.00091552734374999989f,
+      0.00570678710937500090f,      0.00354003906250000000f,
+      0.00399780273437500000f,     -0.01119995117187500000f,
+     -0.01449584960937500000f,      0.02383422851562500300f,
+     -0.01705932617187500000f,      0.01712036132812500000f,
+      0.00595092773437500000f,     -0.00350952148437500040f,
+      0.00024414062500000000f,     -0.00512695312500000000f,
+      0.00091552734374999989f,      0.00167846679687500000f,
+     -0.00372314453125000000f,      0.00399780273437500000f,
+      0.00250244140625000000f,     -0.00015258789062500000f,
+     -0.00833129882812500000f,     -0.00152587890625000000f,
+     -0.01928710937500000000f,      0.02038574218750000000f,
+      0.00012207031250000000f,      0.00097656250000000000f,
+     -0.00079345703125000011f,     -0.00851440429687500000f,
+      0.00961303710937500000f,      0.00503540039062499910f,
+      0.00601196289062499910f,      0.01150512695312500000f,
+      0.00473022460937500000f,     -0.00125122070312500000f,
+     -0.00421142578125000000f,     -0.00988769531250000000f,
+     -0.00332641601562499960f,     -0.01882934570312500000f,
+      0.01098632812500000000f,      0.00299072265625000000f,
+     -0.00161743164062500000f,     -0.00973510742187500000f,
+     -0.00347900390625000000f,     -0.00747680664062500000f,
+     -0.00250244140625000000f,      0.01547241210937500000f,
+      0.01428222656250000000f,      0.00802612304687500000f,
+     -0.00418090820312500000f,     -0.01187133789062500000f,
+      0.01989746093750000000f,      0.01080322265625000200f,
+     -0.00054931640625000000f,     -0.00692749023437500000f,
+     -0.01409912109375000000f,     -0.00411987304687500000f,
+      0.00967407226562500000f,      0.00161743164062500000f,
+     -0.00048828125000000000f,      0.00201416015625000000f,
+     -0.00219726562500000000f,     -0.00384521484375000000f,
+     -0.01086425781250000000f,     -0.01058959960937500000f,
+     -0.01000976562500000000f,     -0.00219726562500000000f,
+     -0.01028442382812500000f,      0.00988769531250000000f,
+      0.00463867187500000000f,      0.01065063476562500000f,
+      0.00515747070312500000f,     -0.00598144531250000000f,
+      0.00546264648437500000f,      0.00775146484375000000f,
+      0.00793457031250000000f,      0.00991821289062500000f,
+     -0.00225830078125000000f,     -0.00244140625000000000f,
+      0.00228881835937500000f,     -0.00094604492187500000f,
+      0.00823974609375000000f,      0.00839233398437500000f,
+      0.00265502929687500000f,      0.00848388671875000000f,
+     -0.01361083984375000000f,     -0.00918579101562500000f,
+      0.00942993164062500000f,      0.00216674804687500000f,
+     -0.00076293945312500000f,     -0.00738525390625000000f,
+      0.01574707031250000000f,      0.00491333007812500000f,
+     -0.00494384765625000000f,     -0.00253295898437500040f,
+      0.01004028320312500000f,      0.00701904296875000090f,
+     -0.00949096679687500000f,     -0.00790405273437500000f,
+      0.00540161132812500090f,     -0.00079345703125000011f,
+     -0.01409912109375000000f,      0.00271606445312500000f,
+      0.00784301757812500000f,      0.00018310546875000000f,
+     -0.00396728515625000000f,     -0.00283813476562499960f,
+     -0.01391601562500000000f,     -0.00967407226562500000f,
+     -0.00674438476562500000f,     -0.00628662109375000000f,
+     -0.01272583007812500000f,     -0.00555419921875000000f,
+     -0.00225830078125000000f,      0.00714111328125000000f,
+      0.00146484375000000000f,      0.00796508789062500000f,
+      0.01095581054687500000f,      0.00704956054687500000f,
+      0.00787353515625000000f,      0.00259399414062500000f,
+     -0.00860595703125000000f,      0.00769042968750000000f,
+     -0.00448608398437500000f,     -0.00677490234375000000f,
+      0.00765991210937500090f,     -0.00631713867187499910f,
+      0.01351928710937500000f,      0.00375366210937500000f,
+     -0.01272583007812500000f,     -0.00109863281250000000f,
+      0.00833129882812500000f,     -0.00735473632812500090f,
+      0.00732421874999999910f,     -0.00341796875000000000f,
+      0.00134277343749999980f,     -0.00509643554687500000f,
+      0.00384521484375000000f,     -0.00378417968750000000f,
+     -0.00234985351562500000f,      0.00177001953125000000f,
+     -0.01223754882812500000f,      0.01016235351562500000f,
+     -0.00360107421875000000f,      0.00250244140625000000f,
+      0.00384521484375000000f,      0.00460815429687500000f,
+     -0.01321411132812500000f,      0.01095581054687500000f,
+     -0.00396728515625000000f,     -0.00311279296875000000f,
+      0.00399780273437500000f,     -0.00744628906250000000f,
+      0.00262451171875000000f,      0.00259399414062500000f,
+     -0.01409912109375000000f,      0.01263427734374999800f,
+     -0.00732421874999999910f,      0.00048828125000000000f,
+      0.00442504882812500000f,      0.00085449218750000000f,
+     -0.00625610351562500000f,     -0.01467895507812500000f,
+      0.01138305664062500000f,      0.00894165039062500000f,
+     -0.00219726562500000000f,     -0.00531005859375000000f,
+      0.00189208984375000000f,      0.00790405273437500000f,
+     -0.00024414062500000000f,     -0.00054931640625000000f,
+      0.01104736328125000000f,      0.00711059570312500000f,
+      0.00564575195312500000f,      0.00131225585937500000f,
+      0.00848388671875000000f,      0.00082397460937500000f,
+      0.00588989257812500000f,      0.01739501953125000000f,
+     -0.00756835937500000000f,      0.00576782226562500000f,
+      0.00280761718750000000f,      0.00094604492187500000f,
+     -0.00839233398437500000f,     -0.00009155273437500000f,
+      0.00741577148437500000f,      0.00537109374999999910f,
+      0.01336669921875000200f,      0.00637817382812500090f,
+      0.00628662109375000000f,     -0.00155639648437500000f,
+      0.00241088867187500000f,      0.00332641601562499960f,
+      0.00512695312500000000f,     -0.00564575195312500000f,
+     -0.00939941406250000000f,     -0.00207519531250000000f,
+     -0.01885986328125000000f,      0.01174926757812500200f,
+     -0.00946044921875000000f,     -0.00329589843750000000f,
+     -0.00500488281250000000f,      0.00503540039062499910f,
+      0.00186157226562500000f,     -0.00463867187500000000f,
+     -0.00308227539062500000f,     -0.01257324218750000000f,
+     -0.00817871093750000000f,     -0.00784301757812500000f,
+     -0.00122070312500000000f,     -0.00061035156250000000f,
+     -0.00085449218750000000f,     -0.00482177734375000000f,
+     -0.00918579101562500000f,      0.00827026367187500000f,
+      0.01159667968750000000f,     -0.01031494140625000000f,
+     -0.01119995117187500000f,     -0.00402832031250000000f,
+      0.00195312500000000000f,      0.00347900390625000000f,
+     -0.00399780273437500000f,     -0.00686645507812500000f,
+     -0.00476074218750000000f,     -0.00793457031250000000f,
+     -0.00192260742187500000f,     -0.00354003906250000000f,
+      0.00473022460937500000f,     -0.01788330078125000000f,
+     -0.00616455078125000000f,      0.00775146484375000000f,
+     -0.00875854492187500000f,      0.00543212890625000000f,
+      0.00692749023437500000f,     -0.00323486328125000000f,
+     -0.00897216796875000000f,      0.00500488281250000000f,
+      0.00909423828125000000f,     -0.00305175781250000000f,
+      0.00564575195312500000f,      0.00967407226562500000f,
+      0.00588989257812500000f,     -0.00137329101562500000f,
+      0.00085449218750000000f,      0.00244140625000000000f,
+     -0.00265502929687500000f,     -0.01321411132812500000f,
+      0.00067138671874999989f,     -0.00146484375000000000f,
+      0.00146484375000000000f,     -0.00723266601562500000f,
+     -0.00698852539062499910f,     -0.00424194335937500000f,
+      0.00366210937499999960f,     -0.01110839843750000000f,
+      0.00817871093750000000f,     -0.00415039062500000000f,
+      0.01208496093750000200f,      0.00381469726562499960f,
+      0.00396728515625000000f,     -0.00271606445312500000f,
+     -0.00830078125000000000f,      0.00360107421875000000f,
+     -0.00781250000000000000f,     -0.00207519531250000000f,
+     -0.01376342773437500000f,      0.01489257812500000000f,
+      0.00436401367187500000f,     -0.00503540039062499910f,
+     -0.00146484375000000000f,     -0.00579833984375000000f,
+      0.00323486328125000000f,      0.00668334960937500090f,
+      0.00143432617187500000f,      0.01327514648437500000f,
+      0.00747680664062500000f,      0.00296020507812500000f,
+      0.00228881835937500000f,     -0.01275634765625000200f,
+      0.00369262695312500000f,     -0.00570678710937500090f,
+      0.01739501953125000000f,     -0.00610351562500000000f,
+     -0.01071166992187500000f,      0.00686645507812500000f,
+     -0.00064086914062500000f,     -0.00662231445312500000f,
+      0.00714111328125000000f,     -0.00338745117187500000f,
+      0.00592041015625000000f,      0.00042724609375000000f,
+      0.00738525390625000000f,      0.00360107421875000000f,
+      0.00427246093750000000f,     -0.01211547851562500000f,
+      0.01083374023437500000f,      0.01101684570312499800f,
+     -0.00137329101562500000f,     -0.00595092773437500000f
+};
+
+const SKP_Silk_NLSF_CBS_FLP SKP_Silk_NLSF_CB0_10_Stage_info_FLP[ NLSF_MSVQ_CB0_10_STAGES ] =
+{
+        {  64, &SKP_Silk_NLSF_MSVQ_CB0_10[ 10 *   0 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates[   0 ] },
+        {  16, &SKP_Silk_NLSF_MSVQ_CB0_10[ 10 *  64 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates[  64 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_10[ 10 *  80 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates[  80 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_10[ 10 *  88 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates[  88 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_10[ 10 *  96 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates[  96 ] },
+        {  16, &SKP_Silk_NLSF_MSVQ_CB0_10[ 10 * 104 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates[ 104 ] }
+};
+
+const SKP_Silk_NLSF_CB_FLP SKP_Silk_NLSF_CB0_10_FLP =
+{
+        NLSF_MSVQ_CB0_10_STAGES,
+        SKP_Silk_NLSF_CB0_10_Stage_info_FLP,
+        SKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min,
+        SKP_Silk_NLSF_MSVQ_CB0_10_CDF,
+        SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr,
+        SKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx
+};
+
--- /dev/null
+++ b/src_FLP/SKP_Silk_tables_NLSF_CB0_16_FLP.c
@@ -1,0 +1,1925 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/**********************************************/
+/* This file has been automatically generated */
+/*                                            */
+/* ROM usage: 14.76 kB                        */
+/**********************************************/
+
+#include "SKP_Silk_tables_FLP.h"
+#include "SKP_Silk_tables_NLSF_CB0_16.h"
+
+const SKP_float SKP_Silk_NLSF_MSVQ_CB0_16_rates[ NLSF_MSVQ_CB0_16_VECTORS ] =
+{
+      5.50000000000000000000f,      5.65625000000000000000f,
+      5.68750000000000000000f,      5.71875000000000000000f,
+      5.81250000000000000000f,      5.81250000000000000000f,
+      5.96875000000000000000f,      5.96875000000000000000f,
+      5.96875000000000000000f,      6.12500000000000000000f,
+      6.15625000000000000000f,      6.28125000000000000000f,
+      6.34375000000000000000f,      6.43750000000000000000f,
+      6.43750000000000000000f,      6.43750000000000000000f,
+      6.46875000000000000000f,      6.46875000000000000000f,
+      6.53125000000000000000f,      6.53125000000000000000f,
+      6.53125000000000000000f,      6.53125000000000000000f,
+      6.56250000000000000000f,      6.56250000000000000000f,
+      6.56250000000000000000f,      6.59375000000000000000f,
+      6.59375000000000000000f,      6.59375000000000000000f,
+      6.62500000000000000000f,      6.68750000000000000000f,
+      6.75000000000000000000f,      6.75000000000000000000f,
+      6.78125000000000000000f,      6.78125000000000000000f,
+      6.78125000000000000000f,      6.78125000000000000000f,
+      6.81250000000000000000f,      6.81250000000000000000f,
+      6.84375000000000000000f,      6.84375000000000000000f,
+      6.87500000000000000000f,      6.90625000000000000000f,
+      6.93750000000000000000f,      6.96875000000000000000f,
+      6.96875000000000000000f,      6.96875000000000000000f,
+      6.96875000000000000000f,      7.00000000000000000000f,
+      7.00000000000000000000f,      7.00000000000000000000f,
+      7.03125000000000000000f,      7.03125000000000000000f,
+      7.06250000000000000000f,      7.06250000000000000000f,
+      7.06250000000000000000f,      7.06250000000000000000f,
+      7.09375000000000000000f,      7.09375000000000000000f,
+      7.09375000000000000000f,      7.09375000000000000000f,
+      7.09375000000000000000f,      7.09375000000000000000f,
+      7.12500000000000000000f,      7.12500000000000000000f,
+      7.12500000000000000000f,      7.12500000000000000000f,
+      7.15625000000000000000f,      7.15625000000000000000f,
+      7.15625000000000000000f,      7.18750000000000000000f,
+      7.18750000000000000000f,      7.18750000000000000000f,
+      7.21875000000000000000f,      7.21875000000000000000f,
+      7.21875000000000000000f,      7.21875000000000000000f,
+      7.25000000000000000000f,      7.25000000000000000000f,
+      7.25000000000000000000f,      7.25000000000000000000f,
+      7.28125000000000000000f,      7.31250000000000000000f,
+      7.34375000000000000000f,      7.34375000000000000000f,
+      7.34375000000000000000f,      7.37500000000000000000f,
+      7.37500000000000000000f,      7.37500000000000000000f,
+      7.37500000000000000000f,      7.40625000000000000000f,
+      7.40625000000000000000f,      7.40625000000000000000f,
+      7.40625000000000000000f,      7.50000000000000000000f,
+      7.50000000000000000000f,      7.50000000000000000000f,
+      7.50000000000000000000f,      7.53125000000000000000f,
+      7.56250000000000000000f,      7.59375000000000000000f,
+      7.62500000000000000000f,      7.62500000000000000000f,
+      7.71875000000000000000f,      7.71875000000000000000f,
+      7.75000000000000000000f,      7.75000000000000000000f,
+      7.75000000000000000000f,      7.78125000000000000000f,
+      7.84375000000000000000f,      7.96875000000000000000f,
+      7.96875000000000000000f,      8.00000000000000000000f,
+      8.12500000000000000000f,      8.12500000000000000000f,
+      8.15625000000000000000f,      8.25000000000000000000f,
+      8.25000000000000000000f,      8.31250000000000000000f,
+      8.31250000000000000000f,      8.37500000000000000000f,
+      8.46875000000000000000f,      8.56250000000000000000f,
+      8.62500000000000000000f,      8.71875000000000000000f,
+      9.00000000000000000000f,      9.00000000000000000000f,
+      9.00000000000000000000f,      9.00000000000000000000f,
+      3.68750000000000000000f,      3.75000000000000000000f,
+      3.78125000000000000000f,      3.78125000000000000000f,
+      3.81250000000000000000f,      3.90625000000000000000f,
+      3.90625000000000000000f,      4.03125000000000000000f,
+      4.03125000000000000000f,      4.06250000000000000000f,
+      4.09375000000000000000f,      4.12500000000000000000f,
+      4.25000000000000000000f,      4.28125000000000000000f,
+      4.31250000000000000000f,      4.53125000000000000000f,
+      2.71875000000000000000f,      2.75000000000000000000f,
+      2.84375000000000000000f,      3.03125000000000000000f,
+      3.06250000000000000000f,      3.12500000000000000000f,
+      3.28125000000000000000f,      3.31250000000000000000f,
+      2.87500000000000000000f,      2.96875000000000000000f,
+      2.96875000000000000000f,      3.00000000000000000000f,
+      3.03125000000000000000f,      3.03125000000000000000f,
+      3.06250000000000000000f,      3.09375000000000000000f,
+      2.75000000000000000000f,      2.87500000000000000000f,
+      2.96875000000000000000f,      2.96875000000000000000f,
+      3.00000000000000000000f,      3.03125000000000000000f,
+      3.06250000000000000000f,      3.40625000000000000000f,
+      2.90625000000000000000f,      2.90625000000000000000f,
+      2.90625000000000000000f,      3.00000000000000000000f,
+      3.03125000000000000000f,      3.03125000000000000000f,
+      3.09375000000000000000f,      3.15625000000000000000f,
+      2.90625000000000000000f,      2.93750000000000000000f,
+      2.93750000000000000000f,      2.96875000000000000000f,
+      2.96875000000000000000f,      3.09375000000000000000f,
+      3.09375000000000000000f,      3.09375000000000000000f,
+      2.90625000000000000000f,      2.90625000000000000000f,
+      2.90625000000000000000f,      3.00000000000000000000f,
+      3.00000000000000000000f,      3.03125000000000000000f,
+      3.12500000000000000000f,      3.18750000000000000000f,
+      2.90625000000000000000f,      2.96875000000000000000f,
+      2.96875000000000000000f,      3.00000000000000000000f,
+      3.00000000000000000000f,      3.00000000000000000000f,
+      3.06250000000000000000f,      3.09375000000000000000f,
+      3.90625000000000000000f,      3.90625000000000000000f,
+      3.96875000000000000000f,      3.96875000000000000000f,
+      3.96875000000000000000f,      3.96875000000000000000f,
+      4.00000000000000000000f,      4.00000000000000000000f,
+      4.00000000000000000000f,      4.00000000000000000000f,
+      4.00000000000000000000f,      4.00000000000000000000f,
+      4.03125000000000000000f,      4.06250000000000000000f,
+      4.09375000000000000000f,      4.12500000000000000000f
+};
+
+const SKP_float SKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min[ 16 + 1 ] =
+{
+      0.00811767578125000000f,
+      0.00009155273437500000f,
+      0.00122070312500000000f,
+      0.00009155273437500000f,
+      0.00009155273437500000f,
+      0.00048828125000000000f,
+      0.00238037109375000000f,
+      0.00271606445312500000f,
+      0.00326538085937500000f,
+      0.00430297851562500000f,
+      0.00573730468750000000f,
+      0.00445556640625000000f,
+      0.00830078125000000000f,
+      0.00732421874999999910f,
+      0.00717163085937500000f,
+      0.00656127929687500000f,
+      0.01928710937500000000f
+};
+
+const SKP_float SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * NLSF_MSVQ_CB0_16_VECTORS ] =
+{
+      0.03570556640625000000f,      0.06951904296875000000f,
+      0.11163330078125001000f,      0.16400146484375000000f,
+      0.23394775390625000000f,      0.27810668945312500000f,
+      0.34478759765624994000f,      0.40600585937500000000f,
+      0.46908569335937500000f,      0.53555297851562500000f,
+      0.59774780273437500000f,      0.65573120117187500000f,
+      0.72625732421875000000f,      0.79461669921875000000f,
+      0.86419677734375000000f,      0.92166137695312500000f,
+      0.04968261718750000700f,      0.07122802734375000000f,
+      0.12557983398437500000f,      0.18420410156250000000f,
+      0.23858642578125000000f,      0.29125976562500000000f,
+      0.35940551757812500000f,      0.42788696289062500000f,
+      0.48178100585937500000f,      0.53125000000000000000f,
+      0.59405517578125000000f,      0.64883422851562500000f,
+      0.69842529296875000000f,      0.74966430664062500000f,
+      0.81524658203125000000f,      0.85629272460937500000f,
+      0.05261230468750000000f,      0.08148193359375000000f,
+      0.12377929687500000000f,      0.19934082031250000000f,
+      0.25503540039062500000f,      0.30880737304687500000f,
+      0.36904907226562506000f,      0.42910766601562500000f,
+      0.50326538085937500000f,      0.57357788085937500000f,
+      0.62307739257812500000f,      0.68365478515625000000f,
+      0.74008178710937511000f,      0.80029296875000011000f,
+      0.86700439453125000000f,      0.91418457031250000000f,
+      0.04556274414062500000f,      0.10458374023437501000f,
+      0.14614868164062500000f,      0.19528198242187500000f,
+      0.25741577148437500000f,      0.31030273437500000000f,
+      0.36621093750000000000f,      0.42926025390625000000f,
+      0.49526977539062500000f,      0.55572509765625000000f,
+      0.61157226562500000000f,      0.67437744140625000000f,
+      0.73709106445312500000f,      0.79635620117187500000f,
+      0.86007690429687500000f,      0.91921997070312489000f,
+      0.03414916992187500000f,      0.06375122070312500000f,
+      0.13107299804687500000f,      0.19058227539062500000f,
+      0.26522827148437500000f,      0.32778930664062500000f,
+      0.38720703125000000000f,      0.45950317382812500000f,
+      0.51965332031250000000f,      0.57348632812500000000f,
+      0.63223266601562500000f,      0.68707275390625011000f,
+      0.74758911132812500000f,      0.81018066406250000000f,
+      0.87338256835937500000f,      0.93475341796875000000f,
+      0.04159545898437500000f,      0.07376098632812500000f,
+      0.11984252929687500000f,      0.16955566406249997000f,
+      0.22650146484375000000f,      0.28427124023437500000f,
+      0.36251831054687500000f,      0.42013549804687500000f,
+      0.49264526367187500000f,      0.56518554687500000000f,
+      0.62432861328125000000f,      0.68902587890625000000f,
+      0.74887084960937500000f,      0.80676269531250000000f,
+      0.86419677734375000000f,      0.92523193359375000000f,
+      0.03424072265625000000f,      0.07638549804687500000f,
+      0.15917968750000000000f,      0.21813964843750000000f,
+      0.28411865234375000000f,      0.33807373046874994000f,
+      0.40206909179687500000f,      0.45166015625000000000f,
+      0.51464843750000000000f,      0.57067871093750000000f,
+      0.62365722656250000000f,      0.68627929687499989000f,
+      0.74987792968750011000f,      0.81182861328125000000f,
+      0.87142944335937500000f,      0.92852783203125000000f,
+      0.01831054687500000000f,      0.04019165039062500700f,
+      0.09063720703125001400f,      0.17117309570312500000f,
+      0.23480224609375000000f,      0.29858398437500000000f,
+      0.37136840820312500000f,      0.42990112304687506000f,
+      0.49984741210937494000f,      0.56085205078125000000f,
+      0.62716674804687500000f,      0.69232177734375000000f,
+      0.75497436523437489000f,      0.81472778320312500000f,
+      0.87420654296875000000f,      0.92636108398437500000f,
+      0.02871704101562500000f,      0.05743408203125000000f,
+      0.13043212890625000000f,      0.16906738281250000000f,
+      0.25885009765625000000f,      0.30084228515625000000f,
+      0.36437988281250000000f,      0.43600463867187494000f,
+      0.49105834960937506000f,      0.56460571289062500000f,
+      0.62030029296875000000f,      0.69006347656250000000f,
+      0.75411987304687511000f,      0.81292724609374989000f,
+      0.87933349609375000000f,      0.92864990234375000000f,
+      0.01937866210937500000f,      0.05184936523437500000f,
+      0.13354492187500000000f,      0.18151855468750000000f,
+      0.24710083007812500000f,      0.30868530273437500000f,
+      0.37457275390625000000f,      0.43267822265625000000f,
+      0.49166870117187500000f,      0.54360961914062500000f,
+      0.60104370117187500000f,      0.66445922851562511000f,
+      0.73019409179687500000f,      0.78936767578124989000f,
+      0.85516357421875000000f,      0.91961669921875000000f,
+      0.04296874999999999300f,      0.06781005859375000000f,
+      0.10754394531250000000f,      0.17135620117187503000f,
+      0.22415161132812497000f,      0.27005004882812500000f,
+      0.33535766601562500000f,      0.38977050781250000000f,
+      0.46850585937500000000f,      0.51959228515625000000f,
+      0.57736206054687500000f,      0.64276123046875000000f,
+      0.71194458007812500000f,      0.76950073242187500000f,
+      0.83035278320312511000f,      0.88571166992187500000f,
+      0.02139282226562500000f,      0.03988647460937500000f,
+      0.10827636718750001000f,      0.19229125976562500000f,
+      0.23632812500000000000f,      0.29217529296875000000f,
+      0.34262084960937494000f,      0.39605712890625000000f,
+      0.46295166015625000000f,      0.53604125976562500000f,
+      0.60348510742187500000f,      0.67434692382812500000f,
+      0.73944091796875000000f,      0.80368041992187500000f,
+      0.86599731445312500000f,      0.92257690429687500000f,
+      0.05346679687500000700f,      0.07214355468750000000f,
+      0.14889526367187500000f,      0.20046997070312500000f,
+      0.23843383789062500000f,      0.29895019531250000000f,
+      0.34176635742187500000f,      0.43609619140625006000f,
+      0.48202514648437500000f,      0.54931640625000000000f,
+      0.62243652343750000000f,      0.68411254882812489000f,
+      0.74182128906250011000f,      0.79724121093750000000f,
+      0.86547851562500000000f,      0.93484497070312500000f,
+      0.02749633789062500000f,      0.04971313476562500000f,
+      0.10241699218749999000f,      0.14144897460937500000f,
+      0.22143554687500000000f,      0.26754760742187500000f,
+      0.30429077148437500000f,      0.35272216796875000000f,
+      0.46432495117187500000f,      0.53540039062500000000f,
+      0.59579467773437500000f,      0.66687011718750000000f,
+      0.72937011718750000000f,      0.79278564453125000000f,
+      0.85855102539062500000f,      0.92114257812500000000f,
+      0.02993774414062500000f,      0.05093383789062500000f,
+      0.10140991210937499000f,      0.14321899414062500000f,
+      0.18960571289062500000f,      0.26525878906250000000f,
+      0.32391357421875006000f,      0.39538574218750000000f,
+      0.46420288085937506000f,      0.54049682617187500000f,
+      0.60595703125000000000f,      0.67510986328124989000f,
+      0.74291992187500000000f,      0.81152343750000000000f,
+      0.87655639648437500000f,      0.93020629882812500000f,
+      0.04904174804687500000f,      0.07864379882812500000f,
+      0.12878417968750000000f,      0.16821289062499997000f,
+      0.26037597656250000000f,      0.31701660156250000000f,
+      0.35482788085937500000f,      0.41720581054687494000f,
+      0.48071289062500000000f,      0.52487182617187500000f,
+      0.60546875000000000000f,      0.66708374023437500000f,
+      0.71697998046875000000f,      0.78692626953125000000f,
+      0.85726928710937500000f,      0.91952514648437500000f,
+      0.02474975585937500000f,      0.04489135742187500000f,
+      0.09594726562500000000f,      0.15383911132812500000f,
+      0.22674560546875000000f,      0.28652954101562500000f,
+      0.34100341796875000000f,      0.40451049804687500000f,
+      0.46255493164062494000f,      0.51089477539062500000f,
+      0.59762573242187500000f,      0.67648315429687500000f,
+      0.73593139648437511000f,      0.79779052734375000000f,
+      0.86618041992187500000f,      0.92758178710937500000f,
+      0.04708862304687499300f,      0.06542968750000000000f,
+      0.11074829101562500000f,      0.19369506835937500000f,
+      0.22378540039062503000f,      0.28500366210937500000f,
+      0.32684326171875000000f,      0.41491699218750006000f,
+      0.46078491210937506000f,      0.52917480468750000000f,
+      0.61346435546875000000f,      0.66790771484375000000f,
+      0.72424316406250000000f,      0.78237915039062500000f,
+      0.84893798828125000000f,      0.91299438476562511000f,
+      0.01501464843750000000f,      0.03616333007812500000f,
+      0.08972167968750000000f,      0.16748046875000003000f,
+      0.21652221679687500000f,      0.26705932617187500000f,
+      0.35388183593749994000f,      0.41439819335937500000f,
+      0.48965454101562500000f,      0.54977416992187500000f,
+      0.61578369140625000000f,      0.67526245117187500000f,
+      0.74050903320312489000f,      0.80584716796875000000f,
+      0.86926269531250000000f,      0.92642211914062500000f,
+      0.04721069335937500000f,      0.06964111328125000000f,
+      0.11270141601562500000f,      0.19351196289062500000f,
+      0.23675537109374997000f,      0.29318237304687500000f,
+      0.36157226562500000000f,      0.40393066406250000000f,
+      0.50549316406250000000f,      0.55142211914062500000f,
+      0.60299682617187500000f,      0.65319824218750011000f,
+      0.73577880859375000000f,      0.81195068359375000000f,
+      0.87847900390625000000f,      0.93551635742187511000f,
+      0.02090454101562500000f,      0.04083251953125000000f,
+      0.10403442382812500000f,      0.16058349609375000000f,
+      0.21209716796875000000f,      0.28143310546875000000f,
+      0.34832763671875000000f,      0.44320678710937500000f,
+      0.49856567382812500000f,      0.54605102539062500000f,
+      0.59313964843750000000f,      0.64996337890625000000f,
+      0.71084594726562500000f,      0.76846313476562500000f,
+      0.85366821289062500000f,      0.93139648437500000000f,
+      0.02706909179687500300f,      0.04824829101562500000f,
+      0.09329223632812500000f,      0.13177490234375000000f,
+      0.21948242187500000000f,      0.26296997070312500000f,
+      0.30661010742187500000f,      0.39996337890625000000f,
+      0.49636840820312500000f,      0.54605102539062500000f,
+      0.61746215820312500000f,      0.68206787109375000000f,
+      0.74398803710937511000f,      0.80517578125000000000f,
+      0.86407470703125000000f,      0.92129516601562489000f,
+      0.06973266601562500000f,      0.11428833007812500000f,
+      0.17279052734375000000f,      0.23120117187500000000f,
+      0.28451538085937500000f,      0.34545898437500000000f,
+      0.40402221679687500000f,      0.46359252929687494000f,
+      0.52413940429687500000f,      0.58670043945312500000f,
+      0.64416503906250000000f,      0.70104980468750000000f,
+      0.75747680664062500000f,      0.81344604492187489000f,
+      0.87161254882812500000f,      0.92956542968750000000f,
+      0.04565429687500000700f,      0.06433105468750000000f,
+      0.10522460937500000000f,      0.21051025390625003000f,
+      0.25415039062500000000f,      0.29467773437500000000f,
+      0.34338378906250000000f,      0.39132690429687500000f,
+      0.45712280273437500000f,      0.50299072265625000000f,
+      0.55480957031250000000f,      0.61294555664062500000f,
+      0.70074462890624989000f,      0.76782226562500000000f,
+      0.84548950195312500000f,      0.90420532226562500000f,
+      0.01754760742187500000f,      0.03848266601562500000f,
+      0.11782836914062500000f,      0.20223999023437500000f,
+      0.25311279296875000000f,      0.32986450195312500000f,
+      0.38772583007812500000f,      0.45068359375000000000f,
+      0.52111816406250000000f,      0.58126831054687500000f,
+      0.64019775390624989000f,      0.70358276367187500000f,
+      0.76208496093750011000f,      0.81491088867187500000f,
+      0.87646484375000000000f,      0.92605590820312500000f,
+      0.05133056640625000000f,      0.06753540039062500000f,
+      0.11846923828125000000f,      0.19036865234374997000f,
+      0.21997070312500000000f,      0.29437255859375000000f,
+      0.33193969726562500000f,      0.40988159179687500000f,
+      0.45181274414062494000f,      0.49478149414062506000f,
+      0.54751586914062500000f,      0.63699340820312489000f,
+      0.71868896484375011000f,      0.78628540039062500000f,
+      0.84704589843750000000f,      0.89907836914062500000f,
+      0.02709960937500000000f,      0.04931640625000000000f,
+      0.11975097656250000000f,      0.15853881835937500000f,
+      0.21990966796875003000f,      0.26388549804687500000f,
+      0.30035400390625000000f,      0.35012817382812500000f,
+      0.49032592773437500000f,      0.55606079101562500000f,
+      0.62081909179687500000f,      0.69500732421875000000f,
+      0.74777221679687500000f,      0.80603027343750000000f,
+      0.85614013671875000000f,      0.90731811523437500000f,
+      0.02456665039062500000f,      0.04437255859375000000f,
+      0.08187866210937500000f,      0.13647460937500000000f,
+      0.24218750000000000000f,      0.28564453125000000000f,
+      0.34783935546875000000f,      0.43777465820312500000f,
+      0.49453735351562500000f,      0.54418945312500000000f,
+      0.59365844726562500000f,      0.66058349609375000000f,
+      0.72933959960937489000f,      0.79125976562500000000f,
+      0.86630249023437511000f,      0.92965698242187500000f,
+      0.05004882812500000000f,      0.07272338867187500000f,
+      0.10632324218750000000f,      0.15509033203125000000f,
+      0.18408203125000000000f,      0.26263427734375000000f,
+      0.35522460937499994000f,      0.39569091796875000000f,
+      0.48345947265625000000f,      0.53002929687500000000f,
+      0.59039306640625000000f,      0.64642333984375000000f,
+      0.72137451171875011000f,      0.79006958007812511000f,
+      0.86572265625000000000f,      0.92465209960937500000f,
+      0.04980468750000000000f,      0.06726074218750000000f,
+      0.13763427734375000000f,      0.23132324218750003000f,
+      0.26605224609375000000f,      0.32080078125000000000f,
+      0.36505126953125000000f,      0.43017578125000000000f,
+      0.47729492187500000000f,      0.52471923828125000000f,
+      0.58419799804687500000f,      0.67892456054687511000f,
+      0.74960327148437489000f,      0.81057739257812500000f,
+      0.87292480468750000000f,      0.93106079101562500000f,
+      0.06234741210937500000f,      0.07971191406250001400f,
+      0.12161254882812500000f,      0.20907592773437500000f,
+      0.24530029296875000000f,      0.29034423828125000000f,
+      0.33505249023437500000f,      0.39028930664062500000f,
+      0.47076416015625000000f,      0.51049804687500000000f,
+      0.57675170898437500000f,      0.61880493164062500000f,
+      0.69891357421875000000f,      0.79983520507812500000f,
+      0.87619018554687500000f,      0.93438720703125011000f,
+      0.06787109375000000000f,      0.08538818359375000000f,
+      0.13626098632812500000f,      0.16235351562500000000f,
+      0.21691894531249997000f,      0.28796386718750000000f,
+      0.33526611328125000000f,      0.40350341796875000000f,
+      0.44552612304687500000f,      0.55899047851562500000f,
+      0.61465454101562500000f,      0.66659545898437500000f,
+      0.72024536132812511000f,      0.78430175781250000000f,
+      0.86010742187500000000f,      0.93328857421875000000f,
+      0.02548217773437500000f,      0.04702758789062500000f,
+      0.12460327148437500000f,      0.17605590820312503000f,
+      0.22540283203125000000f,      0.28683471679687500000f,
+      0.33480834960937500000f,      0.38012695312500000000f,
+      0.45840454101562500000f,      0.56890869140625000000f,
+      0.63607788085937500000f,      0.70495605468750000000f,
+      0.77185058593750000000f,      0.82293701171875000000f,
+      0.88354492187500000000f,      0.92840576171875011000f,
+      0.05477905273437500000f,      0.07150268554687500000f,
+      0.14675903320312500000f,      0.17993164062500003000f,
+      0.21905517578125000000f,      0.26077270507812500000f,
+      0.31198120117187500000f,      0.40802001953125000000f,
+      0.44573974609375000000f,      0.50259399414062500000f,
+      0.55764770507812500000f,      0.63281250000000000000f,
+      0.72158813476562500000f,      0.80130004882812500000f,
+      0.86132812500000000000f,      0.92742919921875000000f,
+      0.05291748046875000000f,      0.06878662109375000000f,
+      0.12301635742187500000f,      0.15832519531250000000f,
+      0.19854736328125000000f,      0.24023437500000000000f,
+      0.29452514648437500000f,      0.39749145507812500000f,
+      0.44003295898437494000f,      0.52810668945312500000f,
+      0.59494018554687500000f,      0.67718505859374989000f,
+      0.74472045898437500000f,      0.80267333984375000000f,
+      0.86044311523437500000f,      0.92092895507812500000f,
+      0.05618286132812500000f,      0.07168579101562500000f,
+      0.12109375000000000000f,      0.14538574218750000000f,
+      0.19458007812500000000f,      0.29983520507812500000f,
+      0.33715820312500000000f,      0.40725708007812500000f,
+      0.44805908203125000000f,      0.49597167968750000000f,
+      0.55490112304687500000f,      0.65194702148437500000f,
+      0.72991943359375000000f,      0.79821777343750000000f,
+      0.85543823242187500000f,      0.91354370117187500000f,
+      0.04370117187500000000f,      0.06246948242187500000f,
+      0.17184448242187500000f,      0.21139526367187500000f,
+      0.25018310546875000000f,      0.29525756835937500000f,
+      0.34661865234375000000f,      0.41217041015625000000f,
+      0.45172119140625000000f,      0.50106811523437500000f,
+      0.55966186523437500000f,      0.67196655273437500000f,
+      0.73620605468750000000f,      0.79885864257812500000f,
+      0.85845947265625000000f,      0.93341064453125000000f,
+      0.05279541015625000700f,      0.07080078125000000000f,
+      0.11425781250000000000f,      0.14672851562500000000f,
+      0.18331909179687500000f,      0.29498291015625000000f,
+      0.33560180664062500000f,      0.41571044921875000000f,
+      0.46490478515625000000f,      0.53390502929687500000f,
+      0.61303710937500000000f,      0.67144775390625000000f,
+      0.72030639648437500000f,      0.77514648437500000000f,
+      0.83554077148437489000f,      0.89276123046875000000f,
+      0.03866577148437500000f,      0.05844116210937500000f,
+      0.16732788085937503000f,      0.20788574218750000000f,
+      0.25112915039062500000f,      0.30270385742187500000f,
+      0.35366821289062494000f,      0.40701293945312500000f,
+      0.45004272460937506000f,      0.54824829101562500000f,
+      0.62719726562500000000f,      0.67648315429687500000f,
+      0.74826049804687500000f,      0.81845092773437500000f,
+      0.88143920898437500000f,      0.93511962890625000000f,
+      0.04656982421875000000f,      0.06802368164062500000f,
+      0.12939453125000000000f,      0.22546386718750000000f,
+      0.27322387695312500000f,      0.31890869140625000000f,
+      0.36312866210937500000f,      0.41864013671875006000f,
+      0.51455688476562500000f,      0.55917358398437500000f,
+      0.62191772460937500000f,      0.69189453125000000000f,
+      0.75674438476562500000f,      0.82110595703125000000f,
+      0.88214111328124989000f,      0.93450927734375000000f,
+      0.06637573242187500000f,      0.08517456054687500000f,
+      0.12524414062500000000f,      0.20980834960937500000f,
+      0.26281738281250000000f,      0.29901123046875000000f,
+      0.37084960937500000000f,      0.41308593750000000000f,
+      0.47677612304687500000f,      0.53961181640625000000f,
+      0.58633422851562500000f,      0.64270019531250000000f,
+      0.74407958984375000000f,      0.81665039062499989000f,
+      0.87380981445312500000f,      0.92309570312500000000f,
+      0.01385498046875000000f,      0.03756713867187500000f,
+      0.13241577148437500000f,      0.17510986328125000000f,
+      0.23040771484375000000f,      0.27484130859375000000f,
+      0.31494140625000000000f,      0.41275024414062506000f,
+      0.48843383789062500000f,      0.54470825195312500000f,
+      0.61251831054687500000f,      0.67114257812500000000f,
+      0.73086547851562500000f,      0.79476928710937500000f,
+      0.86196899414062511000f,      0.92086791992187489000f,
+      0.06866455078125000000f,      0.08517456054687500000f,
+      0.12908935546875000000f,      0.16122436523437500000f,
+      0.20635986328125000000f,      0.32369995117187506000f,
+      0.36251831054687500000f,      0.42178344726562500000f,
+      0.48208618164062494000f,      0.52685546875000000000f,
+      0.61123657226562500000f,      0.67950439453125000000f,
+      0.75036621093750000000f,      0.80679321289062500000f,
+      0.86193847656250000000f,      0.92831420898437489000f,
+      0.05175781250000000000f,      0.06762695312500000000f,
+      0.13146972656250000000f,      0.25588989257812500000f,
+      0.29803466796875000000f,      0.33660888671875000000f,
+      0.38317871093750000000f,      0.43026733398437500000f,
+      0.49810791015625000000f,      0.53833007812500000000f,
+      0.58489990234375000000f,      0.62835693359375000000f,
+      0.73141479492187489000f,      0.81964111328125000000f,
+      0.87884521484375000000f,      0.93267822265625000000f,
+      0.07482910156250000000f,      0.09875488281250000000f,
+      0.13333129882812500000f,      0.18670654296875000000f,
+      0.21838378906250000000f,      0.27474975585937500000f,
+      0.35122680664062500000f,      0.39050292968750000000f,
+      0.48062133789062506000f,      0.52767944335937500000f,
+      0.59481811523437500000f,      0.67874145507812500000f,
+      0.74859619140625000000f,      0.80792236328125000000f,
+      0.86282348632812489000f,      0.91775512695312511000f,
+      0.05526733398437500000f,      0.07754516601562500000f,
+      0.10848999023437500000f,      0.16723632812500000000f,
+      0.27841186523437500000f,      0.32125854492187500000f,
+      0.36297607421875000000f,      0.41683959960937500000f,
+      0.46575927734374994000f,      0.51571655273437500000f,
+      0.59100341796875000000f,      0.64297485351562511000f,
+      0.69256591796875000000f,      0.74200439453125000000f,
+      0.83178710937500000000f,      0.91500854492187500000f,
+      0.04739379882812500000f,      0.06854248046875000000f,
+      0.13912963867187500000f,      0.16784667968749997000f,
+      0.20611572265625003000f,      0.24029541015625000000f,
+      0.35824584960937500000f,      0.41415405273437500000f,
+      0.46350097656250000000f,      0.54562377929687500000f,
+      0.61892700195312500000f,      0.68695068359375000000f,
+      0.75115966796875000000f,      0.81326293945312500000f,
+      0.87847900390625000000f,      0.93856811523437500000f,
+      0.06048583984375000000f,      0.08447265625000000000f,
+      0.11700439453125001000f,      0.18200683593750000000f,
+      0.26647949218750000000f,      0.30236816406250000000f,
+      0.36001586914062500000f,      0.45205688476562500000f,
+      0.49777221679687506000f,      0.54766845703125000000f,
+      0.64382934570312500000f,      0.69735717773437500000f,
+      0.74633789062500000000f,      0.80273437500000000000f,
+      0.85955810546875000000f,      0.90805053710937511000f,
+      0.05566406250000000000f,      0.07717895507812500000f,
+      0.11648559570312500000f,      0.16629028320312500000f,
+      0.20916748046875003000f,      0.26593017578125000000f,
+      0.31680297851562500000f,      0.37493896484375006000f,
+      0.43316650390625000000f,      0.48138427734375000000f,
+      0.59582519531250000000f,      0.65228271484375000000f,
+      0.72311401367187500000f,      0.79556274414062500000f,
+      0.85742187500000000000f,      0.92199707031250011000f,
+      0.06750488281250000000f,      0.08709716796875001400f,
+      0.12045288085937500000f,      0.17999267578125000000f,
+      0.30303955078125000000f,      0.35266113281250000000f,
+      0.39227294921875000000f,      0.45129394531249994000f,
+      0.49829101562500006000f,      0.54016113281250000000f,
+      0.62014770507812500000f,      0.67437744140625000000f,
+      0.72241210937500011000f,      0.77182006835937500000f,
+      0.82324218750000011000f,      0.87237548828125000000f,
+      0.06173706054687500000f,      0.07931518554687500000f,
+      0.12280273437500000000f,      0.15002441406250000000f,
+      0.20181274414062500000f,      0.34024047851562494000f,
+      0.38015747070312500000f,      0.44635009765625000000f,
+      0.49804687500000000000f,      0.54388427734375000000f,
+      0.60037231445312500000f,      0.64611816406250000000f,
+      0.70541381835937500000f,      0.79501342773437500000f,
+      0.87966918945312500000f,      0.93865966796875000000f,
+      0.04968261718750000700f,      0.06732177734375000000f,
+      0.10580444335937500000f,      0.13317871093750000000f,
+      0.26486206054687500000f,      0.31045532226562500000f,
+      0.36206054687500000000f,      0.41744995117187500000f,
+      0.45770263671874994000f,      0.51690673828125000000f,
+      0.58615112304687500000f,      0.65197753906249989000f,
+      0.72784423828125000000f,      0.79696655273437500000f,
+      0.85827636718750000000f,      0.92385864257812500000f,
+      0.06146240234375000000f,      0.07943725585937500000f,
+      0.12554931640625000000f,      0.22137451171875000000f,
+      0.25988769531250000000f,      0.30648803710937500000f,
+      0.36077880859375000000f,      0.41207885742187500000f,
+      0.49832153320312500000f,      0.54400634765625000000f,
+      0.60110473632812500000f,      0.64941406250000000000f,
+      0.70651245117187500000f,      0.75259399414062500000f,
+      0.81808471679687500000f,      0.92044067382812511000f,
+      0.07250976562500000000f,      0.09094238281250000000f,
+      0.13494873046875000000f,      0.17608642578125000000f,
+      0.21411132812500000000f,      0.29672241210937500000f,
+      0.33950805664062506000f,      0.41247558593750000000f,
+      0.47256469726562506000f,      0.51834106445312500000f,
+      0.58471679687500000000f,      0.62826538085937500000f,
+      0.74465942382812500000f,      0.82946777343750000000f,
+      0.88641357421875000000f,      0.93527221679687500000f,
+      0.07489013671875000000f,      0.10687255859375000000f,
+      0.14111328125000000000f,      0.18368530273437500000f,
+      0.23291015625000000000f,      0.27005004882812500000f,
+      0.32934570312500000000f,      0.42614746093750000000f,
+      0.47372436523437500000f,      0.52139282226562500000f,
+      0.59848022460937500000f,      0.64813232421875000000f,
+      0.69750976562500000000f,      0.76623535156249989000f,
+      0.85772705078125011000f,      0.91217041015625000000f,
+      0.04800415039062500700f,      0.06939697265625000000f,
+      0.10095214843750000000f,      0.18307495117187500000f,
+      0.27395629882812500000f,      0.30834960937500000000f,
+      0.38015747070312500000f,      0.43511962890625000000f,
+      0.48062133789062506000f,      0.55480957031250000000f,
+      0.60955810546875000000f,      0.64859008789062500000f,
+      0.70327758789062500000f,      0.76470947265625000000f,
+      0.84658813476562500000f,      0.92514038085937500000f,
+      0.05929565429687500000f,      0.08331298828125000000f,
+      0.12634277343750000000f,      0.18798828125000003000f,
+      0.22860717773437500000f,      0.27423095703125000000f,
+      0.34512329101562500000f,      0.38986206054687500000f,
+      0.45227050781250000000f,      0.50531005859375000000f,
+      0.54653930664062500000f,      0.60293579101562500000f,
+      0.65649414062500011000f,      0.72036743164062500000f,
+      0.83233642578124989000f,      0.90109252929687500000f,
+      0.06167602539062500000f,      0.07879638671875000000f,
+      0.13714599609375000000f,      0.17807006835937503000f,
+      0.21340942382812497000f,      0.25161743164062500000f,
+      0.29989624023437500000f,      0.44961547851562500000f,
+      0.50238037109375000000f,      0.54608154296875000000f,
+      0.59957885742187500000f,      0.64340209960937489000f,
+      0.72521972656250000000f,      0.81381225585937500000f,
+      0.88720703125000000000f,      0.94573974609375000000f,
+      0.03210449218750000000f,      0.05416870117187500000f,
+      0.09820556640624998600f,      0.13360595703125000000f,
+      0.23394775390625000000f,      0.28695678710937500000f,
+      0.34326171875000000000f,      0.40670776367187500000f,
+      0.45690917968750000000f,      0.54815673828125000000f,
+      0.63348388671875000000f,      0.68218994140625000000f,
+      0.76510620117187500000f,      0.83035278320312511000f,
+      0.88504028320312500000f,      0.93411254882812489000f,
+      0.06768798828125000000f,      0.08746337890624998600f,
+      0.12887573242187500000f,      0.16333007812500000000f,
+      0.20083618164062500000f,      0.30456542968750000000f,
+      0.35360717773437500000f,      0.40042114257812500000f,
+      0.46365356445312500000f,      0.50607299804687500000f,
+      0.56109619140625000000f,      0.61279296875000000000f,
+      0.67178344726562500000f,      0.77261352539062500000f,
+      0.85836791992187500000f,      0.91186523437500011000f,
+      0.06549072265625000000f,      0.08666992187500000000f,
+      0.13418579101562500000f,      0.17822265625000000000f,
+      0.22732543945312500000f,      0.26614379882812500000f,
+      0.32080078125000000000f,      0.36425781250000000000f,
+      0.41488647460937500000f,      0.52651977539062500000f,
+      0.58929443359375000000f,      0.63754272460937500000f,
+      0.71463012695312500000f,      0.78207397460937500000f,
+      0.84683227539062500000f,      0.92257690429687500000f,
+      0.06018066406250000000f,      0.07992553710937500000f,
+      0.11462402343750000000f,      0.19430541992187500000f,
+      0.23318481445312503000f,      0.26898193359375000000f,
+      0.37493896484375006000f,      0.42016601562500000000f,
+      0.46719360351562506000f,      0.55041503906250000000f,
+      0.59683227539062500000f,      0.63793945312500000000f,
+      0.68914794921875011000f,      0.75915527343750000000f,
+      0.84838867187500000000f,      0.92895507812500000000f,
+      0.06118774414062500000f,      0.07864379882812500000f,
+      0.13037109375000000000f,      0.22500610351562500000f,
+      0.26116943359375000000f,      0.31198120117187500000f,
+      0.35919189453125000000f,      0.40899658203125000000f,
+      0.50360107421875000000f,      0.54931640625000000000f,
+      0.59951782226562500000f,      0.64404296875000000000f,
+      0.70159912109375000000f,      0.81805419921875000000f,
+      0.90042114257812489000f,      0.94427490234375000000f,
+      0.03518676757812500000f,      0.05560302734375000000f,
+      0.11364746093750001000f,      0.16610717773437500000f,
+      0.21331787109375000000f,      0.26556396484375000000f,
+      0.31399536132812500000f,      0.36312866210937500000f,
+      0.42285156250000000000f,      0.46737670898437500000f,
+      0.53713989257812500000f,      0.64282226562500000000f,
+      0.72302246093750011000f,      0.79598999023437500000f,
+      0.87237548828125000000f,      0.93502807617187500000f,
+      0.03979492187500000000f,      0.05703735351562500000f,
+      0.10125732421875000000f,      0.21957397460937500000f,
+      0.29336547851562500000f,      0.32754516601562500000f,
+      0.37820434570312500000f,      0.41894531250000000000f,
+      0.48284912109375000000f,      0.53326416015625000000f,
+      0.57623291015625000000f,      0.63146972656250000000f,
+      0.70538330078125000000f,      0.77941894531250000000f,
+      0.84484863281250000000f,      0.89245605468750011000f,
+      0.06387329101562500000f,      0.08212280273437500000f,
+      0.12261962890625000000f,      0.20318603515625000000f,
+      0.24252319335937500000f,      0.27914428710937500000f,
+      0.32034301757812500000f,      0.36257934570312500000f,
+      0.48486328125000006000f,      0.54385375976562500000f,
+      0.58999633789062500000f,      0.64797973632812500000f,
+      0.71322631835937489000f,      0.77008056640625000000f,
+      0.84085083007812500000f,      0.91546630859375000000f,
+      0.01754760742187500000f,      0.04061889648437499300f,
+      0.16186523437500000000f,      0.21087646484374997000f,
+      0.25711059570312500000f,      0.30780029296875000000f,
+      0.35330200195312500000f,      0.41192626953125006000f,
+      0.50183105468750000000f,      0.56539916992187500000f,
+      0.62759399414062500000f,      0.69723510742187500000f,
+      0.76031494140625000000f,      0.81457519531249989000f,
+      0.87765502929687500000f,      0.92031860351562500000f,
+      0.04379272460937500000f,      0.06176757812500000000f,
+      0.10018920898437500000f,      0.12683105468750000000f,
+      0.23226928710937500000f,      0.32324218750000000000f,
+      0.36770629882812506000f,      0.42501831054687500000f,
+      0.47177124023437500000f,      0.56192016601562500000f,
+      0.62545776367187500000f,      0.67962646484375000000f,
+      0.73919677734375000000f,      0.79629516601562489000f,
+      0.85647583007812500000f,      0.91854858398437500000f,
+      0.04980468750000000000f,      0.06616210937500000000f,
+      0.16906738281250000000f,      0.22821044921875000000f,
+      0.26336669921875000000f,      0.31710815429687500000f,
+      0.35534667968750000000f,      0.43704223632812494000f,
+      0.48037719726562500000f,      0.52969360351562500000f,
+      0.57238769531250000000f,      0.62359619140625000000f,
+      0.69577026367187500000f,      0.79528808593750000000f,
+      0.87103271484375000000f,      0.93676757812500000000f,
+      0.04293823242187500000f,      0.06851196289062500000f,
+      0.10391235351562501000f,      0.17208862304687500000f,
+      0.28744506835937500000f,      0.32608032226562506000f,
+      0.36938476562500000000f,      0.41183471679687494000f,
+      0.47409057617187500000f,      0.56021118164062500000f,
+      0.61022949218750000000f,      0.66189575195312500000f,
+      0.74313354492187500000f,      0.81024169921874989000f,
+      0.88052368164062500000f,      0.93273925781250011000f,
+      0.05111694335937500700f,      0.06793212890625000000f,
+      0.12222290039062501000f,      0.25094604492187500000f,
+      0.30441284179687500000f,      0.34042358398437500000f,
+      0.39129638671875000000f,      0.43688964843750000000f,
+      0.50366210937500000000f,      0.55349731445312500000f,
+      0.59735107421875000000f,      0.64239501953125000000f,
+      0.69454956054687500000f,      0.76025390625000000000f,
+      0.86352539062500011000f,      0.93487548828125000000f,
+      0.03295898437500000000f,      0.04925537109375000000f,
+      0.11053466796875000000f,      0.23086547851562497000f,
+      0.26696777343750000000f,      0.31442260742187500000f,
+      0.35745239257812500000f,      0.42260742187500000000f,
+      0.47708129882812500000f,      0.53204345703125000000f,
+      0.60305786132812500000f,      0.66604614257812500000f,
+      0.71932983398437500000f,      0.77493286132812500000f,
+      0.83636474609375000000f,      0.88693237304687500000f,
+      0.05166625976562500000f,      0.06802368164062500000f,
+      0.10546875000000000000f,      0.13287353515625000000f,
+      0.17303466796875000000f,      0.33233642578125000000f,
+      0.38339233398437500000f,      0.43234252929687500000f,
+      0.48458862304687500000f,      0.53030395507812500000f,
+      0.60476684570312500000f,      0.67050170898437500000f,
+      0.73529052734375000000f,      0.79745483398437500000f,
+      0.86358642578125000000f,      0.91854858398437500000f,
+      0.06231689453125000000f,      0.09030151367187501400f,
+      0.12802124023437500000f,      0.17517089843750000000f,
+      0.21685791015625000000f,      0.25228881835937500000f,
+      0.33953857421875000000f,      0.45693969726562500000f,
+      0.51617431640625000000f,      0.55831909179687500000f,
+      0.62658691406250000000f,      0.67083740234375000000f,
+      0.72360229492187500000f,      0.78640747070312500000f,
+      0.84255981445312511000f,      0.89572143554687500000f,
+      0.03002929687500000000f,      0.04919433593750000000f,
+      0.11621093750000000000f,      0.16067504882812500000f,
+      0.21011352539062500000f,      0.25668334960937500000f,
+      0.29135131835937500000f,      0.33230590820312500000f,
+      0.38214111328125000000f,      0.50415039062500000000f,
+      0.59658813476562500000f,      0.66036987304687500000f,
+      0.72467041015625011000f,      0.79522705078125000000f,
+      0.86395263671874989000f,      0.92694091796875011000f,
+      0.06213378906250000000f,      0.07745361328125000000f,
+      0.12713623046875000000f,      0.23684692382812500000f,
+      0.27911376953125000000f,      0.31774902343750000000f,
+      0.37060546875000006000f,      0.41531372070312500000f,
+      0.47570800781250000000f,      0.52395629882812500000f,
+      0.56637573242187500000f,      0.61380004882812500000f,
+      0.66589355468750000000f,      0.74197387695312500000f,
+      0.85537719726562489000f,      0.93420410156249989000f,
+      0.05709838867187500000f,      0.07186889648437500000f,
+      0.12393188476562500000f,      0.15695190429687500000f,
+      0.22778320312500000000f,      0.30911254882812500000f,
+      0.36441040039062506000f,      0.45779418945312506000f,
+      0.50903320312500000000f,      0.56011962890625000000f,
+      0.60903930664062500000f,      0.67990112304687500000f,
+      0.75869750976562489000f,      0.82006835937500000000f,
+      0.88464355468750000000f,      0.93429565429687511000f,
+      0.07830810546875000000f,      0.09646606445312500000f,
+      0.14169311523437500000f,      0.19003295898437500000f,
+      0.22601318359375000000f,      0.30426025390625000000f,
+      0.35455322265625000000f,      0.40942382812500000000f,
+      0.48489379882812500000f,      0.52990722656250000000f,
+      0.58352661132812500000f,      0.63528442382812500000f,
+      0.68945312500000000000f,      0.75439453125000000000f,
+      0.87686157226562489000f,      0.94854736328125000000f,
+      0.05187988281249999300f,      0.07101440429687500000f,
+      0.14733886718750000000f,      0.18124389648437500000f,
+      0.23092651367187500000f,      0.27935791015625000000f,
+      0.33834838867187500000f,      0.38973999023437500000f,
+      0.43362426757812506000f,      0.49197387695312500000f,
+      0.61712646484375000000f,      0.69186401367187500000f,
+      0.75219726562500000000f,      0.81347656250000000000f,
+      0.87573242187499989000f,      0.93826293945312500000f,
+      0.09671020507812500000f,      0.11819458007812501000f,
+      0.15399169921875000000f,      0.20959472656250000000f,
+      0.24975585937500000000f,      0.28930664062500000000f,
+      0.37643432617187500000f,      0.42932128906250000000f,
+      0.48138427734375000000f,      0.54843139648437500000f,
+      0.61740112304687500000f,      0.66256713867187500000f,
+      0.71777343750000000000f,      0.77041625976562500000f,
+      0.82476806640625000000f,      0.87677001953124989000f,
+      0.04772949218750000000f,      0.07296752929687500000f,
+      0.12905883789062500000f,      0.20538330078125000000f,
+      0.27175903320312500000f,      0.31918334960937500000f,
+      0.39752197265625000000f,      0.45877075195312500000f,
+      0.52688598632812500000f,      0.60452270507812500000f,
+      0.66677856445312500000f,      0.72451782226562500000f,
+      0.77789306640625000000f,      0.83349609375000000000f,
+      0.88687133789062500000f,      0.93161010742187511000f,
+      0.08740234375000000000f,      0.10861206054687501000f,
+      0.14401245117187500000f,      0.19656372070312503000f,
+      0.29272460937500000000f,      0.33737182617187500000f,
+      0.38949584960937500000f,      0.45117187500000000000f,
+      0.50134277343750000000f,      0.55432128906250000000f,
+      0.62518310546875000000f,      0.67938232421875000000f,
+      0.73800659179687511000f,      0.80148315429687500000f,
+      0.86618041992187500000f,      0.92236328125000000000f,
+      0.08157348632812498600f,      0.10525512695312501000f,
+      0.13980102539062500000f,      0.18258666992187500000f,
+      0.20944213867187500000f,      0.25363159179687500000f,
+      0.38037109375000000000f,      0.42453002929687506000f,
+      0.48028564453125000000f,      0.54293823242187500000f,
+      0.59252929687500000000f,      0.64642333984375000000f,
+      0.73318481445312500000f,      0.81057739257812500000f,
+      0.87655639648437500000f,      0.92895507812500000000f,
+      0.07382202148437500000f,      0.09304809570312500000f,
+      0.13043212890625000000f,      0.19482421875000000000f,
+      0.26135253906250000000f,      0.29483032226562500000f,
+      0.34448242187499994000f,      0.38684082031250000000f,
+      0.44088745117187500000f,      0.53643798828125000000f,
+      0.60473632812500000000f,      0.64791870117187511000f,
+      0.70492553710937500000f,      0.77117919921874989000f,
+      0.82089233398437500000f,      0.88275146484374989000f,
+      0.03900146484375000000f,      0.06106567382812500000f,
+      0.09155273437500000000f,      0.16336059570312500000f,
+      0.30502319335937500000f,      0.35940551757812500000f,
+      0.39727783203125000000f,      0.44464111328125000000f,
+      0.48980712890625000000f,      0.54205322265625000000f,
+      0.60980224609375000000f,      0.65969848632812511000f,
+      0.71322631835937489000f,      0.76547241210937500000f,
+      0.84399414062500000000f,      0.92077636718749989000f,
+      0.02844238281250000000f,      0.04956054687500000000f,
+      0.08538818359375000000f,      0.13946533203125000000f,
+      0.26220703125000000000f,      0.30480957031250000000f,
+      0.35253906249999994000f,      0.39825439453125000000f,
+      0.51638793945312500000f,      0.56997680664062500000f,
+      0.62301635742187500000f,      0.69610595703125000000f,
+      0.75735473632812500000f,      0.81845092773437500000f,
+      0.87902832031250011000f,      0.92727661132812489000f,
+      0.07092285156250000000f,      0.09072875976562500000f,
+      0.12683105468750000000f,      0.17401123046875000000f,
+      0.21115112304687500000f,      0.26873779296875000000f,
+      0.31307983398437500000f,      0.38156127929687494000f,
+      0.45822143554687494000f,      0.50558471679687500000f,
+      0.59259033203125000000f,      0.65231323242187500000f,
+      0.70016479492187500000f,      0.74920654296875000000f,
+      0.82470703124999989000f,      0.91091918945312500000f,
+      0.04772949218750000000f,      0.07241821289062500000f,
+      0.10543823242187499000f,      0.14974975585937500000f,
+      0.18234252929687500000f,      0.22692871093750000000f,
+      0.35968017578125000000f,      0.44265747070312500000f,
+      0.49154663085937500000f,      0.55383300781250000000f,
+      0.61093139648437500000f,      0.66079711914062500000f,
+      0.72448730468749989000f,      0.78778076171875000000f,
+      0.87213134765625000000f,      0.92687988281250000000f,
+      0.09231567382812501400f,      0.11380004882812500000f,
+      0.14849853515625000000f,      0.19897460937500000000f,
+      0.28952026367187500000f,      0.33395385742187500000f,
+      0.37713623046875000000f,      0.43511962890625000000f,
+      0.49359130859375000000f,      0.53408813476562500000f,
+      0.59436035156250000000f,      0.65332031250000000000f,
+      0.70883178710937500000f,      0.76007080078125000000f,
+      0.83456420898437500000f,      0.89743041992187500000f,
+      0.03875732421875000000f,      0.05996704101562500000f,
+      0.20758056640625000000f,      0.24398803710937500000f,
+      0.28088378906250000000f,      0.33044433593750000000f,
+      0.38168334960937500000f,      0.43426513671875000000f,
+      0.48092651367187500000f,      0.54504394531250000000f,
+      0.62161254882812500000f,      0.68670654296875000000f,
+      0.75173950195312500000f,      0.80914306640625000000f,
+      0.87081909179687500000f,      0.93154907226562500000f,
+      0.06744384765625000000f,      0.08389282226562500000f,
+      0.13018798828125000000f,      0.22848510742187503000f,
+      0.30145263671875000000f,      0.33624267578125000000f,
+      0.39132690429687500000f,      0.44039916992187500000f,
+      0.49581909179687494000f,      0.56842041015625000000f,
+      0.62408447265625000000f,      0.67303466796875011000f,
+      0.72445678710937500000f,      0.77182006835937500000f,
+      0.82623291015625000000f,      0.89016723632812500000f,
+      0.03890991210937500000f,      0.05877685546875000000f,
+      0.13214111328125000000f,      0.20059204101562503000f,
+      0.25759887695312500000f,      0.33325195312500000000f,
+      0.40466308593750000000f,      0.45800781249999994000f,
+      0.51657104492187500000f,      0.56680297851562500000f,
+      0.63000488281250000000f,      0.67800903320312500000f,
+      0.73190307617187500000f,      0.77740478515625000000f,
+      0.83532714843750000000f,      0.87417602539062489000f,
+      0.09201049804687500000f,      0.11199951171875000000f,
+      0.15521240234375000000f,      0.19445800781250000000f,
+      0.24072265625000000000f,      0.28408813476562500000f,
+      0.33465576171875006000f,      0.38580322265624994000f,
+      0.44235229492187500000f,      0.49353027343750000000f,
+      0.55175781250000000000f,      0.60949707031250000000f,
+      0.68524169921874989000f,      0.75985717773437500000f,
+      0.83502197265624989000f,      0.91476440429687500000f,
+      0.08795166015625001400f,      0.11392211914062500000f,
+      0.15603637695312500000f,      0.19781494140625000000f,
+      0.24795532226562503000f,      0.29556274414062500000f,
+      0.35394287109375000000f,      0.40551757812500006000f,
+      0.47012329101562500000f,      0.52465820312500000000f,
+      0.61578369140625000000f,      0.68438720703125011000f,
+      0.75686645507812500000f,      0.82440185546875000000f,
+      0.89147949218750000000f,      0.94027709960937511000f,
+      0.07019042968750000000f,      0.09057617187500000000f,
+      0.12515258789062500000f,      0.16607666015625000000f,
+      0.19308471679687500000f,      0.24139404296875000000f,
+      0.38009643554687500000f,      0.42303466796875000000f,
+      0.48056030273437500000f,      0.53421020507812500000f,
+      0.58145141601562500000f,      0.63107299804687500000f,
+      0.69015502929687500000f,      0.75250244140625000000f,
+      0.83920288085937500000f,      0.91751098632812500000f,
+      0.06887817382812500000f,      0.08972167968750000000f,
+      0.13519287109375000000f,      0.18283081054687497000f,
+      0.21490478515624997000f,      0.25524902343750000000f,
+      0.28729248046875000000f,      0.34252929687500000000f,
+      0.47982788085937500000f,      0.53161621093750000000f,
+      0.58755493164062500000f,      0.65518188476562489000f,
+      0.72982788085937500000f,      0.79507446289062500000f,
+      0.86761474609375000000f,      0.92724609375000000000f,
+      0.03744506835937500000f,      0.06240844726562500000f,
+      0.11651611328124999000f,      0.15292358398437500000f,
+      0.21331787109375000000f,      0.28170776367187500000f,
+      0.33642578124999994000f,      0.39706420898437494000f,
+      0.52920532226562500000f,      0.58035278320312500000f,
+      0.62814331054687500000f,      0.69577026367187500000f,
+      0.76889038085937500000f,      0.82019042968750000000f,
+      0.89572143554687500000f,      0.94009399414062489000f,
+      0.04132080078125000000f,      0.05871582031250000000f,
+      0.11563110351562500000f,      0.24649047851562500000f,
+      0.31900024414062500000f,      0.35519409179687500000f,
+      0.40747070312500000000f,      0.45217895507812500000f,
+      0.51095581054687500000f,      0.55508422851562500000f,
+      0.61325073242187500000f,      0.67181396484374989000f,
+      0.75051879882812500000f,      0.81411743164062500000f,
+      0.87423706054687500000f,      0.92333984375000000000f,
+      0.09588623046875000000f,      0.12356567382812501000f,
+      0.18911743164062500000f,      0.22634887695312500000f,
+      0.26712036132812500000f,      0.30993652343750000000f,
+      0.35195922851562500000f,      0.40225219726562500000f,
+      0.48666381835937500000f,      0.53878784179687500000f,
+      0.59832763671875000000f,      0.65313720703125000000f,
+      0.71676635742187500000f,      0.78305053710937511000f,
+      0.85824584960937511000f,      0.92480468750000000000f,
+      0.04019165039062500700f,      0.06906127929687500000f,
+      0.14419555664062500000f,      0.23226928710937500000f,
+      0.29501342773437500000f,      0.35504150390625000000f,
+      0.43161010742187500000f,      0.49615478515625000000f,
+      0.57141113281250000000f,      0.63165283203125000000f,
+      0.68295288085937500000f,      0.73263549804687511000f,
+      0.78659057617187489000f,      0.83163452148437500000f,
+      0.88287353515625000000f,      0.93362426757812500000f,
+      0.04791259765625000000f,      0.07089233398437500000f,
+      0.11651611328124999000f,      0.18966674804687500000f,
+      0.30191040039062500000f,      0.35266113281250000000f,
+      0.39886474609375000000f,      0.44650268554687500000f,
+      0.49291992187500006000f,      0.55816650390625000000f,
+      0.65264892578125000000f,      0.71246337890625000000f,
+      0.76641845703125011000f,      0.82162475585937500000f,
+      0.87622070312500000000f,      0.92065429687500000000f,
+      0.07009887695312500000f,      0.11917114257812500000f,
+      0.19186401367187503000f,      0.26116943359375000000f,
+      0.32556152343750006000f,      0.38958740234375000000f,
+      0.45834350585937500000f,      0.52191162109375000000f,
+      0.58093261718750000000f,      0.63101196289062500000f,
+      0.68179321289062500000f,      0.72848510742187500000f,
+      0.77752685546875000000f,      0.82656860351562500000f,
+      0.88046264648437500000f,      0.93139648437500000000f,
+      0.05844116210937500000f,      0.07650756835937500000f,
+      0.12307739257812499000f,      0.17544555664062500000f,
+      0.21542358398437497000f,      0.27072143554687500000f,
+      0.32528686523437500000f,      0.37225341796875006000f,
+      0.42532348632812500000f,      0.46945190429687500000f,
+      0.51480102539062500000f,      0.57089233398437500000f,
+      0.70724487304687489000f,      0.78790283203125011000f,
+      0.87017822265625000000f,      0.93081665039062500000f,
+      0.07336425781250000000f,      0.08905029296875000000f,
+      0.15838623046875000000f,      0.19079589843750000000f,
+      0.22662353515625003000f,      0.30172729492187500000f,
+      0.37802124023437500000f,      0.45150756835937494000f,
+      0.51129150390625000000f,      0.56054687500000000000f,
+      0.62066650390625000000f,      0.67147827148437511000f,
+      0.73962402343750000000f,      0.80737304687500000000f,
+      0.86944580078125000000f,      0.92764282226562500000f,
+      0.04946899414062500000f,      0.06796264648437500000f,
+      0.10617065429687500000f,      0.15518188476562500000f,
+      0.28762817382812500000f,      0.39343261718750006000f,
+      0.43475341796875006000f,      0.47766113281250000000f,
+      0.52505493164062500000f,      0.56988525390625000000f,
+      0.62396240234375000000f,      0.67776489257812500000f,
+      0.72564697265625000000f,      0.78939819335937500000f,
+      0.85238647460937500000f,      0.91836547851562500000f,
+      0.05703735351562500000f,      0.07293701171875000000f,
+      0.12527465820312500000f,      0.21426391601562500000f,
+      0.34243774414062500000f,      0.38986206054687500000f,
+      0.42904663085937500000f,      0.47576904296875006000f,
+      0.51953125000000000000f,      0.56787109375000000000f,
+      0.62850952148437500000f,      0.67367553710937500000f,
+      0.72171020507812489000f,      0.76763916015625000000f,
+      0.82135009765625000000f,      0.87496948242187500000f,
+      0.07785034179687500000f,      0.09924316406250000000f,
+      0.14306640625000000000f,      0.20025634765625000000f,
+      0.24014282226562500000f,      0.27847290039062500000f,
+      0.31967163085937506000f,      0.36010742187500000000f,
+      0.47003173828125000000f,      0.57312011718750000000f,
+      0.64062500000000000000f,      0.68832397460937500000f,
+      0.74124145507812500000f,      0.79248046874999989000f,
+      0.83816528320312500000f,      0.89208984375000000000f,
+      0.08255004882812500000f,      0.10659790039062501000f,
+      0.14450073242187500000f,      0.19409179687500000000f,
+      0.24124145507812503000f,      0.28540039062500000000f,
+      0.35211181640625006000f,      0.40985107421875000000f,
+      0.46505737304687500000f,      0.51632690429687500000f,
+      0.56820678710937500000f,      0.61322021484375000000f,
+      0.66528320312500000000f,      0.71234130859375000000f,
+      0.76904296875000000000f,      0.89285278320312500000f,
+      0.06610107421875000000f,      0.08517456054687500000f,
+      0.12240600585937499000f,      0.15505981445312500000f,
+      0.17993164062500003000f,      0.27581787109375000000f,
+      0.40914916992187494000f,      0.44869995117187506000f,
+      0.50485229492187500000f,      0.55508422851562500000f,
+      0.60717773437500000000f,      0.66702270507812500000f,
+      0.75903320312500000000f,      0.82308959960937500000f,
+      0.88363647460937500000f,      0.93121337890625000000f,
+      0.05691528320312499300f,      0.09219360351562500000f,
+      0.14331054687500000000f,      0.19940185546875003000f,
+      0.25460815429687500000f,      0.30255126953125000000f,
+      0.39028930664062500000f,      0.43038940429687500000f,
+      0.50454711914062500000f,      0.54104614257812500000f,
+      0.65124511718750000000f,      0.68478393554687500000f,
+      0.75906372070312500000f,      0.80352783203125000000f,
+      0.86755371093750000000f,      0.92022705078125000000f,
+      0.10281372070312500000f,      0.13259887695312500000f,
+      0.20059204101562503000f,      0.26742553710937500000f,
+      0.31460571289062500000f,      0.35745239257812500000f,
+      0.40792846679687500000f,      0.45117187500000000000f,
+      0.50302124023437500000f,      0.55374145507812500000f,
+      0.60543823242187500000f,      0.64840698242187500000f,
+      0.71081542968750000000f,      0.77749633789062489000f,
+      0.84091186523437489000f,      0.89865112304687500000f,
+      0.03860473632812500000f,      0.06665039062500000000f,
+      0.16610717773437500000f,      0.24087524414062500000f,
+      0.32321166992187500000f,      0.40097045898437506000f,
+      0.46096801757812500000f,      0.50778198242187500000f,
+      0.56158447265625000000f,      0.60504150390625000000f,
+      0.65365600585937500000f,      0.70175170898437500000f,
+      0.75436401367187500000f,      0.80679321289062500000f,
+      0.86557006835937500000f,      0.91934204101562500000f,
+      0.04833984375000000700f,      0.06115722656250000000f,
+      0.10787963867187500000f,      0.13580322265625000000f,
+      0.26434326171875000000f,      0.32849121093750000000f,
+      0.39160156250000000000f,      0.45709228515625000000f,
+      0.51794433593750000000f,      0.57354736328125000000f,
+      0.63879394531250000000f,      0.68807983398437500000f,
+      0.75183105468750000000f,      0.80935668945312500000f,
+      0.87588500976562500000f,      0.93283081054687511000f,
+      0.10433959960937500000f,      0.13818359375000000000f,
+      0.20147705078124997000f,      0.24078369140624997000f,
+      0.29016113281250000000f,      0.33187866210937494000f,
+      0.38973999023437500000f,      0.43814086914062500000f,
+      0.48983764648437500000f,      0.55938720703125000000f,
+      0.62957763671875000000f,      0.68634033203125000000f,
+      0.76507568359375000000f,      0.82202148437499989000f,
+      0.88336181640625011000f,      0.93206787109375000000f,
+      0.05267333984375000000f,      0.06872558593750000000f,
+      0.14028930664062500000f,      0.21209716796875000000f,
+      0.25570678710937500000f,      0.29977416992187500000f,
+      0.34677124023437500000f,      0.39044189453125006000f,
+      0.43658447265625000000f,      0.47229003906250000000f,
+      0.51263427734375000000f,      0.54986572265625000000f,
+      0.66134643554687511000f,      0.77972412109375000000f,
+      0.85900878906249989000f,      0.92672729492187500000f,
+      0.10330200195312500000f,      0.11810302734375000000f,
+      0.16195678710937503000f,      0.19494628906250000000f,
+      0.21792602539062500000f,      0.26501464843750000000f,
+      0.38742065429687500000f,      0.45590209960937500000f,
+      0.50292968750000000000f,      0.55776977539062500000f,
+      0.62673950195312500000f,      0.67285156249999989000f,
+      0.73080444335937489000f,      0.79238891601562500000f,
+      0.86102294921875000000f,      0.91418457031250000000f,
+      0.08456420898437500000f,      0.10089111328124999000f,
+      0.13580322265625000000f,      0.16967773437500000000f,
+      0.19692993164062497000f,      0.28970336914062500000f,
+      0.41345214843750000000f,      0.45025634765625006000f,
+      0.51095581054687500000f,      0.56295776367187500000f,
+      0.61120605468750000000f,      0.66333007812499989000f,
+      0.72467041015625011000f,      0.77371215820312500000f,
+      0.82827758789062500000f,      0.88702392578125000000f,
+      0.09240722656250000000f,      0.11901855468750001000f,
+      0.20193481445312503000f,      0.24087524414062500000f,
+      0.28109741210937500000f,      0.31982421875000000000f,
+      0.36764526367187500000f,      0.41452026367187494000f,
+      0.46331787109375000000f,      0.50848388671875000000f,
+      0.56463623046875000000f,      0.61315917968750000000f,
+      0.67718505859374989000f,      0.74334716796875000000f,
+      0.80267333984375000000f,      0.88369750976562489000f,
+      0.06103515624999999300f,      0.07781982421875000000f,
+      0.12411499023437500000f,      0.20864868164062503000f,
+      0.29382324218750000000f,      0.33575439453125000000f,
+      0.38433837890625006000f,      0.43023681640625000000f,
+      0.47573852539062500000f,      0.52474975585937500000f,
+      0.57003784179687500000f,      0.61337280273437500000f,
+      0.65704345703125000000f,      0.70449829101562500000f,
+      0.75198364257812500000f,      0.88568115234375000000f,
+      0.08679199218749998600f,      0.10076904296875000000f,
+      0.15573120117187500000f,      0.18637084960937500000f,
+      0.21090698242187500000f,      0.26239013671875000000f,
+      0.37890625000000000000f,      0.42889404296875000000f,
+      0.48907470703125000000f,      0.56661987304687500000f,
+      0.63085937500000000000f,      0.67962646484375000000f,
+      0.73095703125000000000f,      0.78646850585937500000f,
+      0.84405517578125000000f,      0.91632080078125000000f,
+      0.12338256835937500000f,      0.15716552734375000000f,
+      0.22180175781250000000f,      0.27636718750000000000f,
+      0.33312988281250000000f,      0.38568115234375006000f,
+      0.44381713867187500000f,      0.49389648437500000000f,
+      0.54772949218750000000f,      0.60092163085937500000f,
+      0.65176391601562500000f,      0.70132446289062500000f,
+      0.75759887695312500000f,      0.81149291992187500000f,
+      0.86911010742187500000f,      0.92263793945312500000f,
+      0.06436157226562500000f,      0.08010864257812500000f,
+      0.13183593750000000000f,      0.16860961914062500000f,
+      0.22747802734375000000f,      0.31188964843750000000f,
+      0.39611816406250006000f,      0.44854736328125000000f,
+      0.53793334960937500000f,      0.58786010742187500000f,
+      0.62515258789062500000f,      0.68301391601562500000f,
+      0.74093627929687500000f,      0.78665161132812500000f,
+      0.84982299804687500000f,      0.92950439453125000000f,
+      0.04730224609375000000f,      0.08139038085937501400f,
+      0.19754028320312500000f,      0.28979492187500000000f,
+      0.33523559570312500000f,      0.37695312500000000000f,
+      0.42098999023437500000f,      0.46487426757812500000f,
+      0.52182006835937500000f,      0.56890869140625000000f,
+      0.62442016601562500000f,      0.67492675781250000000f,
+      0.73843383789062489000f,      0.80233764648437500000f,
+      0.86679077148437500000f,      0.91955566406250000000f,
+      0.07357788085937500000f,      0.09411621093750000000f,
+      0.12649536132812500000f,      0.16461181640625000000f,
+      0.19430541992187500000f,      0.24884033203124997000f,
+      0.40054321289062500000f,      0.48977661132812500000f,
+      0.53591918945312500000f,      0.58364868164062500000f,
+      0.64874267578125000000f,      0.69464111328125000000f,
+      0.74642944335937500000f,      0.80313110351562500000f,
+      0.86227416992187500000f,      0.90643310546875000000f,
+      0.12692260742187500000f,      0.13781738281250000000f,
+      0.18176269531250000000f,      0.23300170898437500000f,
+      0.25189208984375000000f,      0.27404785156250000000f,
+      0.34204101562500000000f,      0.43130493164062500000f,
+      0.49468994140624994000f,      0.54550170898437500000f,
+      0.61633300781250000000f,      0.66723632812500011000f,
+      0.72753906250000000000f,      0.78573608398437511000f,
+      0.85626220703125000000f,      0.91589355468750000000f,
+      0.06182861328125000000f,      0.07418823242187500000f,
+      0.08682250976562500000f,      0.11041259765625000000f,
+      0.24261474609375000000f,      0.29913330078125000000f,
+      0.38821411132812500000f,      0.44128417968750000000f,
+      0.50585937500000000000f,      0.57934570312500000000f,
+      0.65234375000000000000f,      0.71163940429687500000f,
+      0.76174926757812500000f,      0.81536865234375000000f,
+      0.88412475585937500000f,      0.93505859375000000000f,
+      0.10464477539062500000f,      0.11697387695312500000f,
+      0.13647460937500000000f,      0.14990234375000000000f,
+      0.23568725585937500000f,      0.31695556640625000000f,
+      0.39614868164062500000f,      0.46759033203125000000f,
+      0.50961303710937500000f,      0.57394409179687500000f,
+      0.63409423828125000000f,      0.68820190429687511000f,
+      0.75155639648437500000f,      0.80853271484375000000f,
+      0.86468505859375000000f,      0.93023681640625000000f,
+      0.14465332031250000000f,      0.15774536132812500000f,
+      0.17687988281250003000f,      0.19790649414062503000f,
+      0.21356201171874997000f,      0.26947021484375000000f,
+      0.35940551757812500000f,      0.43988037109375000000f,
+      0.51364135742187500000f,      0.56192016601562500000f,
+      0.63442993164062500000f,      0.68264770507812489000f,
+      0.73962402343750000000f,      0.78842163085937511000f,
+      0.84860229492187500000f,      0.91616821289062500000f,
+      0.00457763671875000000f,      0.00512695312500000000f,
+     -0.00051879882812500000f,     -0.00326538085937500000f,
+     -0.00433349609375000000f,     -0.00698852539062499910f,
+     -0.00976562500000000000f,     -0.01239013671875000000f,
+     -0.01535034179687500000f,     -0.01892089843750000000f,
+     -0.02645874023437500000f,     -0.02853393554687500000f,
+     -0.02752685546875000000f,     -0.02075195312500000000f,
+     -0.01214599609375000000f,     -0.00347900390625000000f,
+     -0.01214599609375000000f,     -0.01083374023437500000f,
+      0.00149536132812500000f,      0.00778198242187500000f,
+      0.00347900390625000000f,      0.00793457031250000000f,
+      0.01217651367187500000f,      0.00805664062500000000f,
+      0.00967407226562500000f,      0.01315307617187500000f,
+      0.01568603515625000000f,      0.01620483398437500000f,
+      0.01327514648437500000f,      0.01086425781250000000f,
+      0.00726318359375000000f,      0.00323486328125000000f,
+     -0.00131225585937500000f,     -0.00109863281250000000f,
+     -0.00515747070312500000f,     -0.00683593750000000000f,
+     -0.01193237304687500000f,     -0.01931762695312500000f,
+     -0.02368164062500000000f,     -0.02960205078125000000f,
+     -0.02575683593750000000f,     -0.01388549804687500000f,
+     -0.00552368164062500000f,     -0.00036621093750000000f,
+      0.00259399414062500000f,      0.00259399414062500000f,
+      0.00500488281250000000f,      0.00595092773437500000f,
+      0.00372314453125000000f,      0.00259399414062500000f,
+     -0.00482177734375000000f,     -0.01953125000000000000f,
+     -0.02755737304687500000f,      0.00027465820312500000f,
+      0.00021362304687500000f,     -0.00378417968750000000f,
+      0.00454711914062500000f,      0.00097656250000000000f,
+      0.00671386718750000000f,      0.01126098632812500000f,
+      0.00738525390625000000f,      0.00350952148437500040f,
+      0.00241088867187500000f,      0.00256347656250000000f,
+     -0.00445556640625000000f,     -0.00659179687500000000f,
+     -0.00213623046875000000f,      0.03125000000000000000f,
+      0.02291870117187500000f,      0.01751708984375000000f,
+      0.01342773437500000000f,      0.01150512695312500000f,
+      0.01074218749999999800f,      0.00619506835937500000f,
+      0.00091552734374999989f,      0.00048828125000000000f,
+     -0.00009155273437500000f,      0.00247192382812500000f,
+      0.00491333007812500000f,      0.00305175781250000000f,
+     -0.00451660156250000000f,     -0.00537109374999999910f,
+      0.02847290039062500000f,      0.02288818359375000000f,
+      0.01232910156250000000f,      0.00521850585937500000f,
+     -0.00006103515625000000f,     -0.00445556640625000000f,
+     -0.01254272460937500000f,     -0.01348876953125000000f,
+     -0.01651000976562500000f,     -0.01684570312500000000f,
+     -0.01348876953125000000f,     -0.00820922851562500000f,
+     -0.00732421874999999910f,     -0.00158691406250000020f,
+      0.01840209960937500000f,      0.01937866210937500000f,
+      0.01235961914062499800f,      0.00543212890625000000f,
+      0.00656127929687500000f,      0.00057983398437500000f,
+     -0.00466918945312500000f,     -0.00509643554687500000f,
+     -0.00885009765625000000f,     -0.00668334960937500090f,
+      0.00460815429687500000f,      0.00827026367187500000f,
+      0.00460815429687500000f,      0.00363159179687500000f,
+      0.00924682617187500000f,      0.00811767578125000000f,
+      0.00305175781250000000f,      0.00210571289062500000f,
+     -0.00894165039062500000f,     -0.02005004882812500000f,
+      0.02865600585937500000f,      0.02011108398437500000f,
+      0.01348876953125000000f,      0.01071166992187500000f,
+      0.00402832031250000000f,      0.00299072265625000000f,
+     -0.00048828125000000000f,     -0.00003051757812500000f,
+     -0.00411987304687500000f,     -0.00610351562500000000f,
+     -0.00680541992187500000f,     -0.00271606445312500000f,
+      0.00509643554687500000f,      0.00469970703125000000f,
+      0.00524902343750000000f,      0.00723266601562500000f,
+     -0.00137329101562500000f,     -0.00558471679687500000f,
+     -0.00695800781250000000f,     -0.01483154296875000000f,
+      0.00802612304687500000f,      0.01855468750000000000f,
+      0.00482177734375000000f,     -0.00381469726562499960f,
+     -0.01190185546875000000f,     -0.00692749023437500000f,
+     -0.00360107421875000000f,      0.00131225585937500000f,
+     -0.01394653320312500000f,     -0.01196289062500000000f,
+     -0.02346801757812500000f,     -0.02563476562500000000f,
+      0.00061035156250000000f,     -0.00357055664062500000f,
+     -0.00592041015625000000f,     -0.00576782226562500000f,
+     -0.00527954101562500000f,     -0.00527954101562500000f,
+     -0.00100708007812500000f,      0.00097656250000000000f,
+      0.00531005859375000000f,      0.00439453125000000000f,
+      0.00350952148437500040f,      0.00509643554687500000f,
+      0.00173950195312500000f,      0.00134277343749999980f,
+      0.00042724609375000000f,      0.00448608398437500000f,
+      0.00292968750000000000f,     -0.00164794921875000000f,
+     -0.00433349609375000000f,     -0.00393676757812500000f,
+     -0.00775146484375000000f,     -0.01010131835937500000f,
+      0.00927734375000000000f,      0.00946044921875000000f,
+     -0.00158691406250000020f,     -0.01278686523437500000f,
+     -0.02581787109375000000f,     -0.03234863281250000000f,
+     -0.00268554687499999960f,     -0.00375366210937500000f,
+     -0.00616455078125000000f,     -0.01046752929687500200f,
+     -0.01690673828125000000f,     -0.02932739257812500000f,
+     -0.02902221679687500000f,      0.00997924804687500000f,
+      0.00485229492187500000f,      0.00247192382812500000f,
+      0.00778198242187500000f,      0.00692749023437500000f,
+      0.00366210937499999960f,      0.00619506835937500000f,
+      0.00781250000000000000f,      0.00585937500000000000f,
+      0.00500488281250000000f,      0.00683593750000000000f,
+      0.00885009765625000000f,      0.00595092773437500000f,
+      0.00659179687500000000f,      0.00637817382812500090f,
+      0.00390625000000000000f,      0.02539062500000000300f,
+      0.03137207031250000000f,      0.02713012695312500000f,
+      0.02130126953125000000f,      0.01538085937500000000f,
+      0.01245117187500000000f,      0.01083374023437500000f,
+      0.00665283203124999910f,      0.00097656250000000000f,
+     -0.00350952148437500040f,     -0.00256347656250000000f,
+     -0.00842285156250000000f,     -0.00305175781250000000f,
+     -0.00952148437500000000f,     -0.01477050781250000000f,
+      0.02743530273437500000f,      0.02081298828124999700f,
+      0.01419067382812500000f,      0.01391601562500000000f,
+      0.00735473632812500090f,     -0.00036621093750000000f,
+     -0.00839233398437500000f,     -0.01296997070312499800f,
+     -0.01406860351562500000f,     -0.01119995117187500000f,
+     -0.00100708007812500000f,     -0.00085449218750000000f,
+     -0.00311279296875000000f,     -0.00592041015625000000f,
+     -0.01608276367187500000f,      0.02633666992187500000f,
+      0.02764892578125000000f,      0.01412963867187500000f,
+      0.00747680664062500000f,      0.00039672851562500005f,
+     -0.00646972656250000000f,     -0.00930786132812500000f,
+     -0.00320434570312500000f,      0.00497436523437500000f,
+      0.00851440429687500000f,      0.00537109374999999910f,
+      0.00283813476562499960f,      0.00204467773437500000f,
+      0.00350952148437500040f,      0.00585937500000000000f,
+      0.00186157226562500000f,     -0.00152587890625000000f,
+     -0.00402832031250000000f,     -0.00534057617187499910f,
+     -0.00683593750000000000f,     -0.00827026367187500000f,
+     -0.01919555664062500000f,     -0.00769042968750000000f,
+      0.03533935546875000000f,      0.02966308593750000000f,
+      0.01947021484375000000f,      0.00854492187500000000f,
+      0.00915527343750000000f,      0.00994873046875000000f,
+      0.00436401367187500000f,     -0.00463867187500000000f,
+     -0.00653076171875000000f,     -0.00875854492187500000f,
+      0.00161743164062500000f,     -0.00128173828125000000f,
+     -0.00720214843750000000f,     -0.01074218749999999800f,
+     -0.01290893554687500000f,     -0.00756835937500000000f,
+     -0.00393676757812500000f,     -0.00497436523437500000f,
+     -0.00543212890625000000f,     -0.00363159179687500000f,
+      0.00259399414062500000f,      0.00173950195312500000f,
+      0.01568603515625000000f,      0.01165771484375000000f,
+      0.01141357421875000200f,      0.01226806640625000000f,
+      0.01293945312500000000f,      0.01290893554687500000f,
+      0.00827026367187500000f,      0.00601196289062499910f,
+      0.00296020507812500000f,      0.00122070312500000000f,
+      0.00119018554687500000f,     -0.00296020507812500000f,
+     -0.00582885742187500000f,     -0.00500488281250000000f,
+     -0.00701904296875000090f,     -0.00781250000000000000f,
+     -0.01251220703125000000f,      0.01208496093750000200f,
+      0.00997924804687500000f,      0.00387573242187500000f,
+      0.00030517578125000000f,     -0.00363159179687500000f,
+     -0.00509643554687500000f,     -0.00888061523437500000f,
+     -0.00836181640625000000f,     -0.00430297851562500000f,
+     -0.00302124023437500040f,     -0.00689697265625000000f,
+     -0.00665283203124999910f,     -0.00424194335937500000f,
+     -0.00683593750000000000f,     -0.00637817382812500090f,
+     -0.00817871093750000000f,     -0.01348876953125000000f,
+     -0.01260375976562500000f,      0.00677490234375000000f,
+      0.00177001953125000000f,      0.01589965820312500000f,
+      0.01049804687500000000f,      0.00787353515625000000f,
+      0.00231933593750000000f,     -0.00128173828125000000f,
+     -0.00433349609375000000f,     -0.00503540039062499910f,
+     -0.00375366210937500000f,     -0.00280761718750000000f,
+      0.00143432617187500000f,      0.00024414062500000000f,
+     -0.00009155273437500000f,     -0.00582885742187500000f,
+     -0.00033569335937499995f,     -0.00500488281250000000f,
+     -0.00509643554687500000f,     -0.01071166992187500000f,
+     -0.02258300781250000000f,      0.00949096679687500000f,
+      0.01641845703125000000f,      0.00888061523437500000f,
+      0.00561523437500000000f,      0.00088500976562500000f,
+     -0.00320434570312500000f,      0.00027465820312500000f,
+     -0.00091552734374999989f,     -0.00164794921875000000f,
+     -0.00051879882812500000f,     -0.00234985351562500000f,
+     -0.00827026367187500000f,     -0.01257324218750000000f,
+     -0.01898193359375000000f,     -0.01977539062500000000f,
+      0.01452636718750000000f,      0.00567626953124999910f,
+     -0.00201416015625000000f,     -0.00601196289062499910f,
+     -0.00222778320312500000f,     -0.00286865234375000000f,
+     -0.00045776367187499995f,      0.00143432617187500000f,
+      0.00085449218750000000f,      0.00341796875000000000f,
+     -0.00177001953125000000f,     -0.00100708007812500000f,
+      0.00198364257812500000f,      0.00057983398437500000f,
+      0.00256347656250000000f,      0.00262451171875000000f,
+      0.00842285156250000000f,      0.00347900390625000000f,
+      0.01440429687500000000f,      0.02398681640625000000f,
+      0.02438354492187499700f,      0.01907348632812500000f,
+      0.01266479492187500000f,      0.00543212890625000000f,
+     -0.00106811523437500000f,     -0.00079345703125000011f,
+      0.00015258789062500000f,      0.00027465820312500000f,
+      0.00253295898437500040f,      0.00119018554687500000f,
+      0.00112915039062500000f,      0.00119018554687500000f,
+     -0.00561523437500000000f,     -0.01141357421875000200f,
+     -0.00808715820312500000f,     -0.01104736328125000000f,
+     -0.01528930664062500000f,      0.01028442382812500000f,
+      0.02185058593750000000f,      0.01458740234374999800f,
+     -0.00183105468749999980f,     -0.00381469726562499960f,
+     -0.00497436523437500000f,      0.01104736328125000000f,
+      0.00051879882812500000f,     -0.00372314453125000000f,
+     -0.00711059570312500000f,      0.00851440429687500000f,
+      0.00421142578125000000f,      0.00479125976562500000f,
+      0.00970458984375000000f,      0.00588989257812500000f,
+      0.00576782226562500000f,      0.00637817382812500090f,
+      0.00811767578125000000f,      0.00769042968750000000f,
+     -0.00140380859375000000f,     -0.00170898437500000000f,
+     -0.00845336914062500000f,     -0.01309204101562500000f,
+      0.01416015625000000000f,      0.01177978515625000000f,
+      0.00433349609375000000f,      0.00134277343749999980f,
+     -0.00131225585937500000f,      0.00201416015625000000f,
+      0.00805664062500000000f,      0.00555419921875000000f,
+      0.00143432617187500000f,      0.00042724609375000000f,
+     -0.00079345703125000011f,     -0.00241088867187500000f,
+      0.00149536132812500000f,      0.00045776367187499995f,
+     -0.00390625000000000000f,     -0.00619506835937500000f,
+     -0.01220703125000000000f,     -0.01458740234374999800f,
+      0.00991821289062500000f,      0.00082397460937500000f,
+      0.00714111328125000000f,      0.01254272460937500000f,
+      0.00625610351562500000f,      0.00393676757812500000f,
+      0.00036621093750000000f,      0.00177001953125000000f,
+      0.00375366210937500000f,      0.00173950195312500000f,
+      0.00521850585937500000f,      0.00418090820312500000f,
+      0.00292968750000000000f,      0.00390625000000000000f,
+     -0.00097656250000000000f,      0.00408935546875000000f,
+     -0.00036621093750000000f,      0.00173950195312500000f,
+      0.00363159179687500000f,      0.00079345703125000011f,
+     -0.00067138671874999989f,     -0.00503540039062499910f,
+     -0.01525878906249999800f,     -0.02139282226562500000f,
+     -0.01611328125000000000f,     -0.00354003906250000000f,
+      0.00195312500000000000f,     -0.00024414062500000000f,
+      0.00296020507812500000f,     -0.00027465820312500000f,
+     -0.00494384765625000000f,     -0.00201416015625000000f,
+     -0.00476074218750000000f,     -0.00592041015625000000f,
+     -0.00924682617187500000f,     -0.01666259765625000000f,
+     -0.01040649414062499800f,      0.01666259765625000000f,
+      0.01092529296875000000f,      0.00289916992187500000f,
+      0.00137329101562500000f,      0.00231933593750000000f,
+      0.00823974609375000000f,      0.01229858398437500000f,
+      0.00625610351562500000f,      0.00305175781250000000f,
+      0.00375366210937500000f,      0.00152587890625000000f,
+     -0.00161743164062500000f,     -0.00439453125000000000f,
+     -0.00335693359375000000f,     -0.00039672851562500005f,
+      0.00097656250000000000f,     -0.00695800781250000000f,
+     -0.00396728515625000000f,      0.01077270507812500000f,
+      0.00903320312500000000f,      0.00170898437500000000f,
+     -0.01135253906249999800f,     -0.00772094726562500000f,
+      0.01113891601562500000f,      0.00222778320312500000f,
+      0.00030517578125000000f,     -0.00103759765625000000f,
+     -0.00424194335937500000f,     -0.00582885742187500000f,
+     -0.00292968750000000000f,      0.00015258789062500000f,
+      0.00134277343749999980f,     -0.00259399414062500000f,
+     -0.00546264648437500000f,     -0.00393676757812500000f,
+     -0.00585937500000000000f,     -0.00750732421875000000f,
+     -0.00259399414062500000f,     -0.00335693359375000000f,
+     -0.00473022460937500000f,     -0.00134277343749999980f,
+     -0.00082397460937500000f,      0.00442504882812500000f,
+      0.00421142578125000000f,      0.00241088867187500000f,
+      0.00097656250000000000f,     -0.00451660156250000000f,
+     -0.01760864257812500000f,     -0.01934814453125000000f,
+      0.00582885742187500000f,      0.00286865234375000000f,
+     -0.00027465820312500000f,     -0.00106811523437500000f,
+     -0.00234985351562500000f,     -0.00256347656250000000f,
+     -0.00170898437500000000f,     -0.00521850585937500000f,
+     -0.00909423828125000000f,     -0.00827026367187500000f,
+     -0.00741577148437500000f,     -0.00476074218750000000f,
+     -0.01000976562500000000f,     -0.00717163085937500000f,
+     -0.00231933593750000000f,     -0.00390625000000000000f,
+     -0.00369262695312500000f,      0.00393676757812500000f,
+      0.00039672851562500005f,     -0.00067138671874999989f,
+      0.00097656250000000000f,      0.00137329101562500000f,
+     -0.00756835937500000000f,     -0.00198364257812500000f,
+      0.00588989257812500000f,     -0.00247192382812500000f,
+      0.00912475585937500000f,      0.00173950195312500000f,
+     -0.00448608398437500000f,      0.00585937500000000000f,
+     -0.00503540039062499910f,     -0.01080322265625000200f,
+     -0.01019287109375000000f,     -0.00323486328125000000f,
+     -0.00476074218750000000f,     -0.00122070312500000000f,
+     -0.00009155273437500000f,     -0.00207519531250000000f,
+      0.00378417968750000000f,     -0.00784301757812500000f,
+      0.00238037109375000000f,      0.00378417968750000000f,
+      0.00518798828125000000f,      0.01257324218750000000f,
+      0.00692749023437500000f,      0.00320434570312500000f,
+     -0.00317382812500000040f,      0.00036621093750000000f,
+      0.00469970703125000000f,      0.00762939453124999910f,
+      0.00836181640625000000f,      0.00787353515625000000f,
+      0.00012207031250000000f,     -0.00082397460937500000f,
+      0.00717163085937500000f,      0.00463867187500000000f,
+      0.00155639648437500000f,      0.01031494140625000000f,
+      0.00915527343750000000f,      0.00021362304687500000f,
+     -0.00958251953125000000f,     -0.01254272460937500000f,
+      0.00656127929687500000f,      0.00518798828125000000f,
+     -0.00027465820312500000f,     -0.00283813476562499960f,
+     -0.00234985351562500000f,      0.00231933593750000000f,
+      0.00204467773437500000f,      0.00164794921875000000f,
+      0.00610351562500000000f,      0.00961303710937500000f,
+      0.00497436523437500000f,      0.00219726562500000000f,
+     -0.00277709960937500000f,     -0.01226806640625000000f,
+      0.00482177734375000000f,      0.00570678710937500090f,
+     -0.00476074218750000000f,     -0.00277709960937500000f,
+      0.00885009765625000000f,      0.00814819335937500000f,
+      0.00509643554687500000f,      0.00277709960937500000f,
+      0.00427246093750000000f,      0.00521850585937500000f,
+      0.00341796875000000000f,      0.00027465820312500000f,
+     -0.00128173828125000000f,     -0.00540161132812500090f,
+     -0.01342773437500000000f,      0.01174926757812500200f,
+      0.00244140625000000000f,      0.00045776367187499995f,
+      0.00524902343750000000f,      0.00393676757812500000f,
+      0.00125122070312500000f,     -0.00393676757812500000f,
+     -0.01135253906249999800f,     -0.00073242187500000000f,
+     -0.00228881835937500000f,     -0.00091552734374999989f,
+     -0.00518798828125000000f,      0.00030517578125000000f,
+     -0.00360107421875000000f,      0.00173950195312500000f,
+      0.00238037109375000000f,     -0.00308227539062500000f,
+      0.00708007812500000000f,      0.00491333007812500000f,
+      0.00375366210937500000f,      0.00781250000000000000f,
+      0.00845336914062500000f,      0.00308227539062500000f,
+     -0.00585937500000000000f,     -0.01919555664062500000f,
+     -0.00305175781250000000f,     -0.00183105468749999980f,
+     -0.00708007812500000000f,      0.00201416015625000000f,
+      0.00039672851562500005f,     -0.00039672851562500005f,
+     -0.00244140625000000000f,     -0.00729370117187499910f,
+      0.00729370117187499910f,      0.00112915039062500000f,
+      0.00097656250000000000f,      0.00271606445312500000f,
+     -0.00973510742187500000f,     -0.01766967773437500000f,
+      0.01373291015625000000f,      0.01098632812500000000f,
+      0.00009155273437500000f,     -0.00088500976562500000f,
+     -0.00912475585937500000f,     -0.00271606445312500000f,
+     -0.00164794921875000000f,     -0.00335693359375000000f,
+     -0.00750732421875000000f,     -0.00500488281250000000f,
+      0.00018310546875000000f,     -0.00573730468750000000f,
+      0.01031494140625000000f,      0.00537109374999999910f,
+     -0.00280761718750000000f,      0.00601196289062499910f,
+      0.00418090820312500000f,      0.00408935546875000000f,
+      0.00036621093750000000f,     -0.00006103515625000000f,
+      0.00170898437500000000f,     -0.00558471679687500000f,
+      0.00347900390625000000f,     -0.00109863281250000000f,
+     -0.00399780273437500000f,     -0.00622558593750000000f,
+      0.00228881835937500000f,     -0.00076293945312500000f,
+     -0.00531005859375000000f,      0.00582885742187500000f,
+     -0.00045776367187499995f,     -0.00885009765625000000f,
+     -0.01309204101562500000f,     -0.00814819335937500000f,
+      0.00241088867187500000f,      0.00112915039062500000f,
+      0.00323486328125000000f,      0.00070190429687500000f,
+     -0.01171875000000000000f,      0.01296997070312499800f,
+      0.00213623046875000000f,     -0.00042724609375000000f,
+      0.00646972656250000000f,      0.00320434570312500000f,
+      0.00045776367187499995f,     -0.00006103515625000000f,
+     -0.00128173828125000000f,     -0.00112915039062500000f,
+     -0.00375366210937500000f,      0.00329589843750000000f,
+      0.00085449218750000000f,     -0.00146484375000000000f,
+      0.00588989257812500000f,      0.00601196289062499910f,
+      0.00527954101562500000f,     -0.00100708007812500000f,
+      0.00112915039062500000f,      0.00222778320312500000f,
+     -0.00173950195312500000f,      0.00781250000000000000f,
+      0.00418090820312500000f,     -0.00177001953125000000f,
+     -0.01312255859375000000f,     -0.00695800781250000000f,
+      0.00662231445312500000f,     -0.00155639648437500000f,
+     -0.00030517578125000000f,     -0.00177001953125000000f,
+     -0.00018310546875000000f,      0.00067138671874999989f,
+      0.00317382812500000040f,      0.00186157226562500000f,
+     -0.00363159179687500000f,      0.00515747070312500000f,
+      0.00439453125000000000f,      0.00048828125000000000f,
+     -0.00140380859375000000f,     -0.01202392578124999800f,
+      0.00183105468749999980f,      0.01385498046875000000f,
+     -0.00244140625000000000f,     -0.00909423828125000000f,
+     -0.00198364257812500000f,      0.00076293945312500000f,
+      0.00000000000000000000f,     -0.00073242187500000000f,
+     -0.00198364257812500000f,     -0.01272583007812500000f,
+      0.01419067382812500000f,      0.00842285156250000000f,
+     -0.00009155273437500000f,     -0.00592041015625000000f,
+     -0.00039672851562500005f,      0.00396728515625000000f,
+      0.00057983398437500000f,     -0.00018310546875000000f,
+     -0.00064086914062500000f,     -0.00073242187500000000f,
+     -0.00549316406250000000f,     -0.00161743164062500000f,
+     -0.00259399414062500000f,      0.00061035156250000000f,
+      0.00360107421875000000f,      0.00448608398437500000f,
+      0.00344848632812500000f,     -0.00228881835937500000f,
+     -0.00881958007812500000f,      0.00689697265625000000f,
+     -0.00372314453125000000f,      0.00692749023437500000f,
+      0.00823974609375000000f,      0.00381469726562499960f,
+      0.00332641601562499960f,      0.00601196289062499910f,
+      0.00381469726562499960f,      0.00421142578125000000f,
+      0.00134277343749999980f,      0.00183105468749999980f,
+      0.00076293945312500000f,     -0.00167846679687500000f,
+     -0.00509643554687500000f,     -0.00097656250000000000f,
+     -0.00424194335937500000f,     -0.00588989257812500000f,
+     -0.00527954101562500000f,     -0.00964355468750000000f,
+      0.00875854492187500000f,     -0.00634765625000000090f,
+      0.00772094726562500000f,      0.00729370117187499910f,
+      0.00082397460937500000f,     -0.00244140625000000000f,
+     -0.00573730468750000000f,     -0.00085449218750000000f,
+     -0.00555419921875000000f,     -0.00717163085937500000f,
+      0.00476074218750000000f,     -0.00357055664062500000f,
+      0.00390625000000000000f,     -0.00146484375000000000f,
+     -0.00177001953125000000f,     -0.00689697265625000000f,
+      0.00524902343750000000f,      0.00552368164062500000f,
+      0.00509643554687500000f,      0.00057983398437500000f,
+      0.00189208984375000000f,      0.00030517578125000000f,
+      0.00006103515625000000f,      0.00552368164062500000f,
+      0.00460815429687500000f,      0.00329589843750000000f,
+     -0.00048828125000000000f,     -0.00033569335937499995f,
+     -0.00238037109375000000f,     -0.01010131835937500000f,
+      0.01254272460937500000f,      0.00405883789062500000f,
+      0.00051879882812500000f,      0.00317382812500000040f,
+      0.00195312500000000000f,     -0.00561523437500000000f,
+      0.00073242187500000000f,     -0.00091552734374999989f,
+     -0.00009155273437500000f,     -0.00863647460937500000f,
+      0.00369262695312500000f,      0.00622558593750000000f,
+     -0.00024414062500000000f,     -0.00607299804687500000f,
+     -0.00064086914062500000f,     -0.00244140625000000000f,
+     -0.00515747070312500000f,     -0.00479125976562500000f,
+     -0.00582885742187500000f,     -0.00415039062500000000f,
+      0.00247192382812500000f,      0.00473022460937500000f,
+      0.00042724609375000000f,     -0.00399780273437500000f,
+      0.00744628906250000000f,      0.00225830078125000000f,
+     -0.00173950195312500000f,     -0.00143432617187500000f,
+     -0.00854492187500000000f,      0.01058959960937500000f,
+      0.00338745117187500000f,     -0.00234985351562500000f,
+     -0.00390625000000000000f,     -0.00433349609375000000f,
+     -0.00592041015625000000f,     -0.00381469726562499960f,
+     -0.00018310546875000000f,     -0.00207519531250000000f,
+      0.00277709960937500000f,      0.00003051757812500000f,
+      0.00070190429687500000f,      0.00042724609375000000f,
+     -0.00469970703125000000f,     -0.00103759765625000000f,
+      0.00070190429687500000f,     -0.00115966796875000000f,
+     -0.01046752929687500200f,      0.01535034179687500000f,
+      0.00445556640625000000f,     -0.00115966796875000000f,
+     -0.00140380859375000000f,     -0.00125122070312500000f,
+      0.00177001953125000000f,      0.00094604492187500000f,
+      0.00192260742187500000f,     -0.00146484375000000000f,
+     -0.00357055664062500000f,      0.00137329101562500000f,
+      0.00085449218750000000f,      0.00003051757812500000f,
+     -0.00271606445312500000f,     -0.00015258789062500000f,
+     -0.00134277343749999980f,     -0.00088500976562500000f,
+     -0.01367187500000000000f,      0.01486206054687500000f,
+      0.00622558593750000000f,      0.00247192382812500000f,
+      0.00140380859375000000f,     -0.00323486328125000000f,
+     -0.00921630859375000000f,      0.01159667968750000000f,
+      0.00366210937499999960f,     -0.00115966796875000000f,
+     -0.00036621093750000000f,     -0.00119018554687500000f,
+      0.00213623046875000000f,     -0.00009155273437500000f,
+      0.00076293945312500000f,     -0.00198364257812500000f,
+      0.00091552734374999989f,     -0.00033569335937499995f,
+      0.00103759765625000000f,     -0.00045776367187499995f,
+      0.00067138671874999989f,     -0.00350952148437500040f,
+      0.00000000000000000000f,     -0.00241088867187500000f,
+     -0.00253295898437500040f,      0.00137329101562500000f,
+      0.00347900390625000000f,      0.00131225585937500000f,
+      0.00457763671875000000f,      0.00109863281250000000f,
+      0.00711059570312500000f,      0.00454711914062500000f,
+      0.00595092773437500000f,      0.00015258789062500000f,
+      0.00076293945312500000f,     -0.00158691406250000020f,
+     -0.01449584960937500000f,      0.00836181640625000000f,
+      0.00085449218750000000f,     -0.00119018554687500000f,
+     -0.00024414062500000000f,     -0.00201416015625000000f,
+     -0.00778198242187500000f,      0.00787353515625000000f,
+      0.00170898437500000000f,      0.00436401367187500000f,
+     -0.00137329101562500000f,     -0.00579833984375000000f,
+      0.00503540039062499910f,     -0.00183105468749999980f,
+      0.00061035156250000000f,      0.00006103515625000000f,
+      0.00381469726562499960f,     -0.00393676757812500000f,
+      0.00155639648437500000f,     -0.00024414062500000000f,
+     -0.01022338867187500000f,      0.00878906250000000000f,
+      0.00115966796875000000f,      0.00180053710937500000f,
+      0.00076293945312500000f,     -0.00128173828125000000f,
+      0.00070190429687500000f,     -0.00360107421875000000f,
+     -0.00341796875000000000f,      0.00033569335937499995f,
+     -0.00167846679687500000f,     -0.00405883789062500000f,
+     -0.00332641601562499960f,      0.00073242187500000000f,
+     -0.00320434570312500000f,      0.00238037109375000000f,
+     -0.00195312500000000000f,     -0.00747680664062500000f,
+      0.00616455078125000000f,     -0.00198364257812500000f,
+     -0.00387573242187500000f,      0.00494384765625000000f,
+      0.00122070312500000000f,     -0.00286865234375000000f,
+      0.00271606445312500000f,     -0.00259399414062500000f,
+     -0.00363159179687500000f,     -0.00314331054687500000f,
+      0.00296020507812500000f,      0.00027465820312500000f,
+     -0.00213623046875000000f,     -0.00085449218750000000f,
+      0.00592041015625000000f,      0.00262451171875000000f,
+     -0.00341796875000000000f,     -0.00280761718750000000f,
+     -0.00347900390625000000f,      0.00225830078125000000f,
+     -0.00149536132812500000f,      0.00140380859375000000f,
+     -0.00256347656250000000f,     -0.00543212890625000000f,
+      0.00344848632812500000f,      0.00158691406250000020f,
+     -0.00625610351562500000f,      0.01016235351562500000f,
+      0.00268554687499999960f,      0.00677490234375000000f,
+      0.00170898437500000000f,     -0.00167846679687500000f,
+      0.00039672851562500005f,      0.00262451171875000000f,
+      0.00012207031250000000f,     -0.00234985351562500000f,
+      0.00683593750000000000f,      0.00347900390625000000f,
+     -0.00320434570312500000f,      0.00341796875000000000f,
+      0.00381469726562499960f,     -0.00088500976562500000f,
+     -0.00054931640625000000f,     -0.00439453125000000000f,
+      0.00067138671874999989f,     -0.00177001953125000000f,
+     -0.00302124023437500040f,      0.00085449218750000000f,
+      0.00347900390625000000f,     -0.00201416015625000000f,
+     -0.00097656250000000000f,     -0.00515747070312500000f,
+     -0.00958251953125000000f,      0.00869750976562500000f,
+      0.00219726562500000000f,     -0.00225830078125000000f,
+      0.00546264648437500000f,      0.00085449218750000000f,
+     -0.00241088867187500000f,     -0.00555419921875000000f,
+      0.00039672851562500005f,     -0.00167846679687500000f,
+      0.00448608398437500000f,      0.00039672851562500005f,
+      0.00036621093750000000f,     -0.00164794921875000000f,
+      0.00094604492187500000f,     -0.00256347656250000000f,
+     -0.00051879882812500000f,     -0.00228881835937500000f,
+     -0.00695800781250000000f,      0.00253295898437500040f,
+     -0.01144409179687500000f,      0.01330566406249999800f,
+      0.00335693359375000000f,     -0.00192260742187500000f,
+     -0.00082397460937500000f,     -0.00415039062500000000f,
+      0.00515747070312500000f,     -0.00170898437500000000f,
+     -0.00024414062500000000f,     -0.00521850585937500000f,
+      0.00561523437500000000f,     -0.00128173828125000000f,
+      0.00451660156250000000f,      0.00207519531250000000f,
+      0.00622558593750000000f,      0.00717163085937500000f,
+      0.00335693359375000000f,     -0.00698852539062499910f,
+      0.00277709960937500000f,      0.00521850585937500000f,
+     -0.00131225585937500000f,     -0.00009155273437500000f,
+     -0.00079345703125000011f,     -0.00302124023437500040f,
+     -0.00338745117187500000f,      0.00216674804687500000f,
+     -0.00518798828125000000f,      0.00616455078125000000f,
+     -0.00204467773437500000f,      0.00552368164062500000f,
+     -0.00112915039062500000f,      0.00332641601562499960f,
+     -0.00366210937499999960f,      0.00009155273437500000f,
+     -0.00167846679687500000f,     -0.00793457031250000000f,
+     -0.00048828125000000000f,      0.00463867187500000000f,
+      0.00277709960937500000f,      0.00433349609375000000f,
+      0.00128173828125000000f,      0.00134277343749999980f,
+      0.00408935546875000000f,      0.00143432617187500000f,
+      0.00051879882812500000f,     -0.00106811523437500000f,
+      0.00067138671874999989f,      0.00241088867187500000f,
+     -0.00515747070312500000f,      0.00125122070312500000f,
+      0.00140380859375000000f,      0.00845336914062500000f,
+     -0.00283813476562499960f,     -0.00149536132812500000f,
+     -0.00384521484375000000f,      0.00112915039062500000f,
+     -0.00314331054687500000f,     -0.00103759765625000000f,
+     -0.00067138671874999989f,     -0.00274658203125000000f,
+     -0.00408935546875000000f,     -0.00625610351562500000f,
+      0.00280761718750000000f,     -0.00027465820312500000f,
+      0.00003051757812500000f,     -0.00595092773437500000f,
+     -0.00729370117187499910f,      0.00137329101562500000f,
+      0.00164794921875000000f,      0.00054931640625000000f,
+     -0.00070190429687500000f,     -0.00003051757812500000f,
+     -0.00244140625000000000f,     -0.00299072265625000000f,
+     -0.00061035156250000000f,     -0.00796508789062500000f,
+      0.00933837890625000000f,      0.00219726562500000000f,
+      0.00061035156250000000f,     -0.00271606445312500000f,
+     -0.00662231445312500000f,      0.00033569335937499995f,
+      0.00018310546875000000f,     -0.00250244140625000000f,
+      0.00271606445312500000f,      0.00039672851562500005f,
+     -0.00393676757812500000f,     -0.00271606445312500000f,
+      0.00253295898437500040f,     -0.00216674804687500000f,
+     -0.00167846679687500000f,      0.00396728515625000000f,
+     -0.00299072265625000000f,     -0.00445556640625000000f,
+     -0.00082397460937500000f,     -0.00173950195312500000f,
+      0.00161743164062500000f,      0.00839233398437500000f,
+      0.00051879882812500000f,      0.00518798828125000000f,
+     -0.00015258789062500000f,     -0.00164794921875000000f,
+      0.00402832031250000000f,     -0.00195312500000000000f,
+      0.00219726562500000000f,      0.00488281250000000000f,
+     -0.00381469726562499960f,     -0.00512695312500000000f,
+      0.00219726562500000000f,      0.00122070312500000000f,
+      0.00518798828125000000f,      0.00238037109375000000f,
+      0.00756835937500000000f,      0.00354003906250000000f,
+      0.00061035156250000000f,      0.00256347656250000000f,
+      0.00094604492187500000f,     -0.00103759765625000000f,
+      0.00579833984375000000f,      0.00115966796875000000f,
+      0.00039672851562500005f,     -0.00323486328125000000f,
+      0.00686645507812500000f,      0.00082397460937500000f,
+     -0.00512695312500000000f,      0.00073242187500000000f,
+     -0.00479125976562500000f,     -0.00372314453125000000f,
+      0.00503540039062499910f,      0.00033569335937499995f,
+     -0.00491333007812500000f,     -0.00650024414062500000f,
+     -0.00036621093750000000f,     -0.00155639648437500000f,
+     -0.00308227539062500000f,      0.00128173828125000000f,
+      0.00308227539062500000f,      0.00082397460937500000f,
+      0.00167846679687500000f,      0.00338745117187500000f,
+      0.00228881835937500000f,      0.00216674804687500000f,
+     -0.00292968750000000000f,     -0.00003051757812500000f,
+      0.00198364257812500000f,     -0.00845336914062500000f,
+      0.01199340820312500000f,     -0.00079345703125000011f,
+     -0.00134277343749999980f,     -0.00207519531250000000f,
+     -0.00256347656250000000f,     -0.00201416015625000000f,
+     -0.00289916992187500000f,      0.00717163085937500000f,
+      0.00546264648437500000f,     -0.00076293945312500000f,
+     -0.00125122070312500000f,      0.00082397460937500000f,
+     -0.00277709960937500000f,     -0.00390625000000000000f,
+     -0.00677490234375000000f,      0.00445556640625000000f,
+     -0.00219726562500000000f,     -0.00091552734374999989f,
+     -0.00073242187500000000f,      0.00167846679687500000f,
+     -0.00384521484375000000f,     -0.00207519531250000000f,
+     -0.00177001953125000000f,     -0.00387573242187500000f,
+      0.00039672851562500005f,     -0.00296020507812500000f,
+     -0.00323486328125000000f,      0.00531005859375000000f,
+     -0.00305175781250000000f,      0.00473022460937500000f,
+      0.00308227539062500000f,     -0.00445556640625000000f,
+     -0.00064086914062500000f,      0.00796508789062500000f,
+      0.00067138671874999989f,      0.00115966796875000000f,
+     -0.00201416015625000000f,      0.00198364257812500000f,
+      0.00012207031250000000f,      0.00213623046875000000f,
+      0.00195312500000000000f,      0.00439453125000000000f,
+      0.00180053710937500000f,      0.00650024414062500000f,
+      0.00216674804687500000f,     -0.01028442382812500000f,
+      0.00924682617187500000f,     -0.00158691406250000020f,
+      0.00155639648437500000f,     -0.00170898437500000000f,
+      0.00003051757812500000f,      0.00030517578125000000f,
+     -0.00045776367187499995f,     -0.00015258789062500000f,
+      0.00103759765625000000f,      0.00158691406250000020f,
+      0.00695800781250000000f,      0.00399780273437500000f,
+      0.00491333007812500000f,     -0.00387573242187500000f,
+     -0.00653076171875000000f,      0.00726318359375000000f,
+      0.00375366210937500000f,      0.00195312500000000000f,
+     -0.00448608398437500000f,     -0.00152587890625000000f,
+     -0.00103759765625000000f,     -0.00387573242187500000f,
+      0.00622558593750000000f,      0.00494384765625000000f,
+      0.00259399414062500000f,      0.00125122070312500000f,
+      0.00015258789062500000f,     -0.00427246093750000000f,
+      0.00222778320312500000f,     -0.00457763671875000000f,
+      0.00170898437500000000f,     -0.00292968750000000000f,
+     -0.00201416015625000000f,     -0.00061035156250000000f,
+      0.00006103515625000000f,     -0.00717163085937500000f,
+      0.00180053710937500000f,     -0.00067138671874999989f,
+     -0.00326538085937500000f,      0.00457763671875000000f,
+     -0.00048828125000000000f,     -0.00143432617187500000f,
+     -0.00012207031250000000f,      0.00247192382812500000f,
+     -0.00204467773437500000f,      0.00509643554687500000f,
+      0.00454711914062500000f,      0.00454711914062500000f,
+     -0.00479125976562500000f,      0.00878906250000000000f,
+     -0.00476074218750000000f,     -0.00082397460937500000f,
+     -0.00024414062500000000f,      0.00054931640625000000f,
+      0.00253295898437500040f,     -0.00073242187500000000f,
+     -0.00125122070312500000f,     -0.00509643554687500000f,
+      0.00482177734375000000f,     -0.00305175781250000000f,
+      0.00283813476562499960f,      0.00161743164062500000f,
+      0.00613403320312500000f,      0.00045776367187499995f,
+      0.00128173828125000000f,      0.00811767578125000000f,
+      0.00848388671875000000f,     -0.00036621093750000000f,
+     -0.00018310546875000000f,     -0.00112915039062500000f,
+      0.00259399414062500000f,      0.00018310546875000000f,
+      0.00061035156250000000f,     -0.00573730468750000000f,
+     -0.00827026367187500000f,      0.00326538085937500000f,
+     -0.00039672851562500005f,     -0.00244140625000000000f,
+      0.00155639648437500000f,      0.00616455078125000000f,
+      0.00527954101562500000f,     -0.00210571289062500000f,
+      0.00238037109375000000f,     -0.00573730468750000000f,
+      0.00140380859375000000f,      0.00012207031250000000f,
+      0.00466918945312500000f,      0.00036621093750000000f,
+     -0.00421142578125000000f,      0.00515747070312500000f,
+      0.00015258789062500000f,     -0.00177001953125000000f,
+     -0.00375366210937500000f,     -0.00329589843750000000f,
+     -0.00741577148437500000f,      0.00457763671875000000f,
+      0.00030517578125000000f,     -0.00582885742187500000f,
+      0.00750732421875000000f,     -0.00045776367187499995f,
+      0.00115966796875000000f,      0.00076293945312500000f,
+     -0.00030517578125000000f,      0.00042724609375000000f,
+      0.00186157226562500000f,      0.00152587890625000000f,
+     -0.00628662109375000000f,     -0.00656127929687500000f,
+     -0.00671386718750000000f,      0.00274658203125000000f,
+      0.00015258789062500000f,     -0.00454711914062500000f,
+     -0.00668334960937500090f,      0.00170898437500000000f,
+      0.00433349609375000000f,      0.00073242187500000000f,
+     -0.01147460937500000000f,      0.00234985351562500000f,
+     -0.00244140625000000000f,      0.00228881835937500000f,
+      0.00018310546875000000f,      0.00128173828125000000f,
+     -0.00308227539062500000f,      0.00048828125000000000f,
+      0.00170898437500000000f,      0.00042724609375000000f,
+     -0.00173950195312500000f,      0.00009155273437500000f,
+     -0.00051879882812500000f,      0.00244140625000000000f,
+      0.00173950195312500000f,     -0.00109863281250000000f,
+      0.00268554687499999960f,     -0.00180053710937500000f,
+     -0.00296020507812500000f,     -0.00057983398437500000f,
+     -0.00451660156250000000f,      0.00140380859375000000f,
+     -0.00668334960937500090f,      0.00689697265625000000f,
+      0.00347900390625000000f,     -0.00012207031250000000f,
+     -0.00219726562500000000f,     -0.00045776367187499995f,
+      0.00112915039062500000f,     -0.00149536132812500000f,
+     -0.00085449218750000000f,      0.00753784179687500000f,
+      0.00134277343749999980f,      0.00375366210937500000f,
+      0.00143432617187500000f,     -0.00372314453125000000f,
+     -0.00115966796875000000f,      0.00051879882812500000f,
+      0.00012207031250000000f,     -0.00344848632812500000f,
+     -0.00097656250000000000f,     -0.00683593750000000000f,
+      0.00469970703125000000f,     -0.00408935546875000000f,
+      0.00598144531250000000f,      0.00216674804687500000f,
+     -0.00814819335937500000f,     -0.00259399414062500000f,
+      0.00085449218750000000f,     -0.00213623046875000000f,
+      0.00271606445312500000f,     -0.00366210937499999960f,
+      0.00302124023437500040f,     -0.00006103515625000000f,
+      0.00195312500000000000f,      0.00231933593750000000f,
+     -0.00506591796875000090f,     -0.00146484375000000000f,
+      0.00576782226562500000f,     -0.00106811523437500000f,
+     -0.00280761718750000000f,     -0.00515747070312500000f,
+     -0.00375366210937500000f,      0.01034545898437500000f,
+      0.00115966796875000000f,     -0.00076293945312500000f,
+      0.00115966796875000000f,     -0.00106811523437500000f,
+      0.00686645507812500000f,     -0.00424194335937500000f,
+     -0.00152587890625000000f,     -0.00192260742187500000f,
+      0.00750732421875000000f,      0.00183105468749999980f,
+     -0.00564575195312500000f,     -0.00332641601562499960f,
+     -0.00149536132812500000f,     -0.00161743164062500000f,
+     -0.00509643554687500000f,      0.00155639648437500000f,
+      0.00454711914062500000f,      0.00183105468749999980f,
+     -0.00308227539062500000f,     -0.00100708007812500000f,
+      0.00076293945312500000f,     -0.00231933593750000000f,
+      0.00366210937499999960f,      0.00097656250000000000f,
+     -0.00091552734374999989f,     -0.00253295898437500040f,
+      0.00311279296875000000f,      0.00277709960937500000f,
+     -0.00567626953124999910f,     -0.00796508789062500000f,
+      0.00399780273437500000f,     -0.00601196289062499910f
+};
+
+const SKP_Silk_NLSF_CBS_FLP SKP_Silk_NLSF_CB0_16_Stage_info_FLP[ NLSF_MSVQ_CB0_16_STAGES ] =
+{
+        { 128, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 *   0 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[   0 ] },
+        {  16, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 128 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 128 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 144 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 144 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 152 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 152 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 160 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 160 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 168 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 168 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 176 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 176 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 184 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 184 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 192 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 192 ] },
+        {  16, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 200 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 200 ] }
+};
+
+const SKP_Silk_NLSF_CB_FLP SKP_Silk_NLSF_CB0_16_FLP =
+{
+        NLSF_MSVQ_CB0_16_STAGES,
+        SKP_Silk_NLSF_CB0_16_Stage_info_FLP,
+        SKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min,
+        SKP_Silk_NLSF_MSVQ_CB0_16_CDF,
+        SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr,
+        SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx
+};
+
--- /dev/null
+++ b/src_FLP/SKP_Silk_tables_NLSF_CB1_10_FLP.c
@@ -1,0 +1,475 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/**********************************************/
+/* This file has been automatically generated */
+/*                                            */
+/* ROM usage:  3.21 kB                        */
+/**********************************************/
+
+#include "SKP_Silk_tables_FLP.h"
+#include "SKP_Silk_tables_NLSF_CB1_10.h"
+
+const SKP_float SKP_Silk_NLSF_MSVQ_CB1_10_rates[ NLSF_MSVQ_CB1_10_VECTORS ] =
+{
+      1.93750000000000000000f,      3.21875000000000000000f,
+      3.75000000000000000000f,      3.96875000000000000000f,
+      4.21875000000000000000f,      4.21875000000000000000f,
+      4.84375000000000000000f,      5.21875000000000000000f,
+      5.25000000000000000000f,      5.37500000000000000000f,
+      5.40625000000000000000f,      5.50000000000000000000f,
+      5.59375000000000000000f,      5.65625000000000000000f,
+      5.65625000000000000000f,      5.78125000000000000000f,
+      5.81250000000000000000f,      6.18750000000000000000f,
+      6.21875000000000000000f,      6.34375000000000000000f,
+      6.40625000000000000000f,      6.93750000000000000000f,
+      7.09375000000000000000f,      7.09375000000000000000f,
+      7.09375000000000000000f,      7.09375000000000000000f,
+      7.09375000000000000000f,      7.09375000000000000000f,
+      7.09375000000000000000f,      7.09375000000000000000f,
+      7.09375000000000000000f,      7.09375000000000000000f,
+      1.68750000000000000000f,      2.37500000000000000000f,
+      3.15625000000000000000f,      3.37500000000000000000f,
+      3.71875000000000000000f,      3.75000000000000000000f,
+      3.84375000000000000000f,      3.90625000000000000000f,
+      2.12500000000000000000f,      2.65625000000000000000f,
+      2.71875000000000000000f,      3.21875000000000000000f,
+      3.34375000000000000000f,      3.50000000000000000000f,
+      3.59375000000000000000f,      3.62500000000000000000f,
+      2.43750000000000000000f,      2.65625000000000000000f,
+      2.65625000000000000000f,      3.15625000000000000000f,
+      3.28125000000000000000f,      3.28125000000000000000f,
+      3.43750000000000000000f,      3.46875000000000000000f,
+      2.59375000000000000000f,      2.84375000000000000000f,
+      3.03125000000000000000f,      3.03125000000000000000f,
+      3.03125000000000000000f,      3.12500000000000000000f,
+      3.15625000000000000000f,      3.28125000000000000000f,
+      2.87500000000000000000f,      2.90625000000000000000f,
+      2.90625000000000000000f,      2.96875000000000000000f,
+      3.00000000000000000000f,      3.06250000000000000000f,
+      3.09375000000000000000f,      3.21875000000000000000f
+};
+
+const SKP_float SKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min[ 10 + 1 ] =
+{
+      0.01409912109375000000f,
+      0.00009155273437500000f,
+      0.00195312500000000000f,
+      0.00225830078125000000f,
+      0.00299072265625000000f,
+      0.00152587890625000000f,
+      0.00296020507812500000f,
+      0.00207519531250000000f,
+      0.00366210937499999960f,
+      0.00161743164062500000f,
+      0.01950073242187500000f
+};
+
+const SKP_float SKP_Silk_NLSF_MSVQ_CB1_10[ 10 * NLSF_MSVQ_CB1_10_VECTORS ] =
+{
+      0.05728149414062500000f,      0.14178466796875000000f,
+      0.23535156250000003000f,      0.32791137695312500000f,
+      0.42614746093750000000f,      0.51965332031250000000f,
+      0.61764526367187500000f,      0.70745849609375000000f,
+      0.80783081054687511000f,      0.89376831054687500000f,
+      0.04919433593750000000f,      0.10003662109375001000f,
+      0.21624755859374997000f,      0.30441284179687500000f,
+      0.40368652343750000000f,      0.49633789062499994000f,
+      0.59802246093750000000f,      0.69244384765625011000f,
+      0.79458618164062500000f,      0.88394165039062500000f,
+      0.06619262695312500000f,      0.11688232421875000000f,
+      0.19714355468750000000f,      0.27337646484375000000f,
+      0.36499023437500000000f,      0.45013427734375000000f,
+      0.56176757812500000000f,      0.66098022460937500000f,
+      0.76348876953125000000f,      0.85580444335937489000f,
+      0.11230468750000001000f,      0.18383789062500000000f,
+      0.27423095703125000000f,      0.37402343749999994000f,
+      0.46389770507812494000f,      0.55505371093750000000f,
+      0.66348266601562500000f,      0.74645996093750000000f,
+      0.83874511718749989000f,      0.91732788085937500000f,
+      0.07885742187500000000f,      0.15829467773437500000f,
+      0.23800659179687500000f,      0.33270263671874994000f,
+      0.40219116210937500000f,      0.48110961914062500000f,
+      0.58035278320312500000f,      0.68453979492187500000f,
+      0.79013061523437500000f,      0.87579345703125000000f,
+      0.11386108398437500000f,      0.17550659179687500000f,
+      0.26397705078125000000f,      0.35833740234375000000f,
+      0.46051025390625000000f,      0.53121948242187500000f,
+      0.62228393554687500000f,      0.71475219726562500000f,
+      0.80041503906250000000f,      0.89254760742187511000f,
+      0.06430053710937500000f,      0.19296264648437500000f,
+      0.27206420898437500000f,      0.37310791015625000000f,
+      0.45089721679687500000f,      0.54293823242187500000f,
+      0.63061523437500000000f,      0.72262573242187500000f,
+      0.81875610351562500000f,      0.89578247070312500000f,
+      0.05117797851562500000f,      0.08758544921875000000f,
+      0.16436767578125000000f,      0.24649047851562500000f,
+      0.36062622070312500000f,      0.46313476562500000000f,
+      0.56936645507812500000f,      0.67156982421875011000f,
+      0.77859497070312500000f,      0.87551879882812500000f,
+      0.06442260742187500000f,      0.11062622070312501000f,
+      0.21444702148437500000f,      0.32312011718750000000f,
+      0.42904663085937500000f,      0.52468872070312500000f,
+      0.64505004882812489000f,      0.74035644531250000000f,
+      0.84158325195312500000f,      0.91662597656250011000f,
+      0.07409667968750000000f,      0.12237548828125000000f,
+      0.17593383789062500000f,      0.28613281250000000000f,
+      0.42129516601562500000f,      0.48281860351562500000f,
+      0.59338378906250000000f,      0.68325805664062511000f,
+      0.77194213867187500000f,      0.89447021484375000000f,
+      0.06884765625000000000f,      0.14123535156250000000f,
+      0.25564575195312500000f,      0.37966918945312500000f,
+      0.46640014648437500000f,      0.59393310546875000000f,
+      0.67922973632812500000f,      0.77975463867187489000f,
+      0.86767578124999989000f,      0.92480468750000000000f,
+      0.07177734375000000000f,      0.11215209960937499000f,
+      0.18704223632812500000f,      0.36218261718750000000f,
+      0.44406127929687494000f,      0.50827026367187500000f,
+      0.59887695312500000000f,      0.66781616210937500000f,
+      0.80950927734375000000f,      0.88040161132812500000f,
+      0.16000366210937500000f,      0.22119140625000000000f,
+      0.32220458984375000000f,      0.40493774414062500000f,
+      0.47763061523437506000f,      0.54684448242187500000f,
+      0.64517211914062500000f,      0.72714233398437500000f,
+      0.82708740234375000000f,      0.90084838867187489000f,
+      0.13494873046875000000f,      0.20523071289062500000f,
+      0.31887817382812500000f,      0.40505981445312500000f,
+      0.49206542968750000000f,      0.60794067382812500000f,
+      0.69659423828124989000f,      0.79531860351562500000f,
+      0.87777709960937500000f,      0.93331909179687500000f,
+      0.13757324218750000000f,      0.19198608398437500000f,
+      0.29003906250000000000f,      0.36038208007812506000f,
+      0.42196655273437500000f,      0.48675537109375000000f,
+      0.58218383789062500000f,      0.67395019531250000000f,
+      0.78552246093750000000f,      0.87457275390625000000f,
+      0.07751464843750000000f,      0.13113403320312500000f,
+      0.26181030273437500000f,      0.41436767578125000000f,
+      0.50762939453125000000f,      0.58291625976562500000f,
+      0.65756225585937500000f,      0.72897338867187500000f,
+      0.81716918945312489000f,      0.88946533203125000000f,
+      0.10305786132812501000f,      0.19403076171875003000f,
+      0.31201171875000000000f,      0.44305419921875000000f,
+      0.54641723632812500000f,      0.64257812500000000000f,
+      0.72134399414062500000f,      0.78686523437500011000f,
+      0.85940551757812500000f,      0.91885375976562500000f,
+      0.12747192382812500000f,      0.18133544921875000000f,
+      0.24899291992187497000f,      0.30847167968750000000f,
+      0.37017822265625000000f,      0.47210693359375000000f,
+      0.61618041992187500000f,      0.71185302734375000000f,
+      0.81732177734375000000f,      0.89596557617187500000f,
+      0.07604980468750000000f,      0.11599731445312501000f,
+      0.18750000000000000000f,      0.29983520507812500000f,
+      0.48828124999999994000f,      0.56979370117187500000f,
+      0.63760375976562489000f,      0.72213745117187500000f,
+      0.79037475585937500000f,      0.88421630859374989000f,
+      0.09188842773437500000f,      0.14425659179687500000f,
+      0.20855712890625000000f,      0.32058715820312500000f,
+      0.38040161132812500000f,      0.44238281250000000000f,
+      0.52078247070312500000f,      0.61193847656250000000f,
+      0.77102661132812500000f,      0.85623168945312500000f,
+      0.12661743164062500000f,      0.21963500976562500000f,
+      0.37652587890625000000f,      0.46008300781249994000f,
+      0.54937744140625000000f,      0.61614990234375000000f,
+      0.67709350585937500000f,      0.75448608398437500000f,
+      0.82650756835937500000f,      0.88882446289062511000f,
+      0.09078979492187500000f,      0.13970947265625000000f,
+      0.19677734375000000000f,      0.25567626953125000000f,
+      0.29513549804687500000f,      0.40359497070312500000f,
+      0.59515380859375000000f,      0.67984008789062500000f,
+      0.79522705078125000000f,      0.88043212890625000000f,
+      0.12518310546875000000f,      0.17578125000000000000f,
+      0.23632812500000000000f,      0.28942871093750000000f,
+      0.32788085937500000000f,      0.37561035156250000000f,
+      0.44790649414062500000f,      0.59835815429687500000f,
+      0.75808715820312500000f,      0.86611938476562489000f,
+      0.15048217773437500000f,      0.28341674804687500000f,
+      0.38076782226562500000f,      0.40878295898437500000f,
+      0.41845703125000000000f,      0.43795776367187506000f,
+      0.48974609375000000000f,      0.60629272460937500000f,
+      0.73815917968750000000f,      0.88482666015624989000f,
+      0.12637329101562500000f,      0.24008178710937500000f,
+      0.40100097656250000000f,      0.54077148437500000000f,
+      0.61230468750000000000f,      0.64416503906250000000f,
+      0.66198730468750000000f,      0.69342041015625000000f,
+      0.72436523437500000000f,      0.83767700195312500000f,
+      0.12240600585937499000f,      0.26611328125000000000f,
+      0.40386962890625006000f,      0.49456787109375006000f,
+      0.53713989257812500000f,      0.55813598632812500000f,
+      0.56530761718750000000f,      0.60086059570312500000f,
+      0.70904541015625000000f,      0.85089111328125000000f,
+      0.10437011718750000000f,      0.18295288085937500000f,
+      0.34271240234375006000f,      0.46133422851562500000f,
+      0.48544311523437500000f,      0.51217651367187500000f,
+      0.54205322265625000000f,      0.71249389648437500000f,
+      0.82086181640625000000f,      0.91387939453125000000f,
+      0.09399414062500001400f,      0.20709228515625000000f,
+      0.31936645507812506000f,      0.41735839843750000000f,
+      0.55111694335937500000f,      0.72067260742187489000f,
+      0.82574462890624989000f,      0.88751220703124989000f,
+      0.90219116210937500000f,      0.91262817382812500000f,
+      0.09271240234375000000f,      0.17150878906250003000f,
+      0.28277587890625000000f,      0.39276123046875000000f,
+      0.57382202148437500000f,      0.59844970703125000000f,
+      0.61065673828125000000f,      0.63482666015625000000f,
+      0.72882080078125011000f,      0.89434814453125000000f,
+      0.10113525390625000000f,      0.19592285156250000000f,
+      0.27606201171875000000f,      0.40472412109375000000f,
+      0.48428344726562500000f,      0.70547485351562500000f,
+      0.72225952148437500000f,      0.73898315429687500000f,
+      0.74728393554687500000f,      0.79086303710937500000f,
+      0.10586547851562500000f,      0.21249389648437500000f,
+      0.30831909179687500000f,      0.46636962890625006000f,
+      0.62655639648437500000f,      0.70922851562500000000f,
+      0.76367187500000000000f,      0.79409790039062500000f,
+      0.81591796875000000000f,      0.83175659179687500000f,
+      0.09280395507812500000f,      0.19711303710937500000f,
+      0.29837036132812500000f,      0.39355468750000000000f,
+      0.49789428710937500000f,      0.59234619140625000000f,
+      0.73455810546875000000f,      0.89578247070312500000f,
+      0.97030639648437500000f,      0.97885131835937500000f,
+     -0.00610351562500000000f,     -0.00408935546875000000f,
+     -0.00344848632812500000f,     -0.00622558593750000000f,
+     -0.01058959960937500000f,     -0.01342773437500000000f,
+     -0.01074218749999999800f,     -0.00643920898437500000f,
+     -0.01275634765625000200f,     -0.00524902343750000000f,
+     -0.00955200195312500000f,      0.00180053710937500000f,
+      0.01510620117187500000f,      0.02355957031250000000f,
+      0.02200317382812500000f,      0.01873779296875000000f,
+      0.01019287109375000000f,      0.01354980468750000000f,
+      0.00686645507812500000f,      0.00738525390625000000f,
+      0.00491333007812500000f,      0.00048828125000000000f,
+      0.00836181640625000000f,      0.01721191406250000000f,
+     -0.00222778320312500000f,     -0.00573730468750000000f,
+     -0.01205444335937500000f,     -0.00521850585937500000f,
+      0.02371215820312499700f,      0.01550292968750000000f,
+      0.04089355468750000000f,      0.03494262695312500000f,
+      0.02133178710937500000f,      0.00598144531250000000f,
+      0.00680541992187500000f,      0.00527954101562500000f,
+      0.00274658203125000000f,      0.00076293945312500000f,
+     -0.00079345703125000011f,      0.00054931640625000000f,
+      0.00405883789062500000f,     -0.00320434570312500000f,
+     -0.01098632812500000000f,     -0.00845336914062500000f,
+      0.02621459960937500000f,      0.01934814453125000000f,
+      0.00125122070312500000f,     -0.01699829101562500000f,
+     -0.02343750000000000000f,     -0.02825927734375000000f,
+     -0.01834106445312500000f,     -0.03115844726562500000f,
+     -0.03628540039062500000f,     -0.01113891601562500000f,
+      0.00686645507812500000f,      0.00326538085937500000f,
+      0.01141357421875000200f,     -0.00152587890625000000f,
+      0.01321411132812500000f,      0.01272583007812500000f,
+      0.00476074218750000000f,      0.00119018554687500000f,
+     -0.01821899414062500000f,     -0.04263305664062499300f,
+     -0.04864501953125000000f,     -0.01806640625000000000f,
+     -0.01480102539062500000f,     -0.00891113281250000000f,
+      0.00772094726562500000f,      0.00265502929687500000f,
+     -0.00000000000000000000f,     -0.00018310546875000000f,
+     -0.00076293945312500000f,     -0.01052856445312500000f,
+     -0.00732421874999999910f,      0.00366210937499999960f,
+      0.03848266601562500000f,      0.02886962890625000000f,
+      0.00506591796875000090f,     -0.00845336914062500000f,
+      0.00735473632812500090f,      0.00509643554687500000f,
+      0.00518798828125000000f,      0.01309204101562500000f,
+      0.01580810546875000000f,      0.02178955078125000000f,
+      0.01837158203125000000f,      0.00775146484375000000f,
+      0.00408935546875000000f,      0.00280761718750000000f,
+     -0.00463867187500000000f,     -0.00988769531250000000f,
+     -0.01202392578124999800f,      0.00149536132812500000f,
+     -0.00460815429687500000f,     -0.00927734375000000000f,
+     -0.02209472656250000000f,     -0.02005004882812500000f,
+     -0.00494384765625000000f,     -0.01126098632812500000f,
+     -0.00106811523437500000f,      0.00009155273437500000f,
+     -0.00006103515625000000f,     -0.00952148437500000000f,
+     -0.00610351562500000000f,     -0.00280761718750000000f,
+     -0.00692749023437500000f,      0.00738525390625000000f,
+      0.01916503906250000000f,      0.01724243164062500000f,
+     -0.00378417968750000000f,      0.03222656250000000000f,
+      0.02349853515625000300f,      0.00308227539062500000f,
+     -0.00256347656250000000f,     -0.00100708007812500000f,
+      0.00012207031250000000f,     -0.00585937500000000000f,
+     -0.00830078125000000000f,      0.00015258789062500000f,
+     -0.01913452148437500000f,     -0.02981567382812500000f,
+      0.01278686523437500000f,      0.01440429687500000000f,
+      0.00161743164062500000f,     -0.00314331054687500000f,
+      0.00442504882812500000f,      0.00982666015625000000f,
+     -0.00289916992187500000f,     -0.00094604492187500000f,
+     -0.00305175781250000000f,     -0.00924682617187500000f,
+     -0.01708984375000000000f,     -0.03256225585937500000f,
+     -0.01260375976562500000f,      0.02178955078125000000f,
+      0.00863647460937500000f,      0.00006103515625000000f,
+     -0.00680541992187500000f,     -0.01119995117187500000f,
+      0.01596069335937500000f,      0.01098632812500000000f,
+     -0.00115966796875000000f,     -0.00350952148437500040f,
+      0.01153564453125000000f,     -0.01803588867187500000f,
+     -0.02191162109375000000f,      0.01367187500000000000f,
+     -0.01467895507812500000f,     -0.00836181640625000000f,
+      0.00549316406250000000f,     -0.00268554687499999960f,
+     -0.01773071289062500000f,     -0.00479125976562500000f,
+     -0.02124023437500000000f,     -0.03860473632812500000f,
+      0.01202392578124999800f,     -0.01461791992187500000f,
+     -0.00070190429687500000f,      0.00378417968750000000f,
+     -0.00131225585937500000f,      0.00057983398437500000f,
+     -0.00344848632812500000f,     -0.00720214843750000000f,
+     -0.01257324218750000000f,     -0.02011108398437500000f,
+     -0.00610351562500000000f,      0.00006103515625000000f,
+     -0.00210571289062500000f,     -0.01043701171875000000f,
+      0.00607299804687500000f,      0.00167846679687500000f,
+      0.00177001953125000000f,     -0.00109863281250000000f,
+     -0.00155639648437500000f,     -0.00189208984375000000f,
+      0.01547241210937500000f,      0.01547241210937500000f,
+      0.01303100585937500200f,      0.01348876953125000000f,
+      0.00109863281250000000f,      0.01834106445312500000f,
+     -0.00430297851562500000f,      0.00207519531250000000f,
+      0.00836181640625000000f,      0.00836181640625000000f,
+      0.00207519531250000000f,     -0.00036621093750000000f,
+     -0.00012207031250000000f,      0.00216674804687500000f,
+     -0.00588989257812500000f,     -0.01416015625000000000f,
+     -0.01296997070312499800f,     -0.01168823242187499800f,
+      0.01245117187500000000f,      0.00619506835937500000f,
+     -0.01028442382812500000f,      0.00720214843750000000f,
+      0.01251220703125000000f,     -0.00180053710937500000f,
+     -0.00076293945312500000f,     -0.01040649414062499800f,
+     -0.01370239257812500200f,      0.00085449218750000000f,
+     -0.00027465820312500000f,      0.00274658203125000000f,
+      0.01013183593750000200f,     -0.00042724609375000000f,
+     -0.02761840820312499700f,      0.00292968750000000000f,
+     -0.01647949218750000000f,     -0.00738525390625000000f,
+      0.02072143554687500000f,     -0.00180053710937500000f,
+      0.00585937500000000000f,     -0.00073242187500000000f,
+      0.00183105468749999980f,     -0.00662231445312500000f,
+      0.00015258789062500000f,     -0.00112915039062500000f,
+      0.00546264648437500000f,     -0.00061035156250000000f,
+      0.00949096679687500000f,      0.01583862304687500000f,
+      0.00836181640625000000f,      0.00219726562500000000f,
+     -0.00994873046875000000f,     -0.03143310546875000000f,
+     -0.00799560546875000000f,      0.00650024414062500000f,
+      0.01159667968750000000f,      0.00250244140625000000f,
+      0.01000976562500000000f,      0.01254272460937500000f,
+     -0.01647949218750000000f,      0.01751708984375000000f,
+     -0.00863647460937500000f,      0.00460815429687500000f,
+      0.00552368164062500000f,     -0.01226806640625000000f,
+     -0.00848388671875000000f,     -0.00732421874999999910f,
+     -0.00335693359375000000f,     -0.00692749023437500000f,
+     -0.00805664062500000000f,     -0.00271606445312500000f,
+     -0.00762939453124999910f,     -0.00790405273437500000f,
+     -0.00082397460937500000f,      0.00323486328125000000f,
+     -0.00729370117187499910f,     -0.00299072265625000000f,
+     -0.01190185546875000000f,      0.00360107421875000000f,
+      0.00186157226562500000f,      0.00317382812500000040f,
+      0.00897216796875000000f,      0.01623535156250000000f,
+      0.00280761718750000000f,     -0.00039672851562500005f,
+      0.00183105468749999980f,     -0.00711059570312500000f,
+      0.01022338867187500000f,      0.01651000976562500000f,
+      0.00936889648437500000f,     -0.00079345703125000011f,
+     -0.00335693359375000000f,     -0.00277709960937500000f,
+     -0.00704956054687500000f,     -0.01403808593750000200f,
+      0.00518798828125000000f,      0.00613403320312500000f,
+      0.00292968750000000000f,     -0.01135253906249999800f,
+      0.00402832031250000000f,      0.01327514648437500000f,
+     -0.00921630859375000000f,      0.00659179687500000000f,
+     -0.00851440429687500000f,     -0.00125122070312500000f,
+      0.00225830078125000000f,      0.00579833984375000000f,
+      0.01123046875000000000f,      0.00833129882812500000f,
+     -0.00567626953124999910f,     -0.01855468750000000000f,
+     -0.00479125976562500000f,      0.00485229492187500000f,
+      0.00036621093750000000f,      0.00848388671875000000f,
+      0.00747680664062500000f,      0.00936889648437500000f,
+      0.00076293945312500000f,     -0.00570678710937500090f,
+     -0.00048828125000000000f,      0.00167846679687500000f,
+      0.00091552734374999989f,     -0.00497436523437500000f,
+      0.01672363281250000000f,     -0.00936889648437500000f,
+      0.00323486328125000000f,     -0.00015258789062500000f,
+      0.00082397460937500000f,      0.01007080078124999800f,
+     -0.01269531250000000200f,      0.01449584960937500000f,
+      0.01336669921875000200f,     -0.00717163085937500000f,
+      0.00317382812500000040f,      0.00418090820312500000f,
+      0.00064086914062500000f,     -0.00015258789062500000f,
+     -0.00915527343750000000f,     -0.01428222656250000000f,
+      0.01589965820312500000f,     -0.01058959960937500000f,
+      0.00518798828125000000f,     -0.00610351562500000000f,
+     -0.00668334960937500090f,      0.00939941406250000000f,
+     -0.00372314453125000000f,     -0.00405883789062500000f,
+      0.00668334960937500090f,     -0.00048828125000000000f,
+      0.01095581054687500000f,      0.01257324218750000000f,
+     -0.00271606445312500000f,     -0.00338745117187500000f,
+      0.00146484375000000000f,      0.00982666015625000000f,
+      0.00433349609375000000f,      0.00540161132812500090f,
+     -0.00872802734375000000f,     -0.00387573242187500000f,
+     -0.00119018554687500000f,     -0.00192260742187500000f,
+     -0.00128173828125000000f,     -0.01376342773437500000f,
+      0.00488281250000000000f,      0.00939941406250000000f,
+     -0.00173950195312500000f,      0.00588989257812500000f,
+     -0.00146484375000000000f,      0.00225830078125000000f,
+     -0.01055908203125000000f,      0.00180053710937500000f,
+     -0.00082397460937500000f,      0.00082397460937500000f,
+     -0.01431274414062499800f,     -0.00845336914062500000f,
+     -0.01049804687500000000f,      0.00860595703125000000f,
+      0.00799560546875000000f,      0.00372314453125000000f,
+      0.00521850585937500000f,     -0.00759887695312500000f,
+      0.00082397460937500000f,      0.00787353515625000000f,
+      0.00573730468750000000f,     -0.00009155273437500000f,
+      0.00204467773437500000f,     -0.00628662109375000000f,
+     -0.00866699218750000000f,      0.00888061523437500000f,
+     -0.00357055664062500000f,     -0.00268554687499999960f,
+     -0.01455688476562500000f,      0.01144409179687500000f,
+      0.00152587890625000000f,      0.00323486328125000000f,
+      0.00302124023437500040f,     -0.00555419921875000000f,
+      0.01336669921875000200f,     -0.01147460937500000000f,
+     -0.01223754882812500000f,     -0.00149536132812500000f,
+      0.00363159179687500000f,     -0.00070190429687500000f,
+     -0.00030517578125000000f,     -0.00146484375000000000f,
+     -0.00354003906250000000f,     -0.00610351562500000000f,
+     -0.00946044921875000000f,      0.00369262695312500000f,
+      0.00222778320312500000f,      0.00021362304687500000f,
+      0.00723266601562500000f,     -0.00689697265625000000f,
+      0.00424194335937500000f,     -0.01391601562500000000f,
+      0.01211547851562500000f,      0.00106811523437500000f,
+      0.00009155273437500000f,     -0.00329589843750000000f,
+      0.00985717773437500000f,     -0.00228881835937500000f,
+      0.01013183593750000200f,      0.00604248046875000090f,
+     -0.00302124023437500040f,     -0.00064086914062500000f
+};
+
+const SKP_Silk_NLSF_CBS_FLP SKP_Silk_NLSF_CB1_10_Stage_info_FLP[ NLSF_MSVQ_CB1_10_STAGES ] =
+{
+        {  32, &SKP_Silk_NLSF_MSVQ_CB1_10[ 10 *   0 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates[   0 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_10[ 10 *  32 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates[  32 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_10[ 10 *  40 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates[  40 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_10[ 10 *  48 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates[  48 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_10[ 10 *  56 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates[  56 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_10[ 10 *  64 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates[  64 ] }
+};
+
+const SKP_Silk_NLSF_CB_FLP SKP_Silk_NLSF_CB1_10_FLP =
+{
+        NLSF_MSVQ_CB1_10_STAGES,
+        SKP_Silk_NLSF_CB1_10_Stage_info_FLP,
+        SKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min,
+        SKP_Silk_NLSF_MSVQ_CB1_10_CDF,
+        SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr,
+        SKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx
+};
+
--- /dev/null
+++ b/src_FLP/SKP_Silk_tables_NLSF_CB1_16_FLP.c
@@ -1,0 +1,973 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/**********************************************/
+/* This file has been automatically generated */
+/*                                            */
+/* ROM usage:  7.14 kB                        */
+/**********************************************/
+
+#include "SKP_Silk_tables_FLP.h"
+#include "SKP_Silk_tables_NLSF_CB1_16.h"
+
+const SKP_float SKP_Silk_NLSF_MSVQ_CB1_16_rates[ NLSF_MSVQ_CB1_16_VECTORS ] =
+{
+      1.78125000000000000000f,      3.06250000000000000000f,
+      4.15625000000000000000f,      4.18750000000000000000f,
+      4.31250000000000000000f,      4.50000000000000000000f,
+      4.53125000000000000000f,      4.59375000000000000000f,
+      4.75000000000000000000f,      5.53125000000000000000f,
+      5.53125000000000000000f,      5.56250000000000000000f,
+      5.65625000000000000000f,      5.71875000000000000000f,
+      5.75000000000000000000f,      6.31250000000000000000f,
+      6.43750000000000000000f,      6.71875000000000000000f,
+      6.81250000000000000000f,      6.93750000000000000000f,
+      7.09375000000000000000f,      7.09375000000000000000f,
+      7.09375000000000000000f,      7.09375000000000000000f,
+      7.09375000000000000000f,      7.09375000000000000000f,
+      7.09375000000000000000f,      7.09375000000000000000f,
+      7.09375000000000000000f,      7.09375000000000000000f,
+      7.09375000000000000000f,      7.09375000000000000000f,
+      1.18750000000000000000f,      2.71875000000000000000f,
+      3.03125000000000000000f,      3.71875000000000000000f,
+      4.00000000000000000000f,      4.21875000000000000000f,
+      4.37500000000000000000f,      4.46875000000000000000f,
+      1.25000000000000000000f,      2.53125000000000000000f,
+      3.34375000000000000000f,      3.34375000000000000000f,
+      4.03125000000000000000f,      4.18750000000000000000f,
+      4.18750000000000000000f,      4.46875000000000000000f,
+      0.96875000000000000000f,      3.40625000000000000000f,
+      3.56250000000000000000f,      3.75000000000000000000f,
+      4.00000000000000000000f,      4.06250000000000000000f,
+      4.09375000000000000000f,      4.12500000000000000000f,
+      1.34375000000000000000f,      1.90625000000000000000f,
+      3.87500000000000000000f,      3.90625000000000000000f,
+      4.12500000000000000000f,      4.25000000000000000000f,
+      4.40625000000000000000f,      4.43750000000000000000f,
+      0.93750000000000000000f,      3.43750000000000000000f,
+      3.68750000000000000000f,      3.75000000000000000000f,
+      4.03125000000000000000f,      4.09375000000000000000f,
+      4.15625000000000000000f,      4.15625000000000000000f,
+      0.96875000000000000000f,      3.37500000000000000000f,
+      3.59375000000000000000f,      3.78125000000000000000f,
+      3.87500000000000000000f,      4.06250000000000000000f,
+      4.15625000000000000000f,      4.28125000000000000000f,
+      1.25000000000000000000f,      3.06250000000000000000f,
+      3.59375000000000000000f,      3.59375000000000000000f,
+      3.62500000000000000000f,      3.65625000000000000000f,
+      3.84375000000000000000f,      3.87500000000000000000f,
+      1.56250000000000000000f,      2.90625000000000000000f,
+      3.37500000000000000000f,      3.43750000000000000000f,
+      3.50000000000000000000f,      3.50000000000000000000f,
+      3.56250000000000000000f,      3.59375000000000000000f,
+      2.28125000000000000000f,      2.96875000000000000000f,
+      2.96875000000000000000f,      3.00000000000000000000f,
+      3.00000000000000000000f,      3.28125000000000000000f,
+      3.34375000000000000000f,      3.43750000000000000000f
+};
+
+const SKP_float SKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min[ 16 + 1 ] =
+{
+      0.00451660156250000000f,
+      0.00009155273437500000f,
+      0.00183105468749999980f,
+      0.00207519531250000000f,
+      0.00357055664062500000f,
+      0.00262451171875000000f,
+      0.00369262695312500000f,
+      0.00378417968750000000f,
+      0.00463867187500000000f,
+      0.00466918945312500000f,
+      0.00631713867187499910f,
+      0.00460815429687500000f,
+      0.00686645507812500000f,
+      0.00729370117187499910f,
+      0.00384521484375000000f,
+      0.00558471679687500000f,
+      0.02416992187500000300f
+};
+
+const SKP_float SKP_Silk_NLSF_MSVQ_CB1_16[ 16 * NLSF_MSVQ_CB1_16_VECTORS ] =
+{
+      0.03994750976562499300f,      0.09338378906250000000f,
+      0.15475463867187500000f,      0.21350097656250000000f,
+      0.27551269531250000000f,      0.33380126953125000000f,
+      0.39471435546875000000f,      0.45443725585937500000f,
+      0.51675415039062500000f,      0.57537841796875000000f,
+      0.63452148437500000000f,      0.69470214843750000000f,
+      0.75540161132812500000f,      0.81356811523437500000f,
+      0.87359619140625000000f,      0.93081665039062500000f,
+      0.03857421875000000000f,      0.08377075195312498600f,
+      0.14068603515625000000f,      0.19555664062500000000f,
+      0.25286865234375000000f,      0.30648803710937500000f,
+      0.36877441406250000000f,      0.43054199218750000000f,
+      0.49188232421875006000f,      0.55429077148437500000f,
+      0.61325073242187500000f,      0.67639160156250000000f,
+      0.74047851562500000000f,      0.80310058593750000000f,
+      0.86453247070312500000f,      0.92318725585937500000f,
+      0.03186035156250000000f,      0.06347656250000000000f,
+      0.11206054687500000000f,      0.15805053710937500000f,
+      0.21789550781250003000f,      0.27770996093750000000f,
+      0.33782958984375000000f,      0.39871215820312494000f,
+      0.47067260742187500000f,      0.54290771484375000000f,
+      0.60824584960937500000f,      0.67446899414062500000f,
+      0.74127197265625000000f,      0.80447387695312500000f,
+      0.86972045898437500000f,      0.92828369140625000000f,
+      0.03451538085937500000f,      0.07556152343750000000f,
+      0.13665771484375000000f,      0.18765258789062500000f,
+      0.24114990234375000000f,      0.30136108398437500000f,
+      0.36431884765624994000f,      0.42141723632812500000f,
+      0.48428344726562500000f,      0.54107666015625000000f,
+      0.60876464843750000000f,      0.66244506835937500000f,
+      0.72512817382812500000f,      0.77926635742187500000f,
+      0.83697509765625000000f,      0.88247680664062500000f,
+      0.03173828125000000000f,      0.06115722656250000000f,
+      0.12286376953125000000f,      0.18615722656250000000f,
+      0.25732421875000000000f,      0.32025146484375000000f,
+      0.38482666015625000000f,      0.44842529296875000000f,
+      0.51260375976562500000f,      0.57296752929687500000f,
+      0.63473510742187500000f,      0.69525146484375000000f,
+      0.75598144531250000000f,      0.81427001953125000000f,
+      0.87374877929687511000f,      0.93127441406250000000f,
+      0.07049560546875000000f,      0.11633300781250001000f,
+      0.18045043945312497000f,      0.24209594726562500000f,
+      0.30618286132812500000f,      0.36257934570312500000f,
+      0.42373657226562500000f,      0.48211669921875000000f,
+      0.54171752929687500000f,      0.59741210937500000000f,
+      0.65557861328125000000f,      0.71032714843750000000f,
+      0.76773071289062500000f,      0.82427978515624989000f,
+      0.87991333007812500000f,      0.93453979492187500000f,
+      0.03826904296875000000f,      0.08688354492187500000f,
+      0.15298461914062500000f,      0.20693969726562500000f,
+      0.26324462890625000000f,      0.31646728515625000000f,
+      0.38836669921875000000f,      0.44656372070312500000f,
+      0.49685668945312494000f,      0.54479980468750000000f,
+      0.60638427734375000000f,      0.65527343749999989000f,
+      0.70196533203124989000f,      0.75161743164062500000f,
+      0.81512451171875000000f,      0.85327148437500000000f,
+      0.04479980468750000000f,      0.09335327148437500000f,
+      0.15219116210937500000f,      0.21441650390625000000f,
+      0.26675415039062500000f,      0.31774902343750000000f,
+      0.37478637695312500000f,      0.42785644531250000000f,
+      0.48736572265625000000f,      0.54086303710937500000f,
+      0.59936523437500000000f,      0.65679931640625000000f,
+      0.71630859375000000000f,      0.78311157226562500000f,
+      0.85406494140625000000f,      0.92239379882812500000f,
+      0.06625366210937500000f,      0.10882568359375000000f,
+      0.17105102539062497000f,      0.22534179687500000000f,
+      0.28698730468750000000f,      0.34240722656249994000f,
+      0.39764404296875000000f,      0.45037841796875000000f,
+      0.50924682617187500000f,      0.56204223632812500000f,
+      0.62091064453125000000f,      0.67416381835937511000f,
+      0.73410034179687489000f,      0.79992675781250000000f,
+      0.86535644531250000000f,      0.92764282226562500000f,
+      0.07351684570312500000f,      0.14270019531250000000f,
+      0.23019409179687497000f,      0.29864501953125000000f,
+      0.34848022460937500000f,      0.39474487304687500000f,
+      0.43847656250000006000f,      0.47769165039062500000f,
+      0.52996826171875000000f,      0.57809448242187500000f,
+      0.63360595703125000000f,      0.68594360351562511000f,
+      0.74584960937500000000f,      0.80343627929687500000f,
+      0.86315917968750000000f,      0.92291259765625000000f,
+      0.07183837890625000000f,      0.12884521484375000000f,
+      0.20812988281250003000f,      0.27792358398437500000f,
+      0.35388183593749994000f,      0.42523193359375000000f,
+      0.48745727539062494000f,      0.53961181640625000000f,
+      0.58465576171875000000f,      0.62612915039062500000f,
+      0.67111206054687500000f,      0.71472167968750000000f,
+      0.76837158203125000000f,      0.82202148437499989000f,
+      0.87872314453125000000f,      0.93161010742187511000f,
+      0.04037475585937500000f,      0.07366943359375000000f,
+      0.12768554687500000000f,      0.18429565429687500000f,
+      0.22991943359375000000f,      0.28680419921875000000f,
+      0.33871459960937500000f,      0.39968872070312500000f,
+      0.45162963867187500000f,      0.50204467773437500000f,
+      0.56256103515625000000f,      0.63742065429687500000f,
+      0.71685791015624989000f,      0.78851318359375011000f,
+      0.85589599609374989000f,      0.92239379882812500000f,
+      0.04153442382812500700f,      0.09896850585937500000f,
+      0.18457031250000000000f,      0.25973510742187500000f,
+      0.33572387695312500000f,      0.40115356445312500000f,
+      0.45999145507812500000f,      0.50683593750000000000f,
+      0.55316162109375000000f,      0.59146118164062500000f,
+      0.63818359375000000000f,      0.68991088867187500000f,
+      0.75256347656250011000f,      0.81384277343750000000f,
+      0.87472534179687500000f,      0.93280029296875000000f,
+      0.03710937500000000000f,      0.08081054687500000000f,
+      0.18008422851562503000f,      0.25701904296875000000f,
+      0.30630493164062500000f,      0.34866333007812500000f,
+      0.39590454101562500000f,      0.44564819335937500000f,
+      0.50921630859375000000f,      0.56762695312500000000f,
+      0.62728881835937500000f,      0.68405151367187500000f,
+      0.74615478515625000000f,      0.80200195312500000000f,
+      0.86077880859375000000f,      0.91787719726562500000f,
+      0.07376098632812500000f,      0.12353515625000000000f,
+      0.19274902343750000000f,      0.25735473632812500000f,
+      0.32073974609375000000f,      0.38931274414062494000f,
+      0.45996093750000006000f,      0.52780151367187500000f,
+      0.59732055664062500000f,      0.65621948242187489000f,
+      0.71194458007812500000f,      0.75628662109375011000f,
+      0.80062866210937489000f,      0.84500122070312500000f,
+      0.89154052734375000000f,      0.94052124023437500000f,
+      0.03088378906250000000f,      0.07156372070312500000f,
+      0.15231323242187500000f,      0.22512817382812503000f,
+      0.28884887695312500000f,      0.36364746093750000000f,
+      0.43627929687500000000f,      0.50555419921875000000f,
+      0.56982421875000000000f,      0.62695312500000000000f,
+      0.68029785156250000000f,      0.72747802734375000000f,
+      0.77560424804687511000f,      0.82550048828125011000f,
+      0.88037109375000000000f,      0.93234252929687500000f,
+      0.05911254882812500000f,      0.11270141601562500000f,
+      0.19125366210937500000f,      0.24472045898437500000f,
+      0.31652832031250000000f,      0.37213134765625000000f,
+      0.43600463867187494000f,      0.47781372070312500000f,
+      0.53195190429687500000f,      0.57568359375000000000f,
+      0.63381958007812500000f,      0.67767333984375000000f,
+      0.73355102539062500000f,      0.77706909179687489000f,
+      0.83566284179687500000f,      0.87286376953125000000f,
+      0.06008911132812500000f,      0.10086059570312500000f,
+      0.15310668945312500000f,      0.20526123046875000000f,
+      0.25558471679687500000f,      0.30496215820312500000f,
+      0.35504150390625000000f,      0.40527343750000000000f,
+      0.46014404296875000000f,      0.51119995117187500000f,
+      0.56347656250000000000f,      0.61398315429687500000f,
+      0.67013549804687500000f,      0.72808837890625000000f,
+      0.80029296875000011000f,      0.89410400390625011000f,
+      0.03656005859375000000f,      0.08078002929687500000f,
+      0.16564941406250000000f,      0.22653198242187500000f,
+      0.29830932617187500000f,      0.37094116210937500000f,
+      0.44754028320312500000f,      0.49877929687500000000f,
+      0.55300903320312500000f,      0.60394287109375000000f,
+      0.65786743164062489000f,      0.69723510742187500000f,
+      0.74719238281250011000f,      0.78558349609375000000f,
+      0.84347534179687500000f,      0.87619018554687500000f,
+      0.04992675781250000000f,      0.10232543945312500000f,
+      0.16622924804687500000f,      0.23184204101562503000f,
+      0.30020141601562500000f,      0.35543823242187500000f,
+      0.42614746093750000000f,      0.48886108398437500000f,
+      0.54510498046875000000f,      0.61389160156250000000f,
+      0.68112182617187500000f,      0.73355102539062500000f,
+      0.79241943359375000000f,      0.85711669921875011000f,
+      0.91290283203125011000f,      0.95501708984375000000f,
+      0.08166503906250000000f,      0.12527465820312500000f,
+      0.19464111328125000000f,      0.25094604492187500000f,
+      0.30694580078125000000f,      0.35244750976562500000f,
+      0.39892578124999994000f,      0.44107055664062494000f,
+      0.48693847656249994000f,      0.52963256835937500000f,
+      0.57772827148437500000f,      0.62261962890625000000f,
+      0.67697143554687500000f,      0.72888183593750000000f,
+      0.78482055664062500000f,      0.84603881835937500000f,
+      0.04190063476562500000f,      0.07913208007812500000f,
+      0.13577270507812500000f,      0.17190551757812500000f,
+      0.22277832031250000000f,      0.25711059570312500000f,
+      0.28912353515625000000f,      0.33013916015625000000f,
+      0.38967895507812500000f,      0.47979736328125006000f,
+      0.57989501953125000000f,      0.65396118164062500000f,
+      0.72271728515625000000f,      0.79113769531250000000f,
+      0.85861206054687500000f,      0.92568969726562500000f,
+      0.04870605468750000000f,      0.09713745117187500000f,
+      0.16412353515625003000f,      0.21862792968750000000f,
+      0.26458740234375000000f,      0.30838012695312500000f,
+      0.35003662109375000000f,      0.39166259765625000000f,
+      0.42697143554687500000f,      0.45904541015624994000f,
+      0.50787353515625000000f,      0.54635620117187500000f,
+      0.63351440429687500000f,      0.77157592773437500000f,
+      0.84747314453125000000f,      0.92285156249999989000f,
+      0.06216430664062500000f,      0.12167358398437500000f,
+      0.19033813476562500000f,      0.24771118164062500000f,
+      0.30377197265625000000f,      0.37368774414062500000f,
+      0.43386840820312500000f,      0.48498535156250000000f,
+      0.54244995117187500000f,      0.61383056640625000000f,
+      0.68096923828125000000f,      0.79168701171875000000f,
+      0.80276489257812500000f,      0.80819702148437500000f,
+      0.81774902343750000000f,      0.87161254882812500000f,
+      0.06655883789062500000f,      0.11773681640625000000f,
+      0.17578125000000000000f,      0.24182128906250000000f,
+      0.30642700195312500000f,      0.35330200195312500000f,
+      0.42019653320312494000f,      0.47912597656250000000f,
+      0.53189086914062500000f,      0.60665893554687500000f,
+      0.71969604492187500000f,      0.74884033203125000000f,
+      0.76940917968750000000f,      0.78408813476562511000f,
+      0.87548828125000000000f,      0.93099975585937489000f,
+      0.06079101562500000000f,      0.11846923828125000000f,
+      0.19757080078125000000f,      0.24057006835937503000f,
+      0.28628540039062500000f,      0.38671875000000006000f,
+      0.43762207031250000000f,      0.47915649414062500000f,
+      0.50836181640625000000f,      0.54418945312500000000f,
+      0.63629150390625000000f,      0.69839477539062500000f,
+      0.75308227539062511000f,      0.80740356445312500000f,
+      0.86947631835937500000f,      0.92956542968750000000f,
+      0.07296752929687500000f,      0.12170410156250000000f,
+      0.16625976562500000000f,      0.22680664062500000000f,
+      0.33612060546875000000f,      0.38388061523437500000f,
+      0.40100097656250000000f,      0.43170166015625000000f,
+      0.48516845703125006000f,      0.56738281250000000000f,
+      0.64404296875000000000f,      0.70169067382812500000f,
+      0.75296020507812500000f,      0.82965087890624989000f,
+      0.85882568359375000000f,      0.90368652343750000000f,
+      0.05227661132812500000f,      0.15570068359375000000f,
+      0.21328735351562500000f,      0.23797607421875000000f,
+      0.26458740234375000000f,      0.30853271484375000000f,
+      0.38897705078125000000f,      0.45413208007812500000f,
+      0.50991821289062500000f,      0.56173706054687500000f,
+      0.61419677734375000000f,      0.67465209960937500000f,
+      0.73794555664062500000f,      0.79949951171874989000f,
+      0.86172485351562500000f,      0.91970825195312500000f,
+      0.04919433593750000000f,      0.11038208007812500000f,
+      0.18762207031250000000f,      0.25509643554687500000f,
+      0.29223632812500000000f,      0.35180664062500006000f,
+      0.45581054687500000000f,      0.54348754882812500000f,
+      0.55807495117187500000f,      0.57156372070312500000f,
+      0.57986450195312500000f,      0.64425659179687500000f,
+      0.75167846679687500000f,      0.81164550781250000000f,
+      0.87707519531250000000f,      0.93515014648437500000f,
+      0.06915283203125000000f,      0.12719726562500000000f,
+      0.23992919921875000000f,      0.29132080078125000000f,
+      0.29351806640625000000f,      0.29611206054687500000f,
+      0.30926513671875000000f,      0.42410278320312500000f,
+      0.49636840820312500000f,      0.56250000000000000000f,
+      0.62826538085937500000f,      0.68984985351562500000f,
+      0.75543212890625000000f,      0.82379150390625000000f,
+      0.88882446289062511000f,      0.94116210937500000000f,
+      0.05615234375000000700f,      0.11953735351562501000f,
+      0.19140625000000000000f,      0.23831176757812500000f,
+      0.29644775390625000000f,      0.34906005859375000000f,
+      0.42013549804687500000f,      0.48214721679687500000f,
+      0.58728027343750000000f,      0.67053222656250000000f,
+      0.70129394531250000000f,      0.70739746093750000000f,
+      0.72396850585937489000f,      0.78277587890625000000f,
+      0.88858032226562500000f,      0.94863891601562500000f,
+      0.04449462890625000000f,      0.11022949218750000000f,
+      0.18334960937500000000f,      0.22851562500000000000f,
+      0.29989624023437500000f,      0.36294555664062500000f,
+      0.42987060546875000000f,      0.48016357421875000000f,
+      0.53222656250000000000f,      0.59616088867187500000f,
+      0.68432617187500000000f,      0.75582885742187500000f,
+      0.89251708984375000000f,      0.91333007812499989000f,
+      0.93127441406250000000f,      0.94442749023437489000f,
+     -0.00311279296875000000f,     -0.00369262695312500000f,
+     -0.00094604492187500000f,     -0.00018310546875000000f,
+      0.00015258789062500000f,     -0.00006103515625000000f,
+      0.00024414062500000000f,     -0.00054931640625000000f,
+     -0.00012207031250000000f,      0.00018310546875000000f,
+      0.00042724609375000000f,     -0.00006103515625000000f,
+     -0.00036621093750000000f,     -0.00048828125000000000f,
+     -0.00036621093750000000f,     -0.00183105468749999980f,
+     -0.00384521484375000000f,     -0.01077270507812500000f,
+     -0.01751708984375000000f,     -0.02066040039062500000f,
+     -0.02005004882812500000f,     -0.01882934570312500000f,
+     -0.01519775390625000000f,     -0.01199340820312500000f,
+     -0.01062011718750000000f,     -0.00845336914062500000f,
+     -0.00686645507812500000f,     -0.00500488281250000000f,
+     -0.00311279296875000000f,     -0.00213623046875000000f,
+     -0.00094604492187500000f,      0.00100708007812500000f,
+      0.00012207031250000000f,      0.01156616210937500000f,
+      0.01181030273437500000f,      0.01681518554687500000f,
+      0.01846313476562500000f,      0.01892089843750000000f,
+      0.01623535156250000000f,      0.01470947265625000200f,
+      0.01348876953125000000f,      0.01385498046875000000f,
+      0.01174926757812500200f,      0.01058959960937500000f,
+      0.00982666015625000000f,      0.00912475585937500000f,
+      0.00811767578125000000f,      0.00610351562500000000f,
+      0.03564453125000000000f,      0.02902221679687500000f,
+      0.02050781250000000000f,      0.00750732421875000000f,
+      0.00183105468749999980f,     -0.00491333007812500000f,
+     -0.00790405273437500000f,     -0.00714111328125000000f,
+     -0.00772094726562500000f,     -0.00860595703125000000f,
+     -0.00619506835937500000f,     -0.00570678710937500090f,
+     -0.00473022460937500000f,     -0.00537109374999999910f,
+     -0.00604248046875000090f,     -0.00543212890625000000f,
+      0.00030517578125000000f,      0.00518798828125000000f,
+      0.01199340820312500000f,      0.01858520507812500000f,
+      0.01693725585937500000f,      0.00634765625000000090f,
+     -0.01007080078124999800f,     -0.01742553710937500000f,
+     -0.02346801757812500000f,     -0.01931762695312500000f,
+     -0.00973510742187500000f,     -0.00131225585937500000f,
+      0.00289916992187500000f,      0.00320434570312500000f,
+      0.00323486328125000000f,      0.00354003906250000000f,
+     -0.00463867187500000000f,     -0.00427246093750000000f,
+     -0.00381469726562499960f,      0.00015258789062500000f,
+      0.00527954101562500000f,      0.00836181640625000000f,
+      0.00805664062500000000f,      0.01010131835937500000f,
+     -0.00112915039062500000f,     -0.00894165039062500000f,
+     -0.01858520507812500000f,     -0.02398681640625000000f,
+     -0.02926635742187500000f,     -0.02484130859375000300f,
+     -0.01968383789062500000f,     -0.00726318359375000000f,
+     -0.00277709960937500000f,      0.00109863281250000000f,
+     -0.00033569335937499995f,     -0.00308227539062500000f,
+     -0.00851440429687500000f,     -0.00692749023437500000f,
+     -0.00122070312500000000f,      0.00274658203125000000f,
+      0.01617431640625000000f,      0.02066040039062500000f,
+      0.02716064453125000000f,      0.03369140625000000000f,
+      0.03048706054687500000f,      0.02548217773437500000f,
+      0.01721191406250000000f,      0.00900268554687500000f,
+     -0.00854492187500000000f,     -0.01110839843750000000f,
+     -0.01037597656250000000f,     -0.01010131835937500000f,
+     -0.00866699218750000000f,      0.00878906250000000000f,
+      0.02322387695312500000f,      0.02685546875000000000f,
+      0.03015136718750000000f,      0.01913452148437500000f,
+      0.00445556640625000000f,     -0.00689697265625000000f,
+     -0.00619506835937500000f,     -0.00552368164062500000f,
+     -0.00433349609375000000f,      0.00119018554687500000f,
+      0.00073242187500000000f,     -0.00079345703125000011f,
+     -0.00326538085937500000f,     -0.00280761718750000000f,
+     -0.00491333007812500000f,     -0.00411987304687500000f,
+     -0.00399780273437500000f,     -0.00268554687499999960f,
+     -0.00488281250000000000f,     -0.00476074218750000000f,
+     -0.00228881835937500000f,     -0.00131225585937500000f,
+     -0.00109863281250000000f,     -0.00018310546875000000f,
+     -0.00100708007812500000f,      0.00100708007812500000f,
+     -0.00988769531250000000f,     -0.01266479492187500000f,
+     -0.00329589843750000000f,      0.00378417968750000000f,
+      0.00479125976562500000f,      0.00582885742187500000f,
+      0.00619506835937500000f,      0.00601196289062499910f,
+      0.00439453125000000000f,      0.00332641601562499960f,
+      0.00463867187500000000f,      0.00537109374999999910f,
+      0.00579833984375000000f,      0.00372314453125000000f,
+      0.00308227539062500000f,      0.00485229492187500000f,
+      0.02023315429687500000f,      0.02038574218750000000f,
+      0.01464843749999999800f,      0.01220703125000000000f,
+      0.01156616210937500000f,      0.01354980468750000000f,
+      0.01361083984375000000f,      0.01397705078124999800f,
+      0.01046752929687500200f,      0.01071166992187500000f,
+      0.00946044921875000000f,      0.00695800781250000000f,
+      0.00405883789062500000f,      0.00134277343749999980f,
+      0.00228881835937500000f,      0.00192260742187500000f,
+     -0.00256347656250000000f,      0.00119018554687500000f,
+     -0.00088500976562500000f,      0.00106811523437500000f,
+     -0.00286865234375000000f,     -0.00711059570312500000f,
+     -0.00796508789062500000f,     -0.01080322265625000200f,
+      0.00234985351562500000f,      0.00799560546875000000f,
+     -0.00073242187500000000f,     -0.00442504882812500000f,
+     -0.01016235351562500000f,     -0.01248168945312500000f,
+     -0.01232910156250000000f,     -0.01821899414062500000f,
+     -0.01489257812500000000f,     -0.00915527343750000000f,
+      0.02777099609375000000f,      0.01806640625000000000f,
+      0.01257324218750000000f,      0.00366210937499999960f,
+      0.00396728515625000000f,     -0.00155639648437500000f,
+     -0.00112915039062500000f,     -0.00234985351562500000f,
+     -0.00524902343750000000f,     -0.00552368164062500000f,
+     -0.00485229492187500000f,     -0.00451660156250000000f,
+     -0.00219726562500000000f,     -0.00189208984375000000f,
+      0.01556396484375000000f,      0.01574707031250000000f,
+      0.00344848632812500000f,     -0.01785278320312500000f,
+     -0.03280639648437500000f,     -0.02920532226562500000f,
+     -0.01272583007812500000f,     -0.00595092773437500000f,
+      0.00027465820312500000f,      0.00021362304687500000f,
+     -0.00268554687499999960f,     -0.00527954101562500000f,
+     -0.00277709960937500000f,      0.00164794921875000000f,
+      0.00299072265625000000f,      0.00289916992187500000f,
+     -0.00085449218750000000f,      0.00601196289062499910f,
+     -0.01608276367187500000f,     -0.01895141601562500000f,
+      0.00479125976562500000f,      0.00372314453125000000f,
+     -0.00512695312500000000f,      0.00448608398437500000f,
+      0.00942993164062500000f,      0.00915527343750000000f,
+      0.01025390625000000000f,      0.00961303710937500000f,
+      0.01208496093750000200f,      0.01245117187500000000f,
+      0.01147460937500000000f,      0.00323486328125000000f,
+     -0.00494384765625000000f,     -0.00518798828125000000f,
+     -0.00961303710937500000f,      0.00299072265625000000f,
+      0.02505493164062499700f,      0.02770996093750000000f,
+      0.01739501953125000000f,     -0.00100708007812500000f,
+     -0.00952148437500000000f,     -0.01733398437500000000f,
+     -0.01745605468750000000f,     -0.01153564453125000000f,
+     -0.00326538085937500000f,      0.00070190429687500000f,
+      0.00476074218750000000f,      0.00283813476562499960f,
+     -0.00393676757812500000f,     -0.00265502929687500000f,
+      0.00061035156250000000f,     -0.00219726562500000000f,
+     -0.00112915039062500000f,      0.00122070312500000000f,
+      0.00064086914062500000f,      0.00082397460937500000f,
+      0.00146484375000000000f,      0.00228881835937500000f,
+      0.00234985351562500000f,      0.00198364257812500000f,
+      0.00140380859375000000f,      0.00216674804687500000f,
+      0.00201416015625000000f,      0.00143432617187500000f,
+      0.00415039062500000000f,      0.01049804687500000000f,
+      0.00720214843750000000f,      0.00982666015625000000f,
+      0.00518798828125000000f,      0.00863647460937500000f,
+      0.00820922851562500000f,      0.00888061523437500000f,
+      0.00494384765625000000f,     -0.00131225585937500000f,
+     -0.00622558593750000000f,     -0.00790405273437500000f,
+     -0.00732421874999999910f,     -0.00930786132812500000f,
+     -0.01068115234374999800f,     -0.00952148437500000000f,
+      0.01364135742187499800f,      0.01062011718750000000f,
+      0.01052856445312500000f,      0.00784301757812500000f,
+      0.00216674804687500000f,     -0.00399780273437500000f,
+     -0.00234985351562500000f,     -0.00579833984375000000f,
+     -0.00616455078125000000f,     -0.00122070312500000000f,
+      0.00106811523437500000f,      0.00405883789062500000f,
+      0.00796508789062500000f,      0.01113891601562500000f,
+      0.01336669921875000200f,      0.00924682617187500000f,
+     -0.00024414062500000000f,      0.00067138671874999989f,
+      0.00427246093750000000f,      0.00418090820312500000f,
+     -0.00915527343750000000f,     -0.01956176757812500000f,
+     -0.02331542968750000000f,     -0.00817871093750000000f,
+     -0.00070190429687500000f,     -0.00076293945312500000f,
+      0.00222778320312500000f,     -0.00494384765625000000f,
+     -0.00457763671875000000f,     -0.00646972656250000000f,
+     -0.00219726562500000000f,      0.00018310546875000000f,
+      0.00119018554687500000f,      0.00238037109375000000f,
+      0.00317382812500000040f,     -0.00283813476562499960f,
+     -0.00939941406250000000f,     -0.00415039062500000000f,
+      0.00357055664062500000f,     -0.00216674804687500000f,
+     -0.01565551757812500000f,     -0.02502441406250000000f,
+     -0.02136230468749999700f,     -0.01373291015625000000f,
+     -0.00491333007812500000f,     -0.00070190429687500000f,
+      0.00088500976562500000f,      0.00238037109375000000f,
+      0.01028442382812500000f,      0.00323486328125000000f,
+     -0.01239013671875000000f,     -0.02386474609375000000f,
+     -0.00341796875000000000f,      0.00711059570312500000f,
+      0.01168823242187499800f,      0.00189208984375000000f,
+     -0.00384521484375000000f,      0.00018310546875000000f,
+     -0.00234985351562500000f,     -0.00088500976562500000f,
+     -0.00445556640625000000f,     -0.00375366210937500000f,
+     -0.00155639648437500000f,     -0.00082397460937500000f,
+     -0.00082397460937500000f,     -0.01162719726562500000f,
+     -0.01956176757812500000f,      0.01226806640625000000f,
+      0.01644897460937500000f,      0.00024414062500000000f,
+     -0.00631713867187499910f,     -0.01116943359375000000f,
+     -0.00109863281250000000f,     -0.00082397460937500000f,
+     -0.00622558593750000000f,     -0.00692749023437500000f,
+     -0.00723266601562500000f,     -0.00576782226562500000f,
+     -0.00195312500000000000f,      0.00155639648437500000f,
+     -0.00280761718750000000f,     -0.00418090820312500000f,
+     -0.00857543945312500000f,      0.00189208984375000000f,
+      0.00711059570312500000f,      0.00280761718750000000f,
+      0.00451660156250000000f,      0.00897216796875000000f,
+      0.01107788085937500200f,      0.01269531250000000200f,
+      0.01721191406250000000f,      0.01907348632812500000f,
+      0.01129150390625000000f,     -0.00109863281250000000f,
+     -0.01431274414062499800f,     -0.01409912109375000000f,
+      0.00311279296875000000f,      0.00512695312500000000f,
+      0.00097656250000000000f,      0.00357055664062500000f,
+     -0.00064086914062500000f,      0.00296020507812500000f,
+      0.00424194335937500000f,      0.00271606445312500000f,
+      0.00317382812500000040f,      0.00106811523437500000f,
+      0.00012207031250000000f,      0.00250244140625000000f,
+      0.00201416015625000000f,      0.00177001953125000000f,
+      0.00222778320312500000f,      0.00283813476562499960f,
+     -0.00231933593750000000f,     -0.00976562500000000000f,
+     -0.00720214843750000000f,     -0.00576782226562500000f,
+     -0.00619506835937500000f,     -0.00433349609375000000f,
+     -0.00082397460937500000f,     -0.00222778320312500000f,
+      0.00027465820312500000f,     -0.00027465820312500000f,
+     -0.00076293945312500000f,      0.00036621093750000000f,
+     -0.00045776367187499995f,      0.00012207031250000000f,
+      0.00012207031250000000f,     -0.00152587890625000000f,
+      0.00958251953125000000f,      0.00549316406250000000f,
+      0.00494384765625000000f,     -0.00149536132812500000f,
+      0.00607299804687500000f,     -0.00329589843750000000f,
+     -0.00692749023437500000f,     -0.00201416015625000000f,
+     -0.01364135742187499800f,     -0.00204467773437500000f,
+     -0.00805664062500000000f,     -0.01202392578124999800f,
+      0.00015258789062500000f,      0.00167846679687500000f,
+     -0.00405883789062500000f,     -0.00537109374999999910f,
+     -0.00354003906250000000f,     -0.00735473632812500090f,
+      0.00830078125000000000f,      0.00332641601562499960f,
+      0.00860595703125000000f,      0.00799560546875000000f,
+      0.00585937500000000000f,     -0.00195312500000000000f,
+     -0.01196289062500000000f,     -0.01568603515625000000f,
+      0.00476074218750000000f,      0.00619506835937500000f,
+      0.00469970703125000000f,      0.00219726562500000000f,
+     -0.00103759765625000000f,     -0.00488281250000000000f,
+     -0.00222778320312500000f,      0.00009155273437500000f,
+     -0.00100708007812500000f,     -0.01315307617187500000f,
+      0.00979614257812500000f,      0.00054931640625000000f,
+     -0.01730346679687500000f,     -0.01800537109375000000f,
+     -0.00329589843750000000f,      0.00268554687499999960f,
+      0.00201416015625000000f,      0.00155639648437500000f,
+     -0.00094604492187500000f,     -0.00588989257812500000f,
+     -0.00140380859375000000f,      0.00198364257812500000f,
+     -0.00088500976562500000f,     -0.00070190429687500000f,
+      0.00656127929687500000f,     -0.00094604492187500000f,
+      0.00308227539062500000f,     -0.00344848632812500000f,
+      0.00097656250000000000f,      0.00927734375000000000f,
+      0.00268554687499999960f,      0.00976562500000000000f,
+      0.01367187500000000000f,      0.00015258789062500000f,
+     -0.01339721679687500000f,     -0.01715087890625000000f,
+     -0.01550292968750000000f,     -0.00411987304687500000f,
+     -0.00039672851562500005f,     -0.00521850585937500000f,
+     -0.00024414062500000000f,      0.00555419921875000000f,
+     -0.00302124023437500040f,     -0.00552368164062500000f,
+     -0.00454711914062500000f,      0.01147460937500000000f,
+      0.01452636718750000000f,      0.00195312500000000000f,
+     -0.01208496093750000200f,     -0.01989746093750000000f,
+     -0.00457763671875000000f,      0.00537109374999999910f,
+      0.00677490234375000000f,      0.00198364257812500000f,
+     -0.01800537109375000000f,      0.02194213867187500300f,
+      0.00827026367187500000f,      0.01217651367187500000f,
+      0.00747680664062500000f,      0.00219726562500000000f,
+     -0.00476074218750000000f,     -0.00463867187500000000f,
+     -0.00537109374999999910f,      0.00180053710937500000f,
+      0.00286865234375000000f,      0.00381469726562499960f,
+     -0.00027465820312500000f,     -0.00021362304687500000f,
+      0.00027465820312500000f,      0.00003051757812500000f,
+     -0.00186157226562500000f,     -0.00354003906250000000f,
+     -0.00250244140625000000f,      0.00003051757812500000f,
+      0.00241088867187500000f,      0.00067138671874999989f,
+     -0.00134277343749999980f,     -0.00045776367187499995f,
+     -0.00146484375000000000f,     -0.00198364257812500000f,
+     -0.00189208984375000000f,     -0.00308227539062500000f,
+     -0.00311279296875000000f,     -0.00164794921875000000f,
+     -0.00213623046875000000f,     -0.00238037109375000000f,
+     -0.00244140625000000000f,     -0.00076293945312500000f,
+      0.01214599609375000000f,      0.00216674804687500000f,
+      0.00424194335937500000f,      0.00115966796875000000f,
+      0.00274658203125000000f,      0.00592041015625000000f,
+      0.00677490234375000000f,      0.00759887695312500000f,
+      0.00503540039062499910f,      0.00286865234375000000f,
+      0.00674438476562500000f,      0.00799560546875000000f,
+      0.00497436523437500000f,      0.00277709960937500000f,
+     -0.00628662109375000000f,      0.01748657226562500000f,
+      0.00610351562500000000f,     -0.00875854492187500000f,
+     -0.00448608398437500000f,      0.00015258789062500000f,
+     -0.00054931640625000000f,     -0.00259399414062500000f,
+     -0.00225830078125000000f,     -0.00381469726562499960f,
+     -0.00265502929687500000f,      0.00259399414062500000f,
+      0.00430297851562500000f,      0.00012207031250000000f,
+     -0.00012207031250000000f,      0.00085449218750000000f,
+      0.00714111328125000000f,      0.00146484375000000000f,
+     -0.00457763671875000000f,     -0.00338745117187500000f,
+     -0.01544189453125000000f,      0.00723266601562500000f,
+     -0.00637817382812500090f,      0.01052856445312500000f,
+      0.00286865234375000000f,     -0.00378417968750000000f,
+      0.00234985351562500000f,      0.00369262695312500000f,
+      0.00436401367187500000f,      0.00036621093750000000f,
+     -0.00244140625000000000f,     -0.00146484375000000000f,
+      0.00582885742187500000f,      0.00439453125000000000f,
+     -0.00283813476562499960f,     -0.00198364257812500000f,
+     -0.00460815429687500000f,     -0.01962280273437500000f,
+      0.01327514648437500000f,      0.00323486328125000000f,
+      0.00265502929687500000f,      0.00021362304687500000f,
+      0.00198364257812500000f,      0.00311279296875000000f,
+      0.00286865234375000000f,      0.00207519531250000000f,
+      0.00015258789062500000f,      0.00302124023437500040f,
+      0.00677490234375000000f,      0.00283813476562499960f,
+      0.00286865234375000000f,      0.01083374023437500000f,
+     -0.00039672851562500005f,     -0.00271606445312500000f,
+     -0.00695800781250000000f,     -0.01535034179687500000f,
+      0.00875854492187500000f,      0.00332641601562499960f,
+      0.00329589843750000000f,      0.01370239257812500200f,
+      0.00772094726562500000f,     -0.00088500976562500000f,
+     -0.00332641601562499960f,     -0.00354003906250000000f,
+      0.00045776367187499995f,     -0.00222778320312500000f,
+     -0.00061035156250000000f,      0.00399780273437500000f,
+     -0.00448608398437500000f,      0.00219726562500000000f,
+      0.00180053710937500000f,     -0.00457763671875000000f,
+     -0.01812744140625000000f,      0.00833129882812500000f,
+      0.00964355468750000000f,      0.00402832031250000000f,
+      0.00607299804687500000f,      0.00323486328125000000f,
+      0.00604248046875000090f,      0.00646972656250000000f,
+      0.00671386718750000000f,      0.00250244140625000000f,
+      0.00137329101562500000f,     -0.00039672851562500005f,
+      0.00680541992187500000f,      0.00418090820312500000f,
+      0.00823974609375000000f,      0.00115966796875000000f,
+      0.00769042968750000000f,      0.00411987304687500000f,
+     -0.00540161132812500090f,     -0.00631713867187499910f,
+     -0.01098632812500000000f,     -0.00311279296875000000f,
+      0.01229858398437500000f,      0.01239013671875000000f,
+     -0.00042724609375000000f,      0.00253295898437500040f,
+      0.00195312500000000000f,      0.00155639648437500000f,
+     -0.00021362304687500000f,     -0.00302124023437500040f,
+     -0.00296020507812500000f,     -0.00268554687499999960f,
+     -0.00378417968750000000f,     -0.00198364257812500000f,
+      0.00128173828125000000f,      0.00097656250000000000f,
+      0.00085449218750000000f,      0.00088500976562500000f,
+      0.00036621093750000000f,      0.00061035156250000000f,
+      0.00363159179687500000f,     -0.00079345703125000011f,
+     -0.00646972656250000000f,     -0.00613403320312500000f,
+      0.01138305664062500000f,      0.00765991210937500090f,
+      0.00430297851562500000f,      0.00314331054687500000f,
+      0.00109863281250000000f,     -0.00158691406250000020f,
+      0.00201416015625000000f,      0.00054931640625000000f,
+     -0.00018310546875000000f,     -0.00289916992187500000f,
+     -0.00598144531250000000f,      0.00015258789062500000f,
+      0.00299072265625000000f,     -0.00259399414062500000f,
+     -0.00329589843750000000f,      0.00665283203124999910f,
+     -0.00500488281250000000f,      0.00061035156250000000f,
+      0.01086425781250000000f,      0.00524902343750000000f,
+      0.00112915039062500000f,      0.00811767578125000000f,
+      0.00070190429687500000f,      0.00341796875000000000f,
+     -0.00073242187500000000f,     -0.00302124023437500040f,
+     -0.00280761718750000000f,     -0.00543212890625000000f,
+      0.00088500976562500000f,     -0.00848388671875000000f,
+      0.01184082031250000000f,     -0.00183105468749999980f,
+     -0.00671386718750000000f,      0.00915527343750000000f,
+     -0.00039672851562500005f,      0.00469970703125000000f,
+      0.00582885742187500000f,      0.00045776367187499995f,
+     -0.00112915039062500000f,     -0.00335693359375000000f,
+     -0.00466918945312500000f,     -0.00457763671875000000f,
+     -0.00347900390625000000f,     -0.00021362304687500000f,
+     -0.00286865234375000000f,     -0.00094604492187500000f,
+     -0.00189208984375000000f,     -0.00540161132812500090f,
+      0.00012207031250000000f,     -0.00213623046875000000f,
+      0.00106811523437500000f,      0.01382446289062500000f,
+      0.00448608398437500000f,     -0.00753784179687500000f,
+     -0.01000976562500000000f,      0.00308227539062500000f,
+      0.00061035156250000000f,     -0.00347900390625000000f,
+      0.00448608398437500000f,      0.00329589843750000000f,
+     -0.00363159179687500000f,     -0.00332641601562499960f,
+     -0.00311279296875000000f,     -0.00726318359375000000f,
+      0.00167846679687500000f,     -0.00311279296875000000f,
+      0.00527954101562500000f,     -0.00271606445312500000f,
+      0.00393676757812500000f,      0.00421142578125000000f,
+     -0.01007080078124999800f,     -0.00488281250000000000f,
+      0.01480102539062500000f,      0.00469970703125000000f,
+     -0.00180053710937500000f,     -0.00518798828125000000f,
+     -0.00061035156250000000f,     -0.00103759765625000000f,
+     -0.00796508789062500000f,     -0.00122070312500000000f,
+     -0.00393676757812500000f,      0.00234985351562500000f,
+     -0.00256347656250000000f,      0.00210571289062500000f,
+      0.00253295898437500040f,      0.00488281250000000000f,
+      0.00515747070312500000f,      0.00192260742187500000f,
+     -0.01574707031250000000f,      0.00091552734374999989f,
+      0.01025390625000000000f,      0.00158691406250000020f,
+     -0.00000000000000000000f,     -0.00158691406250000020f,
+     -0.00378417968750000000f,      0.00482177734375000000f,
+      0.00057983398437500000f,      0.00601196289062499910f,
+     -0.00030517578125000000f,     -0.01144409179687500000f,
+      0.01235961914062499800f,      0.00869750976562500000f,
+      0.00347900390625000000f,     -0.01205444335937500000f,
+     -0.00143432617187500000f,      0.00598144531250000000f,
+      0.00189208984375000000f,      0.00265502929687500000f,
+     -0.00323486328125000000f,     -0.00198364257812500000f,
+     -0.00228881835937500000f,     -0.00210571289062500000f,
+     -0.00039672851562500005f,      0.00103759765625000000f,
+      0.00302124023437500040f,      0.00180053710937500000f,
+      0.00253295898437500040f,      0.00299072265625000000f,
+      0.00134277343749999980f,      0.00000000000000000000f,
+      0.00073242187500000000f,      0.00054931640625000000f,
+      0.00051879882812500000f,      0.00213623046875000000f,
+     -0.00067138671874999989f,      0.00592041015625000000f,
+      0.00634765625000000090f,      0.00439453125000000000f,
+     -0.00241088867187500000f,     -0.00045776367187499995f,
+      0.00097656250000000000f,     -0.00317382812500000040f,
+     -0.00085449218750000000f,     -0.00320434570312500000f,
+     -0.00567626953124999910f,     -0.00646972656250000000f,
+     -0.00695800781250000000f,     -0.00241088867187500000f,
+     -0.00231933593750000000f,      0.00155639648437500000f,
+     -0.00216674804687500000f,      0.00219726562500000000f,
+      0.00360107421875000000f,     -0.00103759765625000000f,
+     -0.00009155273437500000f,     -0.00521850585937500000f,
+      0.00015258789062500000f,      0.00006103515625000000f,
+     -0.00329589843750000000f,     -0.00381469726562499960f,
+      0.00189208984375000000f,     -0.00177001953125000000f,
+      0.00177001953125000000f,     -0.00369262695312500000f,
+      0.00222778320312500000f,     -0.01422119140625000000f,
+      0.00280761718750000000f,      0.00192260742187500000f,
+     -0.00286865234375000000f,     -0.00238037109375000000f,
+     -0.00231933593750000000f,      0.00646972656250000000f,
+      0.00109863281250000000f,     -0.00686645507812500000f,
+     -0.00216674804687500000f,     -0.01080322265625000200f,
+      0.00463867187500000000f,      0.00436401367187500000f,
+     -0.00241088867187500000f,     -0.00750732421875000000f,
+     -0.00155639648437500000f,     -0.00094604492187500000f,
+     -0.00018310546875000000f,     -0.00823974609375000000f,
+      0.00732421874999999910f,      0.00640869140625000000f,
+      0.00091552734374999989f,     -0.00479125976562500000f,
+     -0.00704956054687500000f,      0.00225830078125000000f,
+     -0.00445556640625000000f,      0.00268554687499999960f,
+     -0.00833129882812500000f,      0.00476074218750000000f,
+      0.00280761718750000000f,      0.00170898437500000000f,
+      0.00216674804687500000f,      0.00006103515625000000f,
+      0.00970458984375000000f,      0.00500488281250000000f,
+      0.00097656250000000000f,     -0.00335693359375000000f,
+     -0.00106811523437500000f,     -0.00125122070312500000f,
+     -0.00289916992187500000f,     -0.00323486328125000000f,
+      0.00033569335937499995f,      0.00402832031250000000f,
+     -0.00207519531250000000f,      0.00167846679687500000f,
+      0.00375366210937500000f,     -0.00253295898437500040f,
+     -0.00454711914062500000f,      0.00646972656250000000f,
+      0.00402832031250000000f,      0.00000000000000000000f,
+     -0.00592041015625000000f,      0.00167846679687500000f,
+      0.00628662109375000000f,     -0.00329589843750000000f,
+     -0.01077270507812500000f,      0.00881958007812500000f,
+     -0.00595092773437500000f,      0.00003051757812500000f,
+      0.00711059570312500000f,     -0.00067138671874999989f,
+     -0.00183105468749999980f,      0.00061035156250000000f,
+      0.00079345703125000011f,      0.00207519531250000000f,
+      0.00506591796875000090f,      0.00082397460937500000f,
+     -0.00177001953125000000f,      0.00396728515625000000f,
+      0.00341796875000000000f,      0.00326538085937500000f,
+      0.00082397460937500000f,     -0.00503540039062499910f,
+      0.00350952148437500040f,     -0.00283813476562499960f,
+     -0.00112915039062500000f,      0.00115966796875000000f,
+      0.00253295898437500040f,      0.01473999023437500000f,
+      0.00198364257812500000f,     -0.00698852539062499910f,
+     -0.00039672851562500005f,      0.00479125976562500000f,
+      0.00259399414062500000f,      0.00152587890625000000f,
+      0.00415039062500000000f,      0.00030517578125000000f,
+      0.00097656250000000000f,      0.00253295898437500040f,
+      0.00250244140625000000f,      0.00167846679687500000f,
+      0.00015258789062500000f,     -0.00027465820312500000f,
+     -0.00158691406250000020f,     -0.00238037109375000000f,
+     -0.00247192382812500000f,     -0.00155639648437500000f,
+      0.00122070312500000000f,      0.00054931640625000000f,
+     -0.00387573242187500000f,     -0.00683593750000000000f,
+     -0.00125122070312500000f,      0.00161743164062500000f,
+     -0.00640869140625000000f,     -0.00344848632812500000f,
+      0.00073242187500000000f,     -0.00051879882812500000f,
+     -0.00570678710937500090f,     -0.00271606445312500000f,
+      0.00024414062500000000f,      0.00369262695312500000f,
+      0.00253295898437500040f,      0.00234985351562500000f,
+      0.00277709960937500000f,     -0.00225830078125000000f,
+     -0.00106811523437500000f,     -0.00341796875000000000f,
+     -0.00491333007812500000f,     -0.00527954101562500000f,
+      0.00311279296875000000f,      0.00402832031250000000f,
+     -0.00381469726562499960f,     -0.00186157226562500000f,
+      0.00314331054687500000f,     -0.00793457031250000000f,
+      0.00158691406250000020f,      0.00506591796875000090f,
+     -0.00097656250000000000f,     -0.00476074218750000000f,
+     -0.00265502929687500000f,     -0.00170898437500000000f,
+      0.00183105468749999980f,     -0.00213623046875000000f,
+     -0.00378417968750000000f,      0.00738525390625000000f,
+      0.00347900390625000000f,     -0.00765991210937500090f,
+     -0.00506591796875000090f,      0.00613403320312500000f,
+      0.00387573242187500000f,      0.00085449218750000000f,
+     -0.00033569335937499995f,      0.00070190429687500000f,
+     -0.00244140625000000000f,     -0.00350952148437500040f,
+     -0.00061035156250000000f,     -0.00155639648437500000f,
+     -0.01062011718750000000f,      0.01037597656250000000f,
+     -0.00103759765625000000f,      0.00405883789062500000f,
+      0.00039672851562500005f,      0.00280761718750000000f,
+     -0.00378417968750000000f,     -0.00415039062500000000f,
+     -0.00366210937499999960f,     -0.00079345703125000011f,
+     -0.00018310546875000000f,      0.00051879882812500000f,
+      0.00085449218750000000f,      0.00064086914062500000f,
+      0.00366210937499999960f,     -0.00512695312500000000f,
+      0.00488281250000000000f,     -0.00106811523437500000f,
+      0.00350952148437500040f,      0.00085449218750000000f,
+      0.00027465820312500000f,      0.00021362304687500000f,
+     -0.00170898437500000000f,      0.00119018554687500000f,
+      0.00476074218750000000f,      0.00781250000000000000f,
+     -0.00054931640625000000f,      0.00003051757812500000f,
+      0.00845336914062500000f,      0.00250244140625000000f,
+     -0.00213623046875000000f,     -0.00439453125000000000f,
+     -0.00268554687499999960f,     -0.00039672851562500005f,
+     -0.00180053710937500000f,     -0.00479125976562500000f,
+      0.00024414062500000000f,     -0.00408935546875000000f,
+      0.00064086914062500000f,     -0.00122070312500000000f,
+      0.00177001953125000000f,     -0.00064086914062500000f,
+      0.00592041015625000000f,     -0.00842285156250000000f,
+      0.00296020507812500000f,      0.00851440429687500000f,
+     -0.00170898437500000000f,     -0.00427246093750000000f,
+      0.00381469726562499960f,      0.00173950195312500000f,
+     -0.00561523437500000000f,     -0.00622558593750000000f,
+     -0.00213623046875000000f,     -0.00006103515625000000f,
+      0.00390625000000000000f,     -0.00616455078125000000f,
+     -0.00238037109375000000f,      0.00701904296875000090f,
+     -0.00070190429687500000f,      0.00491333007812500000f,
+     -0.00311279296875000000f,      0.00003051757812500000f,
+      0.00003051757812500000f,      0.00549316406250000000f,
+     -0.00094604492187500000f,     -0.00262451171875000000f,
+     -0.00509643554687500000f,     -0.00173950195312500000f,
+     -0.00183105468749999980f,      0.00082397460937500000f,
+     -0.00039672851562500005f,      0.00302124023437500040f,
+      0.00329589843750000000f,      0.00338745117187500000f,
+      0.00231933593750000000f,      0.00210571289062500000f,
+      0.00103759765625000000f,     -0.00064086914062500000f,
+      0.00161743164062500000f,      0.00115966796875000000f,
+      0.00103759765625000000f,      0.00238037109375000000f,
+      0.00222778320312500000f,      0.00668334960937500090f,
+      0.00155639648437500000f,      0.00045776367187499995f,
+     -0.00219726562500000000f,     -0.00314331054687500000f,
+     -0.00631713867187499910f,      0.00091552734374999989f,
+      0.00650024414062500000f,     -0.00042724609375000000f,
+      0.00094604492187500000f,     -0.00286865234375000000f,
+     -0.00122070312500000000f,     -0.00439453125000000000f,
+      0.00204467773437500000f,      0.00012207031250000000f,
+      0.00320434570312500000f,      0.00180053710937500000f,
+     -0.00732421874999999910f,      0.00076293945312500000f,
+      0.00744628906250000000f,      0.00210571289062500000f,
+      0.00177001953125000000f,      0.00070190429687500000f,
+     -0.00073242187500000000f,     -0.00015258789062500000f,
+     -0.00045776367187499995f,     -0.00405883789062500000f,
+     -0.00216674804687500000f,     -0.00204467773437500000f,
+      0.00552368164062500000f,      0.00088500976562500000f,
+     -0.00137329101562500000f,      0.00369262695312500000f,
+      0.00292968750000000000f,      0.00155639648437500000f,
+     -0.00219726562500000000f,     -0.00161743164062500000f,
+      0.00170898437500000000f,     -0.00466918945312500000f,
+     -0.00082397460937500000f,      0.00259399414062500000f,
+      0.00558471679687500000f,      0.00643920898437500000f,
+      0.00320434570312500000f,     -0.00103759765625000000f,
+     -0.00140380859375000000f,      0.00131225585937500000f,
+     -0.00219726562500000000f,     -0.00283813476562499960f,
+      0.00109863281250000000f,     -0.00390625000000000000f,
+      0.00088500976562500000f,      0.00338745117187500000f,
+     -0.00289916992187500000f,     -0.00476074218750000000f,
+     -0.00546264648437500000f,     -0.00717163085937500000f,
+      0.00064086914062500000f,     -0.00119018554687500000f,
+     -0.00216674804687500000f,     -0.00100708007812500000f,
+     -0.00186157226562500000f,     -0.00769042968750000000f,
+      0.00701904296875000090f,     -0.00399780273437500000f,
+      0.00479125976562500000f,     -0.00064086914062500000f,
+     -0.00259399414062500000f,     -0.00085449218750000000f,
+     -0.00375366210937500000f,      0.00244140625000000000f,
+     -0.00488281250000000000f,      0.00192260742187500000f,
+      0.00143432617187500000f,     -0.00018310546875000000f,
+     -0.00149536132812500000f,     -0.00292968750000000000f,
+     -0.00057983398437500000f,      0.00051879882812500000f,
+     -0.00177001953125000000f,      0.00051879882812500000f,
+     -0.00000000000000000000f,     -0.00039672851562500005f,
+     -0.00518798828125000000f,      0.00076293945312500000f,
+     -0.00106811523437500000f,      0.00180053710937500000f,
+      0.00030517578125000000f,     -0.00094604492187500000f,
+     -0.01260375976562500000f,      0.00247192382812500000f,
+      0.00189208984375000000f,      0.00054931640625000000f,
+     -0.00500488281250000000f,      0.00747680664062500000f,
+      0.00280761718750000000f,     -0.00503540039062499910f,
+      0.00128173828125000000f,      0.00079345703125000011f,
+      0.00384521484375000000f,     -0.00756835937500000000f,
+      0.00588989257812500000f,     -0.00167846679687500000f,
+      0.00048828125000000000f,      0.00119018554687500000f,
+      0.00042724609375000000f,      0.00152587890625000000f
+};
+
+const SKP_Silk_NLSF_CBS_FLP SKP_Silk_NLSF_CB1_16_Stage_info_FLP[ NLSF_MSVQ_CB1_16_STAGES ] =
+{
+        {  32, &SKP_Silk_NLSF_MSVQ_CB1_16[ 16 *   0 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates[   0 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16[ 16 *  32 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates[  32 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16[ 16 *  40 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates[  40 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16[ 16 *  48 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates[  48 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16[ 16 *  56 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates[  56 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16[ 16 *  64 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates[  64 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16[ 16 *  72 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates[  72 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16[ 16 *  80 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates[  80 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16[ 16 *  88 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates[  88 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16[ 16 *  96 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates[  96 ] }
+};
+
+const SKP_Silk_NLSF_CB_FLP SKP_Silk_NLSF_CB1_16_FLP =
+{
+        NLSF_MSVQ_CB1_16_STAGES,
+        SKP_Silk_NLSF_CB1_16_Stage_info_FLP,
+        SKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min,
+        SKP_Silk_NLSF_MSVQ_CB1_16_CDF,
+        SKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr,
+        SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx
+};
+
--- /dev/null
+++ b/src_FLP/SKP_Silk_tables_other_FLP.c
@@ -1,0 +1,36 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_structs_FLP.h"
+#include "SKP_Silk_define_FLP.h"
+#include "SKP_Silk_perceptual_parameters.h"
+
+const SKP_float SKP_Silk_HarmShapeFIR_FLP[ HARM_SHAPE_FIR_TAPS ] = { 16384.0f / 65536.0f, 32767.0f / 65536.0f, 16384.0f / 65536.0f };
+
+const SKP_float SKP_Silk_Quantization_Offsets[ 2 ][ 2 ] = {
+    { OFFSET_VL_Q10 / 1024.0f, OFFSET_VH_Q10 / 1024.0f }, { OFFSET_UVL_Q10 / 1024.0f, OFFSET_UVH_Q10 / 1024.0f }
+};
--- /dev/null
+++ b/src_FLP/SKP_Silk_warped_autocorrelation_FLP.c
@@ -1,0 +1,69 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+/* Autocorrelations for a warped frequency axis */
+void SKP_Silk_warped_autocorrelation_FLP( 
+          SKP_float                 *corr,              /* O    Result [order + 1]                      */
+    const SKP_float                 *input,             /* I    Input data to correlate                 */
+    const SKP_float                 warping,            /* I    Warping coefficient                     */
+    const SKP_int                   length,             /* I    Length of input                         */
+    const SKP_int                   order               /* I    Correlation order (even)                */
+)
+{
+    SKP_int   n, i;
+    double tmp1, tmp2;
+    double state[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0 };
+    double C[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0 };
+
+    /* Order must be even */
+    SKP_assert( ( order & 1 ) == 0 );
+
+    /* Loop over samples */
+    for( n = 0; n < length; n++ ) {
+        tmp1 = input[ n ];
+        /* Loop over allpass sections */
+        for( i = 0; i < order; i += 2 ) {
+            /* Output of allpass section */
+            tmp2 = state[ i ] + warping * ( state[ i + 1 ] - tmp1 );
+            state[ i ] = tmp1;
+            C[ i ] += state[ 0 ] * tmp1;
+            /* Output of allpass section */
+            tmp1 = state[ i + 1 ] + warping * ( state[ i + 2 ] - tmp2 );
+            state[ i + 1 ] = tmp2;
+            C[ i + 1 ] += state[ 0 ] * tmp2;
+        }
+        state[ order ] = tmp1;
+        C[ order ] += state[ 0 ] * tmp1;
+    }
+
+    /* Copy correlations in SKP_float output format */
+    for( i = 0; i < order + 1; i++ ) {
+        corr[ i ] = ( SKP_float )C[ i ];
+    }
+}
--- /dev/null
+++ b/src_FLP/SKP_Silk_wrappers_FLP.c
@@ -1,0 +1,245 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main_FLP.h"
+
+/* Wrappers. Calls flp / fix code */
+
+/* Convert AR filter coefficients to NLSF parameters */
+void SKP_Silk_A2NLSF_FLP( 
+          SKP_float                 *pNLSF,             /* O    NLSF vector      [ LPC_order ]          */
+    const SKP_float                 *pAR,               /* I    LPC coefficients [ LPC_order ]          */
+    const SKP_int                   LPC_order           /* I    LPC order                               */
+)
+{
+    SKP_int   i;
+    SKP_int   NLSF_fix[  MAX_LPC_ORDER ];
+    SKP_int32 a_fix_Q16[ MAX_LPC_ORDER ];
+
+    for( i = 0; i < LPC_order; i++ ) {
+        a_fix_Q16[ i ] = SKP_float2int( pAR[ i ] * 65536.0f );
+    }
+    SKP_Silk_A2NLSF( NLSF_fix, a_fix_Q16, LPC_order );
+
+    for( i = 0; i < LPC_order; i++ ) {
+        pNLSF[ i ] = ( SKP_float )NLSF_fix[ i ] * ( 1.0f / 32768.0f );
+    }
+}
+
+/* Convert LSF parameters to AR prediction filter coefficients */
+void SKP_Silk_NLSF2A_stable_FLP( 
+          SKP_float                 *pAR,               /* O    LPC coefficients [ LPC_order ]          */
+    const SKP_float                 *pNLSF,             /* I    NLSF vector      [ LPC_order ]          */
+    const SKP_int                   LPC_order           /* I    LPC order                               */
+)
+{
+    SKP_int   i;
+    SKP_int   NLSF_fix[  MAX_LPC_ORDER ];
+    SKP_int16 a_fix_Q12[ MAX_LPC_ORDER ];
+
+    for( i = 0; i < LPC_order; i++ ) {
+        NLSF_fix[ i ] = ( SKP_int )SKP_CHECK_FIT16( SKP_float2int( pNLSF[ i ] * 32768.0f ) );
+    }
+
+    SKP_Silk_NLSF2A_stable( a_fix_Q12, NLSF_fix, LPC_order );
+
+    for( i = 0; i < LPC_order; i++ ) {
+        pAR[ i ] = ( SKP_float )a_fix_Q12[ i ] / 4096.0f;
+    }
+}
+
+
+/* LSF stabilizer, for a single input data vector */
+void SKP_Silk_NLSF_stabilize_FLP(
+          SKP_float                 *pNLSF,             /* I/O  (Un)stable NLSF vector [ LPC_order ]    */
+    const SKP_float                 *pNDelta_min,       /* I    Normalized delta min vector[LPC_order+1]*/
+    const SKP_int                   LPC_order           /* I    LPC order                               */
+)
+{
+    SKP_int   i;
+    SKP_int   NLSF_Q15[ MAX_LPC_ORDER ], ndelta_min_Q15[ MAX_LPC_ORDER + 1 ];
+
+    for( i = 0; i < LPC_order; i++ ) {
+        NLSF_Q15[       i ] = ( SKP_int )SKP_float2int( pNLSF[       i ] * 32768.0f );
+        ndelta_min_Q15[ i ] = ( SKP_int )SKP_float2int( pNDelta_min[ i ] * 32768.0f );
+    }
+    ndelta_min_Q15[ LPC_order ] = ( SKP_int )SKP_float2int( pNDelta_min[ LPC_order ] * 32768.0f );
+
+    /* NLSF stabilizer, for a single input data vector */
+    SKP_Silk_NLSF_stabilize( NLSF_Q15, ndelta_min_Q15, LPC_order );
+
+    for( i = 0; i < LPC_order; i++ ) {
+        pNLSF[ i ] = ( SKP_float )NLSF_Q15[ i ] * ( 1.0f / 32768.0f );
+    }
+}
+
+/* Interpolation function with fixed point rounding */
+void SKP_Silk_interpolate_wrapper_FLP(
+          SKP_float                 xi[],               /* O    Interpolated vector                     */
+    const SKP_float                 x0[],               /* I    First vector                            */
+    const SKP_float                 x1[],               /* I    Second vector                           */
+    const SKP_float                 ifact,              /* I    Interp. factor, weight on second vector */
+    const SKP_int                   d                   /* I    Number of parameters                    */
+)
+{
+    SKP_int x0_int[ MAX_LPC_ORDER ], x1_int[ MAX_LPC_ORDER ], xi_int[ MAX_LPC_ORDER ];
+    SKP_int ifact_Q2 = ( SKP_int )( ifact * 4.0f );
+    SKP_int i;
+
+    /* Convert input from flp to fix */
+    for( i = 0; i < d; i++ ) {
+        x0_int[ i ] = SKP_float2int( x0[ i ] * 32768.0f );
+        x1_int[ i ] = SKP_float2int( x1[ i ] * 32768.0f );
+    }
+
+    /* Interpolate two vectors */
+    SKP_Silk_interpolate( xi_int, x0_int, x1_int, ifact_Q2, d );
+    
+    /* Convert output from fix to flp */
+    for( i = 0; i < d; i++ ) {
+        xi[ i ] = ( SKP_float )xi_int[ i ] * ( 1.0f / 32768.0f );
+    }
+}
+
+/****************************************/
+/* Floating-point Silk VAD wrapper      */
+/****************************************/
+SKP_int SKP_Silk_VAD_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,             /* I/O  Encoder state FLP                       */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl,         /* I/O  Encoder control FLP                     */
+    const SKP_int16                 *pIn                /* I    Input signal                            */
+)
+{
+    SKP_int i, ret, SA_Q8, Tilt_Q15;
+    SKP_int Quality_Bands_Q15[ VAD_N_BANDS ];
+
+    ret = SKP_Silk_VAD_GetSA_Q8( &psEnc->sCmn.sVAD, &SA_Q8, Quality_Bands_Q15, &Tilt_Q15,
+        pIn, psEnc->sCmn.frame_length, psEnc->sCmn.fs_kHz );
+
+    psEnc->speech_activity = ( SKP_float )SA_Q8 / 256.0f;
+    for( i = 0; i < VAD_N_BANDS; i++ ) {
+        psEncCtrl->input_quality_bands[ i ] = ( SKP_float )Quality_Bands_Q15[ i ] / 32768.0f;
+    }
+    psEncCtrl->input_tilt = ( SKP_float )Tilt_Q15 / 32768.0f;
+
+    return ret;
+}
+
+/****************************************/
+/* Floating-point Silk NSQ wrapper      */
+/****************************************/
+void SKP_Silk_NSQ_wrapper_FLP(
+    SKP_Silk_encoder_state_FLP      *psEnc,         /* I/O  Encoder state FLP                           */
+    SKP_Silk_encoder_control_FLP    *psEncCtrl,     /* I/O  Encoder control FLP                         */
+    const SKP_float                 x[],            /* I    Prefiltered input signal                    */
+          SKP_int8                  q[],            /* O    Quantized pulse signal                      */
+    const SKP_int                   useLBRR         /* I    LBRR flag                                   */
+)
+{
+    SKP_int     i, j;
+    SKP_float   tmp_float;
+    SKP_int16   x_16[ MAX_FRAME_LENGTH ];
+    /* Prediction and coding parameters */
+    SKP_int32   Gains_Q16[ MAX_NB_SUBFR ];
+    SKP_array_of_int16_4_byte_aligned( PredCoef_Q12[ 2 ], MAX_LPC_ORDER );
+    SKP_int16   LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ];
+    SKP_int     LTP_scale_Q14;
+
+    /* Noise shaping parameters */
+    /* Testing */
+    SKP_int16   AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ];
+    SKP_int32   LF_shp_Q14[ MAX_NB_SUBFR ];         /* Packs two int16 coefficients per int32 value             */
+    SKP_int     Lambda_Q10;
+    SKP_int     Tilt_Q14[ MAX_NB_SUBFR ];
+    SKP_int     HarmShapeGain_Q14[ MAX_NB_SUBFR ];
+
+    /* Convert control struct to fix control struct */
+    /* Noise shape parameters */
+    for( i = 0; i < MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER; i++ ) {
+        AR2_Q13[ i ] = (SKP_int16)SKP_SAT16( SKP_float2int( psEncCtrl->AR2[ i ] * 8192.0f ) );
+    }
+
+    for( i = 0; i < MAX_NB_SUBFR; i++ ) {
+        LF_shp_Q14[ i ] =   SKP_LSHIFT32( SKP_float2int( psEncCtrl->LF_AR_shp[ i ]     * 16384.0f ), 16 ) |
+                              (SKP_uint16)SKP_float2int( psEncCtrl->LF_MA_shp[ i ]     * 16384.0f );
+        Tilt_Q14[ i ]   =        (SKP_int)SKP_float2int( psEncCtrl->Tilt[ i ]          * 16384.0f );
+        HarmShapeGain_Q14[ i ] = (SKP_int)SKP_float2int( psEncCtrl->HarmShapeGain[ i ] * 16384.0f );    
+    }
+    Lambda_Q10 = ( SKP_int )SKP_float2int( psEncCtrl->Lambda * 1024.0f );
+
+    /* prediction and coding parameters */
+    for( i = 0; i < MAX_NB_SUBFR * LTP_ORDER; i++ ) {
+        LTPCoef_Q14[ i ] = ( SKP_int16 )SKP_float2int( psEncCtrl->LTPCoef[ i ] * 16384.0f );
+    }
+
+    for( j = 0; j < MAX_NB_SUBFR >> 1; j++ ) {
+        for( i = 0; i < MAX_LPC_ORDER; i++ ) {
+            PredCoef_Q12[ j ][ i ] = ( SKP_int16 )SKP_float2int( psEncCtrl->PredCoef[ j ][ i ] * 4096.0f );
+        }
+    }
+
+    for( i = 0; i < MAX_NB_SUBFR; i++ ) {
+        tmp_float = SKP_LIMIT( ( psEncCtrl->Gains[ i ] * 65536.0f ), 2147483000.0f, -2147483000.0f );
+        Gains_Q16[ i ] = SKP_float2int( tmp_float );
+        if( psEncCtrl->Gains[ i ] > 0.0f ) {
+            SKP_assert( tmp_float >= 0.0f );
+            SKP_assert( Gains_Q16[ i ] >= 0 );
+        }
+    }
+
+    if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) {
+        LTP_scale_Q14 = SKP_Silk_LTPScales_table_Q14[ psEncCtrl->sCmn.LTP_scaleIndex ];
+    } else {
+        LTP_scale_Q14 = 0;
+    }
+
+    /* Convert input to fix */
+    SKP_float2short_array( x_16, x, psEnc->sCmn.frame_length );
+
+    /* Call NSQ */
+    if( useLBRR ) {
+        if( psEnc->sCmn.nStatesDelayedDecision > 1 ) {
+            SKP_Silk_NSQ_del_dec( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sNSQ_LBRR, 
+                x_16, q, psEncCtrl->sCmn.NLSFInterpCoef_Q2, PredCoef_Q12[ 0 ], LTPCoef_Q14, AR2_Q13, 
+                HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, Lambda_Q10, LTP_scale_Q14 );
+        } else {
+            SKP_Silk_NSQ( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sNSQ_LBRR, 
+                x_16, q, psEncCtrl->sCmn.NLSFInterpCoef_Q2, PredCoef_Q12[ 0 ], LTPCoef_Q14, AR2_Q13, 
+                HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, Lambda_Q10, LTP_scale_Q14 );
+        }
+    } else {
+        if( psEnc->sCmn.nStatesDelayedDecision > 1 ) {
+            SKP_Silk_NSQ_del_dec( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sNSQ, 
+                x_16, q, psEncCtrl->sCmn.NLSFInterpCoef_Q2, PredCoef_Q12[ 0 ], LTPCoef_Q14, AR2_Q13, 
+                HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, Lambda_Q10, LTP_scale_Q14 );
+        } else {
+            SKP_Silk_NSQ( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sNSQ, 
+                x_16, q, psEncCtrl->sCmn.NLSFInterpCoef_Q2, PredCoef_Q12[ 0 ], LTPCoef_Q14, AR2_Q13, 
+                HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, Lambda_Q10, LTP_scale_Q14 );
+        }
+    }
+}
--- /dev/null
+++ b/src_FLP/Silk_FLP.vcproj
@@ -1,0 +1,328 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="Silk_FLP"
+	ProjectGUID="{56B91D01-9150-4BBF-AFA1-5B68AB991B76}"
+	RootNamespace="Silk"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				FavorSizeOrSpeed="0"
+				AdditionalIncludeDirectories="../../../celt-0.8.0/libcelt;../interface;../src_common;../src_SigProc_FLP;../src_SigProc_FIX"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				FloatingPointModel="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="SKP_Silk_FLP_Win32_debug.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="0"
+				FavorSizeOrSpeed="0"
+				AdditionalIncludeDirectories="../../../celt-0.8.0/libcelt;../interface;../src_common;../src_SigProc_FLP;../src_SigProc_FIX"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB;HAVE_CONFIG_H"
+				GeneratePreprocessedFile="0"
+				RuntimeLibrary="0"
+				FloatingPointModel="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="SKP_Silk_FLP_Win32_mt.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine=""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\SKP_Silk_apply_sine_window_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_control_codec_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_corrMatrix_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_encode_frame_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_find_LPC_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_find_LTP_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_find_pitch_lags_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_find_pred_coefs_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_HP_variable_cutoff_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_init_encoder_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_LPC_analysis_filter_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_LTP_analysis_filter_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_LTP_scale_ctrl_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NLSF_MSVQ_decode_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NLSF_MSVQ_encode_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NLSF_VQ_rate_distortion_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NLSF_VQ_sum_error_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_noise_shape_analysis_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_prefilter_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_process_gains_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_process_NLSFs_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_quant_LTP_gains_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_regularize_correlations_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_residual_energy_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_solve_LS_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB0_10_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB0_16_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB1_10_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB1_16_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_other_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_VQ_nearest_neighbor_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_warped_autocorrelation_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_wrappers_FLP.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath=".\SKP_Silk_assembler_FLP.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_define_FLP.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_main_FLP.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_perceptual_parameters_FLP.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_structs_FLP.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_FLP.h"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_A2NLSF.c
@@ -1,0 +1,279 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/* Conversion between prediction filter coefficients and NLSFs  */
+/* Requires the order to be an even number                      */
+/* A piecewise linear approximation maps LSF <-> cos(LSF)       */
+/* Therefore the result is not accurate NLSFs, but the two      */
+/* function are accurate inverses of each other                 */
+
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Number of binary divisions, when not in low complexity mode */
+#define BIN_DIV_STEPS_A2NLSF_FIX      2 /* must be no higher than 16 - log2( LSF_COS_TAB_SZ_FIX ) */
+#define QPoly                        16
+#define MAX_ITERATIONS_A2NLSF_FIX    50
+
+/* Flag for using 2x as many cosine sampling points, reduces the risk of missing a root */
+#define OVERSAMPLE_COSINE_TABLE       0
+
+/* Helper function for A2NLSF(..)                    */
+/* Transforms polynomials from cos(n*f) to cos(f)^n  */
+SKP_INLINE void SKP_Silk_A2NLSF_trans_poly(
+    SKP_int32        *p,    /* I/O    Polynomial                                */
+    const SKP_int    dd     /* I      Polynomial order (= filter order / 2 )    */
+)
+{
+    SKP_int k, n;
+    
+    for( k = 2; k <= dd; k++ ) {
+        for( n = dd; n > k; n-- ) {
+            p[ n - 2 ] -= p[ n ];
+        }
+        p[ k - 2 ] -= SKP_LSHIFT( p[ k ], 1 );
+    }
+}    
+/* Helper function for A2NLSF(..)                    */
+/* Polynomial evaluation                             */
+SKP_INLINE SKP_int32 SKP_Silk_A2NLSF_eval_poly(    /* return the polynomial evaluation, in QPoly */
+    SKP_int32        *p,    /* I    Polynomial, QPoly        */
+    const SKP_int32    x,   /* I    Evaluation point, Q12    */
+    const SKP_int    dd     /* I    Order                    */
+)
+{
+    SKP_int   n;
+    SKP_int32 x_Q16, y32;
+
+    y32 = p[ dd ];                                    /* QPoly */
+    x_Q16 = SKP_LSHIFT( x, 4 );
+    for( n = dd - 1; n >= 0; n-- ) {
+        y32 = SKP_SMLAWW( p[ n ], y32, x_Q16 );       /* QPoly */
+    }
+    return y32;
+}
+
+SKP_INLINE void SKP_Silk_A2NLSF_init(
+     const SKP_int32    *a_Q16,
+     SKP_int32            *P, 
+     SKP_int32            *Q, 
+     const SKP_int        dd
+) 
+{
+    SKP_int k;
+
+    /* Convert filter coefs to even and odd polynomials */
+    P[dd] = SKP_LSHIFT( 1, QPoly );
+    Q[dd] = SKP_LSHIFT( 1, QPoly );
+    for( k = 0; k < dd; k++ ) {
+#if( QPoly < 16 )
+        P[ k ] = SKP_RSHIFT_ROUND( -a_Q16[ dd - k - 1 ] - a_Q16[ dd + k ], 16 - QPoly ); /* QPoly */
+        Q[ k ] = SKP_RSHIFT_ROUND( -a_Q16[ dd - k - 1 ] + a_Q16[ dd + k ], 16 - QPoly ); /* QPoly */
+#elif( Qpoly == 16 )
+        P[ k ] = -a_Q16[ dd - k - 1 ] - a_Q16[ dd + k ]; // QPoly
+        Q[ k ] = -a_Q16[ dd - k - 1 ] + a_Q16[ dd + k ]; // QPoly
+#else
+        P[ k ] = SKP_LSHIFT( -a_Q16[ dd - k - 1 ] - a_Q16[ dd + k ], QPoly - 16 ); /* QPoly */
+        Q[ k ] = SKP_LSHIFT( -a_Q16[ dd - k - 1 ] + a_Q16[ dd + k ], QPoly - 16 ); /* QPoly */
+#endif
+    }
+
+    /* Divide out zeros as we have that for even filter orders, */
+    /* z =  1 is always a root in Q, and                        */
+    /* z = -1 is always a root in P                             */
+    for( k = dd; k > 0; k-- ) {
+        P[ k - 1 ] -= P[ k ]; 
+        Q[ k - 1 ] += Q[ k ]; 
+    }
+
+    /* Transform polynomials from cos(n*f) to cos(f)^n */
+    SKP_Silk_A2NLSF_trans_poly( P, dd );
+    SKP_Silk_A2NLSF_trans_poly( Q, dd );
+}
+
+/* Compute Normalized Line Spectral Frequencies (NLSFs) from whitening filter coefficients        */
+/* If not all roots are found, the a_Q16 coefficients are bandwidth expanded until convergence.    */
+void SKP_Silk_A2NLSF(
+    SKP_int          *NLSF,                 /* O    Normalized Line Spectral Frequencies, Q15 (0 - (2^15-1)), [d]    */
+    SKP_int32        *a_Q16,                /* I/O  Monic whitening filter coefficients in Q16 [d]                   */
+    const SKP_int    d                      /* I    Filter order (must be even)                                      */
+)
+{
+    SKP_int      i, k, m, dd, root_ix, ffrac;
+    SKP_int32 xlo, xhi, xmid;
+    SKP_int32 ylo, yhi, ymid;
+    SKP_int32 nom, den;
+    SKP_int32 P[ SKP_Silk_MAX_ORDER_LPC / 2 + 1 ];
+    SKP_int32 Q[ SKP_Silk_MAX_ORDER_LPC / 2 + 1 ];
+    SKP_int32 *PQ[ 2 ];
+    SKP_int32 *p;
+
+    /* Store pointers to array */
+    PQ[ 0 ] = P;
+    PQ[ 1 ] = Q;
+
+    dd = SKP_RSHIFT( d, 1 );
+
+    SKP_Silk_A2NLSF_init( a_Q16, P, Q, dd );
+
+    /* Find roots, alternating between P and Q */
+    p = P;    /* Pointer to polynomial */
+    
+    xlo = SKP_Silk_LSFCosTab_FIX_Q12[ 0 ]; // Q12
+    ylo = SKP_Silk_A2NLSF_eval_poly( p, xlo, dd );
+
+    if( ylo < 0 ) {
+        /* Set the first NLSF to zero and move on to the next */
+        NLSF[ 0 ] = 0;
+        p = Q;                      /* Pointer to polynomial */
+        ylo = SKP_Silk_A2NLSF_eval_poly( p, xlo, dd );
+        root_ix = 1;                /* Index of current root */
+    } else {
+        root_ix = 0;                /* Index of current root */
+    }
+    k = 1;                          /* Loop counter */
+    i = 0;                          /* Counter for bandwidth expansions applied */
+    while( 1 ) {
+        /* Evaluate polynomial */
+#if OVERSAMPLE_COSINE_TABLE
+        xhi = SKP_Silk_LSFCosTab_FIX_Q12[   k       >> 1 ] +
+          ( ( SKP_Silk_LSFCosTab_FIX_Q12[ ( k + 1 ) >> 1 ] - 
+              SKP_Silk_LSFCosTab_FIX_Q12[   k       >> 1 ] ) >> 1 );    /* Q12 */
+#else
+        xhi = SKP_Silk_LSFCosTab_FIX_Q12[ k ]; /* Q12 */
+#endif
+        yhi = SKP_Silk_A2NLSF_eval_poly( p, xhi, dd );
+        
+        /* Detect zero crossing */
+        if( ( ylo <= 0 && yhi >= 0 ) || ( ylo >= 0 && yhi <= 0 ) ) {
+            /* Binary division */
+#if OVERSAMPLE_COSINE_TABLE
+            ffrac = -128;
+#else
+            ffrac = -256;
+#endif
+            for( m = 0; m < BIN_DIV_STEPS_A2NLSF_FIX; m++ ) {
+                /* Evaluate polynomial */
+                xmid = SKP_RSHIFT_ROUND( xlo + xhi, 1 );
+                ymid = SKP_Silk_A2NLSF_eval_poly( p, xmid, dd );
+
+                /* Detect zero crossing */
+                if( ( ylo <= 0 && ymid >= 0 ) || ( ylo >= 0 && ymid <= 0 ) ) {
+                    /* Reduce frequency */
+                    xhi = xmid;
+                    yhi = ymid;
+                } else {
+                    /* Increase frequency */
+                    xlo = xmid;
+                    ylo = ymid;
+#if OVERSAMPLE_COSINE_TABLE
+                    ffrac = SKP_ADD_RSHIFT( ffrac,  64, m );
+#else
+                    ffrac = SKP_ADD_RSHIFT( ffrac, 128, m );
+#endif
+                }
+            }
+            
+            /* Interpolate */
+            if( SKP_abs( ylo ) < 65536 ) {
+                /* Avoid dividing by zero */
+                den = ylo - yhi;
+                nom = SKP_LSHIFT( ylo, 8 - BIN_DIV_STEPS_A2NLSF_FIX ) + SKP_RSHIFT( den, 1 );
+                if( den != 0 ) {
+                    ffrac += SKP_DIV32( nom, den );
+                }
+            } else {
+                /* No risk of dividing by zero because abs(ylo - yhi) >= abs(ylo) >= 65536 */
+                ffrac += SKP_DIV32( ylo, SKP_RSHIFT( ylo - yhi, 8 - BIN_DIV_STEPS_A2NLSF_FIX ) );
+            }
+#if OVERSAMPLE_COSINE_TABLE
+            NLSF[ root_ix ] = (SKP_int)SKP_min_32( SKP_LSHIFT( (SKP_int32)k, 7 ) + ffrac, SKP_int16_MAX ); 
+#else
+            NLSF[ root_ix ] = (SKP_int)SKP_min_32( SKP_LSHIFT( (SKP_int32)k, 8 ) + ffrac, SKP_int16_MAX ); 
+#endif
+
+            SKP_assert( NLSF[ root_ix ] >=     0 );
+            SKP_assert( NLSF[ root_ix ] <= 32767 );
+
+            root_ix++;        /* Next root */
+            if( root_ix >= d ) {
+                /* Found all roots */
+                break;
+            }
+            /* Alternate pointer to polynomial */
+            p = PQ[ root_ix & 1 ];
+            
+            /* Evaluate polynomial */
+#if OVERSAMPLE_COSINE_TABLE
+            xlo = SKP_Silk_LSFCosTab_FIX_Q12[ ( k - 1 ) >> 1 ] +
+              ( ( SKP_Silk_LSFCosTab_FIX_Q12[   k       >> 1 ] - 
+                  SKP_Silk_LSFCosTab_FIX_Q12[ ( k - 1 ) >> 1 ] ) >> 1 ); // Q12
+#else
+            xlo = SKP_Silk_LSFCosTab_FIX_Q12[ k - 1 ]; // Q12
+#endif
+            ylo = SKP_LSHIFT( 1 - ( root_ix & 2 ), 12 );
+        } else {
+            /* Increment loop counter */
+            k++;
+            xlo    = xhi;
+            ylo    = yhi;
+            
+#if OVERSAMPLE_COSINE_TABLE
+            if( k > 2 * LSF_COS_TAB_SZ_FIX ) {
+#else
+            if( k > LSF_COS_TAB_SZ_FIX ) {
+#endif
+                i++;
+                if( i > MAX_ITERATIONS_A2NLSF_FIX ) {
+                    /* Set NLSFs to white spectrum and exit */
+                    NLSF[ 0 ] = SKP_DIV32_16( 1 << 15, d + 1 );
+                    for( k = 1; k < d; k++ ) {
+                        NLSF[ k ] = SKP_SMULBB( k + 1, NLSF[ 0 ] );
+                    }
+                    return;
+                }
+
+                /* Error: Apply progressively more bandwidth expansion and run again */
+                SKP_Silk_bwexpander_32( a_Q16, d, 65536 - SKP_SMULBB( 66, i ) ); // 66_Q16 = 0.001
+
+                SKP_Silk_A2NLSF_init( a_Q16, P, Q, dd );
+                p = P;                            /* Pointer to polynomial */
+                xlo = SKP_Silk_LSFCosTab_FIX_Q12[ 0 ]; // Q12
+                ylo = SKP_Silk_A2NLSF_eval_poly( p, xlo, dd );
+                if( ylo < 0 ) {
+                    /* Set the first NLSF to zero and move on to the next */
+                    NLSF[ 0 ] = 0;
+                    p = Q;                        /* Pointer to polynomial */
+                    ylo = SKP_Silk_A2NLSF_eval_poly( p, xlo, dd );
+                    root_ix = 1;                /* Index of current root */
+                } else {
+                    root_ix = 0;                /* Index of current root */
+                }
+                k = 1;                            /* Reset loop counter */
+            }
+        }
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_Inlines.h
@@ -1,0 +1,275 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*! \file SKP_Silk_Inlines.h
+ *  \brief SKP_Silk_Inlines.h defines inline signal processing functions.
+ */
+
+#ifndef _SKP_SILK_FIX_INLINES_H_
+#define _SKP_SILK_FIX_INLINES_H_
+
+#ifdef  __cplusplus
+extern "C"
+{
+#endif
+
+/* count leading zeros of SKP_int64 */
+SKP_INLINE SKP_int32 SKP_Silk_CLZ64(SKP_int64 in)
+{
+    SKP_int32 in_upper;
+
+    in_upper = (SKP_int32)SKP_RSHIFT64(in, 32);
+    if (in_upper == 0) {
+        /* Search in the lower 32 bits */
+        return 32 + SKP_Silk_CLZ32( (SKP_int32) in );
+    } else {
+        /* Search in the upper 32 bits */
+        return SKP_Silk_CLZ32( in_upper );
+    }
+}
+
+/* get number of leading zeros and fractional part (the bits right after the leading one */
+SKP_INLINE void SKP_Silk_CLZ_FRAC(SKP_int32 in,            /* I: input */
+                                    SKP_int32 *lz,           /* O: number of leading zeros */
+                                    SKP_int32 *frac_Q7)      /* O: the 7 bits right after the leading one */
+{
+    SKP_int32 lzeros = SKP_Silk_CLZ32(in);
+
+    * lz = lzeros;
+    * frac_Q7 = SKP_ROR32(in, 24 - lzeros) & 0x7f;
+}
+
+/* Approximation of square root                                          */
+/* Accuracy: < +/- 10%  for output values > 15                           */
+/*           < +/- 2.5% for output values > 120                          */
+SKP_INLINE SKP_int32 SKP_Silk_SQRT_APPROX(SKP_int32 x)
+{
+    SKP_int32 y, lz, frac_Q7;
+
+    if( x <= 0 ) {
+        return 0;
+    }
+
+    SKP_Silk_CLZ_FRAC(x, &lz, &frac_Q7);
+
+    if( lz & 1 ) {
+        y = 32768;
+    } else {
+        y = 46214;        /* 46214 = sqrt(2) * 32768 */
+    }
+
+    /* get scaling right */
+    y >>= SKP_RSHIFT(lz, 1);
+
+    /* increment using fractional part of input */
+    y = SKP_SMLAWB(y, y, SKP_SMULBB(213, frac_Q7));
+
+    return y;
+}
+
+/* returns the number of left shifts before overflow for a 16 bit number (ITU definition with norm(0)=0) */
+SKP_INLINE SKP_int32 SKP_Silk_norm16(SKP_int16 a) {
+
+  SKP_int32 a32;
+
+  /* if ((a == 0) || (a == SKP_int16_MIN)) return(0); */
+  if ((a << 1) == 0) return(0);
+
+  a32 = a;
+  /* if (a32 < 0) a32 = -a32 - 1; */
+  a32 ^= SKP_RSHIFT(a32, 31);
+
+  return SKP_Silk_CLZ32(a32) - 17;
+}
+
+/* returns the number of left shifts before overflow for a 32 bit number (ITU definition with norm(0)=0) */
+SKP_INLINE SKP_int32 SKP_Silk_norm32(SKP_int32 a) {
+  
+  /* if ((a == 0) || (a == SKP_int32_MIN)) return(0); */
+  if ((a << 1) == 0) return(0);
+
+  /* if (a < 0) a = -a - 1; */
+  a ^= SKP_RSHIFT(a, 31);
+
+  return SKP_Silk_CLZ32(a) - 1;
+}
+
+/* Divide two int32 values and return result as int32 in a given Q-domain */
+SKP_INLINE SKP_int32 SKP_DIV32_varQ(    /* O    returns a good approximation of "(a32 << Qres) / b32" */
+    const SKP_int32     a32,            /* I    numerator (Q0)                  */
+    const SKP_int32     b32,            /* I    denominator (Q0)                */
+    const SKP_int       Qres            /* I    Q-domain of result (>= 0)       */
+)
+{
+    SKP_int   a_headrm, b_headrm, lshift;
+    SKP_int32 b32_inv, a32_nrm, b32_nrm, result;
+
+    SKP_assert( b32 != 0 );
+    SKP_assert( Qres >= 0 );
+
+    /* Compute number of bits head room and normalize inputs */
+    a_headrm = SKP_Silk_CLZ32( SKP_abs(a32) ) - 1;
+    a32_nrm = SKP_LSHIFT(a32, a_headrm);                                    /* Q: a_headrm                    */
+    b_headrm = SKP_Silk_CLZ32( SKP_abs(b32) ) - 1;
+    b32_nrm = SKP_LSHIFT(b32, b_headrm);                                    /* Q: b_headrm                    */
+
+    /* Inverse of b32, with 14 bits of precision */
+    b32_inv = SKP_DIV32_16( SKP_int32_MAX >> 2, SKP_RSHIFT(b32_nrm, 16) );  /* Q: 29 + 16 - b_headrm        */
+
+    /* First approximation */
+    result = SKP_SMULWB(a32_nrm, b32_inv);                                  /* Q: 29 + a_headrm - b_headrm    */
+
+    /* Compute residual by subtracting product of denominator and first approximation */
+    a32_nrm -= SKP_LSHIFT_ovflw( SKP_SMMUL(b32_nrm, result), 3 );           /* Q: a_headrm                    */
+
+    /* Refinement */
+    result = SKP_SMLAWB(result, a32_nrm, b32_inv);                          /* Q: 29 + a_headrm - b_headrm    */
+
+    /* Convert to Qres domain */
+    lshift = 29 + a_headrm - b_headrm - Qres;
+    if( lshift <= 0 ) {
+        return SKP_LSHIFT_SAT32(result, -lshift);
+    } else {
+        if( lshift < 32){
+            return SKP_RSHIFT(result, lshift);
+        } else {
+            /* Avoid undefined result */
+            return 0;
+        }
+    }
+}
+
+/* Invert int32 value and return result as int32 in a given Q-domain */
+SKP_INLINE SKP_int32 SKP_INVERSE32_varQ(    /* O    returns a good approximation of "(1 << Qres) / b32" */
+    const SKP_int32     b32,                /* I    denominator (Q0)                */
+    const SKP_int       Qres                /* I    Q-domain of result (> 0)        */
+)
+{
+    SKP_int   b_headrm, lshift;
+    SKP_int32 b32_inv, b32_nrm, err_Q32, result;
+
+    SKP_assert( b32 != 0 );
+    SKP_assert( Qres > 0 );
+
+    /* Compute number of bits head room and normalize input */
+    b_headrm = SKP_Silk_CLZ32( SKP_abs(b32) ) - 1;
+    b32_nrm = SKP_LSHIFT(b32, b_headrm);                                    /* Q: b_headrm                */
+
+    /* Inverse of b32, with 14 bits of precision */
+    b32_inv = SKP_DIV32_16( SKP_int32_MAX >> 2, SKP_RSHIFT(b32_nrm, 16) );  /* Q: 29 + 16 - b_headrm    */
+
+    /* First approximation */
+    result = SKP_LSHIFT(b32_inv, 16);                                       /* Q: 61 - b_headrm            */
+
+    /* Compute residual by subtracting product of denominator and first approximation from one */
+    err_Q32 = SKP_LSHIFT_ovflw( -SKP_SMULWB(b32_nrm, b32_inv), 3 );         /* Q32                        */
+
+    /* Refinement */
+    result = SKP_SMLAWW(result, err_Q32, b32_inv);                          /* Q: 61 - b_headrm            */
+
+    /* Convert to Qres domain */
+    lshift = 61 - b_headrm - Qres;
+    if( lshift <= 0 ) {
+        return SKP_LSHIFT_SAT32(result, -lshift);
+    } else {
+        if( lshift < 32){
+            return SKP_RSHIFT(result, lshift);
+        }else{
+            /* Avoid undefined result */
+            return 0;
+        }
+    }
+}
+
+#define SKP_SIN_APPROX_CONST0       (1073735400)
+#define SKP_SIN_APPROX_CONST1        (-82778932)
+#define SKP_SIN_APPROX_CONST2          (1059577)
+#define SKP_SIN_APPROX_CONST3            (-5013)
+
+/* Sine approximation; an input of 65536 corresponds to 2 * pi */
+/* Uses polynomial expansion of the input to the power 0, 2, 4 and 6 */
+/* The relative error is below 1e-5 */
+SKP_INLINE SKP_int32 SKP_Silk_SIN_APPROX_Q24(        /* O    returns approximately 2^24 * sin(x * 2 * pi / 65536) */
+    SKP_int32        x
+)
+{
+    SKP_int y_Q30;
+
+    /* Keep only bottom 16 bits (the function repeats itself with period 65536) */
+    x &= 65535;
+
+    /* Split range in four quadrants */
+    if( x <= 32768 ) {
+        if( x < 16384 ) {
+            /* Return cos(pi/2 - x) */
+            x = 16384 - x;
+        } else {
+            /* Return cos(x - pi/2) */
+            x -= 16384;
+        }
+        if( x < 1100 ) {
+            /* Special case: high accuracy */
+            return SKP_SMLAWB( 1 << 24, SKP_MUL( x, x ), -5053 );
+        }
+        x = SKP_SMULWB( SKP_LSHIFT( x, 8 ), x );        /* contains x^2 in Q20 */
+        y_Q30 = SKP_SMLAWB( SKP_SIN_APPROX_CONST2, x, SKP_SIN_APPROX_CONST3 );
+        y_Q30 = SKP_SMLAWW( SKP_SIN_APPROX_CONST1, x, y_Q30 );
+        y_Q30 = SKP_SMLAWW( SKP_SIN_APPROX_CONST0 + 66, x, y_Q30 );
+    } else {
+        if( x < 49152 ) {
+            /* Return -cos(3*pi/2 - x) */
+            x = 49152 - x;
+        } else {
+            /* Return -cos(x - 3*pi/2) */
+            x -= 49152;
+        }
+        if( x < 1100 ) {
+            /* Special case: high accuracy */
+            return SKP_SMLAWB( -1 << 24, SKP_MUL( x, x ), 5053 );
+        }
+        x = SKP_SMULWB( SKP_LSHIFT( x, 8 ), x );        /* contains x^2 in Q20 */
+        y_Q30 = SKP_SMLAWB( -SKP_SIN_APPROX_CONST2, x, -SKP_SIN_APPROX_CONST3 );
+        y_Q30 = SKP_SMLAWW( -SKP_SIN_APPROX_CONST1, x, y_Q30 );
+        y_Q30 = SKP_SMLAWW( -SKP_SIN_APPROX_CONST0, x, y_Q30 );
+    }
+    return SKP_RSHIFT_ROUND( y_Q30, 6 );
+}
+
+/* Cosine approximation; an input of 65536 corresponds to 2 * pi */
+/* The relative error is below 1e-5 */
+SKP_INLINE SKP_int32 SKP_Silk_COS_APPROX_Q24(        /* O    returns approximately 2^24 * cos(x * 2 * pi / 65536) */
+    SKP_int32        x
+)
+{
+    return SKP_Silk_SIN_APPROX_Q24( x + 16384 );
+}
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif //_SKP_SILK_FIX_INLINES_H_
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_LPC_inv_pred_gain.c
@@ -1,0 +1,173 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_LPC_inverse_pred_gain.c                                   *
+ *                                                                      *
+ * Compute inverse of LPC prediction gain, and                          *
+ * test if LPC coefficients are stable (all poles within unit circle)   *
+ *                                                                      *
+ * Copyright 2008 (c), Skype Limited                                    *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+#define QA          16
+#define A_LIMIT     SKP_FIX_CONST( 0.99975, QA )
+
+/* Compute inverse of LPC prediction gain, and                          */
+/* test if LPC coefficients are stable (all poles within unit circle)   */
+static SKP_int LPC_inverse_pred_gain_QA(        /* O:   Returns 1 if unstable, otherwise 0          */
+    SKP_int32           *invGain_Q30,           /* O:   Inverse prediction gain, Q30 energy domain  */
+    SKP_int32           A_QA[ 2 ][ SKP_Silk_MAX_ORDER_LPC ],         
+                                                /* I:   Prediction coefficients                     */
+    const SKP_int       order                   /* I:   Prediction order                            */
+)
+{
+    SKP_int   k, n, headrm;
+    SKP_int32 rc_Q31, rc_mult1_Q30, rc_mult2_Q16, tmp_QA;
+    SKP_int32 *Aold_QA, *Anew_QA;
+
+    Anew_QA = A_QA[ order & 1 ];
+
+    *invGain_Q30 = ( 1 << 30 );
+    for( k = order - 1; k > 0; k-- ) {
+        /* Check for stability */
+        if( ( Anew_QA[ k ] > A_LIMIT ) || ( Anew_QA[ k ] < -A_LIMIT ) ) {
+            return 1;
+        }
+
+        /* Set RC equal to negated AR coef */
+        rc_Q31 = -SKP_LSHIFT( Anew_QA[ k ], 31 - QA );
+        
+        /* rc_mult1_Q30 range: [ 1 : 2^30-1 ] */
+        rc_mult1_Q30 = ( SKP_int32_MAX >> 1 ) - SKP_SMMUL( rc_Q31, rc_Q31 );
+        SKP_assert( rc_mult1_Q30 > ( 1 << 15 ) );                   /* reduce A_LIMIT if fails */
+        SKP_assert( rc_mult1_Q30 < ( 1 << 30 ) );
+
+        /* rc_mult2_Q16 range: [ 2^16 : SKP_int32_MAX ] */
+        rc_mult2_Q16 = SKP_INVERSE32_varQ( rc_mult1_Q30, 46 );      /* 16 = 46 - 30 */
+
+        /* Update inverse gain */
+        /* invGain_Q30 range: [ 0 : 2^30 ] */
+        *invGain_Q30 = SKP_LSHIFT( SKP_SMMUL( *invGain_Q30, rc_mult1_Q30 ), 2 );
+        SKP_assert( *invGain_Q30 >= 0           );
+        SKP_assert( *invGain_Q30 <= ( 1 << 30 ) );
+
+        /* Swap pointers */
+        Aold_QA = Anew_QA;
+        Anew_QA = A_QA[ k & 1 ];
+        
+        /* Update AR coefficient */
+        headrm = SKP_Silk_CLZ32( rc_mult2_Q16 ) - 1;
+        rc_mult2_Q16 = SKP_LSHIFT( rc_mult2_Q16, headrm );          /* Q: 16 + headrm */
+        for( n = 0; n < k; n++ ) {
+            tmp_QA = Aold_QA[ n ] - SKP_LSHIFT( SKP_SMMUL( Aold_QA[ k - n - 1 ], rc_Q31 ), 1 );
+            Anew_QA[ n ] = SKP_LSHIFT( SKP_SMMUL( tmp_QA, rc_mult2_Q16 ), 16 - headrm );
+        }
+    }
+
+    /* Check for stability */
+    if( ( Anew_QA[ 0 ] > A_LIMIT ) || ( Anew_QA[ 0 ] < -A_LIMIT ) ) {
+        return 1;
+    }
+
+    /* Set RC equal to negated AR coef */
+    rc_Q31 = -SKP_LSHIFT( Anew_QA[ 0 ], 31 - QA );
+
+    /* Range: [ 1 : 2^30 ] */
+    rc_mult1_Q30 = ( SKP_int32_MAX >> 1 ) - SKP_SMMUL( rc_Q31, rc_Q31 );
+
+    /* Update inverse gain */
+    /* Range: [ 0 : 2^30 ] */
+    *invGain_Q30 = SKP_LSHIFT( SKP_SMMUL( *invGain_Q30, rc_mult1_Q30 ), 2 );
+    SKP_assert( *invGain_Q30 >= 0     );
+    SKP_assert( *invGain_Q30 <= 1<<30 );
+
+    return 0;
+}
+
+/* For input in Q12 domain */
+SKP_int SKP_Silk_LPC_inverse_pred_gain(       /* O:   Returns 1 if unstable, otherwise 0          */
+    SKP_int32           *invGain_Q30,           /* O:   Inverse prediction gain, Q30 energy domain  */
+    const SKP_int16     *A_Q12,                 /* I:   Prediction coefficients, Q12 [order]        */
+    const SKP_int       order                   /* I:   Prediction order                            */
+)
+{
+    SKP_int   k;
+    SKP_int32 Atmp_QA[ 2 ][ SKP_Silk_MAX_ORDER_LPC ];
+    SKP_int32 *Anew_QA;
+
+    Anew_QA = Atmp_QA[ order & 1 ];
+
+    /* Increase Q domain of the AR coefficients */
+    for( k = 0; k < order; k++ ) {
+        Anew_QA[ k ] = SKP_LSHIFT( (SKP_int32)A_Q12[ k ], QA - 12 );
+    }
+
+    return LPC_inverse_pred_gain_QA( invGain_Q30, Atmp_QA, order );
+}
+
+/* For input in Q13 domain */
+SKP_int SKP_Silk_LPC_inverse_pred_gain_Q13(   /* O:   Returns 1 if unstable, otherwise 0          */
+    SKP_int32           *invGain_Q30,           /* O:   Inverse prediction gain, Q30 energy domain  */
+    const SKP_int16     *A_Q13,                 /* I:   Prediction coefficients, Q13 [order]        */
+    const SKP_int       order                   /* I:   Prediction order                            */
+)
+{
+    SKP_int   k;
+    SKP_int32 Atmp_QA[ 2 ][ SKP_Silk_MAX_ORDER_LPC ];
+    SKP_int32 *Anew_QA;
+
+    Anew_QA = Atmp_QA[ order & 1 ];
+
+    /* Increase Q domain of the AR coefficients */
+    for( k = 0; k < order; k++ ) {
+        Anew_QA[ k ] = SKP_LSHIFT( (SKP_int32)A_Q13[ k ], QA - 13 );
+    }
+
+    return LPC_inverse_pred_gain_QA( invGain_Q30, Atmp_QA, order );
+}
+
+/* For input in Q24 domain */
+SKP_int SKP_Silk_LPC_inverse_pred_gain_Q24(   /* O:   Returns 1 if unstable, otherwise 0          */
+    SKP_int32           *invGain_Q30,           /* O:   Inverse prediction gain, Q30 energy domain  */
+    const SKP_int32     *A_Q24,                 /* I:   Prediction coefficients, Q24 [order]        */
+    const SKP_int       order                   /* I:   Prediction order                            */
+)
+{
+    SKP_int   k;
+    SKP_int32 Atmp_QA[ 2 ][ SKP_Silk_MAX_ORDER_LPC ];
+    SKP_int32 *Anew_QA;
+
+    Anew_QA = Atmp_QA[ order & 1 ];
+
+    /* Increase Q domain of the AR coefficients */
+    for( k = 0; k < order; k++ ) {
+        Anew_QA[ k ] = SKP_RSHIFT_ROUND( A_Q24[ k ], 24 - QA );
+    }
+
+    return LPC_inverse_pred_gain_QA( invGain_Q30, Atmp_QA, order );
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_LPC_stabilize.c
@@ -1,0 +1,133 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_typedef.h"
+#include "SKP_Silk_SigProc_FIX.h"
+
+#define LPC_STABILIZE_LPC_MAX_ABS_VALUE_Q16     ( ( (SKP_int32)SKP_int16_MAX ) << 4 )
+
+/* LPC stabilizer, for a single input data vector */
+void SKP_Silk_LPC_stabilize(
+    SKP_int16       *a_Q12,         /* O    stabilized LPC vector [L]                       */
+    SKP_int32       *a_Q16,         /* I    LPC vector [L]                                  */
+    const SKP_int32  bwe_Q16,       /* I    Bandwidth expansion factor                      */
+    const SKP_int    L              /* I    Number of LPC parameters in the input vector    */
+)
+{
+    SKP_int32   maxabs, absval, sc_Q16;
+    SKP_int     i, idx = 0;
+    SKP_int32   invGain_Q30;
+
+    SKP_Silk_bwexpander_32( a_Q16, L, bwe_Q16 );
+
+    /***************************/
+    /* Limit range of the LPCs */
+    /***************************/
+    /* Limit the maximum absolute value of the prediction coefficients */
+    while( SKP_TRUE ) {
+        /* Find maximum absolute value and its index */
+        maxabs = SKP_int32_MIN;
+        for( i = 0; i < L; i++ ) {
+            absval = SKP_abs( a_Q16[ i ] );
+            if( absval > maxabs ) {
+                maxabs = absval;
+                idx    = i;
+            }
+        }
+    
+        if( maxabs >= LPC_STABILIZE_LPC_MAX_ABS_VALUE_Q16 ) {
+            /* Reduce magnitude of prediction coefficients */
+            sc_Q16 = SKP_DIV32( SKP_int32_MAX, SKP_RSHIFT( maxabs, 4 ) );
+            sc_Q16 = 65536 - sc_Q16;
+            sc_Q16 = SKP_DIV32( sc_Q16, idx + 1 );
+            sc_Q16 = 65536 - sc_Q16;
+            sc_Q16 = SKP_LSHIFT( SKP_SMULWB( sc_Q16, 32604 ), 1 ); // 0.995 in Q16
+            SKP_Silk_bwexpander_32( a_Q16, L, sc_Q16 );
+        } else {
+            break;
+        }
+    }
+
+    /* Convert to 16 bit Q12 */
+    for( i = 0; i < L; i++ ) {
+        a_Q12[ i ] = (SKP_int16)SKP_RSHIFT_ROUND( a_Q16[ i ], 4 );
+    }
+
+    /**********************/
+    /* Ensure stable LPCs */
+    /**********************/
+    while( SKP_Silk_LPC_inverse_pred_gain( &invGain_Q30, a_Q12, L ) == 1 ) {
+        SKP_Silk_bwexpander( a_Q12, L, 65339 ); // 0.997 in Q16
+    }
+}
+
+void SKP_Silk_LPC_fit(
+    SKP_int16       *a_QQ,          /* O    Stabilized LPC vector, Q(24-rshift) [L]         */
+    SKP_int32       *a_Q24,         /* I    LPC vector [L]                                  */
+    const SKP_int    QQ,            /* I    Q domain of output LPC vector                   */
+    const SKP_int    L              /* I    Number of LPC parameters in the input vector    */
+)
+{
+    SKP_int     i, rshift, idx = 0;
+    SKP_int32   maxabs, absval, sc_Q16;
+
+    rshift = 24 - QQ;
+
+    /***************************/
+    /* Limit range of the LPCs */
+    /***************************/
+    /* Limit the maximum absolute value of the prediction coefficients */
+    while( SKP_TRUE ) {
+        /* Find maximum absolute value and its index; assumes stable coefficients   */
+        /* so that only the first half need to be tested                            */
+        maxabs = SKP_int32_MIN;
+        for( i = 1; i < L / 2; i++ ) {
+            absval = SKP_abs( a_Q24[ i ] );
+            if( absval > maxabs ) {
+                maxabs = absval;
+                idx    = i;
+            }
+        }
+    
+        maxabs = SKP_RSHIFT( maxabs, rshift );
+        if( maxabs >= SKP_int16_MAX ) {
+            /* Reduce magnitude of prediction coefficients */
+            sc_Q16 = 65470 - SKP_DIV32( SKP_MUL( 65470 >> 2, maxabs - SKP_int16_MAX ), 
+                                        SKP_RSHIFT32( SKP_MUL( maxabs, idx + 1), 2 ) );
+            SKP_Silk_bwexpander_32( a_Q24, L, sc_Q16 );
+        } else {
+            break;
+        }
+    }
+
+    /* Convert to 16 bit Q(24-rshift) */
+    SKP_assert( rshift > 0  );
+    SKP_assert( rshift < 31 );
+    for( i = 0; i < L; i++ ) {
+        a_QQ[ i ] = (SKP_int16)SKP_RSHIFT_ROUND( a_Q24[ i ], rshift );
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_LPC_synthesis_filter.c
@@ -1,0 +1,84 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_LPC_synthesis_filter.c                                    *
+ * Coefficients are in Q12                                              *
+ *                                                                      *
+ * even order AR filter                                                 *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* even order AR filter */
+void SKP_Silk_LPC_synthesis_filter(
+    const SKP_int16 *in,        /* I:   excitation signal */
+    const SKP_int16 *A_Q12,     /* I:   AR coefficients [Order], between -8_Q0 and 8_Q0 */
+    const SKP_int32 Gain_Q26,   /* I:   gain */
+    SKP_int32 *S,               /* I/O: state vector [Order] */
+    SKP_int16 *out,             /* O:   output signal */
+    const SKP_int32 len,        /* I:   signal length */
+    const SKP_int Order         /* I:   filter order, must be even */
+)
+{
+    SKP_int   k, j, idx, Order_half = SKP_RSHIFT( Order, 1 );
+    SKP_int32 SA, SB, out32_Q10, out32;
+
+    /* Order must be even */
+    SKP_assert( 2 * Order_half == Order );
+
+    /* S[] values are in Q14 */
+    for( k = 0; k < len; k++ ) {
+        SA = S[ Order - 1 ];
+        out32_Q10 = 0;
+        for( j = 0; j < ( Order_half - 1 ); j++ ) {
+            idx = SKP_SMULBB( 2, j ) + 1;
+            SB = S[ Order - 1 - idx ];
+            S[ Order - 1 - idx ] = SA;
+            out32_Q10 = SKP_SMLAWB( out32_Q10, SA, A_Q12[ ( j << 1 ) ] );
+            out32_Q10 = SKP_SMLAWB( out32_Q10, SB, A_Q12[ ( j << 1 ) + 1 ] );
+            SA = S[ Order - 2 - idx ];
+            S[ Order - 2 - idx ] = SB;
+        }
+
+        /* unrolled loop: epilog */
+        SB = S[ 0 ];
+        S[ 0 ] = SA;
+        out32_Q10 = SKP_SMLAWB( out32_Q10, SA, A_Q12[ Order - 2 ] );
+        out32_Q10 = SKP_SMLAWB( out32_Q10, SB, A_Q12[ Order - 1 ] );
+        /* apply gain to excitation signal and add to prediction */
+        out32_Q10 = SKP_ADD_SAT32( out32_Q10, SKP_SMULWB( Gain_Q26, in[ k ] ) );
+
+        /* scale to Q0 */
+        out32 = SKP_RSHIFT_ROUND( out32_Q10, 10 );
+
+        /* saturate output */
+        out[ k ] = ( SKP_int16 )SKP_SAT16( out32 );
+
+        /* move result into delay line */
+        S[ Order - 1 ] = SKP_LSHIFT_SAT32( out32_Q10, 4 );
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_LPC_synthesis_order16.c
@@ -1,0 +1,122 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_LPC_synthesis_order16.c                                   *
+ * Coefficients are in Q12                                              *
+ *                                                                      *
+ * 16th order AR filter                                                 *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* 16th order AR filter */
+void SKP_Silk_LPC_synthesis_order16(const SKP_int16 *in,          /* I:   excitation signal */
+                                      const SKP_int16 *A_Q12,       /* I:   AR coefficients [16], between -8_Q0 and 8_Q0 */
+                                      const SKP_int32 Gain_Q26,     /* I:   gain */
+                                      SKP_int32 *S,                 /* I/O: state vector [16] */
+                                      SKP_int16 *out,               /* O:   output signal */
+                                      const SKP_int32 len           /* I:   signal length, must be multiple of 16 */
+)
+{
+    SKP_int   k;
+    SKP_int32 SA, SB, out32_Q10, out32;
+    for( k = 0; k < len; k++ ) {
+        /* unrolled loop: prolog */
+        /* multiply-add two prediction coefficients per iteration */
+        SA = S[ 15 ];
+        SB = S[ 14 ];
+        S[ 14 ] = SA;
+        out32_Q10 = SKP_SMULWB(                  SA, A_Q12[ 0 ] );
+        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SB, A_Q12[ 1 ] );
+        SA = S[ 13 ];
+        S[ 13 ] = SB;
+
+        /* unrolled loop: main loop */
+        SB = S[ 12 ];
+        S[ 12 ] = SA;
+        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, A_Q12[ 2 ] );
+        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SB, A_Q12[ 3 ] );
+        SA = S[ 11 ];
+        S[ 11 ] = SB;
+
+        SB = S[ 10 ];
+        S[ 10 ] = SA;
+        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, A_Q12[ 4 ] );
+        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SB, A_Q12[ 5 ] );
+        SA = S[ 9 ];
+        S[ 9 ] = SB;
+
+        SB = S[ 8 ];
+        S[ 8 ] = SA;
+        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, A_Q12[ 6 ] );
+        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SB, A_Q12[ 7 ] );
+        SA = S[ 7 ];
+        S[ 7 ] = SB;
+
+        SB = S[ 6 ];
+        S[ 6 ] = SA;
+        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, A_Q12[ 8 ] );
+        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SB, A_Q12[ 9 ] );
+        SA = S[ 5 ];
+        S[ 5 ] = SB;
+
+        SB = S[ 4 ];
+        S[ 4 ] = SA;
+        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, A_Q12[ 10 ] );
+        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SB, A_Q12[ 11 ] );
+        SA = S[ 3 ];
+        S[ 3 ] = SB;
+
+        SB = S[ 2 ];
+        S[ 2 ] = SA;
+        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, A_Q12[ 12 ] );
+        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SB, A_Q12[ 13 ] );
+        SA = S[ 1 ];
+        S[ 1 ] = SB;
+
+        /* unrolled loop: epilog */
+        SB = S[ 0 ];
+        S[ 0 ] = SA;
+        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SA, A_Q12[ 14 ] );
+        out32_Q10 = SKP_SMLAWB_ovflw( out32_Q10, SB, A_Q12[ 15 ] );
+
+        /* unrolled loop: end */
+        /* apply gain to excitation signal and add to prediction */
+        out32_Q10 = SKP_ADD_SAT32( out32_Q10, SKP_SMULWB( Gain_Q26, in[ k ] ) );
+
+        /* scale to Q0 */
+        out32 = SKP_RSHIFT_ROUND( out32_Q10, 10 );
+
+        /* saturate output */
+        out[ k ] = ( SKP_int16 )SKP_SAT16( out32 );
+
+        /* move result into delay line */
+        S[ 15 ] = SKP_LSHIFT_SAT32( out32_Q10, 4 );
+    }
+}
+
+
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_LSF_cos_table.c
@@ -1,0 +1,65 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_SigProc_FIX.h"
+
+// Q12 values (even)
+const SKP_int SKP_Silk_LSFCosTab_FIX_Q12[LSF_COS_TAB_SZ_FIX + 1] = {
+            8192,             8190,             8182,             8170,     
+            8152,             8130,             8104,             8072,     
+            8034,             7994,             7946,             7896,     
+            7840,             7778,             7714,             7644,     
+            7568,             7490,             7406,             7318,     
+            7226,             7128,             7026,             6922,     
+            6812,             6698,             6580,             6458,     
+            6332,             6204,             6070,             5934,     
+            5792,             5648,             5502,             5352,     
+            5198,             5040,             4880,             4718,     
+            4552,             4382,             4212,             4038,     
+            3862,             3684,             3502,             3320,     
+            3136,             2948,             2760,             2570,     
+            2378,             2186,             1990,             1794,     
+            1598,             1400,             1202,             1002,     
+             802,              602,              402,              202,     
+               0,             -202,             -402,             -602,     
+            -802,            -1002,            -1202,            -1400,     
+           -1598,            -1794,            -1990,            -2186,     
+           -2378,            -2570,            -2760,            -2948,     
+           -3136,            -3320,            -3502,            -3684,     
+           -3862,            -4038,            -4212,            -4382,     
+           -4552,            -4718,            -4880,            -5040,     
+           -5198,            -5352,            -5502,            -5648,     
+           -5792,            -5934,            -6070,            -6204,     
+           -6332,            -6458,            -6580,            -6698,     
+           -6812,            -6922,            -7026,            -7128,     
+           -7226,            -7318,            -7406,            -7490,     
+           -7568,            -7644,            -7714,            -7778,     
+           -7840,            -7896,            -7946,            -7994,     
+           -8034,            -8072,            -8104,            -8130,     
+           -8152,            -8170,            -8182,            -8190,     
+           -8192
+};
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_MA.c
@@ -1,0 +1,167 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_MA.c                                                      *
+ *                                                                      *
+ * Variable order MA filter                                             *
+ *                                                                      *
+ * Copyright 2006 (c), Skype Limited                                    *
+ * Date: 060221                                                         *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Variable order MA filter */
+void SKP_Silk_MA(
+    const SKP_int16      *in,            /* I:   input signal                                */
+    const SKP_int16      *B,             /* I:   MA coefficients, Q13 [order+1]              */
+    SKP_int32            *S,             /* I/O: state vector [order]                        */
+    SKP_int16            *out,           /* O:   output signal                               */
+    const SKP_int32      len,            /* I:   signal length                               */
+    const SKP_int32      order           /* I:   filter order                                */
+)
+{
+    SKP_int   k, d, in16;
+    SKP_int32 out32;
+    
+    for( k = 0; k < len; k++ ) {
+        in16 = in[ k ];
+        out32 = SKP_SMLABB( S[ 0 ], in16, B[ 0 ] );
+        out32 = SKP_RSHIFT_ROUND( out32, 13 );
+        
+        for( d = 1; d < order; d++ ) {
+            S[ d - 1 ] = SKP_SMLABB( S[ d ], in16, B[ d ] );
+        }
+        S[ order - 1 ] = SKP_SMULBB( in16, B[ order ] );
+
+        /* Limit */
+        out[ k ] = (SKP_int16)SKP_SAT16( out32 );
+    }
+}
+/* Variable order MA prediction error filter */
+void SKP_Silk_MA_Prediction(
+    const SKP_int16      *in,            /* I:   Input signal                                */
+    const SKP_int16      *B,             /* I:   MA prediction coefficients, Q12 [order]     */
+    SKP_int32            *S,             /* I/O: State vector [order]                        */
+    SKP_int16            *out,           /* O:   Output signal                               */
+    const SKP_int32      len,            /* I:   Signal length                               */
+    const SKP_int32      order           /* I:   Filter order                                */
+)
+{
+    SKP_int   k, d, in16;
+    SKP_int32 out32;
+
+    for( k = 0; k < len; k++ ) {
+        in16 = in[ k ];
+        out32 = SKP_LSHIFT( in16, 12 ) - S[ 0 ];
+        out32 = SKP_RSHIFT_ROUND( out32, 12 );
+        
+        for( d = 0; d < order - 1; d++ ) {
+            S[ d ] = SKP_SMLABB_ovflw( S[ d + 1 ], in16, B[ d ] );
+        }
+        S[ order - 1 ] = SKP_SMULBB( in16, B[ order - 1 ] );
+
+        /* Limit */
+        out[ k ] = (SKP_int16)SKP_SAT16( out32 );
+    }
+}
+
+void SKP_Silk_MA_Prediction_Q13(
+    const SKP_int16      *in,            /* I:   input signal                                */
+    const SKP_int16      *B,             /* I:   MA prediction coefficients, Q13 [order]     */
+    SKP_int32            *S,             /* I/O: state vector [order]                        */
+    SKP_int16            *out,           /* O:   output signal                               */
+    SKP_int32            len,            /* I:   signal length                               */
+    SKP_int32            order           /* I:   filter order                                */
+)
+{
+    SKP_int   k, d, in16;
+    SKP_int32 out32;
+    for( k = 0; k < len; k++ ) {
+        in16 = in[ k ];
+        out32 = SKP_LSHIFT( in16, 13 ) - S[ 0 ];
+        out32 = SKP_RSHIFT_ROUND( out32, 13 );
+        
+        for( d = 0; d < order - 1; d++ ) {
+            S[ d ] = SKP_SMLABB( S[ d + 1 ], in16, B[ d ] );
+        }
+        S[ order - 1 ] = SKP_SMULBB( in16, B[ order - 1 ] );
+
+        /* Limit */
+        out[ k ] = ( SKP_int16 )SKP_SAT16( out32 );
+    }
+}
+
+void SKP_Silk_LPC_analysis_filter(
+    const SKP_int16      *in,            /* I:   Input signal                                */
+    const SKP_int16      *B,             /* I:   MA prediction coefficients, Q12 [order]     */
+    SKP_int16            *S,             /* I/O: State vector [order]                        */
+    SKP_int16            *out,           /* O:   Output signal                               */
+    const SKP_int32      len,            /* I:   Signal length                               */
+    const SKP_int32      Order           /* I:   Filter order                                */
+)
+{
+    SKP_int   k, j, idx, Order_half = SKP_RSHIFT( Order, 1 );
+    SKP_int32 out32_Q12, out32;
+    SKP_int16 SA, SB;
+    /* Order must be even */
+    SKP_assert( 2 * Order_half == Order );
+
+    /* S[] values are in Q0 */
+    for( k = 0; k < len; k++ ) {
+        SA = S[ 0 ];
+        out32_Q12 = 0;
+        for( j = 0; j < ( Order_half - 1 ); j++ ) {
+            idx = SKP_SMULBB( 2, j ) + 1;
+            /* Multiply-add two prediction coefficients for each loop */
+            SB = S[ idx ];
+            S[ idx ] = SA;
+            out32_Q12 = SKP_SMLABB( out32_Q12, SA, B[ idx - 1 ] );
+            out32_Q12 = SKP_SMLABB( out32_Q12, SB, B[ idx ] );
+            SA = S[ idx + 1 ];
+            S[ idx + 1 ] = SB;
+        }
+
+        /* Unrolled loop: epilog */
+        SB = S[ Order - 1 ];
+        S[ Order - 1 ] = SA;
+        out32_Q12 = SKP_SMLABB( out32_Q12, SA, B[ Order - 2 ] );
+        out32_Q12 = SKP_SMLABB( out32_Q12, SB, B[ Order - 1 ] );
+
+        /* Subtract prediction */
+        out32_Q12 = SKP_SUB_SAT32( SKP_LSHIFT( (SKP_int32)in[ k ], 12 ), out32_Q12 );
+
+        /* Scale to Q0 */
+        out32 = SKP_RSHIFT_ROUND( out32_Q12, 12 );
+
+        /* Saturate output */
+        out[ k ] = ( SKP_int16 )SKP_SAT16( out32 );
+
+        /* Move input line */
+        S[ 0 ] = in[ k ];
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_MacroCount.h
@@ -1,0 +1,692 @@
+#ifndef _SIGPROCFIX_API_MACROCOUNT_H_
+#define _SIGPROCFIX_API_MACROCOUNT_H_
+#include <stdio.h>
+
+#ifdef	SKP_MACRO_COUNT
+#define varDefine SKP_int64 ops_count = 0;
+
+extern SKP_int64 ops_count;
+
+SKP_INLINE SKP_int64 SKP_SaveCount(){
+	return(ops_count);
+}
+
+SKP_INLINE SKP_int64 SKP_SaveResetCount(){
+	SKP_int64 ret;
+
+	ret = ops_count;
+	ops_count = 0;
+	return(ret);
+}
+
+SKP_INLINE SKP_PrintCount(){
+	printf("ops_count = %d \n ", (SKP_int32)ops_count);
+}
+
+#undef SKP_MUL
+SKP_INLINE SKP_int32 SKP_MUL(SKP_int32 a32, SKP_int32 b32){
+	SKP_int32 ret;
+	ops_count += 4;
+	ret = a32 * b32;
+	return ret;
+}
+
+#undef SKP_MUL_uint
+SKP_INLINE SKP_uint32 SKP_MUL_uint(SKP_uint32 a32, SKP_uint32 b32){
+	SKP_uint32 ret;
+	ops_count += 4;
+	ret = a32 * b32;
+	return ret;
+}
+#undef SKP_MLA
+SKP_INLINE SKP_int32 SKP_MLA(SKP_int32 a32, SKP_int32 b32, SKP_int32 c32){
+	SKP_int32 ret;
+	ops_count += 4;
+	ret = a32 + b32 * c32;
+	return ret;
+}
+
+#undef SKP_MLA_uint
+SKP_INLINE SKP_int32 SKP_MLA_uint(SKP_uint32 a32, SKP_uint32 b32, SKP_uint32 c32){
+	SKP_uint32 ret;
+	ops_count += 4;
+	ret = a32 + b32 * c32;
+	return ret;
+}
+
+#undef SKP_SMULWB
+SKP_INLINE SKP_int32 SKP_SMULWB(SKP_int32 a32, SKP_int32 b32){	
+	SKP_int32 ret;
+	ops_count += 5;
+	ret = (a32 >> 16) * (SKP_int32)((SKP_int16)b32) + (((a32 & 0x0000FFFF) * (SKP_int32)((SKP_int16)b32)) >> 16);
+	return ret;
+}
+#undef	SKP_SMLAWB
+SKP_INLINE SKP_int32 SKP_SMLAWB(SKP_int32 a32, SKP_int32 b32, SKP_int32 c32){	
+	SKP_int32 ret;
+	ops_count += 5;
+	ret = ((a32) + ((((b32) >> 16) * (SKP_int32)((SKP_int16)(c32))) + ((((b32) & 0x0000FFFF) * (SKP_int32)((SKP_int16)(c32))) >> 16)));
+	return ret;
+}
+
+#undef SKP_SMULWT
+SKP_INLINE SKP_int32 SKP_SMULWT(SKP_int32 a32, SKP_int32 b32){
+	SKP_int32 ret;
+	ops_count += 4;
+	ret = (a32 >> 16) * (b32 >> 16) + (((a32 & 0x0000FFFF) * (b32 >> 16)) >> 16);
+	return ret;
+}
+#undef SKP_SMLAWT
+SKP_INLINE SKP_int32 SKP_SMLAWT(SKP_int32 a32, SKP_int32 b32, SKP_int32 c32){
+	SKP_int32 ret;
+	ops_count += 4;
+	ret = a32 + ((b32 >> 16) * (c32 >> 16)) + (((b32 & 0x0000FFFF) * ((c32 >> 16)) >> 16));
+	return ret;
+}
+
+#undef SKP_SMULBB
+SKP_INLINE SKP_int32 SKP_SMULBB(SKP_int32 a32, SKP_int32 b32){
+	SKP_int32 ret;
+	ops_count += 1;
+	ret = (SKP_int32)((SKP_int16)a32) * (SKP_int32)((SKP_int16)b32);
+	return ret;
+}
+#undef SKP_SMLABB
+SKP_INLINE SKP_int32 SKP_SMLABB(SKP_int32 a32, SKP_int32 b32, SKP_int32 c32){
+	SKP_int32 ret;
+	ops_count += 1;
+	ret = a32 + (SKP_int32)((SKP_int16)b32) * (SKP_int32)((SKP_int16)c32);
+	return ret;
+}
+
+#undef SKP_SMULBT
+SKP_INLINE SKP_int32 SKP_SMULBT(SKP_int32 a32, SKP_int32 b32 ){
+	SKP_int32 ret;
+	ops_count += 4;
+	ret = ((SKP_int32)((SKP_int16)a32)) * (b32 >> 16);
+	return ret;
+}
+
+#undef SKP_SMLABT
+SKP_INLINE SKP_int32 SKP_SMLABT(SKP_int32 a32, SKP_int32 b32, SKP_int32 c32){
+	SKP_int32 ret;
+	ops_count += 1;
+	ret = a32 + ((SKP_int32)((SKP_int16)b32)) * (c32 >> 16);
+	return ret;
+}
+
+#undef SKP_SMULTT
+SKP_INLINE SKP_int32 SKP_SMULTT(SKP_int32 a32, SKP_int32 b32){
+	SKP_int32 ret;
+	ops_count += 1;
+	ret = (a32 >> 16) * (b32 >> 16);
+	return ret;
+}
+
+#undef	SKP_SMLATT
+SKP_INLINE SKP_int32 SKP_SMLATT(SKP_int32 a32, SKP_int32 b32, SKP_int32 c32){
+	SKP_int32 ret;
+	ops_count += 1;
+	ret = a32 + (b32 >> 16) * (c32 >> 16);
+	return ret;
+}
+
+
+// multiply-accumulate macros that allow overflow in the addition (ie, no asserts in debug mode)
+#undef	SKP_MLA_ovflw
+#define SKP_MLA_ovflw SKP_MLA
+
+#undef SKP_SMLABB_ovflw
+#define SKP_SMLABB_ovflw SKP_SMLABB
+
+#undef SKP_SMLABT_ovflw
+#define SKP_SMLABT_ovflw SKP_SMLABT
+
+#undef SKP_SMLATT_ovflw
+#define SKP_SMLATT_ovflw SKP_SMLATT
+
+#undef SKP_SMLAWB_ovflw
+#define SKP_SMLAWB_ovflw SKP_SMLAWB
+
+#undef SKP_SMLAWT_ovflw
+#define SKP_SMLAWT_ovflw SKP_SMLAWT
+
+#undef SKP_SMULL
+SKP_INLINE SKP_int64 SKP_SMULL(SKP_int32 a32, SKP_int32 b32){	
+	SKP_int64 ret;
+	ops_count += 8;
+	ret = ((SKP_int64)(a32) * /*(SKP_int64)*/(b32));
+	return ret;
+}
+
+#undef	SKP_SMLAL
+SKP_INLINE SKP_int64 SKP_SMLAL(SKP_int64 a64, SKP_int32 b32, SKP_int32 c32){	
+	SKP_int64 ret;
+	ops_count += 8;
+	ret = a64 + ((SKP_int64)(b32) * /*(SKP_int64)*/(c32));
+	return ret;
+}
+#undef	SKP_SMLALBB
+SKP_INLINE SKP_int64 SKP_SMLALBB(SKP_int64 a64, SKP_int16 b16, SKP_int16 c16){	
+	SKP_int64 ret;
+	ops_count += 4;
+	ret = a64 + ((SKP_int64)(b16) * /*(SKP_int64)*/(c16));
+	return ret;
+}
+
+#undef	SigProcFIX_CLZ16
+SKP_INLINE SKP_int32 SigProcFIX_CLZ16(SKP_int16 in16)
+{
+    SKP_int32 out32 = 0;
+	ops_count += 10;
+    if( in16 == 0 ) {
+        return 16;
+    }
+    /* test nibbles */
+    if( in16 & 0xFF00 ) {
+        if( in16 & 0xF000 ) {
+            in16 >>= 12;
+        } else {
+            out32 += 4;
+            in16 >>= 8;
+        }
+    } else {
+        if( in16 & 0xFFF0 ) {
+            out32 += 8;
+            in16 >>= 4;
+        } else {
+            out32 += 12;
+        }
+    }
+    /* test bits and return */
+    if( in16 & 0xC ) {
+        if( in16 & 0x8 )
+            return out32 + 0;
+        else
+            return out32 + 1;
+    } else {
+        if( in16 & 0xE )
+            return out32 + 2;
+        else
+            return out32 + 3;
+    }
+}
+
+#undef SigProcFIX_CLZ32
+SKP_INLINE SKP_int32 SigProcFIX_CLZ32(SKP_int32 in32)
+{
+    /* test highest 16 bits and convert to SKP_int16 */
+	ops_count += 2;
+    if( in32 & 0xFFFF0000 ) {
+        return SigProcFIX_CLZ16((SKP_int16)(in32 >> 16));
+    } else {
+        return SigProcFIX_CLZ16((SKP_int16)in32) + 16;
+    }
+}
+
+#undef SKP_DIV32
+SKP_INLINE SKP_int32 SKP_DIV32(SKP_int32 a32, SKP_int32 b32){
+	ops_count += 64;
+	return a32 / b32;
+}
+
+#undef SKP_DIV32_16
+SKP_INLINE SKP_int32 SKP_DIV32_16(SKP_int32 a32, SKP_int32 b32){
+	ops_count += 32;
+	return a32 / b32;
+}
+
+#undef SKP_SAT8
+SKP_INLINE SKP_int8 SKP_SAT8(SKP_int64 a){
+	SKP_int8 tmp;
+	ops_count += 1;
+	tmp = (SKP_int8)((a) > SKP_int8_MAX ? SKP_int8_MAX  : \
+                    ((a) < SKP_int8_MIN ? SKP_int8_MIN  : (a)));
+	return(tmp);
+}
+
+#undef SKP_SAT16
+SKP_INLINE SKP_int16 SKP_SAT16(SKP_int64 a){
+	SKP_int16 tmp;
+	ops_count += 1;
+	tmp = (SKP_int16)((a) > SKP_int16_MAX ? SKP_int16_MAX  : \
+                     ((a) < SKP_int16_MIN ? SKP_int16_MIN  : (a)));
+	return(tmp);
+}
+#undef SKP_SAT32
+SKP_INLINE SKP_int32 SKP_SAT32(SKP_int64 a){
+	SKP_int32 tmp;
+	ops_count += 1;
+	tmp = (SKP_int32)((a) > SKP_int32_MAX ? SKP_int32_MAX  : \
+                     ((a) < SKP_int32_MIN ? SKP_int32_MIN  : (a)));
+	return(tmp);
+}
+#undef SKP_POS_SAT32
+SKP_INLINE SKP_int32 SKP_POS_SAT32(SKP_int64 a){
+	SKP_int32 tmp;
+	ops_count += 1;
+	tmp = (SKP_int32)((a) > SKP_int32_MAX ? SKP_int32_MAX : (a));
+	return(tmp);
+}
+
+#undef SKP_ADD_POS_SAT8
+SKP_INLINE SKP_int8 SKP_ADD_POS_SAT8(SKP_int64 a, SKP_int64 b){
+	SKP_int8 tmp;
+	ops_count += 1;
+	tmp = (SKP_int8)((((a)+(b)) & 0x80) ? SKP_int8_MAX  : ((a)+(b)));
+	return(tmp);
+}
+#undef SKP_ADD_POS_SAT16
+SKP_INLINE SKP_int16 SKP_ADD_POS_SAT16(SKP_int64 a, SKP_int64 b){
+	SKP_int16 tmp;
+	ops_count += 1;
+	tmp = (SKP_int16)((((a)+(b)) & 0x8000) ? SKP_int16_MAX : ((a)+(b)));
+	return(tmp);
+}
+
+#undef SKP_ADD_POS_SAT32
+SKP_INLINE SKP_int32 SKP_ADD_POS_SAT32(SKP_int64 a, SKP_int64 b){
+	SKP_int32 tmp;
+	ops_count += 1;
+	tmp = (SKP_int32)((((a)+(b)) & 0x80000000) ? SKP_int32_MAX : ((a)+(b)));
+	return(tmp);
+}
+
+#undef SKP_ADD_POS_SAT64
+SKP_INLINE SKP_int64 SKP_ADD_POS_SAT64(SKP_int64 a, SKP_int64 b){
+	SKP_int64 tmp;
+	ops_count += 1;
+	tmp = ((((a)+(b)) & 0x8000000000000000LL) ? SKP_int64_MAX : ((a)+(b)));
+	return(tmp);
+}
+
+#undef	SKP_LSHIFT8
+SKP_INLINE SKP_int8 SKP_LSHIFT8(SKP_int8 a, SKP_int32 shift){
+	SKP_int8 ret;
+	ops_count += 1;
+	ret = a << shift;
+	return ret;
+}
+#undef	SKP_LSHIFT16
+SKP_INLINE SKP_int16 SKP_LSHIFT16(SKP_int16 a, SKP_int32 shift){
+	SKP_int16 ret;
+	ops_count += 1;
+	ret = a << shift;
+	return ret;
+}
+#undef	SKP_LSHIFT32
+SKP_INLINE SKP_int32 SKP_LSHIFT32(SKP_int32 a, SKP_int32 shift){
+	SKP_int32 ret;
+	ops_count += 1;
+	ret = a << shift;
+	return ret;
+}
+#undef	SKP_LSHIFT64
+SKP_INLINE SKP_int64 SKP_LSHIFT64(SKP_int64 a, SKP_int shift){
+	ops_count += 1;
+	return a << shift;
+}
+
+#undef	SKP_LSHIFT_ovflw
+SKP_INLINE SKP_int32 SKP_LSHIFT_ovflw(SKP_int32 a, SKP_int32 shift){
+	ops_count += 1;
+	return a << shift;
+}
+
+#undef	SKP_LSHIFT_uint
+SKP_INLINE SKP_uint32 SKP_LSHIFT_uint(SKP_uint32 a, SKP_int32 shift){
+	SKP_uint32 ret;
+	ops_count += 1;
+	ret = a << shift;
+	return ret;
+}
+
+#undef	SKP_RSHIFT8
+SKP_INLINE SKP_int8 SKP_RSHIFT8(SKP_int8 a, SKP_int32 shift){
+	ops_count += 1;
+	return a >> shift;
+}
+#undef	SKP_RSHIFT16
+SKP_INLINE SKP_int16 SKP_RSHIFT16(SKP_int16 a, SKP_int32 shift){
+	ops_count += 1;
+	return a >> shift;
+}
+#undef	SKP_RSHIFT32
+SKP_INLINE SKP_int32 SKP_RSHIFT32(SKP_int32 a, SKP_int32 shift){
+	ops_count += 1;
+	return a >> shift;
+}
+#undef	SKP_RSHIFT64
+SKP_INLINE SKP_int64 SKP_RSHIFT64(SKP_int64 a, SKP_int64 shift){
+	ops_count += 1;
+	return a >> shift;
+}
+
+#undef	SKP_RSHIFT_uint
+SKP_INLINE SKP_uint32 SKP_RSHIFT_uint(SKP_uint32 a, SKP_int32 shift){
+	ops_count += 1;
+	return a >> shift;
+}
+
+#undef	SKP_ADD_LSHIFT
+SKP_INLINE SKP_int32 SKP_ADD_LSHIFT(SKP_int32 a, SKP_int32 b, SKP_int32 shift){
+	SKP_int32 ret;
+	ops_count += 1;
+	ret = a + (b << shift);
+	return ret;				// shift >= 0
+}
+#undef	SKP_ADD_LSHIFT32
+SKP_INLINE SKP_int32 SKP_ADD_LSHIFT32(SKP_int32 a, SKP_int32 b, SKP_int32 shift){
+	SKP_int32 ret;
+	ops_count += 1;
+	ret = a + (b << shift);
+	return ret;				// shift >= 0
+}
+#undef	SKP_ADD_LSHIFT_uint
+SKP_INLINE SKP_uint32 SKP_ADD_LSHIFT_uint(SKP_uint32 a, SKP_uint32 b, SKP_int32 shift){
+	SKP_uint32 ret;
+	ops_count += 1;
+	ret = a + (b << shift);
+	return ret;				// shift >= 0
+}
+#undef	SKP_ADD_RSHIFT
+SKP_INLINE SKP_int32 SKP_ADD_RSHIFT(SKP_int32 a, SKP_int32 b, SKP_int32 shift){		
+	SKP_int32 ret;
+	ops_count += 1;
+	ret = a + (b >> shift);
+	return ret;				// shift  > 0
+}
+#undef	SKP_ADD_RSHIFT32
+SKP_INLINE SKP_int32 SKP_ADD_RSHIFT32(SKP_int32 a, SKP_int32 b, SKP_int32 shift){		
+	SKP_int32 ret;
+	ops_count += 1;
+	ret = a + (b >> shift);
+	return ret;				// shift  > 0
+}
+#undef	SKP_ADD_RSHIFT_uint
+SKP_INLINE SKP_uint32 SKP_ADD_RSHIFT_uint(SKP_uint32 a, SKP_uint32 b, SKP_int32 shift){		
+	SKP_uint32 ret;
+	ops_count += 1;
+	ret = a + (b >> shift);
+	return ret;				// shift  > 0
+}
+#undef	SKP_SUB_LSHIFT32
+SKP_INLINE SKP_int32 SKP_SUB_LSHIFT32(SKP_int32 a, SKP_int32 b, SKP_int32 shift){
+	SKP_int32 ret;
+	ops_count += 1;
+	ret = a - (b << shift);
+	return ret;				// shift >= 0
+}
+#undef	SKP_SUB_RSHIFT32
+SKP_INLINE SKP_int32 SKP_SUB_RSHIFT32(SKP_int32 a, SKP_int32 b, SKP_int32 shift){		
+	SKP_int32 ret;
+	ops_count += 1;
+	ret = a - (b >> shift);
+	return ret;				// shift  > 0
+}
+
+#undef	SKP_RSHIFT_ROUND
+SKP_INLINE SKP_int32 SKP_RSHIFT_ROUND(SKP_int32 a, SKP_int32 shift){
+	SKP_int32 ret;
+	ops_count += 3;
+	ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1;
+	return ret;
+}
+
+#undef	SKP_RSHIFT_ROUND64
+SKP_INLINE SKP_int64 SKP_RSHIFT_ROUND64(SKP_int64 a, SKP_int32 shift){
+	SKP_int64 ret;
+	ops_count += 6;
+	ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1;
+	return ret;
+}
+
+#undef	SKP_abs_int64
+SKP_INLINE SKP_int64 SKP_abs_int64(SKP_int64 a){
+	ops_count += 1;
+	return (((a) >  0)  ? (a) : -(a));			// Be careful, SKP_abs returns wrong when input equals to SKP_intXX_MIN
+}
+
+#undef	SKP_abs_int32
+SKP_INLINE SKP_int32 SKP_abs_int32(SKP_int32 a){
+	ops_count += 1;
+	return abs(a);
+}
+
+
+#undef SKP_min
+static SKP_min(a, b){
+	ops_count += 1;
+	return (((a) < (b)) ? (a) :  (b));
+}
+#undef SKP_max
+static SKP_max(a, b){
+	ops_count += 1;
+	return (((a) > (b)) ? (a) :  (b));
+}
+#undef SKP_sign
+static SKP_sign(a){
+	ops_count += 1;
+	return ((a) > 0 ? 1 : ( (a) < 0 ? -1 : 0 ));
+}
+
+#undef	SKP_ADD16
+SKP_INLINE SKP_int16 SKP_ADD16(SKP_int16 a, SKP_int16 b){
+	SKP_int16 ret;
+	ops_count += 1;
+	ret = a + b;
+	return ret;
+}
+
+#undef	SKP_ADD32
+SKP_INLINE SKP_int32 SKP_ADD32(SKP_int32 a, SKP_int32 b){
+	SKP_int32 ret;
+	ops_count += 1;
+	ret = a + b;
+	return ret;
+}
+
+#undef	SKP_ADD64
+SKP_INLINE SKP_int64 SKP_ADD64(SKP_int64 a, SKP_int64 b){
+	SKP_int64 ret;
+	ops_count += 2;
+	ret = a + b;
+	return ret;
+}
+
+#undef	SKP_SUB16
+SKP_INLINE SKP_int16 SKP_SUB16(SKP_int16 a, SKP_int16 b){
+	SKP_int16 ret;
+	ops_count += 1;
+	ret = a - b;
+	return ret;
+}
+
+#undef	SKP_SUB32
+SKP_INLINE SKP_int32 SKP_SUB32(SKP_int32 a, SKP_int32 b){
+	SKP_int32 ret;
+	ops_count += 1;
+	ret = a - b;
+	return ret;
+}
+
+#undef	SKP_SUB64
+SKP_INLINE SKP_int64 SKP_SUB64(SKP_int64 a, SKP_int64 b){
+	SKP_int64 ret;
+	ops_count += 2;
+	ret = a - b;
+	return ret;
+}
+
+#undef SKP_ADD_SAT16
+SKP_INLINE SKP_int16 SKP_ADD_SAT16( SKP_int16 a16, SKP_int16 b16 ) {
+	SKP_int16 res;
+	// Nb will be counted in AKP_add32 and SKP_SAT16
+	res = (SKP_int16)SKP_SAT16( SKP_ADD32( (SKP_int32)(a16), (b16) ) );
+	return res;
+}
+
+#undef SKP_ADD_SAT32
+SKP_INLINE SKP_int32 SKP_ADD_SAT32(SKP_int32 a32, SKP_int32 b32){
+	SKP_int32 res;
+	ops_count += 1;
+	res =	((((a32) + (b32)) & 0x80000000) == 0 ?									\
+			((((a32) & (b32)) & 0x80000000) != 0 ? SKP_int32_MIN : (a32)+(b32)) :	\
+			((((a32) | (b32)) & 0x80000000) == 0 ? SKP_int32_MAX : (a32)+(b32)) );
+	return res;
+}
+
+#undef SKP_ADD_SAT64
+SKP_INLINE SKP_int64 SKP_ADD_SAT64( SKP_int64 a64, SKP_int64 b64 ) {
+	SKP_int64 res;
+	ops_count += 1;
+	res =	((((a64) + (b64)) & 0x8000000000000000LL) == 0 ?								\
+			((((a64) & (b64)) & 0x8000000000000000LL) != 0 ? SKP_int64_MIN : (a64)+(b64)) :	\
+			((((a64) | (b64)) & 0x8000000000000000LL) == 0 ? SKP_int64_MAX : (a64)+(b64)) );
+	return res;
+}
+
+#undef SKP_SUB_SAT16
+SKP_INLINE SKP_int16 SKP_SUB_SAT16( SKP_int16 a16, SKP_int16 b16 ) {
+	SKP_int16 res;
+	SKP_assert(0);
+	// Nb will be counted in sub-macros
+	res = (SKP_int16)SKP_SAT16( SKP_SUB32( (SKP_int32)(a16), (b16) ) );
+	return res;
+}
+
+#undef SKP_SUB_SAT32
+SKP_INLINE SKP_int32 SKP_SUB_SAT32( SKP_int32 a32, SKP_int32 b32 ) {
+	SKP_int32 res;
+	ops_count += 1;
+	res = 	((((a32)-(b32)) & 0x80000000) == 0 ?											\
+			(( (a32) & ((b32)^0x80000000) & 0x80000000) ? SKP_int32_MIN : (a32)-(b32)) :	\
+			((((a32)^0x80000000) & (b32)  & 0x80000000) ? SKP_int32_MAX : (a32)-(b32)) );
+	return res;
+}
+
+#undef SKP_SUB_SAT64
+SKP_INLINE SKP_int64 SKP_SUB_SAT64( SKP_int64 a64, SKP_int64 b64 ) {
+	SKP_int64 res;
+	ops_count += 1;
+	res =	((((a64)-(b64)) & 0x8000000000000000LL) == 0 ?														\
+			(( (a64) & ((b64)^0x8000000000000000LL) & 0x8000000000000000LL) ? SKP_int64_MIN : (a64)-(b64)) :	\
+			((((a64)^0x8000000000000000LL) & (b64)  & 0x8000000000000000LL) ? SKP_int64_MAX : (a64)-(b64)) );
+
+	return res;
+}
+
+#undef	SKP_SMULWW
+SKP_INLINE SKP_int32 SKP_SMULWW(SKP_int32 a32, SKP_int32 b32){	
+	SKP_int32 ret;
+	// Nb will be counted in sub-macros
+	ret = SKP_MLA(SKP_SMULWB((a32), (b32)), (a32), SKP_RSHIFT_ROUND((b32), 16));
+	return ret;
+}
+
+#undef	SKP_SMLAWW
+SKP_INLINE SKP_int32 SKP_SMLAWW(SKP_int32 a32, SKP_int32 b32, SKP_int32 c32){	
+	SKP_int32 ret;
+	// Nb will be counted in sub-macros
+	ret = SKP_MLA(SKP_SMLAWB((a32), (b32), (c32)), (b32), SKP_RSHIFT_ROUND((c32), 16));
+	return ret;
+}
+
+#undef	SKP_min_int
+SKP_INLINE SKP_int SKP_min_int(SKP_int a, SKP_int b)
+{
+	ops_count += 1;
+	return (((a) < (b)) ? (a) : (b));
+}
+
+#undef	SKP_min_16
+SKP_INLINE SKP_int16 SKP_min_16(SKP_int16 a, SKP_int16 b)
+{
+	ops_count += 1;
+	return (((a) < (b)) ? (a) : (b));
+}
+#undef	SKP_min_32
+SKP_INLINE SKP_int32 SKP_min_32(SKP_int32 a, SKP_int32 b)
+{
+	ops_count += 1;
+	return (((a) < (b)) ? (a) : (b));
+}
+#undef	SKP_min_64
+SKP_INLINE SKP_int64 SKP_min_64(SKP_int64 a, SKP_int64 b)
+{
+	ops_count += 1;
+	return (((a) < (b)) ? (a) : (b));
+}
+
+/* SKP_min() versions with typecast in the function call */
+#undef	SKP_max_int
+SKP_INLINE SKP_int SKP_max_int(SKP_int a, SKP_int b)
+{
+	ops_count += 1;
+	return (((a) > (b)) ? (a) : (b));
+}
+#undef	SKP_max_16
+SKP_INLINE SKP_int16 SKP_max_16(SKP_int16 a, SKP_int16 b)
+{
+	ops_count += 1;
+	return (((a) > (b)) ? (a) : (b));
+}
+#undef	SKP_max_32
+SKP_INLINE SKP_int32 SKP_max_32(SKP_int32 a, SKP_int32 b)
+{
+    ops_count += 1;
+    return (((a) > (b)) ? (a) : (b));
+}
+
+#undef	SKP_max_64
+SKP_INLINE SKP_int64 SKP_max_64(SKP_int64 a, SKP_int64 b)
+{
+    ops_count += 1;
+    return (((a) > (b)) ? (a) : (b));
+}
+
+
+#undef SKP_LIMIT_int
+SKP_INLINE SKP_int SKP_LIMIT_int(SKP_int a, SKP_int limit1, SKP_int limit2)
+{
+    SKP_int ret;
+    ops_count += 6;
+
+    ret = ((limit1) > (limit2) ? ((a) > (limit1) ? (limit1) : ((a) < (limit2) ? (limit2) : (a))) \
+        : ((a) > (limit2) ? (limit2) : ((a) < (limit1) ? (limit1) : (a))));
+
+    return(ret);
+}
+
+#undef SKP_LIMIT_16
+SKP_INLINE SKP_int16 SKP_LIMIT_16(SKP_int16 a, SKP_int16 limit1, SKP_int16 limit2)
+{
+    SKP_int16 ret;
+    ops_count += 6;
+
+    ret = ((limit1) > (limit2) ? ((a) > (limit1) ? (limit1) : ((a) < (limit2) ? (limit2) : (a))) \
+        : ((a) > (limit2) ? (limit2) : ((a) < (limit1) ? (limit1) : (a))));
+
+return(ret);
+}
+
+
+#undef SKP_LIMIT_32
+SKP_INLINE SKP_int SKP_LIMIT_32(SKP_int32 a, SKP_int32 limit1, SKP_int32 limit2)
+{
+    SKP_int32 ret;
+    ops_count += 6;
+
+    ret = ((limit1) > (limit2) ? ((a) > (limit1) ? (limit1) : ((a) < (limit2) ? (limit2) : (a))) \
+        : ((a) > (limit2) ? (limit2) : ((a) < (limit1) ? (limit1) : (a))));
+    return(ret);
+}
+
+#else
+#define exVarDefine
+#define varDefine
+#define SKP_SaveCount()
+
+#endif
+#endif
+
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_MacroDebug.h
@@ -1,0 +1,532 @@
+#ifndef _SIGPROCFIX_API_DEBUG_H_
+#define _SIGPROCFIX_API_DEBUG_H_
+
+// Redefine macro functions with extensive assertion in Win32_DEBUG mode. 
+// As function can't be undefined, this file can't work with SigProcFIX_MacroCount.h
+
+#if 0 && defined (_WIN32) && defined (_DEBUG) && !defined (SKP_MACRO_COUNT)
+
+#undef	SKP_ADD16
+SKP_INLINE SKP_int16 SKP_ADD16(SKP_int16 a, SKP_int16 b){
+	SKP_int16 ret;
+
+	ret = a + b;
+	SKP_assert( ret == SKP_ADD_SAT16( a, b ));
+	return ret;
+}
+
+#undef	SKP_ADD32
+SKP_INLINE SKP_int32 SKP_ADD32(SKP_int32 a, SKP_int32 b){
+	SKP_int32 ret;
+
+	ret = a + b;
+	SKP_assert( ret == SKP_ADD_SAT32( a, b ));
+	return ret;
+}
+
+#undef	SKP_ADD64
+SKP_INLINE SKP_int64 SKP_ADD64(SKP_int64 a, SKP_int64 b){
+	SKP_int64 ret;
+
+	ret = a + b;
+	SKP_assert( ret == SKP_ADD_SAT64( a, b ));
+	return ret;
+}
+
+#undef	SKP_SUB16
+SKP_INLINE SKP_int16 SKP_SUB16(SKP_int16 a, SKP_int16 b){
+	SKP_int16 ret;
+
+	ret = a - b;
+	SKP_assert( ret == SKP_SUB_SAT16( a, b ));
+	return ret;
+}
+
+#undef	SKP_SUB32
+SKP_INLINE SKP_int32 SKP_SUB32(SKP_int32 a, SKP_int32 b){
+	SKP_int32 ret;
+
+	ret = a - b;
+	SKP_assert( ret == SKP_SUB_SAT32( a, b ));
+	return ret;
+}
+
+#undef	SKP_SUB64
+SKP_INLINE SKP_int64 SKP_SUB64(SKP_int64 a, SKP_int64 b){
+	SKP_int64 ret;
+
+	ret = a - b;
+	SKP_assert( ret == SKP_SUB_SAT64( a, b ));
+	return ret;
+}
+
+#undef SKP_ADD_SAT16
+SKP_INLINE SKP_int16 SKP_ADD_SAT16( SKP_int16 a16, SKP_int16 b16 ) {
+	SKP_int16 res;
+	res = (SKP_int16)SKP_SAT16( SKP_ADD32( (SKP_int32)(a16), (b16) ) );
+	SKP_assert( res == SKP_SAT16( ( SKP_int32 )a16 + ( SKP_int32 )b16 ) );
+	return res;
+}
+
+#undef SKP_ADD_SAT32
+SKP_INLINE SKP_int32 SKP_ADD_SAT32(SKP_int32 a32, SKP_int32 b32){
+	SKP_int32 res;
+	res =	((((a32) + (b32)) & 0x80000000) == 0 ?									\
+			((((a32) & (b32)) & 0x80000000) != 0 ? SKP_int32_MIN : (a32)+(b32)) :	\
+			((((a32) | (b32)) & 0x80000000) == 0 ? SKP_int32_MAX : (a32)+(b32)) );
+	SKP_assert( res == SKP_SAT32( ( SKP_int64 )a32 + ( SKP_int64 )b32 ) );
+	return res;
+}
+
+#undef SKP_ADD_SAT64
+SKP_INLINE SKP_int64 SKP_ADD_SAT64( SKP_int64 a64, SKP_int64 b64 ) {
+	SKP_int64 res;
+	res =	((((a64) + (b64)) & 0x8000000000000000LL) == 0 ?								\
+			((((a64) & (b64)) & 0x8000000000000000LL) != 0 ? SKP_int64_MIN : (a64)+(b64)) :	\
+			((((a64) | (b64)) & 0x8000000000000000LL) == 0 ? SKP_int64_MAX : (a64)+(b64)) );
+	if( res != a64 + b64 ) {
+		// Check that we saturated to the correct extreme value
+		SKP_assert( ( res == SKP_int64_MAX && ( ( a64 >> 1 ) + ( b64 >> 1 ) > ( SKP_int64_MAX >> 3 ) ) ) ||
+					( res == SKP_int64_MIN && ( ( a64 >> 1 ) + ( b64 >> 1 ) < ( SKP_int64_MIN >> 3 ) ) ) );
+	} else {
+		// Saturation not necessary
+		SKP_assert( res == a64 + b64 );
+	}
+	return res;
+}
+
+#undef SKP_SUB_SAT16
+SKP_INLINE SKP_int16 SKP_SUB_SAT16( SKP_int16 a16, SKP_int16 b16 ) {
+	SKP_int16 res;
+	res = (SKP_int16)SKP_SAT16( SKP_SUB32( (SKP_int32)(a16), (b16) ) );
+	SKP_assert( res == SKP_SAT16( ( SKP_int32 )a16 - ( SKP_int32 )b16 ) );
+	return res;
+}
+
+#undef SKP_SUB_SAT32
+SKP_INLINE SKP_int32 SKP_SUB_SAT32( SKP_int32 a32, SKP_int32 b32 ) {
+	SKP_int32 res;
+	res = 	((((a32)-(b32)) & 0x80000000) == 0 ?											\
+			(( (a32) & ((b32)^0x80000000) & 0x80000000) ? SKP_int32_MIN : (a32)-(b32)) :	\
+			((((a32)^0x80000000) & (b32)  & 0x80000000) ? SKP_int32_MAX : (a32)-(b32)) );
+	SKP_assert( res == SKP_SAT32( ( SKP_int64 )a32 - ( SKP_int64 )b32 ) );
+	return res;
+}
+
+#undef SKP_SUB_SAT64
+SKP_INLINE SKP_int64 SKP_SUB_SAT64( SKP_int64 a64, SKP_int64 b64 ) {
+	SKP_int64 res;
+	res =	((((a64)-(b64)) & 0x8000000000000000LL) == 0 ?														\
+			(( (a64) & ((b64)^0x8000000000000000LL) & 0x8000000000000000LL) ? SKP_int64_MIN : (a64)-(b64)) :	\
+			((((a64)^0x8000000000000000LL) & (b64)  & 0x8000000000000000LL) ? SKP_int64_MAX : (a64)-(b64)) );
+
+	if( res != a64 - b64 ) {
+		// Check that we saturated to the correct extreme value
+		SKP_assert( ( res == SKP_int64_MAX && ( ( a64 >> 1 ) + ( b64 >> 1 ) > ( SKP_int64_MAX >> 3 ) ) ) ||
+					( res == SKP_int64_MIN && ( ( a64 >> 1 ) + ( b64 >> 1 ) < ( SKP_int64_MIN >> 3 ) ) ) );
+	} else {
+		// Saturation not necessary
+		SKP_assert( res == a64 - b64 );
+	}
+	return res;
+}
+
+#undef SKP_MUL
+SKP_INLINE SKP_int32 SKP_MUL(SKP_int32 a32, SKP_int32 b32){
+	SKP_int32 ret;
+	SKP_int64 ret64; // Will easily show how many bits that are needed
+	ret = a32 * b32;
+	ret64 = (SKP_int64)a32 * (SKP_int64)b32; 
+	SKP_assert((SKP_int64)ret == ret64 );		//Check output overflow
+	return ret;
+}
+
+#undef SKP_MUL_uint
+SKP_INLINE SKP_uint32 SKP_MUL_uint(SKP_uint32 a32, SKP_uint32 b32){
+	SKP_uint32 ret;
+	ret = a32 * b32;
+	SKP_assert((SKP_uint64)ret == (SKP_uint64)a32 * (SKP_uint64)b32);		//Check output overflow
+	return ret;
+}
+#undef SKP_MLA
+SKP_INLINE SKP_int32 SKP_MLA(SKP_int32 a32, SKP_int32 b32, SKP_int32 c32){
+	SKP_int32 ret;
+	ret = a32 + b32 * c32;
+	SKP_assert((SKP_int64)ret == (SKP_int64)a32 + (SKP_int64)b32 * (SKP_int64)c32);	//Check output overflow
+	return ret;
+}
+
+#undef SKP_MLA_uint
+SKP_INLINE SKP_int32 SKP_MLA_uint(SKP_uint32 a32, SKP_uint32 b32, SKP_uint32 c32){
+	SKP_uint32 ret;
+	ret = a32 + b32 * c32;
+	SKP_assert((SKP_int64)ret == (SKP_int64)a32 + (SKP_int64)b32 * (SKP_int64)c32);	//Check output overflow
+	return ret;
+}
+
+#undef	SKP_SMULWB
+SKP_INLINE SKP_int32 SKP_SMULWB(SKP_int32 a32, SKP_int32 b32){	
+	SKP_int32 ret;
+	ret = (a32 >> 16) * (SKP_int32)((SKP_int16)b32) + (((a32 & 0x0000FFFF) * (SKP_int32)((SKP_int16)b32)) >> 16);
+	SKP_assert((SKP_int64)ret == ((SKP_int64)a32 * (SKP_int16)b32) >> 16);
+	return ret;
+}
+#undef	SKP_SMLAWB
+SKP_INLINE SKP_int32 SKP_SMLAWB(SKP_int32 a32, SKP_int32 b32, SKP_int32 c32){	
+	SKP_int32 ret;
+	ret = SKP_ADD32( a32, SKP_SMULWB( b32, c32 ) );
+	SKP_assert(SKP_ADD32( a32, SKP_SMULWB( b32, c32 ) ) == SKP_ADD_SAT32( a32, SKP_SMULWB( b32, c32 ) ));
+	return ret;
+}
+
+#undef SKP_SMULWT
+SKP_INLINE SKP_int32 SKP_SMULWT(SKP_int32 a32, SKP_int32 b32){
+	SKP_int32 ret;
+	ret = (a32 >> 16) * (b32 >> 16) + (((a32 & 0x0000FFFF) * (b32 >> 16)) >> 16);
+	SKP_assert((SKP_int64)ret == ((SKP_int64)a32 * (b32 >> 16)) >> 16);
+	return ret;
+}
+#undef SKP_SMLAWT
+SKP_INLINE SKP_int32 SKP_SMLAWT(SKP_int32 a32, SKP_int32 b32, SKP_int32 c32){
+	SKP_int32 ret;
+	ret = a32 + ((b32 >> 16) * (c32 >> 16)) + (((b32 & 0x0000FFFF) * ((c32 >> 16)) >> 16));
+	SKP_assert((SKP_int64)ret == (SKP_int64)a32 + (((SKP_int64)b32 * (c32 >> 16)) >> 16));
+	return ret;
+}
+
+#undef SKP_SMULL
+SKP_INLINE SKP_int64 SKP_SMULL(SKP_int64 a64, SKP_int64 b64){
+	SKP_int64 ret64;
+	ret64 = a64 * b64;
+	if( b64 != 0 ) {
+		SKP_assert( a64 == (ret64 / b64) );
+	} else if( a64 != 0 ) {
+		SKP_assert( b64 == (ret64 / a64) );
+	}
+	return ret64;
+}
+
+// no checking needed for SKP_SMULBB
+#undef	SKP_SMLABB
+SKP_INLINE SKP_int32 SKP_SMLABB(SKP_int32 a32, SKP_int32 b32, SKP_int32 c32){
+	SKP_int32 ret;
+	ret = a32 + (SKP_int32)((SKP_int16)b32) * (SKP_int32)((SKP_int16)c32);
+	SKP_assert((SKP_int64)ret == (SKP_int64)a32 + (SKP_int64)b32 * (SKP_int16)c32);
+	return ret;
+}
+
+// no checking needed for SKP_SMULBT
+#undef	SKP_SMLABT
+SKP_INLINE SKP_int32 SKP_SMLABT(SKP_int32 a32, SKP_int32 b32, SKP_int32 c32){
+	SKP_int32 ret;
+	ret = a32 + ((SKP_int32)((SKP_int16)b32)) * (c32 >> 16);
+	SKP_assert((SKP_int64)ret == (SKP_int64)a32 + (SKP_int64)b32 * (c32 >> 16));
+	return ret;
+}
+
+// no checking needed for SKP_SMULTT
+#undef	SKP_SMLATT
+SKP_INLINE SKP_int32 SKP_SMLATT(SKP_int32 a32, SKP_int32 b32, SKP_int32 c32){
+	SKP_int32 ret;
+	ret = a32 + (b32 >> 16) * (c32 >> 16);
+	SKP_assert((SKP_int64)ret == (SKP_int64)a32 + (b32 >> 16) * (c32 >> 16));
+	return ret;
+}
+
+#undef	SKP_SMULWW
+SKP_INLINE SKP_int32 SKP_SMULWW(SKP_int32 a32, SKP_int32 b32){	
+	SKP_int32 ret, tmp1, tmp2;
+	SKP_int64 ret64;
+
+	ret  = SKP_SMULWB( a32, b32 );
+	tmp1 = SKP_RSHIFT_ROUND( b32, 16 );
+	tmp2 = SKP_MUL( a32, tmp1 );
+	
+	SKP_assert( (SKP_int64)tmp2 == (SKP_int64) a32 * (SKP_int64) tmp1 );
+	
+	tmp1 = ret;
+	ret  = SKP_ADD32( tmp1, tmp2 );
+	SKP_assert( SKP_ADD32( tmp1, tmp2 ) == SKP_ADD_SAT32( tmp1, tmp2 ) );
+	
+	ret64 = SKP_RSHIFT64( SKP_SMULL( a32, b32 ), 16 );
+	SKP_assert( (SKP_int64)ret == ret64 );
+
+	return ret;
+}
+
+#undef	SKP_SMLAWW
+SKP_INLINE SKP_int32 SKP_SMLAWW(SKP_int32 a32, SKP_int32 b32, SKP_int32 c32){	
+	SKP_int32 ret, tmp;
+
+	tmp = SKP_SMULWW( b32, c32 );
+	ret = SKP_ADD32( a32, tmp );
+	SKP_assert( ret == SKP_ADD_SAT32( a32, tmp ) );	
+	return ret;
+}
+
+// multiply-accumulate macros that allow overflow in the addition (ie, no asserts in debug mode)
+#undef	SKP_MLA_ovflw
+#define SKP_MLA_ovflw(a32, b32, c32)	((a32) + ((b32) * (c32)))
+#undef	SKP_SMLABB_ovflw
+#define SKP_SMLABB_ovflw(a32, b32, c32)	((a32) + ((SKP_int32)((SKP_int16)(b32))) * (SKP_int32)((SKP_int16)(c32)))
+#undef	SKP_SMLABT_ovflw
+#define SKP_SMLABT_ovflw(a32, b32, c32)	((a32) + ((SKP_int32)((SKP_int16)(b32))) * ((c32) >> 16))
+#undef	SKP_SMLATT_ovflw
+#define SKP_SMLATT_ovflw(a32, b32, c32)	((a32) + ((b32) >> 16) * ((c32) >> 16))
+#undef	SKP_SMLAWB_ovflw
+#define SKP_SMLAWB_ovflw(a32, b32, c32)	((a32) + ((((b32) >> 16) * (SKP_int32)((SKP_int16)(c32))) + ((((b32) & 0x0000FFFF) * (SKP_int32)((SKP_int16)(c32))) >> 16)))
+#undef	SKP_SMLAWT_ovflw
+#define SKP_SMLAWT_ovflw(a32, b32, c32)	((a32) + (((b32) >> 16) * ((c32) >> 16)) + ((((b32) & 0x0000FFFF) * ((c32) >> 16)) >> 16))
+
+// no checking needed for SKP_SMULL
+// no checking needed for SKP_SMLAL
+// no checking needed for SKP_SMLALBB
+// no checking needed for SigProcFIX_CLZ16
+// no checking needed for SigProcFIX_CLZ32
+
+#undef SKP_DIV32
+SKP_INLINE SKP_int32 SKP_DIV32(SKP_int32 a32, SKP_int32 b32){
+	SKP_assert( b32 != 0 );
+	return a32 / b32;
+}
+
+#undef SKP_DIV32_16
+SKP_INLINE SKP_int32 SKP_DIV32_16(SKP_int32 a32, SKP_int32 b32){
+	SKP_assert( b32 != 0 );
+	SKP_assert( b32 <= SKP_int16_MAX );
+	SKP_assert( b32 >= SKP_int16_MIN );
+	return a32 / b32;
+}
+
+// no checking needed for SKP_SAT8
+// no checking needed for SKP_SAT16
+// no checking needed for SKP_SAT32
+// no checking needed for SKP_POS_SAT32
+// no checking needed for SKP_ADD_POS_SAT8
+// no checking needed for SKP_ADD_POS_SAT16
+// no checking needed for SKP_ADD_POS_SAT32
+// no checking needed for SKP_ADD_POS_SAT64
+#undef	SKP_LSHIFT8
+SKP_INLINE SKP_int8 SKP_LSHIFT8(SKP_int8 a, SKP_int32 shift){
+	SKP_int8 ret;
+	ret = a << shift;
+	SKP_assert(shift >= 0);
+	SKP_assert(shift < 8);
+	SKP_assert((SKP_int64)ret == ((SKP_int64)a) << shift);
+	return ret;
+}
+#undef	SKP_LSHIFT16
+SKP_INLINE SKP_int16 SKP_LSHIFT16(SKP_int16 a, SKP_int32 shift){
+	SKP_int16 ret;
+	ret = a << shift;
+	SKP_assert(shift >= 0);
+	SKP_assert(shift < 16);
+	SKP_assert((SKP_int64)ret == ((SKP_int64)a) << shift);
+	return ret;
+}
+#undef	SKP_LSHIFT32
+SKP_INLINE SKP_int32 SKP_LSHIFT32(SKP_int32 a, SKP_int32 shift){
+	SKP_int32 ret;
+	ret = a << shift;
+	SKP_assert(shift >= 0);
+	SKP_assert(shift < 32);
+	SKP_assert((SKP_int64)ret == ((SKP_int64)a) << shift);
+	return ret;
+}
+#undef	SKP_LSHIFT64
+SKP_INLINE SKP_int64 SKP_LSHIFT64(SKP_int64 a, SKP_int shift){
+	SKP_assert(shift >= 0);
+	SKP_assert(shift < 64);
+	return a << shift;
+}
+
+#undef	SKP_LSHIFT_ovflw
+SKP_INLINE SKP_int32 SKP_LSHIFT_ovflw(SKP_int32 a, SKP_int32 shift){
+	SKP_assert(shift >= 0);			/* no check for overflow */
+	return a << shift;
+}
+
+#undef	SKP_LSHIFT_uint
+SKP_INLINE SKP_uint32 SKP_LSHIFT_uint(SKP_uint32 a, SKP_int32 shift){
+	SKP_uint32 ret;
+	ret = a << shift;
+	SKP_assert(shift >= 0);
+	SKP_assert((SKP_int64)ret == ((SKP_int64)a) << shift);
+	return ret;
+}
+
+#undef	SKP_RSHIFT8
+SKP_INLINE SKP_int8 SKP_RSHIFT8(SKP_int8 a, SKP_int32 shift){
+	SKP_assert(shift >=  0);
+	SKP_assert(shift < 8);
+	return a >> shift;
+}
+#undef	SKP_RSHIFT16
+SKP_INLINE SKP_int16 SKP_RSHIFT16(SKP_int16 a, SKP_int32 shift){
+	SKP_assert(shift >=  0);
+	SKP_assert(shift < 16);
+	return a >> shift;
+}
+#undef	SKP_RSHIFT32
+SKP_INLINE SKP_int32 SKP_RSHIFT32(SKP_int32 a, SKP_int32 shift){
+	SKP_assert(shift >=  0);
+	SKP_assert(shift < 32);
+	return a >> shift;
+}
+#undef	SKP_RSHIFT64
+SKP_INLINE SKP_int64 SKP_RSHIFT64(SKP_int64 a, SKP_int64 shift){
+	SKP_assert(shift >=  0);
+	SKP_assert(shift <= 63);
+	return a >> shift;
+}
+
+#undef	SKP_RSHIFT_uint
+SKP_INLINE SKP_uint32 SKP_RSHIFT_uint(SKP_uint32 a, SKP_int32 shift){
+	SKP_assert(shift >=  0);
+	SKP_assert(shift <= 32);
+	return a >> shift;
+}
+
+#undef	SKP_ADD_LSHIFT
+SKP_INLINE SKP_int32 SKP_ADD_LSHIFT(SKP_int32 a, SKP_int32 b, SKP_int32 shift){
+	SKP_int32 ret;
+	SKP_assert(shift >= 0);
+	SKP_assert(shift <= 31);
+	ret = a + (b << shift);
+	SKP_assert((SKP_int64)ret == (SKP_int64)a + (((SKP_int64)b) << shift));
+	return ret;				// shift >= 0
+}
+#undef	SKP_ADD_LSHIFT32
+SKP_INLINE SKP_int32 SKP_ADD_LSHIFT32(SKP_int32 a, SKP_int32 b, SKP_int32 shift){
+	SKP_int32 ret;
+	SKP_assert(shift >= 0);
+	SKP_assert(shift <= 31);
+	ret = a + (b << shift);
+	SKP_assert((SKP_int64)ret == (SKP_int64)a + (((SKP_int64)b) << shift));
+	return ret;				// shift >= 0
+}
+#undef	SKP_ADD_LSHIFT_uint
+SKP_INLINE SKP_uint32 SKP_ADD_LSHIFT_uint(SKP_uint32 a, SKP_uint32 b, SKP_int32 shift){
+	SKP_uint32 ret;
+	SKP_assert(shift >= 0);
+	SKP_assert(shift <= 32);
+	ret = a + (b << shift);
+	SKP_assert((SKP_int64)ret == (SKP_int64)a + (((SKP_int64)b) << shift));
+	return ret;				// shift >= 0
+}
+#undef	SKP_ADD_RSHIFT
+SKP_INLINE SKP_int32 SKP_ADD_RSHIFT(SKP_int32 a, SKP_int32 b, SKP_int32 shift){		
+	SKP_int32 ret;
+	SKP_assert(shift >= 0);
+	SKP_assert(shift <= 31);
+	ret = a + (b >> shift);
+	SKP_assert((SKP_int64)ret == (SKP_int64)a + (((SKP_int64)b) >> shift));
+	return ret;				// shift  > 0
+}
+#undef	SKP_ADD_RSHIFT32
+SKP_INLINE SKP_int32 SKP_ADD_RSHIFT32(SKP_int32 a, SKP_int32 b, SKP_int32 shift){		
+	SKP_int32 ret;
+	SKP_assert(shift >= 0);
+	SKP_assert(shift <= 31);
+	ret = a + (b >> shift);
+	SKP_assert((SKP_int64)ret == (SKP_int64)a + (((SKP_int64)b) >> shift));
+	return ret;				// shift  > 0
+}
+#undef	SKP_ADD_RSHIFT_uint
+SKP_INLINE SKP_uint32 SKP_ADD_RSHIFT_uint(SKP_uint32 a, SKP_uint32 b, SKP_int32 shift){		
+	SKP_uint32 ret;
+	SKP_assert(shift >= 0);
+	SKP_assert(shift <= 32);
+	ret = a + (b >> shift);
+	SKP_assert((SKP_int64)ret == (SKP_int64)a + (((SKP_int64)b) >> shift));
+	return ret;				// shift  > 0
+}
+#undef	SKP_SUB_LSHIFT32
+SKP_INLINE SKP_int32 SKP_SUB_LSHIFT32(SKP_int32 a, SKP_int32 b, SKP_int32 shift){
+	SKP_int32 ret;
+	SKP_assert(shift >= 0);
+	SKP_assert(shift <= 31);
+	ret = a - (b << shift);
+	SKP_assert((SKP_int64)ret == (SKP_int64)a - (((SKP_int64)b) << shift));
+	return ret;				// shift >= 0
+}
+#undef	SKP_SUB_RSHIFT32
+SKP_INLINE SKP_int32 SKP_SUB_RSHIFT32(SKP_int32 a, SKP_int32 b, SKP_int32 shift){		
+	SKP_int32 ret;
+	SKP_assert(shift >= 0);
+	SKP_assert(shift <= 31);
+	ret = a - (b >> shift);
+	SKP_assert((SKP_int64)ret == (SKP_int64)a - (((SKP_int64)b) >> shift));
+	return ret;				// shift  > 0
+}
+
+#undef	SKP_RSHIFT_ROUND
+SKP_INLINE SKP_int32 SKP_RSHIFT_ROUND(SKP_int32 a, SKP_int32 shift){
+	SKP_int32 ret;
+	SKP_assert(shift > 0);		/* the marco definition can't handle a shift of zero */
+	SKP_assert(shift < 32);
+	ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1;
+	SKP_assert((SKP_int64)ret == ((SKP_int64)a + ((SKP_int64)1 << (shift - 1))) >> shift);
+	return ret;
+}
+
+#undef	SKP_RSHIFT_ROUND64
+SKP_INLINE SKP_int64 SKP_RSHIFT_ROUND64(SKP_int64 a, SKP_int32 shift){
+	SKP_int64 ret;
+	SKP_assert(shift > 0);		/* the marco definition can't handle a shift of zero */
+	SKP_assert(shift < 64);
+	ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1;
+	return ret;
+}
+
+// SKP_abs is used on floats also, so doesn't work...
+//#undef	SKP_abs
+//SKP_INLINE SKP_int32 SKP_abs(SKP_int32 a){
+//	SKP_assert(a != 0x80000000);
+//	return (((a) >  0)  ? (a) : -(a));			// Be careful, SKP_abs returns wrong when input equals to SKP_intXX_MIN
+//}
+
+#undef	SKP_abs_int64
+SKP_INLINE SKP_int64 SKP_abs_int64(SKP_int64 a){
+	SKP_assert(a != 0x8000000000000000);
+	return (((a) >  0)  ? (a) : -(a));			// Be careful, SKP_abs returns wrong when input equals to SKP_intXX_MIN
+}
+
+#undef	SKP_abs_int32
+SKP_INLINE SKP_int32 SKP_abs_int32(SKP_int32 a){
+	SKP_assert(a != 0x80000000);
+	return abs(a);
+}
+
+#undef	SKP_CHECK_FIT8
+SKP_INLINE SKP_int8 SKP_CHECK_FIT8( SKP_int64 a ){
+	SKP_int8 ret;
+	ret = (SKP_int8)a;
+	SKP_assert( (SKP_int64)ret == a );
+	return( ret ); 
+}
+
+#undef	SKP_CHECK_FIT16
+SKP_INLINE SKP_int16 SKP_CHECK_FIT16( SKP_int64 a ){
+	SKP_int16 ret;
+	ret = (SKP_int16)a;
+	SKP_assert( (SKP_int64)ret == a );
+	return( ret ); 
+}
+
+#undef	SKP_CHECK_FIT32
+SKP_INLINE SKP_int32 SKP_CHECK_FIT32( SKP_int64 a ){
+	SKP_int32 ret;
+	ret = (SKP_int32)a;
+	SKP_assert( (SKP_int64)ret == a );
+	return( ret ); 
+}
+
+// no checking for SKP_NSHIFT_MUL_32_32
+// no checking for SKP_NSHIFT_MUL_16_16	
+// no checking needed for SKP_min
+// no checking needed for SKP_max
+// no checking needed for SKP_sign
+
+#endif
+#endif
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_NLSF2A.c
@@ -1,0 +1,151 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/* conversion between prediction filter coefficients and LSFs   */
+/* order should be even                                         */
+/* a piecewise linear approximation maps LSF <-> cos(LSF)       */
+/* therefore the result is not accurate LSFs, but the two       */
+/* function are accurate inverses of each other                 */
+
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* helper function for NLSF2A(..) */
+SKP_INLINE void SKP_Silk_NLSF2A_find_poly(
+    SKP_int32        *out,        /* o    intermediate polynomial, Q20            */
+    const SKP_int32    *cLSF,     /* i    vector of interleaved 2*cos(LSFs), Q20  */
+    SKP_int            dd         /* i    polynomial order (= 1/2 * filter order) */
+)
+{
+    SKP_int        k, n;
+    SKP_int32    ftmp;
+
+    out[0] = SKP_LSHIFT( 1, 20 );
+    out[1] = -cLSF[0];
+    for( k = 1; k < dd; k++ ) {
+        ftmp = cLSF[2*k];            // Q20
+        out[k+1] = SKP_LSHIFT( out[k-1], 1 ) - (SKP_int32)SKP_RSHIFT_ROUND64( SKP_SMULL( ftmp, out[k] ), 20 );
+        for( n = k; n > 1; n-- ) {
+            out[n] += out[n-2] - (SKP_int32)SKP_RSHIFT_ROUND64( SKP_SMULL( ftmp, out[n-1] ), 20 );
+        }
+        out[1] -= ftmp;
+    }
+}
+
+/* compute whitening filter coefficients from normalized line spectral frequencies */
+void SKP_Silk_NLSF2A(
+    SKP_int16       *a,               /* o    monic whitening filter coefficients in Q12,  [d]    */
+    const SKP_int    *NLSF,           /* i    normalized line spectral frequencies in Q15, [d]    */
+    const SKP_int    d                /* i    filter order (should be even)                       */
+)
+{
+    SKP_int k, i, dd;
+    SKP_int32 cos_LSF_Q20[SKP_Silk_MAX_ORDER_LPC];
+    SKP_int32 P[SKP_Silk_MAX_ORDER_LPC/2+1], Q[SKP_Silk_MAX_ORDER_LPC/2+1];
+    SKP_int32 Ptmp, Qtmp;
+    SKP_int32 f_int;
+    SKP_int32 f_frac;
+    SKP_int32 cos_val, delta;
+    SKP_int32 a_int32[SKP_Silk_MAX_ORDER_LPC];
+    SKP_int32 maxabs, absval, idx=0, sc_Q16; 
+
+    SKP_assert(LSF_COS_TAB_SZ_FIX == 128);
+
+    /* convert LSFs to 2*cos(LSF(i)), using piecewise linear curve from table */
+    for( k = 0; k < d; k++ ) {
+        SKP_assert(NLSF[k] >= 0 );
+        SKP_assert(NLSF[k] <= 32767 );
+
+        /* f_int on a scale 0-127 (rounded down) */
+        f_int = SKP_RSHIFT( NLSF[k], 15 - 7 ); 
+        
+        /* f_frac, range: 0..255 */
+        f_frac = NLSF[k] - SKP_LSHIFT( f_int, 15 - 7 ); 
+
+        SKP_assert(f_int >= 0);
+        SKP_assert(f_int < LSF_COS_TAB_SZ_FIX );
+
+        /* Read start and end value from table */
+        cos_val = SKP_Silk_LSFCosTab_FIX_Q12[ f_int ];                /* Q12 */
+        delta   = SKP_Silk_LSFCosTab_FIX_Q12[ f_int + 1 ] - cos_val;  /* Q12, with a range of 0..200 */
+
+        /* Linear interpolation */
+        cos_LSF_Q20[k] = SKP_LSHIFT( cos_val, 8 ) + SKP_MUL( delta, f_frac ); /* Q20 */
+    }
+    
+    dd = SKP_RSHIFT( d, 1 );
+
+    /* generate even and odd polynomials using convolution */
+    SKP_Silk_NLSF2A_find_poly( P, &cos_LSF_Q20[0], dd );
+    SKP_Silk_NLSF2A_find_poly( Q, &cos_LSF_Q20[1], dd );
+
+    /* convert even and odd polynomials to SKP_int32 Q12 filter coefs */
+    for( k = 0; k < dd; k++ ) {
+        Ptmp = P[k+1] + P[k];
+        Qtmp = Q[k+1] - Q[k];
+
+        /* the Ptmp and Qtmp values at this stage need to fit in int32 */
+
+        a_int32[k]     = -SKP_RSHIFT_ROUND( Ptmp + Qtmp, 9 ); /* Q20 -> Q12 */
+        a_int32[d-k-1] =  SKP_RSHIFT_ROUND( Qtmp - Ptmp, 9 ); /* Q20 -> Q12 */
+    }
+
+    /* Limit the maximum absolute value of the prediction coefficients */
+    for( i = 0; i < 10; i++ ) {
+        /* Find maximum absolute value and its index */
+        maxabs = 0;
+        for( k = 0; k < d; k++ ) {
+            absval = SKP_abs( a_int32[k] );
+            if( absval > maxabs ) {
+                maxabs = absval;
+                idx       = k;
+            }    
+        }
+    
+        if( maxabs > SKP_int16_MAX ) {    
+            /* Reduce magnitude of prediction coefficients */
+            maxabs = SKP_min( maxabs, 98369 ); // ( SKP_int32_MAX / ( 65470 >> 2 ) ) + SKP_int16_MAX = 98369 
+            sc_Q16 = 65470 - SKP_DIV32( SKP_MUL( 65470 >> 2, maxabs - SKP_int16_MAX ), 
+                                        SKP_RSHIFT32( SKP_MUL( maxabs, idx + 1), 2 ) );
+            SKP_Silk_bwexpander_32( a_int32, d, sc_Q16 );
+        } else {
+            break;
+        }
+    }    
+
+    /* Reached the last iteration */
+    if( i == 10 ) {
+        SKP_assert(0);
+        for( k = 0; k < d; k++ ) {
+            a_int32[k] = SKP_SAT16( a_int32[k] ); 
+        }
+    }
+
+    /* Return as SKP_int16 Q12 coefficients */
+    for( k = 0; k < d; k++ ) {
+        a[k] = (SKP_int16)a_int32[k];
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_NLSF_VQ_weights_laroia.c
@@ -1,0 +1,78 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* 
+R. Laroia, N. Phamdo and N. Farvardin, "Robust and Efficient Quantization of Speech LSP
+Parameters Using Structured Vector Quantization", Proc. IEEE Int. Conf. Acoust., Speech,
+Signal Processing, pp. 641-644, 1991.
+*/
+
+#define Q_OUT                       6
+
+/* Laroia low complexity NLSF weights */
+void SKP_Silk_NLSF_VQ_weights_laroia(
+    SKP_int             *pNLSFW_Q6,         /* O: Pointer to input vector weights           [D x 1]     */
+    const SKP_int       *pNLSF_Q15,         /* I: Pointer to input vector                   [D x 1]     */ 
+    const SKP_int       D                   /* I: Input vector dimension (even)                         */
+)
+{
+    SKP_int   k;
+    SKP_int32 tmp1_int, tmp2_int;
+    
+    /* Check that we are guaranteed to end up within the required range */
+    SKP_assert( D > 0 );
+    SKP_assert( ( D & 1 ) == 0 );
+    
+    /* First value */
+    tmp1_int = SKP_max_int( pNLSF_Q15[ 0 ], 1 );
+    tmp1_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp1_int );
+    tmp2_int = SKP_max_int( pNLSF_Q15[ 1 ] - pNLSF_Q15[ 0 ], 1 );
+    tmp2_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp2_int );
+    pNLSFW_Q6[ 0 ] = (SKP_int)SKP_min_int( tmp1_int + tmp2_int, SKP_int16_MAX );
+    SKP_assert( pNLSFW_Q6[ 0 ] > 0 );
+    
+    /* Main loop */
+    for( k = 1; k < D - 1; k += 2 ) {
+        tmp1_int = SKP_max_int( pNLSF_Q15[ k + 1 ] - pNLSF_Q15[ k ], 1 );
+        tmp1_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp1_int );
+        pNLSFW_Q6[ k ] = (SKP_int)SKP_min_int( tmp1_int + tmp2_int, SKP_int16_MAX );
+        SKP_assert( pNLSFW_Q6[ k ] > 0 );
+
+        tmp2_int = SKP_max_int( pNLSF_Q15[ k + 2 ] - pNLSF_Q15[ k + 1 ], 1 );
+        tmp2_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp2_int );
+        pNLSFW_Q6[ k + 1 ] = (SKP_int)SKP_min_int( tmp1_int + tmp2_int, SKP_int16_MAX );
+        SKP_assert( pNLSFW_Q6[ k + 1 ] > 0 );
+    }
+    
+    /* Last value */
+    tmp1_int = SKP_max_int( ( 1 << 15 ) - pNLSF_Q15[ D - 1 ], 1 );
+    tmp1_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp1_int );
+    pNLSFW_Q6[ D - 1 ] = (SKP_int)SKP_min_int( tmp1_int + tmp2_int, SKP_int16_MAX );
+    SKP_assert( pNLSFW_Q6[ D - 1 ] > 0 );
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_NLSF_stabilize.c
@@ -1,0 +1,154 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/* NLSF stabilizer:                                         */
+/*                                                          */
+/* - Moves NLSFs futher apart if they are too close         */
+/* - Moves NLSFs away from borders if they are too close    */
+/* - High effort to achieve a modification with minimum     */
+/*     Euclidean distance to input vector                   */
+/* - Output are sorted NLSF coefficients                    */
+/*                                                          */
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Constant Definitions */
+#define MAX_LOOPS        20
+
+/* NLSF stabilizer, for a single input data vector */
+void SKP_Silk_NLSF_stabilize(
+          SKP_int    *NLSF_Q15,            /* I/O:  Unstable/stabilized normalized LSF vector in Q15 [L]                    */
+    const SKP_int    *NDeltaMin_Q15,       /* I:    Normalized delta min vector in Q15, NDeltaMin_Q15[L] must be >= 1 [L+1] */
+    const SKP_int     L                    /* I:    Number of NLSF parameters in the input vector                           */
+)
+{
+    SKP_int        center_freq_Q15, diff_Q15, min_center_Q15, max_center_Q15;
+    SKP_int32    min_diff_Q15;
+    SKP_int        loops;
+    SKP_int        i, I=0, k;
+
+    /* This is necessary to ensure an output within range of a SKP_int16 */
+    SKP_assert( NDeltaMin_Q15[L] >= 1 );
+
+    for( loops = 0; loops < MAX_LOOPS; loops++ ) {
+        /**************************/
+        /* Find smallest distance */
+        /**************************/
+        /* First element */
+        min_diff_Q15 = NLSF_Q15[0] - NDeltaMin_Q15[0];
+        I = 0;
+        /* Middle elements */
+        for( i = 1; i <= L-1; i++ ) {
+            diff_Q15 = NLSF_Q15[i] - ( NLSF_Q15[i-1] + NDeltaMin_Q15[i] );
+            if( diff_Q15 < min_diff_Q15 ) {
+                min_diff_Q15 = diff_Q15;
+                I = i;
+            }
+        }
+        /* Last element */
+        diff_Q15 = (1<<15) - ( NLSF_Q15[L-1] + NDeltaMin_Q15[L] );
+        if( diff_Q15 < min_diff_Q15 ) {
+            min_diff_Q15 = diff_Q15;
+            I = L;
+        }
+
+        /***************************************************/
+        /* Now check if the smallest distance non-negative */
+        /***************************************************/
+        if (min_diff_Q15 >= 0) {
+            return;
+        }
+
+        if( I == 0 ) {
+            /* Move away from lower limit */
+            NLSF_Q15[0] = NDeltaMin_Q15[0];
+        
+        } else if( I == L) {
+            /* Move away from higher limit */
+            NLSF_Q15[L-1] = (1<<15) - NDeltaMin_Q15[L];
+        
+        } else {
+            /* Find the lower extreme for the location of the current center frequency */ 
+            min_center_Q15 = 0;
+            for( k = 0; k < I; k++ ) {
+                min_center_Q15 += NDeltaMin_Q15[k];
+            }
+            min_center_Q15 += SKP_RSHIFT( NDeltaMin_Q15[I], 1 );
+
+            /* Find the upper extreme for the location of the current center frequency */
+            max_center_Q15 = (1<<15);
+            for( k = L; k > I; k-- ) {
+                max_center_Q15 -= NDeltaMin_Q15[k];
+            }
+            max_center_Q15 -= ( NDeltaMin_Q15[I] - SKP_RSHIFT( NDeltaMin_Q15[I], 1 ) );
+
+            /* Move apart, sorted by value, keeping the same center frequency */
+            center_freq_Q15 = SKP_LIMIT_32( SKP_RSHIFT_ROUND( (SKP_int32)NLSF_Q15[I-1] + (SKP_int32)NLSF_Q15[I], 1 ),
+                min_center_Q15, max_center_Q15 );
+            NLSF_Q15[I-1] = center_freq_Q15 - SKP_RSHIFT( NDeltaMin_Q15[I], 1 );
+            NLSF_Q15[I] = NLSF_Q15[I-1] + NDeltaMin_Q15[I];
+        }
+    }
+
+    /* Safe and simple fall back method, which is less ideal than the above */
+    if( loops == MAX_LOOPS )
+    {
+        /* Insertion sort (fast for already almost sorted arrays):   */
+        /* Best case:  O(n)   for an already sorted array            */
+        /* Worst case: O(n^2) for an inversely sorted array          */
+        SKP_Silk_insertion_sort_increasing_all_values(&NLSF_Q15[0], L);
+            
+        /* First NLSF should be no less than NDeltaMin[0] */
+        NLSF_Q15[0] = SKP_max_int( NLSF_Q15[0], NDeltaMin_Q15[0] );
+        
+        /* Keep delta_min distance between the NLSFs */
+        for( i = 1; i < L; i++ )
+            NLSF_Q15[i] = SKP_max_int( NLSF_Q15[i], NLSF_Q15[i-1] + NDeltaMin_Q15[i] );
+
+        /* Last NLSF should be no higher than 1 - NDeltaMin[L] */
+        NLSF_Q15[L-1] = SKP_min_int( NLSF_Q15[L-1], (1<<15) - NDeltaMin_Q15[L] );
+
+        /* Keep NDeltaMin distance between the NLSFs */
+        for( i = L-2; i >= 0; i-- ) 
+            NLSF_Q15[i] = SKP_min_int( NLSF_Q15[i], NLSF_Q15[i+1] - NDeltaMin_Q15[i+1] );
+    }
+}
+
+/* NLSF stabilizer, over multiple input column data vectors */
+void SKP_Silk_NLSF_stabilize_multi(
+          SKP_int        *NLSF_Q15,        /* I/O:  Unstable/stabilized normalized LSF vectors in Q15 [LxN]                 */
+    const SKP_int        *NDeltaMin_Q15,   /* I:    Normalized delta min vector in Q15, NDeltaMin_Q15[L] must be >= 1 [L+1] */
+    const SKP_int         N,               /* I:    Number of input vectors to be stabilized                                */
+    const SKP_int         L                /* I:    NLSF vector dimension                                                   */
+)
+{
+    SKP_int n;
+    
+    /* loop over input data */
+    for( n = 0; n < N; n++ ) {
+        SKP_Silk_NLSF_stabilize( &NLSF_Q15[n * L], NDeltaMin_Q15, L );
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_SigProc_FIX.h
@@ -1,0 +1,767 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+
+#ifndef _SKP_SILK_SIGPROC_FIX_H_
+#define _SKP_SILK_SIGPROC_FIX_H_
+
+#ifdef  __cplusplus
+extern "C"
+{
+#endif
+
+//#define SKP_MACRO_COUNT /* Used to enable WMOPS counting */
+
+#define SKP_Silk_MAX_ORDER_LPC            16                    /* max order of the LPC analysis in schur() and k2a()    */
+#define SKP_Silk_MAX_CORRELATION_LENGTH   640                   /* max input length to the correlation                    */
+#include "SKP_Silk_typedef.h"
+#include <string.h>
+#include <stdlib.h>                                            /* for abs() */
+#include "SKP_Silk_resampler_structs.h"
+
+#	include "SKP_Silk_macros.h"
+
+
+
+/********************************************************************/
+/*                    SIGNAL PROCESSING FUNCTIONS                   */
+/********************************************************************/
+
+/*!
+ * Initialize/reset the resampler state for a given pair of input/output sampling rates 
+*/
+SKP_int SKP_Silk_resampler_init( 
+	SKP_Silk_resampler_state_struct	*S,		    /* I/O: Resampler state 			*/
+	SKP_int32							Fs_Hz_in,	/* I:	Input sampling rate (Hz)	*/
+	SKP_int32							Fs_Hz_out	/* I:	Output sampling rate (Hz)	*/
+);
+
+
+/*!
+ * Clear the states of all resampling filters, without resetting sampling rate ratio 
+ */
+SKP_int SKP_Silk_resampler_clear( 
+	SKP_Silk_resampler_state_struct	*S		    /* I/O: Resampler state 			*/
+);
+
+/*!
+ * Resampler: convert from one sampling rate to another
+ */
+SKP_int SKP_Silk_resampler( 
+	SKP_Silk_resampler_state_struct	*S,		    /* I/O: Resampler state 			*/
+	SKP_int16							out[],	    /* O:	Output signal 				*/
+	const SKP_int16						in[],	    /* I:	Input signal				*/
+	SKP_int32							inLen	    /* I:	Number of input samples		*/
+);
+
+/*!
+ Upsample 2x, low quality 
+ */
+void SKP_Silk_resampler_up2(
+    SKP_int32                           *S,         /* I/O: State vector [ 2 ]          */
+    SKP_int16                           *out,       /* O:   Output signal [ 2 * len ]   */
+    const SKP_int16                     *in,        /* I:   Input signal [ len ]        */
+    SKP_int32                           len         /* I:   Number of INPUT samples     */
+);
+
+/*!
+* Downsample 2x, mediocre quality 
+*/
+void SKP_Silk_resampler_down2(
+    SKP_int32                           *S,         /* I/O: State vector [ 2 ]          */
+    SKP_int16                           *out,       /* O:   Output signal [ len ]       */
+    const SKP_int16                     *in,        /* I:   Input signal [ 2 * len ]    */
+    SKP_int32                           len         /* I:   Number of OUTPUT samples    */
+);
+
+
+/*!
+ * Downsample by a factor 2/3, low quality
+*/
+void SKP_Silk_resampler_down2_3(
+    SKP_int32                           *S,         /* I/O: State vector [ 6 ]                  */
+    SKP_int16                           *out,       /* O:   Output signal [ floor(2*inLen/3) ]  */
+    const SKP_int16                     *in,        /* I:   Input signal [ inLen ]              */
+    SKP_int32                           inLen       /* I:   Number of input samples             */
+);
+
+/*!
+ * Downsamples by a factor 3, low quality
+*/
+void SKP_Silk_resampler_down3(
+    SKP_int32                           *S,         /* I/O: State vector [ 8 ]                  */
+    SKP_int16                           *out,       /* O:   Output signal [ floor(inLen/3) ]    */
+    const SKP_int16                     *in,        /* I:   Input signal [ inLen ]              */
+    SKP_int32                           inLen       /* I:   Number of input samples             */
+);
+
+/*! 
+ * First order low-pass filter, with input as SKP_int16, running at 48 kHz 
+ */
+void SKP_Silk_lowpass_short(
+    const SKP_int16      *in,           /* I:   Q15 48 kHz signal; [len]    */
+    SKP_int32            *S,            /* I/O: Q25 state; length = 1       */
+    SKP_int32            *out,          /* O:   Q25 48 kHz signal; [len]    */
+    const SKP_int32      len            /* O:   Signal length               */
+);
+
+/*! 
+ * First order low-pass filter, with input as SKP_int32, running at 48 kHz 
+ */
+void SKP_Silk_lowpass_int(
+    const SKP_int32      *in,           /* I:   Q25 48 kHz signal; length = len  */
+    SKP_int32            *S,            /* I/O: Q25 state; length = 1            */
+    SKP_int32            *out,          /* O:   Q25 48 kHz signal; length = len  */
+    const SKP_int32      len            /* I:   Number of samples                */
+);
+
+/*! 
+ * First-order allpass filter 
+ */
+void SKP_Silk_allpass_int(
+    const SKP_int32      *in,          /* I:   Q25 input signal [len]               */
+    SKP_int32            *S,           /* I/O: Q25 state [1]                        */
+    SKP_int              A,            /* I:   Q15 coefficient    (0 <= A < 32768)  */
+    SKP_int32            *out,         /* O:   Q25 output signal [len]              */
+    const SKP_int32      len           /* I:   Number of samples                    */
+);
+
+/*! 
+ * second order ARMA filter
+ * can handle (slowly) varying coefficients 
+ */
+void SKP_Silk_biquad(
+    const SKP_int16      *in,          /* I:   input signal                */
+    const SKP_int16      *B,           /* I:   MA coefficients, Q13 [3]    */
+    const SKP_int16      *A,           /* I:   AR coefficients, Q13 [2]    */
+          SKP_int32      *S,           /* I/O: state vector [2]            */
+          SKP_int16      *out,         /* O:   output signal               */
+    const SKP_int32      len           /* I:   signal length               */
+);
+/*!
+ * second order ARMA filter; 
+ * slower than biquad() but uses more precise coefficients
+ * can handle (slowly) varying coefficients 
+ */
+void SKP_Silk_biquad_alt(
+    const SKP_int16     *in,           /* I:    input signal                 */
+    const SKP_int32     *B_Q28,        /* I:    MA coefficients [3]          */
+    const SKP_int32     *A_Q28,        /* I:    AR coefficients [2]          */
+    SKP_int32           *S,            /* I/O: state vector [2]              */
+    SKP_int16           *out,          /* O:    output signal                */
+    const SKP_int32     len            /* I:    signal length (must be even) */
+);
+
+/*! 
+ * variable order MA filter. Prediction error filter implementation. Coeficients negated and starting with coef to x[n - 1]
+ */
+void SKP_Silk_MA_Prediction(
+    const SKP_int16      *in,          /* I:   Input signal                                */
+    const SKP_int16      *B,           /* I:   MA prediction coefficients, Q12 [order]     */
+    SKP_int32            *S,           /* I/O: State vector [order]                        */
+    SKP_int16            *out,         /* O:   Output signal                               */
+    const SKP_int32      len,          /* I:   Signal length                               */
+    const SKP_int32      order         /* I:  Filter order                                 */
+);
+
+void SKP_Silk_MA_Prediction_Q13(
+    const SKP_int16      *in,          /* I:   input signal                                */
+    const SKP_int16      *B,           /* I:   MA prediction coefficients, Q13 [order]     */
+    SKP_int32            *S,           /* I/O: state vector [order]                        */
+    SKP_int16            *out,         /* O:   output signal                               */
+    SKP_int32            len,          /* I:   signal length                               */
+    SKP_int32            order         /* I:   filter order                                */
+);
+
+/*!
+ * 16th order AR filter for LPC synthesis, coefficients are in Q12
+ */
+void SKP_Silk_LPC_synthesis_order16(
+    const SKP_int16      *in,          /* I:   excitation signal                            */
+    const SKP_int16      *A_Q12,       /* I:   AR coefficients [16], between -8_Q0 and 8_Q0 */
+    const SKP_int32      Gain_Q26,     /* I:   gain                                         */
+          SKP_int32      *S,           /* I/O: state vector [16]                            */
+          SKP_int16      *out,         /* O:   output signal                                */
+    const SKP_int32      len           /* I:   signal length, must be multiple of 16        */
+);
+
+/* variable order MA prediction error filter. */
+/* Inverse filter of SKP_Silk_LPC_synthesis_filter */
+void SKP_Silk_LPC_analysis_filter(
+    const SKP_int16      *in,          /* I:   Input signal                                */
+    const SKP_int16      *B,           /* I:   MA prediction coefficients, Q12 [order]     */
+    SKP_int16            *S,           /* I/O: State vector [order]                        */
+    SKP_int16            *out,         /* O:   Output signal                               */
+    const SKP_int32      len,          /* I:   Signal length                               */
+    const SKP_int32      Order         /* I:   Filter order                                */
+);
+
+/* even order AR filter */
+void SKP_Silk_LPC_synthesis_filter(
+    const SKP_int16      *in,          /* I:   excitation signal                               */
+    const SKP_int16      *A_Q12,       /* I:   AR coefficients [Order], between -8_Q0 and 8_Q0 */
+    const SKP_int32      Gain_Q26,     /* I:   gain                                            */
+    SKP_int32            *S,           /* I/O: state vector [Order]                            */
+    SKP_int16            *out,         /* O:   output signal                                   */
+    const SKP_int32      len,          /* I:   signal length                                   */
+    const SKP_int        Order         /* I:   filter order, must be even                      */
+);
+
+/* Chirp (bandwidth expand) LP AR filter */
+void SKP_Silk_bwexpander( 
+    SKP_int16            *ar,          /* I/O  AR filter to be expanded (without leading 1)    */
+    const SKP_int        d,            /* I    Length of ar                                    */
+    SKP_int32            chirp_Q16     /* I    Chirp factor (typically in the range 0 to 1)    */
+);
+
+/* Chirp (bandwidth expand) LP AR filter */
+void SKP_Silk_bwexpander_32( 
+    SKP_int32            *ar,          /* I/O  AR filter to be expanded (without leading 1)    */
+    const SKP_int        d,            /* I    Length of ar                                    */
+    SKP_int32            chirp_Q16     /* I    Chirp factor in Q16                             */
+);
+
+/* Compute inverse of LPC prediction gain, and                           */
+/* test if LPC coefficients are stable (all poles within unit circle)    */
+SKP_int SKP_Silk_LPC_inverse_pred_gain( /* O:  Returns 1 if unstable, otherwise 0          */
+    SKP_int32            *invGain_Q30,  /* O:  Inverse prediction gain, Q30 energy domain  */
+    const SKP_int16      *A_Q12,        /* I:  Prediction coefficients, Q12 [order]        */
+    const SKP_int        order          /* I:  Prediction order                            */
+);
+
+SKP_int SKP_Silk_LPC_inverse_pred_gain_Q24( /* O:   Returns 1 if unstable, otherwise 0      */
+    SKP_int32           *invGain_Q30,   /* O:   Inverse prediction gain, Q30 energy domain  */
+    const SKP_int32     *A_Q24,         /* I:   Prediction coefficients, Q24 [order]        */
+    const SKP_int       order           /* I:   Prediction order                            */
+);
+
+/* split signal in two decimated bands using first-order allpass filters */
+void SKP_Silk_ana_filt_bank_1(
+    const SKP_int16      *in,           /* I:   Input signal [N]        */
+    SKP_int32            *S,            /* I/O: State vector [2]        */
+    SKP_int16            *outL,         /* O:   Low band [N/2]          */
+    SKP_int16            *outH,         /* O:   High band [N/2]         */
+    SKP_int32            *scratch,      /* I:   Scratch memory [3*N/2]  */
+    const SKP_int32      N              /* I:   Number of input samples */
+);
+
+/********************************************************************/
+/*                        SCALAR FUNCTIONS                            */
+/********************************************************************/
+
+/* approximation of 128 * log2() (exact inverse of approx 2^() below) */
+/* convert input to a log scale    */
+SKP_int32 SKP_Silk_lin2log(const SKP_int32 inLin);        /* I: input in linear scale        */
+
+/* Approximation of a sigmoid function */
+SKP_int SKP_Silk_sigm_Q15(SKP_int in_Q5);
+
+/* approximation of 2^() (exact inverse of approx log2() above) */
+/* convert input to a linear scale    */ 
+SKP_int32 SKP_Silk_log2lin(const SKP_int32 inLog_Q7);    /* I: input on log scale */ 
+
+/* Function that returns the maximum absolut value of the input vector */
+SKP_int16 SKP_Silk_int16_array_maxabs(  /* O   Maximum absolute value, max: 2^15-1   */
+    const SKP_int16     *vec,           /* I   Input vector  [len]                   */ 
+    const SKP_int32     len             /* I   Length of input vector                */
+);
+
+/* Compute number of bits to right shift the sum of squares of a vector    */
+/* of int16s to make it fit in an int32                                    */
+void SKP_Silk_sum_sqr_shift(
+    SKP_int32           *energy,        /* O   Energy of x, after shifting to the right            */
+    SKP_int             *shift,         /* O   Number of bits right shift applied to energy        */
+    const SKP_int16     *x,             /* I   Input vector                                        */
+    SKP_int             len             /* I   Length of input vector                              */
+);
+
+/* Calculates the reflection coefficients from the correlation sequence    */
+/* Faster than schur64(), but much less accurate.                          */
+/* Uses SMLAWB(), requiring armv5E and higher.                             */
+void SKP_Silk_schur(
+    SKP_int16           *rc_Q15,        /* O:  reflection coefficients [order] Q15         */
+    const SKP_int32     *c,             /* I:  correlations [order+1]                      */
+    const SKP_int32     order           /* I:  prediction order                            */
+);
+
+/* Calculates the reflection coefficients from the correlation sequence    */
+/* Slower than schur(), but more accurate.                                 */
+/* Uses SMULL(), available on armv4                                        */
+SKP_int32 SKP_Silk_schur64(             /* O:  returns residual energy                     */
+    SKP_int32           rc_Q16[],       /* O:  Reflection coefficients [order] Q16         */
+    const SKP_int32     c[],            /* I:  Correlations [order+1]                      */
+    SKP_int32           order           /* I:  Prediction order                            */
+);
+
+/* Step up function, converts reflection coefficients to prediction coefficients */
+void SKP_Silk_k2a(
+    SKP_int32           *A_Q24,         /* O:  Prediction coefficients [order] Q24         */
+    const SKP_int16     *rc_Q15,        /* I:  Reflection coefficients [order] Q15         */
+    const SKP_int32     order           /* I:  Prediction order                            */
+);
+
+/* Step up function, converts reflection coefficients to prediction coefficients */
+void SKP_Silk_k2a_Q16(
+    SKP_int32           *A_Q24,         /* O:  Prediction coefficients [order] Q24         */
+    const SKP_int32     *rc_Q16,        /* I:  Reflection coefficients [order] Q16         */
+    const SKP_int32     order           /* I:  Prediction order                            */
+);
+
+/* Apply sine window to signal vector.                                      */
+/* Window types:                                                            */
+/*    0 -> sine window from 0 to pi                                         */
+/*    1 -> sine window from 0 to pi/2                                       */
+/*    2 -> sine window from pi/2 to pi                                      */
+/* every other sample of window is linearly interpolated, for speed         */
+void SKP_Silk_apply_sine_window(
+    SKP_int16           px_win[],       /* O  Pointer to windowed signal                  */
+    const SKP_int16     px[],           /* I  Pointer to input signal                     */
+    const SKP_int       win_type,       /* I  Selects a window type                       */
+    const SKP_int       length          /* I  Window length, multiple of 4                */
+);
+
+/* Compute autocorrelation */
+void SKP_Silk_autocorr( 
+    SKP_int32           *results,       /* O  Result (length correlationCount)            */
+    SKP_int             *scale,         /* O  Scaling of the correlation vector           */
+    const SKP_int16     *inputData,     /* I  Input data to correlate                     */
+    const SKP_int       inputDataSize,  /* I  Length of input                             */
+    const SKP_int       correlationCount /* I  Number of correlation taps to compute      */
+);
+
+/* Pitch estimator */
+#define SKP_Silk_PE_MIN_COMPLEX        0
+#define SKP_Silk_PE_MID_COMPLEX        1
+#define SKP_Silk_PE_MAX_COMPLEX        2
+
+void SKP_Silk_decode_pitch(
+    SKP_int         lagIndex,                        /* I                             */
+    SKP_int         contourIndex,                    /* O                             */
+    SKP_int         pitch_lags[],                    /* O 4 pitch values              */
+    const SKP_int   Fs_kHz,                          /* I sampling frequency (kHz)    */
+    const SKP_int   nb_subfr                         /* I number of sub frames        */
+);
+
+SKP_int SKP_Silk_pitch_analysis_core(  /* O    Voicing estimate: 0 voiced, 1 unvoiced                        */
+    const SKP_int16  *signal,            /* I    Signal of length PE_FRAME_LENGTH_MS*Fs_kHz           */
+    SKP_int          *pitch_out,         /* O    4 pitch lag values                                          */
+    SKP_int          *lagIndex,          /* O    Lag Index                                                   */
+    SKP_int          *contourIndex,      /* O    Pitch contour Index                                         */
+    SKP_int          *LTPCorr_Q15,       /* I/O  Normalized correlation; input: value from previous frame    */
+    SKP_int          prevLag,            /* I    Last lag of previous frame; set to zero is unvoiced         */
+    const SKP_int32  search_thres1_Q16,  /* I    First stage threshold for lag candidates 0 - 1              */
+    const SKP_int    search_thres2_Q15,  /* I    Final threshold for lag candidates 0 - 1                    */
+    const SKP_int    Fs_kHz,             /* I    Sample frequency (kHz)                                      */
+    const SKP_int    complexity,         /* I    Complexity setting, 0-2, where 2 is highest                 */
+    const SKP_int    nb_subfr            /* I    number of 5 ms subframes                                    */
+);
+
+/* parameter defining the size and accuracy of the piecewise linear    */
+/* cosine approximatin table.                                        */
+
+#define LSF_COS_TAB_SZ_FIX      128
+/* rom table with cosine values */
+extern const SKP_int SKP_Silk_LSFCosTab_FIX_Q12[ LSF_COS_TAB_SZ_FIX + 1 ];
+
+void SKP_Silk_LPC_fit(
+          SKP_int16    *a_QQ,            /* O    stabilized LPC vector, Q(24-rshift) [L]         */
+          SKP_int32    *a_Q24,           /* I    LPC vector [L]                                  */
+    const SKP_int      QQ,               /* I    Q domain of output LPC vector                   */
+    const SKP_int      L                 /* I    Number of LPC parameters in the input vector    */
+);
+
+/* Compute Normalized Line Spectral Frequencies (NLSFs) from whitening filter coefficients        */
+/* If not all roots are found, the a_Q16 coefficients are bandwidth expanded until convergence.    */
+void SKP_Silk_A2NLSF(
+    SKP_int            *NLSF,            /* O    Normalized Line Spectral Frequencies, Q15 (0 - (2^15-1)), [d] */
+    SKP_int32          *a_Q16,           /* I/O  Monic whitening filter coefficients in Q16 [d]                */
+    const SKP_int      d                 /* I    Filter order (must be even)                                   */
+);
+
+/* compute whitening filter coefficients from normalized line spectral frequencies */
+void SKP_Silk_NLSF2A(
+    SKP_int16          *a,               /* o    monic whitening filter coefficients in Q12,  [d]    */
+    const SKP_int      *NLSF,            /* i    normalized line spectral frequencies in Q15, [d]    */
+    const SKP_int      d                 /* i    filter order (should be even)                       */
+);
+
+void SKP_Silk_insertion_sort_increasing(
+    SKP_int32            *a,            /* I/O   Unsorted / Sorted vector                */
+    SKP_int              *index,        /* O:    Index vector for the sorted elements    */
+    const SKP_int        L,             /* I:    Vector length                           */
+    const SKP_int        K              /* I:    Number of correctly sorted positions    */
+);
+
+void SKP_Silk_insertion_sort_decreasing(
+    SKP_int              *a,            /* I/O:  Unsorted / Sorted vector                */
+    SKP_int              *index,        /* O:    Index vector for the sorted elements    */
+    const SKP_int        L,             /* I:    Vector length                           */
+    const SKP_int        K              /* I:    Number of correctly sorted positions    */
+);
+
+void SKP_Silk_insertion_sort_decreasing_int16(
+    SKP_int16            *a,            /* I/O:  Unsorted / Sorted vector                */
+    SKP_int              *index,        /* O:    Index vector for the sorted elements    */
+    const SKP_int        L,             /* I:    Vector length                           */
+    const SKP_int        K              /* I:    Number of correctly sorted positions    */
+);
+
+void SKP_Silk_insertion_sort_increasing_all_values(
+     SKP_int             *a,            /* I/O:  Unsorted / Sorted vector                */
+     const SKP_int       L              /* I:    Vector length                           */
+);
+
+/* NLSF stabilizer, for a single input data vector */
+void SKP_Silk_NLSF_stabilize(
+          SKP_int        *NLSF_Q15,      /* I/O:  Unstable/stabilized normalized LSF vector in Q15 [L]                    */
+    const SKP_int        *NDeltaMin_Q15, /* I:    Normalized delta min vector in Q15, NDeltaMin_Q15[L] must be >= 1 [L+1] */
+    const SKP_int        L               /* I:    Number of NLSF parameters in the input vector                           */
+);
+
+/* NLSF stabilizer, over multiple input column data vectors */
+void SKP_Silk_NLSF_stabilize_multi(
+          SKP_int        *NLSF_Q15,      /* I/O:  Unstable/stabilized normalized LSF vectors in Q15 [LxN]                 */
+    const SKP_int        *NDeltaMin_Q15, /* I:    Normalized delta min vector in Q15, NDeltaMin_Q15[L] must be >= 1 [L+1] */
+    const SKP_int        N,              /* I:    Number of input vectors to be stabilized                                */
+    const SKP_int        L               /* I:    NLSF vector dimension                                                   */
+);
+
+/* Laroia low complexity NLSF weights */
+void SKP_Silk_NLSF_VQ_weights_laroia(
+    SKP_int              *pNLSFW_Q6,     /* O:    Pointer to input vector weights            [D x 1]       */
+    const SKP_int        *pNLSF_Q15,     /* I:    Pointer to input vector                    [D x 1]       */
+    const SKP_int        D               /* I:    Input vector dimension (even)                            */
+);
+
+/* Compute reflection coefficients from input signal */
+void SKP_Silk_burg_modified(        
+    SKP_int32            *res_nrg,           /* O   residual energy                                                 */
+    SKP_int              *res_nrgQ,          /* O   residual energy Q value                                         */
+    SKP_int32            A_Q16[],            /* O   prediction coefficients (length order)                          */
+    const SKP_int16      x[],                /* I   input signal, length: nb_subfr * ( D + subfr_length )           */
+    const SKP_int        subfr_length,       /* I   input signal subframe length (including D preceeding samples)   */
+    const SKP_int        nb_subfr,           /* I   number of subframes stacked in x                                */
+    const SKP_int32      WhiteNoiseFrac_Q32, /* I   fraction added to zero-lag autocorrelation                      */
+    const SKP_int        D                   /* I   order                                                           */
+);
+
+/* Multiply a vector by a constant */
+void SKP_Silk_scale_vector16_Q14( 
+    SKP_int16            *data1, 
+    SKP_int              gain_Q14,           /* Gain in Q14 */ 
+    SKP_int              dataSize
+);
+
+/* Copy and multiply a vector by a constant */
+void SKP_Silk_scale_copy_vector16( 
+    SKP_int16            *data_out, 
+    const SKP_int16      *data_in, 
+    SKP_int32            gain_Q16,           /* I:   gain in Q16   */
+    const SKP_int        dataSize            /* I:   length        */
+);
+
+void SKP_Silk_scale_vector32_16_Q14( 
+    SKP_int32            *data1,             /* I/O: Q0/Q0         */
+    SKP_int              gain_Q14,           /* I:   Q14           */
+    SKP_int              dataSize            /* I:   length        */
+);
+
+/* Multiply a vector by a constant, does not saturate output data */
+void SKP_Silk_scale_vector32_Q16( 
+    SKP_int32            *data1,             /* I/O: Q0/Q0         */
+    SKP_int32            gain_Q16,           /* I:   gain in Q16 ( SKP_int16_MIN <= gain_Q16 <= SKP_int16_MAX + 65536 ) */
+    const SKP_int        dataSize            /* I:   length        */
+);
+
+/* Some for the LTP related function requires Q26 to work.*/
+void SKP_Silk_scale_vector32_Q26_lshift_18( 
+    SKP_int32            *data1,             /* I/O: Q0/Q18        */
+    SKP_int32            gain_Q26,           /* I:   Q26           */
+    SKP_int              dataSize            /* I:   length        */
+);
+
+/********************************************************************/
+/*                        INLINE ARM MATH                             */
+/********************************************************************/
+
+/*    return sum(inVec1[i]*inVec2[i])    */
+/*    inVec1 and inVec2 should be increasing ordered, and starting address should be 4 byte aligned. (a factor of 4)*/
+SKP_int32 SKP_Silk_inner_prod_aligned(
+    const SKP_int16* const inVec1,           /* I   input vector 1    */ 
+    const SKP_int16* const inVec2,           /* I   input vector 2    */
+    const SKP_int          len               /* I   vector lengths    */
+);
+
+SKP_int32 SKP_Silk_inner_prod16_aligned_sat(
+    const SKP_int16* const inVec1,           /* I   input vector 1  */
+    const SKP_int16* const inVec2,           /* I   input vector 2  */
+    const SKP_int          len               /* I   vector lengths  */
+);
+
+SKP_int64 SKP_Silk_inner_prod_aligned_64(
+    const SKP_int32        *inVec1,          /* I   input vector 1    */
+    const SKP_int32        *inVec2,          /* I   input vector 2    */
+    const SKP_int          len               /* I   vector lengths    */
+);
+
+SKP_int64 SKP_Silk_inner_prod16_aligned_64(
+    const SKP_int16        *inVec1,          /* I   input vector 1    */
+    const SKP_int16        *inVec2,          /* I   input vector 2    */
+    const SKP_int          len               /* I   vector lengths    */
+);
+/********************************************************************/
+/*                                MACROS                            */
+/********************************************************************/
+
+/* Rotate a32 right by 'rot' bits. Negative rot values result in rotating
+   left. Output is 32bit int.
+   Note: contemporary compilers recognize the C expression below and
+   compile it into a 'ror' instruction if available. No need for inline ASM! */
+SKP_INLINE SKP_int32 SKP_ROR32( SKP_int32 a32, SKP_int rot )
+{
+    SKP_uint32 x = (SKP_uint32) a32;
+    SKP_uint32 r = (SKP_uint32) rot;
+    SKP_uint32 m = (SKP_uint32) -rot;
+    if(rot <= 0)
+        return (SKP_int32) ((x << m) | (x >> (32 - m)));
+    else
+        return (SKP_int32) ((x << (32 - r)) | (x >> r));
+}
+
+/* Define 4-byte aligned array of SKP_int16 */
+#define SKP_array_of_int16_4_byte_aligned( arrayName, nElements )    \
+    SKP_int32 dummy_int32 ## arrayName;                                \
+    SKP_int16 arrayName[ (nElements) ]
+
+/* Useful Macros that can be adjusted to other platforms */
+#define SKP_memcpy(a, b, c)                memcpy((a), (b), (c))    /* Dest, Src, ByteCount */
+#define SKP_memset(a, b, c)                memset((a), (b), (c))    /* Dest, value, ByteCount */
+#define SKP_memmove(a, b, c)               memmove((a), (b), (c))    /* Dest, Src, ByteCount */
+/* fixed point macros */
+
+// (a32 * b32) output have to be 32bit int
+#define SKP_MUL(a32, b32)                  ((a32) * (b32))
+
+// (a32 * b32) output have to be 32bit uint
+#define SKP_MUL_uint(a32, b32)             SKP_MUL(a32, b32)
+
+// a32 + (b32 * c32) output have to be 32bit int
+#define SKP_MLA(a32, b32, c32)             SKP_ADD32((a32),((b32) * (c32)))
+
+// a32 + (b32 * c32) output have to be 32bit uint
+#define SKP_MLA_uint(a32, b32, c32)        SKP_MLA(a32, b32, c32)
+
+// ((a32 >> 16)  * (b32 >> 16)) output have to be 32bit int
+#define SKP_SMULTT(a32, b32)               (((a32) >> 16) * ((b32) >> 16))
+
+// a32 + ((a32 >> 16)  * (b32 >> 16)) output have to be 32bit int
+#define SKP_SMLATT(a32, b32, c32)          SKP_ADD32((a32),((b32) >> 16) * ((c32) >> 16))
+
+#define SKP_SMLALBB(a64, b16, c16)         SKP_ADD64((a64),(SKP_int64)((SKP_int32)(b16) * (SKP_int32)(c16)))
+
+// (a32 * b32)
+#define SKP_SMULL(a32, b32)                ((SKP_int64)(a32) * /*(SKP_int64)*/(b32))
+
+// multiply-accumulate macros that allow overflow in the addition (ie, no asserts in debug mode)
+#define SKP_MLA_ovflw(a32, b32, c32)       SKP_MLA(a32, b32, c32)
+#ifndef SKP_SMLABB_ovflw
+#    define SKP_SMLABB_ovflw(a32, b32, c32)    SKP_SMLABB(a32, b32, c32)
+#endif
+#define SKP_SMLABT_ovflw(a32, b32, c32)    SKP_SMLABT(a32, b32, c32)
+#define SKP_SMLATT_ovflw(a32, b32, c32)    SKP_SMLATT(a32, b32, c32)
+#define SKP_SMLAWB_ovflw(a32, b32, c32)    SKP_SMLAWB(a32, b32, c32)
+#define SKP_SMLAWT_ovflw(a32, b32, c32)    SKP_SMLAWT(a32, b32, c32)
+
+#define SKP_DIV64_32(a64, b32)             ((a64)/(b32))        /* TODO: rewrite it as a set of SKP_DIV32.*/
+
+#define SKP_DIV32_16(a32, b16)             ((SKP_int32)((a32) / (b16)))
+#define SKP_DIV32(a32, b32)                ((SKP_int32)((a32) / (b32)))
+
+// These macros enables checking for overflow in SKP_Silk_API_Debug.h
+#define SKP_ADD16(a, b)                    ((a) + (b))
+#define SKP_ADD32(a, b)                    ((a) + (b))
+#define SKP_ADD64(a, b)                    ((a) + (b))
+
+#define SKP_SUB16(a, b)                    ((a) - (b))
+#define SKP_SUB32(a, b)                    ((a) - (b))
+#define SKP_SUB64(a, b)                    ((a) - (b))
+
+#define SKP_SAT8(a)                        ((a) > SKP_int8_MAX ? SKP_int8_MAX  : \
+                                           ((a) < SKP_int8_MIN ? SKP_int8_MIN  : (a)))
+#define SKP_SAT16(a)                       ((a) > SKP_int16_MAX ? SKP_int16_MAX : \
+                                           ((a) < SKP_int16_MIN ? SKP_int16_MIN : (a)))
+#define SKP_SAT32(a)                       ((a) > SKP_int32_MAX ? SKP_int32_MAX : \
+                                           ((a) < SKP_int32_MIN ? SKP_int32_MIN : (a)))
+
+#define SKP_CHECK_FIT8(a)                  (a)
+#define SKP_CHECK_FIT16(a)                 (a)
+#define SKP_CHECK_FIT32(a)                 (a)
+
+#define SKP_ADD_SAT16(a, b)                (SKP_int16)SKP_SAT16( SKP_ADD32( (SKP_int32)(a), (b) ) )
+#define SKP_ADD_SAT64(a, b)                ((((a) + (b)) & 0x8000000000000000LL) == 0 ?                            \
+                                           ((((a) & (b)) & 0x8000000000000000LL) != 0 ? SKP_int64_MIN : (a)+(b)) :    \
+                                           ((((a) | (b)) & 0x8000000000000000LL) == 0 ? SKP_int64_MAX : (a)+(b)) )
+
+#define SKP_SUB_SAT16(a, b)                (SKP_int16)SKP_SAT16( SKP_SUB32( (SKP_int32)(a), (b) ) )
+#define SKP_SUB_SAT64(a, b)                ((((a)-(b)) & 0x8000000000000000LL) == 0 ?                                                    \
+                                           (( (a) & ((b)^0x8000000000000000LL) & 0x8000000000000000LL) ? SKP_int64_MIN : (a)-(b)) :    \
+                                           ((((a)^0x8000000000000000LL) & (b)  & 0x8000000000000000LL) ? SKP_int64_MAX : (a)-(b)) )
+
+/* Saturation for positive input values */ 
+#define SKP_POS_SAT32(a)                   ((a) > SKP_int32_MAX ? SKP_int32_MAX : (a))
+
+/* Add with saturation for positive input values */ 
+#define SKP_ADD_POS_SAT8(a, b)             ((((a)+(b)) & 0x80)                 ? SKP_int8_MAX  : ((a)+(b)))
+#define SKP_ADD_POS_SAT16(a, b)            ((((a)+(b)) & 0x8000)               ? SKP_int16_MAX : ((a)+(b)))
+#define SKP_ADD_POS_SAT32(a, b)            ((((a)+(b)) & 0x80000000)           ? SKP_int32_MAX : ((a)+(b)))
+#define SKP_ADD_POS_SAT64(a, b)            ((((a)+(b)) & 0x8000000000000000LL) ? SKP_int64_MAX : ((a)+(b)))
+
+#define SKP_LSHIFT8(a, shift)              ((a)<<(shift))                // shift >= 0, shift < 8
+#define SKP_LSHIFT16(a, shift)             ((a)<<(shift))                // shift >= 0, shift < 16
+#define SKP_LSHIFT32(a, shift)             ((a)<<(shift))                // shift >= 0, shift < 32
+#define SKP_LSHIFT64(a, shift)             ((a)<<(shift))                // shift >= 0, shift < 64
+#define SKP_LSHIFT(a, shift)               SKP_LSHIFT32(a, shift)        // shift >= 0, shift < 32
+
+#define SKP_RSHIFT8(a, shift)              ((a)>>(shift))                // shift >= 0, shift < 8
+#define SKP_RSHIFT16(a, shift)             ((a)>>(shift))                // shift >= 0, shift < 16
+#define SKP_RSHIFT32(a, shift)             ((a)>>(shift))                // shift >= 0, shift < 32
+#define SKP_RSHIFT64(a, shift)             ((a)>>(shift))                // shift >= 0, shift < 64
+#define SKP_RSHIFT(a, shift)               SKP_RSHIFT32(a, shift)        // shift >= 0, shift < 32
+
+/* saturates before shifting */
+#define SKP_LSHIFT_SAT16(a, shift)         (SKP_LSHIFT16( SKP_LIMIT( (a), SKP_RSHIFT16( SKP_int16_MIN, (shift) ),    \
+                                                                          SKP_RSHIFT16( SKP_int16_MAX, (shift) ) ), (shift) ))
+#define SKP_LSHIFT_SAT32(a, shift)         (SKP_LSHIFT32( SKP_LIMIT( (a), SKP_RSHIFT32( SKP_int32_MIN, (shift) ),    \
+                                                                          SKP_RSHIFT32( SKP_int32_MAX, (shift) ) ), (shift) ))
+
+#define SKP_LSHIFT_ovflw(a, shift)        ((a)<<(shift))        // shift >= 0, allowed to overflow
+#define SKP_LSHIFT_uint(a, shift)         ((a)<<(shift))        // shift >= 0
+#define SKP_RSHIFT_uint(a, shift)         ((a)>>(shift))        // shift >= 0
+
+#define SKP_ADD_LSHIFT(a, b, shift)       ((a) + SKP_LSHIFT((b), (shift)))            // shift >= 0
+#define SKP_ADD_LSHIFT32(a, b, shift)     SKP_ADD32((a), SKP_LSHIFT32((b), (shift)))    // shift >= 0
+#define SKP_ADD_LSHIFT_uint(a, b, shift)  ((a) + SKP_LSHIFT_uint((b), (shift)))        // shift >= 0
+#define SKP_ADD_RSHIFT(a, b, shift)       ((a) + SKP_RSHIFT((b), (shift)))            // shift >= 0
+#define SKP_ADD_RSHIFT32(a, b, shift)     SKP_ADD32((a), SKP_RSHIFT32((b), (shift)))    // shift >= 0
+#define SKP_ADD_RSHIFT_uint(a, b, shift)  ((a) + SKP_RSHIFT_uint((b), (shift)))        // shift >= 0
+#define SKP_SUB_LSHIFT32(a, b, shift)     SKP_SUB32((a), SKP_LSHIFT32((b), (shift)))    // shift >= 0
+#define SKP_SUB_RSHIFT32(a, b, shift)     SKP_SUB32((a), SKP_RSHIFT32((b), (shift)))    // shift >= 0
+
+/* Requires that shift > 0 */
+#define SKP_RSHIFT_ROUND(a, shift)        ((shift) == 1 ? ((a) >> 1) + ((a) & 1) : (((a) >> ((shift) - 1)) + 1) >> 1)
+#define SKP_RSHIFT_ROUND64(a, shift)      ((shift) == 1 ? ((a) >> 1) + ((a) & 1) : (((a) >> ((shift) - 1)) + 1) >> 1)
+
+/* Number of rightshift required to fit the multiplication */
+#define SKP_NSHIFT_MUL_32_32(a, b)        ( -(31- (32-SKP_Silk_CLZ32(SKP_abs(a)) + (32-SKP_Silk_CLZ32(SKP_abs(b))))) )
+#define SKP_NSHIFT_MUL_16_16(a, b)        ( -(15- (16-SKP_Silk_CLZ16(SKP_abs(a)) + (16-SKP_Silk_CLZ16(SKP_abs(b))))) )
+
+
+#define SKP_min(a, b)                     (((a) < (b)) ? (a) : (b)) 
+#define SKP_max(a, b)                     (((a) > (b)) ? (a) : (b))
+
+/* Macro to convert floating-point constants to fixed-point */
+#define SKP_FIX_CONST( C, Q )             ((SKP_int32)((C) * (1 << (Q)) + 0.5))
+
+/* SKP_min() versions with typecast in the function call */
+SKP_INLINE SKP_int SKP_min_int(SKP_int a, SKP_int b)
+{
+    return (((a) < (b)) ? (a) : (b));
+}
+SKP_INLINE SKP_int16 SKP_min_16(SKP_int16 a, SKP_int16 b)
+{
+    return (((a) < (b)) ? (a) : (b));
+}
+SKP_INLINE SKP_int32 SKP_min_32(SKP_int32 a, SKP_int32 b)
+{
+    return (((a) < (b)) ? (a) : (b));
+}
+SKP_INLINE SKP_int64 SKP_min_64(SKP_int64 a, SKP_int64 b)
+{
+    return (((a) < (b)) ? (a) : (b));
+}
+
+/* SKP_min() versions with typecast in the function call */
+SKP_INLINE SKP_int SKP_max_int(SKP_int a, SKP_int b)
+{
+    return (((a) > (b)) ? (a) : (b));
+}
+SKP_INLINE SKP_int16 SKP_max_16(SKP_int16 a, SKP_int16 b)
+{
+    return (((a) > (b)) ? (a) : (b));
+}
+SKP_INLINE SKP_int32 SKP_max_32(SKP_int32 a, SKP_int32 b)
+{
+    return (((a) > (b)) ? (a) : (b));
+}
+SKP_INLINE SKP_int64 SKP_max_64(SKP_int64 a, SKP_int64 b)
+{
+    return (((a) > (b)) ? (a) : (b));
+}
+
+#define SKP_LIMIT( a, limit1, limit2)    ((limit1) > (limit2) ? ((a) > (limit1) ? (limit1) : ((a) < (limit2) ? (limit2) : (a))) \
+                                                             : ((a) > (limit2) ? (limit2) : ((a) < (limit1) ? (limit1) : (a))))
+
+#define SKP_LIMIT_int SKP_LIMIT
+#define SKP_LIMIT_16 SKP_LIMIT
+#define SKP_LIMIT_32 SKP_LIMIT
+
+//#define SKP_non_neg(a)                 ((a) & ((-(a)) >> (8 * sizeof(a) - 1)))   /* doesn't seem faster than SKP_max(0, a);
+
+#define SKP_abs(a)                       (((a) >  0)  ? (a) : -(a))            // Be careful, SKP_abs returns wrong when input equals to SKP_intXX_MIN
+#define SKP_abs_int(a)                   (((a) ^ ((a) >> (8 * sizeof(a) - 1))) - ((a) >> (8 * sizeof(a) - 1)))
+#define SKP_abs_int32(a)                 (((a) ^ ((a) >> 31)) - ((a) >> 31))
+#define SKP_abs_int64(a)                 (((a) >  0)  ? (a) : -(a))    
+
+#define SKP_sign(a)                      ((a) > 0 ? 1 : ( (a) < 0 ? -1 : 0 ))
+
+#define SKP_sqrt(a)                      (sqrt(a)) 
+
+/* PSEUDO-RANDOM GENERATOR                                                          */
+/* Make sure to store the result as the seed for the next call (also in between     */
+/* frames), otherwise result won't be random at all. When only using some of the    */
+/* bits, take the most significant bits by right-shifting. Do not just mask off     */
+/* the lowest bits.                                                                 */
+#define SKP_RAND(seed)                   (SKP_MLA_ovflw(907633515, (seed), 196314165))
+
+// Add some multiplication functions that can be easily mapped to ARM.
+
+//    SKP_SMMUL: Signed top word multiply. 
+//        ARMv6        2 instruction cycles. 
+//        ARMv3M+        3 instruction cycles. use SMULL and ignore LSB registers.(except xM) 
+//#define SKP_SMMUL(a32, b32)            (SKP_int32)SKP_RSHIFT(SKP_SMLAL(SKP_SMULWB((a32), (b32)), (a32), SKP_RSHIFT_ROUND((b32), 16)), 16)
+// the following seems faster on x86
+#define SKP_SMMUL(a32, b32)              (SKP_int32)SKP_RSHIFT64(SKP_SMULL((a32), (b32)), 32)
+
+#include "SKP_Silk_Inlines.h"
+#include "SKP_Silk_MacroCount.h"
+#include "SKP_Silk_MacroDebug.h"
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_allpass_int.c
@@ -1,0 +1,69 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                        *
+ * SKP_Silk_allpass_int.c                                               *
+ *                                                                        *
+ * First-order allpass filter with                                        *
+ * transfer function:                                                     *
+ *                                                                        *
+ *         A + Z^(-1)                                                     *
+ * H(z) = ------------                                                    *
+ *        1 + A*Z^(-1)                                                    *
+ *                                                                        *
+ * Implemented using minimum multiplier filter design.                    *
+ *                                                                        *
+ * Reference: http://www.univ.trieste.it/~ramponi/teaching/               *
+ * DSP/materiale/Ch6(2).pdf                                               *
+ *                                                                        *
+ * Copyright 2007 (c), Skype Limited                                      *
+ * Date: 070525                                                           *
+ *                                                                        */
+#include "SKP_Silk_SigProc_FIX.h"
+
+
+/* First-order allpass filter */
+void SKP_Silk_allpass_int(
+    const SKP_int32      *in,    /* I:    Q25 input signal [len]               */
+    SKP_int32            *S,     /* I/O:  Q25 state [1]                         */
+    SKP_int              A,      /* I:    Q15 coefficient    (0 <= A < 32768)  */
+    SKP_int32            *out,   /* O:    Q25 output signal [len]              */
+    const SKP_int32      len     /* I:    Number of samples                    */
+)
+{
+    SKP_int32    Y2, X2, S0;
+    SKP_int        k;
+
+    S0 = S[ 0 ];
+    for( k = len - 1; k >= 0; k-- ) {
+        Y2         = *in - S0;
+        X2         = ( Y2 >> 15 ) * A + ( ( ( Y2 & 0x00007FFF ) * A ) >> 15 );
+        ( *out++ ) = S0 + X2;
+        S0         = ( *in++ ) + X2;
+    }
+    S[ 0 ] = S0;
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_ana_filt_bank_1.c
@@ -1,0 +1,80 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                          *
+ * SKP_ana_filt_bank_1.c                                                    *
+ *                                                                          *
+ * Split signal into two decimated bands using first-order allpass filters  *
+ *                                                                          *
+ * Copyright 2006 (c), Skype Limited                                        *
+ * Date: 060221                                                             *
+ *                                                                          */
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Coefficients for 2-band filter bank based on first-order allpass filters */
+// old
+static SKP_int16 A_fb1_20[ 1 ] = {  5394 << 1 };
+static SKP_int16 A_fb1_21[ 1 ] = { 20623 << 1 };        /* wrap-around to negative number is intentional */
+
+/* Split signal into two decimated bands using first-order allpass filters */
+void SKP_Silk_ana_filt_bank_1(
+    const SKP_int16      *in,        /* I:   Input signal [N]        */
+    SKP_int32            *S,         /* I/O: State vector [2]        */
+    SKP_int16            *outL,      /* O:   Low band [N/2]          */
+    SKP_int16            *outH,      /* O:   High band [N/2]         */
+    SKP_int32            *scratch,   /* I:   Scratch memory [3*N/2]  */   // todo: remove - no longer used
+    const SKP_int32      N           /* I:   Number of input samples */
+)
+{
+    SKP_int      k, N2 = SKP_RSHIFT( N, 1 );
+    SKP_int32    in32, X, Y, out_1, out_2;
+
+    /* Internal variables and state are in Q10 format */
+    for( k = 0; k < N2; k++ ) {
+        /* Convert to Q10 */
+        in32 = SKP_LSHIFT( (SKP_int32)in[ 2 * k ], 10 );
+
+        /* All-pass section for even input sample */
+        Y      = SKP_SUB32( in32, S[ 0 ] );
+        X      = SKP_SMLAWB( Y, Y, A_fb1_21[ 0 ] );
+        out_1  = SKP_ADD32( S[ 0 ], X );
+        S[ 0 ] = SKP_ADD32( in32, X );
+
+        /* Convert to Q10 */
+        in32 = SKP_LSHIFT( (SKP_int32)in[ 2 * k + 1 ], 10 );
+
+        /* All-pass section for odd input sample, and add to output of previous section */
+        Y      = SKP_SUB32( in32, S[ 1 ] );
+        X      = SKP_SMULWB( Y, A_fb1_20[ 0 ] );
+        out_2  = SKP_ADD32( S[ 1 ], X );
+        S[ 1 ] = SKP_ADD32( in32, X );
+
+        /* Add/subtract, convert back to int16 and store to output */
+        outL[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( SKP_ADD32( out_2, out_1 ), 11 ) );
+        outH[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SUB32( out_2, out_1 ), 11 ) );
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_apply_sine_window.c
@@ -1,0 +1,90 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Apply sine window to signal vector.                                      */
+/* Window types:                                                            */
+/*    0 -> sine window from 0 to pi                                         */
+/*    1 -> sine window from 0 to pi/2                                       */
+/*    2 -> sine window from pi/2 to pi                                      */
+/* every other sample of window is linearly interpolated, for speed         */
+void SKP_Silk_apply_sine_window(
+    SKP_int16                        px_win[],            /* O    Pointer to windowed signal                  */
+    const SKP_int16                  px[],                /* I    Pointer to input signal                     */
+    const SKP_int                    win_type,            /* I    Selects a window type                       */
+    const SKP_int                    length               /* I    Window length, multiple of 4                */
+)
+{
+    SKP_int   k;
+    SKP_int32 f_Q16, c_Q20, S0_Q16, S1_Q16;
+    /* Length must be multiple of 4 */
+    SKP_assert( ( length & 3 ) == 0 );
+
+    /* Input pointer must be 4-byte aligned */
+    SKP_assert( ( (SKP_int64)px & 3 ) == 0 );
+
+    if( win_type == 0 ) {
+        f_Q16 = SKP_DIV32_16( 411775, length + 1 );        // 411775 = 2 * 65536 * pi
+    } else {
+        f_Q16 = SKP_DIV32_16( 205887, length + 1 );        // 205887 = 65536 * pi
+    }
+
+    /* factor used for cosine approximation */
+    c_Q20 = -SKP_RSHIFT( SKP_MUL( f_Q16, f_Q16 ), 12 );
+
+    /* c_Q20 becomes too large if length is too small */
+    SKP_assert( c_Q20 >= -32768 );
+
+    /* initialize state */
+    if( win_type < 2 ) {
+        /* start from 0 */
+        S0_Q16 = 0;
+        /* approximation of sin(f) */
+        S1_Q16 = f_Q16;
+    } else {
+        /* start from 1 */
+        S0_Q16 = ( 1 << 16 );
+        /* approximation of cos(f) */
+        S1_Q16 = ( 1 << 16 ) + SKP_RSHIFT( c_Q20, 5 );
+    }
+
+
+    /* Uses the recursive equation:   sin(n*f) = 2 * cos(f) * sin((n-1)*f) - sin((n-2)*f)    */
+    /* 4 samples at a time */
+    for( k = 0; k < length; k += 4 ) {
+        px_win[ k ]     = (SKP_int16)SKP_SMULWB( SKP_RSHIFT( S0_Q16 + S1_Q16, 1 ), px[ k ] );
+        px_win[ k + 1 ] = (SKP_int16)SKP_SMULWB( S1_Q16, px[ k + 1] );
+        S0_Q16 = SKP_RSHIFT( SKP_MUL( c_Q20, S1_Q16 ), 20 ) + SKP_LSHIFT( S1_Q16, 1 ) - S0_Q16 + 1;
+        S0_Q16 = SKP_min( S0_Q16, ( 1 << 16 ) );
+
+        px_win[ k + 2 ] = (SKP_int16)SKP_SMULWB( SKP_RSHIFT( S0_Q16 + S1_Q16, 1 ), px[ k + 2] );
+        px_win[ k + 3 ] = (SKP_int16)SKP_SMULWB( S0_Q16, px[ k + 3 ] );
+        S1_Q16 = SKP_RSHIFT( SKP_MUL( c_Q20, S0_Q16 ), 20 ) + SKP_LSHIFT( S0_Q16, 1 ) - S1_Q16;
+        S1_Q16 = SKP_min( S1_Q16, ( 1 << 16 ) );
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_array_maxabs.c
@@ -1,0 +1,69 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_int16_array_maxabs.c                                      *
+ *                                                                      *
+ * Function that returns the maximum absolut value of                   *
+ * the input vector                                                     *
+ *                                                                      *
+ * Copyright 2006 (c), Skype Limited                                    *
+ * Date: 060221                                                         *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Function that returns the maximum absolut value of the input vector */
+#if (! defined(__mips__)) && EMBEDDED_ARM<4
+SKP_int16 SKP_Silk_int16_array_maxabs(    /* O    Maximum absolute value, max: 2^15-1   */
+    const SKP_int16        *vec,            /* I    Input vector  [len]                   */
+    const SKP_int32        len              /* I    Length of input vector                */
+)                    
+{
+    SKP_int32 max = 0, i, lvl = 0, ind;
+
+    ind = len - 1;
+    max = SKP_SMULBB( vec[ ind ], vec[ ind ] );
+    for( i = len - 2; i >= 0; i-- ) {
+        lvl = SKP_SMULBB( vec[ i ], vec[ i ] );
+        if( lvl > max ) {
+            max = lvl;
+            ind = i;
+        }
+    }
+
+    /* Do not return 32768, as it will not fit in an int16 so may lead to problems later on */
+    if( max >= 1073676289 ) { // (2^15-1)^2 = 1073676289
+        return( SKP_int16_MAX );
+    } else {
+        if( vec[ ind ] < 0 ) {
+            return( -vec[ ind ] );
+        } else {
+            return(  vec[ ind ] );
+        }
+    }
+}
+#endif
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_autocorr.c
@@ -1,0 +1,81 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_autocorr.c                                                *
+ *                                                                      *
+ * Calculates the autocorrelation                                       *
+ * The result has 29 non-zero bits for the first correlation, to leave  *
+ * some    room for adding white noise fractions etc.                   *
+ *                                                                      *
+ * Copyright 2008 (c), Skype Limited                                    *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Compute autocorrelation */
+void SKP_Silk_autocorr( 
+    SKP_int32        *results,                   /* O    Result (length correlationCount)            */
+    SKP_int          *scale,                     /* O    Scaling of the correlation vector           */
+    const SKP_int16  *inputData,                 /* I    Input data to correlate                     */
+    const SKP_int    inputDataSize,              /* I    Length of input                             */
+    const SKP_int    correlationCount            /* I    Number of correlation taps to compute       */
+)
+{
+    SKP_int   i, lz, nRightShifts, corrCount;
+    SKP_int64 corr64;
+
+    corrCount = SKP_min_int( inputDataSize, correlationCount );
+
+    /* compute energy (zero-lag correlation) */
+    corr64 = SKP_Silk_inner_prod16_aligned_64( inputData, inputData, inputDataSize );
+
+    /* deal with all-zero input data */
+    corr64 += 1;
+
+    /* number of leading zeros */
+    lz = SKP_Silk_CLZ64( corr64 );
+
+    /* scaling: number of right shifts applied to correlations */
+    nRightShifts = 35 - lz;
+    *scale = nRightShifts;
+
+    if( nRightShifts <= 0 ) {
+        results[ 0 ] = SKP_LSHIFT( (SKP_int32)SKP_CHECK_FIT32( corr64 ), -nRightShifts );
+
+        /* compute remaining correlations based on int32 inner product */
+          for( i = 1; i < corrCount; i++ ) {
+            results[ i ] = SKP_LSHIFT( SKP_Silk_inner_prod_aligned( inputData, inputData + i, inputDataSize - i ), -nRightShifts );
+        }
+    } else {
+        results[ 0 ] = (SKP_int32)SKP_CHECK_FIT32( SKP_RSHIFT64( corr64, nRightShifts ) );
+
+        /* compute remaining correlations based on int64 inner product */
+          for( i = 1; i < corrCount; i++ ) {
+            results[ i ] =  (SKP_int32)SKP_CHECK_FIT32( SKP_RSHIFT64( SKP_Silk_inner_prod16_aligned_64( inputData, inputData + i, inputDataSize - i ), nRightShifts ) );
+        }
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_biquad.c
@@ -1,0 +1,72 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_biquad.c                                                  *
+ *                                                                      *
+ * Second order ARMA filter                                             *
+ * Can handle slowly varying filter coefficients                        *
+ *                                                                      *
+ * Copyright 2006 (c), Skype Limited                                    *
+ * Date: 060221                                                         *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Second order ARMA filter */
+/* Can handle slowly varying filter coefficients */
+void SKP_Silk_biquad(
+    const SKP_int16      *in,        /* I:    input signal               */
+    const SKP_int16      *B,         /* I:    MA coefficients, Q13 [3]   */
+    const SKP_int16      *A,         /* I:    AR coefficients, Q13 [2]   */
+    SKP_int32            *S,         /* I/O:  state vector [2]           */
+    SKP_int16            *out,       /* O:    output signal              */
+    const SKP_int32      len         /* I:    signal length              */
+)
+{
+    SKP_int   k, in16;
+    SKP_int32 A0_neg, A1_neg, S0, S1, out32, tmp32;
+
+    S0 = S[ 0 ];
+    S1 = S[ 1 ];
+    A0_neg = -A[ 0 ];
+    A1_neg = -A[ 1 ];
+    for( k = 0; k < len; k++ ) {
+        /* S[ 0 ], S[ 1 ]: Q13 */
+        in16  = in[ k ];
+        out32 = SKP_SMLABB( S0, in16, B[ 0 ] );
+
+        S0 = SKP_SMLABB( S1, in16, B[ 1 ] );
+        S0 += SKP_LSHIFT( SKP_SMULWB( out32, A0_neg ), 3 );
+
+        S1 = SKP_LSHIFT( SKP_SMULWB( out32, A1_neg ), 3 );
+        S1 = SKP_SMLABB( S1, in16, B[ 2 ] );
+        tmp32    = SKP_RSHIFT_ROUND( out32, 13 ) + 1;
+        out[ k ] = (SKP_int16)SKP_SAT16( tmp32 );
+    }
+    S[ 0 ] = S0;
+    S[ 1 ] = S1;
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_biquad_alt.c
@@ -1,0 +1,73 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_biquad_alt.c                                              *
+ *                                                                      *
+ * Second order ARMA filter                                             *
+ * Can handle slowly varying filter coefficients                        *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+
+
+/* Second order ARMA filter, alternative implementation */
+void SKP_Silk_biquad_alt(
+    const SKP_int16      *in,            /* I:    Input signal                   */
+    const SKP_int32      *B_Q28,         /* I:    MA coefficients [3]            */
+    const SKP_int32      *A_Q28,         /* I:    AR coefficients [2]            */
+    SKP_int32            *S,             /* I/O: State vector [2]                */
+    SKP_int16            *out,           /* O:    Output signal                  */
+    const SKP_int32      len             /* I:    Signal length (must be even)   */
+)
+{
+    /* DIRECT FORM II TRANSPOSED (uses 2 element state vector) */
+    SKP_int   k;
+    SKP_int32 inval, A0_U_Q28, A0_L_Q28, A1_U_Q28, A1_L_Q28, out32_Q14;
+
+    /* Negate A_Q28 values and split in two parts */
+    A0_L_Q28 = ( -A_Q28[ 0 ] ) & 0x00003FFF;        /* lower part */
+    A0_U_Q28 = SKP_RSHIFT( -A_Q28[ 0 ], 14 );       /* upper part */
+    A1_L_Q28 = ( -A_Q28[ 1 ] ) & 0x00003FFF;        /* lower part */
+    A1_U_Q28 = SKP_RSHIFT( -A_Q28[ 1 ], 14 );       /* upper part */
+    
+    for( k = 0; k < len; k++ ) {
+        /* S[ 0 ], S[ 1 ]: Q12 */
+        inval = in[ k ];
+        out32_Q14 = SKP_LSHIFT( SKP_SMLAWB( S[ 0 ], B_Q28[ 0 ], inval ), 2 );
+
+        S[ 0 ] = S[1] + SKP_RSHIFT( SKP_SMULWB( out32_Q14, A0_L_Q28 ), 14 );
+        S[ 0 ] = SKP_SMLAWB( S[ 0 ], out32_Q14, A0_U_Q28 );
+        S[ 0 ] = SKP_SMLAWB( S[ 0 ], B_Q28[ 1 ], inval);
+
+        S[ 1 ] = SKP_RSHIFT( SKP_SMULWB( out32_Q14, A1_L_Q28 ), 14 );
+        S[ 1 ] = SKP_SMLAWB( S[ 1 ], out32_Q14, A1_U_Q28 );
+        S[ 1 ] = SKP_SMLAWB( S[ 1 ], B_Q28[ 2 ], inval );
+
+        /* Scale back to Q0 and saturate */
+        out[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT( out32_Q14, 14 ) + 2 );
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_burg_modified.c
@@ -1,0 +1,228 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_burg_modified.c                                           *
+ *                                                                      *
+ * Calculates the reflection coefficients from the input vector         *
+ * Input vector contains nb_subfr sub vectors of length L_sub + D       *
+ *                                                                      *
+ * Copyright 2009 (c), Skype Limited                                    *
+ * Date: 100105                                                         *
+ */
+
+#include "SKP_Silk_SigProc_FIX.h"
+
+#define MAX_FRAME_SIZE              544 // subfr_length * nb_subfr = ( 0.005 * 24000 + 16 ) * 4 = 544
+#define MAX_NB_SUBFR                4
+
+#define QA                          24
+#define N_BITS_HEAD_ROOM            2
+#define MIN_RSHIFTS                 -16
+#define MAX_RSHIFTS                 (32 - QA)
+
+/* Compute reflection coefficients from input signal */
+void SKP_Silk_burg_modified(
+    SKP_int32       *res_nrg,           /* O    residual energy                                                 */
+    SKP_int         *res_nrg_Q,         /* O    residual energy Q value                                         */
+    SKP_int32       A_Q16[],            /* O    prediction coefficients (length order)                          */
+    const SKP_int16 x[],                /* I    input signal, length: nb_subfr * ( D + subfr_length )           */
+    const SKP_int   subfr_length,       /* I    input signal subframe length (including D preceeding samples)   */
+    const SKP_int   nb_subfr,           /* I    number of subframes stacked in x                                */
+    const SKP_int32 WhiteNoiseFrac_Q32, /* I    fraction added to zero-lag autocorrelation                      */
+    const SKP_int   D                   /* I    order                                                           */
+)
+{
+    SKP_int         k, n, s, lz, rshifts, rshifts_extra;
+    SKP_int32       C0, num, nrg, rc_Q31, Atmp_QA, Atmp1, tmp1, tmp2, x1, x2;
+    const SKP_int16 *x_ptr;
+
+    SKP_int32       C_first_row[ SKP_Silk_MAX_ORDER_LPC ];
+    SKP_int32       C_last_row[  SKP_Silk_MAX_ORDER_LPC ];
+    SKP_int32       Af_QA[       SKP_Silk_MAX_ORDER_LPC ];
+
+    SKP_int32       CAf[ SKP_Silk_MAX_ORDER_LPC + 1 ];
+    SKP_int32       CAb[ SKP_Silk_MAX_ORDER_LPC + 1 ];
+
+    SKP_assert( subfr_length * nb_subfr <= MAX_FRAME_SIZE );
+    SKP_assert( nb_subfr <= MAX_NB_SUBFR );
+
+
+    /* Compute autocorrelations, added over subframes */
+    SKP_Silk_sum_sqr_shift( &C0, &rshifts, x, nb_subfr * subfr_length );
+    if( rshifts > MAX_RSHIFTS ) {
+        C0 = SKP_LSHIFT32( C0, rshifts - MAX_RSHIFTS );
+        SKP_assert( C0 > 0 );
+        rshifts = MAX_RSHIFTS;
+    } else {
+        lz = SKP_Silk_CLZ32( C0 ) - 1;
+        rshifts_extra = N_BITS_HEAD_ROOM - lz;
+        if( rshifts_extra > 0 ) {
+            rshifts_extra = SKP_min( rshifts_extra, MAX_RSHIFTS - rshifts );
+            C0 = SKP_RSHIFT32( C0, rshifts_extra );
+        } else {
+            rshifts_extra = SKP_max( rshifts_extra, MIN_RSHIFTS - rshifts );
+            C0 = SKP_LSHIFT32( C0, -rshifts_extra );
+        }
+        rshifts += rshifts_extra;
+    }
+    SKP_memset( C_first_row, 0, SKP_Silk_MAX_ORDER_LPC * sizeof( SKP_int32 ) );
+    if( rshifts > 0 ) {
+        for( s = 0; s < nb_subfr; s++ ) {
+            x_ptr = x + s * subfr_length;
+            for( n = 1; n < D + 1; n++ ) {
+                C_first_row[ n - 1 ] += (SKP_int32)SKP_RSHIFT64( 
+                    SKP_Silk_inner_prod16_aligned_64( x_ptr, x_ptr + n, subfr_length - n ), rshifts );
+            }
+        }
+    } else {
+        for( s = 0; s < nb_subfr; s++ ) {
+            x_ptr = x + s * subfr_length;
+            for( n = 1; n < D + 1; n++ ) {
+                C_first_row[ n - 1 ] += SKP_LSHIFT32( 
+                    SKP_Silk_inner_prod_aligned( x_ptr, x_ptr + n, subfr_length - n ), -rshifts );
+            }
+        }
+    }
+    SKP_memcpy( C_last_row, C_first_row, SKP_Silk_MAX_ORDER_LPC * sizeof( SKP_int32 ) );
+    
+    /* Initialize */
+    CAb[ 0 ] = CAf[ 0 ] = C0 + SKP_SMMUL( WhiteNoiseFrac_Q32, C0 ) + 1;         // Q(-rshifts)
+
+    for( n = 0; n < D; n++ ) {
+        /* Update first row of correlation matrix (without first element) */
+        /* Update last row of correlation matrix (without last element, stored in reversed order) */
+        /* Update C * Af */
+        /* Update C * flipud(Af) (stored in reversed order) */
+        if( rshifts > -2 ) {
+            for( s = 0; s < nb_subfr; s++ ) {
+                x_ptr = x + s * subfr_length;
+                x1  = -SKP_LSHIFT32( (SKP_int32)x_ptr[ n ],                    16 - rshifts );      // Q(16-rshifts)
+                x2  = -SKP_LSHIFT32( (SKP_int32)x_ptr[ subfr_length - n - 1 ], 16 - rshifts );      // Q(16-rshifts)
+                tmp1 = SKP_LSHIFT32( (SKP_int32)x_ptr[ n ],                    QA - 16 );           // Q(QA-16)
+                tmp2 = SKP_LSHIFT32( (SKP_int32)x_ptr[ subfr_length - n - 1 ], QA - 16 );           // Q(QA-16)
+                for( k = 0; k < n; k++ ) {
+                    C_first_row[ k ] = SKP_SMLAWB( C_first_row[ k ], x1, x_ptr[ n - k - 1 ]            ); // Q( -rshifts )
+                    C_last_row[ k ]  = SKP_SMLAWB( C_last_row[ k ],  x2, x_ptr[ subfr_length - n + k ] ); // Q( -rshifts )
+                    Atmp_QA = Af_QA[ k ];
+                    tmp1 = SKP_SMLAWB( tmp1, Atmp_QA, x_ptr[ n - k - 1 ]            );              // Q(QA-16)
+                    tmp2 = SKP_SMLAWB( tmp2, Atmp_QA, x_ptr[ subfr_length - n + k ] );              // Q(QA-16)
+                }
+                tmp1 = SKP_LSHIFT32( -tmp1, 32 - QA - rshifts );                                    // Q(16-rshifts)
+                tmp2 = SKP_LSHIFT32( -tmp2, 32 - QA - rshifts );                                    // Q(16-rshifts)
+                for( k = 0; k <= n; k++ ) {
+                    CAf[ k ] = SKP_SMLAWB( CAf[ k ], tmp1, x_ptr[ n - k ]                    );     // Q( -rshift )
+                    CAb[ k ] = SKP_SMLAWB( CAb[ k ], tmp2, x_ptr[ subfr_length - n + k - 1 ] );     // Q( -rshift )
+                }
+            }
+        } else {
+            for( s = 0; s < nb_subfr; s++ ) {
+                x_ptr = x + s * subfr_length;
+                x1  = -SKP_LSHIFT32( (SKP_int32)x_ptr[ n ],                    -rshifts );          // Q( -rshifts )
+                x2  = -SKP_LSHIFT32( (SKP_int32)x_ptr[ subfr_length - n - 1 ], -rshifts );          // Q( -rshifts )
+                tmp1 = SKP_LSHIFT32( (SKP_int32)x_ptr[ n ],                    17 );                // Q17
+                tmp2 = SKP_LSHIFT32( (SKP_int32)x_ptr[ subfr_length - n - 1 ], 17 );                // Q17
+                for( k = 0; k < n; k++ ) {
+                    C_first_row[ k ] = SKP_MLA( C_first_row[ k ], x1, x_ptr[ n - k - 1 ]            ); // Q( -rshifts )
+                    C_last_row[ k ]  = SKP_MLA( C_last_row[ k ],  x2, x_ptr[ subfr_length - n + k ] ); // Q( -rshifts )
+                    Atmp1 = SKP_RSHIFT_ROUND( Af_QA[ k ], QA - 17 );                                // Q17
+                    tmp1 = SKP_MLA( tmp1, x_ptr[ n - k - 1 ],            Atmp1 );                   // Q17
+                    tmp2 = SKP_MLA( tmp2, x_ptr[ subfr_length - n + k ], Atmp1 );                   // Q17
+                }
+                tmp1 = -tmp1;                                                                       // Q17
+                tmp2 = -tmp2;                                                                       // Q17
+                for( k = 0; k <= n; k++ ) {
+                    CAf[ k ] = SKP_SMLAWW( CAf[ k ], tmp1, 
+                        SKP_LSHIFT32( (SKP_int32)x_ptr[ n - k ], -rshifts - 1 ) );                  // Q( -rshift )
+                    CAb[ k ] = SKP_SMLAWW( CAb[ k ], tmp2, 
+                        SKP_LSHIFT32( (SKP_int32)x_ptr[ subfr_length - n + k - 1 ], -rshifts - 1 ) );// Q( -rshift )
+                }
+            }
+        }
+
+        /* Calculate nominator and denominator for the next order reflection (parcor) coefficient */
+        tmp1 = C_first_row[ n ];                                                            // Q( -rshifts )
+        tmp2 = C_last_row[ n ];                                                             // Q( -rshifts )
+        num  = 0;                                                                           // Q( -rshifts )
+        nrg  = SKP_ADD32( CAb[ 0 ], CAf[ 0 ] );                                             // Q( 1-rshifts )
+        for( k = 0; k < n; k++ ) {
+            Atmp_QA = Af_QA[ k ];
+            lz = SKP_Silk_CLZ32( SKP_abs( Atmp_QA ) ) - 1;
+            lz = SKP_min( 32 - QA, lz );
+            Atmp1 = SKP_LSHIFT32( Atmp_QA, lz );                                            // Q( QA + lz )
+
+            tmp1 = SKP_ADD_LSHIFT32( tmp1, SKP_SMMUL( C_last_row[  n - k - 1 ], Atmp1 ), 32 - QA - lz );    // Q( -rshifts )
+            tmp2 = SKP_ADD_LSHIFT32( tmp2, SKP_SMMUL( C_first_row[ n - k - 1 ], Atmp1 ), 32 - QA - lz );    // Q( -rshifts )
+            num  = SKP_ADD_LSHIFT32( num,  SKP_SMMUL( CAb[ n - k ],             Atmp1 ), 32 - QA - lz );    // Q( -rshifts )
+            nrg  = SKP_ADD_LSHIFT32( nrg,  SKP_SMMUL( SKP_ADD32( CAb[ k + 1 ], CAf[ k + 1 ] ), 
+                                                                                Atmp1 ), 32 - QA - lz );    // Q( 1-rshifts )
+        }
+        CAf[ n + 1 ] = tmp1;                                                                // Q( -rshifts )
+        CAb[ n + 1 ] = tmp2;                                                                // Q( -rshifts )
+        num = SKP_ADD32( num, tmp2 );                                                       // Q( -rshifts )
+        num = SKP_LSHIFT32( -num, 1 );                                                      // Q( 1-rshifts )
+
+        /* Calculate the next order reflection (parcor) coefficient */
+        if( SKP_abs( num ) < nrg ) {
+            rc_Q31 = SKP_DIV32_varQ( num, nrg, 31 );
+        } else {
+            /* Negative energy or ratio too high; set remaining coefficients to zero and exit loop */
+            SKP_memset( &Af_QA[ n ], 0, ( D - n ) * sizeof( SKP_int32 ) );
+            SKP_assert( 0 );
+            break;
+        }
+
+        /* Update the AR coefficients */
+        for( k = 0; k < (n + 1) >> 1; k++ ) {
+            tmp1 = Af_QA[ k ];                                                              // QA
+            tmp2 = Af_QA[ n - k - 1 ];                                                      // QA
+            Af_QA[ k ]         = SKP_ADD_LSHIFT32( tmp1, SKP_SMMUL( tmp2, rc_Q31 ), 1 );    // QA
+            Af_QA[ n - k - 1 ] = SKP_ADD_LSHIFT32( tmp2, SKP_SMMUL( tmp1, rc_Q31 ), 1 );    // QA
+        }
+        Af_QA[ n ] = SKP_RSHIFT32( rc_Q31, 31 - QA );                                       // QA
+
+        /* Update C * Af and C * Ab */
+        for( k = 0; k <= n + 1; k++ ) {
+            tmp1 = CAf[ k ];                                                                // Q( -rshifts )
+            tmp2 = CAb[ n - k + 1 ];                                                        // Q( -rshifts )
+            CAf[ k ]         = SKP_ADD_LSHIFT32( tmp1, SKP_SMMUL( tmp2, rc_Q31 ), 1 );      // Q( -rshifts )
+            CAb[ n - k + 1 ] = SKP_ADD_LSHIFT32( tmp2, SKP_SMMUL( tmp1, rc_Q31 ), 1 );      // Q( -rshifts )
+        }
+    }
+
+    /* Return residual energy */
+    nrg  = CAf[ 0 ];                                                                        // Q( -rshifts )
+    tmp1 = 1 << 16;                                                                         // Q16
+    for( k = 0; k < D; k++ ) {
+        Atmp1 = SKP_RSHIFT_ROUND( Af_QA[ k ], QA - 16 );                                    // Q16
+        nrg  = SKP_SMLAWW( nrg, CAf[ k + 1 ], Atmp1 );                                      // Q( -rshifts )
+        tmp1 = SKP_SMLAWW( tmp1, Atmp1, Atmp1 );                                            // Q16
+        A_Q16[ k ] = -Atmp1;
+    }
+    *res_nrg = SKP_SMLAWW( nrg, SKP_SMMUL( WhiteNoiseFrac_Q32, C0 ), -tmp1 );               // Q( -rshifts )
+    *res_nrg_Q = -rshifts;
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_bwexpander.c
@@ -1,0 +1,49 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Chirp (bandwidth expand) LP AR filter */
+void SKP_Silk_bwexpander( 
+    SKP_int16            *ar,        /* I/O  AR filter to be expanded (without leading 1)    */
+    const SKP_int        d,          /* I    Length of ar                                    */
+    SKP_int32            chirp_Q16   /* I    Chirp factor (typically in the range 0 to 1)    */
+)
+{
+    SKP_int   i;
+    SKP_int32 chirp_minus_one_Q16;
+
+    chirp_minus_one_Q16 = chirp_Q16 - 65536;
+
+    /* NB: Dont use SKP_SMULWB, instead of SKP_RSHIFT_ROUND( SKP_MUL() , 16 ), below. */
+    /* Bias in SKP_SMULWB can lead to unstable filters                                */
+    for( i = 0; i < d - 1; i++ ) {
+        ar[ i ]    = (SKP_int16)SKP_RSHIFT_ROUND( SKP_MUL( chirp_Q16, ar[ i ]             ), 16 );
+        chirp_Q16 +=            SKP_RSHIFT_ROUND( SKP_MUL( chirp_Q16, chirp_minus_one_Q16 ), 16 );
+    }
+    ar[ d - 1 ] = (SKP_int16)SKP_RSHIFT_ROUND( SKP_MUL( chirp_Q16, ar[ d - 1 ] ), 16 );
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_bwexpander_32.c
@@ -1,0 +1,46 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Chirp (bandwidth expand) LP AR filter */
+void SKP_Silk_bwexpander_32( 
+    SKP_int32        *ar,      /* I/O    AR filter to be expanded (without leading 1)    */
+    const SKP_int    d,        /* I    Length of ar                                      */
+    SKP_int32        chirp_Q16 /* I    Chirp factor in Q16                               */
+)
+{
+    SKP_int   i;
+    SKP_int32 tmp_chirp_Q16;
+
+    tmp_chirp_Q16 = chirp_Q16;
+    for( i = 0; i < d - 1; i++ ) {
+        ar[ i ]       = SKP_SMULWW( ar[ i ],   tmp_chirp_Q16 );
+        tmp_chirp_Q16 = SKP_SMULWW( chirp_Q16, tmp_chirp_Q16 );
+    }
+    ar[ d - 1 ] = SKP_SMULWW( ar[ d - 1 ], tmp_chirp_Q16 );
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_common_pitch_est_defines.h
@@ -1,0 +1,86 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_COMMON_PE_DEFINES_H
+#define SKP_SILK_COMMON_PE_DEFINES_H
+
+#include "SKP_Silk_SigProc_FIX.h"
+
+/************************************************************/
+/* Definitions For Fix pitch estimator                      */
+/************************************************************/
+
+#define PE_MAX_FS_KHZ                24 /* Maximum sampling frequency used */
+
+#define PE_MAX_NB_SUBFR              4
+#define PE_SUBFR_LENGTH_MS           5   /* 5 ms  */
+
+#define PE_LTP_MEM_LENGTH_MS         (4 * PE_SUBFR_LENGTH_MS) 
+
+#define PE_MAX_FRAME_LENGTH_MS       (PE_LTP_MEM_LENGTH_MS + PE_MAX_NB_SUBFR * PE_SUBFR_LENGTH_MS)
+#define PE_MAX_FRAME_LENGTH          (PE_MAX_FRAME_LENGTH_MS * PE_MAX_FS_KHZ)
+#define PE_MAX_FRAME_LENGTH_ST_1     (PE_MAX_FRAME_LENGTH >> 2)
+#define PE_MAX_FRAME_LENGTH_ST_2     (PE_MAX_FRAME_LENGTH >> 1)
+#define PE_MAX_SF_FRAME_LENGTH       (PE_SUB_FRAME * PE_MAX_FS_KHZ)
+
+#define PE_MAX_LAG_MS                18            /* 18 ms -> 56 Hz */
+#define PE_MIN_LAG_MS                2            /* 2 ms -> 500 Hz */
+#define PE_MAX_LAG                   (PE_MAX_LAG_MS * PE_MAX_FS_KHZ)
+#define PE_MIN_LAG                   (PE_MIN_LAG_MS * PE_MAX_FS_KHZ)
+
+#define PE_D_SRCH_LENGTH             24
+
+#define PE_MAX_DECIMATE_STATE_LENGTH 7
+
+#define PE_NB_STAGE3_LAGS            5
+
+#define PE_NB_CBKS_STAGE2            3
+#define PE_NB_CBKS_STAGE2_EXT        11
+
+#define PE_CB_mn2                    1
+#define PE_CB_mx2                    2
+
+#define PE_NB_CBKS_STAGE3_MAX        34
+#define PE_NB_CBKS_STAGE3_MID        24
+#define PE_NB_CBKS_STAGE3_MIN        16
+
+#define PE_NB_CBKS_STAGE3_10MS       12
+#define PE_NB_CBKS_STAGE2_10MS       3
+
+extern const SKP_int8 SKP_Silk_CB_lags_stage2[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE2_EXT ];
+extern const SKP_int8 SKP_Silk_CB_lags_stage3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ];
+extern const SKP_int8 SKP_Silk_Lag_range_stage3[ SKP_Silk_PE_MAX_COMPLEX + 1 ] [ PE_MAX_NB_SUBFR ][ 2 ];
+extern const SKP_int8 SKP_Silk_nb_cbk_searchs_stage3[ SKP_Silk_PE_MAX_COMPLEX + 1 ];
+extern const SKP_int8 SKP_Silk_cbk_offsets_stage3[ SKP_Silk_PE_MAX_COMPLEX + 1 ];
+
+/* Tables added for 10 ms frames */
+extern const SKP_int8 SKP_Silk_CB_lags_stage2_10_ms[ PE_MAX_NB_SUBFR >> 1][ 3 ];
+extern const SKP_int8 SKP_Silk_CB_lags_stage3_10_ms[ PE_MAX_NB_SUBFR >> 1 ][ 12 ];
+extern const SKP_int8 SKP_Silk_Lag_range_stage3_10_ms[ PE_MAX_NB_SUBFR >> 1 ][ 2 ];
+
+#endif
+
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_decode_pitch.c
@@ -1,0 +1,71 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/***********************************************************
+* Pitch analyser function
+********************************************************** */
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_pitch_est_defines.h"
+
+void SKP_Silk_decode_pitch(
+    SKP_int         lagIndex,                        /* I                             */
+    SKP_int         contourIndex,                    /* O                             */
+    SKP_int         pitch_lags[],                    /* O 4 pitch values              */
+    const SKP_int   Fs_kHz,                          /* I sampling frequency (kHz)    */
+    const SKP_int   nb_subfr                         /* I number of sub frames        */
+)
+{
+    SKP_int   lag, k, min_lag, cbk_size;
+    const SKP_int8 *Lag_CB_ptr;
+
+    if( Fs_kHz == 8 ) {
+        if( nb_subfr == PE_MAX_NB_SUBFR ) {
+            Lag_CB_ptr = &SKP_Silk_CB_lags_stage2[ 0 ][ 0 ];
+            cbk_size   = PE_NB_CBKS_STAGE2_EXT;
+        } else {
+            SKP_assert( PE_MAX_NB_SUBFR >> 1 == nb_subfr );
+            Lag_CB_ptr = &SKP_Silk_CB_lags_stage2_10_ms[ 0 ][ 0 ];
+            cbk_size   = PE_NB_CBKS_STAGE2_10MS;
+        }
+    } else {
+        if( nb_subfr == PE_MAX_NB_SUBFR ) {
+            Lag_CB_ptr = &SKP_Silk_CB_lags_stage3[ 0 ][ 0 ];
+            cbk_size   = PE_NB_CBKS_STAGE3_MAX;
+        } else {
+            SKP_assert( PE_MAX_NB_SUBFR >> 1 == nb_subfr );
+            Lag_CB_ptr = &SKP_Silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
+            cbk_size   = PE_NB_CBKS_STAGE3_10MS;
+        }
+    }
+
+    min_lag = SKP_SMULBB( PE_MIN_LAG_MS, Fs_kHz );
+    lag = min_lag + lagIndex;
+
+    for( k = 0; k < nb_subfr; k++ ) {
+        pitch_lags[ k ] = lag + matrix_ptr( Lag_CB_ptr, k, contourIndex, cbk_size );
+    }
+}
\ No newline at end of file
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_inner_prod_aligned.c
@@ -1,0 +1,96 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                                *
+ * SKP_Silk_inner_prod_aligned.c                                                *
+ *                                                                                *
+ *                                                                          	   *
+ * Copyright 2008-2010 (c), Skype Limited                                              *
+ * Date: 080601                                                                   *
+ *                                                                                */
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* sum= for(i=0;i<len;i++)inVec1[i]*inVec2[i];      ---        inner product    */
+/* Note for ARM asm:                                                            */
+/*        * inVec1 and inVec2 should be at least 2 byte aligned.    (Or defined as short/int16) */
+/*        * len should be positive 16bit integer.                               */
+/*        * only when len>6, memory access can be reduced by half.              */
+
+SKP_int32 SKP_Silk_inner_prod_aligned(
+    const SKP_int16* const inVec1,  /*    I input vector 1    */
+    const SKP_int16* const inVec2,  /*    I input vector 2    */
+    const SKP_int             len   /*    I vector lengths    */
+)
+{
+    SKP_int   i; 
+    SKP_int32 sum = 0;
+    for( i = 0; i < len; i++ ) {
+        sum = SKP_SMLABB( sum, inVec1[ i ], inVec2[ i ] );
+    }
+    return sum;
+}
+
+SKP_int64 SKP_Silk_inner_prod_aligned_64(
+    const SKP_int32 *inVec1,        /*    I input vector 1    */ 
+    const SKP_int32 *inVec2,        /*    I input vector 2    */
+    const SKP_int   len             /*    I vector lengths    */
+)
+{
+    SKP_int   i; 
+    SKP_int64 sum = 0;
+    for( i = 0; i < len; i++ ) {
+        sum = SKP_SMLAL( sum, inVec1[ i ], inVec2[ i ] );
+    }
+    return sum;
+}
+SKP_int64 SKP_Silk_inner_prod16_aligned_64(
+    const SKP_int16 *inVec1,        /*    I input vector 1    */ 
+    const SKP_int16 *inVec2,        /*    I input vector 2    */
+    const SKP_int   len             /*    I vector lengths    */
+)
+{
+    SKP_int   i; 
+    SKP_int64 sum = 0;
+    for( i = 0; i < len; i++ ) {
+        sum = SKP_SMLALBB( sum, inVec1[ i ], inVec2[ i ] );
+    }
+    return sum;
+}
+
+SKP_int32 SKP_Silk_inner_prod16_aligned_sat(
+    const SKP_int16* const inVec1,  /*    I input vector 1  */ 
+    const SKP_int16* const inVec2,  /*    I input vector 2  */
+    const SKP_int    len            /*    I vector lengths  */ 
+)
+{
+    SKP_int   i; 
+    SKP_int32 sum = 0;
+    for( i = 0; i < len; i++ ) {
+        sum = SKP_ADD_SAT32( sum, SKP_SMULBB( inVec1[ i ], inVec2[ i ] ) );
+    }
+    return sum;
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_k2a.c
@@ -1,0 +1,58 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_k2a.c                                                     *
+ *                                                                      *
+ * Step up function, converts reflection coefficients to prediction     *
+ * coefficients                                                         *
+ *                                                                      *
+ * Copyright 2008 (c), Skype Limited                                    *
+ * Date: 080103                                                         *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Step up function, converts reflection coefficients to prediction coefficients */
+void SKP_Silk_k2a(
+    SKP_int32            *A_Q24,                 /* O:    Prediction coefficients [order] Q24         */
+    const SKP_int16      *rc_Q15,                /* I:    Reflection coefficients [order] Q15         */
+    const SKP_int32      order                   /* I:    Prediction order                            */
+)
+{
+    SKP_int   k, n;
+    SKP_int32 Atmp[ SKP_Silk_MAX_ORDER_LPC ];
+
+    for( k = 0; k < order; k++ ) {
+        for( n = 0; n < k; n++ ) {
+            Atmp[ n ] = A_Q24[ n ];
+        }
+        for( n = 0; n < k; n++ ) {
+            A_Q24[ n ] = SKP_SMLAWB( A_Q24[ n ], SKP_LSHIFT( Atmp[ k - n - 1 ], 1 ), rc_Q15[ k ] );
+        }
+        A_Q24[ k ] = -SKP_LSHIFT( (SKP_int32)rc_Q15[ k ], 9 );
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_k2a_Q16.c
@@ -1,0 +1,58 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_k2a.c                                                     *
+ *                                                                      *
+ * Step up function, converts reflection coefficients to prediction     *
+ * coefficients                                                         *
+ *                                                                      *
+ * Copyright 2008 (c), Skype Limited                                    *
+ * Date: 080103                                                         *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Step up function, converts reflection coefficients to prediction coefficients */
+void SKP_Silk_k2a_Q16(
+    SKP_int32            *A_Q24,                 /* O:    Prediction coefficients [order] Q24         */
+    const SKP_int32      *rc_Q16,                /* I:    Reflection coefficients [order] Q16         */
+    const SKP_int32      order                   /* I:    Prediction order                            */
+)
+{
+    SKP_int   k, n;
+    SKP_int32 Atmp[ SKP_Silk_MAX_ORDER_LPC ];
+
+    for( k = 0; k < order; k++ ) {
+        for( n = 0; n < k; n++ ) {
+            Atmp[ n ] = A_Q24[ n ];
+        }
+        for( n = 0; n < k; n++ ) {
+            A_Q24[ n ] = SKP_SMLAWW( A_Q24[ n ], Atmp[ k - n - 1 ], rc_Q16[ k ] );
+        }
+        A_Q24[ k ] = -SKP_LSHIFT( rc_Q16[ k ], 8 );
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_lin2log.c
@@ -1,0 +1,49 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_lin2log.c                                                 *
+ *                                                                      *
+ * Convert input to a log scale                                         *
+ * Approximation of 128 * log2()                                        *
+ *                                                                      *
+ * Copyright 2006 (c), Skype Limited                                    *
+ * Date: 060221                                                         *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+/* Approximation of 128 * log2() (very close inverse of approx 2^() below) */
+/* Convert input to a log scale    */ 
+SKP_int32 SKP_Silk_lin2log( const SKP_int32 inLin )    /* I:    Input in linear scale */
+{
+    SKP_int32 lz, frac_Q7;
+
+    SKP_Silk_CLZ_FRAC( inLin, &lz, &frac_Q7 );
+
+    /* Piece-wise parabolic approximation */
+    return( SKP_LSHIFT( 31 - lz, 7 ) + SKP_SMLAWB( frac_Q7, SKP_MUL( frac_Q7, 128 - frac_Q7 ), 179 ) );
+}
+
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_log2lin.c
@@ -1,0 +1,58 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_log2lin.c                                                 *
+ *                                                                      *
+ * Convert input to a linear scale                                      *
+ *                                                                      *
+ * Copyright 2006 (c), Skype Limited                                    *
+ * Date: 060221                                                         *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Approximation of 2^() (very close inverse of SKP_Silk_lin2log()) */
+/* Convert input to a linear scale    */ 
+SKP_int32 SKP_Silk_log2lin( const SKP_int32 inLog_Q7 )    /* I:    Input on log scale */ 
+{
+    SKP_int32 out, frac_Q7;
+
+    if( inLog_Q7 < 0 ) {
+        return 0;
+    }
+
+    out = SKP_LSHIFT( 1, SKP_RSHIFT( inLog_Q7, 7 ) );
+    frac_Q7 = inLog_Q7 & 0x7F;
+    if( inLog_Q7 < 2048 ) {
+        /* Piece-wise parabolic approximation */
+        out = SKP_ADD_RSHIFT( out, SKP_MUL( out, SKP_SMLAWB( frac_Q7, SKP_MUL( frac_Q7, 128 - frac_Q7 ), -174 ) ), 7 );
+    } else {
+        /* Piece-wise parabolic approximation */
+        out = SKP_MLA( out, SKP_RSHIFT( out, 7 ), SKP_SMLAWB( frac_Q7, SKP_MUL( frac_Q7, 128 - frac_Q7 ), -174 ) );
+    }
+    return out;
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_lowpass_int.c
@@ -1,0 +1,61 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_lowpass_int.c                                             *
+ *                                                                      *
+ * First order low-pass filter, with input as SKP_int32, running at     *
+ * 48 kHz                                                               *
+ *                                                                      *
+ * Copyright 2006 (c), Skype Limited                                    *
+ * Date: 060221                                                         *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* First order low-pass filter, with input as SKP_int32, running at 48 kHz        */
+void SKP_Silk_lowpass_int(
+    const SKP_int32      *in,            /* I:    Q25 48 kHz signal; length = len */
+    SKP_int32            *S,             /* I/O: Q25 state; length = 1            */
+    SKP_int32            *out,           /* O:    Q25 48 kHz signal; length = len */
+    const SKP_int32      len             /* I:    Number of samples               */
+)
+{
+    SKP_int        k;
+    SKP_int32    in_tmp, out_tmp, state;
+    
+    state = S[ 0 ];
+    for( k = len; k > 0; k-- ) {    
+        in_tmp  = *in++;
+        in_tmp -= SKP_RSHIFT( in_tmp, 2 );              /* multiply by 0.75 */
+        out_tmp = state + in_tmp;                       /* zero at nyquist  */
+        state   = in_tmp - SKP_RSHIFT( out_tmp, 1 );    /* pole             */
+        *out++  = out_tmp;
+    }
+    S[ 0 ] = state;
+}
+
+
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_lowpass_short.c
@@ -1,0 +1,61 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_lowpass_short.c                                           *
+ *                                                                      *
+ * First order low-pass filter, with input as SKP_int16, running at     *
+ * 48 kHz                                                               *
+ *                                                                      *
+ * Copyright 2006 (c), Skype Limited                                    *
+ * Date: 060221                                                         *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+
+
+/* First order low-pass filter, with input as SKP_int16, running at 48 kHz   */
+void SKP_Silk_lowpass_short(
+    const SKP_int16          *in,        /* I:   Q15 48 kHz signal; [len]    */
+    SKP_int32                *S,         /* I/O: Q25 state; length = 1       */
+    SKP_int32                *out,       /* O:   Q25 48 kHz signal; [len]    */
+    const SKP_int32          len         /* O:   Signal length               */
+)
+{
+    SKP_int        k;
+    SKP_int32    in_tmp, out_tmp, state;
+    
+    state = S[ 0 ];
+    for( k = 0; k < len; k++ ) {    
+        in_tmp   = SKP_MUL( 768, (SKP_int32)in[k] );    /* multiply by 0.75, going from Q15 to Q25 */
+        out_tmp  = state + in_tmp;                      /* zero at nyquist                         */
+        state    = in_tmp - SKP_RSHIFT( out_tmp, 1 );   /* pole                                    */
+        out[ k ] = out_tmp;
+    }
+    S[ 0 ] = state;
+}
+
+
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_macros.h
@@ -1,0 +1,132 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef _SKP_SILK_API_C_H_
+#define _SKP_SILK_API_C_H_
+
+// This is an inline header file for general platform.
+
+// (a32 * (SKP_int32)((SKP_int16)(b32))) >> 16 output have to be 32bit int
+#define SKP_SMULWB(a32, b32)            ((((a32) >> 16) * (SKP_int32)((SKP_int16)(b32))) + ((((a32) & 0x0000FFFF) * (SKP_int32)((SKP_int16)(b32))) >> 16))
+
+// a32 + (b32 * (SKP_int32)((SKP_int16)(c32))) >> 16 output have to be 32bit int
+#define SKP_SMLAWB(a32, b32, c32)       ((a32) + ((((b32) >> 16) * (SKP_int32)((SKP_int16)(c32))) + ((((b32) & 0x0000FFFF) * (SKP_int32)((SKP_int16)(c32))) >> 16)))
+
+// (a32 * (b32 >> 16)) >> 16
+#define SKP_SMULWT(a32, b32)            (((a32) >> 16) * ((b32) >> 16) + ((((a32) & 0x0000FFFF) * ((b32) >> 16)) >> 16))
+
+// a32 + (b32 * (c32 >> 16)) >> 16
+#define SKP_SMLAWT(a32, b32, c32)       ((a32) + (((b32) >> 16) * ((c32) >> 16)) + ((((b32) & 0x0000FFFF) * ((c32) >> 16)) >> 16))
+
+// (SKP_int32)((SKP_int16)(a3))) * (SKP_int32)((SKP_int16)(b32)) output have to be 32bit int
+#define SKP_SMULBB(a32, b32)            ((SKP_int32)((SKP_int16)(a32)) * (SKP_int32)((SKP_int16)(b32)))
+
+// a32 + (SKP_int32)((SKP_int16)(b32)) * (SKP_int32)((SKP_int16)(c32)) output have to be 32bit int
+#define SKP_SMLABB(a32, b32, c32)       ((a32) + ((SKP_int32)((SKP_int16)(b32))) * (SKP_int32)((SKP_int16)(c32)))
+
+// (SKP_int32)((SKP_int16)(a32)) * (b32 >> 16)
+#define SKP_SMULBT(a32, b32)            ((SKP_int32)((SKP_int16)(a32)) * ((b32) >> 16))
+
+// a32 + (SKP_int32)((SKP_int16)(b32)) * (c32 >> 16)
+#define SKP_SMLABT(a32, b32, c32)       ((a32) + ((SKP_int32)((SKP_int16)(b32))) * ((c32) >> 16))
+
+// a64 + (b32 * c32)
+#define SKP_SMLAL(a64, b32, c32)        (SKP_ADD64((a64), ((SKP_int64)(b32) * (SKP_int64)(c32))))
+
+// (a32 * b32) >> 16
+#define SKP_SMULWW(a32, b32)            SKP_MLA(SKP_SMULWB((a32), (b32)), (a32), SKP_RSHIFT_ROUND((b32), 16))
+
+// a32 + ((b32 * c32) >> 16)
+#define SKP_SMLAWW(a32, b32, c32)       SKP_MLA(SKP_SMLAWB((a32), (b32), (c32)), (b32), SKP_RSHIFT_ROUND((c32), 16))
+
+/* add/subtract with output saturated */
+#define SKP_ADD_SAT32(a, b)             ((((a) + (b)) & 0x80000000) == 0 ?                              \
+                                        ((((a) & (b)) & 0x80000000) != 0 ? SKP_int32_MIN : (a)+(b)) :   \
+                                        ((((a) | (b)) & 0x80000000) == 0 ? SKP_int32_MAX : (a)+(b)) )
+
+#define SKP_SUB_SAT32(a, b)             ((((a)-(b)) & 0x80000000) == 0 ?                                        \
+                                        (( (a) & ((b)^0x80000000) & 0x80000000) ? SKP_int32_MIN : (a)-(b)) :    \
+                                        ((((a)^0x80000000) & (b)  & 0x80000000) ? SKP_int32_MAX : (a)-(b)) )
+    
+SKP_INLINE SKP_int32 SKP_Silk_CLZ16(SKP_int16 in16)
+{
+    SKP_int32 out32 = 0;
+    if( in16 == 0 ) {
+        return 16;
+    }
+    /* test nibbles */
+    if( in16 & 0xFF00 ) {
+        if( in16 & 0xF000 ) {
+            in16 >>= 12;
+        } else {
+            out32 += 4;
+            in16 >>= 8;
+        }
+    } else {
+        if( in16 & 0xFFF0 ) {
+            out32 += 8;
+            in16 >>= 4;
+        } else {
+            out32 += 12;
+        }
+    }
+    /* test bits and return */
+    if( in16 & 0xC ) {
+        if( in16 & 0x8 )
+            return out32 + 0;
+        else
+            return out32 + 1;
+    } else {
+        if( in16 & 0xE )
+            return out32 + 2;
+        else
+            return out32 + 3;
+    }
+}
+
+SKP_INLINE SKP_int32 SKP_Silk_CLZ32(SKP_int32 in32)
+{
+    /* test highest 16 bits and convert to SKP_int16 */
+    if( in32 & 0xFFFF0000 ) {
+        return SKP_Silk_CLZ16((SKP_int16)(in32 >> 16));
+    } else {
+        return SKP_Silk_CLZ16((SKP_int16)in32) + 16;
+    }
+}
+
+/* Row based */
+#define matrix_ptr(Matrix_base_adr, row, column, N)         *(Matrix_base_adr + ((row)*(N)+(column)))
+#define matrix_adr(Matrix_base_adr, row, column, N)          (Matrix_base_adr + ((row)*(N)+(column)))
+
+/* Column based */
+#ifndef matrix_c_ptr
+#   define matrix_c_ptr(Matrix_base_adr, row, column, M)    *(Matrix_base_adr + ((row)+(M)*(column)))
+#endif
+#define matrix_c_adr(Matrix_base_adr, row, column, M)        (Matrix_base_adr + ((row)+(M)*(column)))
+
+#endif //_SKP_SILK_API_C_H_
+
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_pitch_analysis_core.c
@@ -1,0 +1,752 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/***********************************************************
+* Pitch analyser function
+********************************************************** */
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_pitch_est_defines.h"
+#include "SKP_debug.h"
+
+#define SCRATCH_SIZE    22
+
+/************************************************************/
+/* Internally used functions                                */
+/************************************************************/
+void SKP_FIX_P_Ana_calc_corr_st3(
+    SKP_int32        cross_corr_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ],/* (O) 3 DIM correlation array */
+    const SKP_int16  signal[],                        /* I vector to correlate         */
+    SKP_int          start_lag,                       /* I lag offset to search around */
+    SKP_int          sf_length,                       /* I length of a 5 ms subframe   */
+    SKP_int          nb_subfr,                        /* I number of subframes         */
+    SKP_int          complexity                       /* I Complexity setting          */
+);
+
+void SKP_FIX_P_Ana_calc_energy_st3(
+    SKP_int32        energies_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ],/* (O) 3 DIM energy array */
+    const SKP_int16  signal[],                        /* I vector to calc energy in    */
+    SKP_int          start_lag,                       /* I lag offset to search around */
+    SKP_int          sf_length,                       /* I length of one 5 ms subframe */
+    SKP_int          nb_subfr,                        /* I number of subframes         */
+    SKP_int          complexity                       /* I Complexity setting          */
+);
+
+SKP_int32 SKP_FIX_P_Ana_find_scaling(
+    const SKP_int16  *signal,
+    const SKP_int    signal_length, 
+    const SKP_int    sum_sqr_len
+);
+
+/*************************************************************/
+/*      FIXED POINT CORE PITCH ANALYSIS FUNCTION             */
+/*************************************************************/
+SKP_int SKP_Silk_pitch_analysis_core(  /* O    Voicing estimate: 0 voiced, 1 unvoiced                        */
+    const SKP_int16  *signal,            /* I    Signal of length PE_FRAME_LENGTH_MS*Fs_kHz           */
+    SKP_int          *pitch_out,         /* O    4 pitch lag values                                          */
+    SKP_int          *lagIndex,          /* O    Lag Index                                                   */
+    SKP_int          *contourIndex,      /* O    Pitch contour Index                                         */
+    SKP_int          *LTPCorr_Q15,       /* I/O  Normalized correlation; input: value from previous frame    */
+    SKP_int          prevLag,            /* I    Last lag of previous frame; set to zero is unvoiced         */
+    const SKP_int32  search_thres1_Q16,  /* I    First stage threshold for lag candidates 0 - 1              */
+    const SKP_int    search_thres2_Q15,  /* I    Final threshold for lag candidates 0 - 1                    */
+    const SKP_int    Fs_kHz,             /* I    Sample frequency (kHz)                                      */
+    const SKP_int    complexity,         /* I    Complexity setting, 0-2, where 2 is highest                 */
+    const SKP_int    nb_subfr            /* I    number of 5 ms subframes                                    */
+)
+{
+    SKP_int16 signal_8kHz[ PE_MAX_FRAME_LENGTH_ST_2 ];
+    SKP_int16 signal_4kHz[ PE_MAX_FRAME_LENGTH_ST_1 ];
+    SKP_int32 scratch_mem[ 3 * PE_MAX_FRAME_LENGTH ];
+    SKP_int16 *input_signal_ptr;
+    SKP_int32 filt_state[ PE_MAX_DECIMATE_STATE_LENGTH ];
+    SKP_int   i, k, d, j;
+    SKP_int16 C[ PE_MAX_NB_SUBFR ][ ( PE_MAX_LAG >> 1 ) + 5 ];
+    const SKP_int16 *target_ptr, *basis_ptr;
+    SKP_int32 cross_corr, normalizer, energy, shift, energy_basis, energy_target;
+    SKP_int   d_srch[ PE_D_SRCH_LENGTH ], Cmax, length_d_srch, length_d_comp;
+    SKP_int16 d_comp[ ( PE_MAX_LAG >> 1 ) + 5 ];
+    SKP_int32 sum, threshold, temp32, lag_counter;
+    SKP_int   CBimax, CBimax_new, CBimax_old, lag, start_lag, end_lag, lag_new;
+    SKP_int32 CC[ PE_NB_CBKS_STAGE2_EXT ], CCmax, CCmax_b, CCmax_new_b, CCmax_new;
+    SKP_int32 energies_st3[  PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ];
+    SKP_int32 crosscorr_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ];
+    SKP_int   frame_length, frame_length_8kHz, frame_length_4kHz, max_sum_sq_length;
+    SKP_int   sf_length, sf_length_8kHz, sf_length_4kHz;
+    SKP_int   min_lag, min_lag_8kHz, min_lag_4kHz;
+    SKP_int   max_lag, max_lag_8kHz, max_lag_4kHz;
+    SKP_int32 contour_bias, diff, lz, lshift;
+    SKP_int   cbk_offset, nb_cbk_search, cbk_size;
+    SKP_int32 delta_lag_log2_sqr_Q7, lag_log2_Q7, prevLag_log2_Q7, prev_lag_bias_Q15, corr_thres_Q15;
+    const SKP_int8 *Lag_CB_ptr;
+    /* Check for valid sampling frequency */
+    SKP_assert( Fs_kHz == 8 || Fs_kHz == 12 || Fs_kHz == 16 || Fs_kHz == 24 );
+
+    /* Check for valid complexity setting */
+    SKP_assert( complexity >= SKP_Silk_PE_MIN_COMPLEX );
+    SKP_assert( complexity <= SKP_Silk_PE_MAX_COMPLEX );
+
+    SKP_assert( search_thres1_Q16 >= 0 && search_thres1_Q16 <= (1<<16) );
+    SKP_assert( search_thres2_Q15 >= 0 && search_thres2_Q15 <= (1<<15) );
+
+    /* Setup frame lengths max / min lag for the sampling frequency */
+    frame_length      = ( PE_LTP_MEM_LENGTH_MS + nb_subfr * PE_SUBFR_LENGTH_MS ) * Fs_kHz;
+    frame_length_4kHz = ( PE_LTP_MEM_LENGTH_MS + nb_subfr * PE_SUBFR_LENGTH_MS ) * 4;
+    frame_length_8kHz = ( PE_LTP_MEM_LENGTH_MS + nb_subfr * PE_SUBFR_LENGTH_MS ) * 8;
+    sf_length         = PE_SUBFR_LENGTH_MS * Fs_kHz;
+    sf_length_4kHz    = PE_SUBFR_LENGTH_MS * 4;
+    sf_length_8kHz    = PE_SUBFR_LENGTH_MS * 8;
+    min_lag           = PE_MIN_LAG_MS * Fs_kHz;
+    min_lag_4kHz      = PE_MIN_LAG_MS * 4;
+    min_lag_8kHz      = PE_MIN_LAG_MS * 8;
+    max_lag           = PE_MAX_LAG_MS * Fs_kHz;
+    max_lag_4kHz      = PE_MAX_LAG_MS * 4;
+    max_lag_8kHz      = PE_MAX_LAG_MS * 8;
+
+    SKP_memset( C, 0, sizeof( SKP_int16 ) * nb_subfr * ( ( PE_MAX_LAG >> 1 ) + 5) );
+    
+    /* Resample from input sampled at Fs_kHz to 8 kHz */
+    if( Fs_kHz == 16 ) {
+        SKP_memset( filt_state, 0, 2 * sizeof( SKP_int32 ) );
+        SKP_Silk_resampler_down2( filt_state, signal_8kHz, signal, frame_length );
+    } else if ( Fs_kHz == 12 ) {
+        SKP_int32 R23[ 6 ];
+        SKP_memset( R23, 0, 6 * sizeof( SKP_int32 ) );
+        SKP_Silk_resampler_down2_3( R23, signal_8kHz, signal, frame_length );
+    } else if( Fs_kHz == 24 ) {
+        SKP_int32 filt_state_fix[ 8 ];
+        SKP_memset( filt_state_fix, 0, 8 * sizeof(SKP_int32) );
+        SKP_Silk_resampler_down3( filt_state_fix, signal_8kHz, signal, frame_length );
+    } else {
+        SKP_assert( Fs_kHz == 8 );
+        SKP_memcpy( signal_8kHz, signal, frame_length_8kHz * sizeof(SKP_int16) );
+    }
+    /* Decimate again to 4 kHz */
+    SKP_memset( filt_state, 0, 2 * sizeof( SKP_int32 ) );/* Set state to zero */
+    SKP_Silk_resampler_down2( filt_state, signal_4kHz, signal_8kHz, frame_length_8kHz );
+
+    /* Low-pass filter */
+    for( i = frame_length_4kHz - 1; i > 0; i-- ) {
+        signal_4kHz[ i ] = SKP_ADD_SAT16( signal_4kHz[ i ], signal_4kHz[ i - 1 ] );
+    }
+
+    /*******************************************************************************
+    ** Scale 4 kHz signal down to prevent correlations measures from overflowing
+    ** find scaling as max scaling for each 8kHz(?) subframe
+    *******************************************************************************/
+    
+    /* Inner product is calculated with different lengths, so scale for the worst case */
+    max_sum_sq_length = SKP_max_32( sf_length_8kHz, SKP_LSHIFT( sf_length_4kHz, 2 ) );
+    shift = SKP_FIX_P_Ana_find_scaling( signal_4kHz, frame_length_4kHz, max_sum_sq_length );
+    if( shift > 0 ) {
+        for( i = 0; i < frame_length_4kHz; i++ ) {
+            signal_4kHz[ i ] = SKP_RSHIFT( signal_4kHz[ i ], shift );
+        }
+    }
+
+    /******************************************************************************
+    * FIRST STAGE, operating in 4 khz
+    ******************************************************************************/
+    target_ptr = &signal_4kHz[ SKP_LSHIFT( sf_length_4kHz, 2 ) ];
+    for( k = 0; k < nb_subfr >> 1; k++ ) {
+        /* Check that we are within range of the array */
+        SKP_assert( target_ptr >= signal_4kHz );
+        SKP_assert( target_ptr + sf_length_8kHz <= signal_4kHz + frame_length_4kHz );
+
+        basis_ptr = target_ptr - min_lag_4kHz;
+
+        /* Check that we are within range of the array */
+        SKP_assert( basis_ptr >= signal_4kHz );
+        SKP_assert( basis_ptr + sf_length_8kHz <= signal_4kHz + frame_length_4kHz );
+
+        normalizer = 0;
+        cross_corr = 0;
+        /* Calculate first vector products before loop */
+        cross_corr = SKP_Silk_inner_prod_aligned( target_ptr, basis_ptr, sf_length_8kHz );
+        normalizer = SKP_Silk_inner_prod_aligned( basis_ptr,  basis_ptr, sf_length_8kHz );
+        normalizer = SKP_ADD_SAT32( normalizer, 1000 );
+
+        temp32 = SKP_DIV32( cross_corr, SKP_Silk_SQRT_APPROX( normalizer ) + 1 );
+        C[ k ][ min_lag_4kHz ] = (SKP_int16)SKP_SAT16( temp32 );        /* Q0 */
+
+        /* From now on normalizer is computed recursively */
+        for( d = min_lag_4kHz + 1; d <= max_lag_4kHz; d++ ) {
+            basis_ptr--;
+
+            /* Check that we are within range of the array */
+            SKP_assert( basis_ptr >= signal_4kHz );
+            SKP_assert( basis_ptr + sf_length_8kHz <= signal_4kHz + frame_length_4kHz );
+
+            cross_corr = SKP_Silk_inner_prod_aligned( target_ptr, basis_ptr, sf_length_8kHz );
+
+            /* Add contribution of new sample and remove contribution from oldest sample */
+            normalizer +=
+                SKP_SMULBB( basis_ptr[ 0 ], basis_ptr[ 0 ] ) - 
+                SKP_SMULBB( basis_ptr[ sf_length_8kHz ], basis_ptr[ sf_length_8kHz ] ); 
+    
+            temp32 = SKP_DIV32( cross_corr, SKP_Silk_SQRT_APPROX( normalizer ) + 1 );
+            C[ k ][ d ] = (SKP_int16)SKP_SAT16( temp32 );                        /* Q0 */
+        }
+        /* Update target pointer */
+        target_ptr += sf_length_8kHz;
+    }
+
+    /* Combine two subframes into single correlation measure and apply short-lag bias */
+    if( nb_subfr == PE_MAX_NB_SUBFR ) {
+        for( i = max_lag_4kHz; i >= min_lag_4kHz; i-- ) {
+            sum = (SKP_int32)C[ 0 ][ i ] + (SKP_int32)C[ 1 ][ i ];                /* Q0 */
+            SKP_assert( SKP_RSHIFT( sum, 1 ) == SKP_SAT16( SKP_RSHIFT( sum, 1 ) ) );
+            sum = SKP_RSHIFT( sum, 1 );                                           /* Q-1 */
+            SKP_assert( SKP_LSHIFT( (SKP_int32)-i, 4 ) == SKP_SAT16( SKP_LSHIFT( (SKP_int32)-i, 4 ) ) );
+            sum = SKP_SMLAWB( sum, sum, SKP_LSHIFT( -i, 4 ) );                    /* Q-1 */
+            SKP_assert( sum == SKP_SAT16( sum ) );
+            C[ 0 ][ i ] = (SKP_int16)sum;                                         /* Q-1 */
+        }
+    } else {
+        /* Only short lag bias */
+        for( i = max_lag_4kHz; i >= min_lag_4kHz; i-- ) {
+            sum = (SKP_int32)C[ 0 ][ i ];
+            sum = SKP_SMLAWB( sum, sum, SKP_LSHIFT( -i, 4 ) );                    /* Q-1 */
+            C[ 0 ][ i ] = (SKP_int16)sum;                                         /* Q-1 */
+        }
+    }
+    /* Sort */
+    length_d_srch = 5 + complexity;
+    SKP_assert( length_d_srch <= PE_D_SRCH_LENGTH );
+      SKP_Silk_insertion_sort_decreasing_int16( &C[ 0 ][ min_lag_4kHz ], d_srch, max_lag_4kHz - min_lag_4kHz + 1, length_d_srch );
+
+    /* Escape if correlation is very low already here */
+    target_ptr = &signal_4kHz[ SKP_SMULBB( sf_length_4kHz, nb_subfr ) ];
+    energy = SKP_Silk_inner_prod_aligned( target_ptr, target_ptr, SKP_LSHIFT( sf_length_4kHz, 2 ) );
+    energy = SKP_ADD_SAT32( energy, 1000 );                                  /* Q0 */
+    Cmax = (SKP_int)C[ 0 ][ min_lag_4kHz ];                                  /* Q-1 */
+    threshold = SKP_SMULBB( Cmax, Cmax );                                    /* Q-2 */
+    /* Compare in Q-2 domain */
+
+    if( SKP_RSHIFT( energy, 4 + 2 ) > threshold ) {                            
+        SKP_memset( pitch_out, 0, nb_subfr * sizeof( SKP_int ) );
+        *LTPCorr_Q15  = 0;
+        *lagIndex     = 0;
+        *contourIndex = 0;
+        return 1;
+    }
+
+    threshold = SKP_SMULWB( search_thres1_Q16, Cmax );
+    for( i = 0; i < length_d_srch; i++ ) {
+        /* Convert to 8 kHz indices for the sorted correlation that exceeds the threshold */
+        if( C[ 0 ][ min_lag_4kHz + i ] > threshold ) {
+            d_srch[ i ] = SKP_LSHIFT( d_srch[ i ] + min_lag_4kHz, 1 );
+        } else {
+            length_d_srch = i;
+            break;
+        }
+    }
+    SKP_assert( length_d_srch > 0 );
+
+    for( i = min_lag_8kHz - 5; i < max_lag_8kHz + 5; i++ ) {
+        d_comp[ i ] = 0;
+    }
+    for( i = 0; i < length_d_srch; i++ ) {
+        d_comp[ d_srch[ i ] ] = 1;
+    }
+
+    /* Convolution */
+    for( i = max_lag_8kHz + 3; i >= min_lag_8kHz; i-- ) {
+        d_comp[ i ] += d_comp[ i - 1 ] + d_comp[ i - 2 ];
+    }
+
+    length_d_srch = 0;
+    for( i = min_lag_8kHz; i < max_lag_8kHz + 1; i++ ) {    
+        if( d_comp[ i + 1 ] > 0 ) {
+            d_srch[ length_d_srch ] = i;
+            length_d_srch++;
+        }
+    }
+
+    /* Convolution */
+    for( i = max_lag_8kHz + 3; i >= min_lag_8kHz; i-- ) {
+        d_comp[ i ] += d_comp[ i - 1 ] + d_comp[ i - 2 ] + d_comp[ i - 3 ];
+    }
+
+    length_d_comp = 0;
+    for( i = min_lag_8kHz; i < max_lag_8kHz + 4; i++ ) {    
+        if( d_comp[ i ] > 0 ) {
+            d_comp[ length_d_comp ] = i - 2;
+            length_d_comp++;
+        }
+    }
+
+    /**********************************************************************************
+    ** SECOND STAGE, operating at 8 kHz, on lag sections with high correlation
+    *************************************************************************************/
+
+    /******************************************************************************
+    ** Scale signal down to avoid correlations measures from overflowing
+    *******************************************************************************/
+    /* find scaling as max scaling for each subframe */
+    shift = SKP_FIX_P_Ana_find_scaling( signal_8kHz, frame_length_8kHz, sf_length_8kHz );
+    if( shift > 0 ) {
+        for( i = 0; i < frame_length_8kHz; i++ ) {
+            signal_8kHz[ i ] = SKP_RSHIFT( signal_8kHz[ i ], shift );
+        }
+    }
+
+    /********************************************************************************* 
+    * Find energy of each subframe projected onto its history, for a range of delays
+    *********************************************************************************/
+    SKP_memset( C, 0, PE_MAX_NB_SUBFR * ( ( PE_MAX_LAG >> 1 ) + 5 ) * sizeof( SKP_int16 ) );
+    
+    target_ptr = &signal_8kHz[ PE_LTP_MEM_LENGTH_MS * 8 ];
+    for( k = 0; k < nb_subfr; k++ ) {
+
+        /* Check that we are within range of the array */
+        SKP_assert( target_ptr >= signal_8kHz );
+        SKP_assert( target_ptr + sf_length_8kHz <= signal_8kHz + frame_length_8kHz );
+
+        energy_target = SKP_Silk_inner_prod_aligned( target_ptr, target_ptr, sf_length_8kHz );
+        // ToDo: Calculate 1 / energy_target here and save one division inside next for loop
+        for( j = 0; j < length_d_comp; j++ ) {
+            d = d_comp[ j ];
+            basis_ptr = target_ptr - d;
+
+            /* Check that we are within range of the array */
+             SKP_assert( basis_ptr >= signal_8kHz );
+            SKP_assert( basis_ptr + sf_length_8kHz <= signal_8kHz + frame_length_8kHz );
+        
+            cross_corr   = SKP_Silk_inner_prod_aligned( target_ptr, basis_ptr, sf_length_8kHz );
+            energy_basis = SKP_Silk_inner_prod_aligned( basis_ptr,  basis_ptr, sf_length_8kHz );
+            if( cross_corr > 0 ) {
+                energy = SKP_max( energy_target, energy_basis ); /* Find max to make sure first division < 1.0 */
+                lz = SKP_Silk_CLZ32( cross_corr );
+                lshift = SKP_LIMIT_32( lz - 1, 0, 15 );
+                temp32 = SKP_DIV32( SKP_LSHIFT( cross_corr, lshift ), SKP_RSHIFT( energy, 15 - lshift ) + 1 ); /* Q15 */
+                SKP_assert( temp32 == SKP_SAT16( temp32 ) );
+                temp32 = SKP_SMULWB( cross_corr, temp32 ); /* Q(-1), cc * ( cc / max(b, t) ) */
+                temp32 = SKP_ADD_SAT32( temp32, temp32 );  /* Q(0) */
+                lz = SKP_Silk_CLZ32( temp32 );
+                lshift = SKP_LIMIT_32( lz - 1, 0, 15 );
+                energy = SKP_min( energy_target, energy_basis );
+                C[ k ][ d ] = SKP_DIV32( SKP_LSHIFT( temp32, lshift ), SKP_RSHIFT( energy, 15 - lshift ) + 1 ); // Q15
+            } else {
+                C[ k ][ d ] = 0;
+            }
+        }
+        target_ptr += sf_length_8kHz;
+    }
+
+    /* search over lag range and lags codebook */
+    /* scale factor for lag codebook, as a function of center lag */
+
+    CCmax   = SKP_int32_MIN;
+    CCmax_b = SKP_int32_MIN;
+
+    CBimax = 0; /* To avoid returning undefined lag values */
+    lag = -1;   /* To check if lag with strong enough correlation has been found */
+
+    if( prevLag > 0 ) {
+        if( Fs_kHz == 12 ) {
+            prevLag = SKP_DIV32_16( SKP_LSHIFT( prevLag, 1 ), 3 );
+        } else if( Fs_kHz == 16 ) {
+            prevLag = SKP_RSHIFT( prevLag, 1 );
+        } else if( Fs_kHz == 24 ) {
+            prevLag = SKP_DIV32_16( prevLag, 3 );
+        }
+        prevLag_log2_Q7 = SKP_Silk_lin2log( (SKP_int32)prevLag );
+    } else {
+        prevLag_log2_Q7 = 0;
+    }
+    SKP_assert( search_thres2_Q15 == SKP_SAT16( search_thres2_Q15 ) );
+    /* Setup stage 2 codebook based on number of subframes */
+    if( nb_subfr == PE_MAX_NB_SUBFR ) {
+        cbk_size   = PE_NB_CBKS_STAGE2_EXT;
+        Lag_CB_ptr = &SKP_Silk_CB_lags_stage2[ 0 ][ 0 ];
+        if( Fs_kHz == 8 && complexity > SKP_Silk_PE_MIN_COMPLEX ) {
+            /* If input is 8 khz use a larger codebook here because it is last stage */
+            nb_cbk_search = PE_NB_CBKS_STAGE2_EXT;
+        } else {
+            nb_cbk_search = PE_NB_CBKS_STAGE2;
+        }
+        corr_thres_Q15 = SKP_RSHIFT( SKP_SMULBB( search_thres2_Q15, search_thres2_Q15 ), 13 );
+    }else{
+        cbk_size       = PE_NB_CBKS_STAGE2_10MS;
+        Lag_CB_ptr     = &SKP_Silk_CB_lags_stage2_10_ms[ 0 ][ 0 ];
+        nb_cbk_search  = PE_NB_CBKS_STAGE2_10MS;
+        corr_thres_Q15 = SKP_RSHIFT( SKP_SMULBB( search_thres2_Q15, search_thres2_Q15 ), 14 );
+    }
+
+    for( k = 0; k < length_d_srch; k++ ) {
+        d = d_srch[ k ];
+        for( j = 0; j < nb_cbk_search; j++ ) {
+            CC[ j ] = 0;
+            for( i = 0; i < nb_subfr; i++ ) {
+                /* Try all codebooks */
+                CC[ j ] = CC[ j ] + (SKP_int32)C[ i ][ d + matrix_ptr( Lag_CB_ptr, i, j, cbk_size )];
+            }
+        }
+        /* Find best codebook */
+        CCmax_new = SKP_int32_MIN;
+        CBimax_new = 0;
+        for( i = 0; i < nb_cbk_search; i++ ) {
+            if( CC[ i ] > CCmax_new ) {
+                CCmax_new = CC[ i ];
+                CBimax_new = i;
+            }
+        }
+
+        /* Bias towards shorter lags */
+        lag_log2_Q7 = SKP_Silk_lin2log( (SKP_int32)d ); /* Q7 */
+        SKP_assert( lag_log2_Q7 == SKP_SAT16( lag_log2_Q7 ) );
+        SKP_assert( nb_subfr * PE_SHORTLAG_BIAS_Q15 == SKP_SAT16( nb_subfr * PE_SHORTLAG_BIAS_Q15 ) );
+        CCmax_new_b = CCmax_new - SKP_RSHIFT( SKP_SMULBB( nb_subfr * PE_SHORTLAG_BIAS_Q15, lag_log2_Q7 ), 7 ); /* Q15 */
+
+        /* Bias towards previous lag */
+        SKP_assert( nb_subfr * PE_PREVLAG_BIAS_Q15 == SKP_SAT16( nb_subfr * PE_PREVLAG_BIAS_Q15 ) );
+        if( prevLag > 0 ) {
+            delta_lag_log2_sqr_Q7 = lag_log2_Q7 - prevLag_log2_Q7;
+            SKP_assert( delta_lag_log2_sqr_Q7 == SKP_SAT16( delta_lag_log2_sqr_Q7 ) );
+            delta_lag_log2_sqr_Q7 = SKP_RSHIFT( SKP_SMULBB( delta_lag_log2_sqr_Q7, delta_lag_log2_sqr_Q7 ), 7 );
+            prev_lag_bias_Q15 = SKP_RSHIFT( SKP_SMULBB( nb_subfr * PE_PREVLAG_BIAS_Q15, ( *LTPCorr_Q15 ) ), 15 ); /* Q15 */
+            prev_lag_bias_Q15 = SKP_DIV32( SKP_MUL( prev_lag_bias_Q15, delta_lag_log2_sqr_Q7 ), delta_lag_log2_sqr_Q7 + ( 1 << 6 ) );
+            CCmax_new_b -= prev_lag_bias_Q15; /* Q15 */
+        }
+
+        if( CCmax_new_b > CCmax_b && CCmax_new > corr_thres_Q15 ) {
+            CCmax_b = CCmax_new_b;
+            CCmax   = CCmax_new;
+            lag     = d;
+            CBimax  = CBimax_new;
+        }
+    }
+
+    if( lag == -1 ) {
+        /* No suitable candidate found */
+        SKP_memset( pitch_out, 0, nb_subfr * sizeof( SKP_int ) );
+        *LTPCorr_Q15  = 0;
+        *lagIndex     = 0;
+        *contourIndex = 0;
+        return 1;
+    }
+
+    if( Fs_kHz > 8 ) {
+
+        /******************************************************************************
+        ** Scale input signal down to avoid correlations measures from overflowing
+        *******************************************************************************/
+        /* find scaling as max scaling for each subframe */
+        shift = SKP_FIX_P_Ana_find_scaling( signal, frame_length, sf_length );
+        if( shift > 0 ) {
+            /* Move signal to scratch mem because the input signal should be unchanged */
+            /* Reuse the 32 bit scratch mem vector, use a 16 bit pointer from now */
+            input_signal_ptr = (SKP_int16*)scratch_mem;
+            for( i = 0; i < frame_length; i++ ) {
+                input_signal_ptr[ i ] = SKP_RSHIFT( signal[ i ], shift );
+            }
+        } else {
+            input_signal_ptr = (SKP_int16*)signal;
+        }
+        /*********************************************************************************/
+
+        /* Search in original signal */
+                    
+        CBimax_old = CBimax;
+        /* Compensate for decimation */
+        SKP_assert( lag == SKP_SAT16( lag ) );
+        if( Fs_kHz == 12 ) {
+            lag = SKP_RSHIFT( SKP_SMULBB( lag, 3 ), 1 );
+        } else if( Fs_kHz == 16 ) {
+            lag = SKP_LSHIFT( lag, 1 );
+        } else {
+            lag = SKP_SMULBB( lag, 3 );
+        }
+
+        lag = SKP_LIMIT_int( lag, min_lag, max_lag );
+        start_lag = SKP_max_int( lag - 2, min_lag );
+        end_lag   = SKP_min_int( lag + 2, max_lag );
+        lag_new   = lag;                                    /* to avoid undefined lag */
+        CBimax    = 0;                                        /* to avoid undefined lag */
+        SKP_assert( SKP_LSHIFT( CCmax, 13 ) >= 0 ); 
+        *LTPCorr_Q15 = (SKP_int)SKP_Silk_SQRT_APPROX( SKP_LSHIFT( CCmax, 13 ) ); /* Output normalized correlation */
+
+        CCmax = SKP_int32_MIN;
+        /* pitch lags according to second stage */
+        for( k = 0; k < nb_subfr; k++ ) {
+            pitch_out[ k ] = lag + 2 * SKP_Silk_CB_lags_stage2[ k ][ CBimax_old ];
+        }
+        /* Calculate the correlations and energies needed in stage 3 */
+        SKP_FIX_P_Ana_calc_corr_st3(  crosscorr_st3, input_signal_ptr, start_lag, sf_length, nb_subfr, complexity );
+        SKP_FIX_P_Ana_calc_energy_st3( energies_st3, input_signal_ptr, start_lag, sf_length, nb_subfr, complexity );
+
+        lag_counter = 0;
+        SKP_assert( lag == SKP_SAT16( lag ) );
+        contour_bias = SKP_DIV32_16( PE_FLATCONTOUR_BIAS_Q20, lag );
+
+        /* Setup cbk parameters acording to complexity setting and frame length */
+        if( nb_subfr == PE_MAX_NB_SUBFR ) {
+            nb_cbk_search   = (SKP_int)SKP_Silk_nb_cbk_searchs_stage3[   complexity ];
+            cbk_size        = PE_NB_CBKS_STAGE3_MAX;
+            cbk_offset      = (SKP_int)SKP_Silk_cbk_offsets_stage3[ complexity ];
+            Lag_CB_ptr      = &SKP_Silk_CB_lags_stage3[ 0 ][ 0 ];
+        } else {
+            nb_cbk_search   = PE_NB_CBKS_STAGE3_10MS;
+            cbk_size        = PE_NB_CBKS_STAGE3_10MS;
+            cbk_offset      = 0;
+            Lag_CB_ptr      = &SKP_Silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
+        }
+        for( d = start_lag; d <= end_lag; d++ ) {
+            for( j = cbk_offset; j < ( cbk_offset + nb_cbk_search ); j++ ) {
+                cross_corr = 0;
+                energy     = 0;
+                for( k = 0; k < nb_subfr; k++ ) {
+                    SKP_assert( PE_MAX_NB_SUBFR == 4 );
+                    energy     += SKP_RSHIFT( energies_st3[  k ][ j ][ lag_counter ], 2 ); /* use mean, to avoid overflow */
+                     SKP_assert( energy >= 0 );
+                    cross_corr += SKP_RSHIFT( crosscorr_st3[ k ][ j ][ lag_counter ], 2 ); /* use mean, to avoid overflow */
+                }
+                if( cross_corr > 0 ) {
+                    /* Divide cross_corr / energy and get result in Q15 */
+                    lz = SKP_Silk_CLZ32( cross_corr );
+                    /* Divide with result in Q13, cross_corr could be larger than energy */
+                    lshift = SKP_LIMIT_32( lz - 1, 0, 13 );
+                    CCmax_new = SKP_DIV32( SKP_LSHIFT( cross_corr, lshift ), SKP_RSHIFT( energy, 13 - lshift ) + 1 );
+                    CCmax_new = SKP_SAT16( CCmax_new );
+                    CCmax_new = SKP_SMULWB( cross_corr, CCmax_new );
+                    /* Saturate */
+                    if( CCmax_new > SKP_RSHIFT( SKP_int32_MAX, 3 ) ) {
+                        CCmax_new = SKP_int32_MAX;
+                    } else {
+                        CCmax_new = SKP_LSHIFT( CCmax_new, 3 );
+                    }
+                    /* Reduce depending on flatness of contour */
+                    diff = j - SKP_RSHIFT( cbk_size, 1 );
+                    diff = SKP_MUL( diff, diff );
+                    diff = SKP_int16_MAX - SKP_RSHIFT( SKP_MUL( contour_bias, diff ), 5 ); /* Q20 -> Q15 */
+                    SKP_assert( diff == SKP_SAT16( diff ) );
+                    CCmax_new = SKP_LSHIFT( SKP_SMULWB( CCmax_new, diff ), 1 );
+                } else {
+                    CCmax_new = 0;
+                }
+
+                if( CCmax_new > CCmax ) {
+                    CCmax   = CCmax_new;
+                    lag_new = d;
+                    CBimax  = j;
+                }
+            }
+            lag_counter++;
+        }
+
+        for( k = 0; k < nb_subfr; k++ ) {
+            pitch_out[ k ] = lag_new + matrix_ptr( Lag_CB_ptr, k, CBimax, cbk_size );
+        }
+        *lagIndex = lag_new - min_lag;
+        *contourIndex = CBimax;
+    } else {
+        /* Save Lags and correlation */
+        CCmax = SKP_max( CCmax, 0 );
+        *LTPCorr_Q15 = (SKP_int)SKP_Silk_SQRT_APPROX( SKP_LSHIFT( CCmax, 13 ) ); /* Output normalized correlation */
+        for( k = 0; k < nb_subfr; k++ ) {
+            pitch_out[ k ] = lag + SKP_Silk_CB_lags_stage2[ k ][ CBimax ];
+        }
+        *lagIndex = lag - min_lag_8kHz;
+        *contourIndex = CBimax;
+    }
+    SKP_assert( *lagIndex >= 0 );
+    /* return as voiced */
+    return 0;
+}
+
+/*************************************************************************/
+/* Calculates the correlations used in stage 3 search. In order to cover */
+/* the whole lag codebook for all the searched offset lags (lag +- 2),   */
+/*************************************************************************/
+void SKP_FIX_P_Ana_calc_corr_st3(
+    SKP_int32        cross_corr_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ],/* (O) 3 DIM correlation array */
+    const SKP_int16  signal[],                        /* I vector to correlate         */
+    SKP_int          start_lag,                       /* I lag offset to search around */
+    SKP_int          sf_length,                       /* I length of a 5 ms subframe   */
+    SKP_int          nb_subfr,                        /* I number of subframes         */
+    SKP_int          complexity                       /* I Complexity setting          */
+)
+{
+    const SKP_int16 *target_ptr, *basis_ptr;
+    SKP_int32 cross_corr;
+    SKP_int   i, j, k, lag_counter, lag_low, lag_high;
+    SKP_int   cbk_offset, nb_cbk_search, delta, idx, cbk_size;
+    SKP_int32 scratch_mem[ SCRATCH_SIZE ];
+    const SKP_int8 *Lag_range_ptr, *Lag_CB_ptr;
+
+    SKP_assert( complexity >= SKP_Silk_PE_MIN_COMPLEX );
+    SKP_assert( complexity <= SKP_Silk_PE_MAX_COMPLEX );
+
+    if( nb_subfr == PE_MAX_NB_SUBFR ){
+        Lag_range_ptr = &SKP_Silk_Lag_range_stage3[ complexity ][ 0 ][ 0 ];
+        Lag_CB_ptr    = &SKP_Silk_CB_lags_stage3[ 0 ][ 0 ];
+        cbk_offset    = SKP_Silk_cbk_offsets_stage3[ complexity ];
+        nb_cbk_search = SKP_Silk_nb_cbk_searchs_stage3[   complexity ];
+        cbk_size      = PE_NB_CBKS_STAGE3_MAX;
+    } else {
+        SKP_assert( nb_subfr == PE_MAX_NB_SUBFR >> 1);
+        Lag_range_ptr = &SKP_Silk_Lag_range_stage3_10_ms[ 0 ][ 0 ];
+        Lag_CB_ptr    = &SKP_Silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
+        cbk_offset    = 0;
+        nb_cbk_search = PE_NB_CBKS_STAGE3_10MS;
+        cbk_size      = PE_NB_CBKS_STAGE3_10MS;
+    }
+
+    target_ptr = &signal[ SKP_LSHIFT( sf_length, 2 ) ]; /* Pointer to middle of frame */
+    for( k = 0; k < nb_subfr; k++ ) {
+        lag_counter = 0;
+
+        /* Calculate the correlations for each subframe */
+        lag_low  = matrix_ptr( Lag_range_ptr, k, 0, 2 );
+        lag_high = matrix_ptr( Lag_range_ptr, k, 1, 2 );
+        for( j = lag_low; j <= lag_high; j++ ) {
+            basis_ptr = target_ptr - ( start_lag + j );
+            cross_corr = SKP_Silk_inner_prod_aligned( (SKP_int16*)target_ptr, (SKP_int16*)basis_ptr, sf_length );
+            SKP_assert( lag_counter < SCRATCH_SIZE );
+            scratch_mem[ lag_counter ] = cross_corr;
+            lag_counter++;
+        }
+
+        delta = matrix_ptr( Lag_range_ptr, k, 0, 2 );
+        for( i = cbk_offset; i < ( cbk_offset + nb_cbk_search ); i++ ) { 
+            /* Fill out the 3 dim array that stores the correlations for */
+            /* each code_book vector for each start lag */
+            idx = matrix_ptr( Lag_CB_ptr, k, i, cbk_size ) - delta;
+            for( j = 0; j < PE_NB_STAGE3_LAGS; j++ ) {
+                SKP_assert( idx + j < SCRATCH_SIZE );
+                SKP_assert( idx + j < lag_counter );
+                cross_corr_st3[ k ][ i ][ j ] = scratch_mem[ idx + j ];
+            }
+        }
+        target_ptr += sf_length;
+    }
+}
+
+/********************************************************************/
+/* Calculate the energies for first two subframes. The energies are */
+/* calculated recursively.                                          */
+/********************************************************************/
+void SKP_FIX_P_Ana_calc_energy_st3(
+    SKP_int32        energies_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ],/* (O) 3 DIM energy array */
+    const SKP_int16  signal[],                        /* I vector to calc energy in    */
+    SKP_int          start_lag,                       /* I lag offset to search around */
+    SKP_int          sf_length,                       /* I length of one 5 ms subframe */
+    SKP_int          nb_subfr,                     /* I number of subframes         */
+    SKP_int          complexity                       /* I Complexity setting          */
+)
+{
+    const SKP_int16 *target_ptr, *basis_ptr;
+    SKP_int32 energy;
+    SKP_int   k, i, j, lag_counter;
+    SKP_int   cbk_offset, nb_cbk_search, delta, idx, cbk_size, lag_diff;
+    SKP_int32 scratch_mem[ SCRATCH_SIZE ];
+    const SKP_int8 *Lag_range_ptr, *Lag_CB_ptr;
+
+    SKP_assert( complexity >= SKP_Silk_PE_MIN_COMPLEX );
+    SKP_assert( complexity <= SKP_Silk_PE_MAX_COMPLEX );
+
+    if( nb_subfr == PE_MAX_NB_SUBFR ){
+        Lag_range_ptr = &SKP_Silk_Lag_range_stage3[ complexity ][ 0 ][ 0 ];
+        Lag_CB_ptr    = &SKP_Silk_CB_lags_stage3[ 0 ][ 0 ];
+        cbk_offset    = SKP_Silk_cbk_offsets_stage3[ complexity ];
+        nb_cbk_search = SKP_Silk_nb_cbk_searchs_stage3[   complexity ];
+        cbk_size      = PE_NB_CBKS_STAGE3_MAX;
+    } else {
+        SKP_assert( nb_subfr == PE_MAX_NB_SUBFR >> 1);
+        Lag_range_ptr = &SKP_Silk_Lag_range_stage3_10_ms[ 0 ][ 0 ];
+        Lag_CB_ptr    = &SKP_Silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
+        cbk_offset    = 0;
+        nb_cbk_search = PE_NB_CBKS_STAGE3_10MS;
+        cbk_size      = PE_NB_CBKS_STAGE3_10MS;
+    }
+    target_ptr = &signal[ SKP_LSHIFT( sf_length, 2 ) ];
+    for( k = 0; k < nb_subfr; k++ ) {
+        lag_counter = 0;
+
+        /* Calculate the energy for first lag */
+        basis_ptr = target_ptr - ( start_lag + matrix_ptr( Lag_range_ptr, k, 0, 2 ) );
+        energy = SKP_Silk_inner_prod_aligned( basis_ptr, basis_ptr, sf_length );
+        SKP_assert( energy >= 0 );
+        scratch_mem[ lag_counter ] = energy;
+        lag_counter++;
+
+        lag_diff = ( matrix_ptr( Lag_range_ptr, k, 1, 2 ) -  matrix_ptr( Lag_range_ptr, k, 0, 2 ) + 1 );
+        for( i = 1; i < lag_diff; i++ ) {
+            /* remove part outside new window */
+            energy -= SKP_SMULBB( basis_ptr[ sf_length - i ], basis_ptr[ sf_length - i ] );
+            SKP_assert( energy >= 0 );
+
+            /* add part that comes into window */
+            energy = SKP_ADD_SAT32( energy, SKP_SMULBB( basis_ptr[ -i ], basis_ptr[ -i ] ) );
+            SKP_assert( energy >= 0 );
+            SKP_assert( lag_counter < SCRATCH_SIZE );
+            scratch_mem[ lag_counter ] = energy;
+            lag_counter++;
+        }
+
+        delta = matrix_ptr( Lag_range_ptr, k, 0, 2 );
+        for( i = cbk_offset; i < ( cbk_offset + nb_cbk_search ); i++ ) { 
+            /* Fill out the 3 dim array that stores the correlations for    */
+            /* each code_book vector for each start lag                     */
+            idx = matrix_ptr( Lag_CB_ptr, k, i, cbk_size ) - delta;
+            for( j = 0; j < PE_NB_STAGE3_LAGS; j++ ) {
+                SKP_assert( idx + j < SCRATCH_SIZE );
+                SKP_assert( idx + j < lag_counter );
+                energies_st3[ k ][ i ][ j ] = scratch_mem[ idx + j ];
+                SKP_assert( energies_st3[ k ][ i ][ j ] >= 0 );
+            }
+        }
+        target_ptr += sf_length;
+    }
+}
+
+SKP_int32 SKP_FIX_P_Ana_find_scaling(
+    const SKP_int16  *signal,
+    const SKP_int    signal_length, 
+    const SKP_int    sum_sqr_len
+)
+{
+    SKP_int32 nbits, x_max;
+    
+    x_max = SKP_Silk_int16_array_maxabs( signal, signal_length );
+
+    if( x_max < SKP_int16_MAX ) {
+        /* Number of bits needed for the sum of the squares */
+        nbits = 32 - SKP_Silk_CLZ32( SKP_SMULBB( x_max, x_max ) ); 
+    } else {
+        /* Here we don't know if x_max should have been SKP_int16_MAX + 1, so we expect the worst case */
+        nbits = 30;
+    }
+    nbits += 17 - SKP_Silk_CLZ16( sum_sqr_len );
+
+    /* Without a guarantee of saturation, we need to keep the 31st bit free */
+    if( nbits < 31 ) {
+        return 0;
+    } else {
+        return( nbits - 30 );
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_pitch_est_defines.h
@@ -1,0 +1,43 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_PE_DEFINES_H
+#define SKP_SILK_PE_DEFINES_H
+
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_common_pitch_est_defines.h"
+
+/************************************************************/
+/* Definitions For Fix pitch estimator                      */
+/************************************************************/
+
+#define PE_SHORTLAG_BIAS_Q15         6554    /* 0.2f. for logarithmic weighting    */
+#define PE_PREVLAG_BIAS_Q15          6554    /* Prev lag bias    */
+#define PE_FLATCONTOUR_BIAS_Q20      52429   /* 0.05f */
+
+#endif
+
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_pitch_est_tables.c
@@ -1,0 +1,107 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_typedef.h"
+#include "SKP_Silk_pitch_est_defines.h"
+
+const SKP_int8 SKP_Silk_CB_lags_stage2_10_ms[ PE_MAX_NB_SUBFR >> 1][ PE_NB_CBKS_STAGE2_10MS ] =
+{
+    {0, 1, 0},
+    {0, 0, 1}
+};
+
+const SKP_int8 SKP_Silk_CB_lags_stage3_10_ms[ PE_MAX_NB_SUBFR >> 1 ][ PE_NB_CBKS_STAGE3_10MS ] = 
+{
+    {-3,-2,-2,-1,-1, 0, 0, 1, 1, 2, 2,3},
+    { 3, 3, 2, 2, 1, 1, 0, 0,-1,-1,-2,-2}
+};
+
+const SKP_int8 SKP_Silk_Lag_range_stage3_10_ms[ PE_MAX_NB_SUBFR >> 1 ][ 2 ] = 
+{
+    {-3, 7},
+    {-2, 7}
+};
+
+/********************************************************/
+/* Auto Generated File from generate_pitch_est_tables.m */
+/********************************************************/
+
+const SKP_int8 SKP_Silk_CB_lags_stage2[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE2_EXT ] =
+{
+    {0, 2,-1,-1,-1, 0, 0, 1, 1, 0, 1},
+    {0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0},
+    {0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0},
+    {0,-1, 2, 1, 0, 1, 1, 0, 0,-1,-1} 
+};
+
+const SKP_int8 SKP_Silk_CB_lags_stage3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ] =
+{
+    {-9,-7,-6,-5,-5,-4,-4,-3,-3,-2,-2,-2,-1,-1,-1, 0, 0, 0, 1, 1, 0, 1, 2, 2, 2, 3, 3, 4, 4, 5, 6, 5, 6, 8},
+    {-3,-2,-2,-2,-1,-1,-1,-1,-1, 0, 0,-1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 2, 1, 2, 2, 2, 2, 3},
+    { 3, 3, 2, 2, 2, 2, 1, 2, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,-1, 0, 0,-1,-1,-1,-1,-1,-2,-2,-2},
+    { 9, 8, 6, 5, 6, 5, 4, 4, 3, 3, 2, 2, 2, 1, 0, 1, 1, 0, 0, 0,-1,-1,-1,-2,-2,-2,-3,-3,-4,-4,-5,-5,-6,-7}
+ };
+
+const SKP_int8 SKP_Silk_Lag_range_stage3[ SKP_Silk_PE_MAX_COMPLEX + 1 ] [ PE_MAX_NB_SUBFR ][ 2 ] =
+{
+    /* Lags to search for low number of stage3 cbks */
+    {
+        {-2,6},
+        {-1,5},
+        {-1,5},
+        {-2,7}
+    },
+    /* Lags to search for middle number of stage3 cbks */
+    {
+        {-4,8},
+        {-1,6},
+        {-1,6},
+        {-4,9}
+    },
+    /* Lags to search for max number of stage3 cbks */
+    {
+        {-9,12},
+        {-3,7},
+        {-2,7},
+        {-7,13}
+    }
+};
+
+const SKP_int8 SKP_Silk_nb_cbk_searchs_stage3[ SKP_Silk_PE_MAX_COMPLEX + 1 ] = 
+{
+    PE_NB_CBKS_STAGE3_MIN,
+    PE_NB_CBKS_STAGE3_MID,
+    PE_NB_CBKS_STAGE3_MAX
+};
+
+const SKP_int8 SKP_Silk_cbk_offsets_stage3[ SKP_Silk_PE_MAX_COMPLEX + 1 ] = 
+{
+    ((PE_NB_CBKS_STAGE3_MAX - PE_NB_CBKS_STAGE3_MIN) >> 1),
+    ((PE_NB_CBKS_STAGE3_MAX - PE_NB_CBKS_STAGE3_MID) >> 1),
+    0
+};
+
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler.c
@@ -1,0 +1,323 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*																		*
+ * File Name:	SKP_Silk_resampler.c									*
+ *																		*
+ * Description: Interface to collection of resamplers					*
+ *                                                                      *
+ * Copyright 2010 (c), Skype Limited                                    *
+ * All rights reserved.													*
+ *                                                                      */
+
+/* Matrix of resampling methods used:
+ *                                        Fs_out (kHz)
+ *                        8      12     16     24     32     44.1   48
+ *
+ *               8        C      UF     U      UF     UF     UF     UF
+ *              12        AF     C      UF     U      UF     UF     UF
+ *              16        D      AF     C      UF     U      UF     UF
+ * Fs_in (kHz)  24        AIF    D      AF     C      UF     UF     U
+ *              32        UF     AF     D      AF     C      UF     UF
+ *              44.1      AMI    AMI    AMI    AMI    AMI    C      UF
+ *              48        DAF    DAF    AF     D      AF     UF     C
+ *
+ * default method: UF
+ *
+ * C   -> Copy (no resampling)
+ * D   -> Allpass-based 2x downsampling
+ * U   -> Allpass-based 2x upsampling
+ * DAF -> Allpass-based 2x downsampling followed by AR2 filter followed by FIR interpolation
+ * UF  -> Allpass-based 2x upsampling followed by FIR interpolation
+ * AMI -> ARMA4 filter followed by FIR interpolation
+ * AF  -> AR2 filter followed by FIR interpolation
+ *
+ * Input signals sampled above 48 kHz are first downsampled to at most 48 kHz.
+ * Output signals sampled above 48 kHz are upsampled from at most 48 kHz.
+ */
+
+#include "SKP_Silk_resampler_private.h"
+
+/* Greatest common divisor */
+static SKP_int32 gcd(
+    SKP_int32 a,
+    SKP_int32 b
+)
+{
+    SKP_int32 tmp;
+    while( b > 0 ) {
+        tmp = a - b * SKP_DIV32( a, b );
+        a   = b;
+        b   = tmp;
+    }
+    return a;
+}
+
+/* Initialize/reset the resampler state for a given pair of input/output sampling rates */
+SKP_int SKP_Silk_resampler_init( 
+	SKP_Silk_resampler_state_struct	*S,		    /* I/O: Resampler state 			*/
+	SKP_int32							Fs_Hz_in,	/* I:	Input sampling rate (Hz)	*/
+	SKP_int32							Fs_Hz_out	/* I:	Output sampling rate (Hz)	*/
+)
+{
+    SKP_int32 cycleLen, cyclesPerBatch, up2 = 0, down2 = 0;
+
+	/* Clear state */
+	SKP_memset( S, 0, sizeof( SKP_Silk_resampler_state_struct ) );
+
+	/* Input checking */
+#if RESAMPLER_SUPPORT_ABOVE_48KHZ
+	if( Fs_Hz_in < 8000 || Fs_Hz_in > 192000 || Fs_Hz_out < 8000 || Fs_Hz_out > 192000 ) {
+#else
+    if( Fs_Hz_in < 8000 || Fs_Hz_in >  48000 || Fs_Hz_out < 8000 || Fs_Hz_out >  48000 ) {
+#endif
+		SKP_assert( 0 );
+		return -1;
+	}
+
+#if RESAMPLER_SUPPORT_ABOVE_48KHZ
+	/* Determine pre downsampling and post upsampling */
+	if( Fs_Hz_in > 96000 ) {
+		S->nPreDownsamplers = 2;
+        S->down_pre_function = SKP_Silk_resampler_private_down4;
+    } else if( Fs_Hz_in > 48000 ) {
+		S->nPreDownsamplers = 1;
+        S->down_pre_function = SKP_Silk_resampler_down2;
+    } else {
+		S->nPreDownsamplers = 0;
+        S->down_pre_function = NULL;
+    }
+
+	if( Fs_Hz_out > 96000 ) {
+		S->nPostUpsamplers = 2;
+        S->up_post_function = SKP_Silk_resampler_private_up4;
+    } else if( Fs_Hz_out > 48000 ) {
+		S->nPostUpsamplers = 1;
+        S->up_post_function = SKP_Silk_resampler_up2;
+    } else {
+		S->nPostUpsamplers = 0;
+        S->up_post_function = NULL;
+    }
+
+    if( S->nPreDownsamplers + S->nPostUpsamplers > 0 ) {
+        /* Ratio of output/input samples */
+	    S->ratio_Q16 = SKP_LSHIFT32( SKP_DIV32( SKP_LSHIFT32( Fs_Hz_out, 13 ), Fs_Hz_in ), 3 );
+        /* Make sure the ratio is rounded up */
+        while( SKP_SMULWW( S->ratio_Q16, Fs_Hz_in ) < Fs_Hz_out ) S->ratio_Q16++;
+
+        /* Batch size is 10 ms */
+        S->batchSizePrePost = SKP_DIV32_16( Fs_Hz_in, 100 );
+
+        /* Convert sampling rate to those after pre-downsampling and before post-upsampling */
+	    Fs_Hz_in  = SKP_RSHIFT( Fs_Hz_in,  S->nPreDownsamplers  );
+	    Fs_Hz_out = SKP_RSHIFT( Fs_Hz_out, S->nPostUpsamplers  );
+    }
+#endif
+
+    /* Number of samples processed per batch */
+    /* First, try 10 ms frames */
+    S->batchSize = SKP_DIV32_16( Fs_Hz_in, 100 );
+    if( ( SKP_MUL( S->batchSize, 100 ) != Fs_Hz_in ) || ( Fs_Hz_in % 100 != 0 ) ) {
+        /* No integer number of input or output samples with 10 ms frames, use greatest common divisor */
+        cycleLen = SKP_DIV32( Fs_Hz_in, gcd( Fs_Hz_in, Fs_Hz_out ) );
+        cyclesPerBatch = SKP_DIV32( RESAMPLER_MAX_BATCH_SIZE_IN, cycleLen );
+        if( cyclesPerBatch == 0 ) {
+            /* cycleLen too big, let's just use the maximum batch size. Some distortion will result. */
+            S->batchSize = RESAMPLER_MAX_BATCH_SIZE_IN;
+            SKP_assert( 0 );
+        } else {
+            S->batchSize = SKP_MUL( cyclesPerBatch, cycleLen );
+        }
+    }
+
+
+	/* Find resampler with the right sampling ratio */
+    if( Fs_Hz_out > Fs_Hz_in ) {
+        /* Upsample */
+        if( Fs_Hz_out == SKP_MUL( Fs_Hz_in, 2 ) ) {                             /* Fs_out : Fs_in = 2 : 1 */
+            /* Special case: directly use 2x upsampler */
+    	    S->resampler_function = SKP_Silk_resampler_private_up2_HQ_wrapper;
+        } else {
+	        /* Default resampler */
+	        S->resampler_function = SKP_Silk_resampler_private_IIR_FIR;
+            up2 = 1;
+            if( Fs_Hz_in > 24000 ) {
+                /* Low-quality all-pass upsampler */
+                S->up2_function = SKP_Silk_resampler_up2;
+            } else {
+                /* High-quality all-pass upsampler */
+                S->up2_function = SKP_Silk_resampler_private_up2_HQ;
+            }
+        }
+    } else if ( Fs_Hz_out < Fs_Hz_in ) {
+        /* Downsample */
+        if( SKP_MUL( Fs_Hz_out, 4 ) == SKP_MUL( Fs_Hz_in, 3 ) ) {               /* Fs_out : Fs_in = 3 : 4 */
+    	    S->FIR_Fracs = 3;
+    	    S->Coefs = SKP_Silk_Resampler_3_4_COEFS;
+    	    S->resampler_function = SKP_Silk_resampler_private_down_FIR;
+        } else if( SKP_MUL( Fs_Hz_out, 3 ) == SKP_MUL( Fs_Hz_in, 2 ) ) {        /* Fs_out : Fs_in = 2 : 3 */
+    	    S->FIR_Fracs = 2;
+    	    S->Coefs = SKP_Silk_Resampler_2_3_COEFS;
+    	    S->resampler_function = SKP_Silk_resampler_private_down_FIR;
+        } else if( SKP_MUL( Fs_Hz_out, 2 ) == Fs_Hz_in ) {                      /* Fs_out : Fs_in = 1 : 2 */
+    	    S->FIR_Fracs = 1;
+    	    S->Coefs = SKP_Silk_Resampler_1_2_COEFS;
+    	    S->resampler_function = SKP_Silk_resampler_private_down_FIR;
+        } else if( SKP_MUL( Fs_Hz_out, 8 ) == SKP_MUL( Fs_Hz_in, 3 ) ) {        /* Fs_out : Fs_in = 3 : 8 */
+    	    S->FIR_Fracs = 3;
+    	    S->Coefs = SKP_Silk_Resampler_3_8_COEFS;
+    	    S->resampler_function = SKP_Silk_resampler_private_down_FIR;
+        } else if( SKP_MUL( Fs_Hz_out, 3 ) == Fs_Hz_in ) {                      /* Fs_out : Fs_in = 1 : 3 */
+    	    S->FIR_Fracs = 1;
+    	    S->Coefs = SKP_Silk_Resampler_1_3_COEFS;
+    	    S->resampler_function = SKP_Silk_resampler_private_down_FIR;
+        } else if( SKP_MUL( Fs_Hz_out, 4 ) == Fs_Hz_in ) {                      /* Fs_out : Fs_in = 1 : 4 */
+    	    S->FIR_Fracs = 1;
+            down2 = 1;
+    	    S->Coefs = SKP_Silk_Resampler_1_2_COEFS;
+            S->resampler_function = SKP_Silk_resampler_private_down_FIR;
+        } else if( SKP_MUL( Fs_Hz_out, 6 ) == Fs_Hz_in ) {                      /* Fs_out : Fs_in = 1 : 6 */
+    	    S->FIR_Fracs = 1;
+            down2 = 1;
+    	    S->Coefs = SKP_Silk_Resampler_1_3_COEFS;
+            S->resampler_function = SKP_Silk_resampler_private_down_FIR;
+        } else if( SKP_MUL( Fs_Hz_out, 441 ) == SKP_MUL( Fs_Hz_in, 80 ) ) {     /* Fs_out : Fs_in = 80 : 441 */
+    	    S->Coefs = SKP_Silk_Resampler_80_441_ARMA4_COEFS;
+    	    S->resampler_function = SKP_Silk_resampler_private_IIR_FIR;
+        } else if( SKP_MUL( Fs_Hz_out, 441 ) == SKP_MUL( Fs_Hz_in, 120 ) ) {    /* Fs_out : Fs_in = 120 : 441 */
+    	    S->Coefs = SKP_Silk_Resampler_120_441_ARMA4_COEFS;
+    	    S->resampler_function = SKP_Silk_resampler_private_IIR_FIR;
+        } else if( SKP_MUL( Fs_Hz_out, 441 ) == SKP_MUL( Fs_Hz_in, 160 ) ) {    /* Fs_out : Fs_in = 160 : 441 */
+    	    S->Coefs = SKP_Silk_Resampler_160_441_ARMA4_COEFS;
+    	    S->resampler_function = SKP_Silk_resampler_private_IIR_FIR;
+        } else if( SKP_MUL( Fs_Hz_out, 441 ) == SKP_MUL( Fs_Hz_in, 240 ) ) {    /* Fs_out : Fs_in = 240 : 441 */
+    	    S->Coefs = SKP_Silk_Resampler_240_441_ARMA4_COEFS;
+    	    S->resampler_function = SKP_Silk_resampler_private_IIR_FIR;
+        } else if( SKP_MUL( Fs_Hz_out, 441 ) == SKP_MUL( Fs_Hz_in, 320 ) ) {    /* Fs_out : Fs_in = 320 : 441 */
+    	    S->Coefs = SKP_Silk_Resampler_320_441_ARMA4_COEFS;
+    	    S->resampler_function = SKP_Silk_resampler_private_IIR_FIR;
+        } else {
+	        /* Default resampler */
+	        S->resampler_function = SKP_Silk_resampler_private_IIR_FIR;
+            up2 = 1;
+            if( Fs_Hz_in > 24000 ) {
+                /* Low-quality all-pass upsampler */
+                S->up2_function = SKP_Silk_resampler_up2;
+            } else {
+                /* High-quality all-pass upsampler */
+                S->up2_function = SKP_Silk_resampler_private_up2_HQ;
+            }
+        }
+    } else {
+        /* Input and output sampling rates are equal: copy */
+        S->resampler_function = SKP_Silk_resampler_private_copy;
+    }
+
+    S->input2x = up2 | down2;
+
+    /* Ratio of input/output samples */
+    S->invRatio_Q16 = SKP_LSHIFT32( SKP_DIV32( SKP_LSHIFT32( Fs_Hz_in, 14 + up2 - down2 ), Fs_Hz_out ), 2 );
+    /* Make sure the ratio is rounded up */
+    while( SKP_SMULWW( S->invRatio_Q16, SKP_LSHIFT32( Fs_Hz_out, down2 ) ) < SKP_LSHIFT32( Fs_Hz_in, up2 ) ) {
+        S->invRatio_Q16++;
+    }
+
+	S->magic_number = 123456789;
+
+	return 0;
+}
+
+/* Clear the states of all resampling filters, without resetting sampling rate ratio */
+SKP_int SKP_Silk_resampler_clear( 
+	SKP_Silk_resampler_state_struct	*S		    /* I/O: Resampler state 			*/
+)
+{
+	/* Clear state */
+	SKP_memset( S->sDown2, 0, sizeof( S->sDown2 ) );
+	SKP_memset( S->sIIR,   0, sizeof( S->sIIR ) );
+	SKP_memset( S->sFIR,   0, sizeof( S->sFIR ) );
+#if RESAMPLER_SUPPORT_ABOVE_48KHZ
+	SKP_memset( S->sDownPre, 0, sizeof( S->sDownPre ) );
+	SKP_memset( S->sUpPost,  0, sizeof( S->sUpPost ) );
+#endif
+    return 0;
+}
+
+/* Resampler: convert from one sampling rate to another                                 */
+SKP_int SKP_Silk_resampler( 
+	SKP_Silk_resampler_state_struct	*S,		    /* I/O: Resampler state 			*/
+	SKP_int16							out[],	    /* O:	Output signal 				*/
+	const SKP_int16						in[],	    /* I:	Input signal				*/
+	SKP_int32							inLen	    /* I:	Number of input samples		*/
+)
+{
+	/* Verify that state was initialized and has not been corrupted */
+    if( S->magic_number != 123456789 ) {
+        SKP_assert( 0 );
+        return -1;
+    }
+
+#if RESAMPLER_SUPPORT_ABOVE_48KHZ
+	if( S->nPreDownsamplers + S->nPostUpsamplers > 0 ) {
+		/* The input and/or output sampling rate is above 48000 Hz */
+        SKP_int32       nSamplesIn, nSamplesOut;
+		SKP_int16		in_buf[ 480 ], out_buf[ 480 ];
+
+        while( inLen > 0 ) {
+            /* Number of input and output samples to process */
+    		nSamplesIn = SKP_min( inLen, S->batchSizePrePost );
+            nSamplesOut = SKP_SMULWB( S->ratio_Q16, nSamplesIn );
+
+            SKP_assert( SKP_RSHIFT32( nSamplesIn,  S->nPreDownsamplers ) <= 480 );
+            SKP_assert( SKP_RSHIFT32( nSamplesOut, S->nPostUpsamplers  ) <= 480 );
+
+    		if( S->nPreDownsamplers > 0 ) {
+                S->down_pre_function( S->sDownPre, in_buf, in, nSamplesIn );
+    		    if( S->nPostUpsamplers > 0 ) {
+            		S->resampler_function( S, out_buf, in_buf, SKP_RSHIFT32( nSamplesIn, S->nPreDownsamplers ) );
+                    S->up_post_function( S->sUpPost, out, out_buf, SKP_RSHIFT32( nSamplesOut, S->nPostUpsamplers ) );
+                } else {
+            		S->resampler_function( S, out, in_buf, SKP_RSHIFT32( nSamplesIn, S->nPreDownsamplers ) );
+                }
+            } else {
+        		S->resampler_function( S, out_buf, in, SKP_RSHIFT32( nSamplesIn, S->nPreDownsamplers ) );
+                S->up_post_function( S->sUpPost, out, out_buf, SKP_RSHIFT32( nSamplesOut, S->nPostUpsamplers ) );
+            }
+
+    		in += nSamplesIn;
+            out += nSamplesOut;
+	    	inLen -= nSamplesIn;
+        }
+	} else 
+#endif
+	{
+		/* Input and output sampling rate are at most 48000 Hz */
+		S->resampler_function( S, out, in, inLen );
+	}
+
+	return 0;
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler_down2.c
@@ -1,0 +1,79 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_resampler_down2.c                                         *
+ *                                                                      *
+ * Downsample by a factor 2, mediocre quality                           *
+ *                                                                      *
+ * Copyright 2010 (c), Skype Limited                                    *
+ *                                                                      */
+
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_resampler_rom.h"
+
+#if (EMBEDDED_ARM<5) && (!defined(__mips__))
+/* Downsample by a factor 2, mediocre quality */
+void SKP_Silk_resampler_down2(
+    SKP_int32                           *S,         /* I/O: State vector [ 2 ]                  */
+    SKP_int16                           *out,       /* O:   Output signal [ len ]               */
+    const SKP_int16                     *in,        /* I:   Input signal [ floor(len/2) ]       */
+    SKP_int32                           inLen       /* I:   Number of input samples             */
+)
+{
+    SKP_int32 k, len2 = SKP_RSHIFT32( inLen, 1 );
+    SKP_int32 in32, out32, Y, X;
+
+    SKP_assert( SKP_Silk_resampler_down2_0 > 0 );
+    SKP_assert( SKP_Silk_resampler_down2_1 < 0 );
+
+    /* Internal variables and state are in Q10 format */
+    for( k = 0; k < len2; k++ ) {
+        /* Convert to Q10 */
+        in32 = SKP_LSHIFT( (SKP_int32)in[ 2 * k ], 10 );
+
+        /* All-pass section for even input sample */
+        Y      = SKP_SUB32( in32, S[ 0 ] );
+        X      = SKP_SMLAWB( Y, Y, SKP_Silk_resampler_down2_1 );
+        out32  = SKP_ADD32( S[ 0 ], X );
+        S[ 0 ] = SKP_ADD32( in32, X );
+
+        /* Convert to Q10 */
+        in32 = SKP_LSHIFT( (SKP_int32)in[ 2 * k + 1 ], 10 );
+
+        /* All-pass section for odd input sample, and add to output of previous section */
+        Y      = SKP_SUB32( in32, S[ 1 ] );
+        X      = SKP_SMULWB( Y, SKP_Silk_resampler_down2_0 );
+        out32  = SKP_ADD32( out32, S[ 1 ] );
+        out32  = SKP_ADD32( out32, X );
+        S[ 1 ] = SKP_ADD32( in32, X );
+
+        /* Add, convert back to int16 and store to output */
+        out[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( out32, 11 ) );
+    }
+}
+#endif
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler_down2_3.c
@@ -1,0 +1,102 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_resampler_down2_3.c                                       *
+ *                                                                      *
+ * Downsample by a factor 2/3, low quality                              *
+ *                                                                      *
+ * Copyright 2010 (c), Skype Limited                                    *
+ *                                                                      */
+
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_resampler_private.h"
+
+#define ORDER_FIR                   4
+
+/* Downsample by a factor 2/3, low quality */
+void SKP_Silk_resampler_down2_3(
+    SKP_int32                           *S,         /* I/O: State vector [ 6 ]                  */
+    SKP_int16                           *out,       /* O:   Output signal [ floor(2*inLen/3) ]  */
+    const SKP_int16                     *in,        /* I:   Input signal [ inLen ]              */
+    SKP_int32                           inLen       /* I:   Number of input samples             */
+)
+{
+    SKP_int32 nSamplesIn, counter, res_Q6;
+    SKP_int32 buf[ RESAMPLER_MAX_BATCH_SIZE_IN + ORDER_FIR ];
+    SKP_int32 *buf_ptr;
+
+    /* Copy buffered samples to start of buffer */	
+    SKP_memcpy( buf, S, ORDER_FIR * sizeof( SKP_int32 ) );
+
+    /* Iterate over blocks of frameSizeIn input samples */
+    while( 1 ) {
+        nSamplesIn = SKP_min( inLen, RESAMPLER_MAX_BATCH_SIZE_IN );
+
+        /* Second-order AR filter (output in Q8) */
+        SKP_Silk_resampler_private_AR2( &S[ ORDER_FIR ], &buf[ ORDER_FIR ], in, 
+            SKP_Silk_Resampler_2_3_COEFS_LQ, nSamplesIn );
+
+        /* Interpolate filtered signal */
+        buf_ptr = buf;
+        counter = nSamplesIn;
+        while( counter > 2 ) {
+            /* Inner product */
+            res_Q6 = SKP_SMULWB(         buf_ptr[ 0 ], SKP_Silk_Resampler_2_3_COEFS_LQ[ 2 ] );
+            res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 1 ], SKP_Silk_Resampler_2_3_COEFS_LQ[ 3 ] );
+            res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 2 ], SKP_Silk_Resampler_2_3_COEFS_LQ[ 5 ] );
+            res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 3 ], SKP_Silk_Resampler_2_3_COEFS_LQ[ 4 ] );
+
+            /* Scale down, saturate and store in output array */
+            *out++ = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( res_Q6, 6 ) );
+
+            res_Q6 = SKP_SMULWB(         buf_ptr[ 1 ], SKP_Silk_Resampler_2_3_COEFS_LQ[ 4 ] );
+            res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 2 ], SKP_Silk_Resampler_2_3_COEFS_LQ[ 5 ] );
+            res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 3 ], SKP_Silk_Resampler_2_3_COEFS_LQ[ 3 ] );
+            res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 4 ], SKP_Silk_Resampler_2_3_COEFS_LQ[ 2 ] );
+
+            /* Scale down, saturate and store in output array */
+            *out++ = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( res_Q6, 6 ) );
+
+            buf_ptr += 3;
+            counter -= 3;
+        }
+
+        in += nSamplesIn;
+        inLen -= nSamplesIn;
+
+        if( inLen > 0 ) {
+            /* More iterations to do; copy last part of filtered signal to beginning of buffer */
+            SKP_memcpy( buf, &buf[ nSamplesIn ], ORDER_FIR * sizeof( SKP_int32 ) );
+        } else {
+            break;
+        }
+    }
+
+    /* Copy last part of filtered signal to the state for the next call */
+    SKP_memcpy( S, &buf[ nSamplesIn ], ORDER_FIR * sizeof( SKP_int32 ) );
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler_down3.c
@@ -1,0 +1,93 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_resampler_down3.c                                         *
+ *                                                                      *
+ * Downsample by a factor 3, low quality                                *
+ *                                                                      *
+ * Copyright 2010 (c), Skype Limited                                    *
+ *                                                                      */
+
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_resampler_private.h"
+
+#define ORDER_FIR                   6
+
+/* Downsample by a factor 3, low quality */
+void SKP_Silk_resampler_down3(
+    SKP_int32                           *S,         /* I/O: State vector [ 8 ]                  */
+    SKP_int16                           *out,       /* O:   Output signal [ floor(inLen/3) ]    */
+    const SKP_int16                     *in,        /* I:   Input signal [ inLen ]              */
+    SKP_int32                           inLen       /* I:   Number of input samples             */
+)
+{
+	SKP_int32 nSamplesIn, counter, res_Q6;
+	SKP_int32 buf[ RESAMPLER_MAX_BATCH_SIZE_IN + ORDER_FIR ];
+	SKP_int32 *buf_ptr;
+
+	/* Copy buffered samples to start of buffer */	
+	SKP_memcpy( buf, S, ORDER_FIR * sizeof( SKP_int32 ) );
+
+	/* Iterate over blocks of frameSizeIn input samples */
+	while( 1 ) {
+		nSamplesIn = SKP_min( inLen, RESAMPLER_MAX_BATCH_SIZE_IN );
+
+	    /* Second-order AR filter (output in Q8) */
+	    SKP_Silk_resampler_private_AR2( &S[ ORDER_FIR ], &buf[ ORDER_FIR ], in, 
+            SKP_Silk_Resampler_1_3_COEFS_LQ, nSamplesIn );
+
+		/* Interpolate filtered signal */
+        buf_ptr = buf;
+        counter = nSamplesIn;
+        while( counter > 2 ) {
+            /* Inner product */
+            res_Q6 = SKP_SMULWB(         SKP_ADD32( buf_ptr[ 0 ], buf_ptr[ 5 ] ), SKP_Silk_Resampler_1_3_COEFS_LQ[ 2 ] );
+            res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 1 ], buf_ptr[ 4 ] ), SKP_Silk_Resampler_1_3_COEFS_LQ[ 3 ] );
+            res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 2 ], buf_ptr[ 3 ] ), SKP_Silk_Resampler_1_3_COEFS_LQ[ 4 ] );
+
+            /* Scale down, saturate and store in output array */
+            *out++ = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( res_Q6, 6 ) );
+
+            buf_ptr += 3;
+            counter -= 3;
+        }
+
+		in += nSamplesIn;
+		inLen -= nSamplesIn;
+
+		if( inLen > 0 ) {
+			/* More iterations to do; copy last part of filtered signal to beginning of buffer */
+			SKP_memcpy( buf, &buf[ nSamplesIn ], ORDER_FIR * sizeof( SKP_int32 ) );
+		} else {
+			break;
+		}
+	}
+
+	/* Copy last part of filtered signal to the state for the next call */
+	SKP_memcpy( S, &buf[ nSamplesIn ], ORDER_FIR * sizeof( SKP_int32 ) );
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler_private.h
@@ -1,0 +1,130 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*																		*
+ * File Name:	SKP_Silk_resampler_structs.h							*
+ *																		*
+ * Description: Structs for IIR/FIR resamplers							*
+ *                                                                      *
+ * Copyright 2010 (c), Skype Limited                                    *
+ * All rights reserved.													*
+ *																		*
+ *                                                                      */
+
+#ifndef SKP_Silk_RESAMPLER_H
+#define SKP_Silk_RESAMPLER_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_resampler_structs.h"
+#include "SKP_Silk_resampler_rom.h"
+
+/* Number of input samples to process in the inner loop */
+#define RESAMPLER_MAX_BATCH_SIZE_IN             480
+
+/* Description: Hybrid IIR/FIR polyphase implementation of resampling	*/
+void SKP_Silk_resampler_private_IIR_FIR(
+	void	                        *SS,		    /* I/O: Resampler state 						*/
+	SKP_int16						out[],		    /* O:	Output signal 							*/
+	const SKP_int16					in[],		    /* I:	Input signal							*/
+	SKP_int32					    inLen		    /* I:	Number of input samples					*/
+);
+
+/* Description: Hybrid IIR/FIR polyphase implementation of resampling	*/
+void SKP_Silk_resampler_private_down_FIR(
+	void	                        *SS,		    /* I/O: Resampler state 						*/
+	SKP_int16						out[],		    /* O:	Output signal 							*/
+	const SKP_int16					in[],		    /* I:	Input signal							*/
+	SKP_int32					    inLen		    /* I:	Number of input samples					*/
+);
+
+/* Copy */
+void SKP_Silk_resampler_private_copy(
+	void	                        *SS,		    /* I/O: Resampler state (unused)				*/
+	SKP_int16						out[],		    /* O:	Output signal 							*/
+	const SKP_int16					in[],		    /* I:	Input signal							*/
+	SKP_int32					    inLen		    /* I:	Number of input samples					*/
+);
+
+/* Upsample by a factor 2, high quality */
+void SKP_Silk_resampler_private_up2_HQ_wrapper(
+	void	                        *SS,		    /* I/O: Resampler state (unused)				*/
+    SKP_int16                       *out,           /* O:   Output signal [ 2 * len ]               */
+    const SKP_int16                 *in,            /* I:   Input signal [ len ]                    */
+    SKP_int32                       len             /* I:   Number of input samples                 */
+);
+
+/* Upsample by a factor 2, high quality */
+void SKP_Silk_resampler_private_up2_HQ(
+	SKP_int32	                    *S,			    /* I/O: Resampler state [ 6 ]					*/
+    SKP_int16                       *out,           /* O:   Output signal [ 2 * len ]               */
+    const SKP_int16                 *in,            /* I:   Input signal [ len ]                    */
+    SKP_int32                       len             /* I:   Number of input samples                 */
+);
+
+/* Upsample 4x, low quality */
+void SKP_Silk_resampler_private_up4(
+    SKP_int32                       *S,             /* I/O: State vector [ 2 ]                      */
+    SKP_int16                       *out,           /* O:   Output signal [ 4 * len ]               */
+    const SKP_int16                 *in,            /* I:   Input signal [ len ]                    */
+    SKP_int32                       len             /* I:   Number of input samples                 */
+);
+
+/* Downsample 4x, low quality */
+void SKP_Silk_resampler_private_down4(
+    SKP_int32                       *S,             /* I/O: State vector [ 2 ]                      */
+    SKP_int16                       *out,           /* O:   Output signal [ floor(len/2) ]          */
+    const SKP_int16                 *in,            /* I:   Input signal [ len ]                    */
+    SKP_int32                       inLen           /* I:   Number of input samples                 */
+);
+
+/* Second order AR filter */
+void SKP_Silk_resampler_private_AR2(
+	SKP_int32					    S[],		    /* I/O: State vector [ 2 ]			    	    */
+	SKP_int32					    out_Q8[],		/* O:	Output signal				    	    */
+	const SKP_int16				    in[],			/* I:	Input signal				    	    */
+	const SKP_int16				    A_Q14[],		/* I:	AR coefficients, Q14 	                */
+	SKP_int32				        len				/* I:	Signal length				        	*/
+);
+
+/* Fourth order ARMA filter */
+void SKP_Silk_resampler_private_ARMA4(
+	SKP_int32					    S[],		    /* I/O: State vector [ 4 ]			    	    */
+	SKP_int16					    out[],		    /* O:	Output signal				    	    */
+	const SKP_int16				    in[],			/* I:	Input signal				    	    */
+	const SKP_int16				    Coef[],		    /* I:	ARMA coefficients [ 7 ]                 */
+	SKP_int32				        len				/* I:	Signal length				        	*/
+);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif // SKP_Silk_RESAMPLER_H
+
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler_private_AR2.c
@@ -1,0 +1,60 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*																		*
+ * SKP_Silk_resampler_private_AR2. c                                  *
+ *																		*
+ * Second order AR filter with single delay elements                	*
+ *                                                                      *
+ * Copyright 2010 (c), Skype Limited                                    *
+ *                                                                      */
+
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_resampler_private.h"
+
+#if (EMBEDDED_ARM<5) && (!defined(__mips__)) 
+/* Second order AR filter with single delay elements */
+void SKP_Silk_resampler_private_AR2(
+	SKP_int32					    S[],		    /* I/O: State vector [ 2 ]			    	    */
+	SKP_int32					    out_Q8[],		/* O:	Output signal				    	    */
+	const SKP_int16				    in[],			/* I:	Input signal				    	    */
+	const SKP_int16				    A_Q14[],		/* I:	AR coefficients, Q14 	                */
+	SKP_int32				        len				/* I:	Signal length				        	*/
+)
+{
+	SKP_int32	k;
+	SKP_int32	out32;
+
+	for( k = 0; k < len; k++ ) {
+		out32       = SKP_ADD_LSHIFT32( S[ 0 ], (SKP_int32)in[ k ], 8 );
+		out_Q8[ k ] = out32;
+		out32       = SKP_LSHIFT( out32, 2 );
+		S[ 0 ]      = SKP_SMLAWB( S[ 1 ], out32, A_Q14[ 0 ] );
+		S[ 1 ]      = SKP_SMULWB( out32, A_Q14[ 1 ] );
+	}
+}
+#endif
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler_private_ARMA4.c
@@ -1,0 +1,79 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*																		*
+ * SKP_Silk_resampler_private_ARMA4.c                                 *
+ *																		*
+ * Fourth order ARMA filter, applies 64x gain                           *
+ *                                                                      *
+ * Copyright 2010 (c), Skype Limited                                    *
+ *                                                                      */
+
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_resampler_private.h"
+
+/* Fourth order ARMA filter                                             */
+/* Internally operates as two biquad filters in sequence.               */
+
+/* Coeffients are stored in a packed format:                                                        */
+/*    { B1_Q14[1], B2_Q14[1], -A1_Q14[1], -A1_Q14[2], -A2_Q14[1], -A2_Q14[2], gain_Q16 }            */
+/* where it is assumed that B*_Q14[0], B*_Q14[2], A*_Q14[0] are all 16384                           */
+#if (EMBEDDED_ARM<5) && (!defined(__mips__))
+void SKP_Silk_resampler_private_ARMA4(
+	SKP_int32					    S[],		    /* I/O: State vector [ 4 ]			    	    */
+	SKP_int16					    out[],		    /* O:	Output signal				    	    */
+	const SKP_int16				    in[],			/* I:	Input signal				    	    */
+	const SKP_int16				    Coef[],		    /* I:	ARMA coefficients [ 7 ]                 */
+	SKP_int32				        len				/* I:	Signal length				        	*/
+)
+{
+	SKP_int32 k;
+	SKP_int32 in_Q8, out1_Q8, out2_Q8, X;
+
+	for( k = 0; k < len; k++ ) {
+        in_Q8  = SKP_LSHIFT32( (SKP_int32)in[ k ], 8 );
+
+        /* Outputs of first and second biquad */
+        out1_Q8 = SKP_ADD_LSHIFT32( in_Q8,   S[ 0 ], 2 );
+        out2_Q8 = SKP_ADD_LSHIFT32( out1_Q8, S[ 2 ], 2 );
+
+        /* Update states, which are stored in Q6. Coefficients are in Q14 here */
+        X      = SKP_SMLAWB( S[ 1 ], in_Q8,   Coef[ 0 ] );
+        S[ 0 ] = SKP_SMLAWB( X,      out1_Q8, Coef[ 2 ] );
+
+        X      = SKP_SMLAWB( S[ 3 ], out1_Q8, Coef[ 1 ] );
+        S[ 2 ] = SKP_SMLAWB( X,      out2_Q8, Coef[ 4 ] );
+
+        S[ 1 ] = SKP_SMLAWB( SKP_RSHIFT32( in_Q8,   2 ), out1_Q8, Coef[ 3 ] );
+        S[ 3 ] = SKP_SMLAWB( SKP_RSHIFT32( out1_Q8, 2 ), out2_Q8, Coef[ 5 ] );
+
+        /* Apply gain and store to output. The coefficient is in Q16 */
+        out[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT32( SKP_SMLAWB( 128, out2_Q8, Coef[ 6 ] ), 8 ) );
+	}
+}
+#endif
+
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler_private_IIR_FIR.c
@@ -1,0 +1,105 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*																		*
+ * File Name:	SKP_Silk_resampler_private_IIR_FIR.c  			    *
+ *																		*
+ * Description: Hybrid IIR/FIR polyphase implementation of resampling	*
+ *                                                                      *
+ * Copyright 2010 (c), Skype Limited                                    *
+ * All rights reserved.													*
+ *                                                                      */
+
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_resampler_private.h"
+SKP_INLINE SKP_int16 *SKP_Silk_resampler_private_IIR_FIR_INTERPOL( 
+			SKP_int16 * out, SKP_int16 * buf, SKP_int32 max_index_Q16 , SKP_int32 index_increment_Q16 ){
+	SKP_int32 index_Q16, res_Q15;
+	SKP_int16 *buf_ptr;
+	SKP_int32 table_index;
+	/* Interpolate upsampled signal and store in output array */
+	for( index_Q16 = 0; index_Q16 < max_index_Q16; index_Q16 += index_increment_Q16 ) {
+        table_index = SKP_SMULWB( index_Q16 & 0xFFFF, 144 );
+        buf_ptr = &buf[ index_Q16 >> 16 ];
+            
+        res_Q15 = SKP_SMULBB(          buf_ptr[ 0 ], SKP_Silk_resampler_frac_FIR_144[       table_index ][ 0 ] );
+        res_Q15 = SKP_SMLABB( res_Q15, buf_ptr[ 1 ], SKP_Silk_resampler_frac_FIR_144[       table_index ][ 1 ] );
+        res_Q15 = SKP_SMLABB( res_Q15, buf_ptr[ 2 ], SKP_Silk_resampler_frac_FIR_144[       table_index ][ 2 ] );
+        res_Q15 = SKP_SMLABB( res_Q15, buf_ptr[ 3 ], SKP_Silk_resampler_frac_FIR_144[ 143 - table_index ][ 2 ] );
+        res_Q15 = SKP_SMLABB( res_Q15, buf_ptr[ 4 ], SKP_Silk_resampler_frac_FIR_144[ 143 - table_index ][ 1 ] );
+        res_Q15 = SKP_SMLABB( res_Q15, buf_ptr[ 5 ], SKP_Silk_resampler_frac_FIR_144[ 143 - table_index ][ 0 ] );          
+		*out++ = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( res_Q15, 15 ) );
+	}
+	return out;	
+}
+/* Upsample using a combination of allpass-based 2x upsampling and FIR interpolation */
+void SKP_Silk_resampler_private_IIR_FIR(
+	void	                        *SS,		    /* I/O: Resampler state 						*/
+	SKP_int16						out[],		    /* O:	Output signal 							*/
+	const SKP_int16					in[],		    /* I:	Input signal							*/
+	SKP_int32					    inLen		    /* I:	Number of input samples					*/
+)
+{
+    SKP_Silk_resampler_state_struct *S = (SKP_Silk_resampler_state_struct *)SS;
+	SKP_int32 nSamplesIn;
+	SKP_int32 max_index_Q16, index_increment_Q16;
+	SKP_int16 buf[ 2 * RESAMPLER_MAX_BATCH_SIZE_IN + RESAMPLER_ORDER_FIR_144 ];
+    
+
+	/* Copy buffered samples to start of buffer */	
+	SKP_memcpy( buf, S->sFIR, RESAMPLER_ORDER_FIR_144 * sizeof( SKP_int32 ) );
+
+	/* Iterate over blocks of frameSizeIn input samples */
+    index_increment_Q16 = S->invRatio_Q16;
+	while( 1 ) {
+		nSamplesIn = SKP_min( inLen, S->batchSize );
+
+        if( S->input2x == 1 ) {
+		    /* Upsample 2x */
+            S->up2_function( S->sIIR, &buf[ RESAMPLER_ORDER_FIR_144 ], in, nSamplesIn );
+        } else {
+		    /* Fourth-order ARMA filter */
+            SKP_Silk_resampler_private_ARMA4( S->sIIR, &buf[ RESAMPLER_ORDER_FIR_144 ], in, S->Coefs, nSamplesIn );
+        }
+
+        max_index_Q16 = SKP_LSHIFT32( nSamplesIn, 16 + S->input2x );         /* +1 if 2x upsampling */
+		out = SKP_Silk_resampler_private_IIR_FIR_INTERPOL(out, buf, max_index_Q16, index_increment_Q16);    
+		in += nSamplesIn;
+		inLen -= nSamplesIn;
+
+		if( inLen > 0 ) {
+			/* More iterations to do; copy last part of filtered signal to beginning of buffer */
+			SKP_memcpy( buf, &buf[ nSamplesIn << S->input2x ], RESAMPLER_ORDER_FIR_144 * sizeof( SKP_int32 ) );
+		} else {
+			break;
+		}
+	}
+
+	/* Copy last part of filtered signal to the state for the next call */
+	SKP_memcpy( S->sFIR, &buf[nSamplesIn << S->input2x ], RESAMPLER_ORDER_FIR_144 * sizeof( SKP_int32 ) );
+}
+
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler_private_copy.c
@@ -1,0 +1,49 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*																		*
+ * File Name:	SKP_Silk_resampler_private_copy.c                     *
+ *																		*
+ * Description: Copy.                                                   *
+ *                                                                      *
+ * Copyright 2010 (c), Skype Limited                                    *
+ * All rights reserved.													*
+ *                                                                      */
+
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_resampler_private.h"
+
+/* Copy */
+void SKP_Silk_resampler_private_copy(
+	void	                        *SS,		    /* I/O: Resampler state (unused)				*/
+	SKP_int16						out[],		    /* O:	Output signal 							*/
+	const SKP_int16					in[],		    /* I:	Input signal							*/
+	SKP_int32					    inLen		    /* I:	Number of input samples					*/
+)
+{
+    SKP_memcpy( out, in, inLen * sizeof( SKP_int16 ) );
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler_private_down4.c
@@ -1,0 +1,77 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_resampler_private_down4.c                                 *
+ *                                                                      *
+ * Downsample by a factor 4                                             *
+ *                                                                      *
+ * Copyright 2010 (c), Skype Limited                                    *
+ *                                                                      */
+
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_resampler_private.h"
+
+/* Downsample by a factor 4. Note: very low quality, only use with input sampling rates above 96 kHz. */
+void SKP_Silk_resampler_private_down4(
+    SKP_int32                       *S,             /* I/O: State vector [ 2 ]                      */
+    SKP_int16                       *out,           /* O:   Output signal [ floor(len/2) ]          */
+    const SKP_int16                 *in,            /* I:   Input signal [ len ]                    */
+    SKP_int32                       inLen           /* I:   Number of input samples                 */
+)
+{
+    SKP_int32 k, len4 = SKP_RSHIFT32( inLen, 2 );
+    SKP_int32 in32, out32, Y, X;
+
+    SKP_assert( SKP_Silk_resampler_down2_0 > 0 );
+    SKP_assert( SKP_Silk_resampler_down2_1 < 0 );
+
+    /* Internal variables and state are in Q10 format */
+    for( k = 0; k < len4; k++ ) {
+        /* Add two input samples and convert to Q10 */
+        in32 = SKP_LSHIFT( SKP_ADD32( (SKP_int32)in[ 4 * k ], (SKP_int32)in[ 4 * k + 1 ] ), 9 );
+
+        /* All-pass section for even input sample */
+        Y      = SKP_SUB32( in32, S[ 0 ] );
+        X      = SKP_SMLAWB( Y, Y, SKP_Silk_resampler_down2_1 );
+        out32  = SKP_ADD32( S[ 0 ], X );
+        S[ 0 ] = SKP_ADD32( in32, X );
+
+        /* Add two input samples and convert to Q10 */
+        in32 = SKP_LSHIFT( SKP_ADD32( (SKP_int32)in[ 4 * k + 2 ], (SKP_int32)in[ 4 * k + 3 ] ), 9 );
+
+        /* All-pass section for odd input sample */
+        Y      = SKP_SUB32( in32, S[ 1 ] );
+        X      = SKP_SMULWB( Y, SKP_Silk_resampler_down2_0 );
+        out32  = SKP_ADD32( out32, S[ 1 ] );
+        out32  = SKP_ADD32( out32, X );
+        S[ 1 ] = SKP_ADD32( in32, X );
+
+        /* Add, convert back to int16 and store to output */
+        out[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( out32, 11 ) );
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler_private_down_FIR.c
@@ -1,0 +1,160 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*																		*
+ * File Name:	SKP_Silk_resampler_private_down_FIR.c                 *
+ *																		*
+ * Description: Hybrid IIR/FIR polyphase implementation of resampling	*
+ *                                                                      *
+ * Copyright 2010 (c), Skype Limited                                    *
+ * All rights reserved.													*
+ *                                                                      */
+
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_resampler_private.h"
+SKP_INLINE SKP_int16 *SKP_Silk_resampler_private_down_FIR_INTERPOL0(
+	SKP_int16 *out, SKP_int32 *buf2, const SKP_int16 *FIR_Coefs, SKP_int32 max_index_Q16, SKP_int32 index_increment_Q16){
+	
+	SKP_int32 index_Q16, res_Q6;
+	SKP_int32 *buf_ptr;
+	for( index_Q16 = 0; index_Q16 < max_index_Q16; index_Q16 += index_increment_Q16 ) {
+		/* Integer part gives pointer to buffered input */
+		buf_ptr = buf2 + SKP_RSHIFT( index_Q16, 16 );
+
+		/* Inner product */
+		res_Q6 = SKP_SMULWB(         SKP_ADD32( buf_ptr[ 0 ], buf_ptr[ 11 ] ), FIR_Coefs[ 0 ] );
+		res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 1 ], buf_ptr[ 10 ] ), FIR_Coefs[ 1 ] );
+		res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 2 ], buf_ptr[  9 ] ), FIR_Coefs[ 2 ] );
+		res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 3 ], buf_ptr[  8 ] ), FIR_Coefs[ 3 ] );
+		res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 4 ], buf_ptr[  7 ] ), FIR_Coefs[ 4 ] );
+		res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 5 ], buf_ptr[  6 ] ), FIR_Coefs[ 5 ] );
+
+			    /* Scale down, saturate and store in output array */
+		*out++ = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( res_Q6, 6 ) );
+	}
+	return out;
+}
+
+SKP_INLINE SKP_int16 *SKP_Silk_resampler_private_down_FIR_INTERPOL1(
+	SKP_int16 *out, SKP_int32 *buf2, const SKP_int16 *FIR_Coefs, SKP_int32 max_index_Q16, SKP_int32 index_increment_Q16, SKP_int32 FIR_Fracs){
+	
+	SKP_int32 index_Q16, res_Q6;
+	SKP_int32 *buf_ptr;
+	SKP_int32 interpol_ind;
+	const SKP_int16 *interpol_ptr;
+	for( index_Q16 = 0; index_Q16 < max_index_Q16; index_Q16 += index_increment_Q16 ) {
+		/* Integer part gives pointer to buffered input */
+		buf_ptr = buf2 + SKP_RSHIFT( index_Q16, 16 );
+
+		/* Fractional part gives interpolation coefficients */
+		interpol_ind = SKP_SMULWB( index_Q16 & 0xFFFF, FIR_Fracs );
+
+		/* Inner product */
+		interpol_ptr = &FIR_Coefs[ RESAMPLER_DOWN_ORDER_FIR / 2 * interpol_ind ];
+		res_Q6 = SKP_SMULWB(         buf_ptr[ 0 ], interpol_ptr[ 0 ] );
+		res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 1 ], interpol_ptr[ 1 ] );
+		res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 2 ], interpol_ptr[ 2 ] );
+		res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 3 ], interpol_ptr[ 3 ] );
+		res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 4 ], interpol_ptr[ 4 ] );
+		res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 5 ], interpol_ptr[ 5 ] );
+		interpol_ptr = &FIR_Coefs[ RESAMPLER_DOWN_ORDER_FIR / 2 * ( FIR_Fracs - 1 - interpol_ind ) ];
+		res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 11 ], interpol_ptr[ 0 ] );
+		res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 10 ], interpol_ptr[ 1 ] );
+		res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[  9 ], interpol_ptr[ 2 ] );
+		res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[  8 ], interpol_ptr[ 3 ] );
+		res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[  7 ], interpol_ptr[ 4 ] );
+		res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[  6 ], interpol_ptr[ 5 ] );
+
+		/* Scale down, saturate and store in output array */
+		*out++ = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( res_Q6, 6 ) );
+	}
+	return out;
+}
+
+
+/* Resample with a 2x downsampler (optional), a 2nd order AR filter followed by FIR interpolation */
+void SKP_Silk_resampler_private_down_FIR(
+	void	                        *SS,		    /* I/O: Resampler state 						*/
+	SKP_int16						out[],		    /* O:	Output signal 							*/
+	const SKP_int16					in[],		    /* I:	Input signal							*/
+	SKP_int32					    inLen		    /* I:	Number of input samples					*/
+)
+{
+    SKP_Silk_resampler_state_struct *S = (SKP_Silk_resampler_state_struct *)SS;
+	SKP_int32 nSamplesIn;
+	SKP_int32 max_index_Q16, index_increment_Q16;
+	SKP_int16 buf1[ RESAMPLER_MAX_BATCH_SIZE_IN / 2 ];
+	SKP_int32 buf2[ RESAMPLER_MAX_BATCH_SIZE_IN + RESAMPLER_DOWN_ORDER_FIR ];
+	const SKP_int16 *FIR_Coefs;
+
+	/* Copy buffered samples to start of buffer */	
+	SKP_memcpy( buf2, S->sFIR, RESAMPLER_DOWN_ORDER_FIR * sizeof( SKP_int32 ) );
+
+    FIR_Coefs = &S->Coefs[ 2 ];
+
+	/* Iterate over blocks of frameSizeIn input samples */
+    index_increment_Q16 = S->invRatio_Q16;
+	while( 1 ) {
+		nSamplesIn = SKP_min( inLen, S->batchSize );
+
+        if( S->input2x == 1 ) {
+            /* Downsample 2x */
+            SKP_Silk_resampler_down2( S->sDown2, buf1, in, nSamplesIn );
+
+            nSamplesIn = SKP_RSHIFT32( nSamplesIn, 1 );
+
+		    /* Second-order AR filter (output in Q8) */
+		    SKP_Silk_resampler_private_AR2( S->sIIR, &buf2[ RESAMPLER_DOWN_ORDER_FIR ], buf1, S->Coefs, nSamplesIn );
+        } else {
+		    /* Second-order AR filter (output in Q8) */
+		    SKP_Silk_resampler_private_AR2( S->sIIR, &buf2[ RESAMPLER_DOWN_ORDER_FIR ], in, S->Coefs, nSamplesIn );
+        }
+
+        max_index_Q16 = SKP_LSHIFT32( nSamplesIn, 16 );
+
+		/* Interpolate filtered signal */
+        if( S->FIR_Fracs == 1 ) {
+    		out = SKP_Silk_resampler_private_down_FIR_INTERPOL0(out, buf2, FIR_Coefs, max_index_Q16, index_increment_Q16);
+        } else {
+    		out = SKP_Silk_resampler_private_down_FIR_INTERPOL1(out, buf2, FIR_Coefs, max_index_Q16, index_increment_Q16, S->FIR_Fracs);
+        }
+        
+		in += nSamplesIn << S->input2x;
+		inLen -= nSamplesIn << S->input2x;
+
+		if( inLen > S->input2x ) {
+			/* More iterations to do; copy last part of filtered signal to beginning of buffer */
+			SKP_memcpy( buf2, &buf2[ nSamplesIn ], RESAMPLER_DOWN_ORDER_FIR * sizeof( SKP_int32 ) );
+		} else {
+			break;
+		}
+	}
+
+	/* Copy last part of filtered signal to the state for the next call */
+	SKP_memcpy( S->sFIR, &buf2[ nSamplesIn ], RESAMPLER_DOWN_ORDER_FIR * sizeof( SKP_int32 ) );
+}
+
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler_private_up2_HQ.c
@@ -1,0 +1,120 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_resampler_private_up2_HQ.c                                *
+ *                                                                      *
+ * Upsample by a factor 2, high quality                                 *
+ *                                                                      *
+ * Copyright 2010 (c), Skype Limited                                    *
+ *                                                                      */
+
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_resampler_private.h"
+
+/* Upsample by a factor 2, high quality */
+/* Uses 2nd order allpass filters for the 2x upsampling, followed by a      */
+/* notch filter just above Nyquist.                                         */
+#if (EMBEDDED_ARM<5) && (!defined(__mips__))
+void SKP_Silk_resampler_private_up2_HQ(
+	SKP_int32	                    *S,			    /* I/O: Resampler state [ 6 ]					*/
+    SKP_int16                       *out,           /* O:   Output signal [ 2 * len ]               */
+    const SKP_int16                 *in,            /* I:   Input signal [ len ]                    */
+    SKP_int32                       len             /* I:   Number of INPUT samples                 */
+)
+{
+    SKP_int32 k;
+    SKP_int32 in32, out32_1, out32_2, Y, X;
+
+    SKP_assert( SKP_Silk_resampler_up2_hq_0[ 0 ] > 0 );
+    SKP_assert( SKP_Silk_resampler_up2_hq_0[ 1 ] < 0 );
+    SKP_assert( SKP_Silk_resampler_up2_hq_1[ 0 ] > 0 );
+    SKP_assert( SKP_Silk_resampler_up2_hq_1[ 1 ] < 0 );
+    
+    /* Internal variables and state are in Q10 format */
+    for( k = 0; k < len; k++ ) {
+        /* Convert to Q10 */
+        in32 = SKP_LSHIFT( (SKP_int32)in[ k ], 10 );
+
+        /* First all-pass section for even output sample */
+        Y       = SKP_SUB32( in32, S[ 0 ] );
+        X       = SKP_SMULWB( Y, SKP_Silk_resampler_up2_hq_0[ 0 ] );
+        out32_1 = SKP_ADD32( S[ 0 ], X );
+        S[ 0 ]  = SKP_ADD32( in32, X );
+
+        /* Second all-pass section for even output sample */
+        Y       = SKP_SUB32( out32_1, S[ 1 ] );
+        X       = SKP_SMLAWB( Y, Y, SKP_Silk_resampler_up2_hq_0[ 1 ] );
+        out32_2 = SKP_ADD32( S[ 1 ], X );
+        S[ 1 ]  = SKP_ADD32( out32_1, X );
+
+        /* Biquad notch filter */
+        out32_2 = SKP_SMLAWB( out32_2, S[ 5 ], SKP_Silk_resampler_up2_hq_notch[ 2 ] );
+        out32_2 = SKP_SMLAWB( out32_2, S[ 4 ], SKP_Silk_resampler_up2_hq_notch[ 1 ] );
+        out32_1 = SKP_SMLAWB( out32_2, S[ 4 ], SKP_Silk_resampler_up2_hq_notch[ 0 ] );
+        S[ 5 ]  = SKP_SUB32(  out32_2, S[ 5 ] );
+        
+        /* Apply gain in Q15, convert back to int16 and store to output */
+        out[ 2 * k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT32( 
+            SKP_SMLAWB( 256, out32_1, SKP_Silk_resampler_up2_hq_notch[ 3 ] ), 9 ) );
+
+        /* First all-pass section for odd output sample */
+        Y       = SKP_SUB32( in32, S[ 2 ] );
+        X       = SKP_SMULWB( Y, SKP_Silk_resampler_up2_hq_1[ 0 ] );
+        out32_1 = SKP_ADD32( S[ 2 ], X );
+        S[ 2 ]  = SKP_ADD32( in32, X );
+
+        /* Second all-pass section for odd output sample */
+        Y       = SKP_SUB32( out32_1, S[ 3 ] );
+        X       = SKP_SMLAWB( Y, Y, SKP_Silk_resampler_up2_hq_1[ 1 ] );
+        out32_2 = SKP_ADD32( S[ 3 ], X );
+        S[ 3 ]  = SKP_ADD32( out32_1, X );
+
+        /* Biquad notch filter */
+        out32_2 = SKP_SMLAWB( out32_2, S[ 4 ], SKP_Silk_resampler_up2_hq_notch[ 2 ] );
+        out32_2 = SKP_SMLAWB( out32_2, S[ 5 ], SKP_Silk_resampler_up2_hq_notch[ 1 ] );
+        out32_1 = SKP_SMLAWB( out32_2, S[ 5 ], SKP_Silk_resampler_up2_hq_notch[ 0 ] );
+        S[ 4 ]  = SKP_SUB32(  out32_2, S[ 4 ] );
+        
+        /* Apply gain in Q15, convert back to int16 and store to output */
+        out[ 2 * k + 1 ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT32( 
+            SKP_SMLAWB( 256, out32_1, SKP_Silk_resampler_up2_hq_notch[ 3 ] ), 9 ) );
+    }
+}
+#endif
+
+
+void SKP_Silk_resampler_private_up2_HQ_wrapper(
+	void	                        *SS,		    /* I/O: Resampler state (unused)				*/
+    SKP_int16                       *out,           /* O:   Output signal [ 2 * len ]               */
+    const SKP_int16                 *in,            /* I:   Input signal [ len ]                    */
+    SKP_int32                       len             /* I:   Number of input samples                 */
+)
+{
+    SKP_Silk_resampler_state_struct *S = (SKP_Silk_resampler_state_struct *)SS;
+    SKP_Silk_resampler_private_up2_HQ( S->sIIR, out, in, len );
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler_private_up4.c
@@ -1,0 +1,81 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_resampler_private_up4.c                                   *
+ *                                                                      *
+ * Upsample by a factor 4, low quality                                  *
+ *                                                                      *
+ * Copyright 2010 (c), Skype Limited                                    *
+ *                                                                      */
+
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_resampler_rom.h"
+
+/* Upsample by a factor 4, Note: very low quality, only use with output sampling rates above 96 kHz. */
+void SKP_Silk_resampler_private_up4(
+    SKP_int32                       *S,             /* I/O: State vector [ 2 ]                      */
+    SKP_int16                       *out,           /* O:   Output signal [ 4 * len ]               */
+    const SKP_int16                 *in,            /* I:   Input signal [ len ]                    */
+    SKP_int32                       len             /* I:   Number of INPUT samples                 */
+)
+{
+    SKP_int32 k;
+    SKP_int32 in32, out32, Y, X;
+    SKP_int16 out16;
+
+    SKP_assert( SKP_Silk_resampler_up2_lq_0 > 0 );
+    SKP_assert( SKP_Silk_resampler_up2_lq_1 < 0 );
+
+    /* Internal variables and state are in Q10 format */
+    for( k = 0; k < len; k++ ) {
+        /* Convert to Q10 */
+        in32 = SKP_LSHIFT( (SKP_int32)in[ k ], 10 );
+
+        /* All-pass section for even output sample */
+        Y      = SKP_SUB32( in32, S[ 0 ] );
+        X      = SKP_SMULWB( Y, SKP_Silk_resampler_up2_lq_0 );
+        out32  = SKP_ADD32( S[ 0 ], X );
+        S[ 0 ] = SKP_ADD32( in32, X );
+
+        /* Convert back to int16 and store to output */
+        out16 = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( out32, 10 ) );
+        out[ 4 * k ]     = out16;
+        out[ 4 * k + 1 ] = out16;
+
+        /* All-pass section for odd output sample */
+        Y      = SKP_SUB32( in32, S[ 1 ] );
+        X      = SKP_SMLAWB( Y, Y, SKP_Silk_resampler_up2_lq_1 );
+        out32  = SKP_ADD32( S[ 1 ], X );
+        S[ 1 ] = SKP_ADD32( in32, X );
+
+        /* Convert back to int16 and store to output */
+        out16 = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( out32, 10 ) );
+        out[ 4 * k + 2 ] = out16;
+        out[ 4 * k + 3 ] = out16;
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler_rom.c
@@ -1,0 +1,276 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*																		*
+ * File Name:	SKP_Silk_resampler_rom.c								*
+ *																		*
+ * Description: Filter coefficients for IIR/FIR polyphase resampling	*
+ * Total size: 550 Words (1.1 kB)                                      *
+ *                                                                      *
+ * Copyright 2010 (c), Skype Limited                                    *
+ * All rights reserved.													*
+ *                                                                      */
+
+#include "SKP_Silk_resampler_private.h"
+
+
+#if EMBEDDED_ARM
+#define SKP_DWORD_ALIGN __attribute__((aligned(4)))
+#else
+#define SKP_DWORD_ALIGN
+#endif
+
+/* Tables for 2x downsampler. Values above 32767 intentionally wrap to a negative value. */
+const SKP_int16 SKP_Silk_resampler_down2_0 = 9872;
+const SKP_int16 SKP_Silk_resampler_down2_1 = 39809;
+
+/* Tables for 2x upsampler, low quality. Values above 32767 intentionally wrap to a negative value. */
+const SKP_int16 SKP_Silk_resampler_up2_lq_0 = 8102;
+const SKP_int16 SKP_Silk_resampler_up2_lq_1 = 36783;
+
+/* Tables for 2x upsampler, high quality. Values above 32767 intentionally wrap to a negative value. */
+const SKP_int16 SKP_Silk_resampler_up2_hq_0[ 2 ] = {  4280, 33727 };
+const SKP_int16 SKP_Silk_resampler_up2_hq_1[ 2 ] = { 16295, 54015 };
+/* Matlab code for the notch filter coefficients: */
+/* B = [1, 0.12, 1];  A = [1, 0.055, 0.8]; G = 0.87; freqz(G * B, A, 2^14, 16e3); axis([0, 8000, -10, 1]);  */
+/* fprintf('\t%6d, %6d, %6d, %6d\n', round(B(2)*2^16), round(-A(2)*2^16), round((1-A(3))*2^16), round(G*2^15)) */
+const SKP_int16 SKP_Silk_resampler_up2_hq_notch[ 4 ] = { 7864,  -3604,  13107,  28508 };
+
+
+/* Tables with IIR and FIR coefficients for fractional downsamplers (70 Words) */
+SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_3_4_COEFS[ 2 + 3 * RESAMPLER_DOWN_ORDER_FIR / 2 ] = {
+	-18249, -12532,
+	   -97,    284,   -495,    309,  10268,  20317,
+	   -94,    156,    -48,   -720,   5984,  18278,
+	   -45,     -4,    237,   -847,   2540,  14662,
+};
+
+SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_2_3_COEFS[ 2 + 2 * RESAMPLER_DOWN_ORDER_FIR / 2 ] = {
+	-11891, -12486,
+	    20,    211,   -657,    688,   8423,  15911,
+	   -44,    197,   -152,   -653,   3855,  13015,
+};
+
+SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_1_2_COEFS[ 2 + RESAMPLER_DOWN_ORDER_FIR / 2 ] = {
+	  2415, -13101,
+	   158,   -295,   -400,   1265,   4832,   7968,
+};
+
+SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_3_8_COEFS[ 2 + 3 * RESAMPLER_DOWN_ORDER_FIR / 2 ] = {
+	 13270, -13738,
+	  -294,   -123,    747,   2043,   3339,   3995,
+	  -151,   -311,    414,   1583,   2947,   3877,
+	   -33,   -389,    143,   1141,   2503,   3653,
+};
+
+SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_1_3_COEFS[ 2 + RESAMPLER_DOWN_ORDER_FIR / 2 ] = {
+	 16643, -14000,
+	  -331,     19,    581,   1421,   2290,   2845,
+};
+
+SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_2_3_COEFS_LQ[ 2 + 2 * 2 ] = {
+	 -2797,  -6507,
+	  4697,  10739,
+	  1567,   8276,
+};
+
+SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_1_3_COEFS_LQ[ 2 + 3 ] = {
+	 16777,  -9792,
+	   890,   1614,   2148,
+};
+
+
+/* Tables with coefficients for 4th order ARMA filter (35 Words), in a packed format:       */
+/*    { B1_Q14[1], B2_Q14[1], -A1_Q14[1], -A1_Q14[2], -A2_Q14[1], -A2_Q14[2], gain_Q16 }    */
+/* where it is assumed that B*_Q14[0], B*_Q14[2], A*_Q14[0] are all 16384                   */
+SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_320_441_ARMA4_COEFS[ 7 ] = {
+	 31454,  24746,  -9706,  -3386, -17911, -13243,  24797
+};
+
+SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_240_441_ARMA4_COEFS[ 7 ] = {
+	 28721,  11254,   3189,  -2546,  -1495, -12618,  11562
+};
+
+SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_160_441_ARMA4_COEFS[ 7 ] = {
+	 23492,  -6457,  14358,  -4856,  14654, -13008,   4456
+};
+
+SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_120_441_ARMA4_COEFS[ 7 ] = {
+	 19311, -15569,  19489,  -6950,  21441, -13559,   2370
+};
+
+SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_80_441_ARMA4_COEFS[ 7 ] = {
+	 13248, -23849,  24126,  -9486,  26806, -14286,   1065
+};
+
+/* Table with interplation fractions of 1/288 : 2/288 : 287/288 (432 Words) */
+SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_resampler_frac_FIR_144[ 144 ][ RESAMPLER_ORDER_FIR_144 / 2 ] = {
+	{ -647,  1884, 30078},
+	{ -625,  1736, 30044},
+	{ -603,  1591, 30005},
+	{ -581,  1448, 29963},
+	{ -559,  1308, 29917},
+	{ -537,  1169, 29867},
+	{ -515,  1032, 29813},
+	{ -494,   898, 29755},
+	{ -473,   766, 29693},
+	{ -452,   636, 29627},
+	{ -431,   508, 29558},
+	{ -410,   383, 29484},
+	{ -390,   260, 29407},
+	{ -369,   139, 29327},
+	{ -349,    20, 29242},
+	{ -330,   -97, 29154},
+	{ -310,  -211, 29062},
+	{ -291,  -324, 28967},
+	{ -271,  -434, 28868},
+	{ -253,  -542, 28765},
+	{ -234,  -647, 28659},
+	{ -215,  -751, 28550},
+	{ -197,  -852, 28436},
+	{ -179,  -951, 28320},
+	{ -162, -1048, 28200},
+	{ -144, -1143, 28077},
+	{ -127, -1235, 27950},
+	{ -110, -1326, 27820},
+	{  -94, -1414, 27687},
+	{  -77, -1500, 27550},
+	{  -61, -1584, 27410},
+	{  -45, -1665, 27268},
+	{  -30, -1745, 27122},
+	{  -15, -1822, 26972},
+	{    0, -1897, 26820},
+	{   15, -1970, 26665},
+	{   29, -2041, 26507},
+	{   44, -2110, 26346},
+	{   57, -2177, 26182},
+	{   71, -2242, 26015},
+	{   84, -2305, 25845},
+	{   97, -2365, 25673},
+	{  110, -2424, 25498},
+	{  122, -2480, 25320},
+	{  134, -2534, 25140},
+	{  146, -2587, 24956},
+	{  157, -2637, 24771},
+	{  168, -2685, 24583},
+	{  179, -2732, 24392},
+	{  190, -2776, 24199},
+	{  200, -2819, 24003},
+	{  210, -2859, 23805},
+	{  220, -2898, 23605},
+	{  229, -2934, 23403},
+	{  238, -2969, 23198},
+	{  247, -3002, 22992},
+	{  255, -3033, 22783},
+	{  263, -3062, 22572},
+	{  271, -3089, 22359},
+	{  279, -3114, 22144},
+	{  286, -3138, 21927},
+	{  293, -3160, 21709},
+	{  300, -3180, 21488},
+	{  306, -3198, 21266},
+	{  312, -3215, 21042},
+	{  318, -3229, 20816},
+	{  323, -3242, 20589},
+	{  328, -3254, 20360},
+	{  333, -3263, 20130},
+	{  338, -3272, 19898},
+	{  342, -3278, 19665},
+	{  346, -3283, 19430},
+	{  350, -3286, 19194},
+	{  353, -3288, 18957},
+	{  356, -3288, 18718},
+	{  359, -3286, 18478},
+	{  362, -3283, 18238},
+	{  364, -3279, 17996},
+	{  366, -3273, 17753},
+	{  368, -3266, 17509},
+	{  369, -3257, 17264},
+	{  371, -3247, 17018},
+	{  372, -3235, 16772},
+	{  372, -3222, 16525},
+	{  373, -3208, 16277},
+	{  373, -3192, 16028},
+	{  373, -3175, 15779},
+	{  373, -3157, 15529},
+	{  372, -3138, 15279},
+	{  371, -3117, 15028},
+	{  370, -3095, 14777},
+	{  369, -3072, 14526},
+	{  368, -3048, 14274},
+	{  366, -3022, 14022},
+	{  364, -2996, 13770},
+	{  362, -2968, 13517},
+	{  359, -2940, 13265},
+	{  357, -2910, 13012},
+	{  354, -2880, 12760},
+	{  351, -2848, 12508},
+	{  348, -2815, 12255},
+	{  344, -2782, 12003},
+	{  341, -2747, 11751},
+	{  337, -2712, 11500},
+	{  333, -2676, 11248},
+	{  328, -2639, 10997},
+	{  324, -2601, 10747},
+	{  320, -2562, 10497},
+	{  315, -2523, 10247},
+	{  310, -2482,  9998},
+	{  305, -2442,  9750},
+	{  300, -2400,  9502},
+	{  294, -2358,  9255},
+	{  289, -2315,  9009},
+	{  283, -2271,  8763},
+	{  277, -2227,  8519},
+	{  271, -2182,  8275},
+	{  265, -2137,  8032},
+	{  259, -2091,  7791},
+	{  252, -2045,  7550},
+	{  246, -1998,  7311},
+	{  239, -1951,  7072},
+	{  232, -1904,  6835},
+	{  226, -1856,  6599},
+	{  219, -1807,  6364},
+	{  212, -1758,  6131},
+	{  204, -1709,  5899},
+	{  197, -1660,  5668},
+	{  190, -1611,  5439},
+	{  183, -1561,  5212},
+	{  175, -1511,  4986},
+	{  168, -1460,  4761},
+	{  160, -1410,  4538},
+	{  152, -1359,  4317},
+	{  145, -1309,  4098},
+	{  137, -1258,  3880},
+	{  129, -1207,  3664},
+	{  121, -1156,  3450},
+	{  113, -1105,  3238},
+	{  105, -1054,  3028},
+	{   97, -1003,  2820},
+	{   89,  -952,  2614},
+	{   81,  -901,  2409},
+	{   73,  -851,  2207},
+};
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler_rom.h
@@ -1,0 +1,91 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * File Name:    SKP_Silk_resample_rom.h                              *
+ *                                                                      *
+ * Description: Header file for FIR resampling of                       *
+ *                32 and 44 kHz input                                   *
+ *                                                                      *
+ * Copyright 2007 (c), Skype Limited                                    *
+ * All rights reserved.                                                 *
+ *                                                                      *
+ * Date: 070807                                                         *
+ *                                                                      */
+
+#ifndef _SKP_SILK_FIX_RESAMPLER_ROM_H_
+#define _SKP_SILK_FIX_RESAMPLER_ROM_H_
+
+#include "SKP_Silk_typedef.h"
+#include "SKP_Silk_resampler_structs.h"
+
+#ifdef  __cplusplus
+extern "C"
+{
+#endif
+
+#define RESAMPLER_DOWN_ORDER_FIR                12
+#define RESAMPLER_ORDER_FIR_144                 6
+
+
+/* Tables for 2x downsampler. Values above 32767 intentionally wrap to a negative value. */
+extern const SKP_int16 SKP_Silk_resampler_down2_0;
+extern const SKP_int16 SKP_Silk_resampler_down2_1;
+
+/* Tables for 2x upsampler, low quality. Values above 32767 intentionally wrap to a negative value. */
+extern const SKP_int16 SKP_Silk_resampler_up2_lq_0;
+extern const SKP_int16 SKP_Silk_resampler_up2_lq_1;
+
+/* Tables for 2x upsampler, high quality. Values above 32767 intentionally wrap to a negative value. */
+extern const SKP_int16 SKP_Silk_resampler_up2_hq_0[ 2 ];
+extern const SKP_int16 SKP_Silk_resampler_up2_hq_1[ 2 ];
+extern const SKP_int16 SKP_Silk_resampler_up2_hq_notch[ 4 ];
+
+/* Tables with IIR and FIR coefficients for fractional downsamplers */
+extern const SKP_int16 SKP_Silk_Resampler_3_4_COEFS[ 2 + 3 * RESAMPLER_DOWN_ORDER_FIR / 2 ];
+extern const SKP_int16 SKP_Silk_Resampler_2_3_COEFS[ 2 + 2 * RESAMPLER_DOWN_ORDER_FIR / 2 ];
+extern const SKP_int16 SKP_Silk_Resampler_1_2_COEFS[ 2 +     RESAMPLER_DOWN_ORDER_FIR / 2 ];
+extern const SKP_int16 SKP_Silk_Resampler_3_8_COEFS[ 2 + 3 * RESAMPLER_DOWN_ORDER_FIR / 2 ];
+extern const SKP_int16 SKP_Silk_Resampler_1_3_COEFS[ 2 +     RESAMPLER_DOWN_ORDER_FIR / 2 ];
+extern const SKP_int16 SKP_Silk_Resampler_2_3_COEFS_LQ[ 2 + 2 * 2 ];
+extern const SKP_int16 SKP_Silk_Resampler_1_3_COEFS_LQ[ 2 + 3 ];
+
+/* Tables with coefficients for 4th order ARMA filter */
+extern const SKP_int16 SKP_Silk_Resampler_320_441_ARMA4_COEFS[ 7 ];
+extern const SKP_int16 SKP_Silk_Resampler_240_441_ARMA4_COEFS[ 7 ];
+extern const SKP_int16 SKP_Silk_Resampler_160_441_ARMA4_COEFS[ 7 ];
+extern const SKP_int16 SKP_Silk_Resampler_120_441_ARMA4_COEFS[ 7 ];
+extern const SKP_int16 SKP_Silk_Resampler_80_441_ARMA4_COEFS[ 7 ];
+
+/* Table with interplation fractions of 1/288 : 2/288 : 287/288 (432 Words) */
+extern const SKP_int16 SKP_Silk_resampler_frac_FIR_144[ 144 ][ RESAMPLER_ORDER_FIR_144 / 2 ];
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif // _SKP_SILK_FIX_RESAMPLER_ROM_H_
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler_structs.h
@@ -1,0 +1,79 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*																		*
+ * File Name:	SKP_Silk_resampler_structs.h							*
+ *																		*
+ * Description: Structs for IIR/FIR resamplers							*
+ *                                                                      *
+ * Copyright 2010 (c), Skype Limited                                    *
+ * All rights reserved.													*
+ *																		*
+ *                                                                      */
+
+#ifndef SKP_Silk_RESAMPLER_STRUCTS_H
+#define SKP_Silk_RESAMPLER_STRUCTS_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Flag to enable support for input/output sampling rates above 48 kHz. Turn off for embedded devices */
+#define RESAMPLER_SUPPORT_ABOVE_48KHZ                   1
+
+#define SKP_Silk_RESAMPLER_MAX_FIR_ORDER                 16
+#define SKP_Silk_RESAMPLER_MAX_IIR_ORDER                 6
+
+
+typedef struct _SKP_Silk_resampler_state_struct{
+	SKP_int32       sIIR[ SKP_Silk_RESAMPLER_MAX_IIR_ORDER ];        /* this must be the first element of this struct */
+	SKP_int32       sFIR[ SKP_Silk_RESAMPLER_MAX_FIR_ORDER ];
+	SKP_int32       sDown2[ 2 ];
+	void            (*resampler_function)( void *, SKP_int16 *, const SKP_int16 *, SKP_int32 );
+	void            (*up2_function)(  SKP_int32 *, SKP_int16 *, const SKP_int16 *, SKP_int32 );
+    SKP_int32       batchSize;
+	SKP_int32       invRatio_Q16;
+	SKP_int32       FIR_Fracs;
+    SKP_int32       input2x;
+	const SKP_int16	*Coefs;
+#if RESAMPLER_SUPPORT_ABOVE_48KHZ
+	SKP_int32       sDownPre[ 2 ];
+	SKP_int32       sUpPost[ 2 ];
+	void            (*down_pre_function)( SKP_int32 *, SKP_int16 *, const SKP_int16 *, SKP_int32 );
+	void            (*up_post_function)(  SKP_int32 *, SKP_int16 *, const SKP_int16 *, SKP_int32 );
+	SKP_int32       batchSizePrePost;
+	SKP_int32       ratio_Q16;
+	SKP_int32       nPreDownsamplers;
+	SKP_int32       nPostUpsamplers;
+#endif
+	SKP_int32 magic_number;
+} SKP_Silk_resampler_state_struct;
+
+#ifdef __cplusplus
+}
+#endif
+#endif // SKP_Silk_RESAMPLER_STRUCTS_H
+
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_resampler_up2.c
@@ -1,0 +1,75 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_resampler_up2.c                                           *
+ *                                                                      *
+ * Upsample by a factor 2, low quality                                  *
+ *                                                                      *
+ * Copyright 2010 (c), Skype Limited                                    *
+ *                                                                      */
+
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_resampler_rom.h"
+
+/* Upsample by a factor 2, low quality */
+void SKP_Silk_resampler_up2(
+    SKP_int32                           *S,         /* I/O: State vector [ 2 ]                  */
+    SKP_int16                           *out,       /* O:   Output signal [ 2 * len ]           */
+    const SKP_int16                     *in,        /* I:   Input signal [ len ]                */
+    SKP_int32                           len         /* I:   Number of input samples             */
+)
+{
+    SKP_int32 k;
+    SKP_int32 in32, out32, Y, X;
+
+    SKP_assert( SKP_Silk_resampler_up2_lq_0 > 0 );
+    SKP_assert( SKP_Silk_resampler_up2_lq_1 < 0 );
+    /* Internal variables and state are in Q10 format */
+    for( k = 0; k < len; k++ ) {
+        /* Convert to Q10 */
+        in32 = SKP_LSHIFT( (SKP_int32)in[ k ], 10 );
+
+        /* All-pass section for even output sample */
+        Y      = SKP_SUB32( in32, S[ 0 ] );
+        X      = SKP_SMULWB( Y, SKP_Silk_resampler_up2_lq_0 );
+        out32  = SKP_ADD32( S[ 0 ], X );
+        S[ 0 ] = SKP_ADD32( in32, X );
+
+        /* Convert back to int16 and store to output */
+        out[ 2 * k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( out32, 10 ) );
+
+        /* All-pass section for odd output sample */
+        Y      = SKP_SUB32( in32, S[ 1 ] );
+        X      = SKP_SMLAWB( Y, Y, SKP_Silk_resampler_up2_lq_1 );
+        out32  = SKP_ADD32( S[ 1 ], X );
+        S[ 1 ] = SKP_ADD32( in32, X );
+
+        /* Convert back to int16 and store to output */
+        out[ 2 * k + 1 ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( out32, 10 ) );
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_scale_copy_vector16.c
@@ -1,0 +1,45 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Copy and multiply a vector by a constant */
+void SKP_Silk_scale_copy_vector16( 
+    SKP_int16           *data_out, 
+    const SKP_int16     *data_in, 
+    SKP_int32           gain_Q16,                   /* (I):   gain in Q16   */
+    const SKP_int       dataSize                    /* (I):   length        */
+)
+{
+    SKP_int  i;
+    SKP_int32 tmp32;
+
+    for( i = 0; i < dataSize; i++ ) {
+        tmp32 = SKP_SMULWB( gain_Q16, data_in[ i ] );
+        data_out[ i ] = (SKP_int16)SKP_CHECK_FIT16( tmp32 );
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_scale_vector.c
@@ -1,0 +1,107 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Multiply a vector by a constant */
+void SKP_Silk_scale_vector16_Q14( 
+    SKP_int16           *data1, 
+    SKP_int             gain_Q14,       /* Gain in Q14 */ 
+    SKP_int             dataSize
+)
+{
+    SKP_int   i;
+    SKP_int32 gain_Q16;
+
+    SKP_assert( gain_Q14 <   32768 );
+    SKP_assert( gain_Q14 >= -32768 );
+
+    gain_Q16 = SKP_LSHIFT( gain_Q14, 2 );
+    for( i = 0; i < dataSize; i ++ ) {
+        data1[ i ] = SKP_SMULWB( gain_Q16, data1[ i ] );
+    }
+}
+
+/* Multiply a vector by a constant */
+void SKP_Silk_scale_vector32_Q26_lshift_18( 
+    SKP_int32           *data1,                     /* (I/O): Q0/Q18        */
+    SKP_int32           gain_Q26,                   /* (I):   Q26           */
+    SKP_int             dataSize                    /* (I):   length        */
+)
+{
+    SKP_int  i;
+
+    for( i = 0; i < dataSize; i++ ) {
+        data1[ i ] = (SKP_int32)SKP_CHECK_FIT32( SKP_RSHIFT64( SKP_SMULL( data1[ i ], gain_Q26 ), 8 ) );// OUTPUT: Q18
+    }
+}
+
+/* Multiply a vector by a constant */
+void SKP_Silk_scale_vector32_16_Q14( 
+    SKP_int32           *data1,                     /* (I/O): Q0/Q0         */
+    SKP_int             gain_Q14,                   /* (I):   Q14           */
+    SKP_int             dataSize                    /* (I):   length        */
+)
+{
+    SKP_int  i, gain_Q16;
+
+    if( gain_Q14 < ( SKP_int16_MAX >> 2 ) ) {
+        gain_Q16 = SKP_LSHIFT( gain_Q14, 2 );
+        for( i = 0; i < dataSize; i++ ) {
+            data1[ i ] = SKP_SMULWB( data1[ i ], gain_Q16 );
+        }
+    } else {
+        SKP_assert( gain_Q14 >= SKP_int16_MIN );
+        for( i = 0; i < dataSize; i++ ) {
+            data1[ i ] = SKP_LSHIFT( SKP_SMULWB( data1[ i ], gain_Q14 ), 2 );
+        }
+    }
+}
+
+/* Multiply a vector by a constant, does not saturate output data */
+void SKP_Silk_scale_vector32_Q16( 
+    SKP_int32           *data1,                     /* (I/O): Q0/Q0         */
+    SKP_int32           gain_Q16,                   /* (I):   gain in Q16 ( SKP_int16_MIN <= gain_Q16 <= SKP_int16_MAX + 65536 ) */
+    const SKP_int       dataSize                    /* (I):   length        */
+)
+{
+    SKP_int     i;
+
+    SKP_assert( gain_Q16 <= SKP_int16_MAX + 65536 );
+    SKP_assert( gain_Q16 >= SKP_int16_MIN );
+
+    if( gain_Q16 > SKP_int16_MAX ) {
+        gain_Q16 -= 65536;
+        for( i = 0; i < dataSize; i++ ) {
+            data1[ i ] = SKP_SMLAWB( data1[ i ], data1[ i ], gain_Q16 );
+        }
+    } else {
+        for( i = 0; i < dataSize; i++ ) {
+            data1[ i ] = SKP_SMULWB( data1[ i ], gain_Q16 );
+        }
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_schur.c
@@ -1,0 +1,91 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_schur.c                                                   *
+ *                                                                      *
+ * Calculates the reflection coefficients from the correlation sequence *
+ *                                                                      *
+ * Copyright 2008 (c), Skype Limited                                    *
+ * Date: 080103                                                         *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Faster than schur64(), but much less accurate.                       */
+/* uses SMLAWB(), requiring armv5E and higher.                          */ 
+void SKP_Silk_schur(
+    SKP_int16            *rc_Q15,                /* O:    reflection coefficients [order] Q15         */
+    const SKP_int32      *c,                     /* I:    correlations [order+1]                      */
+    const SKP_int32      order                   /* I:    prediction order                            */
+)
+{
+    SKP_int        k, n, lz;
+    SKP_int32    C[ SKP_Silk_MAX_ORDER_LPC + 1 ][ 2 ];
+    SKP_int32    Ctmp1, Ctmp2, rc_tmp_Q15;
+
+    /* Get number of leading zeros */
+    lz = SKP_Silk_CLZ32( c[ 0 ] );
+
+    /* Copy correlations and adjust level to Q30 */
+    if( lz < 2 ) {
+        /* lz must be 1, so shift one to the right */
+        for( k = 0; k < order + 1; k++ ) {
+            C[ k ][ 0 ] = C[ k ][ 1 ] = SKP_RSHIFT( c[ k ], 1 );
+        }
+    } else if( lz > 2 ) {
+        /* Shift to the left */
+        lz -= 2; 
+        for( k = 0; k < order + 1; k++ ) {
+            C[ k ][ 0 ] = C[ k ][ 1 ] = SKP_LSHIFT( c[k], lz );
+        }
+    } else {
+        /* No need to shift */
+        for( k = 0; k < order + 1; k++ ) {
+            C[ k ][ 0 ] = C[ k ][ 1 ] = c[ k ];
+        }
+    }
+
+    for( k = 0; k < order; k++ ) {
+        
+        /* Get reflection coefficient */
+        rc_tmp_Q15 = -SKP_DIV32_16( C[ k + 1 ][ 0 ], SKP_max_32( SKP_RSHIFT( C[ 0 ][ 1 ], 15 ), 1 ) );
+
+        /* Clip (shouldn't happen for properly conditioned inputs) */
+        rc_tmp_Q15 = SKP_SAT16( rc_tmp_Q15 );
+
+        /* Store */
+        rc_Q15[ k ] = (SKP_int16)rc_tmp_Q15;
+
+        /* Update correlations */
+        for( n = 0; n < order - k; n++ ) {
+            Ctmp1 = C[ n + k + 1 ][ 0 ];
+            Ctmp2 = C[ n ][ 1 ];
+            C[ n + k + 1 ][ 0 ] = SKP_SMLAWB( Ctmp1, SKP_LSHIFT( Ctmp2, 1 ), rc_tmp_Q15 );
+            C[ n ][ 1 ]         = SKP_SMLAWB( Ctmp2, SKP_LSHIFT( Ctmp1, 1 ), rc_tmp_Q15 );
+        }
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_schur64.c
@@ -1,0 +1,80 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_schur64.c                                                 *
+ *                                                                      *
+ * Calculates the reflection coefficients from the correlation sequence *
+ * using extra precision                                                *
+ *                                                                      *
+ * Copyright 2008 (c), Skype Limited                                    *
+ * Date: 080103                                                         *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+
+/* Slower than schur(), but more accurate.                              */
+/* Uses SMULL(), available on armv4                                     */ 
+SKP_int32 SKP_Silk_schur64(                    /* O:    Returns residual energy                     */
+    SKP_int32            rc_Q16[],               /* O:    Reflection coefficients [order] Q16         */
+    const SKP_int32      c[],                    /* I:    Correlations [order+1]                      */
+    SKP_int32            order                   /* I:    Prediction order                            */
+)
+{
+    SKP_int   k, n;
+    SKP_int32 C[ SKP_Silk_MAX_ORDER_LPC + 1 ][ 2 ];
+    SKP_int32 Ctmp1_Q30, Ctmp2_Q30, rc_tmp_Q31;
+
+    /* Check for invalid input */
+    if( c[ 0 ] <= 0 ) {
+        SKP_memset( rc_Q16, 0, order * sizeof( SKP_int32 ) );
+        return 0;
+    }
+    
+    for( k = 0; k < order + 1; k++ ) {
+        C[ k ][ 0 ] = C[ k ][ 1 ] = c[ k ];
+    }
+
+    for( k = 0; k < order; k++ ) {
+        /* Get reflection coefficient: divide two Q30 values and get result in Q31 */
+        rc_tmp_Q31 = SKP_DIV32_varQ( -C[ k + 1 ][ 0 ], C[ 0 ][ 1 ], 31 );
+
+        /* Save the output */
+        rc_Q16[ k ] = SKP_RSHIFT_ROUND( rc_tmp_Q31, 15 );
+
+        /* Update correlations */
+        for( n = 0; n < order - k; n++ ) {
+            Ctmp1_Q30 = C[ n + k + 1 ][ 0 ];
+            Ctmp2_Q30 = C[ n ][ 1 ];
+            
+            /* Multiply and add the highest int32 */
+            C[ n + k + 1 ][ 0 ] = Ctmp1_Q30 + SKP_SMMUL( SKP_LSHIFT( Ctmp2_Q30, 1 ), rc_tmp_Q31 );
+            C[ n ][ 1 ]         = Ctmp2_Q30 + SKP_SMMUL( SKP_LSHIFT( Ctmp1_Q30, 1 ), rc_tmp_Q31 );
+        }
+    }
+
+    return( C[ 0 ][ 1 ] );
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_sigm_Q15.c
@@ -1,0 +1,78 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_sigm_Q15.c                                                       *
+ *                                                                      *
+ * Approximate sigmoid function                                         *
+ *                                                                      *
+ * Copyright 2006 (c), Skype Limited                                    *
+ * Date: 060221                                                         *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+/********************************/
+/* approximate sigmoid function */
+/********************************/
+/* fprintf(1, '%d, ', round(1024 * ([1 ./ (1 + exp(-(1:5))), 1] - 1 ./ (1 + exp(-(0:5)))))); */
+static const SKP_int32 sigm_LUT_slope_Q10[ 6 ] = {
+    237, 153, 73, 30, 12, 7
+};
+/* fprintf(1, '%d, ', round(32767 * 1 ./ (1 + exp(-(0:5))))); */
+static const SKP_int32 sigm_LUT_pos_Q15[ 6 ] = {
+    16384, 23955, 28861, 31213, 32178, 32548
+};
+/* fprintf(1, '%d, ', round(32767 * 1 ./ (1 + exp((0:5))))); */
+static const SKP_int32 sigm_LUT_neg_Q15[ 6 ] = {
+    16384, 8812, 3906, 1554, 589, 219
+};
+
+SKP_int SKP_Silk_sigm_Q15( SKP_int in_Q5 ) 
+{
+    SKP_int ind;
+
+    if( in_Q5 < 0 ) {
+        /* Negative input */
+        in_Q5 = -in_Q5;
+        if( in_Q5 >= 6 * 32 ) {
+            return 0;        /* Clip */
+        } else {
+            /* Linear interpolation of look up table */
+            ind = SKP_RSHIFT( in_Q5, 5 );
+            return( sigm_LUT_neg_Q15[ ind ] - SKP_SMULBB( sigm_LUT_slope_Q10[ ind ], in_Q5 & 0x1F ) );
+        }
+    } else {
+        /* Positive input */
+        if( in_Q5 >= 6 * 32 ) {
+            return 32767;        /* clip */
+        } else {
+            /* Linear interpolation of look up table */
+            ind = SKP_RSHIFT( in_Q5, 5 );
+            return( sigm_LUT_pos_Q15[ ind ] + SKP_SMULBB( sigm_LUT_slope_Q10[ ind ], in_Q5 & 0x1F ) );
+        }
+    }
+}
+
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_sort.c
@@ -1,0 +1,287 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/* Insertion sort (fast for already almost sorted arrays):   */
+/* Best case:  O(n)   for an already sorted array            */
+/* Worst case: O(n^2) for an inversely sorted array          */
+/*                                                           */
+/* Shell short:    http://en.wikipedia.org/wiki/Shell_sort   */
+
+#include "SKP_Silk_SigProc_FIX.h"
+
+void SKP_Silk_insertion_sort_increasing(
+    SKP_int32           *a,             /* I/O:  Unsorted / Sorted vector               */
+    SKP_int             *index,         /* O:    Index vector for the sorted elements   */
+    const SKP_int       L,              /* I:    Vector length                          */
+    const SKP_int       K               /* I:    Number of correctly sorted positions   */
+)
+{
+    SKP_int32    value;
+    SKP_int        i, j;
+
+    /* Safety checks */
+    SKP_assert( K >  0 );
+    SKP_assert( L >  0 );
+    SKP_assert( L >= K );
+
+    /* Write start indices in index vector */
+    for( i = 0; i < K; i++ ) {
+        index[ i ] = i;
+    }
+
+    /* Sort vector elements by value, increasing order */
+    for( i = 1; i < K; i++ ) {
+        value = a[ i ];
+        for( j = i - 1; ( j >= 0 ) && ( value < a[ j ] ); j-- ) {
+            a[ j + 1 ]     = a[ j ];     /* Shift value */
+            index[ j + 1 ] = index[ j ]; /* Shift index */
+        }
+        a[ j + 1 ]     = value; /* Write value */
+        index[ j + 1 ] = i;     /* Write index */
+    }
+
+    /* If less than L values are asked for, check the remaining values, */
+    /* but only spend CPU to ensure that the K first values are correct */
+    for( i = K; i < L; i++ ) {
+        value = a[ i ];
+        if( value < a[ K - 1 ] ) {
+            for( j = K - 2; ( j >= 0 ) && ( value < a[ j ] ); j-- ) {
+                a[ j + 1 ]     = a[ j ];     /* Shift value */
+                index[ j + 1 ] = index[ j ]; /* Shift index */
+            }
+            a[ j + 1 ]     = value; /* Write value */
+            index[ j + 1 ] = i;        /* Write index */
+        }
+    }
+}
+
+void SKP_Silk_insertion_sort_decreasing(
+    SKP_int             *a,             /* I/O: Unsorted / Sorted vector                */
+    SKP_int             *index,         /* O:   Index vector for the sorted elements    */
+    const SKP_int       L,              /* I:   Vector length                           */
+    const SKP_int       K               /* I:   Number of correctly sorted positions    */
+)
+{
+    SKP_int    value;
+    SKP_int    i, j;
+
+    /* Safety checks */
+    SKP_assert( K >  0 );
+    SKP_assert( L >  0 );
+    SKP_assert( L >= K );
+
+    /* Write start indices in index vector */
+    for( i = 0; i < K; i++ ) {
+        index[ i ] = i;
+    }
+
+    /* Sort vector elements by value, decreasing order */
+    for( i = 1; i < K; i++ ) {
+        value = a[ i ];
+        for( j = i - 1; ( j >= 0 ) && ( value > a[ j ] ); j-- ) {
+            a[ j + 1 ]     = a[ j ];     /* Shift value */
+            index[ j + 1 ] = index[ j ]; /* Shift index */
+        }
+        a[ j + 1 ]     = value; /* Write value */
+        index[ j + 1 ] = i;     /* Write index */
+    }
+
+    /* If less than L values are asked for, check the remaining values, */
+    /* but only spend CPU to ensure that the K first values are correct */
+    for( i = K; i < L; i++ ) {
+        value = a[ i ];
+        if( value > a[ K - 1 ] ) {
+            for( j = K - 2; ( j >= 0 ) && ( value > a[ j ] ); j-- ) {
+                a[ j + 1 ]     = a[ j ];     /* Shift value */
+                index[ j + 1 ] = index[ j ]; /* Shift index */
+            }
+            a[ j + 1 ]     = value; /* Write value */
+            index[ j + 1 ] = i;     /* Write index */
+        }
+    }
+}
+
+void SKP_Silk_insertion_sort_decreasing_int16(
+    SKP_int16           *a,             /* I/O: Unsorted / Sorted vector                */
+    SKP_int             *index,         /* O:   Index vector for the sorted elements    */
+    const SKP_int       L,              /* I:   Vector length                           */
+    const SKP_int       K               /* I:   Number of correctly sorted positions    */
+)
+{
+    SKP_int i, j;
+    SKP_int value;
+
+    /* Safety checks */
+    SKP_assert( K >  0 );
+    SKP_assert( L >  0 );
+    SKP_assert( L >= K );
+
+    /* Write start indices in index vector */
+    for( i = 0; i < K; i++ ) {
+        index[ i ] = i;
+    }
+
+    /* Sort vector elements by value, decreasing order */
+    for( i = 1; i < K; i++ ) {
+        value = a[ i ];
+        for( j = i - 1; ( j >= 0 ) && ( value > a[ j ] ); j-- ) {    
+            a[ j + 1 ]     = a[ j ];     /* Shift value */
+            index[ j + 1 ] = index[ j ]; /* Shift index */
+        }
+        a[ j + 1 ]     = value; /* Write value */
+        index[ j + 1 ] = i;     /* Write index */
+    }
+
+    /* If less than L values are asked for, check the remaining values, */
+    /* but only spend CPU to ensure that the K first values are correct */
+    for( i = K; i < L; i++ ) {
+        value = a[ i ];
+        if( value > a[ K - 1 ] ) {
+            for( j = K - 2; ( j >= 0 ) && ( value > a[ j ] ); j-- ) {    
+                a[ j + 1 ]     = a[ j ];     /* Shift value */
+                index[ j + 1 ] = index[ j ]; /* Shift index */
+            }
+            a[ j + 1 ]     = value; /* Write value */
+            index[ j + 1 ] = i;     /* Write index */
+        }
+    }
+}
+
+void SKP_Silk_insertion_sort_increasing_all_values(
+    SKP_int             *a,             /* I/O: Unsorted / Sorted vector                */
+    const SKP_int       L               /* I:   Vector length                           */
+)
+{
+    SKP_int    value;
+    SKP_int    i, j;
+
+    /* Safety checks */
+    SKP_assert( L >  0 );
+
+    /* Sort vector elements by value, increasing order */
+    for( i = 1; i < L; i++ ) {
+        value = a[ i ];
+        for( j = i - 1; ( j >= 0 ) && ( value < a[ j ] ); j-- ) {
+            a[ j + 1 ] = a[ j ]; /* Shift value */
+        }
+        a[ j + 1 ] = value; /* Write value */
+    }
+}
+
+void SKP_Silk_shell_insertion_sort_increasing(
+    SKP_int32           *a,             /* I/O:  Unsorted / Sorted vector               */
+    SKP_int             *index,         /* O:    Index vector for the sorted elements   */
+    const SKP_int       L,              /* I:    Vector length                          */
+    const SKP_int       K               /* I:    Number of correctly sorted positions   */
+)
+{
+    SKP_int32    value, inc_Q16_tmp;
+    SKP_int      i, j, inc, idx;
+   
+    /* Safety checks */
+    SKP_assert( K >  0 );
+    SKP_assert( L >  0 );
+    SKP_assert( L >= K );
+    
+    /* Calculate initial step size */
+    inc_Q16_tmp = SKP_LSHIFT( (SKP_int32)L, 15 );
+    inc = SKP_RSHIFT( inc_Q16_tmp, 16 );
+
+    /* Write start indices in index vector */
+    for( i = 0; i < K; i++ ) {
+        index[ i ] = i;
+    }
+
+    /* Shell sort first values */
+    while( inc > 0 ) {
+        for( i = inc; i < K; i++ ) {
+            value = a[ i ];
+            idx   = index[ i ];
+            for( j = i - inc; ( j >= 0 ) && ( value < a[ j ] ); j -= inc ) {
+                a[ j + inc ]     = a[ j ];     /* Shift value */
+                index[ j + inc ] = index[ j ]; /* Shift index */
+            }
+            a[ j + inc ]     = value; /* Write value */
+            index[ j + inc ] = idx;   /* Write index */
+        }
+        inc_Q16_tmp = SKP_SMULWB( inc_Q16_tmp, 29789 ); // 29789_Q16 = 2.2^(-1)_Q0
+        inc = SKP_RSHIFT_ROUND( inc_Q16_tmp, 16 );
+    }
+
+    /* If less than L values are asked for, check the remaining values, */
+    /* but only spend CPU to ensure that the K first values are correct */
+    /* Insertion sort remaining values */
+    for( i = K; i < L; i++ ) {
+        value = a[ i ];
+        if( value < a[ K - 1 ] ) {
+            for( j = K - 2; ( j >= 0 ) && ( value < a[ j ] ); j-- ) {
+                a[ j + 1 ]     = a[ j ];     /* Shift value */
+                index[ j + 1 ] = index[ j ]; /* Shift index */
+            }
+            a[ j + 1 ]     = value; /* Write value */
+            index[ j + 1 ] = i;     /* Write index */
+        }
+    }
+}
+
+void SKP_Silk_shell_sort_increasing_all_values(
+    SKP_int32           *a,             /* I/O:  Unsorted / Sorted vector               */
+    SKP_int             *index,         /* O:    Index vector for the sorted elements   */
+    const SKP_int       L               /* I:    Vector length                          */
+)
+{
+    SKP_int32    value, inc_Q16_tmp;
+    SKP_int      i, j, inc, idx;
+   
+    /* Safety checks */
+    SKP_assert( L >  0 );
+ 
+    /* Calculate initial step size */
+    inc_Q16_tmp = SKP_LSHIFT( (SKP_int32)L, 15 );
+    inc = SKP_RSHIFT( inc_Q16_tmp, 16 );
+
+    /* Write start indices in index vector */
+    for( i = 0; i < L; i++ ) {
+        index[ i ] = i;
+    }
+
+    /* Sort vector elements by value, increasing order */
+    while( inc > 0 ) {
+        for( i = inc; i < L; i++ ) {
+            value = a[ i ];
+            idx = index[ i ];
+            for( j = i - inc; ( j >= 0 ) && ( value < a[ j ] ); j -= inc ) {
+                a[ j + inc ]     = a[ j ];     /* Shift value */
+                index[ j + inc ] = index[ j ]; /* Shift index */
+            }
+            a[ j + inc ] = value;   /* Write value */
+            index[ j + inc ] = idx; /* Write index */
+        }
+        inc_Q16_tmp = SKP_SMULWB( inc_Q16_tmp, 29789 ); // 29789_Q16 = 2.2^(-1)_Q0
+        inc = SKP_RSHIFT_ROUND( inc_Q16_tmp, 16 );
+    }
+}
--- /dev/null
+++ b/src_SigProc_FIX/SKP_Silk_sum_sqr_shift.c
@@ -1,0 +1,100 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_sum_sqr_shift.c                                           *
+ *                                                                      *
+ * compute number of bits to right shift the sum of squares of a vector *
+ * of int16s to make it fit in an int32                                 *
+ *                                                                      *
+ * Copyright 2006-2008 (c), Skype Limited                               *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+/* Compute number of bits to right shift the sum of squares of a vector */
+/* of int16s to make it fit in an int32                                 */
+void SKP_Silk_sum_sqr_shift(
+    SKP_int32            *energy,            /* O    Energy of x, after shifting to the right            */
+    SKP_int              *shift,             /* O    Number of bits right shift applied to energy        */
+    const SKP_int16      *x,                 /* I    Input vector                                        */
+    SKP_int              len                 /* I    Length of input vector                              */
+)
+{
+    SKP_int   i, shft;
+    SKP_int32 in32, nrg_tmp, nrg;
+
+    if( (SKP_int32)( (SKP_int_ptr_size)x & 2 ) != 0 ) {
+        /* Input is not 4-byte aligned */
+        nrg = SKP_SMULBB( x[ 0 ], x[ 0 ] );
+        i = 1;
+    } else {
+        nrg = 0;
+        i   = 0;
+    }
+    shft = 0;
+    len--;
+    while( i < len ) {
+        /* Load two values at once */
+        in32 = *( (SKP_int32 *)&x[ i ] );
+        nrg = SKP_SMLABB_ovflw( nrg, in32, in32 );
+        nrg = SKP_SMLATT_ovflw( nrg, in32, in32 );
+        i += 2;
+        if( nrg < 0 ) {
+            /* Scale down */
+            nrg = (SKP_int32)SKP_RSHIFT_uint( (SKP_uint32)nrg, 2 );
+            shft = 2;
+            break;
+        }
+    }
+    for( ; i < len; i += 2 ) {
+        /* Load two values at once */
+        in32 = *( (SKP_int32 *)&x[ i ] );
+        nrg_tmp = SKP_SMULBB( in32, in32 );
+        nrg_tmp = SKP_SMLATT_ovflw( nrg_tmp, in32, in32 );
+        nrg = (SKP_int32)SKP_ADD_RSHIFT_uint( nrg, (SKP_uint32)nrg_tmp, shft );
+        if( nrg < 0 ) {
+            /* Scale down */
+            nrg = (SKP_int32)SKP_RSHIFT_uint( (SKP_uint32)nrg, 2 );
+            shft += 2;
+        }
+    }
+    if( i == len ) {
+        /* One sample left to process */
+        nrg_tmp = SKP_SMULBB( x[ i ], x[ i ] );
+        nrg = (SKP_int32)SKP_ADD_RSHIFT_uint( nrg, nrg_tmp, shft );
+    }
+
+    /* Make sure to have at least one extra leading zero (two leading zeros in total) */
+    if( nrg & 0xC0000000 ) {
+        nrg = SKP_RSHIFT_uint( (SKP_uint32)nrg, 2 );
+        shft += 2;
+    }
+
+    /* Output arguments */
+    *shift  = shft;
+    *energy = nrg;
+}
+
--- /dev/null
+++ b/src_SigProc_FIX/SigProc_FIX.vcproj
@@ -1,0 +1,408 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="SigProc_FIX"
+	ProjectGUID="{2769AFC5-8FC2-42E8-803C-528ACBA89C74}"
+	RootNamespace="Silk"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				FavorSizeOrSpeed="0"
+				AdditionalIncludeDirectories="../interface"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB;"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				FloatingPointModel="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="SKP_Silk_SigProcFLP_Win32_debug.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="0"
+				FavorSizeOrSpeed="0"
+				AdditionalIncludeDirectories="../interface"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+				GeneratePreprocessedFile="0"
+				RuntimeLibrary="0"
+				FloatingPointModel="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="SKP_Silk_SigProcFLP_Win32_mt.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine=""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\SKP_Silk_A2NLSF.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_allpass_int.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_ana_filt_bank_1.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_apply_sine_window.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_array_maxabs.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_autocorr.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_biquad.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_biquad_alt.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_burg_modified.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_bwexpander.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_bwexpander_32.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_decode_pitch.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_inner_prod_aligned.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_k2a.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_k2a_Q16.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_lin2log.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_log2lin.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_lowpass_int.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_lowpass_short.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_LPC_inv_pred_gain.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_LPC_stabilize.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_LPC_synthesis_filter.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_LPC_synthesis_order16.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_LSF_cos_table.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_MA.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NLSF2A.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NLSF_stabilize.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NLSF_VQ_weights_laroia.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_pitch_analysis_core.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_pitch_est_tables.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resampler.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resampler_down2.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resampler_down2_3.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resampler_down3.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resampler_private_AR2.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resampler_private_ARMA4.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resampler_private_copy.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resampler_private_down4.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resampler_private_down_FIR.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resampler_private_IIR_FIR.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resampler_private_up2_HQ.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resampler_private_up4.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resampler_rom.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resampler_up2.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_scale_copy_vector16.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_scale_vector.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_schur.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_schur64.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_sigm_Q15.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_sort.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_sum_sqr_shift.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath=".\SKP_Silk_common_pitch_est_defines.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_Inlines.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_macros.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_pitch_est_defines.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resample_rom.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resampler_rom.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_resampler_structs.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_SigProc_FIX.h"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_LPC_inv_pred_gain_FLP.c
@@ -1,0 +1,81 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_LPC_inverse_pred_gain.c                                   *
+ *                                                                      *
+ * compute inverse of LPC prediction gain, and                          *
+ * test if LPC coefficients are stable (all poles within unit circle)   *
+ *                                                                      *
+ * Copyright 2008 (c), Skype Limited                                    *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_SigProc_FLP.h"
+
+#define RC_THRESHOLD        0.9999f
+
+/* compute inverse of LPC prediction gain, and                          */
+/* test if LPC coefficients are stable (all poles within unit circle)   */
+/* this code is based on SKP_Silk_a2k_FLP()                               */
+SKP_int SKP_Silk_LPC_inverse_pred_gain_FLP(   /* O:   returns 1 if unstable, otherwise 0      */
+    SKP_float       *invGain,               /* O:   inverse prediction gain, energy domain  */
+    const SKP_float *A,                     /* I:   prediction coefficients [order]         */
+    SKP_int32       order                   /* I:   prediction order                        */
+)
+{
+    SKP_int   k, n;
+    double    rc, rc_mult1, rc_mult2;
+    SKP_float Atmp[ 2 ][ SKP_Silk_MAX_ORDER_LPC ];
+    SKP_float *Aold, *Anew;
+
+    Anew = Atmp[ order & 1 ];
+    SKP_memcpy( Anew, A, order * sizeof(SKP_float) );
+
+    *invGain = 1.0f;
+    for( k = order - 1; k > 0; k-- ) {
+        rc = -Anew[ k ];
+        if (rc > RC_THRESHOLD || rc < -RC_THRESHOLD) {
+            return 1;
+        }
+        rc_mult1 = 1.0f - rc * rc;
+        rc_mult2 = 1.0f / rc_mult1;
+        *invGain *= (SKP_float)rc_mult1;
+        /* swap pointers */
+        Aold = Anew;
+        Anew = Atmp[ k & 1 ];
+        for( n = 0; n < k; n++ ) {
+            Anew[ n ] = (SKP_float)( ( Aold[ n ] - Aold[ k - n - 1 ] * rc ) * rc_mult2 );
+        }
+    }
+    rc = -Anew[ 0 ];
+    if ( rc > RC_THRESHOLD || rc < -RC_THRESHOLD ) {
+        return 1;
+    }
+    rc_mult1 = 1.0f - rc * rc;
+    *invGain *= (SKP_float)rc_mult1;
+    return 0;
+}
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_NLSF_VQ_weights_laroia_FLP.c
@@ -1,0 +1,69 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_SigProc_FLP.h"
+
+/* 
+R. Laroia, N. Phamdo and N. Farvardin, "Robust and Efficient Quantization of Speech LSP
+Parameters Using Structured Vector Quantization", Proc. IEEE Int. Conf. Acoust., Speech,
+Signal Processing, pp. 641-644, 1991.
+*/
+
+#define MIN_NDELTA      ( 1e-6f / PI )
+
+/* Laroia low complexity NLSF weights */
+void SKP_Silk_NLSF_VQ_weights_laroia_FLP( 
+          SKP_float     *pXW,           /* 0: Pointer to input vector weights           [D x 1] */
+    const SKP_float     *pX,            /* I: Pointer to input vector                   [D x 1] */ 
+    const SKP_int        D              /* I: Input vector dimension                            */
+)
+{
+    SKP_int   k;
+    SKP_float tmp1, tmp2;
+    
+    /* Safety checks */
+    SKP_assert( D > 0 );
+    SKP_assert( ( D & 1 ) == 0 );
+    
+    /* First value */
+    tmp1 = 1.0f / SKP_max_float( pX[ 0 ],           MIN_NDELTA );
+    tmp2 = 1.0f / SKP_max_float( pX[ 1 ] - pX[ 0 ], MIN_NDELTA );
+    pXW[ 0 ] = tmp1 + tmp2;
+    
+    /* Main loop */
+    for( k = 1; k < D - 1; k += 2 ) {
+        tmp1 = 1.0f / SKP_max_float( pX[ k + 1 ] - pX[ k ], MIN_NDELTA );
+        pXW[ k ] = tmp1 + tmp2;
+
+        tmp2 = 1.0f / SKP_max_float( pX[ k + 2 ] - pX[ k + 1 ], MIN_NDELTA );
+        pXW[ k + 1 ] = tmp1 + tmp2;
+    }
+    
+    /* Last value */
+    tmp1 = 1.0f / SKP_max_float( 1.0f - pX[ D - 1 ], MIN_NDELTA );
+    pXW[ D - 1 ] = tmp1 + tmp2;
+}
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_SigProc_FLP.h
@@ -1,0 +1,249 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef _SKP_SILK_SIGPROC_FLP_H_
+#define _SKP_SILK_SIGPROC_FLP_H_
+
+#include "SKP_Silk_SigProc_FIX.h"
+#include <math.h>
+
+#ifdef  __cplusplus
+extern "C"
+{
+#endif
+
+/********************************************************************/
+/*                    SIGNAL PROCESSING FUNCTIONS                   */
+/********************************************************************/
+
+/* first-order allpass filter */
+void SKP_Silk_allpass_int_FLP(
+    const SKP_float *in,                /* I:   input signal [len]              */
+    SKP_float       *S,                 /* I/O: state [1]                       */
+    SKP_float       A,                  /* I:   coefficient	(0 <= A < 1)        */
+    SKP_float       *out,               /* O:   output signal [len]             */
+    const SKP_int32 len                 /* I:   number of samples               */
+);
+
+/* downsample by a factor 2, coarser */
+void SKP_Silk_decimate2_coarse_FLP(
+    const SKP_float	*in,                 /* I:  signal [2*len]            */
+    SKP_float       *S,                  /* I/O: state vector [2]         */
+    SKP_float       *out,                /* O:  decimated signal [len]    */
+    SKP_float       *scratch,            /* I:  scratch memory [3*len]    */
+    const SKP_int32 len                  /* I:  number of OUTPUT samples  */
+);
+
+/* downsample by a factor 2, coarsest */
+void SKP_Silk_decimate2_coarsest_FLP(
+    const SKP_float	*in,                 /* I:  signal [2*len]            */
+    SKP_float       *S,                  /* I/O: state vector [2]         */
+    SKP_float       *out,                /* O:  decimated signal [len]    */
+    SKP_float       *scratch,            /* I:  scratch memory [3*len]    */
+    const SKP_int32 len                  /* I:  number of OUTPUT samples  */
+);
+
+/* Chirp (bw expand) LP AR filter */
+void SKP_Silk_bwexpander_FLP( 
+    SKP_float *ar,                     /* io   AR filter to be expanded (without leading 1)    */
+    const SKP_int d,                   /* i	length of ar                                       */
+    const SKP_float chirp              /* i	chirp factor (typically in range (0..1) )          */
+);
+
+/* compute inverse of LPC prediction gain, and							*/
+/* test if LPC coefficients are stable (all poles within unit circle)	*/
+/* this code is based on SKP_Silk_FLP_a2k()								*/
+SKP_int SKP_Silk_LPC_inverse_pred_gain_FLP( /* O:   returns 1 if unstable, otherwise 0    */
+    SKP_float            *invGain,      /* O:   inverse prediction gain, energy domain	  */
+    const SKP_float      *A,            /* I:   prediction coefficients [order]           */
+    SKP_int32            order          /* I:   prediction order                          */
+);
+
+void SKP_Silk_schur_FLP(
+    SKP_float           refl_coef[],     /* O   reflection coefficients (length order)       */
+    const SKP_float     auto_corr[],     /* I   autotcorreation sequence (length order+1)    */
+    SKP_int             order            /* I   order                                        */
+);
+
+void SKP_Silk_k2a_FLP(
+    SKP_float           *A,             /* O:	prediction coefficients [order]           */
+    const SKP_float     *rc,            /* I:	reflection coefficients [order]           */
+    SKP_int32           order           /* I:	prediction order                          */
+);
+
+/* Solve the normal equations using the Levinson-Durbin recursion */
+SKP_float SKP_Silk_levinsondurbin_FLP(	/* O	prediction error energy						*/
+	SKP_float		A[],				/* O	prediction coefficients	[order]				*/
+	const SKP_float corr[],				/* I	input auto-correlations [order + 1]			*/
+	const SKP_int	order				/* I	prediction order 							*/
+);
+
+/* compute autocorrelation */
+void SKP_Silk_autocorrelation_FLP( 
+    SKP_float *results,                 /* o    result (length correlationCount)            */
+    const SKP_float *inputData,         /* i    input data to correlate                     */
+    SKP_int inputDataSize,              /* i    length of input                             */
+    SKP_int correlationCount            /* i    number of correlation taps to compute       */
+);
+
+/* Pitch estimator */
+#define SigProc_PE_MIN_COMPLEX        0
+#define SigProc_PE_MID_COMPLEX        1
+#define SigProc_PE_MAX_COMPLEX        2
+
+SKP_int SKP_Silk_pitch_analysis_core_FLP( /* O voicing estimate: 0 voiced, 1 unvoiced                       */
+    const SKP_float *signal,            /* I signal of length PE_FRAME_LENGTH_MS*Fs_kHz              */
+    SKP_int         *pitch_out,         /* O 4 pitch lag values                                             */
+    SKP_int         *lagIndex,          /* O lag Index                                                      */
+    SKP_int         *contourIndex,      /* O pitch contour Index                                            */
+    SKP_float       *LTPCorr,           /* I/O normalized correlation; input: value from previous frame     */
+    SKP_int         prevLag,            /* I last lag of previous frame; set to zero is unvoiced            */
+    const SKP_float search_thres1,      /* I first stage threshold for lag candidates 0 - 1                 */
+    const SKP_float search_thres2,      /* I final threshold for lag candidates 0 - 1                       */
+    const SKP_int   Fs_kHz,             /* I sample frequency (kHz)                                         */
+    const SKP_int   complexity,         /* I Complexity setting, 0-2, where 2 is highest                    */
+    const SKP_int   nb_subfr            /* I    number of 5 ms subframes                                    */
+);
+
+#define PI               (3.1415926536f)
+
+void SKP_Silk_insertion_sort_decreasing_FLP(
+    SKP_float            *a,          /* I/O:  Unsorted / Sorted vector                */
+    SKP_int              *index,      /* O:    Index vector for the sorted elements    */
+    const SKP_int        L,           /* I:    Vector length                           */
+    const SKP_int        K            /* I:    Number of correctly sorted positions    */
+);
+
+void SKP_Silk_insertion_sort_increasing_FLP(
+    SKP_float            *a,          /* I/O:  Unsorted / Sorted vector                */
+    SKP_int              *index,      /* O:    Index vector for the sorted elements    */
+    const SKP_int        L,           /* I:    Vector length                           */
+    const SKP_int        K            /* I:    Number of correctly sorted positions    */
+);
+
+/* Laroia low complexity NLSF weights */
+void SKP_Silk_NLSF_VQ_weights_laroia_FLP(	
+    SKP_float            *pXW,           /* 0: Pointer to input vector weights                [D x 1]    */
+    const SKP_float      *pX,            /* I: Pointer to input vector                        [D x 1]    */ 
+    const SKP_int        D               /* I: Input vector dimension                                    */
+);
+
+/* Compute reflection coefficients from input signal */
+SKP_float SKP_Silk_burg_modified_FLP(       /* O    returns residual energy                                         */
+    SKP_float           A[],                /* O    prediction coefficients (length order)                          */
+    const SKP_float     x[],                /* I    input signal, length: nb_subfr*(D+L_sub)                        */
+    const SKP_int       subfr_length,       /* I    input signal subframe length (including D preceeding samples)   */
+    const SKP_int       nb_subfr,           /* I    number of subframes stacked in x                                */
+    const SKP_float     WhiteNoiseFrac,     /* I    fraction added to zero-lag autocorrelation                      */
+    const SKP_int       D                   /* I    order                                                           */
+);
+
+/* multiply a vector by a constant */
+void SKP_Silk_scale_vector_FLP( 
+    SKP_float           *data1,
+    SKP_float           gain, 
+    SKP_int             dataSize
+);
+
+/* copy and multiply a vector by a constant */
+void SKP_Silk_scale_copy_vector_FLP( 
+    SKP_float           *data_out, 
+    const SKP_float     *data_in, 
+    SKP_float           gain, 
+    SKP_int             dataSize
+);
+
+/* inner product of two SKP_float arrays, with result as double */
+double SKP_Silk_inner_product_FLP( 
+    const SKP_float     *data1, 
+    const SKP_float     *data2, 
+    SKP_int             dataSize
+);
+
+/* sum of squares of a SKP_float array, with result as double */
+double SKP_Silk_energy_FLP( 
+    const SKP_float     *data, 
+    SKP_int             dataSize
+);
+
+/********************************************************************/
+/*                                MACROS                                */
+/********************************************************************/
+
+#define SKP_min_float(a, b)			(((a) < (b)) ? (a) :  (b)) 
+#define SKP_max_float(a, b)			(((a) > (b)) ? (a) :  (b)) 
+#define SKP_abs_float(a)			((SKP_float)fabs(a))
+
+#define SKP_LIMIT_float( a, limit1, limit2)	((limit1) > (limit2) ? ((a) > (limit1) ? (limit1) : ((a) < (limit2) ? (limit2) : (a))) \
+															     : ((a) > (limit2) ? (limit2) : ((a) < (limit1) ? (limit1) : (a))))
+
+/* sigmoid function */
+SKP_INLINE SKP_float SKP_sigmoid(SKP_float x)
+{
+    return (SKP_float)(1.0 / (1.0 + exp(-x)));
+}
+
+/* floating-point to integer conversion (rounding) */
+SKP_INLINE void SKP_float2short_array(
+    SKP_int16       *out, 
+    const SKP_float *in, 
+    SKP_int32       length
+) 
+{
+    SKP_int32 k;
+    for (k = length-1; k >= 0; k--) {
+        double x = in[k];
+        out[k] = (SKP_int16)SKP_SAT16( ( x > 0 ) ? x + 0.5 : x - 0.5 );
+    }
+}
+
+/* floating-point to integer conversion (rounding) */
+SKP_INLINE SKP_int32 SKP_float2int(double x) 
+{
+    return (SKP_int32)( ( x > 0 ) ? x + 0.5 : x - 0.5 );
+}
+
+/* integer to floating-point conversion */
+SKP_INLINE void SKP_short2float_array(
+    SKP_float       *out, 
+    const SKP_int16 *in, 
+    SKP_int32       length
+) 
+{
+    SKP_int32 k;
+    for (k = length-1; k >= 0; k--) {
+        out[k] = (SKP_float)in[k];
+    }
+}
+
+#define SKP_round(x)		(SKP_float)((x)>=0 ? (SKP_int64)((x)+0.5) : (SKP_int64)((x)-0.5))
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_allpass_int_FLP.c
@@ -1,0 +1,68 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_allpass_int.c                                             *
+ *                                                                      *
+ * First-order allpass filter with                                      *                                                                     *
+ * transfer function:                                                   *
+ *                                                                      *
+ *         A + Z^(-1)                                                   *
+ * H(z) = ------------                                                  *
+ *        1 + A*Z^(-1)                                                  *
+ *                                                                      *
+ * Implemented using minimum multiplier filter design.                  *
+ *                                                                      *
+ * Reference: http://www.univ.trieste.it/~ramponi/teaching/             *
+ * DSP/materiale/Ch6(2).pdf                                             *
+ *                                                                      *
+ * Copyright 2007 (c), Skype Limited                                    *
+ * Date: 070525                                                         *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FLP.h"
+
+/* first-order allpass filter */
+void SKP_Silk_allpass_int_FLP(
+    const SKP_float     *in,        /* I:   input signal [len]          */
+    SKP_float           *S,         /* I/O: state [1]                   */
+    SKP_float           A,          /* I:   coefficient (0 <= A < 1)    */
+    SKP_float           *out,       /* O:   output signal [len]         */
+    const SKP_int32     len         /* I:   number of samples           */
+)
+{
+    SKP_float Y2, X2, S0;
+    SKP_int32 k;
+
+    S0 = S[ 0 ];
+    for ( k = len-1; k >= 0; k-- ) {
+        Y2        = *in - S0;
+        X2        = Y2 * A;
+        (*out++)  = S0 + X2;
+        S0        = (*in++) + X2;
+    }
+    S[ 0 ] = S0;
+}
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_autocorrelation_FLP.c
@@ -1,0 +1,48 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_typedef.h"
+#include "SKP_Silk_SigProc_FLP.h"
+
+/* compute autocorrelation */
+void SKP_Silk_autocorrelation_FLP( 
+    SKP_float       *results,           /* O    result (length correlationCount)            */
+    const SKP_float *inputData,         /* I    input data to correlate                     */
+    SKP_int         inputDataSize,      /* I    length of input                             */
+    SKP_int         correlationCount    /* I    number of correlation taps to compute       */
+)
+{
+    SKP_int i;
+
+    if ( correlationCount > inputDataSize ) {
+        correlationCount = inputDataSize;
+    }
+
+    for( i = 0; i < correlationCount; i++ ) {
+        results[ i ] =  (SKP_float)SKP_Silk_inner_product_FLP( inputData, inputData + i, inputDataSize - i );
+    }
+}
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_burg_modified_FLP.c
@@ -1,0 +1,154 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_burg_modified.c                                           *
+ *                                                                      *
+ * Calculates the reflection coefficients from the input vector         *
+ * Input vector contains nb_subfr sub vectors of length L_sub + D       *
+ *                                                                      *
+ * Copyright 2009 (c), Skype Limited                                    *
+ * Date: 091130                                                         *
+ */
+
+#include "SKP_Silk_SigProc_FLP.h"
+
+#define MAX_FRAME_SIZE              544 // subfr_length * nb_subfr = ( 0.005 * 24000 + 16 ) * 4 = 544
+#define MAX_NB_SUBFR                4
+
+/* Compute reflection coefficients from input signal */
+SKP_float SKP_Silk_burg_modified_FLP(     /* O    returns residual energy                                         */
+    SKP_float       A[],                /* O    prediction coefficients (length order)                          */
+    const SKP_float x[],                /* I    input signal, length: nb_subfr*(D+L_sub)                        */
+    const SKP_int   subfr_length,       /* I    input signal subframe length (including D preceeding samples)   */
+    const SKP_int   nb_subfr,           /* I    number of subframes stacked in x                                */
+    const SKP_float WhiteNoiseFrac,     /* I    fraction added to zero-lag autocorrelation                      */
+    const SKP_int   D                   /* I    order                                                           */
+)
+{
+    SKP_int         k, n, s;
+    double          C0, num, nrg_f, nrg_b, rc, Atmp, tmp1, tmp2;
+    const SKP_float *x_ptr;
+    double          C_first_row[ SKP_Silk_MAX_ORDER_LPC ], C_last_row[ SKP_Silk_MAX_ORDER_LPC ];
+    double          CAf[ SKP_Silk_MAX_ORDER_LPC + 1 ], CAb[ SKP_Silk_MAX_ORDER_LPC + 1 ];
+    double          Af[ SKP_Silk_MAX_ORDER_LPC ];
+
+    SKP_assert( subfr_length * nb_subfr <= MAX_FRAME_SIZE );
+    SKP_assert( nb_subfr <= MAX_NB_SUBFR );
+
+    /* Compute autocorrelations, added over subframes */
+    C0 = SKP_Silk_energy_FLP( x, nb_subfr * subfr_length );
+    SKP_memset( C_first_row, 0, SKP_Silk_MAX_ORDER_LPC * sizeof( double ) );
+    for( s = 0; s < nb_subfr; s++ ) {
+        x_ptr = x + s * subfr_length;
+        for( n = 1; n < D + 1; n++ ) {
+            C_first_row[ n - 1 ] += SKP_Silk_inner_product_FLP( x_ptr, x_ptr + n, subfr_length - n );
+        }
+    }
+    SKP_memcpy( C_last_row, C_first_row, SKP_Silk_MAX_ORDER_LPC * sizeof( double ) );
+
+    /* Initialize */
+    CAb[ 0 ] = CAf[ 0 ] = C0 + WhiteNoiseFrac * C0 + 1e-9f;
+
+    for( n = 0; n < D; n++ ) {
+        /* Update first row of correlation matrix (without first element) */
+        /* Update last row of correlation matrix (without last element, stored in reversed order) */
+        /* Update C * Af */
+        /* Update C * flipud(Af) (stored in reversed order) */
+        for( s = 0; s < nb_subfr; s++ ) {
+            x_ptr = x + s * subfr_length;
+            tmp1 = x_ptr[ n ];
+            tmp2 = x_ptr[ subfr_length - n - 1 ];
+            for( k = 0; k < n; k++ ) {
+                C_first_row[ k ] -= x_ptr[ n ] * x_ptr[ n - k - 1 ];
+                C_last_row[ k ]  -= x_ptr[ subfr_length - n - 1 ] * x_ptr[ subfr_length - n + k ];
+                Atmp = Af[ k ];
+                tmp1 += x_ptr[ n - k - 1 ] * Atmp;
+                tmp2 += x_ptr[ subfr_length - n + k ] * Atmp;
+            }
+            for( k = 0; k <= n; k++ ) {
+                CAf[ k ] -= tmp1 * x_ptr[ n - k ];
+                CAb[ k ] -= tmp2 * x_ptr[ subfr_length - n + k - 1 ];
+            }
+        }
+        tmp1 = C_first_row[ n ];
+        tmp2 = C_last_row[ n ];
+        for( k = 0; k < n; k++ ) {
+            Atmp = Af[ k ];
+            tmp1 += C_last_row[ n - k - 1 ]  * Atmp;
+            tmp2 += C_first_row[ n - k - 1 ] * Atmp;
+        }
+        CAf[ n + 1 ] = tmp1;
+        CAb[ n + 1 ] = tmp2;
+
+        /* Calculate nominator and denominator for the next order reflection (parcor) coefficient */
+        num = CAb[ n + 1 ];
+        nrg_b = CAb[ 0 ];
+        nrg_f = CAf[ 0 ];
+        for( k = 0; k < n; k++ ) {
+            Atmp = Af[ k ];
+            num   += CAb[ n - k ] * Atmp;
+            nrg_b += CAb[ k + 1 ] * Atmp;
+            nrg_f += CAf[ k + 1 ] * Atmp;
+        }
+        SKP_assert( nrg_f > 0.0 );
+        SKP_assert( nrg_b > 0.0 );
+
+        /* Calculate the next order reflection (parcor) coefficient */
+        rc = -2.0 * num / ( nrg_f + nrg_b );
+        SKP_assert( rc > -1.0 && rc < 1.0 );
+
+        /* Update the AR coefficients */
+        for( k = 0; k < (n + 1) >> 1; k++ ) {
+            tmp1 = Af[ k ];
+            tmp2 = Af[ n - k - 1 ];
+            Af[ k ]         = tmp1 + rc * tmp2;
+            Af[ n - k - 1 ] = tmp2 + rc * tmp1;
+        }
+        Af[ n ] = rc;
+
+        /* Update C * Af and C * Ab */
+        for( k = 0; k <= n + 1; k++ ) {
+            tmp1 = CAf[ k ];
+            CAf[ k ]          += rc * CAb[ n - k + 1 ];
+            CAb[ n - k + 1  ] += rc * tmp1;
+        }
+    }
+
+    /* Return residual energy */
+    nrg_f = CAf[ 0 ];
+    tmp1 = 1.0;
+    for( k = 0; k < D; k++ ) {
+        Atmp = Af[ k ];
+        nrg_f += CAf[ k + 1 ] * Atmp;
+        tmp1  += Atmp * Atmp;
+        A[ k ] = (SKP_float)(-Atmp);
+    }
+    nrg_f -= WhiteNoiseFrac * C0 * tmp1;
+
+    return (SKP_float)nrg_f;
+}
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_bwexpander_FLP.c
@@ -1,0 +1,47 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+
+#include "SKP_Silk_SigProc_FLP.h"
+
+
+/* Chirp (bw expand) LP AR filter */
+void SKP_Silk_bwexpander_FLP( 
+    SKP_float           *ar,        /* I/O  AR filter to be expanded (without leading 1)    */
+    const SKP_int       d,          /* I    length of ar                                    */
+    const SKP_float     chirp       /* I    chirp factor (typically in range (0..1) )       */
+)
+{
+    SKP_int   i;
+    SKP_float cfac = chirp;
+
+    for( i = 0; i < d - 1; i++ ) {
+        ar[ i ] *=  cfac;
+        cfac    *=  chirp;
+    }
+    ar[ d - 1 ] *=  cfac;
+}
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_decimate2_coarse_FLP.c
@@ -1,0 +1,72 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_decimate2_coarse.c                                        *
+ *                                                                      *
+ * downsample by a factor 2, coarser                                    *
+ *                                                                      *
+ * Copyright 2006 (c), Camino Networks                                  *
+ * Date: 060221                                                         *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FLP.h"
+
+/* coefficients for coarser 2-fold resampling */
+static SKP_float A20c_FLP[ 2 ] = {0.064666748046875f, 0.508514404296875f};
+static SKP_float A21c_FLP[ 2 ] = {0.245666503906250f, 0.819732666015625f};
+
+/* downsample by a factor 2, coarser */
+void SKP_Silk_decimate2_coarse_FLP(
+    const SKP_float     *in,        /* I:   16 kHz signal [2*len]       */
+    SKP_float           *S,         /* I/O: state vector [4]            */
+    SKP_float           *out,       /* O:   8 kHz signal [len]          */
+    SKP_float           *scratch,   /* I:   scratch memory [3*len]      */
+    const SKP_int32     len         /* I:   number of OUTPUT samples    */
+)
+{
+    SKP_int32 k;
+
+    /* de-interleave allpass inputs */
+    for ( k = 0; k < len; k++) {
+        scratch[ k ]       = in[ 2 * k ];
+        scratch[ k + len ] = in[ 2 * k + 1 ];
+    }
+
+    /* allpass filters */
+    SKP_Silk_allpass_int_FLP( scratch, S + 0, A21c_FLP[ 0 ], scratch + 2 * len, len );
+    SKP_Silk_allpass_int_FLP( scratch + 2 * len, S + 1, A21c_FLP[ 1 ], scratch, len );
+    
+    SKP_Silk_allpass_int_FLP( scratch + len, S + 2, A20c_FLP[ 0 ], scratch + 2 * len, len );
+    SKP_Silk_allpass_int_FLP( scratch + 2 * len, S + 3, A20c_FLP[ 1 ], scratch + len, len );
+    
+    /* add two allpass outputs */
+    for ( k = 0; k < len; k++ ) {
+        out[ k ] = 0.5f * ( scratch[ k ] + scratch[ k + len ] );
+    }       
+}
+
+
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_decimate2_coarsest_FLP.c
@@ -1,0 +1,70 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_decimate2_coarsest.c                                      *
+ *                                                                      *
+ * downsample by a factor 2, coarsest                                   *
+ *                                                                      *
+ * Copyright 2006 (c), Camino Networks                                  *
+ * Date: 060221                                                         *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FLP.h"
+
+/* coefficients for coarsest 2-fold resampling */
+/* note that these differ from the interpolator with the same filter orders! */
+static float A20cst_FLP[ 1 ] = {0.289001464843750f};
+static float A21cst_FLP[ 1 ] = {0.780487060546875f};
+
+/* downsample by a factor 2, coarsest */
+void SKP_Silk_decimate2_coarsest_FLP(
+    const SKP_float     *in,        /* I:   16 kHz signal [2*len]       */
+    SKP_float           *S,         /* I/O: state vector [2]            */
+    SKP_float           *out,       /* O:   8 kHz signal [len]          */
+    SKP_float           *scratch,   /* I:   scratch memory [3*len]      */
+    const SKP_int32     len         /* I:   number of OUTPUT samples    */
+)
+{
+    SKP_int32 k;
+
+    /* de-interleave allpass inputs */
+    for ( k = 0; k < len; k++ ) {
+        scratch[ k ]       = in[ 2 * k + 0 ];
+        scratch[ k + len ] = in[ 2 * k + 1 ];
+    }
+
+    /* allpass filters */
+    SKP_Silk_allpass_int_FLP( scratch,       S + 0, A21cst_FLP[ 0 ], scratch + 2 * len, len );
+    SKP_Silk_allpass_int_FLP( scratch + len, S + 1, A20cst_FLP[ 0 ], scratch,         len );
+
+    /* add two allpass outputs */
+    for ( k = 0; k < len; k++ ) {
+        out[ k ] = 0.5f * ( scratch[ k ] + scratch[ k + 2 * len ] );
+    }
+}
+
+
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_energy_FLP.c
@@ -1,0 +1,56 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_SigProc_FLP.h"
+
+/* sum of squares of a SKP_float array, with result as double */
+double SKP_Silk_energy_FLP( 
+    const SKP_float     *data, 
+    SKP_int             dataSize
+)
+{
+    SKP_int  i, dataSize4;
+    double   result;
+
+    /* 4x unrolled loop */
+    result = 0.0f;
+    dataSize4 = dataSize & 0xFFFC;
+    for( i = 0; i < dataSize4; i += 4 ) {
+        result += data[ i + 0 ] * data[ i + 0 ] + 
+                  data[ i + 1 ] * data[ i + 1 ] +
+                  data[ i + 2 ] * data[ i + 2 ] +
+                  data[ i + 3 ] * data[ i + 3 ];
+    }
+
+    /* add any remaining products */
+    for( ; i < dataSize; i++ ) {
+        result += data[ i ] * data[ i ];
+    }
+
+    SKP_assert( result >= 0.0 );
+    return result;
+}
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_inner_product_FLP.c
@@ -1,0 +1,56 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_SigProc_FLP.h"
+
+/* inner product of two SKP_float arrays, with result as double     */
+double SKP_Silk_inner_product_FLP(    /* O    result              */
+    const SKP_float     *data1,         /* I    vector 1            */
+    const SKP_float     *data2,         /* I    vector 2            */
+    SKP_int             dataSize        /* I    length of vectors   */
+)
+{
+    SKP_int  i, dataSize4;
+    double   result;
+
+    /* 4x unrolled loop */
+    result = 0.0f;
+    dataSize4 = dataSize & 0xFFFC;
+    for( i = 0; i < dataSize4; i += 4 ) {
+        result += data1[ i + 0 ] * data2[ i + 0 ] + 
+                  data1[ i + 1 ] * data2[ i + 1 ] +
+                  data1[ i + 2 ] * data2[ i + 2 ] +
+                  data1[ i + 3 ] * data2[ i + 3 ];
+    }
+
+    /* add any remaining products */
+    for( ; i < dataSize; i++ ) {
+        result += data1[ i ] * data2[ i ];
+    }
+
+    return result;
+}
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_k2a_FLP.c
@@ -1,0 +1,58 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_k2a.c                                                     *
+ *                                                                      *
+ * step up function, converts reflection coefficients to prediction     *
+ * coefficients                                                         *
+ *                                                                      *
+ * Copyright 2008 (c), Skype Limited                                    *
+ * Date: 080103                                                         *
+ *                                                                      */
+#include "SKP_Silk_SigProc_FLP.h"
+
+/* step up function, converts reflection coefficients to prediction coefficients */
+void SKP_Silk_k2a_FLP(
+    SKP_float       *A,                 /* O:   prediction coefficients [order]             */
+    const SKP_float *rc,                /* I:   reflection coefficients [order]             */
+    SKP_int32       order               /* I:   prediction order                            */
+)
+{
+    SKP_int   k, n;
+    SKP_float Atmp[SKP_Silk_MAX_ORDER_LPC];
+
+    for( k = 0; k < order; k++ ){
+        for( n = 0; n < k; n++ ){
+            Atmp[ n ] = A[ n ];
+        }
+        for( n = 0; n < k; n++ ) {
+            A[ n ] += Atmp[ k - n - 1 ] * rc[ k ];
+        }
+        A[ k ] = -rc[ k ];
+    }
+}
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_levinsondurbin_FLP.c
@@ -1,0 +1,77 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_SigProc_FLP.h"
+
+/* Solve the normal equations using the Levinson-Durbin recursion */
+SKP_float SKP_Silk_levinsondurbin_FLP(    /* O    prediction error energy                     */
+    SKP_float       A[],                /* O    prediction coefficients [order]             */
+    const SKP_float corr[],             /* I    input auto-correlations [order + 1]         */
+    const SKP_int   order               /* I    prediction order                            */
+)
+{
+    SKP_int   i, mHalf, m;
+    SKP_float min_nrg, nrg, t, km, Atmp1, Atmp2;
+    
+    min_nrg = 1e-12f * corr[ 0 ] + 1e-9f;
+    nrg = corr[ 0 ];
+    nrg = SKP_max_float(min_nrg, nrg);
+    A[ 0 ] = corr[ 1 ] / nrg;
+    nrg -= A[ 0 ] * corr[ 1 ];
+    nrg = SKP_max_float(min_nrg, nrg);
+
+    for( m = 1; m < order; m++ )
+    {
+        t = corr[ m + 1 ];
+        for( i = 0; i < m; i++ ) {
+            t -= A[ i ] * corr[ m - i ];
+        }
+
+        /* reflection coefficient */
+        km = t / nrg;
+
+        /* residual energy */
+        nrg -= km * t;
+        nrg = SKP_max_float(min_nrg, nrg);
+
+        mHalf = m >> 1;
+        for( i = 0; i < mHalf; i++ ) {
+            Atmp1 = A[ i ];
+            Atmp2 = A[ m - i - 1 ];
+            A[ m - i - 1 ] -= km * Atmp1;
+            A[ i ]         -= km * Atmp2;
+        }
+        if( m & 1 ) {
+            A[ mHalf ]     -= km * A[ mHalf ];
+        }
+        A[ m ] = km;
+    }
+
+    /* return the residual energy */
+    return nrg;
+}
+
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_pitch_analysis_core_FLP.c
@@ -1,0 +1,672 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*****************************************************************************
+*
+* Pitch analyser function
+*
+******************************************************************************/
+#include "SKP_Silk_SigProc_FLP.h"
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_pitch_est_defines_FLP.h"
+#include "SKP_Silk_common_pitch_est_defines.h"
+
+#define SCRATCH_SIZE    22
+
+/************************************************************/
+/* Definitions                                              */
+/************************************************************/
+#define eps                     1.192092896e-07f
+
+/* using log2() helps the fixed-point conversion */
+SKP_INLINE SKP_float SKP_P_log2(double x) { return (SKP_float)(3.32192809488736 * log10(x)); }
+
+/************************************************************/
+/* Internally used functions                                */
+/************************************************************/
+static void SKP_P_Ana_calc_corr_st3(
+    SKP_float cross_corr_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ], /* O 3 DIM correlation array */
+    const SKP_float signal[],           /* I vector to correlate                                            */
+    SKP_int         start_lag,          /* I start lag                                                      */
+    SKP_int         sf_length,          /* I sub frame length                                               */
+    SKP_int         nb_subfr,           /* I number of subframes                                            */
+    SKP_int         complexity          /* I Complexity setting                                             */
+);
+
+static void SKP_P_Ana_calc_energy_st3(
+    SKP_float energies_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ], /* O 3 DIM correlation array */
+    const SKP_float signal[],           /* I vector to correlate                                            */
+    SKP_int         start_lag,          /* I start lag                                                      */
+    SKP_int         sf_length,          /* I sub frame length                                               */
+    SKP_int         nb_subfr,           /* I number of subframes                                            */
+    SKP_int         complexity          /* I Complexity setting                                             */
+);
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+//%             CORE PITCH ANALYSIS FUNCTION                %
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+SKP_int SKP_Silk_pitch_analysis_core_FLP( /* O voicing estimate: 0 voiced, 1 unvoiced                       */
+    const SKP_float *signal,            /* I signal of length PE_FRAME_LENGTH_MS*Fs_kHz              */
+    SKP_int         *pitch_out,         /* O 4 pitch lag values                                             */
+    SKP_int         *lagIndex,          /* O lag Index                                                      */
+    SKP_int         *contourIndex,      /* O pitch contour Index                                            */
+    SKP_float       *LTPCorr,           /* I/O normalized correlation; input: value from previous frame     */
+    SKP_int         prevLag,            /* I last lag of previous frame; set to zero is unvoiced            */
+    const SKP_float search_thres1,      /* I first stage threshold for lag candidates 0 - 1                 */
+    const SKP_float search_thres2,      /* I final threshold for lag candidates 0 - 1                       */
+    const SKP_int   Fs_kHz,             /* I sample frequency (kHz)                                         */
+    const SKP_int   complexity,         /* I Complexity setting, 0-2, where 2 is highest                    */
+    const SKP_int   nb_subfr            /* I    number of 5 ms subframes                                    */
+)
+{
+    SKP_float signal_8kHz[ PE_MAX_FRAME_LENGTH_MS * 8 ];
+    SKP_float signal_4kHz[ PE_MAX_FRAME_LENGTH_MS * 4 ];
+    SKP_float scratch_mem[ PE_MAX_FRAME_LENGTH * 3 ];
+    SKP_float filt_state[ PE_MAX_DECIMATE_STATE_LENGTH ];
+    SKP_int   i, k, d, j;
+    SKP_float threshold, contour_bias;
+    SKP_float C[ PE_MAX_NB_SUBFR][ (PE_MAX_LAG >> 1) + 5 ]; /* use to be +2 but then valgrind reported errors for SWB */
+    SKP_float CC[ PE_NB_CBKS_STAGE2_EXT ];
+    const SKP_float *target_ptr, *basis_ptr;
+    double    cross_corr, normalizer, energy, energy_tmp;
+    SKP_int   d_srch[ PE_D_SRCH_LENGTH ];
+    SKP_int16 d_comp[ (PE_MAX_LAG >> 1) + 5 ];
+    SKP_int   length_d_srch, length_d_comp;
+    SKP_float Cmax, CCmax, CCmax_b, CCmax_new_b, CCmax_new;
+    SKP_int   CBimax, CBimax_new, lag, start_lag, end_lag, lag_new;
+    SKP_int   cbk_offset, cbk_size;
+    SKP_float lag_log2, prevLag_log2, delta_lag_log2_sqr;
+    SKP_float energies_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ];
+    SKP_float cross_corr_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ];
+    SKP_int diff, lag_counter, frame_length, frame_length_8kHz, frame_length_4kHz;
+    SKP_int sf_length, sf_length_8kHz, sf_length_4kHz;
+    SKP_int min_lag, min_lag_8kHz, min_lag_4kHz;
+    SKP_int max_lag, max_lag_8kHz, max_lag_4kHz;
+    const SKP_int8 *Lag_CB_ptr;
+    SKP_int nb_cbk_search;
+
+    /* Check for valid sampling frequency */
+    SKP_assert( Fs_kHz == 8 || Fs_kHz == 12 || Fs_kHz == 16 || Fs_kHz == 24 );
+
+    /* Check for valid complexity setting */
+    SKP_assert( complexity >= SigProc_PE_MIN_COMPLEX );
+    SKP_assert( complexity <= SigProc_PE_MAX_COMPLEX );
+
+    SKP_assert( search_thres1 >= 0.0f && search_thres1 <= 1.0f );
+    SKP_assert( search_thres2 >= 0.0f && search_thres2 <= 1.0f );
+
+    /* Setup frame lengths max / min lag for the sampling frequency */
+    frame_length      = ( PE_LTP_MEM_LENGTH_MS + nb_subfr * PE_SUBFR_LENGTH_MS ) * Fs_kHz;
+    frame_length_4kHz = ( PE_LTP_MEM_LENGTH_MS + nb_subfr * PE_SUBFR_LENGTH_MS ) * 4;
+    frame_length_8kHz = ( PE_LTP_MEM_LENGTH_MS + nb_subfr * PE_SUBFR_LENGTH_MS ) * 8;
+    sf_length         = PE_SUBFR_LENGTH_MS * Fs_kHz;
+    sf_length_4kHz    = PE_SUBFR_LENGTH_MS * 4;
+    sf_length_8kHz    = PE_SUBFR_LENGTH_MS * 8;
+    min_lag           = PE_MIN_LAG_MS * Fs_kHz;
+    min_lag_4kHz      = PE_MIN_LAG_MS * 4;
+    min_lag_8kHz      = PE_MIN_LAG_MS * 8;
+    max_lag           = PE_MAX_LAG_MS * Fs_kHz;
+    max_lag_4kHz      = PE_MAX_LAG_MS * 4;
+    max_lag_8kHz      = PE_MAX_LAG_MS * 8;
+
+    SKP_memset(C, 0, sizeof(SKP_float) * nb_subfr * ((PE_MAX_LAG >> 1) + 5));
+    
+    /* Resample from input sampled at Fs_kHz to 8 kHz */
+    if( Fs_kHz == 12 ) {
+        SKP_int16 signal_12[ 12 * PE_MAX_FRAME_LENGTH_MS ];
+        SKP_int16 signal_8[   8 * PE_MAX_FRAME_LENGTH_MS ];
+        SKP_int32 R23[ 6 ];
+
+        /* Resample to 12 -> 8 khz */
+        SKP_memset( R23, 0, 6 * sizeof( SKP_int32 ) );
+        SKP_float2short_array( signal_12, signal, frame_length );
+        SKP_Silk_resampler_down2_3( R23, signal_8, signal_12, frame_length );
+        SKP_short2float_array( signal_8kHz, signal_8, frame_length_8kHz );
+    } else if( Fs_kHz == 16 ) {
+        if( complexity == SigProc_PE_MAX_COMPLEX ) {
+            SKP_assert( 4 <= PE_MAX_DECIMATE_STATE_LENGTH );
+            SKP_memset( filt_state, 0, 4 * sizeof(SKP_float) );
+
+            SKP_Silk_decimate2_coarse_FLP( signal, filt_state, signal_8kHz, 
+                scratch_mem, frame_length_8kHz );
+        } else {
+            SKP_assert( 2 <= PE_MAX_DECIMATE_STATE_LENGTH );
+            SKP_memset( filt_state, 0, 2 * sizeof(SKP_float) );
+            
+            SKP_Silk_decimate2_coarsest_FLP( signal, filt_state, signal_8kHz, 
+                scratch_mem, frame_length_8kHz );
+        }
+    } else if( Fs_kHz == 24 ) {
+        SKP_int16 signal_24[ PE_MAX_FRAME_LENGTH ];
+        SKP_int16 signal_8[ 8 * PE_MAX_FRAME_LENGTH_MS ];
+        SKP_int32 filt_state_fix[ 8 ];
+
+        /* Resample to 24 -> 8 khz */
+        SKP_float2short_array( signal_24, signal, frame_length );
+        SKP_memset( filt_state_fix, 0, 8 * sizeof(SKP_int32) );
+        SKP_Silk_resampler_down3( filt_state_fix, signal_8, signal_24, frame_length );
+        SKP_short2float_array( signal_8kHz, signal_8, frame_length_8kHz );
+    } else {
+        SKP_assert( Fs_kHz == 8 );
+        SKP_memcpy( signal_8kHz, signal, frame_length_8kHz * sizeof(SKP_float) );
+    }
+
+    /* Decimate again to 4 kHz. Set mem to zero */
+    if( complexity == SigProc_PE_MAX_COMPLEX ) {
+        SKP_assert( 4 <= PE_MAX_DECIMATE_STATE_LENGTH );
+        SKP_memset( filt_state, 0, 4 * sizeof(SKP_float) );
+        SKP_Silk_decimate2_coarse_FLP( signal_8kHz, filt_state, 
+            signal_4kHz, scratch_mem, frame_length_4kHz );
+    } else {
+        SKP_assert( 2 <= PE_MAX_DECIMATE_STATE_LENGTH );
+        SKP_memset( filt_state, 0, 2 * sizeof(SKP_float) ); 
+        SKP_Silk_decimate2_coarsest_FLP( signal_8kHz, filt_state, 
+            signal_4kHz, scratch_mem, frame_length_4kHz );
+    }
+
+    /* Low-pass filter */
+    for( i = frame_length_4kHz - 1; i > 0; i-- ) {
+        signal_4kHz[ i ] += signal_4kHz[ i - 1 ];
+    }
+
+    /******************************************************************************
+    * FIRST STAGE, operating in 4 khz
+    ******************************************************************************/
+    target_ptr = &signal_4kHz[ SKP_LSHIFT( sf_length_4kHz, 2 ) ];
+    for( k = 0; k < nb_subfr >> 1; k++ ) {
+        /* Check that we are within range of the array */
+        SKP_assert( target_ptr >= signal_4kHz );
+        SKP_assert( target_ptr + sf_length_8kHz <= signal_4kHz + frame_length_4kHz );
+
+        basis_ptr = target_ptr - min_lag_4kHz;
+
+        /* Check that we are within range of the array */
+        SKP_assert( basis_ptr >= signal_4kHz );
+        SKP_assert( basis_ptr + sf_length_8kHz <= signal_4kHz + frame_length_4kHz );
+
+        /* Calculate first vector products before loop */
+        cross_corr = SKP_Silk_inner_product_FLP( target_ptr, basis_ptr, sf_length_8kHz );
+        normalizer = SKP_Silk_energy_FLP( basis_ptr, sf_length_8kHz ) + 1000.0f;
+
+        C[ 0 ][ min_lag_4kHz ] += (SKP_float)(cross_corr / sqrt(normalizer));
+
+        /* From now on normalizer is computed recursively */
+        for(d = min_lag_4kHz + 1; d <= max_lag_4kHz; d++) {
+            basis_ptr--;
+
+            /* Check that we are within range of the array */
+            SKP_assert( basis_ptr >= signal_4kHz );
+            SKP_assert( basis_ptr + sf_length_8kHz <= signal_4kHz + frame_length_4kHz );
+
+            cross_corr = SKP_Silk_inner_product_FLP(target_ptr, basis_ptr, sf_length_8kHz);
+
+            /* Add contribution of new sample and remove contribution from oldest sample */
+            normalizer +=
+                basis_ptr[ 0 ] * basis_ptr[ 0 ] - 
+                basis_ptr[ sf_length_8kHz ] * basis_ptr[ sf_length_8kHz ];
+            C[ 0 ][ d ] += (SKP_float)(cross_corr / sqrt( normalizer ));
+        }
+        /* Update target pointer */
+        target_ptr += sf_length_8kHz;
+    }
+
+    /* apply short-lag bias */
+    for( i = max_lag_4kHz; i >= min_lag_4kHz; i-- ) {
+        C[ 0 ][ i ] -= C[ 0 ][ i ] * i / 4096.0f;
+    }
+
+    /* Sort */
+    length_d_srch = 5 + complexity;
+    SKP_assert( length_d_srch <= PE_D_SRCH_LENGTH );
+    SKP_Silk_insertion_sort_decreasing_FLP( &C[ 0 ][ min_lag_4kHz ], d_srch, max_lag_4kHz - min_lag_4kHz + 1, length_d_srch );
+
+    /* Escape if correlation is very low already here */
+    Cmax = C[ 0 ][ min_lag_4kHz ];
+    target_ptr = &signal_4kHz[ SKP_SMULBB( sf_length_4kHz, nb_subfr ) ];
+    energy = 1000.0f;
+    for( i = 0; i < SKP_LSHIFT( sf_length_4kHz, 2 ); i++ ) {
+        energy += target_ptr[i] * target_ptr[i];
+    }
+    threshold = Cmax * Cmax; 
+    if( energy / 16.0f > threshold ) {
+        SKP_memset( pitch_out, 0, nb_subfr * sizeof(SKP_int) );
+        *LTPCorr      = 0.0f;
+        *lagIndex     = 0;
+        *contourIndex = 0;
+        return 1;
+    }
+
+    threshold = search_thres1 * Cmax;
+    for( i = 0; i < length_d_srch; i++ ) {
+        /* Convert to 8 kHz indices for the sorted correlation that exceeds the threshold */
+        if( C[ 0 ][ min_lag_4kHz + i ] > threshold ) {
+            d_srch[ i ] = SKP_LSHIFT( d_srch[ i ] + min_lag_4kHz, 1 );
+        } else {
+            length_d_srch = i;
+            break;
+        }
+    }
+    SKP_assert( length_d_srch > 0 );
+
+    for( i = min_lag_8kHz - 5; i < max_lag_8kHz + 5; i++ ) {
+        d_comp[ i ] = 0;
+    }
+    for( i = 0; i < length_d_srch; i++ ) {
+        d_comp[ d_srch[ i ] ] = 1;
+    }
+
+    /* Convolution */
+    for( i = max_lag_8kHz + 3; i >= min_lag_8kHz; i-- ) {
+        d_comp[ i ] += d_comp[ i - 1 ] + d_comp[ i - 2 ];
+    }
+
+    length_d_srch = 0;
+    for( i = min_lag_8kHz; i < max_lag_8kHz + 1; i++ ) {    
+        if( d_comp[ i + 1 ] > 0 ) {
+            d_srch[ length_d_srch ] = i;
+            length_d_srch++;
+        }
+    }
+
+    /* Convolution */
+    for( i = max_lag_8kHz + 3; i >= min_lag_8kHz; i-- ) {
+        d_comp[ i ] += d_comp[ i - 1 ] + d_comp[ i - 2 ] + d_comp[ i - 3 ];
+    }
+
+    length_d_comp = 0;
+    for( i = min_lag_8kHz; i < max_lag_8kHz + 4; i++ ) {    
+        if( d_comp[ i ] > 0 ) {
+            d_comp[ length_d_comp ] = i - 2;
+            length_d_comp++;
+        }
+    }
+
+    /**********************************************************************************
+    ** SECOND STAGE, operating at 8 kHz, on lag sections with high correlation
+    *************************************************************************************/
+    /********************************************************************************* 
+    * Find energy of each subframe projected onto its history, for a range of delays
+    *********************************************************************************/
+    SKP_memset( C, 0, PE_MAX_NB_SUBFR*((PE_MAX_LAG >> 1) + 5) * sizeof(SKP_float)); // Is this needed?
+    
+    target_ptr = &signal_8kHz[ PE_LTP_MEM_LENGTH_MS * 8 ];
+    for( k = 0; k < nb_subfr; k++ ) {
+
+        /* Check that we are within range of the array */
+        SKP_assert( target_ptr >= signal_8kHz );
+        SKP_assert( target_ptr + sf_length_8kHz <= signal_8kHz + frame_length_8kHz );
+
+        energy_tmp = SKP_Silk_energy_FLP( target_ptr, sf_length_8kHz );
+        for( j = 0; j < length_d_comp; j++ ) {
+            d = d_comp[ j ];
+            basis_ptr = target_ptr - d;
+
+            /* Check that we are within range of the array */
+            SKP_assert( basis_ptr >= signal_8kHz );
+            SKP_assert( basis_ptr + sf_length_8kHz <= signal_8kHz + frame_length_8kHz );
+        
+            cross_corr = SKP_Silk_inner_product_FLP( basis_ptr, target_ptr, sf_length_8kHz );
+            energy     = SKP_Silk_energy_FLP( basis_ptr, sf_length_8kHz );
+            if (cross_corr > 0.0f) {
+                C[ k ][ d ] = (SKP_float)(cross_corr * cross_corr / (energy * energy_tmp + eps));
+            } else {
+                C[ k ][ d ] = 0.0f;
+            }
+        }
+        target_ptr += sf_length_8kHz;
+    }
+
+    /* search over lag range and lags codebook */
+    /* scale factor for lag codebook, as a function of center lag */
+
+    CCmax   = 0.0f; /* This value doesn't matter */
+    CCmax_b = -1000.0f;
+
+    CBimax = 0; /* To avoid returning undefined lag values */
+    lag = -1;   /* To check if lag with strong enough correlation has been found */
+
+    if( prevLag > 0 ) {
+        if( Fs_kHz == 12 ) {
+            prevLag = SKP_LSHIFT( prevLag, 1 ) / 3;
+        } else if( Fs_kHz == 16 ) {
+            prevLag = SKP_RSHIFT( prevLag, 1 );
+        } else if( Fs_kHz == 24 ) {
+            prevLag = prevLag / 3;
+        }
+        prevLag_log2 = SKP_P_log2((SKP_float)prevLag);
+    } else {
+        prevLag_log2 = 0;
+    }
+
+    /* Setup stage 2 codebook based on number of subframes */
+    if( nb_subfr == PE_MAX_NB_SUBFR ) {
+        cbk_size   = PE_NB_CBKS_STAGE2_EXT;
+        Lag_CB_ptr = &SKP_Silk_CB_lags_stage2[ 0 ][ 0 ];
+        if( Fs_kHz == 8 && complexity > SigProc_PE_MIN_COMPLEX ) {
+            /* If input is 8 khz use a larger codebook here because it is last stage */
+            nb_cbk_search = PE_NB_CBKS_STAGE2_EXT;
+        } else {
+            nb_cbk_search = PE_NB_CBKS_STAGE2;
+        }
+    }else{
+        cbk_size       = PE_NB_CBKS_STAGE2_10MS;
+        Lag_CB_ptr     = &SKP_Silk_CB_lags_stage2_10_ms[ 0 ][ 0 ];
+        nb_cbk_search  = PE_NB_CBKS_STAGE2_10MS;
+    }
+
+    for( k = 0; k < length_d_srch; k++ ) {
+        d = d_srch[ k ];
+        for( j = 0; j < nb_cbk_search; j++ ) {
+            CC[j] = 0.0f;
+            for( i = 0; i < nb_subfr; i++ ) {
+                /* Try all codebooks */
+                CC[ j ] += C[ i ][ d + matrix_ptr( Lag_CB_ptr, i, j, cbk_size )];
+            }
+        }
+        /* Find best codebook */
+        CCmax_new  = -1000.0f;
+        CBimax_new = 0;
+        for( i = 0; i < nb_cbk_search; i++ ) {
+            if( CC[ i ] > CCmax_new ) {
+                CCmax_new = CC[ i ];
+                CBimax_new = i;
+            }
+        }
+        CCmax_new = SKP_max_float(CCmax_new, 0.0f); /* To avoid taking square root of negative number later */
+        CCmax_new_b = CCmax_new;
+
+        /* Bias towards shorter lags */
+        lag_log2 = SKP_P_log2((SKP_float)d);
+        CCmax_new_b -= PE_FLP_SHORTLAG_BIAS * nb_subfr * lag_log2;
+
+        /* Bias towards previous lag */
+        if ( prevLag > 0 ) {
+            delta_lag_log2_sqr = lag_log2 - prevLag_log2;
+            delta_lag_log2_sqr *= delta_lag_log2_sqr;
+            CCmax_new_b -= PE_FLP_PREVLAG_BIAS * nb_subfr * (*LTPCorr) * delta_lag_log2_sqr / (delta_lag_log2_sqr + 0.5f);
+        }
+
+        if ( CCmax_new_b > CCmax_b && CCmax_new > nb_subfr * search_thres2 * search_thres2 ) {
+            CCmax_b = CCmax_new_b;
+            CCmax   = CCmax_new;
+            lag     = d;
+            CBimax  = CBimax_new;
+        }
+    }
+
+    if( lag == -1 ) {
+        /* No suitable candidate found */
+        SKP_memset( pitch_out, 0, PE_MAX_NB_SUBFR * sizeof(SKP_int) );
+        *LTPCorr      = 0.0f;
+        *lagIndex     = 0;
+        *contourIndex = 0;
+        return 1;
+    }
+
+    if( Fs_kHz > 8 ) {
+        /* Search in original signal */
+
+        /* Compensate for decimation */
+        SKP_assert( lag == SKP_SAT16( lag ) );
+        if( Fs_kHz == 12 ) {
+            lag = SKP_RSHIFT_ROUND( SKP_SMULBB( lag, 3 ), 1 );
+        } else if( Fs_kHz == 16 ) {
+            lag = SKP_LSHIFT( lag, 1 );
+        } else {
+            lag = SKP_SMULBB( lag, 3 );
+        }
+
+        lag = SKP_LIMIT_int( lag, min_lag, max_lag );
+        start_lag = SKP_max_int( lag - 2, min_lag );
+        end_lag   = SKP_min_int( lag + 2, max_lag );
+        lag_new   = lag;                                    /* to avoid undefined lag */
+        CBimax    = 0;                                      /* to avoid undefined lag */
+        SKP_assert( CCmax >= 0.0f ); 
+        *LTPCorr = (SKP_float)sqrt( CCmax / nb_subfr );     /* Output normalized correlation */
+
+        CCmax = -1000.0f;
+
+        /* Calculate the correlations and energies needed in stage 3 */
+        SKP_P_Ana_calc_corr_st3( cross_corr_st3, signal, start_lag, sf_length, nb_subfr, complexity );
+        SKP_P_Ana_calc_energy_st3( energies_st3, signal, start_lag, sf_length, nb_subfr, complexity );
+
+        lag_counter = 0;
+        SKP_assert( lag == SKP_SAT16( lag ) );
+        contour_bias = PE_FLP_FLATCONTOUR_BIAS / lag;
+
+        /* Setup cbk parameters acording to complexity setting and frame length */
+        if( nb_subfr == PE_MAX_NB_SUBFR ) {
+            nb_cbk_search   = (SKP_int)SKP_Silk_nb_cbk_searchs_stage3[   complexity ];
+            cbk_size        = PE_NB_CBKS_STAGE3_MAX;
+            cbk_offset      = (SKP_int)SKP_Silk_cbk_offsets_stage3[ complexity ];
+            Lag_CB_ptr      = &SKP_Silk_CB_lags_stage3[ 0 ][ 0 ];
+        } else {
+            nb_cbk_search   = PE_NB_CBKS_STAGE3_10MS;
+            cbk_size    = PE_NB_CBKS_STAGE3_10MS;
+            cbk_offset = 0;
+            Lag_CB_ptr = &SKP_Silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
+        }
+
+        for( d = start_lag; d <= end_lag; d++ ) {
+            for( j = cbk_offset; j < ( cbk_offset + nb_cbk_search ); j++ ) {
+                cross_corr = 0.0;
+                energy = eps;
+                for( k = 0; k < nb_subfr; k++ ) {
+                    energy     +=   energies_st3[ k ][ j ][ lag_counter ];
+                    cross_corr += cross_corr_st3[ k ][ j ][ lag_counter ];
+                }
+                if( cross_corr > 0.0 ) {
+                    CCmax_new = (SKP_float)(cross_corr * cross_corr / energy);
+                    /* Reduce depending on flatness of contour */
+                    diff = j - SKP_RSHIFT( cbk_size, 1 );
+                    CCmax_new *= ( 1.0f - contour_bias * diff * diff );
+                } else {
+                    CCmax_new = 0.0f;               
+                }
+
+                if( CCmax_new > CCmax ) {
+                    CCmax   = CCmax_new;
+                    lag_new = d;
+                    CBimax  = j;
+                }
+            }
+            lag_counter++;
+        }
+
+        for( k = 0; k < nb_subfr; k++ ) {
+            pitch_out[ k ] = lag_new + matrix_ptr( Lag_CB_ptr, k, CBimax, cbk_size );
+        }
+        *lagIndex = lag_new - min_lag;
+        *contourIndex = CBimax;
+    } else {
+        /* Save Lags and correlation */
+        SKP_assert( CCmax >= 0.0f );
+        *LTPCorr = (SKP_float)sqrt( CCmax / nb_subfr ); /* Output normalized correlation */
+        for( k = 0; k < nb_subfr; k++ ) {
+            pitch_out[ k ] = lag + SKP_Silk_CB_lags_stage2[ k ][ CBimax ];
+        }
+        *lagIndex = lag - min_lag;
+        *contourIndex = CBimax;
+    }
+    SKP_assert( *lagIndex >= 0 );
+    /* return as voiced */
+    return 0;
+}
+
+static void SKP_P_Ana_calc_corr_st3(
+    SKP_float cross_corr_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ], /* O 3 DIM correlation array */
+    const SKP_float signal[],           /* I vector to correlate                                            */
+    SKP_int         start_lag,          /* I start lag                                                      */
+    SKP_int         sf_length,          /* I sub frame length                                               */
+    SKP_int         nb_subfr,           /* I number of subframes                                            */
+    SKP_int         complexity          /* I Complexity setting                                             */
+)
+    /***********************************************************************
+     Calculates the correlations used in stage 3 search. In order to cover 
+     the whole lag codebook for all the searched offset lags (lag +- 2), 
+     the following correlations are needed in each sub frame:
+
+     sf1: lag range [-8,...,7] total 16 correlations
+     sf2: lag range [-4,...,4] total 9 correlations
+     sf3: lag range [-3,....4] total 8 correltions
+     sf4: lag range [-6,....8] total 15 correlations
+
+     In total 48 correlations. The direct implementation computed in worst case 
+     4*12*5 = 240 correlations, but more likely around 120. 
+     **********************************************************************/
+{
+    const SKP_float *target_ptr, *basis_ptr;
+    SKP_int   i, j, k, lag_counter, lag_low, lag_high;
+    SKP_int   cbk_offset, nb_cbk_search, delta, idx, cbk_size;
+    SKP_float scratch_mem[ SCRATCH_SIZE ];
+    const SKP_int8 *Lag_range_ptr, *Lag_CB_ptr;
+
+    SKP_assert( complexity >= SigProc_PE_MIN_COMPLEX );
+    SKP_assert( complexity <= SigProc_PE_MAX_COMPLEX );
+
+    if( nb_subfr == PE_MAX_NB_SUBFR ){
+        Lag_range_ptr = &SKP_Silk_Lag_range_stage3[ complexity ][ 0 ][ 0 ];
+        Lag_CB_ptr    = &SKP_Silk_CB_lags_stage3[ 0 ][ 0 ];
+        cbk_offset    = SKP_Silk_cbk_offsets_stage3[ complexity ];
+        nb_cbk_search = SKP_Silk_nb_cbk_searchs_stage3[   complexity ];
+        cbk_size      = PE_NB_CBKS_STAGE3_MAX;
+    } else {
+        SKP_assert( nb_subfr == PE_MAX_NB_SUBFR >> 1);
+        Lag_range_ptr = &SKP_Silk_Lag_range_stage3_10_ms[ 0 ][ 0 ];
+        Lag_CB_ptr    = &SKP_Silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
+        cbk_offset    = 0;
+        nb_cbk_search = PE_NB_CBKS_STAGE3_10MS;
+        cbk_size      = PE_NB_CBKS_STAGE3_10MS;
+    }
+
+    target_ptr = &signal[ SKP_LSHIFT( sf_length, 2 ) ]; /* Pointer to middle of frame */
+    for( k = 0; k < nb_subfr; k++ ) {
+        lag_counter = 0;
+
+        /* Calculate the correlations for each subframe */
+        lag_low  = matrix_ptr( Lag_range_ptr, k, 0, 2 );
+        lag_high = matrix_ptr( Lag_range_ptr, k, 1, 2 );
+        for( j = lag_low; j <= lag_high; j++ ) {
+            basis_ptr = target_ptr - ( start_lag + j );
+            SKP_assert( lag_counter < SCRATCH_SIZE );
+            scratch_mem[ lag_counter ] = (SKP_float)SKP_Silk_inner_product_FLP( target_ptr, basis_ptr, sf_length );
+            lag_counter++;
+        }
+
+        delta = matrix_ptr( Lag_range_ptr, k, 0, 2 );
+        for( i = cbk_offset; i < ( cbk_offset + nb_cbk_search ); i++ ) { 
+            /* Fill out the 3 dim array that stores the correlations for */
+            /* each code_book vector for each start lag */
+            idx = matrix_ptr( Lag_CB_ptr, k, i, cbk_size ) - delta;
+            for( j = 0; j < PE_NB_STAGE3_LAGS; j++ ) {
+                SKP_assert( idx + j < SCRATCH_SIZE );
+                SKP_assert( idx + j < lag_counter );
+                cross_corr_st3[ k ][ i ][ j ] = scratch_mem[ idx + j ];
+            }
+        }
+        target_ptr += sf_length;
+    }
+}
+
+static void SKP_P_Ana_calc_energy_st3(
+    SKP_float energies_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ], /* O 3 DIM correlation array */
+    const SKP_float signal[],           /* I vector to correlate                                            */
+    SKP_int         start_lag,          /* I start lag                                                      */
+    SKP_int         sf_length,          /* I sub frame length                                               */
+    SKP_int         nb_subfr,           /* I number of subframes                                            */
+    SKP_int         complexity          /* I Complexity setting                                             */
+)
+/****************************************************************
+Calculate the energies for first two subframes. The energies are
+calculated recursively. 
+****************************************************************/
+{
+    const SKP_float *target_ptr, *basis_ptr;
+    double    energy;
+    SKP_int   k, i, j, lag_counter;
+    SKP_int   cbk_offset, nb_cbk_search, delta, idx, cbk_size, lag_diff;
+    SKP_float scratch_mem[ SCRATCH_SIZE ];
+    const SKP_int8 *Lag_range_ptr, *Lag_CB_ptr;
+
+    SKP_assert( complexity >= SigProc_PE_MIN_COMPLEX );
+    SKP_assert( complexity <= SigProc_PE_MAX_COMPLEX );
+
+    if( nb_subfr == PE_MAX_NB_SUBFR ){
+        Lag_range_ptr = &SKP_Silk_Lag_range_stage3[ complexity ][ 0 ][ 0 ];
+        Lag_CB_ptr    = &SKP_Silk_CB_lags_stage3[ 0 ][ 0 ];
+        cbk_offset    = SKP_Silk_cbk_offsets_stage3[ complexity ];
+        nb_cbk_search = SKP_Silk_nb_cbk_searchs_stage3[   complexity ];
+        cbk_size      = PE_NB_CBKS_STAGE3_MAX;
+    } else {
+        SKP_assert( nb_subfr == PE_MAX_NB_SUBFR >> 1);
+        Lag_range_ptr = &SKP_Silk_Lag_range_stage3_10_ms[ 0 ][ 0 ];
+        Lag_CB_ptr    = &SKP_Silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
+        cbk_offset    = 0;
+        nb_cbk_search = PE_NB_CBKS_STAGE3_10MS;
+        cbk_size      = PE_NB_CBKS_STAGE3_10MS;
+    }
+
+    target_ptr = &signal[ SKP_LSHIFT( sf_length, 2 ) ];
+    for( k = 0; k < nb_subfr; k++ ) {
+        lag_counter = 0;
+
+        /* Calculate the energy for first lag */
+        basis_ptr = target_ptr - ( start_lag + matrix_ptr( Lag_range_ptr, k, 0, 2 ) );
+        energy = SKP_Silk_energy_FLP( basis_ptr, sf_length ) + 1e-3;
+        SKP_assert( energy >= 0.0 );
+        scratch_mem[lag_counter] = (SKP_float)energy;
+        lag_counter++;
+
+        lag_diff = ( matrix_ptr( Lag_range_ptr, k, 1, 2 ) -  matrix_ptr( Lag_range_ptr, k, 0, 2 ) + 1 );
+        for( i = 1; i < lag_diff; i++ ) {
+            /* remove part outside new window */
+            energy -= basis_ptr[sf_length - i] * basis_ptr[sf_length - i];
+            SKP_assert( energy >= 0.0 );
+
+            /* add part that comes into window */
+            energy += basis_ptr[ -i ] * basis_ptr[ -i ];
+            SKP_assert( energy >= 0.0 );
+            SKP_assert( lag_counter < SCRATCH_SIZE );
+            scratch_mem[lag_counter] = (SKP_float)energy;
+            lag_counter++;
+        }
+
+        delta = matrix_ptr( Lag_range_ptr, k, 0, 2 );
+        for( i = cbk_offset; i < ( cbk_offset + nb_cbk_search ); i++ ) { 
+            /* Fill out the 3 dim array that stores the correlations for    */
+            /* each code_book vector for each start lag                     */
+            idx = matrix_ptr( Lag_CB_ptr, k, i, cbk_size ) - delta;
+            for( j = 0; j < PE_NB_STAGE3_LAGS; j++ ) {
+                SKP_assert( idx + j < SCRATCH_SIZE );
+                SKP_assert( idx + j < lag_counter );
+                energies_st3[ k ][ i ][ j ] = scratch_mem[ idx + j ];
+                SKP_assert( energies_st3[ k ][ i ][ j ] >= 0.0f );
+            }
+        }
+        target_ptr += sf_length;
+    }
+}
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_pitch_est_defines_FLP.h
@@ -1,0 +1,42 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SIGPROCFLP_PE_DEFINES_H
+#define SIGPROCFLP_PE_DEFINES_H
+
+#include "SKP_Silk_common_pitch_est_defines.h"
+
+/************************************************************/
+/* Definitions For FLP pitch estimator                      */
+/************************************************************/
+
+#define PE_FLP_SHORTLAG_BIAS             0.2f    /* for logarithmic weighting    */
+#define PE_FLP_PREVLAG_BIAS              0.2f    /* for logarithmic weighting    */
+#define PE_FLP_FLATCONTOUR_BIAS          0.05f
+
+#endif
+
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_scale_copy_vector_FLP.c
@@ -1,0 +1,53 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_SigProc_FLP.h"
+
+/* copy and multiply a vector by a constant */
+void SKP_Silk_scale_copy_vector_FLP( 
+    SKP_float           *data_out, 
+    const SKP_float     *data_in, 
+    SKP_float           gain, 
+    SKP_int             dataSize
+)
+{
+    SKP_int  i, dataSize4;
+
+    /* 4x unrolled loop */
+    dataSize4 = dataSize & 0xFFFC;
+    for( i = 0; i < dataSize4; i += 4 ) {
+        data_out[ i + 0 ] = gain * data_in[ i + 0 ];
+        data_out[ i + 1 ] = gain * data_in[ i + 1 ];
+        data_out[ i + 2 ] = gain * data_in[ i + 2 ];
+        data_out[ i + 3 ] = gain * data_in[ i + 3 ];
+    }
+
+    /* any remaining elements */
+    for( ; i < dataSize; i++ ) {
+        data_out[ i ] = gain * data_in[ i ];
+    }
+}
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_scale_vector_FLP.c
@@ -1,0 +1,52 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_SigProc_FLP.h"
+
+/* multiply a vector by a constant */
+void SKP_Silk_scale_vector_FLP( 
+    SKP_float           *data1, 
+    SKP_float           gain, 
+    SKP_int             dataSize
+)
+{
+    SKP_int  i, dataSize4;
+
+    /* 4x unrolled loop */
+    dataSize4 = dataSize & 0xFFFC;
+    for( i = 0; i < dataSize4; i += 4 ) {
+        data1[ i + 0 ] *= gain;
+        data1[ i + 1 ] *= gain;
+        data1[ i + 2 ] *= gain;
+        data1[ i + 3 ] *= gain;
+    }
+
+    /* any remaining elements */
+    for( ; i < dataSize; i++ ) {
+        data1[ i ] *= gain;
+    }
+}
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_schur_FLP.c
@@ -1,0 +1,71 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_Silk_schur.c                                                   *
+ *                                                                      *
+ * Calculates the reflection coefficients from the correlation sequence *
+ *                                                                      *
+ * Copyright 2008 (c), Skype Limited                                    *
+ * Date: 080103                                                         *
+ */
+
+#include "SKP_Silk_SigProc_FLP.h"
+
+void SKP_Silk_schur_FLP(  
+    SKP_float       refl_coef[],        /* O    reflection coefficients (length order)      */
+    const SKP_float auto_corr[],        /* I    autotcorreation sequence (length order+1)   */
+    SKP_int         order               /* I    order                                       */
+)
+{
+    SKP_int   k, n;
+    SKP_float C[SKP_Silk_MAX_ORDER_LPC + 1][2];
+    SKP_float Ctmp1, Ctmp2, rc_tmp;
+    
+    /* copy correlations */
+    for( k = 0; k < order+1; k++ ){
+        C[k][0] = C[k][1] = auto_corr[k];
+    }
+
+    for( k = 0; k < order; k++ )
+    {
+        /* get reflection coefficient */
+        rc_tmp = -C[k + 1][0] / SKP_max_float(C[0][1], 1e-9f);
+
+        /* save the output */
+        refl_coef[k] = rc_tmp;
+
+        /* update correlations */
+        for( n = 0; n < order - k; n++ ){
+            Ctmp1 = C[n + k + 1][0];
+            Ctmp2 = C[n][1];
+            C[n + k + 1][0] = Ctmp1 + Ctmp2 * rc_tmp;
+            C[n][1]         = Ctmp2 + Ctmp1 * rc_tmp;
+        }
+    }
+}
+
--- /dev/null
+++ b/src_SigProc_FLP/SKP_Silk_sort_FLP.c
@@ -1,0 +1,150 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/* Insertion sort (fast for already almost sorted arrays):  */
+/* Best case:  O(n)   for an already sorted array           */
+/* Worst case: O(n^2) for an inversely sorted array         */
+/*                                                          */
+/* To be implemented:                                       */
+/* Shell short: http://en.wikipedia.org/wiki/Shell_sort     */
+
+#include "SKP_Silk_typedef.h"
+#include "SKP_Silk_SigProc_FLP.h"
+
+void SKP_Silk_insertion_sort_increasing_FLP(
+    SKP_float            *a,          /* I/O:  Unsorted / Sorted vector                */
+    SKP_int              *index,      /* O:    Index vector for the sorted elements    */
+    const SKP_int        L,           /* I:    Vector length                           */
+    const SKP_int        K            /* I:    Number of correctly sorted positions    */
+)
+{
+    SKP_float value;
+    SKP_int   i, j;
+
+    /* Safety checks */
+    SKP_assert( K >  0 );
+    SKP_assert( L >  0 );
+    SKP_assert( L >= K );
+
+    /* Write start indices in index vector */
+    for( i = 0; i < K; i++ ) {
+        index[ i ] = i;
+    }
+
+    /* Sort vector elements by value, increasing order */
+    for( i = 1; i < K; i++ ) {
+        value = a[ i ];
+        for( j = i - 1; ( j >= 0 ) && ( value < a[ j ] ); j-- ) {
+            a[ j + 1 ]     = a[ j ];     /* Shift value */
+            index[ j + 1 ] = index[ j ]; /* Shift index */
+        }
+        a[ j + 1 ]     = value; /* Write value */
+        index[ j + 1 ] = i;     /* Write index */
+    }
+
+    /* If less than L values are asked check the remaining values,      */
+    /* but only spend CPU to ensure that the K first values are correct */
+    for( i = K; i < L; i++ ) {
+        value = a[ i ];
+        if( value < a[ K - 1 ] ) {
+            for( j = K - 2; ( j >= 0 ) && ( value < a[ j ] ); j-- ) {
+                a[ j + 1 ]     = a[ j ];     /* Shift value */
+                index[ j + 1 ] = index[ j ]; /* Shift index */
+            }
+            a[ j + 1 ]     = value; /* Write value */
+            index[ j + 1 ] = i;        /* Write index */
+        }
+    }
+}
+
+void SKP_Silk_insertion_sort_decreasing_FLP(
+    SKP_float            *a,          /* I/O:  Unsorted / Sorted vector                */
+    SKP_int              *index,      /* O:    Index vector for the sorted elements    */
+    const SKP_int        L,           /* I:    Vector length                           */
+    const SKP_int        K            /* I:    Number of correctly sorted positions    */
+)
+{
+    SKP_float value;
+    SKP_int   i, j;
+
+    /* Safety checks */
+    SKP_assert( K >  0 );
+    SKP_assert( L >  0 );
+    SKP_assert( L >= K );
+
+    /* Write start indices in index vector */
+    for( i = 0; i < K; i++ ) {
+        index[ i ] = i;
+    }
+
+    /* Sort vector elements by value, decreasing order */
+    for( i = 1; i < K; i++ ) {
+        value = a[ i ];
+        for( j = i - 1; ( j >= 0 ) && ( value > a[ j ] ); j-- ) {
+            a[ j + 1 ]     = a[ j ];     /* Shift value */
+            index[ j + 1 ] = index[ j ]; /* Shift index */
+        }
+        a[ j + 1 ]     = value; /* Write value */
+        index[ j + 1 ] = i;     /* Write index */
+    }
+
+    /* If less than L values are asked check the remaining values,      */
+    /* but only spend CPU to ensure that the K first values are correct */
+    for( i = K; i < L; i++ ) {
+        value = a[ i ];
+        if( value > a[ K - 1 ] ) {
+            for( j = K - 2; ( j >= 0 ) && ( value > a[ j ] ); j-- ) {
+                a[ j + 1 ]     = a[ j ];     /* Shift value */
+                index[ j + 1 ] = index[ j ]; /* Shift index */
+            }
+            a[ j + 1 ]     = value; /* Write value */
+            index[ j + 1 ] = i;     /* Write index */
+        }
+    }
+}
+
+void SKP_Silk_insertion_sort_increasing_all_values_FLP(
+    SKP_float            *a,          /* I/O:  Unsorted / Sorted vector                */
+    const SKP_int        L            /* I:    Vector length                           */
+)
+{
+    SKP_float value;
+    SKP_int   i, j;
+
+    /* Safety checks */
+    SKP_assert( L >  0 );
+
+    /* Sort vector elements by value, increasing order */
+    for( i = 1; i < L; i++ ) {
+        value = a[ i ];
+        for( j = i - 1; ( j >= 0 ) && ( value < a[ j ] ); j-- ) {    
+            a[ j + 1 ] = a[ j ]; /* Shift value */
+        }
+        a[ j + 1 ] = value; /* Write value */
+    }
+}
+
--- /dev/null
+++ b/src_SigProc_FLP/SigProc_FLP.vcproj
@@ -1,0 +1,248 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="SigProc_FLP"
+	ProjectGUID="{793D0EC2-8554-4674-9A97-F25DE5DBE926}"
+	RootNamespace="Silk"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				FavorSizeOrSpeed="0"
+				AdditionalIncludeDirectories="../interface;../src_SigProc_FIX"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB;"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				FloatingPointModel="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="SKP_Silk_SigProcFIX_Win32_debug.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="0"
+				FavorSizeOrSpeed="0"
+				AdditionalIncludeDirectories="../interface;../src_SigProc_FIX"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+				GeneratePreprocessedFile="0"
+				RuntimeLibrary="0"
+				FloatingPointModel="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="SKP_Silk_SigProcFIX_Win32_mt.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine=""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\SKP_Silk_allpass_int_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_autocorrelation_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_burg_modified_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_bwexpander_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_decimate2_coarse_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_decimate2_coarsest_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_energy_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_inner_product_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_k2a_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_levinsondurbin_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_LPC_inv_pred_gain_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NLSF_VQ_weights_laroia_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_pitch_analysis_core_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_scale_copy_vector_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_scale_vector_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_schur_FLP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_sort_FLP.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath=".\SKP_Silk_pitch_est_defines_FLP.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_SigProc_FLP.h"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
--- /dev/null
+++ b/src_common/SKP_Silk_CNG.c
@@ -1,0 +1,149 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+/* Generates excitation for CNG LPC synthesis */
+SKP_INLINE void SKP_Silk_CNG_exc(
+    SKP_int16                       residual[],         /* O    CNG residual signal Q0                      */
+    SKP_int32                       exc_buf_Q10[],      /* I    Random samples buffer Q10                   */
+    SKP_int32                       Gain_Q16,           /* I    Gain to apply                               */
+    SKP_int                         length,             /* I    Length                                      */
+    SKP_int32                       *rand_seed          /* I/O  Seed to random index generator              */
+)
+{
+    SKP_int32 seed;
+    SKP_int   i, idx, exc_mask;
+
+    exc_mask = CNG_BUF_MASK_MAX;
+    while( exc_mask > length ) {
+        exc_mask = SKP_RSHIFT( exc_mask, 1 );
+    }
+
+    seed = *rand_seed;
+    for( i = 0; i < length; i++ ) {
+        seed = SKP_RAND( seed );
+        idx = ( SKP_int )( SKP_RSHIFT( seed, 24 ) & exc_mask );
+        SKP_assert( idx >= 0 );
+        SKP_assert( idx <= CNG_BUF_MASK_MAX );
+        residual[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( exc_buf_Q10[ idx ], Gain_Q16 ), 10 ) );
+    }
+    *rand_seed = seed;
+}
+
+void SKP_Silk_CNG_Reset(
+    SKP_Silk_decoder_state      *psDec              /* I/O  Decoder state                               */
+)
+{
+    SKP_int i, NLSF_step_Q15, NLSF_acc_Q15;
+
+    NLSF_step_Q15 = SKP_DIV32_16( SKP_int16_MAX, psDec->LPC_order + 1 );
+    NLSF_acc_Q15 = 0;
+    for( i = 0; i < psDec->LPC_order; i++ ) {
+        NLSF_acc_Q15 += NLSF_step_Q15;
+        psDec->sCNG.CNG_smth_NLSF_Q15[ i ] = NLSF_acc_Q15;
+    }
+    psDec->sCNG.CNG_smth_Gain_Q16 = 0;
+    psDec->sCNG.rand_seed = 3176576;
+}
+
+/* Updates CNG estimate, and applies the CNG when packet was lost   */
+void SKP_Silk_CNG(
+    SKP_Silk_decoder_state      *psDec,             /* I/O  Decoder state                               */
+    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O  Decoder control                             */
+    SKP_int16                   signal[],           /* I/O  Signal                                      */
+    SKP_int                     length              /* I    Length of residual                          */
+)
+{
+    SKP_int   i, subfr;
+    SKP_int32 tmp_32, Gain_Q26, max_Gain_Q16;
+    SKP_int16 LPC_buf[ MAX_LPC_ORDER ];
+    SKP_int16 CNG_sig[ MAX_FRAME_LENGTH ];
+    SKP_Silk_CNG_struct *psCNG;
+    psCNG = &psDec->sCNG;
+
+    if( psDec->fs_kHz != psCNG->fs_kHz ) {
+        /* Reset state */
+        SKP_Silk_CNG_Reset( psDec );
+
+        psCNG->fs_kHz = psDec->fs_kHz;
+    }
+    if( psDec->lossCnt == 0 && psDec->vadFlag == NO_VOICE_ACTIVITY ) {
+        /* Update CNG parameters */
+
+        /* Smoothing of LSF's  */
+        for( i = 0; i < psDec->LPC_order; i++ ) {
+            psCNG->CNG_smth_NLSF_Q15[ i ] += SKP_SMULWB( psDec->prevNLSF_Q15[ i ] - psCNG->CNG_smth_NLSF_Q15[ i ], CNG_NLSF_SMTH_Q16 );
+        }
+        /* Find the subframe with the highest gain */
+        max_Gain_Q16 = 0;
+        subfr        = 0;
+        for( i = 0; i < psDec->nb_subfr; i++ ) {
+            if( psDecCtrl->Gains_Q16[ i ] > max_Gain_Q16 ) {
+                max_Gain_Q16 = psDecCtrl->Gains_Q16[ i ];
+                subfr        = i;
+            }
+        }
+        /* Update CNG excitation buffer with excitation from this subframe */
+        SKP_memmove( &psCNG->CNG_exc_buf_Q10[ psDec->subfr_length ], psCNG->CNG_exc_buf_Q10, ( psDec->nb_subfr - 1 ) * psDec->subfr_length * sizeof( SKP_int32 ) );
+        SKP_memcpy(   psCNG->CNG_exc_buf_Q10, &psDec->exc_Q10[ subfr * psDec->subfr_length ], psDec->subfr_length * sizeof( SKP_int32 ) );
+
+        /* Smooth gains */
+        for( i = 0; i < psDec->nb_subfr; i++ ) {
+            psCNG->CNG_smth_Gain_Q16 += SKP_SMULWB( psDecCtrl->Gains_Q16[ i ] - psCNG->CNG_smth_Gain_Q16, CNG_GAIN_SMTH_Q16 );
+        }
+    }
+
+    /* Add CNG when packet is lost and / or when low speech activity */
+    if( psDec->lossCnt ) {//|| psDec->vadFlag == NO_VOICE_ACTIVITY ) {
+
+        /* Generate CNG excitation */
+        SKP_Silk_CNG_exc( CNG_sig, psCNG->CNG_exc_buf_Q10, 
+                psCNG->CNG_smth_Gain_Q16, length, &psCNG->rand_seed );
+
+        /* Convert CNG NLSF to filter representation */
+        SKP_Silk_NLSF2A_stable( LPC_buf, psCNG->CNG_smth_NLSF_Q15, psDec->LPC_order );
+
+        Gain_Q26 = ( SKP_int32 )1 << 26; /* 1.0 */
+        
+        /* Generate CNG signal, by synthesis filtering */
+        if( psDec->LPC_order == 16 ) {
+            SKP_Silk_LPC_synthesis_order16( CNG_sig, LPC_buf, 
+                Gain_Q26, psCNG->CNG_synth_state, CNG_sig, length );
+        } else {
+            SKP_Silk_LPC_synthesis_filter( CNG_sig, LPC_buf, 
+                Gain_Q26, psCNG->CNG_synth_state, CNG_sig, length, psDec->LPC_order );
+        }
+        /* Mix with signal */
+        for( i = 0; i < length; i++ ) {
+            tmp_32 = signal[ i ] + CNG_sig[ i ];
+            signal[ i ] = SKP_SAT16( tmp_32 );
+        }
+    } else {
+        SKP_memset( psCNG->CNG_synth_state, 0, psDec->LPC_order *  sizeof( SKP_int32 ) );
+    }
+}
--- /dev/null
+++ b/src_common/SKP_Silk_LBRR_reset.c
@@ -1,0 +1,40 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+/* Resets LBRR buffer, used if packet size changes */
+void SKP_Silk_LBRR_reset( 
+    SKP_Silk_encoder_state      *psEncC             /* I/O  state                                       */
+)
+{
+    SKP_int i;
+
+    for( i = 0; i < MAX_LBRR_DELAY; i++ ) {
+        psEncC->LBRR_buffer[ i ].usage = SKP_SILK_NO_LBRR;
+    }
+}
--- /dev/null
+++ b/src_common/SKP_Silk_LP_variable_cutoff.c
@@ -1,0 +1,194 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/* 
+
+    Elliptic/Cauer filters designed with 0.1 dB passband ripple, 
+        80 dB minimum stopband attenuation, and
+        [0.95 : 0.15 : 0.35] normalized cut off frequencies.
+
+*/
+#include "SKP_Silk_main.h"
+
+#if SWITCH_TRANSITION_FILTERING
+
+/* Helper function, that interpolates the filter taps */
+SKP_INLINE void SKP_Silk_LP_interpolate_filter_taps( 
+    SKP_int32           B_Q28[ TRANSITION_NB ], 
+    SKP_int32           A_Q28[ TRANSITION_NA ],
+    const SKP_int       ind,
+    const SKP_int32     fac_Q16
+)
+{
+    SKP_int nb, na;
+
+    if( ind < TRANSITION_INT_NUM - 1 ) {
+        if( fac_Q16 > 0 ) {
+            if( fac_Q16 == SKP_SAT16( fac_Q16 ) ) { /* fac_Q16 is in range of a 16-bit int */
+                /* Piece-wise linear interpolation of B and A */
+                for( nb = 0; nb < TRANSITION_NB; nb++ ) {
+                    B_Q28[ nb ] = SKP_SMLAWB(
+                        SKP_Silk_Transition_LP_B_Q28[ ind     ][ nb ],
+                        SKP_Silk_Transition_LP_B_Q28[ ind + 1 ][ nb ] -
+                        SKP_Silk_Transition_LP_B_Q28[ ind     ][ nb ],
+                        fac_Q16 );
+                }
+                for( na = 0; na < TRANSITION_NA; na++ ) {
+                    A_Q28[ na ] = SKP_SMLAWB(
+                        SKP_Silk_Transition_LP_A_Q28[ ind     ][ na ],
+                        SKP_Silk_Transition_LP_A_Q28[ ind + 1 ][ na ] -
+                        SKP_Silk_Transition_LP_A_Q28[ ind     ][ na ],
+                        fac_Q16 );
+                }
+            } else if( fac_Q16 == ( 1 << 15 ) ) { /* Neither fac_Q16 nor ( ( 1 << 16 ) - fac_Q16 ) is in range of a 16-bit int */
+
+                /* Piece-wise linear interpolation of B and A */
+                for( nb = 0; nb < TRANSITION_NB; nb++ ) {
+                    B_Q28[ nb ] = SKP_RSHIFT( 
+                        SKP_Silk_Transition_LP_B_Q28[ ind     ][ nb ] +
+                        SKP_Silk_Transition_LP_B_Q28[ ind + 1 ][ nb ],
+                        1 );
+                }
+                for( na = 0; na < TRANSITION_NA; na++ ) {
+                    A_Q28[ na ] = SKP_RSHIFT( 
+                        SKP_Silk_Transition_LP_A_Q28[ ind     ][ na ] + 
+                        SKP_Silk_Transition_LP_A_Q28[ ind + 1 ][ na ], 
+                        1 );
+                }
+            } else { /* ( ( 1 << 16 ) - fac_Q16 ) is in range of a 16-bit int */
+                
+                SKP_assert( ( ( 1 << 16 ) - fac_Q16 ) == SKP_SAT16( ( ( 1 << 16 ) - fac_Q16) ) );
+                /* Piece-wise linear interpolation of B and A */
+                for( nb = 0; nb < TRANSITION_NB; nb++ ) {
+                    B_Q28[ nb ] = SKP_SMLAWB(
+                        SKP_Silk_Transition_LP_B_Q28[ ind + 1 ][ nb ],
+                        SKP_Silk_Transition_LP_B_Q28[ ind     ][ nb ] -
+                        SKP_Silk_Transition_LP_B_Q28[ ind + 1 ][ nb ],
+                        ( 1 << 16 ) - fac_Q16 );
+                }
+                for( na = 0; na < TRANSITION_NA; na++ ) {
+                    A_Q28[ na ] = SKP_SMLAWB(
+                        SKP_Silk_Transition_LP_A_Q28[ ind + 1 ][ na ],
+                        SKP_Silk_Transition_LP_A_Q28[ ind     ][ na ] -
+                        SKP_Silk_Transition_LP_A_Q28[ ind + 1 ][ na ],
+                        ( 1 << 16 ) - fac_Q16 );
+                }
+            }
+        } else {
+            SKP_memcpy( B_Q28, SKP_Silk_Transition_LP_B_Q28[ ind ], TRANSITION_NB * sizeof( SKP_int32 ) );
+            SKP_memcpy( A_Q28, SKP_Silk_Transition_LP_A_Q28[ ind ], TRANSITION_NA * sizeof( SKP_int32 ) );
+        }
+    } else {
+        SKP_memcpy( B_Q28, SKP_Silk_Transition_LP_B_Q28[ TRANSITION_INT_NUM - 1 ], TRANSITION_NB * sizeof( SKP_int32 ) );
+        SKP_memcpy( A_Q28, SKP_Silk_Transition_LP_A_Q28[ TRANSITION_INT_NUM - 1 ], TRANSITION_NA * sizeof( SKP_int32 ) );
+    }
+}
+
+/* Low-pass filter with variable cutoff frequency based on  */
+/* piece-wise linear interpolation between elliptic filters */
+/* Start by setting psEncC->transition_frame_no = 1;            */
+/* Deactivate by setting psEncC->transition_frame_no = 0;   */
+void SKP_Silk_LP_variable_cutoff(
+    SKP_Silk_LP_state               *psLP,          /* I/O  LP filter state                     */
+    SKP_int16                       *out,           /* O    Low-pass filtered output signal     */
+    const SKP_int16                 *in,            /* I    Input signal                        */
+    const SKP_int                   frame_length    /* I    Frame length                        */
+)
+{
+    SKP_int32   B_Q28[ TRANSITION_NB ], A_Q28[ TRANSITION_NA ], fac_Q16 = 0;
+    SKP_int     ind = 0;
+
+    SKP_assert( psLP->transition_frame_no >= 0 );
+    SKP_assert( ( ( ( psLP->transition_frame_no <= TRANSITION_FRAMES_DOWN ) && ( psLP->mode == 0 ) ) || 
+                  ( ( psLP->transition_frame_no <= TRANSITION_FRAMES_UP   ) && ( psLP->mode == 1 ) ) ) );
+
+    /* Interpolate filter coefficients if needed */
+    if( psLP->transition_frame_no > 0 ) {
+        if( psLP->mode == 0 ) {
+            if( psLP->transition_frame_no < TRANSITION_FRAMES_DOWN ) {
+                /* Calculate index and interpolation factor for interpolation */
+#if( TRANSITION_INT_STEPS_DOWN == 32 )
+                fac_Q16 = SKP_LSHIFT( psLP->transition_frame_no, 16 - 5 );
+#else
+                fac_Q16 = SKP_DIV32_16( SKP_LSHIFT( psLP->transition_frame_no, 16 ), TRANSITION_INT_STEPS_DOWN );
+#endif
+                ind      = SKP_RSHIFT( fac_Q16, 16 );
+                fac_Q16 -= SKP_LSHIFT( ind, 16 );
+
+                SKP_assert( ind >= 0 );
+                SKP_assert( ind < TRANSITION_INT_NUM );
+
+                /* Interpolate filter coefficients */
+                SKP_Silk_LP_interpolate_filter_taps( B_Q28, A_Q28, ind, fac_Q16 );
+
+                /* Increment transition frame number for next frame */
+                psLP->transition_frame_no++;
+
+            } else {
+                SKP_assert( psLP->transition_frame_no == TRANSITION_FRAMES_DOWN );
+                /* End of transition phase */
+                SKP_Silk_LP_interpolate_filter_taps( B_Q28, A_Q28, TRANSITION_INT_NUM - 1, 0 );
+            }
+        } else {
+            SKP_assert( psLP->mode == 1 );
+            if( psLP->transition_frame_no < TRANSITION_FRAMES_UP ) {
+                /* Calculate index and interpolation factor for interpolation */
+#if( TRANSITION_INT_STEPS_UP == 64 )
+                fac_Q16 = SKP_LSHIFT( TRANSITION_FRAMES_UP - psLP->transition_frame_no, 16 - 6 );
+#else
+                fac_Q16 = SKP_DIV32_16( SKP_LSHIFT( TRANSITION_FRAMES_UP - psLP->transition_frame_no, 16 ), TRANSITION_INT_STEPS_UP );
+#endif
+                ind      = SKP_RSHIFT( fac_Q16, 16 );
+                fac_Q16 -= SKP_LSHIFT( ind, 16 );
+
+                SKP_assert( ind >= 0 );
+                SKP_assert( ind < TRANSITION_INT_NUM );
+
+                /* Interpolate filter coefficients */
+                SKP_Silk_LP_interpolate_filter_taps( B_Q28, A_Q28, ind, fac_Q16 );
+
+                /* Increment transition frame number for next frame */
+                psLP->transition_frame_no++;
+            
+            } else {
+                SKP_assert( psLP->transition_frame_no == TRANSITION_FRAMES_UP );
+                /* End of transition phase */
+                SKP_Silk_LP_interpolate_filter_taps( B_Q28, A_Q28, 0, 0 );
+            }
+        }
+    } 
+    
+    if( psLP->transition_frame_no > 0 ) {
+        /* ARMA low-pass filtering */
+        SKP_assert( TRANSITION_NB == 3 && TRANSITION_NA == 2 );
+        SKP_Silk_biquad_alt( in, B_Q28, A_Q28, psLP->In_LP_State, out, frame_length );
+    } else {
+        /* Instead of using the filter, copy input directly to output */
+        SKP_memcpy( out, in, frame_length * sizeof( SKP_int16 ) );
+    }
+}
+#endif
--- /dev/null
+++ b/src_common/SKP_Silk_NLSF2A_stable.c
@@ -1,0 +1,57 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+/* Convert NLSF parameters to stable AR prediction filter coefficients */
+void SKP_Silk_NLSF2A_stable(
+    SKP_int16                       pAR_Q12[ MAX_LPC_ORDER ],   /* O    Stabilized AR coefs [LPC_order]     */ 
+    const SKP_int                   pNLSF[ MAX_LPC_ORDER ],     /* I    NLSF vector         [LPC_order]     */
+    const SKP_int                   LPC_order                   /* I    LPC/LSF order                       */
+)
+{
+    SKP_int   i;
+    SKP_int32 invGain_Q30;
+
+    SKP_Silk_NLSF2A( pAR_Q12, pNLSF, LPC_order );
+
+    /* Ensure stable LPCs */
+    for( i = 0; i < MAX_LPC_STABILIZE_ITERATIONS; i++ ) {
+        if( SKP_Silk_LPC_inverse_pred_gain( &invGain_Q30, pAR_Q12, LPC_order ) == 1 ) {
+            SKP_Silk_bwexpander( pAR_Q12, LPC_order, 65536 - SKP_SMULBB( 66, i ) ); /* 66_Q16 = 0.001 */
+        } else {
+            break;
+        }
+    }
+
+    /* Reached the last iteration */
+    if( i == MAX_LPC_STABILIZE_ITERATIONS ) {
+        for( i = 0; i < LPC_order; i++ ) {
+            pAR_Q12[ i ] = 0;
+        }
+    }
+}
--- /dev/null
+++ b/src_common/SKP_Silk_NLSF_MSVQ_decode.c
@@ -1,0 +1,91 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+/* NLSF vector decoder */
+void SKP_Silk_NLSF_MSVQ_decode(
+    SKP_int                         *pNLSF_Q15,     /* O    Pointer to decoded output vector [LPC_ORDER x 1]    */
+    const SKP_Silk_NLSF_CB_struct   *psNLSF_CB,     /* I    Pointer to NLSF codebook struct                     */
+    const SKP_int                   *NLSFIndices,   /* I    Pointer to NLSF indices          [nStages x 1]      */
+    const SKP_int                   LPC_order       /* I    LPC order used                                      */
+) 
+{
+    const SKP_int16 *pCB_element;
+          SKP_int    s;
+          SKP_int    i;
+
+    /* Check that each index is within valid range */
+    SKP_assert( 0 <= NLSFIndices[ 0 ] && NLSFIndices[ 0 ] < psNLSF_CB->CBStages[ 0 ].nVectors );
+
+    /* Point to the first vector element */
+    pCB_element = &psNLSF_CB->CBStages[ 0 ].CB_NLSF_Q15[ SKP_MUL( NLSFIndices[ 0 ], LPC_order ) ];
+
+    /* Initialize with the codebook vector from stage 0 */
+    for( i = 0; i < LPC_order; i++ ) {
+        pNLSF_Q15[ i ] = ( SKP_int )pCB_element[ i ];
+    }
+          
+    for( s = 1; s < psNLSF_CB->nStages; s++ ) {
+        /* Check that each index is within valid range */
+        SKP_assert( 0 <= NLSFIndices[ s ] && NLSFIndices[ s ] < psNLSF_CB->CBStages[ s ].nVectors );
+
+        if( LPC_order == 16 ) {
+            /* Point to the first vector element */
+            pCB_element = &psNLSF_CB->CBStages[ s ].CB_NLSF_Q15[ SKP_LSHIFT( NLSFIndices[ s ], 4 ) ];
+
+            /* Add the codebook vector from the current stage */
+            pNLSF_Q15[  0 ] += pCB_element[  0 ];
+            pNLSF_Q15[  1 ] += pCB_element[  1 ];
+            pNLSF_Q15[  2 ] += pCB_element[  2 ];
+            pNLSF_Q15[  3 ] += pCB_element[  3 ];
+            pNLSF_Q15[  4 ] += pCB_element[  4 ];
+            pNLSF_Q15[  5 ] += pCB_element[  5 ];
+            pNLSF_Q15[  6 ] += pCB_element[  6 ];
+            pNLSF_Q15[  7 ] += pCB_element[  7 ];
+            pNLSF_Q15[  8 ] += pCB_element[  8 ];
+            pNLSF_Q15[  9 ] += pCB_element[  9 ];
+            pNLSF_Q15[ 10 ] += pCB_element[ 10 ];
+            pNLSF_Q15[ 11 ] += pCB_element[ 11 ];
+            pNLSF_Q15[ 12 ] += pCB_element[ 12 ];
+            pNLSF_Q15[ 13 ] += pCB_element[ 13 ];
+            pNLSF_Q15[ 14 ] += pCB_element[ 14 ];
+            pNLSF_Q15[ 15 ] += pCB_element[ 15 ];
+        } else {
+            /* Point to the first vector element */
+            pCB_element = &psNLSF_CB->CBStages[ s ].CB_NLSF_Q15[ SKP_SMULBB( NLSFIndices[ s ], LPC_order ) ];
+
+            /* Add the codebook vector from the current stage */
+            for( i = 0; i < LPC_order; i++ ) {
+                pNLSF_Q15[ i ] += pCB_element[ i ];
+            }
+        }
+    }
+
+    /* NLSF stabilization */
+    SKP_Silk_NLSF_stabilize( pNLSF_Q15, psNLSF_CB->NDeltaMin_Q15, LPC_order );
+}
--- /dev/null
+++ b/src_common/SKP_Silk_NSQ.c
@@ -1,0 +1,468 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+SKP_INLINE void SKP_Silk_nsq_scale_states(
+    SKP_Silk_nsq_state  *NSQ,               /* I/O NSQ state                        */
+    const SKP_int16     x[],                /* I input in Q0                        */
+    SKP_int32           x_sc_Q10[],         /* O input scaled with 1/Gain           */
+    SKP_int             length,             /* I length of input                    */
+    SKP_int16           sLTP[],             /* I re-whitened LTP state in Q0        */
+    SKP_int32           sLTP_Q16[],         /* O LTP state matching scaled input    */
+    SKP_int             subfr,              /* I subframe number                    */
+    const SKP_int       LTP_scale_Q14,      /* I                                    */
+    const SKP_int32     Gains_Q16[ MAX_NB_SUBFR ], /* I                             */
+    const SKP_int       pitchL[ MAX_NB_SUBFR ]  /* I                                */
+);
+
+SKP_INLINE void SKP_Silk_noise_shape_quantizer(
+    SKP_Silk_nsq_state  *NSQ,               /* I/O  NSQ state                       */
+    SKP_int             sigtype,            /* I    Signal type                     */
+    const SKP_int32     x_sc_Q10[],         /* I                                    */
+    SKP_int8            q[],                /* O                                    */
+    SKP_int16           xq[],               /* O                                    */
+    SKP_int32           sLTP_Q16[],         /* I/O  LTP state                       */
+    const SKP_int16     a_Q12[],            /* I    Short term prediction coefs     */
+    const SKP_int16     b_Q14[],            /* I    Long term prediction coefs      */
+    const SKP_int16     AR_shp_Q13[],       /* I    Noise shaping AR coefs          */
+    SKP_int             lag,                /* I    Pitch lag                       */
+    SKP_int32           HarmShapeFIRPacked_Q14, /* I                                */
+    SKP_int             Tilt_Q14,           /* I    Spectral tilt                   */
+    SKP_int32           LF_shp_Q14,         /* I                                    */
+    SKP_int32           Gain_Q16,           /* I                                    */
+    SKP_int             Lambda_Q10,         /* I                                    */
+    SKP_int             offset_Q10,         /* I                                    */
+    SKP_int             length,             /* I    Input length                    */
+    SKP_int             shapingLPCOrder,    /* I    Noise shaping AR filter order   */
+    SKP_int             predictLPCOrder,    /* I    Prediction filter order         */
+    SKP_int32           warping_Q16         /* I                                    */
+#ifdef SAVE_ALL_INTERNAL_DATA
+    ,SKP_float          q_in_env[],         /* O                                    */
+    SKP_float           q_exc[],            /* O                                    */
+    SKP_float           q_LPC_exc[],        /* O                                    */
+    SKP_float           q_exc_prev[]        /* O                                    */
+#endif
+);
+
+void SKP_Silk_NSQ(
+    SKP_Silk_encoder_state          *psEncC,                                    /* I/O  Encoder State                       */
+    SKP_Silk_encoder_control        *psEncCtrlC,                                /* I    Encoder Control                     */
+    SKP_Silk_nsq_state              *NSQ,                                       /* I/O  NSQ state                           */
+    const SKP_int16                 x[],                                        /* I    prefiltered input signal            */
+    SKP_int8                        q[],                                        /* O    quantized qulse signal              */
+    const SKP_int                   LSFInterpFactor_Q2,                         /* I    LSF interpolation factor in Q2      */
+    const SKP_int16                 PredCoef_Q12[ 2 * MAX_LPC_ORDER ],          /* I    Short term prediction coefficients  */
+    const SKP_int16                 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ],        /* I    Long term prediction coefficients   */
+    const SKP_int16                 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ],  /* I                                    */
+    const SKP_int                   HarmShapeGain_Q14[ MAX_NB_SUBFR ],              /* I                                    */
+    const SKP_int                   Tilt_Q14[ MAX_NB_SUBFR ],                       /* I    Spectral tilt                   */
+    const SKP_int32                 LF_shp_Q14[ MAX_NB_SUBFR ],                     /* I                                    */
+    const SKP_int32                 Gains_Q16[ MAX_NB_SUBFR ],                      /* I                                    */
+    const SKP_int                   Lambda_Q10,                                 /* I                                        */
+    const SKP_int                   LTP_scale_Q14                               /* I    LTP state scaling                   */
+)
+{
+    SKP_int     k, lag, start_idx, subfr_length, LSF_interpolation_flag;
+    const SKP_int16 *A_Q12, *B_Q14, *AR_shp_Q13;
+    SKP_int16   *pxq;
+    SKP_int32   sLTP_Q16[ 2 * MAX_FRAME_LENGTH ];
+    SKP_int16   sLTP[     2 * MAX_FRAME_LENGTH ];
+    SKP_int32   HarmShapeFIRPacked_Q14;
+    SKP_int     offset_Q10;
+    SKP_int32   FiltState[ MAX_LPC_ORDER ];
+    SKP_int32   x_sc_Q10[ MAX_FRAME_LENGTH / MAX_NB_SUBFR ];
+#ifdef SAVE_ALL_INTERNAL_DATA
+    /* Date buffers for analysing */
+    SKP_float   q_in_env_buf[  MAX_FRAME_LENGTH ];
+    SKP_float   q_exc_buf[     MAX_FRAME_LENGTH ];
+    SKP_float   q_LPC_exc_buf[ MAX_FRAME_LENGTH ];
+    SKP_float   q_exc_prev_buf[     MAX_FRAME_LENGTH ];
+    SKP_float   *q_in_env, *q_exc, *q_LPC_exc, *q_exc_prev;
+
+    q_in_env   = q_in_env_buf;
+    q_exc      = q_exc_buf;
+    q_LPC_exc  = q_LPC_exc_buf;
+    q_exc_prev = q_exc_prev_buf;
+#endif
+
+    subfr_length = psEncC->frame_length / MAX_NB_SUBFR;
+
+    NSQ->rand_seed  =  psEncCtrlC->Seed;
+    /* Set unvoiced lag to the previous one, overwrite later for voiced */
+    lag             = NSQ->lagPrev;
+
+    offset_Q10 = SKP_Silk_Quantization_Offsets_Q10[ psEncCtrlC->sigtype ][ psEncCtrlC->QuantOffsetType ];
+
+    if( LSFInterpFactor_Q2 == ( 1 << 2 ) ) {
+        LSF_interpolation_flag = 0;
+    } else {
+        LSF_interpolation_flag = 1;
+    }
+
+    /* Setup pointers to start of sub frame */
+    NSQ->sLTP_shp_buf_idx = psEncC->ltp_mem_length;
+    NSQ->sLTP_buf_idx     = psEncC->ltp_mem_length;
+    pxq                   = &NSQ->xq[ psEncC->ltp_mem_length ];
+    for( k = 0; k < psEncC->nb_subfr; k++ ) {
+        A_Q12      = &PredCoef_Q12[ (( k >> 1 ) | ( 1 - LSF_interpolation_flag )) * MAX_LPC_ORDER ];
+        B_Q14      = &LTPCoef_Q14[ k * LTP_ORDER ];
+        AR_shp_Q13 = &AR2_Q13[     k * MAX_SHAPE_LPC_ORDER ];
+
+        /* Noise shape parameters */
+        SKP_assert( HarmShapeGain_Q14[ k ] >= 0 );
+        HarmShapeFIRPacked_Q14  =                        SKP_RSHIFT( HarmShapeGain_Q14[ k ], 2 );
+        HarmShapeFIRPacked_Q14 |= SKP_LSHIFT( ( SKP_int32 )SKP_RSHIFT( HarmShapeGain_Q14[ k ], 1 ), 16 );
+
+        if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) {
+            /* Voiced */
+            lag = psEncCtrlC->pitchL[ k ];
+
+            NSQ->rewhite_flag = 0;
+            /* Re-whitening */
+            if( ( k & ( 3 - SKP_LSHIFT( LSF_interpolation_flag, 1 ) ) ) == 0 ) {
+                /* Rewhiten with new A coefs */
+                
+                start_idx = psEncC->ltp_mem_length - lag - psEncC->predictLPCOrder - LTP_ORDER / 2;
+                start_idx = SKP_LIMIT_int( start_idx, 0, psEncC->ltp_mem_length - psEncC->predictLPCOrder ); /* Limit */
+                
+                SKP_memset( FiltState, 0, psEncC->predictLPCOrder * sizeof( SKP_int32 ) );
+                SKP_Silk_MA_Prediction( &NSQ->xq[ start_idx + k * psEncC->subfr_length ], 
+                    A_Q12, FiltState, sLTP + start_idx, psEncC->ltp_mem_length - start_idx, psEncC->predictLPCOrder );
+
+                NSQ->rewhite_flag = 1;
+                NSQ->sLTP_buf_idx = psEncC->ltp_mem_length;
+            }
+        }
+        
+        SKP_Silk_nsq_scale_states( NSQ, x, x_sc_Q10, psEncC->subfr_length, sLTP, 
+            sLTP_Q16, k, LTP_scale_Q14, Gains_Q16, psEncCtrlC->pitchL );
+
+        SKP_Silk_noise_shape_quantizer( NSQ, psEncCtrlC->sigtype, x_sc_Q10, q, pxq, sLTP_Q16, A_Q12, B_Q14, 
+            AR_shp_Q13, lag, HarmShapeFIRPacked_Q14, Tilt_Q14[ k ], LF_shp_Q14[ k ], Gains_Q16[ k ], Lambda_Q10, 
+            offset_Q10, psEncC->subfr_length, psEncC->shapingLPCOrder, psEncC->predictLPCOrder, psEncCtrlC->warping_Q16
+#ifdef SAVE_ALL_INTERNAL_DATA
+            , q_in_env, q_exc, q_LPC_exc, q_exc_prev
+#endif
+        );
+
+        x          += psEncC->subfr_length;
+        q          += psEncC->subfr_length;
+        pxq        += psEncC->subfr_length;
+#ifdef SAVE_ALL_INTERNAL_DATA
+        q_in_env   += psEncC->subfr_length;
+        q_exc      += psEncC->subfr_length;
+        q_LPC_exc  += psEncC->subfr_length;
+        q_exc_prev += subfr_length;
+#endif
+    }
+
+    /* Update lagPrev for next frame */
+    NSQ->lagPrev = psEncCtrlC->pitchL[ psEncC->nb_subfr - 1 ];
+    /* Save quantized speech and noise shaping signals */
+    SKP_memcpy( NSQ->xq,           &NSQ->xq[           psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( SKP_int16 ) );
+    SKP_memcpy( NSQ->sLTP_shp_Q10, &NSQ->sLTP_shp_Q10[ psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( SKP_int32 ) );
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+    DEBUG_STORE_DATA( q_in_env.dat,  q_in_env_buf,  psEncC->frame_length * sizeof( SKP_float ) );
+    DEBUG_STORE_DATA( q_exc.dat,     q_exc_buf,     psEncC->frame_length * sizeof( SKP_float ) );
+    DEBUG_STORE_DATA( q_lpc_exc.dat, q_LPC_exc_buf, psEncC->frame_length * sizeof( SKP_float ) );
+    DEBUG_STORE_DATA( xq.dat,        &NSQ->xq[ psEncC->ltp_mem_length - psEncC->frame_length ], psEncC->frame_length * sizeof( SKP_int16 ) );
+    DEBUG_STORE_DATA( q.dat,         &q[ -psEncC->frame_length ], psEncC->frame_length * sizeof( SKP_int8 ) );
+#endif
+}
+
+/***********************************/
+/* SKP_Silk_noise_shape_quantizer  */
+/***********************************/
+SKP_INLINE void SKP_Silk_noise_shape_quantizer(
+    SKP_Silk_nsq_state  *NSQ,               /* I/O  NSQ state                       */
+    SKP_int             sigtype,            /* I    Signal type                     */
+    const SKP_int32     x_sc_Q10[],         /* I                                    */
+    SKP_int8            q[],                /* O                                    */
+    SKP_int16           xq[],               /* O                                    */
+    SKP_int32           sLTP_Q16[],         /* I/O  LTP state                       */
+    const SKP_int16     a_Q12[],            /* I    Short term prediction coefs     */
+    const SKP_int16     b_Q14[],            /* I    Long term prediction coefs      */
+    const SKP_int16     AR_shp_Q13[],       /* I    Noise shaping AR coefs          */
+    SKP_int             lag,                /* I    Pitch lag                       */
+    SKP_int32           HarmShapeFIRPacked_Q14, /* I                                */
+    SKP_int             Tilt_Q14,           /* I    Spectral tilt                   */
+    SKP_int32           LF_shp_Q14,         /* I                                    */
+    SKP_int32           Gain_Q16,           /* I                                    */
+    SKP_int             Lambda_Q10,         /* I                                    */
+    SKP_int             offset_Q10,         /* I                                    */
+    SKP_int             length,             /* I    Input length                    */
+    SKP_int             shapingLPCOrder,    /* I    Noise shaping AR filter order   */
+    SKP_int             predictLPCOrder,    /* I    Prediction filter order         */
+    SKP_int             warping_Q16         /* I                                    */
+#ifdef SAVE_ALL_INTERNAL_DATA
+    ,SKP_float          q_in_env[],         /* O                                    */
+    SKP_float           q_exc[],            /* O                                    */
+    SKP_float           q_LPC_exc[],        /* O                                    */
+    SKP_float           q_exc_prev[]        /* O                                    */
+#endif
+)
+{
+    SKP_int     i, j;
+    SKP_int32   LTP_pred_Q14, LPC_pred_Q10, n_AR_Q10, n_LTP_Q14;
+    SKP_int32   n_LF_Q10, r_Q10, q_Q0, q_Q10;
+    SKP_int32   thr1_Q10, thr2_Q10, thr3_Q10;
+    SKP_int32   dither, exc_Q10, LPC_exc_Q10, xq_Q10;
+    SKP_int32   tmp1, tmp2, sLF_AR_shp_Q10;
+    SKP_int32   *psLPC_Q14, *shp_lag_ptr, *pred_lag_ptr;
+
+    shp_lag_ptr  = &NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - lag + HARM_SHAPE_FIR_TAPS / 2 ];
+    pred_lag_ptr = &sLTP_Q16[ NSQ->sLTP_buf_idx - lag + LTP_ORDER / 2 ];
+    
+    /* Setup short term AR state */
+    psLPC_Q14     = &NSQ->sLPC_Q14[ MAX_LPC_ORDER - 1 ];
+
+    /* Quantization thresholds */
+    thr1_Q10 = SKP_SUB_RSHIFT32( -1536, Lambda_Q10, 1);
+    thr2_Q10 = SKP_SUB_RSHIFT32( -512,  Lambda_Q10, 1);
+    thr2_Q10 = SKP_ADD_RSHIFT32( thr2_Q10, SKP_SMULBB( offset_Q10, Lambda_Q10 ), 10 );
+    thr3_Q10 = SKP_ADD_RSHIFT32(  512,  Lambda_Q10, 1);
+
+    for( i = 0; i < length; i++ ) {
+        /* Generate dither */
+        NSQ->rand_seed = SKP_RAND( NSQ->rand_seed );
+
+        /* dither = rand_seed < 0 ? 0xFFFFFFFF : 0; */
+        dither = SKP_RSHIFT( NSQ->rand_seed, 31 );
+                
+        /* Short-term prediction */
+        SKP_assert( ( predictLPCOrder  & 1 ) == 0 );    /* check that order is even */
+        SKP_assert( ( (SKP_int64)a_Q12 & 3 ) == 0 );    /* check that array starts at 4-byte aligned address */
+        SKP_assert( predictLPCOrder >= 10 );            /* check that unrolling works */
+
+        /* Partially unrolled */
+        LPC_pred_Q10 = SKP_SMULWB(               psLPC_Q14[  0 ], a_Q12[ 0 ] );
+        LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -1 ], a_Q12[ 1 ] );
+        LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -2 ], a_Q12[ 2 ] );
+        LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -3 ], a_Q12[ 3 ] );
+        LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -4 ], a_Q12[ 4 ] );
+        LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -5 ], a_Q12[ 5 ] );
+        LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -6 ], a_Q12[ 6 ] );
+        LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -7 ], a_Q12[ 7 ] );
+        LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -8 ], a_Q12[ 8 ] );
+        LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -9 ], a_Q12[ 9 ] );
+
+        for( j = 10; j < predictLPCOrder; j ++ ) {
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -j ], a_Q12[ j ] );
+        }
+
+        /* Long-term prediction */
+        if( sigtype == SIG_TYPE_VOICED ) {
+            /* Unrolled loop */
+            LTP_pred_Q14 = SKP_SMULWB(               pred_lag_ptr[  0 ], b_Q14[ 0 ] );
+            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -1 ], b_Q14[ 1 ] );
+            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -2 ], b_Q14[ 2 ] );
+            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -3 ], b_Q14[ 3 ] );
+            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -4 ], b_Q14[ 4 ] );
+            pred_lag_ptr++;
+        } else {
+            LTP_pred_Q14 = 0;
+        }
+
+        /* Noise shape feedback */
+        SKP_assert( ( shapingLPCOrder & 1 ) == 0 );   /* check that order is even */
+        /* Output of lowpass section */
+        tmp2 = SKP_SMLAWB( psLPC_Q14[ 0 ], NSQ->sAR2_Q14[ 0 ], warping_Q16 );
+        /* Output of allpass section */
+        tmp1 = SKP_SMLAWB( NSQ->sAR2_Q14[ 0 ], NSQ->sAR2_Q14[ 1 ] - tmp2, warping_Q16 );
+        NSQ->sAR2_Q14[ 0 ] = tmp2;
+        n_AR_Q10 = SKP_SMULWB( tmp2, AR_shp_Q13[ 0 ] );
+        /* Loop over allpass sections */
+        for( j = 2; j < shapingLPCOrder; j += 2 ) {
+            /* Output of allpass section */
+            tmp2 = SKP_SMLAWB( NSQ->sAR2_Q14[ j - 1 ], NSQ->sAR2_Q14[ j + 0 ] - tmp1, warping_Q16 );
+            NSQ->sAR2_Q14[ j - 1 ] = tmp1;
+            n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, tmp1, AR_shp_Q13[ j - 1 ] );
+            /* Output of allpass section */
+            tmp1 = SKP_SMLAWB( NSQ->sAR2_Q14[ j + 0 ], NSQ->sAR2_Q14[ j + 1 ] - tmp2, warping_Q16 );
+            NSQ->sAR2_Q14[ j + 0 ] = tmp2;
+            n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, tmp2, AR_shp_Q13[ j ] );
+        }
+        NSQ->sAR2_Q14[ shapingLPCOrder - 1 ] = tmp1;
+        n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, tmp1, AR_shp_Q13[ shapingLPCOrder - 1 ] );
+
+        n_AR_Q10 = SKP_RSHIFT( n_AR_Q10, 1 );   /* Q11 -> Q10 */
+        n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, NSQ->sLF_AR_shp_Q12, Tilt_Q14 );
+
+        n_LF_Q10 = SKP_LSHIFT( SKP_SMULWB( NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - 1 ], LF_shp_Q14 ), 2 ); 
+        n_LF_Q10 = SKP_SMLAWT( n_LF_Q10, NSQ->sLF_AR_shp_Q12, LF_shp_Q14 );
+
+        SKP_assert( lag > 0 || sigtype == SIG_TYPE_UNVOICED );
+
+        /* Long-term shaping */
+        if( lag > 0 ) {
+            /* Symmetric, packed FIR coefficients */
+            n_LTP_Q14 = SKP_SMULWB( SKP_ADD32( shp_lag_ptr[ 0 ], shp_lag_ptr[ -2 ] ), HarmShapeFIRPacked_Q14 );
+            n_LTP_Q14 = SKP_SMLAWT( n_LTP_Q14, shp_lag_ptr[ -1 ],                     HarmShapeFIRPacked_Q14 );
+            shp_lag_ptr++;
+            n_LTP_Q14 = SKP_LSHIFT( n_LTP_Q14, 6 );
+        } else {
+            n_LTP_Q14 = 0;
+        }
+
+        /* Input minus prediction plus noise feedback  */
+        //r = x[ i ] - LTP_pred - LPC_pred + n_AR + n_Tilt + n_LF + n_LTP;
+        tmp1  = SKP_SUB32( LTP_pred_Q14, n_LTP_Q14 );                       /* Add Q14 stuff */
+        tmp1  = SKP_RSHIFT( tmp1, 4 );                                      /* convert to Q10  */
+        tmp1  = SKP_ADD32( tmp1, LPC_pred_Q10 );                            /* add Q10 stuff */ 
+        tmp1  = SKP_SUB32( tmp1, n_AR_Q10 );                                /* subtract Q10 stuff */ 
+        tmp1  = SKP_SUB32( tmp1, n_LF_Q10 );                                /* subtract Q10 stuff */ 
+        r_Q10 = SKP_SUB32( x_sc_Q10[ i ], tmp1 );
+
+        /* Flip sign depending on dither */
+        r_Q10 = ( r_Q10 ^ dither ) - dither;
+        r_Q10 = SKP_SUB32( r_Q10, offset_Q10 );
+        r_Q10 = SKP_LIMIT_32( r_Q10, -64 << 10, 64 << 10 );
+
+        /* Quantize */
+        if( r_Q10 < thr1_Q10 ) {
+            q_Q0 = SKP_RSHIFT_ROUND( SKP_ADD_RSHIFT32( r_Q10, Lambda_Q10, 1 ), 10 );
+            q_Q10 = SKP_LSHIFT( q_Q0, 10 );
+        } else if( r_Q10 < thr2_Q10 ) {
+            q_Q0 = -1;
+            q_Q10 = -1024;
+        } else if( r_Q10 > thr3_Q10 ) {
+            q_Q0 = SKP_RSHIFT_ROUND( SKP_SUB_RSHIFT32( r_Q10, Lambda_Q10, 1 ), 10 );
+            q_Q10 = SKP_LSHIFT( q_Q0, 10 );
+        } else {
+            q_Q0 = 0;
+            q_Q10 = 0;
+        }
+        q[ i ] = ( SKP_int8 )q_Q0; /* No saturation needed because max is 64 */
+
+        /* Excitation */
+        exc_Q10 = SKP_ADD32( q_Q10, offset_Q10 );
+        exc_Q10 = ( exc_Q10 ^ dither ) - dither;
+
+        /* Add predictions */
+        LPC_exc_Q10 = SKP_ADD32( exc_Q10, SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 ) );
+        xq_Q10      = SKP_ADD32( LPC_exc_Q10, LPC_pred_Q10 );
+        
+        /* Scale XQ back to normal level before saving */
+        xq[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( xq_Q10, Gain_Q16 ), 10 ) );
+        
+#ifdef SAVE_ALL_INTERNAL_DATA
+        q_in_env[   i ] = ( (SKP_float)r_Q10       * (SKP_float)Gain_Q16 ) / ( 1024.0f * 65536.0f );
+        q_exc[      i ] = ( (SKP_float)exc_Q10     * (SKP_float)Gain_Q16 ) / ( 1024.0f * 65536.0f );
+        q_LPC_exc[  i ] = ( (SKP_float)LPC_exc_Q10 * (SKP_float)Gain_Q16 ) / ( 1024.0f * 65536.0f );
+#endif
+        
+        /* Update states */
+        psLPC_Q14++;
+        *psLPC_Q14 = SKP_LSHIFT( xq_Q10, 4 );
+        sLF_AR_shp_Q10 = SKP_SUB32( xq_Q10, n_AR_Q10 );
+        NSQ->sLF_AR_shp_Q12 = SKP_LSHIFT( sLF_AR_shp_Q10, 2 );
+
+        NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx ] = SKP_SUB32( sLF_AR_shp_Q10, n_LF_Q10 );
+        sLTP_Q16[ NSQ->sLTP_buf_idx ] = SKP_LSHIFT( LPC_exc_Q10, 6 );
+        NSQ->sLTP_shp_buf_idx++;
+        NSQ->sLTP_buf_idx++;
+
+        /* Make dither dependent on quantized signal */
+        NSQ->rand_seed += q[ i ];
+    }
+    /* Update LPC synth buffer */
+    SKP_memcpy( NSQ->sLPC_Q14, &NSQ->sLPC_Q14[ length ], MAX_LPC_ORDER * sizeof( SKP_int32 ) );
+}
+
+SKP_INLINE void SKP_Silk_nsq_scale_states(
+    SKP_Silk_nsq_state  *NSQ,               /* I/O NSQ state                        */
+    const SKP_int16     x[],                /* I input in Q0                        */
+    SKP_int32           x_sc_Q10[],         /* O input scaled with 1/Gain           */
+    SKP_int             length,             /* I length of input                    */
+    SKP_int16           sLTP[],             /* I re-whitened LTP state in Q0        */
+    SKP_int32           sLTP_Q16[],         /* O LTP state matching scaled input    */
+    SKP_int             subfr,              /* I subframe number                    */
+    const SKP_int       LTP_scale_Q14,      /* I                                    */
+    const SKP_int32     Gains_Q16[ MAX_NB_SUBFR ], /* I                                 */
+    const SKP_int       pitchL[ MAX_NB_SUBFR ]  /* I                                    */
+)
+{
+    SKP_int   i, scale_length, lag;
+    SKP_int32 inv_gain_Q16, gain_adj_Q16, inv_gain_Q32;
+
+    inv_gain_Q16 = SKP_INVERSE32_varQ( SKP_max( Gains_Q16[ subfr ], 1 ), 32 );
+    inv_gain_Q16 = SKP_min( inv_gain_Q16, SKP_int16_MAX );
+    lag          = pitchL[ subfr ];
+
+    /* After rewhitening the LTP state is un-scaled */
+    if( NSQ->rewhite_flag ) {
+        inv_gain_Q32 = SKP_LSHIFT( inv_gain_Q16, 16 );
+        if( subfr == 0 ) {
+            /* Do LTP downscaling */
+            inv_gain_Q32 = SKP_LSHIFT( SKP_SMULWB( inv_gain_Q32, LTP_scale_Q14 ), 2 );
+        }
+        for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) {
+            sLTP_Q16[ i ] = SKP_SMULWB( inv_gain_Q32, sLTP[ i ] );
+        }
+    }
+
+    /* Prepare for Worst case. Next frame starts with max lag voiced */
+    scale_length = length * MAX_NB_SUBFR;                                           /* approx max lag */
+    scale_length = scale_length - SKP_SMULBB( MAX_NB_SUBFR - (subfr + 1), length ); /* subtract samples that will be too old in next frame */
+    scale_length = SKP_max_int( scale_length, lag + LTP_ORDER );                /* make sure to scale whole pitch period if voiced */
+
+    /* Adjust for changing gain */
+    if( inv_gain_Q16 != NSQ->prev_inv_gain_Q16 ) {
+        gain_adj_Q16 =  SKP_DIV32_varQ( inv_gain_Q16, NSQ->prev_inv_gain_Q16, 16 );
+
+        for( i = NSQ->sLTP_shp_buf_idx - scale_length; i < NSQ->sLTP_shp_buf_idx; i++ ) {
+            NSQ->sLTP_shp_Q10[ i ] = SKP_SMULWW( gain_adj_Q16, NSQ->sLTP_shp_Q10[ i ] );
+        }
+
+        /* Scale LTP predict state */
+        if( NSQ->rewhite_flag == 0 ) {
+            for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) {
+                sLTP_Q16[ i ] = SKP_SMULWW( gain_adj_Q16, sLTP_Q16[ i ] );
+            }
+        }
+        NSQ->sLF_AR_shp_Q12 = SKP_SMULWW( gain_adj_Q16, NSQ->sLF_AR_shp_Q12 );
+
+        /* scale short term state */
+        for( i = 0; i < MAX_LPC_ORDER; i++ ) {
+            NSQ->sLPC_Q14[ i ] = SKP_SMULWW( gain_adj_Q16, NSQ->sLPC_Q14[ i ] );
+        }
+        for( i = 0; i < MAX_SHAPE_LPC_ORDER; i++ ) {
+            NSQ->sAR2_Q14[ i ] = SKP_SMULWW( gain_adj_Q16, NSQ->sAR2_Q14[ i ] );
+        }
+    }
+
+    /* Scale input */
+    for( i = 0; i < length; i++ ) {
+        x_sc_Q10[ i ] = SKP_RSHIFT( SKP_SMULBB( x[ i ], ( SKP_int16 )inv_gain_Q16 ), 6 );
+    }
+
+    /* save inv_gain */
+    SKP_assert( inv_gain_Q16 != 0 );
+    NSQ->prev_inv_gain_Q16 = inv_gain_Q16;
+}
\ No newline at end of file
--- /dev/null
+++ b/src_common/SKP_Silk_NSQ_del_dec.c
@@ -1,0 +1,702 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+typedef struct {
+    SKP_int32 RandState[ DECISION_DELAY ];
+    SKP_int32 Q_Q10[     DECISION_DELAY ];
+    SKP_int32 Xq_Q10[    DECISION_DELAY ];
+    SKP_int32 Pred_Q16[  DECISION_DELAY ];
+    SKP_int32 Shape_Q10[ DECISION_DELAY ];
+    SKP_int32 Gain_Q16[  DECISION_DELAY ];
+    SKP_int32 sAR2_Q14[ MAX_SHAPE_LPC_ORDER ];
+    SKP_int32 sLPC_Q14[ MAX_FRAME_LENGTH / MAX_NB_SUBFR + NSQ_LPC_BUF_LENGTH ];
+    SKP_int32 LF_AR_Q12;
+    SKP_int32 Seed;
+    SKP_int32 SeedInit;
+    SKP_int32 RD_Q10;
+} NSQ_del_dec_struct;
+
+typedef struct {
+    SKP_int32 Q_Q10;
+    SKP_int32 RD_Q10;
+    SKP_int32 xq_Q14;
+    SKP_int32 LF_AR_Q12;
+    SKP_int32 sLTP_shp_Q10;
+    SKP_int32 LPC_exc_Q16;
+} NSQ_sample_struct;
+
+SKP_INLINE void SKP_Silk_copy_del_dec_state(
+    NSQ_del_dec_struct  *DD_dst,                /* I    Dst del dec state                   */
+    NSQ_del_dec_struct  *DD_src,                /* I    Src del dec state                   */
+    SKP_int             LPC_state_idx           /* I    Index to LPC buffer                 */
+);
+
+SKP_INLINE void SKP_Silk_nsq_del_dec_scale_states(
+    SKP_Silk_nsq_state  *NSQ,                   /* I/O  NSQ state                           */
+    NSQ_del_dec_struct  psDelDec[],             /* I/O  Delayed decision states             */
+    const SKP_int16     x[],                    /* I    Input in Q0                         */
+    SKP_int32           x_sc_Q10[],             /* O    Input scaled with 1/Gain in Q10     */
+    SKP_int             length,                 /* I    Length of input                     */
+    SKP_int16           sLTP[],                 /* I    Re-whitened LTP state in Q0         */
+    SKP_int32           sLTP_Q16[],             /* O    LTP state matching scaled input     */
+    SKP_int             subfr,                  /* I    Subframe number                     */
+    SKP_int             nStatesDelayedDecision, /* I    Number of del dec states            */
+    SKP_int             smpl_buf_idx,           /* I    Index to newest samples in buffers  */
+    const SKP_int       LTP_scale_Q14,          /* I    LTP state scaling                   */
+    const SKP_int32     Gains_Q16[ MAX_NB_SUBFR ],  /* I                                        */
+    const SKP_int       pitchL[ MAX_NB_SUBFR ]      /* I    Pitch lag                           */
+);
+
+/******************************************/
+/* Noise shape quantizer for one subframe */
+/******************************************/
+SKP_INLINE void SKP_Silk_noise_shape_quantizer_del_dec(
+    SKP_Silk_nsq_state  *NSQ,                   /* I/O  NSQ state                           */
+    NSQ_del_dec_struct  psDelDec[],             /* I/O  Delayed decision states             */
+    SKP_int             sigtype,                /* I    Signal type                         */
+    const SKP_int32     x_Q10[],                /* I                                        */
+    SKP_int8            q[],                    /* O                                        */
+    SKP_int16           xq[],                   /* O                                        */
+    SKP_int32           sLTP_Q16[],             /* I/O  LTP filter state                    */
+    const SKP_int16     a_Q12[],                /* I    Short term prediction coefs         */
+    const SKP_int16     b_Q14[],                /* I    Long term prediction coefs          */
+    const SKP_int16     AR_shp_Q13[],           /* I    Noise shaping coefs                 */
+    SKP_int             lag,                    /* I    Pitch lag                           */
+    SKP_int32           HarmShapeFIRPacked_Q14, /* I                                        */
+    SKP_int             Tilt_Q14,               /* I    Spectral tilt                       */
+    SKP_int32           LF_shp_Q14,             /* I                                        */
+    SKP_int32           Gain_Q16,               /* I                                        */
+    SKP_int             Lambda_Q10,             /* I                                        */
+    SKP_int             offset_Q10,             /* I                                        */
+    SKP_int             length,                 /* I    Input length                        */
+    SKP_int             subfr,                  /* I    Subframe number                     */
+    SKP_int             shapingLPCOrder,        /* I    Shaping LPC filter order            */
+    SKP_int             predictLPCOrder,        /* I    Prediction filter order             */
+    SKP_int             warping_Q16,            /* I                                        */
+    SKP_int             nStatesDelayedDecision, /* I    Number of states in decision tree   */
+    SKP_int             *smpl_buf_idx,          /* I    Index to newest samples in buffers  */
+    SKP_int             decisionDelay           /* I                                        */
+);
+
+void SKP_Silk_NSQ_del_dec(
+    SKP_Silk_encoder_state          *psEncC,                                    /* I/O  Encoder State                       */
+    SKP_Silk_encoder_control        *psEncCtrlC,                                /* I    Encoder Control                     */
+    SKP_Silk_nsq_state              *NSQ,                                       /* I/O  NSQ state                           */
+    const SKP_int16                 x[],                                        /* I    Prefiltered input signal            */
+    SKP_int8                        q[],                                        /* O    Quantized pulse signal              */
+    const SKP_int                   LSFInterpFactor_Q2,                         /* I    LSF interpolation factor in Q2      */
+    const SKP_int16                 PredCoef_Q12[ 2 * MAX_LPC_ORDER ],          /* I    Prediction coefs                    */
+    const SKP_int16                 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ],        /* I    LT prediction coefs                 */
+    const SKP_int16                 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ],  /* I                                        */
+    const SKP_int                   HarmShapeGain_Q14[ MAX_NB_SUBFR ],              /* I                                        */
+    const SKP_int                   Tilt_Q14[ MAX_NB_SUBFR ],                       /* I    Spectral tilt                       */
+    const SKP_int32                 LF_shp_Q14[ MAX_NB_SUBFR ],                     /* I                                        */
+    const SKP_int32                 Gains_Q16[ MAX_NB_SUBFR ],                      /* I                                        */
+    const SKP_int                   Lambda_Q10,                                 /* I                                        */
+    const SKP_int                   LTP_scale_Q14                               /* I    LTP state scaling                   */
+)
+{
+    SKP_int     i, k, lag, start_idx, LSF_interpolation_flag, Winner_ind, subfr;
+    SKP_int     last_smple_idx, smpl_buf_idx, decisionDelay, subfr_length;
+    const SKP_int16 *A_Q12, *B_Q14, *AR_shp_Q13;
+    SKP_int16   *pxq;
+    SKP_int32   sLTP_Q16[ 2 * MAX_FRAME_LENGTH ];
+    SKP_int16   sLTP[     2 * MAX_FRAME_LENGTH ];
+    SKP_int32   HarmShapeFIRPacked_Q14;
+    SKP_int     offset_Q10;
+    SKP_int32   FiltState[ MAX_LPC_ORDER ], RDmin_Q10;
+    SKP_int32   x_sc_Q10[ MAX_SUB_FRAME_LENGTH ];
+    NSQ_del_dec_struct psDelDec[ MAX_DEL_DEC_STATES ];
+    NSQ_del_dec_struct *psDD;
+
+    subfr_length = psEncC->subfr_length;
+
+    /* Set unvoiced lag to the previous one, overwrite later for voiced */
+    lag = NSQ->lagPrev;
+
+    SKP_assert( NSQ->prev_inv_gain_Q16 != 0 );
+
+    /* Initialize delayed decision states */
+    SKP_memset( psDelDec, 0, psEncC->nStatesDelayedDecision * sizeof( NSQ_del_dec_struct ) );
+    for( k = 0; k < psEncC->nStatesDelayedDecision; k++ ) {
+        psDD                 = &psDelDec[ k ];
+        psDD->Seed           = ( k + psEncCtrlC->Seed ) & 3;
+        psDD->SeedInit       = psDD->Seed;
+        psDD->RD_Q10         = 0;
+        psDD->LF_AR_Q12      = NSQ->sLF_AR_shp_Q12;
+        psDD->Shape_Q10[ 0 ] = NSQ->sLTP_shp_Q10[ psEncC->ltp_mem_length - 1 ];
+        SKP_memcpy( psDD->sLPC_Q14, NSQ->sLPC_Q14, NSQ_LPC_BUF_LENGTH * sizeof( SKP_int32 ) );
+        SKP_memcpy( psDD->sAR2_Q14, NSQ->sAR2_Q14, sizeof( NSQ->sAR2_Q14 ) );
+    }
+
+    offset_Q10   = SKP_Silk_Quantization_Offsets_Q10[ psEncCtrlC->sigtype ][ psEncCtrlC->QuantOffsetType ];
+    smpl_buf_idx = 0; /* index of oldest samples */
+
+    decisionDelay = SKP_min_int( DECISION_DELAY, subfr_length );
+    /* For voiced frames limit the decision delay to lower than the pitch lag */
+    if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) {
+        for( k = 0; k < psEncC->nb_subfr; k++ ) {
+            decisionDelay = SKP_min_int( decisionDelay, psEncCtrlC->pitchL[ k ] - LTP_ORDER / 2 - 1 );
+        }
+    }
+
+    if( LSFInterpFactor_Q2 == ( 1 << 2 ) ) {
+        LSF_interpolation_flag = 0;
+    } else {
+        LSF_interpolation_flag = 1;
+    }
+
+    /* Setup pointers to start of sub frame */
+    pxq                   = &NSQ->xq[ psEncC->ltp_mem_length ];
+    NSQ->sLTP_shp_buf_idx = psEncC->ltp_mem_length;
+    NSQ->sLTP_buf_idx     = psEncC->ltp_mem_length;
+    subfr = 0;
+    for( k = 0; k < psEncC->nb_subfr; k++ ) {
+        A_Q12      = &PredCoef_Q12[ ( ( k >> 1 ) | ( 1 - LSF_interpolation_flag ) ) * MAX_LPC_ORDER ];
+        B_Q14      = &LTPCoef_Q14[ k * LTP_ORDER           ];
+        AR_shp_Q13 = &AR2_Q13[     k * MAX_SHAPE_LPC_ORDER ];
+
+        NSQ->rewhite_flag = 0;
+        if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) {
+            /* Voiced */
+            lag = psEncCtrlC->pitchL[ k ];
+
+            /* Re-whitening */
+            if( ( k & ( 3 - SKP_LSHIFT( LSF_interpolation_flag, 1 ) ) ) == 0 ) {
+                if( k == 2 ) {
+                    /* RESET DELAYED DECISIONS */
+                    /* Find winner */
+                    RDmin_Q10 = psDelDec[ 0 ].RD_Q10;
+                    Winner_ind = 0;
+                    for( i = 1; i < psEncC->nStatesDelayedDecision; i++ ) {
+                        if( psDelDec[ i ].RD_Q10 < RDmin_Q10 ) {
+                            RDmin_Q10 = psDelDec[ i ].RD_Q10;
+                            Winner_ind = i;
+                        }
+                    }
+                    for( i = 0; i < psEncC->nStatesDelayedDecision; i++ ) {
+                        if( i != Winner_ind ) {
+                            psDelDec[ i ].RD_Q10 += ( SKP_int32_MAX >> 4 );
+                            SKP_assert( psDelDec[ i ].RD_Q10 >= 0 );
+                        }
+                    }
+                    
+                    /* Copy final part of signals from winner state to output and long-term filter states */
+                    psDD = &psDelDec[ Winner_ind ];
+                    last_smple_idx = smpl_buf_idx + decisionDelay;
+                    for( i = 0; i < decisionDelay; i++ ) {
+                        last_smple_idx = ( last_smple_idx - 1 ) & DECISION_DELAY_MASK;
+                        q[   i - decisionDelay ] = ( SKP_int )SKP_RSHIFT( psDD->Q_Q10[ last_smple_idx ], 10 );
+                        pxq[ i - decisionDelay ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( 
+                            SKP_SMULWW( psDD->Xq_Q10[ last_smple_idx ], 
+                            psDD->Gain_Q16[ last_smple_idx ] ), 10 ) );
+                        NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - decisionDelay + i ] = psDD->Shape_Q10[ last_smple_idx ];
+                    }
+
+                    subfr = 0;
+                }
+
+                /* Rewhiten with new A coefs */
+                start_idx = psEncC->ltp_mem_length - lag - psEncC->predictLPCOrder - LTP_ORDER / 2;
+                start_idx = SKP_LIMIT_int( start_idx, 0, psEncC->ltp_mem_length - psEncC->predictLPCOrder );
+                
+                SKP_memset( FiltState, 0, psEncC->predictLPCOrder * sizeof( SKP_int32 ) );
+                SKP_Silk_MA_Prediction( &NSQ->xq[ start_idx + k * psEncC->subfr_length ], 
+                    A_Q12, FiltState, sLTP + start_idx, psEncC->ltp_mem_length - start_idx, psEncC->predictLPCOrder );
+
+                NSQ->sLTP_buf_idx = psEncC->ltp_mem_length;
+                NSQ->rewhite_flag = 1;
+            }
+        }
+
+        /* Noise shape parameters */
+        SKP_assert( HarmShapeGain_Q14[ k ] >= 0 );
+        HarmShapeFIRPacked_Q14  =                          SKP_RSHIFT( HarmShapeGain_Q14[ k ], 2 );
+        HarmShapeFIRPacked_Q14 |= SKP_LSHIFT( ( SKP_int32 )SKP_RSHIFT( HarmShapeGain_Q14[ k ], 1 ), 16 );
+
+        SKP_Silk_nsq_del_dec_scale_states( NSQ, psDelDec, x, x_sc_Q10, 
+            subfr_length, sLTP, sLTP_Q16, k, psEncC->nStatesDelayedDecision, smpl_buf_idx,
+            LTP_scale_Q14, Gains_Q16, psEncCtrlC->pitchL );
+
+        SKP_Silk_noise_shape_quantizer_del_dec( NSQ, psDelDec, psEncCtrlC->sigtype, x_sc_Q10, q, pxq, sLTP_Q16,
+            A_Q12, B_Q14, AR_shp_Q13, lag, HarmShapeFIRPacked_Q14, Tilt_Q14[ k ], LF_shp_Q14[ k ], Gains_Q16[ k ], 
+            Lambda_Q10, offset_Q10, psEncC->subfr_length, subfr++, psEncC->shapingLPCOrder, psEncC->predictLPCOrder, 
+            psEncCtrlC->warping_Q16, psEncC->nStatesDelayedDecision, &smpl_buf_idx, decisionDelay );
+        
+        x   += psEncC->subfr_length;
+        q   += psEncC->subfr_length;
+        pxq += psEncC->subfr_length;
+    }
+
+    /* Find winner */
+    RDmin_Q10 = psDelDec[ 0 ].RD_Q10;
+    Winner_ind = 0;
+    for( k = 1; k < psEncC->nStatesDelayedDecision; k++ ) {
+        if( psDelDec[ k ].RD_Q10 < RDmin_Q10 ) {
+            RDmin_Q10 = psDelDec[ k ].RD_Q10;
+            Winner_ind = k;
+        }
+    }
+    
+    /* Copy final part of signals from winner state to output and long-term filter states */
+    psDD = &psDelDec[ Winner_ind ];
+    psEncCtrlC->Seed = psDD->SeedInit;
+    last_smple_idx = smpl_buf_idx + decisionDelay;
+    for( i = 0; i < decisionDelay; i++ ) {
+        last_smple_idx = ( last_smple_idx - 1 ) & DECISION_DELAY_MASK;
+        q[   i - decisionDelay ] = ( SKP_int8 )SKP_RSHIFT( psDD->Q_Q10[ last_smple_idx ], 10 );
+        pxq[ i - decisionDelay ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( 
+            SKP_SMULWW( psDD->Xq_Q10[ last_smple_idx ], psDD->Gain_Q16[ last_smple_idx ] ), 10 ) );
+        NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - decisionDelay + i ] = psDD->Shape_Q10[ last_smple_idx ];
+        sLTP_Q16[          NSQ->sLTP_buf_idx     - decisionDelay + i ] = psDD->Pred_Q16[  last_smple_idx ];
+    }
+    SKP_memcpy( NSQ->sLPC_Q14, &psDD->sLPC_Q14[ psEncC->subfr_length ], NSQ_LPC_BUF_LENGTH * sizeof( SKP_int32 ) );
+    SKP_memcpy( NSQ->sAR2_Q14, psDD->sAR2_Q14, sizeof( psDD->sAR2_Q14 ) );
+
+    /* Update states */
+    NSQ->sLF_AR_shp_Q12    = psDD->LF_AR_Q12;
+    NSQ->lagPrev           = psEncCtrlC->pitchL[ psEncC->nb_subfr - 1 ];
+
+    /* Save quantized speech and noise shaping signals */
+    SKP_memmove( NSQ->xq,           &NSQ->xq[           psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( SKP_int16 ) );
+    SKP_memmove( NSQ->sLTP_shp_Q10, &NSQ->sLTP_shp_Q10[ psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( SKP_int32 ) );
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+    DEBUG_STORE_DATA( sLTP_Q16, &sLTP_Q16[ psEncC->frame_length ], psEncC->frame_length * sizeof( SKP_int32 ) );
+    DEBUG_STORE_DATA( xq.dat, &NSQ->xq[ psEncC->ltp_mem_length - psEncC->frame_length], psEncC->frame_length * sizeof( SKP_int16 ) );
+#endif
+}
+
+/******************************************/
+/* Noise shape quantizer for one subframe */
+/******************************************/
+SKP_INLINE void SKP_Silk_noise_shape_quantizer_del_dec(
+    SKP_Silk_nsq_state  *NSQ,                   /* I/O  NSQ state                           */
+    NSQ_del_dec_struct  psDelDec[],             /* I/O  Delayed decision states             */
+    SKP_int             sigtype,                /* I    Signal type                         */
+    const SKP_int32     x_Q10[],                /* I                                        */
+    SKP_int8            q[],                    /* O                                        */
+    SKP_int16           xq[],                   /* O                                        */
+    SKP_int32           sLTP_Q16[],             /* I/O  LTP filter state                    */
+    const SKP_int16     a_Q12[],                /* I    Short term prediction coefs         */
+    const SKP_int16     b_Q14[],                /* I    Long term prediction coefs          */
+    const SKP_int16     AR_shp_Q13[],           /* I    Noise shaping coefs                 */
+    SKP_int             lag,                    /* I    Pitch lag                           */
+    SKP_int32           HarmShapeFIRPacked_Q14, /* I                                        */
+    SKP_int             Tilt_Q14,               /* I    Spectral tilt                       */
+    SKP_int32           LF_shp_Q14,             /* I                                        */
+    SKP_int32           Gain_Q16,               /* I                                        */
+    SKP_int             Lambda_Q10,             /* I                                        */
+    SKP_int             offset_Q10,             /* I                                        */
+    SKP_int             length,                 /* I    Input length                        */
+    SKP_int             subfr,                  /* I    Subframe number                     */
+    SKP_int             shapingLPCOrder,        /* I    Shaping LPC filter order            */
+    SKP_int             predictLPCOrder,        /* I    Prediction filter order             */
+    SKP_int             warping_Q16,            /* I                                        */
+    SKP_int             nStatesDelayedDecision, /* I    Number of states in decision tree   */
+    SKP_int             *smpl_buf_idx,          /* I    Index to newest samples in buffers  */
+    SKP_int             decisionDelay           /* I                                        */
+)
+{
+    SKP_int     i, j, k, Winner_ind, RDmin_ind, RDmax_ind, last_smple_idx;
+    SKP_int32   Winner_rand_state;
+    SKP_int32   LTP_pred_Q14, LPC_pred_Q10, n_AR_Q10, n_LTP_Q14;
+    SKP_int32   n_LF_Q10, r_Q10, rr_Q20, rd1_Q10, rd2_Q10, RDmin_Q10, RDmax_Q10;
+    SKP_int32   q1_Q10, q2_Q10, dither, exc_Q10, LPC_exc_Q10, xq_Q10;
+    SKP_int32   tmp1, tmp2, sLF_AR_shp_Q10;
+    SKP_int32   *pred_lag_ptr, *shp_lag_ptr, *psLPC_Q14;
+    NSQ_sample_struct  psSampleState[ MAX_DEL_DEC_STATES ][ 2 ];
+    NSQ_del_dec_struct *psDD;
+    NSQ_sample_struct  *psSS;
+
+    shp_lag_ptr  = &NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - lag + HARM_SHAPE_FIR_TAPS / 2 ];
+    pred_lag_ptr = &sLTP_Q16[ NSQ->sLTP_buf_idx - lag + LTP_ORDER / 2 ];
+
+    for( i = 0; i < length; i++ ) {
+        /* Perform common calculations used in all states */
+
+        /* Long-term prediction */
+        if( sigtype == SIG_TYPE_VOICED ) {
+            /* Unrolled loop */
+            LTP_pred_Q14 = SKP_SMULWB(               pred_lag_ptr[  0 ], b_Q14[ 0 ] );
+            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -1 ], b_Q14[ 1 ] );
+            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -2 ], b_Q14[ 2 ] );
+            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -3 ], b_Q14[ 3 ] );
+            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -4 ], b_Q14[ 4 ] );
+            pred_lag_ptr++;
+        } else {
+            LTP_pred_Q14 = 0;
+        }
+
+        /* Long-term shaping */
+        if( lag > 0 ) {
+            /* Symmetric, packed FIR coefficients */
+            n_LTP_Q14 = SKP_SMULWB( SKP_ADD32( shp_lag_ptr[ 0 ], shp_lag_ptr[ -2 ] ), HarmShapeFIRPacked_Q14 );
+            n_LTP_Q14 = SKP_SMLAWT( n_LTP_Q14, shp_lag_ptr[ -1 ],                     HarmShapeFIRPacked_Q14 );
+            n_LTP_Q14 = SKP_LSHIFT( n_LTP_Q14, 6 );
+            shp_lag_ptr++;
+        } else {
+            n_LTP_Q14 = 0;
+        }
+
+        for( k = 0; k < nStatesDelayedDecision; k++ ) {
+            /* Delayed decision state */
+            psDD = &psDelDec[ k ];
+
+            /* Sample state */
+            psSS = psSampleState[ k ];
+
+            /* Generate dither */
+            psDD->Seed = SKP_RAND( psDD->Seed );
+
+            /* dither = rand_seed < 0 ? 0xFFFFFFFF : 0; */
+            dither = SKP_RSHIFT( psDD->Seed, 31 );
+            
+            /* Pointer used in short term prediction and shaping */
+            psLPC_Q14 = &psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - 1 + i ];
+            /* Short-term prediction */
+            SKP_assert( predictLPCOrder >= 10 );            /* check that unrolling works */
+            SKP_assert( ( predictLPCOrder  & 1 ) == 0 );    /* check that order is even */
+            SKP_assert( ( (SKP_int64)a_Q12 & 3 ) == 0 );    /* check that array starts at 4-byte aligned address */
+            /* Partially unrolled */
+            LPC_pred_Q10 = SKP_SMULWB(               psLPC_Q14[  0 ], a_Q12[ 0 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -1 ], a_Q12[ 1 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -2 ], a_Q12[ 2 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -3 ], a_Q12[ 3 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -4 ], a_Q12[ 4 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -5 ], a_Q12[ 5 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -6 ], a_Q12[ 6 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -7 ], a_Q12[ 7 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -8 ], a_Q12[ 8 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -9 ], a_Q12[ 9 ] );
+            for( j = 10; j < predictLPCOrder; j ++ ) {
+                LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -j ], a_Q12[ j ] );
+            }
+
+            /* Noise shape feedback */
+            SKP_assert( ( shapingLPCOrder & 1 ) == 0 );   /* check that order is even */
+            /* Output of lowpass section */
+            tmp2 = SKP_SMLAWB( psLPC_Q14[ 0 ], psDD->sAR2_Q14[ 0 ], warping_Q16 );
+            /* Output of allpass section */
+            tmp1 = SKP_SMLAWB( psDD->sAR2_Q14[ 0 ], psDD->sAR2_Q14[ 1 ] - tmp2, warping_Q16 );
+            psDD->sAR2_Q14[ 0 ] = tmp2;
+            n_AR_Q10 = SKP_SMULWB( tmp2, AR_shp_Q13[ 0 ] );
+            /* Loop over allpass sections */
+            for( j = 2; j < shapingLPCOrder; j += 2 ) {
+                /* Output of allpass section */
+                tmp2 = SKP_SMLAWB( psDD->sAR2_Q14[ j - 1 ], psDD->sAR2_Q14[ j + 0 ] - tmp1, warping_Q16 );
+                psDD->sAR2_Q14[ j - 1 ] = tmp1;
+                n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, tmp1, AR_shp_Q13[ j - 1 ] );
+                /* Output of allpass section */
+                tmp1 = SKP_SMLAWB( psDD->sAR2_Q14[ j + 0 ], psDD->sAR2_Q14[ j + 1 ] - tmp2, warping_Q16 );
+                psDD->sAR2_Q14[ j + 0 ] = tmp2;
+                n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, tmp2, AR_shp_Q13[ j ] );
+            }
+            psDD->sAR2_Q14[ shapingLPCOrder - 1 ] = tmp1;
+            n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, tmp1, AR_shp_Q13[ shapingLPCOrder - 1 ] );
+
+            n_AR_Q10 = SKP_RSHIFT( n_AR_Q10, 1 );           /* Q11 -> Q10 */
+            n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, psDD->LF_AR_Q12, Tilt_Q14 );
+
+            n_LF_Q10 = SKP_LSHIFT( SKP_SMULWB( psDD->Shape_Q10[ *smpl_buf_idx ], LF_shp_Q14 ), 2 ); 
+            n_LF_Q10 = SKP_SMLAWT( n_LF_Q10, psDD->LF_AR_Q12, LF_shp_Q14 );       
+
+            /* Input minus prediction plus noise feedback                       */
+            /* r = x[ i ] - LTP_pred - LPC_pred + n_AR + n_Tilt + n_LF + n_LTP  */
+            tmp1  = SKP_SUB32( LTP_pred_Q14, n_LTP_Q14 );                       /* Add Q14 stuff */
+            tmp1  = SKP_RSHIFT( tmp1, 4 );                                      /* convert to Q10 */
+            tmp1  = SKP_ADD32( tmp1, LPC_pred_Q10 );                            /* add Q10 stuff */ 
+            tmp1  = SKP_SUB32( tmp1, n_AR_Q10 );                                /* subtract Q10 stuff */ 
+            tmp1  = SKP_SUB32( tmp1, n_LF_Q10 );                                /* subtract Q10 stuff */ 
+            r_Q10 = SKP_SUB32( x_Q10[ i ], tmp1 );                              /* residual error Q10 */
+            
+            /* Flip sign depending on dither */
+            r_Q10 = ( r_Q10 ^ dither ) - dither;
+            r_Q10 = SKP_SUB32( r_Q10, offset_Q10 );
+            r_Q10 = SKP_LIMIT_32( r_Q10, -64 << 10, 64 << 10 );
+
+            /* Find two quantization level candidates and measure their rate-distortion */
+            if( r_Q10 < -1536 ) {
+                q1_Q10  = SKP_LSHIFT( SKP_RSHIFT_ROUND( r_Q10, 10 ), 10 );
+                r_Q10   = SKP_SUB32( r_Q10, q1_Q10 );
+                rd1_Q10 = SKP_RSHIFT( SKP_SMLABB( SKP_MUL( -SKP_ADD32( q1_Q10, offset_Q10 ), Lambda_Q10 ), r_Q10, r_Q10 ), 10 );
+                rd2_Q10 = SKP_ADD32( rd1_Q10, 1024 );
+                rd2_Q10 = SKP_SUB32( rd2_Q10, SKP_ADD_LSHIFT32( Lambda_Q10, r_Q10, 1 ) );
+                q2_Q10  = SKP_ADD32( q1_Q10, 1024 );
+            } else if( r_Q10 > 512 ) {
+                q1_Q10  = SKP_LSHIFT( SKP_RSHIFT_ROUND( r_Q10, 10 ), 10 );
+                r_Q10   = SKP_SUB32( r_Q10, q1_Q10 );
+                rd1_Q10 = SKP_RSHIFT( SKP_SMLABB( SKP_MUL( SKP_ADD32( q1_Q10, offset_Q10 ), Lambda_Q10 ), r_Q10, r_Q10 ), 10 );
+                rd2_Q10 = SKP_ADD32( rd1_Q10, 1024 );
+                rd2_Q10 = SKP_SUB32( rd2_Q10, SKP_SUB_LSHIFT32( Lambda_Q10, r_Q10, 1 ) );
+                q2_Q10  = SKP_SUB32( q1_Q10, 1024 );
+            } else {            /* r_Q10 >= -1536 && q1_Q10 <= 512 */
+                rr_Q20  = SKP_SMULBB( offset_Q10, Lambda_Q10 );
+                rd2_Q10 = SKP_RSHIFT( SKP_SMLABB( rr_Q20, r_Q10, r_Q10 ), 10 );
+                rd1_Q10 = SKP_ADD32( rd2_Q10, 1024 );
+                rd1_Q10 = SKP_ADD32( rd1_Q10, SKP_SUB_RSHIFT32( SKP_ADD_LSHIFT32( Lambda_Q10, r_Q10, 1 ), rr_Q20, 9 ) );
+                q1_Q10  = -1024;
+                q2_Q10  = 0;
+            }
+
+            if( rd1_Q10 < rd2_Q10 ) {
+                psSS[ 0 ].RD_Q10 = SKP_ADD32( psDD->RD_Q10, rd1_Q10 ); 
+                psSS[ 1 ].RD_Q10 = SKP_ADD32( psDD->RD_Q10, rd2_Q10 );
+                psSS[ 0 ].Q_Q10 = q1_Q10;
+                psSS[ 1 ].Q_Q10 = q2_Q10;
+            } else {
+                psSS[ 0 ].RD_Q10 = SKP_ADD32( psDD->RD_Q10, rd2_Q10 );
+                psSS[ 1 ].RD_Q10 = SKP_ADD32( psDD->RD_Q10, rd1_Q10 );
+                psSS[ 0 ].Q_Q10 = q2_Q10;
+                psSS[ 1 ].Q_Q10 = q1_Q10;
+            }
+
+            /* Update states for best quantization */
+
+            /* Quantized excitation */
+            exc_Q10 = SKP_ADD32( offset_Q10, psSS[ 0 ].Q_Q10 );
+            exc_Q10 = ( exc_Q10 ^ dither ) - dither;
+
+            /* Add predictions */
+            LPC_exc_Q10 = exc_Q10 + SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 );
+            xq_Q10      = SKP_ADD32( LPC_exc_Q10, LPC_pred_Q10 );
+
+            /* Update states */
+            sLF_AR_shp_Q10         = SKP_SUB32(  xq_Q10, n_AR_Q10 );
+            psSS[ 0 ].sLTP_shp_Q10 = SKP_SUB32(  sLF_AR_shp_Q10, n_LF_Q10 );
+            psSS[ 0 ].LF_AR_Q12    = SKP_LSHIFT( sLF_AR_shp_Q10, 2 );
+            psSS[ 0 ].xq_Q14       = SKP_LSHIFT( xq_Q10,         4 );
+            psSS[ 0 ].LPC_exc_Q16  = SKP_LSHIFT( LPC_exc_Q10,    6 );
+
+            /* Update states for second best quantization */
+
+            /* Quantized excitation */
+            exc_Q10 = SKP_ADD32( offset_Q10, psSS[ 1 ].Q_Q10 );
+            exc_Q10 = ( exc_Q10 ^ dither ) - dither;
+
+            /* Add predictions */
+            LPC_exc_Q10 = exc_Q10 + SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 );
+            xq_Q10      = SKP_ADD32( LPC_exc_Q10, LPC_pred_Q10 );
+
+            /* Update states */
+            sLF_AR_shp_Q10         = SKP_SUB32(  xq_Q10, n_AR_Q10 );
+            psSS[ 1 ].sLTP_shp_Q10 = SKP_SUB32(  sLF_AR_shp_Q10, n_LF_Q10 );
+            psSS[ 1 ].LF_AR_Q12    = SKP_LSHIFT( sLF_AR_shp_Q10, 2 );
+            psSS[ 1 ].xq_Q14       = SKP_LSHIFT( xq_Q10,         4 );
+            psSS[ 1 ].LPC_exc_Q16  = SKP_LSHIFT( LPC_exc_Q10,    6 );
+        }
+
+        *smpl_buf_idx  = ( *smpl_buf_idx - 1 ) & DECISION_DELAY_MASK;                   /* Index to newest samples              */
+        last_smple_idx = ( *smpl_buf_idx + decisionDelay ) & DECISION_DELAY_MASK;       /* Index to decisionDelay old samples   */
+
+        /* Find winner */
+        RDmin_Q10 = psSampleState[ 0 ][ 0 ].RD_Q10;
+        Winner_ind = 0;
+        for( k = 1; k < nStatesDelayedDecision; k++ ) {
+            if( psSampleState[ k ][ 0 ].RD_Q10 < RDmin_Q10 ) {
+                RDmin_Q10   = psSampleState[ k ][ 0 ].RD_Q10;
+                Winner_ind = k;
+            }
+        }
+
+        /* Increase RD values of expired states */
+        Winner_rand_state = psDelDec[ Winner_ind ].RandState[ last_smple_idx ];
+        for( k = 0; k < nStatesDelayedDecision; k++ ) {
+            if( psDelDec[ k ].RandState[ last_smple_idx ] != Winner_rand_state ) {
+                psSampleState[ k ][ 0 ].RD_Q10 = SKP_ADD32( psSampleState[ k ][ 0 ].RD_Q10, ( SKP_int32_MAX >> 4 ) );
+                psSampleState[ k ][ 1 ].RD_Q10 = SKP_ADD32( psSampleState[ k ][ 1 ].RD_Q10, ( SKP_int32_MAX >> 4 ) );
+                SKP_assert( psSampleState[ k ][ 0 ].RD_Q10 >= 0 );
+            }
+        }
+
+        /* Find worst in first set and best in second set */
+        RDmax_Q10  = psSampleState[ 0 ][ 0 ].RD_Q10;
+        RDmin_Q10  = psSampleState[ 0 ][ 1 ].RD_Q10;
+        RDmax_ind = 0;
+        RDmin_ind = 0;
+        for( k = 1; k < nStatesDelayedDecision; k++ ) {
+            /* find worst in first set */
+            if( psSampleState[ k ][ 0 ].RD_Q10 > RDmax_Q10 ) {
+                RDmax_Q10  = psSampleState[ k ][ 0 ].RD_Q10;
+                RDmax_ind = k;
+            }
+            /* find best in second set */
+            if( psSampleState[ k ][ 1 ].RD_Q10 < RDmin_Q10 ) {
+                RDmin_Q10  = psSampleState[ k ][ 1 ].RD_Q10;
+                RDmin_ind = k;
+            }
+        }
+
+        /* Replace a state if best from second set outperforms worst in first set */
+        if( RDmin_Q10 < RDmax_Q10 ) {
+            SKP_Silk_copy_del_dec_state( &psDelDec[ RDmax_ind ], &psDelDec[ RDmin_ind ], i ); 
+            SKP_memcpy( &psSampleState[ RDmax_ind ][ 0 ], &psSampleState[ RDmin_ind ][ 1 ], sizeof( NSQ_sample_struct ) );
+        }
+
+        /* Write samples from winner to output and long-term filter states */
+        psDD = &psDelDec[ Winner_ind ];
+        if( subfr > 0 || i >= decisionDelay ) {
+            q[  i - decisionDelay ] = ( SKP_int8 )SKP_RSHIFT( psDD->Q_Q10[ last_smple_idx ], 10 );
+            xq[ i - decisionDelay ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( 
+                SKP_SMULWW( psDD->Xq_Q10[ last_smple_idx ], psDD->Gain_Q16[ last_smple_idx ] ), 10 ) );
+            NSQ->sLTP_shp_Q10[ NSQ->sLTP_shp_buf_idx - decisionDelay ] = psDD->Shape_Q10[ last_smple_idx ];
+            sLTP_Q16[          NSQ->sLTP_buf_idx     - decisionDelay ] = psDD->Pred_Q16[  last_smple_idx ];
+        }
+        NSQ->sLTP_shp_buf_idx++;
+        NSQ->sLTP_buf_idx++;
+
+        /* Update states */
+        for( k = 0; k < nStatesDelayedDecision; k++ ) {
+            psDD                                     = &psDelDec[ k ];
+            psSS                                     = &psSampleState[ k ][ 0 ];
+            psDD->LF_AR_Q12                          = psSS->LF_AR_Q12;
+            psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH + i ] = psSS->xq_Q14;
+            psDD->Xq_Q10[    *smpl_buf_idx ]         = SKP_RSHIFT( psSS->xq_Q14, 4 );
+            psDD->Q_Q10[     *smpl_buf_idx ]         = psSS->Q_Q10;
+            psDD->Pred_Q16[  *smpl_buf_idx ]         = psSS->LPC_exc_Q16;
+            psDD->Shape_Q10[ *smpl_buf_idx ]         = psSS->sLTP_shp_Q10;
+            psDD->Seed                               = SKP_ADD_RSHIFT32( psDD->Seed, psSS->Q_Q10, 10 );
+            psDD->RandState[ *smpl_buf_idx ]         = psDD->Seed;
+            psDD->RD_Q10                             = psSS->RD_Q10;
+            psDD->Gain_Q16[  *smpl_buf_idx ]         = Gain_Q16;
+        }
+    }
+    /* Update LPC states */
+    for( k = 0; k < nStatesDelayedDecision; k++ ) {
+        psDD = &psDelDec[ k ];
+        SKP_memcpy( psDD->sLPC_Q14, &psDD->sLPC_Q14[ length ], NSQ_LPC_BUF_LENGTH * sizeof( SKP_int32 ) );
+    }
+}
+
+SKP_INLINE void SKP_Silk_nsq_del_dec_scale_states(
+    SKP_Silk_nsq_state  *NSQ,                   /* I/O  NSQ state                           */
+    NSQ_del_dec_struct  psDelDec[],             /* I/O  Delayed decision states             */
+    const SKP_int16     x[],                    /* I    Input in Q0                         */
+    SKP_int32           x_sc_Q10[],             /* O    Input scaled with 1/Gain in Q10     */
+    SKP_int             length,                 /* I    Length of input                     */
+    SKP_int16           sLTP[],                 /* I    Re-whitened LTP state in Q0         */
+    SKP_int32           sLTP_Q16[],             /* O    LTP state matching scaled input     */
+    SKP_int             subfr,                  /* I    Subframe number                     */
+    SKP_int             nStatesDelayedDecision, /* I    Number of del dec states            */
+    SKP_int             smpl_buf_idx,           /* I    Index to newest samples in buffers  */
+    const SKP_int       LTP_scale_Q14,          /* I    LTP state scaling                   */
+    const SKP_int32     Gains_Q16[ MAX_NB_SUBFR ],  /* I                                        */
+    const SKP_int       pitchL[ MAX_NB_SUBFR ]      /* I    Pitch lag                           */
+)
+{
+    SKP_int            i, k, scale_length, lag;
+    SKP_int32          inv_gain_Q16, gain_adj_Q16, inv_gain_Q32;
+    NSQ_del_dec_struct *psDD;
+
+    inv_gain_Q16 = SKP_INVERSE32_varQ( SKP_max( Gains_Q16[ subfr ], 1 ), 32 );
+    inv_gain_Q16 = SKP_min( inv_gain_Q16, SKP_int16_MAX );
+    lag          = pitchL[ subfr ];
+    /* After rewhitening the LTP state is un-scaled. So scale with inv_gain_Q16 */
+    if( NSQ->rewhite_flag ) {
+        inv_gain_Q32 = SKP_LSHIFT( inv_gain_Q16, 16 );
+        if( subfr == 0 ) {
+            /* Do LTP downscaling */
+            inv_gain_Q32 = SKP_LSHIFT( SKP_SMULWB( inv_gain_Q32, LTP_scale_Q14 ), 2 );
+        }
+        for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) {
+            SKP_assert( i < MAX_FRAME_LENGTH );
+            sLTP_Q16[ i ] = SKP_SMULWB( inv_gain_Q32, sLTP[ i ] );
+        }
+    }
+
+    /* Adjust for changing gain */
+    if( inv_gain_Q16 != NSQ->prev_inv_gain_Q16 ) {
+        gain_adj_Q16 = SKP_DIV32_varQ( inv_gain_Q16, NSQ->prev_inv_gain_Q16, 16 );
+
+        for( k = 0; k < nStatesDelayedDecision; k++ ) {
+            psDD = &psDelDec[ k ];
+            
+            /* Scale scalar states */
+            psDD->LF_AR_Q12 = SKP_SMULWW( gain_adj_Q16, psDD->LF_AR_Q12 );
+            
+            /* scale short term state */
+            for( i = 0; i < NSQ_LPC_BUF_LENGTH; i++ ) {
+                psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - i - 1 ] = SKP_SMULWW( gain_adj_Q16, psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - i - 1 ] );
+            }
+            for( i = 0; i < MAX_SHAPE_LPC_ORDER; i++ ) {
+                psDD->sAR2_Q14[ i ] = SKP_SMULWW( gain_adj_Q16, psDD->sAR2_Q14[ i ] );
+            }
+            for( i = 0; i < DECISION_DELAY; i++ ) {
+                psDD->Pred_Q16[  i ] = SKP_SMULWW( gain_adj_Q16, psDD->Pred_Q16[  i ] );
+                psDD->Shape_Q10[ i ] = SKP_SMULWW( gain_adj_Q16, psDD->Shape_Q10[ i ] );
+            }
+        }
+
+        /* Scale long term shaping state */
+
+        /* Calculate length to be scaled, Worst case: Next frame is voiced with max lag */
+        scale_length = length * MAX_NB_SUBFR;                                               /* aprox max lag */
+        scale_length = scale_length - SKP_SMULBB( MAX_NB_SUBFR - ( subfr + 1 ), length );   /* subtract samples that will be too old in next frame */
+        scale_length = SKP_max_int( scale_length, lag + LTP_ORDER );                    /* make sure to scale whole pitch period if voiced */
+
+        for( i = NSQ->sLTP_shp_buf_idx - scale_length; i < NSQ->sLTP_shp_buf_idx; i++ ) {
+            NSQ->sLTP_shp_Q10[ i ] = SKP_SMULWW( gain_adj_Q16, NSQ->sLTP_shp_Q10[ i ] );
+        }
+
+        /* Scale LTP predict state */
+        if( NSQ->rewhite_flag == 0 ) {
+            for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) {
+                sLTP_Q16[ i ] = SKP_SMULWW( gain_adj_Q16, sLTP_Q16[ i ] );
+            }
+        }
+    }
+
+    /* Scale input */
+    for( i = 0; i < length; i++ ) {
+        x_sc_Q10[ i ] = SKP_RSHIFT( SKP_SMULBB( x[ i ], ( SKP_int16 )inv_gain_Q16 ), 6 );
+    }
+
+    /* save inv_gain */
+    SKP_assert( inv_gain_Q16 != 0 );
+    NSQ->prev_inv_gain_Q16 = inv_gain_Q16;
+}
+
+SKP_INLINE void SKP_Silk_copy_del_dec_state(
+    NSQ_del_dec_struct  *DD_dst,                /* I    Dst del dec state                   */
+    NSQ_del_dec_struct  *DD_src,                /* I    Src del dec state                   */
+    SKP_int             LPC_state_idx           /* I    Index to LPC buffer                 */
+)
+{
+    SKP_memcpy( DD_dst->RandState, DD_src->RandState, sizeof( DD_src->RandState ) );
+    SKP_memcpy( DD_dst->Q_Q10,     DD_src->Q_Q10,     sizeof( DD_src->Q_Q10     ) );
+    SKP_memcpy( DD_dst->Pred_Q16,  DD_src->Pred_Q16,  sizeof( DD_src->Pred_Q16  ) );
+    SKP_memcpy( DD_dst->Shape_Q10, DD_src->Shape_Q10, sizeof( DD_src->Shape_Q10 ) );
+    SKP_memcpy( DD_dst->Xq_Q10,    DD_src->Xq_Q10,    sizeof( DD_src->Xq_Q10    ) );
+    SKP_memcpy( DD_dst->sAR2_Q14,  DD_src->sAR2_Q14,  sizeof( DD_src->sAR2_Q14  ) );
+    SKP_memcpy( &DD_dst->sLPC_Q14[ LPC_state_idx ], &DD_src->sLPC_Q14[ LPC_state_idx ], NSQ_LPC_BUF_LENGTH * sizeof( SKP_int32 ) );
+    DD_dst->LF_AR_Q12 = DD_src->LF_AR_Q12;
+    DD_dst->Seed      = DD_src->Seed;
+    DD_dst->SeedInit  = DD_src->SeedInit;
+    DD_dst->RD_Q10    = DD_src->RD_Q10;
+}
--- /dev/null
+++ b/src_common/SKP_Silk_PLC.c
@@ -1,0 +1,387 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+#include "SKP_Silk_PLC.h"
+
+#define NB_ATT 2
+static const SKP_int16 HARM_ATT_Q15[NB_ATT]              = { 32440, 31130 }; /* 0.99, 0.95 */
+static const SKP_int16 PLC_RAND_ATTENUATE_V_Q15[NB_ATT]  = { 31130, 26214 }; /* 0.95, 0.8 */
+static const SKP_int16 PLC_RAND_ATTENUATE_UV_Q15[NB_ATT] = { 32440, 29491 }; /* 0.99, 0.9 */
+
+void SKP_Silk_PLC_Reset(
+    SKP_Silk_decoder_state      *psDec              /* I/O Decoder state        */
+)
+{
+    psDec->sPLC.pitchL_Q8 = SKP_RSHIFT( psDec->frame_length, 1 );
+}
+
+void SKP_Silk_PLC(
+    SKP_Silk_decoder_state      *psDec,             /* I Decoder state          */
+    SKP_Silk_decoder_control    *psDecCtrl,         /* I Decoder control        */
+    SKP_int16                   signal[],           /* O Concealed signal       */
+    SKP_int                     length,             /* I length of residual     */
+    SKP_int                     lost                /* I Loss flag              */
+)
+{
+    /* PLC control function */
+    if( psDec->fs_kHz != psDec->sPLC.fs_kHz ) {
+        SKP_Silk_PLC_Reset( psDec );
+        psDec->sPLC.fs_kHz = psDec->fs_kHz;
+    }
+
+    if( lost ) {
+        /****************************/
+        /* Generate Signal          */
+        /****************************/
+        SKP_Silk_PLC_conceal( psDec, psDecCtrl, signal, length );
+
+        psDec->lossCnt++;
+    } else {
+        /****************************/
+        /* Update state             */
+        /****************************/
+        SKP_Silk_PLC_update( psDec, psDecCtrl, signal, length );
+    }
+}
+
+/**************************************************/
+/* Update state of PLC                            */
+/**************************************************/
+void SKP_Silk_PLC_update(
+    SKP_Silk_decoder_state      *psDec,             /* (I/O) Decoder state          */
+    SKP_Silk_decoder_control    *psDecCtrl,         /* (I/O) Decoder control        */
+    SKP_int16                   signal[],
+    SKP_int                     length
+)
+{
+    SKP_int32 LTP_Gain_Q14, temp_LTP_Gain_Q14;
+    SKP_int   i, j;
+    SKP_Silk_PLC_struct *psPLC;
+
+    psPLC = &psDec->sPLC;
+
+    /* Update parameters used in case of packet loss */
+    psDec->prev_sigtype = psDecCtrl->sigtype;
+    LTP_Gain_Q14 = 0;
+    if( psDecCtrl->sigtype == SIG_TYPE_VOICED ) {
+        /* Find the parameters for the last subframe which contains a pitch pulse */
+        for( j = 0; j * psDec->subfr_length < psDecCtrl->pitchL[ psDec->nb_subfr - 1 ]; j++ ) {
+            if( j == psDec->nb_subfr ){
+                break;
+            }
+            temp_LTP_Gain_Q14 = 0;
+            for( i = 0; i < LTP_ORDER; i++ ) {
+                temp_LTP_Gain_Q14 += psDecCtrl->LTPCoef_Q14[ ( psDec->nb_subfr - 1 - j ) * LTP_ORDER  + i ];
+            }
+            if( temp_LTP_Gain_Q14 > LTP_Gain_Q14 ) {
+                LTP_Gain_Q14 = temp_LTP_Gain_Q14;
+                SKP_memcpy( psPLC->LTPCoef_Q14,
+                    &psDecCtrl->LTPCoef_Q14[ SKP_SMULBB( psDec->nb_subfr - 1 - j, LTP_ORDER ) ],
+                    LTP_ORDER * sizeof( SKP_int16 ) );
+
+                psPLC->pitchL_Q8 = SKP_LSHIFT( psDecCtrl->pitchL[ psDec->nb_subfr - 1 - j ], 8 );
+            }
+        }
+
+#if USE_SINGLE_TAP
+        SKP_memset( psPLC->LTPCoef_Q14, 0, LTP_ORDER * sizeof( SKP_int16 ) );
+        psPLC->LTPCoef_Q14[ LTP_ORDER / 2 ] = LTP_Gain_Q14;
+#endif
+
+        /* Limit LT coefs */
+        if( LTP_Gain_Q14 < V_PITCH_GAIN_START_MIN_Q14 ) {
+            SKP_int   scale_Q10;
+            SKP_int32 tmp;
+
+            tmp = SKP_LSHIFT( V_PITCH_GAIN_START_MIN_Q14, 10 );
+            scale_Q10 = SKP_DIV32( tmp, SKP_max( LTP_Gain_Q14, 1 ) );
+            for( i = 0; i < LTP_ORDER; i++ ) {
+                psPLC->LTPCoef_Q14[ i ] = SKP_RSHIFT( SKP_SMULBB( psPLC->LTPCoef_Q14[ i ], scale_Q10 ), 10 );
+            }
+        } else if( LTP_Gain_Q14 > V_PITCH_GAIN_START_MAX_Q14 ) {
+            SKP_int   scale_Q14;
+            SKP_int32 tmp;
+
+            tmp = SKP_LSHIFT( V_PITCH_GAIN_START_MAX_Q14, 14 );
+            scale_Q14 = SKP_DIV32( tmp, SKP_max( LTP_Gain_Q14, 1 ) );
+            for( i = 0; i < LTP_ORDER; i++ ) {
+                psPLC->LTPCoef_Q14[ i ] = SKP_RSHIFT( SKP_SMULBB( psPLC->LTPCoef_Q14[ i ], scale_Q14 ), 14 );
+            }
+        }
+    } else {
+        psPLC->pitchL_Q8 = SKP_LSHIFT( SKP_SMULBB( psDec->fs_kHz, 18 ), 8 );
+        SKP_memset( psPLC->LTPCoef_Q14, 0, LTP_ORDER * sizeof( SKP_int16 ));
+    }
+
+    /* Save LPC coeficients */
+    SKP_memcpy( psPLC->prevLPC_Q12, psDecCtrl->PredCoef_Q12[ 1 ], psDec->LPC_order * sizeof( SKP_int16 ) );
+    psPLC->prevLTP_scale_Q14 = psDecCtrl->LTP_scale_Q14;
+
+    /* Save Gains */
+    SKP_memcpy( psPLC->prevGain_Q16, psDecCtrl->Gains_Q16, psDec->nb_subfr * sizeof( SKP_int32 ) );
+}
+
+void SKP_Silk_PLC_conceal(
+    SKP_Silk_decoder_state      *psDec,             /* I/O Decoder state */
+    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O Decoder control */
+    SKP_int16                   signal[],           /* O concealed signal */
+    SKP_int                     length              /* I length of residual */
+)
+{
+    SKP_int   i, j, k;
+    SKP_int16 *B_Q14, exc_buf[ MAX_FRAME_LENGTH ], *exc_buf_ptr;
+    SKP_int16 rand_scale_Q14, A_Q12_tmp[ MAX_LPC_ORDER ];
+    SKP_int32 rand_seed, harm_Gain_Q15, rand_Gain_Q15;
+    SKP_int   lag, idx, shift1, shift2;
+    SKP_int32 energy1, energy2, *rand_ptr, *pred_lag_ptr;
+    SKP_int32 sig_Q10[ MAX_FRAME_LENGTH ], *sig_Q10_ptr, LPC_exc_Q10, LPC_pred_Q10,  LTP_pred_Q14;
+    SKP_Silk_PLC_struct *psPLC;
+    psPLC = &psDec->sPLC;
+
+    /* Update LTP buffer */
+    SKP_memmove( psDec->sLTP_Q16, &psDec->sLTP_Q16[ psDec->frame_length ], psDec->ltp_mem_length * sizeof( SKP_int32 ) );
+
+    /* LPC concealment. Apply BWE to previous LPC */
+    SKP_Silk_bwexpander( psPLC->prevLPC_Q12, psDec->LPC_order, BWE_COEF_Q16 );
+
+    /* Find random noise component */
+    /* Scale previous excitation signal */
+    exc_buf_ptr = exc_buf;
+    for( k = ( psDec->nb_subfr >> 1 ); k < psDec->nb_subfr; k++ ) {
+        for( i = 0; i < psDec->subfr_length; i++ ) {
+            exc_buf_ptr[ i ] = ( SKP_int16 )SKP_RSHIFT( 
+                SKP_SMULWW( psDec->exc_Q10[ i + k * psDec->subfr_length ], psPLC->prevGain_Q16[ k ] ), 10 );
+        }
+        exc_buf_ptr += psDec->subfr_length;
+    }
+    /* Find the subframe with lowest energy of the last two and use that as random noise generator */ 
+    SKP_Silk_sum_sqr_shift( &energy1, &shift1, exc_buf,                         psDec->subfr_length );
+    SKP_Silk_sum_sqr_shift( &energy2, &shift2, &exc_buf[ psDec->subfr_length ], psDec->subfr_length );
+        
+    if( SKP_RSHIFT( energy1, shift2 ) < SKP_RSHIFT( energy1, shift2 ) ) {
+        /* First sub-frame has lowest energy */
+        rand_ptr = &psDec->exc_Q10[ SKP_max_int( 0, 3 * psDec->subfr_length - RAND_BUF_SIZE ) ];
+    } else {
+        /* Second sub-frame has lowest energy */
+        rand_ptr = &psDec->exc_Q10[ SKP_max_int( 0, psDec->frame_length - RAND_BUF_SIZE ) ];
+    }
+
+    /* Setup Gain to random noise component */ 
+    B_Q14          = psPLC->LTPCoef_Q14;
+    rand_scale_Q14 = psPLC->randScale_Q14;
+
+    /* Setup attenuation gains */
+    harm_Gain_Q15 = HARM_ATT_Q15[ SKP_min_int( NB_ATT - 1, psDec->lossCnt ) ];
+    if( psDec->prev_sigtype == SIG_TYPE_VOICED ) {
+        rand_Gain_Q15 = PLC_RAND_ATTENUATE_V_Q15[  SKP_min_int( NB_ATT - 1, psDec->lossCnt ) ];
+    } else {
+        rand_Gain_Q15 = PLC_RAND_ATTENUATE_UV_Q15[ SKP_min_int( NB_ATT - 1, psDec->lossCnt ) ];
+    }
+
+    /* First Lost frame */
+    if( psDec->lossCnt == 0 ) {
+        rand_scale_Q14 = (1 << 14 );
+    
+        /* Reduce random noise Gain for voiced frames */
+        if( psDec->prev_sigtype == SIG_TYPE_VOICED ) {
+            for( i = 0; i < LTP_ORDER; i++ ) {
+                rand_scale_Q14 -= B_Q14[ i ];
+            }
+            rand_scale_Q14 = SKP_max_16( 3277, rand_scale_Q14 ); /* 0.2 */
+            rand_scale_Q14 = ( SKP_int16 )SKP_RSHIFT( SKP_SMULBB( rand_scale_Q14, psPLC->prevLTP_scale_Q14 ), 14 );
+        }
+
+        /* Reduce random noise for unvoiced frames with high LPC gain */
+        if( psDec->prev_sigtype == SIG_TYPE_UNVOICED ) {
+            SKP_int32 invGain_Q30, down_scale_Q30;
+            
+            SKP_Silk_LPC_inverse_pred_gain( &invGain_Q30, psPLC->prevLPC_Q12, psDec->LPC_order );
+            
+            down_scale_Q30 = SKP_min_32( SKP_RSHIFT( ( 1 << 30 ), LOG2_INV_LPC_GAIN_HIGH_THRES ), invGain_Q30 );
+            down_scale_Q30 = SKP_max_32( SKP_RSHIFT( ( 1 << 30 ), LOG2_INV_LPC_GAIN_LOW_THRES ), down_scale_Q30 );
+            down_scale_Q30 = SKP_LSHIFT( down_scale_Q30, LOG2_INV_LPC_GAIN_HIGH_THRES );
+            
+            rand_Gain_Q15 = SKP_RSHIFT( SKP_SMULWB( down_scale_Q30, rand_Gain_Q15 ), 14 );
+        }
+    }
+
+    rand_seed           = psPLC->rand_seed;
+    lag                 = SKP_RSHIFT_ROUND( psPLC->pitchL_Q8, 8 );
+    psDec->sLTP_buf_idx = psDec->ltp_mem_length;
+
+    /***************************/
+    /* LTP synthesis filtering */
+    /***************************/
+    sig_Q10_ptr = sig_Q10;
+    for( k = 0; k < psDec->nb_subfr; k++ ) {
+        /* Setup pointer */
+        pred_lag_ptr = &psDec->sLTP_Q16[ psDec->sLTP_buf_idx - lag + LTP_ORDER / 2 ];
+        for( i = 0; i < psDec->subfr_length; i++ ) {
+            rand_seed = SKP_RAND( rand_seed );
+            idx = SKP_RSHIFT( rand_seed, 25 ) & RAND_BUF_MASK;
+
+            /* Unrolled loop */
+            LTP_pred_Q14 = SKP_SMULWB(               pred_lag_ptr[  0 ], B_Q14[ 0 ] );
+            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -1 ], B_Q14[ 1 ] );
+            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -2 ], B_Q14[ 2 ] );
+            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -3 ], B_Q14[ 3 ] );
+            LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -4 ], B_Q14[ 4 ] );
+            pred_lag_ptr++;
+            
+            /* Generate LPC residual */
+            LPC_exc_Q10 = SKP_LSHIFT( SKP_SMULWB( rand_ptr[ idx ], rand_scale_Q14 ), 2 ); /* Random noise part */
+            LPC_exc_Q10 = SKP_ADD32( LPC_exc_Q10, SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 ) );  /* Harmonic part */
+            
+            /* Update states */
+            psDec->sLTP_Q16[ psDec->sLTP_buf_idx ] = SKP_LSHIFT( LPC_exc_Q10, 6 );
+            psDec->sLTP_buf_idx++;
+                
+            /* Save LPC residual */
+            sig_Q10_ptr[ i ] = LPC_exc_Q10;
+        }
+        sig_Q10_ptr += psDec->subfr_length;
+        /* Gradually reduce LTP gain */
+        for( j = 0; j < LTP_ORDER; j++ ) {
+            B_Q14[ j ] = SKP_RSHIFT( SKP_SMULBB( harm_Gain_Q15, B_Q14[ j ] ), 15 );
+        }
+        /* Gradually reduce excitation gain */
+        rand_scale_Q14 = SKP_RSHIFT( SKP_SMULBB( rand_scale_Q14, rand_Gain_Q15 ), 15 );
+
+        /* Slowly increase pitch lag */
+        psPLC->pitchL_Q8 += SKP_SMULWB( psPLC->pitchL_Q8, PITCH_DRIFT_FAC_Q16 );
+        psPLC->pitchL_Q8 = SKP_min_32( psPLC->pitchL_Q8, SKP_LSHIFT( SKP_SMULBB( MAX_PITCH_LAG_MS, psDec->fs_kHz ), 8 ) );
+        lag = SKP_RSHIFT_ROUND( psPLC->pitchL_Q8, 8 );
+    }
+
+    /***************************/
+    /* LPC synthesis filtering */
+    /***************************/
+    sig_Q10_ptr = sig_Q10;
+    /* Preload LPC coeficients to array on stack. Gives small performance gain */
+    SKP_memcpy( A_Q12_tmp, psPLC->prevLPC_Q12, psDec->LPC_order * sizeof( SKP_int16 ) );
+    SKP_assert( psDec->LPC_order >= 10 ); /* check that unrolling works */
+    for( k = 0; k < psDec->nb_subfr; k++ ) {
+        for( i = 0; i < psDec->subfr_length; i++ ){
+            /* partly unrolled */
+            LPC_pred_Q10 = SKP_SMULWB(               psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  1 ], A_Q12_tmp[ 0 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  2 ], A_Q12_tmp[ 1 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  3 ], A_Q12_tmp[ 2 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  4 ], A_Q12_tmp[ 3 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  5 ], A_Q12_tmp[ 4 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  6 ], A_Q12_tmp[ 5 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  7 ], A_Q12_tmp[ 6 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  8 ], A_Q12_tmp[ 7 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  9 ], A_Q12_tmp[ 8 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 10 ], A_Q12_tmp[ 9 ] );
+
+            for( j = 10; j < psDec->LPC_order; j++ ) {
+                LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - j - 1 ], A_Q12_tmp[ j ] );
+            }
+
+            /* Add prediction to LPC residual */
+            sig_Q10_ptr[ i ] = SKP_ADD32( sig_Q10_ptr[ i ], LPC_pred_Q10 );
+                
+            /* Update states */
+            psDec->sLPC_Q14[ MAX_LPC_ORDER + i ] = SKP_LSHIFT( sig_Q10_ptr[ i ], 4 );
+        }
+        sig_Q10_ptr += psDec->subfr_length;
+        /* Update LPC filter state */
+        SKP_memcpy( psDec->sLPC_Q14, &psDec->sLPC_Q14[ psDec->subfr_length ], MAX_LPC_ORDER * sizeof( SKP_int32 ) );
+    }
+
+    /* Scale with Gain */
+    for( i = 0; i < psDec->frame_length; i++ ) {
+        signal[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( sig_Q10[ i ], psPLC->prevGain_Q16[ psDec->nb_subfr - 1 ] ), 10 ) );
+    }
+
+    /**************************************/
+    /* Update states                      */
+    /**************************************/
+    psPLC->rand_seed     = rand_seed;
+    psPLC->randScale_Q14 = rand_scale_Q14;
+    for( i = 0; i < MAX_NB_SUBFR; i++ ) {
+        psDecCtrl->pitchL[ i ] = lag;
+    }
+}
+
+/* Glues concealed frames with new good recieved frames             */
+void SKP_Silk_PLC_glue_frames(
+    SKP_Silk_decoder_state      *psDec,             /* I/O decoder state    */
+    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O Decoder control  */
+    SKP_int16                   signal[],           /* I/O signal           */
+    SKP_int                     length              /* I length of residual */
+)
+{
+    SKP_int   i, energy_shift;
+    SKP_int32 energy;
+    SKP_Silk_PLC_struct *psPLC;
+    psPLC = &psDec->sPLC;
+
+    if( psDec->lossCnt ) {
+        /* Calculate energy in concealed residual */
+        SKP_Silk_sum_sqr_shift( &psPLC->conc_energy, &psPLC->conc_energy_shift, signal, length );
+        
+        psPLC->last_frame_lost = 1;
+    } else {
+        if( psDec->sPLC.last_frame_lost ) {
+            /* Calculate residual in decoded signal if last frame was lost */
+            SKP_Silk_sum_sqr_shift( &energy, &energy_shift, signal, length );
+
+            /* Normalize energies */
+            if( energy_shift > psPLC->conc_energy_shift ) {
+                psPLC->conc_energy = SKP_RSHIFT( psPLC->conc_energy, energy_shift - psPLC->conc_energy_shift );
+            } else if( energy_shift < psPLC->conc_energy_shift ) {
+                energy = SKP_RSHIFT( energy, psPLC->conc_energy_shift - energy_shift );
+            }
+
+            /* Fade in the energy difference */
+            if( energy > psPLC->conc_energy ) {
+                SKP_int32 frac_Q24, LZ;
+                SKP_int32 gain_Q12, slope_Q12;
+
+                LZ = SKP_Silk_CLZ32( psPLC->conc_energy );
+                LZ = LZ - 1;
+                psPLC->conc_energy = SKP_LSHIFT( psPLC->conc_energy, LZ );
+                energy = SKP_RSHIFT( energy, SKP_max_32( 24 - LZ, 0 ) );
+                
+                frac_Q24 = SKP_DIV32( psPLC->conc_energy, SKP_max( energy, 1 ) );
+                
+                gain_Q12 = SKP_Silk_SQRT_APPROX( frac_Q24 );
+                slope_Q12 = SKP_DIV32_16( ( 1 << 12 ) - gain_Q12, length );
+
+                for( i = 0; i < length; i++ ) {
+                    signal[ i ] = SKP_RSHIFT( SKP_MUL( gain_Q12, signal[ i ] ), 12 );
+                    gain_Q12 += slope_Q12;
+                    gain_Q12 = SKP_min( gain_Q12, ( 1 << 12 ) );
+                }
+            }
+        }
+        psPLC->last_frame_lost = 0;
+
+    }
+}
--- /dev/null
+++ b/src_common/SKP_Silk_PLC.h
@@ -1,0 +1,79 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_PLC_FIX_H
+#define SKP_SILK_PLC_FIX_H
+
+#include "SKP_Silk_main.h"
+
+#define BWE_COEF_Q16                    64880           /* 0.99 in Q16                      */
+#define V_PITCH_GAIN_START_MIN_Q14      11469           /* 0.7 in Q14                       */
+#define V_PITCH_GAIN_START_MAX_Q14      15565           /* 0.95 in Q14                      */
+#define MAX_PITCH_LAG_MS                18
+#define SA_THRES_Q8                     50
+#define USE_SINGLE_TAP                  1
+#define RAND_BUF_SIZE                   128
+#define RAND_BUF_MASK                   (RAND_BUF_SIZE - 1)
+#define LOG2_INV_LPC_GAIN_HIGH_THRES    3               /* 2^3 = 8 dB LPC gain              */
+#define LOG2_INV_LPC_GAIN_LOW_THRES     8               /* 2^8 = 24 dB LPC gain             */
+#define PITCH_DRIFT_FAC_Q16             655             /* 0.01 in Q16                      */
+
+void SKP_Silk_PLC_Reset(
+    SKP_Silk_decoder_state      *psDec              /* I/O Decoder state        */
+);
+
+void SKP_Silk_PLC(
+    SKP_Silk_decoder_state      *psDec,             /* I/O Decoder state        */
+    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O Decoder control      */
+    SKP_int16                   signal[],           /* I/O  signal              */
+    SKP_int                     length,             /* I length of residual     */
+    SKP_int                     lost                /* I Loss flag              */
+);
+
+void SKP_Silk_PLC_update(
+    SKP_Silk_decoder_state      *psDec,             /* I/O Decoder state        */
+    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O Decoder control      */
+    SKP_int16                   signal[],
+    SKP_int                     length
+);
+
+void SKP_Silk_PLC_conceal(
+    SKP_Silk_decoder_state      *psDec,             /* I/O Decoder state        */
+    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O Decoder control      */
+    SKP_int16                   signal[],           /* O LPC residual signal    */
+    SKP_int                     length              /* I length of signal       */
+);
+
+void SKP_Silk_PLC_glue_frames(
+    SKP_Silk_decoder_state      *psDec,             /* I/O decoder state        */
+    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O Decoder control      */
+    SKP_int16                   signal[],           /* I/O signal               */
+    SKP_int                     length              /* I length of signal       */
+);
+
+#endif
+
--- /dev/null
+++ b/src_common/SKP_Silk_VAD.c
@@ -1,0 +1,348 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*
+ * File Name:   SKP_Silk_VAD.c
+ * Description: Silk VAD.
+ */
+
+#include <stdlib.h>
+#include "SKP_Silk_main.h"
+
+#define SKP_SILK_VAD_HANDLE_10MS_FRAMES     1
+
+/**********************************/
+/* Initialization of the Silk VAD */
+/**********************************/
+SKP_int SKP_Silk_VAD_Init(                              /* O    Return value, 0 if success                  */ 
+    SKP_Silk_VAD_state              *psSilk_VAD         /* I/O  Pointer to Silk VAD state                   */ 
+)
+{
+    SKP_int b, ret = 0;
+
+    /* reset state memory */
+    SKP_memset( psSilk_VAD, 0, sizeof( SKP_Silk_VAD_state ) );
+
+    /* init noise levels */
+    /* Initialize array with approx pink noise levels (psd proportional to inverse of frequency) */
+    for( b = 0; b < VAD_N_BANDS; b++ ) {
+        psSilk_VAD->NoiseLevelBias[ b ] = SKP_max_32( SKP_DIV32_16( VAD_NOISE_LEVELS_BIAS, b + 1 ), 1 );
+    }
+
+    /* Initialize state */
+    for( b = 0; b < VAD_N_BANDS; b++ ) {
+        psSilk_VAD->NL[ b ]     = SKP_MUL( 100, psSilk_VAD->NoiseLevelBias[ b ] );
+        psSilk_VAD->inv_NL[ b ] = SKP_DIV32( SKP_int32_MAX, psSilk_VAD->NL[ b ] );
+    }
+    psSilk_VAD->counter = 15;
+
+    /* init smoothed energy-to-noise ratio*/
+    for( b = 0; b < VAD_N_BANDS; b++ ) {
+        psSilk_VAD->NrgRatioSmth_Q8[ b ] = 100 * 256;       /* 100 * 256 --> 20 dB SNR */
+    }
+
+    return( ret );
+}
+
+/* Weighting factors for tilt measure */
+const static SKP_int32 tiltWeights[ VAD_N_BANDS ] = { 30000, 6000, -12000, -12000 };
+
+/***************************************/
+/* Get the speech activity level in Q8 */
+/***************************************/
+SKP_int SKP_Silk_VAD_GetSA_Q8(                                  /* O    Return value, 0 if success      */
+    SKP_Silk_VAD_state          *psSilk_VAD,                    /* I/O  Silk VAD state                  */
+    SKP_int                     *pSA_Q8,                        /* O    Speech activity level in Q8     */
+    SKP_int                     pQuality_Q15[ VAD_N_BANDS ],    /* O    Smoothed SNR for each band      */
+    SKP_int                     *pTilt_Q15,                     /* O    current frame's frequency tilt  */
+    const SKP_int16             pIn[],                          /* I    PCM input       [framelength]   */
+    const SKP_int               framelength,                    /* I    Input frame length              */
+    const SKP_int               fs_kHz                          /* I    Input frame sample frequency    */
+)
+{
+    SKP_int   SA_Q15, input_tilt;
+    SKP_int32 scratch[ 3 * MAX_FRAME_LENGTH / 2 ];
+    SKP_int   decimated_framelength, dec_subframe_length, dec_subframe_offset, SNR_Q7, i, b, s;
+    SKP_int32 sumSquared, smooth_coef_Q16;
+    SKP_int16 HPstateTmp, SNR_dB_Q7;
+
+    SKP_int16 X[ VAD_N_BANDS ][ MAX_FRAME_LENGTH / 2 ];
+    SKP_int32 Xnrg[ VAD_N_BANDS ];
+    SKP_int32 NrgToNoiseRatio_Q8[ VAD_N_BANDS ];
+    SKP_int32 speech_nrg, x_tmp;
+    SKP_int   ret = 0;
+    
+#if SKP_SILK_VAD_HANDLE_10MS_FRAMES
+    SKP_int   normalizer;
+#endif
+
+    /* Safety checks */
+    SKP_assert( VAD_N_BANDS == 4 );
+    SKP_assert( MAX_FRAME_LENGTH >= framelength );
+    SKP_assert( framelength <= 512 );
+    SKP_assert( framelength == 8 * SKP_RSHIFT( framelength, 3 ) );
+
+    /***********************/
+    /* Filter and Decimate */
+    /***********************/
+    /* 0-8 kHz to 0-4 kHz and 4-8 kHz */
+    SKP_Silk_ana_filt_bank_1( pIn,          &psSilk_VAD->AnaState[  0 ], &X[ 0 ][ 0 ], &X[ 3 ][ 0 ], &scratch[ 0 ], framelength );        
+    
+    /* 0-4 kHz to 0-2 kHz and 2-4 kHz */
+    SKP_Silk_ana_filt_bank_1( &X[ 0 ][ 0 ], &psSilk_VAD->AnaState1[ 0 ], &X[ 0 ][ 0 ], &X[ 2 ][ 0 ], &scratch[ 0 ], SKP_RSHIFT( framelength, 1 ) );
+    
+    /* 0-2 kHz to 0-1 kHz and 1-2 kHz */
+    SKP_Silk_ana_filt_bank_1( &X[ 0 ][ 0 ], &psSilk_VAD->AnaState2[ 0 ], &X[ 0 ][ 0 ], &X[ 1 ][ 0 ], &scratch[ 0 ], SKP_RSHIFT( framelength, 2 ) );
+
+    /*********************************************/
+    /* HP filter on lowest band (differentiator) */
+    /*********************************************/
+    // y( n ) = 0.5 * x( n ) - 0.5 * x( n - 1 )
+    decimated_framelength = SKP_RSHIFT( framelength, 3 );
+    X[ 0 ][ decimated_framelength - 1 ] = SKP_RSHIFT( X[ 0 ][ decimated_framelength - 1 ], 1 );
+    HPstateTmp = X[ 0 ][ decimated_framelength - 1 ];
+    for( i = decimated_framelength - 1; i > 0; i-- ) {
+        X[ 0 ][ i - 1 ]  = SKP_RSHIFT( X[ 0 ][ i - 1 ], 1 );
+        X[ 0 ][ i ]     -= X[ 0 ][ i - 1 ];
+    }
+    X[ 0 ][ 0 ] -= psSilk_VAD->HPstate;
+    psSilk_VAD->HPstate = HPstateTmp;
+
+    /*************************************/
+    /* Calculate the energy in each band */
+    /*************************************/
+    for( b = 0; b < VAD_N_BANDS; b++ ) {        
+        /* Find the decimated framelength in the non-uniformly divided bands */
+        decimated_framelength = SKP_RSHIFT( framelength, SKP_min_int( VAD_N_BANDS - b, VAD_N_BANDS - 1 ) );
+
+        /* Split length into subframe lengths */
+        dec_subframe_length = SKP_RSHIFT( decimated_framelength, VAD_INTERNAL_SUBFRAMES_LOG2 );
+        dec_subframe_offset = 0;
+
+        /* Compute energy per sub-frame */
+        /* initialize with summed energy of last subframe */
+        Xnrg[ b ] = psSilk_VAD->XnrgSubfr[ b ];
+        for( s = 0; s < VAD_INTERNAL_SUBFRAMES; s++ ) {
+            sumSquared = 0;
+            for( i = 0; i < dec_subframe_length; i++ ) {
+                /* The energy will be less than dec_subframe_length * ( SKP_int16_MIN / 8 ) ^ 2.            */
+                /* Therefore we can accumulate with no risk of overflow (unless dec_subframe_length > 128)  */
+                x_tmp = SKP_RSHIFT( X[ b ][ i + dec_subframe_offset ], 3 );
+                sumSquared = SKP_SMLABB( sumSquared, x_tmp, x_tmp );
+
+                /* Safety check */
+                SKP_assert( sumSquared >= 0 );
+            }
+
+            /* Add/saturate summed energy of current subframe */
+            if( s < VAD_INTERNAL_SUBFRAMES - 1 ) {
+                Xnrg[ b ] = SKP_ADD_POS_SAT32( Xnrg[ b ], sumSquared );
+            } else {
+                /* Look-ahead subframe */
+                Xnrg[ b ] = SKP_ADD_POS_SAT32( Xnrg[ b ], SKP_RSHIFT( sumSquared, 1 ) );
+            }
+
+            dec_subframe_offset += dec_subframe_length;
+        }
+        psSilk_VAD->XnrgSubfr[ b ] = sumSquared; 
+    }
+
+    /********************/
+    /* Noise estimation */
+    /********************/
+    SKP_Silk_VAD_GetNoiseLevels( &Xnrg[ 0 ], psSilk_VAD );
+
+    /***********************************************/
+    /* Signal-plus-noise to noise ratio estimation */
+    /***********************************************/
+    sumSquared = 0;
+    input_tilt = 0;
+    for( b = 0; b < VAD_N_BANDS; b++ ) {
+        speech_nrg = Xnrg[ b ] - psSilk_VAD->NL[ b ];
+        if( speech_nrg > 0 ) {
+            /* Divide, with sufficient resolution */
+            if( ( Xnrg[ b ] & 0xFF800000 ) == 0 ) {
+                NrgToNoiseRatio_Q8[ b ] = SKP_DIV32( SKP_LSHIFT( Xnrg[ b ], 8 ), psSilk_VAD->NL[ b ] + 1 );
+            } else {
+                NrgToNoiseRatio_Q8[ b ] = SKP_DIV32( Xnrg[ b ], SKP_RSHIFT( psSilk_VAD->NL[ b ], 8 ) + 1 );
+            }
+
+            /* Convert to log domain */
+            SNR_Q7 = SKP_Silk_lin2log( NrgToNoiseRatio_Q8[ b ] ) - 8 * 128;
+
+            /* Sum-of-squares */
+            sumSquared = SKP_SMLABB( sumSquared, SNR_Q7, SNR_Q7 );          /* Q14 */
+
+            /* Tilt measure */
+            if( speech_nrg < ( 1 << 20 ) ) {
+                /* Scale down SNR value for small subband speech energies */
+                SNR_Q7 = SKP_SMULWB( SKP_LSHIFT( SKP_Silk_SQRT_APPROX( speech_nrg ), 6 ), SNR_Q7 );
+            }
+            input_tilt = SKP_SMLAWB( input_tilt, tiltWeights[ b ], SNR_Q7 );
+        } else {
+            NrgToNoiseRatio_Q8[ b ] = 256;
+        }
+    }
+
+    /* Mean-of-squares */
+    sumSquared = SKP_DIV32_16( sumSquared, VAD_N_BANDS ); /* Q14 */
+
+    /* Root-mean-square approximation, scale to dBs, and write to output pointer */
+    SNR_dB_Q7 = ( SKP_int16 )( 3 * SKP_Silk_SQRT_APPROX( sumSquared ) ); /* Q7 */
+
+    /*********************************/
+    /* Speech Probability Estimation */
+    /*********************************/
+    SA_Q15 = SKP_Silk_sigm_Q15( SKP_SMULWB( VAD_SNR_FACTOR_Q16, SNR_dB_Q7 ) - VAD_NEGATIVE_OFFSET_Q5 );
+
+    /**************************/
+    /* Frequency Tilt Measure */
+    /**************************/
+    *pTilt_Q15 = SKP_LSHIFT( SKP_Silk_sigm_Q15( input_tilt ) - 16384, 1 );
+
+    /**************************************************/
+    /* Scale the sigmoid output based on power levels */
+    /**************************************************/
+    speech_nrg = 0;
+    for( b = 0; b < VAD_N_BANDS; b++ ) {
+        /* Accumulate signal-without-noise energies, higher frequency bands have more weight */
+        speech_nrg += ( b + 1 ) * SKP_RSHIFT( Xnrg[ b ] - psSilk_VAD->NL[ b ], 4 );
+    }
+
+    /* Power scaling */
+    if( speech_nrg <= 0 ) {
+        SA_Q15 = SKP_RSHIFT( SA_Q15, 1 ); 
+    } else if( speech_nrg < 32768 ) {
+        
+#if SKP_SILK_VAD_HANDLE_10MS_FRAMES
+        /* Energy normalization of frames shorter than 320 samples */
+        normalizer = 0;
+        while( SKP_LSHIFT( framelength, normalizer ) < 320 ) {
+            normalizer++;
+        }
+        speech_nrg = SKP_LSHIFT_SAT32( speech_nrg, 15 + normalizer );
+#else
+        speech_nrg = SKP_LSHIFT_SAT32( speech_nrg, 15 );
+#endif
+        /* square-root */
+        speech_nrg = SKP_Silk_SQRT_APPROX( speech_nrg );
+        SA_Q15 = SKP_SMULWB( 32768 + speech_nrg, SA_Q15 ); 
+    }
+
+    /* Copy the resulting speech activity in Q8 to *pSA_Q8 */
+    *pSA_Q8 = SKP_min_int( SKP_RSHIFT( SA_Q15, 7 ), SKP_uint8_MAX );
+
+    /***********************************/
+    /* Energy Level and SNR estimation */
+    /***********************************/
+    /* Smoothing coefficient */
+    smooth_coef_Q16 = SKP_SMULWB( VAD_SNR_SMOOTH_COEF_Q18, SKP_SMULWB( SA_Q15, SA_Q15 ) );
+    
+#if SKP_SILK_VAD_HANDLE_10MS_FRAMES
+    if( framelength == 10 * fs_kHz ) {
+        smooth_coef_Q16 >>= 1;
+    } else {
+       SKP_assert( framelength == 20 * fs_kHz );
+    }
+#endif
+
+    for( b = 0; b < VAD_N_BANDS; b++ ) {
+        /* compute smoothed energy-to-noise ratio per band */
+        psSilk_VAD->NrgRatioSmth_Q8[ b ] = SKP_SMLAWB( psSilk_VAD->NrgRatioSmth_Q8[ b ], 
+            NrgToNoiseRatio_Q8[ b ] - psSilk_VAD->NrgRatioSmth_Q8[ b ], smooth_coef_Q16 );
+
+        /* signal to noise ratio in dB per band */
+        SNR_Q7 = 3 * ( SKP_Silk_lin2log( psSilk_VAD->NrgRatioSmth_Q8[b] ) - 8 * 128 );
+        /* quality = sigmoid( 0.25 * ( SNR_dB - 16 ) ); */
+        pQuality_Q15[ b ] = SKP_Silk_sigm_Q15( SKP_RSHIFT( SNR_Q7 - 16 * 128, 4 ) );
+    }
+
+    return( ret );
+}
+
+/**************************/
+/* Noise level estimation */
+/**************************/
+void SKP_Silk_VAD_GetNoiseLevels(
+    const SKP_int32                 pX[ VAD_N_BANDS ],  /* I    subband energies                            */
+    SKP_Silk_VAD_state              *psSilk_VAD         /* I/O  Pointer to Silk VAD state                   */ 
+)
+{
+    SKP_int   k;
+    SKP_int32 nl, nrg, inv_nrg;
+    SKP_int   coef, min_coef;
+
+    /* Initially faster smoothing */
+    if( psSilk_VAD->counter < 1000 ) { /* 1000 = 20 sec */
+        min_coef = SKP_DIV32_16( SKP_int16_MAX, SKP_RSHIFT( psSilk_VAD->counter, 4 ) + 1 );  
+    } else {
+        min_coef = 0;
+    }
+
+    for( k = 0; k < VAD_N_BANDS; k++ ) {
+        /* Get old noise level estimate for current band */
+        nl = psSilk_VAD->NL[ k ];
+        SKP_assert( nl >= 0 );
+        
+        /* Add bias */
+        nrg = SKP_ADD_POS_SAT32( pX[ k ], psSilk_VAD->NoiseLevelBias[ k ] ); 
+        SKP_assert( nrg > 0 );
+        
+        /* Invert energies */
+        inv_nrg = SKP_DIV32( SKP_int32_MAX, nrg );
+        SKP_assert( inv_nrg >= 0 );
+        
+        /* Less update when subband energy is high */
+        if( nrg > SKP_LSHIFT( nl, 3 ) ) {
+            coef = VAD_NOISE_LEVEL_SMOOTH_COEF_Q16 >> 3;
+        } else if( nrg < nl ) {
+            coef = VAD_NOISE_LEVEL_SMOOTH_COEF_Q16;
+        } else {
+            coef = SKP_SMULWB( SKP_SMULWW( inv_nrg, nl ), VAD_NOISE_LEVEL_SMOOTH_COEF_Q16 << 1 );
+        }
+
+        /* Initially faster smoothing */
+        coef = SKP_max_int( coef, min_coef );
+
+        /* Smooth inverse energies */
+        psSilk_VAD->inv_NL[ k ] = SKP_SMLAWB( psSilk_VAD->inv_NL[ k ], inv_nrg - psSilk_VAD->inv_NL[ k ], coef );
+        SKP_assert( psSilk_VAD->inv_NL[ k ] >= 0 );
+
+        /* Compute noise level by inverting again */
+        nl = SKP_DIV32( SKP_int32_MAX, psSilk_VAD->inv_NL[ k ] );
+        SKP_assert( nl >= 0 );
+
+        /* Limit noise levels (guarantee 7 bits of head room) */
+        nl = SKP_min( nl, 0x00FFFFFF );
+
+        /* Store as part of state */
+        psSilk_VAD->NL[ k ] = nl;
+    }
+
+    /* Increment frame counter */
+    psSilk_VAD->counter++;
+}
--- /dev/null
+++ b/src_common/SKP_Silk_code_signs.c
@@ -1,0 +1,91 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+//#define SKP_enc_map(a)                ((a) > 0 ? 1 : 0)
+//#define SKP_dec_map(a)                ((a) > 0 ? 1 : -1)
+/* shifting avoids if-statement */
+#define SKP_enc_map(a)                  ( SKP_RSHIFT( (a), 15 ) + 1 )
+#define SKP_dec_map(a)                  ( SKP_LSHIFT( (a),  1 ) - 1 )
+
+/* Encodes signs of excitation */
+void SKP_Silk_encode_signs(
+    SKP_Silk_range_coder_state      *sRC,               /* I/O  Range coder state                       */
+    const SKP_int8                  q[],                /* I    Pulse signal                            */
+    const SKP_int                   length,             /* I    Length of input                         */
+    const SKP_int                   sigtype,            /* I    Signal type                             */
+    const SKP_int                   QuantOffsetType,    /* I    Quantization offset type                */
+    const SKP_int                   RateLevelIndex      /* I    Rate level index                        */
+)
+{
+    SKP_int i;
+    SKP_int inData;
+    SKP_uint16 cdf[ 3 ];
+
+    i = SKP_SMULBB( N_RATE_LEVELS - 1, SKP_LSHIFT( sigtype, 1 ) + QuantOffsetType ) + RateLevelIndex;
+    cdf[ 0 ] = 0;
+    cdf[ 1 ] = SKP_Silk_sign_CDF[ i ];
+    cdf[ 2 ] = 65535;
+    
+    for( i = 0; i < length; i++ ) {
+        if( q[ i ] != 0 ) {
+            inData = SKP_enc_map( q[ i ] ); /* - = 0, + = 1 */
+            SKP_Silk_range_encoder( sRC, inData, cdf );
+        }
+    }
+}
+
+/* Decodes signs of excitation */
+void SKP_Silk_decode_signs(
+    SKP_Silk_range_coder_state      *sRC,               /* I/O  Range coder state                           */
+    SKP_int                         q[],                /* I/O  pulse signal                                */
+    const SKP_int                   length,             /* I    length of output                            */
+    const SKP_int                   sigtype,            /* I    Signal type                                 */
+    const SKP_int                   QuantOffsetType,    /* I    Quantization offset type                    */
+    const SKP_int                   RateLevelIndex      /* I    Rate Level Index                            */
+)
+{
+    SKP_int i;
+    SKP_int data;
+    SKP_uint16 cdf[ 3 ];
+
+    i = SKP_SMULBB( N_RATE_LEVELS - 1, SKP_LSHIFT( sigtype, 1 ) + QuantOffsetType ) + RateLevelIndex;
+    cdf[ 0 ] = 0;
+    cdf[ 1 ] = SKP_Silk_sign_CDF[ i ];
+    cdf[ 2 ] = 65535;
+    
+    for( i = 0; i < length; i++ ) {
+        if( q[ i ] > 0 ) {
+            SKP_Silk_range_decoder( &data, sRC, cdf, 1 );
+            /* attach sign */
+            /* implementation with shift, subtraction, multiplication */
+            q[ i ] *= SKP_dec_map( data );
+        }
+    }
+}
+
--- /dev/null
+++ b/src_common/SKP_Silk_create_init_destroy.c
@@ -1,0 +1,56 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+
+/************************/
+/* Init Decoder State   */
+/************************/
+SKP_int SKP_Silk_init_decoder(
+    SKP_Silk_decoder_state      *psDec              /* I/O  Decoder state pointer                       */
+)
+{
+    /* Clear the entire encoder state, except anything copied */
+    SKP_memset( psDec, 0, sizeof( SKP_Silk_decoder_state ) );
+
+    /* Set sampling rate to 24 kHz, and init non-zero values */
+    SKP_Silk_decoder_set_fs( psDec, 24, MAX_NB_SUBFR );
+
+    /* Used to deactivate e.g. LSF interpolation and fluctuation reduction */
+    psDec->first_frame_after_reset = 1;
+    psDec->prev_inv_gain_Q16 = 65536;
+
+    /* Reset CNG state */
+    SKP_Silk_CNG_Reset( psDec );
+
+    /* Reset PLC state */
+    SKP_Silk_PLC_Reset( psDec );
+    
+    return(0);
+}
+
--- /dev/null
+++ b/src_common/SKP_Silk_dec_SDK_API.c
@@ -1,0 +1,234 @@
+#include "SKP_Silk_SDK_API.h"
+#include "SKP_Silk_main.h"
+
+/*********************/
+/* Decoder functions */
+/*********************/
+
+SKP_int SKP_Silk_SDK_Get_Decoder_Size( SKP_int32 *decSizeBytes ) 
+{
+    SKP_int ret = SKP_SILK_NO_ERROR;
+
+    *decSizeBytes = sizeof( SKP_Silk_decoder_state );
+
+    return ret;
+}
+
+/* Reset decoder state */
+SKP_int SKP_Silk_SDK_InitDecoder(
+    void* decState                                      /* I/O: State                                          */
+)
+{
+    SKP_int ret = SKP_SILK_NO_ERROR;
+    SKP_Silk_decoder_state *struc;
+
+    struc = (SKP_Silk_decoder_state *)decState;
+
+    ret  = SKP_Silk_init_decoder( struc );
+
+    return ret;
+}
+
+/* Decode a frame */
+SKP_int SKP_Silk_SDK_Decode(
+    void*                               decState,       /* I/O: State                                           */
+    SKP_SILK_SDK_DecControlStruct*      decControl,     /* I/O: Control structure                               */
+    SKP_int                             lostFlag,       /* I:   0: no loss, 1 loss                              */
+    const SKP_uint8                     *inData,        /* I:   Encoded input vector                            */
+    const SKP_int                       nBytesIn,       /* I:   Number of input Bytes                           */
+    SKP_int16                           *samplesOut,    /* O:   Decoded output speech vector                    */
+    SKP_int16                           *nSamplesOut    /* I/O: Number of samples (vector/decoded)              */
+)
+{
+    SKP_int ret = SKP_SILK_NO_ERROR, used_bytes, prev_fs_kHz;
+    SKP_Silk_decoder_state *psDec;
+
+    psDec = (SKP_Silk_decoder_state *)decState;
+
+    /**********************************/
+    /* Test if first frame in payload */
+    /**********************************/
+    if( psDec->moreInternalDecoderFrames == 0 ) {
+        /* First Frame in Payload */
+        psDec->nFramesDecoded = 0;  /* Used to count frames in packet */
+    }
+
+    if( psDec->moreInternalDecoderFrames == 0 &&    /* First frame in packet    */
+        lostFlag == 0 &&                            /* Not packet loss          */
+        nBytesIn > MAX_ARITHM_BYTES ) {             /* Too long payload         */
+            /* Avoid trying to decode a too large packet */
+            lostFlag = 1;
+            ret = SKP_SILK_DEC_PAYLOAD_TOO_LARGE;
+    }
+            
+    /* Save previous sample frequency */
+    prev_fs_kHz = psDec->fs_kHz;
+    
+    /* Call decoder for one frame */
+    ret += SKP_Silk_decode_frame( psDec, samplesOut, nSamplesOut, inData, nBytesIn, 
+            lostFlag, &used_bytes );
+    
+    if( used_bytes ) { /* Only Call if not a packet loss */
+        if( psDec->nBytesLeft > 0 && psDec->FrameTermination == SKP_SILK_MORE_FRAMES && psDec->nFramesDecoded < 5 ) {
+            /* We have more frames in the Payload */
+            psDec->moreInternalDecoderFrames = 1;
+        } else {
+            /* Last frame in Payload */
+            psDec->moreInternalDecoderFrames = 0;
+            psDec->nFramesInPacket = psDec->nFramesDecoded;
+        
+            /* Track inband FEC usage */
+            if( psDec->vadFlag == VOICE_ACTIVITY ) {
+                if( psDec->FrameTermination == SKP_SILK_LAST_FRAME ) {
+                    psDec->no_FEC_counter++;
+                    if( psDec->no_FEC_counter > NO_LBRR_THRES ) {
+                        psDec->inband_FEC_offset = 0;
+                    }
+                } else if( psDec->FrameTermination == SKP_SILK_LBRR_VER1 ) {
+                    psDec->inband_FEC_offset = 1; /* FEC info with 1 packet delay */
+                    psDec->no_FEC_counter    = 0;
+                } else if( psDec->FrameTermination == SKP_SILK_LBRR_VER2 ) {
+                    psDec->inband_FEC_offset = 2; /* FEC info with 2 packets delay */
+                    psDec->no_FEC_counter    = 0;
+                }
+            }
+        }
+    }
+
+    if( MAX_API_FS_KHZ * 1000 < decControl->API_sampleRate ||
+        8000       > decControl->API_sampleRate ) {
+        ret = SKP_SILK_DEC_INVALID_SAMPLING_FREQUENCY;
+        return( ret );
+    }
+
+    /* Resample if needed */
+    if( psDec->fs_kHz * 1000 != decControl->API_sampleRate ) { 
+        SKP_int16 samplesOut_tmp[ MAX_API_FS_KHZ * MAX_FRAME_LENGTH_MS ];
+        SKP_assert( psDec->fs_kHz <= MAX_API_FS_KHZ );
+
+        /* Copy to a tmp buffer as the resampling writes to samplesOut */
+        SKP_memcpy( samplesOut_tmp, samplesOut, *nSamplesOut * sizeof( SKP_int16 ) );
+
+        /* (Re-)initialize resampler state when switching internal sampling frequency */
+        if( prev_fs_kHz != psDec->fs_kHz || psDec->prev_API_sampleRate != decControl->API_sampleRate ) {
+            ret = SKP_Silk_resampler_init( &psDec->resampler_state, SKP_SMULBB( psDec->fs_kHz, 1000 ), decControl->API_sampleRate );
+        }
+
+        /* Resample the output to API_sampleRate */
+        ret += SKP_Silk_resampler( &psDec->resampler_state, samplesOut, samplesOut_tmp, *nSamplesOut );
+
+        /* Update the number of output samples */
+        *nSamplesOut = SKP_DIV32( ( SKP_int32 )*nSamplesOut * decControl->API_sampleRate, psDec->fs_kHz * 1000 );
+    }
+
+    psDec->prev_API_sampleRate = decControl->API_sampleRate;
+
+    /* Copy all parameters that are needed out of internal structure to the control stucture */
+    decControl->frameSize                 = ( SKP_int )psDec->frame_length;
+    decControl->framesPerPacket           = ( SKP_int )psDec->nFramesInPacket;
+    decControl->inBandFECOffset           = ( SKP_int )psDec->inband_FEC_offset;
+    decControl->moreInternalDecoderFrames = ( SKP_int )psDec->moreInternalDecoderFrames;
+
+    return ret;
+}
+
+/* Function to find LBRR information in a packet */
+void SKP_Silk_SDK_search_for_LBRR(
+    const SKP_uint8                     *inData,        /* I:   Encoded input vector                            */
+    const SKP_int16                     nBytesIn,       /* I:   Number of input Bytes                           */
+    SKP_int                             lost_offset,    /* I:   Offset from lost packet                         */
+    SKP_uint8                           *LBRRData,      /* O:   LBRR payload                                    */
+    SKP_int16                           *nLBRRBytes     /* O:   Number of LBRR Bytes                            */
+)
+{
+    SKP_int ret = SKP_SILK_NO_ERROR;
+    SKP_Silk_decoder_state   sDec; // Local decoder state to avoid interfering with running decoder */
+    SKP_Silk_decoder_control sDecCtrl;
+    SKP_int i, TempQ[ MAX_FRAME_LENGTH ];
+
+    if( lost_offset < 1 || lost_offset > MAX_LBRR_DELAY ) {
+        /* No useful FEC in this packet */
+        *nLBRRBytes = 0;
+        return;
+    }
+
+    sDec.nFramesDecoded = 0;
+    sDec.fs_kHz         = 0; /* Force update parameters LPC_order etc */
+    SKP_memset( sDec.prevNLSF_Q15, 0, MAX_LPC_ORDER * sizeof( SKP_int ) );
+    SKP_Silk_range_dec_init( &sDec.sRC, inData, ( SKP_int32 )nBytesIn );
+
+    /* Decode all parameter indices for the whole packet*/
+    SKP_Silk_decode_indices_v4( &sDec );
+
+    /* Is there usable LBRR in this packet */
+    *nLBRRBytes = 0;
+    if( ( sDec.FrameTermination - 1 ) & lost_offset && sDec.FrameTermination > 0 && sDec.nBytesLeft >= 0 ) {
+        /* The wanted FEC is present in the packet */
+        for( i = 0; i < sDec.nFramesInPacket; i++ ) {
+            SKP_Silk_decode_parameters_v4( &sDec, &sDecCtrl, TempQ, 0 );
+            
+            if( sDec.nBytesLeft <= 0 || sDec.sRC.error ) {
+                /* Corrupt stream */
+                LBRRData = NULL;
+                *nLBRRBytes = 0;
+                break;
+            } else {
+                sDec.nFramesDecoded++;
+            }
+        }
+    
+        if( LBRRData != NULL ) {
+            /* The wanted FEC is present in the packet */
+            *nLBRRBytes = sDec.nBytesLeft;
+            SKP_memcpy( LBRRData, &inData[ nBytesIn - sDec.nBytesLeft ], sDec.nBytesLeft * sizeof( SKP_uint8 ) );
+        }
+    }
+}
+
+/* Getting type of content for a packet */
+void SKP_Silk_SDK_get_TOC(
+    const SKP_uint8                     *inData,        /* I:   Encoded input vector                            */
+    const SKP_int16                     nBytesIn,       /* I:   Number of input bytes                           */
+    SKP_Silk_TOC_struct                 *Silk_TOC       /* O:   Type of content                                 */
+)
+{
+    SKP_Silk_decoder_state      sDec; // Local Decoder state to avoid interfering with running decoder */
+    SKP_int i, ret = SKP_SILK_NO_ERROR;
+
+    sDec.nFramesDecoded = 0;
+    sDec.fs_kHz         = 0; /* Force update parameters LPC_order etc */
+    SKP_Silk_range_dec_init( &sDec.sRC, inData, ( SKP_int32 )nBytesIn );
+
+    /* Decode all parameter indices for the whole packet*/
+    SKP_Silk_decode_indices_v4( &sDec );
+    
+    if( sDec.nFramesInPacket > SILK_MAX_FRAMES_PER_PACKET || sDec.sRC.error ) {
+        /* Corrupt packet */
+        SKP_memset( Silk_TOC, 0, sizeof( SKP_Silk_TOC_struct ) );
+        Silk_TOC->corrupt = 1;
+    } else {
+        Silk_TOC->corrupt = 0;
+        Silk_TOC->framesInPacket = sDec.nFramesInPacket;
+        Silk_TOC->fs_kHz         = sDec.fs_kHz;
+        if( sDec.FrameTermination == SKP_SILK_LAST_FRAME ) {
+            Silk_TOC->inbandLBRR = sDec.FrameTermination;
+        } else {
+            Silk_TOC->inbandLBRR = sDec.FrameTermination - 1;
+        }
+        /* Copy data */
+        for( i = 0; i < sDec.nFramesInPacket; i++ ) {
+            Silk_TOC->vadFlags[ i ]     = sDec.vadFlagBuf[ i ];
+            Silk_TOC->sigtypeFlags[ i ] = sDec.sigtype[ i ];
+        }
+    }
+}
+
+/**************************/
+/* Get the version number */
+/**************************/
+/* Return a pointer to string specifying the version */ 
+const char *SKP_Silk_SDK_get_version()
+{
+    static const char version[] = "1.0.4";
+    return version;
+}
\ No newline at end of file
--- /dev/null
+++ b/src_common/SKP_Silk_decode_core.c
@@ -1,0 +1,231 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+/**********************************************************/
+/* Core decoder. Performs inverse NSQ operation LTP + LPC */
+/**********************************************************/
+void SKP_Silk_decode_core(
+    SKP_Silk_decoder_state      *psDec,                             /* I/O  Decoder state               */
+    SKP_Silk_decoder_control    *psDecCtrl,                         /* I    Decoder control             */
+    SKP_int16                   xq[],                               /* O    Decoded speech              */
+    const SKP_int               q[ MAX_FRAME_LENGTH ]               /* I    Pulse signal                */
+)
+{
+    SKP_int     i, k, lag = 0, start_idx, NLSF_interpolation_flag, sigtype, LTP_scale_Q14;
+    SKP_int16   *A_Q12, *B_Q14, *pxq, A_Q12_tmp[ MAX_LPC_ORDER ];
+    SKP_int16   sLTP[ MAX_FRAME_LENGTH ];
+    SKP_int32   Gain_Q16, *pred_lag_ptr, *pexc_Q10, *pres_Q10, LTP_pred_Q14, LPC_pred_Q10;
+    SKP_int32   rand_seed, offset_Q10, dither;
+    SKP_int32   vec_Q10[ MAX_SUB_FRAME_LENGTH ];
+    SKP_int32   inv_gain_Q16, inv_gain_Q32, gain_adj_Q16, FiltState[ MAX_LPC_ORDER ];
+    SKP_int     j;
+
+    SKP_assert( psDec->prev_inv_gain_Q16 != 0 );
+    
+    offset_Q10 = SKP_Silk_Quantization_Offsets_Q10[ psDecCtrl->sigtype ][ psDecCtrl->QuantOffsetType ];
+
+    if( psDecCtrl->NLSFInterpCoef_Q2 < ( 1 << 2 ) ) {
+        NLSF_interpolation_flag = 1;
+    } else {
+        NLSF_interpolation_flag = 0;
+    }
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+    DEBUG_STORE_DATA( q_dec.dat, q, psDec->frame_length * sizeof( SKP_int ));
+#endif
+
+    /* Decode excitation */
+    rand_seed = psDecCtrl->Seed;
+    for( i = 0; i < psDec->frame_length; i++ ) {
+        rand_seed = SKP_RAND( rand_seed );
+        /* dither = rand_seed < 0 ? 0xFFFFFFFF : 0; */
+        dither = SKP_RSHIFT( rand_seed, 31 );
+
+        psDec->exc_Q10[ i ] = SKP_LSHIFT( ( SKP_int32 )q[ i ], 10 ) + offset_Q10;
+        psDec->exc_Q10[ i ] = ( psDec->exc_Q10[ i ] ^ dither ) - dither;
+
+        rand_seed += q[ i ];
+    }
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+    DEBUG_STORE_DATA( exc_Q10.dat, psDec->exc_Q10, psDec->frame_length * sizeof( SKP_int32 ));
+
+    /* Resync LTP state here after loss */
+#endif
+
+    pexc_Q10 = psDec->exc_Q10;
+    pres_Q10 = psDec->res_Q10;
+    pxq      = &psDec->outBuf[ psDec->ltp_mem_length ];
+    psDec->sLTP_buf_idx = psDec->ltp_mem_length;
+    /* Loop over subframes */
+    for( k = 0; k < psDec->nb_subfr; k++ ) {
+        A_Q12 = psDecCtrl->PredCoef_Q12[ k >> 1 ];
+
+        /* Preload LPC coeficients to array on stack. Gives small performance gain */        
+        SKP_memcpy( A_Q12_tmp, A_Q12, psDec->LPC_order * sizeof( SKP_int16 ) ); 
+        B_Q14         = &psDecCtrl->LTPCoef_Q14[ k * LTP_ORDER ];
+        Gain_Q16      = psDecCtrl->Gains_Q16[ k ];
+        LTP_scale_Q14 = psDecCtrl->LTP_scale_Q14;
+        sigtype       = psDecCtrl->sigtype;
+
+        inv_gain_Q16 = SKP_INVERSE32_varQ( SKP_max( Gain_Q16, 1 ), 32 );
+        inv_gain_Q16 = SKP_min( inv_gain_Q16, SKP_int16_MAX );
+
+        /* Calculate Gain adjustment factor */
+        gain_adj_Q16 = ( SKP_int32 )1 << 16;
+        if( inv_gain_Q16 != psDec->prev_inv_gain_Q16 ) {
+            gain_adj_Q16 =  SKP_DIV32_varQ( inv_gain_Q16, psDec->prev_inv_gain_Q16, 16 );
+        }
+
+        /* Avoid abrupt transition from voiced PLC to unvoiced normal decoding */
+        if( psDec->lossCnt && psDec->prev_sigtype == SIG_TYPE_VOICED &&
+            psDecCtrl->sigtype == SIG_TYPE_UNVOICED && k < ( MAX_NB_SUBFR >> 1 ) ) {
+            
+            SKP_memset( B_Q14, 0, LTP_ORDER * sizeof( SKP_int16 ) );
+            B_Q14[ LTP_ORDER/2 ] = ( SKP_int16 )1 << 12; /* 0.25 */
+        
+            sigtype = SIG_TYPE_VOICED;
+            psDecCtrl->pitchL[ k ] = psDec->lagPrev;
+            LTP_scale_Q14 = ( SKP_int )1 << 14;
+        }
+
+        if( sigtype == SIG_TYPE_VOICED ) {
+            /* Voiced */
+            
+            lag = psDecCtrl->pitchL[ k ];
+            /* Re-whitening */
+            if( ( k & ( 3 - SKP_LSHIFT( NLSF_interpolation_flag, 1 ) ) ) == 0 ) {
+                /* Rewhiten with new A coefs */
+                start_idx = psDec->ltp_mem_length - lag - psDec->LPC_order - LTP_ORDER / 2;
+                start_idx = SKP_LIMIT_int( start_idx, 0, psDec->ltp_mem_length - psDec->LPC_order );
+
+                SKP_memset( FiltState, 0, psDec->LPC_order * sizeof( SKP_int32 ) ); /* Not really necessary, but Valgrind and Coverity will complain otherwise */
+                SKP_Silk_MA_Prediction( &psDec->outBuf[ start_idx + k * psDec->subfr_length ], 
+                    A_Q12, FiltState, sLTP + start_idx, psDec->ltp_mem_length - start_idx, psDec->LPC_order );
+
+                /* After rewhitening the LTP state is unscaled */
+                inv_gain_Q32 = SKP_LSHIFT( inv_gain_Q16, 16 );
+                if( k == 0 ) {
+                    /* Do LTP downscaling */
+                    inv_gain_Q32 = SKP_LSHIFT( SKP_SMULWB( inv_gain_Q32, psDecCtrl->LTP_scale_Q14 ), 2 );
+                }
+                for( i = 0; i < (lag + LTP_ORDER/2); i++ ) {
+                    psDec->sLTP_Q16[ psDec->sLTP_buf_idx - i - 1 ] = SKP_SMULWB( inv_gain_Q32, sLTP[ psDec->ltp_mem_length - i - 1 ] );
+                }
+            } else {
+                /* Update LTP state when Gain changes */
+                if( gain_adj_Q16 != ( SKP_int32 )1 << 16 ) {
+                    for( i = 0; i < ( lag + LTP_ORDER / 2 ); i++ ) {
+                        psDec->sLTP_Q16[ psDec->sLTP_buf_idx - i - 1 ] = SKP_SMULWW( gain_adj_Q16, psDec->sLTP_Q16[ psDec->sLTP_buf_idx - i - 1 ] );
+                    }
+                }
+            }
+        }
+        
+        /* Scale short term state */
+        for( i = 0; i < MAX_LPC_ORDER; i++ ) {
+            psDec->sLPC_Q14[ i ] = SKP_SMULWW( gain_adj_Q16, psDec->sLPC_Q14[ i ] );
+        }
+
+        /* Save inv_gain */
+        SKP_assert( inv_gain_Q16 != 0 );
+        psDec->prev_inv_gain_Q16 = inv_gain_Q16;
+
+        /* Long-term prediction */
+        if( sigtype == SIG_TYPE_VOICED ) {
+            /* Setup pointer */
+            pred_lag_ptr = &psDec->sLTP_Q16[ psDec->sLTP_buf_idx - lag + LTP_ORDER / 2 ];
+            for( i = 0; i < psDec->subfr_length; i++ ) {
+                /* Unrolled loop */
+                LTP_pred_Q14 = SKP_SMULWB(               pred_lag_ptr[  0 ], B_Q14[ 0 ] );
+                LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -1 ], B_Q14[ 1 ] );
+                LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -2 ], B_Q14[ 2 ] );
+                LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -3 ], B_Q14[ 3 ] );
+                LTP_pred_Q14 = SKP_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -4 ], B_Q14[ 4 ] );
+                pred_lag_ptr++;
+            
+                /* Generate LPC residual */ 
+                pres_Q10[ i ] = SKP_ADD32( pexc_Q10[ i ], SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 ) );
+            
+                /* Update states */
+                psDec->sLTP_Q16[ psDec->sLTP_buf_idx ] = SKP_LSHIFT( pres_Q10[ i ], 6 );
+                psDec->sLTP_buf_idx++;
+            }
+        } else {
+            SKP_memcpy( pres_Q10, pexc_Q10, psDec->subfr_length * sizeof( SKP_int32 ) );
+        }
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+        DEBUG_STORE_DATA( res_Q10.dat, pres_Q10, psDec->subfr_length * sizeof( SKP_int32 ) );
+#endif
+
+        for( i = 0; i < psDec->subfr_length; i++ ) {
+            /* Partially unrolled */
+            LPC_pred_Q10 = SKP_SMULWB(               psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  1 ], A_Q12_tmp[ 0 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  2 ], A_Q12_tmp[ 1 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  3 ], A_Q12_tmp[ 2 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  4 ], A_Q12_tmp[ 3 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  5 ], A_Q12_tmp[ 4 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  6 ], A_Q12_tmp[ 5 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  7 ], A_Q12_tmp[ 6 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  8 ], A_Q12_tmp[ 7 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i -  9 ], A_Q12_tmp[ 8 ] );
+            LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - 10 ], A_Q12_tmp[ 9 ] );
+
+            for( j = 10; j < psDec->LPC_order; j ++ ) {
+                LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psDec->sLPC_Q14[ MAX_LPC_ORDER + i - j - 1 ], A_Q12_tmp[ j ] );
+            }
+
+            /* Add prediction to LPC residual */
+            vec_Q10[ i ] = SKP_ADD32( pres_Q10[ i ], LPC_pred_Q10 );
+            
+            /* Update states */
+            psDec->sLPC_Q14[ MAX_LPC_ORDER + i ] = SKP_LSHIFT( vec_Q10[ i ], 4 );
+        }
+
+        /* Scale with Gain */
+        for( i = 0; i < psDec->subfr_length; i++ ) {
+            pxq[ i ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( vec_Q10[ i ], Gain_Q16 ), 10 ) );
+        }
+
+        /* Update LPC filter state */
+        SKP_memcpy( psDec->sLPC_Q14, &psDec->sLPC_Q14[ psDec->subfr_length ], MAX_LPC_ORDER * sizeof( SKP_int32 ) );
+        pexc_Q10 += psDec->subfr_length;
+        pres_Q10 += psDec->subfr_length;
+        pxq      += psDec->subfr_length;
+    }
+    
+    /* Copy to output */
+    SKP_memcpy( xq, &psDec->outBuf[ psDec->ltp_mem_length ], psDec->frame_length * sizeof( SKP_int16 ) );
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+    DEBUG_STORE_DATA( LTP_buf_Q16.dat, &psDec->sLTP_Q16[psDec->frame_length], psDec->frame_length * sizeof( SKP_int32 ));
+    DEBUG_STORE_DATA( xq_dec.dat, xq, psDec->frame_length * sizeof( SKP_int16 ) );
+#endif
+}
--- /dev/null
+++ b/src_common/SKP_Silk_decode_frame.c
@@ -1,0 +1,176 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+
+#include "SKP_Silk_main.h"
+#include "SKP_Silk_PLC.h"
+
+/****************/
+/* Decode frame */
+/****************/
+SKP_int SKP_Silk_decode_frame(
+    SKP_Silk_decoder_state          *psDec,             /* I/O  Pointer to Silk decoder state               */
+    SKP_int16                       pOut[],             /* O    Pointer to output speech frame              */
+    SKP_int16                       *pN,                /* O    Pointer to size of output frame             */
+    const SKP_uint8                 pCode[],            /* I    Pointer to payload                          */
+    const SKP_int                   nBytes,             /* I    Payload length                              */
+    SKP_int                         action,             /* I    Action from Jitter Buffer                   */
+    SKP_int                         *decBytes           /* O    Used bytes to decode this frame             */
+)
+{
+    SKP_Silk_decoder_control sDecCtrl;
+    SKP_int         L, fs_Khz_old, nb_subfr_old, mv_len, ret = 0;
+    SKP_int         Pulses[ MAX_FRAME_LENGTH ];
+    ec_byte_buffer range_dec_celt_buf;
+
+TIC(decode_frame)
+
+    L = psDec->frame_length;
+    sDecCtrl.LTP_scale_Q14 = 0;
+    
+    /* Safety checks */
+    SKP_assert( L > 0 && L <= MAX_FRAME_LENGTH );
+
+    /********************************************/
+    /* Decode Frame if packet is not lost  */
+    /********************************************/
+    *decBytes = 0;
+    if( action == 0 ) {
+        /********************************************/
+        /* Initialize arithmetic coder              */
+        /********************************************/
+        fs_Khz_old    = psDec->fs_kHz;
+        nb_subfr_old  = psDec->nb_subfr;
+        if( psDec->nFramesDecoded == 0 ) {
+            /* Initialize range decoder state */
+            /* check input */
+            psDec->sRC.error = 0;
+            if( nBytes > MAX_ARITHM_BYTES ) {
+                psDec->sRC.error = RANGE_CODER_DEC_PAYLOAD_TOO_LONG;
+            }
+            ec_byte_writeinit_buffer( &range_dec_celt_buf, psDec->sRC.buffer, nBytes );
+            SKP_memcpy( psDec->sRC.buffer, pCode, nBytes * sizeof( SKP_uint8 ) );
+            ec_dec_init( &psDec->sRC.range_dec_celt_state, &range_dec_celt_buf );
+
+            SKP_Silk_decode_indices_v4( psDec );
+        }
+
+        /********************************************/
+        /* Decode parameters and pulse signal       */
+        /********************************************/
+TIC(decode_params)
+        SKP_Silk_decode_parameters_v4( psDec, &sDecCtrl, Pulses, 1 );
+TOC(decode_params)
+
+        if( psDec->sRC.error ) {
+            psDec->nBytesLeft = 0;
+
+            action              = 1; /* PLC operation */
+            SKP_Silk_decoder_set_fs( psDec, fs_Khz_old, nb_subfr_old );
+
+            /* Avoid crashing */
+            *decBytes = psDec->sRC.range_dec_celt_state.buf->storage; 
+            if( psDec->sRC.error == RANGE_CODER_DEC_PAYLOAD_TOO_LONG ) {
+                ret = SKP_SILK_DEC_PAYLOAD_TOO_LARGE;
+            } else {
+                ret = SKP_SILK_DEC_PAYLOAD_ERROR;
+            }
+        } else {
+            *decBytes = psDec->sRC.range_dec_celt_state.buf->storage - psDec->nBytesLeft;
+            psDec->nFramesDecoded++;
+        
+            /* Update lengths. Sampling frequency could have changed */
+            L = psDec->frame_length;
+
+            /********************************************************/
+            /* Run inverse NSQ                                      */
+            /********************************************************/
+TIC(decode_core)
+            SKP_Silk_decode_core( psDec, &sDecCtrl, pOut, Pulses );
+TOC(decode_core)
+
+            /********************************************************/
+            /* Update PLC state                                     */
+            /********************************************************/
+            SKP_Silk_PLC( psDec, &sDecCtrl, pOut, L, action );
+
+            psDec->lossCnt = 0;
+            psDec->prev_sigtype = sDecCtrl.sigtype;
+
+            /* A frame has been decoded without errors */
+            psDec->first_frame_after_reset = 0;
+        }
+    }
+    /*************************************************************/
+    /* Generate Concealment frame if packet is lost, or corrupt  */
+    /*************************************************************/
+    if( action == 1 ) {
+        /* Handle packet loss by extrapolation */
+        SKP_Silk_PLC( psDec, &sDecCtrl, pOut, L, action );
+        psDec->lossCnt++;
+    }
+
+    /*************************/
+    /* Update output buffer. */
+    /*************************/
+    SKP_assert( psDec->ltp_mem_length >= psDec->frame_length );
+    mv_len = psDec->ltp_mem_length - psDec->frame_length;
+    SKP_memmove( psDec->outBuf, &psDec->outBuf[ psDec->ltp_mem_length - mv_len ], 
+        mv_len * sizeof(SKP_int16) );
+    SKP_memcpy( &psDec->outBuf[ mv_len ], pOut, 
+        psDec->frame_length * sizeof( SKP_int16 ) );
+
+    /****************************************************************/
+    /* Ensure smooth connection of extrapolated and good frames     */
+    /****************************************************************/
+    SKP_Silk_PLC_glue_frames( psDec, &sDecCtrl, pOut, L );
+
+    /************************************************/
+    /* Comfort noise generation / estimation        */
+    /************************************************/
+    SKP_Silk_CNG( psDec, &sDecCtrl, pOut , L );
+
+    /********************************************/
+    /* HP filter output                            */
+    /********************************************/
+    SKP_assert( ( ( psDec->fs_kHz == 12 ) && ( L % 3 ) == 0 ) || 
+                ( ( psDec->fs_kHz != 12 ) && ( L % 2 ) == 0 ) );
+TIC(HP_out)
+    SKP_Silk_biquad( pOut, psDec->HP_B, psDec->HP_A, psDec->HPState, pOut, L );
+TOC(HP_out)
+
+    /********************************************/
+    /* set output frame length                    */
+    /********************************************/
+    *pN = ( SKP_int16 )L;
+
+    /* Update some decoder state variables */
+    psDec->lagPrev = sDecCtrl.pitchL[ MAX_NB_SUBFR - 1 ];
+TOC(decode_frame)
+
+    return ret;
+}
--- /dev/null
+++ b/src_common/SKP_Silk_decode_indices_v4.c
@@ -1,0 +1,202 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+/* Decode indices from payload */
+void SKP_Silk_decode_indices_v4(
+    SKP_Silk_decoder_state      *psDec            /* I/O    State                              */
+)
+{
+    SKP_int   i, k, Ix, fs_kHz_dec, nb_subfr, FrameIndex = 0, FrameTermination;
+    SKP_int   sigtype, QuantOffsetType, seed_int, nBytesUsed;
+    SKP_int   decode_absolute_lagIndex, delta_lagIndex, prev_lagIndex = 0;
+    const SKP_Silk_NLSF_CB_struct *psNLSF_CB = NULL;
+    SKP_Silk_range_coder_state  *psRC = &psDec->sRC;
+    /************************/
+    /* Decode sampling rate */
+    /************************/
+    /* only done for first frame of packet */
+    if( psDec->nFramesDecoded == 0 ) {
+        SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_SamplingRates_CDF, SKP_Silk_SamplingRates_offset );
+
+        /* check that sampling rate is supported */
+        if( Ix < 0 || Ix > 3 ) {
+            psRC->error = RANGE_CODER_ILLEGAL_SAMPLING_RATE;
+            return;
+        }
+        fs_kHz_dec = SKP_Silk_SamplingRates_table[ Ix ];
+
+        /* Convert number of subframes to index */
+        SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_NbSubframes_CDF, SKP_Silk_NbSubframes_offset );
+        nb_subfr = (Ix + 1) << 1;
+        SKP_assert( nb_subfr == MAX_NB_SUBFR >> 1 || nb_subfr == MAX_NB_SUBFR );
+        
+        SKP_Silk_decoder_set_fs( psDec, fs_kHz_dec, nb_subfr );
+    
+        FrameIndex       = 0;
+        FrameTermination = SKP_SILK_MORE_FRAMES;
+    }
+
+    while( FrameTermination == SKP_SILK_MORE_FRAMES ) {
+        /*******************/
+        /* Decode VAD flag */
+        /*******************/
+        SKP_Silk_range_decoder( &psDec->vadFlagBuf[ FrameIndex ], psRC, SKP_Silk_vadflag_CDF, SKP_Silk_vadflag_offset );
+
+        /*******************************************/
+        /* Decode signal type and quantizer offset */
+        /*******************************************/
+        if( FrameIndex == 0 ) {
+            /* first frame in packet: independent coding */
+            SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_type_offset_CDF, SKP_Silk_type_offset_CDF_offset );
+        } else {
+            /* condidtional coding */
+            SKP_Silk_range_decoder( &Ix, psRC, SKP_Silk_type_offset_joint_CDF[ psDec->typeOffsetPrev ], 
+                    SKP_Silk_type_offset_CDF_offset );
+        }
+        sigtype               = SKP_RSHIFT( Ix, 1 );
+        QuantOffsetType       = Ix & 1;
+        psDec->typeOffsetPrev = Ix;
+
+        /****************/
+        /* Decode gains */
+        /****************/
+        /* first subframe */    
+        if( FrameIndex == 0 ) {
+            /* first frame in packet: independent coding */
+            SKP_Silk_range_decoder( &psDec->GainsIndices[ FrameIndex ][ 0 ], psRC, SKP_Silk_gain_CDF[ sigtype ], SKP_Silk_gain_CDF_offset );
+        } else {
+            /* condidtional coding */
+            SKP_Silk_range_decoder( &psDec->GainsIndices[ FrameIndex ][ 0 ], psRC, SKP_Silk_delta_gain_CDF, SKP_Silk_delta_gain_CDF_offset );
+        }
+
+        /* remaining subframes */
+        for( i = 1; i < psDec->nb_subfr; i++ ) {
+            SKP_Silk_range_decoder( &psDec->GainsIndices[ FrameIndex ][ i ], psRC, SKP_Silk_delta_gain_CDF, SKP_Silk_delta_gain_CDF_offset );
+        }
+        
+        /**********************/
+        /* Decode LSF Indices */
+        /**********************/
+
+        /* Set pointer to LSF VQ CB for the current signal type */
+        psNLSF_CB = psDec->psNLSF_CB[ sigtype ];
+
+        /* Arithmetically decode NLSF path */
+        SKP_Silk_range_decoder_multi( psDec->NLSFIndices[ FrameIndex ], psRC, psNLSF_CB->StartPtr, psNLSF_CB->MiddleIx, psNLSF_CB->nStages );
+        
+        /***********************************/
+        /* Decode LSF interpolation factor */
+        /***********************************/
+        SKP_Silk_range_decoder( &psDec->NLSFInterpCoef_Q2[ FrameIndex ], psRC, SKP_Silk_NLSF_interpolation_factor_CDF, 
+            SKP_Silk_NLSF_interpolation_factor_offset );
+        
+        if( sigtype == SIG_TYPE_VOICED ) {
+            /*********************/
+            /* Decode pitch lags */
+            /*********************/
+            /* Get lag index */
+            decode_absolute_lagIndex = 1;
+            if( FrameIndex > 0 && psDec->sigtype[ FrameIndex - 1 ] == SIG_TYPE_VOICED ) {
+                /* Decode Delta index */
+                SKP_Silk_range_decoder( &delta_lagIndex,psRC, SKP_Silk_pitch_delta_CDF,  SKP_Silk_pitch_delta_CDF_offset );
+                if( delta_lagIndex < ( MAX_DELTA_LAG << 1 ) + 1 ) {
+                    delta_lagIndex = delta_lagIndex - MAX_DELTA_LAG;
+                    psDec->lagIndex[ FrameIndex ] = prev_lagIndex + delta_lagIndex;
+                    decode_absolute_lagIndex = 0;
+                }
+            }
+            if( decode_absolute_lagIndex ) {
+                /* Absolute decoding */
+                if( psDec->fs_kHz == 8 ) {
+                    SKP_Silk_range_decoder( &psDec->lagIndex[ FrameIndex ], psRC, SKP_Silk_pitch_lag_NB_CDF,  SKP_Silk_pitch_lag_NB_CDF_offset );
+                } else if( psDec->fs_kHz == 12 ) {
+                    SKP_Silk_range_decoder( &psDec->lagIndex[ FrameIndex ], psRC, SKP_Silk_pitch_lag_MB_CDF,  SKP_Silk_pitch_lag_MB_CDF_offset );
+                } else if( psDec->fs_kHz == 16 ) {
+                    SKP_Silk_range_decoder( &psDec->lagIndex[ FrameIndex ], psRC, SKP_Silk_pitch_lag_WB_CDF,  SKP_Silk_pitch_lag_WB_CDF_offset );
+                } else {
+                    SKP_Silk_range_decoder( &psDec->lagIndex[ FrameIndex ], psRC, SKP_Silk_pitch_lag_SWB_CDF, SKP_Silk_pitch_lag_SWB_CDF_offset );
+                }
+            }
+            prev_lagIndex = psDec->lagIndex[ FrameIndex ];
+
+            /* Get countour index */
+            if( psDec->fs_kHz == 8 ) {
+                /* Less codevectors used in 8 khz mode */
+                SKP_Silk_range_decoder( &psDec->contourIndex[ FrameIndex ], psRC, SKP_Silk_pitch_contour_NB_CDF, SKP_Silk_pitch_contour_NB_CDF_offset );
+            } else {
+                /* Joint for 12, 16, and 24 khz */
+                SKP_Silk_range_decoder( &psDec->contourIndex[ FrameIndex ], psRC, SKP_Silk_pitch_contour_CDF, SKP_Silk_pitch_contour_CDF_offset );
+            }
+            
+            /********************/
+            /* Decode LTP gains */
+            /********************/
+            /* Decode PERIndex value */
+            SKP_Silk_range_decoder( &psDec->PERIndex[ FrameIndex ], psRC, SKP_Silk_LTP_per_index_CDF, SKP_Silk_LTP_per_index_CDF_offset );
+            
+            for( k = 0; k < psDec->nb_subfr; k++ ) {
+                SKP_Silk_range_decoder( &psDec->LTPIndex[ FrameIndex ][ k ], psRC, SKP_Silk_LTP_gain_CDF_ptrs[ psDec->PERIndex[ FrameIndex ] ], 
+                    SKP_Silk_LTP_gain_CDF_offsets[ psDec->PERIndex[ FrameIndex ] ] );
+            }
+
+            /**********************/
+            /* Decode LTP scaling */
+            /**********************/
+            SKP_Silk_range_decoder( &psDec->LTP_scaleIndex[ FrameIndex ], psRC, SKP_Silk_LTPscale_CDF, SKP_Silk_LTPscale_offset );
+        }
+
+        /***************/
+        /* Decode seed */
+        /***************/
+        SKP_Silk_range_decoder( &seed_int, psRC, SKP_Silk_Seed_CDF, SKP_Silk_Seed_offset );
+        psDec->Seed[ FrameIndex ] = ( SKP_int32 )seed_int;
+        /**************************************/
+        /* Decode Frame termination indicator */
+        /**************************************/
+        SKP_Silk_range_decoder( &FrameTermination, psRC, SKP_Silk_FrameTermination_v4_CDF, SKP_Silk_FrameTermination_v4_offset );
+
+        psDec->sigtype[ FrameIndex ]         = sigtype;
+        psDec->QuantOffsetType[ FrameIndex ] = QuantOffsetType;
+
+        FrameIndex++;
+    }
+
+    /****************************************/
+    /* get number of bytes used so far      */
+    /****************************************/
+    SKP_Silk_range_decoder_get_length( psRC, &nBytesUsed );
+    psDec->nBytesLeft = psRC->range_dec_celt_state.buf->storage - nBytesUsed;
+
+    if( psDec->nBytesLeft < 0 ) {
+        psRC->error = RANGE_CODER_READ_BEYOND_BUFFER;
+    }
+
+    psDec->nFramesInPacket  = FrameIndex;
+    psDec->FrameTermination = FrameTermination;
+}
--- /dev/null
+++ b/src_common/SKP_Silk_decode_parameters_v4.c
@@ -1,0 +1,162 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+/* Decode parameters from payload */
+void SKP_Silk_decode_parameters_v4(
+    SKP_Silk_decoder_state      *psDec,                                 /* I/O  State                                    */
+    SKP_Silk_decoder_control    *psDecCtrl,                             /* I/O  Decoder control                          */
+    SKP_int                     q[ MAX_FRAME_LENGTH ],                  /* O    Excitation signal                        */
+    const SKP_int               fullDecoding                            /* I    Flag to tell if only arithmetic decoding */
+)
+{
+    SKP_int   i, k, Ix, nBytesUsed;
+    SKP_int   pNLSF_Q15[ MAX_LPC_ORDER ], pNLSF0_Q15[ MAX_LPC_ORDER ];
+    const SKP_int16 *cbk_ptr_Q14;
+    const SKP_Silk_NLSF_CB_struct *psNLSF_CB = NULL;
+    SKP_Silk_range_coder_state  *psRC = &psDec->sRC;
+    
+    psDec->FrameTermination       = SKP_SILK_MORE_FRAMES;
+    psDecCtrl->sigtype            = psDec->sigtype[ psDec->nFramesDecoded ];
+    psDecCtrl->QuantOffsetType    = psDec->QuantOffsetType[ psDec->nFramesDecoded ];
+    psDec->vadFlag                = psDec->vadFlagBuf[ psDec->nFramesDecoded ];
+    psDecCtrl->NLSFInterpCoef_Q2  = psDec->NLSFInterpCoef_Q2[ psDec->nFramesDecoded ];
+    psDecCtrl->Seed               = psDec->Seed[ psDec->nFramesDecoded ];
+
+    /* Dequant Gains */
+    SKP_Silk_gains_dequant( psDecCtrl->Gains_Q16, psDec->GainsIndices[ psDec->nFramesDecoded ], 
+        &psDec->LastGainIndex, psDec->nFramesDecoded, psDec->nb_subfr );
+    /****************/
+    /* Decode NLSFs */
+    /****************/
+
+    /* Set pointer to NLSF VQ CB for the current signal type */
+    psNLSF_CB = psDec->psNLSF_CB[ psDecCtrl->sigtype ];
+
+    /* From the NLSF path, decode an NLSF vector */
+    SKP_Silk_NLSF_MSVQ_decode( pNLSF_Q15, psNLSF_CB, psDec->NLSFIndices[ psDec->nFramesDecoded ], psDec->LPC_order );
+
+    /* Convert NLSF parameters to AR prediction filter coefficients */
+    SKP_Silk_NLSF2A_stable( psDecCtrl->PredCoef_Q12[ 1 ], pNLSF_Q15, psDec->LPC_order );
+    
+    /* If just reset, e.g., because internal Fs changed, do not allow interpolation */
+    /* improves the case of packet loss in the first frame after a switch           */
+    if( psDec->first_frame_after_reset == 1 ) {
+        psDecCtrl->NLSFInterpCoef_Q2 = 4;
+    }
+
+    if( psDecCtrl->NLSFInterpCoef_Q2 < 4 ) {
+        /* Calculation of the interpolated NLSF0 vector from the interpolation factor, */ 
+        /* the previous NLSF1, and the current NLSF1                                   */
+        for( i = 0; i < psDec->LPC_order; i++ ) {
+            pNLSF0_Q15[ i ] = psDec->prevNLSF_Q15[ i ] + SKP_RSHIFT( SKP_MUL( psDecCtrl->NLSFInterpCoef_Q2, 
+                ( pNLSF_Q15[ i ] - psDec->prevNLSF_Q15[ i ] ) ), 2 );
+        }
+
+        /* Convert NLSF parameters to AR prediction filter coefficients */
+        SKP_Silk_NLSF2A_stable( psDecCtrl->PredCoef_Q12[ 0 ], pNLSF0_Q15, psDec->LPC_order );
+    } else {
+        /* Copy LPC coefficients for first half from second half */
+        SKP_memcpy( psDecCtrl->PredCoef_Q12[ 0 ], psDecCtrl->PredCoef_Q12[ 1 ], 
+            psDec->LPC_order * sizeof( SKP_int16 ) );
+    }
+
+    SKP_memcpy( psDec->prevNLSF_Q15, pNLSF_Q15, psDec->LPC_order * sizeof( SKP_int ) );
+
+    /* After a packet loss do BWE of LPC coefs */
+    if( psDec->lossCnt ) {
+        SKP_Silk_bwexpander( psDecCtrl->PredCoef_Q12[ 0 ], psDec->LPC_order, BWE_AFTER_LOSS_Q16 );
+        SKP_Silk_bwexpander( psDecCtrl->PredCoef_Q12[ 1 ], psDec->LPC_order, BWE_AFTER_LOSS_Q16 );
+    }
+
+    if( psDecCtrl->sigtype == SIG_TYPE_VOICED ) {
+        /*********************/
+        /* Decode pitch lags */
+        /*********************/
+        
+        /* Decode pitch values */
+        SKP_Silk_decode_pitch( psDec->lagIndex[ psDec->nFramesDecoded ], psDec->contourIndex[ psDec->nFramesDecoded ], 
+                               psDecCtrl->pitchL, psDec->fs_kHz, psDec->nb_subfr );
+
+        /********************/
+        /* Decode LTP gains */
+        /********************/
+        psDecCtrl->PERIndex = psDec->PERIndex[ psDec->nFramesDecoded ];
+        
+        /* Decode Codebook Index */
+        cbk_ptr_Q14 = SKP_Silk_LTP_vq_ptrs_Q14[ psDecCtrl->PERIndex ]; /* set pointer to start of codebook */
+
+        for( k = 0; k < psDec->nb_subfr; k++ ) {
+            Ix = psDec->LTPIndex[ psDec->nFramesDecoded ][ k ];
+            for( i = 0; i < LTP_ORDER; i++ ) {
+                psDecCtrl->LTPCoef_Q14[ SKP_SMULBB( k, LTP_ORDER ) + i ] = cbk_ptr_Q14[ SKP_SMULBB( Ix, LTP_ORDER ) + i ];
+            }
+        }
+
+        /**********************/
+        /* Decode LTP scaling */
+        /**********************/
+        Ix = psDec->LTP_scaleIndex[ psDec->nFramesDecoded ];
+        psDecCtrl->LTP_scale_Q14 = SKP_Silk_LTPScales_table_Q14[ Ix ];
+    } else {
+        SKP_assert( psDecCtrl->sigtype == SIG_TYPE_UNVOICED );
+        SKP_memset( psDecCtrl->pitchL,      0, psDec->nb_subfr * sizeof( SKP_int ) );
+        SKP_memset( psDecCtrl->LTPCoef_Q14, 0, psDec->nb_subfr * LTP_ORDER * sizeof( SKP_int16 ) );
+        psDecCtrl->PERIndex      = 0;
+        psDecCtrl->LTP_scale_Q14 = 0;
+    }
+
+    /*********************************************/
+    /* Decode quantization indices of excitation */
+    /*********************************************/
+TIC(decode_pulses)
+    SKP_Silk_decode_pulses( psRC, psDecCtrl, q, psDec->frame_length );
+TOC(decode_pulses)
+
+    /****************************************/
+    /* get number of bytes used so far      */
+    /****************************************/
+    SKP_Silk_range_decoder_get_length( psRC, &nBytesUsed );
+    psDec->nBytesLeft = psRC->range_dec_celt_state.buf->storage - nBytesUsed;
+
+    if( psDec->nBytesLeft < 0 ) {
+        psRC->error = RANGE_CODER_READ_BEYOND_BUFFER;
+    }
+
+    /****************************************/
+    /* check remaining bits in last byte    */
+    /****************************************/
+    if( psDec->nBytesLeft == 0 ) {
+        SKP_Silk_range_coder_check_after_decoding( psRC );
+    }
+
+    if( psDec->nFramesInPacket == (psDec->nFramesDecoded + 1)) {
+        /* To indicate the packet has been fully decoded */
+        psDec->FrameTermination = SKP_SILK_LAST_FRAME;
+    }
+}
--- /dev/null
+++ b/src_common/SKP_Silk_decode_pulses.c
@@ -1,0 +1,109 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+/*********************************************/
+/* Decode quantization indices of excitation */
+/*********************************************/
+void SKP_Silk_decode_pulses(
+    SKP_Silk_range_coder_state      *psRC,              /* I/O  Range coder state                           */
+    SKP_Silk_decoder_control        *psDecCtrl,         /* I/O  Decoder control                             */
+    SKP_int                         q[],                /* O    Excitation signal                           */
+    const SKP_int                   frame_length        /* I    Frame length (preliminary)                  */
+)
+{
+    SKP_int   i, j, k, iter, abs_q, nLS, bit;
+    SKP_int   sum_pulses[ MAX_NB_SHELL_BLOCKS ], nLshifts[ MAX_NB_SHELL_BLOCKS ];
+    SKP_int   *pulses_ptr;
+    const SKP_uint16 *cdf_ptr;
+    
+    /*********************/
+    /* Decode rate level */
+    /*********************/
+    SKP_Silk_range_decoder( &psDecCtrl->RateLevelIndex, psRC, 
+            SKP_Silk_rate_levels_CDF[ psDecCtrl->sigtype ], SKP_Silk_rate_levels_CDF_offset );
+
+    /* Calculate number of shell blocks */
+    SKP_assert( 1 << LOG2_SHELL_CODEC_FRAME_LENGTH == SHELL_CODEC_FRAME_LENGTH );
+    iter = SKP_RSHIFT( frame_length, LOG2_SHELL_CODEC_FRAME_LENGTH );
+    if( iter * SHELL_CODEC_FRAME_LENGTH < frame_length ){
+        SKP_assert( frame_length == 12 * 10 ); /* Make sure only happens for 10 ms @ 12 kHz */
+        iter++;
+    }
+    /***************************************************/
+    /* Sum-Weighted-Pulses Decoding                    */
+    /***************************************************/
+    cdf_ptr = SKP_Silk_pulses_per_block_CDF[ psDecCtrl->RateLevelIndex ];
+    for( i = 0; i < iter; i++ ) {
+        nLshifts[ i ] = 0;
+        SKP_Silk_range_decoder( &sum_pulses[ i ], psRC, cdf_ptr, SKP_Silk_pulses_per_block_CDF_offset );
+
+        /* LSB indication */
+        while( sum_pulses[ i ] == ( MAX_PULSES + 1 ) ) {
+            nLshifts[ i ]++;
+            SKP_Silk_range_decoder( &sum_pulses[ i ], psRC, 
+                    SKP_Silk_pulses_per_block_CDF[ N_RATE_LEVELS - 1 ], SKP_Silk_pulses_per_block_CDF_offset );
+        }
+    }
+    
+    /***************************************************/
+    /* Shell decoding                                  */
+    /***************************************************/
+    for( i = 0; i < iter; i++ ) {
+        if( sum_pulses[ i ] > 0 ) {
+            SKP_Silk_shell_decoder( &q[ SKP_SMULBB( i, SHELL_CODEC_FRAME_LENGTH ) ], psRC, sum_pulses[ i ] );
+        } else {
+            SKP_memset( &q[ SKP_SMULBB( i, SHELL_CODEC_FRAME_LENGTH ) ], 0, SHELL_CODEC_FRAME_LENGTH * sizeof( SKP_int ) );
+        }
+    }
+
+    /***************************************************/
+    /* LSB Decoding                                    */
+    /***************************************************/
+    for( i = 0; i < iter; i++ ) {
+        if( nLshifts[ i ] > 0 ) {
+            nLS = nLshifts[ i ];
+            pulses_ptr = &q[ SKP_SMULBB( i, SHELL_CODEC_FRAME_LENGTH ) ];
+            for( k = 0; k < SHELL_CODEC_FRAME_LENGTH; k++ ) {
+                abs_q = pulses_ptr[ k ];
+                for( j = 0; j < nLS; j++ ) {
+                    abs_q = SKP_LSHIFT( abs_q, 1 ); 
+                    SKP_Silk_range_decoder( &bit, psRC, SKP_Silk_lsb_CDF, 1 );
+                    abs_q += bit;
+                }
+                pulses_ptr[ k ] = abs_q;
+            }
+        }
+    }
+
+    /****************************************/
+    /* Decode and add signs to pulse signal */
+    /****************************************/
+    SKP_Silk_decode_signs( psRC, q, frame_length, psDecCtrl->sigtype, 
+        psDecCtrl->QuantOffsetType, psDecCtrl->RateLevelIndex);
+}
--- /dev/null
+++ b/src_common/SKP_Silk_decoder_set_fs.c
@@ -1,0 +1,85 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+/* Set decoder sampling rate */
+void SKP_Silk_decoder_set_fs(
+    SKP_Silk_decoder_state          *psDec,             /* I/O  Decoder state pointer                       */
+    SKP_int                         fs_kHz,             /* I    Sampling frequency (kHz)                    */
+    SKP_int                         nb_subfr            /* I    Number of subframes                         */
+)
+{
+    psDec->nb_subfr = nb_subfr;
+    psDec->frame_length   = SKP_SMULBB( psDec->nb_subfr, psDec->subfr_length );
+    if( psDec->fs_kHz != fs_kHz ) {
+        psDec->fs_kHz  = fs_kHz;
+        psDec->subfr_length   = SKP_SMULBB( SUB_FRAME_LENGTH_MS, fs_kHz );
+        psDec->frame_length   = SKP_SMULBB( psDec->nb_subfr, psDec->subfr_length );
+        psDec->ltp_mem_length = SKP_SMULBB( LTP_MEM_LENGTH_MS, fs_kHz );
+        if( psDec->fs_kHz == 8 ) {
+            psDec->LPC_order = MIN_LPC_ORDER;
+            psDec->psNLSF_CB[ 0 ] = &SKP_Silk_NLSF_CB0_10;
+            psDec->psNLSF_CB[ 1 ] = &SKP_Silk_NLSF_CB1_10;
+        } else {
+            psDec->LPC_order = MAX_LPC_ORDER;
+            psDec->psNLSF_CB[ 0 ] = &SKP_Silk_NLSF_CB0_16;
+            psDec->psNLSF_CB[ 1 ] = &SKP_Silk_NLSF_CB1_16;
+        }
+        /* Reset part of the decoder state */
+        SKP_memset( psDec->sLPC_Q14,     0, MAX_LPC_ORDER      * sizeof( SKP_int32 ) );
+        SKP_memset( psDec->outBuf,       0, MAX_FRAME_LENGTH   * sizeof( SKP_int16 ) );
+        SKP_memset( psDec->prevNLSF_Q15, 0, MAX_LPC_ORDER      * sizeof( SKP_int )   );
+
+        psDec->sLTP_buf_idx            = 0;
+        psDec->lagPrev                 = 100;
+        psDec->LastGainIndex           = 1;
+        psDec->prev_sigtype            = 0;
+        psDec->first_frame_after_reset = 1;
+
+        if( fs_kHz == 24 ) {
+            psDec->HP_A = SKP_Silk_Dec_A_HP_24;
+            psDec->HP_B = SKP_Silk_Dec_B_HP_24;
+        } else if( fs_kHz == 16 ) {
+            psDec->HP_A = SKP_Silk_Dec_A_HP_16;
+            psDec->HP_B = SKP_Silk_Dec_B_HP_16;
+        } else if( fs_kHz == 12 ) {
+            psDec->HP_A = SKP_Silk_Dec_A_HP_12;
+            psDec->HP_B = SKP_Silk_Dec_B_HP_12;
+        } else if( fs_kHz == 8 ) {
+            psDec->HP_A = SKP_Silk_Dec_A_HP_8;
+            psDec->HP_B = SKP_Silk_Dec_B_HP_8;
+        } else {
+            /* unsupported sampling rate */
+            SKP_assert( 0 );
+        }
+    } 
+
+    /* Check that settings are valid */
+    SKP_assert( psDec->frame_length > 0 && psDec->frame_length <= MAX_FRAME_LENGTH );
+}
+
--- /dev/null
+++ b/src_common/SKP_Silk_define.h
@@ -1,0 +1,317 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_DEFINE_H
+#define SKP_SILK_DEFINE_H
+
+#include "SKP_Silk_errors.h"
+#include "SKP_Silk_typedef.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define MAX_FRAMES_PER_PACKET                   3
+
+#ifndef FIXED_POINT
+#    define FIXED_POINT                         0
+#endif
+
+/* MAX DELTA LAG used for multiframe packets */
+#define MAX_DELTA_LAG                           10
+
+/* Lower limit on bitrate for each mode */
+#define MIN_TARGET_RATE_NB_BPS                  5000
+#define MIN_TARGET_RATE_MB_BPS                  7000
+#define MIN_TARGET_RATE_WB_BPS                  8000
+#define MIN_TARGET_RATE_SWB_BPS                 20000
+
+/* Transition bitrates between modes */
+#define SWB2WB_BITRATE_BPS                      25000
+#define WB2SWB_BITRATE_BPS                      30000
+#define WB2MB_BITRATE_BPS                       14000
+#define MB2WB_BITRATE_BPS                       18000
+#define MB2NB_BITRATE_BPS                       10000
+#define NB2MB_BITRATE_BPS                       14000
+
+/* Integration/hysteresis threshold for lowering internal sample frequency */
+/* 30000000 -> 6 sec if bitrate is 5000 bps below limit; 3 sec if bitrate is 10000 bps below limit */
+#define ACCUM_BITS_DIFF_THRESHOLD               30000000 
+#define TARGET_RATE_TAB_SZ                      8
+
+/* DTX settings                                 */
+#define NO_SPEECH_FRAMES_BEFORE_DTX             5       /* eq 100 ms */
+#define MAX_CONSECUTIVE_DTX                     20      /* eq 400 ms */
+
+#define USE_LBRR                                1
+
+/* Amount of concecutive no FEC packets before telling JB */
+#define NO_LBRR_THRES                           10
+
+/* Maximum delay between real packet and LBRR packet */
+#define MAX_LBRR_DELAY                          2
+#define LBRR_IDX_MASK                           1
+
+#define INBAND_FEC_MIN_RATE_BPS                 18000  /* Dont use inband FEC below this total target rate  */
+#define LBRR_LOSS_THRES                         2   /* Start adding LBRR at this loss rate (needs tuning)   */
+
+/* LBRR usage defines */
+#define SKP_SILK_NO_LBRR                        0   /* No LBRR information for this packet                  */
+#define SKP_SILK_ADD_LBRR_TO_PLUS1              1   /* Add LBRR for this packet to packet n + 1             */
+#define SKP_SILK_ADD_LBRR_TO_PLUS2              2   /* Add LBRR for this packet to packet n + 2             */
+
+/* Frame termination indicator defines */
+#define SKP_SILK_LAST_FRAME                     0   /* Last frames in packet                                */
+#define SKP_SILK_MORE_FRAMES                    1   /* More frames to follow this one                       */
+#define SKP_SILK_LBRR_VER1                      2   /* LBRR information from packet n - 1                   */
+#define SKP_SILK_LBRR_VER2                      3   /* LBRR information from packet n - 2                   */
+#define SKP_SILK_EXT_LAYER                      4   /* Extension layers added                               */
+
+/* Number of Second order Sections for SWB detection HP filter */
+#define NB_SOS                                  3
+#define HP_8_KHZ_THRES                          10          /* average energy per sample, above 8 kHz       */
+#define CONCEC_SWB_SMPLS_THRES                  480 * 15    /* 300 ms                                       */
+#define WB_DETECT_ACTIVE_SPEECH_MS_THRES        15000       /* ms of active speech needed for WB detection  */
+
+/* Low complexity setting */
+#define LOW_COMPLEXITY_ONLY                     0
+
+/* Activate bandwidth transition filtering for mode switching */
+#  define SWITCH_TRANSITION_FILTERING           1
+
+/* Decoder Parameters */
+#define DEC_HP_ORDER                            2
+
+/* Maximum sampling frequency, should be 16 for embedded */
+#define MAX_FS_KHZ                              24 
+#define MAX_API_FS_KHZ                          48
+
+/* Signal Types used by silk */
+#define SIG_TYPE_VOICED                         0
+#define SIG_TYPE_UNVOICED                       1
+
+/* VAD Types used by silk */
+#define NO_VOICE_ACTIVITY                       0
+#define VOICE_ACTIVITY                          1
+
+/* Number of subframes */
+#define MAX_NB_SUBFR                            4
+
+/* number of samples per frame */ 
+#define LTP_MEM_LENGTH_MS                       20
+#define SUB_FRAME_LENGTH_MS                     5
+#define MAX_SUB_FRAME_LENGTH                    ( SUB_FRAME_LENGTH_MS * MAX_FS_KHZ )
+#define MAX_FRAME_LENGTH_MS                     ( SUB_FRAME_LENGTH_MS * MAX_NB_SUBFR )
+#define MAX_FRAME_LENGTH                        ( MAX_FRAME_LENGTH_MS * MAX_FS_KHZ )
+
+/* number of lookahead samples for pitch analysis */
+#define LA_PITCH_MS                             3
+#define LA_PITCH_MAX                            (LA_PITCH_MS * MAX_FS_KHZ)
+
+/* number of lookahead samples for noise shape analysis */
+#define LA_SHAPE_MS                             5
+#define LA_SHAPE_MAX                            (LA_SHAPE_MS * MAX_FS_KHZ)
+
+/* Order of LPC used in find pitch */
+#define MAX_FIND_PITCH_LPC_ORDER                16
+
+/* Length of LPC window used in find pitch */
+#define FIND_PITCH_LPC_WIN_MS                   (30 + (LA_PITCH_MS << 1))
+#define FIND_PITCH_LPC_WIN_MS_2_SF              (15 + (LA_PITCH_MS << 1))
+#define FIND_PITCH_LPC_WIN_MAX                  (FIND_PITCH_LPC_WIN_MS * MAX_FS_KHZ)
+
+#define PITCH_EST_COMPLEXITY_HC_MODE            SKP_Silk_PE_MAX_COMPLEX
+#define PITCH_EST_COMPLEXITY_MC_MODE            SKP_Silk_PE_MID_COMPLEX
+#define PITCH_EST_COMPLEXITY_LC_MODE            SKP_Silk_PE_MIN_COMPLEX
+
+
+/* Max number of bytes in payload output buffer (may contain multiple frames) */
+#define MAX_ARITHM_BYTES                        1024
+
+#define RANGE_CODER_WRITE_BEYOND_BUFFER         -1
+#define RANGE_CODER_CDF_OUT_OF_RANGE            -2
+#define RANGE_CODER_NORMALIZATION_FAILED        -3
+#define RANGE_CODER_ZERO_INTERVAL_WIDTH         -4
+#define RANGE_CODER_DECODER_CHECK_FAILED        -5
+#define RANGE_CODER_READ_BEYOND_BUFFER          -6
+#define RANGE_CODER_ILLEGAL_SAMPLING_RATE       -7
+#define RANGE_CODER_DEC_PAYLOAD_TOO_LONG        -8
+
+/* dB level of lowest gain quantization level */
+#define MIN_QGAIN_DB                            6
+/* dB level of highest gain quantization level */
+#define MAX_QGAIN_DB                            86
+/* Number of gain quantization levels */
+#define N_LEVELS_QGAIN                          64
+/* Max increase in gain quantization index */
+#define MAX_DELTA_GAIN_QUANT                    40
+/* Max decrease in gain quantization index */
+#define MIN_DELTA_GAIN_QUANT                    -4
+
+/* Quantization offsets (multiples of 4) */
+#define OFFSET_VL_Q10                           32
+#define OFFSET_VH_Q10                           100
+#define OFFSET_UVL_Q10                          100
+#define OFFSET_UVH_Q10                          256
+
+/* Maximum numbers of iterations used to stabilize a LPC vector */
+#define MAX_LPC_STABILIZE_ITERATIONS            20
+
+#define MAX_LPC_ORDER                           16
+#define MIN_LPC_ORDER                           10
+
+/* Find Pred Coef defines */
+#define LTP_ORDER                               5
+
+/* LTP quantization settings */
+#define NB_LTP_CBKS                             3
+
+/* Flag to use harmonic noise shaping */
+#define USE_HARM_SHAPING                        1
+
+/* Max LPC order of noise shaping filters */
+#define MAX_SHAPE_LPC_ORDER                     16
+
+#define HARM_SHAPE_FIR_TAPS                     3
+
+/* Length of LPC window used in noise shape analysis */
+#define SHAPE_LPC_WIN_MS                        15
+#define SHAPE_LPC_WIN_16_KHZ                    (SHAPE_LPC_WIN_MS * 16)
+#define SHAPE_LPC_WIN_24_KHZ                    (SHAPE_LPC_WIN_MS * 24)
+#define SHAPE_LPC_WIN_MAX                       (SHAPE_LPC_WIN_MS * MAX_FS_KHZ)
+
+/* Maximum number of delayed decision states */
+#define MAX_DEL_DEC_STATES                      4
+
+#define LTP_BUF_LENGTH                          512
+#define LTP_MASK                                (LTP_BUF_LENGTH - 1)
+
+#define DECISION_DELAY                          32
+#define DECISION_DELAY_MASK                     (DECISION_DELAY - 1)
+
+/* number of subframes for excitation entropy coding */
+#define SHELL_CODEC_FRAME_LENGTH                16
+#define LOG2_SHELL_CODEC_FRAME_LENGTH           4
+#define MAX_NB_SHELL_BLOCKS                     (MAX_FRAME_LENGTH / SHELL_CODEC_FRAME_LENGTH)
+
+/* number of rate levels, for entropy coding of excitation */
+#define N_RATE_LEVELS                           10
+
+/* maximum sum of pulses per shell coding frame */
+#define MAX_PULSES                              18
+
+#define MAX_MATRIX_SIZE                         MAX_LPC_ORDER /* Max of LPC Order and LTP order */
+
+#if( MAX_LPC_ORDER > DECISION_DELAY )
+# define NSQ_LPC_BUF_LENGTH                     MAX_LPC_ORDER
+#else
+# define NSQ_LPC_BUF_LENGTH                     DECISION_DELAY
+#endif
+
+/***********************/
+/* High pass filtering */
+/***********************/
+#define HIGH_PASS_INPUT                         1
+
+/***************************/
+/* Voice activity detector */
+/***************************/
+#define VAD_N_BANDS                             4
+
+#define VAD_INTERNAL_SUBFRAMES_LOG2             2
+#define VAD_INTERNAL_SUBFRAMES                  (1 << VAD_INTERNAL_SUBFRAMES_LOG2)
+    
+#define VAD_NOISE_LEVEL_SMOOTH_COEF_Q16         1024    /* Must be <  4096                                  */
+#define VAD_NOISE_LEVELS_BIAS                   50 
+
+/* Sigmoid settings */
+#define VAD_NEGATIVE_OFFSET_Q5                  128     /* sigmoid is 0 at -128                             */
+#define VAD_SNR_FACTOR_Q16                      45000 
+
+/* smoothing for SNR measurement */
+#define VAD_SNR_SMOOTH_COEF_Q18                 4096
+
+/******************/
+/* NLSF quantizer */
+/******************/
+#   define NLSF_MSVQ_MAX_CB_STAGES                      10  /* Update manually when changing codebooks      */
+#   define NLSF_MSVQ_MAX_VECTORS_IN_STAGE               128 /* Update manually when changing codebooks      */
+#   define NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END    16  /* Update manually when changing codebooks      */
+
+#define NLSF_MSVQ_FLUCTUATION_REDUCTION         1
+#define MAX_NLSF_MSVQ_SURVIVORS                 16
+#define MAX_NLSF_MSVQ_SURVIVORS_LC_MODE         2
+#define MAX_NLSF_MSVQ_SURVIVORS_MC_MODE         4
+
+/* Based on above defines, calculate how much memory is necessary to allocate */
+#if( NLSF_MSVQ_MAX_VECTORS_IN_STAGE > ( MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END ) )
+#   define NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED_LC_MODE  NLSF_MSVQ_MAX_VECTORS_IN_STAGE
+#else
+#   define NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED_LC_MODE  MAX_NLSF_MSVQ_SURVIVORS_LC_MODE * NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END
+#endif
+
+#if( NLSF_MSVQ_MAX_VECTORS_IN_STAGE > ( MAX_NLSF_MSVQ_SURVIVORS * NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END ) )
+#   define NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED  NLSF_MSVQ_MAX_VECTORS_IN_STAGE
+#else
+#   define NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED  MAX_NLSF_MSVQ_SURVIVORS * NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END
+#endif
+
+#define NLSF_MSVQ_SURV_MAX_REL_RD               4
+
+/* Transition filtering for mode switching */
+#if SWITCH_TRANSITION_FILTERING
+#  define TRANSITION_TIME_UP_MS                 5120 // 5120 = 64 * FRAME_LENGTH_MS * ( TRANSITION_INT_NUM - 1 ) = 64*(20*4)
+#  define TRANSITION_TIME_DOWN_MS               2560 // 2560 = 32 * FRAME_LENGTH_MS * ( TRANSITION_INT_NUM - 1 ) = 32*(20*4)
+#  define TRANSITION_NB                         3 /* Hardcoded in tables */
+#  define TRANSITION_NA                         2 /* Hardcoded in tables */
+#  define TRANSITION_INT_NUM                    5 /* Hardcoded in tables */
+#  define TRANSITION_FRAMES_UP                  ( TRANSITION_TIME_UP_MS   / MAX_FRAME_LENGTH_MS ) // NB! needs to be made flexible for 10 ms frames
+#  define TRANSITION_FRAMES_DOWN                ( TRANSITION_TIME_DOWN_MS / MAX_FRAME_LENGTH_MS ) // NB! needs to be made flexible for 10 ms frames
+#  define TRANSITION_INT_STEPS_UP               ( TRANSITION_FRAMES_UP    / ( TRANSITION_INT_NUM - 1 )  )
+#  define TRANSITION_INT_STEPS_DOWN             ( TRANSITION_FRAMES_DOWN  / ( TRANSITION_INT_NUM - 1 )  )
+#endif
+
+/* BWE factors to apply after packet loss */
+#define BWE_AFTER_LOSS_Q16                      63570
+
+/*************************/
+/* Perceptual parameters */
+/*************************/
+/* Amount of warping to apply */
+#define WARPING_MULTIPLIER_Q16                  SKP_FIX_CONST( 0.02, 16 )
+
+/* Defines for CN generation */
+#define CNG_BUF_MASK_MAX                        255             /* 2^floor(log2(MAX_FRAME_LENGTH))-1    */
+#define CNG_GAIN_SMTH_Q16                       4634            /* 0.25^(1/4)                           */
+#define CNG_NLSF_SMTH_Q16                       16348           /* 0.25                                 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+++ b/src_common/SKP_Silk_detect_SWB_input.c
@@ -1,0 +1,76 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*
+ * Detect SWB input by measuring energy above 8 kHz.
+ */
+
+#include "SKP_Silk_main.h"
+
+void SKP_Silk_detect_SWB_input(
+    SKP_Silk_detect_SWB_state   *psSWBdetect,   /* (I/O) encoder state  */
+    const SKP_int16             samplesIn[],    /* (I) input to encoder */
+    SKP_int                     nSamplesIn      /* (I) length of input */
+)
+{
+    SKP_int     HP_8_kHz_len, i, shift;
+    SKP_int16   in_HP_8_kHz[ MAX_FRAME_LENGTH ];
+    SKP_int32   energy_32;
+    
+    /* High pass filter with cutoff at 8 khz */
+    HP_8_kHz_len = SKP_min_int( nSamplesIn, MAX_FRAME_LENGTH );
+    HP_8_kHz_len = SKP_max_int( HP_8_kHz_len, 0 );
+
+    /* Cutoff around 9 khz */
+    /* A = conv(conv([8192,14613, 6868], [8192,12883, 7337]), [8192,11586, 7911]); */
+    /* B = conv(conv([575, -948, 575], [575, -221, 575]), [575, 104, 575]); */
+    SKP_Silk_biquad( samplesIn, SKP_Silk_SWB_detect_B_HP_Q13[ 0 ], SKP_Silk_SWB_detect_A_HP_Q13[ 0 ], 
+        psSWBdetect->S_HP_8_kHz[ 0 ], in_HP_8_kHz, HP_8_kHz_len );
+    for( i = 1; i < NB_SOS; i++ ) {
+        SKP_Silk_biquad( in_HP_8_kHz, SKP_Silk_SWB_detect_B_HP_Q13[ i ], SKP_Silk_SWB_detect_A_HP_Q13[ i ], 
+            psSWBdetect->S_HP_8_kHz[ i ], in_HP_8_kHz, HP_8_kHz_len );
+    }
+
+    /* Calculate energy in HP signal */
+    SKP_Silk_sum_sqr_shift( &energy_32, &shift, in_HP_8_kHz, HP_8_kHz_len );
+
+    /* Count concecutive samples above threshold, after adjusting threshold for number of input samples and shift */
+    if( energy_32 > SKP_RSHIFT( SKP_SMULBB( HP_8_KHZ_THRES, HP_8_kHz_len ), shift ) ) {
+        psSWBdetect->ConsecSmplsAboveThres += nSamplesIn;
+        if( psSWBdetect->ConsecSmplsAboveThres > CONCEC_SWB_SMPLS_THRES ) {
+            psSWBdetect->SWB_detected = 1;
+        }
+    } else {
+        psSWBdetect->ConsecSmplsAboveThres -= nSamplesIn;
+        psSWBdetect->ConsecSmplsAboveThres = SKP_max( psSWBdetect->ConsecSmplsAboveThres, 0 );
+    }
+
+    /* If sufficient speech activity and no SWB detected, we detect the signal as being WB */
+    if( ( psSWBdetect->ActiveSpeech_ms > WB_DETECT_ACTIVE_SPEECH_MS_THRES ) && ( psSWBdetect->SWB_detected == 0 ) ) {
+        psSWBdetect->WB_detected = 1;
+    }
+}
--- /dev/null
+++ b/src_common/SKP_Silk_enc_API.c
@@ -1,0 +1,242 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+
+#include "SKP_Silk_define.h"
+#include "SKP_Silk_SDK_API.h"
+#include "SKP_Silk_control.h"
+#include "SKP_Silk_typedef.h"
+#include "SKP_Silk_structs.h"
+#if FIXED_POINT
+#include "SKP_Silk_main_FIX.h"
+#define SKP_Silk_encoder_state_Fxx      SKP_Silk_encoder_state_FIX
+#define SKP_Silk_init_encoder_Fxx       SKP_Silk_init_encoder_FIX
+#define SKP_Silk_control_encoder_Fxx    SKP_Silk_control_encoder_FIX
+#define SKP_Silk_encode_frame_Fxx       SKP_Silk_encode_frame_FIX
+#else
+#include "SKP_Silk_main_FLP.h"
+#define SKP_Silk_encoder_state_Fxx      SKP_Silk_encoder_state_FLP
+#define SKP_Silk_init_encoder_Fxx       SKP_Silk_init_encoder_FLP
+#define SKP_Silk_control_encoder_Fxx    SKP_Silk_control_encoder_FLP
+#define SKP_Silk_encode_frame_Fxx       SKP_Silk_encode_frame_FLP
+#endif
+#define SKP_Silk_EncodeControlStruct SKP_SILK_SDK_EncControlStruct
+
+
+/****************************************/
+/* Encoder functions                    */
+/****************************************/
+
+SKP_int SKP_Silk_SDK_Get_Encoder_Size( SKP_int32 *encSizeBytes )
+{
+    SKP_int ret = SKP_SILK_NO_ERROR;
+    
+    *encSizeBytes = sizeof( SKP_Silk_encoder_state_Fxx );
+    
+    return ret;
+}
+
+
+/***************************************/
+/* Read control structure from encoder */
+/***************************************/
+SKP_int SKP_Silk_SDK_QueryEncoder(
+    const void *encState,                       /* I:   State Vector                                    */
+    SKP_Silk_EncodeControlStruct *encStatus     /* O:   Control Structure                               */
+)
+{
+    SKP_Silk_encoder_state_Fxx *psEnc;
+    SKP_int ret = SKP_SILK_NO_ERROR;    
+
+    psEnc = ( SKP_Silk_encoder_state_Fxx* )encState;
+
+    encStatus->API_sampleRate        = psEnc->sCmn.API_fs_Hz;
+    encStatus->maxInternalSampleRate = SKP_SMULBB( psEnc->sCmn.maxInternal_fs_kHz, 1000 );
+    encStatus->packetSize            = ( SKP_int )SKP_DIV32_16( psEnc->sCmn.API_fs_Hz * psEnc->sCmn.PacketSize_ms, 1000 );  /* convert samples -> ms */
+    encStatus->bitRate               = psEnc->sCmn.TargetRate_bps;
+    encStatus->packetLossPercentage  = psEnc->sCmn.PacketLoss_perc;
+    encStatus->complexity            = psEnc->sCmn.Complexity;
+    encStatus->useInBandFEC          = psEnc->sCmn.useInBandFEC;
+    encStatus->useDTX                = psEnc->sCmn.useDTX;
+    return ret;
+}
+
+/*************************/
+/* Init or Reset encoder */
+/*************************/
+SKP_int SKP_Silk_SDK_InitEncoder(
+    void                            *encState,          /* I/O: State                                           */
+    SKP_Silk_EncodeControlStruct    *encStatus          /* O:   Control structure                               */
+)
+{
+    SKP_Silk_encoder_state_Fxx *psEnc;
+    SKP_int ret = SKP_SILK_NO_ERROR;
+
+        
+    psEnc = ( SKP_Silk_encoder_state_Fxx* )encState;
+
+    /* Reset Encoder */
+    if( ret += SKP_Silk_init_encoder_Fxx( psEnc ) ) {
+        SKP_assert( 0 );
+    }
+
+    /* Read control structure */
+    if( ret += SKP_Silk_SDK_QueryEncoder( encState, encStatus ) ) {
+        SKP_assert( 0 );
+    }
+
+
+    return ret;
+}
+
+/**************************/
+/* Encode frame with Silk */
+/**************************/
+SKP_int SKP_Silk_SDK_Encode( 
+    void                                *encState,      /* I/O: State                                           */
+    const SKP_Silk_EncodeControlStruct  *encControl,    /* I:   Control structure                               */
+    const SKP_int16                     *samplesIn,     /* I:   Speech sample input vector                      */
+    SKP_int                             nSamplesIn,     /* I:   Number of samples in input vector               */
+    SKP_uint8                           *outData,       /* O:   Encoded output vector                           */
+    SKP_int16                           *nBytesOut      /* I/O: Number of bytes in outData (input: Max bytes)   */
+)
+{
+    SKP_int   max_internal_fs_kHz, PacketSize_ms, PacketLoss_perc, UseInBandFEC, UseDTX, ret = SKP_SILK_NO_ERROR;
+    SKP_int   nSamplesToBuffer, Complexity, input_ms, nSamplesFromInput = 0;
+    SKP_int32 TargetRate_bps, API_fs_Hz;
+    SKP_int16 MaxBytesOut;
+    SKP_Silk_encoder_state_Fxx *psEnc = ( SKP_Silk_encoder_state_Fxx* )encState;
+
+    SKP_assert( encControl != NULL );
+
+    /* Check sampling frequency first, to avoid divide by zero later */
+    if( ( ( encControl->API_sampleRate        !=  8000 ) &&
+          ( encControl->API_sampleRate        != 12000 ) &&
+          ( encControl->API_sampleRate        != 16000 ) &&
+          ( encControl->API_sampleRate        != 24000 ) && 
+          ( encControl->API_sampleRate        != 32000 ) &&
+          ( encControl->API_sampleRate        != 44100 ) &&
+          ( encControl->API_sampleRate        != 48000 ) ) ||
+        ( ( encControl->maxInternalSampleRate !=  8000 ) &&
+          ( encControl->maxInternalSampleRate != 12000 ) &&
+          ( encControl->maxInternalSampleRate != 16000 ) &&
+          ( encControl->maxInternalSampleRate != 24000 ) ) ) {
+        ret = SKP_SILK_ENC_FS_NOT_SUPPORTED;
+        SKP_assert( 0 );
+        return( ret );
+    }
+
+    /* Set encoder parameters from control structure */
+    API_fs_Hz           =                              encControl->API_sampleRate;
+    max_internal_fs_kHz = SKP_DIV32_16(     ( SKP_int )encControl->maxInternalSampleRate, 1000 );   /* convert Hz -> kHz */
+    PacketSize_ms       = SKP_DIV32( 1000 * ( SKP_int )encControl->packetSize, API_fs_Hz );
+    TargetRate_bps      =                 ( SKP_int32 )encControl->bitRate;
+    PacketLoss_perc     =                   ( SKP_int )encControl->packetLossPercentage;
+    UseInBandFEC        =                   ( SKP_int )encControl->useInBandFEC;
+    Complexity          =                   ( SKP_int )encControl->complexity;
+    UseDTX              =                   ( SKP_int )encControl->useDTX;
+    /* Save values in state */
+    psEnc->sCmn.API_fs_Hz          = API_fs_Hz;
+    psEnc->sCmn.maxInternal_fs_kHz = max_internal_fs_kHz;
+    psEnc->sCmn.useInBandFEC       = UseInBandFEC;
+
+    /* Only accept input lengths that are a multiplum of 10 ms */
+    input_ms = SKP_DIV32( 1000 * nSamplesIn, API_fs_Hz );
+    if( ( input_ms % 10) != 0 || nSamplesIn < 0 ) {
+        ret = SKP_SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES;
+        SKP_assert( 0 );
+        return( ret );
+    }
+
+    /* Make sure no more than one packet can be produced */
+    if( nSamplesIn > SKP_DIV32_16( psEnc->sCmn.PacketSize_ms * API_fs_Hz, 1000 ) ) {
+        ret = SKP_SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES;
+        SKP_assert( 0 );
+        return( ret );
+    }
+    if( ( ret = SKP_Silk_control_encoder_Fxx( psEnc, API_fs_Hz, max_internal_fs_kHz, PacketSize_ms, TargetRate_bps, 
+                    PacketLoss_perc, UseInBandFEC, UseDTX, input_ms, Complexity) ) != 0 ) {
+        SKP_assert( 0 );
+        return( ret );
+    }
+
+    /* Detect energy above 8 kHz */
+    if( SKP_min( API_fs_Hz, 1000 * max_internal_fs_kHz ) == 24000 && psEnc->sCmn.sSWBdetect.SWB_detected == 0 && psEnc->sCmn.sSWBdetect.WB_detected == 0 ) {
+        SKP_Silk_detect_SWB_input( &psEnc->sCmn.sSWBdetect, samplesIn, ( SKP_int )nSamplesIn );
+    }
+
+    /* Input buffering/resampling and encoding */
+    MaxBytesOut = 0;                    /* return 0 output bytes if no encoder called */
+    while( 1 ) {
+        nSamplesToBuffer = psEnc->sCmn.frame_length - psEnc->sCmn.inputBufIx;
+        if( API_fs_Hz == SKP_SMULBB( 1000, psEnc->sCmn.fs_kHz ) ) { 
+            nSamplesToBuffer  = SKP_min_int( nSamplesToBuffer, nSamplesIn );
+            nSamplesFromInput = nSamplesToBuffer;
+            /* Copy to buffer */
+            SKP_memcpy( &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], samplesIn, nSamplesFromInput * sizeof( SKP_int16 ) );
+        } else {  
+            nSamplesToBuffer  = SKP_min( nSamplesToBuffer, SKP_DIV32( ( SKP_int32 )nSamplesIn * psEnc->sCmn.fs_kHz * 1000, API_fs_Hz ) );
+            nSamplesFromInput = SKP_DIV32_16( nSamplesToBuffer * API_fs_Hz, psEnc->sCmn.fs_kHz * 1000 );
+            /* Resample and write to buffer */
+            ret += SKP_Silk_resampler( &psEnc->sCmn.resampler_state, &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], samplesIn, nSamplesFromInput );
+        } 
+        samplesIn              += nSamplesFromInput;
+        nSamplesIn             -= nSamplesFromInput;
+        psEnc->sCmn.inputBufIx += nSamplesToBuffer;
+
+        /* Silk encoder */
+        if( psEnc->sCmn.inputBufIx >= psEnc->sCmn.frame_length ) {
+            /* Enough data in input buffer, so encode */
+            if( MaxBytesOut == 0 ) {
+                /* No payload obtained so far */
+                MaxBytesOut = *nBytesOut;
+                if( ( ret = SKP_Silk_encode_frame_Fxx( psEnc, outData, &MaxBytesOut, psEnc->sCmn.inputBuf ) ) != 0 ) {
+                    SKP_assert( 0 );
+                }
+            } else {
+                /* outData already contains a payload */
+                if( ( ret = SKP_Silk_encode_frame_Fxx( psEnc, outData, nBytesOut, psEnc->sCmn.inputBuf ) ) != 0 ) {
+                    SKP_assert( 0 );
+                }
+                /* Check that no second payload was created */
+                SKP_assert( *nBytesOut == 0 );
+            }
+            psEnc->sCmn.inputBufIx = 0;
+        } else {
+            break;
+        }
+    }
+
+    *nBytesOut = MaxBytesOut;
+    if( psEnc->sCmn.useDTX && psEnc->sCmn.inDTX ) {
+        /* DTX simulation */
+        *nBytesOut = 0;
+    }
+
+    return ret;
+}
+
--- /dev/null
+++ b/src_common/SKP_Silk_encode_parameters_v4.c
@@ -1,0 +1,232 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+/*******************************************/
+/* Encode parameters to create the payload */
+/*******************************************/
+void SKP_Silk_encode_parameters_v4(
+    SKP_Silk_encoder_state          *psEncC,        /* I/O  Encoder state                   */
+    SKP_Silk_encoder_control        *psEncCtrlC,    /* I/O  Encoder control                 */
+    SKP_Silk_range_coder_state      *psRC           /* I/O  Range encoder state             */
+)
+{
+    SKP_int   i, k, typeOffset;
+    SKP_int   encode_absolute_lagIndex, delta_lagIndex;
+    const SKP_Silk_NLSF_CB_struct *psNLSF_CB;
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+    SKP_int nBytes_lagIndex, nBytes_contourIndex, nBytes_LTP;
+    SKP_int nBytes_after, nBytes_before;
+#endif
+
+    /*************************************/
+    /* Encode sampling rate and          */
+    /* number of subframes in each frame */
+    /*************************************/
+    /* only done for first frame in packet */
+    if( psEncC->nFramesInPayloadBuf == 0 ) {
+        /* get sampling rate index */
+        for( i = 0; i < 3; i++ ) {
+            if( SKP_Silk_SamplingRates_table[ i ] == psEncC->fs_kHz ) {
+                break;
+            }
+        }
+        SKP_Silk_range_encoder( psRC, i, SKP_Silk_SamplingRates_CDF );
+
+        /* Convert number of subframes to index */
+        SKP_assert( psEncC->nb_subfr == MAX_NB_SUBFR >> 1 || psEncC->nb_subfr == MAX_NB_SUBFR );
+        i = (psEncC->nb_subfr >> 1) - 1;
+        SKP_Silk_range_encoder( psRC, i, SKP_Silk_NbSubframes_CDF );
+    }
+
+    /*********************************************/
+    /* Encode VAD flag                           */
+    /*********************************************/
+    SKP_Silk_range_encoder( psRC, psEncC->vadFlag, SKP_Silk_vadflag_CDF );
+
+    /*******************************************/
+    /* Encode signal type and quantizer offset */
+    /*******************************************/
+    typeOffset = 2 * psEncCtrlC->sigtype + psEncCtrlC->QuantOffsetType;
+    if( psEncC->nFramesInPayloadBuf == 0 ) {
+        /* first frame in packet: independent coding */
+        SKP_Silk_range_encoder( psRC, typeOffset, SKP_Silk_type_offset_CDF );
+    } else {
+        /* condidtional coding */
+        SKP_Silk_range_encoder( psRC, typeOffset, SKP_Silk_type_offset_joint_CDF[ psEncC->typeOffsetPrev ] );
+    }
+    psEncC->typeOffsetPrev = typeOffset;
+
+    /****************/
+    /* Encode gains */
+    /****************/
+#ifdef SAVE_ALL_INTERNAL_DATA
+    SKP_Silk_range_encoder_get_length( psRC, &nBytes_before );
+#endif
+    /* first subframe */
+    if( psEncC->nFramesInPayloadBuf == 0 ) {
+        /* first frame in packet: independent coding */
+        SKP_Silk_range_encoder( psRC, psEncCtrlC->GainsIndices[ 0 ], SKP_Silk_gain_CDF[ psEncCtrlC->sigtype ] );
+    } else {
+        /* condidtional coding */
+        SKP_Silk_range_encoder( psRC, psEncCtrlC->GainsIndices[ 0 ], SKP_Silk_delta_gain_CDF );
+    }
+
+    /* remaining subframes */
+    for( i = 1; i < psEncC->nb_subfr; i++ ) {
+        SKP_Silk_range_encoder( psRC, psEncCtrlC->GainsIndices[ i ], SKP_Silk_delta_gain_CDF );
+    }
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+    SKP_Silk_range_encoder_get_length( psRC, &nBytes_after );
+    nBytes_after -= nBytes_before; // bytes just added
+    DEBUG_STORE_DATA( nBytes_gains.dat, &nBytes_after, sizeof( SKP_int ) );
+#endif
+
+    /****************/
+    /* Encode NLSFs */
+    /****************/
+#ifdef SAVE_ALL_INTERNAL_DATA
+    SKP_Silk_range_encoder_get_length( psRC, &nBytes_before );
+#endif
+    /* Range encoding of the NLSF path */
+    psNLSF_CB = psEncC->psNLSF_CB[ psEncCtrlC->sigtype ];
+    SKP_Silk_range_encoder_multi( psRC, psEncCtrlC->NLSFIndices, psNLSF_CB->StartPtr, psNLSF_CB->nStages );
+
+    /* Encode NLSF interpolation factor */
+    SKP_assert( psEncC->useInterpolatedNLSFs == 1 || psEncCtrlC->NLSFInterpCoef_Q2 == ( 1 << 2 ) );
+    SKP_Silk_range_encoder( psRC, psEncCtrlC->NLSFInterpCoef_Q2, SKP_Silk_NLSF_interpolation_factor_CDF );
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+    SKP_Silk_range_encoder_get_length( psRC, &nBytes_after );
+    nBytes_after -= nBytes_before; // bytes just added
+    DEBUG_STORE_DATA( nBytes_LSF.dat, &nBytes_after, sizeof( SKP_int ) );
+#endif
+
+    if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) {
+        /*********************/
+        /* Encode pitch lags */
+        /*********************/
+#ifdef SAVE_ALL_INTERNAL_DATA
+        SKP_Silk_range_encoder_get_length( psRC, &nBytes_before );
+#endif
+        /* lag index */
+        encode_absolute_lagIndex = 1;
+        if( psEncC->nFramesInPayloadBuf > 0 && psEncC->prev_sigtype == SIG_TYPE_VOICED ) {
+            /* Delta Encoding */
+            delta_lagIndex = psEncCtrlC->lagIndex - psEncC->prev_lagIndex;
+            if( delta_lagIndex > MAX_DELTA_LAG ) {
+                delta_lagIndex = ( MAX_DELTA_LAG << 1 ) + 1;
+            } else if ( delta_lagIndex < -MAX_DELTA_LAG ) {
+                delta_lagIndex = ( MAX_DELTA_LAG << 1 ) + 1;
+            } else {
+                delta_lagIndex = delta_lagIndex + MAX_DELTA_LAG;
+                encode_absolute_lagIndex = 0; /* Only use delta */
+            }
+            SKP_Silk_range_encoder( psRC, delta_lagIndex, SKP_Silk_pitch_delta_CDF );
+        }
+        if( encode_absolute_lagIndex ) {
+            /* Absolute encoding */
+            if( psEncC->fs_kHz == 8 ) {
+                SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_NB_CDF );
+            } else if( psEncC->fs_kHz == 12 ) {
+                SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_MB_CDF );
+            } else if( psEncC->fs_kHz == 16 ) {
+                SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_WB_CDF );
+            } else {
+                SKP_Silk_range_encoder( psRC, psEncCtrlC->lagIndex, SKP_Silk_pitch_lag_SWB_CDF );
+            }
+        }
+        psEncC->prev_lagIndex = psEncCtrlC->lagIndex;
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+        SKP_Silk_range_encoder_get_length( psRC, &nBytes_after );
+        nBytes_lagIndex = nBytes_after - nBytes_before; // bytes just added
+#endif
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+        SKP_Silk_range_encoder_get_length( psRC, &nBytes_before );
+#endif
+        /* countour index */
+        if( psEncC->fs_kHz == 8 ) {
+            /* Less codevectors used in 8 khz mode */
+            SKP_Silk_range_encoder( psRC, psEncCtrlC->contourIndex, SKP_Silk_pitch_contour_NB_CDF );
+        } else {
+            /* Joint for 12, 16, 24 khz */
+            SKP_Silk_range_encoder( psRC, psEncCtrlC->contourIndex, SKP_Silk_pitch_contour_CDF );
+        }
+#ifdef SAVE_ALL_INTERNAL_DATA
+        SKP_Silk_range_encoder_get_length( psRC, &nBytes_after ); 
+        nBytes_contourIndex = nBytes_after - nBytes_before; // bytes just added
+#endif
+
+        /********************/
+        /* Encode LTP gains */
+        /********************/
+#ifdef SAVE_ALL_INTERNAL_DATA
+        SKP_Silk_range_encoder_get_length( psRC, &nBytes_before );
+#endif
+        /* PERIndex value */
+        SKP_Silk_range_encoder( psRC, psEncCtrlC->PERIndex, SKP_Silk_LTP_per_index_CDF );
+
+        /* Codebook Indices */
+        for( k = 0; k < psEncC->nb_subfr; k++ ) {
+            SKP_Silk_range_encoder( psRC, psEncCtrlC->LTPIndex[ k ], SKP_Silk_LTP_gain_CDF_ptrs[ psEncCtrlC->PERIndex ] );
+        }
+
+        /**********************/
+        /* Encode LTP scaling */
+        /**********************/
+        SKP_Silk_range_encoder( psRC, psEncCtrlC->LTP_scaleIndex, SKP_Silk_LTPscale_CDF );
+#ifdef SAVE_ALL_INTERNAL_DATA
+        SKP_Silk_range_encoder_get_length( psRC, &nBytes_after );
+        nBytes_LTP = nBytes_after - nBytes_before; // bytes just added
+#endif
+    }
+#ifdef SAVE_ALL_INTERNAL_DATA
+    else { 
+        // Unvoiced speech
+        nBytes_lagIndex     = 0;
+        nBytes_contourIndex = 0;
+        nBytes_LTP          = 0;
+    }
+    DEBUG_STORE_DATA( nBytes_lagIndex.dat,      &nBytes_lagIndex,       sizeof( SKP_int ) );
+    DEBUG_STORE_DATA( nBytes_contourIndex.dat,  &nBytes_contourIndex,   sizeof( SKP_int ) );
+    DEBUG_STORE_DATA( nBytes_LTP.dat,           &nBytes_LTP,            sizeof( SKP_int ) );
+#endif
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+    SKP_Silk_range_encoder_get_length( psRC, &nBytes_before );
+#endif
+
+    /***************/
+    /* Encode seed */
+    /***************/
+    SKP_Silk_range_encoder( psRC, psEncCtrlC->Seed, SKP_Silk_Seed_CDF );
+}
--- /dev/null
+++ b/src_common/SKP_Silk_encode_pulses.c
@@ -1,0 +1,222 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+/* Tables generated with pyramid_combinations_generalized_tree.m  */
+/* Pyramid L1 norm */
+static const float PVQ_W_SIGNS_BITS[ 32 ] = 
+{
+     0.0000f,  5.0000f,  9.0000f, 12.4179f, 15.4263f, 18.1210f, 20.5637f, 22.7972f,
+    24.8536f, 26.7576f, 28.5290f, 30.1838f, 31.7353f, 33.1949f, 34.5719f, 35.8747f,
+    37.1102f, 38.2847f, 39.4034f, 40.4712f, 41.4922f, 42.4702f, 43.4083f, 44.3097f,
+    45.1769f, 46.0123f, 46.8181f, 47.5961f, 48.3483f, 49.0762f, 49.7813f, 50.4648f
+};
+
+static const float PVQ_WO_SIGNS_BITS[ 32 ] = 
+{
+     0.0000f,  4.0000f,  7.0875f,  9.6724f, 11.9204f, 13.9204f, 15.7277f, 17.3798f, 
+    18.9033f, 20.3184f, 21.6403f, 22.8813f, 24.0512f, 25.1582f, 26.2088f, 27.2088f, 
+    28.1630f, 29.0755f, 29.9500f, 30.7895f, 31.5969f, 32.3745f, 33.1245f, 33.8489f, 
+    34.5493f, 35.2274f, 35.8845f, 36.5219f, 37.1408f, 37.7423f, 38.3273f, 38.8966f
+};
+
+/*********************************************/
+/* Encode quantization indices of excitation */
+/*********************************************/
+
+SKP_INLINE SKP_int combine_and_check(       /* return ok */
+    SKP_int         *pulses_comb,           /* O */
+    const SKP_int   *pulses_in,             /* I */
+    SKP_int         max_pulses,             /* I    max value for sum of pulses */
+    SKP_int         len                     /* I    number of output values */
+) 
+{
+    SKP_int k, sum;
+
+    for( k = 0; k < len; k++ ) {
+        sum = pulses_in[ 2 * k ] + pulses_in[ 2 * k + 1 ];
+        if( sum > max_pulses ) {
+            return 1;
+        }
+        pulses_comb[ k ] = sum;
+    }
+
+    return 0;
+}
+
+/* Encode quantization indices of excitation */
+void SKP_Silk_encode_pulses(
+    SKP_Silk_range_coder_state      *psRC,          /* I/O  Range coder state               */
+    const SKP_int                   sigtype,        /* I    Sigtype                         */
+    const SKP_int                   QuantOffsetType,/* I    QuantOffsetType                 */
+    SKP_int8                        q[],            /* I    quantization indices            */
+    const SKP_int                   frame_length    /* I    Frame length                    */
+)
+{
+    SKP_int   i, k, j, iter, bit, nLS, scale_down, RateLevelIndex = 0;
+    SKP_int32 abs_q, minSumBits_Q6, sumBits_Q6;
+    SKP_int   abs_pulses[ MAX_FRAME_LENGTH ];
+    SKP_int   sum_pulses[ MAX_NB_SHELL_BLOCKS ];
+    SKP_int   nRshifts[   MAX_NB_SHELL_BLOCKS ];
+    SKP_int   pulses_comb[ 8 ];
+    SKP_int   *abs_pulses_ptr;
+    const SKP_int8 *pulses_ptr;
+    const SKP_uint16 *cdf_ptr;
+    const SKP_int16 *nBits_ptr;
+    //extern SKP_int nbits_extra;
+
+    SKP_memset( pulses_comb, 0, 8 * sizeof( SKP_int ) ); // Fixing Valgrind reported problem
+
+    /****************************/
+    /* Prepare for shell coding */
+    /****************************/
+    /* Calculate number of shell blocks */
+    SKP_assert( 1 << LOG2_SHELL_CODEC_FRAME_LENGTH == SHELL_CODEC_FRAME_LENGTH );
+    iter = SKP_RSHIFT( frame_length, LOG2_SHELL_CODEC_FRAME_LENGTH );
+    if( iter * SHELL_CODEC_FRAME_LENGTH < frame_length ){
+        SKP_assert( frame_length == 12 * 10 ); /* Make sure only happens for 10 ms @ 12 kHz */
+        iter++;
+        SKP_memset( &q[ frame_length ], 0, SHELL_CODEC_FRAME_LENGTH * sizeof(SKP_int8));
+    }
+
+    /* Take the absolute value of the pulses */
+    for( i = 0; i < iter * SHELL_CODEC_FRAME_LENGTH; i+=4 ) {
+        abs_pulses[i+0] = ( SKP_int )SKP_abs( q[ i + 0 ] );
+        abs_pulses[i+1] = ( SKP_int )SKP_abs( q[ i + 1 ] );
+        abs_pulses[i+2] = ( SKP_int )SKP_abs( q[ i + 2 ] );
+        abs_pulses[i+3] = ( SKP_int )SKP_abs( q[ i + 3 ] );
+    }
+
+    /* Calc sum pulses per shell code frame */
+    abs_pulses_ptr = abs_pulses;
+    for( i = 0; i < iter; i++ ) {
+        nRshifts[ i ] = 0;
+
+        while( 1 ) {
+            /* 1+1 -> 2 */
+            scale_down = combine_and_check( pulses_comb, abs_pulses_ptr, SKP_Silk_max_pulses_table[ 0 ], 8 );
+
+            /* 2+2 -> 4 */
+            scale_down += combine_and_check( pulses_comb, pulses_comb, SKP_Silk_max_pulses_table[ 1 ], 4 );
+
+            /* 4+4 -> 8 */
+            scale_down += combine_and_check( pulses_comb, pulses_comb, SKP_Silk_max_pulses_table[ 2 ], 2 );
+
+            /* 8+8 -> 16 */
+            sum_pulses[ i ] = pulses_comb[ 0 ] + pulses_comb[ 1 ];
+            if( sum_pulses[ i ] > SKP_Silk_max_pulses_table[ 3 ] ) {
+                scale_down++;
+            }
+
+            if( scale_down ) {
+                /* We need to down scale the quantization signal */
+                nRshifts[ i ]++;                
+                for( k = 0; k < SHELL_CODEC_FRAME_LENGTH; k++ ) {
+                    abs_pulses_ptr[ k ] = SKP_RSHIFT( abs_pulses_ptr[ k ], 1 );
+                }
+            } else {
+                /* Jump out of while(1) loop and go to next shell coding frame */
+                break;
+            }
+        }
+        abs_pulses_ptr += SHELL_CODEC_FRAME_LENGTH;
+    }
+
+    /**************/
+    /* Rate level */
+    /**************/
+    /* find rate level that leads to fewest bits for coding of pulses per block info */
+    minSumBits_Q6 = SKP_int32_MAX;
+    for( k = 0; k < N_RATE_LEVELS - 1; k++ ) {
+        nBits_ptr  = SKP_Silk_pulses_per_block_BITS_Q6[ k ];
+        sumBits_Q6 = SKP_Silk_rate_levels_BITS_Q6[sigtype][ k ];
+        for( i = 0; i < iter; i++ ) {
+            if( nRshifts[ i ] > 0 ) {
+                sumBits_Q6 += nBits_ptr[ MAX_PULSES + 1 ];
+            } else {
+                sumBits_Q6 += nBits_ptr[ sum_pulses[ i ] ];
+            }
+        }
+        if( sumBits_Q6 < minSumBits_Q6 ) {
+            minSumBits_Q6 = sumBits_Q6;
+            RateLevelIndex = k;
+        }
+    }
+    SKP_Silk_range_encoder( psRC, RateLevelIndex, SKP_Silk_rate_levels_CDF[ sigtype ] );
+
+    /***************************************************/
+    /* Sum-Weighted-Pulses Encoding                    */
+    /***************************************************/
+    cdf_ptr = SKP_Silk_pulses_per_block_CDF[ RateLevelIndex ];
+    for( i = 0; i < iter; i++ ) {
+        if( nRshifts[ i ] == 0 ) {
+            SKP_Silk_range_encoder( psRC, sum_pulses[ i ], cdf_ptr );
+        } else {
+            SKP_Silk_range_encoder( psRC, MAX_PULSES + 1, cdf_ptr );
+            for( k = 0; k < nRshifts[ i ] - 1; k++ ) {
+                SKP_Silk_range_encoder( psRC, MAX_PULSES + 1, SKP_Silk_pulses_per_block_CDF[ N_RATE_LEVELS - 1 ] );
+            }
+            SKP_Silk_range_encoder( psRC, sum_pulses[ i ], SKP_Silk_pulses_per_block_CDF[ N_RATE_LEVELS - 1 ] );
+        }
+    }
+
+    /******************/
+    /* Shell Encoding */
+    /******************/
+    for( i = 0; i < iter; i++ ) {
+        if( sum_pulses[ i ] > 0 ) {
+            SKP_Silk_shell_encoder( psRC, &abs_pulses[ i * SHELL_CODEC_FRAME_LENGTH ] );
+        }
+    }
+
+    /****************/
+    /* LSB Encoding */
+    /****************/
+    for( i = 0; i < iter; i++ ) {
+        if( nRshifts[ i ] > 0 ) {
+            pulses_ptr = &q[ i * SHELL_CODEC_FRAME_LENGTH ];
+            nLS = nRshifts[ i ] - 1;
+            for( k = 0; k < SHELL_CODEC_FRAME_LENGTH; k++ ) {
+                abs_q = (SKP_int8)SKP_abs( pulses_ptr[ k ] );
+                for( j = nLS; j > 0; j-- ) {
+                    bit = SKP_RSHIFT( abs_q, j ) & 1;
+                    SKP_Silk_range_encoder( psRC, bit, SKP_Silk_lsb_CDF );
+                }
+                bit = abs_q & 1;
+                SKP_Silk_range_encoder( psRC, bit, SKP_Silk_lsb_CDF );
+            }
+        }
+    }
+
+#if! USE_CELT_PVQ
+    /****************/
+    /* Encode signs */
+    /****************/
+    SKP_Silk_encode_signs( psRC, q, frame_length, sigtype, QuantOffsetType, RateLevelIndex );
+#endif
+}
--- /dev/null
+++ b/src_common/SKP_Silk_gain_quant.c
@@ -1,0 +1,96 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+#define OFFSET          ( ( MIN_QGAIN_DB * 128 ) / 6 + 16 * 128 )
+#define SCALE_Q16       ( ( 65536 * ( N_LEVELS_QGAIN - 1 ) ) / ( ( ( MAX_QGAIN_DB - MIN_QGAIN_DB ) * 128 ) / 6 ) )
+#define INV_SCALE_Q16   ( ( 65536 * ( ( ( MAX_QGAIN_DB - MIN_QGAIN_DB ) * 128 ) / 6 ) ) / ( N_LEVELS_QGAIN - 1 ) )
+
+/* Gain scalar quantization with hysteresis, uniform on log scale */
+void SKP_Silk_gains_quant(
+    SKP_int                         ind[ MAX_NB_SUBFR ],        /* O    gain indices                            */
+    SKP_int32                       gain_Q16[ MAX_NB_SUBFR ],   /* I/O  gains (quantized out)                   */
+    SKP_int                         *prev_ind,                  /* I/O  last index in previous frame            */
+    const SKP_int                   conditional,                /* I    first gain is delta coded if 1          */
+    const SKP_int                   nb_subfr                    /* I    number of subframes                     */
+)
+{
+    SKP_int k;
+
+    for( k = 0; k < nb_subfr; k++ ) {
+        /* Add half of previous quantization error, convert to log scale, scale, floor() */
+        ind[ k ] = SKP_SMULWB( SCALE_Q16, SKP_Silk_lin2log( gain_Q16[ k ] ) - OFFSET );
+
+        /* Round towards previous quantized gain (hysteresis) */
+        if( ind[ k ] < *prev_ind ) {
+            ind[ k ]++;
+        }
+
+        /* Compute delta indices and limit */
+        if( k == 0 && conditional == 0 ) {
+            /* Full index */
+            ind[ k ] = SKP_LIMIT_int( ind[ k ], 0, N_LEVELS_QGAIN - 1 );
+            ind[ k ] = SKP_max_int( ind[ k ], *prev_ind + MIN_DELTA_GAIN_QUANT );
+            *prev_ind = ind[ k ];
+        } else {
+            /* Delta index */
+            ind[ k ] = SKP_LIMIT_int( ind[ k ] - *prev_ind, MIN_DELTA_GAIN_QUANT, MAX_DELTA_GAIN_QUANT );
+            /* Accumulate deltas */
+            *prev_ind += ind[ k ];
+            /* Shift to make non-negative */
+            ind[ k ] -= MIN_DELTA_GAIN_QUANT;
+        }
+
+        /* Convert to linear scale and scale */
+        gain_Q16[ k ] = SKP_Silk_log2lin( SKP_min_32( SKP_SMULWB( INV_SCALE_Q16, *prev_ind ) + OFFSET, 3967 ) ); /* 3967 = 31 in Q7 */
+    }
+}
+
+/* Gains scalar dequantization, uniform on log scale */
+void SKP_Silk_gains_dequant(
+    SKP_int32                       gain_Q16[ MAX_NB_SUBFR ],   /* O    quantized gains                         */
+    const SKP_int                   ind[ MAX_NB_SUBFR ],        /* I    gain indices                            */
+    SKP_int                         *prev_ind,                  /* I/O  last index in previous frame            */
+    const SKP_int                   conditional,                /* I    first gain is delta coded if 1          */
+    const SKP_int                   nb_subfr                    /* I    number of subframes                     */
+)
+{
+    SKP_int   k;
+
+    for( k = 0; k < nb_subfr; k++ ) {
+        if( k == 0 && conditional == 0 ) {
+            *prev_ind = ind[ k ];
+        } else {
+            /* Delta index */
+            *prev_ind += ind[ k ] + MIN_DELTA_GAIN_QUANT;
+        }
+
+        /* Convert to linear scale and scale */
+        gain_Q16[ k ] = SKP_Silk_log2lin( SKP_min_32( SKP_SMULWB( INV_SCALE_Q16, *prev_ind ) + OFFSET, 3967 ) ); /* 3967 = 31 in Q7 */
+    }
+}
--- /dev/null
+++ b/src_common/SKP_Silk_interpolate.c
@@ -1,0 +1,47 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+/* Interpolate two vectors */
+void SKP_Silk_interpolate(
+    SKP_int                         xi[ MAX_LPC_ORDER ],    /* O    interpolated vector                     */
+    const SKP_int                   x0[ MAX_LPC_ORDER ],    /* I    first vector                            */
+    const SKP_int                   x1[ MAX_LPC_ORDER ],    /* I    second vector                           */
+    const SKP_int                   ifact_Q2,               /* I    interp. factor, weight on 2nd vector    */
+    const SKP_int                   d                       /* I    number of parameters                    */
+)
+{
+    SKP_int i;
+
+    SKP_assert( ifact_Q2 >= 0 );
+    SKP_assert( ifact_Q2 <= ( 1 << 2 ) );
+
+    for( i = 0; i < d; i++ ) {
+        xi[ i ] = ( SKP_int )( ( SKP_int32 )x0[ i ] + SKP_RSHIFT( SKP_MUL( ( SKP_int32 )x1[ i ] - ( SKP_int32 )x0[ i ], ifact_Q2 ), 2 ) );
+    }
+}
--- /dev/null
+++ b/src_common/SKP_Silk_main.h
@@ -1,0 +1,410 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_MAIN_H
+#define SKP_SILK_MAIN_H
+
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_define.h"
+#include "SKP_Silk_structs.h"
+#include "SKP_Silk_tables.h"
+#include "SKP_Silk_PLC.h"
+#include "SKP_debug.h"
+#include "entenc.h"
+#include "entdec.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* Encodes signs of excitation */
+void SKP_Silk_encode_signs(
+    SKP_Silk_range_coder_state  *psRC,              /* I/O  Range coder state                           */
+    const SKP_int8              q[],                /* I    pulse signal                                */
+    const SKP_int               length,             /* I    length of input                             */
+    const SKP_int               sigtype,            /* I    Signal type                                 */
+    const SKP_int               QuantOffsetType,    /* I    Quantization offset type                    */
+    const SKP_int               RateLevelIndex      /* I    Rate Level Index                            */
+);
+
+/* Decodes signs of excitation */
+void SKP_Silk_decode_signs(
+    SKP_Silk_range_coder_state  *psRC,              /* I/O  Range coder state                           */
+    SKP_int                     q[],                /* I/O  pulse signal                                */
+    const SKP_int               length,             /* I    length of output                            */
+    const SKP_int               sigtype,            /* I    Signal type                                 */
+    const SKP_int               QuantOffsetType,    /* I    Quantization offset type                    */
+    const SKP_int               RateLevelIndex      /* I    Rate Level Index                            */
+);
+
+/***************/
+/* Shell coder */
+/***************/
+
+/* Encode quantization indices of excitation */
+void SKP_Silk_encode_pulses(
+    SKP_Silk_range_coder_state  *psRC,              /* I/O  Range coder state                           */
+    const SKP_int               sigtype,            /* I    Sigtype                                     */
+    const SKP_int               QuantOffsetType,    /* I    QuantOffsetType                             */
+    SKP_int8                    q[],                /* I    quantization indices                        */
+    const SKP_int               frame_length        /* I    Frame length                                */
+);
+
+/* Shell encoder, operates on one shell code frame of 16 pulses */
+void SKP_Silk_shell_encoder(
+    SKP_Silk_range_coder_state  *psRC,              /* I/O  compressor data structure                   */
+    const SKP_int               *pulses0            /* I    data: nonnegative pulse amplitudes          */
+);
+
+/* Shell decoder, operates on one shell code frame of 16 pulses */
+void SKP_Silk_shell_decoder(
+    SKP_int                     *pulses0,           /* O    data: nonnegative pulse amplitudes          */
+    SKP_Silk_range_coder_state  *psRC,              /* I/O  compressor data structure                   */
+    const SKP_int               pulses4             /* I    number of pulses per pulse-subframe         */
+);
+
+/***************/
+/* Range coder */
+/***************/
+/* Range encoder for one symbol */
+void SKP_Silk_range_encoder(
+    SKP_Silk_range_coder_state  *psRC,              /* I/O  compressor data structure                   */
+    const SKP_int               data,               /* I    uncompressed data                           */
+    const SKP_uint16            prob[]              /* I    cumulative density functions                */
+);
+    
+/* Range encoder for one symbol, with uniform PDF*/
+void SKP_Silk_range_encode_uniform(
+    SKP_Silk_range_coder_state      *psRC,              /* I/O  compressor data structure                   */
+    const SKP_int                   data,               /* I    uncompressed data                           */
+    const SKP_int                   N                   /* I    number of possible outcomes                 */
+);
+
+/* Range encoder for multiple symbols */
+void SKP_Silk_range_encoder_multi(
+    SKP_Silk_range_coder_state  *psRC,              /* I/O  compressor data structure                   */
+    const SKP_int               data[],             /* I    uncompressed data    [nSymbols]             */
+    const SKP_uint16 * const    prob[],             /* I    cumulative density functions                */
+    const SKP_int               nSymbols            /* I    number of data symbols                      */
+);
+
+/* Range decoder for one symbol */
+void SKP_Silk_range_decoder(
+    SKP_int                     data[],             /* O    uncompressed data                           */
+    SKP_Silk_range_coder_state  *psRC,              /* I/O  compressor data structure                   */
+    const SKP_uint16            prob[],             /* I    cumulative density function                 */
+    SKP_int                     probIx              /* I    initial (middle) entry of cdf               */
+);
+
+/* Range decoder for one symbol, with uniform PDF*/
+void SKP_Silk_range_decode_uniform(
+    SKP_int                         data[],             /* O    uncompressed data                           */
+    SKP_Silk_range_coder_state      *psRC,              /* I/O  compressor data structure                   */
+    const SKP_int                   N                   /* I    number of possible outcomes                 */
+);
+
+/* Range decoder for multiple symbols */
+void SKP_Silk_range_decoder_multi(
+    SKP_int                     data[],             /* O    uncompressed data                [nSymbols] */
+    SKP_Silk_range_coder_state  *psRC,              /* I/O  compressor data structure                   */
+    const SKP_uint16 * const    prob[],             /* I    cumulative density functions                */
+    const SKP_int               probStartIx[],      /* I    initial (middle) entries of cdfs [nSymbols] */
+    const SKP_int               nSymbols            /* I    number of data symbols                      */
+);
+
+/* Initialize range coder structure for encoder */
+void SKP_Silk_range_enc_init(
+    SKP_Silk_range_coder_state  *psRC               /* O    compressor data structure                   */
+);
+
+/* Initialize range coder structure for decoder */
+void SKP_Silk_range_dec_init(
+    SKP_Silk_range_coder_state  *psRC,              /* O    compressor data structure                   */
+    const SKP_uint8             buffer[],           /* I    buffer for compressed data [bufferLength]   */
+    const SKP_int32             bufferLength        /* I    buffer length (in bytes)                    */
+);
+
+/* Determine length of bitstream */
+SKP_int SKP_Silk_range_encoder_get_length(          /* O    returns number of BITS in stream            */
+    SKP_Silk_range_coder_state          *psRC,      /* I    compressed data structure                   */
+    SKP_int                             *nBytes     /* O    number of BYTES in stream                   */
+);
+
+/* Determine length of bitstream */
+SKP_int SKP_Silk_range_decoder_get_length(          /* O    returns number of BITS in stream            */
+    SKP_Silk_range_coder_state          *psRC,      /* I    compressed data structure                   */
+    SKP_int                             *nBytes     /* O    number of BYTES in stream                   */
+);
+
+/* Check that any remaining bits in the last byte are set to 1 */
+void SKP_Silk_range_coder_check_after_decoding(
+    SKP_Silk_range_coder_state  *psRC               /* I/O  compressed data structure                   */
+);
+
+/* Gain scalar quantization with hysteresis, uniform on log scale */
+void SKP_Silk_gains_quant(
+    SKP_int                         ind[ MAX_NB_SUBFR ],        /* O    gain indices                            */
+    SKP_int32                       gain_Q16[ MAX_NB_SUBFR ],   /* I/O  gains (quantized out)                   */
+    SKP_int                         *prev_ind,                  /* I/O  last index in previous frame            */
+    const SKP_int                   conditional,                /* I    first gain is delta coded if 1          */
+    const SKP_int                   nb_subfr                    /* I    number of subframes                     */
+);
+
+/* Gains scalar dequantization, uniform on log scale */
+void SKP_Silk_gains_dequant(
+    SKP_int32                       gain_Q16[ MAX_NB_SUBFR ],   /* O    quantized gains                         */
+    const SKP_int                   ind[ MAX_NB_SUBFR ],        /* I    gain indices                            */
+    SKP_int                         *prev_ind,                  /* I/O  last index in previous frame            */
+    const SKP_int                   conditional,                /* I    first gain is delta coded if 1          */
+    const SKP_int                   nb_subfr                    /* I    number of subframes                     */
+);
+
+/* Convert NLSF parameters to stable AR prediction filter coefficients */
+void SKP_Silk_NLSF2A_stable(
+    SKP_int16                   pAR_Q12[ MAX_LPC_ORDER ],   /* O    Stabilized AR coefs [LPC_order]     */ 
+    const SKP_int               pNLSF[ MAX_LPC_ORDER ],     /* I    NLSF vector         [LPC_order]     */
+    const SKP_int               LPC_order                   /* I    LPC/LSF order                       */
+);
+
+/* Interpolate two vectors */
+void SKP_Silk_interpolate(
+    SKP_int                     xi[ MAX_LPC_ORDER ],    /* O    interpolated vector                     */
+    const SKP_int               x0[ MAX_LPC_ORDER ],    /* I    first vector                            */
+    const SKP_int               x1[ MAX_LPC_ORDER ],    /* I    second vector                           */
+    const SKP_int               ifact_Q2,               /* I    interp. factor, weight on 2nd vector    */
+    const SKP_int               d                       /* I    number of parameters                    */
+);
+
+/***********************************/
+/* Noise shaping quantization (NSQ)*/
+/***********************************/
+void SKP_Silk_NSQ(
+    SKP_Silk_encoder_state          *psEncC,                                    /* I/O  Encoder State                       */
+    SKP_Silk_encoder_control        *psEncCtrlC,                                /* I    Encoder Control                     */
+    SKP_Silk_nsq_state              *NSQ,                                       /* I/O  NSQ state                           */
+    const SKP_int16                 x[],                                        /* I    prefiltered input signal            */
+    SKP_int8                        q[],                                        /* O    quantized qulse signal              */
+    const SKP_int                   LSFInterpFactor_Q2,                         /* I    LSF interpolation factor in Q2      */
+    const SKP_int16                 PredCoef_Q12[ 2 * MAX_LPC_ORDER ],          /* I    Short term prediction coefficients  */
+    const SKP_int16                 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ],        /* I    Long term prediction coefficients   */
+    const SKP_int16                 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ],  /* I                                    */
+    const SKP_int                   HarmShapeGain_Q14[ MAX_NB_SUBFR ],              /* I                                    */
+    const SKP_int                   Tilt_Q14[ MAX_NB_SUBFR ],                       /* I    Spectral tilt                   */
+    const SKP_int32                 LF_shp_Q14[ MAX_NB_SUBFR ],                     /* I                                    */
+    const SKP_int32                 Gains_Q16[ MAX_NB_SUBFR ],                      /* I                                    */
+    const SKP_int                   Lambda_Q10,                                 /* I                                        */
+    const SKP_int                   LTP_scale_Q14                               /* I    LTP state scaling                   */
+);
+
+/* Noise shaping using delayed decision */
+void SKP_Silk_NSQ_del_dec(
+    SKP_Silk_encoder_state          *psEncC,                                    /* I/O  Encoder State                       */
+    SKP_Silk_encoder_control        *psEncCtrlC,                                /* I    Encoder Control                     */
+    SKP_Silk_nsq_state              *NSQ,                                       /* I/O  NSQ state                           */
+    const SKP_int16                 x[],                                        /* I    Prefiltered input signal            */
+    SKP_int8                        q[],                                        /* O    Quantized pulse signal              */
+    const SKP_int                   LSFInterpFactor_Q2,                         /* I    LSF interpolation factor in Q2      */
+    const SKP_int16                 PredCoef_Q12[ 2 * MAX_LPC_ORDER ],          /* I    Prediction coefs                    */
+    const SKP_int16                 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ],        /* I    LT prediction coefs                 */
+    const SKP_int16                 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ],  /* I                                        */
+    const SKP_int                   HarmShapeGain_Q14[ MAX_NB_SUBFR ],              /* I                                        */
+    const SKP_int                   Tilt_Q14[ MAX_NB_SUBFR ],                       /* I    Spectral tilt                       */
+    const SKP_int32                 LF_shp_Q14[ MAX_NB_SUBFR ],                     /* I                                        */
+    const SKP_int32                 Gains_Q16[ MAX_NB_SUBFR ],                      /* I                                        */
+    const SKP_int                   Lambda_Q10,                                 /* I                                        */
+    const SKP_int                   LTP_scale_Q14                               /* I    LTP state scaling                   */
+);
+
+/************/
+/* Silk VAD */
+/************/
+/* Initialize the Silk VAD */
+SKP_int SKP_Silk_VAD_Init(                          /* O    Return value, 0 if success                  */ 
+    SKP_Silk_VAD_state          *psSilk_VAD         /* I/O  Pointer to Silk VAD state                   */ 
+); 
+
+/* Silk VAD noise level estimation */
+void SKP_Silk_VAD_GetNoiseLevels(
+    const SKP_int32             pX[ VAD_N_BANDS ],  /* I    subband energies                            */
+    SKP_Silk_VAD_state          *psSilk_VAD         /* I/O  Pointer to Silk VAD state                   */ 
+);
+
+/* Get speech activity level in Q8 */
+SKP_int SKP_Silk_VAD_GetSA_Q8(                                  /* O    Return value, 0 if success      */
+    SKP_Silk_VAD_state          *psSilk_VAD,                    /* I/O  Silk VAD state                  */
+    SKP_int                     *pSA_Q8,                        /* O    Speech activity level in Q8     */
+    SKP_int                     pQuality_Q15[ VAD_N_BANDS ],    /* O    Smoothed SNR for each band      */
+    SKP_int                     *pTilt_Q15,                     /* O    current frame's frequency tilt  */
+    const SKP_int16             pIn[],                          /* I    PCM input       [framelength]   */
+    const SKP_int               framelength,                    /* I    Input frame length              */
+    const SKP_int               fs_kHz                          /* I    Input frame sample frequency    */
+);
+
+/* Detect signal in 8 - 12 khz range */
+void SKP_Silk_detect_SWB_input(
+    SKP_Silk_detect_SWB_state   *psSWBdetect,       /* I/O  Encoder state                               */
+    const SKP_int16             samplesIn[],        /* I    Input to encoder                            */
+    SKP_int                     nSamplesIn          /* I    Length of input                             */
+);
+
+#if SWITCH_TRANSITION_FILTERING
+/* Low-pass filter with variable cutoff frequency based on  */
+/* piece-wise linear interpolation between elliptic filters */
+/* Start by setting transition_frame_no = 1;                */
+void SKP_Silk_LP_variable_cutoff(
+    SKP_Silk_LP_state           *psLP,              /* I/O  LP filter state                             */
+    SKP_int16                   *out,               /* O    Low-pass filtered output signal             */
+    const SKP_int16             *in,                /* I    Input signal                                */
+    const SKP_int               frame_length        /* I    Frame length                                */
+);
+#endif
+
+/****************************************************/
+/* Decoder Functions                                */
+/****************************************************/
+SKP_int SKP_Silk_create_decoder(
+    SKP_Silk_decoder_state      **ppsDec            /* I/O  Decoder state pointer pointer               */
+);
+
+SKP_int SKP_Silk_free_decoder(
+    SKP_Silk_decoder_state      *psDec              /* I/O  Decoder state pointer                       */
+);
+
+SKP_int SKP_Silk_init_decoder(
+    SKP_Silk_decoder_state      *psDec              /* I/O  Decoder state pointer                       */
+);
+
+/* Set decoder sampling rate */
+void SKP_Silk_decoder_set_fs(
+    SKP_Silk_decoder_state          *psDec,             /* I/O  Decoder state pointer                       */
+    SKP_int                         fs_kHz,             /* I    Sampling frequency (kHz)                    */
+    SKP_int                         nb_subfr            /* I    Number of subframes                         */
+);
+
+/****************/
+/* Decode frame */
+/****************/
+SKP_int SKP_Silk_decode_frame(
+    SKP_Silk_decoder_state      *psDec,             /* I/O  Pointer to Silk decoder state               */
+    SKP_int16                   pOut[],             /* O    Pointer to output speech frame              */
+    SKP_int16                   *pN,                /* O    Pointer to size of output frame             */
+    const SKP_uint8             pCode[],            /* I    Pointer to payload                          */
+    const SKP_int               nBytes,             /* I    Payload length                              */
+    SKP_int                     action,             /* I    Action from Jitter Buffer                   */
+    SKP_int                     *decBytes           /* O    Used bytes to decode this frame             */
+);
+
+/* Decode indices from payload v4 Bitstream */
+void SKP_Silk_decode_indices_v4(
+    SKP_Silk_decoder_state      *psDec              /* I/O  State                                       */
+);
+
+/* Decode parameters from payload v4 Bitstream */
+void SKP_Silk_decode_parameters_v4(
+    SKP_Silk_decoder_state      *psDec,                                 /* I/O  State                                    */
+    SKP_Silk_decoder_control    *psDecCtrl,                             /* I/O  Decoder control                          */
+    SKP_int                     q[ MAX_FRAME_LENGTH ],                  /* O    Excitation signal                        */
+    const SKP_int               fullDecoding                            /* I    Flag to tell if only arithmetic decoding */
+);
+
+/* Core decoder. Performs inverse NSQ operation LTP + LPC */
+void SKP_Silk_decode_core(
+    SKP_Silk_decoder_state      *psDec,                             /* I/O  Decoder state               */
+    SKP_Silk_decoder_control    *psDecCtrl,                         /* I    Decoder control             */
+    SKP_int16                   xq[],                               /* O    Decoded speech              */
+    const SKP_int               q[ MAX_FRAME_LENGTH ]               /* I    Pulse signal                */
+);
+
+/* NLSF vector decoder */
+void SKP_Silk_NLSF_MSVQ_decode(
+    SKP_int                         *pNLSF_Q15,     /* O    Pointer to decoded output [LPC_ORDER x 1]   */
+    const SKP_Silk_NLSF_CB_struct   *psNLSF_CB,     /* I    Pointer to NLSF codebook struct             */
+    const SKP_int                   *NLSFIndices,   /* I    Pointer to NLSF indices [nStages x 1]       */
+    const SKP_int                   LPC_order       /* I    LPC order                                   */
+);
+
+/**********************/
+/* Arithmetic coding */
+/*********************/
+
+/* Decode quantization indices of excitation (Shell coding) */
+void SKP_Silk_decode_pulses(
+    SKP_Silk_range_coder_state  *psRC,              /* I/O  Range coder state                           */
+    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O  Decoder control                             */
+    SKP_int                     q[],                /* O    Excitation signal                           */
+    const SKP_int               frame_length        /* I    Frame length (preliminary)                  */
+);
+
+/******************/
+/* CNG */
+/******************/
+
+/* Reset CNG */
+void SKP_Silk_CNG_Reset(
+    SKP_Silk_decoder_state      *psDec              /* I/O  Decoder state                               */
+);
+
+/* Updates CNG estimate, and applies the CNG when packet was lost   */
+void SKP_Silk_CNG(
+    SKP_Silk_decoder_state      *psDec,             /* I/O  Decoder state                               */
+    SKP_Silk_decoder_control    *psDecCtrl,         /* I/O  Decoder control                             */
+    SKP_int16                   signal[],           /* I/O  Signal                                      */
+    SKP_int                     length              /* I    Length of residual                          */
+);
+
+/* Encoding of various parameters */
+void SKP_Silk_encode_parameters_v4(
+    SKP_Silk_encoder_state      *psEncC,            /* I/O  Encoder state                               */
+    SKP_Silk_encoder_control    *psEncCtrlC,        /* I/O  Encoder control                             */
+    SKP_Silk_range_coder_state  *psRC               /* I/O  Range encoder state                         */
+);
+
+/* Extract lowest layer encoding */
+void SKP_Silk_get_low_layer_internal(
+    const SKP_uint8             *indata,            /* I:   Encoded input vector                        */
+    const SKP_int16             nBytesIn,           /* I:   Number of input Bytes                       */
+    SKP_uint8                   *Layer0data,        /* O:   Layer0 payload                              */
+    SKP_int16                   *nLayer0Bytes       /* O:   Number of FEC Bytes                         */
+);
+
+/* Resets LBRR buffer, used if packet size changes */
+void SKP_Silk_LBRR_reset( 
+    SKP_Silk_encoder_state      *psEncC             /* I/O  Pointer to Silk encoder state               */
+);
+
+/* Predict number of bytes used to encode q */
+SKP_int SKP_Silk_pulses_to_bytes( /* O  Return value, predicted number of bytes used to encode q */ 
+    SKP_Silk_encoder_state      *psEncC,            /* I/O  Encoder State*/
+    SKP_int8                    q[]                 /* I     Pulse signal */
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+++ b/src_common/SKP_Silk_perceptual_parameters.h
@@ -1,0 +1,115 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_PERCEPTUAL_PARAMETERS_H
+#define SKP_SILK_PERCEPTUAL_PARAMETERS_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* reduction in coding SNR during low speech activity */
+#define BG_SNR_DECR_dB                              4.0f
+
+/* factor for reducing quantization noise during voiced speech */
+#define HARM_SNR_INCR_dB                            2.0f
+
+/* factor for reducing quantization noise for unvoiced sparse signals */
+#define SPARSE_SNR_INCR_dB                          2.0f
+
+/* threshold for sparseness measure above which to use lower quantization offset during unvoiced */
+#define SPARSENESS_THRESHOLD_QNT_OFFSET             0.75f
+
+
+/* noise shaping filter chirp factor */
+#define BANDWIDTH_EXPANSION                         0.95f
+
+/* difference between chirp factors for analysis and synthesis noise shaping filters at low bitrates */
+#define LOW_RATE_BANDWIDTH_EXPANSION_DELTA          0.01f
+
+/* factor to reduce all bandwdith expansion coefficients for super wideband, relative to wideband */
+#define SWB_BANDWIDTH_EXPANSION_REDUCTION           1.0f
+
+/* gain reduction for fricatives */
+#define DE_ESSER_COEF_SWB_dB                        2.0f
+#define DE_ESSER_COEF_WB_dB                         1.0f
+
+/* extra harmonic boosting (signal shaping) at low bitrates */
+#define LOW_RATE_HARMONIC_BOOST                     0.1f
+
+/* extra harmonic boosting (signal shaping) for noisy input signals */
+#define LOW_INPUT_QUALITY_HARMONIC_BOOST            0.1f
+
+/* harmonic noise shaping */
+#define HARMONIC_SHAPING                            0.3f
+
+/* extra harmonic noise shaping for high bitrates or noisy input */
+#define HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING   0.2f
+
+
+/* parameter for shaping noise towards higher frequencies */
+#define HP_NOISE_COEF                               0.3f
+
+/* parameter for shaping noise extra towards higher frequencies during voiced speech */
+#define HARM_HP_NOISE_COEF                          0.4f
+
+/* parameter for applying a high-pass tilt to the input signal */
+#define INPUT_TILT                                  0.04f
+
+/* parameter for extra high-pass tilt to the input signal at high rates */
+#define HIGH_RATE_INPUT_TILT                        0.04f
+
+/* parameter for reducing noise at the very low frequencies */
+#define LOW_FREQ_SHAPING                            3.0f
+
+/* less reduction of noise at the very low frequencies for signals with low SNR at low frequencies */
+#define LOW_QUALITY_LOW_FREQ_SHAPING_DECR           0.5f
+
+/* fraction added to first autocorrelation value */
+#define SHAPE_WHITE_NOISE_FRACTION                  3.8147e-5f
+
+/* fraction of first autocorrelation value added to residual energy value; limits prediction gain */
+#define SHAPE_MIN_ENERGY_RATIO                      1.526e-5f       // 1.526e-5 = 1/65536
+
+/* noise floor to put a low limit on the quantization step size */
+#define NOISE_FLOOR_dB                              4.0f
+
+/* noise floor relative to active speech gain level */
+#define RELATIVE_MIN_GAIN_dB                        -50.0f
+
+/* subframe smoothing coefficient for determining active speech gain level (lower -> more smoothing) */
+#define GAIN_SMOOTHING_COEF                         1e-3f
+
+/* subframe smoothing coefficient for HarmBoost, HarmShapeGain, Tilt (lower -> more smoothing) */
+#define SUBFR_SMTH_COEF                             0.4f
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+++ b/src_common/SKP_Silk_pulses_to_bytes.c
@@ -1,0 +1,81 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*
+ * File Name:   SKP_Silk_pulses_to_bytes.c
+ */
+
+#include <stdlib.h>
+#include "SKP_Silk_main.h"
+
+/* nBytes = sum_over_shell_blocks( POLY_FIT_0 + POLY_FIT_1 * sum_abs_val + POLY_FIT_2 * sum_abs_val^2 ) */
+#define POLY_FIT_0_Q15     12520
+#define POLY_FIT_1_Q15     15862
+#define POLY_FIT_2_Q20     -9222
+
+/* Predict number of bytes used to encode q */
+SKP_int SKP_Silk_pulses_to_bytes( /* O  Return value, predicted number of bytes used to encode q */ 
+    SKP_Silk_encoder_state          *psEncC,        /* I/O  Encoder State */
+    SKP_int8                        q[]             /* I    Pulse signal  */
+)
+{
+    SKP_int i, j, iter;
+    SKP_int8 *q_ptr;
+    SKP_int32 sum_abs_val, nBytes, acc_nBytes;
+    /* Take the absolute value of the pulses */
+    iter = psEncC->frame_length / SHELL_CODEC_FRAME_LENGTH;
+    
+    /* Calculate rate as a nonlinaer mapping of sum abs value of each Shell block */
+    q_ptr      = q;
+    acc_nBytes = 0;
+    for( j = 0; j < iter; j++ ) {
+        sum_abs_val = 0;
+        for(i = 0; i < SHELL_CODEC_FRAME_LENGTH; i+=4){
+            sum_abs_val += (SKP_int32)SKP_abs( q_ptr[ i + 0 ] );
+            sum_abs_val += (SKP_int32)SKP_abs( q_ptr[ i + 1 ] );
+            sum_abs_val += (SKP_int32)SKP_abs( q_ptr[ i + 2 ] );
+            sum_abs_val += (SKP_int32)SKP_abs( q_ptr[ i + 3 ] );
+        }
+        /* Calculate nBytes used for thi sshell frame */
+        nBytes = SKP_SMULWB( SKP_SMULBB( sum_abs_val, sum_abs_val ), POLY_FIT_2_Q20 );  // Q4
+        nBytes = SKP_LSHIFT_SAT32( nBytes, 11 );                                        // Q15
+        nBytes += SKP_SMULBB( sum_abs_val, POLY_FIT_1_Q15 );                            // Q15
+        nBytes += POLY_FIT_0_Q15;                                                       // Q15
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+        DEBUG_STORE_DATA( sum_abs_val.dat, &sum_abs_val, sizeof( SKP_int32 ) );
+#endif
+        acc_nBytes += nBytes;
+
+        q_ptr += SHELL_CODEC_FRAME_LENGTH; /* update pointer */
+    }
+
+    acc_nBytes = SKP_RSHIFT_ROUND( acc_nBytes, 15 );                                    // Q0
+    acc_nBytes = SKP_SAT16( acc_nBytes ); // just to be sure                            // Q0
+    
+    return(( SKP_int )acc_nBytes);
+}
--- /dev/null
+++ b/src_common/SKP_Silk_range_coder.c
@@ -1,0 +1,290 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+#define MAX_SIZE 10000
+
+/* Range encoder for one symbol */
+void SKP_Silk_range_encoder(
+    SKP_Silk_range_coder_state      *psRC,              /* I/O  compressor data structure                   */
+    const SKP_int                   data,               /* I    uncompressed data                           */
+    const SKP_uint16                prob[]              /* I    cumulative density functions                */
+)
+{
+    SKP_uint32 low_Q16, high_Q16;
+
+    if( psRC->error ) {
+        return;
+    }
+    low_Q16  = prob[ data ];
+    high_Q16 = prob[ data + 1 ];
+    
+#ifdef SAVE_ALL_INTERNAL_DATA
+    DEBUG_STORE_DATA( enc_l.dat, &low_Q16,  sizeof(SKP_uint32) );
+    DEBUG_STORE_DATA( enc_h.dat, &high_Q16, sizeof(SKP_uint32) );
+    DEBUG_STORE_DATA( enc.dat,   &data,     sizeof(SKP_int) );
+#endif
+
+    if( prob[ 2 ] == 65535 ) {
+        /* Instead of detection, we could add a separate function and call when we know that input is a bit */
+        ec_enc_bit_prob( &psRC->range_enc_celt_state, data, 65536 - prob[ 1 ] );
+    } else {
+        ec_encode_bin( &psRC->range_enc_celt_state, low_Q16, high_Q16, 16 );
+    }
+}
+
+/* Range encoder for one symbol, with uniform PDF*/
+void SKP_Silk_range_encode_uniform(
+    SKP_Silk_range_coder_state      *psRC,              /* I/O  compressor data structure                   */
+    const SKP_int                   data,               /* I    uncompressed data                           */
+    const SKP_int                   N                   /* I    number of possible outcomes                 */
+)
+{
+    SKP_int i;
+    SKP_uint16 delta, prob[ MAX_SIZE + 1 ];
+
+    SKP_assert( N < MAX_SIZE );
+
+    delta = ( SKP_uint16 )SKP_DIV32_16( 65535, N );
+    prob[ 0 ] = 0;
+    for( i = 0; i < N - 1; i++ ) {
+        prob[ i + 1 ] = prob[ i ] + delta;
+    }
+    prob[ N ] = 65535;
+
+    SKP_Silk_range_encoder( psRC, data, prob );
+}
+
+/* Range encoder for multiple symbols */
+void SKP_Silk_range_encoder_multi(
+    SKP_Silk_range_coder_state      *psRC,              /* I/O  compressor data structure                   */
+    const SKP_int                   data[],             /* I    uncompressed data    [nSymbols]             */
+    const SKP_uint16 * const        prob[],             /* I    cumulative density functions                */
+    const SKP_int                   nSymbols            /* I    number of data symbols                      */
+)
+{
+    SKP_int k;
+    for( k = 0; k < nSymbols; k++ ) {
+        SKP_Silk_range_encoder( psRC, data[ k ], prob[ k ] );
+    }
+}
+
+/* Range decoder for one symbol */
+void SKP_Silk_range_decoder(
+    SKP_int                         data[],             /* O    uncompressed data                           */
+    SKP_Silk_range_coder_state      *psRC,              /* I/O  compressor data structure                   */
+    const SKP_uint16                prob[],             /* I    cumulative density function                 */
+    SKP_int                         probIx              /* I    initial (middle) entry of cdf               */
+)
+{
+    SKP_uint32 low_Q16, high_Q16;
+
+    SKP_uint32 low_Q16_returned;
+    SKP_int    temp;
+
+    if( psRC->error ) {
+        /* Set output to zero */
+        *data = 0;
+        return;
+    }
+
+    if( prob[ 2 ] == 65535 ) {
+        /* Instead of detection, we could add a separate function and call when we know that output is a bit */
+        *data = ec_dec_bit_prob( &psRC->range_dec_celt_state, 65536 - prob[ 1 ] );
+    } else {
+        low_Q16_returned = ec_decode_bin( &psRC->range_dec_celt_state, 16 );
+    }
+
+    /* OPTIMIZE ME WITH BI-SECTION */
+    if( prob[ 2 ] != 65535 ) {
+#if 1
+        temp = 0;
+        while( low_Q16_returned >= prob[ ++temp ] ) {}
+        *data = temp - 1;
+#else
+        temp = probIx;
+        if( low_Q16_returned >= prob[ temp ] ){
+            while( low_Q16_returned >= prob[ temp ] ) {
+                temp++;
+            }
+            temp = temp - 1;
+        } else {
+            /* search down */
+            while( low_Q16_returned < prob[ temp ] ) {
+                temp--;
+            }
+        }
+        *data = temp;
+#endif
+
+        low_Q16  = prob[ *data ];
+        high_Q16 = prob[ *data + 1 ];
+
+#ifdef SAVE_ALL_INTERNAL_DATA
+        DEBUG_STORE_DATA( dec_lr.dat, &low_Q16_returned,  sizeof( SKP_uint32 ) );
+        DEBUG_STORE_DATA( dec_l.dat,  &low_Q16,           sizeof( SKP_uint32 ) );
+        DEBUG_STORE_DATA( dec_h.dat,  &high_Q16,          sizeof( SKP_uint32 ) );
+#endif  
+        ec_dec_update( &psRC->range_dec_celt_state, low_Q16, high_Q16,( 1 << 16 ) );
+    }
+#ifdef SAVE_ALL_INTERNAL_DATA
+    DEBUG_STORE_DATA( dec.dat, data, sizeof( SKP_int ) );
+#endif
+}
+
+/* Range decoder for one symbol, with uniform PDF*/
+void SKP_Silk_range_decode_uniform(
+    SKP_int                         data[],             /* O    uncompressed data                           */
+    SKP_Silk_range_coder_state      *psRC,              /* I/O  compressor data structure                   */
+    const SKP_int                   N                   /* I    number of possible outcomes                 */
+)
+{
+    SKP_int i;
+    SKP_uint16 delta, prob[ MAX_SIZE + 1 ];
+
+    SKP_assert( N < MAX_SIZE );
+
+    delta = ( SKP_uint16 )SKP_DIV32_16( 65535, N );
+    prob[ 0 ] = 0;
+    for( i = 0; i < N - 1; i++ ) {
+        prob[ i + 1 ] = prob[ i ] + delta;
+    }
+    prob[ N ] = 65535;
+
+    SKP_Silk_range_decoder( data, psRC, prob, ( N >> 1 ) );
+}
+
+/* Range decoder for multiple symbols */
+void SKP_Silk_range_decoder_multi(
+    SKP_int                         data[],             /* O    uncompressed data                [nSymbols] */
+    SKP_Silk_range_coder_state      *psRC,              /* I/O  compressor data structure                   */
+    const SKP_uint16 * const        prob[],             /* I    cumulative density functions                */
+    const SKP_int                   probStartIx[],      /* I    initial (middle) entries of cdfs [nSymbols] */
+    const SKP_int                   nSymbols            /* I    number of data symbols                      */
+)
+{
+    SKP_int k;
+    for( k = 0; k < nSymbols; k++ ) {
+        SKP_Silk_range_decoder( &data[ k ], psRC, prob[ k ], probStartIx[ k ] );
+    }
+}
+
+/* Initialize range encoder */
+void SKP_Silk_range_enc_init(
+    SKP_Silk_range_coder_state      *psRC               /* O    compressor data structure                   */
+)
+{
+    psRC->error        = 0;
+}
+
+/* Initialize range decoder */
+void SKP_Silk_range_dec_init(
+    SKP_Silk_range_coder_state      *psRC,              /* O    compressor data structure                   */
+    const SKP_uint8                 buffer[],           /* I    buffer for compressed data [bufferLength]   */
+    const SKP_int32                 bufferLength        /* I    buffer length (in bytes)                    */
+)
+{
+    /* check input */
+    if( bufferLength > MAX_ARITHM_BYTES ) {
+        psRC->error = RANGE_CODER_DEC_PAYLOAD_TOO_LONG;
+        return;
+    }
+    /* Initialize structure */
+    /* Copy to internal buffer */
+    SKP_memcpy( psRC->buffer, buffer, bufferLength * sizeof( SKP_uint8 ) ); 
+    psRC->bufferLength = bufferLength;
+    psRC->bufferIx = 0;
+    psRC->base_Q32 = 
+        SKP_LSHIFT_uint( ( SKP_uint32 )buffer[ 0 ], 24 ) | 
+        SKP_LSHIFT_uint( ( SKP_uint32 )buffer[ 1 ], 16 ) | 
+        SKP_LSHIFT_uint( ( SKP_uint32 )buffer[ 2 ],  8 ) | 
+                         ( SKP_uint32 )buffer[ 3 ];
+    psRC->range_Q16 = 0x0000FFFF;
+    psRC->error     = 0;
+}
+
+/* Determine length of bitstream */
+SKP_int SKP_Silk_range_encoder_get_length(              /* O    returns number of BITS in stream            */
+    SKP_Silk_range_coder_state          *psRC,          /* I    compressed data structure                   */
+    SKP_int                             *nBytes         /* O    number of BYTES in stream                   */
+)
+{
+    SKP_int nBits;
+
+    /* Get number of bits in bitstream */
+    nBits = ec_enc_tell( &psRC->range_enc_celt_state, 0 );
+
+    /* Round up to an integer number of bytes */
+    *nBytes = SKP_RSHIFT( nBits + 7, 3 );
+
+    /* Return number of bits in bitstream */
+    return nBits;
+}
+
+/* Determine length of bitstream */
+SKP_int SKP_Silk_range_decoder_get_length(              /* O    returns number of BITS in stream            */
+    SKP_Silk_range_coder_state          *psRC,          /* I    compressed data structure                   */
+    SKP_int                             *nBytes         /* O    number of BYTES in stream                   */
+)
+{
+    SKP_int nBits;
+
+    /* Get number of bits in bitstream */
+    nBits = ec_dec_tell( &psRC->range_dec_celt_state, 0 );
+
+    /* Round up to an integer number of bytes */
+    *nBytes = SKP_RSHIFT( nBits + 7, 3 );
+
+    /* Return number of bits in bitstream */
+    return nBits;
+}
+
+/* Check that any remaining bits in the last byte are set to 1 */
+void SKP_Silk_range_coder_check_after_decoding(
+    SKP_Silk_range_coder_state      *psRC               /* I/O  compressed data structure                   */
+)
+{
+    SKP_int bits_in_stream, nBytes, mask;
+
+    bits_in_stream = SKP_Silk_range_decoder_get_length( psRC, &nBytes );
+
+    /* Make sure not to read beyond buffer */
+    if( nBytes - 1 >= psRC->range_dec_celt_state.buf->storage ) {
+        psRC->error = RANGE_CODER_DECODER_CHECK_FAILED;
+        return;
+    }
+
+    /* Test any remaining bits in last byte */
+    if( bits_in_stream & 7 ) {
+        mask = SKP_RSHIFT( 0xFF, bits_in_stream & 7 );
+        if( ( psRC->range_dec_celt_state.buf->buf[ nBytes - 1 ] & mask ) != mask ) {
+            psRC->error = RANGE_CODER_DECODER_CHECK_FAILED;
+            return;
+        }
+    }
+}
--- /dev/null
+++ b/src_common/SKP_Silk_shell_coder.c
@@ -1,0 +1,155 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_main.h"
+
+/* shell coder; pulse-subframe length is hardcoded */
+
+SKP_INLINE void combine_pulses(
+    SKP_int         *out,   /* O:   combined pulses vector [len] */
+    const SKP_int   *in,    /* I:   input vector       [2 * len] */
+    const SKP_int   len     /* I:   number of OUTPUT samples     */
+)
+{
+    SKP_int k;
+    for( k = 0; k < len; k++ ) {
+        out[ k ] = in[ 2 * k ] + in[ 2 * k + 1 ];
+    }
+}
+
+SKP_INLINE void encode_split(
+    SKP_Silk_range_coder_state  *sRC,           /* I/O: compressor data structure                   */
+    const SKP_int               p_child1,       /* I:   pulse amplitude of first child subframe     */
+    const SKP_int               p,              /* I:   pulse amplitude of current subframe         */
+    const SKP_uint16            *shell_table    /* I:   table of shell cdfs                         */
+)
+{
+    const SKP_uint16 *cdf;
+
+    if( p > 0 ) {
+        cdf = &shell_table[ SKP_Silk_shell_code_table_offsets[ p ] ];
+        SKP_Silk_range_encoder( sRC, p_child1, cdf );
+    }
+}
+
+SKP_INLINE void decode_split(
+    SKP_int                     *p_child1,      /* O:   pulse amplitude of first child subframe     */
+    SKP_int                     *p_child2,      /* O:   pulse amplitude of second child subframe    */
+    SKP_Silk_range_coder_state  *sRC,           /* I/O: compressor data structure                   */
+    const SKP_int               p,              /* I:   pulse amplitude of current subframe         */
+    const SKP_uint16            *shell_table    /* I:   table of shell cdfs                         */
+)
+{
+    SKP_int cdf_middle;
+    const SKP_uint16 *cdf;
+
+    if( p > 0 ) {
+        cdf_middle = SKP_RSHIFT( p, 1 );
+        cdf = &shell_table[ SKP_Silk_shell_code_table_offsets[ p ] ];
+        SKP_Silk_range_decoder( p_child1, sRC, cdf, cdf_middle );
+        p_child2[ 0 ] = p - p_child1[ 0 ];
+    } else {
+        p_child1[ 0 ] = 0;
+        p_child2[ 0 ] = 0;
+    }
+}
+
+/* Shell encoder, operates on one shell code frame of 16 pulses */
+void SKP_Silk_shell_encoder(
+    SKP_Silk_range_coder_state      *sRC,               /* I/O  compressor data structure                   */
+    const SKP_int                   *pulses0            /* I    data: nonnegative pulse amplitudes          */
+)
+{
+    SKP_int pulses1[ 8 ], pulses2[ 4 ], pulses3[ 2 ], pulses4[ 1 ];
+
+    /* this function operates on one shell code frame of 16 pulses */
+    SKP_assert( SHELL_CODEC_FRAME_LENGTH == 16 );
+
+    /* tree representation per pulse-subframe */
+    combine_pulses( pulses1, pulses0, 8 );
+    combine_pulses( pulses2, pulses1, 4 );
+    combine_pulses( pulses3, pulses2, 2 );
+    combine_pulses( pulses4, pulses3, 1 );
+
+    encode_split( sRC, pulses3[  0 ], pulses4[ 0 ], SKP_Silk_shell_code_table3 );
+
+    encode_split( sRC, pulses2[  0 ], pulses3[ 0 ], SKP_Silk_shell_code_table2 );
+
+    encode_split( sRC, pulses1[  0 ], pulses2[ 0 ], SKP_Silk_shell_code_table1 );
+    encode_split( sRC, pulses0[  0 ], pulses1[ 0 ], SKP_Silk_shell_code_table0 );
+    encode_split( sRC, pulses0[  2 ], pulses1[ 1 ], SKP_Silk_shell_code_table0 );
+
+    encode_split( sRC, pulses1[  2 ], pulses2[ 1 ], SKP_Silk_shell_code_table1 );
+    encode_split( sRC, pulses0[  4 ], pulses1[ 2 ], SKP_Silk_shell_code_table0 );
+    encode_split( sRC, pulses0[  6 ], pulses1[ 3 ], SKP_Silk_shell_code_table0 );
+
+    encode_split( sRC, pulses2[  2 ], pulses3[ 1 ], SKP_Silk_shell_code_table2 );
+
+    encode_split( sRC, pulses1[  4 ], pulses2[ 2 ], SKP_Silk_shell_code_table1 );
+    encode_split( sRC, pulses0[  8 ], pulses1[ 4 ], SKP_Silk_shell_code_table0 );
+    encode_split( sRC, pulses0[ 10 ], pulses1[ 5 ], SKP_Silk_shell_code_table0 );
+
+    encode_split( sRC, pulses1[  6 ], pulses2[ 3 ], SKP_Silk_shell_code_table1 );
+    encode_split( sRC, pulses0[ 12 ], pulses1[ 6 ], SKP_Silk_shell_code_table0 );
+    encode_split( sRC, pulses0[ 14 ], pulses1[ 7 ], SKP_Silk_shell_code_table0 );
+}
+
+
+/* Shell decoder, operates on one shell code frame of 16 pulses */
+void SKP_Silk_shell_decoder(
+    SKP_int                         *pulses0,           /* O    data: nonnegative pulse amplitudes          */
+    SKP_Silk_range_coder_state      *sRC,               /* I/O  compressor data structure                   */
+    const SKP_int                   pulses4             /* I    number of pulses per pulse-subframe         */
+)
+{
+    SKP_int pulses3[ 2 ], pulses2[ 4 ], pulses1[ 8 ];
+
+    /* this function operates on one shell code frame of 16 pulses */
+    SKP_assert( SHELL_CODEC_FRAME_LENGTH == 16 );
+
+    decode_split( &pulses3[  0 ], &pulses3[  1 ], sRC, pulses4,      SKP_Silk_shell_code_table3 );
+
+    decode_split( &pulses2[  0 ], &pulses2[  1 ], sRC, pulses3[ 0 ], SKP_Silk_shell_code_table2 );
+
+    decode_split( &pulses1[  0 ], &pulses1[  1 ], sRC, pulses2[ 0 ], SKP_Silk_shell_code_table1 );
+    decode_split( &pulses0[  0 ], &pulses0[  1 ], sRC, pulses1[ 0 ], SKP_Silk_shell_code_table0 );
+    decode_split( &pulses0[  2 ], &pulses0[  3 ], sRC, pulses1[ 1 ], SKP_Silk_shell_code_table0 );
+
+    decode_split( &pulses1[  2 ], &pulses1[  3 ], sRC, pulses2[ 1 ], SKP_Silk_shell_code_table1 );
+    decode_split( &pulses0[  4 ], &pulses0[  5 ], sRC, pulses1[ 2 ], SKP_Silk_shell_code_table0 );
+    decode_split( &pulses0[  6 ], &pulses0[  7 ], sRC, pulses1[ 3 ], SKP_Silk_shell_code_table0 );
+
+    decode_split( &pulses2[  2 ], &pulses2[  3 ], sRC, pulses3[ 1 ], SKP_Silk_shell_code_table2 );
+
+    decode_split( &pulses1[  4 ], &pulses1[  5 ], sRC, pulses2[ 2 ], SKP_Silk_shell_code_table1 );
+    decode_split( &pulses0[  8 ], &pulses0[  9 ], sRC, pulses1[ 4 ], SKP_Silk_shell_code_table0 );
+    decode_split( &pulses0[ 10 ], &pulses0[ 11 ], sRC, pulses1[ 5 ], SKP_Silk_shell_code_table0 );
+
+    decode_split( &pulses1[  6 ], &pulses1[  7 ], sRC, pulses2[ 3 ], SKP_Silk_shell_code_table1 );
+    decode_split( &pulses0[ 12 ], &pulses0[ 13 ], sRC, pulses1[ 6 ], SKP_Silk_shell_code_table0 );
+    decode_split( &pulses0[ 14 ], &pulses0[ 15 ], sRC, pulses1[ 7 ], SKP_Silk_shell_code_table0 );
+}
--- /dev/null
+++ b/src_common/SKP_Silk_structs.h
@@ -1,0 +1,371 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_STRUCTS_H
+#define SKP_SILK_STRUCTS_H
+
+#include "SKP_Silk_typedef.h"
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_Silk_define.h"
+#include "entenc.h"
+#include "entdec.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+/************************************/
+/* Noise shaping quantization state */
+/************************************/
+typedef struct {
+    SKP_int16   xq[           2 * MAX_FRAME_LENGTH ]; /* Buffer for quantized output signal */
+    SKP_int32   sLTP_shp_Q10[ 2 * MAX_FRAME_LENGTH ];
+    SKP_int32   sLPC_Q14[ MAX_FRAME_LENGTH / MAX_NB_SUBFR + MAX_LPC_ORDER ];
+    SKP_int32   sAR2_Q14[ MAX_SHAPE_LPC_ORDER ];
+    SKP_int32   sLF_AR_shp_Q12;
+    SKP_int     lagPrev;
+    SKP_int     sLTP_buf_idx;
+    SKP_int     sLTP_shp_buf_idx;
+    SKP_int32   rand_seed;
+    SKP_int32   prev_inv_gain_Q16;
+    SKP_int     rewhite_flag;
+} SKP_Silk_nsq_state; /* FIX*/
+
+/* Struct for Low BitRate Redundant (LBRR) information */
+typedef struct {
+    SKP_uint8   payload[ MAX_ARITHM_BYTES ];    
+    SKP_int     nBytes;                         /* Number of bytes in payload                               */
+    SKP_int     usage;                          /* Tells how the payload should be used as FEC              */
+} SKP_SILK_LBRR_struct;
+
+/********************************/
+/* VAD state                    */
+/********************************/
+typedef struct {
+    SKP_int32   AnaState[ 2 ];                  /* Analysis filterbank state: 0-8 kHz                       */
+    SKP_int32   AnaState1[ 2 ];                 /* Analysis filterbank state: 0-4 kHz                       */
+    SKP_int32   AnaState2[ 2 ];                 /* Analysis filterbank state: 0-2 kHz                       */
+    SKP_int32   XnrgSubfr[ VAD_N_BANDS ];       /* Subframe energies                                        */
+    SKP_int32   NrgRatioSmth_Q8[ VAD_N_BANDS ]; /* Smoothed energy level in each band                       */
+    SKP_int16   HPstate;                        /* State of differentiator in the lowest band               */
+    SKP_int32   NL[ VAD_N_BANDS ];              /* Noise energy level in each band                          */
+    SKP_int32   inv_NL[ VAD_N_BANDS ];          /* Inverse noise energy level in each band                  */
+    SKP_int32   NoiseLevelBias[ VAD_N_BANDS ];  /* Noise level estimator bias/offset                        */
+    SKP_int32   counter;                        /* Frame counter used in the initial phase                  */
+} SKP_Silk_VAD_state;
+
+/*******************************/
+/* Range encoder/decoder state */
+/*******************************/
+typedef struct {
+    SKP_int32   bufferLength;
+    SKP_int32   bufferIx;
+    SKP_uint32  base_Q32;
+    SKP_uint32  range_Q16;
+    SKP_int32   error;
+    SKP_uint8   buffer[ MAX_ARITHM_BYTES ];     /* Buffer containing payload                                */
+    /* The CELT entropy encoder + decoder */
+    ec_enc      range_enc_celt_state;
+    ec_dec      range_dec_celt_state;
+} SKP_Silk_range_coder_state;
+
+/* Input frequency range detection struct */
+typedef struct {
+    SKP_int32                   S_HP_8_kHz[ NB_SOS ][ 2 ];  /* HP filter State */
+    SKP_int32                   ConsecSmplsAboveThres;
+    SKP_int32                   ActiveSpeech_ms;            /* Accumulated time with active speech */
+    SKP_int                     SWB_detected;               /* Flag to indicate SWB input */
+    SKP_int                     WB_detected;                /* Flag to indicate WB input */
+} SKP_Silk_detect_SWB_state;
+
+#if SWITCH_TRANSITION_FILTERING
+/* Variable cut-off low-pass filter state */
+typedef struct {
+    SKP_int32                   In_LP_State[ 2 ];           /* Low pass filter state */
+    SKP_int32                   transition_frame_no;        /* Counter which is mapped to a cut-off frequency */
+    SKP_int                     mode;                       /* Operating mode, 0: switch down, 1: switch up */
+} SKP_Silk_LP_state;
+#endif
+
+/* Structure for one stage of MSVQ */
+typedef struct {
+    const SKP_int32             nVectors;
+    const SKP_int16             *CB_NLSF_Q15;
+    const SKP_int16             *Rates_Q5;
+} SKP_Silk_NLSF_CBS;
+
+/* Structure containing NLSF MSVQ codebook */
+typedef struct {
+    const SKP_int32             nStages;
+
+    /* Fields for (de)quantizing */
+    const SKP_Silk_NLSF_CBS     *CBStages;
+    const SKP_int               *NDeltaMin_Q15;
+
+    /* Fields for arithmetic (de)coding */
+    const SKP_uint16            *CDF;
+    const SKP_uint16 * const    *StartPtr;
+    const SKP_int               *MiddleIx;
+} SKP_Silk_NLSF_CB_struct;
+
+/********************************/
+/* Encoder state                */
+/********************************/
+typedef struct {
+    SKP_Silk_range_coder_state      sRC;                            /* Range coder state                                                    */
+    SKP_Silk_range_coder_state      sRC_LBRR;                       /* Range coder state (for low bitrate redundancy)                       */
+#if HIGH_PASS_INPUT
+    SKP_int32                       In_HP_State[ 2 ];               /* High pass filter state                                               */
+#endif
+#if SWITCH_TRANSITION_FILTERING
+    SKP_Silk_LP_state               sLP;                            /* Low pass filter state */
+#endif
+    SKP_Silk_VAD_state              sVAD;                           /* Voice activity detector state                                        */
+
+    SKP_int                         LBRRprevLastGainIndex;
+    SKP_int                         prev_sigtype;
+    SKP_int                         typeOffsetPrev;                 /* Previous signal type and quantization offset                         */
+    SKP_int                         prevLag;
+    SKP_int                         prev_lagIndex;
+    SKP_int32                       API_fs_Hz;                      /* API sampling frequency (Hz)                                          */
+    SKP_int32                       prev_API_fs_Hz;                 /* Previous API sampling frequency (Hz)                                 */
+    SKP_int                         maxInternal_fs_kHz;             /* Maximum internal sampling frequency (kHz)                            */
+    SKP_int                         fs_kHz;                         /* Internal sampling frequency (kHz)                                    */
+    SKP_int                         fs_kHz_changed;                 /* Did we switch yet?                                                   */
+    SKP_int                         nb_subfr;                       /* Number of 5 ms subframes in a frame                                  */
+    SKP_int                         frame_length;                   /* Frame length (samples)                                               */
+    SKP_int                         subfr_length;                   /* Subframe length (samples)                                            */
+    SKP_int                         ltp_mem_length;                 /* Length of LTP memory                                                 */
+    SKP_int                         la_pitch;                       /* Look-ahead for pitch analysis (samples)                              */
+    SKP_int                         la_shape;                       /* Look-ahead for noise shape analysis (samples)                        */
+    SKP_int32                       TargetRate_bps;                 /* Target bitrate (bps)                                                 */
+    SKP_int                         PacketSize_ms;                  /* Number of milliseconds to put in each packet                         */
+    SKP_int                         PacketLoss_perc;                /* Packet loss rate measured by farend                                  */
+    SKP_int32                       frameCounter;
+    SKP_int                         Complexity;                     /* Complexity setting: 0-> low; 1-> medium; 2->high                     */
+    SKP_int                         nStatesDelayedDecision;         /* Number of states in delayed decision quantization                    */
+    SKP_int                         useInterpolatedNLSFs;           /* Flag for using NLSF interpolation                                    */
+    SKP_int                         shapingLPCOrder;                /* Filter order for noise shaping filters                               */
+    SKP_int                         predictLPCOrder;                /* Filter order for prediction filters                                  */
+    SKP_int                         pitchEstimationComplexity;      /* Complexity level for pitch estimator                                 */
+    SKP_int                         pitchEstimationLPCOrder;        /* Whitening filter order for pitch estimator                           */
+    SKP_int                         LTPQuantLowComplexity;          /* Flag for low complexity LTP quantization                             */
+    SKP_int                         NLSF_MSVQ_Survivors;            /* Number of survivors in NLSF MSVQ                                     */
+    SKP_int                         first_frame_after_reset;        /* Flag for deactivating NLSF interp. and fluc. reduction after resets  */
+
+    /* Input/output buffering */
+    SKP_int16                       inputBuf[ MAX_FRAME_LENGTH ];   /* buffer containin input signal                                        */
+    SKP_int                         inputBufIx;
+    SKP_int                         nFramesInPayloadBuf;            /* number of frames sitting in outputBuf                                */
+    SKP_int                         nBytesInPayloadBuf;             /* number of bytes sitting in outputBuf                                 */
+
+    /* Parameters For LTP scaling Control */
+    SKP_int                         frames_since_onset;
+
+    const SKP_Silk_NLSF_CB_struct   *psNLSF_CB[ 2 ];                /* Pointers to voiced/unvoiced NLSF codebooks */
+
+    /* Struct for Inband LBRR */ 
+    SKP_SILK_LBRR_struct            LBRR_buffer[ MAX_LBRR_DELAY ];
+    SKP_int                         oldest_LBRR_idx;
+    SKP_int                         useInBandFEC;                   /* Saves the API setting for query                                      */
+    SKP_int                         LBRR_enabled;
+    SKP_int                         LBRR_GainIncreases;             /* Number of shifts to Gains to get LBRR rate Voiced frames             */
+
+    /* Bitrate control */
+    SKP_int32                       bitrateDiff;                    /* Accumulated diff. between the target bitrate and the switch bitrates */
+    SKP_int32                       bitrate_threshold_up;           /* Threshold for switching to a higher internal sample frequency        */
+    SKP_int32                       bitrate_threshold_down;         /* Threshold for switching to a lower internal sample frequency         */
+
+    SKP_Silk_resampler_state_struct  resampler_state;
+
+    /* DTX */
+    SKP_int                         noSpeechCounter;                /* Counts concecutive nonactive frames, used by DTX                     */
+    SKP_int                         useDTX;                         /* Flag to enable DTX                                                   */
+    SKP_int                         inDTX;                          /* Flag to signal DTX period                                            */
+    SKP_int                         vadFlag;                        /* Flag to indicate Voice Activity                                      */
+
+    /* Struct for detecting SWB input */
+    SKP_Silk_detect_SWB_state       sSWBdetect;
+
+
+    /* Buffers */
+	SKP_int8                        q[ MAX_FRAME_LENGTH * MAX_FRAMES_PER_PACKET ];      /* pulse signal buffer */
+    SKP_int8                        q_LBRR[ MAX_FRAME_LENGTH * MAX_FRAMES_PER_PACKET ]; /* pulse signal buffer */
+    SKP_int                         sigtype[ MAX_FRAMES_PER_PACKET ];
+    SKP_int                         QuantOffsetType[ MAX_FRAMES_PER_PACKET ];
+} SKP_Silk_encoder_state;
+
+
+/************************/
+/* Encoder control      */
+/************************/
+typedef struct {
+    /* Quantization indices */
+    SKP_int     lagIndex;
+    SKP_int     contourIndex;
+    SKP_int     PERIndex;
+    SKP_int     LTPIndex[ MAX_NB_SUBFR ];
+    SKP_int     NLSFIndices[ NLSF_MSVQ_MAX_CB_STAGES ];  /* NLSF path of quantized LSF vector   */
+    SKP_int     NLSFInterpCoef_Q2;
+    SKP_int     GainsIndices[ MAX_NB_SUBFR ];
+	SKP_int     warping_Q16;
+    SKP_int32   Seed;
+    SKP_int     LTP_scaleIndex;
+    SKP_int     RateLevelIndex;
+    SKP_int     QuantOffsetType;
+    SKP_int     sigtype;
+
+    /* Prediction and coding parameters */
+    SKP_int     pitchL[ MAX_NB_SUBFR ];
+
+    SKP_int     LBRR_usage;                     /* Low bitrate redundancy usage                             */
+} SKP_Silk_encoder_control;
+
+/* Struct for Packet Loss Concealment */
+typedef struct {
+    SKP_int     pitchL[ MAX_NB_SUBFR ];         /* Pitch lag per 5 ms for last 20 ms                        */
+    SKP_int32   pitchL_Q8;                      /* Pitch lag to use for voiced concealment                  */
+    SKP_int16   LTPCoef_Q14[ LTP_ORDER ];       /* LTP coeficients to use for voiced concealment            */
+    SKP_int16   prevLPC_Q12[ MAX_LPC_ORDER ];
+    SKP_int     last_frame_lost;                /* Was previous frame lost                                  */
+    SKP_int32   rand_seed;                      /* Seed for unvoiced signal generation                      */
+    SKP_int16   randScale_Q14;                  /* Scaling of unvoiced random signal                        */
+    SKP_int32   conc_energy;
+    SKP_int     conc_energy_shift;
+    SKP_int16   prevLTP_scale_Q14;
+    SKP_int32   prevGain_Q16[ MAX_NB_SUBFR ];
+    SKP_int     fs_kHz;
+} SKP_Silk_PLC_struct;
+
+/* Struct for CNG */
+typedef struct {
+    SKP_int32   CNG_exc_buf_Q10[ MAX_FRAME_LENGTH ];
+    SKP_int     CNG_smth_NLSF_Q15[ MAX_LPC_ORDER ];
+    SKP_int32   CNG_synth_state[ MAX_LPC_ORDER ];
+    SKP_int32   CNG_smth_Gain_Q16;
+    SKP_int32   rand_seed;
+    SKP_int     fs_kHz;
+} SKP_Silk_CNG_struct;
+
+/********************************/
+/* Decoder state                */
+/********************************/
+typedef struct {
+    SKP_Silk_range_coder_state  sRC;                            /* Range coder state                                                    */
+    SKP_int32       prev_inv_gain_Q16;
+    SKP_int32       sLTP_Q16[ 2 * MAX_FRAME_LENGTH ];
+    SKP_int32       sLPC_Q14[ MAX_FRAME_LENGTH / MAX_NB_SUBFR + MAX_LPC_ORDER ];
+    SKP_int32       exc_Q10[ MAX_FRAME_LENGTH ];
+    SKP_int32       res_Q10[ MAX_FRAME_LENGTH ];
+    SKP_int16       outBuf[ 2 * MAX_FRAME_LENGTH ];             /* Buffer for output signal                                             */
+    SKP_int         sLTP_buf_idx;                               /* LTP_buf_index                                                        */
+    SKP_int         lagPrev;                                    /* Previous Lag                                                         */
+    SKP_int         LastGainIndex;                              /* Previous gain index                                                  */
+    SKP_int         LastGainIndex_EnhLayer;                     /* Previous gain index                                                  */
+    SKP_int         typeOffsetPrev;                             /* Previous signal type and quantization offset                         */
+    SKP_int32       HPState[ DEC_HP_ORDER ];                    /* HP filter state                                                      */
+    const SKP_int16 *HP_A;                                      /* HP filter AR coefficients                                            */
+    const SKP_int16 *HP_B;                                      /* HP filter MA coefficients                                            */
+    SKP_int         fs_kHz;                                     /* Sampling frequency in kHz                                            */
+    SKP_int32       prev_API_sampleRate;                        /* Previous API sample frequency (Hz)                                   */
+    SKP_int         nb_subfr;                                   /* Number of 5 ms subframes in a frame                                  */
+    SKP_int         frame_length;                               /* Frame length (samples)                                               */
+    SKP_int         subfr_length;                               /* Subframe length (samples)                                            */
+    SKP_int         ltp_mem_length;                             /* Length of LTP memory                                                 */
+    SKP_int         LPC_order;                                  /* LPC order                                                            */
+    SKP_int         prevNLSF_Q15[ MAX_LPC_ORDER ];              /* Used to interpolate LSFs                                             */
+    SKP_int         first_frame_after_reset;                    /* Flag for deactivating NLSF interp. and fluc. reduction after resets  */
+
+    /* For buffering payload in case of more frames per packet */
+    SKP_int         nBytesLeft;
+    SKP_int         nFramesDecoded;
+    SKP_int         nFramesInPacket;
+    SKP_int         moreInternalDecoderFrames;
+    SKP_int         FrameTermination;
+
+    SKP_Silk_resampler_state_struct  resampler_state;
+
+    const SKP_Silk_NLSF_CB_struct *psNLSF_CB[ 2 ];      /* Pointers to voiced/unvoiced NLSF codebooks */
+
+    SKP_int         sigtype[               MAX_FRAMES_PER_PACKET ];
+    SKP_int         QuantOffsetType[       MAX_FRAMES_PER_PACKET ];
+    SKP_int         GainsIndices[          MAX_FRAMES_PER_PACKET ][ MAX_NB_SUBFR ];
+    SKP_int         GainsIndices_EnhLayer[ MAX_FRAMES_PER_PACKET ][ MAX_NB_SUBFR ];
+    SKP_int         NLSFIndices[           MAX_FRAMES_PER_PACKET ][ NLSF_MSVQ_MAX_CB_STAGES ];
+    SKP_int         NLSFInterpCoef_Q2[     MAX_FRAMES_PER_PACKET ];
+    SKP_int         lagIndex[              MAX_FRAMES_PER_PACKET ];
+    SKP_int         contourIndex[          MAX_FRAMES_PER_PACKET ];
+    SKP_int         PERIndex[              MAX_FRAMES_PER_PACKET ];
+    SKP_int         LTPIndex[              MAX_FRAMES_PER_PACKET ][ MAX_NB_SUBFR ];
+    SKP_int         LTP_scaleIndex[        MAX_FRAMES_PER_PACKET ];
+    SKP_int         Seed[                  MAX_FRAMES_PER_PACKET ];
+    SKP_int         vadFlagBuf[            MAX_FRAMES_PER_PACKET ];
+    
+    /* Parameters used to investigate if inband FEC is used */
+    SKP_int         vadFlag;
+    SKP_int         no_FEC_counter;                             /* Counts number of frames wo inband FEC                                */
+    SKP_int         inband_FEC_offset;                          /* 0: no FEC, 1: FEC with 1 packet offset, 2: FEC w 2 packets offset    */ 
+
+    /* CNG state */
+    SKP_Silk_CNG_struct sCNG;
+
+    /* Stuff used for PLC */
+    SKP_int         lossCnt;
+    SKP_int         prev_sigtype;                               /* Previous sigtype                                                     */
+
+    SKP_Silk_PLC_struct sPLC;
+
+} SKP_Silk_decoder_state;
+
+/************************/
+/* Decoder control      */
+/************************/
+typedef struct {
+    /* prediction and coding parameters */
+    SKP_int             pitchL[ MAX_NB_SUBFR ];
+    SKP_int32           Gains_Q16[ MAX_NB_SUBFR ];
+    SKP_int32           Seed;
+    /* holds interpolated and final coefficients, 4-byte aligned */
+    SKP_array_of_int16_4_byte_aligned( PredCoef_Q12[ 2 ], MAX_LPC_ORDER );
+    SKP_int16           LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ];
+    SKP_int             LTP_scale_Q14;
+
+    /* quantization indices */
+    SKP_int             PERIndex;
+    SKP_int             RateLevelIndex;
+    SKP_int             QuantOffsetType;
+    SKP_int             sigtype;
+    SKP_int             NLSFInterpCoef_Q2;
+} SKP_Silk_decoder_control;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+++ b/src_common/SKP_Silk_tables.h
@@ -1,0 +1,171 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_TABLES_H
+#define SKP_SILK_TABLES_H
+
+#include "SKP_Silk_define.h"
+#include "SKP_Silk_structs.h"
+
+#define PITCH_EST_MAX_LAG_MS                18          /* 18 ms -> 56 Hz */
+#define PITCH_EST_MIN_LAG_MS                2           /* 2 ms -> 500 Hz */
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* entropy coding tables */
+extern const SKP_uint16 SKP_Silk_type_offset_CDF[ 5 ];                                              /*   5 */
+extern const SKP_uint16 SKP_Silk_type_offset_joint_CDF[ 4 ][ 5 ];                                   /*  20 */
+extern const SKP_int    SKP_Silk_type_offset_CDF_offset;
+
+extern const SKP_uint16 SKP_Silk_gain_CDF[ 2 ][ N_LEVELS_QGAIN + 1 ];                               /* 130 */
+extern const SKP_int    SKP_Silk_gain_CDF_offset;
+extern const SKP_uint16 SKP_Silk_delta_gain_CDF[ MAX_DELTA_GAIN_QUANT - MIN_DELTA_GAIN_QUANT + 2 ]; /*  46 */
+extern const SKP_int    SKP_Silk_delta_gain_CDF_offset;
+
+extern const SKP_uint16 SKP_Silk_pitch_lag_NB_CDF[ 8 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ];   /* 130 */
+extern const SKP_int    SKP_Silk_pitch_lag_NB_CDF_offset;
+extern const SKP_uint16 SKP_Silk_pitch_lag_MB_CDF[ 12 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ];  /* 194 */
+extern const SKP_int    SKP_Silk_pitch_lag_MB_CDF_offset;
+extern const SKP_uint16 SKP_Silk_pitch_lag_WB_CDF[ 16 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ];  /* 258 */
+extern const SKP_int    SKP_Silk_pitch_lag_WB_CDF_offset;
+extern const SKP_uint16 SKP_Silk_pitch_lag_SWB_CDF[ 24 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ]; /* 386 */
+extern const SKP_int    SKP_Silk_pitch_lag_SWB_CDF_offset;
+
+extern const SKP_uint16 SKP_Silk_pitch_contour_CDF[ 35 ];                                           /*  35 */
+extern const SKP_int    SKP_Silk_pitch_contour_CDF_offset;
+extern const SKP_uint16 SKP_Silk_pitch_contour_NB_CDF[ 12 ];                                        /*  12 */
+extern const SKP_int    SKP_Silk_pitch_contour_NB_CDF_offset;
+extern const SKP_uint16 SKP_Silk_pitch_delta_CDF[23];                                               /* 23 */
+extern const SKP_int    SKP_Silk_pitch_delta_CDF_offset;
+
+extern const SKP_uint16 SKP_Silk_pulses_per_block_CDF[ N_RATE_LEVELS ][ MAX_PULSES + 3 ];           /* 210 */
+extern const SKP_int    SKP_Silk_pulses_per_block_CDF_offset;
+extern const SKP_int16  SKP_Silk_pulses_per_block_BITS_Q6[ N_RATE_LEVELS - 1 ][ MAX_PULSES + 2 ];   /* 180 */
+
+extern const SKP_uint16 SKP_Silk_rate_levels_CDF[ 2 ][ N_RATE_LEVELS ];                             /*  20 */
+extern const SKP_int    SKP_Silk_rate_levels_CDF_offset;
+extern const SKP_int16  SKP_Silk_rate_levels_BITS_Q6[ 2 ][ N_RATE_LEVELS - 1 ];                     /*  18 */
+
+extern const SKP_int    SKP_Silk_max_pulses_table[ 4 ];                                             /*   4 */
+
+extern const SKP_uint16 SKP_Silk_shell_code_table0[  33 ];                                          /*  33 */
+extern const SKP_uint16 SKP_Silk_shell_code_table1[  52 ];                                          /*  52 */
+extern const SKP_uint16 SKP_Silk_shell_code_table2[ 102 ];                                          /* 102 */
+extern const SKP_uint16 SKP_Silk_shell_code_table3[ 207 ];                                          /* 207 */
+extern const SKP_uint16 SKP_Silk_shell_code_table_offsets[ 19 ];                                    /*  19 */
+
+extern const SKP_uint16 SKP_Silk_lsb_CDF[ 3 ];                                                      /*   3 */
+
+extern const SKP_uint16 SKP_Silk_sign_CDF[ 36 ];                                                    /*  36 */
+
+extern const SKP_uint16 SKP_Silk_LTP_per_index_CDF[ 4 ];                                            /*   4 */
+extern const SKP_int    SKP_Silk_LTP_per_index_CDF_offset;
+extern const SKP_int16  * const SKP_Silk_LTP_gain_BITS_Q6_ptrs[ NB_LTP_CBKS ];                      /*   3 */
+extern const SKP_uint16 * const SKP_Silk_LTP_gain_CDF_ptrs[ NB_LTP_CBKS ];                          /*   3 */
+extern const SKP_int    SKP_Silk_LTP_gain_CDF_offsets[ NB_LTP_CBKS ];                               /*   3 */
+extern const SKP_int32  SKP_Silk_LTP_gain_middle_avg_RD_Q14;
+extern const SKP_uint16 SKP_Silk_LTPscale_CDF[ 4 ];                                                 /*   4 */
+extern const SKP_int    SKP_Silk_LTPscale_offset;
+
+/* Tables for LTPScale */
+extern const SKP_int16  SKP_Silk_LTPScales_table_Q14[ 3 ];
+
+extern const SKP_uint16 SKP_Silk_vadflag_CDF[ 3 ];                                                  /*   3 */
+extern const SKP_int    SKP_Silk_vadflag_offset;
+
+extern const SKP_int    SKP_Silk_SamplingRates_table[ 4 ];                                          /*   4 */
+extern const SKP_uint16 SKP_Silk_SamplingRates_CDF[ 5 ];                                            /*   5 */
+extern const SKP_int    SKP_Silk_SamplingRates_offset;
+
+extern const SKP_uint16 SKP_Silk_NbSubframes_CDF[ 3 ];                                              /*   3 */
+extern const SKP_int    SKP_Silk_NbSubframes_offset;
+
+extern const SKP_uint16 SKP_Silk_NLSF_interpolation_factor_CDF[ 6 ];
+extern const SKP_int    SKP_Silk_NLSF_interpolation_factor_offset;
+
+/* NLSF codebooks */
+extern const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB0_16, SKP_Silk_NLSF_CB1_16;
+extern const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB0_10, SKP_Silk_NLSF_CB1_10;
+
+/* quantization tables */
+extern const SKP_int16 * const SKP_Silk_LTP_vq_ptrs_Q14[ NB_LTP_CBKS ];                             /* 168 */
+extern const SKP_int    SKP_Silk_LTP_vq_sizes[ NB_LTP_CBKS ];                                       /*   3 */
+
+/* Piece-wise linear mapping from bitrate in kbps to coding quality in dB SNR */
+extern const SKP_int32  TargetRate_table_NB[  TARGET_RATE_TAB_SZ ];
+extern const SKP_int32  TargetRate_table_MB[  TARGET_RATE_TAB_SZ ];
+extern const SKP_int32  TargetRate_table_WB[  TARGET_RATE_TAB_SZ ];
+extern const SKP_int32  TargetRate_table_SWB[ TARGET_RATE_TAB_SZ ];
+extern const SKP_int32  SNR_table_Q1[         TARGET_RATE_TAB_SZ ];
+
+extern const SKP_int32  SNR_table_one_bit_per_sample_Q7[ 4 ];
+
+/* Filter coeficicnts for HP filter: 4. Order filter implementad as two biquad filters  */
+extern const SKP_int16  SKP_Silk_SWB_detect_B_HP_Q13[ NB_SOS ][ 3 ];
+extern const SKP_int16  SKP_Silk_SWB_detect_A_HP_Q13[ NB_SOS ][ 2 ];
+
+/* Decoder high-pass filter coefficients for 24 kHz sampling */
+extern const SKP_int16  SKP_Silk_Dec_A_HP_24[ DEC_HP_ORDER ];                                       /*   2 */
+extern const SKP_int16  SKP_Silk_Dec_B_HP_24[ DEC_HP_ORDER + 1 ];                                   /*   3 */
+
+/* Decoder high-pass filter coefficients for 16 kHz sampling */
+extern const SKP_int16  SKP_Silk_Dec_A_HP_16[ DEC_HP_ORDER ];                                       /*   2 */
+extern const SKP_int16  SKP_Silk_Dec_B_HP_16[ DEC_HP_ORDER + 1 ];                                   /*   3 */
+
+/* Decoder high-pass filter coefficients for 12 kHz sampling */
+extern const SKP_int16  SKP_Silk_Dec_A_HP_12[ DEC_HP_ORDER ];                                       /*   2 */
+extern const SKP_int16  SKP_Silk_Dec_B_HP_12[ DEC_HP_ORDER + 1 ];                                   /*   3 */
+
+/* Decoder high-pass filter coefficients for 8 kHz sampling */
+extern const SKP_int16  SKP_Silk_Dec_A_HP_8[ DEC_HP_ORDER ];                                        /*   2 */
+extern const SKP_int16  SKP_Silk_Dec_B_HP_8[ DEC_HP_ORDER + 1 ];                                    /*   3 */
+
+/* Table for frame termination indication */
+extern const SKP_uint16 SKP_Silk_FrameTermination_v4_CDF[ 6 ];
+extern const SKP_int    SKP_Silk_FrameTermination_v4_offset;
+
+/* Table for random seed */
+extern const SKP_uint16 SKP_Silk_Seed_CDF[ 5 ];
+extern const SKP_int    SKP_Silk_Seed_offset;
+
+/* Quantization offsets */
+extern const SKP_int16  SKP_Silk_Quantization_Offsets_Q10[ 2 ][ 2 ];
+
+#if SWITCH_TRANSITION_FILTERING
+/* Interpolation points for filter coefficients used in the bandwidth transition smoother */
+extern const SKP_int32 SKP_Silk_Transition_LP_B_Q28[ TRANSITION_INT_NUM ][ TRANSITION_NB ];
+extern const SKP_int32 SKP_Silk_Transition_LP_A_Q28[ TRANSITION_INT_NUM ][ TRANSITION_NA ];
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+++ b/src_common/SKP_Silk_tables_LTP.c
@@ -1,0 +1,324 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_tables.h"
+
+const SKP_uint16 SKP_Silk_LTP_per_index_CDF[ 4 ] = {
+         0,  20992,  40788,  65535
+};
+
+const SKP_int SKP_Silk_LTP_per_index_CDF_offset = 1;
+
+
+const SKP_uint16 SKP_Silk_LTP_gain_CDF_0[ 11 ] = {
+         0,  49380,  54463,  56494,  58437,  60101,  61683,  62985,
+     64066,  64823,  65535
+};
+
+const SKP_uint16 SKP_Silk_LTP_gain_CDF_1[ 21 ] = {
+         0,  25290,  30654,  35710,  40386,  42937,  45250,  47459,
+     49411,  51348,  52974,  54517,  55976,  57423,  58865,  60285,
+     61667,  62895,  63827,  64724,  65535
+};
+
+const SKP_uint16 SKP_Silk_LTP_gain_CDF_2[ 41 ] = {
+         0,   4958,   9439,  13581,  17638,  21651,  25015,  28025,
+     30287,  32406,  34330,  36240,  38130,  39790,  41281,  42764,
+     44229,  45676,  47081,  48431,  49675,  50849,  51932,  52966,
+     53957,  54936,  55869,  56789,  57708,  58504,  59285,  60043,
+     60796,  61542,  62218,  62871,  63483,  64076,  64583,  65062,
+     65535
+};
+
+const SKP_int SKP_Silk_LTP_gain_CDF_offsets[ 3 ] = {
+         1,     3,     10
+};
+
+const SKP_int32 SKP_Silk_LTP_gain_middle_avg_RD_Q14 = 11010;
+
+const SKP_int16 SKP_Silk_LTP_gain_BITS_Q6_0[ 10 ] = {
+        26,    236,    321,    325,    339,    344,    362,    379,
+       412,    418
+};
+
+const SKP_int16 SKP_Silk_LTP_gain_BITS_Q6_1[ 20 ] = {
+        88,    231,    237,    244,    300,    309,    313,    324,
+       325,    341,    346,    351,    352,    352,    354,    356,
+       367,    393,    396,    406
+};
+
+const SKP_int16 SKP_Silk_LTP_gain_BITS_Q6_2[ 40 ] = {
+       238,    248,    255,    257,    258,    274,    284,    311,
+       317,    326,    326,    327,    339,    349,    350,    351,
+       352,    355,    358,    366,    371,    379,    383,    387,
+       388,    393,    394,    394,    407,    409,    412,    412,
+       413,    422,    426,    432,    434,    449,    454,    455
+};
+
+const SKP_uint16 * const SKP_Silk_LTP_gain_CDF_ptrs[ NB_LTP_CBKS ] = {
+    SKP_Silk_LTP_gain_CDF_0,
+    SKP_Silk_LTP_gain_CDF_1,
+    SKP_Silk_LTP_gain_CDF_2
+};
+
+const SKP_int16 * const SKP_Silk_LTP_gain_BITS_Q6_ptrs[ NB_LTP_CBKS ] = {
+    SKP_Silk_LTP_gain_BITS_Q6_0,
+    SKP_Silk_LTP_gain_BITS_Q6_1,
+    SKP_Silk_LTP_gain_BITS_Q6_2
+};
+
+const SKP_int16 SKP_Silk_LTP_gain_vq_0_Q14[ 10 ][ 5 ] = 
+{
+{
+       594,    984,   2840,   1021,    669
+},
+{
+        10,     35,    304,     -1,     23
+},
+{
+      -694,   1923,   4603,   2975,   2335
+},
+{
+      2437,   3176,   3778,   1940,    481
+},
+{
+       214,    -46,   7870,   4406,   -521
+},
+{
+      -896,   4818,   8501,   1623,   -887
+},
+{
+      -696,   3178,   6480,   -302,   1081
+},
+{
+       517,    599,   1002,    567,    560
+},
+{
+     -2075,   -834,   4712,   -340,    896
+},
+{
+      1435,   -644,   3993,   -612,  -2063
+}
+};
+
+const SKP_int16 SKP_Silk_LTP_gain_vq_1_Q14[ 20 ][ 5 ] = 
+{
+{
+      1655,   2918,   5001,   3010,   1775
+},
+{
+       113,    198,    856,    176,    178
+},
+{
+      -843,   2479,   7858,   5371,    574
+},
+{
+        59,   5356,   7648,   2850,   -315
+},
+{
+      3840,   4851,   6527,   1583,  -1233
+},
+{
+      1620,   1760,   2330,   1876,   2045
+},
+{
+      -545,   1854,  11792,   1547,   -307
+},
+{
+      -604,    689,   5369,   5074,   4265
+},
+{
+       521,  -1331,   9829,   6209,  -1211
+},
+{
+     -1315,   6747,   9929,  -1410,    546
+},
+{
+       117,   -144,   2810,   1649,   5240
+},
+{
+      5392,   3476,   2425,    -38,    633
+},
+{
+        14,   -449,   5274,   3547,   -171
+},
+{
+       -98,    395,   9114,   1676,    844
+},
+{
+      -908,   3843,   8861,   -957,   1474
+},
+{
+       396,   6747,   5379,   -329,   1269
+},
+{
+      -335,   2830,   4281,    270,    -54
+},
+{
+      1502,   5609,   8958,   6045,   2059
+},
+{
+      -370,    479,   5267,   5726,   1174
+},
+{
+      5237,  -1144,   6510,    455,    512
+}
+};
+
+const SKP_int16 SKP_Silk_LTP_gain_vq_2_Q14[ 40 ][ 5 ] = 
+{
+{
+      -278,    415,   9345,   7106,   -431
+},
+{
+     -1006,   3863,   9524,   4724,   -871
+},
+{
+      -954,   4624,  11722,    973,   -300
+},
+{
+      -117,   7066,   8331,   1959,   -901
+},
+{
+       593,   3412,   6070,   4914,   1567
+},
+{
+        54,    -51,  12618,   4228,   -844
+},
+{
+      3157,   4822,   5229,   2313,    717
+},
+{
+      -244,   1161,  14198,    779,     69
+},
+{
+     -1218,   5603,  12894,  -2301,   1001
+},
+{
+      -132,   3960,   9526,    577,   1806
+},
+{
+     -1633,   8815,  10484,  -2452,    895
+},
+{
+       235,    450,   1243,    667,    437
+},
+{
+       959,  -2630,  10897,   8772,  -1852
+},
+{
+      2420,   2046,   8893,   4427,  -1569
+},
+{
+        23,   7091,   8356,  -1285,   1508
+},
+{
+     -1133,    835,   7662,   6043,   2800
+},
+{
+       439,    391,  11016,   2253,   1362
+},
+{
+     -1020,   2876,  13436,   4015,  -3020
+},
+{
+      1060,  -2690,  13512,   5565,  -1394
+},
+{
+     -1420,   8007,  11421,   -152,  -1672
+},
+{
+      -893,   2895,  15434,  -1490,    159
+},
+{
+     -1054,    428,  12208,   8538,  -3344
+},
+{
+      1772,  -1304,   7593,   6185,    561
+},
+{
+       525,  -1207,   6659,  11151,  -1170
+},
+{
+       439,   2667,   4743,   2359,   5515
+},
+{
+      2951,   7432,   7909,   -230,  -1564
+},
+{
+       -72,   2140,   5477,   1391,   1580
+},
+{
+       476,  -1312,  15912,   2174,  -1027
+},
+{
+      5737,    441,   2493,   2043,   2757
+},
+{
+       228,    -43,   1803,   6663,   7064
+},
+{
+      4596,   9182,   1917,   -200,    203
+},
+{
+      -704,  12039,   5451,  -1188,    542
+},
+{
+      1782,  -1040,  10078,   7513,  -2767
+},
+{
+     -2626,   7747,   9019,     62,   1710
+},
+{
+       235,   -233,   2954,  10921,   1947
+},
+{
+     10854,   2814,   1232,   -111,    222
+},
+{
+      2267,   2778,  12325,    156,  -1658
+},
+{
+     -2950,   8095,  16330,    268,  -3626
+},
+{
+        67,   2083,   7950,    -80,  -2432
+},
+{
+       518,    -66,   1718,    415,  11435
+}
+};
+
+const SKP_int16 * const SKP_Silk_LTP_vq_ptrs_Q14[ NB_LTP_CBKS ] = {
+    &SKP_Silk_LTP_gain_vq_0_Q14[ 0 ][ 0 ],
+    &SKP_Silk_LTP_gain_vq_1_Q14[ 0 ][ 0 ],
+    &SKP_Silk_LTP_gain_vq_2_Q14[ 0 ][ 0 ]
+};
+ 
+const SKP_int SKP_Silk_LTP_vq_sizes[ NB_LTP_CBKS ] = {
+    10, 20, 40 
+};
--- /dev/null
+++ b/src_common/SKP_Silk_tables_NLSF_CB0_10.c
@@ -1,0 +1,889 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/**********************************************/
+/* This file has been automatically generated */
+/*                                            */
+/* ROM usage:  0.29 + 2.66 kB                 */
+/**********************************************/
+
+#include "SKP_Silk_structs.h"
+#include "SKP_Silk_tables_NLSF_CB0_10.h"
+
+const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ NLSF_MSVQ_CB0_10_VECTORS + NLSF_MSVQ_CB0_10_STAGES ] =
+{
+            0,
+         2658,
+         4420,
+         6107,
+         7757,
+         9408,
+        10955,
+        12502,
+        13983,
+        15432,
+        16882,
+        18331,
+        19750,
+        21108,
+        22409,
+        23709,
+        25010,
+        26256,
+        27501,
+        28747,
+        29965,
+        31158,
+        32351,
+        33544,
+        34736,
+        35904,
+        36997,
+        38091,
+        39185,
+        40232,
+        41280,
+        42327,
+        43308,
+        44290,
+        45271,
+        46232,
+        47192,
+        48132,
+        49032,
+        49913,
+        50775,
+        51618,
+        52462,
+        53287,
+        54095,
+        54885,
+        55675,
+        56449,
+        57222,
+        57979,
+        58688,
+        59382,
+        60076,
+        60726,
+        61363,
+        61946,
+        62505,
+        63052,
+        63543,
+        63983,
+        64396,
+        64766,
+        65023,
+        65279,
+        65535,
+            0,
+         4977,
+         9542,
+        14106,
+        18671,
+        23041,
+        27319,
+        31596,
+        35873,
+        39969,
+        43891,
+        47813,
+        51652,
+        55490,
+        59009,
+        62307,
+        65535,
+            0,
+         8571,
+        17142,
+        25529,
+        33917,
+        42124,
+        49984,
+        57844,
+        65535,
+            0,
+         8732,
+        17463,
+        25825,
+        34007,
+        42189,
+        50196,
+        58032,
+        65535,
+            0,
+         8948,
+        17704,
+        25733,
+        33762,
+        41791,
+        49821,
+        57678,
+        65535,
+            0,
+         4374,
+         8655,
+        12936,
+        17125,
+        21313,
+        25413,
+        29512,
+        33611,
+        37710,
+        41809,
+        45820,
+        49832,
+        53843,
+        57768,
+        61694,
+        65535
+};
+
+const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr[ NLSF_MSVQ_CB0_10_STAGES ] =
+{
+     &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[   0 ],
+     &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[  65 ],
+     &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[  82 ],
+     &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[  91 ],
+     &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ 100 ],
+     &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ 109 ]
+};
+
+const SKP_int SKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx[ NLSF_MSVQ_CB0_10_STAGES ] =
+{
+      23,
+       8,
+       5,
+       5,
+       5,
+       9
+};
+
+const SKP_int16 SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ NLSF_MSVQ_CB0_10_VECTORS ] =
+{
+              148,              167,
+              169,              170,
+              170,              173,
+              173,              175,
+              176,              176,
+              176,              177,
+              179,              181,
+              181,              181,
+              183,              183,
+              183,              184,
+              185,              185,
+              185,              185,
+              186,              189,
+              189,              189,
+              191,              191,
+              191,              194,
+              194,              194,
+              195,              195,
+              196,              198,
+              199,              200,
+              201,              201,
+              202,              203,
+              204,              204,
+              205,              205,
+              206,              209,
+              210,              210,
+              213,              214,
+              218,              220,
+              221,              226,
+              231,              234,
+              239,              256,
+              256,              256,
+              119,              123,
+              123,              123,
+              125,              126,
+              126,              126,
+              128,              130,
+              130,              131,
+              131,              135,
+              138,              139,
+               94,               94,
+               95,               95,
+               96,               98,
+               98,               99,
+               93,               93,
+               95,               96,
+               96,               97,
+               98,              100,
+               92,               93,
+               97,               97,
+               97,               97,
+               98,               98,
+              125,              126,
+              126,              127,
+              127,              128,
+              128,              128,
+              128,              128,
+              129,              129,
+              129,              130,
+              130,              131
+};
+
+const SKP_int SKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min_Q15[ 10 + 1 ] =
+{
+              563,
+                3,
+               22,
+               20,
+                3,
+                3,
+              132,
+              119,
+              358,
+               86,
+              964
+};
+
+const SKP_int16 SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * NLSF_MSVQ_CB0_10_VECTORS ] =
+{
+             2210,             4023,
+             6981,             9260,
+            12573,            15687,
+            19207,            22383,
+            25981,            29142,
+             3285,             4172,
+             6116,            10856,
+            15289,            16826,
+            19701,            22010,
+            24721,            29313,
+             1554,             2511,
+             6577,            10337,
+            13837,            16511,
+            20086,            23214,
+            26480,            29464,
+             3062,             4017,
+             5771,            10037,
+            13365,            14952,
+            20140,            22891,
+            25229,            29603,
+             2085,             3457,
+             5934,             8718,
+            11501,            13670,
+            17997,            21817,
+            24935,            28745,
+             2776,             4093,
+             6421,            10413,
+            15111,            16806,
+            20825,            23826,
+            26308,            29411,
+             2717,             4034,
+             5697,             8463,
+            14301,            16354,
+            19007,            23413,
+            25812,            28506,
+             2872,             3702,
+             5881,            11034,
+            17141,            18879,
+            21146,            23451,
+            25817,            29600,
+             2999,             4015,
+             7357,            11219,
+            12866,            17307,
+            20081,            22644,
+            26774,            29107,
+             2942,             3866,
+             5918,            11915,
+            13909,            16072,
+            20453,            22279,
+            27310,            29826,
+             2271,             3527,
+             6606,             9729,
+            12943,            17382,
+            20224,            22345,
+            24602,            28290,
+             2207,             3310,
+             5844,             9339,
+            11141,            15651,
+            18576,            21177,
+            25551,            28228,
+             3963,             4975,
+             6901,            11588,
+            13466,            15577,
+            19231,            21368,
+            25510,            27759,
+             2749,             3549,
+             6966,            13808,
+            15653,            17645,
+            20090,            22599,
+            26467,            28537,
+             2126,             3504,
+             5109,             9954,
+            12550,            14620,
+            19703,            21687,
+            26457,            29106,
+             3966,             5745,
+             7442,             9757,
+            14468,            16404,
+            19135,            23048,
+            25375,            28391,
+             3197,             4751,
+             6451,             9298,
+            13038,            14874,
+            17962,            20627,
+            23835,            28464,
+             3195,             4081,
+             6499,            12252,
+            14289,            16040,
+            18357,            20730,
+            26980,            29309,
+             1533,             2471,
+             4486,             7796,
+            12332,            15758,
+            19567,            22298,
+            25673,            29051,
+             2002,             2971,
+             4985,             8083,
+            13181,            15435,
+            18237,            21517,
+            24595,            28351,
+             3808,             4925,
+             6710,            10201,
+            12011,            14300,
+            18457,            20391,
+            26525,            28956,
+             2281,             3418,
+             4979,             8726,
+            15964,            18104,
+            20250,            22771,
+            25286,            28954,
+             3051,             5479,
+             7290,             9848,
+            12744,            14503,
+            18665,            23684,
+            26065,            28947,
+             2364,             3565,
+             5502,             9621,
+            14922,            16621,
+            19005,            20996,
+            26310,            29302,
+             4093,             5212,
+             6833,             9880,
+            16303,            18286,
+            20571,            23614,
+            26067,            29128,
+             2941,             3996,
+             6038,            10638,
+            12668,            14451,
+            16798,            19392,
+            26051,            28517,
+             3863,             5212,
+             7019,             9468,
+            11039,            13214,
+            19942,            22344,
+            25126,            29539,
+             4615,             6172,
+             7853,            10252,
+            12611,            14445,
+            19719,            22441,
+            24922,            29341,
+             3566,             4512,
+             6985,             8684,
+            10544,            16097,
+            18058,            22475,
+            26066,            28167,
+             4481,             5489,
+             7432,            11414,
+            13191,            15225,
+            20161,            22258,
+            26484,            29716,
+             3320,             4320,
+             6621,             9867,
+            11581,            14034,
+            21168,            23210,
+            26588,            29903,
+             3794,             4689,
+             6916,             8655,
+            10143,            16144,
+            19568,            21588,
+            27557,            29593,
+             2446,             3276,
+             5918,            12643,
+            16601,            18013,
+            21126,            23175,
+            27300,            29634,
+             2450,             3522,
+             5437,             8560,
+            15285,            19911,
+            21826,            24097,
+            26567,            29078,
+             2580,             3796,
+             5580,             8338,
+             9969,            12675,
+            18907,            22753,
+            25450,            29292,
+             3325,             4312,
+             6241,             7709,
+             9164,            14452,
+            21665,            23797,
+            27096,            29857,
+             3338,             4163,
+             7738,            11114,
+            12668,            14753,
+            16931,            22736,
+            25671,            28093,
+             3840,             4755,
+             7755,            13471,
+            15338,            17180,
+            20077,            22353,
+            27181,            29743,
+             2504,             4079,
+             8351,            12118,
+            15046,            18595,
+            21684,            24704,
+            27519,            29937,
+             5234,             6342,
+             8267,            11821,
+            15155,            16760,
+            20667,            23488,
+            25949,            29307,
+             2681,             3562,
+             6028,            10827,
+            18458,            20458,
+            22303,            24701,
+            26912,            29956,
+             3374,             4528,
+             6230,             8256,
+             9513,            12730,
+            18666,            20720,
+            26007,            28425,
+             2731,             3629,
+             8320,            12450,
+            14112,            16431,
+            18548,            22098,
+            25329,            27718,
+             3481,             4401,
+             7321,             9319,
+            11062,            13093,
+            15121,            22315,
+            26331,            28740,
+             3577,             4945,
+             6669,             8792,
+            10299,            12645,
+            19505,            24766,
+            26996,            29634,
+             4058,             5060,
+             7288,            10190,
+            11724,            13936,
+            15849,            18539,
+            26701,            29845,
+             4262,             5390,
+             7057,             8982,
+            10187,            15264,
+            20480,            22340,
+            25958,            28072,
+             3404,             4329,
+             6629,             7946,
+            10121,            17165,
+            19640,            22244,
+            25062,            27472,
+             3157,             4168,
+             6195,             9319,
+            10771,            13325,
+            15416,            19816,
+            24672,            27634,
+             2503,             3473,
+             5130,             6767,
+             8571,            14902,
+            19033,            21926,
+            26065,            28728,
+             4133,             5102,
+             7553,            10054,
+            11757,            14924,
+            17435,            20186,
+            23987,            26272,
+             4972,             6139,
+             7894,             9633,
+            11320,            14295,
+            21737,            24306,
+            26919,            29907,
+             2958,             3816,
+             6851,             9204,
+            10895,            18052,
+            20791,            23338,
+            27556,            29609,
+             5234,             6028,
+             8034,            10154,
+            11242,            14789,
+            18948,            20966,
+            26585,            29127,
+             5241,             6838,
+            10526,            12819,
+            14681,            17328,
+            19928,            22336,
+            26193,            28697,
+             3412,             4251,
+             5988,             7094,
+             9907,            18243,
+            21669,            23777,
+            26969,            29087,
+             2470,             3217,
+             7797,            15296,
+            17365,            19135,
+            21979,            24256,
+            27322,            29442,
+             4939,             5804,
+             8145,            11809,
+            13873,            15598,
+            17234,            19423,
+            26476,            29645,
+             5051,             6167,
+             8223,             9655,
+            12159,            17995,
+            20464,            22832,
+            26616,            28462,
+             4987,             5907,
+             9319,            11245,
+            13132,            15024,
+            17485,            22687,
+            26011,            28273,
+             5137,             6884,
+            11025,            14950,
+            17191,            19425,
+            21807,            24393,
+            26938,            29288,
+             7057,             7884,
+             9528,            10483,
+            10960,            14811,
+            19070,            21675,
+            25645,            28019,
+             6759,             7160,
+             8546,            11779,
+            12295,            13023,
+            16627,            21099,
+            24697,            28287,
+             3863,             9762,
+            11068,            11445,
+            12049,            13960,
+            18085,            21507,
+            25224,            28997,
+              397,              335,
+              651,             1168,
+              640,              765,
+              465,              331,
+              214,             -194,
+             -578,             -647,
+             -657,              750,
+              564,              613,
+              549,              630,
+              304,              -52,
+              828,              922,
+              443,              111,
+              138,              124,
+              169,               14,
+              144,               83,
+              132,               58,
+             -413,             -752,
+              869,              336,
+              385,               69,
+               56,              830,
+             -227,             -266,
+             -368,             -440,
+            -1195,              163,
+              126,             -228,
+              802,              156,
+              188,              120,
+              376,               59,
+             -358,             -558,
+            -1326,             -254,
+             -202,             -789,
+              296,               92,
+              -70,             -129,
+             -718,            -1135,
+              292,              -29,
+             -631,              487,
+             -157,             -153,
+             -279,                2,
+             -419,             -342,
+              -34,             -514,
+             -799,            -1571,
+             -687,             -609,
+             -546,             -130,
+             -215,             -252,
+             -446,             -574,
+            -1337,              207,
+              -72,               32,
+              103,             -642,
+              942,              733,
+              187,               29,
+             -211,             -814,
+              143,              225,
+               20,               24,
+             -268,             -377,
+             1623,             1133,
+              667,              164,
+              307,              366,
+              187,               34,
+               62,             -313,
+             -832,            -1482,
+            -1181,              483,
+              -42,              -39,
+             -450,            -1406,
+             -587,              -52,
+             -760,              334,
+               98,              -60,
+             -500,             -488,
+            -1058,              299,
+              131,             -250,
+             -251,             -703,
+             1037,              568,
+             -413,             -265,
+             1687,              573,
+              345,              323,
+               98,               61,
+             -102,               31,
+              135,              149,
+              617,              365,
+              -39,               34,
+             -611,             1201,
+             1421,              736,
+             -414,             -393,
+             -492,             -343,
+             -316,             -532,
+              528,              172,
+               90,              322,
+             -294,             -319,
+             -541,              503,
+              639,              401,
+                1,             -149,
+              -73,             -167,
+              150,              118,
+              308,              218,
+              121,              195,
+             -143,             -261,
+            -1013,             -802,
+              387,              436,
+              130,             -427,
+             -448,             -681,
+              123,              -87,
+             -251,             -113,
+              274,              310,
+              445,              501,
+              354,              272,
+              141,             -285,
+              569,              656,
+               37,              -49,
+              251,             -386,
+             -263,             1122,
+              604,              606,
+              336,               95,
+               34,                0,
+               85,              180,
+              207,             -367,
+             -622,             1070,
+               -6,              -79,
+             -160,              -92,
+             -137,             -276,
+             -323,             -371,
+             -696,            -1036,
+              407,              102,
+              -86,             -214,
+             -482,             -647,
+              -28,             -291,
+              -97,             -180,
+             -250,             -435,
+              -18,              -76,
+             -332,              410,
+              407,              168,
+              539,              411,
+              254,              111,
+               58,             -145,
+              200,               30,
+              187,              116,
+              131,             -367,
+             -475,              781,
+             -559,              561,
+              195,             -115,
+                8,             -168,
+               30,               55,
+             -122,              131,
+               82,               -5,
+             -273,              -50,
+             -632,              668,
+                4,               32,
+              -26,             -279,
+              315,              165,
+              197,              377,
+              155,              -41,
+             -138,             -324,
+             -109,             -617,
+              360,               98,
+              -53,             -319,
+             -114,             -245,
+              -82,              507,
+              468,              263,
+             -137,             -389,
+              652,              354,
+              -18,             -227,
+             -462,             -135,
+              317,               53,
+              -16,               66,
+              -72,             -126,
+             -356,             -347,
+             -328,              -72,
+             -337,              324,
+              152,              349,
+              169,             -196,
+              179,              254,
+              260,              325,
+              -74,              -80,
+               75,              -31,
+              270,              275,
+               87,              278,
+             -446,             -301,
+              309,               71,
+              -25,             -242,
+              516,              161,
+             -162,              -83,
+              329,              230,
+             -311,             -259,
+              177,              -26,
+             -462,               89,
+              257,                6,
+             -130,              -93,
+             -456,             -317,
+             -221,             -206,
+             -417,             -182,
+              -74,              234,
+               48,              261,
+              359,              231,
+              258,               85,
+             -282,              252,
+             -147,             -222,
+              251,             -207,
+              443,              123,
+             -417,              -36,
+              273,             -241,
+              240,             -112,
+               44,             -167,
+              126,             -124,
+              -77,               58,
+             -401,              333,
+             -118,               82,
+              126,              151,
+             -433,              359,
+             -130,             -102,
+              131,             -244,
+               86,               85,
+             -462,              414,
+             -240,               16,
+              145,               28,
+             -205,             -481,
+              373,              293,
+              -72,             -174,
+               62,              259,
+               -8,              -18,
+              362,              233,
+              185,               43,
+              278,               27,
+              193,              570,
+             -248,              189,
+               92,               31,
+             -275,               -3,
+              243,              176,
+              438,              209,
+              206,              -51,
+               79,              109,
+              168,             -185,
+             -308,              -68,
+             -618,              385,
+             -310,             -108,
+             -164,              165,
+               61,             -152,
+             -101,             -412,
+             -268,             -257,
+              -40,              -20,
+              -28,             -158,
+             -301,              271,
+              380,             -338,
+             -367,             -132,
+               64,              114,
+             -131,             -225,
+             -156,             -260,
+              -63,             -116,
+              155,             -586,
+             -202,              254,
+             -287,              178,
+              227,             -106,
+             -294,              164,
+              298,             -100,
+              185,              317,
+              193,              -45,
+               28,               80,
+              -87,             -433,
+               22,              -48,
+               48,             -237,
+             -229,             -139,
+              120,             -364,
+              268,             -136,
+              396,              125,
+              130,              -89,
+             -272,              118,
+             -256,              -68,
+             -451,              488,
+              143,             -165,
+              -48,             -190,
+              106,              219,
+               47,              435,
+              245,               97,
+               75,             -418,
+              121,             -187,
+              570,             -200,
+             -351,              225,
+              -21,             -217,
+              234,             -111,
+              194,               14,
+              242,              118,
+              140,             -397,
+              355,              361,
+              -45,             -195
+};
+
+const SKP_Silk_NLSF_CBS SKP_Silk_NLSF_CB0_10_Stage_info[ NLSF_MSVQ_CB0_10_STAGES ] =
+{
+        {  64, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 *   0 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[   0 ] },
+        {  16, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 *  64 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[  64 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 *  80 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[  80 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 *  88 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[  88 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 *  96 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[  96 ] },
+        {  16, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * 104 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ 104 ] }
+};
+
+const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB0_10 =
+{
+        NLSF_MSVQ_CB0_10_STAGES,
+        SKP_Silk_NLSF_CB0_10_Stage_info,
+        SKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min_Q15,
+        SKP_Silk_NLSF_MSVQ_CB0_10_CDF,
+        SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr,
+        SKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx
+};
+
--- /dev/null
+++ b/src_common/SKP_Silk_tables_NLSF_CB0_10.h
@@ -1,0 +1,51 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_TABLES_NLSF_CB0_10_H
+#define SKP_SILK_TABLES_NLSF_CB0_10_H
+
+#include "SKP_Silk_define.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define NLSF_MSVQ_CB0_10_STAGES       6
+#define NLSF_MSVQ_CB0_10_VECTORS      120
+
+/* NLSF codebook entropy coding tables */
+extern const SKP_uint16         SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ NLSF_MSVQ_CB0_10_VECTORS + NLSF_MSVQ_CB0_10_STAGES ];
+extern const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr[                  NLSF_MSVQ_CB0_10_STAGES ];
+extern const SKP_int            SKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx[                 NLSF_MSVQ_CB0_10_STAGES ];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
--- /dev/null
+++ b/src_common/SKP_Silk_tables_NLSF_CB0_16.c
@@ -1,0 +1,1319 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/**********************************************/
+/* This file has been automatically generated */
+/*                                            */
+/* ROM usage:  0.51 + 7.38 kB                 */
+/**********************************************/
+
+#include "SKP_Silk_structs.h"
+#include "SKP_Silk_tables_NLSF_CB0_16.h"
+
+const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ NLSF_MSVQ_CB0_16_VECTORS + NLSF_MSVQ_CB0_16_STAGES ] =
+{
+            0,
+         1449,
+         2749,
+         4022,
+         5267,
+         6434,
+         7600,
+         8647,
+         9695,
+        10742,
+        11681,
+        12601,
+        13444,
+        14251,
+        15008,
+        15764,
+        16521,
+        17261,
+        18002,
+        18710,
+        19419,
+        20128,
+        20837,
+        21531,
+        22225,
+        22919,
+        23598,
+        24277,
+        24956,
+        25620,
+        26256,
+        26865,
+        27475,
+        28071,
+        28667,
+        29263,
+        29859,
+        30443,
+        31026,
+        31597,
+        32168,
+        32727,
+        33273,
+        33808,
+        34332,
+        34855,
+        35379,
+        35902,
+        36415,
+        36927,
+        37439,
+        37941,
+        38442,
+        38932,
+        39423,
+        39914,
+        40404,
+        40884,
+        41364,
+        41844,
+        42324,
+        42805,
+        43285,
+        43754,
+        44224,
+        44694,
+        45164,
+        45623,
+        46083,
+        46543,
+        46993,
+        47443,
+        47892,
+        48333,
+        48773,
+        49213,
+        49653,
+        50084,
+        50515,
+        50946,
+        51377,
+        51798,
+        52211,
+        52614,
+        53018,
+        53422,
+        53817,
+        54212,
+        54607,
+        55002,
+        55388,
+        55775,
+        56162,
+        56548,
+        56910,
+        57273,
+        57635,
+        57997,
+        58352,
+        58698,
+        59038,
+        59370,
+        59702,
+        60014,
+        60325,
+        60630,
+        60934,
+        61239,
+        61537,
+        61822,
+        62084,
+        62346,
+        62602,
+        62837,
+        63072,
+        63302,
+        63517,
+        63732,
+        63939,
+        64145,
+        64342,
+        64528,
+        64701,
+        64867,
+        65023,
+        65151,
+        65279,
+        65407,
+        65535,
+            0,
+         5099,
+         9982,
+        14760,
+        19538,
+        24213,
+        28595,
+        32976,
+        36994,
+        41012,
+        44944,
+        48791,
+        52557,
+        56009,
+        59388,
+        62694,
+        65535,
+            0,
+         9955,
+        19697,
+        28825,
+        36842,
+        44686,
+        52198,
+        58939,
+        65535,
+            0,
+         8949,
+        17335,
+        25720,
+        33926,
+        41957,
+        49987,
+        57845,
+        65535,
+            0,
+         9724,
+        18642,
+        26998,
+        35355,
+        43532,
+        51534,
+        59365,
+        65535,
+            0,
+         8750,
+        17499,
+        26249,
+        34448,
+        42471,
+        50494,
+        58178,
+        65535,
+            0,
+         8730,
+        17273,
+        25816,
+        34176,
+        42536,
+        50203,
+        57869,
+        65535,
+            0,
+         8769,
+        17538,
+        26307,
+        34525,
+        42742,
+        50784,
+        58319,
+        65535,
+            0,
+         8736,
+        17101,
+        25466,
+        33653,
+        41839,
+        50025,
+        57864,
+        65535,
+            0,
+         4368,
+         8735,
+        12918,
+        17100,
+        21283,
+        25465,
+        29558,
+        33651,
+        37744,
+        41836,
+        45929,
+        50022,
+        54027,
+        57947,
+        61782,
+        65535
+};
+
+const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr[ NLSF_MSVQ_CB0_16_STAGES ] =
+{
+     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[   0 ],
+     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 129 ],
+     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 146 ],
+     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 155 ],
+     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 164 ],
+     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 173 ],
+     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 182 ],
+     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 191 ],
+     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 200 ],
+     &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 209 ]
+};
+
+const SKP_int SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx[ NLSF_MSVQ_CB0_16_STAGES ] =
+{
+      42,
+       8,
+       4,
+       5,
+       5,
+       5,
+       5,
+       5,
+       5,
+       9
+};
+
+const SKP_int16 SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ NLSF_MSVQ_CB0_16_VECTORS ] =
+{
+              176,              181,
+              182,              183,
+              186,              186,
+              191,              191,
+              191,              196,
+              197,              201,
+              203,              206,
+              206,              206,
+              207,              207,
+              209,              209,
+              209,              209,
+              210,              210,
+              210,              211,
+              211,              211,
+              212,              214,
+              216,              216,
+              217,              217,
+              217,              217,
+              218,              218,
+              219,              219,
+              220,              221,
+              222,              223,
+              223,              223,
+              223,              224,
+              224,              224,
+              225,              225,
+              226,              226,
+              226,              226,
+              227,              227,
+              227,              227,
+              227,              227,
+              228,              228,
+              228,              228,
+              229,              229,
+              229,              230,
+              230,              230,
+              231,              231,
+              231,              231,
+              232,              232,
+              232,              232,
+              233,              234,
+              235,              235,
+              235,              236,
+              236,              236,
+              236,              237,
+              237,              237,
+              237,              240,
+              240,              240,
+              240,              241,
+              242,              243,
+              244,              244,
+              247,              247,
+              248,              248,
+              248,              249,
+              251,              255,
+              255,              256,
+              260,              260,
+              261,              264,
+              264,              266,
+              266,              268,
+              271,              274,
+              276,              279,
+              288,              288,
+              288,              288,
+              118,              120,
+              121,              121,
+              122,              125,
+              125,              129,
+              129,              130,
+              131,              132,
+              136,              137,
+              138,              145,
+               87,               88,
+               91,               97,
+               98,              100,
+              105,              106,
+               92,               95,
+               95,               96,
+               97,               97,
+               98,               99,
+               88,               92,
+               95,               95,
+               96,               97,
+               98,              109,
+               93,               93,
+               93,               96,
+               97,               97,
+               99,              101,
+               93,               94,
+               94,               95,
+               95,               99,
+               99,               99,
+               93,               93,
+               93,               96,
+               96,               97,
+              100,              102,
+               93,               95,
+               95,               96,
+               96,               96,
+               98,               99,
+              125,              125,
+              127,              127,
+              127,              127,
+              128,              128,
+              128,              128,
+              128,              128,
+              129,              130,
+              131,              132
+};
+
+const SKP_int SKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min_Q15[ 16 + 1 ] =
+{
+              266,
+                3,
+               40,
+                3,
+                3,
+               16,
+               78,
+               89,
+              107,
+              141,
+              188,
+              146,
+              272,
+              240,
+              235,
+              215,
+              632
+};
+
+const SKP_int16 SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * NLSF_MSVQ_CB0_16_VECTORS ] =
+{
+             1170,             2278,             3658,             5374,
+             7666,             9113,            11298,            13304,
+            15371,            17549,            19587,            21487,
+            23798,            26038,            28318,            30201,
+             1628,             2334,             4115,             6036,
+             7818,             9544,            11777,            14021,
+            15787,            17408,            19466,            21261,
+            22886,            24565,            26714,            28059,
+             1724,             2670,             4056,             6532,
+             8357,            10119,            12093,            14061,
+            16491,            18795,            20417,            22402,
+            24251,            26224,            28410,            29956,
+             1493,             3427,             4789,             6399,
+             8435,            10168,            12000,            14066,
+            16229,            18210,            20040,            22098,
+            24153,            26095,            28183,            30121,
+             1119,             2089,             4295,             6245,
+             8691,            10741,            12688,            15057,
+            17028,            18792,            20717,            22514,
+            24497,            26548,            28619,            30630,
+             1363,             2417,             3927,             5556,
+             7422,             9315,            11879,            13767,
+            16143,            18520,            20458,            22578,
+            24539,            26436,            28318,            30318,
+             1122,             2503,             5216,             7148,
+             9310,            11078,            13175,            14800,
+            16864,            18700,            20436,            22488,
+            24572,            26602,            28555,            30426,
+              600,             1317,             2970,             5609,
+             7694,             9784,            12169,            14087,
+            16379,            18378,            20551,            22686,
+            24739,            26697,            28646,            30355,
+              941,             1882,             4274,             5540,
+             8482,             9858,            11940,            14287,
+            16091,            18501,            20326,            22612,
+            24711,            26638,            28814,            30430,
+              635,             1699,             4376,             5948,
+             8097,            10115,            12274,            14178,
+            16111,            17813,            19695,            21773,
+            23927,            25866,            28022,            30134,
+             1408,             2222,             3524,             5615,
+             7345,             8849,            10989,            12772,
+            15352,            17026,            18919,            21062,
+            23329,            25215,            27209,            29023,
+              701,             1307,             3548,             6301,
+             7744,             9574,            11227,            12978,
+            15170,            17565,            19775,            22097,
+            24230,            26335,            28377,            30231,
+             1752,             2364,             4879,             6569,
+             7813,             9796,            11199,            14290,
+            15795,            18000,            20396,            22417,
+            24308,            26124,            28360,            30633,
+              901,             1629,             3356,             4635,
+             7256,             8767,             9971,            11558,
+            15215,            17544,            19523,            21852,
+            23900,            25978,            28133,            30184,
+              981,             1669,             3323,             4693,
+             6213,             8692,            10614,            12956,
+            15211,            17711,            19856,            22122,
+            24344,            26592,            28723,            30481,
+             1607,             2577,             4220,             5512,
+             8532,            10388,            11627,            13671,
+            15752,            17199,            19840,            21859,
+            23494,            25786,            28091,            30131,
+              811,             1471,             3144,             5041,
+             7430,             9389,            11174,            13255,
+            15157,            16741,            19583,            22167,
+            24115,            26142,            28383,            30395,
+             1543,             2144,             3629,             6347,
+             7333,             9339,            10710,            13596,
+            15099,            17340,            20102,            21886,
+            23732,            25637,            27818,            29917,
+              492,             1185,             2940,             5488,
+             7095,             8751,            11596,            13579,
+            16045,            18015,            20178,            22127,
+            24265,            26406,            28484,            30357,
+             1547,             2282,             3693,             6341,
+             7758,             9607,            11848,            13236,
+            16564,            18069,            19759,            21404,
+            24110,            26606,            28786,            30655,
+              685,             1338,             3409,             5262,
+             6950,             9222,            11414,            14523,
+            16337,            17893,            19436,            21298,
+            23293,            25181,            27973,            30520,
+              887,             1581,             3057,             4318,
+             7192,             8617,            10047,            13106,
+            16265,            17893,            20233,            22350,
+            24379,            26384,            28314,            30189,
+             2285,             3745,             5662,             7576,
+             9323,            11320,            13239,            15191,
+            17175,            19225,            21108,            22972,
+            24821,            26655,            28561,            30460,
+             1496,             2108,             3448,             6898,
+             8328,             9656,            11252,            12823,
+            14979,            16482,            18180,            20085,
+            22962,            25160,            27705,            29629,
+              575,             1261,             3861,             6627,
+             8294,            10809,            12705,            14768,
+            17076,            19047,            20978,            23055,
+            24972,            26703,            28720,            30345,
+             1682,             2213,             3882,             6238,
+             7208,             9646,            10877,            13431,
+            14805,            16213,            17941,            20873,
+            23550,            25765,            27756,            29461,
+              888,             1616,             3924,             5195,
+             7206,             8647,             9842,            11473,
+            16067,            18221,            20343,            22774,
+            24503,            26412,            28054,            29731,
+              805,             1454,             2683,             4472,
+             7936,             9360,            11398,            14345,
+            16205,            17832,            19453,            21646,
+            23899,            25928,            28387,            30463,
+             1640,             2383,             3484,             5082,
+             6032,             8606,            11640,            12966,
+            15842,            17368,            19346,            21182,
+            23638,            25889,            28368,            30299,
+             1632,             2204,             4510,             7580,
+             8718,            10512,            11962,            14096,
+            15640,            17194,            19143,            22247,
+            24563,            26561,            28604,            30509,
+             2043,             2612,             3985,             6851,
+             8038,             9514,            10979,            12789,
+            15426,            16728,            18899,            20277,
+            22902,            26209,            28711,            30618,
+             2224,             2798,             4465,             5320,
+             7108,             9436,            10986,            13222,
+            14599,            18317,            20141,            21843,
+            23601,            25700,            28184,            30582,
+              835,             1541,             4083,             5769,
+             7386,             9399,            10971,            12456,
+            15021,            18642,            20843,            23100,
+            25292,            26966,            28952,            30422,
+             1795,             2343,             4809,             5896,
+             7178,             8545,            10223,            13370,
+            14606,            16469,            18273,            20736,
+            23645,            26257,            28224,            30390,
+             1734,             2254,             4031,             5188,
+             6506,             7872,             9651,            13025,
+            14419,            17305,            19495,            22190,
+            24403,            26302,            28195,            30177,
+             1841,             2349,             3968,             4764,
+             6376,             9825,            11048,            13345,
+            14682,            16252,            18183,            21363,
+            23918,            26156,            28031,            29935,
+             1432,             2047,             5631,             6927,
+             8198,             9675,            11358,            13506,
+            14802,            16419,            18339,            22019,
+            24124,            26177,            28130,            30586,
+             1730,             2320,             3744,             4808,
+             6007,             9666,            10997,            13622,
+            15234,            17495,            20088,            22002,
+            23603,            25400,            27379,            29254,
+             1267,             1915,             5483,             6812,
+             8229,             9919,            11589,            13337,
+            14747,            17965,            20552,            22167,
+            24519,            26819,            28883,            30642,
+             1526,             2229,             4240,             7388,
+             8953,            10450,            11899,            13718,
+            16861,            18323,            20379,            22672,
+            24797,            26906,            28906,            30622,
+             2175,             2791,             4104,             6875,
+             8612,             9798,            12152,            13536,
+            15623,            17682,            19213,            21060,
+            24382,            26760,            28633,            30248,
+              454,             1231,             4339,             5738,
+             7550,             9006,            10320,            13525,
+            16005,            17849,            20071,            21992,
+            23949,            26043,            28245,            30175,
+             2250,             2791,             4230,             5283,
+             6762,            10607,            11879,            13821,
+            15797,            17264,            20029,            22266,
+            24588,            26437,            28244,            30419,
+             1696,             2216,             4308,             8385,
+             9766,            11030,            12556,            14099,
+            16322,            17640,            19166,            20590,
+            23967,            26858,            28798,            30562,
+             2452,             3236,             4369,             6118,
+             7156,             9003,            11509,            12796,
+            15749,            17291,            19491,            22241,
+            24530,            26474,            28273,            30073,
+             1811,             2541,             3555,             5480,
+             9123,            10527,            11894,            13659,
+            15262,            16899,            19366,            21069,
+            22694,            24314,            27256,            29983,
+             1553,             2246,             4559,             5500,
+             6754,             7874,            11739,            13571,
+            15188,            17879,            20281,            22510,
+            24614,            26649,            28786,            30755,
+             1982,             2768,             3834,             5964,
+             8732,             9908,            11797,            14813,
+            16311,            17946,            21097,            22851,
+            24456,            26304,            28166,            29755,
+             1824,             2529,             3817,             5449,
+             6854,             8714,            10381,            12286,
+            14194,            15774,            19524,            21374,
+            23695,            26069,            28096,            30212,
+             2212,             2854,             3947,             5898,
+             9930,            11556,            12854,            14788,
+            16328,            17700,            20321,            22098,
+            23672,            25291,            26976,            28586,
+             2023,             2599,             4024,             4916,
+             6613,            11149,            12457,            14626,
+            16320,            17822,            19673,            21172,
+            23115,            26051,            28825,            30758,
+             1628,             2206,             3467,             4364,
+             8679,            10173,            11864,            13679,
+            14998,            16938,            19207,            21364,
+            23850,            26115,            28124,            30273,
+             2014,             2603,             4114,             7254,
+             8516,            10043,            11822,            13503,
+            16329,            17826,            19697,            21280,
+            23151,            24661,            26807,            30161,
+             2376,             2980,             4422,             5770,
+             7016,             9723,            11125,            13516,
+            15485,            16985,            19160,            20587,
+            24401,            27180,            29046,            30647,
+             2454,             3502,             4624,             6019,
+             7632,             8849,            10792,            13964,
+            15523,            17085,            19611,            21238,
+            22856,            25108,            28106,            29890,
+             1573,             2274,             3308,             5999,
+             8977,            10104,            12457,            14258,
+            15749,            18180,            19974,            21253,
+            23045,            25058,            27741,            30315,
+             1943,             2730,             4140,             6160,
+             7491,             8986,            11309,            12775,
+            14820,            16558,            17909,            19757,
+            21512,            23605,            27274,            29527,
+             2021,             2582,             4494,             5835,
+             6993,             8245,             9827,            14733,
+            16462,            17894,            19647,            21083,
+            23764,            26667,            29072,            30990,
+             1052,             1775,             3218,             4378,
+             7666,             9403,            11248,            13327,
+            14972,            17962,            20758,            22354,
+            25071,            27209,            29001,            30609,
+             2218,             2866,             4223,             5352,
+             6581,             9980,            11587,            13121,
+            15193,            16583,            18386,            20080,
+            22013,            25317,            28127,            29880,
+             2146,             2840,             4397,             5840,
+             7449,             8721,            10512,            11936,
+            13595,            17253,            19310,            20891,
+            23417,            25627,            27749,            30231,
+             1972,             2619,             3756,             6367,
+             7641,             8814,            12286,            13768,
+            15309,            18036,            19557,            20904,
+            22582,            24876,            27800,            30440,
+             2005,             2577,             4272,             7373,
+             8558,            10223,            11770,            13402,
+            16502,            18000,            19645,            21104,
+            22990,            26806,            29505,            30942,
+             1153,             1822,             3724,             5443,
+             6990,             8702,            10289,            11899,
+            13856,            15315,            17601,            21064,
+            23692,            26083,            28586,            30639,
+             1304,             1869,             3318,             7195,
+             9613,            10733,            12393,            13728,
+            15822,            17474,            18882,            20692,
+            23114,            25540,            27684,            29244,
+             2093,             2691,             4018,             6658,
+             7947,             9147,            10497,            11881,
+            15888,            17821,            19333,            21233,
+            23371,            25234,            27553,            29998,
+              575,             1331,             5304,             6910,
+             8425,            10086,            11577,            13498,
+            16444,            18527,            20565,            22847,
+            24914,            26692,            28759,            30157,
+             1435,             2024,             3283,             4156,
+             7611,            10592,            12049,            13927,
+            15459,            18413,            20495,            22270,
+            24222,            26093,            28065,            30099,
+             1632,             2168,             5540,             7478,
+             8630,            10391,            11644,            14321,
+            15741,            17357,            18756,            20434,
+            22799,            26060,            28542,            30696,
+             1407,             2245,             3405,             5639,
+             9419,            10685,            12104,            13495,
+            15535,            18357,            19996,            21689,
+            24351,            26550,            28853,            30564,
+             1675,             2226,             4005,             8223,
+             9975,            11155,            12822,            14316,
+            16504,            18137,            19574,            21050,
+            22759,            24912,            28296,            30634,
+             1080,             1614,             3622,             7565,
+             8748,            10303,            11713,            13848,
+            15633,            17434,            19761,            21825,
+            23571,            25393,            27406,            29063,
+             1693,             2229,             3456,             4354,
+             5670,            10890,            12563,            14167,
+            15879,            17377,            19817,            21971,
+            24094,            26131,            28298,            30099,
+             2042,             2959,             4195,             5740,
+             7106,             8267,            11126,            14973,
+            16914,            18295,            20532,            21982,
+            23711,            25769,            27609,            29351,
+              984,             1612,             3808,             5265,
+             6885,             8411,             9547,            10889,
+            12522,            16520,            19549,            21639,
+            23746,            26058,            28310,            30374,
+             2036,             2538,             4166,             7761,
+             9146,            10412,            12144,            13609,
+            15588,            17169,            18559,            20113,
+            21820,            24313,            28029,            30612,
+             1871,             2355,             4061,             5143,
+             7464,            10129,            11941,            15001,
+            16680,            18354,            19957,            22279,
+            24861,            26872,            28988,            30615,
+             2566,             3161,             4643,             6227,
+             7406,             9970,            11618,            13416,
+            15889,            17364,            19121,            20817,
+            22592,            24720,            28733,            31082,
+             1700,             2327,             4828,             5939,
+             7567,             9154,            11087,            12771,
+            14209,            16121,            20222,            22671,
+            24648,            26656,            28696,            30745,
+             3169,             3873,             5046,             6868,
+             8184,             9480,            12335,            14068,
+            15774,            17971,            20231,            21711,
+            23520,            25245,            27026,            28730,
+             1564,             2391,             4229,             6730,
+             8905,            10459,            13026,            15033,
+            17265,            19809,            21849,            23741,
+            25490,            27312,            29061,            30527,
+             2864,             3559,             4719,             6441,
+             9592,            11055,            12763,            14784,
+            16428,            18164,            20486,            22262,
+            24183,            26263,            28383,            30224,
+             2673,             3449,             4581,             5983,
+             6863,             8311,            12464,            13911,
+            15738,            17791,            19416,            21182,
+            24025,            26561,            28723,            30440,
+             2419,             3049,             4274,             6384,
+             8564,             9661,            11288,            12676,
+            14447,            17578,            19816,            21231,
+            23099,            25270,            26899,            28926,
+             1278,             2001,             3000,             5353,
+             9995,            11777,            13018,            14570,
+            16050,            17762,            19982,            21617,
+            23371,            25083,            27656,            30172,
+              932,             1624,             2798,             4570,
+             8592,             9988,            11552,            13050,
+            16921,            18677,            20415,            22810,
+            24817,            26819,            28804,            30385,
+             2324,             2973,             4156,             5702,
+             6919,             8806,            10259,            12503,
+            15015,            16567,            19418,            21375,
+            22943,            24550,            27024,            29849,
+             1564,             2373,             3455,             4907,
+             5975,             7436,            11786,            14505,
+            16107,            18148,            20019,            21653,
+            23740,            25814,            28578,            30372,
+             3025,             3729,             4866,             6520,
+             9487,            10943,            12358,            14258,
+            16174,            17501,            19476,            21408,
+            23227,            24906,            27347,            29407,
+             1270,             1965,             6802,             7995,
+             9204,            10828,            12507,            14230,
+            15759,            17860,            20369,            22502,
+            24633,            26514,            28535,            30525,
+             2210,             2749,             4266,             7487,
+             9878,            11018,            12823,            14431,
+            16247,            18626,            20450,            22054,
+            23739,            25291,            27074,            29169,
+             1275,             1926,             4330,             6573,
+             8441,            10920,            13260,            15008,
+            16927,            18573,            20644,            22217,
+            23983,            25474,            27372,            28645,
+             3015,             3670,             5086,             6372,
+             7888,             9309,            10966,            12642,
+            14495,            16172,            18080,            19972,
+            22454,            24899,            27362,            29975,
+             2882,             3733,             5113,             6482,
+             8125,             9685,            11598,            13288,
+            15405,            17192,            20178,            22426,
+            24801,            27014,            29212,            30811,
+             2300,             2968,             4101,             5442,
+             6327,             7910,            12455,            13862,
+            15747,            17505,            19053,            20679,
+            22615,            24658,            27499,            30065,
+             2257,             2940,             4430,             5991,
+             7042,             8364,             9414,            11224,
+            15723,            17420,            19253,            21469,
+            23915,            26053,            28430,            30384,
+             1227,             2045,             3818,             5011,
+             6990,             9231,            11024,            13011,
+            17341,            19017,            20583,            22799,
+            25195,            26876,            29351,            30805,
+             1354,             1924,             3789,             8077,
+            10453,            11639,            13352,            14817,
+            16743,            18189,            20095,            22014,
+            24593,            26677,            28647,            30256,
+             3142,             4049,             6197,             7417,
+             8753,            10156,            11533,            13181,
+            15947,            17655,            19606,            21402,
+            23487,            25659,            28123,            30304,
+             1317,             2263,             4725,             7611,
+             9667,            11634,            14143,            16258,
+            18724,            20698,            22379,            24007,
+            25775,            27251,            28930,            30593,
+             1570,             2323,             3818,             6215,
+             9893,            11556,            13070,            14631,
+            16152,            18290,            21386,            23346,
+            25114,            26923,            28712,            30168,
+             2297,             3905,             6287,             8558,
+            10668,            12766,            15019,            17102,
+            19036,            20677,            22341,            23871,
+            25478,            27085,            28851,            30520,
+             1915,             2507,             4033,             5749,
+             7059,             8871,            10659,            12198,
+            13937,            15383,            16869,            18707,
+            23175,            25818,            28514,            30501,
+             2404,             2918,             5190,             6252,
+             7426,             9887,            12387,            14795,
+            16754,            18368,            20338,            22003,
+            24236,            26456,            28490,            30397,
+             1621,             2227,             3479,             5085,
+             9425,            12892,            14246,            15652,
+            17205,            18674,            20446,            22209,
+            23778,            25867,            27931,            30093,
+             1869,             2390,             4105,             7021,
+            11221,            12775,            14059,            15590,
+            17024,            18608,            20595,            22075,
+            23649,            25154,            26914,            28671,
+             2551,             3252,             4688,             6562,
+             7869,             9125,            10475,            11800,
+            15402,            18780,            20992,            22555,
+            24289,            25968,            27465,            29232,
+             2705,             3493,             4735,             6360,
+             7905,             9352,            11538,            13430,
+            15239,            16919,            18619,            20094,
+            21800,            23342,            25200,            29257,
+             2166,             2791,             4011,             5081,
+             5896,             9038,            13407,            14703,
+            16543,            18189,            19896,            21857,
+            24872,            26971,            28955,            30514,
+             1865,             3021,             4696,             6534,
+             8343,             9914,            12789,            14103,
+            16533,            17729,            21340,            22439,
+            24873,            26330,            28428,            30154,
+             3369,             4345,             6573,             8763,
+            10309,            11713,            13367,            14784,
+            16483,            18145,            19839,            21247,
+            23292,            25477,            27555,            29447,
+             1265,             2184,             5443,             7893,
+            10591,            13139,            15105,            16639,
+            18402,            19826,            21419,            22995,
+            24719,            26437,            28363,            30125,
+             1584,             2004,             3535,             4450,
+             8662,            10764,            12832,            14978,
+            16972,            18794,            20932,            22547,
+            24636,            26521,            28701,            30567,
+             3419,             4528,             6602,             7890,
+             9508,            10875,            12771,            14357,
+            16051,            18330,            20630,            22490,
+            25070,            26936,            28946,            30542,
+             1726,             2252,             4597,             6950,
+             8379,             9823,            11363,            12794,
+            14306,            15476,            16798,            18018,
+            21671,            25550,            28148,            30367,
+             3385,             3870,             5307,             6388,
+             7141,             8684,            12695,            14939,
+            16480,            18277,            20537,            22048,
+            23947,            25965,            28214,            29956,
+             2771,             3306,             4450,             5560,
+             6453,             9493,            13548,            14754,
+            16743,            18447,            20028,            21736,
+            23746,            25353,            27141,            29066,
+             3028,             3900,             6617,             7893,
+             9211,            10480,            12047,            13583,
+            15182,            16662,            18502,            20092,
+            22190,            24358,            26302,            28957,
+             2000,             2550,             4067,             6837,
+             9628,            11002,            12594,            14098,
+            15589,            17195,            18679,            20099,
+            21530,            23085,            24641,            29022,
+             2844,             3302,             5103,             6107,
+             6911,             8598,            12416,            14054,
+            16026,            18567,            20672,            22270,
+            23952,            25771,            27658,            30026,
+             4043,             5150,             7268,             9056,
+            10916,            12638,            14543,            16184,
+            17948,            19691,            21357,            22981,
+            24825,            26591,            28479,            30233,
+             2109,             2625,             4320,             5525,
+             7454,            10220,            12980,            14698,
+            17627,            19263,            20485,            22381,
+            24279,            25777,            27847,            30458,
+             1550,             2667,             6473,             9496,
+            10985,            12352,            13795,            15233,
+            17099,            18642,            20461,            22116,
+            24197,            26291,            28403,            30132,
+             2411,             3084,             4145,             5394,
+             6367,             8154,            13125,            16049,
+            17561,            19125,            21258,            22762,
+            24459,            26317,            28255,            29702,
+             4159,             4516,             5956,             7635,
+             8254,             8980,            11208,            14133,
+            16210,            17875,            20196,            21864,
+            23840,            25747,            28058,            30012,
+             2026,             2431,             2845,             3618,
+             7950,             9802,            12721,            14460,
+            16576,            18984,            21376,            23319,
+            24961,            26718,            28971,            30640,
+             3429,             3833,             4472,             4912,
+             7723,            10386,            12981,            15322,
+            16699,            18807,            20778,            22551,
+            24627,            26494,            28334,            30482,
+             4740,             5169,             5796,             6485,
+             6998,             8830,            11777,            14414,
+            16831,            18413,            20789,            22369,
+            24236,            25835,            27807,            30021,
+              150,              168,              -17,             -107,
+             -142,             -229,             -320,             -406,
+             -503,             -620,             -867,             -935,
+             -902,             -680,             -398,             -114,
+             -398,             -355,               49,              255,
+              114,              260,              399,              264,
+              317,              431,              514,              531,
+              435,              356,              238,              106,
+              -43,              -36,             -169,             -224,
+             -391,             -633,             -776,             -970,
+             -844,             -455,             -181,              -12,
+               85,               85,              164,              195,
+              122,               85,             -158,             -640,
+             -903,                9,                7,             -124,
+              149,               32,              220,              369,
+              242,              115,               79,               84,
+             -146,             -216,              -70,             1024,
+              751,              574,              440,              377,
+              352,              203,               30,               16,
+               -3,               81,              161,              100,
+             -148,             -176,              933,              750,
+              404,              171,               -2,             -146,
+             -411,             -442,             -541,             -552,
+             -442,             -269,             -240,              -52,
+              603,              635,              405,              178,
+              215,               19,             -153,             -167,
+             -290,             -219,              151,              271,
+              151,              119,              303,              266,
+              100,               69,             -293,             -657,
+              939,              659,              442,              351,
+              132,               98,              -16,               -1,
+             -135,             -200,             -223,              -89,
+              167,              154,              172,              237,
+              -45,             -183,             -228,             -486,
+              263,              608,              158,             -125,
+             -390,             -227,             -118,               43,
+             -457,             -392,             -769,             -840,
+               20,             -117,             -194,             -189,
+             -173,             -173,              -33,               32,
+              174,              144,              115,              167,
+               57,               44,               14,              147,
+               96,              -54,             -142,             -129,
+             -254,             -331,              304,              310,
+              -52,             -419,             -846,            -1060,
+              -88,             -123,             -202,             -343,
+             -554,             -961,             -951,              327,
+              159,               81,              255,              227,
+              120,              203,              256,              192,
+              164,              224,              290,              195,
+              216,              209,              128,              832,
+             1028,              889,              698,              504,
+              408,              355,              218,               32,
+             -115,              -84,             -276,             -100,
+             -312,             -484,              899,              682,
+              465,              456,              241,              -12,
+             -275,             -425,             -461,             -367,
+              -33,              -28,             -102,             -194,
+             -527,              863,              906,              463,
+              245,               13,             -212,             -305,
+             -105,              163,              279,              176,
+               93,               67,              115,              192,
+               61,              -50,             -132,             -175,
+             -224,             -271,             -629,             -252,
+             1158,              972,              638,              280,
+              300,              326,              143,             -152,
+             -214,             -287,               53,              -42,
+             -236,             -352,             -423,             -248,
+             -129,             -163,             -178,             -119,
+               85,               57,              514,              382,
+              374,              402,              424,              423,
+              271,              197,               97,               40,
+               39,              -97,             -191,             -164,
+             -230,             -256,             -410,              396,
+              327,              127,               10,             -119,
+             -167,             -291,             -274,             -141,
+              -99,             -226,             -218,             -139,
+             -224,             -209,             -268,             -442,
+             -413,              222,               58,              521,
+              344,              258,               76,              -42,
+             -142,             -165,             -123,              -92,
+               47,                8,               -3,             -191,
+              -11,             -164,             -167,             -351,
+             -740,              311,              538,              291,
+              184,               29,             -105,                9,
+              -30,              -54,              -17,              -77,
+             -271,             -412,             -622,             -648,
+              476,              186,              -66,             -197,
+              -73,              -94,              -15,               47,
+               28,              112,              -58,              -33,
+               65,               19,               84,               86,
+              276,              114,              472,              786,
+              799,              625,              415,              178,
+              -35,              -26,                5,                9,
+               83,               39,               37,               39,
+             -184,             -374,             -265,             -362,
+             -501,              337,              716,              478,
+              -60,             -125,             -163,              362,
+               17,             -122,             -233,              279,
+              138,              157,              318,              193,
+              189,              209,              266,              252,
+              -46,              -56,             -277,             -429,
+              464,              386,              142,               44,
+              -43,               66,              264,              182,
+               47,               14,              -26,              -79,
+               49,               15,             -128,             -203,
+             -400,             -478,              325,               27,
+              234,              411,              205,              129,
+               12,               58,              123,               57,
+              171,              137,               96,              128,
+              -32,              134,              -12,               57,
+              119,               26,              -22,             -165,
+             -500,             -701,             -528,             -116,
+               64,               -8,               97,               -9,
+             -162,              -66,             -156,             -194,
+             -303,             -546,             -341,              546,
+              358,               95,               45,               76,
+              270,              403,              205,              100,
+              123,               50,              -53,             -144,
+             -110,              -13,               32,             -228,
+             -130,              353,              296,               56,
+             -372,             -253,              365,               73,
+               10,              -34,             -139,             -191,
+              -96,                5,               44,              -85,
+             -179,             -129,             -192,             -246,
+              -85,             -110,             -155,              -44,
+              -27,              145,              138,               79,
+               32,             -148,             -577,             -634,
+              191,               94,               -9,              -35,
+              -77,              -84,              -56,             -171,
+             -298,             -271,             -243,             -156,
+             -328,             -235,              -76,             -128,
+             -121,              129,               13,              -22,
+               32,               45,             -248,              -65,
+              193,              -81,              299,               57,
+             -147,              192,             -165,             -354,
+             -334,             -106,             -156,              -40,
+               -3,              -68,              124,             -257,
+               78,              124,              170,              412,
+              227,              105,             -104,               12,
+              154,              250,              274,              258,
+                4,              -27,              235,              152,
+               51,              338,              300,                7,
+             -314,             -411,              215,              170,
+               -9,              -93,              -77,               76,
+               67,               54,              200,              315,
+              163,               72,              -91,             -402,
+              158,              187,             -156,              -91,
+              290,              267,              167,               91,
+              140,              171,              112,                9,
+              -42,             -177,             -440,              385,
+               80,               15,              172,              129,
+               41,             -129,             -372,              -24,
+              -75,              -30,             -170,               10,
+             -118,               57,               78,             -101,
+              232,              161,              123,              256,
+              277,              101,             -192,             -629,
+             -100,              -60,             -232,               66,
+               13,              -13,              -80,             -239,
+              239,               37,               32,               89,
+             -319,             -579,              450,              360,
+                3,              -29,             -299,              -89,
+              -54,             -110,             -246,             -164,
+                6,             -188,              338,              176,
+              -92,              197,              137,              134,
+               12,               -2,               56,             -183,
+              114,              -36,             -131,             -204,
+               75,              -25,             -174,              191,
+              -15,             -290,             -429,             -267,
+               79,               37,              106,               23,
+             -384,              425,               70,              -14,
+              212,              105,               15,               -2,
+              -42,              -37,             -123,              108,
+               28,              -48,              193,              197,
+              173,              -33,               37,               73,
+              -57,              256,              137,              -58,
+             -430,             -228,              217,              -51,
+              -10,              -58,               -6,               22,
+              104,               61,             -119,              169,
+              144,               16,              -46,             -394,
+               60,              454,              -80,             -298,
+              -65,               25,                0,              -24,
+              -65,             -417,              465,              276,
+               -3,             -194,              -13,              130,
+               19,               -6,              -21,              -24,
+             -180,              -53,              -85,               20,
+              118,              147,              113,              -75,
+             -289,              226,             -122,              227,
+              270,              125,              109,              197,
+              125,              138,               44,               60,
+               25,              -55,             -167,              -32,
+             -139,             -193,             -173,             -316,
+              287,             -208,              253,              239,
+               27,              -80,             -188,              -28,
+             -182,             -235,              156,             -117,
+              128,              -48,              -58,             -226,
+              172,              181,              167,               19,
+               62,               10,                2,              181,
+              151,              108,              -16,              -11,
+              -78,             -331,              411,              133,
+               17,              104,               64,             -184,
+               24,              -30,               -3,             -283,
+              121,              204,               -8,             -199,
+              -21,              -80,             -169,             -157,
+             -191,             -136,               81,              155,
+               14,             -131,              244,               74,
+              -57,              -47,             -280,              347,
+              111,              -77,             -128,             -142,
+             -194,             -125,               -6,              -68,
+               91,                1,               23,               14,
+             -154,              -34,               23,              -38,
+             -343,              503,              146,              -38,
+              -46,              -41,               58,               31,
+               63,              -48,             -117,               45,
+               28,                1,              -89,               -5,
+              -44,              -29,             -448,              487,
+              204,               81,               46,             -106,
+             -302,              380,              120,              -38,
+              -12,              -39,               70,               -3,
+               25,              -65,               30,              -11,
+               34,              -15,               22,             -115,
+                0,              -79,              -83,               45,
+              114,               43,              150,               36,
+              233,              149,              195,                5,
+               25,              -52,             -475,              274,
+               28,              -39,               -8,              -66,
+             -255,              258,               56,              143,
+              -45,             -190,              165,              -60,
+               20,                2,              125,             -129,
+               51,               -8,             -335,              288,
+               38,               59,               25,              -42,
+               23,             -118,             -112,               11,
+              -55,             -133,             -109,               24,
+             -105,               78,              -64,             -245,
+              202,              -65,             -127,              162,
+               40,              -94,               89,              -85,
+             -119,             -103,               97,                9,
+              -70,              -28,              194,               86,
+             -112,              -92,             -114,               74,
+              -49,               46,              -84,             -178,
+              113,               52,             -205,              333,
+               88,              222,               56,              -55,
+               13,               86,                4,              -77,
+              224,              114,             -105,              112,
+              125,              -29,              -18,             -144,
+               22,              -58,              -99,               28,
+              114,              -66,              -32,             -169,
+             -314,              285,               72,              -74,
+              179,               28,              -79,             -182,
+               13,              -55,              147,               13,
+               12,              -54,               31,              -84,
+              -17,              -75,             -228,               83,
+             -375,              436,              110,              -63,
+              -27,             -136,              169,              -56,
+               -8,             -171,              184,              -42,
+              148,               68,              204,              235,
+              110,             -229,               91,              171,
+              -43,               -3,              -26,              -99,
+             -111,               71,             -170,              202,
+              -67,              181,              -37,              109,
+             -120,                3,              -55,             -260,
+              -16,              152,               91,              142,
+               42,               44,              134,               47,
+               17,              -35,               22,               79,
+             -169,               41,               46,              277,
+              -93,              -49,             -126,               37,
+             -103,              -34,              -22,              -90,
+             -134,             -205,               92,               -9,
+                1,             -195,             -239,               45,
+               54,               18,              -23,               -1,
+              -80,              -98,              -20,             -261,
+              306,               72,               20,              -89,
+             -217,               11,                6,              -82,
+               89,               13,             -129,              -89,
+               83,              -71,              -55,              130,
+              -98,             -146,              -27,              -57,
+               53,              275,               17,              170,
+               -5,              -54,              132,              -64,
+               72,              160,             -125,             -168,
+               72,               40,              170,               78,
+              248,              116,               20,               84,
+               31,              -34,              190,               38,
+               13,             -106,              225,               27,
+             -168,               24,             -157,             -122,
+              165,               11,             -161,             -213,
+              -12,              -51,             -101,               42,
+              101,               27,               55,              111,
+               75,               71,              -96,               -1,
+               65,             -277,              393,              -26,
+              -44,              -68,              -84,              -66,
+              -95,              235,              179,              -25,
+              -41,               27,              -91,             -128,
+             -222,              146,              -72,              -30,
+              -24,               55,             -126,              -68,
+              -58,             -127,               13,              -97,
+             -106,              174,             -100,              155,
+              101,             -146,              -21,              261,
+               22,               38,              -66,               65,
+                4,               70,               64,              144,
+               59,              213,               71,             -337,
+              303,              -52,               51,              -56,
+                1,               10,              -15,               -5,
+               34,               52,              228,              131,
+              161,             -127,             -214,              238,
+              123,               64,             -147,              -50,
+              -34,             -127,              204,              162,
+               85,               41,                5,             -140,
+               73,             -150,               56,              -96,
+              -66,              -20,                2,             -235,
+               59,              -22,             -107,              150,
+              -16,              -47,               -4,               81,
+              -67,              167,              149,              149,
+             -157,              288,             -156,              -27,
+               -8,               18,               83,              -24,
+              -41,             -167,              158,             -100,
+               93,               53,              201,               15,
+               42,              266,              278,              -12,
+               -6,              -37,               85,                6,
+               20,             -188,             -271,              107,
+              -13,              -80,               51,              202,
+              173,              -69,               78,             -188,
+               46,                4,              153,               12,
+             -138,              169,                5,              -58,
+             -123,             -108,             -243,              150,
+               10,             -191,              246,              -15,
+               38,               25,              -10,               14,
+               61,               50,             -206,             -215,
+             -220,               90,                5,             -149,
+             -219,               56,              142,               24,
+             -376,               77,              -80,               75,
+                6,               42,             -101,               16,
+               56,               14,              -57,                3,
+              -17,               80,               57,              -36,
+               88,              -59,              -97,              -19,
+             -148,               46,             -219,              226,
+              114,               -4,              -72,              -15,
+               37,              -49,              -28,              247,
+               44,              123,               47,             -122,
+              -38,               17,                4,             -113,
+              -32,             -224,              154,             -134,
+              196,               71,             -267,              -85,
+               28,              -70,               89,             -120,
+               99,               -2,               64,               76,
+             -166,              -48,              189,              -35,
+              -92,             -169,             -123,              339,
+               38,              -25,               38,              -35,
+              225,             -139,              -50,              -63,
+              246,               60,             -185,             -109,
+              -49,              -53,             -167,               51,
+              149,               60,             -101,              -33,
+               25,              -76,              120,               32,
+              -30,              -83,              102,               91,
+             -186,             -261,              131,             -197
+};
+
+const SKP_Silk_NLSF_CBS SKP_Silk_NLSF_CB0_16_Stage_info[ NLSF_MSVQ_CB0_16_STAGES ] =
+{
+        { 128, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 *   0 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[   0 ] },
+        {  16, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 128 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 128 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 144 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 144 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 152 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 152 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 160 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 160 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 168 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 168 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 176 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 176 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 184 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 184 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 192 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 192 ] },
+        {  16, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 200 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 200 ] }
+};
+
+const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB0_16 =
+{
+        NLSF_MSVQ_CB0_16_STAGES,
+        SKP_Silk_NLSF_CB0_16_Stage_info,
+        SKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min_Q15,
+        SKP_Silk_NLSF_MSVQ_CB0_16_CDF,
+        SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr,
+        SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx
+};
+
--- /dev/null
+++ b/src_common/SKP_Silk_tables_NLSF_CB0_16.h
@@ -1,0 +1,51 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_TABLES_NLSF_CB0_16_H
+#define SKP_SILK_TABLES_NLSF_CB0_16_H
+
+#include "SKP_Silk_define.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define NLSF_MSVQ_CB0_16_STAGES       10
+#define NLSF_MSVQ_CB0_16_VECTORS      216
+
+/* NLSF codebook entropy coding tables */
+extern const SKP_uint16         SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ NLSF_MSVQ_CB0_16_VECTORS + NLSF_MSVQ_CB0_16_STAGES ];
+extern const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr[                  NLSF_MSVQ_CB0_16_STAGES ];
+extern const SKP_int            SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx[                 NLSF_MSVQ_CB0_16_STAGES ];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
--- /dev/null
+++ b/src_common/SKP_Silk_tables_NLSF_CB1_10.c
@@ -1,0 +1,577 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/**********************************************/
+/* This file has been automatically generated */
+/*                                            */
+/* ROM usage:  0.19 + 1.61 kB                 */
+/**********************************************/
+
+#include "SKP_Silk_structs.h"
+#include "SKP_Silk_tables_NLSF_CB1_10.h"
+
+const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ NLSF_MSVQ_CB1_10_VECTORS + NLSF_MSVQ_CB1_10_STAGES ] =
+{
+            0,
+        17096,
+        24130,
+        28997,
+        33179,
+        36696,
+        40213,
+        42493,
+        44252,
+        45973,
+        47551,
+        49095,
+        50542,
+        51898,
+        53196,
+        54495,
+        55685,
+        56851,
+        57749,
+        58628,
+        59435,
+        60207,
+        60741,
+        61220,
+        61700,
+        62179,
+        62659,
+        63138,
+        63617,
+        64097,
+        64576,
+        65056,
+        65535,
+            0,
+        20378,
+        33032,
+        40395,
+        46721,
+        51707,
+        56585,
+        61157,
+        65535,
+            0,
+        15055,
+        25472,
+        35447,
+        42501,
+        48969,
+        54773,
+        60212,
+        65535,
+            0,
+        12069,
+        22440,
+        32812,
+        40145,
+        46870,
+        53595,
+        59630,
+        65535,
+            0,
+        10839,
+        19954,
+        27957,
+        35961,
+        43965,
+        51465,
+        58805,
+        65535,
+            0,
+         8933,
+        17674,
+        26415,
+        34785,
+        42977,
+        50820,
+        58496,
+        65535
+};
+
+const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr[ NLSF_MSVQ_CB1_10_STAGES ] =
+{
+     &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[   0 ],
+     &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[  33 ],
+     &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[  42 ],
+     &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[  51 ],
+     &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[  60 ],
+     &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[  69 ]
+};
+
+const SKP_int SKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx[ NLSF_MSVQ_CB1_10_STAGES ] =
+{
+       5,
+       3,
+       4,
+       4,
+       5,
+       5
+};
+
+const SKP_int16 SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[ NLSF_MSVQ_CB1_10_VECTORS ] =
+{
+               62,              103,
+              120,              127,
+              135,              135,
+              155,              167,
+              168,              172,
+              173,              176,
+              179,              181,
+              181,              185,
+              186,              198,
+              199,              203,
+              205,              222,
+              227,              227,
+              227,              227,
+              227,              227,
+              227,              227,
+              227,              227,
+               54,               76,
+              101,              108,
+              119,              120,
+              123,              125,
+               68,               85,
+               87,              103,
+              107,              112,
+              115,              116,
+               78,               85,
+               85,              101,
+              105,              105,
+              110,              111,
+               83,               91,
+               97,               97,
+               97,              100,
+              101,              105,
+               92,               93,
+               93,               95,
+               96,               98,
+               99,              103
+};
+
+const SKP_int SKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min_Q15[ 10 + 1 ] =
+{
+              462,
+                3,
+               64,
+               74,
+               98,
+               50,
+               97,
+               68,
+              120,
+               53,
+              639
+};
+
+const SKP_int16 SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 * NLSF_MSVQ_CB1_10_VECTORS ] =
+{
+             1877,             4646,
+             7712,            10745,
+            13964,            17028,
+            20239,            23182,
+            26471,            29287,
+             1612,             3278,
+             7086,             9975,
+            13228,            16264,
+            19596,            22690,
+            26037,            28965,
+             2169,             3830,
+             6460,             8958,
+            11960,            14750,
+            18408,            21659,
+            25018,            28043,
+             3680,             6024,
+             8986,            12256,
+            15201,            18188,
+            21741,            24460,
+            27484,            30059,
+             2584,             5187,
+             7799,            10902,
+            13179,            15765,
+            19017,            22431,
+            25891,            28698,
+             3731,             5751,
+             8650,            11742,
+            15090,            17407,
+            20391,            23421,
+            26228,            29247,
+             2107,             6323,
+             8915,            12226,
+            14775,            17791,
+            20664,            23679,
+            26829,            29353,
+             1677,             2870,
+             5386,             8077,
+            11817,            15176,
+            18657,            22006,
+            25513,            28689,
+             2111,             3625,
+             7027,            10588,
+            14059,            17193,
+            21137,            24260,
+            27577,            30036,
+             2428,             4010,
+             5765,             9376,
+            13805,            15821,
+            19444,            22389,
+            25295,            29310,
+             2256,             4628,
+             8377,            12441,
+            15283,            19462,
+            22257,            25551,
+            28432,            30304,
+             2352,             3675,
+             6129,            11868,
+            14551,            16655,
+            19624,            21883,
+            26526,            28849,
+             5243,             7248,
+            10558,            13269,
+            15651,            17919,
+            21141,            23827,
+            27102,            29519,
+             4422,             6725,
+            10449,            13273,
+            16124,            19921,
+            22826,            26061,
+            28763,            30583,
+             4508,             6291,
+             9504,            11809,
+            13827,            15950,
+            19077,            22084,
+            25740,            28658,
+             2540,             4297,
+             8579,            13578,
+            16634,            19101,
+            21547,            23887,
+            26777,            29146,
+             3377,             6358,
+            10224,            14518,
+            17905,            21056,
+            23637,            25784,
+            28161,            30109,
+             4177,             5942,
+             8159,            10108,
+            12130,            15470,
+            20191,            23326,
+            26782,            29359,
+             2492,             3801,
+             6144,             9825,
+            16000,            18671,
+            20893,            23663,
+            25899,            28974,
+             3011,             4727,
+             6834,            10505,
+            12465,            14496,
+            17065,            20052,
+            25265,            28057,
+             4149,             7197,
+            12338,            15076,
+            18002,            20190,
+            22187,            24723,
+            27083,            29125,
+             2975,             4578,
+             6448,             8378,
+             9671,            13225,
+            19502,            22277,
+            26058,            28850,
+             4102,             5760,
+             7744,             9484,
+            10744,            12308,
+            14677,            19607,
+            24841,            28381,
+             4931,             9287,
+            12477,            13395,
+            13712,            14351,
+            16048,            19867,
+            24188,            28994,
+             4141,             7867,
+            13140,            17720,
+            20064,            21108,
+            21692,            22722,
+            23736,            27449,
+             4011,             8720,
+            13234,            16206,
+            17601,            18289,
+            18524,            19689,
+            23234,            27882,
+             3420,             5995,
+            11230,            15117,
+            15907,            16783,
+            17762,            23347,
+            26898,            29946,
+             3080,             6786,
+            10465,            13676,
+            18059,            23615,
+            27058,            29082,
+            29563,            29905,
+             3038,             5620,
+             9266,            12870,
+            18803,            19610,
+            20010,            20802,
+            23882,            29306,
+             3314,             6420,
+             9046,            13262,
+            15869,            23117,
+            23667,            24215,
+            24487,            25915,
+             3469,             6963,
+            10103,            15282,
+            20531,            23240,
+            25024,            26021,
+            26736,            27255,
+             3041,             6459,
+             9777,            12896,
+            16315,            19410,
+            24070,            29353,
+            31795,            32075,
+             -200,             -134,
+             -113,             -204,
+             -347,             -440,
+             -352,             -211,
+             -418,             -172,
+             -313,               59,
+              495,              772,
+              721,              614,
+              334,              444,
+              225,              242,
+              161,               16,
+              274,              564,
+              -73,             -188,
+             -395,             -171,
+              777,              508,
+             1340,             1145,
+              699,              196,
+              223,              173,
+               90,               25,
+              -26,               18,
+              133,             -105,
+             -360,             -277,
+              859,              634,
+               41,             -557,
+             -768,             -926,
+             -601,            -1021,
+            -1189,             -365,
+              225,              107,
+              374,              -50,
+              433,              417,
+              156,               39,
+             -597,            -1397,
+            -1594,             -592,
+             -485,             -292,
+              253,               87,
+               -0,               -6,
+              -25,             -345,
+             -240,              120,
+             1261,              946,
+              166,             -277,
+              241,              167,
+              170,              429,
+              518,              714,
+              602,              254,
+              134,               92,
+             -152,             -324,
+             -394,               49,
+             -151,             -304,
+             -724,             -657,
+             -162,             -369,
+              -35,                3,
+               -2,             -312,
+             -200,              -92,
+             -227,              242,
+              628,              565,
+             -124,             1056,
+              770,              101,
+              -84,              -33,
+                4,             -192,
+             -272,                5,
+             -627,             -977,
+              419,              472,
+               53,             -103,
+              145,              322,
+              -95,              -31,
+             -100,             -303,
+             -560,            -1067,
+             -413,              714,
+              283,                2,
+             -223,             -367,
+              523,              360,
+              -38,             -115,
+              378,             -591,
+             -718,              448,
+             -481,             -274,
+              180,              -88,
+             -581,             -157,
+             -696,            -1265,
+              394,             -479,
+              -23,              124,
+              -43,               19,
+             -113,             -236,
+             -412,             -659,
+             -200,                2,
+              -69,             -342,
+              199,               55,
+               58,              -36,
+              -51,              -62,
+              507,              507,
+              427,              442,
+               36,              601,
+             -141,               68,
+              274,              274,
+               68,              -12,
+               -4,               71,
+             -193,             -464,
+             -425,             -383,
+              408,              203,
+             -337,              236,
+              410,              -59,
+              -25,             -341,
+             -449,               28,
+               -9,               90,
+              332,              -14,
+             -905,               96,
+             -540,             -242,
+              679,              -59,
+              192,              -24,
+               60,             -217,
+                5,              -37,
+              179,              -20,
+              311,              519,
+              274,               72,
+             -326,            -1030,
+             -262,              213,
+              380,               82,
+              328,              411,
+             -540,              574,
+             -283,              151,
+              181,             -402,
+             -278,             -240,
+             -110,             -227,
+             -264,              -89,
+             -250,             -259,
+              -27,              106,
+             -239,              -98,
+             -390,              118,
+               61,              104,
+              294,              532,
+               92,              -13,
+               60,             -233,
+              335,              541,
+              307,              -26,
+             -110,              -91,
+             -231,             -460,
+              170,              201,
+               96,             -372,
+              132,              435,
+             -302,              216,
+             -279,              -41,
+               74,              190,
+              368,              273,
+             -186,             -608,
+             -157,              159,
+               12,              278,
+              245,              307,
+               25,             -187,
+              -16,               55,
+               30,             -163,
+              548,             -307,
+              106,               -5,
+               27,              330,
+             -416,              475,
+              438,             -235,
+              104,              137,
+               21,               -5,
+             -300,             -468,
+              521,             -347,
+              170,             -200,
+             -219,              308,
+             -122,             -133,
+              219,              -16,
+              359,              412,
+              -89,             -111,
+               48,              322,
+              142,              177,
+             -286,             -127,
+              -39,              -63,
+              -42,             -451,
+              160,              308,
+              -57,              193,
+              -48,               74,
+             -346,               59,
+              -27,               27,
+             -469,             -277,
+             -344,              282,
+              262,              122,
+              171,             -249,
+               27,              258,
+              188,               -3,
+               67,             -206,
+             -284,              291,
+             -117,              -88,
+             -477,              375,
+               50,              106,
+               99,             -182,
+              438,             -376,
+             -401,              -49,
+              119,              -23,
+              -10,              -48,
+             -116,             -200,
+             -310,              121,
+               73,                7,
+              237,             -226,
+              139,             -456,
+              397,               35,
+                3,             -108,
+              323,              -75,
+              332,              198,
+              -99,              -21
+};
+
+const SKP_Silk_NLSF_CBS SKP_Silk_NLSF_CB1_10_Stage_info[ NLSF_MSVQ_CB1_10_STAGES ] =
+{
+        {  32, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 *   0 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[   0 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 *  32 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[  32 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 *  40 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[  40 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 *  48 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[  48 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 *  56 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[  56 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 *  64 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[  64 ] }
+};
+
+const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB1_10 =
+{
+        NLSF_MSVQ_CB1_10_STAGES,
+        SKP_Silk_NLSF_CB1_10_Stage_info,
+        SKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min_Q15,
+        SKP_Silk_NLSF_MSVQ_CB1_10_CDF,
+        SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr,
+        SKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx
+};
+
--- /dev/null
+++ b/src_common/SKP_Silk_tables_NLSF_CB1_10.h
@@ -1,0 +1,51 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_TABLES_NLSF_CB1_10_H
+#define SKP_SILK_TABLES_NLSF_CB1_10_H
+
+#include "SKP_Silk_define.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define NLSF_MSVQ_CB1_10_STAGES       6
+#define NLSF_MSVQ_CB1_10_VECTORS      72
+
+/* NLSF codebook entropy coding tables */
+extern const SKP_uint16         SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ NLSF_MSVQ_CB1_10_VECTORS + NLSF_MSVQ_CB1_10_STAGES ];
+extern const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr[                  NLSF_MSVQ_CB1_10_STAGES ];
+extern const SKP_int            SKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx[                 NLSF_MSVQ_CB1_10_STAGES ];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
--- /dev/null
+++ b/src_common/SKP_Silk_tables_NLSF_CB1_16.c
@@ -1,0 +1,703 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/**********************************************/
+/* This file has been automatically generated */
+/*                                            */
+/* ROM usage:  0.29 + 3.57 kB                 */
+/**********************************************/
+
+#include "SKP_Silk_structs.h"
+#include "SKP_Silk_tables_NLSF_CB1_16.h"
+
+const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ NLSF_MSVQ_CB1_16_VECTORS + NLSF_MSVQ_CB1_16_STAGES ] =
+{
+            0,
+        19099,
+        26957,
+        30639,
+        34242,
+        37546,
+        40447,
+        43287,
+        46005,
+        48445,
+        49865,
+        51284,
+        52673,
+        53975,
+        55221,
+        56441,
+        57267,
+        58025,
+        58648,
+        59232,
+        59768,
+        60248,
+        60729,
+        61210,
+        61690,
+        62171,
+        62651,
+        63132,
+        63613,
+        64093,
+        64574,
+        65054,
+        65535,
+            0,
+        28808,
+        38775,
+        46801,
+        51785,
+        55886,
+        59410,
+        62572,
+        65535,
+            0,
+        27376,
+        38639,
+        45052,
+        51465,
+        55448,
+        59021,
+        62594,
+        65535,
+            0,
+        33403,
+        39569,
+        45102,
+        49961,
+        54047,
+        57959,
+        61788,
+        65535,
+            0,
+        25851,
+        43356,
+        47828,
+        52204,
+        55964,
+        59413,
+        62507,
+        65535,
+            0,
+        34277,
+        40337,
+        45432,
+        50311,
+        54326,
+        58171,
+        61853,
+        65535,
+            0,
+        33538,
+        39865,
+        45302,
+        50076,
+        54549,
+        58478,
+        62159,
+        65535,
+            0,
+        27445,
+        35258,
+        40665,
+        46072,
+        51362,
+        56540,
+        61086,
+        65535,
+            0,
+        22080,
+        30779,
+        37065,
+        43085,
+        48849,
+        54613,
+        60133,
+        65535,
+            0,
+        13417,
+        21748,
+        30078,
+        38231,
+        46383,
+        53091,
+        59515,
+        65535
+};
+
+const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr[ NLSF_MSVQ_CB1_16_STAGES ] =
+{
+     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[   0 ],
+     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[  33 ],
+     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[  42 ],
+     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[  51 ],
+     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[  60 ],
+     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[  69 ],
+     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[  78 ],
+     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[  87 ],
+     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[  96 ],
+     &SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ 105 ]
+};
+
+const SKP_int SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx[ NLSF_MSVQ_CB1_16_STAGES ] =
+{
+       5,
+       2,
+       2,
+       2,
+       2,
+       2,
+       2,
+       3,
+       3,
+       4
+};
+
+const SKP_int16 SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ NLSF_MSVQ_CB1_16_VECTORS ] =
+{
+               57,               98,
+              133,              134,
+              138,              144,
+              145,              147,
+              152,              177,
+              177,              178,
+              181,              183,
+              184,              202,
+              206,              215,
+              218,              222,
+              227,              227,
+              227,              227,
+              227,              227,
+              227,              227,
+              227,              227,
+              227,              227,
+               38,               87,
+               97,              119,
+              128,              135,
+              140,              143,
+               40,               81,
+              107,              107,
+              129,              134,
+              134,              143,
+               31,              109,
+              114,              120,
+              128,              130,
+              131,              132,
+               43,               61,
+              124,              125,
+              132,              136,
+              141,              142,
+               30,              110,
+              118,              120,
+              129,              131,
+              133,              133,
+               31,              108,
+              115,              121,
+              124,              130,
+              133,              137,
+               40,               98,
+              115,              115,
+              116,              117,
+              123,              124,
+               50,               93,
+              108,              110,
+              112,              112,
+              114,              115,
+               73,               95,
+               95,               96,
+               96,              105,
+              107,              110
+};
+
+const SKP_int SKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min_Q15[ 16 + 1 ] =
+{
+              148,
+                3,
+               60,
+               68,
+              117,
+               86,
+              121,
+              124,
+              152,
+              153,
+              207,
+              151,
+              225,
+              239,
+              126,
+              183,
+              792
+};
+
+const SKP_int16 SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * NLSF_MSVQ_CB1_16_VECTORS ] =
+{
+             1309,             3060,             5071,             6996,
+             9028,            10938,            12934,            14891,
+            16933,            18854,            20792,            22764,
+            24753,            26659,            28626,            30501,
+             1264,             2745,             4610,             6408,
+             8286,            10043,            12084,            14108,
+            16118,            18163,            20095,            22164,
+            24264,            26316,            28329,            30251,
+             1044,             2080,             3672,             5179,
+             7140,             9100,            11070,            13065,
+            15423,            17790,            19931,            22101,
+            24290,            26361,            28499,            30418,
+             1131,             2476,             4478,             6149,
+             7902,             9875,            11938,            13809,
+            15869,            17730,            19948,            21707,
+            23761,            25535,            27426,            28917,
+             1040,             2004,             4026,             6100,
+             8432,            10494,            12610,            14694,
+            16797,            18775,            20799,            22782,
+            24772,            26682,            28631,            30516,
+             2310,             3812,             5913,             7933,
+            10033,            11881,            13885,            15798,
+            17751,            19576,            21482,            23276,
+            25157,            27010,            28833,            30623,
+             1254,             2847,             5013,             6781,
+             8626,            10370,            12726,            14633,
+            16281,            17852,            19870,            21472,
+            23002,            24629,            26710,            27960,
+             1468,             3059,             4987,             7026,
+             8741,            10412,            12281,            14020,
+            15970,            17723,            19640,            21522,
+            23472,            25661,            27986,            30225,
+             2171,             3566,             5605,             7384,
+             9404,            11220,            13030,            14758,
+            16687,            18417,            20346,            22091,
+            24055,            26212,            28356,            30397,
+             2409,             4676,             7543,             9786,
+            11419,            12935,            14368,            15653,
+            17366,            18943,            20762,            22477,
+            24440,            26327,            28284,            30242,
+             2354,             4222,             6820,             9107,
+            11596,            13934,            15973,            17682,
+            19158,            20517,            21991,            23420,
+            25178,            26936,            28794,            30527,
+             1323,             2414,             4184,             6039,
+             7534,             9398,            11099,            13097,
+            14799,            16451,            18434,            20887,
+            23490,            25838,            28046,            30225,
+             1361,             3243,             6048,             8511,
+            11001,            13145,            15073,            16608,
+            18126,            19381,            20912,            22607,
+            24660,            26668,            28663,            30566,
+             1216,             2648,             5901,             8422,
+            10037,            11425,            12973,            14603,
+            16686,            18600,            20555,            22415,
+            24450,            26280,            28206,            30077,
+             2417,             4048,             6316,             8433,
+            10510,            12757,            15072,            17295,
+            19573,            21503,            23329,            24782,
+            26235,            27689,            29214,            30819,
+             1012,             2345,             4991,             7377,
+             9465,            11916,            14296,            16566,
+            18672,            20544,            22292,            23838,
+            25415,            27050,            28848,            30551,
+             1937,             3693,             6267,             8019,
+            10372,            12194,            14287,            15657,
+            17431,            18864,            20769,            22206,
+            24037,            25463,            27383,            28602,
+             1969,             3305,             5017,             6726,
+             8375,             9993,            11634,            13280,
+            15078,            16751,            18464,            20119,
+            21959,            23858,            26224,            29298,
+             1198,             2647,             5428,             7423,
+             9775,            12155,            14665,            16344,
+            18121,            19790,            21557,            22847,
+            24484,            25742,            27639,            28711,
+             1636,             3353,             5447,             7597,
+             9837,            11647,            13964,            16019,
+            17862,            20116,            22319,            24037,
+            25966,            28086,            29914,            31294,
+             2676,             4105,             6378,             8223,
+            10058,            11549,            13072,            14453,
+            15956,            17355,            18931,            20402,
+            22183,            23884,            25717,            27723,
+             1373,             2593,             4449,             5633,
+             7300,             8425,             9474,            10818,
+            12769,            15722,            19002,            21429,
+            23682,            25924,            28135,            30333,
+             1596,             3183,             5378,             7164,
+             8670,            10105,            11470,            12834,
+            13991,            15042,            16642,            17903,
+            20759,            25283,            27770,            30240,
+             2037,             3987,             6237,             8117,
+             9954,            12245,            14217,            15892,
+            17775,            20114,            22314,            25942,
+            26305,            26483,            26796,            28561,
+             2181,             3858,             5760,             7924,
+            10041,            11577,            13769,            15700,
+            17429,            19879,            23583,            24538,
+            25212,            25693,            28688,            30507,
+             1992,             3882,             6474,             7883,
+             9381,            12672,            14340,            15701,
+            16658,            17832,            20850,            22885,
+            24677,            26457,            28491,            30460,
+             2391,             3988,             5448,             7432,
+            11014,            12579,            13140,            14146,
+            15898,            18592,            21104,            22993,
+            24673,            27186,            28142,            29612,
+             1713,             5102,             6989,             7798,
+             8670,            10110,            12746,            14881,
+            16709,            18407,            20126,            22107,
+            24181,            26198,            28237,            30137,
+             1612,             3617,             6148,             8359,
+             9576,            11528,            14936,            17809,
+            18287,            18729,            19001,            21111,
+            24631,            26596,            28740,            30643,
+             2266,             4168,             7862,             9546,
+             9618,             9703,            10134,            13897,
+            16265,            18432,            20587,            22605,
+            24754,            26994,            29125,            30840,
+             1840,             3917,             6272,             7809,
+             9714,            11438,            13767,            15799,
+            19244,            21972,            22980,            23180,
+            23723,            25650,            29117,            31085,
+             1458,             3612,             6008,             7488,
+             9827,            11893,            14086,            15734,
+            17440,            19535,            22424,            24767,
+            29246,            29928,            30516,            30947,
+             -102,             -121,              -31,               -6,
+                5,               -2,                8,              -18,
+               -4,                6,               14,               -2,
+              -12,              -16,              -12,              -60,
+             -126,             -353,             -574,             -677,
+             -657,             -617,             -498,             -393,
+             -348,             -277,             -225,             -164,
+             -102,              -70,              -31,               33,
+                4,              379,              387,              551,
+              605,              620,              532,              482,
+              442,              454,              385,              347,
+              322,              299,              266,              200,
+             1168,              951,              672,              246,
+               60,             -161,             -259,             -234,
+             -253,             -282,             -203,             -187,
+             -155,             -176,             -198,             -178,
+               10,              170,              393,              609,
+              555,              208,             -330,             -571,
+             -769,             -633,             -319,              -43,
+               95,              105,              106,              116,
+             -152,             -140,             -125,                5,
+              173,              274,              264,              331,
+              -37,             -293,             -609,             -786,
+             -959,             -814,             -645,             -238,
+              -91,               36,              -11,             -101,
+             -279,             -227,              -40,               90,
+              530,              677,              890,             1104,
+              999,              835,              564,              295,
+             -280,             -364,             -340,             -331,
+             -284,              288,              761,              880,
+              988,              627,              146,             -226,
+             -203,             -181,             -142,               39,
+               24,              -26,             -107,              -92,
+             -161,             -135,             -131,              -88,
+             -160,             -156,              -75,              -43,
+              -36,               -6,              -33,               33,
+             -324,             -415,             -108,              124,
+              157,              191,              203,              197,
+              144,              109,              152,              176,
+              190,              122,              101,              159,
+              663,              668,              480,              400,
+              379,              444,              446,              458,
+              343,              351,              310,              228,
+              133,               44,               75,               63,
+              -84,               39,              -29,               35,
+              -94,             -233,             -261,             -354,
+               77,              262,              -24,             -145,
+             -333,             -409,             -404,             -597,
+             -488,             -300,              910,              592,
+              412,              120,              130,              -51,
+              -37,              -77,             -172,             -181,
+             -159,             -148,              -72,              -62,
+              510,              516,              113,             -585,
+            -1075,             -957,             -417,             -195,
+                9,                7,              -88,             -173,
+              -91,               54,               98,               95,
+              -28,              197,             -527,             -621,
+              157,              122,             -168,              147,
+              309,              300,              336,              315,
+              396,              408,              376,              106,
+             -162,             -170,             -315,               98,
+              821,              908,              570,              -33,
+             -312,             -568,             -572,             -378,
+             -107,               23,              156,               93,
+             -129,              -87,               20,              -72,
+              -37,               40,               21,               27,
+               48,               75,               77,               65,
+               46,               71,               66,               47,
+              136,              344,              236,              322,
+              170,              283,              269,              291,
+              162,              -43,             -204,             -259,
+             -240,             -305,             -350,             -312,
+              447,              348,              345,              257,
+               71,             -131,              -77,             -190,
+             -202,              -40,               35,              133,
+              261,              365,              438,              303,
+               -8,               22,              140,              137,
+             -300,             -641,             -764,             -268,
+              -23,              -25,               73,             -162,
+             -150,             -212,              -72,                6,
+               39,               78,              104,              -93,
+             -308,             -136,              117,              -71,
+             -513,             -820,             -700,             -450,
+             -161,              -23,               29,               78,
+              337,              106,             -406,             -782,
+             -112,              233,              383,               62,
+             -126,                6,              -77,              -29,
+             -146,             -123,              -51,              -27,
+              -27,             -381,             -641,              402,
+              539,                8,             -207,             -366,
+              -36,              -27,             -204,             -227,
+             -237,             -189,              -64,               51,
+              -92,             -137,             -281,               62,
+              233,               92,              148,              294,
+              363,              416,              564,              625,
+              370,              -36,             -469,             -462,
+              102,              168,               32,              117,
+              -21,               97,              139,               89,
+              104,               35,                4,               82,
+               66,               58,               73,               93,
+              -76,             -320,             -236,             -189,
+             -203,             -142,              -27,              -73,
+                9,               -9,              -25,               12,
+              -15,                4,                4,              -50,
+              314,              180,              162,              -49,
+              199,             -108,             -227,              -66,
+             -447,              -67,             -264,             -394,
+                5,               55,             -133,             -176,
+             -116,             -241,              272,              109,
+              282,              262,              192,              -64,
+             -392,             -514,              156,              203,
+              154,               72,              -34,             -160,
+              -73,                3,              -33,             -431,
+              321,               18,             -567,             -590,
+             -108,               88,               66,               51,
+              -31,             -193,              -46,               65,
+              -29,              -23,              215,              -31,
+              101,             -113,               32,              304,
+               88,              320,              448,                5,
+             -439,             -562,             -508,             -135,
+              -13,             -171,               -8,              182,
+              -99,             -181,             -149,              376,
+              476,               64,             -396,             -652,
+             -150,              176,              222,               65,
+             -590,              719,              271,              399,
+              245,               72,             -156,             -152,
+             -176,               59,               94,              125,
+               -9,               -7,                9,                1,
+              -61,             -116,              -82,                1,
+               79,               22,              -44,              -15,
+              -48,              -65,              -62,             -101,
+             -102,              -54,              -70,              -78,
+              -80,              -25,              398,               71,
+              139,               38,               90,              194,
+              222,              249,              165,               94,
+              221,              262,              163,               91,
+             -206,              573,              200,             -287,
+             -147,                5,              -18,              -85,
+              -74,             -125,              -87,               85,
+              141,                4,               -4,               28,
+              234,               48,             -150,             -111,
+             -506,              237,             -209,              345,
+               94,             -124,               77,              121,
+              143,               12,              -80,              -48,
+              191,              144,              -93,              -65,
+             -151,             -643,              435,              106,
+               87,                7,               65,              102,
+               94,               68,                5,               99,
+              222,               93,               94,              355,
+              -13,              -89,             -228,             -503,
+              287,              109,              108,              449,
+              253,              -29,             -109,             -116,
+               15,              -73,              -20,              131,
+             -147,               72,               59,             -150,
+             -594,              273,              316,              132,
+              199,              106,              198,              212,
+              220,               82,               45,              -13,
+              223,              137,              270,               38,
+              252,              135,             -177,             -207,
+             -360,             -102,              403,              406,
+              -14,               83,               64,               51,
+               -7,              -99,              -97,              -88,
+             -124,              -65,               42,               32,
+               28,               29,               12,               20,
+              119,              -26,             -212,             -201,
+              373,              251,              141,              103,
+               36,              -52,               66,               18,
+               -6,              -95,             -196,                5,
+               98,              -85,             -108,              218,
+             -164,               20,              356,              172,
+               37,              266,               23,              112,
+              -24,              -99,              -92,             -178,
+               29,             -278,              388,              -60,
+             -220,              300,              -13,              154,
+              191,               15,              -37,             -110,
+             -153,             -150,             -114,               -7,
+              -94,              -31,              -62,             -177,
+                4,              -70,               35,              453,
+              147,             -247,             -328,              101,
+               20,             -114,              147,              108,
+             -119,             -109,             -102,             -238,
+               55,             -102,              173,              -89,
+              129,              138,             -330,             -160,
+              485,              154,              -59,             -170,
+              -20,              -34,             -261,              -40,
+             -129,               77,              -84,               69,
+               83,              160,              169,               63,
+             -516,               30,              336,               52,
+               -0,              -52,             -124,              158,
+               19,              197,              -10,             -375,
+              405,              285,              114,             -395,
+              -47,              196,               62,               87,
+             -106,              -65,              -75,              -69,
+              -13,               34,               99,               59,
+               83,               98,               44,                0,
+               24,               18,               17,               70,
+              -22,              194,              208,              144,
+              -79,              -15,               32,             -104,
+              -28,             -105,             -186,             -212,
+             -228,              -79,              -76,               51,
+              -71,               72,              118,              -34,
+               -3,             -171,                5,                2,
+             -108,             -125,               62,              -58,
+               58,             -121,               73,             -466,
+               92,               63,              -94,              -78,
+              -76,              212,               36,             -225,
+              -71,             -354,              152,              143,
+              -79,             -246,              -51,              -31,
+               -6,             -270,              240,              210,
+               30,             -157,             -231,               74,
+             -146,               88,             -273,              156,
+               92,               56,               71,                2,
+              318,              164,               32,             -110,
+              -35,              -41,              -95,             -106,
+               11,              132,              -68,               55,
+              123,              -83,             -149,              212,
+              132,                0,             -194,               55,
+              206,             -108,             -353,              289,
+             -195,                1,              233,              -22,
+              -60,               20,               26,               68,
+              166,               27,              -58,              130,
+              112,              107,               27,             -165,
+              115,              -93,              -37,               38,
+               83,              483,               65,             -229,
+              -13,              157,               85,               50,
+              136,               10,               32,               83,
+               82,               55,                5,               -9,
+              -52,              -78,              -81,              -51,
+               40,               18,             -127,             -224,
+              -41,               53,             -210,             -113,
+               24,              -17,             -187,              -89,
+                8,              121,               83,               77,
+               91,              -74,              -35,             -112,
+             -161,             -173,              102,              132,
+             -125,              -61,              103,             -260,
+               52,              166,              -32,             -156,
+              -87,              -56,               60,              -70,
+             -124,              242,              114,             -251,
+             -166,              201,              127,               28,
+              -11,               23,              -80,             -115,
+              -20,              -51,             -348,              340,
+              -34,              133,               13,               92,
+             -124,             -136,             -120,              -26,
+               -6,               17,               28,               21,
+              120,             -168,              160,              -35,
+              115,               28,                9,                7,
+              -56,               39,              156,              256,
+              -18,                1,              277,               82,
+              -70,             -144,              -88,              -13,
+              -59,             -157,                8,             -134,
+               21,              -40,               58,              -21,
+              194,             -276,               97,              279,
+              -56,             -140,              125,               57,
+             -184,             -204,              -70,               -2,
+              128,             -202,              -78,              230,
+              -23,              161,             -102,                1,
+                1,              180,              -31,              -86,
+             -167,              -57,              -60,               27,
+              -13,               99,              108,              111,
+               76,               69,               34,              -21,
+               53,               38,               34,               78,
+               73,              219,               51,               15,
+              -72,             -103,             -207,               30,
+              213,              -14,               31,              -94,
+              -40,             -144,               67,                4,
+              105,               59,             -240,               25,
+              244,               69,               58,               23,
+              -24,               -5,              -15,             -133,
+              -71,              -67,              181,               29,
+              -45,              121,               96,               51,
+              -72,              -53,               56,             -153,
+              -27,               85,              183,              211,
+              105,              -34,              -46,               43,
+              -72,              -93,               36,             -128,
+               29,              111,              -95,             -156,
+             -179,             -235,               21,              -39,
+              -71,              -33,              -61,             -252,
+              230,             -131,              157,              -21,
+              -85,              -28,             -123,               80,
+             -160,               63,               47,               -6,
+              -49,              -96,              -19,               17,
+              -58,               17,               -0,              -13,
+             -170,               25,              -35,               59,
+               10,              -31,             -413,               81,
+               62,               18,             -164,              245,
+               92,             -165,               42,               26,
+              126,             -248,              193,              -55,
+               16,               39,               14,               50
+};
+
+const SKP_Silk_NLSF_CBS SKP_Silk_NLSF_CB1_16_Stage_info[ NLSF_MSVQ_CB1_16_STAGES ] =
+{
+        {  32, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *   0 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[   0 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  32 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  32 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  40 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  40 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  48 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  48 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  56 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  56 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  64 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  64 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  72 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  72 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  80 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  80 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  88 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  88 ] },
+        {   8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 *  96 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[  96 ] }
+};
+
+const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB1_16 =
+{
+        NLSF_MSVQ_CB1_16_STAGES,
+        SKP_Silk_NLSF_CB1_16_Stage_info,
+        SKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min_Q15,
+        SKP_Silk_NLSF_MSVQ_CB1_16_CDF,
+        SKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr,
+        SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx
+};
+
--- /dev/null
+++ b/src_common/SKP_Silk_tables_NLSF_CB1_16.h
@@ -1,0 +1,51 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#ifndef SKP_SILK_TABLES_NLSF_CB1_16_H
+#define SKP_SILK_TABLES_NLSF_CB1_16_H
+
+#include "SKP_Silk_define.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define NLSF_MSVQ_CB1_16_STAGES       10
+#define NLSF_MSVQ_CB1_16_VECTORS      104
+
+/* NLSF codebook entropy coding tables */
+extern const SKP_uint16         SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ NLSF_MSVQ_CB1_16_VECTORS + NLSF_MSVQ_CB1_16_STAGES ];
+extern const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB1_16_CDF_start_ptr[                  NLSF_MSVQ_CB1_16_STAGES ];
+extern const SKP_int            SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx[                 NLSF_MSVQ_CB1_16_STAGES ];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
--- /dev/null
+++ b/src_common/SKP_Silk_tables_gain.c
@@ -1,0 +1,77 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_tables.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+const SKP_uint16 SKP_Silk_gain_CDF[ 2 ][ 65 ] = 
+{
+{
+         0,     18,     45,     94,    181,    320,    519,    777,
+      1093,   1468,   1909,   2417,   2997,   3657,   4404,   5245,
+      6185,   7228,   8384,   9664,  11069,  12596,  14244,  16022,
+     17937,  19979,  22121,  24345,  26646,  29021,  31454,  33927,
+     36438,  38982,  41538,  44068,  46532,  48904,  51160,  53265,
+     55184,  56904,  58422,  59739,  60858,  61793,  62568,  63210,
+     63738,  64165,  64504,  64769,  64976,  65133,  65249,  65330,
+     65386,  65424,  65451,  65471,  65487,  65501,  65513,  65524,
+     65535
+},
+{
+         0,    214,    581,   1261,   2376,   3920,   5742,   7632,
+      9449,  11157,  12780,  14352,  15897,  17427,  18949,  20462,
+     21957,  23430,  24889,  26342,  27780,  29191,  30575,  31952,
+     33345,  34763,  36200,  37642,  39083,  40519,  41930,  43291,
+     44602,  45885,  47154,  48402,  49619,  50805,  51959,  53069,
+     54127,  55140,  56128,  57101,  58056,  58979,  59859,  60692,
+     61468,  62177,  62812,  63368,  63845,  64242,  64563,  64818,
+     65023,  65184,  65306,  65391,  65447,  65482,  65505,  65521,
+     65535
+}
+};
+
+const SKP_int SKP_Silk_gain_CDF_offset = 32;
+
+
+const SKP_uint16 SKP_Silk_delta_gain_CDF[ 46 ] = {
+         0,   2358,   3856,   7023,  15376,  53058,  59135,  61555,
+     62784,  63498,  63949,  64265,  64478,  64647,  64783,  64894,
+     64986,  65052,  65113,  65169,  65213,  65252,  65284,  65314,
+     65338,  65359,  65377,  65392,  65403,  65415,  65424,  65432,
+     65440,  65448,  65455,  65462,  65470,  65477,  65484,  65491,
+     65499,  65506,  65513,  65521,  65528,  65535
+};
+
+const SKP_int SKP_Silk_delta_gain_CDF_offset = 5;
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null
+++ b/src_common/SKP_Silk_tables_other.c
@@ -1,0 +1,152 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_structs.h"
+#include "SKP_Silk_define.h"
+#include "SKP_Silk_tables.h"
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* Piece-wise linear mapping from bitrate in kbps to coding quality in dB SNR */
+const SKP_int32 TargetRate_table_NB[ TARGET_RATE_TAB_SZ ] = {
+    0,      8000,   9000,   11000,  13000,  16000,  22000,  100000
+};
+const SKP_int32 TargetRate_table_MB[ TARGET_RATE_TAB_SZ ] = {
+    0,      10000,  12000,  14000,  17000,  21000,  28000,  100000
+};
+const SKP_int32 TargetRate_table_WB[ TARGET_RATE_TAB_SZ ] = {
+    0,      11000,  14000,  17000,  21000,  26000,  36000,  100000
+};
+const SKP_int32 TargetRate_table_SWB[ TARGET_RATE_TAB_SZ ] = {
+    0,      13000,  16000,  19000,  25000,  32000,  46000,  100000
+};
+const SKP_int32 SNR_table_Q1[ TARGET_RATE_TAB_SZ ] = {
+    19,     31,     35,     39,     43,     47,     54,     59
+};
+
+const SKP_int32 SNR_table_one_bit_per_sample_Q7[ 4 ] = {
+    1984,   2240,   2408,   2708
+};
+
+/* Filter coeficicnts for HP filter: 4. Order filter implementad as two biquad filters  */
+const SKP_int16 SKP_Silk_SWB_detect_B_HP_Q13[ NB_SOS ][ 3 ] = {
+    //{400, -550, 400}, {400, 130, 400}, {400, 390, 400}
+    {575, -948, 575}, {575, -221, 575}, {575, 104, 575} 
+};
+const SKP_int16 SKP_Silk_SWB_detect_A_HP_Q13[ NB_SOS ][ 2 ] = {
+    {14613, 6868}, {12883, 7337}, {11586, 7911}
+    //{14880, 6900}, {14400, 7300}, {13700, 7800}
+};
+
+/* Decoder high-pass filter coefficients for 24 kHz sampling, -6 dB @ 44 Hz */
+const SKP_int16 SKP_Silk_Dec_A_HP_24[ DEC_HP_ORDER     ] = {-16220, 8030};              // second order AR coefs, Q13
+const SKP_int16 SKP_Silk_Dec_B_HP_24[ DEC_HP_ORDER + 1 ] = {8000, -16000, 8000};        // second order MA coefs, Q13
+
+/* Decoder high-pass filter coefficients for 16 kHz sampling, - 6 dB @ 46 Hz */
+const SKP_int16 SKP_Silk_Dec_A_HP_16[ DEC_HP_ORDER     ] = {-16127, 7940};              // second order AR coefs, Q13
+const SKP_int16 SKP_Silk_Dec_B_HP_16[ DEC_HP_ORDER + 1 ] = {8000, -16000, 8000};        // second order MA coefs, Q13
+
+/* Decoder high-pass filter coefficients for 12 kHz sampling, -6 dB @ 44 Hz */
+const SKP_int16 SKP_Silk_Dec_A_HP_12[ DEC_HP_ORDER     ] = {-16043, 7859};              // second order AR coefs, Q13
+const SKP_int16 SKP_Silk_Dec_B_HP_12[ DEC_HP_ORDER + 1 ] = {8000, -16000, 8000};        // second order MA coefs, Q13
+
+/* Decoder high-pass filter coefficients for 8 kHz sampling, -6 dB @ 43 Hz */
+const SKP_int16 SKP_Silk_Dec_A_HP_8[ DEC_HP_ORDER     ] = {-15885, 7710};               // second order AR coefs, Q13
+const SKP_int16 SKP_Silk_Dec_B_HP_8[ DEC_HP_ORDER + 1 ] = {8000, -16000, 8000};         // second order MA coefs, Q13
+
+/* table for LSB coding */
+const SKP_uint16 SKP_Silk_lsb_CDF[ 3 ] = {0,  40000,  65535};
+
+/* tables for LTPScale */
+const SKP_uint16 SKP_Silk_LTPscale_CDF[ 4 ] = {0,  32000,  48000,  65535};
+const SKP_int    SKP_Silk_LTPscale_offset   = 2;
+
+/* tables for VAD flag */
+const SKP_uint16 SKP_Silk_vadflag_CDF[ 3 ] = {0,  22000,  65535}; // 66% for speech, 33% for no speech
+const SKP_int    SKP_Silk_vadflag_offset   = 1;
+
+/* tables for sampling rate */
+const SKP_int    SKP_Silk_SamplingRates_table[ 4 ] = {8, 12, 16, 24};
+const SKP_uint16 SKP_Silk_SamplingRates_CDF[ 5 ]   = {0,  16000,  32000,  48000,  65535};
+const SKP_int    SKP_Silk_SamplingRates_offset     = 2;
+
+/* tables for number of subframes */
+const SKP_uint16 SKP_Silk_NbSubframes_CDF[ 3 ]   = {0,  40000, 65535};
+const SKP_int    SKP_Silk_NbSubframes_offset     = 1;
+
+/* tables for NLSF interpolation factor */
+const SKP_uint16 SKP_Silk_NLSF_interpolation_factor_CDF[ 6 ] = {0,   3706,   8703,  19226,  30926,  65535};
+const SKP_int    SKP_Silk_NLSF_interpolation_factor_offset   = 4;
+
+/* Table for frame termination indication */
+const SKP_uint16 SKP_Silk_FrameTermination_v4_CDF[ 6 ] = {0,   13107,   26214,   39321,   52428,   65535};
+const SKP_int    SKP_Silk_FrameTermination_v4_offset   = 4;
+
+/* Table for random seed */
+const SKP_uint16 SKP_Silk_Seed_CDF[ 5 ] = {0, 16384, 32768, 49152, 65535};
+const SKP_int    SKP_Silk_Seed_offset   = 2;
+
+/* Quantization offsets */
+const SKP_int16  SKP_Silk_Quantization_Offsets_Q10[ 2 ][ 2 ] = {
+    { OFFSET_VL_Q10, OFFSET_VH_Q10 }, { OFFSET_UVL_Q10, OFFSET_UVH_Q10 }
+};
+
+/* Table for LTPScale */
+const SKP_int16 SKP_Silk_LTPScales_table_Q14[ 3 ] = { 15565, 11469, 8192 };
+
+#if SWITCH_TRANSITION_FILTERING
+/*  Elliptic/Cauer filters designed with 0.1 dB passband ripple, 
+        80 dB minimum stopband attenuation, and
+        [0.95 : 0.15 : 0.35] normalized cut off frequencies. */
+
+/* Interpolation points for filter coefficients used in the bandwidth transition smoother */
+const SKP_int32 SKP_Silk_Transition_LP_B_Q28[ TRANSITION_INT_NUM ][ TRANSITION_NB ] = 
+{
+{    250767114,  501534038,  250767114  },
+{    209867381,  419732057,  209867381  },
+{    170987846,  341967853,  170987846  },
+{    131531482,  263046905,  131531482  },
+{     89306658,  178584282,   89306658  }
+};
+
+/* Interpolation points for filter coefficients used in the bandwidth transition smoother */
+const SKP_int32 SKP_Silk_Transition_LP_A_Q28[ TRANSITION_INT_NUM ][ TRANSITION_NA ] = 
+{
+{    506393414,  239854379  },
+{    411067935,  169683996  },
+{    306733530,  116694253  },
+{    185807084,   77959395  },
+{     35497197,   57401098  }
+};
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
--- /dev/null
+++ b/src_common/SKP_Silk_tables_pitch_lag.c
@@ -1,0 +1,199 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_tables.h"
+
+const SKP_uint16 SKP_Silk_pitch_lag_NB_CDF[ 8 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ] = {
+         0,    194,    395,    608,    841,   1099,   1391,   1724,
+      2105,   2544,   3047,   3624,   4282,   5027,   5865,   6799,
+      7833,   8965,  10193,  11510,  12910,  14379,  15905,  17473,
+     19065,  20664,  22252,  23814,  25335,  26802,  28206,  29541,
+     30803,  31992,  33110,  34163,  35156,  36098,  36997,  37861,
+     38698,  39515,  40319,  41115,  41906,  42696,  43485,  44273,
+     45061,  45847,  46630,  47406,  48175,  48933,  49679,  50411,
+     51126,  51824,  52502,  53161,  53799,  54416,  55011,  55584,
+     56136,  56666,  57174,  57661,  58126,  58570,  58993,  59394,
+     59775,  60134,  60472,  60790,  61087,  61363,  61620,  61856,
+     62075,  62275,  62458,  62625,  62778,  62918,  63045,  63162,
+     63269,  63368,  63459,  63544,  63623,  63698,  63769,  63836,
+     63901,  63963,  64023,  64081,  64138,  64194,  64248,  64301,
+     64354,  64406,  64457,  64508,  64558,  64608,  64657,  64706,
+     64754,  64803,  64851,  64899,  64946,  64994,  65041,  65088,
+     65135,  65181,  65227,  65272,  65317,  65361,  65405,  65449,
+     65492,  65535
+};
+
+const SKP_int SKP_Silk_pitch_lag_NB_CDF_offset = 43;
+
+const SKP_uint16 SKP_Silk_pitch_contour_NB_CDF[ 12 ] = {
+         0,  14445,  18587,  25628,  30013,  34859,  40597,  48426,
+     54460,  59033,  62990,  65535
+};
+
+const SKP_int SKP_Silk_pitch_contour_NB_CDF_offset = 5;
+
+const SKP_uint16 SKP_Silk_pitch_lag_MB_CDF[ 12 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ] = {
+         0,    132,    266,    402,    542,    686,    838,    997,
+      1167,   1349,   1546,   1760,   1993,   2248,   2528,   2835,
+      3173,   3544,   3951,   4397,   4882,   5411,   5984,   6604,
+      7270,   7984,   8745,   9552,  10405,  11300,  12235,  13206,
+     14209,  15239,  16289,  17355,  18430,  19507,  20579,  21642,
+     22688,  23712,  24710,  25677,  26610,  27507,  28366,  29188,
+     29971,  30717,  31427,  32104,  32751,  33370,  33964,  34537,
+     35091,  35630,  36157,  36675,  37186,  37692,  38195,  38697,
+     39199,  39701,  40206,  40713,  41222,  41733,  42247,  42761,
+     43277,  43793,  44309,  44824,  45336,  45845,  46351,  46851,
+     47347,  47836,  48319,  48795,  49264,  49724,  50177,  50621,
+     51057,  51484,  51902,  52312,  52714,  53106,  53490,  53866,
+     54233,  54592,  54942,  55284,  55618,  55944,  56261,  56571,
+     56873,  57167,  57453,  57731,  58001,  58263,  58516,  58762,
+     58998,  59226,  59446,  59656,  59857,  60050,  60233,  60408,
+     60574,  60732,  60882,  61024,  61159,  61288,  61410,  61526,
+     61636,  61742,  61843,  61940,  62033,  62123,  62210,  62293,
+     62374,  62452,  62528,  62602,  62674,  62744,  62812,  62879,
+     62945,  63009,  63072,  63135,  63196,  63256,  63316,  63375,
+     63434,  63491,  63549,  63605,  63661,  63717,  63772,  63827,
+     63881,  63935,  63988,  64041,  64094,  64147,  64199,  64252,
+     64304,  64356,  64409,  64461,  64513,  64565,  64617,  64669,
+     64721,  64773,  64824,  64875,  64925,  64975,  65024,  65072,
+     65121,  65168,  65215,  65262,  65308,  65354,  65399,  65445,
+     65490,  65535
+};
+
+const SKP_int SKP_Silk_pitch_lag_MB_CDF_offset = 64;
+
+const SKP_uint16 SKP_Silk_pitch_lag_WB_CDF[ 16 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ] = {
+         0,    106,    213,    321,    429,    539,    651,    766,
+       884,   1005,   1132,   1264,   1403,   1549,   1705,   1870,
+      2047,   2236,   2439,   2658,   2893,   3147,   3420,   3714,
+      4030,   4370,   4736,   5127,   5546,   5993,   6470,   6978,
+      7516,   8086,   8687,   9320,   9985,  10680,  11405,  12158,
+     12938,  13744,  14572,  15420,  16286,  17166,  18057,  18955,
+     19857,  20759,  21657,  22547,  23427,  24293,  25141,  25969,
+     26774,  27555,  28310,  29037,  29736,  30406,  31048,  31662,
+     32248,  32808,  33343,  33855,  34345,  34815,  35268,  35704,
+     36127,  36537,  36938,  37330,  37715,  38095,  38471,  38844,
+     39216,  39588,  39959,  40332,  40707,  41084,  41463,  41844,
+     42229,  42615,  43005,  43397,  43791,  44186,  44583,  44982,
+     45381,  45780,  46179,  46578,  46975,  47371,  47765,  48156,
+     48545,  48930,  49312,  49690,  50064,  50433,  50798,  51158,
+     51513,  51862,  52206,  52544,  52877,  53204,  53526,  53842,
+     54152,  54457,  54756,  55050,  55338,  55621,  55898,  56170,
+     56436,  56697,  56953,  57204,  57449,  57689,  57924,  58154,
+     58378,  58598,  58812,  59022,  59226,  59426,  59620,  59810,
+     59994,  60173,  60348,  60517,  60681,  60840,  60993,  61141,
+     61284,  61421,  61553,  61679,  61800,  61916,  62026,  62131,
+     62231,  62326,  62417,  62503,  62585,  62663,  62737,  62807,
+     62874,  62938,  62999,  63057,  63113,  63166,  63217,  63266,
+     63314,  63359,  63404,  63446,  63488,  63528,  63567,  63605,
+     63642,  63678,  63713,  63748,  63781,  63815,  63847,  63879,
+     63911,  63942,  63973,  64003,  64033,  64063,  64092,  64121,
+     64150,  64179,  64207,  64235,  64263,  64291,  64319,  64347,
+     64374,  64401,  64428,  64455,  64481,  64508,  64534,  64560,
+     64585,  64610,  64635,  64660,  64685,  64710,  64734,  64758,
+     64782,  64807,  64831,  64855,  64878,  64902,  64926,  64950,
+     64974,  64998,  65022,  65045,  65069,  65093,  65116,  65139,
+     65163,  65186,  65209,  65231,  65254,  65276,  65299,  65321,
+     65343,  65364,  65386,  65408,  65429,  65450,  65471,  65493,
+     65514,  65535
+};
+
+const SKP_int SKP_Silk_pitch_lag_WB_CDF_offset = 86;
+
+
+const SKP_uint16 SKP_Silk_pitch_lag_SWB_CDF[ 24 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) + 2 ] = {
+         0,    253,    505,    757,   1008,   1258,   1507,   1755,
+      2003,   2249,   2494,   2738,   2982,   3225,   3469,   3713,
+      3957,   4202,   4449,   4698,   4949,   5203,   5460,   5720,
+      5983,   6251,   6522,   6798,   7077,   7361,   7650,   7942,
+      8238,   8539,   8843,   9150,   9461,   9775,  10092,  10411,
+     10733,  11057,  11383,  11710,  12039,  12370,  12701,  13034,
+     13368,  13703,  14040,  14377,  14716,  15056,  15398,  15742,
+     16087,  16435,  16785,  17137,  17492,  17850,  18212,  18577,
+     18946,  19318,  19695,  20075,  20460,  20849,  21243,  21640,
+     22041,  22447,  22856,  23269,  23684,  24103,  24524,  24947,
+     25372,  25798,  26225,  26652,  27079,  27504,  27929,  28352,
+     28773,  29191,  29606,  30018,  30427,  30831,  31231,  31627,
+     32018,  32404,  32786,  33163,  33535,  33902,  34264,  34621,
+     34973,  35320,  35663,  36000,  36333,  36662,  36985,  37304,
+     37619,  37929,  38234,  38535,  38831,  39122,  39409,  39692,
+     39970,  40244,  40513,  40778,  41039,  41295,  41548,  41796,
+     42041,  42282,  42520,  42754,  42985,  43213,  43438,  43660,
+     43880,  44097,  44312,  44525,  44736,  44945,  45153,  45359,
+     45565,  45769,  45972,  46175,  46377,  46578,  46780,  46981,
+     47182,  47383,  47585,  47787,  47989,  48192,  48395,  48599,
+     48804,  49009,  49215,  49422,  49630,  49839,  50049,  50259,
+     50470,  50682,  50894,  51107,  51320,  51533,  51747,  51961,
+     52175,  52388,  52601,  52813,  53025,  53236,  53446,  53655,
+     53863,  54069,  54274,  54477,  54679,  54879,  55078,  55274,
+     55469,  55662,  55853,  56042,  56230,  56415,  56598,  56779,
+     56959,  57136,  57311,  57484,  57654,  57823,  57989,  58152,
+     58314,  58473,  58629,  58783,  58935,  59084,  59230,  59373,
+     59514,  59652,  59787,  59919,  60048,  60174,  60297,  60417,
+     60533,  60647,  60757,  60865,  60969,  61070,  61167,  61262,
+     61353,  61442,  61527,  61609,  61689,  61765,  61839,  61910,
+     61979,  62045,  62109,  62170,  62230,  62287,  62343,  62396,
+     62448,  62498,  62547,  62594,  62640,  62685,  62728,  62770,
+     62811,  62852,  62891,  62929,  62967,  63004,  63040,  63075,
+     63110,  63145,  63178,  63212,  63244,  63277,  63308,  63340,
+     63371,  63402,  63432,  63462,  63491,  63521,  63550,  63578,
+     63607,  63635,  63663,  63690,  63718,  63744,  63771,  63798,
+     63824,  63850,  63875,  63900,  63925,  63950,  63975,  63999,
+     64023,  64046,  64069,  64092,  64115,  64138,  64160,  64182,
+     64204,  64225,  64247,  64268,  64289,  64310,  64330,  64351,
+     64371,  64391,  64411,  64431,  64450,  64470,  64489,  64508,
+     64527,  64545,  64564,  64582,  64600,  64617,  64635,  64652,
+     64669,  64686,  64702,  64719,  64735,  64750,  64766,  64782,
+     64797,  64812,  64827,  64842,  64857,  64872,  64886,  64901,
+     64915,  64930,  64944,  64959,  64974,  64988,  65003,  65018,
+     65033,  65048,  65063,  65078,  65094,  65109,  65125,  65141,
+     65157,  65172,  65188,  65204,  65220,  65236,  65252,  65268,
+     65283,  65299,  65314,  65330,  65345,  65360,  65375,  65390,
+     65405,  65419,  65434,  65449,  65463,  65477,  65492,  65506,
+     65521,  65535
+};
+
+const SKP_int SKP_Silk_pitch_lag_SWB_CDF_offset = 128;
+
+
+const SKP_uint16 SKP_Silk_pitch_contour_CDF[ 35 ] = {
+         0,    372,    843,   1315,   1836,   2644,   3576,   4719,
+      6088,   7621,   9396,  11509,  14245,  17618,  20777,  24294,
+     27992,  33116,  40100,  44329,  47558,  50679,  53130,  55557,
+     57510,  59022,  60285,  61345,  62316,  63140,  63762,  64321,
+     64729,  65099,  65535
+};
+
+const SKP_int SKP_Silk_pitch_contour_CDF_offset = 17;
+
+const SKP_uint16 SKP_Silk_pitch_delta_CDF[23] = {
+         0,    343,    740,   1249,   1889,   2733,   3861,   5396,
+      7552,  10890,  16053,  24152,  30220,  34680,  37973,  40405,
+     42243,  43708,  44823,  45773,  46462,  47055,  65535
+};
+
+const SKP_int SKP_Silk_pitch_delta_CDF_offset = 11;
--- /dev/null
+++ b/src_common/SKP_Silk_tables_pulses_per_block.c
@@ -1,0 +1,235 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_tables.h"
+
+const SKP_int SKP_Silk_max_pulses_table[ 4 ] = {
+         6,      8,     12,     18
+};
+
+const SKP_uint16 SKP_Silk_pulses_per_block_CDF[ 10 ][ 21 ] = 
+{
+{
+         0,  47113,  61501,  64590,  65125,  65277,  65352,  65407,
+     65450,  65474,  65488,  65501,  65508,  65514,  65516,  65520,
+     65521,  65523,  65524,  65526,  65535
+},
+{
+         0,  26368,  47760,  58803,  63085,  64567,  65113,  65333,
+     65424,  65474,  65498,  65511,  65517,  65520,  65523,  65525,
+     65526,  65528,  65529,  65530,  65535
+},
+{
+         0,   9601,  28014,  45877,  57210,  62560,  64611,  65260,
+     65447,  65500,  65511,  65519,  65521,  65525,  65526,  65529,
+     65530,  65531,  65532,  65534,  65535
+},
+{
+         0,   3351,  12462,  25972,  39782,  50686,  57644,  61525,
+     63521,  64506,  65009,  65255,  65375,  65441,  65471,  65488,
+     65497,  65505,  65509,  65512,  65535
+},
+{
+         0,    488,   2944,   9295,  19712,  32160,  43976,  53121,
+     59144,  62518,  64213,  65016,  65346,  65470,  65511,  65515,
+     65525,  65529,  65531,  65534,  65535
+},
+{
+         0,  17013,  30405,  40812,  48142,  53466,  57166,  59845,
+     61650,  62873,  63684,  64223,  64575,  64811,  64959,  65051,
+     65111,  65143,  65165,  65183,  65535
+},
+{
+         0,   2994,   8323,  15845,  24196,  32300,  39340,  45140,
+     49813,  53474,  56349,  58518,  60167,  61397,  62313,  62969,
+     63410,  63715,  63906,  64056,  65535
+},
+{
+         0,     88,    721,   2795,   7542,  14888,  24420,  34593,
+     43912,  51484,  56962,  60558,  62760,  64037,  64716,  65069,
+     65262,  65358,  65398,  65420,  65535
+},
+{
+         0,    287,    789,   2064,   4398,   8174,  13534,  20151,
+     27347,  34533,  41295,  47242,  52070,  55772,  58458,  60381,
+     61679,  62533,  63109,  63519,  65535
+},
+{
+         0,      1,      3,     91,   4521,  14708,  28329,  41955,
+     52116,  58375,  61729,  63534,  64459,  64924,  65092,  65164,
+     65182,  65198,  65203,  65211,  65535
+}
+};
+
+const SKP_int SKP_Silk_pulses_per_block_CDF_offset = 6;
+
+
+const SKP_int16 SKP_Silk_pulses_per_block_BITS_Q6[ 9 ][ 20 ] = 
+{
+{
+        30,    140,    282,    444,    560,    625,    654,    677,
+       731,    780,    787,    844,    859,    960,    896,   1024,
+       960,   1024,    960,    821
+},
+{
+        84,    103,    164,    252,    350,    442,    526,    607,
+       663,    731,    787,    859,    923,    923,    960,   1024,
+       960,   1024,   1024,    875
+},
+{
+       177,    117,    120,    162,    231,    320,    426,    541,
+       657,    803,    832,    960,    896,   1024,    923,   1024,
+      1024,   1024,    960,   1024
+},
+{
+       275,    182,    146,    144,    166,    207,    261,    322,
+       388,    450,    516,    582,    637,    710,    762,    821,
+       832,    896,    923,    734
+},
+{
+       452,    303,    216,    170,    153,    158,    182,    220,
+       274,    337,    406,    489,    579,    681,    896,    811,
+       896,    960,    923,   1024
+},
+{
+       125,    147,    170,    202,    232,    265,    295,    332,
+       368,    406,    443,    483,    520,    563,    606,    646,
+       704,    739,    757,    483
+},
+{
+       285,    232,    200,    190,    193,    206,    224,    244,
+       266,    289,    315,    340,    367,    394,    425,    462,
+       496,    539,    561,    350
+},
+{
+       611,    428,    319,    242,    202,    178,    172,    180,
+       199,    229,    268,    313,    364,    422,    482,    538,
+       603,    683,    739,    586
+},
+{
+       501,    450,    364,    308,    264,    231,    212,    204,
+       204,    210,    222,    241,    265,    295,    326,    362,
+       401,    437,    469,    321
+}
+};
+
+const SKP_uint16 SKP_Silk_rate_levels_CDF[ 2 ][ 10 ] = 
+{
+{
+         0,   2005,  12717,  20281,  31328,  36234,  45816,  57753,
+     63104,  65535
+},
+{
+         0,   8553,  23489,  36031,  46295,  53519,  56519,  59151,
+     64185,  65535
+}
+};
+
+const SKP_int SKP_Silk_rate_levels_CDF_offset = 4;
+
+
+const SKP_int16 SKP_Silk_rate_levels_BITS_Q6[ 2 ][ 9 ] = 
+{
+{
+       322,    167,    199,    164,    239,    178,    157,    231,
+       304
+},
+{
+       188,    137,    153,    171,    204,    285,    297,    237,
+       358
+}
+};
+
+const SKP_uint16 SKP_Silk_shell_code_table0[ 33 ] = {
+         0,  32748,  65535,      0,   9505,  56230,  65535,      0,
+      4093,  32204,  61720,  65535,      0,   2285,  16207,  48750,
+     63424,  65535,      0,   1709,   9446,  32026,  55752,  63876,
+     65535,      0,   1623,   6986,  21845,  45381,  59147,  64186,
+     65535
+};
+
+const SKP_uint16 SKP_Silk_shell_code_table1[ 52 ] = {
+         0,  32691,  65535,      0,  12782,  52752,  65535,      0,
+      4847,  32665,  60899,  65535,      0,   2500,  17305,  47989,
+     63369,  65535,      0,   1843,  10329,  32419,  55433,  64277,
+     65535,      0,   1485,   7062,  21465,  43414,  59079,  64623,
+     65535,      0,      0,   4841,  14797,  31799,  49667,  61309,
+     65535,  65535,      0,      0,      0,   8032,  21695,  41078,
+     56317,  65535,  65535,  65535
+};
+
+const SKP_uint16 SKP_Silk_shell_code_table2[ 102 ] = {
+         0,  32615,  65535,      0,  14447,  50912,  65535,      0,
+      6301,  32587,  59361,  65535,      0,   3038,  18640,  46809,
+     62852,  65535,      0,   1746,  10524,  32509,  55273,  64278,
+     65535,      0,   1234,   6360,  21259,  43712,  59651,  64805,
+     65535,      0,   1020,   4461,  14030,  32286,  51249,  61904,
+     65100,  65535,      0,    851,   3435,  10006,  23241,  40797,
+     55444,  63009,  65252,  65535,      0,      0,   2075,   7137,
+     17119,  31499,  46982,  58723,  63976,  65535,  65535,      0,
+         0,      0,   3820,  11572,  23038,  37789,  51969,  61243,
+     65535,  65535,  65535,      0,      0,      0,      0,   6882,
+     16828,  30444,  44844,  57365,  65535,  65535,  65535,  65535,
+         0,      0,      0,      0,      0,  10093,  22963,  38779,
+     54426,  65535,  65535,  65535,  65535,  65535
+};
+
+const SKP_uint16 SKP_Silk_shell_code_table3[ 207 ] = {
+         0,  32324,  65535,      0,  15328,  49505,  65535,      0,
+      7474,  32344,  57955,  65535,      0,   3944,  19450,  45364,
+     61873,  65535,      0,   2338,  11698,  32435,  53915,  63734,
+     65535,      0,   1506,   7074,  21778,  42972,  58861,  64590,
+     65535,      0,   1027,   4490,  14383,  32264,  50980,  61712,
+     65043,  65535,      0,    760,   3022,   9696,  23264,  41465,
+     56181,  63253,  65251,  65535,      0,    579,   2256,   6873,
+     16661,  31951,  48250,  59403,  64198,  65360,  65535,      0,
+       464,   1783,   5181,  12269,  24247,  39877,  53490,  61502,
+     64591,  65410,  65535,      0,    366,   1332,   3880,   9273,
+     18585,  32014,  45928,  56659,  62616,  64899,  65483,  65535,
+         0,    286,   1065,   3089,   6969,  14148,  24859,  38274,
+     50715,  59078,  63448,  65091,  65481,  65535,      0,      0,
+       482,   2010,   5302,  10408,  18988,  30698,  43634,  54233,
+     60828,  64119,  65288,  65535,  65535,      0,      0,      0,
+      1006,   3531,   7857,  14832,  24543,  36272,  47547,  56883,
+     62327,  64746,  65535,  65535,  65535,      0,      0,      0,
+         0,   1863,   4950,  10730,  19284,  29397,  41382,  52335,
+     59755,  63834,  65535,  65535,  65535,  65535,      0,      0,
+         0,      0,      0,   2513,   7290,  14487,  24275,  35312,
+     46240,  55841,  62007,  65535,  65535,  65535,  65535,  65535,
+         0,      0,      0,      0,      0,      0,   3606,   9573,
+     18764,  28667,  40220,  51290,  59924,  65535,  65535,  65535,
+     65535,  65535,  65535,      0,      0,      0,      0,      0,
+         0,      0,   4879,  13091,  23376,  36061,  49395,  59315,
+     65535,  65535,  65535,  65535,  65535,  65535,  65535
+};
+
+const SKP_uint16 SKP_Silk_shell_code_table_offsets[ 19 ] = {
+         0,      0,      3,      7,     12,     18,     25,     33,
+        42,     52,     63,     75,     88,    102,    117,    133,
+       150,    168,    187
+};
+
--- /dev/null
+++ b/src_common/SKP_Silk_tables_sign.c
@@ -1,0 +1,42 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_tables.h"
+
+const SKP_uint16 SKP_Silk_sign_CDF[ 36 ] = 
+{
+         37840,  36944,  36251,  35304,
+         34715,  35503,  34529,  34296,
+         34016,  47659,  44945,  42503,
+         40235,  38569,  40254,  37851,
+         37243,  36595,  43410,  44121,
+         43127,  40978,  38845,  40433,
+         38252,  37795,  36637,  59159,
+         55630,  51806,  48073,  45036,
+         48416,  43857,  42678,  41146,
+};
+
--- /dev/null
+++ b/src_common/SKP_Silk_tables_type_offset.c
@@ -1,0 +1,52 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+#include "SKP_Silk_tables.h"
+
+const SKP_uint16 SKP_Silk_type_offset_CDF[ 5 ] = {
+         0,  37522,  41030,  44212,  65535
+};
+
+const SKP_int SKP_Silk_type_offset_CDF_offset = 2;
+
+
+const SKP_uint16 SKP_Silk_type_offset_joint_CDF[ 4 ][ 5 ] = 
+{
+{
+         0,  57686,  61230,  62358,  65535
+},
+{
+         0,  18346,  40067,  43659,  65535
+},
+{
+         0,  22694,  24279,  35507,  65535
+},
+{
+         0,   6067,   7215,  13010,  65535
+}
+};
+
--- /dev/null
+++ b/src_common/Silk_Common.vcproj
@@ -1,0 +1,360 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="Silk_Common"
+	ProjectGUID="{0E29E502-AB22-4147-93A1-AC91528ED758}"
+	RootNamespace="Silk"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				FavorSizeOrSpeed="0"
+				AdditionalIncludeDirectories="&quot;../../../celt-0.7.1/libcelt&quot;;../interface;../src_SigProc_FIX;../src_FIX"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB;FIXED_POINT;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				FloatingPointModel="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="SKP_Silk_Common_Win32_debug.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="0"
+				FavorSizeOrSpeed="0"
+				AdditionalIncludeDirectories="&quot;../../../celt-0.7.1/libcelt&quot;;../interface;../src_SigProc_FIX;../src_FIX"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB;FIXED_POINT;HAVE_CONFIG_H"
+				GeneratePreprocessedFile="0"
+				RuntimeLibrary="0"
+				FloatingPointModel="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="SKP_Silk_Common_Win32_mt.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine=""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\SKP_Silk_CNG.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_code_signs.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_create_init_destroy.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_dec_SDK_API.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_decode_core.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_decode_frame.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_decode_indices_v4.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_decode_parameters_v4.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_decode_pulses.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_decoder_set_fs.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_detect_SWB_input.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_enc_API.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_encode_parameters_v4.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_encode_pulses.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_gain_quant.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_interpolate.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_LBRR_reset.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_LP_variable_cutoff.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NLSF2A_stable.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NLSF_MSVQ_decode.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NSQ.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NSQ_del_dec.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_PLC.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_pulses_to_bytes.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_range_coder.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_shell_coder.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_gain.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_LTP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB0_10.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB0_16.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB1_10.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB1_16.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_other.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_pitch_lag.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_pulses_per_block.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_sign.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_type_offset.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_VAD.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath=".\SKP_Silk_define.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_main.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_PLC.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_structs.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB0_10.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB0_16.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB1_10.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB1_16.h"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
--- /dev/null
+++ b/src_common/Silk_CommonFLP.vcproj
@@ -1,0 +1,364 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="Silk_Common"
+	ProjectGUID="{0E29E502-AB22-4147-93A1-AC91528ED758}"
+	RootNamespace="Silk"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				FavorSizeOrSpeed="0"
+				AdditionalIncludeDirectories="../../../celt-0.8.0/libcelt;../interface;../src_SigProc_FIX;../src_SigProc_FLP;../src_FLP"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB;HAVE_CONFIG_H"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				FloatingPointModel="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="SKP_Silk_CommonFLP_Win32_debug.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="0"
+				FavorSizeOrSpeed="0"
+				AdditionalIncludeDirectories="../../../celt-0.8.0/libcelt;../interface;../src_SigProc_FIX;../src_SigProc_FLP;../src_FLP"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB;HAVE_CONFIG_H"
+				GeneratePreprocessedFile="0"
+				RuntimeLibrary="0"
+				FloatingPointModel="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="SKP_Silk_CommonFLP_Win32_mt.lib"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine=""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\SKP_Silk_CNG.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_code_signs.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_create_init_destroy.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_dec_SDK_API.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_decode_core.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_decode_frame.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_decode_indices_v4.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_decode_parameters_v4.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_decode_pulses.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_decoder_set_fs.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_detect_SWB_input.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_enc_API.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_encode_parameters_v4.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_encode_pulses.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_gain_quant.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_interpolate.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_LBRR_reset.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_LP_variable_cutoff.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NLSF2A_stable.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NLSF_MSVQ_decode.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NSQ.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_NSQ_del_dec.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_PLC.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_pulses_to_bytes.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_range_coder.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_shell_coder.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_gain.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_LTP.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB0_10.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB0_16.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB1_10.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB1_16.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_other.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_pitch_lag.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_pulses_per_block.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_sign.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_type_offset.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_VAD.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath=".\SKP_Silk_define.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_main.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_perceptual_parameters.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_PLC.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_structs.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB0_10.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB0_16.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB1_10.h"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_Silk_tables_NLSF_CB1_16.h"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
--- a/test/Dec_SDK.vcproj
+++ b/test/Dec_SDK.vcproj
@@ -2,7 +2,7 @@
 <VisualStudioProject
 	ProjectType="Visual C++"
 	Version="8,00"
-	Name="Dec_SDK"
+	Name="Dec"
 	ProjectGUID="{82685D7F-0589-42BD-877C-31A952D53A8E}"
 	RootNamespace="Test"
 	Keyword="Win32Proj"
@@ -40,7 +40,7 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				AdditionalIncludeDirectories="../interface;../src"
+				AdditionalIncludeDirectories="../interface;../src_SigProc_FIX"
 				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;COMPILE_SDK"
 				MinimalRebuild="true"
 				BasicRuntimeChecks="3"
@@ -121,7 +121,7 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="../interface;../src"
+				AdditionalIncludeDirectories="../interface;../src_SigProc_FIX"
 				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;COMPILE_SDK"
 				RuntimeLibrary="0"
 				FloatingPointModel="2"
@@ -188,6 +188,10 @@
 			>
 			<File
 				RelativePath=".\Decoder.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_debug.c"
 				>
 			</File>
 		</Filter>
--- /dev/null
+++ b/test/Dec_SDK.vcproj.SKYPE-KOEN.koen.user
@@ -1,0 +1,65 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioUserFile
+	ProjectType="Visual C++"
+	Version="8.00"
+	ShowAllFiles="false"
+	>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			>
+			<DebugSettings
+				Command="$(TargetPath)"
+				WorkingDirectory=""
+				CommandArguments=""
+				Attach="false"
+				DebuggerType="3"
+				Remote="1"
+				RemoteMachine="SKYPE-KOEN"
+				RemoteCommand=""
+				HttpUrl=""
+				PDBPath=""
+				SQLDebugging=""
+				Environment=""
+				EnvironmentMerge="true"
+				DebuggerFlavor=""
+				MPIRunCommand=""
+				MPIRunArguments=""
+				MPIRunWorkingDirectory=""
+				ApplicationCommand=""
+				ApplicationArguments=""
+				ShimCommand=""
+				MPIAcceptMode=""
+				MPIAcceptFilter=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			>
+			<DebugSettings
+				Command="$(TargetPath)"
+				WorkingDirectory=""
+				CommandArguments=""
+				Attach="false"
+				DebuggerType="3"
+				Remote="1"
+				RemoteMachine="SKYPE-KOEN"
+				RemoteCommand=""
+				HttpUrl=""
+				PDBPath=""
+				SQLDebugging=""
+				Environment=""
+				EnvironmentMerge="true"
+				DebuggerFlavor=""
+				MPIRunCommand=""
+				MPIRunArguments=""
+				MPIRunWorkingDirectory=""
+				ApplicationCommand=""
+				ApplicationArguments=""
+				ShimCommand=""
+				MPIAcceptMode=""
+				MPIAcceptFilter=""
+			/>
+		</Configuration>
+	</Configurations>
+</VisualStudioUserFile>
--- a/test/Decoder.c
+++ b/test/Decoder.c
@@ -25,6 +25,7 @@
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ***********************************************************************/
 
+
 /*****************************/
 /* Silk decoder test program */
 /*****************************/
@@ -38,42 +39,74 @@
 #include <string.h>
 #include "SKP_Silk_SDK_API.h"
 #include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_debug.h"
 
 /* Define codec specific settings should be moved to h file */
 #define MAX_BYTES_PER_FRAME     1024
 #define MAX_INPUT_FRAMES        5
 #define MAX_FRAME_LENGTH        480
+#define MAX_FRAME_LENGTH_MS     20
+#define MAX_API_FS_KHZ          48
 #define MAX_LBRR_DELAY          2
 
+#ifdef _SYSTEM_IS_BIG_ENDIAN
+/* Function to convert a little endian int16 to a */
+/* big endian int16 or vica verca                 */
+void swap_endian(
+    SKP_int16       vec[],
+    SKP_int         len
+)
+{
+    SKP_int i;
+    SKP_int16 tmp;
+    SKP_uint8 *p1, *p2;
+
+    for( i = 0; i < len; i++ ){
+        tmp = vec[ i ];
+        p1 = (SKP_uint8 *)&vec[ i ]; p2 = (SKP_uint8 *)&tmp;
+        p1[ 0 ] = p2[ 1 ]; p1[ 1 ] = p2[ 0 ];
+    }
+}
+#endif
+
 static void print_usage(char* argv[]) {
     printf( "\nusage: %s in.bit out.pcm [settings]\n", argv[ 0 ] );
-    printf( "\nin.bit        : Bitstream input to decoder" );
-    printf( "\nout.pcm       : Speech output from decoder" );
+    printf( "\nin.bit       : Bitstream input to decoder" );
+    printf( "\nout.pcm      : Speech output from decoder" );
     printf( "\n   settings:" );
-    printf( "\n-fs <kHz>     : Sampling rate of output signal in kHz; default: 24" );
-    printf( "\n-loss <perc>  : Simulated packet loss percentage (0-100); default: 0" );
+    printf( "\n-Fs_API <Hz> : Sampling rate of output signal in Hz; default: 24000" );
+    printf( "\n-loss <perc> : Simulated packet loss percentage (0-100); default: 0" );
     printf( "\n" );
 }
 
+#ifdef SKP_MACRO_COUNT
+    varDefine /* Define and reset global counters */
+#endif
+
 int main( int argc, char* argv[] )
 {
+    unsigned long tottime, starttime;
+    double    filetime;
     size_t    counter;
-    SKP_int   args, totPackets, i, k;
+    SKP_int32 args, totPackets, i, k;
     SKP_int16 ret, len, tot_len;
     SKP_int16 nBytes;
     SKP_uint8 payload[    MAX_BYTES_PER_FRAME * MAX_INPUT_FRAMES * ( MAX_LBRR_DELAY + 1 ) ];
-    SKP_uint8 FECpayload[ MAX_BYTES_PER_FRAME * MAX_INPUT_FRAMES ], *payloadPtr;
     SKP_uint8 *payloadEnd = NULL, *payloadToDec = NULL;
+    SKP_uint8 FECpayload[ MAX_BYTES_PER_FRAME * MAX_INPUT_FRAMES ], *payloadPtr;
     SKP_int16 nBytesFEC;
     SKP_int16 nBytesPerPacket[ MAX_LBRR_DELAY + 1 ], totBytes;
-    SKP_int16 out[ ( MAX_FRAME_LENGTH << 1 ) * MAX_INPUT_FRAMES ], *outPtr;
+    SKP_int16 out[ ( ( MAX_FRAME_LENGTH_MS * MAX_API_FS_KHZ ) << 1 ) * MAX_INPUT_FRAMES ], *outPtr;
     char      speechOutFileName[ 150 ], bitInFileName[ 150 ];
     FILE      *bitInFile, *speechOutFile;
-    SKP_int   Fs_kHz = 0;
+    SKP_int32 API_Fs_Hz = 0, packetSize_ms=0;
     SKP_int32 decSizeBytes;
     void      *psDec;
+#ifdef SKP_MACRO_COUNT
+    SKP_int64  Ops, maxOps = 0, totOps = 0;
+#endif
     float     loss_prob;
-    SKP_int   frames, lost, quiet;
+    SKP_int32 frames, lost, quiet;
     SKP_SILK_SDK_DecControlStruct DecControl;
 
     if( argc < 3 ) {
@@ -95,8 +128,8 @@
         if( SKP_STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-loss" ) == 0 ) {
             sscanf( argv[ args + 1 ], "%f", &loss_prob );
             args += 2;
-        } else if( SKP_STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-fs" ) == 0 ) {
-            sscanf( argv[ args + 1 ], "%d", &Fs_kHz );
+        } else if( SKP_STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-Fs_API" ) == 0 ) {
+            sscanf( argv[ args + 1 ], "%d", &API_Fs_Hz );
             args += 2;
         } else if( SKP_STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-quiet" ) == 0 ) {
             quiet = 1;
@@ -127,11 +160,11 @@
         exit( 0 );
     }
 
-	/* Set the samplingrate that is requested for the output */
-    if( Fs_kHz == 0 ) {
-        DecControl.sampleRate = 24000;
+    /* Set the samplingrate that is requested for the output */
+    if( API_Fs_Hz == 0 ) {
+        DecControl.API_sampleRate = 24000;
     } else {
-        DecControl.sampleRate = Fs_kHz * 1000;
+        DecControl.API_sampleRate = API_Fs_Hz;
     }
 
     /* Create decoder */
@@ -147,6 +180,7 @@
         printf( "\nSKP_Silk_InitDecoder returned %d", ret );
     }
 
+    tottime    = 0;
     totPackets = 0;
     payloadEnd = payload;
 
@@ -154,10 +188,13 @@
     for( i = 0; i < MAX_LBRR_DELAY; i++ ) {
         /* Read payload size */
         counter = fread( &nBytes, sizeof( SKP_int16 ), 1, bitInFile );
+#ifdef _SYSTEM_IS_BIG_ENDIAN
+        swap_endian( &nBytes, 1 );
+#endif
         /* Read payload */
         counter = fread( payloadEnd, sizeof( SKP_uint8 ), nBytes, bitInFile );
 
-        if( (SKP_int16)counter < nBytes ) {
+        if( ( SKP_int16 )counter < nBytes ) {
             break;
         }
         nBytesPerPacket[ i ] = nBytes;
@@ -167,6 +204,9 @@
     while( 1 ) {
         /* Read payload size */
         counter = fread( &nBytes, sizeof( SKP_int16 ), 1, bitInFile );
+#ifdef _SYSTEM_IS_BIG_ENDIAN
+        swap_endian( &nBytes, 1 );
+#endif
         if( nBytes < 0 || counter < 1 ) {
             break;
         }
@@ -173,7 +213,7 @@
         
         /* Read payload */
         counter = fread( payloadEnd, sizeof( SKP_uint8 ), nBytes, bitInFile );
-        if( (SKP_int16)counter < nBytes ) {
+        if( ( SKP_int16 )counter < nBytes ) {
             break;
         }
 
@@ -193,7 +233,9 @@
             payloadPtr = payload;
             for( i = 0; i < MAX_LBRR_DELAY; i++ ) {
                 if( nBytesPerPacket[ i + 1 ] > 0 ) {
-                    SKP_Silk_SDK_search_for_LBRR( psDec, payloadPtr, nBytesPerPacket[ i + 1 ], i + 1, FECpayload, &nBytesFEC );
+                    starttime = GetHighResolutionTime();
+                    SKP_Silk_SDK_search_for_LBRR( payloadPtr, nBytesPerPacket[ i + 1 ], i + 1, FECpayload, &nBytesFEC );
+                    tottime += GetHighResolutionTime() - starttime;
                     if( nBytesFEC > 0 ) {
                         payloadToDec = FECpayload;
                         nBytes = nBytesFEC;
@@ -218,11 +260,17 @@
             frames = 0;
             do {
                 /* Decode 20 ms */
+                starttime = GetHighResolutionTime();
                 ret = SKP_Silk_SDK_Decode( psDec, &DecControl, 0, payloadToDec, nBytes, outPtr, &len );
+                tottime += GetHighResolutionTime() - starttime;
                 if( ret ) {
                     printf( "\nSKP_Silk_SDK_Decode returned %d", ret );
                 }
-
+#ifdef SKP_MACRO_COUNT
+                Ops = SKP_SaveResetCount();
+                if( Ops > maxOps ){ maxOps = Ops; }
+                totOps += Ops;
+#endif
                 frames++;
                 outPtr  += len;
                 tot_len += len;
@@ -238,17 +286,28 @@
             /* Loss: Decode enough frames to cover one packet duration */
             for( i = 0; i < DecControl.framesPerPacket; i++ ) {
                 /* Generate 20 ms */
+                starttime = GetHighResolutionTime();
                 ret = SKP_Silk_SDK_Decode( psDec, &DecControl, 1, payloadToDec, nBytes, outPtr, &len );
+                tottime += GetHighResolutionTime() - starttime;
                 if( ret ) {
                     printf( "\nSKP_Silk_Decode returned %d", ret );
                 }
+#ifdef SKP_MACRO_COUNT
+                Ops = SKP_SaveResetCount();
+                if( Ops > maxOps ){ maxOps = Ops; }
+                totOps += Ops;
+#endif
                 outPtr  += len;
                 tot_len += len;
             }
         }
         totPackets++;
+        packetSize_ms = tot_len / ( DecControl.API_sampleRate / 1000 );
 
         /* Write output to file */
+#ifdef _SYSTEM_IS_BIG_ENDIAN   
+        swap_endian( out, tot_len );
+#endif
         fwrite( out, sizeof( SKP_int16 ), tot_len, speechOutFile );
 
         /* Update buffer */
@@ -261,7 +320,7 @@
         SKP_memmove( nBytesPerPacket, &nBytesPerPacket[ 1 ], MAX_LBRR_DELAY * sizeof( SKP_int16 ) );
 
         if( !quiet ) {
-            fprintf( stderr, "\rFrames decoded:              %d", totPackets );
+            fprintf( stderr, "\rPackets decoded:             %d", totPackets );
         }
     }
 
@@ -275,7 +334,9 @@
             payloadPtr = payload;
             for( i = 0; i < MAX_LBRR_DELAY; i++ ) {
                 if( nBytesPerPacket[ i + 1 ] > 0 ) {
-                    SKP_Silk_SDK_search_for_LBRR( psDec, payloadPtr, nBytesPerPacket[ i + 1 ], i + 1, FECpayload, &nBytesFEC );
+                    starttime = GetHighResolutionTime();
+                    SKP_Silk_SDK_search_for_LBRR( payloadPtr, nBytesPerPacket[ i + 1 ], i + 1, FECpayload, &nBytesFEC );
+                    tottime += GetHighResolutionTime() - starttime;
                     if( nBytesFEC > 0 ) {
                         payloadToDec = FECpayload;
                         nBytes = nBytesFEC;
@@ -300,7 +361,9 @@
             frames = 0;
             do {
                 /* Decode 20 ms */
+                starttime = GetHighResolutionTime();
                 ret = SKP_Silk_SDK_Decode( psDec, &DecControl, 0, payloadToDec, nBytes, outPtr, &len );
+                tottime += GetHighResolutionTime() - starttime;
                 if( ret ) {
                     printf( "\nSKP_Silk_SDK_Decode returned %d", ret );
                 }
@@ -321,7 +384,9 @@
 
             /* Generate 20 ms */
             for( i = 0; i < DecControl.framesPerPacket; i++ ) {
+                starttime = GetHighResolutionTime();
                 ret = SKP_Silk_SDK_Decode( psDec, &DecControl, 1, payloadToDec, nBytes, outPtr, &len );
+                tottime += GetHighResolutionTime() - starttime;
                 if( ret ) {
                     printf( "\nSKP_Silk_Decode returned %d", ret );
                 }
@@ -332,6 +397,9 @@
         totPackets++;
 
         /* Write output to file */
+#ifdef _SYSTEM_IS_BIG_ENDIAN   
+        swap_endian( out, tot_len );
+#endif
         fwrite( out, sizeof( SKP_int16 ), tot_len, speechOutFile );
 
         /* Update Buffer */
@@ -348,8 +416,27 @@
         }
     }
 
+    filetime = totPackets * 1e-3 * packetSize_ms;
     if( !quiet ) {
-        printf( "\nDecoding Finished \n" );
+        printf("\nFile length:                 %.3f s", filetime);
+        printf("\nTime for decoding:           %.3f s (%.3f%% of realtime)", 1e-6 * tottime, 1e-4 * tottime / filetime);
+
+#ifdef SKP_MACRO_COUNT
+        printf("\n \nWMOPS calculation");
+        printf("\nMean:                        %.3f WMOPS", (float)totOps / ((float)packetSize_ms * (float)totPackets * 1e3));
+        printf("\nMax:                         %.3f WMOPS", (float)maxOps / ((float)packetSize_ms * 1e3));
+#endif
+        printf("\n\n");
+    } else {
+        /* print time and % of realtime */
+        printf( "%.3f %.3f %d ", 1e-6 * tottime, 1e-4 * tottime / filetime, totPackets );
+#ifdef SKP_MACRO_COUNT
+        /* print average and max WMOPS */
+        printf( "%.3f %.3f \n", (float)totOps / ((float)packetSize_ms * (float)totPackets * 1e3), 
+            (float)maxOps / ((float)packetSize_ms * 1e3));
+#else
+        printf( "%.3f %.3f \n", 0, 0);
+#endif
     }
 
     /* Free decoder */
@@ -358,6 +445,9 @@
     /* Close files */
     fclose( speechOutFile );
     fclose( bitInFile );
+
+    /* Save timing file if TIC/TOC used */
+    SKP_TimerSave("decoder_timings.txt");
 
     return 0;
 }
--- a/test/Enc_SDK.vcproj
+++ b/test/Enc_SDK.vcproj
@@ -2,7 +2,7 @@
 <VisualStudioProject
 	ProjectType="Visual C++"
 	Version="8,00"
-	Name="Enc_SDK"
+	Name="Enc"
 	ProjectGUID="{6D97A8EF-5724-4D85-8BF4-C583714BBA78}"
 	RootNamespace="Enc"
 	Keyword="Win32Proj"
@@ -40,7 +40,7 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				AdditionalIncludeDirectories="../interface"
+				AdditionalIncludeDirectories="../interface;../src_SigProc_FIX"
 				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
 				MinimalRebuild="true"
 				BasicRuntimeChecks="3"
@@ -121,7 +121,7 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="../interface"
+				AdditionalIncludeDirectories="../interface;../src_SigProc_FIX"
 				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
 				RuntimeLibrary="0"
 				FloatingPointModel="2"
@@ -188,6 +188,10 @@
 			>
 			<File
 				RelativePath=".\Encoder.c"
+				>
+			</File>
+			<File
+				RelativePath=".\SKP_debug.c"
 				>
 			</File>
 		</Filter>
--- /dev/null
+++ b/test/Enc_SDK.vcproj.SKYPE-KOEN.koen.user
@@ -1,0 +1,65 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioUserFile
+	ProjectType="Visual C++"
+	Version="8.00"
+	ShowAllFiles="false"
+	>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			>
+			<DebugSettings
+				Command="$(TargetPath)"
+				WorkingDirectory=""
+				CommandArguments=""
+				Attach="false"
+				DebuggerType="3"
+				Remote="1"
+				RemoteMachine="SKYPE-KOEN"
+				RemoteCommand=""
+				HttpUrl=""
+				PDBPath=""
+				SQLDebugging=""
+				Environment=""
+				EnvironmentMerge="true"
+				DebuggerFlavor=""
+				MPIRunCommand=""
+				MPIRunArguments=""
+				MPIRunWorkingDirectory=""
+				ApplicationCommand=""
+				ApplicationArguments=""
+				ShimCommand=""
+				MPIAcceptMode=""
+				MPIAcceptFilter=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			>
+			<DebugSettings
+				Command="$(TargetPath)"
+				WorkingDirectory=""
+				CommandArguments=""
+				Attach="false"
+				DebuggerType="3"
+				Remote="1"
+				RemoteMachine="SKYPE-KOEN"
+				RemoteCommand=""
+				HttpUrl=""
+				PDBPath=""
+				SQLDebugging=""
+				Environment=""
+				EnvironmentMerge="true"
+				DebuggerFlavor=""
+				MPIRunCommand=""
+				MPIRunArguments=""
+				MPIRunWorkingDirectory=""
+				ApplicationCommand=""
+				ApplicationArguments=""
+				ShimCommand=""
+				MPIAcceptMode=""
+				MPIAcceptFilter=""
+			/>
+		</Configuration>
+	</Configurations>
+</VisualStudioUserFile>
--- a/test/Encoder.c
+++ b/test/Encoder.c
@@ -25,6 +25,7 @@
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ***********************************************************************/
 
+
 /*****************************/
 /* Silk encoder test program */
 /*****************************/
@@ -38,6 +39,8 @@
 #include <string.h>
 #include <math.h>
 #include "SKP_Silk_SDK_API.h"
+#include "SKP_Silk_SigProc_FIX.h"
+#include "SKP_debug.h"
 
 /* Define codec specific settings */
 #define MAX_BYTES_PER_FRAME     250 // Equals peak bitrate of 100 kbps 
@@ -44,43 +47,79 @@
 #define MAX_INPUT_FRAMES        5
 #define MAX_LBRR_DELAY          2
 #define MAX_FRAME_LENGTH        480
+#define MAX_FRAME_LENGTH_MS     20
+#define MAX_API_FS_KHZ          48
 
+#ifdef SKP_MACRO_COUNT
+    varDefine /* Define and reset global counters */
+#endif
+
+#ifdef _SYSTEM_IS_BIG_ENDIAN
+/* Function to convert a little endian int16 to a */
+/* big endian int16 or vica verca                 */
+void swap_endian(
+    SKP_int16       vec[],              /*  I/O array of */
+    SKP_int         len                 /*  I   length      */
+)
+{
+    SKP_int i;
+    SKP_int16 tmp;
+    SKP_uint8 *p1, *p2;
+
+    for( i = 0; i < len; i++ ){
+        tmp = vec[ i ];
+        p1 = (SKP_uint8 *)&vec[ i ]; p2 = (SKP_uint8 *)&tmp;
+        p1[ 0 ] = p2[ 1 ]; p1[ 1 ] = p2[ 0 ];
+    }
+}
+#endif
+
 static void print_usage( char* argv[] ) {
     printf( "\nusage: %s in.pcm out.bit [settings]\n", argv[ 0 ] );
-    printf( "\nin.pcm              : Speech input to encoder" );
-    printf( "\nout.bit             : Bitstream output from encoder" );
+    printf( "\nin.pcm               : Speech input to encoder" );
+    printf( "\nout.bit              : Bitstream output from encoder" );
     printf( "\n   settings:" );
-    printf( "\n-fs <kHz>           : Sampling rate in kHz, default: 24" );
-    printf( "\n-packetlength <ms>  : Packet interval in ms, default: 20" );
-    printf( "\n-rate <bps>         : Target bitrate; default: 25000" );
-    printf( "\n-loss <perc>        : Uplink loss estimate, in percent (0-100); default: 0" );
-    printf( "\n-inbandFEC <flag>   : Enable inband FEC usage (0/1); default: 0" );
-    printf( "\n-complexity <comp>  : Set complexity, 0: low, 1: medium, 2: high; default: 2" );
-    printf( "\n-DTX <flag>         : Enable DTX (0/1); default: 0" );
-    printf( "\n-quiet              : Print only some basic values" );
+    printf( "\n-Fs_API <Hz>         : API sampling rate in Hz, default: 24000" );
+    printf( "\n-Fs_maxInternal <Hz> : Maximum internal sampling rate in Hz, default: 24000" ); 
+    printf( "\n-packetlength <ms>   : Packet interval in ms, default: 20" );
+    printf( "\n-rate <bps>          : Target bitrate; default: 25000" );
+    printf( "\n-loss <perc>         : Uplink loss estimate, in percent (0-100); default: 0" );
+    printf( "\n-inbandFEC <flag>    : Enable inband FEC usage (0/1); default: 0" );
+    printf( "\n-complexity <comp>   : Set complexity, 0: low, 1: medium, 2: high; default: 2" );
+    printf( "\n-DTX <flag>          : Enable DTX (0/1); default: 0" );
+    printf( "\n-quiet               : Print only some basic values" );
     printf( "\n");
 }
 
 int main( int argc, char* argv[] )
 {
+    unsigned long tottime, starttime;
+    double    filetime;
     size_t    counter;
-    SKP_int   k, args, totPackets, totActPackets, ret;
+    SKP_int32 k, args, totPackets, totActPackets, ret;
     SKP_int16 nBytes;
-    double    sumBytes, sumWBytes, sumActBytes, avg_rate, act_rate, wght_rate, nrg;
+    double    sumBytes, sumActBytes, avg_rate, act_rate, nrg;
     SKP_uint8 payload[ MAX_BYTES_PER_FRAME * MAX_INPUT_FRAMES ];
-    SKP_int16 in[ MAX_FRAME_LENGTH * MAX_INPUT_FRAMES ];
+    SKP_int16 in[ MAX_FRAME_LENGTH_MS * MAX_API_FS_KHZ * MAX_INPUT_FRAMES ];
     char      speechInFileName[ 150 ], bitOutFileName[ 150 ];
     FILE      *bitOutFile, *speechInFile;
     SKP_int32 encSizeBytes;
     void      *psEnc;
+#ifdef SKP_MACRO_COUNT
+    SKP_int64  Ops, maxOps = 0, totOps = 0;
+#endif
+#ifdef _SYSTEM_IS_BIG_ENDIAN
+    SKP_int16 nBytes_LE;
+#endif
 
     /* default settings */
-    SKP_int   fs_kHz = 24;
-    SKP_int   targetRate_bps = 25000;
-    SKP_int   packetSize_ms = 20;
-    SKP_int   frameSizeReadFromFile_ms = 20;
-    SKP_int   packetLoss_perc = 0, complexity_mode = 2, smplsSinceLastPacket;
-    SKP_int   INBandFec_enabled = 0, DTX_enabled = 0, quiet = 0;
+    SKP_int32 API_fs_Hz = 24000;
+    SKP_int32 max_internal_fs_Hz = 0;
+    SKP_int32 targetRate_bps = 25000;
+    SKP_int32 packetSize_ms = 20;
+    SKP_int32 frameSizeReadFromFile_ms = 10;
+    SKP_int32 packetLoss_perc = 0, complexity_mode = 2, smplsSinceLastPacket;
+    SKP_int32 INBandFEC_enabled = 0, DTX_enabled = 0, quiet = 0;
     SKP_SILK_SDK_EncControlStruct encControl; // Struct for input to encoder
         
     if( argc < 3 ) {
@@ -95,9 +134,12 @@
     strcpy( bitOutFileName,   argv[ args ] );
     args++;
     while( args < argc ) {
-        if( SKP_STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-fs" ) == 0 ) {
-            sscanf( argv[ args + 1 ], "%d", &fs_kHz );
+        if( SKP_STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-Fs_API" ) == 0 ) {
+            sscanf( argv[ args + 1 ], "%d", &API_fs_Hz );
             args += 2;
+        } else if( SKP_STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-Fs_maxInternal" ) == 0 ) {
+            sscanf( argv[ args + 1 ], "%d", &max_internal_fs_Hz );
+            args += 2;
         } else if( SKP_STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-packetlength" ) == 0 ) {
             sscanf( argv[ args + 1 ], "%d", &packetSize_ms );
             args += 2;
@@ -111,7 +153,7 @@
             sscanf( argv[ args + 1 ], "%d", &complexity_mode );
             args += 2;
         } else if( SKP_STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-inbandFEC" ) == 0 ) {
-            sscanf( argv[ args + 1 ], "%d", &INBandFec_enabled );
+            sscanf( argv[ args + 1 ], "%d", &INBandFEC_enabled );
             args += 2;
         } else if( SKP_STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-DTX") == 0 ) {
             sscanf( argv[ args + 1 ], "%d", &DTX_enabled );
@@ -126,18 +168,24 @@
         }
     }
 
+    /* If no max internal set set to API fs */
+    if( max_internal_fs_Hz == 0 ) {
+        max_internal_fs_Hz = API_fs_Hz;
+    }
+
     /* Print options */
     if( !quiet ) {
         printf("******************* Silk Encoder v %s ****************\n", SKP_Silk_SDK_get_version());
         printf("******************* Compiled for %d bit cpu ********* \n", (int)sizeof(void*) * 8 );
-        printf( "Input:                       %s\n",        speechInFileName );
-        printf( "Output:                      %s\n",        bitOutFileName );
-        printf( "Sampling rate:               %d kHz\n",    fs_kHz);
-        printf( "Packet interval:             %d ms\n",     packetSize_ms);
-        printf( "Inband FEC used:             %d\n",        INBandFec_enabled);
-        printf( "DTX used:                    %d\n",        DTX_enabled);
-        printf( "Complexity:                  %d\n",        complexity_mode);
-        printf( "Target bitrate:              %d bps\n",    targetRate_bps);
+        printf( "Input:                          %s\n",     speechInFileName );
+        printf( "Output:                         %s\n",     bitOutFileName );
+        printf( "API sampling rate:              %d Hz\n",  API_fs_Hz );
+        printf( "Maximum internal sampling rate: %d Hz\n",  max_internal_fs_Hz );
+        printf( "Packet interval:                %d ms\n",  packetSize_ms );
+        printf( "Inband FEC used:                %d\n",     INBandFEC_enabled );
+        printf( "DTX used:                       %d\n",     DTX_enabled );
+        printf( "Complexity:                     %d\n",     complexity_mode );
+        printf( "Target bitrate:                 %d bps\n", targetRate_bps );
     }
 
     /* Open files */
@@ -159,7 +207,7 @@
     }
 
     psEnc = malloc( encSizeBytes );
-    
+
     /* Reset Encoder */
     ret = SKP_Silk_SDK_InitEncoder( psEnc, &encControl );
     if( ret ) {
@@ -167,30 +215,34 @@
     }
     
     /* Set Encoder parameters */
-    encControl.sampleRate           = fs_kHz * 1000;
-    encControl.packetSize           = packetSize_ms * fs_kHz;
-    encControl.packetLossPercentage = packetLoss_perc;
-    encControl.useInBandFEC         = INBandFec_enabled;
-    encControl.useDTX               = DTX_enabled;
-    encControl.complexity           = complexity_mode;
-    encControl.bitRate              = targetRate_bps;
+    encControl.API_sampleRate        = API_fs_Hz;
+    encControl.maxInternalSampleRate = max_internal_fs_Hz;
+    encControl.packetSize            = ( packetSize_ms * API_fs_Hz ) / 1000;
+    encControl.packetLossPercentage  = packetLoss_perc;
+    encControl.useInBandFEC          = INBandFEC_enabled;
+    encControl.useDTX                = DTX_enabled;
+    encControl.complexity            = complexity_mode;
+    encControl.bitRate               = ( targetRate_bps > 0 ? targetRate_bps : 0 );
 
-    if( fs_kHz > 24 || fs_kHz < 0 ) {
-        printf( "\nError: Sampling rate = %d out of range, valid range 8 - 24 \n \n", fs_kHz );
+    if( API_fs_Hz > MAX_API_FS_KHZ * 1000 || API_fs_Hz < 0 ) {
+        printf( "\nError: API sampling rate = %d out of range, valid range 8000 - 48000 \n \n", API_fs_Hz );
         exit( 0 );
     }
 
+    tottime              = 0;
     totPackets           = 0;
     totActPackets        = 0;
     smplsSinceLastPacket = 0;
     sumBytes             = 0.0;
     sumActBytes          = 0.0;
-    sumWBytes            = 0.0;
     
     while( 1 ) {
-        /* Read input to file */
-        counter = fread( in, sizeof( SKP_int16 ), frameSizeReadFromFile_ms * fs_kHz, speechInFile );
-        if( (SKP_int)counter < frameSizeReadFromFile_ms * fs_kHz ) {
+        /* Read input from file */
+        counter = fread( in, sizeof( SKP_int16 ), ( frameSizeReadFromFile_ms * API_fs_Hz ) / 1000, speechInFile );
+#ifdef _SYSTEM_IS_BIG_ENDIAN
+        swap_endian( in, counter );
+#endif
+        if( (SKP_int)counter < ( ( frameSizeReadFromFile_ms * API_fs_Hz ) / 1000 ) ) {
             break;
         }
 
@@ -197,6 +249,7 @@
         /* max payload size */
         nBytes = MAX_BYTES_PER_FRAME * MAX_INPUT_FRAMES;
 
+        starttime = GetHighResolutionTime();
         /* Silk Encoder */
         ret = SKP_Silk_SDK_Encode( psEnc, &encControl, in, (SKP_int16)counter, payload, &nBytes );
         if( ret ) {
@@ -203,30 +256,42 @@
             printf( "\nSKP_Silk_Encode returned %d", ret );
             break;
         }
+        tottime += GetHighResolutionTime() - starttime;
 
+#ifdef SKP_MACRO_COUNT
+        Ops = SKP_SaveResetCount();
+        if( Ops > maxOps ){ maxOps = Ops; }
+        totOps += Ops;
+#endif
+
         /* Get packet size */
-        packetSize_ms = (SKP_int)( 1000 * encControl.packetSize ) / encControl.sampleRate;
+        packetSize_ms = ( SKP_int )( ( 1000 * ( SKP_int32 )encControl.packetSize ) / encControl.API_sampleRate );
 
-        smplsSinceLastPacket += (SKP_int)counter;
+        smplsSinceLastPacket += ( SKP_int )counter;
         
-        if( ( smplsSinceLastPacket / fs_kHz ) == packetSize_ms ) {
+        if( ( ( 1000 * smplsSinceLastPacket ) / API_fs_Hz ) == packetSize_ms ) {
             /* Sends a dummy zero size packet in case of DTX period  */
             /* to make it work with the decoder test program.        */
             /* In practice should be handled by RTP sequence numbers */
             totPackets++;
-            sumBytes  += nBytes;
-            sumWBytes += pow( (double)nBytes, 10.0 );
+            sumBytes += nBytes;
             nrg = 0.0;
-            for( k = 0; k < (SKP_int)counter; k++ ) {
+            for( k = 0; k < ( SKP_int )counter; k++ ) {
                 nrg += in[ k ] * (double)in[ k ];
             }
-            if( ( nrg / (SKP_int)counter ) > 1e3 ) {
+            if( ( nrg / ( SKP_int )counter ) > 1e3 ) {
                 sumActBytes += nBytes;
                 totActPackets++;
             }
 
             /* Write payload size */
+#ifdef _SYSTEM_IS_BIG_ENDIAN
+            nBytes_LE = nBytes;
+            swap_endian( &nBytes_LE, 1 );
+            fwrite( &nBytes_LE, sizeof( SKP_int16 ), 1, bitOutFile );
+#else
             fwrite( &nBytes, sizeof( SKP_int16 ), 1, bitOutFile );
+#endif
 
             /* Write payload */
             fwrite( payload, sizeof( SKP_uint8 ), nBytes, bitOutFile );
@@ -244,9 +309,6 @@
     /* Write payload size */
     fwrite( &nBytes, sizeof( SKP_int16 ), 1, bitOutFile );
 
-    /* Query encoder */
-    packetSize_ms = (SKP_int)( 1000 * encControl.packetSize ) / encControl.sampleRate;
-
     /* Free Encoder */
     free( psEnc );
 
@@ -253,17 +315,37 @@
     fclose( speechInFile );
     fclose( bitOutFile   );
 
+    filetime  = totPackets * 1e-3 * packetSize_ms;
     avg_rate  = 8.0 / packetSize_ms * sumBytes       / totPackets;
     act_rate  = 8.0 / packetSize_ms * sumActBytes    / totActPackets;
-    wght_rate = 8.0 / packetSize_ms * pow( sumWBytes / totPackets, 0.1 );
     if( !quiet ) {
+        printf( "\nFile length:                 %.3f s", filetime );
+        printf( "\nTime for encoding:           %.3f s (%.3f%% of realtime)", 1e-6 * tottime, 1e-4 * tottime / filetime );
         printf( "\nAverage bitrate:             %.3f kbps", avg_rate  );
         printf( "\nActive bitrate:              %.3f kbps", act_rate  );
-        printf( "\nWeighted bitrate:            %.3f kbps", wght_rate );
+#ifdef SKP_MACRO_COUNT
+        printf( "\n \nWMOPS calculation");
+        printf( "\nMean:                        %.3f WMOPS", (float)totOps / ((float)packetSize_ms * (float)totPackets * 1e3));
+        printf( "\nMax:                         %.3f WMOPS", (float)maxOps / ((float)packetSize_ms * 1e3));
+#endif
         printf( "\n\n" );
     } else {
-        /* print average and weighted bitrates */
-        printf( "%.3f %.3f %.3f \n", avg_rate, act_rate, wght_rate );
+        /* print time and % of realtime */
+        printf("%.3f %.3f %d ", 1e-6 * tottime, 1e-4 * tottime / filetime, totPackets );
+
+        /* print average and active bitrates */
+        printf( "%.3f %.3f ", avg_rate, act_rate );
+#ifdef SKP_MACRO_COUNT
+        /* print average and max WMOPS */
+        printf( "%.3f %.3f \n", (float)totOps / ((float)packetSize_ms * (float)totPackets * 1e3), 
+            (float)maxOps / ((float)packetSize_ms * 1e3));
+#else
+        printf( "%.3f %.3f \n", 0, 0);
+#endif
     }
+
+    /* Save timing file if TIC/TOC used */
+    SKP_TimerSave("encoder_timings.txt");
+
     return 0;
 }
--- /dev/null
+++ b/test/SKP_debug.c
@@ -1,0 +1,169 @@
+/***********************************************************************
+Copyright (c) 2006-2010, Skype Limited. All rights reserved. 
+Redistribution and use in source and binary forms, with or without 
+modification, (subject to the limitations in the disclaimer below) 
+are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright 
+notice, this list of conditions and the following disclaimer in the 
+documentation and/or other materials provided with the distribution.
+- Neither the name of Skype Limited, nor the names of specific 
+contributors, may be used to endorse or promote products derived from 
+this software without specific prior written permission.
+NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED 
+BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
+USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+***********************************************************************/
+
+/*                                                                      *
+ * SKP_debug.c                                                          *
+ *                                                                      *
+ * This contains code to help debugging                                 *
+ *                                                                      *
+ * Copyright 2009 (c), Skype Limited                                    *
+ * Date: 090629                                                         *
+ *                                                                      */
+
+#include "SKP_debug.h"
+#include "../src_SigProc_FIX/SKP_Silk_SigProc_FIX.h"
+
+#ifdef _WIN32
+
+#if (defined(_WIN32) || defined(_WINCE)) 
+#include <windows.h>    /* timer */
+#else   // Linux or Mac
+#include <sys/time.h>
+#endif
+
+unsigned long GetHighResolutionTime() /* O: time in usec*/
+{
+    /* Returns a time counter in microsec   */
+    /* the resolution is platform dependent */
+    /* but is typically 1.62 us resolution  */
+    LARGE_INTEGER lpPerformanceCount;
+    LARGE_INTEGER lpFrequency;
+    QueryPerformanceCounter(&lpPerformanceCount);
+    QueryPerformanceFrequency(&lpFrequency);
+    return (unsigned long)((1000000*(lpPerformanceCount.QuadPart)) / lpFrequency.QuadPart);
+}
+#else   // Linux or Mac
+unsigned long GetHighResolutionTime() /* O: time in usec*/
+{
+    struct timeval tv;
+    gettimeofday(&tv, 0);
+    return((tv.tv_sec*1000000)+(tv.tv_usec));
+}
+#endif
+
+#if SKP_TIC_TOC
+
+int           SKP_Timer_nTimers = 0;
+int           SKP_Timer_depth_ctr = 0;
+char          SKP_Timer_tags[SKP_NUM_TIMERS_MAX][SKP_NUM_TIMERS_MAX_TAG_LEN];
+#ifdef WIN32
+LARGE_INTEGER SKP_Timer_start[SKP_NUM_TIMERS_MAX];
+#else
+unsigned long SKP_Timer_start[SKP_NUM_TIMERS_MAX];
+#endif  
+unsigned int  SKP_Timer_cnt[SKP_NUM_TIMERS_MAX];
+SKP_int64     SKP_Timer_min[SKP_NUM_TIMERS_MAX];
+SKP_int64     SKP_Timer_sum[SKP_NUM_TIMERS_MAX];
+SKP_int64     SKP_Timer_max[SKP_NUM_TIMERS_MAX];
+SKP_int64     SKP_Timer_depth[SKP_NUM_TIMERS_MAX];
+
+#ifdef WIN32
+void SKP_TimerSave(char *file_name)
+{
+    if( SKP_Timer_nTimers > 0 ) 
+    {
+        int k;
+        FILE *fp;
+        LARGE_INTEGER lpFrequency;
+        LARGE_INTEGER lpPerformanceCount1, lpPerformanceCount2;
+        int del = 0x7FFFFFFF;
+        double avg, sum_avg;
+        /* estimate overhead of calling performance counters */
+        for( k = 0; k < 1000; k++ ) {
+            QueryPerformanceCounter(&lpPerformanceCount1);
+            QueryPerformanceCounter(&lpPerformanceCount2);
+            lpPerformanceCount2.QuadPart -= lpPerformanceCount1.QuadPart;
+            if( (int)lpPerformanceCount2.LowPart < del )
+                del = lpPerformanceCount2.LowPart;
+        }
+        QueryPerformanceFrequency(&lpFrequency);
+        /* print results to file */
+        sum_avg = 0.0f;
+        for( k = 0; k < SKP_Timer_nTimers; k++ ) {
+            if (SKP_Timer_depth[k] == 0) {
+                sum_avg += (1e6 * SKP_Timer_sum[k] / SKP_Timer_cnt[k] - del) / lpFrequency.QuadPart * SKP_Timer_cnt[k];
+            }
+        }
+        fp = fopen(file_name, "w");
+        fprintf(fp, "                                min         avg     %%         max      count\n");
+        for( k = 0; k < SKP_Timer_nTimers; k++ ) {
+            if (SKP_Timer_depth[k] == 0) {
+                fprintf(fp, "%-28s", SKP_Timer_tags[k]);
+            } else if (SKP_Timer_depth[k] == 1) {
+                fprintf(fp, " %-27s", SKP_Timer_tags[k]);
+            } else if (SKP_Timer_depth[k] == 2) {
+                fprintf(fp, "  %-26s", SKP_Timer_tags[k]);
+            } else if (SKP_Timer_depth[k] == 3) {
+                fprintf(fp, "   %-25s", SKP_Timer_tags[k]);
+            } else {
+                fprintf(fp, "    %-24s", SKP_Timer_tags[k]);
+            }
+            avg = (1e6 * SKP_Timer_sum[k] / SKP_Timer_cnt[k] - del) / lpFrequency.QuadPart;
+            fprintf(fp, "%8.2f", (1e6 * (SKP_max_64(SKP_Timer_min[k] - del, 0))) / lpFrequency.QuadPart);
+            fprintf(fp, "%12.2f %6.2f", avg, 100.0 * avg / sum_avg * SKP_Timer_cnt[k]);
+            fprintf(fp, "%12.2f", (1e6 * (SKP_max_64(SKP_Timer_max[k] - del, 0))) / lpFrequency.QuadPart);
+            fprintf(fp, "%10d\n", SKP_Timer_cnt[k]);
+        }
+        fprintf(fp, "                                microseconds\n");
+        fclose(fp);
+    }
+}
+#else
+void SKP_TimerSave(char *file_name)
+{
+    if( SKP_Timer_nTimers > 0 ) 
+    {
+        int k;
+        FILE *fp;
+        /* print results to file */
+        fp = fopen(file_name, "w");
+        fprintf(fp, "                                min         avg         max      count\n");
+        for( k = 0; k < SKP_Timer_nTimers; k++ )
+        {
+            if (SKP_Timer_depth[k] == 0) {
+                fprintf(fp, "%-28s", SKP_Timer_tags[k]);
+            } else if (SKP_Timer_depth[k] == 1) {
+                fprintf(fp, " %-27s", SKP_Timer_tags[k]);
+            } else if (SKP_Timer_depth[k] == 2) {
+                fprintf(fp, "  %-26s", SKP_Timer_tags[k]);
+            } else if (SKP_Timer_depth[k] == 3) {
+                fprintf(fp, "   %-25s", SKP_Timer_tags[k]);
+            } else {
+                fprintf(fp, "    %-24s", SKP_Timer_tags[k]);
+            }
+            fprintf(fp, "%d ", SKP_Timer_min[k]);
+            fprintf(fp, "%f ", (double)SKP_Timer_sum[k] / (double)SKP_Timer_cnt[k]);
+            fprintf(fp, "%d ", SKP_Timer_max[k]);
+            fprintf(fp, "%10d\n", SKP_Timer_cnt[k]);
+        }
+        fprintf(fp, "                                microseconds\n");
+        fclose(fp);
+    }
+}
+#endif
+
+#endif /* SKP_TIC_TOC */
--- a/test/SignalCompare.vcproj
+++ b/test/SignalCompare.vcproj
@@ -40,7 +40,7 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				AdditionalIncludeDirectories="..\interface;..\src"
+				AdditionalIncludeDirectories="..\interface;..\src_SigProc_FIX"
 				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
 				MinimalRebuild="true"
 				BasicRuntimeChecks="3"
@@ -121,7 +121,7 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="..\interface;..\src"
+				AdditionalIncludeDirectories="..\interface;..\src_SigProc_FIX"
 				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
 				RuntimeLibrary="0"
 				FloatingPointModel="2"
--- /dev/null
+++ b/test/SignalCompare.vcproj.SKYPE-KOEN.koen.user
@@ -1,0 +1,65 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioUserFile
+	ProjectType="Visual C++"
+	Version="8.00"
+	ShowAllFiles="false"
+	>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			>
+			<DebugSettings
+				Command="$(TargetPath)"
+				WorkingDirectory=""
+				CommandArguments=""
+				Attach="false"
+				DebuggerType="3"
+				Remote="1"
+				RemoteMachine="SKYPE-KOEN"
+				RemoteCommand=""
+				HttpUrl=""
+				PDBPath=""
+				SQLDebugging=""
+				Environment=""
+				EnvironmentMerge="true"
+				DebuggerFlavor=""
+				MPIRunCommand=""
+				MPIRunArguments=""
+				MPIRunWorkingDirectory=""
+				ApplicationCommand=""
+				ApplicationArguments=""
+				ShimCommand=""
+				MPIAcceptMode=""
+				MPIAcceptFilter=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			>
+			<DebugSettings
+				Command="$(TargetPath)"
+				WorkingDirectory=""
+				CommandArguments=""
+				Attach="false"
+				DebuggerType="3"
+				Remote="1"
+				RemoteMachine="SKYPE-KOEN"
+				RemoteCommand=""
+				HttpUrl=""
+				PDBPath=""
+				SQLDebugging=""
+				Environment=""
+				EnvironmentMerge="true"
+				DebuggerFlavor=""
+				MPIRunCommand=""
+				MPIRunArguments=""
+				MPIRunWorkingDirectory=""
+				ApplicationCommand=""
+				ApplicationArguments=""
+				ShimCommand=""
+				MPIAcceptMode=""
+				MPIAcceptFilter=""
+			/>
+		</Configuration>
+	</Configurations>
+</VisualStudioUserFile>
--- a/test/signalCompare.c
+++ b/test/signalCompare.c
@@ -30,7 +30,7 @@
 */
 
 #ifdef _WIN32
-#define _CRT_SECURE_NO_DEPRECATE	1
+#define _CRT_SECURE_NO_DEPRECATE    1
 #endif
 
 #include <stdio.h>
@@ -40,12 +40,12 @@
 
 #include "SKP_Silk_SigProc_FIX.h"
 
-#define FRAME_LENGTH_MS			10
-#define WIN_LENGTH_MS			20
-#define BW_EXPANSION			0.7f
+#define FRAME_LENGTH_MS         10
+#define WIN_LENGTH_MS           20
+#define BW_EXPANSION            0.7f
 
-#define MAX_FS_KHZ				24
-#define LPC_ORDER				10
+#define MAX_FS_KHZ              24
+#define LPC_ORDER               10
 
 #ifdef  __cplusplus
 extern "C"
@@ -53,30 +53,30 @@
 #endif
 /* Internally used functions */
 void Autocorrelation( 
-	SKP_float *results,					/* o	result (length correlationCount)			*/
-	const SKP_float *inputData,			/* i	input data to correlate						*/
-	SKP_int inputDataSize,				/* i	length of input								*/
-	SKP_int correlationCount			/* i	number of correlation taps to compute		*/
+    SKP_float *results,                 /* o    result (length correlationCount)            */
+    const SKP_float *inputData,         /* i    input data to correlate                     */
+    SKP_int inputDataSize,              /* i    length of input                             */
+    SKP_int correlationCount            /* i    number of correlation taps to compute       */
 );
 
 /* inner product of two SKP_float arrays, with result as double */
 double Inner_product( 
-	const SKP_float		*data1, 
-	const SKP_float		*data2, 
-	SKP_int				dataSize
+    const SKP_float     *data1, 
+    const SKP_float     *data2, 
+    SKP_int             dataSize
 );
 /* Solve the normal equations using the Levinson-Durbin recursion */
-SKP_float Levinsondurbin(				/* O	prediction error energy						*/
-	SKP_float		A[],				/* O	prediction coefficients	[order]				*/
-	const SKP_float corr[],				/* I	input auto-correlations [order + 1]			*/
-	const SKP_int	order				/* I	prediction order 							*/
+SKP_float Levinsondurbin(               /* O    prediction error energy                     */
+    SKP_float       A[],                /* O    prediction coefficients [order]             */
+    const SKP_float corr[],             /* I    input auto-correlations [order + 1]         */
+    const SKP_int   order               /* I    prediction order                            */
 );
 
 /* Chirp (bw expand) LP AR filter */
 void Bwexpander( 
-	SKP_float *ar,						/* io	AR filter to be expanded (without leading 1)   */
-	const SKP_int d,					/* i	length of ar									*/
-	const SKP_float chirp				/* i	chirp factor (typically in range (0..1) )		*/
+    SKP_float *ar,                      /* io   AR filter to be expanded (without leading 1)    */
+    const SKP_int d,                    /* i    length of ar                                    */
+    const SKP_float chirp               /* i    chirp factor (typically in range (0..1) )       */
 );
 
 #ifdef  __cplusplus
@@ -84,283 +84,290 @@
 #endif
 
 static void print_usage(char* argv[]) {
-	printf("\nusage: %s ref.pcm test.pcm [settings]\n", argv[ 0 ]);
-	printf("\nref.pcm       : Reference file");
-	printf("\ntest.pcm      : File to be tested, should be of same length as ref.pcm");
-	printf("\n   settings:");
-	printf("\n-diff         : Only determine bit-exactness");
-	printf("\n-fs <kHz>     : Sampling rate in kHz, max: %d; default: 24", MAX_FS_KHZ);
-	printf("\n");
+    printf("\nusage: %s ref.pcm test.pcm [settings]\n", argv[ 0 ]);
+    printf("\nref.pcm       : Reference file");
+    printf("\ntest.pcm      : File to be tested, should be of same length as ref.pcm");
+    printf("\n   settings:");
+    printf("\n-diff         : Only determine bit-exactness");
+    printf("\n-fs <Hz>      : Sampling rate in Hz, max: %d; default: 24000", MAX_FS_KHZ * 1000 );
+    printf("\n");
 }
 
+#ifdef SKP_MACRO_COUNT
+    varDefine /* Define and reset global counters */
+#endif
+
 int main(int argc, char* argv[])
 {
-	SKP_int   args, n, i, counterRef, counterTest;
-	char      testInFileName[150], refInFileName[150];
-	FILE      *refInFile, *testInFile;
-	SKP_int   nFrames = 0, isUnequal = 0;
-	SKP_int   diff = 0, Fs_kHz = 24;		/* defaults */
-	SKP_float c, refWhtnd, testWhtnd, refNrg, diffNrg;
-	double    SNR = 0.0;
-	SKP_int16 refIn[WIN_LENGTH_MS * MAX_FS_KHZ], testIn[WIN_LENGTH_MS * MAX_FS_KHZ];
-	SKP_float refWin[WIN_LENGTH_MS * MAX_FS_KHZ], testWin[WIN_LENGTH_MS * MAX_FS_KHZ];
-	SKP_float autoCorr[LPC_ORDER + 1], LPC_Coef[LPC_ORDER];
+    SKP_int   args, n, i, counterRef, counterTest;
+    char      testInFileName[150], refInFileName[150];
+    FILE      *refInFile, *testInFile;
+    SKP_int   nFrames = 0, isUnequal = 0;
+    SKP_int   diff = 0, Fs_kHz;
+    SKP_int32 Fs_Hz = 24000;
+    SKP_float c, refWhtnd, testWhtnd, refNrg, diffNrg;
+    double    SNR = 0.0;
+    SKP_int16 refIn[WIN_LENGTH_MS * MAX_FS_KHZ], testIn[WIN_LENGTH_MS * MAX_FS_KHZ];
+    SKP_float refWin[WIN_LENGTH_MS * MAX_FS_KHZ], testWin[WIN_LENGTH_MS * MAX_FS_KHZ];
+    SKP_float autoCorr[LPC_ORDER + 1], LPC_Coef[LPC_ORDER];
 
-	if (argc < 3) {
-		print_usage(argv);
-		exit(0);
-	} 
+    if (argc < 3) {
+        print_usage(argv);
+        exit(0);
+    } 
 
-	/* get arguments */
-	args = 1;
-	strcpy(refInFileName, argv[args]);
-	args++;
-	strcpy(testInFileName, argv[args]);
-	args++;
-	while(args < argc ) {
-		if (SKP_STR_CASEINSENSITIVE_COMPARE(argv[args], "-diff") == 0) {
-			diff = 1;
-			args++;
-		}else if (SKP_STR_CASEINSENSITIVE_COMPARE(argv[args], "-fs") == 0) {
-			sscanf(argv[args+1], "%d", &Fs_kHz);
-			args += 2;
-		} else {
-			printf("Error: unrecognized setting: %s\n\n", argv[args]);
-			print_usage(argv);
-			exit(0);
-		}
-	}
+    /* get arguments */
+    args = 1;
+    strcpy(refInFileName, argv[args]);
+    args++;
+    strcpy(testInFileName, argv[args]);
+    args++;
+    while(args < argc ) {
+        if (SKP_STR_CASEINSENSITIVE_COMPARE(argv[args], "-diff") == 0) {
+            diff = 1;
+            args++;
+        }else if (SKP_STR_CASEINSENSITIVE_COMPARE(argv[args], "-fs") == 0) {
+            sscanf(argv[args+1], "%d", &Fs_Hz);
+            args += 2;
+        } else {
+            printf("Error: unrecognized setting: %s\n\n", argv[args]);
+            print_usage(argv);
+            exit(0);
+        }
+    }
 
-	if( Fs_kHz > MAX_FS_KHZ ) {
-		printf("Error: sampling rate too high: %d\n\n", Fs_kHz);
-		print_usage(argv);
-		exit(0);
-	}
+    Fs_kHz = SKP_DIV32_16( Fs_Hz, 1000 );
 
-	printf("Reference:  %s\n", refInFileName);
-	//printf("Test:       %s\n", testInFileName);
+    if( Fs_kHz > MAX_FS_KHZ ) {
+        printf("Error: sampling rate too high: %d\n\n", Fs_kHz);
+        print_usage(argv);
+        exit(0);
+    }
 
-	/* open files */
-	refInFile = fopen(refInFileName, "rb");
-	if (refInFile==NULL) {
-		printf("Error: could not open input file %s\n", refInFileName);
-		exit(0);
-	} 
-	testInFile = fopen(testInFileName, "rb");
-	if (testInFile==NULL) {
-		printf("Error: could not open input file %s\n", testInFileName);
-		exit(0);
-	}
+    printf("Reference:  %s\n", refInFileName);
+    //printf("Test:       %s\n", testInFileName);
 
-	SKP_memset( refIn,  0, sizeof(refIn) );
-	SKP_memset( testIn, 0, sizeof(testIn) );
+    /* open files */
+    refInFile = fopen(refInFileName, "rb");
+    if (refInFile==NULL) {
+        printf("Error: could not open input file %s\n", refInFileName);
+        exit(0);
+    } 
+    testInFile = fopen(testInFileName, "rb");
+    if (testInFile==NULL) {
+        printf("Error: could not open input file %s\n", testInFileName);
+        exit(0);
+    }
 
-	while(1) {
-		/* Read inputs */
-		counterRef  = (SKP_int)fread(&refIn[(WIN_LENGTH_MS - FRAME_LENGTH_MS) * Fs_kHz], 
-			sizeof(SKP_int16), FRAME_LENGTH_MS * Fs_kHz, refInFile);
-		counterTest = (SKP_int)fread(&testIn[(WIN_LENGTH_MS - FRAME_LENGTH_MS) * Fs_kHz], 
-			sizeof(SKP_int16), FRAME_LENGTH_MS * Fs_kHz, testInFile);
-		if(counterRef != FRAME_LENGTH_MS * Fs_kHz || counterTest != FRAME_LENGTH_MS * Fs_kHz){
-			break;
-		}
+    SKP_memset( refIn,  0, sizeof(refIn) );
+    SKP_memset( testIn, 0, sizeof(testIn) );
 
-		/* test for bit-exactness */
-		for( n = 0; n < FRAME_LENGTH_MS * Fs_kHz; n++ ) {
-			if( refIn[(WIN_LENGTH_MS - FRAME_LENGTH_MS) * Fs_kHz + n] != 
-				testIn[(WIN_LENGTH_MS - FRAME_LENGTH_MS) * Fs_kHz + n] ) {
-					isUnequal = 1;
-					break;
-			}
-		}
+    while(1) {
+        /* Read inputs */
+        counterRef  = (SKP_int)fread(&refIn[(WIN_LENGTH_MS - FRAME_LENGTH_MS) * Fs_kHz], 
+            sizeof(SKP_int16), FRAME_LENGTH_MS * Fs_kHz, refInFile);
+        counterTest = (SKP_int)fread(&testIn[(WIN_LENGTH_MS - FRAME_LENGTH_MS) * Fs_kHz], 
+            sizeof(SKP_int16), FRAME_LENGTH_MS * Fs_kHz, testInFile);
+        if(counterRef != FRAME_LENGTH_MS * Fs_kHz || counterTest != FRAME_LENGTH_MS * Fs_kHz){
+            break;
+        }
 
-		/* apply sine window */
-		for( n = 0; n < WIN_LENGTH_MS * Fs_kHz; n++ ) {
-			c = (SKP_float)sin( 3.14159265 * (n + 1) / (WIN_LENGTH_MS * Fs_kHz + 1) );
-			refWin[n]  = refIn[n]  * c;
-			testWin[n] = testIn[n] * c;
-		}
+        /* test for bit-exactness */
+        for( n = 0; n < FRAME_LENGTH_MS * Fs_kHz; n++ ) {
+            if( refIn[(WIN_LENGTH_MS - FRAME_LENGTH_MS) * Fs_kHz + n] != 
+                testIn[(WIN_LENGTH_MS - FRAME_LENGTH_MS) * Fs_kHz + n] ) {
+                    isUnequal = 1;
+                    break;
+            }
+        }
 
-		/* LPC analysis on reference signal */
+        /* apply sine window */
+        for( n = 0; n < WIN_LENGTH_MS * Fs_kHz; n++ ) {
+            c = (SKP_float)sin( 3.14159265 * (n + 1) / (WIN_LENGTH_MS * Fs_kHz + 1) );
+            refWin[n]  = refIn[n]  * c;
+            testWin[n] = testIn[n] * c;
+        }
 
-		/* Calculate auto correlation */
-		Autocorrelation(autoCorr, refWin, WIN_LENGTH_MS * Fs_kHz, LPC_ORDER + 1);
+        /* LPC analysis on reference signal */
 
-		/* Add white noise */
-		autoCorr[ 0 ] += autoCorr[ 0 ] * 1e-6f + 1.0f; 
+        /* Calculate auto correlation */
+        Autocorrelation(autoCorr, refWin, WIN_LENGTH_MS * Fs_kHz, LPC_ORDER + 1);
 
-		/* Convert correlations to prediction coefficients */
-		Levinsondurbin(LPC_Coef, autoCorr, LPC_ORDER);
+        /* Add white noise */
+        autoCorr[ 0 ] += autoCorr[ 0 ] * 1e-6f + 1.0f; 
 
-		/* Bandwdith expansion */
-		Bwexpander(LPC_Coef, LPC_ORDER, BW_EXPANSION);
+        /* Convert correlations to prediction coefficients */
+        Levinsondurbin(LPC_Coef, autoCorr, LPC_ORDER);
 
-		/* Filter both signals */
-		refNrg = 1.0f;
-		diffNrg = 1e-10f;
-		for( n = (WIN_LENGTH_MS - FRAME_LENGTH_MS) / 2 * Fs_kHz; 
-			 n < (WIN_LENGTH_MS + FRAME_LENGTH_MS) / 2 * Fs_kHz; n++ ) {
-				refWhtnd = refIn[n];
-				testWhtnd = testIn[n];
-				for( i = 0; i < LPC_ORDER; i++ ) {
-					refWhtnd  -= LPC_Coef[ i ] * refIn[n - i - 1];
-					testWhtnd -= LPC_Coef[ i ] * testIn[n - i - 1];
-				}
-				refNrg += refWhtnd * refWhtnd;
-				diffNrg += (refWhtnd - testWhtnd) * (refWhtnd - testWhtnd);
-		}
+        /* Bandwdith expansion */
+        Bwexpander(LPC_Coef, LPC_ORDER, BW_EXPANSION);
 
-		/* weighted SNR */
-		if( refNrg > FRAME_LENGTH_MS * Fs_kHz ) {
-			SNR += 10.0 * log10( refNrg / diffNrg );
-			nFrames++;
-		}
+        /* Filter both signals */
+        refNrg = 1.0f;
+        diffNrg = 1e-10f;
+        for( n = (WIN_LENGTH_MS - FRAME_LENGTH_MS) / 2 * Fs_kHz; 
+             n < (WIN_LENGTH_MS + FRAME_LENGTH_MS) / 2 * Fs_kHz; n++ ) {
+                refWhtnd = refIn[n];
+                testWhtnd = testIn[n];
+                for( i = 0; i < LPC_ORDER; i++ ) {
+                    refWhtnd  -= LPC_Coef[ i ] * refIn[n - i - 1];
+                    testWhtnd -= LPC_Coef[ i ] * testIn[n - i - 1];
+                }
+                refNrg += refWhtnd * refWhtnd;
+                diffNrg += (refWhtnd - testWhtnd) * (refWhtnd - testWhtnd);
+        }
 
-		/* Update Buffer */
-		SKP_memmove( refIn,  &refIn[FRAME_LENGTH_MS * Fs_kHz],  (WIN_LENGTH_MS - FRAME_LENGTH_MS) * Fs_kHz * sizeof(SKP_int16));
-		SKP_memmove( testIn, &testIn[FRAME_LENGTH_MS * Fs_kHz], (WIN_LENGTH_MS - FRAME_LENGTH_MS) * Fs_kHz * sizeof(SKP_int16));
-	}
+        /* weighted SNR */
+        if( refNrg > FRAME_LENGTH_MS * Fs_kHz ) {
+            SNR += 10.0 * log10( refNrg / diffNrg );
+            nFrames++;
+        }
 
-	if( diff ) {
-		if( isUnequal ) {
-			printf("Signals     DIFFER\n");
-		} else {
-			if(counterRef != counterTest){
-				printf("Warning: signals differ in length\n");
-			}
-			printf("Signals     BIT-EXACT\n");
-		}
-	} else {
-		if( nFrames == 0 ) {
-			printf("At least one signal too short or not loud enough\n");
-			exit(0);
-		}
-		if(counterRef != counterTest){
-			printf("Warning: signals differ in length\n");
-		}
-		if( isUnequal == 0 ) {
-			printf("Signals     BIT-EXACT\n");
-		} else {
-			printf("AVERAGE WEIGHTED SNR: %4.1f dB\n", SNR / nFrames);
-		}
-	}
-	printf("\n");
+        /* Update Buffer */
+        SKP_memmove( refIn,  &refIn[FRAME_LENGTH_MS * Fs_kHz],  (WIN_LENGTH_MS - FRAME_LENGTH_MS) * Fs_kHz * sizeof(SKP_int16));
+        SKP_memmove( testIn, &testIn[FRAME_LENGTH_MS * Fs_kHz], (WIN_LENGTH_MS - FRAME_LENGTH_MS) * Fs_kHz * sizeof(SKP_int16));
+    }
 
-	/* Close Files */
-	fclose(refInFile);
-	fclose(testInFile);
+    if( diff ) {
+        if( isUnequal ) {
+            printf("Signals     DIFFER\n");
+        } else {
+            if(counterRef != counterTest){
+                printf("Warning: signals differ in length\n");
+            }
+            printf("Signals     BIT-EXACT\n");
+        }
+    } else {
+        if( nFrames == 0 ) {
+            printf("At least one signal too short or not loud enough\n");
+            exit(0);
+        }
+        if(counterRef != counterTest){
+            printf("Warning: signals differ in length\n");
+        }
+        if( isUnequal == 0 ) {
+            printf("Signals     BIT-EXACT\n");
+        } else {
+            printf("AVERAGE WEIGHTED SNR: %4.1f dB\n", SNR / nFrames);
+        }
+    }
+    printf("\n");
 
-	return 0;
+    /* Close Files */
+    fclose(refInFile);
+    fclose(testInFile);
+
+    return 0;
 }
 
 /* compute autocorrelation */
 void Autocorrelation( 
-	SKP_float *results,					/* o	result (length correlationCount)			*/
-	const SKP_float *inputData,			/* i	input data to correlate						*/
-	SKP_int inputDataSize,				/* i	length of input								*/
-	SKP_int correlationCount			/* i	number of correlation taps to compute		*/
+    SKP_float *results,                 /* o    result (length correlationCount)            */
+    const SKP_float *inputData,         /* i    input data to correlate                     */
+    SKP_int inputDataSize,              /* i    length of input                             */
+    SKP_int correlationCount            /* i    number of correlation taps to compute       */
 )
 {
-	SKP_int i;
+    SKP_int i;
 
-	if (correlationCount > inputDataSize) {
-		correlationCount = inputDataSize;
-	}
+    if (correlationCount > inputDataSize) {
+        correlationCount = inputDataSize;
+    }
 
-  	for( i = 0; i < correlationCount; i++ ) {
-		results[ i ] =  (SKP_float)Inner_product( inputData, inputData + i, inputDataSize - i );
-	}
+    for( i = 0; i < correlationCount; i++ ) {
+        results[ i ] =  (SKP_float)Inner_product( inputData, inputData + i, inputDataSize - i );
+    }
 }
 
 /* inner product of two SKP_float arrays, with result as double */
 double Inner_product( 
-	const SKP_float		*data1, 
-	const SKP_float		*data2, 
-	SKP_int				dataSize
+    const SKP_float     *data1, 
+    const SKP_float     *data2, 
+    SKP_int             dataSize
 )
 {
-	SKP_int  i, dataSize4;
-	double	 result;
+    SKP_int  i, dataSize4;
+    double   result;
 
-	/* 4x unrolled loop */
-	result = 0.0f;
-	dataSize4 = dataSize & 0xFFFC;
-	for( i = 0; i < dataSize4; i += 4 ) {
-		result += data1[ i + 0 ] * data2[ i + 0 ] + 
-				  data1[ i + 1 ] * data2[ i + 1 ] +
-				  data1[ i + 2 ] * data2[ i + 2 ] +
-				  data1[ i + 3 ] * data2[ i + 3 ];
-	}
+    /* 4x unrolled loop */
+    result = 0.0f;
+    dataSize4 = dataSize & 0xFFFC;
+    for( i = 0; i < dataSize4; i += 4 ) {
+        result += data1[ i + 0 ] * data2[ i + 0 ] + 
+                  data1[ i + 1 ] * data2[ i + 1 ] +
+                  data1[ i + 2 ] * data2[ i + 2 ] +
+                  data1[ i + 3 ] * data2[ i + 3 ];
+    }
 
-	/* add any remaining products */
-	for( ; i < dataSize; i++ ) {
-		result += data1[ i ] * data2[ i ];
-	}
+    /* add any remaining products */
+    for( ; i < dataSize; i++ ) {
+        result += data1[ i ] * data2[ i ];
+    }
 
-	return result;
+    return result;
 }
 
 /* Solve the normal equations using the Levinson-Durbin recursion */
-SKP_float Levinsondurbin(				/* O	prediction error energy						*/
-	SKP_float		A[],				/* O	prediction coefficients	[order]				*/
-	const SKP_float corr[],				/* I	input auto-correlations [order + 1]			*/
-	const SKP_int	order				/* I	prediction order 							*/
+SKP_float Levinsondurbin(               /* O    prediction error energy                     */
+    SKP_float       A[],                /* O    prediction coefficients [order]             */
+    const SKP_float corr[],             /* I    input auto-correlations [order + 1]         */
+    const SKP_int   order               /* I    prediction order                            */
 )
 {
-	SKP_int   i, mHalf, m;
-	SKP_float min_nrg, nrg, t, km, Atmp1, Atmp2;
-	
-	min_nrg = 1e-12f * corr[ 0 ] + 1e-9f;
-	nrg = corr[ 0 ];
-	nrg = SKP_max(min_nrg, nrg);
-	A[ 0 ] = corr[ 1 ] / nrg;
-	nrg -= A[ 0 ] * corr[ 1 ];
-	nrg = SKP_max(min_nrg, nrg);
+    SKP_int   i, mHalf, m;
+    SKP_float min_nrg, nrg, t, km, Atmp1, Atmp2;
+    
+    min_nrg = 1e-12f * corr[ 0 ] + 1e-9f;
+    nrg = corr[ 0 ];
+    nrg = SKP_max( min_nrg, nrg );
+    A[ 0 ] = corr[ 1 ] / nrg;
+    nrg -= A[ 0 ] * corr[ 1 ];
+    nrg = SKP_max(min_nrg, nrg);
 
-	for( m = 1; m < order; m++ )
-	{
-		t = corr[ m + 1 ];
-		for( i = 0; i < m; i++ ) {
-			t -= A[ i ] * corr[ m - i ];
-		}
+    for( m = 1; m < order; m++ )
+    {
+        t = corr[ m + 1 ];
+        for( i = 0; i < m; i++ ) {
+            t -= A[ i ] * corr[ m - i ];
+        }
 
-		/* reflection coefficient */
-		km = t / nrg;
+        /* reflection coefficient */
+        km = t / nrg;
 
-		/* residual energy */
-		nrg -= km * t;
-		nrg = SKP_max(min_nrg, nrg);
+        /* residual energy */
+        nrg -= km * t;
+        nrg = SKP_max(min_nrg, nrg);
 
-		mHalf = m >> 1;
-		for( i = 0; i < mHalf; i++ ) {
-			Atmp1 = A[ i ];
-			Atmp2 = A[ m - i - 1 ];
-			A[ m - i - 1 ] -= km * Atmp1;
-			A[ i ]         -= km * Atmp2;
-		}
-		if( m & 1 ) {
-			A[ mHalf ]     -= km * A[ mHalf ];
-		}
-		A[ m ] = km;
-	}
+        mHalf = m >> 1;
+        for( i = 0; i < mHalf; i++ ) {
+            Atmp1 = A[ i ];
+            Atmp2 = A[ m - i - 1 ];
+            A[ m - i - 1 ] -= km * Atmp1;
+            A[ i ]         -= km * Atmp2;
+        }
+        if( m & 1 ) {
+            A[ mHalf ]     -= km * A[ mHalf ];
+        }
+        A[ m ] = km;
+    }
 
-	/* return the residual energy */
-	return nrg;
+    /* return the residual energy */
+    return nrg;
 }
 
 /* Chirp (bw expand) LP AR filter */
 void Bwexpander( 
-	SKP_float *ar,						/* io	AR filter to be expanded (without leading 1)   */
-	const SKP_int d,					/* i	length of ar									*/
-	const SKP_float chirp				/* i	chirp factor (typically in range (0..1) )		*/
+    SKP_float *ar,                      /* io   AR filter to be expanded (without leading 1)    */
+    const SKP_int d,                    /* i    length of ar                                    */
+    const SKP_float chirp               /* i    chirp factor (typically in range (0..1) )       */
 )
 {
-	SKP_int   i;
-	SKP_float cfac = chirp;
+    SKP_int   i;
+    SKP_float cfac = chirp;
 
-	for( i = 0; i < d - 1; i++ ) {
-		ar[ i ] *=  cfac;
-		cfac	*=  chirp;
-	}
-	ar[ d - 1 ] *=  cfac;
+    for( i = 0; i < d - 1; i++ ) {
+        ar[ i ] *=  cfac;
+        cfac    *=  chirp;
+    }
+    ar[ d - 1 ] *=  cfac;
 }