Përmbajtje:

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

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

Video: Sistema Autônomo Localizador De Vazamentos: 11 hapa
Video: galinh4 2024, Nëntor
Anonim
Sistema Autônomo Localizador De Vazamentos
Sistema Autônomo Localizador De Vazamentos

Este projeto përbëhet nga em ô robô, në mënyrë që të realizohet nga të gjithë disponueshmërinë, pajisjet e pajisjes me sensorë piezoelétrico, kapja e të dhënave nga vibracionet pa solo, identifikimi i vendndodhjes, komodimi i dozave të babait nga uma rede neural, mundíveis vazamentos uma tubulação.

O processamento destes dados é realizado por algoritmos instalados na DRAGONBOARD 410c. Os dados também são enviados para um shërbimeve të reja, përgjigjja për ndihmën e një procesi të integruar Artificial nuk është bërë.

Este projeto foi desenvolvido no Hackaton Qualcomm, duam një TecnoFACENS da Faculdade de Engenharia de Sorocaba (FACENS), marrin pjesë në progreso os graduandos de engenharia mecatrônica Eneo Juliano Bovino, Felipe Xavier, Lucas de Suesa, Rucas Aprio Gomes Polo e Ronaldo P. Gomes Polo. Merrni pjesë në projektin tuaj të Daniel de Castro Pacheco gradualo de engenharia mecânica në Universidade Newton Paiva de Belo Horizonte. Për më tepër, ju mund të shkoni në shkallën e zhvillimit të mekanizmave të FACENS, Lucas Nunes Monteiro dhe Felipe Crispim da Silva Salvagnini.

Hapi 1: Lista e Materiais

Lista e Materieve
Lista e Materieve

Për të realizuar destinacionin tuaj, përdorni materiais për përdorim nga:

1 Arduino Due

1 Dragonboard 410c

2 Shoferë për motorin korrente Continua contendo Cada um:

4 Transistore BC548

4 Diodos 1n4007

4 Rezistente 4k7Ω ¼ W

1 Shofer para servo motor contendo:

1 Transistore BC548

1 Diodos 1N4007

1 Reziston 4k7Ω ¼ W

1 USB mouse

1 USB Teclado

1 Monitor

1 Cabo HDMI

1 Robô De Esteiras - Plataforma Zumo

1 Mini disponueshmëria e kremës dhe e zemrës

1 Servo motor 9g

Hapi 2: Adaptação Mecânica

Image
Image

Para një aquisição dos dados pelo sensor piezoelétrico, faz se needário, ose desenvolvimento de um disponimin e kompozimit të kremës, konformoj desenhos anexados, neste caso as peças foram fabricadas por uma de impressora 3D, devido ao fato tempo de execução, fixou-se o dispositivo na plataforma zumo, useizando fita dupla face, conforme vídeo.

Hapi 3: Acionamento Dos Motores

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

Për ekzekutimin e një lëvizjeje të motorëve do të bëjë robô ZUMO e do disponueshmërinë e kapjes, sigurohuni që të keni nevojë për shoferë paraprakisht për motorët e vazhdueshëm dhe të shoferit para ose servo motorit, në përputhje me figuras acima, dërgoni një figura kryesore ose shofer para um motor de corrente Continua ea segunda ose shofer para um servo motor.

Hapi 4: Obtenção Do Áudio

Për më shumë informacione që vijnë nga dridhjet e bëra solo, mund të përdorni nga disponueshmëria e të drejtave të TCC nga Engenharia Mecatrônica dos graduandos Lucas Nunes Monteiro e Felipe C. da Silva Salvagnini, maiores detalis soem itemas itemas soem itashes sobre obre o Trettuses soal subre email [email protected].

Ju mund të përdorni një sensor që përdoret për të krijuar një qarkullim që mund të realizojë një filtër dhe amplifikues të madhësisë.

Si frekuenca të interesit për projektin tuaj në hyrje në 100Hz dhe 800Hz. Përdorimi i ndjeshmërisë për konfigurimin e frekuencave të umës së amostragemit në 3 kHz para se të rifilloni si kushtet e teorema të amostragem de Nyquist, onde a frekuencave të ujërave deve estar pelo menos duasas frekuencave.

