Skip to content

GCCDOAV1

Overview

Estimates the direction of arrival in a 2d circle

Module Pack

awe-mod-dspc-vui

ClassID

classID = 16502

Type Definition

typedef struct _ModuleGCCDOAV1
{
ModuleInstanceDescriptor instance;            // Common Audio Weaver module instance structure
INT32 numMics;                                // Number of mics in the array
INT32 numDirs;                                // Number of look directions
INT32 maxNumSources;                          // Maximum number of sources to identify
INT32 interpFactor;                           // Interpolation factor
INT32 fftSize;                                // Size of FFT upstream from this module
INT32 numBins;                                // Number of bins. This should be the input block size
INT32 useInputWeightingPin;                   // Use input weighting pin
INT32 numPairs;                               // Number of microphone pairs
INT32 xCorrsZeroSamp;                         // 0th sample index in the xcorr data
FLOAT32 noiseFloorDBOffset;                   // Offset, in DB, for noise floor weighting. Higher value will weight noise floor less.
INT32 interpBS;                               // Block Size at interpolated rate
FLOAT32 interpSR;                             // Sample rate at interpolated rate
INT32 lookDirLow;                             // Min look direction, in degrees. The low end of the DOA look direction.
INT32 lookDirHigh;                            // Max look direction, in degrees. The high end of the DOA look direction.
FLOAT32 epsilon;                              // Small number
FLOAT32 c;                                    // Speed of sound in meters per sec
FLOAT32 windowSize;                           // How much to extend the look window when comparing measured delays with theoretical time delays. This is relative number.
INT32 removalWindowDelta;                     // Number of samples to remove when filtering DOA Peaks
INT32 tauMaxMax;                              // Maximum theoretical time delays for all mic pair
INT32 tauMinMin;                              // Minimum theoretical time delays for all mic pair
INT32 tdZeroSamp;                             // windowed xcorr 0 delay sample index
INT32 tdLength;                               // Length of the xcorr vector, after windowing
FLOAT32* micArrayCoords;                      // Microphone geometry in cartesian coordinates and in meters. The vector going from (0,0) to (1,0) is considered 0 degrees.
FLOAT32* noiseFloorVar;                       // Microphone noise floor measurement, in linear units.
INT32* taus;                                  // Theoretical time delays based on the mic geometry and other factors.
FLOAT32* lookDirs;                            // Look directions, in degrees.
INT32* tauMax;                                // Maximum theoretical time delays for each mic pair
INT32* tauMin;                                // Minimum theoretical time delays for each mic pair
FLOAT32* G;                                   // Temporary variable from the processing function
FLOAT32* doaValues;                           // Temporary variable from the processing function
FLOAT32* td;                                  // Temporary variable from the processing function
FLOAT32* tdTmp;                               // Temporary variable from the processing function
void * ifft_struct_pointer;                   // Points to an instance of an IFFT module
} ModuleGCCDOAV1Class;

Variables

Properties

Name Type Usage isHidden Default Value Range Units
numMics int const 0 6 Unrestricted
numDirs int const 0 360 Unrestricted
maxNumSources int const 0 3 Unrestricted
interpFactor int const 0 16 Unrestricted
fftSize int const 0 512 Unrestricted
numBins int const 0 257 Unrestricted
useInputWeightingPin int const 0 1 Unrestricted
numPairs int const 0 15 Unrestricted
xCorrsZeroSamp int const 0 128 Unrestricted
noiseFloorDBOffset float parameter 0 5 -20:20
interpBS int derived 0 4097 Unrestricted
interpSR float derived 0 196600000 Unrestricted
lookDirLow int parameter 0 0 0:360
lookDirHigh int parameter 0 360 0:360
epsilon float parameter 1 1e-16 Unrestricted
c float parameter 1 343 Unrestricted
windowSize float parameter 1 0 Unrestricted
removalWindowDelta int parameter 1 2 Unrestricted
tauMaxMax int derived 1 0 Unrestricted
tauMinMin int derived 1 0 Unrestricted
tdZeroSamp int derived 1 0 Unrestricted
tdLength int derived 1 1 Unrestricted
micArrayCoords float* parameter 0 [6 x 2] Unrestricted
noiseFloorVar float* parameter 0 [257 x 1] 0:1
taus int* derived 1 [15 x 360] Unrestricted
lookDirs float* derived 1 [1 x 360] Unrestricted
tauMax int* derived 1 [15 x 1] Unrestricted
tauMin int* derived 1 [15 x 1] Unrestricted
G float* state 0 [4097 x 1] Unrestricted
doaValues float* state 0 [360 x 1] Unrestricted
td float* state 0 [1 x 15] Unrestricted
tdTmp float* state 0 [8192 x 1] Unrestricted
ifft_struct_pointer void * state 1 Unrestricted

Pins

Input Pins

Name micIn
Description Microphone array input - in frequency domain
Data type float
Channel range 6
Block size range 257
Sample rate range Unrestricted
Complex support Complex
Name weight
Description Weighting of each microphone
Data type float
Channel range 6
Block size range 257
Sample rate range Unrestricted
Complex support Real

Output Pins

Name estDirs
Description Estimated directions, in degrees
Data Type float
Name estEnergy
Description Estimated relative energy for each estimated direction
Data Type float

Scratch Pins

Channel Count 1
Block size 4097
Sample rate 48000
Channel Count 1
Block size 8192
Sample rate 48000
Channel Count 1
Block size 8192
Sample rate 48000

Matlab Usage

File Name: gcc_doa_v1_module.m 
 M = gcc_doa_v1_module(NAME, numMics, numDirs, maxNumSources,  interpFactor, fftSize, useInputWeightingPin) 
 Given the DOA output, this module finds the direction of the interference sound.  
 Arguments: 
    NAME - name of the module. 
    numMics - number of microphones in the microphone array 
    numDirs - number of look directions to sample 
    maxNumSources - maximum number of sources to find 
    interpFactor - how much to interpolate for better estimation at the 
    cost of more MIPS 
    fftSize - Size of the FFT operation done upstream from this module. 
    The input blocksize is expected to be fftSize/2 + 1.  
    useInputWeightingPin - If true, then a 2nd input pin will be used for 
    the weighting. The input pin is expected to have numMics channels and 
    same block size as the other input. 

 The input pin is expected to be the microphone signals after processed with the WOLA Analysis filter bank. 

 The first output pin contains maxNumSources channel of size 1. This is the 
 estimated direction of arrival. This is in degrees, between 0 and 359. 
 Direction 0 corresponds to  

 The second output pin contains maxNumSources channel of size 1. This is the 
 associated energy of the direction of arrival estimate (the first 
 output). 

 Copyright 2018.  DSP Concepts, Inc.  All Rights Reserved. 

Copyright (c) 2026 DSP Concepts, Inc.