namespace NSpeex
|
{
|
using System;
|
|
internal class VQ
|
{
|
public static int Index(float ins0, float[] codebook, int entries)
|
{
|
float num2 = 0f;
|
int num3 = 0;
|
for (int i = 0; i < entries; i++)
|
{
|
float num4 = ins0 - codebook[i];
|
num4 *= num4;
|
if ((i == 0) || (num4 < num2))
|
{
|
num2 = num4;
|
num3 = i;
|
}
|
}
|
return num3;
|
}
|
|
public static int Index(float[] ins0, float[] codebook, int len, int entries)
|
{
|
int num3 = 0;
|
float num4 = 0f;
|
int num5 = 0;
|
for (int i = 0; i < entries; i++)
|
{
|
float num6 = 0f;
|
for (int j = 0; j < len; j++)
|
{
|
float num7 = ins0[j] - codebook[num3++];
|
num6 += num7 * num7;
|
}
|
if ((i == 0) || (num6 < num4))
|
{
|
num4 = num6;
|
num5 = i;
|
}
|
}
|
return num5;
|
}
|
|
public static void Nbest(float[] ins0, int offset, float[] codebook, int len, int entries, float[] E, int N, int[] nbest, float[] best_dist)
|
{
|
int num4 = 0;
|
int num5 = 0;
|
for (int i = 0; i < entries; i++)
|
{
|
float num6 = 0.5f * E[i];
|
for (int j = 0; j < len; j++)
|
{
|
num6 -= ins0[offset + j] * codebook[num4++];
|
}
|
if ((i < N) || (num6 < best_dist[N - 1]))
|
{
|
int index = N - 1;
|
while ((index >= 1) && ((index > num5) || (num6 < best_dist[index - 1])))
|
{
|
best_dist[index] = best_dist[index - 1];
|
nbest[index] = nbest[index - 1];
|
index--;
|
}
|
best_dist[index] = num6;
|
nbest[index] = i;
|
num5++;
|
}
|
}
|
}
|
|
public static void Nbest_sign(float[] ins0, int offset, float[] codebook, int len, int entries, float[] E, int N, int[] nbest, float[] best_dist)
|
{
|
int num4 = 0;
|
int num6 = 0;
|
for (int i = 0; i < entries; i++)
|
{
|
int num5;
|
float num7 = 0f;
|
for (int j = 0; j < len; j++)
|
{
|
num7 -= ins0[offset + j] * codebook[num4++];
|
}
|
if (num7 > 0f)
|
{
|
num5 = 1;
|
num7 = -num7;
|
}
|
else
|
{
|
num5 = 0;
|
}
|
num7 += 0.5f * E[i];
|
if ((i < N) || (num7 < best_dist[N - 1]))
|
{
|
int index = N - 1;
|
while ((index >= 1) && ((index > num6) || (num7 < best_dist[index - 1])))
|
{
|
best_dist[index] = best_dist[index - 1];
|
nbest[index] = nbest[index - 1];
|
index--;
|
}
|
best_dist[index] = num7;
|
nbest[index] = i;
|
num6++;
|
if (num5 != 0)
|
{
|
nbest[index] += entries;
|
}
|
}
|
}
|
}
|
}
|
}
|