جدول المحتويات:

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

فيديو: Sistema Autônomo Localizador De Vazamentos: 11 Steps

فيديو: Sistema Autônomo Localizador De Vazamentos: 11 Steps
فيديو: Виджай Кумар: Роботы, которые летают и работают… вместе 2024, شهر نوفمبر
Anonim
Sistema Autônomo Localizador De Vazamentos
Sistema Autônomo Localizador De Vazamentos

Este projeto تتكون من الروبوت ، que através da leitura realizada por umpositivo، equipado com um sensor piezoelétrico، captura os espectros das vibrações no solo، pode identificar e localizar، com o processo dos dados por uma rede neural، pososíveis vazua أوما tubulação.

يا عملية تقضي على dados é realizado por algoritmos instalados na DRAGONBOARD 410c. Os dados também são enviados para um serviço na nuvem ، استجابة من مساعدة بدون معالجة متكاملة.

Este projeto foi desenvolvido no Hackaton Qualcomm، durante a TecnoFACENS da Faculdade de Engenharia de Sorocaba (FACENS) ، أحد المشاركين في المشروع الذي يعمل بنظام التشغيل engenharia mecatrônica Eneo Juliano Bovino ، Felipe Xavier ، Lucas de Souséo Rodrigues. جوميز بولو ورونالدو ب. جوميز بولو. شارك تامبي في مشروع ألونو دانيال دي كاسترو باتشيكو خريج الهندسة الميكانيكية في جامعة نيوتن بايفا دي بيلو هوريزونتي. أو بروجيتو كونتو كومبوريو دوس ستريندوس دي إنجنهارا ميكاترونيكا دا فاكينز ، لوكاس نونيس مونتيرو وفيليبي كريسبيم دا سيلفا سالفانيني.

الخطوة 1: Lista De Materiais

Lista De Materiais
Lista De Materiais

الفقرة الواقعية للمشروع ، نظام التشغيل seguintes materiais foram utilizados:

1 اردوينو ديو

1 دراغون بورد 410 ج

2 السائقين:

4 الترانزستورات BC548

4 ثنائيات 1n4007

4 يقاوم 4k7Ω ¼ W

1 سائق لواجب محرك سيرفو:

1 الترانزستورات BC548

1 ديودوس 1N4007

1 يقاوم 4k7Ω ¼ W

عدد 1 ماوس USB

1 Teclado USB

1 شاشة

1 كابو HDMI

1 روبو دي إستيراس - بلاتافورما زومو

1 جهاز صغير للصناعة الإلكترونية

1 محرك سيرفو 9 جرام

الخطوة 2: Adaptação Mecânica

Image
Image

Para a aquisição dos dados pelo sensor piezoelétrico، faz se الضرورة، o desenvolvimento de um detitivo com pinhão e cremalheira، developere desenhos anexados، neste caso as peças foram fabricadas por uma impressora 3D، devido ao de umato tempo de execução، fixou-se o detitivo na plataforma zumo، useizando fita dupla face، concée vídeo.

الخطوة 3: Acionamento Dos Motores

Obtenção هل الصوت
Obtenção هل الصوت

تنفيذي متحرك يعمل بمحركات روبو ZUMO e do Dispositivo de Capura، fez-se الضرورة a montagem de dois driver para os motores de corrente CONTINUA e um driver para o servo motor ، um motor de corrente Continua ea segunda o driver para um محرك سيرفو.

الخطوة 4: Obtenção Do udio

Para obtenção do espectro de áudio das vibrações do solo، foi utilizado um detitivo desenvolvido como parte do TCC de Engenharia Mecatrônica dos graduandos Lucas Nunes Monteiro e Felipe C. da Silva Salvagnini، maiores detalhes sobre o TCC أرسل بريدًا إلكترونيًا إلى [email protected].

يستخدم جهاز الاستشعار الخاص بك جهاز استشعار piezoelétrico e uma placa de circo que realiza a filtragem e amplificação do sinal.

