mirror of
https://github.com/xiph/opus.git
synced 2025-06-07 07:50:51 +00:00
Now using 8 bands for the pitch gain, with a 128-entry codebook.
This commit is contained in:
parent
a5431bfb09
commit
2875f6bf8d
4 changed files with 50 additions and 17 deletions
|
@ -17,7 +17,7 @@ libcelt_la_SOURCES = bands.c celt.c cwrs.c fftwrap.c mdct.c modes.c pitch.c \
|
||||||
libcelt_la_LDFLAGS = -version-info @CELT_LT_CURRENT@:@CELT_LT_REVISION@:@CELT_LT_AGE@
|
libcelt_la_LDFLAGS = -version-info @CELT_LT_CURRENT@:@CELT_LT_REVISION@:@CELT_LT_AGE@
|
||||||
|
|
||||||
noinst_HEADERS = arch.h bands.h celt.h cwrs.h fftwrap.h mdct.h modes.h \
|
noinst_HEADERS = arch.h bands.h celt.h cwrs.h fftwrap.h mdct.h modes.h \
|
||||||
os_support.h pitch.h psy.h quant_bands.h quant_pitch.h smallft.h vq.h
|
os_support.h pgain_table.h pitch.h psy.h quant_bands.h quant_pitch.h smallft.h vq.h
|
||||||
|
|
||||||
noinst_PROGRAMS = testcelt
|
noinst_PROGRAMS = testcelt
|
||||||
testcelt_SOURCES = testcelt.c
|
testcelt_SOURCES = testcelt.c
|
||||||
|
|
|
@ -170,13 +170,21 @@ void compute_pitch_gain(const CELTMode *m, float *X, float *P, float *gains, flo
|
||||||
//gain = Sxy/(2*(pbank[i+1]-pbank[i]));
|
//gain = Sxy/(2*(pbank[i+1]-pbank[i]));
|
||||||
//if (i<3)
|
//if (i<3)
|
||||||
//gain *= 1+.02*gain;
|
//gain *= 1+.02*gain;
|
||||||
if (gain > .90)
|
if (gain > 1.f)
|
||||||
gain = .90;
|
gain = 1.f;
|
||||||
if (gain < 0.0)
|
if (gain < 0.0f)
|
||||||
gain = 0.0;
|
gain = 0.0f;
|
||||||
|
/* We need to be a bit conservative, otherwise residual doesn't quantise well */
|
||||||
|
gain *= .9f;
|
||||||
gains[i] = gain;
|
gains[i] = gain;
|
||||||
|
//printf ("%f ", 1-sqrt(1-gain*gain));
|
||||||
}
|
}
|
||||||
|
/*if(rand()%10==0)
|
||||||
|
{
|
||||||
|
for (i=0;i<m->nbPBands;i++)
|
||||||
|
printf ("%f ", 1-sqrt(1-gains[i]*gains[i]));
|
||||||
|
printf ("\n");
|
||||||
|
}*/
|
||||||
for (i=B*pBands[m->nbPBands];i<B*pBands[m->nbPBands+1];i++)
|
for (i=B*pBands[m->nbPBands];i<B*pBands[m->nbPBands+1];i++)
|
||||||
P[i] = 0;
|
P[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,12 +32,12 @@
|
||||||
#include "modes.h"
|
#include "modes.h"
|
||||||
|
|
||||||
#define NBANDS 18
|
#define NBANDS 18
|
||||||
#define PBANDS 5
|
#define PBANDS 8
|
||||||
#define PITCH_END 37
|
#define PITCH_END 37
|
||||||
|
|
||||||
#define NBANDS128 15
|
#define NBANDS128 15
|
||||||
#define PBANDS128 5
|
#define PBANDS128 8
|
||||||
#define PITCH_END128 36
|
#define PITCH_END128 45
|
||||||
|
|
||||||
static const float means[15] = {
|
static const float means[15] = {
|
||||||
14.8621, 12.6918, 10.2978, 9.5862, 10.3784,
|
14.8621, 12.6918, 10.2978, 9.5862, 10.3784,
|
||||||
|
@ -58,25 +58,28 @@ static const int decay18[18] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
const int qbank0[NBANDS +2] = {0, 2, 4, 6, 8, 10, 12, 14, 16, 19, 22, 26, 31, 37, 45, 56, 71, 91, 116, 128};
|
const int qbank0[NBANDS +2] = {0, 2, 4, 6, 8, 10, 12, 14, 16, 19, 22, 26, 31, 37, 45, 56, 71, 91, 116, 128};
|
||||||
const int pbank0[PBANDS +2] = {0, 4, 8, 12, 19, PITCH_END, 128};
|
const int pbank0[PBANDS +2] = {0, 2, 4, 6, 8, 12, 19, 31, PITCH_END, 128};
|
||||||
const int qpulses0[NBANDS ] = {7, 5, 5, 4, 4, 3, 3, 2, 3, 2, 2, 2, 2, 0, 0, 0, 0, 0};
|
//const int pbank0[PBANDS +2] = {0, 4, 8, 12, 19, PITCH_END, 128};
|
||||||
|
const int qpulses0[NBANDS ] = {7, 5, 5, 4, 4, 3, 3, 2, 3, 2, 2, 2, 2, 1, 0, 0, 0, 0};
|
||||||
//const int qpulses0[NBANDS ] = {7, 5, 5, 5, 4, 4, 3, 3, 3, 3, 4, 3, 3, -2, 0, 0, 0, 0};
|
//const int qpulses0[NBANDS ] = {7, 5, 5, 5, 4, 4, 3, 3, 3, 3, 4, 3, 3, -2, 0, 0, 0, 0};
|
||||||
|
|
||||||
|
|
||||||
const int qbank1[NBANDS128+2] = {0, 2, 4, 6, 8, 12, 16, 20, 24, 28, 36, 44, 52, 68, 84, 116, 128};
|
const int qbank1[NBANDS128+2] = {0, 2, 4, 6, 8, 12, 16, 20, 24, 28, 36, 44, 52, 68, 84, 116, 128};
|
||||||
|
|
||||||
const int qpulses1[NBANDS128] = {7, 5, 5, 5, 4, 5, 4, 5, 5, 4, -2, 0, 0, 0, 0};
|
const int qpulses1[NBANDS128] = {7, 5, 5, 5, 4, 5, 4, 5, 5, 4, 2, 0, 0, 0, 0};
|
||||||
const int qpulses2[NBANDS128] = {28,24,20,16,24,20, 18, 12, 10, 10,-7, -4, 0, 0, 0};
|
const int qpulses2[NBANDS128] = {28,24,20,16,24,20, 18, 12, 10, 10,-7, -4, 0, 0, 0};
|
||||||
const int qpulses2s[NBANDS128] ={38,30,24,20,24,20, 18, 16, 14, 20,-20,-14, -8, -8, -5};
|
const int qpulses2s[NBANDS128] ={38,30,24,20,24,20, 18, 16, 14, 20,-20,-14, -8, -8, -5};
|
||||||
|
|
||||||
const int pbank1[PBANDS128+2] = {0, 4, 8, 12, 20, PITCH_END128, 128};
|
const int pbank1[PBANDS128+2] = {0, 2, 4, 6, 8, 12, 20, 28, PITCH_END128, 128};
|
||||||
|
//const int pbank1[PBANDS128+2] = {0, 4, 8, 12, 20, PITCH_END128, 128};
|
||||||
|
|
||||||
|
|
||||||
#define NBANDS256 15
|
#define NBANDS256 15
|
||||||
#define PBANDS256 5
|
#define PBANDS256 8
|
||||||
#define PITCH_END256 72
|
#define PITCH_END256 88
|
||||||
const int qbank3[NBANDS256+2] = {0, 4, 8, 12, 16, 24, 32, 40, 48, 56, 72, 88, 104, 126, 168, 232, 256};
|
const int qbank3[NBANDS256+2] = {0, 4, 8, 12, 16, 24, 32, 40, 48, 56, 72, 88, 104, 126, 168, 232, 256};
|
||||||
const int pbank3[PBANDS256+2] = {0, 8, 16, 24, 40, PITCH_END256, 256};
|
//const int pbank3[PBANDS256+2] = {0, 8, 16, 24, 40, PITCH_END256, 256};
|
||||||
|
const int pbank3[PBANDS256+2] = {0, 4, 8, 12, 16, 24, 40, 56, PITCH_END128, 128};
|
||||||
|
|
||||||
const CELTMode mode0 = {
|
const CELTMode mode0 = {
|
||||||
128, /**< overlap */
|
128, /**< overlap */
|
||||||
|
|
|
@ -30,7 +30,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "quant_pitch.h"
|
#include "quant_pitch.h"
|
||||||
|
#include <math.h>
|
||||||
|
#include "pgain_table.h"
|
||||||
|
|
||||||
static const float cdbk_pitch[]={ 0.00826816, 0.00646836, 0.00520978, 0.00632398, 0.0108199 ,
|
static const float cdbk_pitch[]={ 0.00826816, 0.00646836, 0.00520978, 0.00632398, 0.0108199 ,
|
||||||
0.723347, 0.0985132, 0.630212, 0.0546661, 0.0246779 ,
|
0.723347, 0.0985132, 0.630212, 0.0546661, 0.0246779 ,
|
||||||
0.802152, 0.759963, 0.453441, 0.384415, 0.0625198 ,
|
0.802152, 0.759963, 0.453441, 0.384415, 0.0625198 ,
|
||||||
|
@ -93,18 +95,38 @@ void quant_pitch(float *gains, int len, ec_enc *enc)
|
||||||
{
|
{
|
||||||
int i, id;
|
int i, id;
|
||||||
float g2[len];
|
float g2[len];
|
||||||
|
#if 0
|
||||||
for (i=0;i<len;i++)
|
for (i=0;i<len;i++)
|
||||||
g2[i] = gains[i]*gains[i];
|
g2[i] = gains[i]*gains[i];
|
||||||
id = vq_index(g2, cdbk_pitch, len, 32);
|
id = vq_index(g2, cdbk_pitch, len, 32);
|
||||||
ec_enc_uint(enc, id, 32);
|
ec_enc_uint(enc, id, 32);
|
||||||
for (i=0;i<len;i++)
|
for (i=0;i<len;i++)
|
||||||
gains[i] = sqrt(cdbk_pitch[id*len+i]);
|
gains[i] = sqrt(cdbk_pitch[id*len+i]);
|
||||||
|
#else
|
||||||
|
//for (i=0;i<len;i++) printf ("%f ", gains[i]);printf ("\n");
|
||||||
|
for (i=0;i<len;i++)
|
||||||
|
g2[i] = 1-sqrt(1-gains[i]*gains[i]);
|
||||||
|
id = vq_index(g2, pgain_table, len, 128);
|
||||||
|
ec_enc_uint(enc, id, 128);
|
||||||
|
//for (i=0;i<len;i++) printf ("%f ", pgain_table[id*len+i]);printf ("\n");
|
||||||
|
for (i=0;i<len;i++)
|
||||||
|
gains[i] = (sqrt(1-(1-pgain_table[id*len+i])*(1-pgain_table[id*len+i])));
|
||||||
|
//for (i=0;i<len;i++) printf ("%f ", g2[i]);printf ("\n");
|
||||||
|
//for (i=0;i<len;i++) printf ("%f ", gains[i]);printf ("\n");
|
||||||
|
//printf ("\n");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void unquant_pitch(float *gains, int len, ec_dec *dec)
|
void unquant_pitch(float *gains, int len, ec_dec *dec)
|
||||||
{
|
{
|
||||||
int i, id;
|
int i, id;
|
||||||
|
#if 0
|
||||||
id = ec_dec_uint(dec, 32);
|
id = ec_dec_uint(dec, 32);
|
||||||
for (i=0;i<len;i++)
|
for (i=0;i<len;i++)
|
||||||
gains[i] = sqrt(cdbk_pitch[id*len+i]);
|
gains[i] = sqrt(cdbk_pitch[id*len+i]);
|
||||||
|
#else
|
||||||
|
id = ec_dec_uint(dec, 128);
|
||||||
|
for (i=0;i<len;i++)
|
||||||
|
gains[i] = (sqrt(1-(1-pgain_table[id*len+i])*(1-pgain_table[id*len+i])));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue