namespace NSpeex
|
{
|
using System;
|
|
internal abstract class LspQuant
|
{
|
protected const int MAX_LSP_SIZE = 20;
|
|
protected internal LspQuant()
|
{
|
}
|
|
protected internal static int Lsp_quant(float[] x, int xs, int[] cdbk, int nbVec, int nbDim)
|
{
|
int num2;
|
float num5 = 0f;
|
int num6 = 0;
|
int num7 = 0;
|
for (int i = 0; i < nbVec; i++)
|
{
|
float num3 = 0f;
|
num2 = 0;
|
while (num2 < nbDim)
|
{
|
float num4 = x[xs + num2] - cdbk[num7++];
|
num3 += num4 * num4;
|
num2++;
|
}
|
if ((num3 < num5) || (i == 0))
|
{
|
num5 = num3;
|
num6 = i;
|
}
|
}
|
for (num2 = 0; num2 < nbDim; num2++)
|
{
|
x[xs + num2] -= cdbk[(num6 * nbDim) + num2];
|
}
|
return num6;
|
}
|
|
protected internal static int Lsp_weight_quant(float[] x, int xs, float[] weight, int ws, int[] cdbk, int nbVec, int nbDim)
|
{
|
int num2;
|
float num5 = 0f;
|
int num6 = 0;
|
int num7 = 0;
|
for (int i = 0; i < nbVec; i++)
|
{
|
float num3 = 0f;
|
num2 = 0;
|
while (num2 < nbDim)
|
{
|
float num4 = x[xs + num2] - cdbk[num7++];
|
num3 += (weight[ws + num2] * num4) * num4;
|
num2++;
|
}
|
if ((num3 < num5) || (i == 0))
|
{
|
num5 = num3;
|
num6 = i;
|
}
|
}
|
for (num2 = 0; num2 < nbDim; num2++)
|
{
|
x[xs + num2] -= cdbk[(num6 * nbDim) + num2];
|
}
|
return num6;
|
}
|
|
public abstract void Quant(float[] lsp, float[] qlsp, int order, Bits bits);
|
protected internal void UnpackPlus(float[] lsp, int[] tab, Bits bits, float k, int ti, int li)
|
{
|
int num = bits.Unpack(6);
|
for (int i = 0; i < ti; i++)
|
{
|
lsp[i + li] += k * tab[(num * ti) + i];
|
}
|
}
|
|
public abstract void Unquant(float[] lsp, int order, Bits bits);
|
}
|
}
|