mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
Staging: echo: coding style cleanups
Some remaining coding style cleanups to the header files and the echo.c file. Cc: David Rowe <david@rowetel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
c8b3953c4c
commit
56791f0a85
4 changed files with 67 additions and 63 deletions
|
@ -220,12 +220,12 @@ static inline void lms_adapt_bg(struct oslec_state *ec, int clean,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static __inline__ int top_bit(unsigned int bits)
|
static inline int top_bit(unsigned int bits)
|
||||||
{
|
{
|
||||||
if (bits == 0)
|
if (bits == 0)
|
||||||
return -1;
|
return -1;
|
||||||
else
|
else
|
||||||
return (int)fls((int32_t)bits)-1;
|
return (int)fls((int32_t)bits)-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct oslec_state *oslec_create(int len, int adaption_mode)
|
struct oslec_state *oslec_create(int len, int adaption_mode)
|
||||||
|
@ -466,7 +466,7 @@ int16_t oslec_update(struct oslec_state *ec, int16_t tx, int16_t rx)
|
||||||
|
|
||||||
factor = (2^30) * (2^-2) * clean_bg_rx/P
|
factor = (2^30) * (2^-2) * clean_bg_rx/P
|
||||||
|
|
||||||
(30 - 2 - log2(P))
|
(30 - 2 - log2(P))
|
||||||
factor = clean_bg_rx 2 ----- (3)
|
factor = clean_bg_rx 2 ----- (3)
|
||||||
|
|
||||||
To avoid a divide we approximate log2(P) as top_bit(P),
|
To avoid a divide we approximate log2(P) as top_bit(P),
|
||||||
|
|
|
@ -28,13 +28,17 @@
|
||||||
#ifndef __ECHO_H
|
#ifndef __ECHO_H
|
||||||
#define __ECHO_H
|
#define __ECHO_H
|
||||||
|
|
||||||
/*! \page echo_can_page Line echo cancellation for voice
|
/*
|
||||||
|
Line echo cancellation for voice
|
||||||
|
|
||||||
|
What does it do?
|
||||||
|
|
||||||
\section echo_can_page_sec_1 What does it do?
|
|
||||||
This module aims to provide G.168-2002 compliant echo cancellation, to remove
|
This module aims to provide G.168-2002 compliant echo cancellation, to remove
|
||||||
electrical echoes (e.g. from 2-4 wire hybrids) from voice calls.
|
electrical echoes (e.g. from 2-4 wire hybrids) from voice calls.
|
||||||
|
|
||||||
\section echo_can_page_sec_2 How does it work?
|
|
||||||
|
How does it work?
|
||||||
|
|
||||||
The heart of the echo cancellor is FIR filter. This is adapted to match the
|
The heart of the echo cancellor is FIR filter. This is adapted to match the
|
||||||
echo impulse response of the telephone line. It must be long enough to
|
echo impulse response of the telephone line. It must be long enough to
|
||||||
adequately cover the duration of that impulse response. The signal transmitted
|
adequately cover the duration of that impulse response. The signal transmitted
|
||||||
|
@ -108,7 +112,8 @@ major mis-convergence in the adaption process. An assessment algorithm is
|
||||||
needed which produces a fairly accurate result from a very short burst of far
|
needed which produces a fairly accurate result from a very short burst of far
|
||||||
end energy.
|
end energy.
|
||||||
|
|
||||||
\section echo_can_page_sec_3 How do I use it?
|
How do I use it?
|
||||||
|
|
||||||
The echo cancellor processes both the transmit and receive streams sample by
|
The echo cancellor processes both the transmit and receive streams sample by
|
||||||
sample. The processing function is not declared inline. Unfortunately,
|
sample. The processing function is not declared inline. Unfortunately,
|
||||||
cancellation requires many operations per sample, so the call overhead is only
|
cancellation requires many operations per sample, so the call overhead is only
|
||||||
|
@ -118,7 +123,7 @@ a minor burden.
|
||||||
#include "fir.h"
|
#include "fir.h"
|
||||||
#include "oslec.h"
|
#include "oslec.h"
|
||||||
|
|
||||||
/*!
|
/*
|
||||||
G.168 echo canceller descriptor. This defines the working state for a line
|
G.168 echo canceller descriptor. This defines the working state for a line
|
||||||
echo canceller.
|
echo canceller.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -23,14 +23,6 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*! \page fir_page FIR filtering
|
|
||||||
\section fir_page_sec_1 What does it do?
|
|
||||||
???.
|
|
||||||
|
|
||||||
\section fir_page_sec_2 How does it work?
|
|
||||||
???.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_FIR_H_)
|
#if !defined(_FIR_H_)
|
||||||
#define _FIR_H_
|
#define _FIR_H_
|
||||||
|
|
||||||
|
@ -62,10 +54,10 @@
|
||||||
can.
|
can.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*
|
||||||
16 bit integer FIR descriptor. This defines the working state for a single
|
* 16 bit integer FIR descriptor. This defines the working state for a single
|
||||||
instance of an FIR filter using 16 bit integer coefficients.
|
* instance of an FIR filter using 16 bit integer coefficients.
|
||||||
*/
|
*/
|
||||||
struct fir16_state_t {
|
struct fir16_state_t {
|
||||||
int taps;
|
int taps;
|
||||||
int curr_pos;
|
int curr_pos;
|
||||||
|
@ -73,11 +65,11 @@ struct fir16_state_t {
|
||||||
int16_t *history;
|
int16_t *history;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*
|
||||||
32 bit integer FIR descriptor. This defines the working state for a single
|
* 32 bit integer FIR descriptor. This defines the working state for a single
|
||||||
instance of an FIR filter using 32 bit integer coefficients, and filtering
|
* instance of an FIR filter using 32 bit integer coefficients, and filtering
|
||||||
16 bit integer data.
|
* 16 bit integer data.
|
||||||
*/
|
*/
|
||||||
struct fir32_state_t {
|
struct fir32_state_t {
|
||||||
int taps;
|
int taps;
|
||||||
int curr_pos;
|
int curr_pos;
|
||||||
|
@ -85,10 +77,10 @@ struct fir32_state_t {
|
||||||
int16_t *history;
|
int16_t *history;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*
|
||||||
Floating point FIR descriptor. This defines the working state for a single
|
* Floating point FIR descriptor. This defines the working state for a single
|
||||||
instance of an FIR filter using floating point coefficients and data.
|
* instance of an FIR filter using floating point coefficients and data.
|
||||||
*/
|
*/
|
||||||
struct fir_float_state_t {
|
struct fir_float_state_t {
|
||||||
int taps;
|
int taps;
|
||||||
int curr_pos;
|
int curr_pos;
|
||||||
|
@ -222,4 +214,3 @@ static inline int16_t fir32(struct fir32_state_t *fir, int16_t sample)
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
/*- End of file ------------------------------------------------------------*/
|
|
||||||
|
|
|
@ -27,8 +27,6 @@
|
||||||
#ifndef __OSLEC_H
|
#ifndef __OSLEC_H
|
||||||
#define __OSLEC_H
|
#define __OSLEC_H
|
||||||
|
|
||||||
/* TODO: document interface */
|
|
||||||
|
|
||||||
/* Mask bits for the adaption mode */
|
/* Mask bits for the adaption mode */
|
||||||
#define ECHO_CAN_USE_ADAPTION 0x01
|
#define ECHO_CAN_USE_ADAPTION 0x01
|
||||||
#define ECHO_CAN_USE_NLP 0x02
|
#define ECHO_CAN_USE_NLP 0x02
|
||||||
|
@ -38,49 +36,59 @@
|
||||||
#define ECHO_CAN_USE_RX_HPF 0x20
|
#define ECHO_CAN_USE_RX_HPF 0x20
|
||||||
#define ECHO_CAN_DISABLE 0x40
|
#define ECHO_CAN_DISABLE 0x40
|
||||||
|
|
||||||
/*!
|
/**
|
||||||
G.168 echo canceller descriptor. This defines the working state for a line
|
* oslec_state: G.168 echo canceller descriptor.
|
||||||
echo canceller.
|
*
|
||||||
*/
|
* This defines the working state for a line echo canceller.
|
||||||
|
*/
|
||||||
struct oslec_state;
|
struct oslec_state;
|
||||||
|
|
||||||
/*! Create a voice echo canceller context.
|
/**
|
||||||
\param len The length of the canceller, in samples.
|
* oslec_create - Create a voice echo canceller context.
|
||||||
\return The new canceller context, or NULL if the canceller could not be created.
|
* @len: The length of the canceller, in samples.
|
||||||
*/
|
* @return: The new canceller context, or NULL if the canceller could not be
|
||||||
|
* created.
|
||||||
|
*/
|
||||||
struct oslec_state *oslec_create(int len, int adaption_mode);
|
struct oslec_state *oslec_create(int len, int adaption_mode);
|
||||||
|
|
||||||
/*! Free a voice echo canceller context.
|
/**
|
||||||
\param ec The echo canceller context.
|
* oslec_free - Free a voice echo canceller context.
|
||||||
*/
|
* @ec: The echo canceller context.
|
||||||
|
*/
|
||||||
void oslec_free(struct oslec_state *ec);
|
void oslec_free(struct oslec_state *ec);
|
||||||
|
|
||||||
/*! Flush (reinitialise) a voice echo canceller context.
|
/**
|
||||||
\param ec The echo canceller context.
|
* oslec_flush - Flush (reinitialise) a voice echo canceller context.
|
||||||
*/
|
* @ec: The echo canceller context.
|
||||||
|
*/
|
||||||
void oslec_flush(struct oslec_state *ec);
|
void oslec_flush(struct oslec_state *ec);
|
||||||
|
|
||||||
/*! Set the adaption mode of a voice echo canceller context.
|
/**
|
||||||
\param ec The echo canceller context.
|
* oslec_adaption_mode - set the adaption mode of a voice echo canceller context.
|
||||||
\param adapt The mode.
|
* @ec The echo canceller context.
|
||||||
*/
|
* @adaption_mode: The mode.
|
||||||
|
*/
|
||||||
void oslec_adaption_mode(struct oslec_state *ec, int adaption_mode);
|
void oslec_adaption_mode(struct oslec_state *ec, int adaption_mode);
|
||||||
|
|
||||||
void oslec_snapshot(struct oslec_state *ec);
|
void oslec_snapshot(struct oslec_state *ec);
|
||||||
|
|
||||||
/*! Process a sample through a voice echo canceller.
|
/**
|
||||||
\param ec The echo canceller context.
|
* oslec_update: Process a sample through a voice echo canceller.
|
||||||
\param tx The transmitted audio sample.
|
* @ec: The echo canceller context.
|
||||||
\param rx The received audio sample.
|
* @tx: The transmitted audio sample.
|
||||||
\return The clean (echo cancelled) received sample.
|
* @rx: The received audio sample.
|
||||||
*/
|
*
|
||||||
|
* The return value is the clean (echo cancelled) received sample.
|
||||||
|
*/
|
||||||
int16_t oslec_update(struct oslec_state *ec, int16_t tx, int16_t rx);
|
int16_t oslec_update(struct oslec_state *ec, int16_t tx, int16_t rx);
|
||||||
|
|
||||||
/*! Process to high pass filter the tx signal.
|
/**
|
||||||
\param ec The echo canceller context.
|
* oslec_hpf_tx: Process to high pass filter the tx signal.
|
||||||
\param tx The transmitted auio sample.
|
* @ec: The echo canceller context.
|
||||||
\return The HP filtered transmit sample, send this to your D/A.
|
* @tx: The transmitted auio sample.
|
||||||
*/
|
*
|
||||||
|
* The return value is the HP filtered transmit sample, send this to your D/A.
|
||||||
|
*/
|
||||||
int16_t oslec_hpf_tx(struct oslec_state *ec, int16_t tx);
|
int16_t oslec_hpf_tx(struct oslec_state *ec, int16_t tx);
|
||||||
|
|
||||||
#endif /* __OSLEC_H */
|
#endif /* __OSLEC_H */
|
||||||
|
|
Loading…
Reference in a new issue