I have taken the below piece of code from od_demo.m file available in the mmWave sensor toolkit.
I am having difficulty in understanding how does the below algorithm work.
please help me in this.
function [occupVec, featureVec] = zone_occupDetect(rangeAzimuth, coeffMatrix, meanVector, ... %==>>
stdVector, frameIdx, winLen, zone, numZones)
global zonePwr
global zonePwrdB
avgPwr = zeros(1, numZones);
avgPwrdB = zeros(1, numZones);
% zone-power in each frame
cirBufferIdx = mod(frameIdx-1, winLen) + 1;
% moving window index: newest sample at the end
winIdx = mod((cirBufferIdx-winLen:cirBufferIdx-1), winLen) + 1;
for zIdx = 1:numZones
% calculate zone power
rangeAzimuth_rgAzGated = rangeAzimuth(zone(zIdx).rgIdx, zone(zIdx).azIdx);
zonePwr(cirBufferIdx, zIdx) = mean(rangeAzimuth_rgAzGated(:));
zonePwrdB(cirBufferIdx, zIdx) = 10*log10(zonePwr(cirBufferIdx, zIdx));
% features: moving average of zonePwr in dB
avgPwr(zIdx) = mean(zonePwr(winIdx, zIdx));
avgPwrdB(zIdx) = 10*log10( avgPwr(zIdx) );
end
% features: power ratio in dB
pwrRatio = avgPwr / sum(avgPwr);
pwrRatiodB = 10*log10(pwrRatio);
% features: correlation coefficient between pairs
corrCoeff = corrcoef(zonePwrdB(winIdx, :));
xcorrCoeff = corrCoeff(1, 2);
% form the feature vector
featureVec = [avgPwrdB, pwrRatiodB, xcorrCoeff]; % 1 x 5 for two zones
% normalize and add one
featureVec = (featureVec - meanVector) ./ stdVector;
featureVec_ = [1, featureVec].'; % now column vector
% occupancy detection
prob = sigmoid(coeffMatrix * featureVec_);
[~, class_predict] = max(prob);
class_predict = class_predict - 1;
occupVec = de2bi(class_predict, numZones);
return