Saturday 19 August 2017

Perpustakaan arduino moving average


Saya bekerja pada robot mobile yang dikendalikan melalui wireless 2.4 GHz link. Receiver terhubung ke Arduino Uno yang berfungsi sebagai pengontrol utama. Saluran masukan yang paling kritis (dan utama) yang berasal dari receiver menghasilkan sinyal yang sangat bising, yang menyebabkan banyak perubahan kecil pada output aktuator, meskipun tidak diperlukan. Saya mencari perpustakaan yang bisa melakukan smoothing yang efisien. Apakah ada perpustakaan pemulusan sinyal yang tersedia untuk Arduino (Uno) pada 16 Februari 14 di 13:57 Saya rasa saya melihat banyak lonceng suara sampel tunggal dengan sinyal bising Anda. Filter median lebih baik menyingkirkan lonceng lonceng sampel tunggal daripada filter linier manapun. (Ini lebih baik daripada filter low pass, moving average, weighted moving average, dll dalam hal waktu responnya dan kemampuannya untuk mengabaikan outliers spike noise single-sample seperti itu). Sebenarnya, ada banyak perpustakaan penghisapan sinyal untuk Arduino, yang banyak di antaranya mencakup filter rata-rata. Perpustakaan smoothing sinyal di arduino. cc: perpustakaan pemulusan sinyal di github: Apakah sesuatu seperti ini bekerja di robot Anda (median-of-3 memerlukan sedikit daya CPU, dan karenanya cepat): Anda dapat menyaring ini secara digital dengan menggunakan rendah Pass filter: Ubah 0.99 untuk mengubah frekuensi cut off (mendekati 1.0 adalah frekuensi yang lebih rendah). Ungkapan sebenarnya untuk nilai itu adalah exp (-2piffs) di mana f adalah frekuensi cutoff yang Anda inginkan dan f adalah frekuensi data diambil sampelnya. Jenis filter digital lainnya adalah filter acara. Ini bekerja dengan baik pada data yang memiliki outliers mis. 9,9,8,10,9,25,9. Filter acara mengembalikan nilai yang paling sering. Secara statistik ini adalah mode. Rata-rata statistik seperti Mean, Mode dll dapat dihitung dengan menggunakan Arduino Average Library. Contoh yang diambil dari halaman Perpustakaan Arduino mengacu pada: Salah satu aplikasi utama dewan Arduino adalah membaca dan mencatat data sensor. Misalnya seseorang memantau tekanan setiap detiknya setiap hari. Karena tingkat sampel yang tinggi sering menghasilkan lonjakan pada grafik, seseorang juga ingin memiliki rata-rata pengukuran. Karena pengukurannya tidak statis dalam waktu yang sering kita perlukan adalah rata-rata yang sedang berjalan. Ini adalah rata-rata periode tertentu dan sangat berharga saat melakukan analisis trend. Bentuk paling sederhana dari rata-rata yang sedang berjalan dapat dilakukan dengan kode yang dibangun berdasarkan rata-rata yang berjalan sebelumnya: Jika seseorang tidak ingin menggunakan matematika floating point - karena ini membutuhkan memori dan mengurangi kecepatan - orang dapat melakukan hal yang sama sepenuhnya di domain integer. Pembagian oleh 256 dalam kode contoh adalah shift-right 8, yang lebih cepat dari pada pembagian menurut mis. 100. Hal ini berlaku untuk setiap kekuatan 2 sebagai pembagi dan kita hanya harus menjaga jumlah weigths sama dengan kekuatan 2. Dan tentu saja orang harus berhati-hati tidak ada melimpah antara (pertimbangkan untuk menggunakan unsigned long) Jika Anda membutuhkan Rata-rata berjalan yang lebih akurat, dalam konkret dari 10 pengukuran terakhir, Anda memerlukan daftar (atau linked list) untuk menahannya. Array ini bertindak sebagai penyangga melingkar dan dengan setiap pengukuran baru yang tertua dihapus. Rata-rata yang berjalan dihitung sebagai jumlah semua elemen dibagi dengan jumlah elemen dalam array. Kode untuk menjalankan rata-rata akan menjadi seperti ini: Kelemahan dari kode ini adalah bahwa array untuk menahan semua nilai bisa menjadi cukup besar. Jika Anda memiliki satu pengukuran per detik dan Anda menginginkan rata-rata berjalan per menit Anda memerlukan sebuah array dari 60 rata-rata per jam akan membutuhkan sebuah array dari 3600. Itu tidak dapat dilakukan dengan cara ini pada Arduino karena hanya memiliki 2K RAM. Namun dengan membangun rata-rata 2 tahap itu bisa didekati dengan cukup baik (disclaimer: tidak untuk semua pengukuran). Dalam kode psuedo: Karena array statis internal baru dibutuhkan untuk setiap fungsi runningAverage, jeritan ini akan diimplementasikan sebagai kelas. RunningAverage library Perpustakaan runAverage membuat kelas fungsi di atas sehingga dapat digunakan berkali-kali dalam sketsa. Ini memisahkan fungsi add () dan avg () menjadi sedikit lebih fleksibel mis. Seseorang bisa memanggil rata-rata berkali-kali tanpa menambahkan apapun. Harap dicatat bahwa setiap instance dari kelas menambahkan array sendiri untuk menahan pengukuran, dan ini menambahkan hingga penggunaan memori. Antarmuka kelas dijaga sekecil mungkin. Catatan: dengan versi 0,2 nama metode semua dibuat lebih deskriptif. Sketsa kecil menunjukkan bagaimana bisa digunakan. Generator acak digunakan untuk meniru sensor. Di setup () myRA dibersihkan sehingga kita bisa mulai menambahkan data baru. Dalam loop () pertama, bilangan acak dihasilkan dan dikonversi ke float untuk ditambahkan ke myRA. Kemudian runningAverage tercetak ke port serial. Kita juga bisa menampilkannya di beberapa LCD atau mengirim ethernet dll. Saat 300 barang ditambahkan myRA dibersihkan untuk memulai lagi dari awal. Untuk menggunakan perpustakaan, buatlah folder di SKETCHBOOKPATHlibaries Anda dengan nama RunningAverage dan letakkan. h dan. cpp di sana. Opsional membuat subdirektori contoh untuk menempatkan contoh aplikasi. 2011-01-30: versi awal 2011-02-28: destruktor yang hilang tetap dalam file. h 2011-02-28: menghapus konstruktor default 2012--. Trimvalue () Yuval Naveh menambahkan trimValue (ditemukan di web) 2012-11-21: refactored 2012-12-30: tambah fillValue () yang refactored untuk penerbitan 2014-07-03: kode proteksi memori tambahan - jika array internal tidak dapat dialokasikan ukuran Menjadi 0. Ini untuk memecahkan masalah yang dijelaskan di sini - forum. arduino. ccindex. phptopic50473.msg1790086msg1790086 - Uji secara ekstensif. Kelas template RunningAverage. h RunningAverage. cppIni adalah kumpulan rutinitas untuk melakukan analisis matematis susunan bilangan. Dukungan fungsi saat ini: Semua fungsi sepenuhnya kelebihan beban untuk mendukung tipe data berikut: Dengan pengecualian stddev (), mereka mengembalikan tipe data yang sama seperti array. Array nilai int mengembalikan int tunggal. Stddev () selalu mengembalikan float. Semua fungsi kecuali rollingAverage () mengambil dua argumen. Yang pertama adalah array untuk dikerjakan. Yang kedua adalah jumlah entri dalam array. RollingAverage () mengambil argumen ketiga - entri baru untuk ditambahkan ke array. Rolling average Format: rata-rata rollingAverage (historyarray, slicecount, value) Menambahkan nilai pada historyarray array yang menggeser semua nilai ke satu tempat. Rata-rata rata-rata kemudian dikembalikan. Format: mean rata-rata (array, slicecount) Menghitung rata-rata rata-rata nilai dalam array. Slicecount adalah jumlah entri dalam array. Format: mode rata-rata (array, slicecount) Menemukan nomor yang paling umum dalam array. Format: max maximum (array, slicecount) Menemukan nilai terbesar dalam array. Format: minimum min (array, slicecount) Menemukan nilai terkecil dalam array. Format Deviasi Standar: deviasi stddev (array, slicecount) Deviasi standar adalah akar kuadrat dari rata-rata jumlah kuadrat dari perbedaan antara setiap titik data dan rata-rata rerata. Ini adalah satu-satunya fungsi yang tidak mengembalikan tipe data yang sama dengan array. Standar deviasi selalu dikembalikan sebagai pelampung.

No comments:

Post a Comment