Përmbajtje:

Studim eksperimental i lëvizjes së thjeshtë harmonike: 5 hapa
Studim eksperimental i lëvizjes së thjeshtë harmonike: 5 hapa

Video: Studim eksperimental i lëvizjes së thjeshtë harmonike: 5 hapa

Video: Studim eksperimental i lëvizjes së thjeshtë harmonike: 5 hapa
Video: Сколько стоит ремонт в ХРУЩЕВКЕ? Обзор готовой квартиры. Переделка от А до Я #37 2024, Korrik
Anonim

Ndiqni më shumë nga autori:

Walking Strandbeest, Java/Python dhe App Controlled
Walking Strandbeest, Java/Python dhe App Controlled
Walking Strandbeest, Java/Python dhe App Controlled
Walking Strandbeest, Java/Python dhe App Controlled

Në klasë, ne shpesh përdorim një kronometër për të kryer eksperimentin e lavjerrësit, ose eksperimentin e thjeshtë të lëvizjes harmonike. Këtu është një sfidë, a mund të prodhojmë një grafik të vërtetë të lëvizjes së tij dhe të shohim se cili është pozicioni dhe shpejtësia këndore e çastit, kjo është shumë më tepër informacion dhe argëtim.

Pyetja e parë, ne duhet të vendosim që trupi i lavjerrësit është një kordon pa peshë ose një shufër uniforme e ngurtë. Qasja e kordonit duket të jetë më e lehtë. Nga praktika e ndërtimit të një, unë kam konsideratat e mëposhtme të kompromisit: Mënyra më e lehtë për të varur një sistem lavjerrësi mund të jetë ta varni atë në skajin e sipërm të derës tuaj. Kjo ju jep gjatësinë e lavjerrësit tuaj 2 milion pa bërë ndonjë punë ndërtimore strukturore. Por ka nevojë që lëkundja të mos prekë sipërfaqen e derës, e cila thjesht shkatërron të gjithë eksperimentin. Pra, aeroplani që lëkundet duhet të jetë saktësisht paralel me sipërfaqen e murit/derës tuaj. Një kordon pa peshë tenton të jetë i hollë, mund të rrotullohet lehtë dhe të komplikojë matjen e këndit të lëkundjes. Ne duam të përdorim një matje për të përfaqësuar gjendjen e lëkundjes. Kordoni i hollë, siç është vija e peshkut, mund të jetë elastik dhe i shtrirë, që prek një nga konstantet tona më të rëndësishme të matur nga ne dhe të përdorur në ekuacionin, që është gjatësia e lavjerrësit. Disa mund të preken gjithashtu nga temperatura. Masa e peshës që varet në fund të kordonit duhet të jetë mjaft e rëndë në mënyrë që pesha e kordonit të bëhet e papërfillshme. Ju lutemi komentoni nëse jeni dakord ose nuk pajtoheni me ta, ose nëse keni ide të tjera kompromis të dizajnit. Për të studiuar këtë problem, ne kemi nevojë për një pajisje që është aq e lehtë saqë pesha e saj mund të injorohet dhe ne ende e trajtojmë sistemin e lavjerrësit si një shufër uniforme të ngurtë. Unë jam duke përdorur një kontrollues elektronik të veshshëm me COTS, i cili na jep informacionin xhiro, përshpejtues dhe kënd për ne përmes lidhjes bluetooth. Këto matje do të ruhen në një skedar të të dhënave të aplikacionit të telefonit celular. Pas kësaj, ne do të analizojmë të dhënat për eksperimentin tonë të thjeshtë harmonik të lëvizjes. Analiza numerike fokusohet në temat e mëposhtme: 1) Parashikoni periudhën e lëkundjes së lavjerrësit 2) Mblidhni në mënyrë të programueshme të dhënat e eksperimentit të lëvizjes së thjeshtë harmonike të lavjerrësit 3) Përdorni kmean për të grupuar të dhënat dhe për të hequr të metat në procesin e analizës 4) Përdorni FFT me kohë të shkurtër për të vlerësuar frekuenca e lëkundjes së lavjerrësit

Furnizimet

Aparate matëse Bluetooth

Aplikacioni i telefonit Android: Shkoni te dyqani i lojërave Google, kërkoni M2ROBOTS dhe instaloni Aplikacionin e kontrollit. Në rast se është e vështirë të hyni në playstore të Google, vizitoni faqen time personale personale për metodën alternative të shkarkimit të aplikacionit

shufra druri

disa pjesë të printuara 3D

tehe sharrash ose materiale të ngjashme metalike

Hapi 1: Çfarë janë Lavjerrësi? Si ta modeloni atë?

Ka shumë artikuj dhe libra që prezantojnë derivimin e ekuacionit të lavjerrësit, përfshirë librin tuaj të fizikës së kurrikulës. Përmbajtja e tillë mund të jetë më mirë të mos përsëritet këtu përsëri. Vetëm përfundimi përfundimtar është renditur këtu në lidhje me temën e "lëvizjes së thjeshtë harmonike". Për të njohur periudhën e një lavjerrësi, gjithçka që duhet të dimë është gjatësia e lavjerrësit, e shënuar si "l", në metra.

Nëse jemi mjaft të sigurt se pesha gjendet pothuajse plotësisht në fund të një kordoni pa peshë të varur në një strumbullar, dhe lavjerrësi po lëkundet në kënde të vogla θ, të themi më pak se 15 °, periudha T1 e një lavjerrësi të tillë jepet nga:

T1 = 2*pi*(l/g)^0.5

g = nxitimi i gravitetit, afërsisht 9.8 m/s^2

Nëse kordoni pa peshë zëvendësohet nga një shufër uniforme e ngurtë, përsëri me gjatësi l, periudha e tij e thjeshtë e lëvizjes harmonike T2 jepet me T1 = 2*pi*(2l/3g)^0.5

Në mënyrë efektive ajo ka të njëjtën periudhë si një lavjerrës kordoni pa peshë duke qenë dy të tretat e gjatësisë së ngurtë të shufrës uniforme.

Ky është sfondi, dhe ne mund të fillojmë të përgatisim eksperimentin tonë.

Hapi 2: Përgatitni Pjesët për Ndërtimin e Pajisjeve

Përgatitni Pjesët për Ndërtimin e Pajisjeve
Përgatitni Pjesët për Ndërtimin e Pajisjeve
Përgatitni Pjesët për Ndërtimin e Pajisjeve
Përgatitni Pjesët për Ndërtimin e Pajisjeve
Përgatitni Pjesët për Ndërtimin e Pajisjeve
Përgatitni Pjesët për Ndërtimin e Pajisjeve

Për të ndërtuar strukturën e lavjerrësit, ne printojmë 3D disa pjesë dhe riciklojmë diçka që kemi tashmë. Struktura e përgjithshme e lavjerrësit është treguar në Fig.1. Shtë një përzierje e pjesëve të printimit 3D së bashku me disa pjesë të punuara me dorë dhe një copë të gjatë druri nga Lowe.

Pjesa e printuar 3D në Fig.2 është e varur në skajin e sipërm të derës, sepse dera jonë është një sipërfaqe e lehtë e rrafshët për ne për të varur diçka. Lidhja e shkarkimit të skedarit STL:

xiapeiqing.github.io/doc/kits/pendulum/pen…

Pjesa e gjelbër në Fig.3 lidh shufrën e drurit me një teh, dhe tehja ulet në majë të dy pjesëve të shinave të montuara në varësen e derës të printuar më parë 3D. Lidhja e shkarkimit të skedarit STL:

Dy pjesët e hekurudhës janë bërë duke thyer një thikë të vjetër sharre në gjysmë, shihni Fig. 4. Pjesa në Fig.2 ka përgatitur madhësinë e duhur të çarë për ta. Në mënyrë ideale, ne mund të bëjmë një nivel "V" në ato dy tehe sharrash duke përdorur një skedar. Një metal me tehe të arsyeshme të mprehtë, të tillë si një brisk me një brisk, ose ndonjë pjesë metalike të bërë me dorë, mund të ulet brenda niveleve të formës "V". Arsyeja pse ne kemi nevojë për një zonë më të vogël kontakti është të zvogëlojmë energjinë kinetike të humbur gjatë lëkundjes.

Pjesa e fundit e printuar 3D në Fig.5 është një tabaka e vogël për të mbajtur aparatin elektronik të matjes.

Lidhja e shkarkimit:

Aparati i matjes bluetooth gjeneron vlerësimin e këndit, matjen xhiro dhe matjen e përshpejtuesit. Të gjitha këto të dhëna janë në dispozicion për ne përmes lidhjes pa tel bluetooth.

Ne do të kryejmë eksperimente të shumta duke e vendosur këtë aparat në pozicione të ndryshme të krahut të lavjerrësit dhe të shohim dallimet.

Hapi 3: Eksperimentoni Mbledhjen e të Dhënave

Mbledhja e të dhënave të eksperimentit
Mbledhja e të dhënave të eksperimentit
Mbledhja e të dhënave të eksperimentit
Mbledhja e të dhënave të eksperimentit
Mbledhja e të dhënave të eksperimentit
Mbledhja e të dhënave të eksperimentit

Ekzistojnë dy metoda të realizueshme për mbledhjen e të dhënave eksperimentale para se të analizojmë grupin e të dhënave të fituar:

1) Përdorni Aplikacionin e telefonit Android të specifikuar në seksionin e kërkesave për të regjistruar të gjitha matjet e prodhuara nga aparati në një skedar të dhënash të ruajtur në kartën SD të telefonit tuaj. Ne mund të kopjojmë skedarin dhe të postojmë përpunimin e informacionit.

2) Përdorni një kompjuter me Bluetooth, një PC, një laptop ose një mini-kompjuter RaspberryPi për të krijuar një lidhje bluetooth me aparatin dhe lexoni të dhënat për analiza në kohë reale ose offline.

Ekzistojnë të mirat dhe të këqijat për secilën metodë, ne do t'i provojmë të dyja dhe do të tregojmë ndryshimin në këtë udhëzues.

Për metodën (1) duke përdorur aplikacionin android, pasi të jemi në ndërfaqen e kontrollit të aplikacionit android, të dhënat e telemetrisë të dërguara nga aparati i matjes bluetooth në telefonin android do të regjistrohen në një skedar datalog të quajtur m2flightDatayyyymmdd_hhmmss.txt. Mund të gjendet në dosjen Shkarko/m2LogFiles të telefonit tuaj android. Dosja "Shkarkim" është një dosje para-ekzistuese në sistemin operativ Android të telefonit tuaj dhe "m2LogFiles" është një dosje e krijuar nga Aplikacioni. Përmbajtja e emrit të skedarit yyyymmdd_hhmmss është mënyra për të koduar kohën e fillimit të eksperimentit (viti, muaji, dita, ora, minuta dhe sekonda) në emrin e skedarit.

Çdo rresht në skedarin log është një rekord. Fillon me vulën kohore të ngjarjes, vargu i parathënies "eam:", i ndjekur nga 4 të dhëna treshe, të cilat janë:

Leximi i aksit të akselerometrit XYZ në vlerat e ripërsëritjes së regjistrimit të harduerit të sensorit të papërpunuar

Leximi i aksit xhiroskop XYZ në vlerat e ripërsëritjes së regjistrimit të harduerit të sensorit të papërpunuar

Leximi i boshtit të magnetometrit XYZ në vlerat e ripërsëritjes së regjistrimit të harduerit të sensorit të papërpunuar

në bord vlerësohet Roll/Pitch/Raw në shkallë

Dosja e të dhënave e krijuar duke përdorur programin kompjuterik python do të përdorë formatin identik të skedarit të të dhënave, kështu që programi që ne përdorim në hapin e analizës së të dhënave nuk do të shqetësohet me burimin e të dhënave që prodhohet nga programi ynë python ose aplikacioni android.

Le të fillojmë kodimin duke përdorur metodën (2).

Për të bashkëvepruar me aparatin e matjes bluetooth, ofrohen dy shije të SDK:

1) Python SDK, e cila mund të instalohet nga "pip3 install m2controller", python3 është gjuha e përdorur. Shembujt e kodit të aplikacionit të përdoruesit ruhen në https://github.com/xiapeiqing/m2robots/tree/maste… Për këtë eksperiment, ne do të përdorim pendulin e shkrimit python1.py

2) Java SDK, e cila nuk përdoret në këtë udhëzues sepse duam vizualizim dhe analizë të mëvonshme të të dhënave të fituara të lavjerrësit, të cilat mund të na kërkojnë pak më shumë përpjekje për të programuar në Java.

Kodi burimor i programit të mbledhjes së të dhënave python3 përmban shumë komente për detajet e funksionalitetit të kodit. Këtu jepet një fotografi e kodit burimor.

#!/usr/bin/env python#-*-kodimi: UTF-8-*-nga m2controller import m2controller nga m2controller import m2Konstrukto sinjal importi import import kohë datatime import usrCfg lavjerrës importi2

requestExit = E gabuar

################################################################

#ne duam të përdorim të njëjtën konventë për emërtimin e skedarit log në mënyrë që moduli i analizës së të dhënave, pendulum2.py, të jetë agnostik se si e marrim skedarin e të dhënave log ################## ################################################ logfilename = " m2flightData%s.txt "%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = hapur (logfilename," w ")

def signal_handler (sig, frame):

kërkesë globale Dil nga printimi ('përdoruesi Ctrl-C për të dalë nga ekzekutimi i programit') requestExit = Sinjali i vërtetë. sinjali (sinjali. SIGINT, signal_handler)

################################################################

#me çdo të dhënë matëse të bëhet e disponueshme në shkallën 20Hz, ky funksion "callback" do të thirret ################################# ################################# def callbackfunc (telemetry): strTimeStamp = datetime.datetime.fromtimestamp (time.time ()). strftime ('%H:%M:%S.%f') [:-3] dataStr = "%s, eam:%d,%d,%d,%d,%d,%d, %d, %d, %d, %2.1f, %2.1f, %2.1f / n " %(strTimeStamp, telemetri ['m_fAccelHwUnit'] [0], telemetri ['m_fAccelHwUnit'] [1], telemetri ['m_fAccelHwUnit'] [2], telemetri ['m_fGyroHwUnit'] [0], telemetri ['m_fGyroHwUnit'] [1], telemetri ['m_fGyroHwUnit'] [2], telemetri ['m_fMagHwU 'm_fMagHwUnit'] [1], telemetri ['m_fMagHwUnit'] [2], telemetri ['m_fRPYdeg'] [0], telemetri ['m_fRPYdeg'] [1], telemetri ['m_fRPYdeg'] [2]) ## #################################################### #############ne shtypim vargun e të dhënave në ekran dhe i ruajmë në skedarin log ######################## ########################################### print (dataStr) dataLogfile.writelines (dataStr)

################################################################

#inicializoni kontrolluesin, mos harroni të vendosni fushën BleMACaddress të jetë adresa MAC e pajisjes tuaj #################################### ################################TODO: le të inicializojmë BleMACadresën nëse nuk vendoset nga përdoruesi. kontrollues = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () ndërsa e vërtetë: ########################## #######################################prisni që të dhënat e matjes të krijohen dhe dërgohen nga matja e lavjerrësit aparate ################################################## ############### kontrollues.m_CommsTunnel.waitForNotifications (1.0) nëse kërkohet Dilni: ######################## ##########################################mbajtja e shtëpisë punon këtu kur të përfundojmë regjistrimin e të dhënave #################################################### ############### controller.stop () dataLogfile.close () break

################################################################

#mbledhja e të dhënave përfundoi, tani le të analizojmë të dhënat e regjistrit ######################################## ######################### pendulum2.parseDataLogFile (emri i skedarit)

Për përditësim afatgjatë, ju lutemi kontrolloni

Tani le të shpjegojmë metodën e funksionimit të tij. Ky program python është shkruar mbi një paketë pip të instalueshme, të quajtur m2controller. Paketa e nivelit më të ulët ofron mekanizëm të kthimit të thirrjeve, kështu që çdo azhurnim i marrë i matjes do të shkaktojë funksionin e kthimit të thirrjes që kemi shkruar dhe do t'i ruajë të dhënat në një skedar regjistri lokal. Formati i përmbajtjes së të dhënave të skedarit log është identik me atë që prodhohet nga aplikacioni shoqërues android, kështu që skedari i regjistrit të të dhënave i krijuar nga programi python ose aplikacioni shoqërues andriod është i shkëmbyeshëm.

