Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

IPP AEC double - talk

soimattrang
Beginner
1,389 Views
Hi,

I have any question about IPP AEC.

in the document of IPP, description of ippsSubbandController_EC function follow:

IppStatus ippsSubbandController_EC_32f(const Ipp32fc* pSrcAdaptiveFilterErr, const Ipp32fc* pSrcFixedFilterErr, Ipp32fc** ppDstAdaptiveCoefs, Ipp32fc** ppDstFixedCoefs, Ipp32f* pDstSGain, IppsSubbandControllerState_EC_32f* pState)


These functions compare powers of adaptive filter error and fixed filter error and track changes of adaptive filter coefficients power.

If the adaptive filter has a significantly smaller error and is stable (which is indicated by coefficients power changing slowly), its coefficients are copied to the fixed filter. This case corresponds to no double-talk mode.

If the fixed filter has a significantly smaller error, its coefficients are copied to the adaptive filter. This case corresponds to the double-talk mode.

the description above indicate that, internal of ippsSubbandController_EC function detected double - talk mode, is this right?


Send gain coefficient calculation (non-linear processor technology) is based on presence of the double-talk mode and changes of receive-in and send-in signal powers. So, to rely on value of pDstSGain parameter could i know presence of double-talk mode? if double-talk is presence how is value of pDstSGain?

Thank you very much!
0 Kudos
1 Solution
Ivan_Ryzhachkin__Int
New Contributor I
1,389 Views
Quoting - soimattrang

Hi,
I mean NLP, was it implemented in the cnr_32f function? do I have to set parameter Ec_Info.params.modes.cng = 1 to enable this feature?

Hi,
Sure,

pInfo->params.modes.nlp = 1

state->nlp=1 for sb in cnr_32f.
cng stay for comfort noise generation.
regards,
Ivan

View solution in original post

0 Kudos
14 Replies
Ivan_Ryzhachkin__Int
New Contributor I
1,389 Views
Quoting - soimattrang
Hi,

I have any question about IPP AEC.

in the document of IPP, description of ippsSubbandController_EC function follow:

IppStatus ippsSubbandController_EC_32f(const Ipp32fc* pSrcAdaptiveFilterErr, const Ipp32fc* pSrcFixedFilterErr, Ipp32fc** ppDstAdaptiveCoefs, Ipp32fc** ppDstFixedCoefs, Ipp32f* pDstSGain, IppsSubbandControllerState_EC_32f* pState)


These functions compare powers of adaptive filter error and fixed filter error and track changes of adaptive filter coefficients power.

If the adaptive filter has a significantly smaller error and is stable (which is indicated by coefficients power changing slowly), its coefficients are copied to the fixed filter. This case corresponds to no double-talk mode.

If the fixed filter has a significantly smaller error, its coefficients are copied to the adaptive filter. This case corresponds to the double-talk mode.

the description above indicate that, internal of ippsSubbandController_EC function detected double - talk mode, is this right?


Send gain coefficient calculation (non-linear processor technology) is based on presence of the double-talk mode and changes of receive-in and send-in signal powers. So, to rely on value of pDstSGain parameter could i know presence of double-talk mode? if double-talk is presence how is value of pDstSGain?

Thank you very much!

Hi,
-coefficientsmay divergein the case of NO DT as well.
-sGainwas designed for NLP but currently doesn't used as NLP has another logic now.
Thanks you,
Ivan
0 Kudos
soimattrang
Beginner
1,389 Views

Hi,
-coefficientsmay divergein the case of NO DT as well.
-sGainwas designed for NLP but currently doesn't used as NLP has another logic now.
Thanks you,
Ivan

Hi,

So, How to detect double talk state with IPP. is there possibility to detect double talk with IPP AEC?
0 Kudos
soimattrang
Beginner
1,389 Views
No answer for a long time. This forum is very poor
0 Kudos
soimattrang
Beginner
1,389 Views
No answer for a long time. This forum is very poor :(
0 Kudos
soimattrang
Beginner
1,389 Views
No answer for a long time. This forum is very poor :-(
0 Kudos
Ivan_Ryzhachkin__Int
New Contributor I
1,390 Views
Quoting - soimattrang
Hi,

I have any question about IPP AEC.

in the document of IPP, description of ippsSubbandController_EC function follow:

IppStatus ippsSubbandController_EC_32f(const Ipp32fc* pSrcAdaptiveFilterErr, const Ipp32fc* pSrcFixedFilterErr, Ipp32fc** ppDstAdaptiveCoefs, Ipp32fc** ppDstFixedCoefs, Ipp32f* pDstSGain, IppsSubbandControllerState_EC_32f* pState)


These functions compare powers of adaptive filter error and fixed filter error and track changes of adaptive filter coefficients power.

If the adaptive filter has a significantly smaller error and is stable (which is indicated by coefficients power changing slowly), its coefficients are copied to the fixed filter. This case corresponds to no double-talk mode.

If the fixed filter has a significantly smaller error, its coefficients are copied to the adaptive filter. This case corresponds to the double-talk mode.

the description above indicate that, internal of ippsSubbandController_EC function detected double - talk mode, is this right?


Send gain coefficient calculation (non-linear processor technology) is based on presence of the double-talk mode and changes of receive-in and send-in signal powers. So, to rely on value of pDstSGain parameter could i know presence of double-talk mode? if double-talk is presence how is value of pDstSGain?

Thank you very much!

Yes, really poor. As I'm subscribed to the thread but didn't receive no one post. Sorry.
IPP doesn't show the DT state. You may try using the condition described above forDT detection and uncomment ownSubbandController_EC_32f() and comment ippsSubbandController_EC_32f
and uncoomment
// 0.35 * fixed_pwr > adaptive_pwr) {
and comment
fixed_pwr > adaptive_pwr && (!dtFlag)) {
Regards,
Ivan


0 Kudos
soimattrang
Beginner
1,390 Views
Yes, really poor. As I'm subscribed to the thread but didn't receive no one post. Sorry.
IPP doesn't show the DT state. You may try using the condition described above forDT detection and uncomment ownSubbandController_EC_32f() and comment ippsSubbandController_EC_32f
and uncoomment
// 0.35 * fixed_pwr > adaptive_pwr) {
and comment
fixed_pwr > adaptive_pwr && (!dtFlag)) {
Regards,
Ivan



Thanks for answer,

So, are there any differences between ippsSubbandController_EC_32f and ownSubbandController_EC_32f?

internal of ippsSubbandController_EC function detected double - talk state, is this right? If right, so, Why performance of ippsSubbandController_EC is very poor when double talk state occurs


0 Kudos
Ivan_Ryzhachkin__Int
New Contributor I
1,390 Views
Quoting - soimattrang
Hi,

I have any question about IPP AEC.

in the document of IPP, description of ippsSubbandController_EC function follow:

IppStatus ippsSubbandController_EC_32f(const Ipp32fc* pSrcAdaptiveFilterErr, const Ipp32fc* pSrcFixedFilterErr, Ipp32fc** ppDstAdaptiveCoefs, Ipp32fc** ppDstFixedCoefs, Ipp32f* pDstSGain, IppsSubbandControllerState_EC_32f* pState)


These functions compare powers of adaptive filter error and fixed filter error and track changes of adaptive filter coefficients power.

If the adaptive filter has a significantly smaller error and is stable (which is indicated by coefficients power changing slowly), its coefficients are copied to the fixed filter. This case corresponds to no double-talk mode.

If the fixed filter has a significantly smaller error, its coefficients are copied to the adaptive filter. This case corresponds to the double-talk mode.

the description above indicate that, internal of ippsSubbandController_EC function detected double - talk mode, is this right?


Send gain coefficient calculation (non-linear processor technology) is based on presence of the double-talk mode and changes of receive-in and send-in signal powers. So, to rely on value of pDstSGain parameter could i know presence of double-talk mode? if double-talk is presence how is value of pDstSGain?

Thank you very much!

Hi,
with the changes suggested the content becames similar. Really some simple implementations of DT were tried with no big effect. Seems it's the area of improvements.
best regards,
Ivan

0 Kudos
soimattrang
Beginner
1,390 Views

Hi,
with the changes suggested the content becames similar. Really some simple implementations of DT were tried with no big effect. Seems it's the area of improvements.
best regards,
Ivan


Hi,

Does AEC(ver. 6.1.1) has using residual echo canceller?

best regards,
Duongdx
0 Kudos
Ivan_Ryzhachkin__Int
New Contributor I
1,390 Views
Quoting - soimattrang

Hi,

Does AEC(ver. 6.1.1) has using residual echo canceller?

best regards,
Duongdx

Hi Duongdx,
Yes, if you mean NLP (non-linear processing). NLP mitigates the residual echo after NLMS block. The nlp option usedin the sample.
Ivan
0 Kudos
soimattrang
Beginner
1,390 Views

Hi Duongdx,
Yes, if you mean NLP (non-linear processing). NLP mitigates the residual echo after NLMS block. The nlp option usedin the sample.
Ivan

Hi,
I mean NLP, was it implemented in the cnr_32f function? do I have to set parameter Ec_Info.params.modes.cng = 1 to enable this feature?

Currently, I set AEC's parameters follow:

Ec_Info.params.pcmType.sample_frequency=16000;
Ec_Info.params.pcmType.bitPerSample=16;
Ec_Info.params.pcmType.nChannels=1;
Ec_Info.params.algType=EC_SUBBAND;
Ec_Info.params.modes.adapt=AD_FULADAPT;
Ec_Info.params.modes.zeroCoeff=1;
Ec_Info.params.echotail=200;
Ec_Info.params.modes.nlp=1;
Ec_Info.params.modes.ah=1;
Ec_Info.params.modes.td=1;
Ec_Info.params.modes.cng=0;
Ec_Info.params.modes.nr=4;
Ec_Info.params.modes.nr_smooth=0;
Ec_Info.params.modes.ap=1;
Ec_Info.params.modes.dcFlag = 1;

did Parameters set above the best for performance of AEC?

0 Kudos
Ivan_Ryzhachkin__Int
New Contributor I
1,390 Views
Quoting - soimattrang

Hi,
I mean NLP, was it implemented in the cnr_32f function? do I have to set parameter Ec_Info.params.modes.cng = 1 to enable this feature?

Hi,
Sure,

pInfo->params.modes.nlp = 1

state->nlp=1 for sb in cnr_32f.
cng stay for comfort noise generation.
regards,
Ivan
0 Kudos
jhr
Beginner
1,389 Views

Hi,
Sure,

pInfo->params.modes.nlp = 1

state->nlp=1 for sb in cnr_32f.
cng stay for comfort noise generation.
regards,
Ivan

By the way...

Does any one knows what Ec_Info.params.modes.zeroCoeff=1; does ?

If you look at the code sample there is a big "/ ???" beside it, so even the sample developper have no clue about it...

Personally I had bad results with it and now I set it to 0.
0 Kudos
Ivan_Ryzhachkin__Int
New Contributor I
1,389 Views
Quoting - jhr

By the way...

Does any one knows what Ec_Info.params.modes.zeroCoeff=1; does ?

If you look at the code sample there is a big "/ ???" beside it, so even the sample developper have no clue about it...

Personally I had bad results with it and now I set it to 0.

Hi,
zeroCoeff = 1 orders both adaptation and fixed filter coefficients zeroingwhile init() and reinit().
The comment ///? - reflects the situation of some ambiguitybetweenexternal and internal option (internally zero means zeroing).
Theoretically in thesituation ofstable echo path and environment the better resultcould be obtainedwhen pre-trained coefficientsused (not zeroed in reinit for ex. when the newcall estableshed).
regards,
Ivan

0 Kudos
Reply