[Speex-dev] Exc CB Search very little Question

Jean-Marc Valin jean-marc.valin at usherbrooke.ca
Tue Sep 19 07:06:58 PDT 2006

How about this: the codebook search gives you the N best (in order)
combinations of entries for the current sub-frame. You can simply
compute a one-bit checksum on all the codebook entries and choose which
of the N-best to use based on that and the "message" you have. Of
course, there will be cases where all of the N-best match to the same
checksum, but that's what error-correcting codes are for.


Björn Thalheim a écrit :
> Hi,
> Jean-Marc Valin wrote:
>>> 1. What is the point in multiplying a codebook index with some number
>>> ant adding a loop variable to it as done in the exc unquant function.
>>>    for (j=0;j<subvect_size;j++)         	
>>>       exc[subvect_size*i+j]+=s*0.03125*shape_cb[ind[i]*subvect_size+j];
>> That's just how you represent a 2D array in C: the codebook has
>> shape_cb_size entries and subvect_size samples per entry.
> Ok, that helps. Thanks.
>>> PS: for me personally, I'd like to know how to change the cb id found
>>> while keeping the error introduced by this low.
>> That's for steganography? I'd say you just look at the nbest list and
>> chose the 2nd, 3rd, ... best entry instead of the first.
> Yes. I already introduced into the LSP prediction such an nbest list to
> do that straightforward. My goal is to make sure if nothing is embedded,
> the altered Speex version still needs to write exactly the same
> coefficients as the original non-stego version.
> For my scenario, I stick to NB encoding at 15kbps, so N is equal to 2.
> So all I can do, in my opinion, is to check if the LSBs of
> best_nind[0][i] and best_nind[1][i] (for each i in 0:nb_subvect) are
> different. The Problem is, that I would like to know how big the error
> is, which I introduce into the signal by this change. But in the end, I
> only know the ndist for all indexes of the last one of these nb_subvect
> indexes. (I could increase N of course, but I guess the condition stated
> in the second line of the first paragraph here could be violated by that)
> So for my choice stated above, I can only change something on the last
> of these nb_subvect CB line IDs, because I can measure the impact by
> (ndist[0]-ndist[1])^2, only for i==nb_subvect-1 but for each
> i<nb_subvect-1 I don't know what the impact is on the overall error.
> So I think if I want to have control, I can only use the last of these
> nb_subvect codebook entries.
> Am I right on this?
> Regards,
> Björn

More information about the Speex-dev mailing list