Talaan ng mga Nilalaman:

Sistema Autônomo Localizador De Vazamentos: 11 Mga Hakbang
Sistema Autônomo Localizador De Vazamentos: 11 Mga Hakbang

Video: Sistema Autônomo Localizador De Vazamentos: 11 Mga Hakbang

Video: Sistema Autônomo Localizador De Vazamentos: 11 Mga Hakbang
Video: Saiba Como Achar Vazamento de Água Residência, Super Dicas Empresa Caça Vazamentos 2024, Nobyembre
Anonim
Sistema Autônomo Localizador De Vazamentos
Sistema Autônomo Localizador De Vazamentos

Ang mga projeto na ito ay binubuo ng kanilang robrob, que através da leitura realizada por um dispositivo, equipado com um sensor piezoelétrico, captura os espectros das vibrações no solo, pode identificar e localizar, com o processamento dos maging por uma rede neural, possíveis vazamentos de água em uma tubulação.

O proseso ng mga destinasyon upang maging realizado para sa mga pag-install ng DRAGONBOARD 410c. Dapat gawin ito para sa mga serbisyo, na tumutugon sa auxiliar na walang proseso ng Integência Artipisyal na gawin ang projeto.

Este projeto foi desenvolvido no Hackaton Qualcomm, durante a TecnoFACENS da Faculdade de Engenharia de Sorocaba (FACENS), participaram do projeto os graduandos de engenharia mecatrônica Eneo Juliano Bovino, Felipe Xavier, Lucas de Sousa Rodrigues, Rogério Ap. Gomes Polo e Ronaldo P. Gomes Polo. Sumali sa iyo upang gawin ang proyekto ni Daniel de Castro Pacheco graduando de engenharia mecânica na ang Universityidade Newton Paiva de Belo Horizonte. O projeto contou com o apoio dos graduandos de engenharia mecatrônica da FACENS, Lucas Nunes Monteiro e Felipe Crispim da Silva Salvagnini.

Hakbang 1: Lista De Materiais

Lista De Materiais
Lista De Materiais

Para sa realização deste projeto, os seguintes materiais foram utilizados:

1 Arduino Dahil

1 Dragonboard 410c

2 Mga driver para sa motor de corrente Continua contendo cada um:

4 Transistores BC548

4 Diodos 1n4007

4 Resistores 4k7Ω ¼ W

1 Driver para sa servo motor contendo:

1 Transistores BC548

1 Diodos 1N4007

1 Resistores 4k7Ω ¼ W

1 Mouse USB

1 Teclado USB

1 Monitor

1 Cabo HDMI

1 Robô De Esteiras - Plataforma Zumo

1 Mini dispositivo de cremalheira e engrenagem

1 Servo motor 9g

Hakbang 2: Adaptação Mecânica

Image
Image

Para sa isang mahusay na sensor ng isang sensor ng piezoelétrico, ang kinakailangan, o desenvolvimento de um dispositivo com pinhão e cremalheira, conforme desenhos anexados, Neste Caso as peças foram fabricadas por uma impressionora 3D, devido ao fato de se tratar de um protótipo e ao curto tempo de execução, fixou-se o dispositivo na plataforma zumo, utilizando fita dupla face, conforme vídeo.

Hakbang 3: Acionamento Dos Motores

Obtenção Do Áudio
Obtenção Do Áudio

Para sa pagpapatupad ng isang Movimentação dos motores do robô ZUMO upang gawin ang mga driver, maaari mong gawin ang mga driver para sa mga motore de corrente na pagpapatuloy at isang driver para sa isang motor na motor, sumunod sa mga figura acima, magpadala ng isang pangunahing driver o driver para sa um motor de corrente Continua ea segunda o driver para um servo motor.

Hakbang 4: Obtenção Do Áudio

Para sa pagtataguyod sa espasyo ng mga bata sa iyong sarili, gagamitin ang mga ito sa pagtatapos ng TCC de Engenharia Mecatrônica ng mga nagtapos na si Lucas Nunes Monteiro e Felipe C. da Silva Salvagnini, mula sa mga detalyadong pinag-uusapan ng TCC at iba pa mag-email sa [email protected].

Este dispositivo utiliza-se de um sensor piezoelétrico e uma placa de circuito que realiza a filtragem e amplificação do sinal.

Bilang mga dalas ng interesse para sa projeto na ito sa loob ng 100Hz at 800Hz. Para sa pagtataguyod ng sensoriamento foi configurado com uma frequency ng amostragem de 3 kHz para sa katotohanan sa respeitada bilang condições do teorema de amostragem de Nyquist, onde a frequência de aquisição deve estar pelo menos duas vezes acima das frequências estudadas.

Ang isang aquisição é habilitada at desabilitada através da interrupção do Arduino DUE.

Hakbang 5: Configuração Do Arduino DUE (linguagem C)

Configuração Do Arduino DUE (linguagem C)
Configuração Do Arduino DUE (linguagem C)

Ang Devido a grande quantidade de magiging, cerca de 3000 pontos por segundo, do tipo inteiro de 32 bits, gerados pelo dispositivo de sensoriamento at mga kinakailangan para sa proseso ng dos algoritmos na DRAGONBOARD 410c, ay ginagamit ng Arduino DUE para sa fazer uso ng lahat ng entrada analógica com maior poder de processamento, ay kinakailangan ng iyong Shield de interfaceamento Grove Seeed Sensor Mezzanine installado na DRAGONBOARD 410c, na maaaring mag-microcontrolador ATmega 328, na kung saan ay may poder de processamento para sa pagpapatakbo.

O Arduino DUE foi configurado para receber os comandos enviados da plataforma QUALCOMM DRAGONBOARD 410c via comunicação serial.

Bilang mga configuradas na walang Arduino foram:

Realizar a aquisição dos dados;

Transmitir os magiging obtidos para sa isang DRAGONBOARD 410c;

I-edit ang isang programa:

# isama ang # tukuyin ang Numb_Sample 3000 # tukuyin ang DAC_Input A0

# tukuyin ang SERVO 7

#define PosServoMin 4 #define PosServoMax 6 #define Period 60 unsigned int Scont = 0, SNow = PosServoMin; unsigned long int DAC [Numb_Sample], ind = Numb_Sample; walang bisa TC3_Handler () {TC_GetStatus (TC1, 0); kung (ind <Numb_Sample) DAC [ind ++] = analogRead (DAC_Input); kung (Scont

1); // 50% cycle ng tungkulin

TC_SetRC (tc, channel, rc); TC_Start (tc, channel); tc-> TC_CHANNEL [channel]. TC_IER = TC_IER_CPCS | TC_IER_CPAS; // habilita os registradores tc-> TC_CHANNEL [channel]. TC_IDR = ~ (TC_IER_CPCS | TC_IER_CPAS); // desabilita os registradores NVIC_EnableIRQ (irq); // habilita interrupção}

walang bisa ang pag-setup ()

{Serial.begin (115200); pinMode (DAC_Input, INPUT); TimerStart (TC1, 0, TC3_IRQn, 1500); // Init ang Timer // TC_Stop (TC1, 0); pinMode (SERVO, OUTPUT); }

walang bisa loop ()

{/ * // habang (! Serial.available ()); char rc; // = Serial.read (); int indice = 0; kung (rc == 0) {habang (! Serial.available ()); rc = Serial.read (); switch (rc) {case 1: indice = 0; habang (! Serial.available ()); habang ((rc = Serial.read ())! = 0xFF) {indice << = 8; indice + = rc; habang (! Serial.available ()); } Serial.print (0); Serial.print (2); SendNumber (DAC [indice]); Serial.print (0xFF); pahinga; kaso 3: habang (! Serial.available ()); kung ((Serial.read ()) == 0xFF) {SNow = PosServoMax; pagkaantala (500); ind = 0; // TC_Start (TC1, 0); habang (ind <Numb_Sample); // TC_Stop (TC1, 0); SNow = PosServoMin; pagkaantala (500); Serial.print (0); Serial.print (4); Serial.print (0xFF); } pahinga; }} iba pa kung (rc == '2') {Serial.print ("Test Servo Motor / n"); habang (! Serial.available ()); rc = Serial.read (); kung (rc == '1') {Serial.print ("Mode 1 / n"); SNow = PosServoMax; } kung (rc == '2') {Serial.print ("Mode 2 / n"); SNow = PosServoMin; }} * / SNow = PosServoMax; pagkaantala (100); SNow = PosServoMin; pagkaantala (100); }

Hakbang 6: Interfaceamento Das Tecnologias

Interfaceamento Das Tecnologias
Interfaceamento Das Tecnologias

Para sa isang comunicação dos magiging entre o Arduíno DUE o DRAGONBOARD 410c, mailagay ang isang interface mula sa iyong akda, o maaari mong maisakatuparan ang mga ito, maaari kang pumili ng isang interface ng USB CDC sa Arduino DUE ea DRAGONBOARD 410c, para sa kinakailangan ng recompilação do KERNEL da DRAGONBOARD 410c, que não se fez por causa do curto tempo disponível.

Hakbang 7: Configuração Da DRAGONBOARD 410c (Python)

Configuração Da DRAGONBOARD 410c (Python)
Configuração Da DRAGONBOARD 410c (Python)

Mag-configure para sa mga tao sa Arduino DUE os comandos para sa realizar a aquisição de magiging e transmitir os maging obtidos. Segue código abaixo.

Observação: Isang abordagem utilizada no código, não funcionou devido aos níveis de tenão utilizados pelo Arduíno DUE at o Mezzanine serem incompatíveis. Sa pamamagitan ng pagpili ng interface ng USB, kailangan ng recompilação do KERNEL na DRAGONBOARD 410c para sa isang porta fosse criada corretamente para sa isang comunicação.

import timeimport serial import pandas bilang pd import numpy as np

# Configuração da conexão serial

ser = serial. Serial (port = '/ dev / ttyAMC0', # tty96B0 ', baudrate = 250000, pagkakapareho = serial. PARITY_NONE, stopbits = serial. STOPBITS_ONE, bytesize = serial. EIGHTBITS)

ser.isOpen ()

i-print ('Ipasok ang iyong mga utos sa ibaba. / r / nIpasok ang "exit" upang iwanan ang application.')

input = 1

habang 1: input = input (">>") kung input == 'exit': ser.close () exit () elif input == 'read': ser.write (0) # Envia o comando para o Arduino DUE realizar a coleta dos dados ser.write (1) # Envia o comando para o Arduino DUE transmitir os magiging coletados

lista =

para sa saklaw (3000):

ser.write (i / 256) ser.write ((i <0: out = ser.read (2) kung (out == 0x0002): atual = 0 c = ser.read (1) habang (c! = 0xFF): atual << 8 atual + = cc = ser.read (1) lista.append (atual)

Hakbang 8: INTERPRETAÇÃO DOS ARQUIVOS DE AUDIO

INTERPRETAÇÃO DOS ARQUIVOS DE AUDIO
INTERPRETAÇÃO DOS ARQUIVOS DE AUDIO

Para sa poder realizar uma primeira análise dos maging obtidos através do sensor, se fez kinakailangan para sa pag-uusap ng mga form ng WAV, fornecidos pelos alunos autores do TCC at colaboradores do projeto, para valores numéricos, que são utilizados nos algoritmos de análise embarcados na DRAGON. Para sa realizar esta pag-uusap sa escrito um algoritmo em PYTHON 3 que lê o arquivo WAV e salva os magiging do espectro em um arquivo CSV. O algoritmo utilizado segue abaixo e em anexo para ma-download.

Esse algoritmo não se faz mustário para sa iyo upang gawin ang mga ito, kung saan ang Arduino DUE ay nag-iisa sa mga esse na ginawa ng mga ito mula sa mga valores numéricos.

# coding: utf-8

# Leitura at pag-uusap sa audios para csv

# MÓDULOS UTILIZADOS

i-import ang alon ng pag-import numpy bilang np import pandas bilang pd import matplotlib.pyplot bilang plt

# FUNÇÃO PARA CONVERTER WAV EM DADOS GUMAGAWA NG ESPECTRO E SALVAR CSV

def audio_to_csv (file_name): wave_file = wave.open (file_name + '. wav', 'rb') data_size = wave_file.getnframes () sample_rate = wave_file.getframerate () time_step = 1 / sample_rate waveData = wave_file.readframes (data_state) signal = np.fromstring (waveData, dtype = 'int32') Oras = np.linspace (start = 0, stop = data_size / sample_rate, num = data_size, endpoint = True) df = pd.concat ([pd. DataFrame (signal), pd. DataFrame (Oras)], axis = 1) df.to_csv (file_name + '.csv', index = Maling) bumalik df

# CARREGANDO DATA FRAME COM OS DADOS DO AUDIO

file_name = 'Solo_com_Vazamento' df_vazamento = audio_to_csv (file_name) df_vazamento.columns = ['amp', 'time'] file_name = 'Solo_sem_Vazamento' df_sem_vazamento = audio_to_csv (file_name) df_sem_vazamento.colt '

# GRÁFICO Gawin ang ESPECTRO DE AUDIO

figure, (ax1, ax2) = plt.subplots (nrows = 2, ncols = 1, figsize = (20, 10)) ax1.plot (df_vazamento ['time'], df_vazamento ['amp']) ax1.set_title ('Solo com Vazamento', fontdict = {'fontsize': 20, 'fontweight': 'bold'}) ax1.set_xlabel ('Tempo [s]', fontdict = {'fontsize': 16}) ax1.set_ylim ([-4e8, 4e8]) ax2.plot (df_sem_vazamento ['time'], df_sem_vazamento ['amp']) ax2.set_title ('Solo sem Vazamento', fontdict = {'fontsize': 20, 'fontweight': 'bold' }) ax2.set_xlabel ('Tempo [s]', fontdict = {'fontsize': 16}) ax2.set_ylim ([- 4e8, 4e8]) figure.tight_layout (h_pad = 5) plt.show ()

Hakbang 9: Análise Visual Do Sinal

Análise Visual Do Sinal
Análise Visual Do Sinal
Análise Visual Do Sinal
Análise Visual Do Sinal
Análise Visual Do Sinal
Análise Visual Do Sinal

Com PYTHON 3 é realizada a transformada de Fourier, este artificio matemático realiza a transformação do sinal do domínio do tempo para o domínio da frequência, onde se torna possível analisar as varias frequencyências, at mga amplitude, que compõem aquele sinal. Pela análise visual do gráfico da transformada de Fourier para sa profissional com conhecimentos específicos poderá identificar a existência de algum vazamento na tubulação. Estes gráficos servirão para validação das análises realizadas pelo algoritmo de detecção automática.

Limitando o eixo das frequências entre 100Hz at 800Hz, maaari kang magkaroon ng isang de-kuryenteng lugar na makikita ang distansya ng mga frequency mula sa mga frequency.

# coding: utf-8 # Mádulos utilizados para sa proseso ng pagbabago ng Fourier

i-import ang mga pandas bilang pd na i-import bilang isang pag-import ng alon mula sa matplotlib na i-import ang pyplot bilang plt # Taxa de amostragem em Hz Ts = 1.0 / Fs; # Intervalo de amostragem y = pd.concat (df_list) t = y ['time'] # Vetor de tempos y = y ['amp'] # Vetor de amplitude n = len (y) # Comprimento do sinal k = np. arange (n) T = n / Fs frq = k / T frq = frq [range (n // 2)] Y = np.fft.fft (y) / n Y = Y [range (n // 2)] tmp = pd. DataFrame () tmp ['amp'] = abs (Y) tmp ['freq'] = frq max_lim = max (tmp ['amp'] [(tmp ['freq']> = 100) & (tmp ['freq'] <= 800)]) fig, ax = plt.subplots (2, 1, figsize = (20, 10)) ax [0].plot (t, y) ax [0].set_xlabel ('Oras') palakol [0].set_ylabel ('Amplitude') palakol [1].plot (frq, abs (Y), 'r') palakol [1].set_xlim ([100, 800]) palakol [1].set_ylim ([0, max_lim]) ax [1].set_xlabel ('Freq (Hz)') ax [1].set_ylabel ('| Y (freq) |') plt.show () return frq, abs (Y) # Função que realiza a carga dos dados do CSV e chama a função de Fourier def read_csv (file_name, init, final): df = pd.read_csv (file_name + '.csv') df.columns = ['amp', ' oras '] delta = final-init kung init * 44100> len (df) o panghuli * 44100> len (df): init = (len (df) / 44100) -delta kung init = 100) & (df [' freq '] <= 800)] mx = pinagsunod-sunod (df [' amp ']) print ("Média das amplitude:", np.round (np.mean (mx))) print ("Percentuais em relação a média das amplitude.") print ("100 maiores amplitude", np.mean (mx [-100:]) // df ['amp']. ibig sabihin () * 100, "%", sep = "") print ("50 maiores amplitude:", np.mean (mx [-50:]) // df ['amp']. ibig sabihin () * 100, "%", sep = "") print ("10 maiores amplitude:", np.mean (mx [-10:]) // df ['amp']. ibig sabihin () * 100, "%", sep = "") print ("Maior amplitude:", np.mean (mx [-1:]) // df ['amp']. mean () * 100, " % ", sep =" ") read_csv ('Solo_com_Vazamento', 2, 10) # Exemplo de gráficos para vazamentoread_csv ('Solo_sem_Vazamento', 2, 10) # Exemplo de gráficos para sem vazamento

Hakbang 10: Ang Algoritmo Em R Para Extração Das Mga Tampok Mga Dos Dados

Algoritmo Em R Para sa Extração Das Mga Tampok Dos Dados
Algoritmo Em R Para sa Extração Das Mga Tampok Dos Dados
Algoritmo Em R Para sa Extração Das Mga Tampok Dos Dados
Algoritmo Em R Para sa Extração Das Mga Tampok Dos Dados

Gumagamit ng isang algorithm para sa R para sa realizar o proseso ng karagdagang mga tampok (mga katangian) na gagawin.

Este primeiro algorithitmo realiza uma extração identificada, onde é ilainaário saber se o arquivo de áudio trata-se de uma amostra vazamento detectado ou não, isso por que os naging resultsantes desse processo servirão para sa treinamento da rede neural utilizada.

Para sa quando o sistema na ito ay nag-aalok ng modo de operação um algoritmo um pouco diferente será executiveado, onde não este fará a extração não identificada, gerando somente as características sem uma identificação.

Nagtatampok ang Estas ng iyong caraterísticas são propriedades acústicas compostas por varias informações referentes ao espectro de áudio capturado, abaixo seguirá uma descrição (em inglês) destas características.

Itinatakda ang algoritmo faz parte de um projeto disponível no GitHub e pode ser acessado através deste link, o mesmo foi modificado para sa atender tulad ng mga especificações na gagawing projeto.

Magagamit ang software para sa rodar o algoritmo é gratuito, i-download ang interpretador ng R Studio na R.

Características extraídas:

  • meanfreq: ibig sabihin ng dalas (sa kHz)
  • sd: karaniwang paglihis ng dalas
  • panggitna: dalas ng median (sa kHz)
  • Q25: unang dami (sa kHz)
  • Q75: pangatlong dami (sa kHz)
  • IQR: saklaw ng interquantile (sa kHz)
  • skewness: skewness (tingnan ang tala sa deskripsyon ng specprop)
  • kurt: kurtosis (tingnan ang tala sa paglalarawan ng specprop)
  • sp.ent: spectral entropy
  • sfm: spectral flatness
  • mode: dalas ng mode
  • centroid: frequency centroid (tingnan ang specprop)
  • peakf: rurok ng dalas (dalas na may pinakamataas na enerhiya)
  • meanfun: average ng pangunahing dalas na sinusukat sa buong signal ng acoustic
  • minfun: minimum na pangunahing pangunahing dalas na sinusukat sa buong signal ng acoustic
  • maxfun: maximum na pangunahing kadahilanan na sinusukat sa buong signal ng acoustic
  • meandom: average ng nangingibabaw na dalas na sinusukat sa buong signal ng acoustic
  • mindom: minimum ng nangingibabaw na dalas na sinusukat sa buong signal ng acoustic
  • maxdom: maximum ng nangingibabaw na dalas na sinusukat sa buong signal ng acoustic
  • dfrange: saklaw ng nangingibabaw na dalas na sinusukat sa buong signal ng acoustic
  • modindx: index ng modulation. Kinakalkula bilang naipon na ganap na pagkakaiba sa pagitan ng mga katabing sukat ng mga pangunahing frequency na hinati ng saklaw ng dalas
  • label: butas na tumutulo o walang_leakage

Algoritmo usado:

packages <- c ('tuneR', 'seewave', 'fftw', 'caTools', 'randomForest', 'warbleR', 'mice', 'e1071', 'rpart', 'xgboost', 'e1071') if (haba (setdiff (packages, rownames (install.packages ())))> 0) {install.packages (setdiff (packages, rownames (install.packages ())))}

silid-aklatan (tuneR)

library (seewave) library (caTools) library (rpart) library (rpart.plot) library (randomForest) library (warbleR) library (mice) library (xgboost) library (e1071)

specan3 <- function (X, bp = c (0, 22), wl = 2048, threshold = 5, parallel = 1) {# Upang magamit ang parallel processing: library (devtools), install_github ('nathanvan / parallelsugar') kung (class (X) == "data.frame") {kung (lahat (c ("sound.files", "selec", "start", "end")% sa% colnames (X))) {start <- Bilang alisin ang listahan (X $ selec))} iba pa ihinto (i-paste (i-paste (c ("sound.files", "selec", "start", "end") [! (c ("sound.files", "selec", "start", "end")% sa% colnames (X)], collaps = ","), "(mga) haligi na hindi natagpuan sa data frame"))} pa huminto ("Ang X ay hindi isang data frame") #kung may mga NA sa pagsisimula o pagtatapos kung (anumang (ay.na (c (pagtatapos, simulan)))) huminto ("Ang mga NA na matatagpuan sa pagsisimula at / o pagtatapos") #kung magtatapos o magsimula ay hindi paghinto sa bilang kung (lahat (class (end)! = "numeric" & class (start)! = "numeric")) huminto ("'end' at 'selec' dapat na numeric") #kung anumang mas mataas na pagsisimula kaysa sa pagtigil sa pagtatapos kung (any (end - start <0)) stop (paste ("Ang pagsisimula ay mas mataas kaysa sa en d sa ", haba (na (end - start20)) huminto (i-paste (haba (na (end - start> 20))," mga pagpipilian (mas mahaba kaysa sa 20 sec ")) na pagpipilian (show.error.messages = TRUE) #kung bp ay hindi vector o haba! = 2 huminto kung (! is.vector (bp)) huminto ("'bp' ay dapat na isang numerong vector ng haba 2") iba pa {kung (! haba (bp) == 2) huminto ("'bp' ay dapat na isang numerong vector ng haba 2")} # babalik babala kung hindi lahat ng mga file na tunog ay natagpuan fs <- list.files (path = getwd (), pattern = ".wav $", huwag pansinin.kalin = TUNAY) kung (haba (natatangi (sound.files [(sound.files% sa% fs)]))! = haba (natatangi (sound.files))) pusa (i-paste (haba (natatanging (tunog. mga file)) - haba (natatangi (sound.files [(sound.files% sa% fs)])), ".wav file (s) not found")) #count number of sound files in working Directory and if 0 stop d <- alin (sound.files% sa% fs) kung (haba (d) == 0) {stop ("Ang.wav file ay wala sa gumaganang direktoryo")} iba pa {start <- start [d] end <- end [d] selec <- selec [d] sound.files <- sound.files [d]} # Kung ang parallel ay hindi numeric kung (! is.numeric (parallel)) huminto ("'parallel' must maging isang numerong vector ng haba 1 ") kung (anumang (! (parallel %% 1 == 0), parallel 1) {options (warn = -1) kung (lahat (Sys.info () [1] ==" Windows ", nangangailanganNamespace (" parallelsugar ", tahimik = TUNAY) == TUNAY)) lapp <- function (X, FUN) parallelsugar:: mclapply (X, FUN, mc.cores = parallel) iba pa kung (Sys.info () [1] == "Windows") {cat ("Kailangang mai-install ng mga gumagamit ng Windows ang package na 'parallelsugar' para sa parallel computing (hindi mo ginagawa ito ngayon!)") Lapp <- pbapply:: pblapply} iba pa lapp <- function (X, FUN) parallel:: mclapply (X, FUN, mc.cores = parallel)} iba pa lapp <- pbapply:: pblapply options (warn = 0) kung (parallel == 1) cat ("Pagsukat ng mga parameter ng acoustic:") x <- as.data.frame (lapp (1: haba (start), function (i) {r <- tuneR:: readWave (file.path (getwd (), sound.files ), mula sa = simulan ang , sa = pagtatapos , mga yunit = "segundo") b kisame ([email protected]/2000) - 1) b [2] <- kisame ([email protected]/2000) - 1 #frequency spectrum analysis songspec <- seewave:: spec (r, f = [email protected], plot = FALSE) analysis <- seewave:: specprop (songspec, f = [email protected], flim = c (0, 280/1000), plot = FALSE) #save parameter meanfreq <- analysis $ mean / 1000 sd <- analysis $ sd / 1000 median <- analysis $ median / 1000 Q25 < - analysis $ QQ75 <- analysis $ QIQR <- analysis $ IQR / 1000 skew <- analysis $ skewness kurt <- analysis $ kurtosis sp.ent <- analysis $ sh sfm <- analysis $ sfm mode <- analysis $ mode / 1000 centroid <- analysis $ cent / 1000 #Frequency with amplitude peaks peakf <- 0 # seewave:: fpeaks (songspec, f = [email protected], wl = wl, nmax = 3, plot = FALSE) [1, 1] #Mga pangunahing parameter ng dalas ff <- seewave:: pondo (r, f = [email protected], ovlp = 50, threshold = threshold, fmax = 280, ylim = c (0, 280/1000), plot = FALSE, wl = wl) [, 2] meanfun <-mean (ff, na.rm = T) minfun <-min (ff, na.rm = T) maxfun <-max (ff, na.rm = T) #Mga pangunahing parameter ng frecuency y <- seewave:: dfreq (r, f = [email protected], wl = wl, ylim = c (0, 280/1000), ovlp = 0, plot = F, threshold = threshold, bandpass = b * 1000, fftw = TRUE) [, 2] meandom <- mean (y, na.rm = TRUE) mindom <- min (y, na.rm = TRUE) maxdom <- max (y, na.rm = TUNAY) dfrange <- (maxdom - mindom) tagal <- (end - start ) #modulation index pagkalkula ng mga pagbabago <- vector () para sa (j kung saan (! ay. na (y))) {baguhin <- abs (y [j] - y [j + 1]) mga pagbabago <- idugtong (pagbabago, baguhin)} kung (mindom == maxdom) modindx <-0 iba pa modindx <- ibig sabihin (nagbabago, na.rm = T) / dfrange #save bumalik ng mga resulta (c (tagal, meanfreq, sd, median, Q25, Q75, IQR, skew, kurt, sp.ent, sfm, mode, centroid, peakf, meanfun, minfun, maxfun, meandom, mindom, maxdom, dfrange, modindx))})) #change result names rownames (x) <- c ("tagal", "meanfreq", "sd", "median", "Q25", "Q75", "IQR", "skew", "kurt", "sp.ent", "sfm", "mode", "centroid", "peakf", "meanfun", "minfun", "maxfun", "meandom", "mindom", "maxdom", "dfrange", "modindx") x <- data.frame (sound.files, selec, as.data.frame (t (x))) colnames (x) [1: 2] <- c ("sound.files", "selec") rownames (x) <- c (1: nrow (x)) return (x)}

processFolder <- function (folderName) {# Magsimula sa walang laman na data.frame. data <- data.frame () # Kumuha ng listahan ng mga file sa folder. listahan <- list.files (folderName, '\. wav') # Magdagdag ng listahan ng file sa data.frame para sa pagproseso. para sa (fileName sa listahan) {row <- data.frame (fileName, 0, 0, 20) data <- rbind (data, row)} # Itakda ang mga pangalan ng haligi. mga pangalan (data) <- c ('sound.files', 'selec', 'start', 'end') # Lumipat sa folder para sa pagproseso. setwd (folderName) # Iproseso ang mga file. acoustics <- specan3 (data, parallel = 1) # Lumipat pabalik sa folder ng magulang. setwd ('..') acoustics}

kasarian <- function (filePath) {kung (! umiiral ('genderBoosted')) {load ('model.bin')} # Mga path ng pag-setup. currentPath <- getwd () fileName <- basename (filePath) path <- dirname (filePath) # Itakda ang direktoryo upang mabasa ang file. setwd (path) # Magsimula sa walang laman na data.frame. data <- data.frame (fileName, 0, 0, 20) # Itakda ang mga pangalan ng haligi. mga pangalan (data) <- c ('sound.files', 'selec', 'start', 'end') # Iproseso ang mga file. acoustics <- specan3 (data, parallel = 1) # Ibalik ang landas. setwd (kasalukuyangPath) hulaan (genderCombo, newdata = acoustics)}

# Mag-load ng data

leakage <- processFolder ('caminho para sa mga sample ng pasta com ng áudio com vazamento') without_leakage <- processFolder ('caminho para sa mga sample ng pasta com ng áudio sem vazamento')

# Magtakda ng mga label.

leakage $ label <- 1 without_leakage $ label <- 2 data <- rbind (leakage, without_leakage) data $ label <- factor (data $ label, label = c ('leakage', 'without_leakage'))

# Alisin ang mga hindi nagamit na haligi.

data $ tagal <<

# Alisin ang mga hilera na naglalaman ng mga NA.

data <- data [complete.cases (data),]

# Isulat ang csv dataset.

write.csv (data, file = 'Features.csv', sep = ',', row.names = F)

Hakbang 11: Rede Neural

Rede Neural
Rede Neural

Ang isang ideya ay uso ng lahat ng red neural, isang realizar um reconhecimento automatizado através dos dados coletados pelo dispositivo de sensoriamento.

Ang isang muling neural na utilizada ay gawin ang tipo ng MLP (Multilayer Perceptron), ito ay isang modelo ng treinado com na naging previamente identificados at aposs na ito ng treinamento o modelo ng implantado para sa sistema ng realizar a identificação automática do sinal recebido, informando for naquele ponto existe um vazamento ou.

Magagawa natin ang realizar uma filtragem dos dados de entrada, na mayroong mga características estavam diminuindo a taxa de acerto da rede ao invés de melhora-la. Nao foi realizado nenhuma abordagem estatística muito aprofundada, mas mesmo com um trabalho mais superficial pode-se chegar a algumas variáveis com bons desempenhos.

Para sa mga pagsubok na realizado o modelo na nai-imbento para sa iyo ng bom, alcançando na maioria dos testes uma taxa de acerto de 100%, como pode ser obserbado na imagem anexa.

Este algoritmo é utilizado para sa treinar o modelo ng rede at retornar a taxa de acerto do mesmo. Walang sistema ng detalyadong algorithm ng pouco diferente seria usado, para sa realizaria o treino ou receberia um modelo ng treinado da nuvem ou de alguma outra fonte e com esse modelo realizaria as predições para cada leitura realizada.

# coding: utf-8

import pandas bilang pd

i-import ang numpy bilang np mula sa sklearn.model_selection import train_test_split bilang tts mula sklearn.neural_network import MLPClassifier bilang MLP mula sa sklearn.metrics import classification_report bilang cr mula sklearn.metrics import pagkalito_matrix bilang cm

# Leitura dos dados do CSV

df = pd.read_csv ('Features.csv') # Separação das entradas df_X = df [df.columns [: len (df.columns) -1] # Filtrando as entradas df_X = df_X

# Separando maging para treino e teste

X_train, X_test, Y_train, Y_test = tts (df_X, df_Y, test_size = 0.1)

# Criando modelo de rede neural

modelo = MLP (alpha = 0.0001, learning_rate_init = 0.0001, hidden_layer_sizes = (50, 50, 50, 50), max_iter = 10000, activation = 'tanh', solver = 'lbfgs')

# Treinando modelo

modelo.fit (X_train, Y_train) resulta = modelo.predict (X_test)

# Imprimindo resultados

ulat = cr (Y_test, resulta) mat = cm (y_pred = resulta, y_true = Y_test) print ("Matriz de confusão") print (mat, end = "\ n / n") print ("Relatório de Classificação") print (ulat)

Inirerekumendang: