İçindekiler:

Sistema Autônomo Localizador De Vazamentos: 11 Adım
Sistema Autônomo Localizador De Vazamentos: 11 Adım

Video: Sistema Autônomo Localizador De Vazamentos: 11 Adım

Video: Sistema Autônomo Localizador De Vazamentos: 11 Adım
Video: Localizador GPS con Micrófono Batería integrada Seguimiento por Internet 2024, Kasım
Anonim
Sistema Autônomo Localizador De Vazamentos
Sistema Autônomo Localizador De Vazamentos

Este projeto, emum robô, que através da leitura realizada po um dispositivo, ekipman com um sensörü piezoelétrico, captura os espectros das vibrações no solo, pode identificar e yerel, yerel, com o identificar e yerel, com o m o processamento dos dos u l u u l u m u u l u m u u u l u m u u u l u m u u u l a y ı ı m ı ı ı ı ı ı yor. uma tubulação.

O, DRAGONBOARD 410c'de gerçekleştirilmiş ve algoritmik kurulumlara sahip bir süreç. Os dados também são enviados para um serviço na nuvem, yanıtlar ve yardımcı hiçbir işlem Integência Yapay projeto yok.

Qualcomm'un Hackaton'a ait olmayan projeleri, Sorocaba Faculdade de Engenharia de (FACENS) tarafından TecnoFACENS durante, projeler için projeler Eneo Juliano Bovino, Felipe Xavier, Lucas de Sousa Rodrigues, Rogério Apk. Gomes Polo ve Ronaldo P. Gomes Polo. Daniel de Castro Pacheco, Newton Paiva de Belo Horizonte Üniversitesi'nden mezun oldu. FACENS, Lucas Nunes Monteiro ve Felipe Crispim ve Silva Salvagnini'yi ziyaret edin.

Adım 1: Liste De Materiais

Malzeme Listesi
Malzeme Listesi

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

1 Arduino Ödeneği

1 Dragonboard 410c

2 Sürücüler, motor de corrente continua contendo cada um:

4 Transistör BC548

4 Diodos 1n4007

4 Direnç 4k7Ω ¼ W

1 Sürücü para servo motor çelişkisi:

1 Transistör BC548

1 Diodos 1N4007

1 Direnç 4k7Ω ¼ W

1 Fare USB'si

1 Teclado USB

1 Monitör

1 Kabin HDMI

1 Robô De Esteiras - Plataforma Zumo

1 Mini dispositivo de cremalheira ve engrenagem

1 Servo motor 9g

Adım 2: Adaptação Mecânica

Image
Image

Para bir aquisição dos dados pelo sensörü piezoelétrico, faz se necessário, o desenvolvimento de um dispositivo com pinh o e cremalheira, uyumlu desenhos, nete caso gibi pek çok foram fabrikasyon olarak 3D, en büyük etkiyi yarat Tempo de execução, sabitlenmiş veya plataforma zumo, utilizando fita dupla face, uygun video.

Adım 3: Acionamento Dos Motores

Obtenção Do Ses
Obtenção Do Ses

Motorların çalıştırılması ve çalıştırılması ZUMO ve sürücülerin montajı için gerekli koşulların sağlanması, sürücülerin motorlarının sürekli olarak çalıştırılması, servo motor için sürücü, figüras acima olarak uyumlu, birincil bir figür veya sürücü parası gönderme um motor de corrente sürekli ea segunda o sürücü para um servo motor.

Adım 4: Obtenção Do Áudio

Ses ve ses denetimi dışında, tek başına, tek başına kullanım için ayrı ayrı önlemler alın. [email protected] adresine e-posta gönderin.

Tüm bunları gerçekleştirmenin en iyi algılayıcısıdır.

100Hz ve 800Hz'de en sık kullanılan frekanslar olarak. Nyquist'in, bağımsız bir sıklıktaki tüm koşulların sağlanması için 3 kHz'lik özel bir sıklık ayarlaması için para isso.

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

Adım 5: Arduino DUE Yapın (linguagem C)

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

Devido a grande nicel dedos, cerca de 3000 pontos por segundo, 32 bit için dahili tipo yapmak, gerados pelo dispositivo de sensoriamento e gereklilikler para prosesi DRAGONBOARD 410c, DRAGONBOARD 410c, Arduino 'da parasal işlemler için foi kullanımı DRAGONBOARD 410c için gerekli olan her şey için gerekli olan arayüz koruması Arayüz kurulumu DRAGONBOARD 410c, ATmega 328, mevcut olmayan mikrokontrolör.

O Arduino DUE foi configurado, comunicação seri aracılığıyla QUALCOMM DRAGONBOARD 410c için enviados ve plataforma yapılandırması için.

Arduino foramını ações yapılandırmaz:

Realizar aquisição dos dados;

DRAGONBOARD 410c'yi aktarır;

Segue a programação:

#include#define Numb_Sample 3000 #define DAC_Input A0

#define SERVO 7

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

1); // %50 görev döngüsü

TC_SetRC(tc, kanal, rc); TC_Start(tc, kanal); tc->TC_CHANNEL[kanal]. TC_IER = TC_IER_CPCS | TC_IER_CPAS; // kayıt operatörleri tc->TC_CHANNEL[kanal]. TC_IDR = ~(TC_IER_CPCS | TC_IER_CPAS); // desabilita işletim sistemi kayıtları NVIC_EnableIRQ(irq); // habilita araya girme }

geçersiz kurulum ()

{ Seri.başla(115200); pinMode(DAC_Input, INPUT); TimerStart(TC1, 0, TC3_IRQn, 1500);//Zamanlayıcıyı Başlat //TC_Stop(TC1, 0); pinMode(SERVO, ÇIKIŞ); }

boşluk döngüsü()

{ /*//while(!Serial.available()); char rc;//=Serial.read(); int indeks = 0; if(rc==0) { while(!Serial.available()); rc=Seri.read(); switch(rc) { durum 1: indeks=0; while(!Serial.available()); while((rc=Serial.read())!=0xFF) { dizin <<= 8; indeks += rc; while(!Serial.available()); } Seri.print(0); Seri.baskı(2); SendNumber(DAC[indeks]); Serial.print(0xFF); kırmak; durum 3: while(!Serial.available()); if((Serial.read())==0xFF) { SNow=PosServoMax; gecikme(500); ind=0; //TC_Başlat(TC1, 0); while(ind<Numb_Sample); //TC_Dur(TC1, 0); SNow=PosServoMin; gecikme(500); Seri.baskı(0); Seri.baskı(4); Serial.print(0xFF); } kırmak; } } else if(rc=='2') { Serial.print("Servo Motor Testi\n"); while(!Serial.available()); rc=Seri.read(); if(rc=='1') { Serial.print("Mod 1\n"); SNow=PosServoMax; } if(rc=='2') { Serial.print("Mod 2\n"); SNow=PosServoMin; } } */ SNow=PosServoMax; gecikme(100); SNow=PosServoMin; gecikme(100); }

Adım 6: Arayüz Teknolojileri

Arayüz Teknolojileri
Arayüz Teknolojileri

Arduíno'nun DRAGONBOARD 410c'ye özel bir arabirimi, bir arabirimin biçimsel olarak kullanılması, olanaklı bir yürütme, en uygun arabirim, USB CDC KARTI 410c arabirimi DRAGONBOARD 410c, que não se fes por causa do curto tempo disponível için KERNEL ve yeniden derleme gerekli.

Adım 7: DRAGONBOARD 410c'yi Yapılandırma (Python)

DRAGONBOARD 410c'yi Yapılandırma (Python)
DRAGONBOARD 410c'yi Yapılandırma (Python)

Arduino DUE os comandoları için enviar için foi yapılandırmaları ve gerçekle tirme ve gönderme. Segue código abaixo.

Gözlem: Herhangi bir código yok, mevcut değil. USB, DRAGONBOARD 410c için KERNEL'i yeniden derlemek için isteğe bağlı olarak isteğe bağlı arabirim.

timeimport seri ithalat pandalarını pd olarak içe aktar numpy'yi np olarak içe aktar

# Configuração da conexão seri

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

ser.isOpen()

print('Aşağıya komutlarınızı girin.\r\nUygulamadan çıkmak için "çıkış" girin.')

giriş=1

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

liste =

i aralığında (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): gerçek << 8 gerçek += cc = ser.read(1) lista.append(atual)

Adım 8: INTERPRETAÇÃO DOS ARQUIVOS DE AUDIO

İNTERPRETAÇÇO DOS ARQUIVOS DE AUDIO
İNTERPRETAÇÇO DOS ARQUIVOS DE AUDIO

Parametreler gerçekçi bir şekilde birincil değerlendirmeler yapmak için sensörler, sensörler, görüşmeler için gerekli olan herhangi bir format yok WAV, TCC ve ortak çalışmalar için otomatik projeler yapmak, parasal değerlere ilişkin sayısal veriler, ARD'ler ve diğerleri.. PYTHON'un 3 temel algoritması için gerçek tartışmalara dayalı konuşmalar, CSV'yi izleme WAV ve salva os dados. O algoritmo utilizado segue abaixo e em anexo para indir.

Temel algoritmalar için temel gereksinimler, sistematiği, işlevi yerine getirmek için Arduino DUE enviará esses dados em um array de valores numéricos.

# kodlama: utf-8

# Leitura e konuşma dos audios para csv

# MÓDULOS UTILIZADOS

dalgayı içe aktar numpy'yi np olarak içe aktar pandaları pd olarak içe aktar matplotlib.pyplot'u plt olarak içe aktar

# FUNÇÃO PARA KONVERTÖR WAV EM DADOS DO 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_size-1) sinyal = np.fromstring(waveData, dtype='int32') Zaman=np.linspace(start=0, stop=data_size/sample_rate, num=data_size, endpoint=True) df = pd.concat([pd. DataFrame(sinyal), pd. DataFrame(Zaman)], eksen=1) df.to_csv(dosya_adı + '.csv', dizin=Yanlış) dönüş df

# CARREGANDO VERİ ÇERÇEVESİ COM OS DADOS DO SES

file_name = 'Solo_com_Vazamento' df_vazamento = audio_to_csv(dosya_adı) df_vazamento.columns = ['amp', 'zaman'] file_name = 'Solo_sem_Vazamento' df_sem_vazamento = audio_to_csv(dosya_adı) 'n_vaz_adı','nf_adı

# GRÁFICO ESPECTRO DE SES YAPAR

şekil, (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': 'kalın' }) ax2.set_xlabel('Tempo [s]', fontdict={'fontsize': 16}) ax2.set_ylim([-4e8, 4e8]) figure.tight_layout(h_pad=5) plt.show()

Adım 9: Visual Do Sinal'i Analiz Edin

Analise Visual Do Sinal
Analise Visual Do Sinal
Analise Visual Do Sinal
Analise Visual Do Sinal
Analise Visual Do Sinal
Analise Visual Do Sinal

PYTHON 3'te Fourier'in dönüşümünü gerçekleştirin, en iyi artificio matematificio realiza ve dönüşümün do sinal do domínio do tempo para o domínio da frekans, onde se torna olassível as değişik frekans kompanzasyonu, s, s uas amplitude olarak analiz. Fourier'in dönüşümünü görselleştirmenin görsel analizi, var olan bir varlığın kimliğini belirleyen profesyonel iletişim özellikleri. Otomasyonun gerçekleĢtirilmesine yönelik algoritmaların gerçekleĢtirilmesine yönelik değerlendirmeler.

100Hz ve 800Hz'deki frekansları sınırlamak, frekansları ölçmek için var olan bir varlıktır.

# kodlama: utf-8# Fourier'in transformada da dönüşümü için kullanılan modüller

pandaları pd olarak içe aktarın numpy'yi np olarak içe aktarın matplotlib'den dalgayı içe aktarın, pyplot'u plt olarak içe aktarın# Fourier'i ve def Fourier(df_list) tanımını analiz etmenin bir dönüşümünü gerçekleştirmenin bir yolu var: Fs = 44100; # Taksa de amostragem em Hz Ts = 1.0/Fs; # Aralık de amostragem y = pd.concat(df_list) t = y['zaman'] # Vetor de tempos y = y['amp'] # Vetor de amplitudes n = len(y) # Comprimento do sinal k = np. arange(n) T = n/Fs frq = k/T frq = frq[aralık(n///2)] Y = np.fft.fft(y)/n Y = Y[aralık(n//2)] tmp = pd. DataFrame() tmp['amp'] = abs(Y) tmp['freq'] = frq max_lim = maks(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('Zaman') ax[0].set_ylabel('Genlik') 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)# Fourier tanımlı read_csv(dosya_adı, başlangıç, final): df = pd.read_csv(dosya_adı + '.csv') df.columns = ['amp', ' time'] delta = final-init ise init*44100 > len(df) veya final*44100 > len(df): init = (len(df)/44100)-delta eğer init =100) & (df['freq ']<=800)] mx = sıralı(df['amp']) print("Medya das genlikleri:", np.round(np.mean(mx))) print("Ortam genliklerinin yüzdesi.") print("100 ana genlik", np.mean(mx[-100:])//df['amp'].mean()*100, "%", sep="") print("50 ana genlik:", np.mean(mx[-50:])//df ['amp'].mean()*100, "%", sep="") print("10 ana genlik:", np.mean(mx[-10:])//df['amp']. ortalama()*100, "%", sep="") print("Ana genlik:", np.mean(mx[-1:])//df['amp'].mean()*100, " %", sep="")read_csv('Solo_com_Vazamento', 2, 10) # Vazamentoread_csv('Solo_sem_Vazamento', 2, 10) # Örnekleri de göster

Adım 10: Algoritmo Em R Para Extração Das Özellikleri Dos Dados

Algoritmo Em R Para Extração Das Özellikleri Dos Dados
Algoritmo Em R Para Extração Das Özellikleri Dos Dados
Algoritmo Em R Para Extração Das Özellikleri Dos Dados
Algoritmo Em R Para Extração Das Özellikleri Dos Dados

Özelliklerden yararlanma (özellikler) dos dados obtidos.

En temel algoritmaların gerçekleştirilmesi, ekstra bir tanımlama, onde é écessário saber se o onde é thecessário saber se o o udio de udio trata-se de uma amostra vazamento u n o, isso por que os dados, sonuçların desse processo ne reinalmento, ne de reinamento, the, reinamento.

Parametreler, işletim sistemi ve algoritmalar için geçerli tüm algoritmaları içerir.

Estas'ın özellikleri, değişkenlere ilişkin bilgi ve belgelere ilişkin temel bilgilerdir.

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 olarak projeto yapmak gibi.

O yazılım usado para rodar o algoritmo é gratuito, yorumlayıcı R e do R Studio'yu indirin.

Ekstra özellikler:

  • ortalama frekans: ortalama frekans (kHz olarak)
  • sd: frekansın standart sapması
  • medyan: medyan frekans (kHz olarak)
  • Q25: birinci nicelik (kHz olarak)
  • Q75: üçüncü nicelik (kHz olarak)
  • IQR: kuantiller arası aralık (kHz olarak)
  • skew: skewness (specprop açıklamasındaki nota bakın)
  • kurt: kurtosis (specprop açıklamasındaki nota bakın)
  • sp.ent: spektral entropi
  • sfm: spektral düzlük
  • mod: mod frekansı
  • centroid: frekans centroid (bkz. specprop)
  • tepe f: tepe frekansı (en yüksek enerjili frekans)
  • ortalama eğlence: akustik sinyal boyunca ölçülen temel frekansın ortalaması
  • minfun: akustik sinyal boyunca ölçülen minimum temel frekans
  • maxfun: akustik sinyal boyunca ölçülen maksimum temel frekans
  • ortalama: akustik sinyal boyunca ölçülen baskın frekansın ortalaması
  • mindom: akustik sinyal boyunca ölçülen minimum baskın frekans
  • maxdom: akustik sinyal boyunca ölçülen maksimum baskın frekans
  • dfrange: akustik sinyal boyunca ölçülen baskın frekans aralığı
  • modindx: modülasyon indeksi. Temel frekansların bitişik ölçümleri arasındaki birikmiş mutlak farkın frekans aralığına bölümü olarak hesaplanır
  • etiket: sızıntı veya olmadan_leakage

Algoritma usado:

paketler <- c('tuneR', 'seewave', 'fftw', 'caTools', 'randomForest', 'warbleR', 'fare', 'e1071', 'rpart', 'xgboost', 'e1071')if (uzunluk(setdiff(paketler, satır adları(kurulu.paketler()))) > 0) { kurulum.paketler(setdiff(paketler, satır adları(kurulu.paketler()))) }

kitaplık(tuneR)

kitaplık(seewave) kitaplık(caTools) kitaplık(rpart) kitaplık(rpart.plot) kitaplık(randomForest) kitaplık(warbleR) kitaplık(fare) kitaplık(xgboost) kitaplık(e1071)

specan3 <- function(X, bp = c(0, 22), wl = 2048, eşik = 5, parallel = 1){ # Paralel işlemeyi kullanmak için: library(devtools), install_github('nathanvan/parallelsugar') if(class(X) == "data.frame") {if(all(c("sound.files", "selec", "start", "end") %in% colnames(X))) { start <- as.numeric(unlist(X$start)) end <- as.numeric(unlist(X$end)) sound.files <- as.character(unlist(X$sound.files)) seç <- as.character(unlist(X$selec)) } else stop(paste(paste(c("sound.files", "selec", "start", "end")[!(c("sound.files", "selec", "start", "end") %in% colnames(X))], crash=", "), "sütun(lar) veri çerçevesinde bulunamadı")) } else stop("X bir veri çerçevesi değil") #başlangıç veya bitiş durağında NA'lar varsa if(any(is.na(c(end, start)))) stop("Başlangıçta ve/veya bitişte NA'lar bulundu") #if end veya start sayısal stop değilse if(all(class(end) != "sayısal" & class(start) != "sayısal")) stop("'end' ve 'selec' sayısal olmalıdır") #if herhangi bir başlangıç son duraktan daha yüksek if(any(end - start<0)) stop(paste("Başlangıç, tr'den daha yüksek d in", uzunluk(hangi(bitiş - başlangıç20)) stop(paste(uzunluk(ki(bitiş - başlangıç>20))), "seçim(ler) 20 saniyeden uzun")) options(show.error.messages = TRUE) #if bp vektör veya uzunluk değil!=2 stop if(!is.vector(bp)) stop("'bp', 2 uzunluğunda bir sayısal vektör olmalıdır") else{ if(!length(bp) == 2) stop("'bp', 2 uzunluğunda bir sayısal vektör olmalıdır")} #return uyarısı tüm ses dosyaları bulunamadıysa fs <- list.files(path = getwd(), pattern = ".wav$", yoksay.case = DOĞRU) if(uzunluk(benzersiz(sound.files[(sound.files %in% fs)])) != uzunluk(benzersiz(sound.files))) cat(paste(uzunluk(benzersiz(sound. files))-length(unique(sound.files[(sound.files %in% fs)]))), ".wav dosyası(lar) bulunamadı")) #çalışma dizinindeki ses dosyalarının sayısı ve 0 ise dur d <- that(sound.files %in% fs) if(length(d) == 0){ stop(".wav dosyaları çalışma dizininde değil") } else { start <- start[d] end <- end[d] seç <- seç[d] sound.files <- sound.files[d] } # Paralel sayısal değilse if(!is.numeric(parallel)) stop("'parallel' olmalı 1") uzunluğunda sayısal bir vektör olsun if(any(!(parallel %% 1 == 0), parallel 1) { options(warn = -1) if(all(Sys.info()[1] == ") Windows", requireNamespace("parallelsugar", sessizce = DOĞRU) == DOĞRU)) lapp <- function(X, EĞLENCE) parallelsugar::mclapply(X, EĞLENCE, mc.cores = parallel) else if(Sys.info() [1] == "Windows"){ cat("Windows kullanıcılarının paralel hesaplama için 'parallelsugar' paketini yüklemeleri gerekiyor (şimdi yapmıyorsunuz!)") lapp <- pbapply::pblapply} else lapp <- function (X, EĞLENCE) parallel::mclapply(X, EĞLENCE, mc.cores = parallel)} else lapp <- pbapply::pblapply options(warn = 0) if(parallel == 1) cat("Akustik parametreleri ölçme:") x <- as.data.frame(lapp(1:length(start), function(i) { r <- tuneR::readWave(file.path(getwd(), sound.files), from =) start, to = end, birimler = "saniye") b tavan([email protected]/2000) - 1) b[2] <- tavan([email protected]/2000) - 1 #frequency spektrum analizi songspec <- seewave::spec(r, f = [email protected], plot = YANLIŞ) analizi <- seewave::specprop(songspec, f = [email protected], flim = c(0, 280/1000), çizim = YANLIŞ) #parametreleri kaydet ortalama sıklık <- analiz$ortalama/1000 sd <- analiz$sd/1000 medyan <- analiz$medyan/1000 Q25 < - analiz$QQ75 <- analiz$QIQR <- analiz$IQR/1000 çarpık <- analiz$skewness kurt <- analiz$kurtosis sp.ent <- analiz$sh sfm <- analiz$sfm modu <- analiz$mode/1000 centroid <- analiz$cent/1000 #Genlik tepe noktalarına sahip frekans tepe f <- 0#seewave::fpeaks(songspec, f = [email protected], wl = wl, nmax = 3, çizim = YANLIŞ)[1, 1] #Temel frekans parametreleri ff <- seewave::fund(r, f = [email protected], ovlp = 50, eşik = eşik, fmax = 280, ylim=c(0, 280/1000), çizim = YANLIŞ, wl = wl)[, 2] ortalama eğlence<-mean(ff, na.rm = T) minfun<-min(ff, na.rm = T) maxfun<-max(ff, na.rm = T) #Baskın frekans parametreleri y <- seewave::dfreq(r, f = [email protected], wl = wl, ylim=c(0, 280/1000), ovlp = 0, çizim = F, eşik = eşik, bant geçişi = b * 1000, fftw = DOĞRU)[, 2] ortalama <- ortalama(y, na.rm = DOĞRU) akıl <- min(y, na.rm = DOĞRU) maksimum <- maks (y, na.rm = DOĞRU) dfrange <- (maksdom - mindom) süre <- (bitiş - start) #modülasyon indeks hesaplama değişiklikleri <- vector() for(j in that(!is. na(y))){ değişiklik <- abs(y[j] - y[j + 1]) değişiklik <- ekle(değişiklik, değişiklik) } if(mindom==maxdom) modindx<-0 else modindx <- ortalama (değişiklikler, na.rm = T)/dfrange #save sonuçları döndür(c(süre, ortalama frekans, sd, medyan, Q25, Q75, IQR, skew, kurt, sp.ent, sfm, mode, centroid, peakf, ortalamafun, minfun, maxfun, ortalama, mindom, maxdom, dfrange, modindx)) })) #sonuç adlarını değiştir satır adları(x) <- c("duration", "meanfreq", "sd", "medyan", "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") satır adları(x) <- c(1:nrow(x)) dönüş(x) }

processFolder <- function(klasörAdı) { # Boş data.frame ile başlayın. data <- data.frame() # Klasördeki dosyaların listesini alın. list <- list.files(klasörAdı, '\.wav') # İşlem için data.frame'e dosya listesi ekleyin. for (listedeki dosyaAdı) { satır <- data.frame(dosyaAdı, 0, 0, 20) data <- rbind(veri, satır) } # Sütun adlarını ayarlayın. isimler(veri) <- c('sound.files', 'selec', 'start', 'end') # İşlem için klasöre taşıyın. setwd(klasörAdı) # Dosyaları işle. akustik <- specan3(data, parallel=1) # Ana klasöre geri dön. setwd('..') akustik }

cinsiyet <- function(filePath) { if (!exists('genderBoosted')) { load('model.bin') } # Kurulum yolları. currentPath <- getwd() dosyaAdı <- basename(filePath) yol <- dirname(filePath) # Dosyayı okumak için dizini ayarlayın. setwd(path) # Boş data.frame ile başlayın. data <- data.frame(fileName, 0, 0, 20) # Sütun adlarını ayarlayın. isimler(veri) <- c('sound.files', 'selec', 'başlangıç', 'bitiş') # Dosyaları işle. akustik <- specan3(veri, paralel=1) # Yolu geri yükle. setwd(currentPath) tahmin(genderCombo, yeniveri=akustik) }

# Veri yükle

kaçak <- processFolder('caminho para o makarna com örnekleri de áudio com vazamento') olmadan_leakage <- processFolder('caminho para o makarna com örnekleri de udio sem vazamento')

# Etiketleri ayarlayın.

kaçak$label <- 1 olmadan_leakage$label <- 2 veri <- rbind(leakage, olmadan_leakage) data$label <- factor(data$label, labels=c('leakage', 'without_leakage'))

# Kullanılmayan sütunları kaldırın.

data$duration <- NULL data$sound.files <- NULL data$seçim <- NULL data$peakf <- NULL

# NA'ları içeren satırları kaldırın.

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

# csv veri kümesini yazın.

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

Adım 11: Sinirsel Rede

Sinirsel Rede
Sinirsel Rede

Sinirsel bir fikir, é bir de realizar um reconhecimento otomatize edilmiş, dos dados coletados pelo dispositivo de sensoriamento.

MLP'nin (Multilayer Perceptron) yeniden tanımlandığı bir nöral kullanım, mevcut modellerin mevcut olup olmadığının önceden belirlenmesi için bir modeldir.

Gereken gerçekler için temel filtreler, entrada, pois algumas karakteristikleri estavam azalan bir taksonun acerto ve rede ao invés de melhora-la. Gerçekleştirilmemiş, gerçekleştirilmiş olan bir şey değil, daha fazla bilgi için, büyük bir anlaşma, yüzeysel bir bakış açısıyla, bir algumas variáveis com bons desempenhos.

Para os testis gerçekleri o modelo obteve um desempenho muito bom, alcançando na maioria dos testis uma taksa de acerto de 100%, como pode ser gözleme na imagem anexa.

Este algoritmo é utilizado para treinar o modelo da rede e retornar bir takson de acerto do mesmo. Algoritma sistemleri farklı ABD, yeni gerçekler için geçerli değildir.

# kodlama: utf-8

pandaları pd olarak içe aktar

numpy'yi sklearn.model_selection'dan np olarak içe aktar sklearn.neural_network'ten tts olarak train_test_split'i içe aktar MLPClassifier'ı sklearn.metrics'den MLP olarak içe aktar sınıflandırma_raporunu sklearn.metrics'den cr olarak içe aktar

# Leitura dos dados CSV yapıyor

df = pd.read_csv('features.csv') # Ayrı ayrı girişler df_X = df[df.columns[:len(df.columns)-1] # Girişler olarak Filtrando df_X = df_X

# Separando dados para treino e testi

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

# Criando modelo de rede nöral

modelo = MLP(alpha=0.0001, learning_rate_init=0.0001, hidden_layer_sizes=(50, 50, 50, 50), max_iter=10000, activation='tanh', çözücü='lbfgs')

# Treinando modeli

modelo.fit(X_train, Y_train) sonuç = modelo.predict(X_test)

# Imprimindo sonuçları

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

Önerilen: