When you buy a Sangoma card you can buy it with or without hardware echo canceller. In most cases it is recommended to get the echo canceller as audio quality is something you don’t want to compromise on. Having said that, when developing or troubleshooting audio problems is often desirable to switch on/off the echo canceller to see the effects (perhaps, the echo canceller is being very aggressive and disrupting non-voice signals, such as DTMF).
Now, this post is not strictly speaking only about wanpipemon, in fact, most of the commands shown in this posts are executed using the companion tool “wan_ec_client”. It is important to note that “wan_ec_client” is a lower level tool than wanpipemon in the sense that it is meant to interact “directly” with the echo canceller.
The echo canceller can be set into 3 states:
* Powered Off
* Powered On – Normal Mode
* Powered On – Speech Recognition Mode
Powered Off means the actual hardware EC chip will be set in power off mode and therefore won’t be processing any audio at all.
Powered On is the normal status of the echo canceller if your wanpipe configuration contains the setting “HWEC_OPERATION_MODE = OCT_NORMAL” (this is the default when using wancfg_dahdi or wancfg_fs to configure your environment).
This is how you can check the status of the echo canceller:
# wan_ec_client wanpipe1 stats |
This should display the status of the echo canceller in all channels in span 1 (w1g1).
root@sigchld ~ # wan_ec_client wanpipe1 stats wanpipe1: Running Get stats command to Echo Canceller device... Done! ****** Echo Canceller Chip Get Stats wanpipe1 ****** wanpipe1: Number of channels currently open 31 wanpipe1: Number of conference bridges currently open 0 wanpipe1: Number of playout buffers currently loaded 0 wanpipe1: Number of framing error on H.100 bus 0 wanpipe1: Number of errors on H.100 clock CT_C8_A 0 wanpipe1: Number of errors on H.100 frame CT_FRAME_A 0 wanpipe1: Number of errors on H.100 clock CT_C8_B 0 wanpipe1: Number of internal read timeout errors 0 wanpipe1: Number of SDRAM refresh too late errors 0 wanpipe1: Number of PLL jitter errors 0 wanpipe1: Number of HW tone event buffer has overflowed 0 wanpipe1: Number of SW tone event buffer has overflowed 0 wanpipe1: Number of SW Playout event buffer has overflowed 0 |
If you want statistics for a particular channel you can execute the ‘stats_full’ version
root@sigchld ~ # wan_ec_client wanpipe1 stats_full 1 wanpipe1: Running Get stats command to Echo Canceller device... Done! wanpipe1: 1: Echo Channel Operation Mode : POWER DOWN wanpipe1: 1: Enable Tone Disabler : TRUE wanpipe1: 1: Mute Ports : NONE wanpipe1: 1: Enable Extended Tone Detection : FALSE wanpipe1: 1: Current Echo Return Loss : Invalid wanpipe1: 1: Current Echo Return Loss Enhancement : Invalid wanpipe1: 1: Maximum value of the ERL : Invalid wanpipe1: 1: Maximum value of the ERLE : Invalid wanpipe1: 1: Number of Echo Path changes : 0 wanpipe1: 1: Current Echo Delay : Invalid wanpipe1: 1: Maximum Echo Delay : Invalid wanpipe1: 1: Tone Disabler Status : Enabled wanpipe1: 1: Voice activity is detected on SIN port : TRUE wanpipe1: 1: Echo canceller has detected and converged : TRUE wanpipe1: 1: Average power of signal level on RIN : -69 dBm0 wanpipe1: 1: Average power of signal level on SIN : -207 dBm0 wanpipe1: 1: Current gain applied to signal level on RIN : 0 dB wanpipe1: 1: Current gain applied to signal level on SOUT : 0 dB wanpipe1: 1: Average power of the comfort noise injected : -207 dBm0 wanpipe1: 1: (TDM) PCM Law type on SIN : ALAW wanpipe1: 1: (TDM) TDM timeslot on SIN port : 0 wanpipe1: 1: (TDM) TDM stream on SIN port : 6 wanpipe1: 1: (TDM) PCM Law type on RIN : ALAW wanpipe1: 1: (TDM) TDM timeslot on RIN port : 0 wanpipe1: 1: (TDM) TDM stream on RIN port : 4 wanpipe1: 1: (TDM) PCM Law type on SOUT : ALAW wanpipe1: 1: (TDM) TDM timeslot on SOUT port : 0 wanpipe1: 1: (TDM) TDM stream on SOUT port : 7 wanpipe1: 1: (TDM) PCM Law type on ROUT : ALAW wanpipe1: 1: (TDM) TDM timeslot on ROUT port : 0 wanpipe1: 1: (TDM) TDM stream on ROUT port : 5 wanpipe1: 1: (VQE) NLP status : TRUE wanpipe1: 1: (VQE) Enable Tail Displacement : FALSE wanpipe1: 1: (VQE) Offset of the Echo Cancellation window (ms) : 0 wanpipe1: 1: (VQE) Maximum tail length : 128 ms wanpipe1: 1: (VQE) Rin Level control mode : TRUE wanpipe1: 1: (VQE) Rin Control Signal gain : 0 dB wanpipe1: 1: (VQE) Sout Level control mode : TRUE wanpipe1: 1: (VQE) Sout Control Signal gain : 0 dB wanpipe1: 1: (VQE) RIN Automatic Level Control : FALSE wanpipe1: 1: (VQE) RIN Target Level Control : -20 dBm0 wanpipe1: 1: (VQE) SOUT Automatic Level Control : FALSE wanpipe1: 1: (VQE) SOUT Target Level Control : -20 dBm0 wanpipe1: 1: (VQE) Comfort noise mode : NORMAL wanpipe1: 1: (VQE) Remove any DTMF tone detection on SIN port : FALSE wanpipe1: 1: (VQE) Acoustic Echo : FALSE wanpipe1: 1: (VQE) Non Linearity Behavior A : 1 wanpipe1: 1: (VQE) Non Linearity Behavior B : 0 wanpipe1: 1: (VQE) Double Talk algorithm : NORMAL wanpipe1: 1: (VQE) Default ERL (not converged) : -6 dB wanpipe1: 1: (VQE) Acoustic Echo Cancellation default ERL : 0 dB wanpipe1: 1: (VQE) Maximum Acoustic Echo tail length : 128 ms wanpipe1: 1: (VQE) Attenuation Level applied to the noise signal : -18 dB wanpipe1: 1: (VQE) Silence period before the re-activation of VQE features : 1836 ms wanpipe1: 1: (CODEC) Encoder channel port : SOUT wanpipe1: 1: (CODEC) Encoder rate : G.711 64 kBps wanpipe1: 1: (CODEC) Decoder channel port : RIN wanpipe1: 1: (CODEC) Decoder rate : G.711 64 kBps |
You can completely shut down the EC operation on a given channel (you most likely don’t want to do this unless you know what you’re doing)
wan_ec_client wanpipe1 mpd 1 |
This puts the channel 1 echo canceller in “power down” mode (mpd as in ‘Mode Power Down’)
As you guessed probably already, the other modes are ‘mn’ for and ‘msr ‘ for ‘Mode Normal’ and ‘Mode Speech Recognition’ respectively.
wan_ec_client wanpipe1 mn 1 |
wan_ec_client wanpipe1 msr 1 |
Instead of disabling the echo canceller you can enable/disable the bypass functionality. Confusingly, “bypass enable” means that audio goes through the echo canceller, whereas “bypass disable” means audio skips the echo canceller path (but the EC is still turned on). This is due to historical reasons and due to giving low-level programmers too much freedom naming commands 🙂
The bypass commands are actually working at the FPGA level. When the bypass is enabled, the FPGA bridges the audio through the echo canceller first before sending it to the driver. When the bypass is disabled the audio is not bridged through the echo canceller. Simple hu?
root@sigchld ~ # wan_ec_client wanpipe1 bd all wanpipe1: Running Disable bypass command to Echo Canceller device... Done! |
You can verify with wanpipemon that the EC is “disabled” (bypass disabled).
root@sigchld ~ # wanpipemon -i w1g1 -c ehw Sangoma HW Echo Canceller is disabled for all channels! |
Now enable the bypass back.
root@sigchld ~ # wan_ec_client wanpipe1 be all wanpipe1: Running Enable bypass command to Echo Canceller device... Done! |
root@sigchld ~ # wanpipemon -i w1g1 -c ehw Sangoma HW Echo Canceller is enabled for channel 0 Sangoma HW Echo Canceller is enabled for channel 1 Sangoma HW Echo Canceller is enabled for channel 2 Sangoma HW Echo Canceller is enabled for channel 3 Sangoma HW Echo Canceller is enabled for channel 4 Sangoma HW Echo Canceller is enabled for channel 5 Sangoma HW Echo Canceller is enabled for channel 6 Sangoma HW Echo Canceller is enabled for channel 7 Sangoma HW Echo Canceller is enabled for channel 8 Sangoma HW Echo Canceller is enabled for channel 9 Sangoma HW Echo Canceller is enabled for channel 10 Sangoma HW Echo Canceller is enabled for channel 11 Sangoma HW Echo Canceller is enabled for channel 12 Sangoma HW Echo Canceller is enabled for channel 13 Sangoma HW Echo Canceller is enabled for channel 14 Sangoma HW Echo Canceller is enabled for channel 15 Sangoma HW Echo Canceller is enabled for channel 16 Sangoma HW Echo Canceller is enabled for channel 17 Sangoma HW Echo Canceller is enabled for channel 18 Sangoma HW Echo Canceller is enabled for channel 19 Sangoma HW Echo Canceller is enabled for channel 20 Sangoma HW Echo Canceller is enabled for channel 21 Sangoma HW Echo Canceller is enabled for channel 22 Sangoma HW Echo Canceller is enabled for channel 23 Sangoma HW Echo Canceller is enabled for channel 24 Sangoma HW Echo Canceller is enabled for channel 25 Sangoma HW Echo Canceller is enabled for channel 26 Sangoma HW Echo Canceller is enabled for channel 27 Sangoma HW Echo Canceller is enabled for channel 28 Sangoma HW Echo Canceller is enabled for channel 29 Sangoma HW Echo Canceller is enabled for channel 30 Sangoma HW Echo Canceller is enabled for channel 31 |
That’s it for today folks, next time you want to debug echo issues, noise on the lines, distortion etc, it’s a good idea to rule out the echo canceller using the commands described in this post.