dicklyon@561: function ears = CARFAC_Cross_Couple(ears); dicklyon@559: dicklyon@561: n_ears = length(ears); dicklyon@560: if n_ears > 1 alexbrandmeyer@668: n_stages = ears(1).AGC_coeffs(1).n_AGC_stages; dicklyon@560: % now cross-ear mix the stages that updated (leading stages at phase 0): dicklyon@561: for stage = 1:n_stages alexbrandmeyer@668: if ears(1).AGC_state(stage).decim_phase > 0 dicklyon@560: break % all recently updated stages are finished dicklyon@560: else alexbrandmeyer@668: mix_coeff = ears(1).AGC_coeffs(stage).AGC_mix_coeffs; dicklyon@560: if mix_coeff > 0 % Typically stage 1 has 0 so no work on that one. dicklyon@560: this_stage_sum = 0; dicklyon@560: % sum up over the ears and get their mean: dicklyon@560: for ear = 1:n_ears alexbrandmeyer@668: stage_state = ears(ear).AGC_state(stage).AGC_memory; dicklyon@560: this_stage_sum = this_stage_sum + stage_state; dicklyon@560: end dicklyon@560: this_stage_mean = this_stage_sum / n_ears; dicklyon@560: % now move them all toward the mean: dicklyon@560: for ear = 1:n_ears alexbrandmeyer@668: stage_state = ears(ear).AGC_state(stage).AGC_memory; alexbrandmeyer@668: ears(ear).AGC_state(stage).AGC_memory = ... dicklyon@560: stage_state + mix_coeff * (this_stage_mean - stage_state); dicklyon@560: end dicklyon@559: end dicklyon@559: end dicklyon@559: end dicklyon@559: end