Wednesday 26 July 2017

Moving Average Filter With Matlab


Download movAv. m (lihat juga movAv2 - versi terbaru yang memungkinkan pembobotan) Deskripsi Matlab mencakup fungsi yang disebut movavg dan tsmovavg (time-series moving average) di Financial Toolbox, movAv dirancang untuk mereplikasi fungsi dasar ini. Kode di sini memberikan contoh bagus untuk mengelola indeks di dalam loop, yang bisa membingungkan untuk memulai. Saya sengaja menyimpan kode pendek dan sederhana agar proses ini tetap jelas. MovAv melakukan moving average sederhana yang dapat digunakan untuk memulihkan data yang bising dalam beberapa situasi. Ia bekerja dengan mengambil rata-rata input (y) di atas jendela waktu geser, ukurannya ditentukan oleh n. Semakin besar n, semakin besar jumlah perataan efek n relatif terhadap panjang vektor masukan y. Dan efektif (baik, semacam) menciptakan filter frekuensi lowpass - lihat contoh dan bagian pertimbangan. Karena jumlah smoothing yang diberikan oleh masing-masing nilai n relatif terhadap panjang vektor input, nilainya selalu bernilai untuk menguji nilai yang berbeda untuk melihat apa yang sesuai. Ingat juga bahwa n poin hilang pada masing-masing rata-rata jika n adalah 100, 99 poin pertama dari vektor input tidak berisi data yang cukup untuk rata-rata 100pt. Hal ini dapat dihindari agak oleh rata-rata susun, misalnya, kode dan grafik di bawah membandingkan sejumlah rata-rata jendela panjang yang berbeda. Perhatikan bagaimana kelancaran 1010pt dibandingkan dengan rata-rata 20pt tunggal. Dalam kedua kasus tersebut 20 titik data hilang secara total. Buat xaxis x1: 0,01: 5 Menghasilkan noise noiseReps 4 noise repmat (randn (1, ceil (numel (x) noiseReps)), noiseReps, 1) noise reshape (noise, 1, length (noise) noiseReps) Menghasilkan ydata noise yexp X) 10noise (1: length (x)) Perfrom averages: y2 movAv (y, 10) 10 pt y3 movAv (y2, 10) 1010 pt y4 movAv (y, 20) 20 pt y5 movAv (y, 40) 40 pt Y6 movAv (y, 100) 100 pt Plot figure plot (x, y, y2, y3, y4, y5, y6) legenda (data mentah, 10pt moving average, 1010pt, 20pt, 40pt, 100pt) xlabel (x) ylabel Y) judul (Perbandingan moving averages) movAv. m kode fungsi run-through output movAv (y, n) Baris pertama mendefinisikan nama fungsi, input dan output. Masukan x harus berupa vektor data untuk melakukan rata-rata, n harus jumlah titik untuk melakukan rata-rata di atas output akan berisi data rata-rata yang dikembalikan oleh fungsinya. Preallocate output outputNaN (1, numel (y)) Temukan titik tengah n ruas tengah (n2) Pekerjaan utama fungsi dilakukan dalam loop, tapi sebelum memulai dua hal disiapkan. Pertama, keluarannya adalah pra-alokasi sebagai NaN, ini melayani dua tujuan. Pertama, preallokasi pada umumnya adalah praktik yang baik karena mengurangi juggling memori yang harus dilakukan Matlab, kedua, sangat memudahkan untuk menempatkan data rata-rata ke dalam output dengan ukuran yang sama dengan vektor input. Ini berarti xaxis yang sama dapat digunakan kemudian untuk keduanya, yang sesuai untuk merencanakan, sebagai alternatif NaN dapat dilepas nanti dalam satu baris kode (output output (Variabel midPoint akan digunakan untuk menyelaraskan data pada vektor output. N 10, 10 poin akan hilang karena, untuk 9 titik pertama vektor masukan, tidak ada cukup data untuk mengambil nilai rata-rata 10 poin. Karena outputnya akan lebih pendek dari pada input, maka perlu diselaraskan dengan benar. Digunakan sehingga jumlah data yang sama hilang pada awal dan akhir, dan input dijaga sejajar dengan output oleh buffer NaN yang dibuat saat preallocating output. Untuk 1: length (y) - n Temukan kisaran indeks untuk mengambil rata-rata Over (a: b) ban Menghitung mean output (amidPoint) mean (y (a: b)) end Dalam for loop itu sendiri, mean diambil alih setiap segmen berturut-turut dari input. Loop akan berjalan untuk a. Didefinisikan sebagai 1 sampai dengan panjang input (y), minus data yang akan hilang (n). Jika input 100 point lo Ng dan n adalah 10, loop akan berjalan dari (a) 1 sampai 90. Ini berarti indeks pertama dari segmen akan dirata-ratakan. Indeks kedua (b) hanya satu-1. Jadi pada iterasi pertama, a1. N10. Jadi b 11-1 10. Rata-rata pertama diambil alih y (a: b). Atau x (1:10). Rata-rata segmen ini, yang merupakan satu nilai tunggal, disimpan dalam output di indeks amidPoint. Atau 156. Pada iterasi kedua, a2. B 210-1 11. Jadi mean diambil alih x (2:11) dan disimpan dalam output (7). Pada iterasi terakhir dari loop untuk input dengan panjang 100, a91. B 9010-1 100 sehingga mean diambil alih x (91: 100) dan disimpan dalam output (95). Ini menghasilkan output dengan total n (10) nilai NaN pada indeks (1: 5) dan (96: 100). Contoh dan pertimbangan Moving averages berguna dalam beberapa situasi, tapi tidak selalu pilihan terbaik. Berikut adalah dua contoh dimana mereka belum tentu optimal. Kalibrasi Mikrofon Kumpulan data ini mewakili tingkat masing-masing frekuensi yang dihasilkan oleh speaker dan dicatat oleh mikrofon dengan respons linier yang diketahui. Output speaker bervariasi dengan frekuensi, namun kami dapat memperbaiki variasi ini dengan data kalibrasi - output dapat disesuaikan secara level untuk menjelaskan fluktuasi dalam kalibrasi. Perhatikan bahwa data mentahnya berisik - ini berarti bahwa perubahan kecil pada frekuensi tampaknya memerlukan perubahan level yang besar dan tidak menentu. Apakah ini realistis Atau apakah ini merupakan produk dari lingkungan rekaman Yang masuk akal dalam hal ini untuk menerapkan rata-rata bergerak yang menghaluskan kurva tingkat frekuensi untuk memberikan kurva kalibrasi yang sedikit kurang tidak menentu. Tapi mengapa tidak optimal dalam contoh ini Data lebih banyak akan lebih baik - beberapa kalibrasi berjalan rata-rata akan menghancurkan kebisingan di sistem (selama acak) dan memberikan kurva dengan detail yang kurang halus hilang. Rata-rata bergerak hanya dapat memperkirakan hal ini, dan dapat menghilangkan beberapa penurunan frekuensi dan puncak yang lebih tinggi dari kurva yang benar-benar ada. Gelombang sinus Menggunakan rata-rata bergerak pada gelombang sinus menyoroti dua poin: Masalah umum memilih sejumlah titik yang masuk akal untuk melakukan rata-rata di atas. Yang sederhana, tapi ada metode analisis sinyal yang lebih efektif daripada rata-rata sinyal osilasi dalam domain waktu. Dalam grafik ini, gelombang sinus asli diplot dengan warna biru. Kebisingan ditambahkan dan diplot sebagai kurva oranye. Rata-rata bergerak dilakukan pada berbagai titik untuk melihat apakah gelombang asli dapat dipulihkan. 5 dan 10 poin memberikan hasil yang masuk akal, namun jangan menghilangkan noise seluruhnya, karena jumlah titik yang lebih banyak mulai kehilangan detail amplitudo karena rata-rata meluas melebihi fase yang berbeda (ingat oscilat gelombang sekitar nol, dan rata-rata (-1 1) 0).Sebuah pendekatan alternatif adalah dengan membangun filter lowpass daripada yang bisa diterapkan pada sinyal di domain frekuensi. Im tidak akan membahas detail karena melampaui lingkup artikel ini, namun karena suaranya jauh lebih tinggi daripada frekuensi dasar gelombang, akan cukup mudah jika membuat filter lowpass daripada yang akan mengeluarkan frekuensi tinggi. Noise. Moving Average Function resultmovingmean (data, window, redup, option) menghitung rata-rata pergerakan data matriks terpusat yang menggunakan ukuran jendela yang ditentukan di jendela dalam dimensi redup, dengan menggunakan algoritma yang ditentukan pada opsi. Dim dan pilihan adalah input opsional dan akan default ke 1. Dim dan pilihan input opsional bisa dilewati sama sekali atau bisa diganti dengan a. Misalnya movingmean (data, window) akan memberikan hasil yang sama seperti movingmean (data, window, 1,1) atau movingmean (data, window ,, 1). Ukuran dan dimensi matriks data input hanya dibatasi oleh ukuran matriks maksimum untuk platform Anda. Jendela harus berupa bilangan bulat dan harus ganjil. Jika jendela bahkan kemudian dibulatkan ke angka ganjil lebih rendah berikutnya. Fungsi menghitung rata-rata bergerak yang menggabungkan titik pusat dan (jendela-1) 2 elemen sebelum dan sesudah dalam dimensi yang ditentukan. Di tepi matriks jumlah elemen sebelum atau sesudah dikurangi sehingga ukuran jendela sebenarnya kurang dari jendela yang ditentukan. Fungsi dibagi menjadi dua bagian, algoritma 1d-2d dan algoritma 3d. Hal ini dilakukan untuk mengoptimalkan kecepatan solusi, terutama pada matriks yang lebih kecil (yaitu 1000 x 1). Selanjutnya, beberapa algoritma yang berbeda dengan masalah 1d-2d dan 3d disediakan seperti pada kasus-kasus tertentu algoritma default bukan yang tercepat. Hal ini biasanya terjadi bila matriksnya sangat lebar (yaitu 100 x 100000 atau 10 x 1000 x 1000) dan rata-rata bergerak dihitung dalam dimensi yang lebih pendek. Ukuran dimana algoritma default lebih lambat akan tergantung pada komputer. MATLAB 7.8 (R2009a) Tag untuk File Ini Silakan login untuk memberi tag pada file. Silahkan masuk untuk menambahkan komentar atau rating. Komentar dan Peringkat (8) Fungsi ini berkaitan dengan berakhirnya dengan memotong bagian trailing atau leading window dan beralih ke moving average yang mengarah atau berlawanan daripada yang terpusat. Untuk mengikuti contoh yang Anda berikan dalam komentar Anda jika ukuran jendela adalah 3 maka di tengah 1, data rata-rata fungsi dari titik 1 dan 2 di pusat 2 poin 1, 2, dan 3 rata-rata berada di pusat 9 Poin 8, 9, dan 10 dirata-ratakan dan di pusat 10 (misalkan vektor memiliki 10 entri) poin 9 dan 10 dirata-ratakan. Bagaimana cara kerja movingmean dengan ujungnya Apakah mulai dengan ukuran jendela yang hanya mencakup titik 1 pada 1, maka 3 poin pada titik 2, kemudian bertambah ukuran jendela sampai ukuran jendela ditentukan pada masukan fungsi. Bagus dan sederhana. Terima kasih. Pekerjaan bagus Sangat berguna seperti kata Stephan Wolf. Hanya apa yang saya cari. Rata-rata bergerak terpusat yang mampu bekerja dalam plot di atas keseluruhan lebar, tanpa harus mencari ukuran jendela filter dan menggerakkan awal. Great Mempercepat laju rekayasa dan sains MathWorks adalah pengembang perangkat lunak komputasi matematika terkemuka untuk insinyur dan ilmuwan. Filter Rata-Rata (MA filter) Loading. Filter rata-rata bergerak adalah filter Low Pass FIR (Finite Impulse Response) sederhana yang biasa digunakan untuk merapikan rangkaian datafile sampel. Diperlukan M sampel 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) kelancaran 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) Mengambil titik masukan M, menghitung rata-rata titik M tersebut dan menghasilkan titik keluaran tunggal 2) Karena perhitungan perhitungan yang dilakukan. Filter memperkenalkan jumlah penundaan yang pasti 3) Filter bertindak sebagai Low Pass Filter (dengan respons domain frekuensi yang buruk dan respons domain waktu yang baik). Matlab Code: 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 membantu dalam 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 bahkan - meski suaranya hampir nol, transisinya menjadi tumpul secara drastis (mengamati lereng 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