0

Ich berechne Features aus einem EMG-Signal mit MATLAB durch Segmentierung des EMG-Signals in Windows von 200 Proben und dann Berechnung der Funktionen jedes Fensters.Wie verwende ich eine Standardabweichung Schwelle bei der Berechnung eines Histogramms aus Signaldaten in MATLAB

Ich brauche Hilfe versuchen, eine Histogramm-Funktion verwenden Sie bitte.

I leicht einen Vektor von Bins für ein Datenfenster mit dem folgenden Code erzeugen kann:

binCount = 9; 
    [histBins, ~] = histcounts(dataWindow, binCount); 

jedoch das Experiment I Staaten sind nach dem Histogramm in 9 bins entlang eines 3-Standardabweichung (sigmas geteilt) Schwelle. Ich bin verwirrt darüber, wie der Schwellenwert in die Erstellung der Histogramm-Bins passt.

Wird für jedes Datenfenster eine 3-Sigma-Schwelle berechnet und die Datenpunkte, die innerhalb dieser Schwelle liegen, zur Erstellung des Histogramms verwendet? Beispiel Pseudocode:

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 

Oder ist der 3-Sigma-Schwellenwert aus dem gesamten Datensignal erzeugt wird, bevor Fensterung, so dass die gleiche Schwelle dann jedes Datenfenster angelegt wird, bevor jedes Histogramm zu erzeugen?

+0

Fügen Sie einen Link zur Versuchsbeschreibung hinzu? – Dan

+0

Hey @ Dan. Entschuldigung für die späte Antwort. Nachdem ich dies gestern mit meinem Vorgesetzten besprochen hatte, entschieden wir uns für die erste Option. Es gibt nicht viel zu der Versuchsbeschreibung in dem Papier, das ich mir ansehe, aber ich habe ein Bild hinzugefügt, um eine visuelle Erklärung dessen zu geben, was ich meine: http://imgur.com/tphJrP9. Ich nehme ein Datenfenster und berechne einen 3-Sigma-Schwellenwert für dieses Fenster. Dann werde ich das Signal nehmen, das in diesen Bereich fällt (die obersten und untersten gestrichelten Linien) und das Histogramm auf diesen Teil des Signals anwenden. Ich werde dies für jedes Datenfenster tun. – humbleHacker

+0

Sie können nun die Frage beantworten oder stecken Sie noch fest? – Dan

Antwort

0

Also ging ich als Antwort auf meine Frage mit der ersten Option, ein Datenfenster zu nehmen und eine 3-Sigma-Schwelle für dieses Fenster zu berechnen. Alle Daten, die innerhalb dieses Grenzwerts liegen, werden dann für das Histogramm verwendet. Wenn jemand eine alternative Sichtweise auf diese Frage hat, können Sie sich gerne äußern oder eine eigene Lösung vorschlagen. Hier

ist der Test MATLAB-Code I für einen einzelnen Datenfenster geschrieben:

% 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]); 

Bitte beachten Sie, dass die Linie, wo ich die Indizes finden (beginnend mit „threshStatus =“) wurde aus der Antwort aufgenommen von @ Angus zu dieser Frage: http://uk.mathworks.com/matlabcentral/answers/8556-how-to-find-vector-elements-between-two-values-efficiently