كترددات من بين النتوءات عبر المشاريع التي تصل إلى 100 هرتز e 800 هرتز. الفقرة هي حالة جهاز الاستشعار لتكوين الترددات التي تصل إلى 3 كيلوهرتز للرجوع إلى قائمة الانتظار كما هو الحال في حالة عدم التردد في Nyquist ، على الترددات التي يتم إجراؤها من خلال قوائم الترددات.

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

الخطوة 5: Configuração Do Arduino DUE (linguagem C)

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

Devido a grande quantidade de dados، cerca de 3000 pontos por segundo، do tipo inteiro de 32 bits، gerados pelo detitivo de sensoriamento e mustários para processamento dos algoritmos na DRAGONBOARD 410c، foi utilizado o Arduino DUE para fazer uso de uino من الضروري توفير الحماية للواجهة من مستشعر رؤية البستان الميزانين الموجود على لوحة DRAGONBOARD 410c ، بما في ذلك إمكانية التحكم الدقيق في ATmega 328 ، يمكنك إجراء عملية الوصول إلى العمليات الأساسية.

O Arduino DUE foi configurado إلى جهاز استقبال يعمل بنظام التشغيل comandos enviados da plataforma QUALCOMM DRAGONBOARD 410c عبر comunicação المسلسل.

كتكوين ações no Arduino foram:

Realizar aquisição dos dados ؛

إرسال نظام تشغيل dados للحصول على DRAGONBOARD 410c ؛

اشترك في برنامج:

# include # حدد Numb_Sample 3000 #define DAC_Input A0

#define SERVO 7

#define PosServoMin 4 # حدد PosServoMax 6 # فترة تعريف 60 بدون إشارة int Scont = 0 ، SNow = PosServoMin ؛ DAC طويل بدون إشارة [Numb_Sample] ، ind = Numb_Sample ؛ باطل TC3_Handler () {TC_GetStatus (TC1، 0) ؛ إذا (ind <Numb_Sample) DAC [ind ++] = analogRead (DAC_Input) ؛ إذا كان (Scont

1) ؛ // 50٪ دورة عمل

TC_SetRC (ح ، قناة ، RC) ؛ TC_Start (ح ، قناة) ؛ tc-> TC_CHANNEL [قناة]. TC_IER = TC_IER_CPCS | TC_IER_CPAS ؛ // habilita os registradores tc-> TC_CHANNEL [قناة]. TC_IDR = ~ (TC_IER_CPCS | TC_IER_CPAS) ؛ // desabilita os registradores NVIC_EnableIRQ (irq) ؛ // habilita interrupção}

الإعداد باطل ()

{Serial.begin (115200) ؛ pinMode (DAC_Input ، INPUT) ؛ TimerStart (TC1، 0، TC3_IRQn، 1500) ؛ // Init the Timer // TC_Stop (TC1، 0) ؛ pinMode (SERVO ، الإخراج) ؛ }

حلقة فارغة()

{/ * // while (! Serial.available ()) ؛ char rc ؛ // = Serial.read () ؛ مؤشر int = 0 ؛ إذا (rc == 0) {while (! Serial.available ()) ؛ rc = Serial.read () ، التبديل (rc) {الحالة 1: المؤشر = 0 ؛ بينما (! Serial.available ()) ؛ while ((rc = Serial.read ())! = 0xFF) {indice << = 8 ؛ مؤشر + = RC ؛ بينما (! Serial.available ()) ؛ } Serial.print (0) ، Serial.print (2) ؛ SendNumber (DAC [مؤشر]) ؛ Serial.print (0xFF) ؛ استراحة؛ الحالة 3: while (! Serial.available ()) ؛ إذا ((Serial.read ()) == 0xFF) {SNow = PosServoMax ؛ تأخير (500) ؛ ind = 0 ؛ // TC_Start (TC1، 0) ؛ بينما (ind <Numb_Sample) ؛ // TC_Stop (TC1، 0) ؛ ثلج = PosServoMin ؛ تأخير (500) ؛ Serial.print (0) ؛ Serial.print (4) ؛ Serial.print (0xFF) ؛ } استراحة؛ }} else if (rc == '2') {Serial.print ("Test Servo Motor / n")؛ بينما (! Serial.available ()) ؛ rc = Serial.read () ، إذا (rc == '1') {Serial.print ("الوضع 1 / n") ؛ ثلج = PosServoMax ؛ } if (rc == '2') {Serial.print ("الوضع 2 / n")؛ ثلج = PosServoMin ؛ }} * / SNow = PosServoMax ؛ تأخير (100) ؛ ثلج = PosServoMin ؛ تأخير (100) ؛ }

الخطوة 6: Interfaceamento Das Tecnologias

Interfaceamento Das Tecnologias
Interfaceamento Das Tecnologias

الفقرة a comunicação do dados entre o Arduíno DUE ea ea DRAGONBOARD 410c، inicialmente useizou-se a interface da figura acima، o que não foi allow installar، então-se pelo uso de uma interface USB CDC entre o Arduino DUE ea DRAGONBO من الضروري أن يتم إعادة تشغيل KERNEL da DRAGONBOARD 410c، que não se fez por reasona do curo tempo disponível.

الخطوة 7: تكوين Da DRAGONBOARD 410c (Python)

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

تهيئة البيانات إلى بيئة Arduino DUE os comandos para realizar aquisição de dados e transmitir os dados getidos. Segue código abaixo.

المراقبة: استخدام أبورداجيم لا كوديجو ، غير مناسب للاستخدام. بالنسبة إلى واجهة USB ، يلزم الأمر إعادة تجميعها على لوحة DRAGONBOARD 410c للحصول على لوحة مفاتيح رقمية.

استيراد الباندا وقت الاستيراد التسلسلي الاستيراد كما pd استيراد numpy مثل np

# Configuração da conexão المسلسل

ser = serial. Serial (المنفذ = '/ dev / ttyAMC0' ، # tty96B0 '، معدل الباود = 250000 ، التكافؤ = serial. PARITY_NONE ، stopbits = serial. STOPBITS_ONE ، bytesize = serial. EIGHTBITS)

ser.isOpen ()

طباعة ('أدخل أوامرك أدناه. / r / n أدخل "خروج" لمغادرة التطبيق.')

الإدخال = 1

while 1: input = input (">>") if input == 'exit': ser.close () exit () إدخال elif == '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 =

في النطاق (3000):

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

الخطوة 8: INTERPRETAÇÃO DOS ARQUIVOS DE AUDIO

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

Para poder realizar uma primeira análise dos dados getidos através do sensor، se fez mustária a convertão dos arquivos no formato WAV، fornecidos pelos alunos autores do TCC e colaboradores do projeto، para valores numéricos 410. الفقرة الواقعية هي تحويل لإسكريتو خوارزمية لبايثون 3 كيو لوجيكيفو WAV وسلفا وأبوين لا يتعاملون مع ملف CSV. O algoritmo useizado segue abaixo e em anexo para download.

يجب أن يكون الأمر كذلك بالنسبة للوظائف التي يجب القيام بها ، كما يجب أن يكون الأمر كذلك بالنسبة إلى Arduino DUE في البيئة المحيطة بالأطفال والمجموعة من القيم الرقمية.

# الترميز: utf-8

# Leitura e Conversão dos audios para csv

# MDULOS UTILIZADOS

استيراد موجة استيراد numpy كما np استيراد الباندا كما pd import matplotlib.pyplot as plt

# FUNÇÃO PARA CONVERTER 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)) الإشارة = np.fromstring (waveData، dtype = 'int32') الوقت = np.linspace (البداية = 0 ، التوقف = data_size / sample_rate ، num = data_size ، endpoint = True) df = pd.concat ([pd. DataFrame ([إشارة) ، pd. DataFrame (الوقت)] ، المحور = 1) df.to_csv (اسم_الملف + '.csv' ، الفهرس = خطأ) إرجاع df

# إطار بيانات CARREGANDO COM OS DADOS قم بتشغيل الصوت

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) dfazamento =

# GRÁFICO DO ESPECTRO DE AUDIO

الشكل ، (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 = {'Fontize': 20، 'fontweight': 'bold'}) ax1.set_xlabel ('Tempo [s]'، fontdict = {'Fontize': 16}) ax1.set_ylim ([-4e8، 4e8]) ax2.plot (df_sem_vazamento ['time']، df_sem_vazamento ['amp']) ax2.set_title ('Solo sem Vazamento'، fontdict = {'linesize': 20، 'fontweight': 'bold' }) ax2.set_xlabel ('Tempo [s]'، fontdict = {'Fontize': 16}) ax2.set_ylim ([- 4e8، 4e8]) figure.tight_layout (h_pad = 5) plt.show ()

الخطوة 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 é 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 posível analisar as varias Frequências، e suas amplitude، que compõem aquele sele. Pela análise visual do gráfico da transformada de Fourier um profissional com conhecimentos específicos poderá specíficos 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.

الحد من الترددات التي تصل إلى 100 هرتز e 800 هرتز ، مراقبة مدى تواجد الترددات.

# الترميز: UTF-8 # Módulos utilizados para processamento da transformada de Fourier

استيراد الباندا مثل pd import numpy مثل np import wave from matplotlib import pyplot as 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 de amostragem y = pd.concat (df_list) t = y ['time'] # Vetor de tempos y = y ['amp'] # Vetor de السعات 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 [النطاق (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 ('الوقت') 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) # 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'، ' time '] delta = final-init إذا كان init * 44100> len (df) أو نهائي * 44100> len (df): init = (len (df) / 44100) -delta if init = 100) & (df [' freq '] <= 800)] mx = تم الترتيب (df [' amp ']) طباعة ("سعة Média das:"، np.round (np.mean (mx))) طباعة ("Percentuais em relação a média das amplitude.") print ("100 maiores amplitude"، np.mean (mx [-100:]) // df ['amp']. يعني () * 100، "٪"، sep = "") طباعة ("سعة 50 ميوريس:"، np.mean (mx [-50:]) // df ['amp']. يعني () * 100، "٪"، sep = "") print ("10 maiores سعة:"، np.mean (mx [-10:]) // df ['amp']. يعني () * 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

الخطوة 10: Algoritmo Em R Para Extração Das يتميز Dos Dados

Algoritmo Em R Para Extração Das يتميز Dos Dados
Algoritmo Em R Para Extração Das يتميز Dos Dados
Algoritmo Em R Para Extração Das يتميز Dos Dados
Algoritmo Em R Para Extração Das يتميز Dos Dados

Utilizou-se um algoritmo em R para realizar o processo e extração das features (características) dos dados getidos.

Este primeiro algoritmo realiza uma extração identificada، onde é implário saber se o arquivo de áudio trata-se uma amostra vazamento detado ou não، isso por que os dados resultantes desse processo servirão para o treinamento da rede neural utilizada o treinamento da rede neural utilizada.

الفقرة التي تشير إلى أنها طريقة عمل ، يمكن اعتبارها طريقة عمل خاصة بها.

ميزات Estas ou 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.

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 especificações do projeto.

O Software usado para rodar o algoritmo é free، download do Interpretador R e do R Studio.

Características extraídas:

  • متوسط التردد: متوسط التردد (كيلوهرتز).
  • sd: الانحراف المعياري للتردد
  • الوسيط: متوسط التردد (كيلوهرتز)
  • Q25: الكمية الأولى (بالكيلوهرتز)
  • Q75: الكمية الثالثة (كيلوهرتز)
  • IQR: المدى البيني (بالكيلو هرتز)
  • الانحراف: الانحراف (انظر الملاحظة في وصف المواصفات)
  • كورت: التفرطح (انظر الملاحظة في وصف المواصفات)
  • sp.ent: الانتروبيا الطيفية
  • sfm: التسطيح الطيفي
  • الوضع: تردد الوضع
  • النقطه الوسطى: النقطه الوسطى التردد (انظر المواصفات)
  • الذروة: تردد الذروة (التردد مع أعلى طاقة)
  • meanfun: متوسط التردد الأساسي المقاس عبر الإشارة الصوتية
  • minfun: التردد الأساسي الأدنى المقاس عبر الإشارة الصوتية
  • maxfun: أقصى تردد أساسي يقاس عبر الإشارة الصوتية
  • المتوسط: متوسط التردد السائد المقاس عبر الإشارة الصوتية
  • mindom: الحد الأدنى من التردد السائد المقاس عبر الإشارة الصوتية
  • maxdom: الحد الأقصى للتردد السائد المقاس عبر الإشارة الصوتية
  • dfrange: مدى التردد السائد المقاس عبر الإشارة الصوتية
  • modindx: مؤشر التعديل. يُحسب على أنه الفرق المطلق المتراكم بين القياسات المتجاورة للترددات الأساسية مقسومًا على مدى التردد
  • التسمية: تسرب أو بدون تسرب

Algoritmo usado:

الحزم <- c ('tuneR'، 'seewave'، 'fftw'، 'caTools'، 'randomForest'، 'warbleR'، 'mice'، 'e1071'، 'rpart'، 'xgboost'، 'e1071') إذا (length (setdiff (bundles، rownames (install.packages ())))> 0) {install.packages (setdiff (package، rownames (install.packages ())))}

مكتبة (tuneR)

مكتبة (seewave) مكتبة (caTools) مكتبة (rpart.plot) مكتبة (randomForest) مكتبة (warbleR) مكتبة (الفئران) مكتبة (xgboost) (e1071)

specan3 <- function (X، bp = c (0، 22)، wl = 2048، عتبة = 5، متوازي = 1) {# لاستخدام المعالجة المتوازية: مكتبة (devtools)، install_github ('nathanvan / parallelsugar') إذا (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)) حدد <- as.character (unlist (X $ selec))} else stop (لصق (لصق (c ("sound.files"، "selec"، "start"، "end") [! (c ("sound.files"، "selec"، "start"، "end")٪ in٪ colnames (X))]، collapse = "،")، "العمود (الأعمدة) غير موجود في إطار البيانات"))} وإلا توقف ("X ليس إطار بيانات") # إذا كانت هناك NAs في البداية أو النهاية ، إذا كانت (أي (is.na (c (end ، start)))) توقف ("NAs موجودة في البداية و / أو النهاية") #if end أو start ليست توقفًا رقميًا if (all (class (end)! = "numeric" & class (start)! = "numeric")) stop ("'end' and 'selec' يجب أن تكون رقمية") #if أي بداية أعلى من نقطة النهاية إذا (any (end - start <0)) stop (لصق ("البداية أعلى من en d in "، length (الذي (end - start20)) يتوقف (لصق (الطول (الذي (نهاية - البداية> 20))) ، خيارات" التحديد (التحديدات) أطول من 20 ثانية ") (show.error.messages = TRUE) #if bp ليست متجهًا أو طولًا! = 2 توقف إذا (! is.vector (bp)) توقف ("يجب أن يكون 'bp' متجهًا رقميًا بطول 2") وإلا {if (! length (bp) == 2) stop ("يجب أن يكون 'bp' متجهًا رقميًا بطول 2")} # تحذير العودة إذا لم يتم العثور على جميع ملفات الصوت fs <- list.files (path = getwd ()، pattern = ".wav $"، ignore.case = TRUE) إذا (length (unique (sound.files [(sound.files٪ in٪ fs)]))! = length (unique (sound.files))) cat (لصق (طول (فريد (صوت. files)) - length (فريد (sound.files [(sound.files٪ in٪ fs)])) ، "ملف (ملفات) wav غير موجود")) # عدد ملفات الصوت في دليل العمل وإذا توقف 0 d <- أي (sound.files٪ in٪ fs) if (length (d) == 0) {stop ("ملفات.wav ليست في دليل العمل")} وإلا {start <- start [d] end <- end [d] selec <- selec [d] sound.files <- sound.files [d]} # إذا لم يكن متوازيًا رقميًا إذا كان (! is.numeric (متوازيًا)) توقف ("يجب" متوازي " يكون متجهًا رقميًا بطول 1 ") إذا (أي (! (متوازي ٪٪ 1 == 0) ، متوازي 1) {options (warn = -1) if (all (Sys.info () [1] ==" Windows "، needNamespace (" parallelsugar "، quietly = TRUE) == TRUE)) lapp <- function (X، FUN) parallelsugar:: mclapply (X، FUN، mc.cores = متوازي) وإلا إذا (Sys.info () [1] == "Windows") {cat ("يحتاج مستخدمو Windows إلى تثبيت حزمة 'parallelsugar' للحوسبة المتوازية (أنت لا تفعل ذلك الآن!)") lapp <- pbapply:: pblapply} else lapp <- function (X، FUN) متوازي:: mclapply (X، FUN، mc.cores = متوازي)} else lapp <- pbapply:: pblapply options (warn = 0) if (المتوازي == 1) cat ("قياس المعلمات الصوتية:") x <- as.data.frame (lapp (1: length (start)، function (i) {r <- tuneR:: readWave (file.path (getwd ()، sound.files ) ، from = البدء ، إلى = النهاية ، الوحدات = "ثوانٍ") ب السقف ([email protected]/2000) - 1) ب [2] <- السقف ([email protected]/2000) - 1 # تحليل الطيف الترددي Songspec <- seewave:: spec (r، f = [email protected]، plot = FALSE) تحليل <- seewave:: specprop (songspec، f = [email protected]، flim = c (0، 280/1000)، plot = FALSE) #save parameters meanfreq <- analysis $ mean / 1000 sd <- analysis $ sd / 1000 median <- analysis $ median / 1000 Q25 < - تحليل $ QQ75 $ <- تحليل $ QIQR <- تحليل $ IQR / 1000 انحراف <- تحليل $ انحراف kurt <- تحليل $ تفرطح sp.ent <- تحليل $ sh sfm <- تحليل $ وضع sfm <- تحليل $ وضع / 1000 centroid <- تحليل $ cent / 1000 # التردد مع ذروة السعة الذروة f <- 0 # seewave:: fpeaks (songspec، f = [email protected]، wl = wl، nmax = 3، plot = FALSE) [1، 1] # معلمات التردد الأساسية ff <- seewave:: fund (r، f = [email protected]، ovlp = 50، العتبة = العتبة، 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) # معلمات التكرار المهيمن y <- seewave:: dfreq (r، f = [email protected]، wl = wl، ylim = c (0، 280/1000)، ovlp = 0، مؤامرة = F، العتبة = العتبة، ممر النطاق = ب * 1000 ، fftw = TRUE) [، 2] متوسط <- متوسط (y، na.rm = TRUE) mindom <- min (y، na.rm = TRUE) maxdom <- max (y، na.rm = TRUE) dfrange <- (maxdom - mindom) المدة <- (end - start ) # يتغير حساب مؤشر التعديل <- vector () لـ (j فيه (! is. na (y))) {تغيير <- abs (y [j] - y [j + 1]) التغييرات <- إلحاق (تغييرات ، تغيير)} إذا (mindom == maxdom) modindx <-0 else modindx <- يعني (التغييرات ، na.rm = T) / dfrange # حفظ نتائج إرجاع (c (المدة ، التراجع المتوسط ، sd ، الوسيط ، Q25 ، Q75 ، IQR ، الانحراف ، كورت ، sp.ent ، sfm ، الوضع ، النقطه الوسطى ، الذروة ، meanfun ، minfun، maxfun، meandom، mindom، maxdom، dfrange، modindx))})) # تغيير أسماء النتائج rownames (x) <- c ("duration"، "meanfreq"، "sd"، "median"، "Q25"، "Q75" ، "IQR" ، "انحراف" ، "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) {# ابدأ بـ data.frame فارغ. data <- data.frame () # الحصول على قائمة بالملفات في المجلد. list <- list.files (folderName، '\. wav') # أضف قائمة الملفات إلى data.frame للمعالجة. لـ (اسم الملف في القائمة) {row <- data.frame (fileName، 0، 0، 20) data <- rbind (data، row)} # تعيين أسماء الأعمدة. الأسماء (البيانات) <- c ('sound.files'، 'selec'، 'start'، 'end') # الانتقال إلى مجلد للمعالجة. setwd (folderName) # معالجة الملفات. الصوتيات <- specan3 (بيانات ، متوازية = 1) # ارجع إلى المجلد الأصل. setwd ('..') صوتيات}

الجنس <- function (filePath) {if (! موجود ('genderBoosted')) {load ('model.bin')} # مسار الإعداد. CurrentPath <- getwd () اسم الملف <- مسار الاسم الأساسي (مسار الملف) <- dirname (مسار الملف) # تعيين الدليل لقراءة الملف. setwd (مسار) # ابدأ بإطار data.frame فارغ. البيانات <- data.frame (اسم الملف ، 0 ، 0 ، 20) # تعيين أسماء الأعمدة. الأسماء (البيانات) <- c ('sound.files'، 'selec'، 'start'، 'end') # معالجة الملفات. الصوتيات <- specan3 (بيانات ، متوازية = 1) # استعادة المسار. توقع setwd (currentPath) (genderCombo ، newdata = صوتيات)}

# تحميل البيانات

التسرب <- processFolder ('caminho para o pasta comamples de áudio com vazamento') بدون_تسريب <- processFolder ('caminho para o pasta com sample de áudio sem vazamento')

# تعيين التسميات.

التسرب تسمية $ <- 1 بدون_تسريب $ التسمية <- 2 بيانات <- rbind (تسرب ، بدون_تسريب) البيانات $ label <- عامل (بيانات $ label ، ملصقات = ج ('تسرب' ، 'بدون_تسريب'))

# إزالة الأعمدة غير المستخدمة.

البيانات $ المدة <- البيانات NULL $ sound.files <- البيانات NULL $ selec <- البيانات NULL $ الذروة <- NULL

# إزالة الصفوف التي تحتوي على NA's.

البيانات <- البيانات [complete.cases (البيانات) ،]

# اكتب مجموعة بيانات csv.

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

الخطوة 11: Rede Neural

ريدي العصبية
ريدي العصبية

إيديا تفعل استخدام الجهاز العصبي ، أو إعادة التشغيل الآلي للتشغيل الآلي للأجهزة التي تعمل بنظام الاستشعار.

إعادة استخدام عصبي é do tipo MLP (Multilayer Perceptron) ، و este modelo é treinado com dados previamente identificados e após esse treinamento o modelo implantado no sistema conseguirá realizar a identificação automática do sinal recebido، informando se umática do sinal recebido، informando com

Foi الضروريات 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. Não foi realizado nenhuma abordagem estatística muito aprofundada، mesmo com um trabalho mais superficial pode-se chegar a algumas variáveis com bons desempenhos.

يتم الحصول على الخصيتين حسب نظام التشغيل من النموذج الذي تم الحصول عليه من خلال الخصيتين ، الكانكاندو نا مايوريا دوس ، أوما الأصناف التي تم الحصول عليها من 100٪ ، كومو البود سيرتادو.

Este algoritmo é utilizado para treinar o modelo da rede e retornar a taxa de acerto do mesmo. لا توجد طريقة لاسترداد البيانات من algoritmo um pouco diferente seria usado، pois ele realizaria o treino ou receiverberia um modelo já treinado da nuvem ou de alguma outra fonte e com esse modelo realizaria as predições para cada leitura realizada.

# الترميز: utf-8

استيراد الباندا كما pd

استيراد numpy كـ np من sklearn.model_selection استيراد train_test_split كـ tts من sklearn.neural_network استيراد MLPC مصنف كـ MLP من sklearn.metrics استيراد تصنيف_تقرير من sklearn.metrics استيراد confusion_matrix as cm

# Leitura dos dados تفعل 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)

# كرياندو موديلو دي ريدي العصبية

modelo = MLP (alpha = 0.0001، learning_rate_init = 0.0001، hidden_layer_sizes = (50، 50، 50، 50)، max_iter = 10000، التنشيط = 'tanh'، solver = 'lbfgs')

# تريناندو موديلو

modelo.fit (X_train، Y_train) النتيجة = modelo.predict (X_test)

# المطبوعات النتائج

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") طباعة (أبلغ عن)

موصى به: