Академический Документы
Профессиональный Документы
Культура Документы
D. Yelshyna, E. Costa
implica que o processamento seja realizado sobre um sinal De forma a obter uma relação sinal-ruído (SNR) do
de 200 Hz, levando à necessidade de decimar o sinal. Para sistema elevada o primeiro bloco deve ter um ganho elevado.
evitar aliasing do sinal nesta situação, deve-se aplicar Assim sendo projetando o amplificador de instrumentação
novamente o Teorema de Nyquist, para determinar a para um ganho de 100 tem-se:
frequência da componente máxima do sinal ( ).
Deve ser implementado um filtro passa-baixo digital com Tendo em conta as resistências disponíveis e por uma
frequência de corte inferior à apresentada por causa da sua questão de conveniência para a implementação do circuito
resposta não ideal. driven right leg colocaram-se duas resistências de 220kΩ em
III. ARQUITETURA DO SISTEMA série, o que corresponde a um ganho de
V. SOFTWARE
Os filtros e os algoritmos apresentados foram
implementados em C, no IDE MPLAB. Em aplicações de
processamento de sinais em tempo real, é necessário
produzir uma saída ao mesmo tempo que o sinal é adquirido.
Neste tipo de aplicações a informação deve estar
imediatamente disponível, tornando necessário armazenar
determinado número de pontos de cada sinal e renová-los
continuamente. Isto é conseguido graças a buffers circulares.
O seu tamanho é definido de acordo com o número de
amostras necessárias à implementação das equações de
diferenças de cada tipo de processamento, possuindo uma
localização fixa na memória em forma de array linear.
Sempre que o buffer recebe uma nova amostra, esta é
guardada no local da amostra mais antiga e o apontador que
contém o seu início é deslocado 1 espaço de memória [12].
Deste modo, o buffer circular é definido por 3 parâmetros:
tamanho, localização na memória e apontador para o seu
início, que neste caso foi considerado como amostra mais
recente.
Foram implementados métodos próprios de acesso aos
buffers, nomeadamente a função que introduz uma nova
amostra (put_in_buffer) e a função que lê o conteúdo do
Figura 4. Fluxograma do programa executado pelo micricontrolador
buffer (read_buffer).
Os conteúdos dos buffers são representados por vírgula
flutuante, sendo convertidos para inteiro durante o envio dos VI. INTERFACE GRÁFICA
dados pela comunicação série. A função de cálculo do ritmo A interface gráfica do sistema de aquisição de ECG foi
cardíaco baseia-se nas deteções por parte da função que implementada através do IDE QtCreator em C++. Para a
implementa o algoritmo Pan-Tompkins. Sempre que é criação do Layout recorreu-se ao Qwt, uma biblioteca que
detetado um complexo, o conteúdo da variável de contagem contém componentes de GUI (interface gráfica do
dos pontos entre duas deteções é convertido em ritmo utilizador).
cardíaco. A maior parte das variáveis do sistema são O objetivo da interface passa por mostrar o sinal de ECG
declaradas como globais, sendo apenas atualizado o seu depois de ser processado digitalmente no microcontrolador e
conteúdo. o ritmo cardíaco calculado através do algoritmo Pan-
A implementação do algoritmo Pan-Tompkins pressupõe Tompkins.
inicialização dos seus parâmetros e dos thresholds A implementação da interface teve base em dois projetos
adaptativos. Para tal, definiu-se um tempo de espera de 3 s das bibliotecas do QtCreator que satisfaziam parte dos
no início da execução do programa, para que o requisitos do sistema implementado: creaderasync e
funcionamento do detetor de picos seja viável. O fluxograma oscilloscope.
do programa implementado encontra-se apresentado na O projeto oscilloscope implementa uma aplicação que
Figura 4. simula um osciloscópio simples, com apenas um canal de
A filtragem digital passa-alto remove a componente entrada e algumas funcionalidades como alteração da
frequência e amplitude observadas. O sinal apresentado no
contínua do sinal, produzindo valores negativos. A
monitor é uma sinusoide gerada a partir da classe Função handleReadyRead:
SamplingThread, cujos valores são colocados num objeto da Variáveis:
classe SignalData. Para que este projeto se adeque ao a: array
sistema implementado é necessário que o sinal gerado seja b1, b2, b3, ECG, BPM: array de booleanos
substituído pelo sinal disponível na porta série enviado pelo ecgMS, ecgLS, ecg1, ecg2, ecg, bpm: string
I, n, ECG2, BPM2: int
microcontrolador. s: ponto (float, float)
A função do projeto creaderasync é a leitura dos dados elapsed: double
disponíveis na porta série através da classe SerialPortReader sinal: instância da classe SignalData
e apresentação na linha de comandos. Assim sendo, a classe Início:
SerialPortReader satisfaz os requisitos necessários para a ler(bytes disponíveis na porta série)
substituir o sinal gerado pela classe SamplingThread. Os n tamanho de a
para i de 0 até n-2 de 2 em 2:
valores de eletrocardiograma lidos na porta série são então b1 a(0)
adicionados ao sinal SignalData que será mostrado no b2 a(1)
monitor e o valor de ritmo cardíaco vai sendo atualizado e elapsed tempo medido por relógio
mostrado num objeto de layout QLCDNumber. Se b1(6) == 0 e b1(7) == 0 e b2(6) == 0 e
É necessário desenvolver uma função que seja capaz de b2(7) == 1:
ecgMS string(b1)
descodificar o protocolo de envio da informação pelo ecgLS string(b2)
microcontrolador. São enviados 4 bytes de dados de cada ecg1 ecgMS(0,6)
vez (mais um stop bit por cada um): dois que representam os ecg2 ecgLS(0,6)
bits mais significativos e menos significativos do valor de ecg extensão de ecg1 por ecg2
ECG e dois para representar o valor do ritmo cardíaco. O ECG array de bool (ecg)
protocolo de envio consiste em adicionar os bits ‘00’ no caso ECG2 int(ECG)
s (elapsed, ECG2)
de os restantes 6 bits se tratarem dos bits mais significativos sinal. append(s)
do ECG, ‘01’ no caso de os restantes 6 bits se tratarem dos Senão se b1(6) == 1 e b1(7) == 0 e b2(6)
bits menos significativos do ECG, ‘10’ no caso de os == 1 e b2(7) == 1:
restantes 6 bits se tratarem dos bits mais significativos do bpmMS string(b1)
Ritmo Cardíaco e ‘11’ no caso de os restantes 6 bits se bpmLS string(b2)
tratarem dos bits se tratarem dos bits menos significativos do bpm1 bpmMS(0,6)
bpm2 bpmLS(0,6)
Ritmo Cardíaco. bpm extensão de bpm1 por bpm2
A função handleReadyRead implementada na classe BPM array de bool (bpm)
SerialPortReader faz a descodificação e disponibiliza os BPM2 int(BPM)
sinais para serem visualizados. Devem ser verificados os 2 setBpm(BPM2)
casos possíveis: os 2 bytes do array terminarem em ‘00’ e Fim para
Fim função
‘01’, ou em ‘10’ e ‘11’. O algoritmo implementado encontra-
se no Quadro 1.
QUADRO 1 ALGORITMO HANDLEREADYREAD
VII. RESULTADOS
No que concerne a componente digital do Sistema, a
implementação dos blocos foi já discutida e validada em
termos teóricos e em comparação com os valores medidos
experimentalmente.
Uma medição de ECG efetuada com o circuito de
aquisição implementado pode ser consultada na Figura 5.
R
APÊNDICES
R1
R4
4.7MΩ
2.2MΩ
V4
-5 V V1
11
-5 V
R2 C1 U1A
2 C2 11 U2A
R3
4.7MΩ 220nF 1 2
3 2.2MΩ 440nF 1
4 LM324N 3
VCC 4 LM324N
5V VCC
5V
Figura 11. Filtro Passa-alto Ativo de 2ªordem implementado
Figura 12. Resposta em frequência do circuito Passa-alto Ativo de 2ª ordem simulada no Multisim
Figura 13. Configuração fo filtro Passa-baixo ativo
C1 C2
94nF 47nF
R1
R3
18kΩ
34.1kΩ
V4 V1
-5 V -5 V
11 U1A 11 U2B
R2 R4
2 6
18kΩ 1 34.1kΩ 7
3 5
4 LM324N 4 LM324N
VCC VCC
5V 5V
Figura 15. Resposta em frequência do circuito Passa-baixo Ativo de 2ª ordem (simulada no Multisim à equerda e medida à direita)
Figura 16. Configuração do Filtro Notch Ativo
C1 C2 V1
-5 V
11 U1A
47nF 47nF
2
1
R1 R2 3
4 LM324N
68kΩ 68kΩ
R3 VCC
34.8kΩ 5V
R4
C3 22kΩ
94nF 4 U1B
5
7 R5
6 82kΩ
11 LM324N
Figura 17. Filtro Notch de 50Hz implementado e respetiva resposta em frequência medida no Multisim
7 R5
6 82kΩ
11 LM324N
Figura 19. Filtro Notch de 100Hz implementado e respectiva resposta em frequência medida no Multisim
Figura 20. Resposta em freuqência edida para o Filtro Notch Ativo de 100 Hz
VCC
5V
4 U1A
3
1
R1
2
10kΩ 11 LM324N
V1
-5 V
R2
150kΩ
R1
10kΩ
V1
-5 V
Vo
11 U1A
R2
2 Va
10kΩ 1
R3
3
10kΩ 4 LM324N
R4 R5 VCC
10kΩ 10kΩ 5V
V3 R6
5V 6.8kΩ