Can anyone shed some light on what the difference between mu and V are as defined by the help document on the AEC module? In the DSP literature I'm familiar with, mu generally represents the adaptation step size but it's not immediately clear to me that's the case here. Nor can I say that I've ever run across an "Adaptation constant" before. My end goal is to be able to track the evolution of the adaptation step size of the filter over time and plot it in Matlab. I was going to achieve this by grabbing the value after each call to process(). Any help in achieving this task and understanding the differences between the variables would be greatly appreciated.
Thanks!
6:35pm
Hi Graham,
V is a constant scaler applied to the offset denominator in the mu calculation for psi-s (residual noise). This constant specifies the filter's allowable change to a 'moving' impulse response. Simplified down, the AEC does an echo tail length calculation and an impulse response calculation, while keeping track of the error of both over time. By changing V, you are claiming that you expect the impulse response to change. The smaller the value of V, the more you expect the impulse response between the speaker and microphone to change. The variable mu uses this as part of it's whole calculation, but is discrete in determining psi-s(speaker to mic model) from psi-d (the acoustic room model).
12:43pm
Hi Peaston,
Is there any way to get access to these error signal values so I could see how they evolve over time? The AEC block has it's output labeled "errorSignal" but it seemed like there was a lot of other data interleaved within it.
Thanks,
Graham
4:35pm
Hello Graham,
You can read the variable values with the 'Param Get' module. In 'Param Get's module properties, you would change the modVar argument to 'ModuleName.Variable'. For instance, if you named your AEC module 'AEC1' and are trying to read the value of variable 'V', your modVar argument in the 'Param Get' module would be: 'AEC1.V'. You can then feed the output of the 'Param Get' module into a sink module to read the value of the desired parameter.
Thanks,
Kevin
11:04am
Hi Kevin,
Thanks, that sounds like it would work for a real-time implementation. However I'm more interested in being able to access the actual error signals which are used in the calculation in a Matlab execution method. Would this be a simple task?
Thanks,
Graham
6:04pm
Hi Graham,
You can get access to the internal variables of the AEC from Matlab just like any other module. For example, in a layout with an AEC called AEC1, you can access the variables from Matlab using:
>> GSYS = get_gsys;
>> GSYS.SYS.AEC1.V
>> GSYS.SYS.AEC1.mu
See https://dspconcepts.com/sites/default/files/audio-weaver-matlab-api.pdf for more info on accessing variable from Matlab.
11:25am
Hi Steve,
Thanks for the reply but I'm more interested in getting the error signals themselves if that is possible. The LMS Norm block has output ports for the data content as well as the error signal. Is there a way to get the error signal with the Sb Mono AEC block? Currently the echo canceled output appears on the errorSignal pin...
- Graham
1:25pm
Hi Graham,
Thanks for the clarification. The output signal is called errorSignal because it is the difference between the dataIn and the filtered reference signal. Thus, it is the echo cancelled signal and the error signal.
Hope this helps.
Steve
9:21am
Thanks Steve. I only recently found out this is standard nomenclature for AEC modules. How would you recommend tracking the AEC modules performance over time? My team is interested in trying to see if there's a difference in the rate and stability of convergence for the sub-band filters. We're currently operating with 256 sub-bands and manually plotting the frequency response for each of the filters generates far too much data to process. Hence why I was interested in accessing the error signals DSPC_Peaston described above.