[Speex-dev] Denoiser level and AEC problem

Ouss ouss at ifrance.com
Wed Sep 20 14:01:56 PDT 2006


Hello,

Is it possible to adjust the level of the denoiser ?
In an old beta, before you change the aggressiveness of the denoiser, it
works very well with the noise of a car, a road etc... but not now.
The AEC too works very well in a old beta, but now, I think there is a
problem... I have tested it with the same sound card (WB 16000).
In any case, your project is the best VOIP library in this world.

Thanks a lot for your work

Ouss



-----Original Message-----
From: speex-dev-bounces at xiph.org [mailto:speex-dev-bounces at xiph.org] On
Behalf Of speex-dev-request at xiph.org
Sent: mardi 19 septembre 2006 21:00
To: speex-dev at xiph.org
Subject: Speex-dev Digest, Vol 28, Issue 16

Send Speex-dev mailing list submissions to
	speex-dev at xiph.org

To subscribe or unsubscribe via the World Wide Web, visit
	http://lists.xiph.org/mailman/listinfo/speex-dev
or, via email, send a message with subject or body 'help' to
	speex-dev-request at xiph.org

You can reach the person managing the list at
	speex-dev-owner at xiph.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Speex-dev digest..."


Today's Topics:

   1. Re: Exc CB Search very little Question (Bj?rn Thalheim)
   2. Re: Exc CB Search very little Question (Jean-Marc Valin)
   3. Re: Exc CB Search very little Question (Bj?rn Thalheim)
   4. Re: Exc CB Search very little Question (Jean-Marc Valin)
   5. Re: Exc CB Search very little Question (Bj?rn Thalheim)


----------------------------------------------------------------------

Message: 1
Date: Tue, 19 Sep 2006 14:36:45 +0200
From: Bj?rn Thalheim <s9268716 at mail.inf.tu-dresden.de>
Subject: Re: [Speex-dev] Exc CB Search very little Question
To: Jean-Marc Valin <jean-marc.valin at usherbrooke.ca>
Cc: speex-dev at xiph.org
Message-ID: <450FE45D.4010902 at mail.inf.tu-dresden.de>
Content-Type: text/plain; charset="iso-8859-1"

Hi,

Jean-Marc Valin wrote:
> Well, you could change the order in the encoder as long as you reverse
> it in the decoder as well.

Ok, I see that in the split_cb_shape_sign_unquant function, that each
coefficient is tied to it's position in the nb_subvect exc coefficients.

Honestly, I have problems understanding what exactly the codebook search
works like. If you have the time to to that, Jean-Marc, I would
appreciate some hints on the following:
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];
2. How does the CB search function split_cb_search_shape_sign work? I
know the parameter N defines the number of candidates for each of the
nb_subvect CB line numbers which are later on written into the stream.
But especially, how the best_ntarget list is being updated, I am a
little clueless.

Regards,

Bjvrn


PS: for me personally, I'd like to know how to change the cb id found
while keeping the error introduced by this low.

-- 
Many a writer seems to think he is never profound except when he can't
understand his own meaning.
		-- George D. Prentice

-- 
Important! Please recognize my new GPG Public Key!
                 Bjvrn Thalheim
gpg fingerprint: 2F22 AAEB 1818 1548 EC78  1AE8 9D2E FCB4 0980 28CC
   download key: wget http://www.ifsr.de/~bjoern/gpg/public_key.asc
       See also: http://www.ifsr.de/~bjoern/gpg/key.html

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 252 bytes
Desc: OpenPGP digital signature
Url :
http://lists.xiph.org/pipermail/speex-dev/attachments/20060919/b7bf65d5/sign
ature-0001.pgp

------------------------------

Message: 2
Date: Tue, 19 Sep 2006 22:50:29 +1000
From: Jean-Marc Valin <jean-marc.valin at usherbrooke.ca>
Subject: Re: [Speex-dev] Exc CB Search very little Question
To: Bj?rn Thalheim <s9268716 at mail.inf.tu-dresden.de>
Cc: speex-dev at xiph.org
Message-ID: <450FE795.4030902 at usherbrooke.ca>
Content-Type: text/plain; charset=ISO-8859-1

> 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.

> 2. How does the CB search function split_cb_search_shape_sign work? I
> know the parameter N defines the number of candidates for each of the
> nb_subvect CB line numbers which are later on written into the stream.
> But especially, how the best_ntarget list is being updated, I am a
> little clueless.

Hard to explain simply. It's a fundamental thing in CELP.

> 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.

	Jean-Marc



------------------------------

Message: 3
Date: Tue, 19 Sep 2006 15:40:59 +0200
From: Bj?rn Thalheim <s9268716 at mail.inf.tu-dresden.de>
Subject: Re: [Speex-dev] Exc CB Search very little Question
To: Jean-Marc Valin <jean-marc.valin at usherbrooke.ca>
Cc: speex-dev at xiph.org
Message-ID: <450FF36B.2020103 at mail.inf.tu-dresden.de>
Content-Type: text/plain; charset="iso-8859-1"

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,

Bjvrn


-- 
Q:	How do you stop an elephant from charging?
A:	Take away his credit cards.

-- 
Important! Please recognize my new GPG Public Key!
                 Bjvrn Thalheim
gpg fingerprint: 2F22 AAEB 1818 1548 EC78  1AE8 9D2E FCB4 0980 28CC
   download key: wget http://www.ifsr.de/~bjoern/gpg/public_key.asc
       See also: http://www.ifsr.de/~bjoern/gpg/key.html

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 252 bytes
Desc: OpenPGP digital signature
Url :
http://lists.xiph.org/pipermail/speex-dev/attachments/20060919/113c7c69/sign
ature-0001.pgp

------------------------------

Message: 4
Date: Wed, 20 Sep 2006 00:06:58 +1000
From: Jean-Marc Valin <jean-marc.valin at usherbrooke.ca>
Subject: Re: [Speex-dev] Exc CB Search very little Question
To: Bj?rn Thalheim <s9268716 at mail.inf.tu-dresden.de>
Cc: speex-dev at xiph.org
Message-ID: <450FF982.7000507 at usherbrooke.ca>
Content-Type: text/plain; charset=ISO-8859-1

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.

	Jean-Marc

Bjvrn Thalheim a icrit :
> 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,
> 
> Bjvrn
> 
> 


------------------------------

Message: 5
Date: Tue, 19 Sep 2006 17:52:26 +0200
From: Bj?rn Thalheim <s9268716 at mail.inf.tu-dresden.de>
Subject: Re: [Speex-dev] Exc CB Search very little Question
To: Jean-Marc Valin <jean-marc.valin at usherbrooke.ca>
Cc: speex-dev at xiph.org
Message-ID: <4510123A.8040102 at mail.inf.tu-dresden.de>
Content-Type: text/plain; charset="iso-8859-1"

Hi,

Jean-Marc Valin wrote:
> 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.

So you're suggesting, I can either write into the stream:
- nind[0][0..nb_subvect], or
- nind[1][0..nb_subvect], or
- nind[2][0..nb_subvect], or
- ...
Or do I have to do a little more hacking in the search function to get
the N best _combinations_ of CB IDs?

Wouldn't it be easier and just as effective (for N==2) to do the following:
Get nb_subvect indeces to write into the stream. Write all but the last
of these into the stream. If nind[0][nb_subvect-1] and
nind[1][nb_subvect-1] have different LSBs and if the difference between
ndist[0] and ndist[1] is small enough (smaller than the normal variation
of ndist[0], which can be measured), we can decide to write
nind[1][nb_subvect-1] into the stream instead of nind[0][nb_subvect-1].
(that's actually what I am doing right now)

> 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.

Yes, thats called Wet Paper Code writing
(http://www.ws.binghamton.edu/fridrich/Research/WPC_TransactionsJournal1.pdf
).
It gives the Embedder the freedom to decide where something can be
embedded and where not without requiring that knowledge from the
receiver. Very interesting thing. Its origin is in hard disk fault
tolerance and its principles where documented several decades ago.

So my goal is right now, to find out where and how I can change things.

Regards,

Bjvrn


-- 
Tomorrow, this will be part of the unchangeable past but fortunately,
it can still be changed today.

-- 
Important! Please recognize my new GPG Public Key!
                 Bjvrn Thalheim
gpg fingerprint: 2F22 AAEB 1818 1548 EC78  1AE8 9D2E FCB4 0980 28CC
   download key: wget http://www.ifsr.de/~bjoern/gpg/public_key.asc
       See also: http://www.ifsr.de/~bjoern/gpg/key.html

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 252 bytes
Desc: OpenPGP digital signature
Url :
http://lists.xiph.org/pipermail/speex-dev/attachments/20060919/2ab517e1/sign
ature-0001.pgp

------------------------------

_______________________________________________
Speex-dev mailing list
Speex-dev at xiph.org
http://lists.xiph.org/mailman/listinfo/speex-dev


End of Speex-dev Digest, Vol 28, Issue 16
*****************************************



More information about the Speex-dev mailing list