A aquisição é habilitada e desabilitada através da interrupção do Arduino DUKE.

Hapi 5: Configuração Do Arduino DUE (gjuhësia C)

Configuração Do Arduino DUE (gjuhësia C)
Configuração Do Arduino DUE (gjuhësia C)

Devido a grande quantidade de dados, cerca nga 3000 pontos por segundo, do të hyjë në 32 bit, në bazë të disponimit të ndjeshmërisë dhe nevojës për proceset e dozimit të algoritmos në DRAGONBOARD 410c, për përdorimin e Arduino DUE para fazës së përdorimit të një analize nga ne poder de processamento, është e nevojshme për ta përcaktuar atë Shield de interfaceamento Grove Seeed Sensor Mezzanine instalado në DRAGONBOARD 410c, që ka mundësi të ketë një mikrokontrollues ATmega 328, dhe nuk ka mundësi të përpunimit për esenë e operës.

O Arduino DUE foi konfigurimin për marrjen e sistemeve të përdorimit të platformës QUALCOMM DRAGONBOARD 410c nëpërmjet serialit të komunikimit.

As ações configuradas no foramë Arduino:

Realizar a aquisição dos dados;

Transmitir os dados obtidos para a DRAGONBOARD 410c;

Zgjidhni një program:

#përfshijë #përcakto Numb_Sample 3000 #përcakto DAC_Input A0

#përcaktoni SERVO 7

#përcaktoni PosServoMin 4 #përcaktoni PosServoMax 6 #përcaktoni Periudhën 60 të panënshkruar int Scont = 0, SNow = PosServoMin; i panënshkruar gjatë int DAC [Numb_Sample], ind = Numb_Sample; i pavlefshëm TC3_Handler () {TC_GetStatus (TC1, 0); nëse (ind <Numb_Sample) DAC [ind ++] = analogRead (DAC_Input); nëse (Scont

1); // Cikli i punës 50%

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

void setup ()

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

lak void ()

{/*// ndërsa (! Seriali i disponueshëm ()); char rc; // = Serial.lexo (); int indice = 0; nëse (rc == 0) {ndërsa (! Serial.disponueshëm ()); rc = Serial.read (); switch (rc) {case 1: indice = 0; ndërsa (! Serial. i disponueshëm ()); ndërsa ((rc = Serial.lex ())! = 0xFF) {indeksi << = 8; indeks += rc; ndërsa (! Serial. i disponueshëm ()); } Serial.print (0); Serial.print (2); SendNumber (DAC [indeksi]); Serial.print (0xFF); pushim; rasti 3: ndërsa (! Serial. i disponueshëm ()); nëse ((Serial.lex ()) == 0xFF) {SNow = PosServoMax; vonesë (500); ind = 0; // TC_Start (TC1, 0); ndërsa (ind <Numb_Sample); // TC_Stop (TC1, 0); SNow = PosServoMin; vonesë (500); Serial.print (0); Serial.print (4); Serial.print (0xFF); } pushim; }} tjetër nëse (rc == '2') {Serial.print ("Test Servo Motor / n"); ndërsa (! Serial. i disponueshëm ()); rc = Serial.read (); if (rc == '1') {Serial.print ("Mënyra 1 / n"); SNow = PosServoMax; } if (rc == '2') {Serial.print ("Modaliteti 2 / n"); SNow = PosServoMin; }} */ SNow = PosServoMax; vonesë (100); SNow = PosServoMin; vonesë (100); }

Hapi 6: Interfaceamento Das Tecnologias

Interfaceamento Das Tecnologias
Interfaceamento Das Tecnologias

Për një komunikim dos dados entre o Arduíno DUE e DRAGONBOARD 410c, mund të përdorni një ndërfaqe të figurave të përdorura, ose nëse nuk keni mundësi të përdorni ekzekutuesin, ose të përdorni opsionet e përdorimit të ndërfaqes USB CDC entre ose Arduino DUE e DRAGONBOARD 410 e domosdoshme për rekomandimin e KERNEL da DRAGONBOARD 410c, që nuk është e mundur të shkaktohet nga koha e shkurtër e shpërndarjes.

Hapi 7: Konfigurimi i DRAGONBOARD 410c (Python)

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

Foi konfiguron për mjedisin ose Arduino për shkak të realizimit të një sistemi të përcjelljes së një sistemi të transmetimit të një sistemi gjyqësor. Segue código abaixo.

Vëzhgim: Një përdorim i papërdorur nuk ka asnjë kuptim, nuk mund të përdorim më shumë se sa shumë mënyra për të përdorur përdoruesit e Arduíno DUE e o Mezzanine serem inkremíveis. Për më tepër, ju mund të përdorni një ndërfaqe USB, e cila është e nevojshme për t'u rekomanduar nga KERNEL dhe DRAGONBOARD 410c për të përcaktuar korrektimin e një porte fosse për një komunikim.

koha e importit importi serik i pandave si pd import numpy si np

# Konfigurimi serik

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

ser.isOpen ()

print ('Futni komandat tuaja më poshtë. / r / nFutni "exit" për të lënë aplikacionin.')

hyrje = 1

ndërsa 1: input = input (">>") nëse 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 dados coletados

lista =

për i në rang (3000):

ser.write (i/256) ser.write ((i <0: out = ser.read (2) nëse (jashtë == 0x0002): atual = 0 c = ser.lexim (1) ndërsa (c! = 0xFF): atual << 8 atual += cc = ser.lex (1) lista.append (atual)

Hapi 8: INTERPRETAÇÃO DOS ARQUIVOS DE AUDIO

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

Para se të kuptoni se çfarë do të thotë që ju mund të merrni një sensor, ju duhet të përdorni një format WAV, të mos i përdorni ato për TCC dhe colaboradores, të bëni para, për vlerat e numrave, për sa i përket përdorimit të nos algoritmosososososos neos 4. Me Para realizimit është një bisedë me të cilën do të flasim për PYTHON 3 që do të thotë se WAV dhe salva os dados do të shikojnë në CSV. Për më tepër, përdorni segue abaixo dhe em anexo para shkarko.

Për më tepër, është e nevojshme të përdorni një sistem për funksionimin tuaj, dhe kjo do të thotë që Arduino duhet të jetë një mjedis me ndihmën e një numri të vlerave numerike.

# kodimi: utf-8

# Leitura e conversão dos audios para csv

# MÓDULOS UTILIZADOS

valë importi import numpy si np import pandas si pd import matplotlib.pyplot si plt

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

def audio_to_csv (emri i skedarit): wave_file = wave.open (emri i skedarit+'. wav', 'rb') data_size = wave_file.getnframes () sample_rate = wave_file.getframerate () time_step = 1/sample_rate waveData = wave_file.readframes (të dhëna) sinjal = 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 (sinjal), pd. DataFrame (Koha)], boshti = 1) df.to_csv (emri i skedarit + '.csv', indeksi = False) kthimi df

# KORNIZA E TAT DHNAVE CARREGANDO COM OS DADOS DO AUDIO

emri i skedarit = 'Solo_com_Vazamento' df_vazamento = audio_to_csv (emri i skedarit) df_vazamento.columns = ['amp', 'koha'] file_name = 'Solo_sem_Vazamento' df_sem_vazamento = audio_to_csv '[file.name]

# GRÁFICO DO ESPECTRO DE AUDIO

figura, (ax1, ax2) = plt. nënshtresa (nrows = 2, ncols = 1, figsize = (20, 10)) ax1.plot (df_vazamento ['koha'], 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 ['koha'], 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 ()

Hapi 9: Análise Visual Do Sinal

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

Com o PYTHON 3 është një transformim i Furierit, kjo është një artizanal matematik i realizuar në një transformim në sinal do të bëjë një lëvizje të shpejtë në frekuencat e mëparshme, duke bërë analiza të ndryshme si frekuenca të ndryshme, e suas amplituda, si komponente aquele sinal. Konsideroni pamjen vizuale të grumbullimit të transformimit të Furierit nga profecionalizmi i koncecioneve të veçanta të identifikimit të një ekzistence të algum vazamento na tubulação. Estes gráficos servirão para validação das análises realizadas pelo algoritmo de detecção automática.

Kufizoni frekuencat e hyrjes në 100Hz dhe 800Hz, mund të shihni një rritje të vazhdueshme në vëzhgimin e distancave të ndryshme të frekuencave.

# kodimi: utf-8# Përdorimi i proceseve për transformimin e Furierit

panda të importuara si pd import numpy si np valë importi nga matplotlib import pyplot si plt# Função que realiza a transformada de Fourier e plota os gráficos para análise def Fourier (df_list): Fs = 44100; # Taxa de amostragem em Hz Ts = 1.0/Fs; # Intervalo e amostragemit y = pd.concat (df_list) t = y ['koha'] # Vetor de tempos y = y ['amp'] # Vet amplitudat n = len (y) # Kompromento për sinalin k = np. arange (n) T = n/Fs frq = k/T frq = frq [diapazoni (n // 2)] Y = np.fft.fft (y)/n Y = Y [diapazoni (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. nënshtron (2, 1, figsize = (20, 10)) ax [0]. komplot (t, y) ax [0].set_xlabel ('Koha') 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.shfaq () frq, abs (Y)# Função que realiza a carga dos dados do CSV dhe chama a função de Fourier def read_csv (emri i skedarit, fill, përfundimtar): df = pd.read_csv (emri i skedarit + '.csv') df.columns = ['amp', ' koha '] delta = final-init nëse init*44100> len (df) ose final*44100> len (df): init = (len (df)/44100) -delta if init = 100) & (df [' freq '] <= 800)] mx = renditur (df [' amp ']) print ("Média das amplitudes:", np.round (np.mean (mx))) print ("Percentuais em relação a média das amplitudes.") print ("100 maiores amplitudes", np.kuptim (mx [-100:) ['amp']. mesatarja ()*100, "%", sep = "") print ("amplitudat 10 maiores:", np.kuptimi (mx [-10:]) // df ['amp'] do të thotë ()*100, "%", sep = "") print ("Amplituda më e madhe:", np. do të thotë (mx [-1:]) // df ['amp']. do të thotë ()*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

Hapi 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

Shfrytëzoni të dhënat tona për zbatimin e veçorive të veçanta të karakteristikave (karakteristikave) të dosos obtidos.

Për më tepër, ju mund të kuptoni se si të identifikoheni, kur është e nevojshme të vendosni se si të arrini një metodë të zbulimit ose zbulimit të një sistemi të tillë, është e mundur që ju të përdorni një shërbim paraprak ose treinamento të ri të përdorimit neural.

Për një sistem që përdoret në modalitetin e operimit në të gjitha mënyrat e tjera të zbatimit, ne nuk kemi arritur në një mënyrë shtesë për një identifikim, për një arsye të veçantë si karakteristika të veçanta të një identiteti.

Karakteristikat e ou caraterísticas são propriedades acústicas compostas por varias informacões referentes ao espectro de áudio capturado, abaixo seguirá uma descrição (em inglês) destas Karakteristikat.

Konsideroni një fazë të pjesës së umetit të shpërndarjes së GitHub dhe kodit për të hyrë në lidhjen e duhur, ose mesazhe për modifikimin paraprakisht si specifikime të veçanta.

Përdorimi i programeve kompjuterike për një përdorim falas, shkarkoni nga interpretuesi R e do R Studio.

Karakteristikat shtesë:

  • meanfreq: frekuenca mesatare (në kHz)
  • sd: devijimi standard i frekuencës
  • mesatare: frekuenca mesatare (në kHz)
  • Q25: kuantili i parë (në kHz)
  • Q75: kuantili i tretë (në kHz)
  • IQR: diapazoni ndërkuantil (në kHz)
  • lakim: lakim (shiko shënimin në përshkrimin specprop)
  • kurt: kurtosis (shiko shënimin në përshkrimin specprop)
  • sp.ent: entropi spektrale
  • sfm: rrafshim spektral
  • mënyra: frekuenca e modalitetit
  • centroid: frekuenca centroid (shiko specprop)
  • pikf: frekuenca e pikut (frekuenca me energjinë më të lartë)
  • meanfun: mesatarja e frekuencës themelore të matur përgjatë sinjalit akustik
  • minfun: frekuenca minimale themelore e matur përgjatë sinjalit akustik
  • maxfun: frekuenca maksimale themelore e matur përgjatë sinjalit akustik
  • meandom: mesatarja e frekuencës dominuese të matur përgjatë sinjalit akustik
  • mindom: minimumi i frekuencës dominuese të matur përgjatë sinjalit akustik
  • maxdom: maksimumi i frekuencës dominuese të matur përgjatë sinjalit akustik
  • dfrange: diapazoni i frekuencës dominuese të matur përgjatë sinjalit akustik
  • modindx: indeksi i modulimit. Llogaritur si diferenca absolute e grumbulluar midis matjeve ngjitur të frekuencave themelore të ndara me gamën e frekuencës
  • etiketë: rrjedhje ose pa_ rrjedhje

Përdorimi i Algoritmo:

paketat <- c ('tuneR', 'seewave', 'fftw', 'caTools', 'randomForest', 'warbleR', 'minj', 'e1071', 'rpart', 'xgboost', 'e1071') nëse (gjatësia (setdiff (paketat, emrat e emrave (të instaluar.paketat))))> 0) {install.packages (setdiff (paketat, emrat e emrave (të instaluar. paketat ())))))}

biblioteka (tuneR)

biblioteka (seewave) biblioteka (caTools) biblioteka (rpart) biblioteka (rpart.plot) biblioteka (randomForest) biblioteka (warbleR) biblioteka (minjtë) biblioteka (xgboost) biblioteka (e1071)

specan3 <- funksioni (X, bp = c (0, 22), wl = 2048, pragu = 5, paralel = 1) { # Për të përdorur përpunimin paralel: bibliotekë (devtools), install_github ('nathanvan/parallellsugar') nëse (klasa (X) == "data.frame") {nëse (të gjitha (c ("sound.files", "selec", "start", "end") % në % kolonave (X))) {start <- as.numerike (pa list (X $ fillimi)) fund <- si.numerik (unlist (X $ fund)) tinguj.fajle <- si.karakter (pa list (X $ sound.files)) selec <- si.karakter (unlist (X $ selec))} tjetër stop (ngjit (ngjit (c ("sound.files", "selec", "start", "end") [! (c ("sound.files", "selec", "fillimi", "përfundimi") % në % kolonave (X))], kolaps = ","), "kolona (t) nuk gjenden në kornizën e të dhënave"))} tjetër stop ("X nuk është një kornizë e të dhënave") #nëse ka NA në fillimin ose mbarimin e ndalimit nëse (ndonjë (is.na (c (fundi, fillimi)))) stop ("NA që gjenden në fillim dhe/ose në fund") #nëse fundi ose fillimi nuk janë ndalesa numerike në qoftë se (të gjitha (klasa (fundi)! = "numerike" & klasa (fillimi)! = "numerike")) stop ("" fundi "dhe" selec "duhet të jenë numerike") #nëse ndonjë fillim më i lartë se fundi ndalues nëse (çdo (fund - fillim <0)) stop (paste ("Fillimi është më i lartë se en d në ", gjatësia (e cila (fundi - fillimi20)) ndalimi (ngjitja (gjatësia (e cila (fundi - fillimi> 20))," përzgjedhja (s) më e gjatë se 20 sekonda ")) opsionet (shfaqja.error.messages = TRUE) #nëse bp nuk është vektor ose gjatësi! = 2 ndalesë nëse (! është.vektor (bp)) stop ("'bp' duhet të jetë një vektor numerik i gjatësisë 2") tjetër {nëse (! gjatësia (bp) == 2) stop ("'bp' duhet të jetë një vektor numerik i gjatësisë 2")} #paralajmërim kthimi nëse nuk gjenden të gjithë skedarët zanorë fs <- list.files (path = getwd (), model = ".wav $", injoroj. rasti = E VUERTET (nëse) skedarë))-gjatësia (unike (tingujt.fajlet [(tingujt.fajlat % në % fs)]))), ".wav file (t) nuk u gjetën")) #numri i numrit të skedarëve të zërit në drejtorinë e punës dhe nëse 0 ndalesa d <- e cila (sound.files % në % fs) nëse (gjatësia (d) == 0) {stop ("Skedarët.wav nuk janë në drejtorinë e punës")} tjetër {start <- fillo [d] fund <- fund [d] selec <- selec [d] sound.files <- sound.files [d]} # Nëse paralelja nuk është numerike nëse (! është. numerike (paralele)) ndalet ("'paralele' duhet të jetë një vektor numerik i gjatësisë 1 ") nëse (ndonjë (! (paralel %% 1 == 0), paralel 1) {opsionet (paralajmëro = -1) nëse (të gjitha (Sys.info () [1] ==" Windows ", kërkon [1] == "Windows") {cat ("Përdoruesit e Windows duhet të instalojnë paketën 'parallellsugar' për llogaritjen paralele (nuk po e bëni tani!)")) Lapp <- pbapply:: pblapply} tjetër lapp <- funksion (X, FUN) paralel:: mclapply (X, FUN, mc.cores = paralel)} else lapp <- pbapply:: pblapply options (warning = 0) if (paralel == 1) cat ("Matja e parametrave akustikë:") x <- as.data.frame (lapp (1: gjatësia (fillimi), funksioni (i) {r <- tuneR:: readWave (file.path (getwd (), sound.files ), nga = fillo , deri = në fund , njësi = "sekonda") b tavan ([email protected]/2000) - 1) b [2] < - tavan ([email protected]/2000) - 1 analiza e spektrit #frekuencë [email protected], flim = c (0, 280/1000), plot = FALSE) #ruaj parametrat meanfreq <- analiza $ mesatare/1000 sd <- analiza $ sd/1000 mesatare <- analiza $ mesatare/1000 Q25 < - analiza $ QQ75 <- analiza $ QIQR <- analiza $ IQR/1000 skew <- analiza $ skewness kurt <- analiza $ kurtosis sp.ent <- analiza $ sh sfm <- analiza $ sfm mode <- analiza $ mode/1000 centroid <- analiza $ cent/1000 #Frekuenca me majat e amplitudës pikf <- 0 #seewave:: fpeaks (songspec, f = [email protected], wl = wl, nmax = 3, plot = FALSE) [1, 1] #Parametrat bazë të frekuencës ff <- seewave:: fondi (r, f = [email protected], ovlp = 50, pragu = pragu, fmax = 280, ylim = c (0, 280/1000), komploti = FALSE, wl = wl) [, 2] meanfun <-mean (ff, na.rm = T) minfun <-min (ff, na.rm = T) maxfun <-max (ff, na.rm = T) #Parametrat dominues të frekuencës y <- seewave:: dfreq (r, f = [email protected], wl = wl, ylim = c (0, 280/1000), ovlp = 0, plot = F, pragu = pragu, bandpass = b * 1000, fftw = E VRTET) [, 2] meandom <- do të thotë (y, na.rm = TRUE) mindom <- min (y, na.rm = TRUE) maxdom <- max (y, na.rm = TRUE) dfrange <- (maxdom- mindom) kohëzgjatja <- (fund - fillimi ) #llogaritja e indeksit të modulimit ndryshon <- vektori () për (j në të cilin (! është na (y))) {ndryshim <- abs (y [j]- y [j + 1]) ndryshime <- shtoj (ndryshon, ndryshoj)} nëse (mindom == maxdom) modindx <-0 tjetër modindx <- do të thotë (ndryshimet, na.rm = T)/dfrange #ruaj rezultatet kthehen (c (kohëzgjatja, mesatarja e frekuencës, sd, mesatarja, Q25, Q75, IQR, shtrembërimi, shkurtimi, sp.ent, sfm, modaliteti, centroid, peakf, meanfun, minfun, maxfun, meandom, mindom, maxdom, dfrange, modindx))})) #ndryshimi i rezultateve emrat e emrave (x) <- c ("kohëzgjatja", "meanfreq", "sd", "mesatar", "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))) kolonave (x) [1: 2] <- c ("sound.files", "selec") rownames (x) <- c (1: nrow (x)) return (x)}

processFolder <- funksioni (emri i dosjes) { # Filloni me data.frame të zbrazëta. të dhëna <- data.frame () # Merrni listën e skedarëve në dosje. lista <- list.files (folderName, '\. wav') # Shto listën e skedarëve në data.frame për përpunim. për (emri i skedarit në listë) {rreshti <- data.frame (emri i skedarit, 0, 0, 20) të dhënat <- rbind (të dhënat, rreshti)} # Vendosni emrat e kolonave emrat (të dhënat) <- c ('sound.files', 'selec', 'start', 'end') # Kalo në dosje për përpunim. setwd (Emri i dosjes) # Skedarët e procesit. akustikë <- specan3 (të dhëna, paralele = 1) # Kalo përsëri në dosjen mëmë. akustikë setwd ('..')}

gjinia <- funksioni (filePath) {nëse (! ekziston ('genderBoosted')) {load ('model.bin')} # Shtigjet e konfigurimit. currentPath <- getwd () fileName <- basename (filePath) path <- dirname (filePath) # Vendos direktorinë për të lexuar skedarin. setwd (shteg) # Filloni me të dhëna boshe.kuadër. të dhëna <- data.frame (Emri i skedarit, 0, 0, 20) # Vendosni emrat e kolonave. emrat (të dhënat) <- c ('sound.files', 'selec', 'start', 'end') # Skedarët e procesit. akustikë <- specan3 (të dhëna, paralele = 1) # Rivendos shtegun. setwd (currentPath) parashikoj (gjinia Combo, newdata = akustikë)}

# Ngarko të dhënat

rrjedhje <- processFolder ('caminho para o pasta com sample de áudio com vazamento') without_leakage <- processFolder ('caminho para o makarona com mostra de áudio sem vazamento')

# Vendosni etiketa.

$ label label <- 1 label_leakage $ label <- 2 të dhëna <- rbind (rrjedhje, pa_rjedhje) të dhëna $ label <- faktor (të dhëna $ label, etiketa = c ('rrjedhje', 'pa_leakage'))

# Hiq kolonat e papërdorura.

të dhënat $ kohëzgjatja <- të dhënat NULL $ sound.files <- të dhënat NULL $ selec <- të dhënat NULL $ peakf <- NULL

# Hiq rreshtat që përmbajnë NA.

të dhëna <- të dhëna [të plota. raste (të dhëna),]

# Shkruani të dhënat e të dhënave csv.

write.csv (të dhënat, skedari = 'features.csv', sep = ',', row.names = F)

Hapi 11: Rilidhni Neural

Rede Neural
Rede Neural

Një ide për përdorimin e uma të sistemit nervor, është një realizim i një rikthimi të automatizuar të através dos dados coletados pelo dispositivo de sensoriamento.

Një përdorim nervor që përdoret për të bërë MLP (Perceptuesi me shumë shtresa), ka një model që është paraparë me identifikimin e një modeli të implantuar pa një sistem konseguir dhe realizimin e një identifikimi automatik të automjeteve për marrjen përfundimtare, informacionin dhe informacionin se si naqueum neoumeum.

Foi e nevojshme për realizimin e 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 realizoi nenhuma abordagem estatística muito aprofundada, mas mesmo com um trabalho mais sipërfaqësore pode-se chegar a algumas variáveis com bons desempenhos.

Para se të testoni realizimin e modelit të parë që do të thotë se do të arrini, ju mund të kontrolloni më së miri nga taksat tuaja në 100%, duke përdorur kodin për vëzhgimin e imazhit të mëparshëm.

Konsideroni një përdorim për treinarin ose modelin e bërë për një retornar të taksave nga acerto do mesmo. Nuk ka sistem të zbulimit të të gjitha llojeve të ndryshme të përdorimit të serisë, ju mund të kuptoni se si të arrini një model ose një model të ri që mund të kuptoni se si të realizoni paraprakisht.

# kodimi: utf-8

importoni pandat si pd

import numpy si np nga sklearn.model_selection import tren_test_split si tts nga sklearn.neural_network import MLPClassifier si MLP nga sklearn.metrics import classification_report si cr nga sklearn.metrics import confusion_matrix si 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 si 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 (alfa = 0.0001, niveli_ i mësimit_init = 0.0001, madhësitë e fshehura të shtresës = (50, 50, 50, 50), max_iter = 10000, aktivizimi = 'tanh', zgjidhësi = 'lbfgs')

# Treinando model

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

# Imprimindo resultados

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

Recommended: