Talaan ng mga Nilalaman:
- Hakbang 1: Lista De Materiais
- Hakbang 2: Adaptação Mecânica
- Hakbang 3: Acionamento Dos Motores
- Hakbang 4: Obtenção Do Áudio
- Hakbang 5: Configuração Do Arduino DUE (linguagem C)
- Hakbang 6: Interfaceamento Das Tecnologias
- Hakbang 7: Configuração Da DRAGONBOARD 410c (Python)
- Hakbang 8: INTERPRETAÇÃO DOS ARQUIVOS DE AUDIO
- Hakbang 9: Análise Visual Do Sinal
- Hakbang 10: Ang Algoritmo Em R Para Extração Das Mga Tampok Mga Dos Dados
- Hakbang 11: Rede Neural
Video: Sistema Autônomo Localizador De Vazamentos: 11 Mga Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:12
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
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
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
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)
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
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)
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
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
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
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
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:
Mga Soldering Surface Mount Component - Mga Pangunahing Kaalaman sa Paghinang: 9 Mga Hakbang (na may Mga Larawan)
Mga Soldering Surface Mount Component | Mga Pangunahing Kaalaman sa Paghinang: Sa ngayon sa aking Serye ng Mga Pangunahing Kaalaman sa Soldering, tinalakay ko ang sapat na mga pangunahing kaalaman tungkol sa paghihinang para masimulan mong magsanay. Sa Ituturo na ito kung ano ang tatalakayin ko ay medyo mas advanced, ngunit ito ay ilan sa mga pangunahing kaalaman para sa paghihinang sa Surface Mount Compo
Mga Laruang Switch-Adapt: Mga Paglalakad sa Tubig na Lumalakad sa Tubig na Naa-access !: 7 Mga Hakbang (na may Mga Larawan)
Mga Laruang Switch-Adapt: Mga Paglalakad sa Tubig na Lumalakad sa Dragon na Naa-access !: Ang pagbagay ng laruan ay nagbubukas ng mga bagong paraan at na-customize na solusyon upang payagan ang mga bata na may limitadong mga kakayahan sa motor o mga kapansanan sa pag-unlad na makipag-ugnay sa mga laruan nang nakapag-iisa. Sa maraming mga kaso, ang mga bata na nangangailangan ng inangkop na mga laruan ay hindi maaring
Sistema ng Pag-uuri ng Kulay: Arduino Batay sa Sistema Na May Dalawang sinturon: 8 Mga Hakbang
Sistema ng Pag-uuri ng Kulay: Arduino Batay sa Sistema Na May Dalawang sinturon: Ang transportasyon at / o pag-iimpake ng mga produkto at item sa larangan ng industriya ay ginagawa gamit ang mga linya na ginawa gamit ang mga conveyor belt. Ang mga sinturon ay tumutulong upang ilipat ang item mula sa isang punto patungo sa isa pa na may tiyak na bilis. Ang ilang mga gawain sa pagpoproseso o pagkakakilanlan ay maaaring
10 Mga kahalili sa DIY sa Mga Off-The-Shelf na Elektroniko na Mga Bahagi: 11 Mga Hakbang (na may Mga Larawan)
10 Mga Kahalili sa DIY sa Mga Off-The-Shelf na Mga Elektroniko na Bahagi: Maligayang pagdating sa aking kauna-unahang itinuro! Sa palagay mo ba ang ilang mga bahagi mula sa mga tagatingi sa online ay masyadong mahal o may mababang kalidad? Kailangan bang makakuha ng isang prototype nang mabilis at tumatakbo nang mabilis at hindi makapaghintay linggo para sa pagpapadala? Walang mga lokal na electronics distributor? Ang fol
Attachment ng Sistema ng Sistema ng Kapaligiran para sa mga UAV: 18 Hakbang
Attachment ng Sistema ng Sistema ng Kapaligiran para sa mga UAV: Ang layunin ng Instructable na ito ay upang ilarawan kung paano bumuo, maglakip, at mapatakbo ang sistema ng sensor ng kapaligiran ng Integrated Solutions Technology kasabay ng isang drone ng DJI Phantom 4. Ang mga pakete ng sensor na ito ay gumagamit ng drone upang ma