Saya memiliki sensor yang melaporkan pembacaannya dengan cap waktu dan nilai. Namun, itu tidak menghasilkan bacaan pada tingkat yang tetap.
Saya menemukan data tingkat variabel sulit untuk ditangani. Sebagian besar filter mengharapkan tingkat sampel tetap. Menggambar grafik lebih mudah dengan laju sampel tetap juga.
Apakah ada algoritma untuk melakukan sampel ulang dari laju sampel variabel ke laju sampel tetap?
resampling
FigBug
sumber
sumber
Jawaban:
Pendekatan paling sederhana adalah dengan melakukan semacam interpolasi spline seperti yang disarankan Jim Clay (linier atau lainnya). Namun, jika Anda memiliki kemewahan pemrosesan batch, dan terutama jika Anda memiliki set sampel tidak seragam yang ditentukan secara berlebihan, ada algoritma "rekonstruksi sempurna" yang sangat elegan. Untuk alasan numerik, mungkin tidak praktis dalam semua kasus, tetapi setidaknya perlu diketahui secara konseptual. Saya pertama kali membacanya di makalah ini .
Caranya adalah dengan mempertimbangkan set sampel tidak seragam Anda yang telah direkonstruksi dari sampel yang seragam melalui interpolasi tulus . Mengikuti notasi di koran:
Perhatikan bahwa ini menyediakan satu set persamaan linear, satu untuk setiap sampel tidak seragam , di mana yang tidak diketahui adalah sampel dengan spasi yang sama , seperti:y(t) y(kT)
Dalam persamaan di atas, adalah jumlah sampel seragam yang tidak diketahui, adalah kebalikan dari laju sampel seragam, dan adalah jumlah sampel tidak seragam (yang mungkin lebih besar dari ). Dengan menghitung solusi kuadrat terkecil dari sistem itu, sampel yang seragam dapat direkonstruksi. Secara teknis, hanya sampel tidak seragam yang diperlukan, tetapi tergantung pada seberapa "tersebar" mereka dalam waktu, matriks interpolasi mungkin sangat buruk dikondisikan . Ketika itu masalahnya, menggunakan lebih banyak sampel yang tidak seragam biasanya membantu.n T m n n
Sebagai contoh mainan, inilah perbandingan (menggunakan numpy ) antara metode di atas dan interpolasi spline kubik pada kisi yang agak gugup:
(Kode untuk mereproduksi plot di atas termasuk di akhir jawaban ini)
Semua yang dikatakan, untuk metode berkualitas tinggi, kuat, dimulai dengan sesuatu di salah satu makalah berikut mungkin akan lebih tepat:
-
sumber
Ini terdengar seperti masalah konversi laju sampel asinkron. Untuk mengonversi dari satu laju sampel ke yang lain, kami dapat menghitung representasi waktu kontinyu dari sinyal dengan melakukan interpolasi tulus, lalu melakukan pengujian ulang pada laju sampel baru kami. Apa yang Anda lakukan tidak jauh berbeda. Anda perlu menguji ulang sinyal Anda untuk mendapatkan waktu sampel yang diperbaiki.
Sinyal waktu kontinu dapat dihitung dengan menggabungkan setiap sampel dengan fungsi sinc. Karena fungsi sinc berlanjut tanpa batas, kami menggunakan sesuatu yang lebih praktis seperti jendela berjendela dengan panjang yang praktis. Bagian yang sulit adalah bahwa karena sampel Anda bergerak dalam waktu, sinc dengan fase offset yang berbeda mungkin perlu digunakan untuk setiap sampel ketika melakukan resampling.
Sinyal waktu kontinu dari sinyal sampel:
di mana adalah waktu sampel Anda. Namun, dalam kasus Anda, waktu sampel Anda tidak tetap. Jadi saya pikir Anda perlu menggantinya dengan waktu sampel di sampel itu.Ts
Dari ini, Anda dapat menguji ulang sinyal:
di mana adalah waktu sampel yang diinginkan.Tns
Menyatukan semuanya Anda dapatkan:
Karena ini bukan sebab akibat atau dapat ditelusuri, fungsi sinc dapat diganti dengan fungsi dukungan yang terbatas dan batas penjumlahan disesuaikan sesuai.
Biarkan kernel (t) menjadi sinc jendela atau fungsi lain yang serupa dengan panjang 2k kemudian:
Saya harap ini membantu ..., tapi saya mungkin telah membuat kesalahan di sepanjang jalan dan mungkin sedikit intensif secara matematika. Saya akan merekomendasikan meneliti konversi laju sampel untuk informasi lebih lanjut. Mungkin orang lain di sini bisa memberikan penjelasan atau solusi yang lebih baik juga.
sumber
Saya pikir jawaban Yakub sangat bisa diterapkan.
Metode yang lebih mudah yang mungkin tidak begitu baik dalam hal memperkenalkan distorsi adalah dengan melakukan interpolasi polinomial. Saya akan menggunakan interpolasi linier (mudah, tidak sebagus kinerja sinyal-bijaksana) atau splines kubik (masih tidak terlalu keras, kinerja sinyal lebih baik) untuk menghasilkan sampel kapan saja Anda inginkan dari sampel waktu sewenang-wenang Anda.
sumber
(Sebulan kemudian) ada dua pilihan utama untuk setiap metode interpolasi:Nnear
1) jumlah titik data terdekat dengan titik yang hilang untuk digunakan, 2 4 6 ... 2) kelas fungsi basis yang digunakan: linear, polinomial, sine-cosine (Fourier), piecewise cubic (B-spline atau interpolasi spline), seperti-seperti ... (Pilihan 0 adalah apakah menggunakan metode dan kode orang lain, atau melakukannya sendiri).
Memasukkan garis lurus ke titik mudah: 2 poin [-1, ], [1, ]: Estimasi poin dengan rata-rata : rata-rata umum : lihat misalnya Numerical Recipes h. 781: paskan baris dan perkirakan . Seseorang dapat kuadrat, kubik, sinus-cosinus ... dengan cara yang sama.Nnear
y−1 y1
[ x i , y i ] x i = 0y0∼(y−1+y1)/2
[xi,yi] xi=0 y0∼ yi
[xi,yi]
y 0 ∼ aa+bx y0∼a
y i [ x i , y i ]
Saya mengerti bahwa Anda memiliki data dengan spasi yang sama dengan beberapa poin yang hilang, apakah itu benar?2πft f
Seberapa baik interpolasi linier berfungsi untuk kasus ini?
Baiklah, mari kita coba cos dengan = 0.25: 1 0 -1 0 1 0 -1 0 ... 2 tetangga dari setiap titik rata-rata ke 0, mengerikan. 4 tetangga: rata-rata [1 0 (hilang -1) 0 1] = 1/2, mengerikan. (Coba filter 4-tetangga [-1 3 3 -1] / 4 untuk ini.)f
Interplasi linear dengan 4 atau 6 atau 8 tetangga mungkin bekerja cukup baik untuk data Anda.
Saya sarankan memulai dengan metode yang Anda pahami sebelum menyelam ke splines, seperti-tulus ... meskipun itu bisa menyenangkan juga.
Metode lain yang sangat berbeda adalah pembobotan jarak terbalik . Sangat mudah untuk diimplementasikan (lihat idw-interpolasi-dengan-python pada SO), bekerja dalam 2d 3d dan juga, tetapi afaik sulit untuk dianalisis secara teoritis.
(Jelas, TIDAK ada metode interpolasi tunggal yang dapat cocok dengan zillions kombinasi
[sinyal, noise, metrik kesalahan, fungsi tes] yang terjadi dalam kenyataan.
Ada lebih banyak metode di dunia, dengan lebih banyak kenop, daripada fungsi pengujian.
Meskipun demikian galeri metode dan fungsi pengujian mungkin berguna.)
sumber
Jika Anda bekerja dengan matlab, Anda dapat melakukannya dengan bekerja dengan pengaturan waktu.
sumber
Sebelum Anda mulai melakukan beberapa pemrosesan eksotis Anda dapat mencoba sesuatu yang sederhana seperti ini (kode semu - tidak ada interpolasi, tetapi itu bisa ditambahkan)
sumber
Jawaban IMHO Datageist benar, jawaban Yakub tidak. Cara mudah untuk memverifikasi ini adalah bahwa algoritma yang disarankan datageist dijamin untuk diinterpolasi melalui sampel asli (dengan asumsi ketepatan angka tak terbatas), sedangkan jawaban Yakub tidak.
sumber