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

Другие вопросы по тегам