Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/speex.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800>2002-03-25 22:38:00 +0300
committerjmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800>2002-03-25 22:38:00 +0300
commita5ba03f1bb790e68d739b58f603de585e62af3fc (patch)
tree7112c31ffbaae345efd646e0fbe39f726b383146 /libspeex
parentccc6adaa61591358b6cad20e55427adb7c64a44c (diff)
Multi-pulse narrowband seem to work (encode+decode). Didn't test the
wideband yet. git-svn-id: http://svn.xiph.org/trunk/speex@3184 0101bb08-14d6-0310-b084-bc0e0c8e3800
Diffstat (limited to 'libspeex')
-rw-r--r--libspeex/modes.c4
-rw-r--r--libspeex/mpulse.c67
-rw-r--r--libspeex/mpulse.h7
3 files changed, 75 insertions, 3 deletions
diff --git a/libspeex/modes.c b/libspeex/modes.c
index 75e5e0d..1c05904 100644
--- a/libspeex/modes.c
+++ b/libspeex/modes.c
@@ -125,7 +125,7 @@ SpeexMode mp_nb_mode = {
&ltp_params_nb,
/*Innovation quantization*/
mpulse_search,
- NULL,
+ mpulse_unquant,
&mpulse_nb
};
@@ -179,6 +179,6 @@ SpeexMode mp_wb_mode = {
&ltp_params_wb,
/*Innovation quantization*/
mpulse_search,
- NULL,
+ mpulse_unquant,
&mpulse_wb
};
diff --git a/libspeex/mpulse.c b/libspeex/mpulse.c
index 0b1192d..06603b9 100644
--- a/libspeex/mpulse.c
+++ b/libspeex/mpulse.c
@@ -68,7 +68,7 @@ int porder(int *p, int *s, int *o, int len)
st=uniq;
en=&uniq[nb_uniq-1];
- for (i=0;i<5;i++)
+ for (i=0;i<len;i++)
printf ("%d ", p[i]);
printf ("\n");
for (i=0;i<nb_uniq;i++)
@@ -156,6 +156,14 @@ void rorder(int *p, int *s, int *o, int bit, int len)
ss[0]=bit;
n=1;
+ for (i=0;i<len;i++)
+ printf ("%d ", p[i]);
+ printf ("\n");
+ for (i=0;i<nb_uniq;i++)
+ printf ("%d ", uniq[i]);
+ printf ("\n");
+
+
for (i=1;i<len;i++)
{
if (i>1&&p[i-1]==p[i-2])
@@ -183,6 +191,10 @@ void rorder(int *p, int *s, int *o, int bit, int len)
n++;
}
+ for (i=0;i<len;i++)
+ printf ("%d ", s[i]);
+ printf ("\n");
+
}
@@ -372,3 +384,56 @@ float *stack
POP(stack);
POP(stack);
}
+
+
+void mpulse_unquant(
+float *exc,
+void *par, /* non-overlapping codebook */
+int nsf, /* number of samples in subframe */
+FrameBits *bits,
+float *stack
+)
+{
+ int i,j, bit1, nb_pulse, quant_gain;
+ float g;
+ int nb_tracks, track_ind_bits;
+ int *track, *signs, *tr;
+ mpulse_params *params;
+ int pulses_per_track;
+ params = (mpulse_params *) par;
+
+ nb_pulse=params->nb_pulse;
+ nb_tracks=params->nb_tracks;
+ pulses_per_track=nb_pulse/nb_tracks;
+ track_ind_bits=params->track_ind_bits;
+
+ track = (int*)PUSH(stack,pulses_per_track);
+ signs = (int*)PUSH(stack,pulses_per_track);
+ tr = (int*)PUSH(stack,pulses_per_track);
+
+ quant_gain=frame_bits_unpack_unsigned(bits, 7);
+ g=exp((quant_gain/8.0)+1);
+
+ for (i=0;i<nb_tracks;i++)
+ {
+ int ind;
+ int max_val=nsf/nb_tracks;
+ bit1=frame_bits_unpack_unsigned(bits, 1);
+ ind = frame_bits_unpack_unsigned(bits,track_ind_bits);
+ printf ("unquant ind = %d\n", ind);
+ for (j=0;j<pulses_per_track;j++)
+ {
+ track[pulses_per_track-1-j]=ind%max_val;
+ ind /= max_val;
+ }
+ rorder(track, signs, tr, bit1, pulses_per_track);
+ for (j=0;j<pulses_per_track;j++)
+ {
+ exc[tr[i]*nb_tracks+i] += signs[j] ? -g : g;
+ }
+ }
+
+ POP(stack);
+ POP(stack);
+ POP(stack);
+}
diff --git a/libspeex/mpulse.h b/libspeex/mpulse.h
index 27d990f..881e705 100644
--- a/libspeex/mpulse.h
+++ b/libspeex/mpulse.h
@@ -45,5 +45,12 @@ FrameBits *bits,
float *stack
);
+void mpulse_unquant(
+float *exc,
+void *par, /* non-overlapping codebook */
+int nsf, /* number of samples in subframe */
+FrameBits *bits,
+float *stack
+);
#endif