Daftar Isi:

Sistema Autonomo Localizador De Vazamentos: 11 Langkah
Sistema Autonomo Localizador De Vazamentos: 11 Langkah

Video: Sistema Autonomo Localizador De Vazamentos: 11 Langkah

Video: Sistema Autonomo Localizador De Vazamentos: 11 Langkah
Video: galinh4 2024, November
Anonim
Sistema Autônomo Localizador De Vazamentos
Sistema Autônomo Localizador De Vazamentos

Proyek harus terdiri dari apa yang harus dilakukan, tidak ada tindakan nyata yang dapat dilakukan, melengkapinya dengan sensor yang tepat, captura os espectros das vibrações no solo, pode identificar e localizar, com o processamento dos red dados, pos uma tubulao.

O processamento destes dados é realizado por algoritmos instalados dan DRAGONBOARD 410c. Semua sudah selesai, respons untuk bantuan tanpa proses Integência Buatan lakukan 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. Gomes Polo dan Ronaldo P. Gomes Polo. Também participou do projeto o aluno Daniel de Castro Pacheco graduando de engenharia mecânica na Universidade Newton Paiva de Belo Horizonte. O projeto contou com o apoio dos graduandos de engenharia mecatrônica da FACENS, Lucas Nunes Monteiro dan Felipe Crispim da Silva Salvagnini.

Langkah 1: Lista De Materiais

Lista De Materiais
Lista De Materiais

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

1 Arduino Due

1 papan naga 410c

2 Driver para motor de corrente continua challengeo cada um:

4 Transistor BC548

4 Diodo 1n4007

4 Resistor 4k7Ω W

1 Driver para motor servo bersaing:

1 Transistor BC548

1 Diodos 1N4007

1 Resistor 4k7Ω W

1 Mouse USB

1 Teclado USB

1 Pemantau

1 Cabo HDMI

1 Robô De Esteiras - Plataforma Zumo

1 Mini dispositivo de cremalheira e engrenagem

1 motor servo 9g

Langkah 2: Adaptação Mecânica

Image
Image

Para aquisição dos dados pelo sensor piezoelétrico, faz se necessário, o desenvolvimento de um dispositivo com pinhão dan cremalheira, sesuai desenhos anexados, neste caso as peças foram fabricadas por uma a impressionora 3D, devido a trao fato tempo de execução, fixou-se o dispositivo na plataforma zumo, utilizando fita dupla face, conforme vídeo.

Langkah 3: Acionamento Dos Motores

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

Para pelaksana a movimentação dos motors melakukan robô ZUMO dan melakukan dispositivo de captura, fez-se perlu driver montagem de dois untuk motores de corrente continua e um driver untuk motor servo, sesuai dengan figuras acima, kirim figur primeira o driver para um motor de corrente ea segunda o driver untuk um motor servo.

Langkah 4: Lakukan udio

Anda dapat melakukan espectro de áudio das vibrações do solo, foi utilizado um dispositivo desenvolvido como parte do TCC de Engenharia Mecatrônica dos graduandos Lucas Nunes Monteiro dan Felipe C. da Silva Salvagnini, maiores detalhes sobre o TCC email [email protected].

Este dispositivo utiliza-se de um sensor piezoelétrico dan uma placa de circuitoque realiza a filtragem dan amplificação melakukan sinal.

Sebagai frequências de interesse para o projeto estão entre 100Hz e 800Hz. Untuk pengaturan sensoriamento foi konfigurasikan frekuensi de amostragem de 3 kHz para que sejam respeitada sebagai kondisi melakukan teorema de amostragem de Nyquist, onde a frequência de aquisição deve estar pelo menos duas vezes a frequência de aquisição deve estar pelo menos duas vezes a

Aquisição é habilitada dan desabilitada através da interrupção do Arduino DUE.

Langkah 5: Konfigurasikan Arduino DUE (bahasa C)

Konfigurasikan Arduino DUE (bahasa C)
Konfigurasikan Arduino DUE (bahasa C)

Menyelesaikan jumlah yang besar dari dados, cerca de 3000 pontos untuk segundo, melakukan tipo inteiro de 32 bit, gerados pelo dispositivo de sensoriamento dan kebutuhan untuk proses yang dilakukan untuk algoritma dan DRAGONBOARD 410c, untuk digunakan dan digunakan oleh Arduino UANG untuk digunakan proses yang diperlukan, sesuai dengan kebutuhan untuk melindungi antarmuka Sensor Benih Grove Mezzanine pemasangan di DRAGONBOARD 410c, berisi mikrokontroler ATmega 328, tidak ada pos untuk proses operasi.

O Arduino DUE foi configurado untuk receber os perintah enviados da plataforma QUALCOMM DRAGONBOARD 410c melalui serial komunikasi.

Sebagai konfigurasi tidak ada forum Arduino:

Realizar a aquisição dos dados;

Transmitir os dados obtidos untuk DRAGONBOARD 410c;

Pisahkan sebuah program:

#include#define Numb_Sample 3000 #define DAC_Input A0

#menentukan SERVO 7

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

1); // siklus tugas 50%

TC_SetRC(tc, saluran, rc); TC_Mulai(tc, saluran); tc->TC_CHANNEL[saluran]. TC_IER = TC_IER_CPCS | TC_IER_CPAS; // habilita os registadores tc->TC_CHANNEL[saluran]. TC_IDR = ~(TC_IER_CPCS | TC_IER_CPAS); // desabilita dan pendaftar NVIC_EnableIRQ(irq); // habilita interupo }

batalkan pengaturan ()

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

lingkaran kosong()

{ /*//sementara(!Serial.available()); char rc;//=Serial.read(); int indeks = 0; if(rc==0) { while(!Serial.available()); rc=Serial.baca(); switch(rc) { kasus 1: indeks=0; while(!Serial.available()); while((rc=Serial.read())!=0xFF) { indeks <<= 8; indeks += rc; while(!Serial.available()); } Serial.print(0); Serial.print(2); SendNumber(DAC[indeks]); Serial.print(0xFF); merusak; kasus 3: while(!Serial.available()); if((Serial.read())==0xFF) { SNow=PosServoMax; penundaan (500); ind=0; //TC_Mulai(TC1, 0); while(ind<Numb_Sample); //TC_Berhenti(TC1, 0); Snow=PosServoMin; penundaan (500); Serial.print(0); Serial.print(4); Serial.print(0xFF); } merusak; } } else if(rc=='2') { Serial.print("Uji Motor Servo\n"); while(!Serial.available()); rc=Serial.baca(); if(rc=='1') { Serial.print("Mode 1\n"); Snow=PosServoMax; } if(rc=='2') { Serial.print("Mode 2\n"); Snow=PosServoMin; } } */ SNow=PosServoMax; penundaan(100); Snow=PosServoMin; penundaan(100); }

Langkah 6: Antarmuka Das Tecnologias

Interfaceamento Das Tecnologias
Interfaceamento Das Tecnologias

Untuk komunikasi dos dados entre o Arduíno DUE ea DRAGONBOARD 410c, inicialmente utilizou-se a interface da figura acima, o que não foi possível executar, eno optou-se pelo uso de uma antarmuka USB CDCON entre perlu dikompilasi ulang untuk KERNEL da DRAGONBOARD 410c, que não se fez por causa do curto tempo disponível.

Langkah 7: Konfigurasikan DRAGONBOARD 410c (Python)

Konfigurasi Da DRAGONBOARD 410c (Python)
Konfigurasi Da DRAGONBOARD 410c (Python)

Foi configurada untuk enviar ao Arduino DUE os perintah untuk realizar a aquisição de dados dan transmisi os dados obtidos. Segue codigo abaixo.

Pengamatan: Abordagem utilizada no código, não funcionou devido aos níveis de tensão utilizados pelo Arduíno DUE e o Mezzanine serem incompatíveis. Oleh karena itu, pilihlah antarmuka untuk USB, yang diperlukan untuk melakukan kompilasi KERNEL dan DRAGONBOARD 410c untuk mencari informasi yang tepat untuk komunikasi.

import timeimport serial import pandas as pd import numpy as np

# Konfigurasikan serial conexão

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

ser.isOpen()

print('Masukkan perintah Anda di bawah ini.\r\nMasukkan "keluar" untuk keluar dari aplikasi.')

masukan=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 KARENA pemancar os dados coletados

daftar =

untuk saya dalam kisaran(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): aktual << 8 aktual += cc = ser.read(1) lista.append(atual)

Langkah 8: INTERPRETAÇÃO DOS ARQUIVOS DE AUDIO

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

4 langkah-langkah nyata untuk menganalisis semua hal yang diperlukan untuk melakukan sensor, perlu melakukan percakapan tanpa format WAV, untuk menyelesaikan tugas-tugas autores melakukan TCC dan rekan kerja melakukan projeto, para valores numéricos, semakin banyak digunakan. Untuk realizar esta conversão foi escrito um algoritmo em PYTHON 3 que lê o arquivo WAV dan salva os dados lakukan espectro em um arquivo CSV. O algoritmo utilizado segue abaixo dan anexo untuk mengunduh.

Algoritma esse faz perlu untuk fungsi sistem, já que o Arduino DUE já enviará esses dados em um array de valores numéricos.

# pengkodean: utf-8

# Leitura dan percakapan dengan audio untuk csv

# MÓDULOS UTILIZADOS

import wave import numpy as np import pandas as pd import matplotlib.pyplot as plt

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

def audio_to_csv(nama_file): wave_file = wave.open(nama_file+'.wav', 'rb') data_size = wave_file.getnframes() sample_rate = wave_file.getframerate() time_step = 1/sample_rate waveData = wave_file.readframes(data_size-1) sinyal = 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(Time)], axis=1) df.to_csv(file_name + '.csv', index=False) return df

# CARREGANDO DATA FRAME COM OS DADOS DO AUDIO

''_name = 'Solo_com_Vazamento' df_vazamento = audio_to_csv(nama_file) df_vazamento.columns = ['amp', 'time'] nama_file = 'Solo_sem_Vazamento' df_sem_vazamento = audio_amp_to_csv(file_sem_Vazamento'],'vazamento = audio_amp_to_csv(file_sem_Vazamento'

# GRÁFICO DO ESPECTRO DE AUDIO

gambar, (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()

Langkah 9: Analisis Visual Lakukan Sinal

Analisis Visual Lakukan Sinal
Analisis Visual Lakukan Sinal
Analisis Visual Lakukan Sinal
Analisis Visual Lakukan Sinal
Analisis Visual Lakukan Sinal
Analisis Visual Lakukan Sinal

Com o 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 sebagai varias frequências, e suas amplitudo aquele sinem. Pela análise visual do gráfico da transformada de Fourier um profissional com conhecimentos específicos poderá identificar a existência de algum vazamento na tubulação. Estes gráficos servirão para validao das análises realizadas pelo algoritmo de detecção automática.

Batasi frekuensi masuk 100Hz dan 800Hz, perhatikan rentang frekuensi.

# coding: utf-8# Módulos utilizados para processamento da transformada de Fourier

import pandas as pd import numpy as np import wave from matplotlib import pyplot as plt# Função que realiza a transformada de Fourier dan plot os gráficos para análise def Fourier(df_list): Fs = 44100; # Taksa de amostragem em Hz Ts = 1.0/Fs; # Intervalo de amostragem y = pd.concat(df_list) t = y['time'] # Vetor de tempo y = y['amp'] # Vetor de amplitudo 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('Waktu') 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)# Bersenang-senanglah untuk melakukan pekerjaan CSV dan bersenang-senanglah dengan Fourier def read_csv(nama_file, init, final): df = pd.read_csv(nama_file + '.csv') df.columns = ['amp', ' time'] delta = final-init jika init*44100 > len(df) atau final*44100 > len(df): init = (len(df)/44100)-delta jika init =100) & (df['freq ']<=800)] mx = diurutkan(df['amp']) print("Amplitudo media das:", np.round(np.mean(mx))) print("Percentuais em relação a média das amplitudo.") print("100 maiores amplitudo ", np.mean(mx[-100:])//df['amp'].mean()*100, "%", sep="") print("50 maiores amplitudo:", np.mean(mx[-50:])//df ['amp'].mean()*100, "%", sep="") print("10 maiores amplitudo:", np.mean(mx[-10:])//df['amp']. mean()*100, "%", sep="") print("Amplitudo utama:", np.mean(mx[-1:])//df['amp'].mean()*100, " %", sep="")read_csv('Solo_com_Vazamento', 2, 10) # Contoh de gráficos para vazamentoread_csv('Solo_sem_Vazamento', 2, 10) # Contoh de gráficos para sem vazamento

Langkah 10: Algoritmo Em R Para Extração Das Menampilkan Dos Dados

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

Manfaatkan algoritme untuk realizar proses dan fitur tambahan (características) dos dados obtidos.

Este primeiro algoritmo realiza uma extração identificada, onde énecessário saber se o arquivo de áudio trata-se de uma amostra vazamento detectado ou não, isso por que os dados resultantes desse processo servirão para o treina mentreina.

Para quando o sistem estiver em modo de operação um algoritmo um pouco diferente será executado, onde não este fará a extração não identificada, gerando somente as características sem uma identificação.

Estas menampilkan caraterísticas são propriedades acústicas komposas por varias informaes referentes ao espectro de áudio capturado, abaixo seguirá uma descrição (em inglês) destas características.

Este algoritmo faz parte de um projeto disponível no GitHub e pode ser acessado através deste link, o mesmo foi modificado para atender as especificaes do projeto.

O software usado para rodar o algoritmo é gratuito, download do interpretador R e do R Studio.

Características extraídas:

  • meanfreq: frekuensi rata-rata (dalam kHz)
  • sd: standar deviasi frekuensi
  • median: frekuensi median (dalam kHz)
  • Q25: kuantil pertama (dalam kHz)
  • Q75: kuantil ketiga (dalam kHz)
  • IQR: rentang interkuantil (dalam kHz)
  • skew: skewness (lihat catatan di deskripsi specprop)
  • kurt: kurtosis (lihat catatan di deskripsi specprop)
  • sp.ent: entropi spektral
  • sfm: kerataan spektral
  • mode: frekuensi mode
  • centroid: centroid frekuensi (lihat specprop)
  • peakf: frekuensi puncak (frekuensi dengan energi tertinggi)
  • meanfun: rata-rata frekuensi dasar yang diukur di seluruh sinyal akustik
  • minfun: frekuensi dasar minimum yang diukur melalui sinyal akustik
  • maxfun: frekuensi fundamental maksimum yang diukur melalui sinyal akustik
  • meandom: rata-rata frekuensi dominan yang diukur pada sinyal akustik
  • mindom: frekuensi dominan minimum yang diukur di seluruh sinyal akustik
  • maxdom: frekuensi dominan maksimum yang diukur pada sinyal akustik
  • dfrange: rentang frekuensi dominan yang diukur di seluruh sinyal akustik
  • modindx: indeks modulasi. Dihitung sebagai akumulasi perbedaan absolut antara pengukuran frekuensi dasar yang berdekatan dibagi dengan rentang frekuensi
  • label: kebocoran atau tanpa_kebocoran

Algoritma usado:

paket <- c('tuneR', 'seewave', 'fftw', 'caTools', 'randomForest', 'warbleR', 'mice', 'e1071', 'rpart', 'xgboost', 'e1071')jika (panjang(setdiff(paket, nama baris(installed.packages()))) > 0) { install.packages(setdiff(packages, rownames(installed.packages()))) }

perpustakaan (tuneR)

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

specan3 <- function(X, bp = c(0, 22), wl = 2048, threshold = 5, parallel = 1){ # Untuk menggunakan pemrosesan paralel: library(devtools), install_github('nathanvan/parallelsugar') if(class(X) == "data.frame") {if(all(c("sound.files", "selec", "start", "end") %in% colnames(X))) { mulai <- as.numeric(unlist(X$start)) end <- as.numeric(unlist(X$end)) sound.files <- as.character(unlist(X$sound.files)) pilih <- as.character(unlist(X$selec)) } else stop(paste(paste(c("sound.files", "selec", "start", "end")[!(c("sound.files", "selec", "mulai", "akhir") %in% colnames(X))], collapse=", "), "column(s) not found in data frame")) } else stop("X bukan data frame") #jika ada NA di start atau end stop if(any(is.na(c(end, start)))) stop("NAs found in start and/or end") #if end atau start bukan numerik stop if(all(class(end) != "numeric" & class(start) != "numeric")) stop("'end' dan 'selec' harus numerik") #jika ada start lebih tinggi dari end stop if(any(end - start<0)) stop(paste("Awal lebih tinggi dari en d in", length(which(end - start20)) stop(paste(length(which(end - start>20)), "selection(s) more than 20 sec")) options(show.error.messages = TRUE) #jika bp bukan vektor atau panjang!=2 stop if(!is.vector(bp)) stop("'bp' harus berupa vektor numerik dengan panjang 2") else{ if(!length(bp) == 2) stop("'bp' harus berupa vektor numerik dengan panjang 2")} #return warning jika tidak semua file suara ditemukan fs <- list.files(path = getwd(), pattern = ".wav$", abaikan.case = TRUE) if(length(unique(sound.files[(sound.files %in% fs)])) != length(unique(sound.files))) cat(paste(length(unique(sound.files)) files))-length(unique(sound.files[(sound.files %in% fs)])), ".wav file(s) not found")) #hitung jumlah file suara di direktori kerja dan jika 0 berhenti d <- which(sound.files %in% fs) if(length(d) == 0){ stop("The.wav files are not in working directory") } else { start <- start[d] end <- end[d] selec <- selec[d] sound.files <- sound.files[d] } # Jika paralel bukan numerik if(!is.numeric(parallel)) stop("'parallel' must menjadi vektor numerik dengan panjang 1") if(any(!(parallel %% 1 == 0), parallel 1) { options(warn = -1) if(all(Sys.info()[1] == " Windows", requireNamespace("parallelsugar", silent = TRUE) == TRUE)) lapp <- function(X, FUN) parallelsugar::mclapply(X, FUN, mc.cores = parallel) else if(Sys.info() [1] == "Windows"){ cat("Pengguna Windows perlu menginstal paket 'parallelsugar' untuk komputasi paralel (Anda tidak melakukannya sekarang!)") lapp <- pbapply::pblapply} else lapp <- function (X, FUN) parallel::mclapply(X, FUN, mc.cores = parallel)} else lapp <- pbapply::pblapply options(warn = 0) if(parallel == 1) cat("Mengukur parameter akustik:") x <- as.data.frame(lapp(1:length(start), function(i)) { r <- tuneR::readWave(file.path(getwd(), sound.files), from = mulai, hingga = akhir, satuan = "detik") b plafon([email protected]/2000) - 1) b[2] <- plafon([email protected]/2000) - 1 #analisis spektrum frekuensi 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 #Frekuensi dengan puncak amplitudo peakf <- 0#seewave::fpeaks(songspec, f = [email protected], wl = wl, nmax = 3, plot = FALSE)[1, 1] #Parameter frekuensi dasar ff <- seewave::fund(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) #Parameter frekuensi dominan 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 = TRUE) dfrange <- (maxdom - mindom) durasi <- (end - start) #penghitungan indeks modulasi berubah <- vector() for(j in which(!is. na(y))){ ubah <- abs(y[j] - y[j + 1]) ubah <- tambahkan(ubah, ubah) } if(mindom==maxdom) modindx<-0 else modindx <- mean (perubahan, na.rm = T)/dfrange #simpan hasil return(c(durasi, meanfreq, sd, median, Q25, Q75, IQR, skew, kurt, sp.ent, sfm, mode, centroid, peakf, meanfun, minfun, maxfun, meandom, mindom, maxdom, dfrange, modindx)) })) #ubah nama hasil rownames(x) <- c("duration", "meanfreq", "sd", "median", "Q25", "Q75", "IQR", "miring", "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") nama baris(x) <- c(1:nrow(x)) return(x) }

processFolder <- function(folderName) { # Mulai dengan data.frame kosong. data <- data.frame() # Dapatkan daftar file dalam folder. list <- list.files(folderName, '\.wav') # Tambahkan daftar file ke data.frame untuk diproses. for (namafile dalam daftar) { row <- data.frame(namafile, 0, 0, 20) data <- rbind(data, baris) } # Setel nama kolom. nama(data) <- c('sound.files', 'selec', 'start', 'end') # Pindah ke folder untuk diproses. setwd(folderName) # Proses file. akustik <- specan3(data, parallel=1) # Pindah kembali ke folder induk. setwd('..') akustik }

gender <- function(filePath) { if (!exists('genderBoosted')) { load('model.bin') } # Setup path. currentPath <- getwd() fileName <- basename(filePath) path <- dirname(filePath) # Setel direktori untuk membaca file. setwd(path) # Mulai dengan data.frame kosong. data <- data.frame(namafile, 0, 0, 20) # Setel nama kolom. nama(data) <- c('sound.files', 'selec', 'start', 'end') # Memproses file. akustik <- specan3(data, paralel=1) # Kembalikan jalur. setwd(currentPath) predict(genderCombo, newdata=acoustics) }

# Muat data

kebocoran <- processFolder('caminho para o pasta com sampel de áudio com vazamento') tanpa_kebocoran <- processFolder('caminho para o pasta com sampel de áudio sem vazamento')

# Setel label.

kebocoran$label <- 1 tanpa_kebocoran$label <- 2 data <- rbind(kebocoran, tanpa_kebocoran) data$label <- faktor(data$label, label=c('kebocoran', 'tanpa_kebocoran'))

# Hapus kolom yang tidak digunakan.

data$durasi <- NULL data$sound.files <- NULL data$selec <- NULL data$peakf <- NULL

# Hapus baris yang berisi NA.

data <- data[lengkap.kasus(data),]

# Tulis kumpulan data csv.

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

Langkah 11: Rede Neural

Rede Neural
Rede Neural

Ideia do uso de uma rede neural, a de realizar um reconhecimento automatizado através dos dados coletados pelo dispositivo de sensoriamento.

A rede neural utilizada é do tipo MLP (Multilayer Perceptron), este modelo é treinado com dados previamente identificados dan após esse treinamento o modelo implantado no sistema conseguirá realizar a identificao automática do sinal recebidonaque

Foi necessário realizar uma filtragem dos dados de entrada, pois algumas características estavam diminuindo a taxa de acerto da rede ao invés de melhora-la. Tidak ada informasi lebih lanjut tentang abordagem realistica muito aprofundada, mas mesmo com um trabalho mais superfisial 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 observado na imagem anexa.

Este algoritmo é utilizado para treinar o modelo da rede e retornar a taxa de acerto do mesmo. Tidak ada sistem pendeteksian algoritma yang berbeda dengan seria usado, pois ele realizaria o treino ou receberia um modelo já treinado da nuvem ou de alguma outra fonte e com esse modelo realizaria as predições para cada leitura realizada.

# pengkodean: utf-8

impor panda sebagai pd

impor numpy sebagai np dari sklearn.model_selection impor train_test_split sebagai tts dari sklearn.neural_network impor MLPClassifier sebagai MLP dari sklearn.metrics impor klasifikasi_report sebagai cr dari sklearn.metrics impor kebingungan_matrix sebagai cm

# Leitura dos dados melakukan 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 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) hasil = modelo.predict(X_test)

# Hasil Imprimindo

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

Direkomendasikan: