فهرست مطالب:
- مرحله 1: فهرست مواد
- مرحله 2: Adaptação Mecânica
- مرحله 3: Acionamento Dos Motores
- مرحله 4: Obtenção Do Áudio
- مرحله 5: Configuração Do Arduino DUE (linguagem C)
- مرحله 6: Interfaceamento Das Tecnologias
- مرحله 7: Configuração Da DRAGONBOARD 410c (پایتون)
- مرحله 8: INTERPRETAÇÃO DOS ARQUIVOS DE AUDIO
- مرحله 9: Análise Visual Do Sinal
- مرحله 10: Algoritmo Em R Para Extração Das Features Dos Dados
- مرحله 11: بازخوانی عصبی
تصویری: Sistema Autônomo Localizador De Vazamentos: 11 قدم
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:54
Este projeto conste em um robô، que através da leitura realizada por um dispitivo، equipado com um sensor piezoelétrico، captura os espectros das vibrações no solo، pode identificar e localizar، com o processamento dos dados por uma rede neural، possíveis vazamentos uma tubulação.
O processamento destes dados é realizado for algoritmos instalados na DRAGONBOARD 410c. Os dados também são enviados para um serviço na nuvem، respondável for auxiliar no processo de Integência Artificial do 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 Zavoéro ، Lucas de Suueso ، Lucas de Suuesa ، Lucas de Suuesa Gomes Polo e Ronaldo P. Gomes Polo. Também participou do projeto o aluno Daniel de Castro Pacheco graduando de engenharia mecânica on Universidade Newton Paiva de Belo Horizonte. O projeto contou com o apoio dos graduandos de engenharia mecatrônica da FACENS، Lucas Nunes Monteiro e Felipe Crispim da Silva Salvagnini.
مرحله 1: فهرست مواد
Para realização deste projeto، os seguintes materiais foram utilizados:
1 آردوینو به دلیل
1 Dragonboard 410c
2 راننده para motor de corrente Continua contendo cada um:
4 ترانزیستور BC548
4 دیودوس 1n4007
4 مقاومت 4k7Ω ¼ W
1 راننده برای سرو موتور موتور contendo:
1 ترانزیستور BC548
1 دیودوس 1N4007
1 مقاومت 4k7Ω W
1 عدد USB موس
1 USB Teclado
1 مانیتور
1 کابل HDMI
1 Robô De Esteiras - Plataforma Zumo
1 Mini dispositivo de cremalheira و engrenagem
1 سروو موتور 9 گرم
مرحله 2: Adaptação Mecânica
Para a aquisição dos dados pelo sensor piezoelétrico، faz se needário، o desenvolvimento de um dispositivo com pinhão e cremalheira، conforme desenhos anexados، neste caso as peças foram fabricadas por uma impressora 3D، devido ao fato tempo de execução، fixou-se o dispositivo na plataforma zumo، useitando fita dupla face، conforme vídeo.
مرحله 3: Acionamento Dos Motores
Para ekzar a movimentação dos motores do robô ZUMO e do dispositivo de captura، fez-se need a montagem de dois drivers para os motores de corrente Continua e um driver para o servo motor، conforme as figuras acima، sendo a primeira figura o driver para um motor de corrente Continua ea segunda یا راننده برای سرو موتور.
مرحله 4: Obtenção Do Áudio
Para obtenção do 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 e Felipe C. da Silva Salvagnini، maiores disalit sobe oravos sobre oztavas sobe oravas sobe oravas sobe overa ایمیل [email protected].
به منظور استفاده از حسگر پیزوئلتیک و uma placa de circuito que realiza a filtragem و amplificação do sinal استفاده می کنید.
به عنوان فرکانسهای جالب برای پیش بینی میزان ورود 100Hz و 800Hz. برای تنظیمات حسی به منظور تنظیم فرکانس های فرکانس 3 amHz به مدت 3 کیلوهرتز پیش از تنظیم مجدد به عنوان شرایطی که در amocragem de Nyquist انجام می شود ، از فرکانس های آبی استفاده می کنید ، می توانید از فرکانس های پیشین خود استفاده کنید.
A aquisição é habilitada e desabilitada através da interrupção do Arduino DUE.
مرحله 5: Configuração Do Arduino DUE (linguagem C)
Devido a grande quantidade de dados، cerca de 3000 pontos por segundo، do tipo inteiro de 32 bit، gerados pelo dispositivo de sensoriamento e e needários para processamento dos algoritmos na DRAGONBOARD 410c، foi utilizado o Arduino DUE para fazer usoóo entaóa de analiso. poder de processamento، isso foi needário por que o Shield de interfaceamento Grove Seeed Sensor Mezzanine instalado on DRAGONBOARD 410c ، که می تواند از طریق microcontrolador ATmega 328 ، و همچنین در صورت نیاز به فرآیند انجام عملیات ، مورد استفاده قرار گیرد.
O Arduino DUE foi configurado para receib os comandos enviados da plataforma QUALCOMM DRAGONBOARD 410c از طریق سریال comunicação.
As ações configuradas no foramino forram:
Realizar a aquisição dos dados؛
Transmitir os dados obtidos para a DRAGONBOARD 410c؛
Segue a programação:
#include #define Numb_Sample 3000 #تعریف DAC_Input A0
#سروو تعریف کنید 7
#تعریف PosServoMin 4 #تعریف PosServoMax 6 #تعریف دوره 60 بدون امضا 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) ؛ if (Scont
1) ؛ // 50٪ چرخه وظیفه
TC_SetRC (tc ، channel ، rc) ؛ TC_Start (tc ، channel) ؛ 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}
void setup ()
{Serial.begin (115200) ؛ pinMode (DAC_Input ، INPUT) ؛ TimerStart (TC1، 0، TC3_IRQn، 1500)؛ // شروع به تایمر // TC_Stop (TC1، 0)؛ pinMode (SERVO ، OUTPUT) ؛ }
حلقه خالی ()
{/*// در حالی که (! Serial.available ()) ؛ char rc؛ // = Serial.read ()؛ int indice = 0؛ if (rc == 0) {while (! Serial.available ())؛ rc = Serial.read ()؛ switch (rc) {case 1: indice = 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: در حالی که (! Serial.available ())؛ if ((Serial.read ()) == 0xFF) {SNow = PosServoMax؛ تأخیر (500) ؛ ind = 0؛ // TC_Start (TC1 ، 0) ؛ while (ind <Numb_Sample)؛ // TC_Stop (TC1 ، 0) ؛ SNow = PosServoMin ؛ تأخیر (500) ؛ Serial.print (0)؛ Serial.print (4)؛ Serial.print (0xFF) ؛ } زنگ تفريح؛ }} else if (rc == '2') {Serial.print ("تست سروو موتور / n")؛ در حالی که (! Serial.available ())؛ rc = Serial.read ()؛ if (rc == '1') {Serial.print ("حالت 1 / n")؛ SNow = PosServoMax ؛ } if (rc == '2') {Serial.print ("Mode 2 / n")؛ SNow = PosServoMin ؛ }} */ SNow = PosServoMax؛ تأخیر (100) ؛ SNow = PosServoMin ؛ تأخیر (100) ؛ }
مرحله 6: Interfaceamento Das Tecnologias
Para a comunicação dos dados entre o Arduíno DUE ea DRAGONBOARD 410c ، برای استفاده از رابط کاربری به صورت پیش فرض ، به عنوان مثال ، می توانید از رابط USB CDC entreo Arduino DUE ea DRCONBOARD 410 استفاده کنید. needitaria da recompilação do KERNEL da DRAGONBOARD 410c ، در صورت عدم تمایل به کاهش سرعت.
مرحله 7: Configuração Da DRAGONBOARD 410c (پایتون)
Foi configurada para enviar ao Arduino DUE os comandos para realizar a aquisição de dados e transmitir os dados obtidos. Segue código abaixo.
Observação: A abordagem utilisada no código ، nao funcionou devido aos níveis de tensão utilizados pelo Arduíno DUE e o Mezzanine serem invremíveis. برای استفاده از رابط USB ، نیاز به استفاده مجدد از KERNEL و DRAGONBOARD 410c را برای استفاده از ارتباطات کلیدی برای ارتباط برقرار کنید.
واردات زمان وارد کردن پانداهای وارداتی سریال به صورت pd وارد کردن numpy به عنوان np
# پیکربندی سریال conexão
ser = serial. سریال (port = '/dev/ttyAMC0'، #tty96B0 '، baudrate = 250000، parity = serial. PARITY_NONE، stopbits = serial. STOPBITS_ONE، bytesize = serial. EIGHTBITS)
ser.isOpen ()
print ('دستورات خود را در زیر وارد کنید. / r / n "خروج" را برای خروج از برنامه وارد کنید.')
ورودی = 1
در حالی که 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 DUE transmitir os dados coletados
لیستا =
برای i در محدوده (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
Para poder realizar uma primeira análise dos dados obtidos através do sensor، se fez need need a conversão dos arquivos no formato WAV ، fornecidos pelos alunos autores do TCC e colaboradores do projeto، para valores numéricos، que são utilizados nos algoritmososososososos 4 به برای تحقق بخشیدن به این موضوع ، می توانیم از PGTHON 3 استفاده کنیم اما در مورد WAV و salva os dados do sppectro em um arquivo CSV صحبت می کنیم. O algoritmo utilisado segue abaixo e em anexo para download.
Esse algoritmo não se faz needcrio para o funcionamento do system، já que o Arduino DUE já enviará esses dados em um array de valores numéricos.
# کدگذاری: utf-8
# Leitura e conversão dos audios para csv
# MÓDULOS UTILIZADOS
واردات موج وارد کردن numpy به عنوان np وارد کردن پانداها به عنوان pd واردات matplotlib.pyplot به عنوان plt
# FUNÇÃO PARA CONVERTER WAV EM DADOS DO ESPECTRO E SALVAR CSV
def audio_to_csv (نام فایل): wave_file = wave.open (نام فایل+". wav" ، "rb") data_size = wave_file.getnframes () sample_rate = wave_file.getframerate () time_step = 1/sample_rate waveData = wave_file.readframes (data_) signal = 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 (سیگنال) ، pd. DataFrame (زمان)] ، محور = 1) df.to_csv (نام فایل + '.csv' ، index = False) بازگشت df
# CARREGANDO DATA FRAME COM OS DADOS DO AUDIO
file_name = 'Solo_com_Vazamento' df_vazamento = audio_to_csv (نام فایل) df_vazamento.columns = ['amp'، 'time'] file_name = 'Solo_sem_Vazamento' df_sem_vazamento = audio_to_csv '] file_name'
# GRÁFICO DO ESPECTRO DE AUDIO
شکل ، (ax1 ، ax2) = plt. زیرشاخه ها (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 ، 'fontount': 'bold' }) ax2.set_xlabel ('Tempo [s]'، fontdict = {'fontsize': 16}) ax2.set_ylim ([-4e8، 4e8]) figure.tight_layout (h_pad = 5) plt.show ()
مرحله 9: Análise Visual Do Sinal
Com o PYTHON 3 is a transformada de Fourier، este artificio matemático realiza a transformação do sinal do domínio do tempo para oomonnio da frekuencia، onde se torna possível analisar as varias frequências، and suas amplitud، que compluem aquele sinal. به طور تصویری می توانید از طریق فوریرا در زمینه فوریه و در زمینه های تخصصی و تخصصی به عنوان یک ابزار وجود داشته باشید. Estes gráficos servirão para validação das análises realizadas pelo algoritmo de detecção automática.
محدود کردن فرکانسهای ورود هرتز 100Hz و 800Hz ، در صورت وجود محدوده فرکانسهای مختلف ، می توانید آنها را مشاهده کنید.
# برنامه نویسی: utf-8# Módulos utilizados para processamento da transformada de Fourier
وارد کردن pandas به عنوان pd وارد کردن numpy به عنوان np موج واردات از matplotlib وارد pyplot به عنوان plt # Taxa de amostragem em Hz Ts = 1.0/Fs؛ # Intervalo de amostragem y = pd.concat (df_list) t = y ['time'] # Vetor de tempos y = y ['amp'] # دامنه وسعت n = len (y) # Comprimento do sinal k = np. arange (n) T = n/Fs frq = k/T frq = frq [محدوده (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 () frq، abs (Y)# Função que realiza a carga dos dados do CSV e chama a função de Fourier def read_csv (نام فایل ، اولیه ، نهایی): df = pd.read_csv (نام فایل + '.csv') df.columns = ['amp' ، ' time '] delta = final-init if init*44100> len (df) یا final*44100> len (df): init = (len (df)/44100) -delta if init = 100) & (df [' freq '] <= 800)] mx = مرتب شده (df [' amp ']) چاپ ("دامنه وسعت دامنه:" ، np.round (np.mean (mx))) چاپ ("Percentuais em relação a média das amplitudes.") چاپ ("100 maiores دامنه" ، np.mean (mx [-100:]) // df ['amp']. میانگین ()*100 ، "٪" ، sep = "") چاپ ("دامنه 50 maiores:" ، np.mean (mx [-50:]) // df ['amp']. میانگین ()*100 ، "٪" ، sep = "") چاپ ("دامنه 10 maiores:" ، np.mean (mx [-10:]) // df ['amp']. میانگین ()*100 ، "٪" ، sep = "") چاپ ("دامنه اصلی:" ، np.mean (mx [-1:]) // df ['amp']. میانگین ()*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 Features Dos Dados
Utilizou-se um algoritmo em R para realizar o processamento e extração das features (características) dos dados obtidos.
Este Primeiro algoritmo realiza uma extração identificada ، در صورت لزوم نیاز به استفاده از روش های مختلف استفاده از سیستم های عصبی ، استفاده از آنها و همچنین استفاده از آنها در سیستم خود را دارد.
به عنوان یک سیستم در حال اجرا در روش های مختلف ما در حال اجرا و انجام کارهای مختلف ، می توانیم به عنوان یک ویژگی اضافی در نظر بگیریم ، به عنوان یک ویژگی خاص به عنوان یک ویژگی خاص شناخته می شود.
Estas features 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 Karacterísticas.
از این طریق می توانید از برنامه خود در GitHub استفاده نکنید و از طریق آن می توانید پیوندهای خود را دریافت کنید ، به عنوان یک برنامه ویژه برای انجام این کار ، از آن استفاده کنید.
برای استفاده از نرم افزار به صورت رایگان ، بارگیری و تفسیر R e do R Studio را بارگیری کنید.
Características extraídas:
- meanfreq: میانگین فرکانس (برحسب کیلوهرتز)
- sd: انحراف استاندارد فرکانس
- متوسط: فرکانس متوسط (بر حسب کیلوهرتز)
- Q25: اولین مقدار (در کیلوهرتز)
- Q75: سنج سوم (بر حسب کیلوهرتز)
- IQR: محدوده بین دو (در کیلوهرتز)
- کج: کج شدن (توجه داشته باشید به توضیحات specprop مراجعه کنید)
- kurt: kurtosis (توجه داشته باشید به توضیحات specprop توجه کنید)
- sp.ent: آنتروپی طیفی
- sfm: صافی طیفی
- حالت: فرکانس حالت
- centroid: فرکانس centroid (مشخصات را ببینید)
- peakf: فرکانس اوج (فرکانس با بالاترین انرژی)
- meanfun: میانگین فرکانس اساسی اندازه گیری شده در سیگنال صوتی
- minfun: حداقل فرکانس اساسی در سیگنال صوتی اندازه گیری می شود
- maxfun: حداکثر فرکانس اساسی در سیگنال صوتی اندازه گیری می شود
- Meandom: میانگین فرکانس غالب در سیگنال صوتی اندازه گیری می شود
- mindom: حداقل فرکانس غالب در سیگنال صوتی اندازه گیری می شود
- maxdom: حداکثر فرکانس غالب در سیگنال صوتی اندازه گیری می شود
- dfrange: محدوده فرکانس غالب در سیگنال صوتی اندازه گیری می شود
- modindx: شاخص مدولاسیون. به عنوان تفاوت مطلق انباشته بین اندازه گیری های مجاور فرکانس های اساسی تقسیم بر محدوده فرکانس محاسبه می شود
- برچسب: نشت یا بدون_نشت
Algoritmo usado:
بسته <- c ('tuneR'، 'seewave'، 'fftw'، 'caTools'، 'randomForest'، 'warbleR'، 'موش'، 'e1071'، 'rpart'، 'xgboost'، 'e1071') اگر (length (setdiff (بسته ها ، نامهای (نصب شده.)
کتابخانه (tuneR)
کتابخانه (seewave) کتابخانه (caTools) کتابخانه (rpart) کتابخانه (rpart.plot) کتابخانه (randomForest) کتابخانه (warbleR) کتابخانه (موش ها) کتابخانه (xgboost) کتابخانه (e1071)
specan3 <- تابع (X ، bp = c (0 ، 22) ، wl = 2048 ، آستانه = 5 ، موازی = 1) { # برای استفاده از پردازش موازی: کتابخانه (devtools) ، install_github ('nathanvan/parallellsugar') اگر (class (X) == "data.frame") {if (all (c ("sound.files"، "selec"، "start"، "end")٪ در٪ ستونها (X))) {شروع <- as.numeric (unlist (X $ start)) end <- as.numeric (unlist (X $ end)) sound.files <- as.character (unlist (X $ sound.files)) selec <- as.character (unlist (X $ selec))} else stop (چسباندن (چسباندن (c ("sound.files" ، "selec" ، "start" ، "end") [! (c ("sound.files" ، "selec" ، "شروع" ، "پایان")٪ در٪ ستونها (X))] ، فروپاشی = "،") ، "ستون (ها) در قاب داده یافت نمی شود"))} else stop ("X یک قاب داده نیست") #اگر NA ها در شروع یا پایان متوقف شوند اگر (هر کدام (is.na (c (پایان ، شروع)))) stop ("NA ها در شروع و/یا پایان یافت می شوند") #اگر پایان یا شروع توقف عددی نباشد if (همه (کلاس (پایان)! = "عددی" و کلاس (شروع)! = "عددی")) توقف ("" پایان "و" انتخاب "باید عددی باشد)) #اگر هر شروع بالاتر از پایان توقف باشد اگر (any (end - start <0)) stop (paste ("شروع از en بالاتر است d در "، طول (که (پایان - شروع 20)) توقف (چسباندن (طول (که (پایان - شروع> 20)) ،" ، "انتخاب (ها) بیشتر از 20 ثانیه")) گزینه ها (show.error.messages = TRUE) #اگر bp بردار یا طول نیست! = 2 توقف اگر (! is. vector (bp)) stop ("'bp' باید بردار عددی طول 2 باشد") در غیر این صورت {if (! length (bp) == 2) توقف ("'bp' باید بردار عددی طول 2 باشد)}} هشدار #بازگشت اگر همه فایل های صوتی fs <- list.files (path = getwd ()، pattern =".wav $ "یافت نشد ، ignore.case = TRUE) if (length (unique (sound.files [(sound.files٪ in٪ fs)]))! = length (unique (sound.files))) cat (paste (length (unique (sound فایلها))-طول (منحصر به فرد (sound.files [(sound.files٪ در٪ fs)]))) ، ".wav فایل (ها) یافت نشد")) #تعداد فایلهای صوتی موجود در فهرست کار و در صورت توقف 0 d <- که (sound.files٪ در٪ fs) if (length (d) == 0) {stop ("فایل های.wav در فهرست کار نیستند")} دیگر {شروع <- شروع [d] پایان <- end [d] selec <- selec [d] sound.files <- sound.files [d]} # اگر موازی عددی نباشد اگر (! is.numeric (موازی)) توقف ("" موازی "باید یک بردار عددی طول 1 ") باشد اگر (هر (! (موازی ٪٪ 1 == 0) ، موازی 1) {options (warning = -1) if (all (Sys.info () [1] ==" Windows "، RequNamespace (" parallellsugar "، بی سر و صدا = TRUE) == TRUE)) lapp <- تابع (X ، FUN) parallellsugar:: mclapply (X، FUN، mc.cores = parallel) else if (Sys.info () [1] == "Windows") {cat ("کاربران ویندوز برای محاسبه موازی باید بسته" parallellsugar "را نصب کنند (اکنون این کار را نمی کنید!)")) lapp <- pbapply:: pblapply} else lapp <- تابع (X، FUN) parallel:: mclapply (X، FUN، mc.cores = parallel)} else lapp <- pbapply:: pblapply options (warning = 0) if (parallel == 1) cat ("اندازه گیری پارامترهای صوتی:") x <- as.data.frame (دور (1: طول (شروع) ، عملکرد (i) {r <- tuneR:: readWave (file.path (getwd () ، sound.files ) ، از = شروع ، تا = پایان ، واحدها = "ثانیه") b سقف ([email protected]/2000) - 1) b [2] < - سقف ([email protected]/2000) - 1 تجزیه و تحلیل #طیف فرکانسی songspec <- seewave:: spec (r، f = [email protected]، plot = FALSE) analysis <- seewave:: specprop (songspec، f = [email protected]، flim = c (0، 280/1000)، plot = FALSE) #پارامترها را ذخیره کنید - تجزیه و تحلیل $ QQ75 <- تجزیه و تحلیل $ QIQR <- تجزیه و تحلیل $ IQR/1000 skew <- تجزیه و تحلیل $ skewness kurt <- تجزیه و تحلیل $ kurtosis sp.ent <- تجزیه و تحلیل $ sh sfm <- تجزیه و تحلیل $ sfm mode <- تجزیه و تحلیل $ mode/1000 centroid <- تجزیه و تحلیل $ cent/1000 #فرکانس با دامنه قله peakf <- 0 #seewave:: fpeaks (songspec، f = [email protected]، wl = wl ، nmax = 3 ، plot = FALSE) [1 ، 1] #پارامترهای فرکانس اساسی 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) #پارامترهای فرکانس غالب 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] عمیق <- میانگین (y ، na.rm = TRUE) mindom <- دقیقه (y ، na.rm = TRUE) حداکثر <- حداکثر (y، na.rm = TRUE) dfrange <- (maxdom- mindom) مدت زمان <- (پایان - شروع ) #محاسبه شاخص مدولاسیون <- بردار () برای (j که در آن (! است) تغییر می کند. na (y))) {change <- abs (y [j]- y [j + 1]) تغییرات <- اضافه (تغییر ، تغییر)} اگر (mindom == maxdom) modindx <-0 else modindx <- mean (تغییرات ، na.rm = T)/dfrange #ذخیره نتایج بازگشت (c (مدت زمان ، میانگین فرکانس ، sd ، میانگین ، Q25 ، Q75 ، IQR ، کج ، کوتاه ، sp.ent ، sfm ، حالت ، centroid ، peakf ، meanfun ، minfun ، maxfun ، meandom ، mindom ، maxdom ، dfrange ، modindx))})) #تغییر نتیجه نامهای نام (x) <- c ("مدت" ، "meanfreq" ، "sd" ، "median" ، "Q25" ، "Q75" ، "IQR" ، "skew" ، "kurt" ، "sp.ent" ، "sfm" ، "mode" ، "centroid" ، "peakf" ، "meanfun" ، "minfun" ، "maxfun" ، "meandom" ، "mindom" ، "maxdom" ، "dfrange" ، "modindx") x <- data.frame (sound.files ، selec ، as.data.frame (t (x))) ستونها (x) [1: 2] <- c ("sound.files" ، "selec") rownames (x) <- c (1: nrow (x)) return (x)}
processFolder <- تابع (نام پوشه) { # با data.frame خالی شروع کنید. data <- data.frame () # دریافت لیست فایل های موجود در پوشه. list <- list.files (folderName ، '\. wav') # لیست فایل را برای پردازش به data.frame اضافه کنید. for (fileName in list) {row <- data.frame (fileName، 0، 0، 20) data <- rbind (data، row)} # تنظیم نام ستون ها نام (داده) <- c ('sound.files' ، 'selec' ، 'start' ، 'end') # برای پردازش به پوشه بروید. setwd (folderName) # پردازش فایل ها. acoustics <- specan3 (data، parallel = 1) # بازگشت به پوشه اصلی. setwd ('..') آکوستیک}
جنسیت <- تابع (filePath) {if (! وجود دارد ('genderBoosted')) {load ('model.bin')} # مسیرهای راه اندازی. currentPath <- getwd () fileName <- basename (filePath) path <- dirname (filePath) # دایرکتوری را برای خواندن فایل تنظیم کنید. setwd (path) # با data.frame خالی شروع کنید. data <- data.frame (نام فایل ، 0 ، 0 ، 20) # تنظیم نام ستون ها. نام (داده) <- c ('sound.files' ، 'selec' ، 'start' ، 'end') # پردازش فایل ها. آکوستیک <- specan3 (داده ، موازی = 1) # بازیابی مسیر. setwd (currentPath) پیش بینی (genderCombo ، newdata = آکوستیک)}
# بارگذاری داده ها
نشت <- processFolder ('caminho para o pasta com sample de áudio com vazamento') بدون_نشت <- processFolder ('caminho para o pasta com samples de áudio sem vazamento')
# برچسب ها را تنظیم کنید.
$ label leakage <- 1 without_leakage $ label <- 2 data <- rbind (leakage، without_leakage) data $ label <- factor (data $ label، labels = c ('leakage'، 'without_leakage'))
# ستون های بلا استفاده را حذف کنید.
data $ duration <- NULL data $ sound.files <- NULL data $ selec <- NULL data $ peakf <- NULL
# سطرهای حاوی NA را حذف کنید.
داده <- داده [کامل. موارد (داده) ،]
# مجموعه داده csv را بنویسید
write.csv (data، file = 'features.csv'، sep = '،'، row.names = F)
مرحله 11: بازخوانی عصبی
یک ایده برای استفاده از سیستم عصبی ، این است که می تواند به طور خودکار از طریق بازسازی سیستم ایمنی بدن به کار رود.
استفاده از سیستم عصبی é do tipo MLP (Perceptron Multilayer Perceptron) ، این مدل را می توان پیش بینی کرد که به عنوان یک سیستم پیاده سازی بدون سیستم یا سیستم پیاده سازی یک سیستم شناسایی ، به عنوان یک منبع اطلاعاتی به دست آورید.
Foi needá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. Não foi realizado nenhuma abordagem estatística muito aprofundada، mas mesmo com um trabalho mais superficial pode-se chegar a algumas variáveis com bons desempenhos.
Para 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.
این کار را می توان برای استفاده از مدل یا مدل و راه حل مجدد خدمات مالی انجام داد. هیچ سیستم تشخیصی um algoritmo um pouco diferente 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.
# کدگذاری: utf-8
وارد کردن پاندا به صورت pd
وارد کردن numpy به عنوان np از sklearn.model_selection وارد کردن train_test_split به عنوان tts از sklearn.neural_network وارد کردن MLPClassifier به عنوان MLP از sklearn.metrics import classification_report به عنوان cr از sklearn.metrics واردات confusion_matrix به سانتی متر
# Leitura dos dados do CSV
df = pd.read_csv ('features.csv') # Separação das entradas df_X = df [df.columns [: len (df.columns) -1] # Filtrando as entradas df_X = df_X
# Separando dados para treino e teste
X_train ، X_test ، Y_train ، Y_test = tts (df_X ، df_Y ، اندازه تست = 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 ، فعال سازی = 'tanh' ، solver = 'lbfgs')
# تریناندو مدلو
modelo.fit (X_train، Y_train) result = modelo.predict (X_test)
# Imprimindo resultados
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 (گزارش)
توصیه شده:
Sistema De Irrigação Automático Para Plantas: 8 قدم
Sistema De Irrigação Automático Para Plantas: A irrigação é uma das tecnologias mais utilisadas por کشاورزی از این طریق مستقل از چشمان خود ، از گارانتی uma safra uniforme ، reduz a falha humana ، minimiza o konsumo de goso ooozao استفاده کنید
Sistema De Suporte a Eficiência Energética Para Refrigeradores: 14 قدم
Sistema De Suporte a Eficiência Energética Para Refrigeradores: Olá a todos، tudo bem. Neste projeto apresento as etapas para o desenvolvimento de um sistema de apoio para a gerência do conso eficiência energética em frigradores.Mas Primeiro، vamos contextualizar você do problema existente: Em tempos de cr
Sistema Pêndulo + Hélice: Controle De Posição: 5 قدم
Sistema Pêndulo + Hélice: Controle De Posição: Este experimento foi desenvolvido como trabalho prático da disiplina & quot؛ Eletrônica Industrial & quot؛ no primeiro semestre de 2018، pelos alunos Eduardo Coelho e Rodrigo Sousa، do curso de engenharia Aeroespacial na Universidade Federal de Minas G
قدم زدن: قایق تنها: 11 قدم
Makecourse: The Lonely Boat: این دستورالعمل برای برآوردن الزامات پروژه Makecourse در دانشگاه فلوریدا جنوبی (www.makecourse.com) ایجاد شده است. در زمینه طراحی آردوینو ، چاپ سه بعدی و طراحی به کمک کامپیوتر (CAD) جدید؟ این پروژه راهی عالی برای یادگیری
Sistema De Sensoriamento ، Monitoramento E Cuidados Para Moradores De Rua: 5 قدم
Sistema De Sensoriamento، Monitoramento E Cuidados Para Moradores De Rua: Durante o inverno os moradores de rua sofrem com o frio nas cidades e algumas vezes at & eacute؛ chegam a & oacute؛ bito. Visando os objetivos da ONU 2030 e a crescente evolu & ccedil؛ & atilde؛ o tecnol & oacute؛ gica dos & uacute؛ ltimos anos، foi proposto um s