▷ #EMG signal classification with Machine Learning #ML using #Matlab

Las señales EMG (Electromiografía) que representan actividad muscular de cualquier sujeto, pueden ser adquiridas de forma superficial utilizando electrodos en la piel que cubre el músculo de interés. Al adquirir señales EMG durante la ejecución de tareas motoras, estas señales contienen información en el dominio del tiempo y frecuencia correspondiente a la actividad muscular involucrada en la tarea motora realizada. Las señales EMG pueden ser analizadas mediante algoritmos de clasificación para determinar de forma automática qué tipo de actividad está realizando el sujeto, esta detección es usada para el control de prótesis de rehabilitación.
Untitled
Cargar los datos desde carpeta específica
clear;clc;
dir='D:\...\Letras_csv\';
Fs=200;%Hz frecuencia de muestreo
NameFolder=importdata(strcat(dir,'files.txt'));
%5 carpetas con las tareas A, B, I, L, O
%cada carpeta contiene 100 archivos de cada tarea correspondiente
%Cada archivo tiene 3s de adquisición
Crear una sola fila de valores RMS por cada electrodo EMG, esto por cada archivo
AllEvents=[];%almacenará la información de todos las tareas
AllLabels=[];%almacenará las etiquetas de todos las tareas
Labels=[1 0 0 0 0;0 1 0 0 0;0 0 1 0 0;0 0 0 1 0;0 0 0 0 1];
%A=10000; B=01000; I=00100; L=00010; O=00001
for i=1:length(NameFolder)% las 5 carpetas
NameFiles=importdata(strcat(dir,...
strcat(string(NameFolder(i,:))),'files.txt'));
%recorro cada fila del vector con nombres de las carpetas
RMSE=[];
for j=1:length(NameFiles)
%recorro cada fila del vector con nombres de archivos con los datos
File=csvread(strcat(dir,strcat(string(NameFolder(i,:))),...
strcat(string(NameFiles(j,:)),'.csv')));
%se lee cada archivo CSV de 3 segundos de muestras cada uno
RMSE=[RMSE;rms(File(:,:))];
%saca el RMS de cada electrodo y crea una fila
AllLabels=[AllLabels;Labels(i,:)];
% en cada fila se coloca el label correspondiente a cada evento
end
AllEvents=[AllEvents;RMSE];
% los features son los valores rms de los 8 electrodos EMG
end
size(AllEvents)% son 8 electrodos EEG y 500 eventos
ans = 1×2
500 8
size(AllLabels)% son 5 letras y 500 eventos
ans = 1×2
500 5
Llamar el toolbox de matlab
nnstart
Probar la red neuronal implementada
clear;clc;
inNN=load('inNN.mat');inNN=inNN.AllEvents;
%guardar previamente desde el workspace
outNN=load('outNN.mat');outNN=outNN.AllLabels;
%guardar previamente desde el workspace
pred=[];
pred=myNeuralNetworkFunction(inNN(:,:));
%se crea un vector de clasificacion analizando el vector de inNN
figure;
plot(pred(:,1)+pred(:,2)*2+pred(:,3)*3+pred(:,4)*4+pred(:,5)*5,'ob');
hold on;
plot(outNN(:,1)+outNN(:,2)*2+outNN(:,3)*3+outNN(:,4)*4+outNN(:,5)*5,'.r');
legend('Classification NN','Target');
xlabel('500 eventos de 3 s cada una');
ylabel('A=1, B=2, I=3, L=4, O=5');
title('EMG classification neural network');
Calculo del error cuadratico medio
err = immse(outNN,pred)
err = 3.0589e-06
acc=1-err
acc = 1.0000


Comentarios

Popular Posts

▷ Especificaciones del módulo ESP32

▷ #ESP32 - REAL-TIME CLOCK #RTC INTERNO

▷ #ESP32 - SINCRONIZAR RTC INTERNO CON SERVIDOR NTP

▷ #ESP32 - Display OLED 128x64

▷ #ESP32 - Over-The-Air programming #OTA

▷ SISTEMAS EMBEBIDOS, PROYECTOS PROPUESTOS (2021 PAO1)

▷ PROTEUS PCB DESIGN

▷ SOLUCIÓN EVALUACIÓN SISTEMAS DIGITALES 1, 1er Parcial (2021 PAE)

▷ #PROTEUS #PCB DESIGN (2020 PAO2)

▷ Instalación paso a paso de #ESP_IDF #ESPRESSIF 1/2