Skip to content

Commit

Permalink
Audio: Optimize and fix TDFB direction calculation
Browse files Browse the repository at this point in the history
This check-in refines the TDFB direction calculation, addressing both
performance and correctness:

Fixes:
- Correct infinite loop in `max_mic_distance` by fixing loop conditions.
- Fix off-by-one error in `line_array_mode_check` ensuring all checks
  for co-linearity among microphone locations are performed.

Optimizations:
- Enhance `theoretical_time_differences` efficiency by substituting
  division with multiplication using a precomputed reciprocal.

These modification collectively enhance the algorithm's robustness
and computational efficiency.

Signed-off-by: Shriram Shastry <malladi.sastry@intel.com>
  • Loading branch information
ShriramShastry committed May 28, 2024
1 parent 90c54a6 commit e219c00
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions src/audio/tdfb/tdfb_direction.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,10 +125,8 @@ static int16_t max_mic_distance(struct tdfb_comp_data *cd)

/* Max lag based on largest array dimension. Microphone coordinates are Q4.12 meters */
for (i = 0; i < cd->config->num_mic_locations; i++) {
for (j = 0; i < cd->config->num_mic_locations; i++) {
if (j == i)
continue;

/* Start from i+1 halves the amount of iteration & to eliminate redundant checks */
for (j = i + 1; j < cd->config->num_mic_locations; j++) {
dx = cd->mic_locations[i].x - cd->mic_locations[j].x;
dy = cd->mic_locations[i].y - cd->mic_locations[j].y;
dz = cd->mic_locations[i].z - cd->mic_locations[j].z;
Expand Down Expand Up @@ -159,7 +157,8 @@ static bool line_array_mode_check(struct tdfb_comp_data *cd)
* Form vector AB(a,b,c) from x(i+1) - x(i), y(i+1) - y(i), z(i+1) - z(i)
* Form vector AC(d,e,f) from x(i+2) - x(i), y(i+2) - y(1), z(i+2) - z(i)
*/
for (i = 0; i < num_mic_locations - 3; i++) {
/* Calculates cross product only once */
for (i = 0; i < num_mic_locations - 2; i++) {
a = cd->mic_locations[i + 1].x - cd->mic_locations[i].x;
b = cd->mic_locations[i + 1].y - cd->mic_locations[i].y;
c = cd->mic_locations[i + 1].z - cd->mic_locations[i].z;
Expand Down Expand Up @@ -282,9 +281,10 @@ static void level_update(struct tdfb_comp_data *cd, int frames, int ch_count, in
/* Calculate mean square level */
for (n = 0; n < frames; n++) {
s = *p;
tmp += ((int32_t)s * s);
p += ch_count;
/* handle circular buffer */
tdfb_cinc_s16(&p, cd->direction.d_end, cd->direction.d_size);
tmp += ((int64_t)s * s);
}

/* Calculate mean square power */
Expand Down

0 comments on commit e219c00

Please sign in to comment.