Monday, 7 August 2017

Moving average matlab matrix


Dengan menggunakan MATLAB, bagaimana saya dapat menemukan rata-rata pergerakan hari ke-3 dari kolom matriks tertentu dan menambahkan rata-rata bergerak ke matriks tersebut. Saya mencoba menghitung rata-rata pergerakan 3 hari dari bawah ke atas matriks. Saya telah memberikan kode saya: Dengan matriks dan topeng berikut ini: Saya telah mencoba menerapkan perintah konv tapi saya menerima kesalahan. Inilah perintah konv yang saya coba gunakan pada kolom ke 2 matriks a: Output yang saya inginkan diberikan dalam matriks berikut: Jika Anda memiliki saran, saya akan sangat menghargainya. Terima kasih Untuk kolom 2 dari matriks a, saya menghitung rata-rata pergerakan 3 hari sebagai berikut dan menempatkan hasilnya pada kolom 4 dari matriks a (saya mengganti nama matriks sebagai 39desiredOutput39 hanya untuk ilustrasi). Rata-rata 3 hari dari 17, 14, 11 adalah 14 rata-rata 3 hari 14, 11, 8 adalah 11 rata-rata 3 hari 11, 8, 5 adalah 8 dan rata-rata 3 hari 8, 5, 2 adalah 5. Tidak ada nilai di baris 2 bawah untuk kolom ke-4 karena penghitungan untuk rata-rata pergerakan 3 hari dimulai dari bawah. Hasil 39valid39 tidak akan ditampilkan sampai setidaknya 17, 14, dan 11. Mudah-mudahan ini masuk akal ndash Aaron 12 Jun 13 at 1:28 Secara umum akan membantu jika Anda menunjukkan kesalahannya. Dalam hal ini Anda melakukan dua hal yang salah: Pertama, konvolusi Anda perlu dibagi tiga (atau panjang rata-rata bergerak) Kedua, perhatikan ukuran c. Anda tidak bisa hanya cocok c ke a. Cara khas untuk mendapatkan rata-rata bergerak adalah dengan menggunakan yang sama: tapi itu tidak seperti yang Anda inginkan. Sebagai gantinya Anda terpaksa menggunakan beberapa baris: 29 September, 2013 Bergerak rata-rata dengan konvolusi Apa itu rata-rata bergerak dan apa gunanya Bagaimana cara moving averaging dilakukan dengan menggunakan konvolusi Rata-rata pergerakan adalah operasi sederhana yang biasanya digunakan untuk menekan kebisingan Sinyal: kami tetapkan nilai setiap titik ke rata-rata nilai di lingkungannya. Dengan rumus: Disini x adalah input dan y adalah sinyal output, sedangkan ukuran jendela adalah w, seharusnya aneh. Rumus di atas menggambarkan operasi simetris: sampel diambil dari kedua sisi titik sebenarnya. Berikut adalah contoh kehidupan nyata. Titik di mana jendela diletakkan sebenarnya berwarna merah. Nilai di luar x seharusnya nol: Untuk bermain-main dan melihat efek rata-rata bergerak, lihatlah demonstrasi interaktif ini. Cara melakukannya dengan konvolusi Seperti yang mungkin Anda ketahui, menghitung rata-rata pergerakan sederhana sama dengan konvolusi: pada kedua kasus, sebuah jendela tergelincir sepanjang sinyal dan elemen di jendela dirangkum. Jadi, cobalah untuk melakukan hal yang sama dengan menggunakan konvolusi. Gunakan parameter berikut: Output yang diinginkan adalah: Sebagai pendekatan pertama, mari kita coba apa yang kita dapatkan dengan menggabungkan sinyal x dengan kernel k berikut: Outputnya persis tiga kali lebih besar dari yang diharapkan. Bisa juga dilihat, bahwa nilai output adalah rangkuman ketiga elemen di jendela. Hal ini karena selama konvolusi jendela tergelincir, semua elemen di dalamnya dikalikan dengan satu dan kemudian diringkas: yk 1 cdot x 1 cdot x 1 cdot x Untuk mendapatkan nilai y yang diinginkan. Output harus dibagi dengan 3: Dengan rumus termasuk pembagiannya: Tapi bukankah optimal melakukan pembagian selama konvolusi Inilah ide dengan menata ulang persamaan: Jadi kita akan menggunakan kernel k berikut: Dengan cara ini kita akan Mendapatkan output yang diinginkan: Secara umum: jika kita ingin melakukan moving average dengan konvolusi yang memiliki ukuran jendela w. Kita akan menggunakan kernel k berikut: Fungsi sederhana yang melakukan moving average adalah: Contoh penggunaan adalah: Saya perlu menghitung moving average di atas deret data, dalam sebuah for loop. Saya harus mendapatkan rata-rata bergerak selama N9 hari. Rangkaian komputasi Im adalah 4 seri dari 365 nilai (M), yang merupakan nilai rata-rata dari seperangkat data lainnya. Saya ingin merencanakan nilai rata-rata data saya dengan rata-rata bergerak dalam satu plot. Aku googled sedikit tentang bergerak rata-rata dan perintah konv dan menemukan sesuatu yang saya mencoba menerapkan dalam kode saya .: Jadi pada dasarnya, saya menghitung maksud saya dan plot dengan moving average (salah). Aku mengambil nilai wts langsung dari situs mathworks, jadi itu tidak benar. (Sumber: mathworks. nlhelpeconmoving-average-trend-estimateation. html) Masalah saya meskipun, adalah bahwa saya tidak mengerti apa wts ini. Mungkinkah ada yang menjelaskan Jika ada kaitannya dengan bobot nilai: itu tidak valid dalam kasus ini. Semua nilai tertimbang sama. Dan jika saya melakukan ini sepenuhnya salah, bisakah saya mendapatkan pertolongan dengan itu Terima kasih yang tulus. Tanya 23 September 19:05 Menggunakan konv adalah cara terbaik untuk menerapkan moving average. Dalam kode yang Anda gunakan, wts adalah berapa banyak Anda menimbang setiap nilai (seperti yang Anda duga). Jumlah vektor itu harus selalu sama dengan satu. Jika Anda ingin memberi bobot pada setiap nilai secara merata dan lakukan filter bergerak N ukuran maka Anda ingin melakukannya Dengan menggunakan argumen valid dalam konv akan menghasilkan nilai lebih sedikit pada Ms daripada yang Anda miliki di M. Gunakan sama jika Anda tidak mempedulikan efek dari Nol padding Jika Anda memiliki toolbox pemrosesan sinyal, Anda dapat menggunakan cconv jika Anda ingin mencoba moving average yang melingkar. Sesuatu seperti Anda harus membaca dokumentasi konv dan cconv untuk informasi lebih lanjut jika Anda belum melakukannya. Anda dapat menggunakan filter untuk menemukan rata-rata yang sedang berjalan tanpa menggunakan for loop. Contoh ini menemukan rata-rata arus dari vektor 16 elemen, dengan menggunakan ukuran jendela 5. 2) yang mulus sebagai bagian dari Toolbox Curve Fitting (yang tersedia dalam banyak kasus) yy smooth (y) menghaluskan data pada vektor kolom Y menggunakan filter rata-rata bergerak. Hasil dikembalikan pada vektor kolom yy. Rentang default untuk rata-rata bergerak adalah 5.

No comments:

Post a Comment