Sadržaj:

Sistema Autônomo Localizador De Vazamentos: 11 koraka
Sistema Autônomo Localizador De Vazamentos: 11 koraka

Video: Sistema Autônomo Localizador De Vazamentos: 11 koraka

Video: Sistema Autônomo Localizador De Vazamentos: 11 koraka
Video: galinh4 2024, Novembar
Anonim
Sistema Autônomo Localizador De Vazamentos
Sistema Autônomo Localizador De Vazamentos

Este projeto consiste em um robô, que através da leitura realizada um um dispositivo, equipado com um sensor piezoelétrico, captura os espectros das vibrações no solo, podeti identifikator e lokalizar, com o processamento dos dados por uma rede neural, possíveis vazamentos de á uma tubulação.

O procesuiranja i realizacije algoritama instaliranih na DRAGONBOARD 410c. Osim toga, tambem je prilagođen za pružanje usluga na nuvemu, odgovarajući na pomoćni proces bez integriranog umjetnog projektiranja.

Este projeto foi desenvolvido no Hackaton Qualcomm, durante and TecnoFACENS to Faculdade de Engenharia de Sorocaba (FACENS), učestvuju u projektovanju osmandencije engleske mecatrônice Eneo Juliano Bovino, Felipe Xavier, Lucas de Sousa Rodes. Gomes Polo i Ronaldo P. Gomes Polo. Também učestvuje u projektu o alunu Daniela de Castra Pacheca koji je diplomirao englesku mehaniku na Universidade Newton Paiva de Belo Horizonte. O projektu contou com o apoio dos graduandos de engenharia mecatrônica da FACENS, Lucas Nunes Monteiro i Felipe Crispim da Silva Salvagnini.

Korak 1: Lista materijala

Lista De Materiais
Lista De Materiais

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

1 Arduino Due

1 Dragonboard 410c

2 upravljačka programa za motor de corrente continua contendo cada um:

4 tranzistora BC548

4 dioda 1n4007

4 Otpori 4k7Ω ¼ W

1 Upravljački program za servo motor:

1 Transistores BC548

1 Diodos 1N4007

1 Otpori 4k7Ω ¼ W

1 USB miš

1 Teclado USB

1 Monitor

1 Cabo HDMI

1 Robô De Esteiras - Plataforma Zumo

1 Mini dispozitivo de cremalheira e engrenagem

1 Servo motor 9g

Korak 2: Adaptação Mecânica

Image
Image

Para a aquisição dos dados pelo senzor piezoelétrico, FAZ se necessário, o Desenvolvimento de um dispositivo com Pinhão e cremalheira, conforme Desenhos anexados, neste caso kao peças Foram fabricadas od uma impressora 3D, Devido ao Fato de se tratar de um Prototipo e ao naziv tempo de execução, fixou-se o dispozitivu na plataforma zumo, upotreba fita dupla face, conforme video.

Korak 3: Acionamento Dos Motores

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

Para execer a movimentação dos motores do robô ZUMO e do dispositivo de captura, fez-se neophodária a montaža de dois drivers for os motores de corrente continua e um driver to servo motor, conforme as figuras acima, sendo a primeira figura o driver para um motor de corrente continua ea segunda ili driver za um servo motor.

Korak 4: Obtenção Do Áudio

Para obtenção do espectro de áudio das vibrações do solo, da biste iskoristili um dispozitivo desenvolvido como parte do TCC de Engenharia Mecatrônica dos graduandos Lucas Nunes Monteiro e Felipe C. da Silva Salvagnini, maiores detalhes sobre o TCC do vas je podnio o TCC -u e -mail [email protected].

Este dispozitivo use-de de um senzor piezoelétrico e uma placa de circuito que realize a filtragem e amplificação do sinal.

Kao frekvencije interesa za projektore potrebno je unijeti 100Hz i 800Hz. Para isso o dispositivo de sensoriamento fori configurado com uma freência de amostragem de 3 kHz para que sejam respeitada as condições do teorema de amostragem de Nyquist, onde a Freência de aquisição deve estar pelo menos duas vezes acima das frekvencias

Aquisição i habilitada i desabilitada através za prekid do Arduino DUE.

Korak 5: Konfigurirajte Do Arduino DUE (jezik C)

Konfiguracija Do Arduino DUE (jezik C)
Konfiguracija Do Arduino DUE (jezik C)

Devido a grande quantidade de dados, cca 3000 pontos po segundo, do tipo inteiro de 32 bita, gerados pelo dispozitivo de senzormento e estários para processamento dos algoritmos na DRAGONBOARD 410c, za korištenje alata Arduino DUE za fazu korištenja pametne kontrole uma entrada Podatkovni procesor je neophodan ako je potrebno štitnik za interfejs Grove Seeed Sensor Mezanin je instaliran na DRAGONBOARD 410c, koji ima mikrokontroler ATmega 328, ali nije potreban podprocesor za rad sa operativnim sistemom.

O Arduino DUE za konfiguriranje parametara primatelja i kontrole na platformama QUALCOMM DRAGONBOARD 410c putem serijske komunikacije.

Kao konfiguracija bez Arduino forama:

Realizar a aquisição dos dados;

Transmiter os dados obtidos para DRAGONBOARD 410c;

Pregledajte program:

#include #define Numb_Sample 3000 #define DAC_Input A0

#define SERVO 7

#define PosServoMin 4 #define PosServoMax 6 #define Period 60 unsigned int Scont = 0, SNow = PosServoMin; nepotpisani dugi int DAC [Numb_Sample], ind = Numb_Sample; void TC3_Handler () {TC_GetStatus (TC1, 0); if (ind <Numb_Sample) DAC [ind ++] = analogRead (DAC_Input); ako (Scont

1); // 50% radni ciklus

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

void setup ()

{Serial.begin (115200); pinMode (DAC_Input, INPUT); TimerStart (TC1, 0, TC3_IRQn, 1500); // Pokretanje mjerača vremena // TC_Stop (TC1, 0); pinMode (SERVO, OUTPUT); }

void loop ()

{/*// while (! Serial.available ()); char rc; // = Serial.read (); int indeks = 0; if (rc == 0) {while (! Serial.available ()); rc = Serial.read (); switch (rc) {slučaj 1: indeks = 0; while (! Serial.available ()); while ((rc = Serial.read ())! = 0xFF) {indice << = 8; indeks += rc; while (! Serial.available ()); } Serial.print (0); Serial.print (2); SendNumber (DAC [indeks]); Serial.print (0xFF); break; slučaj 3: while (! Serial.available ()); if ((Serial.read ()) == 0xFF) {SNow = PosServoMax; kašnjenje (500); ind = 0; // TC_Start (TC1, 0); while (ind <Numb_Sample); // TC_Stop (TC1, 0); SNow = PosServoMin; kašnjenje (500); Serial.print (0); Serial.print (4); Serial.print (0xFF); } break; }} else if (rc == '2') {Serial.print ("Testiraj servo motor / n"); while (! Serial.available ()); rc = Serial.read (); if (rc == '1') {Serial.print ("Način 1 / n"); SNow = PosServoMax; } if (rc == '2') {Serial.print ("Način 2 / n"); SNow = PosServoMin; }} */ SNow = PosServoMax; kašnjenje (100); SNow = PosServoMin; kašnjenje (100); }

Korak 6: Interfaceamento Das Tecnologias

Interfaceamento Das Tecnologias
Interfaceamento Das Tecnologias

Za komunikaciju s dodacima koji ulaze u Arduíno DUE ea DRAGONBOARD 410c, zvanično koristite sučelje za figura acima, ili ga ne možete koristiti za izvršni izvršilac, osim što ste odlučili koristiti sučelje za um USB CDC ulaz u Arduino DUE ili DRAGONBOE10, potrebno je rekompilaciju do KERNEL -a za DRAGONBOARD 410c, jer se to ne može dogoditi zbog trenutnog disponiranja tempa.

Korak 7: Konfigurirajte Da DRAGONBOARD 410c (Python)

Konfiguracija Da DRAGONBOARD 410c (Python)
Konfiguracija Da DRAGONBOARD 410c (Python)

Foi konfiguracija za Enviar ao Arduino DUE os komande za realizaciju akvizicije de dados i prenos za dados obtidos. Segue código abaixo.

Zapažanje: Abordagem ne koristi codigo, ne funkcionira kao dio aos níveis de tensão iskorištava pelo Arduíno DUE ili mezanin serem incompatíveis. Ako je optički prilagođen USB interfejs, neophodna je ponovna kompajliranje KERNEL-a na DRAGONBOARD 410c, kao i porta za usklađivanje krijade za komunikaciju.

import timeimport serijski import pandas kao pd import numpy kao np

# Konfiguracija serijske serije

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

ser.isOpen ()

print ('Unesite svoje komande ispod. / r / nUmetnite "exit" da napustite aplikaciju.')

ulaz = 1

while 1: input = input (">>") if 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 transmiter os dados coletados

lista =

za i u dometu (3000):

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

Korak 8: INTERPRETAÇÃO DOS ARQUIVOS DE AUDIO

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

Para poder realizar uma primeira análise dos dados obtidos através do senzor, ako je potrebno razgovarati dos arquivos bez formatiranja WAV -a, fornecidos pelos alunos autores do TCC i kolaboradores do projeto, para valores numéricos, que são utilizadosOd 4 algoritam DROGON DROG. Da biste realizirali ovaj razgovor za escrito um algoritam u PYTHON 3 que lê o arquivo WAV -u, spasili ste espectro em arquivo CSV. O algoritmu koristite segue abaixo i em anexo za preuzimanje.

Ovaj algoritam nije neophodan za funkcionisanje sistema, već za Arduino DUE, a za njega je potreban niz numeričkih polja.

# kodiranje: utf-8

# Učitajte audio zapise za csv

# MÓDULOS UTILIZADOS

uvoz val uvoz numpy kao np uvoz pande kao pd uvoz matplotlib.pyplot kao plt

# FUNÇÃO PARA KONVERTOR WAV EM DADOS DO ESPECTRO E SALVAR CSV

def audio_to_csv (naziv_datoteke): 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.readframe-size-dataframe) signal = np.fromstring (waveData, dtype = 'int32') Time = np.linspace (start = 0, stop = data_size/sample_rate, num = data_size, endpoint = True) df = pd.concat ([pd. DataFrame (signal), pd. DataFrame (vrijeme)], os = 1) df.to_csv (ime_datoteke + '.csv', indeks = lažno) return df

# CARREGANDO OKVIR PODATAKA COM OS DADOS DO AUDIO

file_name = 'Solo_com_Vazamento' df_vazamento = audio_to_csv (naziv_datoteke) df_vazamento.columns = ['amp', 'vrijeme'] ime_datoteke = 'Solo_sem_Vazamento' df_sem_vazamento = audio_to_csv (naziv_datoteke) [amp_sem_vans]

# GRÁFICO DO 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 ()

Korak 9: Analiziraj vizuelni rad na Sinalu

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 o PYTHON 3 je realizirao transformaciju Fouriera, estetski je potrebno izvršiti matematičku realizaciju transformacije do sinalnog do dominijskog tempa para za dominiju na frekvenciji, ili se torna može analizirati kao varijacije frekvencija, sua amplitude, que compõem aquele sinal. Pela análise visual do gráfico da transformiše Fouriera u profesionalan com conhecimentos específicos poderá identificira a postojeê de algum vazamento na tubulação. Estes gráficos servirão para validação das análises realizadas pelo algoritmo detecção automática.

Ograničeno na eixo das frekvencije na 100Hz i 800Hz, tako da postoje postojeći vazamenti u kojima možete promatrati nesnosni raspon frekvencija.

# coding: utf-8# Moodlos uselizados for processamento to transformacija de Fourier

import pandas as pd import numpy as np import wave from matplotlib import pyplot as plt# Função que realizuje Fourierovu transformaciju i prikazuje parametre za Fourier -ovo (df_list): Fs = 44100; # Tamo de amostragem em Hz Ts = 1.0/Fs; # Interval 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 [raspon (n // 2)] Y = np.fft.fft (y)/n Y = Y [raspon (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 ('Vrijeme') ax [0].set_ylabel ('Amplitude') ax [1].plot (frq, abs (Y), 'r') ax [1].set_xlim ([100, 800]) ax [1].set_ylim ([0, max_lim]) ax [1].set_xlabel ('Freq (Hz)') ax [1].set_ylabel ('| Y (freq) |') plt.show () return frq, abs (Y)# Funkcija realizacije carga dosada do CSV -a i funkcije Fourier -ove def read_csv (ime_datoteke, init, završna): df = pd.read_csv (ime_datoteke + '.csv') df.columns = ['amp', ' vrijeme '] delta = final-init ako je init*44100> len (df) ili final*44100> len (df): init = (len (df)/44100) -delta ako je init = 100) & (df [' freq '] <= 800)] mx = sortirano (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']. mean ()*100, "%", sep = "") print ("50 maiores amplitude:", np.mean (mx [-50:]) // df ['amp']. mean ()*100, "%", sep = "") print ("10 maiores amplituda:", np.mean (mx [-10:]) // df ['amp']. mean ()*100, "%", sep = "") print ("Maior amplitude:", np.mean (mx [-1:]) // df ['amp']. mean ()*100, " %", sep =" ") read_csv ('Solo_com_Vazamento', 2, 10) # Primjer gráficos para vazamentoread_csv ('Solo_sem_Vazamento', 2, 10) # Primjer gráficos para sem vazamento

Korak 10: Algoritmo Em R Para Extração Das Features Dos Dados

Algoritmo Em R Para Extração Das Features Dos Dados
Algoritmo Em R Para Extração Das Features Dos Dados
Algoritmo Em R Para Extração Das Features Dos Dados
Algoritmo Em R Para Extração Das Features Dos Dados

Koristite algoritam u R-u za realizaciju procesa i ekstra ekstra das svojstava (karakteristika) sa dodatnim obrtima.

Este primeiro algoritmo realizacija uma extração identificada, onde é needário sabre se o arquivo de áudio trata-se de uma amostra vazamento detectado ou não, iso por que os dados rezultira desse procesom servirão para ili treinamento da se redefinira neuralna upotreba.

Za svaki sustav ili sustav koji je operativan u skladu s algoritmom, potrebno je izvršiti različite izvršne radnje, ali to nije daleko kao dodatna identifikacijska oznaka, a neke su značajke kao identifikacijske.

Estas ima značajke o caraterísticas são propriedades acústicas compostas po različitim informacijama koje se odnose na eospectro de áudio capturado, abaixo seguirá uma descriptionção (em inglês) destas características.

Este algoritmi faz parte de um projeto disponível no GitHub e podešeni su za pristup através deste link, ili mesmo fori modifyado para atender as specificações do projeto.

O softveru koji koristite za rad ili o algoritmu i besplatnom preuzimanju za tumačenje R e do R Studio.

Dodatne karakteristike:

  • meanfreq: srednja frekvencija (u kHz)
  • sd: standardna devijacija frekvencije
  • medijana: srednja frekvencija (u kHz)
  • P25: prvi kvantil (u kHz)
  • Q75: treći kvantil (u kHz)
  • IQR: interkvantilni raspon (u kHz)
  • iskrivljenost: iskrivljenost (vidi napomenu u opisu specifikacije)
  • kurt: kurtosis (vidi napomenu u opisu specifikacije)
  • sp.ent: spektralna entropija
  • sfm: spektralna ravnost
  • mode: frekvencija moda
  • centroid: centroid frekvencije (vidi specifikaciju)
  • peakf: vršna frekvencija (frekvencija s najvećom energijom)
  • meanfun: prosjek osnovne frekvencije izmjeren preko zvučnog signala
  • minfun: minimalna osnovna frekvencija izmjerena preko zvučnog signala
  • maxfun: maksimalna osnovna frekvencija izmjerena preko zvučnog signala
  • slučajni: prosjek dominantne frekvencije izmjeren preko zvučnog signala
  • mindom: minimum dominantne frekvencije izmjeren preko zvučnog signala
  • maxdom: maksimum dominantne frekvencije izmjeren preko zvučnog signala
  • dfrange: raspon dominantne frekvencije izmjeren preko zvučnog signala
  • modindx: indeks modulacije. Izračunato kao akumulirana apsolutna razlika između susjednih mjerenja osnovnih frekvencija podijeljena sa frekvencijskim rasponom
  • oznaka: curenje ili bez_puštanja

Algoritmo usado:

paketi <- c ('tuneR', 'seewave', 'fftw', 'caTools', 'randomForest', 'warbleR', 'miševi', 'e1071', 'rpart', 'xgboost', 'e1071') ako (dužina (setdiff (paketi, nazivi redova (instalirani.paketi ())))> 0) {install.packages (setdiff (paketi, imena redova (instalirani.paketi ())))}}

biblioteka (tuneR)

biblioteka (seewave) biblioteka (caTools) biblioteka (rpart) biblioteka (rpart.plot) biblioteka (randomForest) biblioteka (warbleR) biblioteka (miševi) biblioteka (xgboost) biblioteka (e1071)

specan3 <- funkcija (X, bp = c (0, 22), wl = 2048, prag = 5, paralelno = 1) { # Za korištenje paralelne obrade: biblioteka (devtools), install_github ('nathanvan/parallelsugar') if (class (X) == "data.frame") {if (all (c ("sound.files", "selec", "start", "end") % u % colnames (X))) {start <- as.numeric (unlist (X $ start)) end <- as.numeric (unlist (X $ end)) sound.files <- as.character (unlist (X $ sound.files)) selec <- as.character (unlist (X $ selec))} else stop (paste (paste (c ("sound.files", "selec", "start", "end") [! (c ("sound.files", "selec", "start", "end") % u % colnames (X))], kolaps = ","), "stupac (i) nije pronađen u okviru podataka"))} else stop ("X nije okvir podataka") #ako postoje NA u početnom ili krajnjem zaustavljanju ako (bilo koja (is.na (c (kraj, početak))))) zaustavi ("NA se nalaze u početku i/ili kraju") #ako kraj ili početak nisu numeričko zaustavljanje if (all (class (end)! = "numeric" & class (start)! = "numeric")) stop ("'end' i 'selec' moraju biti numerički") #i ako je bilo koji početak veći od end stop ako (any (end - start <0)) stop (paste ("Početak je veći od en d in ", length (which (end - start20)) stop (paste (length (which (end - start> 20))," selection (s) duže od 20 sec ") opcije (show.error.messages = TRUE) #iko bp nije vektor ili dužina! = 2 stop if (! is.vector (bp)) stop ("'bp' mora biti numerički vektor dužine 2") else {if (! length (bp) == 2) stop ("'bp' mora biti numerički vektor dužine 2")} #return warning ako nisu pronađene sve zvučne datoteke fs <- list.files (path = getwd (), pattern = ".wav $", ignore.case = TRUE) if (length (jedinstven (zvučni.fajlovi [(zvučni.fajlovi % u % fs)]))! = dužina (jedinstveni (zvučni.fajlovi))) cat (paste (dužina (jedinstveni (zvuk). fajlovi))-dužina (jedinstvena (sound.files [(sound.files % u % fs)]))), ".wav fajlovi (i) nisu pronađeni")) #broj zvučnih datoteka u radnom direktoriju i ako se 0 zaustavi d <- which (sound.files % in % fs) if (length (d) == 0) {stop (".wav datoteke nisu u radnom direktoriju")} else {start <- start [d] end <- kraj [d] odabir <- odabir [d] zvučni.datoteke <- zvučni.datoteke [d]} # Ako paralela nije numerička ako se (! is.numeric (paralelna)) zaustavi ("" paralelna "mora biti numerički vektor dužine 1 ") if (bilo koji (! (paralelni %% 1 == 0), paralelni 1) {opcije (upozori = -1) if (sve (Sys.info () [1] ==" Windows ", requireNamespace (" parallelsugar ", tiho = TRUE) == TRUE)) lapp <- funkcija (X, FUN) parallelsugar:: mclapply (X, FUN, mc.cores = paralelno) else if (Sys.info () [1] == "Windows") {cat ("Korisnici operativnog sistema Windows moraju instalirati paket 'parallelsugar' za paralelno računanje (sada to ne radite!)") Lapp <- pbapply:: pblapply} else lapp <- funkcija (X, FUN) paralelno:: mclapply (X, FUN, mc.cores = paralelno)} else lapp <- pbapply:: pblapply opcije (upozorenje = 0) if (paralelno == 1) cat ("Mjerenje akustičkih parametara:") x <- as.data.frame (lapp (1: length (start), function (i)) {r <- tuneR:: readWave (file.path (getwd (), sound.files ), from = početak , do = kraj , jedinice = "sekunde") b plafon ([email protected]/2000) - 1) b [2] < - plafon ([email protected]/2000) - 1 #analiza frekvencijskog spektra songspec <- seewave:: spec (r, f = [email protected], plot = FALSE) analiza <- seewave:: specprop (songspec, f = [email protected], flim = c (0, 280/1000), plot = FALSE) #spremi parametre meanfreq <- analiza $ srednja/1000 sd <- analiza $ sd/1000 medijana <- analiza $ medijana/1000 Q25 < - analiza $ QQ75 <- analiza $ QIQR <- analiza $ IQR/1000 skew <- analiza $ skewness kurt <- analiza $ kurtosis sp.ent <- analiza $ sh sfm <- analiza $ sfm način <- analiza $ način/1000 centroid <- analiza $ cent/1000 #Frekvencija sa vrhovima amplitude peakf <- 0 #seewave:: fpeaks (songspec, f = [email protected], wl = wl, nmax = 3, plot = FALSE) [1, 1] #Osnovni frekvencijski parametri ff <- seewave:: fund (r, f = [email protected], ovlp = 50, prag = prag, fmax = 280, ylim = c (0, 280/1000), plot = FALSE, wl = wl) [, 2] meanfun <-sredstvo (ff, na.rm = T) minfun <-min (ff, na.rm = T) maxfun <-max (ff, na.rm = T) #Dominantni parametri frekvencije y <- seewave:: dfreq (r, f = [email protected], wl = wl, ylim = c (0, 280/1000), ovlp = 0, plot = F, prag = prag, propusni opseg = b * 1000, fftw = TRUE) [, 2] meandom <- prosjek (y, na.rm = TRUE) mindom <- min (y, na.rm = TRUE) maxdom <- max (y, na.rm = TRUE) dfrange <- (maxdom- mindom) trajanje <- (kraj - početak ) #Izračun indeksa modulacije se mijenja <- vektor () za (j u kojem (! je. na (y))) {promjena <- abs (y [j]- y [j + 1]) promjene <- dodaj (promijeni, promijeni)} if (mindom == maxdom) modindx <-0 else modindx <- znači (promjene, na.rm = T)/dfrange #save rezultati se vraćaju (c (trajanje, srednja frekvencija, sd, medijana, Q25, Q75, IQR, iskrivljenost, kurt, sp.ent, sfm, način rada, centroid, peakf, Meanfun, minfun, maxfun, meandom, mindom, maxdom, dfrange, modindx))}))) #promijeni nazive rezultata imena redova (x) <- c ("trajanje", "meanfreq", "sd", "medijana", "Q25", "Q75", "IQR", "kos", "kurt", "sp.ent", "sfm", "način rada", "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") imena redova (x) <- c (1: nrow (x)) return (x)}

processFolder <- function (folderName) { # Počnite s praznim data.frame. data <- data.frame () # Preuzmite listu datoteka u fascikli. list <- list.files (ime foldera, '\. wav') # Dodaj listu datoteka u data.frame za obradu. za (naziv datoteke na listi) {red <- data.frame (ime datoteke, 0, 0, 20) podatak <- rbind (podaci, red)} # Podesite imena kolona. imena (podaci) <- c ('sound.files', 'selec', 'start', 'end') # Premjesti u folder radi obrade. setwd (folderName) # Obradi datoteke. akustika <- specan3 (podaci, paralelno = 1) # Vrati se natrag u nadređenu fasciklu. setwd ('..') akustika}

gender <- function (filePath) {if (! currentPath <- getwd () fileName <- basename (filePath) path <- dirname (filePath) # Podesite direktorij za čitanje datoteke. setwd (path) # Počnite sa praznim data.frame -om. data <- data.frame (fileName, 0, 0, 20) # Podesite imena stupaca. names (data) <- c ('sound.files', 'selec', 'start', 'end') # Obradi datoteke. akustika <- specan3 (podaci, paralelno = 1) # Vrati putanju. setwd (currentPath) predviđanje (genderCombo, newdata = akustika)}

# Učitajte podatke

curenje <- processFolder ('caminho para o tjestenini com uzorci de áudio com vazamento') without_leakage <- processFolder ('caminho para o pasta com uzorci de áudio sem vazamento')

# Postavite oznake.

curenje $ label <- 1 without_leakage $ label <- 2 data <- rbind (curenje, bez_leakage) podaci $ label <- faktor (podaci $ label, labels = c ('curenje', 'bez_leakage'))

# Uklonite neiskorištene stupce.

podaci $ trajanje <- NULL podaci $ sound.files <- NULL podaci $ selec <- NULL podaci $ peakf <- NULL

# Uklonite redove koji sadrže NA.

podaci <- podaci [potpuni slučajevi (podaci),]

# Ispišite csv skup podataka.

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

Korak 11: Iskoristite neuronsko

Rede Neural
Rede Neural

Ideja o tome da se neuralno neuralno realizuje, a da se realizuje rekonstrukcija automatizovano je spremna za rad sa kolegama i dispozitivom senzora.

Ponovno neuralna upotreba do tipo MLP -a (višeslojni percepcija), koja je modelovana i treinado komposoba, unaprijed identificira identifikatore ili apsolvira modele implantata, a sistem ne potvrđuje identifikaciju automatske automatske sinhronizirane recepcije, koju je potrebno naknadno iscrpiti

Morate realizirati uma filtragem dos dados de entrada, pois algumas características estavam diminuindo a taxa de acerto da rede ao invés de melhora-la. Não foi realizado nenhuma abordagem estatística muito aprofundada, mas mesmo com um trabalho mais površne pode-se chegar a algumas variáveis com bons desempenhos.

Para os testes realizados o modelo obteve um desempenho muito bom, alcançando na maioria dos testes uma taxa de acerto de 100%, como pode ser posmatrati na imagem anexa.

Este algoritam je iskorišten za treinar o modelu da se retorira retornar i takso de acerto do mesmo. No system de detecção um algoritm pouco diferente seria usado, pois ele realizaria o treino ili receberia um modelo já treinado da nuvem ou de alguma outra fonte e com esse modelo realizaria as predições para cada leitura realizada.

# kodiranje: utf-8

uvoz pandi kao pd

uvoz numpy kao np iz sklearn.model_selection uvoz train_test_split kao tts iz sklearn.neural_network uvoz MLPClassifier kao MLP iz sklearn.metrics uvoz classic_report kao cr iz sklearn.metrics uvoz confusion_matrix kao cm

# Dopunske informacije o CSV -u

df = pd.read_csv ('features.csv') # Odvojite das entradas df_X = df [df.columns [: len (df.columns) -1] # Filtrando kao entradas df_X = df_X

# Separando dados 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) rezultat = modelo.predict (X_test)

# Imprimindo resultados

izvještaj = cr (Y_test, rezultat) mat = cm (y_pred = rezultat, y_true = Y_test) ispis ("Matriz de confusão") ispis (mat, kraj = "\ n / n") ispis ("Relatório de Classificação") ispis (izvještaj)

Preporučuje se: