Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Analisador de ECG Powered by Edge Impulse

Componentes e suprimentos

Arduino Nano 33 BLE Sense
× 1
Monitor de frequência cardíaca com eletrodo único SparkFun - AD8232
× 1
ElectroPeak 0.96 "Módulo de exibição OLED 64x128
× 1

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)
Arame de solda, sem chumbo
10 Pc. Kit de jumper de fio, 5 cm de comprimento

Aplicativos e serviços online

Edge Impulse Studio
MATLAB
Arduino IDE
Microsoft Visual Studio 2017

Sobre este projeto





Ataque cardíaco súbito e aumento da mortalidade:preocupação crescente


Na última década, as mortes repentinas por ataque cardíaco aumentaram tremendamente.

Particularmente em nações em desenvolvimento como a Índia, além dos estilos genético e de vida, a falta de recursos médicos nas áreas rurais causa a maior parte das mortes em ataques cardíacos.





Contribuição da tecnologia para resolver este problema global:


Trabalhei em um aplicativo TinyML com tecnologia Edge Impulse para desenvolver um mini-dispositivo analisador de ECG de diagnóstico que cabe no bolso e pode diagnosticar doenças cardíacas de forma independente, sem uma conectividade na nuvem.













Máquinas analisadoras de ECG presentes no mercado e suas características


• O presente dispositivo IoT Medical envia dados de ECG em massa para o celular / servidor e a análise é feita em um aplicativo de alto processador / celular

• Aplicativo baseado em computador que recebe sinais do dispositivo de ECG e analisa os padrões de ECG

• Todo o dispositivo de análise de ECG depende da Internet ou de computadores de alto processamento / aplicativos móveis.

Portanto, isso pode ser resumido no gráfico abaixo;





Solução Chave


• O analisador de ECG com tecnologia Edge Impulse analisa os dados de ECG sem qualquer dependência da Internet.

• A latência é mais baixa em comparação com dispositivos IoT

• Um modelo TinyML de 15Kb Rom - ECG analisando pode ser executado em qualquer microcontrolador compatível com TinyML.

• O dispositivo irá analisar os padrões de ECG e classificá-los em Normal, Fibrilação Atrial e Bloqueio cardíaco de primeiro grau





Arquitetura


O analisador de ECG envolve

1 Leitura de ECG usando AD8232

2. Simulação de diferentes padrões de ECG de doenças cardíacas

3. Nova abordagem para produzir conjuntos de dados de qualidade

4. Treinamento do modelo

5. Precisão do teste do modelo e Integrando código do aplicativo com implementado biblioteca





Conheça o gráfico de ECG


Antes de prosseguir com o trabalho técnico, primeiro irá percorrer alguns fundamentos do gráfico de ECG.

O gráfico de ECG foi dividido em 5 ondas - ondas P, Q, R, S e T.

Fibrilação Atrial

Bloqueio cardíaco de primeiro grau





Vamos construir o analisador de ECG





1. Leitura de ECG usando AD8232


Conecte o sensor de ECG AD8232 ao sensor Arduino Nano 33 BLE de acordo com o diagrama de conexão abaixo.

Atualize o código abaixo e pressione "Ctrl + Shift + L" para visualizar os dados gráficos de streaming.
  void setup () {
// inicializa a comunicação serial:
Serial.begin (115200);
pinMode (2, INPUT); // Configuração para detecção de derivações desligadas LO +
pinMode (3, INPUT); // Configuração para detecção de leads off LO -

}

void loop () {

if ((digitalRead (2) ==1) || (digitalRead (3) ==1)) {
Serial.println ('!');
}
else {

// envie o valor da entrada analógica 0:
Serial.println (analogRead (A0));
}
// Aguarde um pouco para evitar que os dados seriais saturem
atraso (5);
}

1.1 Colocação de eletrodos de ECG

Os eletrodos de ECG são colocados em RA, LA e LL conforme mencionado no diagrama acima e conectam a tomada ao sensor AD8232 no analisador de ECG.





2. Simulação de diferentes padrões de ECG usando o Matlab-signal builder


Etapa 2.1 : Salve os dados normais de ECG no Excel

Primeiro copie e salve os dados do monitor serial no arquivo Excel como o modelo abaixo. O valor de ECG deve estar na segunda coluna em 'Y'. A primeira coluna é a série temporal. deve ser incrementado como (* 0,005) 5 ms.

Etapa 2.2:Construtor de sinal em Matlab

Crie um novo modelo Simulink no Matlab

Em seguida, digite 'construtor de sinal' na área de trabalho e selecione-o. Inserir também

o 'escopo' para conectá-lo ao construtor de sinal. Por favor, consulte a imagem abaixo.

Para carregar os dados salvos do Excel, abra o construtor de sinal e selecione a opção 'importar do arquivo'.

Selecione as opções mencionadas para importar os dados.

Em seguida, confirme a seleção e importe sem salvar o modelo. uma vez que precisamos de mais alguns passos.

2.3 : Visualização de dados de ECG no construtor de sinal

A Os dados de ECG de 60 segundos serão parecidos com este na visualização do construtor de sinal, para edição manual, aumente o zoom para os dados de 5 segundos e faça 'arrastar' para editar a onda de ECG.

Após aplicar o zoom, ao posicionar o ponteiro do mouse próximo à onda de ECG, você pode selecionar qualquer ponto no ECG e arrastá-lo de acordo com a necessidade da aplicação.

2.4 : Editando dados de intervalo P-R no Construtor de Sinal para Caso do Bloco AV 1

I tenha arrastado manualmente a onda P para baixo e deslocado a onda P muito antes da onda R, de modo que o intervalo P-R exceda 200ms.

Repita esta etapa em uma linha do tempo diferente nos dados do construtor de sinal.

Após a edição, exporte os dados para o arquivo mat. você pode encontrar esta opção no construtor de sinal. Assim que o arquivo mat for salvo, siga as etapas abaixo.

Passos a seguir -> Clique duas vezes no arquivo mat primeiro e clique duas vezes no Conjunto de dados 1x1 -> você pode ver os dados modificados em Dados:1.

Copie e cole os dados em um novo arquivo excel.

Etapa 2.5:Exportar os dados do Excel para o Array

I escrevi um script a.m que pode converter os dados do Excel em um array.

Execute este script no Matlab, antes de executar, substitua ExcelFilename pelo nome do arquivo local salvo e ExcelSheetName em um nome de planilha correspondente.
  data =xlsread ('ExcelFilename.xlsx', 'ExcelSheetName'); 

ECGExtract =(data (1:end, 1)); %% Dados da coluna A

fid =fopen ('test.txt', 'wt');% abrindo com o sinalizador t converte-se automaticamente \ n em \ r \ n no Windows
fprintf (fid, '{');
FormatSpec =[repmat ('% i', 1, size (ECGExtract, 2)) ','];% ou deveria ser \ r \ n?
fprintf (fid, FormatSpec, ECGExtract);
fprintf (fid, '}')
fclose (fid);

O arquivo de texto será gerado no local do diretório atual.

Copie o conteúdo da matriz e cole-o no código ECGAnalyzer.c para simular a fibrilação atrial e o bloqueio cardíaco de primeiro grau.





3. Nova abordagem para produzir conjuntos de dados de qualidade


Se você olhar para os dados de ECG, é realmente difícil distinguir os diferentes dados de ECG de condições cardíacas com dados de ECG normais em um período de janela menor (exemplo:3 segundos)

Quando treino um modelo apenas com dados filtrados de ECG para fibrilação atrial, bloqueio cardíaco normal e de primeiro grau, a precisão foi menos de 23%. O motivo é que na janela mais curta o modelo não consegue diferenciar a diferença.

Se eu optar por um tempo de janela mais longo, o tempo de processamento e o pico de uso de RAM aumentam bastante. Mesmo Não havia precisão.

Antecedentes da nova abordagem:

Quando um médico ou pessoa treinada tenta analisar o gráfico do ECG, eles vão contar as pequenas caixas entre a onda R a R, o intervalo P a R e anotar as contagens no gráfico ou memorizá-lo para cálculo.

Criei formas de onda separadas a partir de dados de ECG filtrados.

Novas formas de onda:
  • Intervalo R-R
  • Intervalo de RP

Conjuntos de dados gerados para ECG normal dados:

O O intervalo R-R decodificado e os dados do intervalo PR são sempre 100 e 50 para dados de ECG normais.

Conjuntos de dados gerados para fibrilação atrial - dados de ECG:

Sempre há um desvio entre o intervalo R-R anterior e o intervalo R-R atual, intervalo R-R os dados cairão para -100 por um ciclo.

Conjuntos de dados gerados para bloqueio cardíaco-ECG de primeiro grau Dados :

Sempre o intervalo P a R excede 200ms, então os dados do intervalo PR cairão para -50 por um ciclo.

Esta abordagem melhorou a precisão do meu modelo para mais de 90%.





4. Treinamento do modelo em impulso de borda


Antes de entrar no ML de treinamento Edge Impulse, precisamos configurar alguns parâmetros no arquivo de biblioteca para simulação e leitura do sensor de ECG em tempo real.

etapa 4.1 :configure a SIMULAÇÃO para 0, se a aquisição de dados foi da leitura do sensor de ECG em tempo real

ou

Configure a SIMULAÇÃO para 1, se a aquisição de dados foi de dados simulados de ECG para fibrilação atrial e bloqueio cardíaco de primeiro grau (seguido de sessões de Matlab).

Etapa 4.2:Comente / descomente os dados necessários buffer para simulação

Etapa 4.3 : Aquisição de dados

Colete os dados de ECG sob três rótulos diferentes:Normal, Fibrilação atrial e Bloqueio cardíaco de primeiro grau

https://docs.edgeimpulse.com/docs/arduino-nano-33-ble-sense

e selecione a frequência como 202
  $ edge-Impulse-daemon --frequency 202  

Etapa 4.4:Criar impulso

Em uma seção de impulso de criação, o tamanho da janela é de 3000 ms e o aumento da janela é de 2999 ms, selecione a detecção de anomalia k-means

Etapa 4.5:Recursos espectrais

Em um recurso espectral, selecione o tipo de filtro como Nenhum.

Etapa 4.6:Classificador NN:

I definiu 40 ciclos de treinamento e taxa de aprendizagem como 0,005. Eu tenho uma precisão de 92,9.

e para detecção de anomalias, selecionei o intervalo PR RMS e o intervalo RR RMS.





5. Exatidão e integração do teste do modelo


Em uma precisão de teste de modelo, chegou a cerca de 97% de precisão.

5.1 Implantação:

selecionar Arduino como implantação;

Adicione o arquivo EI implantado baixado à biblioteca Arduino

Nota: Adicione a biblioteca ECG_Analyzer do link GitHub à biblioteca Arduino também

Isso ajuda a integrar meu código de algoritmo de decodificação de ECG para integrar com o modelo gerado por EI.

5.2 Integrar o código do aplicativo ao código EI gerado pelo núcleo

I fundiram o código do aplicativo no EI implantado " nano_ble33_sense_accelerometer_continuous "e o salvou como ECGAnalyzer.ino.

Ele está disponível no link GitHub em anexo. Atualize o código com SIMULATION como 0 em ECG_Analyzer.c no dispositivo.





Hardware:


Conecte de acordo com o diagrama de fritzing:

Montagem :





Produto final:


Aqui está o produto final e o nível de precisão nos dados de teste !!!





Créditos:


ECG:https://geekymedics.com/how-to-read-an-ecg/

Código

https://github.com/Manivannan-maker/ECGAnalyzer
descompacte o ECGAnalyzer.zipCode para o Flash:EI_Deployed_Library \ examples \ ECGAnalyzer \ ECGAnalyzer.inoLibrary para editar a simulação:ECGAnalyzer_lib \ ecg_analyzer.c Script do Matlab e o modelo do construtor de sinais:script a ser executado em matlab -> Matlab_Simulation \ Excel \ Matlabulation builder \ Excel2Array signalbuilder.slxhttps://github.com/Manivannan-maker/ECGAnalyzer

Esquemas

Conecte de acordo com o diagrama ecgdefault_SjMMcgW8jY.fzz

Processo de manufatura

  1. Tiara
  2. Arame farpado
  3. Rastreador de banheiro (Powered by Walabot)
  4. Demonstrações do Machine Learning reTerminal (Edge Impulse e Arm NN)
  5. Caminhão de brinquedo movido por Raspberry Pi
  6. MOSMusic
  7. 6 tipos de organização para liderar a revolução da computação de borda
  8. Máquina de rede de arame hexagonal
  9. Introdução ao corte de fios
  10. O que é um corte de fio CNC?