Talaan ng mga Nilalaman:

Pang-eksperimentong Pag-aaral ng Simple Harmonic Motion: 5 Mga Hakbang
Pang-eksperimentong Pag-aaral ng Simple Harmonic Motion: 5 Mga Hakbang

Video: Pang-eksperimentong Pag-aaral ng Simple Harmonic Motion: 5 Mga Hakbang

Video: Pang-eksperimentong Pag-aaral ng Simple Harmonic Motion: 5 Mga Hakbang
Video: How Can A Wind Turbine Be Motionless? 2024, Hulyo
Anonim

Sa pamamagitan ng arrowlikeFollow Higit Pa mula sa may-akda:

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

Sa silid-aralan, madalas kaming gumagamit ng isang relo relo upang magsagawa ng pag-eksperimento ng pendulo, o simpleng eksperimento sa paggalaw ng maharmonya. Narito ang isang hamon, makakagawa ba tayo ng isang tunay na grap ng paggalaw nito at makita kung ano ang madalian na angular na posisyon at tulin, iyon ang mas maraming impormasyon at kasiyahan.

Unang tanong, kailangan naming magpasya ang pendulum body ay isang walang timbang na kurdon o isang matibay na unipormeng pamalo. Ang diskarte ng kurdon ay tila mas madali. Mula sa kasanayan sa pagbuo ng isa, mayroon akong mga sumusunod na pagsasaalang-alang sa tradeoff: Ang pinakamadaling paraan upang mag-hang ng isang pendulum system ay maaaring i-hang ito sa itaas na gilid ng iyong pintuan. Ibinibigay nito ang iyong ~ 2m haba ng pendulum nang hindi gumagawa ng anumang gawaing istruktura ng gusali. Ngunit kailangan nito ang swing hindi mahawakan ang ibabaw ng pinto, na kung saan ay simpleng pagkasira ng buong eksperimento. Kaya't ang eroplano na swing nito ay dapat na tumpak na parallel sa iyong pader / pintuan sa ibabaw. Ang isang walang timbang na kurdon ay may gawi na manipis, madali itong maiikot, at gawing kumplikado ang pagsukat ng swing anggulo. Nais naming gumamit ng isang pagsukat upang kumatawan sa swing state. Ang manipis na kurdon, tulad ng linya ng isda, ay maaaring nababanat at nababanat, na nakakaapekto sa isa sa aming pinakamahalagang mga panukalang-batas na sinusukat sa pamamagitan namin at ginagamit sa equation, na kung saan ang haba ng pendulum. Ang ilan ay maaari ring maapektuhan ng temperatura. Ang bigat na bigat na nakabitin sa dulo ng kurdon ay dapat na sapat na mabigat upang ang bigat ng kurdon ay magiging bale-wala. Mangyaring magkomento kung sumasang-ayon ka o hindi sumasang-ayon sa kanila, o mayroon kang iba pang mga ideya sa disenyo ng tradeoff. Upang pag-aralan ang problemang ito, kailangan namin ng isang aparato na napakagaan na ang bigat nito ay maaaring balewalain at itinuturing pa rin namin ang pendulum system bilang isang matibay na pare-parehong pamalo. Gumagamit ako ng isang naisusuot na elektronikong COTS na COTS, na naghahatid ng impormasyon sa amin ng gyro, accelerometer, at anggulo sa pamamagitan ng koneksyon sa bluetooth. Ang mga sukat na ito ay maiimbak sa isang file ng data ng app ng mobile phone. Pagkatapos nito, susuriin namin ang data para sa aming simpleng eksperimento sa pagsasayaw. Ang numerical analysis ay nakatuon sa mga sumusunod na paksa: 1) Mahulaan ang pendulum oscillation na panahon 2) Mapaprogramang kolektahin ang pendulum simpleng data ng eksperimento sa pagkakasabay ng paggalaw 3) Gumamit ng kmean upang mapangkat ang data at alisin ang mga labas sa proseso ng pagsusuri 4) Gumamit ng maikling panahon na FFT upang matantya ang pendulum oscillation frequency

Mga gamit

Patakaran sa pagsukat ng Bluetooth

Android phone App: Pumunta sa Google playstore, maghanap ng M2ROBOTS at i-install ang control App. Kung sakaling mahirap ma-access ang Google playstore, bisitahin ang aking personal na homepage para sa alternatibong pamamaraan ng pag-download ng app

pamalo ng kahoy

ilang mga 3D na naka-print na bahagi

nakakita ng mga talim o katulad na materyal na metal

Hakbang 1: Ano ang Pendulo? Paano ito i-modelo?

Maraming mga artikulo at libro na nagpapakilala sa dereksyon ng equation ng pendulum, kabilang ang iyong librong pisika ng kurikulum. Ang nasabing nilalaman ay maaaring mas mahusay na hindi na ulitin muli. Ang pangwakas na konklusyon lamang ang nakalista dito patungkol sa paksang "simpleng pagsabay sa pagkakasundo". Upang malaman ang panahon ng isang palawit, ang kailangan lang nating malaman ay ang haba ng pendulo, na tinukoy bilang "l", sa metro.

Kung makatitiyak kaming ang bigat ay matatagpuan halos buong dulo ng isang walang timbang na kurdon na nakabitin sa isang pivot, at ang pendulum ay nakikipag-swing sa maliliit na mga anggulo θ, sabihin na mas mababa sa 15 °, ang panahon ng T1 ng naturang pendulum ay ibinigay ng:

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

g = pagbilis ng gravity, humigit-kumulang na 9.8 m / s ^ 2

Kung ang walang timbang na kurdon ay pinalitan ng isang matibay na pare-parehong pamalo, muli ng haba l, ang simpleng panahon ng pagsabay sa galaw na T2 ay ibinibigay ng T1 = 2 * pi * (2l / 3g) ^ 0.5

Mabisang mayroon itong parehong panahon bilang isang walang timbang na palawit ng kurdon na pagiging dalawang katlo ng mahigpit na pare-parehong haba ng pamalo.

Ito ang background, at maaari naming simulang ihanda ang aming eksperimento.

Hakbang 2: Ihanda ang Mga Bahagi para sa Pagbuo ng Hardware

Ihanda ang mga Bahagi para sa Pagbuo ng Hardware
Ihanda ang mga Bahagi para sa Pagbuo ng Hardware
Ihanda ang mga Bahagi para sa Pagbuo ng Hardware
Ihanda ang mga Bahagi para sa Pagbuo ng Hardware
Ihanda ang mga Bahagi para sa Pagbuo ng Hardware
Ihanda ang mga Bahagi para sa Pagbuo ng Hardware

Upang maitayo ang istraktura ng pendulo, nag-print kami ng 3D ng ilang mga bahagi, at muling ginagamit ang isang bagay na mayroon na kami. Ang pangkalahatang istraktura ng pendulo ay ipinapakita sa Fig.1. Ito ay isang halo ng mga bahagi ng pag-print ng 3D kasama ang ilang mga bahagi na gawa ng kamay at isang mahabang piraso ng pamalo ng kahoy mula sa Lowe‘s.

Ang naka-print na bahagi ng 3D sa Fig.2 ay nakabitin sa tuktok na gilid ng isang pintuan, dahil ang aming pinto ay isang madaling patag na ibabaw para mag-hang kami ng isang bagay. Link ng pag-download ng STL file:

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

Ang berdeng bahagi sa Fig.3 ay nag-uugnay sa pamalo ng kahoy sa isang talim, at ang talim ay nakapatong sa tuktok ng dalawang piraso ng riles na naka-mount sa naunang naka-print na hanger ng pinto ng 3D. Link ng pag-download ng file ng STL:

Ang dalawang piraso ng riles ay ginawa sa pamamagitan ng pagbali sa isang kalahating talim ng lagari sa kalahati, tingnan ang Larawan 4. Ang bahagi sa Fig.2 ay naghanda ng tamang laki ng puwang para sa kanila. May perpektong maaari kaming gumawa ng isang "V" na hugis ng bingaw sa dalawang talim ng talim gamit ang isang file. Ang isang makatwirang matalim na talim na metal, tulad ng isang solong talim na labaha, o anumang piraso ng metal na gawa sa kamay, ay maaaring umupo sa loob ng mga "nota" na mga notch. Ang kadahilanang kailangan namin ng isang mas maliit na lugar ng pakikipag-ugnay ay upang mabawasan ang nawala na enerhiya na gumagalaw habang nakikipag-swing.

Ang huling bahagi ng naka-print na 3D sa Fig.5 ay isang maliit na tray upang hawakan ang elektronikong kagamitan sa pagsukat.

Ang link sa pag-download:

Ang aparato sa pagsukat ng bluetooth ay bumubuo ng anggulo na pagtantiya, pagsukat ng gyro at pagsukat ng accelerometer. Ang lahat ng mga data na ito ay magagamit sa amin sa pamamagitan ng link ng wireless wireless.

Magsasagawa kami ng maraming mga eksperimento sa pamamagitan ng pag-deploy ng tool na ito sa magkakaibang posisyon ng pendulum arm, at makikita ang mga pagkakaiba.

Hakbang 3: Koleksyon ng Data ng Eksperimento

Koleksyon ng Data ng Eksperimento
Koleksyon ng Data ng Eksperimento
Koleksyon ng Data ng Eksperimento
Koleksyon ng Data ng Eksperimento
Koleksyon ng Data ng Eksperimento
Koleksyon ng Data ng Eksperimento

Mayroong dalawang maaaring gawin na pamamaraan para sa pang-eksperimentong koleksyon ng data bago namin pag-aralan ang nakuha na dataset:

1) Gamitin ang Android phone App na tinukoy sa seksyon ng mga kinakailangan upang mai-log ang lahat ng pagsukat na ginawa ng patakaran ng pamahalaan sa isang file ng data na nakaimbak sa SD card ng iyong telepono. Maaari naming kopyahin ang file at i-post ang proseso ng impormasyon.

2) Gumamit ng isang computer na may Bluetooth na pinagana, isang PC, isang laptop o isang RaspberryPi mini-computer upang maitaguyod ang isang koneksyon sa bluetooth sa patakaran ng pamahalaan at basahin ang data para sa alinman sa realtime o offline na pagtatasa.

Mayroong parehong mga kalamangan at kahinaan para sa bawat pamamaraan, susubukan namin ang pareho at sabihin ang pagkakaiba sa itinuturo na ito.

Para sa pamamaraan (1) gamit ang android app, sa sandaling nasa interface na kami ng kontrol ng Android App, ang data ng telemetry na ipinadala mula sa aparato ng pagsukat ng bluetooth sa android phone ay maitatala sa isang datalog file na pinangalanang m2flightDatayyyymmdd_hhmmss.txt. Maaari itong matagpuan sa folder ng I-download / m2LogFiles ng iyong android phone. Ang folder na "I-download" ay isang paunang mayroon nang folder sa android OS ng iyong telepono at ang "m2LogFiles" ay isang folder na nilikha ng App. Ang nilalamang filename yyyymmdd_hhmmss ay ang paraan upang ma-encode ang oras ng pagsisimula ng eksperimento (taon, buwan, araw, oras, minuto at sec) sa pangalan ng file.

Ang bawat linya sa file ng log ay isang talaan. Nagsisimula ito sa timestamp ng kaganapan, paunang salita string "eam:", na sinusundan ng 4 na data ng triplet, na kung saan ay:

Ang pagbabasa ng axisometer XYZ axis sa pagbabasa ng hilaw na sensor ng hardware ay nagkakahalaga ng mga halaga ng pagbabasa muli

Ang pagbabasa ng axis ng Gyroscope XYZ sa raw sensor ng hardware ay nagrerehistro ng mga halaga ng pagbabasa muli

Ang pagbabasa ng axis ng magnetnet XYZ sa raw sensor ng hardware ay nagrerehistro ng mga halaga ng pagbabasa muli

onboard tinatayang Roll / Pitch / Raw sa degree

Ang datafile na nilikha gamit ang computer python program ay gagamit ng magkaparehong format ng file ng data, upang ang program na ginagamit namin sa hakbang sa pagtatasa ng data ay hindi maaabala sa mapagkukunang data na ginawa ng aming python program o android app.

Magsimula tayo sa pag-coding gamit ang pamamaraan (2).

Upang makipag-ugnay sa aparatong pagsukat ng bluetooth, dalawang lasa ng SDK ang ibinibigay:

1) Python SDK, na maaaring mai-install ng "pip3 install m2controller", ang python3 ang ginagamit na wika. Ang mga halimbawa ng application application code ay nakaimbak sa https://github.com/xiapeiqing/m2robots/tree/maste… Para sa eksperimentong ito, gagamitin namin ang python script pendulum1.py

2) Java SDK, na hindi ginagamit sa pagtuturo na ito dahil nais namin sa paglaon ng visualization at pagtatasa ng nakuha na pendulum data, na maaaring tumagal ng kaunting pagsisikap para sa amin na mag-program sa Java.

Ang code code ng mapagkukunan ng programa ng python3 ay naglalaman ng maraming mga komento para sa mga detalye sa pag-andar ng code. Ang isang snapshot ng source code ay ibinigay dito.

#! / usr / bin / env python # - * - coding: UTF-8 - * - mula sa m2controller import m2controller mula sa m2controller import m2Const signal ng pag-import ng oras na pag-import ng datime import usrCfg import pendulum2

requestExit = Mali

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

# nais naming gamitin ang parehong kasunduan sa pagbibigay ng pangalan ng file ng log upang ang module ng pagtatasa ng data, pendulum2.py, ay maaaring maging agnostic sa kung paano namin nakukuha ang file ng data ng log #### ###oooooooooooooooo m2flightData% s.txt "% (datetime.datime.fromtimestamp (time.time ()). strftime ('% Y% m% d_% H% M% S')) dataLogfile = bukas (logfilename," w ")

def signal_handler (sig, frame):

pandaigdigang requestExit print ('user Ctrl-C upang lumabas sa pagpapatupad ng programa') requestExit = True signal.signal (signal. SIGINT, signal_handler)

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

# sa bawat data ng pagsukat ay magagamit na 20Hz rate, ang function na "callback" na ito ay ipapatawag sa #### ###oooooooooooooooooooooooo ()). 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, telemetry ['m_fAccelHwUnit'] [0], telemetry ['m_fAccelHwUnit'] [1], telemetry ['m_fAccelHwUnit'] [2], telemetry ['m_fGyroHwUnit'] [0], telemetry ['m_fGyroHwUnit'] [1], telemetry ['m_fGyroHwUnit'] [2], telemetry ['m_fMagH [0] 'm_fMagHwUnit'] [1], telemetry ['m_fMagHwUnit'] [2], telemetry ['m_fRPYdeg'] [0], telemetry ['m_fRPYdeg'] [1], telemetry ['m_fRPYdeg'] [2]) ## ###Oooooooooooooooo ###oooooooooooooooo #### dataStr)

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

# ipasimuno ang taga-kontrol, tandaan na itakda ang patlang BleMACaddress upang maging MAC address ng iyong aparato ### ############################## ###Oooooooooooooooooooooooo Controller = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () habang Totoo: #### ###oooooooooooooooo patakaran #### # ###oooooooooooooooo ###Oooooooooooooooo ##

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

# nakumpleto na ang pagkolekta ng data, pag-aralan natin ngayon ang data ng pag-log ### #### ###oooooooo

Para sa pangmatagalang pag-update, mangyaring mag-checkout

Ipaliwanag natin ngayon ang pamamaraan ng pagpapatakbo nito. Ang programang sawa na ito ay nakasulat sa tuktok ng isang mai-install na pakete na pip, na pinangalanang m2controller. Nag-aalok ang mas mababang antas ng package ng mekanismo ng callback, upang ang bawat natanggap na pag-update sa pagsukat ay mag-uudyok sa callback function na isinulat namin, at mai-save ang data sa isang lokal na file ng log. Ang format ng nilalaman ng data ng file ng log ay magkapareho sa kung ano ang ginawa ng android kasamang app, upang ang file ng data log ay nilikha ng alinman sa programa ng sawa o andriod na kasamang app ay maaaring palitan.

Ang signal ng ctrl-C ng gumagamit, na nakuha ng operating system, ay naipasa sa programa, at ititigil ang walang katapusang loop na naghihintay para sa bagong pagdating ng data ng pagsukat.

Hanggang ngayon, matagumpay na nalikha ang file ng log, at tatawagin ng programang ito ang programa ng pagtatasa upang pag-aralan ang aming mga resulta sa eksperimento.

Narito ang dalawang mga eksperimento, at ang paghahambing ay nagpapakita ng napaka-kapansin-pansin na pagkakaiba sa pamamagitan ng paglakip ng isang 7gram aparato sa iba't ibang mga lokasyon.

Sa Fig.2, gumagamit kami ng isang sukat upang matukoy ang aktwal na bigat ng aparatong pagsukat ng bluetooth na ito.

Inilalarawan ng Fig.3 ang pag-setup ng pendulum kung saan ang 7gram aparato ay nakakabit sa ibabang dulo ng pendulo. Ang pagsasaayos ng pag-setup sa Fig.4 ay mayroong 7gram mass na matatagpuan mas malapit sa swinging pivot.

Ang Fig.5 ay isang view ng closeup ng istraktura ng pendulum.

Hakbang 4: Pagsusuri sa Data

Pagsusuri sa datos
Pagsusuri sa datos
Pagsusuri sa datos
Pagsusuri sa datos
Pagsusuri sa datos
Pagsusuri sa datos

Ang aparato sa pagsukat ng bluetooth ay may bigat na ~ 7gram, na may bigat na mas mababa sa isang ~ 1.6meter na mahabang stick ng kahoy. Gamitin ang palagay ng "matibay na unipormeng pamalo", at mayroon kaming equation ng pendulum period na ito, T1 = 2 * pi * (2l / 3g) ^ 0.5

Upang mapanatili ang gravity, maaari kaming gumamit ng 9.8m / s ^ 2. Ngunit ang isang mas tumpak na gravity na pare-pareho sa anumang naibigay na geolocation ay maaaring makuha mula sa web service na ito:

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

Para sa san francisco, ito ay 9.81278m / s ^ 2

Ang haba ng pendulum ay sinusukat na 64.5"

Ang 2 * pi * sqrt (2 * 64.5 * 0.0254 / (3 * 9.81278)) ay nagbibigay ng inaasahang panahon ng pendulum na 2.0962 (sec).

Tingnan natin kung sumasang-ayon ito sa aming mga eksperimento.

Sa ika-1 na eksperimento, ang setup ng pendulum ay mayroong 7gram aparato na nakakabit sa ibabang dulo ng pendulo. Maaaring mai-download ang aking file sa log sa:

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

Palitan ang pangalan nito sa "PendulumTestData.txt" at ilagay ito sa parehong folder ng python analysis program. Ang isang snapshot ng source code ay ibinigay dito.

#! / usr / bin / env python # - * - coding: UTF-8 - * - import csv import matplotlib.pyplot bilang plt plt.style.use ('seaborn-whitegrid') na i-import ang numpy bilang np mula sa datime na pag-import ng datime, timedelta import seaborn bilang sns mula sa sklearn.cluster import KMeans mula sa mga koleksyon import Counter #### ###oooooooooooooooo ###Oooooooooooooooo ## def parseDataLogFile (datafilename): #### # ###Oooooooooooooooo #### fGyroHwUnit_x = fGyroHwUnit_y = fGyroHwUnit_z = fMagHwUnit_x = fMagHwUnit_y = fMagHwUni t_z = fRPYdeg_r = fRPYdeg_p = fRPYdeg_y = para sa hilera sa readCSV: subukan: x = datetime.strptime (row [0].split (',') [0], '% H:% M:% S.% f ') timestampS.append (timedelta (oras = x.hour, minuto = x.minute, segundo = x.second, microseconds = x.microsecond).total_seconds ()) fAccelHwUnit_x.append (float (row [1] [4:])) fAccelHwUnit_y.append (float (row [2])) fAccelHwUnit_z.append (float (row [3])) fGyroHwUnit_x.append (float (row [4])) fGyroHwUnit_y.append (float (row [5])) fGyroHwUnit_z.append (float (row [6])) fMagHwUnit_x.append (float (row [7])) fMagHwUnit_y.append (float (row [8])) fMagHwUnit_z.append (float (row [9])) fRPYdeg_r.append (float (row [10])) fRPYdeg_p.append (float (row [11])) fRPYdeg_y.append (float (row [12])) maliban sa: pass timestampS = np.asarray (Mga timestamp) timestamp = timestamp - timestamp [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.mean (fRPYdeg_p) fRPYdeg_y = np.asarray (fRPYdeg_y)

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

# kailangan namin ng tumpak na pagtatantya ng dalas ng sampling para sa tumpak na pagtatantya ng panahon ng pag-oscillation #### ###Oooooooooooooooooooooooo #### pitch sangkap sa output ng sanggunian heading na sistema ng output para sa pagtatasa ng panahon ng pendulum #### ###oooooooooooooooooooooooo ###Oooooooooooooooo ### # Gumamit ng acceleromter na hilaw na pagsukat ng pagsukat para sa pagtatasa ng panahon ng pendulum #### ###oooooooooooooooooooooooo ###Oooooooooooooooo ### # Gumamit ng output ng hilaw na pagsukat ng gyro para sa pagtatasa ng panahon ng pendulum #### ###oooooooooooooooooooooooo gyro ') naka-print (' tapos na, binabati kita:-) ') plt.show () #### ###oooooooooooooooooooooooooooooooo mawala # ginagamit namin ang K-ibig sabihin upang ihiwalay ang data ng 20Hz na sukat mula sa mga outlier, na sanhi ng pagbagsak ng packet # na pagsisid sa "signal at system para sa higit pang mga detalye." ###oooooooooooooooo (timestampS): plt.figure () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('histogram') plt.xlabel ('interval interval (s)') clusterCnt = 5 km = KMeans (n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elemCnt = Counter (km.labels_) paglitawCnt = para sa ii sa saklaw (clusterCnt): paglitawCnt.append (elemCnt [ii]) FsHz = 1 / centroids [paglitawCnt.index (max (paglitawCnt))] ibalik ang FsHz

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

# Gumamit ng spectrometer, ibig sabihin, maikling panahon FFT upang makuha ang bahagi ng dalas, ang tuktok na basurahan ay ang aming pinakamahusay na pagtatantya ng pendulum oscillation #### #### fig, (ax1, ax2) = plt.subplots (nrows = 2) ax1.plot (timestampS, timeSeqData, marker = 'o', markerfacecolor = 'blue', markersize = 2, color = 'skyblue', linewidth = 1) ax1.set_title ("pagsukat ng oras ng oras ng pendulum -% s"% strComment) ax1.set_xlabel ("oras ng pag-sample (pangalawa)") ax1.set_ylabel (strComment); NFFT = 2048 # ang haba ng mga segment ng windowing

Pxx, freqs, bins, im = ax2.specgram (timeSeqData, NFFT = NFFT, Fs = FsHz, noverlap = NFFT / 2)

ax2.set_title ("Spectrogram") ax2.set_xlabel ("sample") ax2.set_ylabel ("frequency (Hz)");

# Ang pamamaraang `specgram` ay nagbabalik ng 4 na mga bagay. Sila ay:

# - Pxx: ang periodogram # - freqs: ang frequency vector # - bins: ang mga sentro ng time bins # - im: the matplotlib.image. Halimbawa ng AcesImage na kumakatawan sa data sa isang plot pkresult = np. saan (Pxx == np.amax (Pxx)) oscFreqHz = freqs [pkresult [0] [0] print ('pendulum oscillation Freq (Hz) =% f, Period (Sec) =% f, mapagkukunan ng data ng pagtatantya:% s'% (oscFreqHz, 1 / oscFreqHz, strComment)) ibalik ang 1 / oscFreqHz

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

# dapat ba nating patakbuhin ang program na ito nang nakapag-iisa, ibig sabihin, hindi tinawag ng pendulum1.py, # tinutukoy namin ang isang default na pangalan ng file ng data ng log upang masuri #### ###oooooooooooooooo ": defaultFilename = './PendulumTestData.txt' import os.path kung os.path.isfile (defaultFilename): parseDataLogFile (defaultFilename) iba pa: i-print (" default log file% s wala "% defaultFilename)

Para sa pangmatagalang pag-update, mangyaring mag-checkout

Naglalaman ang source code ng detalyadong mga komento, magbigay tayo ng isang mataas na antas ng buod ng matematika na pagtatantya dito.

1) Una naming nabasa ang nilalaman ng file ng CSV sa computer, gamit ang isang python package na tinatawag na "csv". Mayroon kaming panaka-nakang pagsukat.

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) Dahil ang rate ng pagsukat ay napaka kritikal at direktang ipinakikilala ang error sa pagtatantya ng panahon ng pendulum, nais naming tantyahin ang mga ito. Ang aming nominal na agwat ng pagsukat ay 50ms, ibig sabihin, 20Hz. Ang average sa lahat ng mga pagsukat ay mukhang OK, ngunit paminsan-minsan ay nawawalan kami ng packet ng paghahatid ng data, ang agwat ng pag-update ay nagiging 100ms o 150ms,…

Kung binabalak namin ang paglitaw ng data na ito, tingnan ang Fig.1, bilang isang tao, madali tayong magkaroon ng isang halaga ng eyeballing na 0.05sec. Gayunpaman, maaari ba tayong gumawa ng mas mahusay kaysa doon?

Kailangan naming gumamit ng pamamaraan ng pag-uuri upang piliin lamang ang mga mabubuti para sa average na pagkalkula. Ang Python ay may toolbox na pinangalanang KMeans upang matulungan kami sa clustering, o sabihin ang pag-uuri. Ang mga konseptong ito ay ginagamit sa maraming malalaking lugar ng data at AI.

3) Ang Fig.2 ay naglalaman ng dalawang mga imahe. Ang nangungunang balangkas ay isang pagkakasunud-sunod ng oras-domain ng aming pagsukat ng pag-swing ngulo sa deg. Sa pamamagitan ng pagsangguni sa timestamp ng x-axis sa Pangalawa, mababasa natin ang humigit-kumulang 22.5 na cycle sa 50 segundo, na isinalin sa 2.22 Sec pendulum period. Mayroon bang paraan upang ma-automate ang prosesong ito at magkaroon ng mas tumpak na pagtatantya? Oo, maaari naming gamitin ang tool sa matematika na tinatawag na spectrogram, na gumagamit ng isang maliit na tipak ng data ng pagsukat at sabihin sa amin ang dalas nito, tingnan ang pigura sa ibaba. Ang pagbabasa ng y-axis para sa pinakamadilim na linya ay ang dalas ng pendulum oscillation. Ang pagiging isang pahalang na linya ay nagpatibay ng pendulum oscillation ay hindi nagbago sa lahat sa buong eksperimento. Ang kabaligtaran na halaga ng dalas ng oscillation ay ang pendulum oscillation period.

Ang pangwakas na ulat na ginawa ng programa ay isang buod ng teksto:

pendulum oscillation Freq (Hz) = 0.449224, Panahon (Sec) = 2.226059, mapagkukunan ng data ng pagtatantya: pitch

Mahahanap namin ang aming naunang resulta ng pagkalkula ng kamay ng eyeballing, 2.22sec, ay medyo pare-pareho sa halagang kinalkula ng programa.

Kung ikukumpara sa 2.0962 (sec) na teoretikal na na-compute na halaga, mayroon kaming ~ 5% na natitirang error. Paano mapupuksa ang mga ito? Tandaan ang palagay ay "matibay na unipormeng pamalo"? Kahit na isang 7 gramo na sobrang timbang ay tila walang halaga, ito ang pinakamalaking sanhi ng natitirang error.

Inililipat namin ngayon ang aparato, malapit sa pivot. Tingnan ang nakaraang hakbang para sa isang malapit na larawan. Ang file ng log na aking nilikha ay maaaring ma-download dito:

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

Patakbuhin ang parehong mga hakbang sa pagtatasa, at nakukuha namin ang Panahon ng 2.089867 (Sek), tingnan ang Fig.3, na halos magkatulad sa hula ng teoretikal. Malaki!

Dahil wala lamang kaming pagtatayon ng pagsukat ng anggulo, kundi pati na rin ang pagsukat ng gyroscopic at pagsukat ng accelerometer sa parehong rate. Patakbuhin ang parehong pagsusuri para sa iba pang dalawang pagsukat, nakakakuha kami ng mga resulta sa Fig.4 at 5. Ang mga pagtatantya mula sa lahat ng tatlong mga mapagkukunan ng pagsukat ay sumasang-ayon, na ginagawang mas tiwala kami sa tagumpay ng aming eksperimento.

Narito ang resulta bilang pangwakas na output ng programa ng sawa na tumatakbo:

pendulum oscillation Freq (Hz) = 0.478499, Panahon (Sec) = 2.089867, mapagkukunan ng data ng pagtatantya: pitch

pendulum oscillation Freq (Hz) = 0.478499, Panahon (Sec) = 2.089867, mapagkukunan ng data ng pagtatantya: accel

pendulum oscillation Freq (Hz) = 0.478499, Panahon (Sec) = 2.089867, mapagkukunan ng data ng pagtatantya: gyro

Huling naisip sa hakbang na ito, paano magiging eksaktong magkapareho ang mga resulta ng pagtatantya gamit ang iba't ibang mapagkukunan ng input ng data? Ito ay kontra-intuwisyon. Iiwan ko ang katanungang ito sa mga mambabasa. Narito ang isang pahiwatig: tandaan gumagamit kami ng maikling panahon FFT upang matantya ang dalas ng oscillation? Sa digital domain, ang pagtatantya ng dalas ay ibinibigay sa mga discrete frequency bins sa halip na isang lumulutang na pagtatantya ng bilang.

Hakbang 5: Mga Rekumendasyon sa Trabaho sa Hinaharap

Mayroong ilang mga kategorya ng mga rekomendasyon sa trabaho sa hinaharap.

Sa naunang hakbang, pinamamahalaan namin upang mabawasan ang aming error sa eksperimento mula ~ 5% hanggang mas mababa sa 1%, magagawa ba natin nang mas mahusay kaysa doon? Napansin ang lakas ng pag-oscillation na bumababa nang exponentially, ang isang nag-aambag na kadahilanan ay maaaring maging sanhi ng pag-drag ng hangin sa pag-indayog ng pendulum. Ang cross section ng pendulo ay maaaring kailanganing mabago upang maging streamline na hugis upang mabawasan ang aerodynamic drag.

Maaari ba kaming maglapat ng isang napag-aralan na napag-aralan gamit ang mga diskarte sa adaptive filter upang mag-output ng isang pare-pareho na signal ng rurok. Pansamantala, iugnay ang lakas na pagpapalambing ng lakas ng panlabas na puwersa.

Hindi namin mahahanap ang anumang bagay na mas simple kaysa sa "simpleng kilusang maharmonya". Maaari ba nating magamit ang mga pasilidad na pinag-aaralan namin ang pendulo upang pag-aralan ang isang bagay na mas kumplikado, isang aktibidad sa isport, isang pagkakasunud-sunod ng paglulunsad ng rocket ng tubig, atbp?

Maligayang pag-hack

Inirerekumendang: