Saya bekerja pada robot seluler yang dikendalikan melalui tautan nirkabel 2,4 GHz. Penerima terhubung ke Arduino Uno yang berfungsi sebagai pengontrol utama. Saluran input yang paling kritis (dan utama) yang berasal dari penerima menghasilkan sinyal yang sangat bising, yang menyebabkan banyak perubahan kecil dalam output aktuator, meskipun ini tidak diperlukan.
Alur input Arduino dalam interval 30 detik.
Saya mencari perpustakaan yang dapat melakukan perataan yang efisien. Apakah ada perpustakaan pemulusan sinyal yang tersedia untuk Arduino (Uno)?
library
signal-processing
asheeshr
sumber
sumber
Jawaban:
Microsmooth adalah perpustakaan pemulusan sinyal lighweight yang saat ini sedang dikembangkan oleh saya.
Itu masih sedang dikerjakan dan tujuannya adalah membuatnya ringan dalam hal memori dan cepat. Perpustakaan menyediakan beberapa filter untuk menghaluskan:
Untuk menggunakan perpustakaan, unduh dan tambahkan ke direktori sumber. Juga, tambahkan baris berikut ke file sumber Anda:
sumber
Saya rasa saya melihat banyak lonjakan noise sampel tunggal dalam sinyal berisik Anda.
Filter median tidak lebih baik dalam menghilangkan lonjakan noise sampel tunggal daripada filter linear. (Ini lebih baik daripada filter low pass, rata-rata bergerak, rata-rata bergerak tertimbang, dll. Dalam hal waktu respons dan kemampuannya untuk mengabaikan pencuri kebisingan sampel-tunggal seperti itu).
Sebenarnya, ada banyak perpustakaan pemulusan sinyal untuk Arduino, banyak di antaranya termasuk filter median.
perpustakaan pemulusan sinyal di arduino.cc:
perpustakaan pemulusan sinyal di github:
Apakah sesuatu seperti ini berfungsi di robot Anda? (Median-of-3 membutuhkan daya CPU yang sangat sedikit, dan karenanya cepat):
sumber
Sudahkah Anda mencoba filter low pass? Saya menemukan contoh di sini yang lain di sini .
Kedua perpustakaan ini memiliki daftar data yang sedang dibaca dari sensor analog pilihan Anda yang dirata-rata. Setiap nilai sensor baru ditambahkan ke daftar, dan yang terakhir dibuang, seperti ini:
sumber
Anda dapat memfilter ini secara digital menggunakan filter low pass:
Ubah 0,99 untuk mengubah frekuensi pemutusan (lebih dekat ke 1,0 adalah frekuensi lebih rendah). Ekspresi aktual untuk nilai tersebut adalah exp (-2 * pi * f / fs) di mana f adalah frekuensi cutoff yang Anda inginkan dan fs adalah frekuensi data sampel.
Tipe lain dari "filter digital" adalah filter acara. Ia bekerja dengan baik pada data yang memiliki outlier; misalnya 9,9,8,10,9,25,9. Filter peristiwa mengembalikan nilai yang paling sering. Secara statistik ini adalah mode.
Statistik rata-rata seperti Mean, Mode dll. Dapat dihitung dengan menggunakan Arduino Average Library .
Contoh yang diambil dari halaman Perpustakaan Arduino disebut:
sumber