O princípio de operação de um detector de metais por pulsoUma das opções populares para o design de dispositivos de busca de metais é um detector de metais por pulso (
indução (
PI )) - um dispositivo despretensioso e confiável (boa profundidade de detecção, resistência a maior mineralização do solo, capacidade de trabalhar em água salgada), que possui vários campos de aplicação - de assuntos militares (usuários tradicionais de "impulsos") antes da pesquisa de ouro (esse hobby é especialmente popular na Austrália).
Mas ele também tem uma desvantagem significativa - grandes dificuldades com a discriminação, ou seja, determinando o tipo de alvo, por exemplo, para descobrir se é feito de metal não ferroso ou preto ou para distinguir uma mina antipessoal em uma caixa de plástico de uma pilha de detritos metálicos? Qual é a causa desse problema?
Considere o princípio de operação de um detector de metal pulsado.

Uma chave eletrônica (geralmente um
MOSFET que pode suportar tensões de várias centenas de volts - por exemplo, o popular
IRF740 é usado
neste trabalho de engenheiros
da Malásia, e o menos poderoso
IRF730 é usado com base na
matriz analógica-digital programável
GreenPAK controla a conexão da bobina de pesquisa a uma fonte de energia (bateria bateria). Quando um pulso de controle (geralmente com uma frequência de várias dezenas de centenas de hertz) é aplicado à porta do transistor, o
MOSFET se abre - o circuito é fechado e uma corrente crescente (gradualmente devido ao processo transitório) começa a fluir através da bobina. Estamos aguardando várias dezenas ou centenas de microssegundos de aumento de corrente até o nível desejado e ... interrompemos o circuito - o pulso de controle terminou. Atual
i através da bobina e, consequentemente, o fluxo magnético
Phi a bobina diminui acentuadamente (para acelerar o processo de fechamento do
MOSFET, o pulso de controle é fornecido não diretamente ao portão, mas através de um acionador especial), que, devido ao fenômeno da indução eletromagnética, causa o aparecimento de auto-indução de CEM
eL=−wd Phi overdt e um aumento acentuado na tensão da bobina. Então, o nível de tensão na bobina começa a diminuir. Mas se um objeto condutor ("alvo") estiver localizado próximo à bobina, o fluxo magnético diminuindo junto com a corrente através da bobina induz correntes de Foucault
iin neste alvo. Essas correntes parasitas criam seu próprio fluxo magnético.
Phiin , que está tentando manter o campo magnético de amortecimento da bobina. Este efeito leva a um aumento na duração da atenuação da tensão através da bobina, que é um indicador da ausência ou presença de um alvo (a decisão é tomada integrando o sinal e estimando o valor integral (
a ) ou com base nos valores do sinal em vários pontos (
b )):
Nota : os pulsos também podem ser bipolares (por exemplo, no detector de metais
Vallon VMH2 - um dispositivo clássico usado na remoção de minas):

(
fonte )
Ao mesmo tempo, o valor médio (componente constante) do campo magnético gerado pelo detector de metais é próximo de zero, o que deve (como os catálogos dizem com cuidado, “de acordo com o fabricante”) impedir que prejudique a pesquisa de minas que respondem a um campo magnético (embora, como o livro diz
“Manual do detector de metais para desminagem humanitária”, com uma remoção humanitária de minas como um incidente improvável).
Juntamente com a opção descrita com uma única bobina, combinando as funções de transmissão e recepção, existem detectores de metal por pulso com duas bobinas separadas. Esse esquema é usado não apenas no campo de pesquisa de metais, mas também na detecção de falhas (teste de
corrente de redemoinho pulsado (PEC) ) -
link 1 ,
link 2 . Nesse caso, uma das bobinas (bobina de
transmissão / transmissão ) serve para excitar as correntes de Foucault no alvo, e a outra (
bobina de recepção / captação ) é um sensor de campo magnético. Essa abordagem permite analisar o campo magnético não apenas no estágio de diminuição (após desconectar a fonte de energia da bobina transmissora), mas também no estágio crescente (após conectar a fonte de energia na bobina transmissora):

Aqui está uma ótima descrição dessa tecnologia:
O método de decaimento por correntes de Foucault para caracterização de resistividade de metais de alta pureza Problema de discriminaçãoO problema de reconhecer o tipo de metal surge devido ao fato de que a curva de tensão resultante na bobina é afetada pelo tamanho e formato do alvo, sua distância da bobina e eletricidade (condutividade específica
sigma ) e magnético (permeabilidade magnética
mu ) propriedades do material alvo.
Aqui estão algumas citações sobre este assunto:

(fonte:
Ahmet S. Turk, Koksal A. Hocaoglu, Alexey A. Vertiy Subsurface Sensing)
Discriminação de tipos de metal - Como a indução de pulso detecta metal pelo período de tempo necessário para que os pulsos das anomalias se deteriorem, geralmente é usado apenas para detectar o metal, em vez de determinar o tipo de metal.
(
fonte )
... tamanho, profundidade, alvos circundantes e resposta do solo podem alterar o sinal de forma que a discriminação adequada não seja possível.
(
fonte )
Muitas tentativas foram feitas para criar detectores de metais pulsados capazes de distinguir entre ferro, prata e cobre, mas todas essas tentativas tiveram um sucesso muito limitado. Isto é devido à física do sinal de pulso.
(
fonte )
Uma abordagem para solucionar esse problema é usar bobinas de
duplo D (
DD ) em vez do
loop mono usual, por exemplo, nos populares detectores de metais da série
GPX da Minelab :

(
fonte )
Nessa bobina, os enrolamentos de transmissão (
TX ) e de recepção (
RX ) são divididos:

(
fonte )
Nesse caso, uma análise do sinal do alvo é realizada não apenas quando diminui, mas também à medida que a corrente aumenta na bobina transmissora. Mas essa discriminação não é muito confiável:

(
fonte )
Mas e uma bobina mono loop? Muitos trabalhos (
link 1 link 2 link 3 ) indicam que o sinal na bobina do alvo pode ser representado como uma soma ponderada de sinais exponenciais em decomposição, cujos valores máximos e constantes de tempo são individuais e dependem do material, tamanho e forma do alvo:
u(t)= sumNi=1Aie−t/ tauiExperimentos de discriminação com o detector de metais padrão do Exército dos EUA relataram que objetos pequenos eram bem caracterizados por um único expoente em experimentos realizados pelos autores do artigo.
Ae− alphat , e para objetos grandes, dois já eram necessários -
Ae− alphat+Seja− betat .
Este artigo indica que a constante de tempo do componente exponencial pode ser representada como a razão da indutância e resistência equivalentes
taue=Le acimadeR e sua expressão é dada para um cilindro com um raio da base
R e alto
h :
tau= mur mu0 sigmaR2h acimade8Neste artigo , é dada uma expressão para a constante de tempo de decaimento das correntes de Foucault para uma esfera de raio
R :
tau= mur mu0 sigmaR2 over chi2 ,
onde
chi É o resultado da resolução da equação
tg chi=( mur−1) chi sobre mur−1+ chi2Nota : essas expressões analíticas só podem ser obtidas para corpos simétricos simples. Portanto, para estudar correntes parasitas, pode-se usar pacotes de software para simulação numérica de processos eletromagnéticos. Um exemplo é a simulação de um freio eletromagnético por corrente de Foucault no pacote
COMSOL Multiphysics :

(
fonte )
Como pode ser visto, as expressões para a constante de tempo juntas incluem permeabilidade magnética, condutividade elétrica e tamanho do alvo. Separar a influência desses fatores separadamente, necessária para a discriminação, não é tão simples.
No trabalho já mencionado, propõe-se o uso do classificador bayesiano para distinguir minas de detritos metálicos (duas hipóteses são testadas:
H0 - lixo
H1 - mina), mas isso requer estimativas adicionais da simetria do sinal etc. (É interessante que a composição dos fatores utilizados inclua a energia do sinal, estimada como
sumNi=1u2i cdot Deltat )
Para ilustrar, construí na tela do meu suporte experimental o design original de um gráfico da tensão na bobina para vários alvos:
sem alvo:
alvo número 1 (metal ferroso) a diferentes distâncias da bobina:
objetivo número 2 (metal ferroso):
alvo número 3 (metal não ferroso) a diferentes distâncias da bobina:
objetivo número 4 (metal não ferroso):
Como você pode ver, devido à maior permeabilidade magnética, os alvos do metal ferroso têm um nível de sinal inicial mais alto do que os alvos do metal não ferroso, mas o sinal atenua mais rapidamente devido à menor condutividade elétrica.
REDE NEURALComo, então, com base nessas características muito rigorosas, classificar o alvo, principalmente ao alterar a distância do alvo à bobina do detector de metais? Temos uma ferramenta maravilhosa - uma rede neural artificial. As redes neurais jogam jogo
da velha ,
blackjack ,
pôquer , prevêem o
clima e a
qualidade do vinho , calculam a
resistência ao movimento de máquinas agrícolas ... Para que possamos usar uma rede neural para resolver o problema da discriminação!
A prova de que isso é possível é o artigo
“Melhorando o desempenho dos sistemas PI através do uso de rede neural” por pesquisadores iranianos:
Dados para uma rede neuralPara preencher a matriz de dados para treinamento, validação e teste da rede neural, quando pressiono um botão no corpo da minha bancada de testes, 8 pontos são medidos (o número de pontos selecionados empiricamente) na curva de tensão e o ATmega328 ADC lê em forma simbólica na porta serial conectada ao conector USB do computador.
No suporte em frente à entrada do amplificador operacional, um limitador de diodo é ativado, mas, como a simulação mostrou, na área de interesse para nós (com uma baixa tensão na bobina), seu efeito no valor da tensão é insignificante:

Ativando o modo de registro em um programa terminal (por exemplo,
Tera Term ), obtemos dados "brutos" (por conveniência, comentários podem ser adicionados ao protocolo no
Tera Term ). Um pequeno utilitário escrito em
Go converte esses dados em um formato adequado para consumo por uma rede neural:
i1 i2 ... i8 o1 o2
Exemplo de uma linha com um conjunto de valores:
588 352 312 280 252 240 206 192 0 1Os dados de entrada i1 i2 ... i8 são amostras de um ADC de 10 bits no intervalo de 0 a 1023.
A saída o1 o2 é apresentada na forma:
“Metal ferroso” (
1 0), “metal não ferroso” (0
1 ).
Coletei dados quando havia um alvo feito de metal ferroso próximo à bobina (alvo nº 1, alvo nº 2) e um alvo de metal não ferroso (alvo nº 3, alvo nº 4), e os alvos estavam localizados a distâncias diferentes da bobina de pesquisa. Para uso posterior, selecionamos dados correspondentes a um
nível de sinal suficiente - com pelo menos dois valores diferentes de zero. Os conjuntos de dados correspondentes à
sobrecarga de entrada do
ADC também
foram descartados - contendo vários valores máximos possíveis (1023):

Para ilustrar, realizei uma análise de regressão para um conjunto de dados:

O sinal recebido é bem descrito pela soma de dois exponenciais:
437,9e−0,29x+93,1e−12,1x onde
x - número de referência.
Aloquei a maioria dos dados (110 conjuntos de valores, arquivo
train.dat ) para treinamento (
conjunto de dados de treinamento ) (eles são adicionalmente randomizados - baralhados durante o carregamento) e a parte menor (40 conjuntos, arquivo
test.dat ) - para
validação de rede neural (
validação conjunto de dados ) - faz uma verificação cruzada em sua forma mais simples (em dados adiados (
conjunto de dados de
validação )).
Estrutura de rede neuralA rede neural clássica de distribuição direta clássica criada terá três camadas:
a camada de entrada - de 8 neurônios - percebe os pontos da curva de tensão;
camada oculta - de três neurônios;
camada de saída - de dois neurônios.

(rede "8-3-2")
Os iranianos no trabalho acima usaram duas amostras (respectivamente, dois neurônios de entrada) e três neurônios em duas camadas ocultas (o diagrama da rede neural é representado e descrito em seu artigo de maneira não muito clara).Estado do neurônio
z definido como ponderado (
w - peso) quantidade
n sinais de entrada
x (percebida pelos dendritos) e preconceitos
b :
z= sumni=1wi cdotxi+wi+1 cdotb(a adição de viés pode ser representada como o efeito de um viés de neurônio adicional)
O estado do neurônio é convertido em um sinal de saída (nos terminais do axônio) usando a função de ativação
f :
y=f(z)Os sinais de entrada da rede neural que chegam aos neurônios da camada de entrada são transmitidos para suas saídas inalteradas, o que corresponde a uma função de ativação linear:
f(z)=zPara neurônios da camada oculta e de saída, uma função de ativação não linear, o "sigmóide", ou melhor, sua opção muito popular, a função logística, é usada com um intervalo de valores (0; 1):
f(z)=1 over1+e−zEssa escolha da função de ativação é ótima para amostras ADC não negativas. Mas isso requer, é claro, a normalização dos valores de entrada - divida-os por 1024, o que garante um valor menor que 1.
Os iranianos usavam a tangente hiperbólica como função de ativação.Os valores nas saídas dos neurônios da camada de saída determinam os resultados da rede neural. O neurônio com o valor máximo de saída indicará a decisão (a classe vencedora) tomada pela rede: a primeira classe é "metal ferroso", a segunda classe é "metal não ferroso".
Os iranianos usaram três neurônios de saída, indicando ferro, cobre e chumbo.O Python é frequentemente usado para resolver problemas de aprendizado de máquina -
PyTorch ,
Keras ,
TensorFlow ,
CNTK , bibliotecas e estruturas para redes neurais também são criadas para
JavaScript -
Synaptic ,
Java -
Deeplearning4j ,
C ++ -
CNTK e
MATLAB .
Porém, para o uso subsequente do "campo" em um detector de metais, essas estruturas / bibliotecas são de pouca utilidade; portanto, para uma compreensão detalhada do processo, construí minha rede neural sem usar bibliotecas de suporte da ANN adicionais. Obviamente, uma rede neural também pode ser escrita em
BASIC :-). Mas, sob a influência de minhas preferências subjetivas, escolhi
Go .
Treinamento e validação de redes neuraisAo criar uma rede, os pesos são inicializados com valores aleatórios no intervalo (-0,1; 0,1).
Usei o
método de descida de gradiente estocástico (
SGD ) para treinar a rede.
A rede neural executa uma iteração do processo de aprendizado, usando um dos conjuntos de dados fornecidos para o treinamento em sequência. Nesse caso, a operação de distribuição direta é executada primeiro - a rede processa o conjunto de sinais fornecidos pelo exemplo de treinamento fornecido à entrada. Em seguida, com base na solução obtida, o algoritmo de retropropagação é implementado. Para atualizar as escalas no processo de aprendizagem, apliquei a fórmula da descida do gradiente "baunilha", que usa um hiperparâmetro - o coeficiente da
taxa de aprendizagem alpha (às vezes indicado
eta ), ou seja, segundo parâmetro hiperparâmetro popular - fator momento
gama (
fator de momento ).
A era do aprendizado termina após o uso de toda a gama de dados de treinamento. Após o final da era, o quadrado
médio do erro (
MSE ) do treinamento é calculado, a rede neural recebe um conjunto de valores para validação (verificação cruzada de dados diferidos), o quadrado médio do erro de validação é determinado, a precisão das previsões (
precisão ) e as repetições do ciclo. O ciclo para após atingir o nível requerido do quadrado médio do erro de validação.
Após compilar o código-fonte (arquivo
nn4md.go ) e iniciar o arquivo executável, o processo de aprendizado é exibido no número da era do console (
Epoch ), quadrado médio dos erros de aprendizado e validação (
MSE ) e precisão das previsões no conjunto de dados para validação (
Acc .).
Aqui está um fragmento desse protocolo:

Uma mudança no número inicial afeta os valores iniciais dos pesos da rede neural, o que leva a pequenas diferenças no processo de aprendizagem. Com um fator de velocidade de aprendizado de 0,1, o aprendizado é concluído (quando
MSE = 0,01 no conjunto de testes) em cerca de 300 épocas.
A precisão das decisões sobre o conjunto de dados para validação é de 100% (o programa fornece o número do neurônio vencedor, começando de 0 - “0” - o primeiro neurônio, metal ferroso; “1” - o segundo neurônio, metal não ferroso):
0 -> 0
0 -> 0
0 -> 0
...
1 -> 1
1 -> 1
1 -> 1
Os pesos da rede neural resultantes após o treinamento são armazenados para uso posterior no arquivo de texto
nn4md.json no formato
JSON . A propósito, para codificar estruturas
JSON no
Go , é conveniente usar essa
ferramenta online .
Como ainda não existe um padrão universalmente aceito e conveniente para armazenar as configurações de redes neurais (embora exista, é claro, o
NNEF - mas para uma rede tão simples isso é demais
IMHO ), usei meu próprio formato:
Teste de rede neuralE agora estamos testando uma rede neural treinada no reconhecimento de novos alvos (
conjunto de dados de teste ).
Objetivo número 5 (de metais ferrosos) :
Tipo de curva:

Conjunto de valores:
768 224 96 48 14 0 0 0Objetivo número 6 (de metais não ferrosos) :
Tipo de curva:

Conjunto de valores:
655 352 254 192 152 124 96 78Após concluir o treinamento, o programa espera a entrada de dados para teste.
Verifique o objetivo número 5:

Sucesso - "0" - metal ferroso.
Agora verifique o objetivo número 6:

Sucesso - “1” - metal não ferroso.
Isso quase acabou por ser "
prova de conceito ".
Arquivos de conjunto de dados, um arquivo de peso de rede e código-fonte estão disponíveis no
repositório no GitHub.