From c63be83a1f108f1c06365e28d226605c46d6a5d3 Mon Sep 17 00:00:00 2001
From: Fredrik Bagge Carlsson <fredrikb@nichols.control.lth.se>
Date: Thu, 24 Sep 2015 16:58:46 +0200
Subject: [PATCH] tr back

---
 track_audio.m | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 110 insertions(+)
 create mode 100644 track_audio.m

diff --git a/track_audio.m b/track_audio.m
new file mode 100644
index 0000000..97bf40c
--- /dev/null
+++ b/track_audio.m
@@ -0,0 +1,110 @@
+clear;
+close all;
+clc;
+
+fs = 24414;
+chunks = 2048;
+dt = chunks/fs;
+
+[Bf, Af] = butter(3,8000/fs); % filter vectors
+
+
+%% Setup objects
+% Initialize localization models using braodband and subband settings
+dObj   = dataObject([],fs,10,2);
+
+% Settings for subband approach
+par_sub = genParStruct('cc_bBroadband',0,'cc_wSizeSec',winSec,...
+    'cc_hSizeSec',winSec/2,'cc_maxDelaySec',1.25e-3,...
+    'fb_lowFreqHz',fLowHz,'fb_highFreqHz',fHighHz,...
+    'fb_nERBs',1,'ihc_method','none',...
+    'loc_NSources',nSpeakers(hh));
+
+% Initialize localization models using braodband and subband settings
+mObj  = manager(dObj,'localization',par_sub);
+
+%% Model parameters
+sigma_w = 1;
+
+Q = [2/4*dt^4, 1/2*dt^3; 1/2*dt^3, dt^2]*sigma_w;   % Process noise covariance
+R = 1;                                              % Measurement noise covariance
+x = [0; 0];                                         % Initial state
+P = [10, 0; 0, 10];                                 % Initial state covariance
+
+A = [1, dt; 0, 1];                                  % System matrix
+c = [1; 0];                                         % Output vector
+
+% Check definiteness of covariance matrices
+if ~all(eig(Q) > 0) || ~all(eig(R) > 0) || ~all(eig(A) > 0)
+    error('All covariance matrices have to be positive definite.');
+end
+
+%% Initialization
+
+
+% Add necessary paths
+addpath('./tools');
+addpath('./ekfukf-toolbox');
+
+
+
+figure(1)
+
+N = 1; % The number of steps to run this stuff.
+
+% Initialize posterior mean and covariance
+posteriorMean = zeros(size(A, 1), N);
+posteriorCovariance = zeros(size(A, 1), size(A, 1), N);
+
+
+% =======================================================
+% Main loop - Perform localization and tracking
+% =======================================================
+tic();
+t_old = toc();
+for l = 1:N
+    audio = get_audio();
+    t_new = toc();
+    dti = t_new - t_old();
+    % Request processing
+    mObj.processSignal(audio);
+    azimEst = dObj.localization{1}.Data(end,1); % There might be an issue with several sources here!
+    % Perform Kalman filter prediction and update, TODO: consider changing this
+    % crappy filter for a PF
+    
+    
+    Qi = [1/4*dti^4+1e-6, 1/2*dti^3; 1/2*dti^3, dti^2]*sigma_w;   % Process noise covariance
+    Ai = [1, dti; 0, 1];
+    [x, P] = kf_predict(x, P, Ai, Qi);
+    [x, P] = kf_update(x, P, azimEst, c', R);
+    
+    posteriorMean(:, l) = x;
+    posteriorCovariance(:, :, l) = P;
+    %pause(max0))
+    t_old = t_new;
+end
+
+% Plot measurements
+subplot(2, nFiles / 2, k);
+timeAxis = linspace(0, nSamples / fsHz, nFrames);
+plot(timeAxis, measuredLocations, 'x', 'LineWidth', 2);
+axis([0, nSamples / fsHz, -90, 90]);
+xlabel('Time / s');
+ylabel('Azimuth / deg');
+grid on; hold on;
+plot(timeAxis, posteriorMean(1, :), 'g', 'LineWidth', 2);
+
+% Plot ground truth
+plot(timeAxis, gtTrajectory, 'r--', 'LineWidth', 2);
+legend('Measurements', 'Estimated trajectory', 'Ground truth');
+
+% Compute RMSE
+rmse = sqrt(sum((posteriorMean(1, :) - gtTrajectory).^2) ./ nFrames);
+
+if ~strcmpi(noiseType, 'none')
+    title([upper(soundType), ', ', upper(noiseType), ' NOISE AT ', ...
+        num2str(snr), ' dB SNR, ', 'RMSE: ', num2str(rmse), '°']);
+else
+    title([upper(soundType), ', NO NOISE, ', 'RMSE: ', ...
+        num2str(rmse), '°']);
+end
-- 
GitLab