Friday 7 July 2017

Filter Rekursif Algoritma Moving Average


Panduan Ilmuwan dan Insinyur untuk Pengolahan Sinyal Digital Oleh Steven W. Smith, Ph. D. Keuntungan yang luar biasa dari filter rata-rata bergerak adalah dapat diimplementasikan dengan algoritma yang sangat cepat. Untuk memahami algoritma ini, bayangkan melewatkan sebuah sinyal input, x, melalui filter moving average tujuh titik untuk membentuk sinyal output, y. Sekarang lihat bagaimana dua titik keluaran yang berdekatan, y 50 dan y 51, dihitung: Ini adalah titik penghitungan yang hampir sama x 48 sampai x 53 harus ditambahkan untuk y50, dan sekali lagi untuk y 51. Jika y50 telah dihitung , Cara yang paling efisien untuk menghitung y adalah: Bila y 51 telah ditemukan dengan menggunakan y50, maka y 52 dapat dihitung dari sampel y 51, dan seterusnya. Setelah titik pertama dihitung dalam y, semua titik lainnya dapat ditemukan hanya dengan satu penambahan dan pengurangan per titik. Hal ini dapat dinyatakan dalam persamaan: Perhatikan bahwa persamaan ini menggunakan dua sumber data untuk menghitung setiap titik dalam output: poin dari input dan titik yang dihitung sebelumnya dari output. Ini disebut persamaan rekursif, yang berarti bahwa hasil dari satu perhitungan digunakan dalam perhitungan di masa depan. (Istilah rekursif juga memiliki arti lain, terutama dalam ilmu komputer). Bab 19 membahas berbagai filter rekursif secara lebih rinci. Sadarilah bahwa filter rekursif rata-rata bergerak sangat berbeda dari filter rekursif biasa. Secara khusus, kebanyakan filter rekursif memiliki respons impuls panjang yang tak terhingga (IIR), terdiri dari sinusoid dan eksponensial. Respon impuls dari moving average adalah pulsa persegi panjang (respon impuls yang terbatas, atau FIR). Algoritma ini lebih cepat daripada filter digital lainnya karena beberapa alasan. Pertama, hanya ada dua perhitungan per titik, terlepas dari panjang saringan kernel. Kedua, penambahan dan pengurangan adalah satu-satunya operasi matematika yang dibutuhkan, sementara kebanyakan filter digital memerlukan perkalian yang memakan waktu. Ketiga, skema pengindeksan sangat sederhana. Setiap indeks di Pers. 15-3 ditemukan dengan menambahkan atau mengurangi konstanta bilangan bulat yang dapat dihitung sebelum penyaringan dimulai (yaitu p dan q). Keempat, keseluruhan algoritma dapat dilakukan dengan representasi bilangan bulat. Bergantung pada perangkat keras yang digunakan, bilangan bulat bisa lebih dari urutan besarnya lebih cepat dari pada floating point. Anehnya, representasi bilangan bulat bekerja lebih baik daripada floating point dengan algoritma ini, selain menjadi lebih cepat. Kesalahan round-off dari aritmatika floating point dapat menghasilkan hasil yang tidak diharapkan jika Anda tidak hati-hati. Sebagai contoh, bayangkan 10.000 sampel sinyal disaring dengan metode ini. Sampel terakhir dalam sinyal tersaring berisi akumulasi kesalahan 10.000 penambahan dan 10.000 pengurangan. Ini muncul pada sinyal output sebagai offset drifting. Integer tidak memiliki masalah ini karena tidak ada kesalahan round-off dalam aritmatika. Jika Anda harus menggunakan floating point dengan algoritma ini, program pada Tabel 15-2 menunjukkan bagaimana menggunakan akumulator presisi ganda untuk menghilangkan drift ini. Dalam statistik, rata-rata bergerak sederhana adalah algoritma yang menghitung mean tak tertimbang dari sampel n terakhir. Parameter n sering disebut ukuran jendela, karena algoritma dapat dianggap sebagai jendela yang meluncur di atas titik data. Dengan menggunakan formulasi rekursif algoritma, jumlah operasi yang dibutuhkan per sampel dikurangi menjadi satu penambahan, satu pengurangan dan satu divisi. Karena formulasi tidak tergantung pada ukuran jendela n. Kompleksitas runtime adalah O (1). I. e. konstan Rumus rekursif dari rata-rata pergerakan yang tidak tertimbang adalah, di mana rata-rata rol rata-rata dan x mewakili titik data. Jadi, setiap kali jendela meluncur ke kanan, satu titik data, ekor, putus dan satu titik data, kepala, masuk. Implementasi Implementasi rata-rata bergerak sederhana harus mempertimbangkan hal berikut Algoritma inisialisasi Selama Jendela tidak terisi penuh dengan nilai, rumus rekursif gagal. Penyimpanan Akses ke elemen ekor diperlukan, yang tergantung pada pelaksanaannya membutuhkan penyimpanan n elemen. Implementasi saya menggunakan formula yang disajikan saat jendela benar-benar dihuni dengan nilai, dan sebaliknya beralih ke formula, yang memperbarui mean dengan menghitung ulang jumlah elemen sebelumnya. Perhatikan bahwa hal ini dapat menyebabkan ketidakstabilan numerik karena aritmatika floating point. Sejauh menyangkut konsumsi memori, penerapannya menggunakan iterator untuk melacak elemen kepala dan ekor. Hal ini menyebabkan implementasi dengan kebutuhan memori konstan tidak tergantung pada ukuran jendela. Berikut adalah prosedur update yang meluncur ke kanan jendela. Pada sebagian besar koleksi membuat pencacah mereka tidak masuk akal saat koleksi yang mendasarinya dimodifikasi. Implementasinya bergantung pada enumerator yang valid. Terutama dalam aplikasi berbasis streaming kebutuhan koleksi yang mendasarinya dimodifikasi saat elemen baru tiba. Salah satu cara untuk mengatasinya adalah dengan membuat kumpulan ukuran ukuran melingkar sederhana ukuran n1 yang tidak pernah membatalkan iteratornya dan menambahkan elemen dan memanggil Shift secara bergantian. Saya berharap bisa mengetahui bagaimana menerapkannya dengan benar, karena fungsi Uji sangat membingungkan saya.230 Apakah saya perlu mengkonversi data ke Array, kemudian menjalankan SMA sma baru SMA (20, array) untuk periode 20 SMA Bagaimana cara menangani Shift () fungsi Apakah perlu untuk mengimplementasikan konstruktor. (Maaf untuk kebingungan). Tidak, Anda tidak perlu mengubah data Anda menjadi array selama data Anda mengimplementasikan IEnumerable1 dan jenis enumerasinya adalah dua kali lipat. Sejauh menyangkut pesan pribadi Anda, Anda perlu mengubah DataRow menjadi sesuatu yang diberi nilai ganda. Pendekatan Anda bekerja. Shift, geser jendela satu posisi ke kiri. Untuk dataset katakanlah 40 nilai dan 20 periode SMA Anda memiliki 21 posisi yang sesuai dengan jendela (40 8211 20 1). Setiap kali Anda memanggil Shift () jendela dipindahkan ke kiri oleh satu posisi dan Average () mengembalikan SMA untuk posisi jendela saat ini. Artinya, rata-rata tak tertimbang dari semua nilai di dalam jendela. Selain itu, implementasi saya memungkinkan untuk menghitung SMA meski jendela belum terisi penuh di awal. Jadi intinya Semoga ini bisa membantu. Pertanyaan lebih lanjut PEMBERITAHUAN HAK CIPTA Christoph Heindl dan cheind. wordpress, 2009-2012. Penggunaan yang tidak sah dan atau duplikasi materi ini tanpa izin tertulis dan tertulis dari penulis dan pemilik blog ini sangat dilarang. Kutipan dan tautan dapat digunakan, asalkan kredit penuh dan jelas diberikan kepada Christoph Heindl dan cheind. wordpress dengan arahan yang tepat dan spesifik terhadap konten asli. Recent Posts Rata-rata filter rata-rata bergerak rata-rata sejumlah sampel masukan dan menghasilkan sampel keluaran tunggal. Tindakan rata-rata ini menghilangkan komponen frekuensi tinggi yang ada pada sinyal. Filter rata-rata bergerak biasanya digunakan sebagai filter low pass. Dalam algoritma penyaringan rekursif, sampel keluaran sebelumnya juga diambil untuk rata-rata. Rata-rata filter rata-rata bergerak menghasilkan sejumlah sampel masukan dan menghasilkan sampel keluaran tunggal. Tindakan rata-rata ini menghilangkan komponen frekuensi tinggi yang ada pada sinyal. Filter rata-rata bergerak biasanya digunakan sebagai filter low pass. Dalam algoritma penyaringan rekursif, sampel keluaran sebelumnya juga diambil untuk rata-rata. Inilah alasan mengapa respon impulsnya meluas sampai tak terhingga. Cara menggunakan program sampel Berkas. zip berisi kode sumber dan eksekusi. Untuk mengkompilasi dan menjalankan kode sumber Anda harus menginstal Visual Basic 6.0 di komputer Anda. Untuk menjalankan executable, Anda harus mendownload dan menginstal file runtime Visual Basic 6.0. Jalankan movavgfilt. exe dan Anda akan melihat jendela utama. Di jendela utama. Bagian paling atas adalah Function generator. Yang menghasilkan berbagai bentuk gelombang untuk menguji saringan. Kita dapat secara interaktif mengubah amplitudo, frekuensi dan bentuk sinyal yang dihasilkan. Untuk menguji program kita harus terlebih dahulu menghasilkan bentuk gelombang yang sesuai. Disini kita akan menghasilkan bentuk gelombang kompleks yang terdiri dari dua frekuensi yang berbeda. Biarkan semuanya dalam pengaturan default dan klik tombol quotgeneratequot. Sekarang Anda bisa melihat sinyal 10 Hz pada grafik di sebelah generator sinyal. Gambar di bawah menunjukkan bentuk gelombang. Sekarang ubah Frequency menjadi 100 Hz dan klik tombol quotgeneratequot lagi. Bentuk gelombang yang baru dihasilkan ditambahkan ke bentuk gelombang yang ada dan bentuk gelombang yang dihasilkan terlihat seperti gelombang sin 10Hz dengan noise 100 Hz. Lihat bentuk gelombang di bawah ini. Bentuk gelombang ini paling cocok untuk pengujian filter karena mengandung dua frekuensi yang berbeda. Anda dapat menjalankan filter dengan mengklik tombol quotFilterquot. Dari pilihan yang tersedia tersisa ke tombol quotFilterquot. Anda dapat memilih penyaringan rekursif, non-rekursif atau tanpa penyaringan sama sekali. Gambar di bawah menunjukkan output filter. Download kode sumber Moving Average Filter

No comments:

Post a Comment