Tuesday 8 August 2017

Exponential moving average low pass filter


Filter Digital yang Mudah Digunakan Exponential moving average (EMA) adalah jenis filter impuls impuls tak terbatas (IIR) yang dapat digunakan pada banyak aplikasi DSP tertanam. Ini hanya membutuhkan sejumlah kecil RAM dan daya komputasi. Apa Filter Filter datang dalam bentuk analog dan digital dan ada untuk menghilangkan frekuensi tertentu dari sebuah sinyal. Filter analog yang umum adalah filter RC low pass yang ditunjukkan di bawah ini. Filter analog ditandai oleh respons frekuensi mereka yaitu frekuensi yang dilemahkan (respons besarnya) dan bergeser (respon fase). Respon frekuensi dapat dianalisis dengan menggunakan transformasi Laplace yang mendefinisikan fungsi transfer pada domain-S. Untuk rangkaian di atas, fungsi transfer diberikan oleh: Untuk R sama dengan satu kilo-ohm dan C sama dengan satu mikrofarad, respons besarnya ditunjukkan di bawah ini. Perhatikan bahwa sumbu x adalah logaritmik (setiap tanda centang 10 kali lebih besar dari yang terakhir). Sumbu y berada dalam desibel (yang merupakan fungsi logaritmik dari keluaran). Frekuensi cutoff untuk filter ini adalah 1000 rad atau 160 Hz. Ini adalah titik di mana kurang dari setengah daya pada frekuensi tertentu ditransfer dari input ke output filter. Filter analog harus digunakan pada desain tersemat saat mengambil sampel dengan menggunakan analog ke digital converter (ADC). ADC hanya menangkap frekuensi yang sampai setengah frekuensi sampling. Sebagai contoh, jika ADC memperoleh 320 sampel per detik, filter di atas (dengan frekuensi cutoff 160Hz) ditempatkan di antara sinyal dan input ADC untuk mencegah aliasing (yang merupakan fenomena di mana frekuensi yang lebih tinggi muncul pada sinyal sampel sebagai Frekuensi rendah). Filter Digital Filter digital mengurangi frekuensi pada perangkat lunak daripada menggunakan komponen analog. Implementasinya meliputi sampling sinyal analog dengan ADC lalu menerapkan algoritma perangkat lunak. Dua pendekatan disain umum untuk penyaringan digital adalah filter FIR dan filter IIR. Filter FIR Filter Respon Finite Impulse (FIR) menggunakan jumlah sampel yang terbatas untuk menghasilkan output. Rata-rata pergerakan sederhana adalah contoh filter FIR low pass. Frekuensi yang lebih tinggi dilemahkan karena rata-rata menghaluskan sinyal. Filternya terbatas karena output dari filter ditentukan oleh jumlah sampel masukan yang terbatas. Sebagai contoh, filter rata-rata 12 titik bergerak menambahkan 12 sampel terbaru kemudian dibagi dengan 12. Output filter IIR ditentukan oleh (sampai) jumlah sampel masukan yang tidak terbatas. Filter IIR Filter Respon Impuls Tak Terhingga (IIR) adalah jenis filter digital dimana outputnya pada dasarnya dipengaruhi oleh masukan. Rata-rata pergerakan eksponensial adalah contoh filter low pass IIR. Filter Rata-rata Eksponensial Pindah Eksponensial moving average (EMA) menerapkan bobot eksponensial pada masing-masing sampel untuk menghitung rata-rata. Meskipun ini tampak rumit, persamaannya diketahui dalam bahasa penyaringan digital karena perbedaan persamaan untuk menghitung keluarannya sederhana. Dalam persamaan di bawah ini, y adalah output x adalah input dan alpha adalah konstanta yang menentukan frekuensi cutoff. Untuk menganalisis bagaimana filter ini memengaruhi frekuensi keluaran, fungsi transfer domain Z digunakan. Respon besarnya ditunjukkan di bawah untuk alfa sama 0,5. Sumbu y, sekali lagi, ditunjukkan dalam desibel. Sumbu x logaritma dari 0,001 sampai pi. Peta frekuensi dunia nyata ke sumbu x dengan nol menjadi tegangan DC dan pi sama dengan separuh frekuensi sampling. Setiap frekuensi yang lebih besar dari separuh frekuensi sampling akan dinyalakan. Seperti yang disebutkan, filter analog dapat memastikan hampir semua frekuensi pada sinyal digital berada di bawah separuh frekuensi sampling. Filter EMA bermanfaat dalam desain tersemat karena dua alasan. Pertama, mudah menyesuaikan frekuensi cutoff. Penurunan nilai alpha akan menurunkan frekuensi cutoff filter seperti yang diilustrasikan dengan membandingkan plot alpha 0.5 di atas ke plot di bawah di mana alpha 0,1. Kedua, EMA mudah untuk kode dan hanya membutuhkan sedikit daya komputasi dan memori. Implementasi kode filter menggunakan persamaan perbedaan. Ada dua operasi multiply dan satu operasi tambahan untuk masing-masing keluaran ini mengabaikan operasi yang diperlukan untuk pembulatan matematika titik tetap. Hanya sampel terbaru yang harus disimpan di RAM. Ini secara substansial kurang dari menggunakan filter rata-rata bergerak sederhana dengan titik N yang membutuhkan operasi multiplikasi N dan penambahan serta sampel N yang akan disimpan dalam RAM. Kode berikut menerapkan filter EMA menggunakan titik 32-bit fixed point matematika. Kode di bawah ini adalah contoh bagaimana cara menggunakan fungsi di atas. Kesimpulan Filter, analog dan digital, merupakan bagian penting dari desain tersemat. Mereka memungkinkan pengembang menyingkirkan frekuensi yang tidak diinginkan saat menganalisis input sensor. Agar filter digital bermanfaat, filter analog harus menghapus semua frekuensi di atas separuh frekuensi sampling. Filter Digital IIR bisa menjadi alat yang ampuh dalam disain disain dimana sumber daya terbatas. Exponential moving average (EMA) adalah contoh filter seperti itu yang bekerja dengan baik pada desain tersemat karena kebutuhan memori dan daya komputasi yang rendah. Metode sederhana dan umum untuk mengisi data yang hilang, jika Anda memiliki data lengkap, adalah Untuk menggunakan regresi linier. Katakanlah Anda memiliki 1000 run of 5 berturut-turut tanpa ada yang hilang. Mengatur vektor 1000 x 1 y dan matriks 1000 x 4 X: Regresi akan memberi Anda 4 angka a b c d yang memberikan kecocokan terbaik untuk 1000 data mdash data berbeda, beda b b d. Kemudian Anda menggunakan ini b c d untuk memperkirakan (memprediksi, interpolasi) hilang wt0. (Untuk bobot manusia, Id mengharapkan abcd berada di sekitar 14.) (Ada banyak sekali buku dan makalah tentang regresi, di semua tingkat. Untuk koneksi dengan interpolasi, saya tidak tahu tentang pengenalan yang baik siapa pun) Low-pass Filter Ini terutama catatan Ini tidak akan lengkap dalam arti apapun. Ini ada untuk menampung fragmen informasi yang berguna. Pseudocode Rata-rata pergerakan rata-rata yang ditimbang secara eksponensial (EWMA) adalah nama untuk perkiraan digital, waktu-domain termudah termudah dari lowpass (orde pertama) pada data diskrit. Filter ini menghaluskan dengan menggunakan rata-rata lokal yang bergerak, yang membuatnya menjadi lamban mengikuti sinyal input. Secara intuitif, ini akan merespon secara perlahan perubahan cepat (konten frekuensi tinggi) sambil tetap mengikuti keseluruhan kecenderungan sinyal (konten dengan frekuensi rendah). Hal ini ditimbang oleh variabel (lihat x3b1) untuk dapat memvariasikan kepekaannya. Dalam aplikasi yang sampel pada interval reguler (misalnya suara), Anda dapat menghubungkan konten x3b1 dengan frekuensi. Dalam kasus ini, Anda sering ingin menghitung rangkaian keluaran yang disaring untuk rangkaian masukan, dengan melompati daftar yang melakukan sesuatu seperti: atau yang setara: Bentuk terakhir mungkin terasa lebih intuitif: perubahan pada keluaran yang disaring sebanding dengan jumlah Berubah dan ditimbang oleh kekuatan saring x3b1. Keduanya dapat membantu mempertimbangkan bagaimana menggunakan keluaran filter baru-baru ini memberi inersia sistem: Sebuah x3b1 yang lebih kecil (lebih besar 1-x3b1 pada yang sebelumnya) (juga membuat RC yang lebih besar) berarti output akan menyesuaikan dengan lebih lamban, dan seharusnya menunjukkan sedikit noise (sejak Frekuensi cutoff lebih rendah (verify)). Sebuah x3b1 yang lebih besar (lebih kecil 1-x3b1) (RC yang lebih kecil) berarti output akan menyesuaikan lebih cepat (kurang inersia), namun lebih sensitif terhadap noise (karena frekuensi cutoff lebih tinggi (verifikatif)) Karena perhitungannya adalah lokal, kasus Di mana Anda hanya ingin nilai terakhir dapat menghindari penyimpanan array yang besar dengan melakukan hal berikut untuk setiap sampel baru (seringkali beberapa kali berturut-turut, untuk memastikan kami menyesuaikannya dengan cukup). Dalam kasus sampling x3b1 yang tidak biasa biasanya lebih terkait dengan kecepatan adaptasi daripada konten frekuensi. Masih relevan, tapi catatan tentang konten frekuensi berlaku kurang ketat. Anda biasanya ingin menerapkan arraymemori sebagai pelampung - bahkan jika Anda kembali int - untuk menghindari masalah yang disebabkan oleh kesalahan pembulatan. Sebagian besar masalah: ketika alphadifference (sendiri merupakan perkalian mengambang) kurang dari 1, maka akan menjadi 0 dalam sebuah lemparan (truncatng) ke integer. Misalnya, bila alpha adalah 0,01, maka perbedaan sinyal yang lebih kecil dari 100 akan membuat penyesuaian 0 (melalui pemotongan integer), sehingga filter tidak akan menyesuaikan nilai ADC sebenarnya. EWMA memiliki kata eksponensial di dalamnya karena setiap keluaran baru yang disaring secara efektif menggunakan semua nilai sebelumnya, dan efektif dengan bobot yang membusuk secara eksponensial. Lihat link wikipedia untuk pembahasan lebih lanjut. Contoh grafis: Tangkapan layar dari arduinoskop - grafik bergerak, dengan sampel terbaru di sebelah kiri. Sinyal mentah di atas adalah beberapa detik dari sampling ADC dari pin mengambang, dengan jari menyentuhnya sesekali. Yang lain adalah versi lowpassed, dengan kekuatan yang meningkat. Beberapa hal yang perlu diperhatikan: penyesuaian eksponensial yang lamban terhadap respons seperti langkah (mirip dengan kapasitor pengisian - cepat mula-mula, kemudian lebih lambat dan lebih lambat) penindasan lonjakan tunggal besar. Yang pasti memungkinkan untuk menyaring terlalu keras (walaupun penilaian itu sangat bergantung pada kecepatan sampling dan frekuensi konten adaptasi yang dibutuhkan tujuan Anda). Pada gambar kedua, osilasi full-range keluar setengah jalan tidak begitu banyak karena penyaringan, namun juga sebagian besar karena sebagian besar sampel mentah di sekitar jenuh di kedua ujung rentang ADC. Pada x3b1, x3c4, dan frekuensi cutoff Ayat ini adalah tulisan rintisan x2014 mungkin setumpuk nota setengah-diurutkan, tidak diperiksa dengan baik sehingga mungkin memiliki bit yang salah. (Jangan ragu untuk mengabaikan, memperbaiki, atau memberi tahu saya) x3b1 adalah faktor penghalusan, secara teoritis antara 0,0 dan 1,0, dalam praktik biasanya lt0.2 dan seringkali lt0.1 atau lebih kecil, karena di atas Anda hampir tidak melakukan penyaringan. Di DSP sering didasarkan pada: x394 t. Ditulis secara teratur dt. Interval waktu antara sampel (timbal balik sampling rate) pilihan waktu konstan x3c4 (tau), alias RC (yang terakhir tampaknya mengacu pada sirkuit resistor-plus-kapasitor, yang juga melakukan lowpass. Secara khusus, RC memberi waktu dalam Yang muatan kapasitor untuk Jika Anda memilih RC dekat dengan dt youll mendapatkan alpha lebih tinggi dari 0,5, dan juga frekuensi cutoff yang mendekati frekuensi nyquist (terjadi di 0.666 (verify)), yang menyaring sedikit sehingga membuat filter Cukup gunanya. Dalam prakteknya Anda akan sering memilih RC yang setidaknya beberapa kelipatan dt, yang berarti bahwa x3b1 berada pada orde 0,1 atau kurang. Ketika pengambilan sampel terjadi secara ketat secara teratur, seperti pada suara dan banyak aplikasi DSP lainnya. , Frekuensi cutoff, frekuensi lutut, didefinisikan dengan baik, sebagai: Misalnya, ketika RC0.002sec, cutoff berada pada sampling 200Hz, 2000Hz, dan 20000Hz, yang menghasilkan alpha masing-masing 0,7, 0,2, dan 0,024 (Pada kecepatan sampling yang sama: alpha yang lebih rendah adalah, th E memperlambat adaptasi terhadap nilai baru dan menurunkan frekuensi cutoff yang efektif) (verify) Untuk lowpass orde pertama: pada frekuensi rendah, responnya hampir rata, pada frekuensi ini responsnya adalah -3dB (telah mulai menurun dalam Soft bendknee) pada frekuensi yang lebih tinggi, hal itu turun pada 6dboctave (20dBdecade) Variasi orde tinggi jatuh lebih cepat dan memiliki lutut yang lebih keras. Perhatikan juga akan terjadi pergeseran fasa, yang tertinggal dari input. Itu tergantung pada frekuensi yang dimulainya lebih awal dari amplitudo falloff, dan akan menjadi -45 derajat pada frekuensi lutut (verify). Contoh Arduino Ayat ini adalah tulisan rintisan x2014 mungkin setumpuk nota setengah-diurutkan, tidak diperiksa dengan baik sehingga mungkin memiliki bit yang salah. (Jangan ragu untuk mengabaikan, memperbaiki, atau memberi tahu saya) Ini adalah versi single-piece-of-memory, karena jika Anda hanya tertarik pada nilai output (terbaru). Semi-disortir

No comments:

Post a Comment