Monday 7 August 2017

Moving average algorithm filter


Moving Average sebagai Filter Rata-rata bergerak sering digunakan untuk merapikan data dengan adanya noise. Rata-rata pergerakan sederhana tidak selalu dikenali sebagai filter Finite Impulse Response (FIR) yang sebenarnya, padahal sebenarnya adalah filter yang paling umum dalam pemrosesan sinyal. Mengobati itu sebagai filter memungkinkan membandingkannya dengan, misalnya filter windowed-sinc (lihat artikel tentang filter low-pass, high-pass, dan band-pass dan band-reject untuk contohnya). Perbedaan utama dengan filter tersebut adalah bahwa rata-rata bergerak cocok untuk sinyal yang informasi bermanfaatnya terdapat dalam domain waktu. Pengukuran perataan dengan rata-rata adalah contoh utama. Saringan berjejer-sinc, di sisi lain, adalah pemain yang kuat dalam domain frekuensi. Dengan pemerataan dalam pengolahan audio sebagai contoh tipikal. Ada perbandingan yang lebih rinci dari kedua jenis filter dalam Domain Time vs Frekuensi Kinerja Filter. Jika Anda memiliki data yang baik waktu dan domain frekuensi penting, Anda mungkin ingin melihat Variasi pada Moving Average. Yang menyajikan sejumlah versi bobot rata-rata bergerak yang lebih baik dalam hal itu. Panjang rata-rata bergerak (N) dapat didefinisikan sebagai ditulis seperti biasanya diterapkan, dengan sampel keluaran saat ini sebagai rata-rata sampel (N) sebelumnya. Terlihat sebagai filter, moving average melakukan konvolusi dari urutan input (xn) dengan pulsa panjang persegi panjang (N) dan tinggi (1N) (untuk membuat area pulsa, dan karenanya, gain filter , satu ). Dalam prakteknya, yang terbaik adalah mengambil (N) ganjil. Meskipun rata-rata bergerak juga dapat dihitung dengan menggunakan sejumlah sampel, dengan menggunakan nilai ganjil untuk (N) memiliki keuntungan bahwa penundaan filter akan menjadi bilangan bulat sampel, karena penundaan filter dengan (N) Contohnya persis ((N-1) 2). Rata-rata bergerak kemudian dapat disesuaikan persis dengan data asli dengan menggesernya dengan bilangan bulat sampel. Domain Waktu Karena rata-rata bergerak adalah konvolusi dengan pulsa persegi panjang, respons frekuensinya adalah fungsi sinc. Hal ini membuat sesuatu seperti dual filter windowed-sinc, karena itu adalah konvolusi dengan pulsa sinc yang menghasilkan respons frekuensi persegi panjang. Ini adalah respons frekuensi sinc yang membuat rata-rata bergerak menjadi pemain miskin dalam domain frekuensi. Namun, kinerjanya sangat baik dalam domain waktu. Oleh karena itu, sangat cocok untuk menghaluskan data guna menghilangkan noise sementara pada saat yang sama tetap melakukan respon langkah cepat (Gambar 1). Untuk Additive White Gaussian Noise (AWGN) biasa yang sering diasumsikan, sampel rata-rata (N) memiliki efek meningkatkan SNR dengan faktor (sqrt N). Karena kebisingan untuk sampel individu tidak berkorelasi, tidak ada alasan untuk memperlakukan setiap sampel secara berbeda. Oleh karena itu, rata-rata bergerak, yang memberi setiap sampel berat yang sama, akan menyingkirkan jumlah suara maksimal untuk ketajaman respons langkah tertentu. Implementasi Karena itu adalah filter FIR, moving average bisa diimplementasikan melalui konvolusi. Ini kemudian akan memiliki efisiensi yang sama (atau kurang) seperti filter FIR lainnya. Namun, bisa juga dilakukan secara rekursif, dengan cara yang sangat efisien. Ini mengikuti langsung dari definisi bahwa Rumus ini adalah hasil dari ungkapan untuk (yn) dan (yn1), yaitu, di mana kita melihat bahwa perubahan antara (yn1) dan (yn) adalah bahwa istilah tambahan (xn1N) muncul di Akhir, sedangkan istilah (xn-N1N) dihapus dari awal. Dalam aplikasi praktis, seringkali memungkinkan untuk meninggalkan pembagian dengan (N) untuk setiap istilah dengan mengkompensasi keuntungan yang dihasilkan (N) di tempat lain. Implementasi rekursif ini akan jauh lebih cepat daripada konvolusi. Setiap nilai baru (y) dapat dihitung hanya dengan dua penambahan, dan bukan penambahan (N) yang diperlukan untuk penerapan definisi secara langsung. Satu hal yang harus diwaspadai dengan implementasi rekursif adalah kesalahan pembulatan akan terakumulasi. Ini mungkin atau mungkin tidak menjadi masalah bagi aplikasi Anda, namun ini juga menyiratkan bahwa implementasi rekursif ini akan benar-benar bekerja lebih baik dengan implementasi bilangan bulat daripada dengan bilangan floating-point. Ini sangat tidak biasa, karena implementasi floating point biasanya lebih sederhana. Kesimpulan dari semua ini pasti bahwa Anda seharusnya tidak pernah meremehkan kegunaan filter rata-rata bergerak sederhana dalam aplikasi pemrosesan sinyal. Filter Design Tool Artikel ini dilengkapi dengan alat Filter Design. Percobaan dengan nilai yang berbeda untuk (N) dan visualisasikan filter yang dihasilkan. Cobalah sekarang saya pada dasarnya memiliki sejumlah nilai seperti ini: Array di atas disederhanakan, saya mengumpulkan 1 nilai per milidetik dalam kode sebenarnya dan saya perlu mengolah keluaran pada algoritma yang saya tulis untuk menemukan puncak terdekat sebelum sebuah titik pada waktunya. . Logika saya gagal karena dalam contoh saya di atas, 0,36 adalah puncak sebenarnya, tapi algoritme saya akan terlihat mundur dan melihat angka terakhir 0,25 sebagai puncaknya, karena ada penurunan menjadi 0,24 sebelum itu. Tujuannya adalah untuk mengambil nilai-nilai ini dan menerapkan algoritma kepada mereka yang akan memperlancar mereka sedikit sehingga saya memiliki nilai linier yang lebih banyak. (Yaitu: Id seperti hasil saya melengkung, tidak bergerigi) Saya telah diberitahu untuk menerapkan filter rata-rata bergerak eksponensial ke nilai-nilai saya. Bagaimana saya bisa melakukan ini Sangat sulit bagi saya untuk membaca persamaan matematis, saya jauh lebih baik dengan kode. Bagaimana cara memproses nilai dalam array saya, menerapkan perhitungan rata-rata bergerak eksponensial bahkan sampai mereka bertanya pada 8 Februari 12 di 20:27 Untuk menghitung rata-rata pergerakan eksponensial. Anda perlu menyimpan beberapa keadaan di sekitar dan Anda memerlukan parameter penyetelan. Ini memerlukan kelas kecil (dengan asumsi Anda menggunakan Java 5 atau yang lebih baru): Instantiate dengan parameter peluruhan yang Anda inginkan (mungkin mengambil tuning harus antara 0 dan 1) dan kemudian gunakan rata-rata () untuk memfilter. Saat membaca sebuah halaman tentang beberapa kekambuhan mathmatical, semua yang Anda benar-benar perlu ketahui saat mengubahnya menjadi kode adalah matematikawan suka menulis indeks menjadi array dan urutan dengan subskrip. (Beberapa notasi lain juga, yang tidak membantu). Namun, EMA cukup sederhana karena Anda hanya perlu mengingat satu nilai lama tanpa susunan negara yang rumit. Jawab Feb 8 12 jam 20:42 TKKocheran: Cukup banyak. Tidak masalah jika hal-hal sederhana (Jika dimulai dengan urutan baru, dapatkan rata-rata baru.) Perhatikan bahwa beberapa istilah pertama dalam urutan rata-rata akan melompat sedikit karena efek batas, namun Anda mendapatkan yang lain dengan rata-rata bergerak lainnya. terlalu. Namun, keuntungan yang bagus adalah Anda dapat membungkus logika rata-rata bergerak menjadi rata-rata dan bereksperimen tanpa mengganggu keseluruhan program Anda. Ndash Donal Fellows Feb 9 12 at 0:06 Saya mengalami kesulitan untuk memahami pertanyaan Anda, tapi saya akan mencoba menjawabnya juga. 1) Jika algoritma Anda menemukan 0,25 bukan 0,36, maka itu salah. Ini salah karena mengasumsikan kenaikan atau penurunan monotonik (yang selalu naik atau selalu turun). Kecuali Anda rata-rata SEMUA data Anda, poin data Anda --- seperti yang Anda sampaikan - tidak bersifat nonlinier. Jika Anda benar-benar ingin menemukan nilai maksimum antara dua titik dalam waktu, maka iris array Anda dari tmin ke tmax dan temukan maks dari subarray itu. 2) Sekarang, konsep moving averages sangat sederhana: bayangkan bahwa saya memiliki daftar berikut: 1.4, 1.5, 1.4, 1.5, 1.5. Saya bisa menghaluskannya dengan mengambil rata-rata dua angka: 1.45, 1.45, 1.45, 1.5. Perhatikan bahwa angka pertama adalah rata-rata 1,5 dan 1,4 (angka kedua dan pertama) yang kedua (daftar baru) adalah rata-rata 1,4 dan 1,5 (daftar ketiga dan kedua) yang ketiga (daftar baru) rata-rata 1,5 dan 1,4 (Keempat dan ketiga), dan seterusnya. Saya bisa membuatnya periode tiga atau empat, atau n. Perhatikan bagaimana datanya jauh lebih mulus. Cara yang baik untuk melihat moving averages di tempat kerja adalah pergi ke Google Finance, pilih saham (coba Tesla Motors cukup mudah menguap (TSLA)) dan klik pada bagian teknis di bagian bawah grafik. Pilih Moving Average dengan periode tertentu, dan moving average eksponensial untuk membandingkan perbedaannya. Rata-rata pergerakan eksponensial hanyalah penjabaran lain dari hal ini, namun bobot data yang lebih tua kurang dari data baru ini adalah cara untuk meratakan perataan ke arah belakang. Silahkan baca entri Wikipedia. Jadi, ini lebih merupakan komentar daripada sebuah jawaban, tapi kotak komentar kecil itu hanya untuk mungil. Semoga berhasil. Jika Anda mengalami masalah dengan matematika, Anda bisa pergi dengan rata-rata bergerak sederhana daripada eksponensial. Jadi output yang Anda dapatkan akan menjadi hal x terakhir yang dibagi dengan x. Pseudocode yang tidak teruji: Perhatikan bahwa Anda perlu menangani bagian awal dan akhir data karena dengan jelas Anda tidak dapat menghitung 5 persyaratan terakhir saat Anda berada di titik data kedua Anda. Juga, ada cara yang lebih efisien untuk menghitung rata-rata pergerakan ini (jumlah penjumlah - tertua terbaru), namun ini adalah untuk mendapatkan konsep tentang apa yang terjadi. Jawab 8 Feb 12 di 20: 41Moving Average Filter (MA filter) Loading. Filter rata-rata bergerak adalah filter Low Pass FIR (Finite Impulse Response) sederhana yang biasa digunakan untuk merapikan rangkaian datafile sampel. Dibutuhkan sampel M input sekaligus dan mengambil rata-rata sampel M tersebut dan menghasilkan satu titik keluaran. Ini adalah struktur LPF (Low Pass Filter) yang sangat sederhana yang berguna bagi ilmuwan dan insinyur untuk menyaring komponen bising yang tidak diinginkan dari data yang dimaksud. Seiring bertambahnya panjang filter (parameter M) kehalusan output meningkat, sedangkan transisi tajam pada data menjadi semakin tumpul. Ini menyiratkan bahwa filter ini memiliki respons domain waktu yang sangat baik namun respons frekuensinya buruk. Filter MA melakukan tiga fungsi penting: 1) Diperlukan titik masukan M, menghitung rata-rata titik M tersebut dan menghasilkan titik keluaran tunggal 2) Karena perhitungan perhitungan yang dilakukan. Filter memperkenalkan jumlah delay yang pasti 3) Filter bertindak sebagai Low Pass Filter (dengan respons domain frekuensi yang buruk dan respons domain waktu yang baik). Kode Matlab: Kode matlab berikut mensimulasikan respon domain waktu dari M-point Moving Average filter dan juga merencanakan respons frekuensi untuk berbagai panjang filter. Time Domain Response: Pada plot pertama, kita memiliki input yang masuk ke moving average filter. Masukannya berisik dan tujuan kami adalah mengurangi kebisingan. Angka berikutnya adalah respon output dari filter Moving Average 3-point. Dapat disimpulkan dari gambar bahwa filter Moving Average 3-point tidak banyak berguna untuk menyaring noise. Kami meningkatkan keran filter menjadi 51 poin dan kita dapat melihat bahwa noise pada output telah berkurang banyak, yang digambarkan pada gambar berikutnya. Kami meningkatkan keran lebih jauh ke 101 dan 501 dan kita dapat mengamati bahwa meskipun - meskipun suaranya hampir nol, transisi tersebut menjadi tumpul secara drastis (mengamati kemiringan di kedua sisi sinyal dan membandingkannya dengan transisi dinding bata yang ideal di Masukan kami). Respon Frekuensi: Dari respons frekuensi dapat dikatakan bahwa roll-off sangat lambat dan redaman pita stop tidak baik. Mengingat redaman band stop ini, jelas, filter rata-rata bergerak tidak bisa memisahkan satu pita frekuensi dari yang lain. Seperti kita ketahui bahwa kinerja yang baik dalam domain waktu menghasilkan kinerja yang buruk dalam domain frekuensi, dan sebaliknya. Singkatnya, rata-rata bergerak adalah filter pemulusan yang sangat baik (tindakan dalam domain waktu), namun filter low-pass yang sangat buruk (tindakan di domain frekuensi) Tautan Eksternal: Buku yang Disarankan: Sidebar Utama

No comments:

Post a Comment