Overview
Estimates the direction of arrival in a 2d circle
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 | 196608000 | 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.