Skip to content

Commit

Permalink
EMA version 3.1.1
Browse files Browse the repository at this point in the history
Preparation release for PLATT experiments branch

Important changes:
- Fix level dependency of level uncertainty in SGBF-kain and SGBFB-abel
feature extraction (analog to https://doi.org/10.5281/zenodo.4394186 )

Small changes:
- Added .gitignore
- Compile with flag "-march=native" in make.sh
- Cleaned output of run_experiment.sh
- Simulation log is saved to a file by default
- Remove training/recognition data after simulation
- More small fixes
  • Loading branch information
suaefar committed Feb 2, 2021
1 parent 8339a9c commit fc41869
Show file tree
Hide file tree
Showing 12 changed files with 70 additions and 51 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
fade/simulation-data*
*.mex
*.bin

3 changes: 3 additions & 0 deletions data/processing/platt/batch_process
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ octave-cli --quiet --eval "cd('${DIR}');addpath('${PLATT_PATH}');
if fs ~= 48000
signal = resample(signal, 48000, fs);
end
if size(signal,2) == 1
signal = [signal signal];
end
[left, right] = platt(single(signal(:,1)),single(signal(:,2)));
audiowrite(targetlist{i}, [left, right], 48000, 'BitsPerSample', 32);
printf('.');
Expand Down
7 changes: 3 additions & 4 deletions data/processing/platt/configuration.m
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
% Input calibration
cfg_calib_in = [ 130 130 130 130 130 130 130 130 130 130 130 130 130 130 130 130 130]; % dB SPL !!!
% Output calibration
cfg_calib_out = [ 129.9 129.9 130.0 130.1 129.9 129.6 129.0 128.2 127.7 125.9 120.8 118.2 120.5 120.2 118.9 129.9 137.8]; % dB SPL !!!
%cfg_calib_out = [ 130 130 130 130 130 130 130 130 130 130 130 130 130 130 130 130 130]; % dB SPL @ MIC!!!
cfg_calib_out = [ 130 130 130 130 130 130 130 130 130 130 130 130 130 130 130 130 130]; % dB SPL @ MIC!!!
% Limit for mapping working point and optional dynamic
cfg_speaker_maxlevel = [ 130 130 130 130 130 130 130 130 130 130 130 130 130 130 130 130 130]; % dB SPL @ MIC!!!

Expand All @@ -19,8 +18,8 @@

% Input from SIAM threshold measurements
siam_sweep_freqs = [250 500 1000 2000 4000 6000]; % in Hz
siam_sweep_thresholds_left = [0.0 0.0 0.0 0.0 0.0 0.0 ];
siam_sweep_thresholds_right = [0.0 0.0 0.0 0.0 0.0 0.0 ];
siam_sweep_thresholds_left = [0.0 0.0 0.0 0.0 0.0 0.0];
siam_sweep_thresholds_right = [0.0 0.0 0.0 0.0 0.0 0.0];

expansion_factor = 1;

Expand Down
4 changes: 2 additions & 2 deletions ema/ema.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
#
# Essential Measurement Applications
#
# Copyright (2020) Marc René Schädler
# Main author: (2020-2021) Marc René Schädler
# E-Mail: [email protected]

# Get the directory this script is stored in and its name
DIR=$(cd "$( dirname "$0" )" && pwd)
SCN=$(basename "$0")

# Set the version string
export EMA_VERSION=3.1.0
export EMA_VERSION=3.1.1

# Audio setup configuration
SOUNDDEVICE=USB
Expand Down
17 changes: 13 additions & 4 deletions fade/fade_simulate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,10 @@ fade "${PROJECT}" recognition $RECOGNITIONOPTIONS || error "recognition"
# Evaluation
fade "${PROJECT}" evaluation || error "evaluating results"

# Delete training and recognition data
[ -e "${PROJECT}/training" ] && rm -r "${PROJECT}/training"
[ -e "${PROJECT}/recognition" ] && rm -r "${PROJECT}/recognition"

case "$SIMMODE" in
coarse|medium)
# Evaluate quick simulation to find point of interest
Expand All @@ -252,17 +256,22 @@ case "$SIMMODE" in
awk -F' ' -vt="${QSIM_THRESHOLD}" '{x1=$1;y1=$3/$2;if (y1>t) {if (NR>1) {printf "%.0f",x2+(x2-x1)/(y2-y1)*(t-y2)} exit} x2=x1;y2=y1}')

if [ -z "${POI}" ]; then
echo -e "\nERROR: POI not found\n"
exit 1
echo -e "\nPOI NOT FOUND\n"
else
echo -e "\nPOI found: ${POI}\n"
echo "${POI}" > "${PROJECT}/poi"
fi
echo -e "\nPOI found: ${POI}\n"
echo "${POI}" > "${PROJECT}/poi"
;;
precise)
fade "${PROJECT}" figures || error "figures"
;;
esac

# For big (>1000) simulation experiments delete config and evaluation data as well
#[ -e "${PROJECT}/config" ] && rm -r "${PROJECT}/config"
#[ -e "${PROJECT}/evaluation" ] && rm -r "${PROJECT}/evaluation"

# Move the project to disk
mv "${PROJECT}" "${PROJECTDIR}" || error "figures"

[ -e "${WORKDIR}" ] && rm -rf "${WORKDIR}"
Expand Down
8 changes: 4 additions & 4 deletions fade/features/sgbfb-abel-full/feature_extraction.m
Original file line number Diff line number Diff line change
Expand Up @@ -64,16 +64,16 @@
ht_right = interp1(hp_frequencies, hp_thresholds(2,:), melspec_freqs_right, 'linear', 'extrap');

% Apply absolute hearing threshold
log_melspec_left = max(log_melspec_left - ht_left.', 0);
log_melspec_right = max(log_melspec_right - ht_right.', 0);
log_melspec_left = max(log_melspec_left - ht_left.', 0.5.*randn(size(log_melspec_left)));
log_melspec_right = max(log_melspec_right - ht_right.', 0.5.*randn(size(log_melspec_right)));

% Apply frequency-dependent level-uncertainty
ul_mel_left = interp1(hp_frequencies, hp_uncertainties(1,:), melspec_freqs_left, 'linear', 'extrap');
ul_mel_right = interp1(hp_frequencies, hp_uncertainties(2,:), melspec_freqs_right, 'linear', 'extrap');
ul_mel_left(isnan(ul_mel_left)) = 0.1;
ul_mel_right(isnan(ul_mel_right)) = 0.1;
log_melspec_left = log_melspec_left ./ ul_mel_left.' + randn(size(log_melspec_left));
log_melspec_right = log_melspec_right ./ ul_mel_right.' + randn(size(log_melspec_right));
log_melspec_left = log_melspec_left + ul_mel_left.' .* randn(size(log_melspec_left));
log_melspec_right = log_melspec_right + ul_mel_right.' .* randn(size(log_melspec_right));

% Extract SGBFB features (with adapted parameters to compensate the spectral super-sampling)
features_left = sgbfb(single(log_melspec_left));
Expand Down
8 changes: 4 additions & 4 deletions fade/features/sgbfb-abel-reduced/feature_extraction.m
Original file line number Diff line number Diff line change
Expand Up @@ -64,16 +64,16 @@
ht_right = interp1(hp_frequencies, hp_thresholds(2,:), melspec_freqs_right, 'linear', 'extrap');

% Apply absolute hearing threshold
log_melspec_left = max(log_melspec_left - ht_left.', 0);
log_melspec_right = max(log_melspec_right - ht_right.', 0);
log_melspec_left = max(log_melspec_left - ht_left.', 0.5.*randn(size(log_melspec_left)));
log_melspec_right = max(log_melspec_right - ht_right.', 0.5.*randn(size(log_melspec_right)));

% Apply frequency-dependent level-uncertainty
ul_mel_left = interp1(hp_frequencies, hp_uncertainties(1,:), melspec_freqs_left, 'linear', 'extrap');
ul_mel_right = interp1(hp_frequencies, hp_uncertainties(2,:), melspec_freqs_right, 'linear', 'extrap');
ul_mel_left(isnan(ul_mel_left)) = 0.1;
ul_mel_right(isnan(ul_mel_right)) = 0.1;
log_melspec_left = log_melspec_left ./ ul_mel_left.' + randn(size(log_melspec_left));
log_melspec_right = log_melspec_right ./ ul_mel_right.' + randn(size(log_melspec_right));
log_melspec_left = log_melspec_left + ul_mel_left.' .* randn(size(log_melspec_left));
log_melspec_right = log_melspec_right + ul_mel_right.' .* randn(size(log_melspec_right));

% Extract SGBFB features (with adapted parameters to compensate the spectral super-sampling)
features_left = sgbfb(single(log_melspec_left));
Expand Down
8 changes: 4 additions & 4 deletions fade/features/sgbfb-kain-full/feature_extraction.m
Original file line number Diff line number Diff line change
Expand Up @@ -64,16 +64,16 @@
ht_right = interp1(hp_frequencies, hp_thresholds(2,:), melspec_freqs_right, 'linear', 'extrap');

% Apply absolute hearing threshold
log_melspec_left = max(log_melspec_left - ht_left.', 0);
log_melspec_right = max(log_melspec_right - ht_right.', 0);
log_melspec_left = max(log_melspec_left - ht_left.', 0.5.*randn(size(log_melspec_left)));
log_melspec_right = max(log_melspec_right - ht_right.', 0.5.*randn(size(log_melspec_right)));

% Apply frequency-dependent level-uncertainty
ul_mel_left = interp1(hp_frequencies, hp_uncertainties(1,:), melspec_freqs_left, 'linear', 'extrap');
ul_mel_right = interp1(hp_frequencies, hp_uncertainties(2,:), melspec_freqs_right, 'linear', 'extrap');
ul_mel_left(isnan(ul_mel_left)) = 0.1;
ul_mel_right(isnan(ul_mel_right)) = 0.1;
log_melspec_left = log_melspec_left ./ ul_mel_left.' + randn(size(log_melspec_left));
log_melspec_right = log_melspec_right ./ ul_mel_right.' + randn(size(log_melspec_right));
log_melspec_left = log_melspec_left + ul_mel_left.' .* randn(size(log_melspec_left));
log_melspec_right = log_melspec_right + ul_mel_right.' .* randn(size(log_melspec_right));

% Extract SGBFB features (with adapted parameters to compensate the spectral super-sampling)
features_left = sgbfb(single(log_melspec_left));
Expand Down
8 changes: 4 additions & 4 deletions fade/features/sgbfb-kain-reduced/feature_extraction.m
Original file line number Diff line number Diff line change
Expand Up @@ -64,16 +64,16 @@
ht_right = interp1(hp_frequencies, hp_thresholds(2,:), melspec_freqs_right, 'linear', 'extrap');

% Apply absolute hearing threshold
log_melspec_left = max(log_melspec_left - ht_left.', 0);
log_melspec_right = max(log_melspec_right - ht_right.', 0);
log_melspec_left = max(log_melspec_left - ht_left.', 0.5.*randn(size(log_melspec_left)));
log_melspec_right = max(log_melspec_right - ht_right.', 0.5.*randn(size(log_melspec_right)));

% Apply frequency-dependent level-uncertainty
ul_mel_left = interp1(hp_frequencies, hp_uncertainties(1,:), melspec_freqs_left, 'linear', 'extrap');
ul_mel_right = interp1(hp_frequencies, hp_uncertainties(2,:), melspec_freqs_right, 'linear', 'extrap');
ul_mel_left(isnan(ul_mel_left)) = 0.1;
ul_mel_right(isnan(ul_mel_right)) = 0.1;
log_melspec_left = log_melspec_left ./ ul_mel_left.' + randn(size(log_melspec_left));
log_melspec_right = log_melspec_right ./ ul_mel_right.' + randn(size(log_melspec_right));
log_melspec_left = log_melspec_left + ul_mel_left.' .* randn(size(log_melspec_left));
log_melspec_right = log_melspec_right + ul_mel_right.' .* randn(size(log_melspec_right));

% Extract SGBFB features (with adapted parameters to compensate the spectral super-sampling)
features_left = sgbfb(single(log_melspec_left));
Expand Down
48 changes: 26 additions & 22 deletions fade/run_experiments.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,22 @@ export PLATT_PATH="${DIR}/platt-bin"
DATAPREF="${DIR}/simulation-data/"
mkdir -p "$DATAPREF"

FEATURES='sgbfb-kain'

IMPAIRMENTS=('none')
MEASUREMENTS=('sweep,none-1000,l' 'sweep,openMHA-1000,l' 'sweepinnoise,none-1000,l' 'sweepinnoise,openMHA-1000,l' 'matrix,none-default,quiet,0,b' 'matrix,openMHA-default,quiet,0,b' 'matrix,none-default,whitenoise,65,b' 'matrix,openMHA-default,whitenoise,65,b')

# Features
FEATURES='sgbfb-kain'
MEASUREMENTS=('sweep,none-1000,l' 'sweep,openMHA-1000,l' 'sweepinnoise,none-1000,l' 'sweepinnoise,openMHA-1000,l' 'matrix,none-default,quiet,0,b' 'matrix,openMHA-default,quiet,0,b' 'matrix,none-default,whitenoise,65,b' 'matrix,openMHA-default,whitenoise,65,b')

# Individuals
INDIVIDUALS=(
bisgaard-0-1
)

NUM_SIMULATIONS=$[${#INDIVIDUALS[@]} * ${#MEASUREMENTS[@]} * ${#IMPAIRMENTS[@]}]
COUNT=0
for ((I=0;$I<${#INDIVIDUALS[@]};I++)); do
for ((J=0;$J<${#MEASUREMENTS[@]};J++)); do
for ((K=0;$K<${#IMPAIRMENTS[@]};K++)); do
COUNT=$[${COUNT} + 1]
CONDITIONCODE=($(echo "${MEASUREMENTS[$J]}" | tr '-' ' '))
CONDITION=($(echo "${CONDITIONCODE[0]}" | tr ',' ' '))
PARAMETERS=($(echo "${CONDITIONCODE[1]}" | tr ',' ' '))
Expand All @@ -30,6 +32,7 @@ for ((I=0;$I<${#INDIVIDUALS[@]};I++)); do
IMPAIRMENT="${IMPAIRMENTS[$K]}"

STARTTIME=$(date +%s)
echo "SIMULATION ${COUNT}/${NUM_SIMULATIONS}: Start ${MEASUREMENTS[$J]} with ${INDIVIDUAL} ${FEATURES} ${IMPAIRMENTS}"

# First run to find approximate POI
PREFIX="${DATAPREF}prep1-"
Expand All @@ -44,22 +47,21 @@ for ((I=0;$I<${#INDIVIDUALS[@]};I++)); do
SIMRANGE="-10:10:120"
;;
matrix)
SIMRANGE="[0:10:100]-${PARAMETERS[2]}"
SIMRANGE="[0:10:130]-${PARAMETERS[2]}"
;;
esac

# Run simulation
# Run first simulation
echo "START ${SIMMODE} SIMULATION on '${PROJECTDIR}'"
"${DIR}/fade_simulate.sh" "$PROJECTDIR" "${MEASUREMENTS[$J]}" "$SIMRANGE" "$SIMMODE" "$FEATURES" "$INDIVIDUAL" "${IMPAIRMENT}"
# Get POI
POI=""
[ -e "${PROJECTDIR}/poi" ] && POI=$(cat "${PROJECTDIR}/poi")
if [ -z "$POI" ]; then
echo "POI NOT FOUND - SKIP MEASUREMENT!"
echo "SIMULATION ${COUNT}/${NUM_SIMULATIONS}: ${SIMMODE} SRT NOT FOUND - SKIP!"
continue
fi

echo "SIMULATION TIME: $[$(date +%s)-${STARTTIME}] seconds elapsed"
echo "SIMULATION ${COUNT}/${NUM_SIMULATIONS}: Found ${SIMMODE} SRT ${POI} after $[$(date +%s)-${STARTTIME}]s"

# Second run to find better estimate of POI
PREFIX="${DATAPREF}prep2-"
Expand All @@ -68,27 +70,27 @@ for ((I=0;$I<${#INDIVIDUALS[@]};I++)); do
PROJECTDIR="${PREFIX}${INDIVIDUAL}-M${MEASUREMENTS[$J]}-F${FEATURES}-I${IMPAIRMENTS}"
case "$MEASUREMENT" in
sweep)
SIMRANGE="[-15:5:15]+${POI}"
SIMRANGE="[-18:6:18]+${POI}"
;;
sweepinnoise)
SIMRANGE="[-15:5:15]+${POI}"
SIMRANGE="[-18:6:18]+${POI}"
;;
matrix)
SIMRANGE="[-18:6:18]+${POI}"
;;
esac
# Run simulation

# Run second simulation
echo "START ${SIMMODE} SIMULATION on '${PROJECTDIR}'"
"${DIR}/fade_simulate.sh" "$PROJECTDIR" "${MEASUREMENTS[$J]}" "$SIMRANGE" "$SIMMODE" "$FEATURES" "$INDIVIDUAL" "${IMPAIRMENT}"
# Get POI
POI=""
[ -e "${PROJECTDIR}/poi" ] && POI=$(cat "${PROJECTDIR}/poi")
if [ -z "$POI" ]; then
echo "POI NOT FOUND - SKIP MEASUREMENT!"
echo "SIMULATION ${COUNT}/${NUM_SIMULATIONS}: ${SIMMODE} SRT NOT FOUND - SKIP!"
continue
fi

echo "SIMULATION TIME: $[$(date +%s)-${STARTTIME}] seconds elapsed"
echo "SIMULATION ${COUNT}/${NUM_SIMULATIONS}: Found ${SIMMODE} SRT ${POI} after $[$(date +%s)-${STARTTIME}]s"

# Run actual simulation
PREFIX="${DATAPREF}run-"
Expand All @@ -106,18 +108,20 @@ for ((I=0;$I<${#INDIVIDUALS[@]};I++)); do
SIMRANGE="[-15:3:9]+${POI}"
;;
esac
# Run simulation

# Run final simulation
echo "START ${SIMMODE} SIMULATION on '${PROJECTDIR}'"
"${DIR}/fade_simulate.sh" "$PROJECTDIR" "${MEASUREMENTS[$J]}" "$SIMRANGE" "$SIMMODE" "$FEATURES" "$INDIVIDUAL" "${IMPAIRMENT}"
# Show result
echo "SIMULATION FINISHED"
cat "${PROJECTDIR}/figures/table.txt"
echo -e "\n"
echo "SIMULATION TIME: finished after $[$(date +%s)-${STARTTIME}] seconds"
SRT=$(tail -n+2 "${PROJECTDIR}/figures/table.txt" | tr -s ' ' | cut -d' ' -f 2 | tr -d '\n')
if [ -z "$SRT" ]; then
echo "SIMULATION ${COUNT}/${NUM_SIMULATIONS}: ${SIMMODE} SRT NOT FOUND - SKIP!"
continue
fi
echo "SIMULATION ${COUNT}/${NUM_SIMULATIONS}: Found ${SIMMODE} SRT ${SRT} in $[$(date +%s)-${STARTTIME}]s"
echo -e "\n\n"
done
done
done
done 2>&1 | tee -a simulation.log | grep "^SIMULATION "

# Collect data for evaluation
collect_tables.sh "$DATAPREF" | sort | column -t | tee results.txt
2 changes: 1 addition & 1 deletion make.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash

CFLAGS="-Wall -Ofast"
CFLAGS="-Wall -Ofast -march=native"

error() {
echo "$1"
Expand Down
4 changes: 2 additions & 2 deletions platt/src/octave/play_demo.m
Original file line number Diff line number Diff line change
Expand Up @@ -512,7 +512,7 @@
colorbar('location', 'east');
text(0,70,' Input maxima','color',[1 1 1],'fontsize',15);
subplot(5,1,3);
imagesc(target_hist(end-NUMFILTERS:end,:),[-10 100]);
imagesc(target_hist(1+end-NUMFILTERS:end,:),[-10 100]);
axis xy;
set(gca,'XTick',0:100:numticks);
set(gca,'YTick',1:8:length(freqs));
Expand All @@ -522,7 +522,7 @@
colorbar('location', 'east');
text(0,70,' Target maxima','color',[1 1 1],'fontsize',15);
subplot(5,1,4);
imagesc(gain_hist(end-NUMFILTERS:end,:),[-20 40]);
imagesc(gain_hist(1+end-NUMFILTERS:end,:),[-20 40]);
axis xy;
set(gca,'XTick',0:100:numticks);
set(gca,'YTick',1:8:length(freqs));
Expand Down

0 comments on commit fc41869

Please sign in to comment.