Open jake266637 opened 5 years ago
This is strange. Do you think you could provide us with some RAW recordings and the config file you are using?
active mu was between 0.1-0.35 and inactive mu was usually 0.05 less than that. N_inactive is at 15.
Here is the config file. @FrancoisGrondin
version = "2.1";
raw: {
fS = 48000;
hopSize = 512;
nBits = 16;
nChannels = 8;
# Input with raw signal from microphones
interface: {
type = "soundcard";
card = 1;
device = 0;
}
}
mapping: {
map: (1, 2, 3, 4, 5, 6, 7, 8);
}
general: {
epsilon = 1E-20;
size:
{
hopSize = 128;
frameSize = 256;
};
samplerate:
{
mu = 16000;
sigma2 = 0.01;
};
speedofsound:
{
mu = 343.0;
sigma2 = 25.0;
};
mics = (
# Microphone 1
{
mu = ( +0.020091, -0.048504, +0.000 );
sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 );
direction = ( +0.000, +0.000, +1.000 );
angle = ( 80.0, 100.0 );
},
# Microphone 2
{
mu = ( -0.020091, -0.048504, +0.000 );
sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 );
direction = ( +0.000, +0.000, +1.000 );
angle = ( 80.0, 100.0 );
},
# Microphone 3
{
mu = ( -0.048504, -0.020091, +0.000 );
sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 );
direction = ( +0.000, +0.000, +1.000 );
angle = ( 80.0, 100.0 );
},
# Microphone 4
{
mu = ( -0.048504, +0.020091, +0.000 );
sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 );
direction = ( +0.000, +0.000, +1.000 );
angle = ( 80.0, 100.0 );
},
# Microphone 5
{
mu = ( -0.020091, +0.048504, +0.000 );
sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 );
direction = ( +0.000, +0.000, +1.000 );
angle = ( 80.0, 100.0 );
},
# Microphone 6
{
mu = ( +0.020091, +0.048504, +0.000 );
sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 );
direction = ( +0.000, +0.000, +1.000 );
angle = ( 80.0, 100.0 );
},
# Microphone 7
{
mu = ( +0.048504, +0.020091, +0.000 );
sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 );
direction = ( +0.000, +0.000, +1.000 );
angle = ( 80.0, 100.0 );
},
# Microphone 8
{
mu = ( +0.048504, -0.020091, +0.000 );
sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 );
direction = ( +0.000, +0.000, +1.000 );
angle = ( 80.0, 100.0 );
}
);
# Spatial filter to include only a range of direction if required
# (may be useful to remove false detections from the floor)
spatialfilters = (
{
direction = ( +0.000, +0.000, +1.000 );
angle = (90.0, 100.0);
}
);
nThetas = 181;
gainMin = 0.25;
};
sne: {
b = 3;
alphaS = 0.1;
L = 150;
delta = 3.0;
alphaD = 0.1;
}
ssl: {
nPots = 4;
nMatches = 10;
probMin = 0.5;
nRefinedLevels = 1;
interpRate = 4;
# Number of scans: level is the resolution of the sphere
# and delta is the size of the maximum sliding window
# (delta = -1 means the size is automatically computed)
scans = (
{ level = 2; delta = -1; },
{ level = 4; delta = -1; }
);
# Output to export potential sources
potential: {
format = "json";
interface: {
type = "file";
path= "/home/pi/matrix_creator_explore/jason.raw"
ip = "127.0.0.1";
port = 9001;
};
};
};
sst: {
# Mode is either "kalman" or "particle"
mode = "kalman";
# Add is either "static" or "dynamic"
add = "dynamic";
# Parameters used by both the Kalman and particle filter
active = (
{ weight = 1.0; mu = 0.15; sigma2 = 0.0025 }
);
inactive = (
{ weight = 1.0; mu = 0.100; sigma2 = 0.0025 }
);
sigmaR2_prob = 0.0025;
sigmaR2_active = 0.0225;
sigmaR2_target = 0.0025;
Pfalse = 0.1;
Pnew = 0.1;
Ptrack = 0.8;
theta_new = 0.9;
N_prob = 1;
theta_prob = 0.8;
N_inactive = ( 15, 15, 15, 15 );
theta_inactive = 0.9;
# Parameters used by the Kalman filter only
kalman: {
sigmaQ = 0.0001;
};
# Parameters used by the particle filter only
particle: {
nParticles = 1000;
st_alpha = 2.0;
st_beta = 0.04;
st_ratio = 0.5;
ve_alpha = 0.05;
ve_beta = 0.2;
ve_ratio = 0.3;
ac_alpha = 0.5;
ac_beta = 0.2;
ac_ratio = 0.2;
Nmin = 0.7;
};
target: (
# { tag = "myTarget"; x = 0.0; y = 0.0; z = 1.0 }
);
# Output to export tracked sources
tracked: {
format = "json";
interface: {
type = "file";
path = "/home/pi/matrix_creator_explore/tracked.raw";
# ip = "<ip>";
# port = 9000;
};
};
}
sss: {
# Mode is either "dds", "dgss" or "dmvdr"
mode_sep = "dds";
mode_pf = "ss";
gain_sep = 10.0;
gain_pf = 3.0;
dds: {
};
dgss: {
mu = 0.01;
lambda = 0.5;
};
dmvdr: {
};
ms: {
alphaPmin = 0.07;
eta = 0.5;
alphaZ = 0.8;
thetaWin = 0.3;
alphaWin = 0.3;
maxAbsenceProb = 0.9;
Gmin = 0.01;
winSizeLocal = 3;
winSizeGlobal = 23;
winSizeFrame = 256;
};
ss: {
Gmin = 0.01;
Gmid = 0.5;
Gslope = 10.0;
}
separated: {
fS = 16000;
hopSize = 128;
nBits = 16;
gain = 200.0;
interface: {
type = "file";
path = "/home/pi/matrix_creator_explore/separated.raw"
# ip = "<ip>";
# port = 10000;
}
};
postfiltered: {
fS = 16000;
hopSize = 128;
nBits = 16;
gain = 10.0;
interface: {
type = "file";
path = "/home/pi/matrix_creator_explore/postfiltered.raw"
# ip = "<IP>";
# port = 10010;
}
};
};
classify: {
frameSize = 4096;
winSize = 3;
tauMin = 88;
tauMax = 551;
deltaTauMax = 20;
alpha = 0.3;
gamma = 0.05;
phiMin = 0.5;
r0 = 0.2;
category: {
format = "undefined";
interface: {
type = "blackhole";
}
}
}
I notices recently some hardware have improper phase calibration between their channels (maybe due to the way the codec samples turn by turn each input). This might explain this. I'll try to make a calibration tool to fix that in the near future. Cheers.
Hello @FrancoisGrondin
I was wondering if there was any progress on this issue yet and also if you could suggest some parameters I could change to improve the localisation of more impulsive sounds in a noisy environment (dog barks outside). I find that the DOA accuracy is only accurate if the dog bark is the sound that actually triggers the recording on one of the 4 channels.
When performing some accuracy testing on the matrix creator using the ODAS software I noticed that above 65 degrees the software latched onto this very quiet noise (potentially not from a physical source). This sound isn't loud enough to trigger the tracking by itself but can cause the software to continue tracking in that direction for a long time after the initial sound. When the software is latched onto this sound it inaccurately calculates the direction of arrival of the sources of interest. Increasing the active and inactive threshold values seemed to allow this problem to be mostly ignored but this then limits the usefulness of the software. Do you have any ideas for what is causing this problem?
I am using the software to determine the DoA of individual dog barks occurring some distance away from the monitor where I want each individual dog bark to have it's own ID tag so the calculated direction is accurate.