Sinjali ctrl-C i përdoruesit, i kapur nga sistemi operativ, i kalohet programit dhe ndalon lakin e pafund duke pritur ardhjen e re të të dhënave të matjes.

Deri tani, skedari log është krijuar me sukses, dhe ky program do të thërrasë programin e analizës për të studiuar rezultatet tona të eksperimentit.

Këtu janë dy eksperimente, dhe krahasimi tregon ndryshimin shumë të dukshëm duke bashkangjitur një pajisje 7gram në vende të ndryshme.

Në Fig.2, ne përdorim një shkallë për të përcaktuar peshën aktuale të këtij aparati matës bluetooth.

Fig.3 paraqet konfigurimin e lavjerrësit ku pajisja 7gram është ngjitur në skajin e poshtëm të lavjerrësit. Konfigurimi i konfigurimit në Fig. 4 ka masën 7gram të vendosur shumë më pranë strumbullarit të lëkundur.

Fig.5 është një pamje nga afër e strukturës së lavjerrësit.

Hapi 4: Analiza e të dhënave

Analiza e të dhënave
Analiza e të dhënave
Analiza e të dhënave
Analiza e të dhënave
Analiza e të dhënave
Analiza e të dhënave

Pajisja e matjes bluetooth peshon 7 gram, e cila peshon shumë më pak se një shkop druri i gjatë 1.6 metra. Përdorni supozimin e "shufrës uniforme të ngurtë", dhe ne kemi këtë ekuacion të periudhës së lavjerrësit, T1 = 2*pi*(2l/3g)^0.5

Për të marrë konstantën e gravitetit, mund të përdorim 9.8m/s^2. Por një konstante më e saktë e gravitetit në çdo gjeolokacion të caktuar mund të merret nga ky shërbim në internet:

www.wolframalpha.com/widgets/view.jsp?id=e…

Për san francisco, është 9.81278m/s^2

Gjatësia e lavjerrësit matet të jetë 64.5"

2*pi*sqrt (2*64.5*0.0254/(3*9.81278)) jep periudhën e pritur të lavjerrësit prej 2.0962 (sek).

Le të shohim nëse pajtohet me eksperimentet tona.

Në eksperimentin e parë, konfigurimi i lavjerrësit ka pajisjen 7gram të bashkangjitur në skajin e poshtëm të lavjerrësit. Skedari im i regjistrit mund të shkarkohet në:

xiapeiqing.github.io/doc/kits/pendulum/pen…

Riemërtojeni atë në "PendulumTestData.txt" dhe vendoseni në të njëjtën dosje të programit të analizës python. Këtu jepet një fotografi e kodit burimor.

#!/usr/bin/env python#-*-kodimi: UTF-8-*-import csv import matplotlib.pyplot as plt plt.style.use ('seaborn-whitegrid') import numpy si np nga dataetime import dataetime, timedelta import seaborn as sns from sklearn.cluster import KMkupton nga koleksionet import Counter ###################################### ###############################ky funksion kryen punën e analizës së skedarëve të të dhënave ############ #################################################### ## def parseDataLogFile (datafilename): ############################################# #######################ekstraktoni të dhëna në skedarin e regjistrit të të dhënave të ndara me presje (CSV) dhe ruani përmbajtjen në secilën kolonë në një ndryshore të tipit notues ## #################################################### ############ me të hapur (datafilename) si csvfile: readCSV = csv.reader (csvfile, delimiter = ',') timestampS = fAccelHwUnit_x = fAccelHwUnit_y = fAccelHwUnit fGyroHwUnit_x = fGyroHwUnit_y = fGyroHwUnit_z = fMagHwUnit_x = fMagHwUnit_y = fMagHwUni t_z = fRPYdeg_r = fRPYdeg_p = fRPYdeg_y = për rreshtin në lexim CSV: provo: x = datetime.strptime (rreshti [0]. ndarje (',') [0], '%H:%M:%S.%f ') kohore [1] [4:])) fAccelHwUnit_y.append (noton (rreshti [2])) fAccelHwUnit_z.append (noton (rresht [3])) fGyroHwUnit_x.append (noton (rreshti [4]))) fGyroHwUnit_y.append (float (rreshti [4]). (rreshti [5])) fGyroHwUnit_z.append (float (rreshti [6])) fMagHwUnit_x.append (float (rreshti [7])) fMagHwUnit_y.append (float (rreshti [8]))) fMagHwUnit_z.append (float (rresht [9])) fRPYdeg_r.append (noton (rreshti [10])) fRPYdeg_p.append (noton (rreshti [11])) fRPYdeg_y.append (noton (rreshti [12]))) përveç: kalimit të kohës kohoreS = np.asarray (timestamps) timestamps = timestamps - timestamps [0] fAccelHwUnit_x = np.asarray (fAccelHwUnit_x) fAccelHwUnit_y = np.asarray (fAccelHwUnit_y) fAccelHwUnit_z = np.asarray (fAccelHwUnit_z) fGyroHwUnit_x = np.asarray (fGyroHwUnit_x) fGyroHwUnit_y = np.asarray (fGyroHwUnit_y) fGyroH wUnit_z = np.asarray (fGyroHwUnit_z) fMagHwUnit_x = np.asarray (fMagHwUnit_x) fMagHwUnit_y = np.asarray (fMagHwUnit_y) fMagHwUnit_z = np.asarray (fMagHwUnit_z) fRPYdeg_r = np.asarray (fRPYdeg_r) fRPYdeg_p = np.asarray (fRPYdeg_p) fRPYdeg_p = fRPYdeg_p - np.kuptim (fRPYdeg_p) fRPYdeg_y = np.asarray (fRPYdeg_y)

################################################################

#ne kemi nevojë për vlerësim të saktë të frekuencës së marrjes së mostrave për vlerësimin e saktë të periudhës së lëkundjeve ###################################### ############################# FsHz = getSamplingIntervalS (timestampS) ################# ##################################################përdorimi komponenti i katranit në daljen e sistemit referues të titullit të qëndrimit për analizën e periudhës së lavjerrësit ###################################### ############################ analize_timeSequence (timestampS, fRPYdeg_p, FsHz, 'pitch') ########### #################################################### ####përdorni prodhimin e matjes së papërpunuar të acceleromter për analizën e periudhës së lavjerrësit ####################################### ############################ analize_timeSequence (timestampS, fAccelHwUnit_x, FsHz, 'accel') ########## #################################################### ####përdorni prodhimin e papërpunuar të gjiros për analiza të periudhës së lavjerrësit ###################################### ########################### analize_timeSequence (timestampS, fGyroHwUnit_y, FsHz, ' gyro ') print (' bërë, urime:-) ') plt.show () ################################# ##################################në procesin e komunikimit bluetooth, ka një shans të rrallë që paketa e komunikimit të të dhënave mund të humbasim#ne përdorim K-mean për të izoluar të dhënat e matjes 20Hz nga të jashtmet, të cilat shkaktohen nga rënia e paketës#zhytje në "sinjal dhe sistem për më shumë detaje" ################# ################################################## def getSamplingIntervalS (timestampS): plt.figura () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('histogram') plt.xlabel ('intervali (et) e matjes')) clusterCnt = 5 km = KM n_klustrat = grumbullCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elemCnt = Numëruesi (km.labels_) shfaqjaCnt = për ii në rreze (grumbullCnt): shfaqjaCnt.append (elemCnt [ii]) FsHz = 1/centroids [dukuriCnt.index (max (shfaqjaCnt))] kthe FsHz

################################################################

#përdorni spektrometër, dmth, FFT me kohë të shkurtër për të marrë përbërësin e frekuencës, koshi i pikut është vlerësimi ynë më i mirë i luhatjes së lavjerrësit ############################ ###################################### def analiz_timeSequence (timestampS, timeSeqData, FsHz, strComment): fig, (ax1, ax2) = plt.subplots (nrows = 2) ax1.plot (kohore ax1.set_title ("matja e fushës së kohës së lavjerrësit - %s" %strComment) ax1.set_xlabel ("koha e marrjes së mostrave (e dyta)") ax1.set_ylabel (strComment); NFFT = 2048 # gjatësia e segmenteve të dritareve

Pxx, frekuencat, kazanët, im = ax2.specgram (timeSeqData, NFFT = NFFT, Fs = FsHz, noverlap = NFFT/2)

ax2.set_title ("Spectrogram") ax2.set_xlabel ("mostra") ax2.set_ylabel ("frekuenca (Hz)");

# Metoda `specgram` kthen 4 objekte. Ata janë:

# - Pxx: periodogrami # - frekuencat: vektori i frekuencës # - kazanët: qendrat e kazanëve të kohës # - im: matplotlib.image. Seksioni AksesImage që përfaqëson të dhënat në komplot pkresult = np.ku (Pxx == np.amax (Pxx)) oscFreqHz = frekuenca [pkresult [0] [0] print ('lëkundja e lavjerrësit Freq (Hz) =%f, Periudha (Sek) =%f, burimi i të dhënave të vlerësimit:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) ktheni 1/oscFreqHz

################################################################

#a duhet ta ekzekutojmë këtë program në mënyrë të pavarur, dmth., duke mos u thirrur nga pendulum1.py,#ne përcaktojmë një emër të parazgjedhur të skedarit të të dhënave log që do të analizohet ##################### ############################################ nëse _name_ == "_main_ ": defaultFilename = './PendulumTestData.txt' importo os.path nëse os.path.isfile (defaultFilename): parseDataLogFile (defaultFilename) tjetër: print (" default log file %s nuk ekziston " %defaultFilename)

Për përditësim afatgjatë, ju lutemi kontrolloni

Kodi burim përmban komente të hollësishme, le të japim një përmbledhje të nivelit të lartë të vlerësimit matematikor këtu.

1) Ne së pari lexuam përmbajtjen e skedarit CSV në kompjuter, duke përdorur një paketë python të quajtur "csv". Ne kemi matje periodike.

21: 34: 26.362, eam: 0, -128, 14464, -8, 144, -96, 2112, -1280, 1664, -0.5, -5.5, 40.5

21: 34: 26.373, eam: 128, 0, 14272, -8, 136, 40, 2112, -1280, 1664, -0.5, -6.5, 40.0

21: 34: 26.412, eam: 448, -64, 14208, -8, 136, 24, 2176, -1280, 1664, -0.5, -7.5, 40.5

21: 34: 26.462, eam: 448, -128, 14272, -8, 120, 16, 2176, -1280, 1664, -0.5, -8.0, 40.5

2) Meqenëse shkalla e matjes është kaq kritike dhe prezanton drejtpërdrejt gabimin e vlerësimit të periudhës së lavjerrësit, ne duam t'i vlerësojmë ato. Intervali ynë nominal i matjes është 50ms, pra 20Hz. Mesatarja mbi të gjitha matjet duket në rregull, por ne herë pas here humbasim paketën e transmetimit të të dhënave, intervali i përditësimit bëhet 100ms ose 150ms,…

Nëse planifikojmë shfaqjen e këtyre të dhënave, shiko Fig.1, si njeri, ne lehtë mund të kemi një vlerë shikimi prej 0.05 sekonda. Sidoqoftë, a mund të bëjmë më mirë se kaq?

Ne duhet të përdorim metodën e klasifikimit për të zgjedhur vetëm ato të mira për llogaritjen mesatare. Python ka kutinë e veglave të quajtur KMeans për të na ndihmuar në grupimin, ose të themi klasifikimin. Këto koncepte përdoren në shumë të dhëna të mëdha dhe fusha të AI.

3) Fig.2 përmban dy imazhe. Komploti i sipërm është një sekuencë e fushës kohore të matjes së këndit tonë të lëkundjes në deg. Duke iu referuar vulës kohore të boshtit x në Së dyti, ne mund të lexojmë afërsisht 22.5 cikle në 50 sekonda, që përkthehet në 2.22 sekondë të lavjerrësit. A ka ndonjë mënyrë për të automatizuar këtë proces dhe për të pasur një vlerësim më të saktë? Po, ne mund të përdorim mjetin matematikor të quajtur spektrogram, i cili përdor një pjesë të vogël të të dhënave të matjes dhe të na tregojë frekuencën e tij, shihni figurën më poshtë. Leximi i boshtit y për vijën më të errët është frekuenca e lëkundjes së lavjerrësit. Duke qenë një vijë horizontale konfirmon që lëkundja e lavjerrësit nuk ka ndryshuar fare gjatë eksperimentit. Vlera e kundërt e frekuencës së lëkundjes është periudha e lëkundjes së lavjerrësit.

Raporti përfundimtar i bërë nga programi është një përmbledhje teksti:

lëkundja e lavjerrësit Freq (Hz) = 0.449224, Periudha (Sek) = 2.226059, vlerësimi i burimit të të dhënave: katran

Ne mund të gjejmë që rezultati ynë i mëparshëm i llogaritjes së dorës, 2.22sek, është mjaft në përputhje me vlerën e llogaritur të programit.

Krahasuar me vlerën 2.0962 (sek) të llogaritur teorikisht, kemi error 5% gabim të mbetur. Si të shpëtojmë prej tyre? Mos harroni supozimin është "shufra e ngurtë uniforme"? Edhe një peshë shtesë prej 7 gramësh duket e parëndësishme, është shkaku më i madh i gabimit të mbetur.

Tani e lëvizim pajisjen, afër strumbullarit. Shikoni hapin e mëparshëm për një fotografi nga afër. Skedari i regjistrit që kam krijuar mund të shkarkohet këtu:

xiapeiqing.github.io/doc/kits/pendulum/pen…

Drejtoni hapat e njëjtë të analizës dhe marrim Periudhën prej 2.089867 (Sek), shihni Fig.3, e cila është pothuajse identike me parashikimin teorik. Shkëlqyeshëm!

Meqenëse kemi jo vetëm matjen e këndit të lëkundjes, por edhe matjen xhiroskopike dhe matjen e akselerometrit me të njëjtën ritëm. Kryeni të njëjtën analizë për dy matjet e tjera, ne marrim rezultate në Fig. 4 dhe 5. Vlerësimet nga të tre burimet e matjes bien dakord, të cilat na bëjnë më të sigurt për suksesin e eksperimentit tonë.

Këtu është rezultati si dalja përfundimtare e programit python që funksionon:

lëkundja e lavjerrësit Freq (Hz) = 0.478499, Periudha (Sek) = 2.089867, vlerësimi i burimit të të dhënave: katran

lëkundja e lavjerrësit Freq (Hz) = 0.478499, Periudha (Sek) = 2.089867, vlerësimi i burimit të të dhënave: accel

lëkundja e lavjerrësit Freq (Hz) = 0.478499, Periudha (Sek) = 2.089867, vlerësimi i burimit të të dhënave: xhiro

Mendimi i fundit në këtë hap, si mund të jenë rezultatet e vlerësimit saktësisht identike duke përdorur burime të ndryshme të të dhënave hyrëse? Kjo është kundër-intuitë. Këtë pyetje do t'ua lë lexuesve. Këtu është një sugjerim: mbani mend që ne po përdorim FFT me kohë të shkurtër për të vlerësuar frekuencën e lëkundjeve? Në fushën dixhitale, vlerësimi i frekuencës jepet në kazanët e frekuencave diskrete në vend të një vlerësimi të numrave lundrues.

Hapi 5: Rekomandimet e ardhshme të punës

Ekzistojnë disa kategori të rekomandimeve të punës në të ardhmen.

Në hapin e mëparshëm, ne arrijmë të zvogëlojmë gabimin tonë të eksperimentit nga% 5% në më pak se 1%, a mund të bëjmë më mirë se kaq? Duke vënë re se madhësia e lëkundjes zvogëlohet në mënyrë eksponenciale, një faktor kontribues mund të jetë tërheqja e ajrit e shkaktuar kur lëkundeni lavjerrësin. Seksioni kryq i lavjerrësit mund të ketë nevojë të modifikohet që të ketë një formë të thjeshtë në mënyrë që të zvogëlojë tërheqjen aerodinamike.

A mund të aplikojmë një fitim të ndryshuar në kohë të mësuar duke përdorur teknika adaptive të filtrit për të nxjerrë një sinjal konstant të madhësisë së pikut. Ndërkohë, lidhni forcën e jashtme të zbutjes së madhësisë.

Vështirë se mund të gjejmë diçka më të thjeshtë se "lëvizja e thjeshtë harmonike". A mund t'i përdorim pajisjet që analizojmë lavjerrësin për të analizuar diçka më të komplikuar, një aktivitet sportiv, një sekuencë lëshimi të raketave të ujit, etj?

Gëzuar hakimin

Recommended: