Mündəricat:

Sadə harmonik hərəkətin eksperimental tədqiqi: 5 addım
Sadə harmonik hərəkətin eksperimental tədqiqi: 5 addım

Video: Sadə harmonik hərəkətin eksperimental tədqiqi: 5 addım

Video: Sadə harmonik hərəkətin eksperimental tədqiqi: 5 addım
Video: Tünd materiya: Görə bilmədiyimiz materiya - Ceyms Qillis 2024, Noyabr
Anonim

Müəllif tərəfindən daha çox izləyin:

Gəzinti Strandbeest, Java/Python və Tətbiqə Nəzarət
Gəzinti Strandbeest, Java/Python və Tətbiqə Nəzarət
Gəzinti Strandbeest, Java/Python və Tətbiqə Nəzarət
Gəzinti Strandbeest, Java/Python və Tətbiqə Nəzarət

Sınıfda, sarkaclı təcrübə və ya sadə harmonik hərəkət təcrübəsi aparmaq üçün saniyəölçəndən istifadə edirik. Burada bir problem var, hərəkətinin həqiqi bir qrafikini hazırlaya bilərikmi və ani açısal mövqe və sürətin nə olduğunu görə bilərik, bu daha çox məlumat və əyləncədir.

İlk sual, sarkac gövdəsinin çəkisiz bir kordon və ya möhkəm bir çubuq olduğuna qərar verməliyik. Kordon yanaşması daha asan görünür. Bir tikinti təcrübəsindən aşağıdakı mülahizələrim var: Sarkaç sistemini asmağın ən asan yolu onu qapınızın yuxarı kənarına asmaq ola bilər. Bu, heç bir struktur tikinti işi görmədən ~ 2m sarkaç uzunluğunu verir. Ancaq dönmənin qapının səthinə toxunmaması lazımdır ki, bu da bütün sınağı pozar. Belə ki, yellənən təyyarə divar/qapı səthinə dəqiq paralel olmalıdır. Ağırlıqsız bir tel incə olmağa meyllidir, asanlıqla dönə bilər və yellənmə bucağının ölçülməsini çətinləşdirir. Yelləncək vəziyyətini təmsil etmək üçün bir ölçüdən istifadə etmək istəyirik. Balıq xətti kimi incə kordon elastik və uzana bilər ki, bu da bizim ölçdüyümüz və sarkacın uzunluğu olan tənlikdə istifadə olunan ən əhəmiyyətli sabitlərimizdən birini təsir edir. Bəziləri temperaturdan da təsirlənə bilər. Şnurun ucunda asılı olan çəki kütləsi kifayət qədər ağır olmalıdır ki, kordonun çəkisi əhəmiyyətsiz olsun. Onlarla razısınızsa və ya razı deyilsinizsə və ya başqa dizayn fikirləriniz varsa şərh edin. Bu problemi öyrənmək üçün, çəkisi nəzərə alınmayacaq qədər yüngül bir qurğuya ehtiyacımız var və hələ də sarkaç sisteminə sərt vahid çubuq kimi baxırıq. Cayro, akselerometr və bucaq məlumatlarını bluetooth bağlantısı ilə bizə çatdıran COTS geyilə bilən elektron idarəedicidən istifadə edirəm. Bu ölçülər cib telefonu tətbiq məlumat faylında saxlanılacaq. Bundan sonra sadə harmonik hərəkət təcrübəmiz üçün məlumatları təhlil edəcəyik. Rəqəmsal analiz aşağıdakı mövzulara yönəlib: 1) Sarkacın salınma müddətini proqnozlaşdırmaq 2) Sarkacın sadə harmonik hərəkəti ilə bağlı təcrübə məlumatlarını proqramlaşdırılmış şəkildə toplamaq 3) Analiz prosesində məlumatları qruplaşdırmaq və kənarları çıxarmaq üçün kmean istifadə edin 4) Qiymətləndirmək üçün qısa müddətli FFT istifadə edin. sarkac salınım tezliyi

Təchizat

Bluetooth ölçmə aparatı

Android telefon tətbiqi: Google playstore -a gedin, M2ROBOTS -u axtarın və nəzarət tətbiqini quraşdırın. Google play mağazasına daxil olmaq çətin olarsa, alternativ tətbiq yükləmə üsulu üçün şəxsi ana səhifəmə daxil olun

taxta çubuq

3D çap olunmuş bir neçə hissə

mişar bıçaqları və ya oxşar metal material

Addım 1: Sarkaç nədir? Necə Model Olmalı?

Kurikulum fizika kitabınız da daxil olmaqla, sarkaç tənliyi törəməsini təqdim edən bir çox məqalə və kitab var. Belə məzmun burada bir daha təkrarlanmasa daha yaxşı olar. Burada "sadə harmonik hərəkət" mövzusunda yalnız son nəticə verilmişdir. Sarkacın müddətini bilmək üçün, bilməli olduğumuz tək şey, "l" olaraq təyin olunan sarkacın uzunluğunu metrlərlə ifadə etməkdir.

Ağırlığın bir döngədə asılı olan çəkisiz bir şnurun ucunda demək olar ki, tam yerləşdiyinə əminiksə və sarkac kiçik açılar θ ilə 15 ° -dən aşağı sallanırsa, belə sarkacın T1 dövrü verilir:

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

g = cazibə sürəti, təxminən 9.8 m/s^2

Əgər çəkisiz şnur yenə l uzunluğunda sərt vahid çubuqla əvəz olunarsa, onun sadə harmonik hərəkət dövrü T2 T1 = 2*pi*(2l/3g)^0,5 ilə verilir.

Effektiv olaraq, sərt vahid çubuq uzunluğunun üçdə ikisi olan çəkisiz bir kordon sarkacının eyni müddətinə malikdir.

Bu arxa plandır və təcrübəmizi hazırlamağa başlaya bilərik.

Addım 2: Avadanlıq Tikintisi üçün Parçaları Hazırlayın

Parçaları Avadanlıq Tikintisi üçün Hazırlayın
Parçaları Avadanlıq Tikintisi üçün Hazırlayın
Parçaları Avadanlıq Tikintisi üçün Hazırlayın
Parçaları Avadanlıq Tikintisi üçün Hazırlayın
Parçaları Avadanlıq Tikintisi üçün Hazırlayın
Parçaları Avadanlıq Tikintisi üçün Hazırlayın

Sarkac quruluşunu qurmaq üçün bəzi hissələri 3D çap edirik və əlimizdə olan bir şeyi təkrar emal edirik. Sarkacın ümumi quruluşu Şəkil 1 -də göstərilmişdir. 3D çap hissələrinin əl istehsalı bəzi hissələri və Lowe'nin uzun bir ağac çubuğu parçası ilə qarışığıdır.

Şəkil 2 -də 3D çap edilmiş hissə bir qapının yuxarı kənarına asılmışdır, çünki qapımız bir şeyi asmaq üçün asan düz bir səthdir. STL fayl yükləmə linki:

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

Şəkil 3 -dəki yaşıl hissə taxta çubuğu bir bıçağa bağlayır və bıçaq əvvəlki 3D çaplı qapı askısına quraşdırılmış iki ədəd dəmir yolu üzərində oturur. STL fayl yükləmə linki:

İki dəmir yolu köhnə mişar bıçağını yarıya bölməklə hazırlanır, bax Şəkil 4. Şəkil 2 -də olan hissə onlar üçün uyğun yuva ölçüsü hazırlamışdır. İdeal olaraq, bu iki mişar bıçağında bir fayl istifadə edərək "V" şəklində bir çentik düzəldə bilərik. Tək tərəfli ülgüc və ya hər hansı bir metal parça kimi ağlabatan iti kənarlı bir metal, "V" formalı çentiklərin içərisində yerləşə bilər. Kiçik bir əlaqə sahəsinə ehtiyacımızın səbəbi, yellənərkən itən kinetik enerjini azaltmaqdır.

5 -ci şəkildəki son 3D çap hissəsi elektron ölçmə aparatını saxlamaq üçün kiçik bir tepsidir.

Yükləmə linki:

Bluetooth ölçmə aparatı bucaq, cayro və akselerometr ölçümü yaradır. Bütün bu məlumatlar bluetooth simsiz bağlantısı vasitəsilə əldə edilə bilər.

Bu aparatı sarkaç qolunun fərqli mövqeyinə yerləşdirərək bir çox təcrübə aparacağıq və fərqləri görəcəyik.

Addım 3: Təcrübə Məlumat Toplanması

Təcrübə məlumatlarının toplanması
Təcrübə məlumatlarının toplanması
Təcrübə məlumatlarının toplanması
Təcrübə məlumatlarının toplanması
Təcrübə məlumatlarının toplanması
Təcrübə məlumatlarının toplanması

Əldə edilmiş məlumat toplusunu təhlil etməzdən əvvəl eksperimental məlumat toplamaq üçün iki edilə bilən üsul var:

1) Cihazın istehsal etdiyi bütün ölçüləri telefonunuzun SD kartında saxlanan məlumat faylına daxil etmək üçün tələblər bölməsində göstərilən Android telefon tətbiqindən istifadə edin. Sənədi kopyalaya və məlumatları emal edə bilərik.

2) Cihaza bluetooth bağlantısı qurmaq və ya real vaxtda və ya oflayn analiz üçün məlumatları oxumaq üçün bluetooth effektiv kompüter, PC, dizüstü kompüter və ya RaspberryPi mini kompüterdən istifadə edin.

Hər bir metodun həm müsbət, həm də mənfi tərəfləri var, hər ikisini sınayacağıq və bu təlimatdakı fərqi söyləyəcəyik.

Android tətbiqindən istifadə edərək (1) üsulu üçün, Android Tətbiq idarəetmə interfeysinə daxil olduqdan sonra, bluetooth ölçmə aparatından android telefona göndərilən telemetri məlumatları m2flightDatayyyymmdd_hhmmss.txt adlı bir məlumat faylına yazılacaq. Android telefonunuzun Yükləmə/m2LogFiles qovluğunda tapa bilərsiniz. "Yüklə" qovluğu telefonunuzun Android əməliyyat sistemində əvvəlcədən mövcud olan bir qovluqdur və "m2LogFiles" Tətbiqin yaratdığı qovluqdur. Fayl adı məzmunu yyyymmdd_hhmmss, təcrübənin başlama vaxtını (il, ay, gün, saat, dəqiqə və saniyə) fayl adında kodlaşdırmağın yoludur.

Günlük sənədindəki hər bir sətir bir qeyddir. Tədbirin zaman damgası, "eam:" önsöz sətri ilə başlayır və ardınca 4 üçlük məlumatı gəlir:

Xam sensor aparatında oxuyan XYZ oxu oxu oxunması, oxunuş dəyərləri

Xyr sensor aparatında oxunan XYZ oxu giroskopu, oxunuş dəyərlərini qeyd edir

Xam sensor aparatında oxunan XYZ oxu maqnitometrinin oxunuş dəyərləri yenidən oxunur

təyyarədə təxmin edilən Roll/Pitch/Raw dərəcəsi

Kompüter python proqramı ilə yaradılan məlumat faylı eyni məlumat fayl formatından istifadə edəcək, belə ki məlumatların təhlili mərhələsində istifadə etdiyimiz proqram python proqramımız və ya android tətbiqimiz tərəfindən istehsal olunan məlumat mənbəyi ilə narahat olmayacaq.

(2) metodundan istifadə edərək kodlaşdırmağa başlayaq.

Bluetooth ölçmə cihazı ilə qarşılıqlı əlaqə qurmaq üçün iki növ SDK təqdim olunur:

1) "pip3 install m2controller" tərəfindən quraşdırıla bilən Python SDK, python3 istifadə olunan dildir. İstifadəçi tətbiq kodunun nümunələri https://github.com/xiapeiqing/m2robots/tree/maste… saytında saxlanılır. Bu sınaq üçün pendulum1.py python skriptindən istifadə edəcəyik.

2) Bu təlimatlandırmada istifadə edilməyən Java SDK, çünki Java -da proqramlaşdırmağımız üçün bir az daha çox səy tələb edə biləcək əldə edilən sarkaç məlumatlarının daha sonra görselleştirilmesini və analiz edilməsini istəyirik.

Python3 məlumat toplama proqramının mənbə kodu, kodun funksionallığı ilə bağlı bir çox şərhləri ehtiva edir. Mənbə kodunun anlıq görüntüsü burada verilmişdir.

#!/usr/bin/env python#-*-kodlaşdırma: UTF-8-*-m2controller idxal m2controller m2controller idxal m2Const idxal siqnal idxal vaxt idxal datetime idxal usrCfg idxal pendulum2

requestExit = Yanlış

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

#eyni log fayl adlandırma konvensiyasını istifadə etmək istəyirik ki, məlumatların təhlili modulu, pendulum2.py, log data faylını necə əldə etdiyimizə qarşı aqnostik ola bilər ################## ############################################################## logfilename = " m2flightData%s.txt "%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = açıq (logfilename," w ")

def signal_handler (siq, çərçivə):

qlobal sorğu Çıxış çapı ('proqramın icrasından çıxmaq üçün istifadəçi Ctrl-C') requestExit = True signal.signal (signal. SIGINT, signal_handler)

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

#hər ölçü məlumatı 20Hz sürətlə əldə edildikdə, bu "geri çağırma" funksiyası çağırılacaq ############################# ################################## def callbackfunc (telemetriya): 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], telemetriya ['m_fAccelHwUnit'] [2], telemetri ['m_fGyroHwUnit'] [0], telemetri ['m_fGyroHwUnit'] [1], telemetri ['m_fGyroHwUnit'] [2], telemetr ['m_fm] 'm_fMagHwUnit'] [1], telemetri ['m_fMagHwUnit'] [2], telemetri ['m_fRPYdeg'] [0], telemetri ['m_fRPYdeg'] [1], telemetriya ['m_fRPYdeg'] [2]) # ######################################################################################### ############# məlumat sətrini ekrana çap edirik və ###################### ############################################# çap (dataStr) dataLogfile.writelines (dataStr)

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

#nəzarətçini işə salın, BleMACaddress sahəsini cihazınızın MAC ünvanı təyin etməyi unutmayın ################################# #################################TODO: istifadəçi tərəfindən təyin edilmədikdə BleMACaddress -i işə salaq. nəzarətçi = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () isə True: ############################ #########################################Sarkac ölçüsündən yaradılan və göndərilən ölçü məlumatlarını gözləyin. aparat #################################################### ################### nəzarətçi.m_CommsTunnel.waitForNotifications (1.0) əgər sorğu çıxarılsa: ####################### ############################################# Evdə saxlama, məlumatların qeydini bitirdikdə burada işləyir. #################################################### ############### nəzarətçi.stop () dataLogfile.close () fasilə

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

#məlumat toplama tamamlandı, indi log məlumatlarını təhlil edək ######################################## ########################## pendulum2.parseDataLogFile (logfilename)

Uzun müddətli yeniləmə üçün

İndi onun işləmə üsulunu izah edək. Bu python proqramı, m2controller adlı bir boru quraşdırıla bilən paketin üstünə yazılmışdır. Aşağı səviyyəli paket geri çağırma mexanizmi təklif edir ki, hər alınan ölçü yeniləməsi yazdığımız geri çağırma funksiyasını işə salsın və məlumatları yerli qeyd faylına saxlasın. Günlük faylı məlumat məzmununun formatı, Android yoldaş proqramı tərəfindən hazırlananlarla eynidir, belə ki, ya python proqramı, ya da andriod yoldaş proqramı tərəfindən yaradılan məlumat qeyd faylı dəyişdirilə bilər.

Əməliyyat sistemi tərəfindən çəkilən istifadəçi ctrl-C siqnalı proqrama ötürülür və ölçmə məlumatlarının yeni gəlişini gözləyən sonsuz döngəni dayandırır.

İndiyə qədər log faylı uğurla yaradıldı və bu proqram təcrübə nəticələrimizi öyrənmək üçün analiz proqramını çağıracaq.

Burada iki təcrübə var və müqayisə fərqli yerlərdə 7 qramlıq bir cihaz bağlayaraq çox nəzərə çarpan fərqi göstərir.

Şəkil 2 -də, bu bluetooth ölçmə aparatının əsl ağırlığını təyin etmək üçün bir miqyas istifadə edirik.

Şəkil 3, 7 qramlıq cihazın sarkacın aşağı ucuna bərkidildiyi sarkaç quruluşunu təsvir edir. Şəkil 4 -də quraşdırma konfiqurasiyası, fırlanan döngəyə çox yaxın olan 7 qram ağırlığa malikdir.

Şəkil 5, sarkaç quruluşunun yaxından görünüşüdür.

Addım 4: Məlumatların təhlili

Məlumat Təhlili
Məlumat Təhlili
Məlumat Təhlili
Məlumat Təhlili
Məlumat Təhlili
Məlumat Təhlili

Bluetooth ölçmə aparatının çəkisi ~ 7 qramdır, çəkisi ~ 1,6 metr uzunluğunda taxta çubuqdan daha azdır. "Sərt vahid çubuq" fərziyyəsini istifadə edin və bu sarkac dövrü tənliyinə sahibik, T1 = 2*pi*(2l/3g)^0.5

Ağırlıq sabitini əldə etmək üçün 9.8m/s^2 istifadə edə bilərik. Ancaq hər hansı bir coğrafi mövqedə daha dəqiq bir cazibə sabitliyi bu veb xidmətindən əldə edilə bilər:

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

San Francisco üçün 9.81278m/s^2 -dir

Sarkacın uzunluğu 64.5 '' olaraq ölçülür

2*pi*sqrt (2*64.5*0.0254/(3*9.81278)), gözlənilən sarkaç müddətini 2.0962 (saniyə) verir.

Təcrübələrimizlə uyğun olub olmadığını görək.

Birinci təcrübədə, sarkaç quruluşu, sarkacın aşağı ucuna 7 qramlıq bir cihaza malikdir. Günlük faylımı aşağıdakı ünvandan yükləyə bilərsiniz:

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

Adını "PendulumTestData.txt" olaraq dəyişdirin və python analiz proqramının eyni qovluğuna qoyun. Mənbə kodunun anlıq görüntüsü burada verilmişdir.

#!/usr/bin/env python#-*-kodlaşdırma: UTF-8-*-ctv idxal matplotlib.pyplotu plt plt.style.use ('seaborn-whitegrid') olaraq datetime idxal tarixindən np olaraq idxal edin, sklearn.cluster idxalından sns olaraq dənizkənarı vaxt idxal KMeans kolleksiyalardan idxal Counter ################################### ###############################bu funksiya məlumat fayllarının təhlili işini ############# yerinə yetirir. ######################################################################################### ## def parseDataLogFile (datafilename): ############################################ ########################vergüllə ayrılmış məlumat qeyd faylında (CSV) məlumat çıxarın və hər bir sütundakı məzmunu bir float tipli dəyişənə qeyd edin ## #################################################### ############ csvfile olaraq açıq (datafilename) ilə: readCSV = csv.reader (csvfile, ayırıcı = ',') zaman damgasıS = fAccelHwUnit_x = fAccelHwUnit_y = fAccelHwUnn fGyroHwUnit_x = fGyroHwUnit_y = fGyroHwUnit_z = fMagHwUnit_x = fMagHwUnit_y = fMagHwUni t_z = fRPYdeg_r = fRPYdeg_p = fRPYdeg_y = readCSV -də satırlar üçün: cəhd edin: x = datetime.strptime (sıra [0]. bölünmüş (',') [0], '%H:%M:%S.%f ') zaman damgası S. [1] [4:])) fAccelHwUnit_y.append (float (satır [2])) fAccelHwUnit_z.append (float (sıra [3])) fGyroHwUnit_x.append (float (sıra [4])) fGyroHwUnit_y.append (float (satır [2])) (sıra [5])) fGyroHwUnit_z.append (float (sıra [6])) fMagHwUnit_x.append (float (sıra [7])) fMagHwUnit_y.avla (float (sıra [8])) fMagHwUnit_z.append (float (satır) [9])) fRPYdeg_r.append (float (sıra [10])) fRPYdeg_p.append (float (sıra [11])) fRPYdeg_y.append (float (sıra [12])) istisna olmaqla: keçmək zaman damgasıS = np.asarray (zaman damgaları) zaman damgaları = zaman damgaları - zaman damgaları [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)

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

#dəqiq salınım dövrü təxmini üçün nümunə götürmə tezliyinin dəqiq qiymətləndirilməsinə ehtiyacımız var #################################### ############################## FsHz = getSamplingIntervalS (zaman damgasıS) ################ ##################################################### istifadə# Sarkac dövrü təhlili üçün mövqe başlığı istinad sisteminin çıxışında pitch komponenti ##################################### ############################# analiz_ zamanSekansı (zaman damgasıS, fRPYdeg_p, FsHz, 'pitch') ########### ################################################### ####sarkac dövrü təhlili üçün acceleromter xam ölçmə çıxışından istifadə edin ##################################### ############################# analiz_vaxtSekansı (zaman damgasıS, fAccelHwUnit_x, FsHz, 'accel') ########### #################################################### ####sarkaç dövrü təhlili üçün gyro xam ölçü çıxışından istifadə edin ##################################### ############################# analiz_ zamanSekansını (zaman damgalarıS, fGyroHwUnit_y, FsHz, ' gyro ') çap (' bitdi, təbriklər:-) ') plt.show () ############################## ####################################bluetooth ünsiyyət prosesində, məlumat ötürmə paketinin edə biləcəyi nadir bir şans var. itirilmə#"Ətraflı məlumat üçün siqnal və sistemə" düşmüş paket#dalğasının səbəb olduğu 20Hz ölçmə məlumatlarını kənarlardan ayırmaq üçün K-ortalama istifadə edirik ################## ##################################################### def getSamplingIntervalS (timestampS): plt.figure () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('histogram') plt.xlabel ('ölçü aralığı (lar)') clusterCnt = 5 km = KMeans (n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elemCnt = Sayaç (km.labels_) meydana gəlməsiCnt = ii aralığında (clusterCnt): oluşumCnt.append (elemCnt [ii]) FsHz = 1/centroids [meydana gəlməsiCnt.index (max (meydana gəlməsiCnt))] FsHz qaytarır

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

#tezlik komponentini əldə etmək üçün spektrometrdən, yəni qısa müddətdə FFT -dən istifadə edin, pik qutusu sarkac salınımını ən yaxşı qiymətləndiririk ########################## ####################################### analiz analyz_timeSequence (zaman damgalarıS, timeSeqData, FsHz, strComment): incir, (ax1, ax2) = plt.subplots (nrows = 2) ax1.plot (timestampS, timeSeqData, marker = 'o', markerfacecolor = 'blue', markersize = 2, color = 'skyblue', linewidth = 1) ax1.set_title ("sarkaç vaxtı domen ölçümü - %s" %strComment) ax1.set_xlabel ("nümunə götürmə vaxtı (saniyə)") ax1.set_ylabel (strComment); NFFT = 2048 # pəncərə seqmentlərinin uzunluğu

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

ax2.set_title ("Spektrogram") ax2.set_xlabel ("nümunələr") ax2.set_ylabel ("tezlik (Hz)");

# 'Specgram` metodu 4 obyekti qaytarır. Onlar:

# - Pxx: periodogram # - freqs: frekans vektoru # - binlər: zaman zolaqlarının mərkəzləri # - im: matplotlib.image. AxesImage nümunəsi pkresult = np.saytdakı məlumatları əks etdirir (Pxx == np.amax (Pxx)) oscFreqHz = freqs [pkresult [0] [0] çap ('sarkac salınımı Freq (Hz) =%f, Dövr (Saniyə) =%f, təxmin məlumat mənbəyi:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) 1/oscFreqHz qaytarın

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

#bu proqramı müstəqil olaraq işə salmalıyıq, yəni pendulum1.py tərəfindən çağrılmamış,#təhlil ediləcək standart bir günlük məlumat faylının adını təyin edirik ##################### ############################################### əgər _ adı_ == "_main_" ": defaultFilename = './PendulumTestData.

Uzun müddətli yeniləmə üçün

Mənbə kodu ətraflı şərhləri ehtiva edir, burada riyazi qiymətləndirmənin yüksək səviyyədə xülasəsini verək.

1) CSV faylının məzmununu əvvəlcə "csv" adlı bir python paketindən istifadə edərək kompüterə oxuduq. Dövri ölçmələrimiz var.

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) Ölçmə sürəti çox kritik olduğundan və sarkaç dövrü qiymətləndirmə səhvini birbaşa tətbiq etdiyindən, bunları təxmin etmək istəyirik. Nominal ölçü aralığımız 50ms, yəni 20Hz -dir. Bütün ölçmələrdə ortalamalar yaxşı görünür, amma bəzən məlumat ötürmə paketini itiririk, yeniləmə aralığı 100 ms və ya 150 ms olur …

Bu məlumatların meydana gəlməsini planlayırıqsa, Şəkil 1 -ə baxın, bir insan olaraq, göz bəbiri dəyərini 0.05 saniyə asanlıqla əldə edə bilərik. Ancaq bundan daha yaxşısını edə bilərikmi?

Orta hesablama üçün yalnız yaxşı olanları seçmək üçün təsnifat metodundan istifadə etməliyik. Python, Kümelenme və ya təsnifat mövzusunda bizə kömək etmək üçün KMeans adlı bir alət qutusuna malikdir. Bu anlayışlar bir çox böyük məlumat və AI sahələrində istifadə olunur.

3) Şəkil 2 iki şəkildən ibarətdir. Üst sahə, dəyişkən bucaq ölçməmizin dərəcə ilə bir zaman sahəsindəki ardıcıllığıdır. Second oxundakı x-ox zaman damgasına istinad edərək 50 saniyədə təxminən 22.5 dövrə oxuya bilərik ki, bu da 2.22 Sec sarkaç dövrünə çevrilir. Bu prosesi avtomatlaşdırmaq və daha dəqiq bir qiymətləndirmə aparmaq üçün bir yol varmı? Bəli, kiçik bir ölçü məlumatı istifadə edən və tezliyini bizə izah edən spektrogram adlı riyazi bir vasitədən istifadə edə bilərik, aşağıdakı şəklə baxın. Ən qaranlıq xətt üçün y oxunun oxunması sarkacın salınım tezliyidir. Üfüqi bir xətt olması, sarkac salınımının təcrübə boyunca dəyişmədiyini təsdiqləyir. Salınım tezliyinin tərs dəyəri sarkacın salınma dövrüdür.

Proqramın hazırladığı son hesabat bir mətn xülasəsidir:

sarkaç salınımı Freq (Hz) = 0.449224, Dövr (Saniyə) = 2.226059, təxmin məlumat mənbəyi: meydança

Əvvəldən əldə etdiyimiz göz qələmi hesablama nəticəmizi, 2.22sn, proqramın hesablanmış dəyəri ilə kifayət qədər uyğun olduğunu görə bilərik.

Teorik olaraq hesablanmış 2.0962 (saniyə) dəyərlə müqayisədə ~ 5% qalan səhvimiz var. Onlardan necə qurtulmaq olar? "Sərt vahid çubuq" fərziyyəsini xatırlayırsınızmı? 7 qram əlavə çəki belə əhəmiyyətsiz görünür, qalan səhvin ən böyük səbəbidir.

İndi cihazı pivota yaxın hərəkət etdiririk. Yaxın bir şəkil çəkmək üçün əvvəlki addıma baxın. Yaratdığım günlük faylını buradan yükləyə bilərsiniz:

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

Eyni analiz addımlarını işlədin və 2.089867 (Sec) Dövrünü əldə edirik, bax. Şəkil 3, demək olar ki, nəzəri proqnozla eynidir. Əla!

Yalnız yellənən bucaq ölçüsünə deyil, eyni nisbətdə giroskopik və akselerometr ölçməsinə də sahibik. Digər iki ölçmə üçün eyni təhlili aparın, Şəkil 4 və 5 -də nəticələr əldə edirik. Hər üç ölçmə mənbəyindən alınan təxminlər razılaşır ki, bu da təcrübəmizin uğuruna daha çox inam yaradır.

İşləyən python proqramının son çıxışı olaraq nəticə budur:

sarkaç salınımı Freq (Hz) = 0.478499, Dövr (Saniyə) = 2.089867, təxmin məlumat mənbəyi: meydança

sarkaç salınımı Freq (Hz) = 0.478499, Dövr (Saniyə) = 2.089867, təxmin məlumat mənbəyi: accel

sarkac salınması Freq (Hz) = 0.478499, Dövr (Saniyə) = 2.089867, təxmin məlumat mənbəyi: girro

Bu addımdakı son fikir, fərqli giriş məlumat mənbəyindən istifadə edərək qiymətləndirmə nəticələri necə tam eyni ola bilər? Bu əks intuisiyadır. Bu sualı oxucuların öhdəsinə buraxacağam. Burada bir işarə var: salınım tezliyini qiymətləndirmək üçün qısa müddətli FFT-dən istifadə etdiyimizi unutmayın? Rəqəmsal aləmdə, tezlik təxmini üzən ədəd təxmininin əvəzinə diskret tezlik qutularında verilir.

Addım 5: Gələcək İş Tövsiyələri

Gələcək iş tövsiyələrinin bir neçə kateqoriyası var.

Əvvəlki addımda, sınaq səhvimizi ~ 5% -dən 1% -dən aza endirə bilirik, bundan daha yaxşı edə bilərikmi? Salınmanın böyüklüyünün eksponent olaraq azaldığını görən bir səbəb, sarkacın yellənməsindəki hava sürüklənməsi ola bilər. Sarkacın kəsik hissəsinin aerodinamik sürükləməni azaltmaq üçün düzəldilmiş formada olması lazım ola bilər.

Sabit bir pik böyüklüyündə siqnal çıxarmaq üçün adaptiv filtr üsullarından istifadə edərək öyrənilən zamanla dəyişən qazanc tətbiq edə bilərikmi? Bu arada, xarici qüvvələrin irəliləməsinin azalması ilə əlaqələndirin.

"Sadə harmonik hərəkət" dən daha sadə bir şey tapa bilmərik. Sarkacın analiz etdiyi vasitələrdən daha mürəkkəb bir şeyi, idman fəaliyyətini, su raketi buraxma ardıcıllığını və s.

Xoşbəxt hack

Tövsiyə: