0

Я вычисляю функции из сигнала ЭМГ с использованием MATLAB путем сегментации сигнала ЭМГ в окна из 200 выборок и затем вычисления признаков каждого окна.Как применить порог стандартного отклонения при вычислении гистограммы из данных сигнала в MATLAB

Мне нужна помощь, пытаясь использовать функцию гистограммы, пожалуйста.

можно легко генерировать вектор бункеров для одного окна данных, используя следующий код:

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 сигмы генерируется из всего сигнала данных, прежде, чем оконные, так что же порог затем применяется к каждому окну данных перед формированием каждой гистограммы?

+0

Добавить ссылку на описание эксперимента? – Dan

+0

Эй @ Дан. Простите за поздний ответ. Обсудив это с моим руководителем вчера, мы решили пойти с первым вариантом. В описании статьи в статье, которую я ищу, мало, но я добавил изображение, чтобы дать визуальное объяснение того, что я имею в виду: http://imgur.com/tphJrP9. Я возьму окно данных и вычислим порог 3 сигма для этого окна. Затем я возьму сигнал, который попадает в этот диапазон (верхняя и нижняя пунктирная линия) и применит гистограмму к этой части сигнала. Я сделаю это для каждого окна данных. – humbleHacker

+0

Итак, теперь вы можете ответить на вопрос или вы все еще застряли? – Dan

ответ

0

Итак, в ответ на мой вопрос, я пошел с первой возможностью взять окно данных и вычислить порог 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 =») был взят из ответа на @ Ангус по этому вопросу: http://uk.mathworks.com/matlabcentral/answers/8556-how-to-find-vector-elements-between-two-values-efficiently