Как применить пороговое значение стандартного отклонения при расчете гистограммы из данных сигнала в MATLAB
Я вычисляю характеристики из сигнала EMG с использованием MATLAB, сегментируя сигнал EMG на окна по 200 выборок, а затем вычисляя характеристики каждого окна.
Мне нужна помощь, пытаясь использовать функцию гистограммы, пожалуйста.
Я могу легко сгенерировать вектор бинов для одного окна данных, используя следующий код:
binCount = 9;
[histBins, ~] = histcounts(dataWindow, binCount);
Тем не менее, в эксперименте, который я провожу, говорится, что гистограмма разделена на 9 интервалов вдоль порога 3 стандартных отклонений (сигма). Я запутался в том, как порог вписывается в создание бинов гистограммы.
Рассчитывается ли пороговое значение 3 сигма для каждого окна данных и точки данных, попадающие в этот порог, используются для создания гистограммы? Пример псевдокода:
for i = 1:numDataWindows
dataWindow = windows(i);
Calculate 3 standard deviations threshold using dataWindow
Get data points from dataWindow that fall within threshold
Generate histogram on data points within threshold
...
Store histogram bins for later use
end
Или пороговое значение 3 сигма генерируется из всего сигнала данных до формирования окна, так что такой же порог затем применяется к каждому окну данных перед созданием каждой гистограммы?
1 ответ
Поэтому, отвечая на мой вопрос, я выбрал первый вариант: взять окно данных и рассчитать порог 3 сигма для этого окна. Все данные, попадающие в этот порог, будут затем использоваться для функции гистограммы. Если у кого-то есть альтернативная точка зрения на этот вопрос, пожалуйста, не стесняйтесь комментировать или предоставить собственное решение.
Вот тестовый код MATLAB, который я написал для одного окна данных:
% Get a single data window
win = myChanWinData(1);
% Find mean and standard deviation
winMu = mean(win);
winStd = std(win);
% Get upper and lower boundaries of 3 sigma threshold
k = 3;
upper = winMu + winStd * k;
lower = winMu - winStd * k;
% Find indices where data falls within upper and lower boundaries
threshStatus = not(abs(sign(sign(lower - win) + sign(upper - win))));
myOnes = find(threshStatus == 1);
% Extract the data values at the found positive indices
newData = win(myOnes);
% Generate histogram using data within our desired threshold
numBins = 9;
minV = min(newData);
maxV = max(newData);
[binCounts, ~] = histcounts(newData, numBins, 'BinLimits', [minV, maxV]);
Обратите внимание, строка, где я нахожу индексы (начинающиеся с "threshStatus ="), была взята из ответа @Angus на этот вопрос: http://uk.mathworks.com/matlabcentral/answers/8556-how-to- найти-вектор-элементы-между-двумя значениями, эффективно