Untuk keperluan jawaban ini saya akan menggunakan terminologi Matlab dan mendefinisikan "upsampling" sebagai proses memasukkan nol di antara sampel input, dan "interpolasi" sebagai proses gabungan dari upsampling dan filtering untuk menghapus alias ( menjadi faktor interpolasi) yang diperkenalkan oleh upampling. Untuk penjelasan tentang bagaimana / mengapa upsampling memperkenalkan alias, silakan lihat utas ini .m - 1 mm - 1m - 1m
Penting untuk dipahami bahwa filter low-pass dapat digunakan untuk menghilangkan alias dan dengan demikian menyelesaikan interpolasi. Beberapa filter memiliki kelebihan saat digunakan dalam interpolasi. Saya akan membahas berbagai rasa penyaringan interpolasi di bawah ini.
Filter FIR
Filter interpolasi FIR efisien karena menggabungkan upampling dan alias penyaringan menjadi satu langkah. Ini paling mudah dilihat dalam contoh. Misalkan kita memiliki urutan data dan kami ingin menginterpolasinya dengan faktor dua. Langkah pertama adalah upample dengan faktor dua. Ini mengubah urutan data asli dari ke .x 0 , x 1 , . . . x N x 0 , 0 , x 1 , 0 , . . . x N.x [ n ]x0, x1, . . . xNx0, 0 , x1, 0 , . . . xN
Sekarang anggaplah kita memiliki filter FIR low-pass, , yang akan kita gunakan untuk menghapus alias. Ketika kami menggabungkan urutan data upampled dengan filter, setengah dari keran filter dirangsang oleh sampel yang tidak nol, dan setengah dari keran tidak aktif karena mereka sesuai dengan sampel nol. Setengah yang dirangsang dan setengah yang tidak aktif membalik bolak-balik saat filter melewati data. Dua set keran ini kadang-kadang disebut sebagai fase filter.h [ n ]
Efek yang sama ini dapat dicapai secara implisit dengan menghilangkan upampling, dan memfilter urutan data asli dengan interpolasi filter FIR. Filter FIR interpolasi menghasilkan output untuk setiap sampel input. Untuk semua output filter akan beroperasi pada sampel input (di mana K adalah jumlah tap filter dan "ceil" adalah fungsi langit-langit).m c e i l ( K / m )mmc e i l ( K/ m)
Sebuah contoh mudah-mudahan akan menggambarkan cara kerjanya. Misalkan kita memiliki filter enam ketuk dan kita melakukan interpolasi dengan faktor dua. Keran filter adalah [1 -2 4 4 -2 1]. Jika kita benar-benar melakukan interpolasi dan kemudian menyaring sampel dan tap filter akan berbaris (setelah tumpang tindih penuh) sebagai berikut:
0 : 1x2: - 20 : 4x1: 40 : - 2x0: 1
Sampel selanjutnya ...
x3: 10 : - 2x2: 40 : 4x1: - 20 : 1
Sampel selanjutnya ...
0 : 1x3: - 20 : 4x2: 40 : - 2x1: 1
Dan seterusnya. Inti dari filter interpolasi adalah bahwa ia benar-benar melompati memasukkan nol dan hanya mengganti set keran yang digunakannya saat ini. Dengan demikian, urutan sebelumnya sekarang akan terlihat seperti berikut:
x2: - 2x1: 4x0: 1
x3: 1x2: 4x1: - 2
x3: - 2x2: 4x1: 1
Zero Order Hold
Interpolator penahan nol-urutan adalah interpolator yang hanya mengulangi setiap sampel kali. Jadi faktor dari dua interpolator tahan nol-order mengkonversi menjadi . Metode ini menarik karena sangat mudah, baik dalam hal pengkodean maupun beban komputasi, untuk diimplementasikan.m - 1x0, x1, . . . xNx0, x0, x1, x1, . . . xN, xN
Masalahnya adalah filter low-pass sangat buruk. Kita dapat melihat bahwa ketika kita mengenali bahwa interpolator tahan nol adalah kasus khusus interpolasi FIR. Ini sesuai dengan upampling diikuti oleh filter persegi panjang . Transformasi Fourier dari filter persegi panjang adalah fungsi sinc, yang merupakan filter low-pass yang agak kumuh. Shabbiness dapat diperbaiki dengan filter FIR kompensasi, tetapi jika Anda akan melakukannya Anda mungkin juga menggunakan filter low-pass yang baik untuk memulai.m
Penahanan Pesanan Pertama
Penahanan urutan pertama adalah langkah naik dari interpolator penahan nol di mana penahanan interpolasi secara linier dengan menggunakan dua sampel input terdekat. Jadi, faktor dua interpolator penahan orde pertama akan mengkonversi menjadi .x0, x1, . . . xNx0, x0+ x12, x1, x1+ x22, . . . xN
Seperti interpolator penahan orde nol, interpolator penahan orde pertama adalah kasus khusus interpolasi FIR. Ini sesuai dengan upampling dan penyaringan dengan filter segitiga. Untuk interpolasi faktor-dua, filternya adalah , untuk interpolasi faktor-tiga filter adalah , dan seterusnya.[1[ 121 12][ 13231 2312]
Filter segitiga adalah dua filter persegi panjang yang digabungkan menjadi satu, yang sesuai dengan kuadrat dalam domain frekuensi. Ini merupakan langkah pasti dari penahanan tanpa urutan, tetapi masih belum bagus.
Filter IIR
Saya belum pernah menggunakan filter IIR interpolasi jadi saya tidak akan mengatakan banyak tentang mereka. Saya berasumsi bahwa argumen yang sama berlaku seperti dalam filtering biasa - filter IIR lebih efisien, bisa tidak stabil, tidak memiliki fase linear, dll tapi saya bisa salah tentang itu.
Interpolasi FFT
Saya akan melempar yang ini walaupun itu tidak terlalu umum (tentu saja, saya juga tidak berpikir bahwa zero-hold itu biasa). Thread ini membahas resampling FFT, di mana resampling adalah interpolasi dan penipisan.
Pesanan Tinggi Ditahan
Interpolator penahan orde kedua biasanya disebut sebagai "interpolator kuadratik". Mereka non-linear dan karenanya tidak dapat diimplementasikan sebagai filter FIR, yang linear. Saya tidak mengerti matematika di belakang mereka dengan baik, jadi saya tidak akan membahas kinerja mereka. Saya akan mengatakan, bahwa saya percaya bahwa mereka agak umum di luar pemrosesan sinyal.
Metode urutan yang lebih tinggi (tiga atau lebih) juga ada. Ini disebut sebagai "regresi polinomial".
EDIT:
Filter Combade Integrator Comb (CIC)
Saya lupa menyebutkan Filter CIC . Filter CIC digunakan karena dua alasan: mereka hanya menggunakan adders / subtracters (bukan masalah besar sekarang karena perkalian cepat dan murah), dan mereka dapat melakukan perubahan laju sampel yang sangat besar dengan sangat efisien. Sisi buruknya adalah bahwa mereka pada dasarnya merupakan implementasi yang efisien dari filter persegi panjang bertingkat, sehingga mereka memiliki semua kelemahan dari filter persegi panjang seperti dibahas di atas. Interpolator CIC hampir selalu didahului oleh filter FIR kompensasi yang mendistorsi sinyal untuk membatalkan distorsi yang diperkenalkan oleh CIC. Jika perubahan laju sampel cukup besar, biaya filter pra-distorsi sepadan.
Jawaban Jim cukup baik. Semua metode upampling mengikuti skema dasar yang sama:
Perbedaan utama antara metode adalah bagaimana filter low pass diimplementasikan. Upsampler yang ideal akan mencakup filter low-pass yang ideal tetapi itu tidak praktis. Mempertimbangkan masalah dalam domain frekuensi memungkinkan untuk menemukan algoritma pengambilan sampel yang tepat untuk kebutuhan spesifik Anda:
Interpolator non-linear orde tinggi (spline, hermitian, Lagrange) biasanya tidak berfungsi dengan baik karena kesalahan interpolasi sangat bergantung pada sinyal dan hampir tidak mungkin dipetakan ke kebutuhan spesifik.
sumber
Ketika mempertimbangkan perbedaan antara sampel-dan-tahan (yaitu pengulangan nilai sampel) dan zero padding, akan sangat membantu untuk menyadari (seperti yang ditunjukkan Jim dan Hilmar) bahwa sampel-dan-tahan dapat diartikan sebagai upsampling oleh zero padding diikuti oleh Filter FIR dengan respons impuls terdiri dari pulsa persegi panjang.
Misalnya, ketika meng-upampling dari 2 kHz ke 64 kHz (faktor 32), kita dapat menerapkan ini dengan memasukkan 31 nol di antara masing-masing pasangan pengambilan sampel 2 kHz, dan kemudian memfilter dengan filter FIR yang terdiri dari 32 yang, dengan yang lainnya koefisien nol.
sinc
Ternyata
sinc
fungsi ini memiliki nol tepat pada harmonik frekuensi sampling yang lebih rendah. Dalam contoh aplikasi kami dari upampling dari 2048 Hz hingga 65536 Hz, respons frekuensi operasi sampel-dan-tahan memiliki nol pada 2048 Hz, 4096 Hz, dll.Dari sini, saya menyimpulkan bahwa setiap filter interpolasi yang benar-benar menekan harmonik frekuensi sampling asli akan terlihat seperti "sampel dan tahan". Apakah ini benar?
sumber