Merancang fungsi jendela diringkas menjadi satu unit dengan tingkat tumpang tindih yang diberikan

Ada beberapa tugas di mana sinyal lama dibagi menjadi beberapa segmen, yang masing-masing diproses secara terpisah. Secara khusus, pendekatan ini digunakan untuk menganalisis sinyal menggunakan transformasi Fourier, atau sebaliknya, dalam sintesis; serta dalam pemrosesan spektral seperti penghapusan noise, perubahan tempo, pemfilteran non-linear, kompresi data audio dan lainnya.

Proses partisi itu sendiri secara matematis diwakili oleh perkalian dengan beberapa fungsi berat ( jendela ) dengan offset. Untuk jendela paling sederhana - persegi panjang - mungkin terlihat seperti ini:

Sinyal sumber:



Partisi:







Anda dapat mengembalikan sinyal asli hanya dengan menambahkannya.

Lebih detail


Namun oleh Untuk sejumlah alasan, fungsi persegi panjang bukan fungsi jendela terbaik. Dalam analisis spektral, melalui transformasi Fourier diskrit (biasanya cepat), blok data yang dianalisis tampaknya "loop", yang mengarah ke celah di tepi dan distorsi spektrum:



Ini juga tidak cocok untuk sintesis terbalik - karena perubahan apa pun juga akan menyebabkan jeda - misalnya, jika kita mencoba membalik salah satu bagian:



Untuk menghilangkan kelemahan ini, tumpang tindih digunakan - ketika setiap jendela berikutnya menangkap bagian dari data dari yang sebelumnya; dan jendela berat, masing-masing, secara bertahap jatuh ke tepi.

Tumpang tindih di 50%


Paling sering mereka menggunakan jendela Hannah (juga dikenal sebagai "cosinus terangkat") dengan tumpang tindih 50%:








Karena simetri fungsi cosinus selama penambahan, mereka dijumlahkan menjadi satu:



Sekarang, dengan sintesis terbalik, kita tidak akan mendapatkan celah - tetapi hanya dengan syarat bahwa pada batas-batas jendela nilai-nilai masih akan pergi ke nol. Misalnya, saat membalikkan salah satu bagian, kehalusan tidak akan dilanggar:



Pemrosesan Hamparan Ganda


Pertimbangkan lebih detail algoritme untuk memproses sinyal menggunakan fast Fourier transform (FFT):

  1. memisahkan sinyal menjadi segmen-segmen dengan overlay jendela;
  2. FFT langsung;
  3. pemrosesan spektrum;
  4. FFT terbalik;
  5. overlay jendela berulang (karena setelah FFT terbalik, batas tidak harus merapat ke nol tanpa merusak);
  6. penjumlahan dari segmen yang dihasilkan.

Selain itu, jika pemrosesan spektrum tidak dilakukan, sinyal output harus identik dengan sinyal input (hanya dengan penundaan waktu yang tak terelakkan).

Saat menggunakan jendela Hann, tumpang tindih 50% tidak lagi cukup, karena akan terjadi penurunan:



Karena tumpang tindih ganda sama dengan mengkuadratkan, solusi yang jelas adalah dengan menggunakan root dari jendela Hann untuk mengimbangi mengkuadratkan:



Namun, dalam kasus ini, jendela tidak lagi mulus di tepinya - celah muncul pada turunan pertama.

Catatan
Menariknya, dalam kasus ini, kami mendapat setengah periode sinusoid.

Anda dapat pergi ke arah lain - gunakan tumpang tindih 75%, dan kemudian jendela juga akan dijumlahkan menjadi konstan - hanya saja tidak di 1 , dan dalam  frac32 :



Dalam hal ini, kami beruntung. Jika kita memperluas kuadrat menjadi jumlah, maka kita dapat melihat bahwa itu adalah komposisi dari dua jendela Hannah, tetapi pada skala yang berbeda, yang memungkinkan kita untuk memenuhi persyaratan yang kita butuhkan:

 kiri( frac cos(2 pix)+12 kanan)2= frac cos(2 pix)+12+ frac cos(4 pix)18



Dengan fungsi jendela lainnya, trik semacam itu tidak akan berfungsi; Juga, tidak semua fungsi jendela standar dapat memberikan penjumlahan dalam konstanta bahkan pada 50% tumpang tindih.

Ide


Kita dapat menganggap jendela Hann bukan sebagai fungsi independen, tetapi sebagai perbedaan antara dua fungsi kontinu yang terpisah (artikel terpisah dikhususkan untuk diskusi terperinci tentang mereka) dengan offset. Misalnya, menggunakan fungsi berikut

\ left \ {\ begin {array} {ll} -1 & x \ leqslant -1 \\ 1 & x \ geqslant 1 \\ \ sin \ kiri (\ frac {\ pi x} {2} \ kanan) & -1 <x <1 \\ \ end {array} \ benar.

\ left \ {\ begin {array} {ll} -1 & x \ leqslant -1 \\ 1 & x \ geqslant 1 \\ \ sin \ kiri (\ frac {\ pi x} {2} \ kanan) & -1 <x <1 \\ \ end {array} \ benar.



bisa menulis

f(x+1)f(x1)



Setelah mempertimbangkan komponen-komponen dari penjumlahan dua jendela tersebut, kemampuan mereka untuk meringkas menjadi sebuah konstanta akan menjadi lebih visual:



Di segmen tersebut [0,2] kami menerima kompensasi timbal balik sebagai tambahan fungsi f(x1) dan f((x+1)2) sejak itu f((x+1)2)=f(x1)

Anda dapat memilih offset lain, dengan lebih banyak tumpang tindih, misalnya:

f kiri(x+ frac12 kanan)f kiri(x frac12 kanan)



Dan kemudian, saat bergeser dalam langkah-langkah  frac12 , mereka juga akan dijumlahkan menjadi sebuah konstanta:



Dapat dilihat bahwa jika Anda mengatur ulang komponen fungsi jendela, Anda mendapatkan jendela Hann yang sama.

Dengan demikian, menggunakan fungsi pembatasan yang berbeda, dimungkinkan untuk membentuk jendela dari bentuk yang diperlukan.

Formula akhir


Sekarang tinggal mengatur skala agar area dan nilai definisi tidak bergantung pada jumlah tumpang tindih. Mendefinisikan jendela pada suatu interval [0,1] kita dapatkan

 fracf kiri( frac2txt11 kanan)f kiri( frac2t(x1)t1+1 kanan)2


dimana f - fungsi bentuk kontinu piecewise

\ left \ {\ begin {array} {ll} -1 & x \ leqslant -1 \\ 1 & x \ geqslant 1 \\ g (x) & -1 <x <1 \\ \ end {array} \ benar

\ left \ {\ begin {array} {ll} -1 & x \ leqslant -1 \\ 1 & x \ geqslant 1 \\ g (x) & -1 <x <1 \\ \ end {array} \ benar


tapi g - beberapa fungsi interpolasi antar titik (1,1) dan (1,1) .

Parameter t menentukan tingkat tumpang tindih - pembagi yang menentukan langkah di mana setiap jendela berikutnya harus digeser, xn+1=xn+ frac1t , dan harus lebih besar dari satu, t>1 .

Persentase yang tumpang tindih p dapat dihitung dengan rumus

p= frac100(t1)t


dan sebaliknya

t= frac100100p



Catatan
Ketika bekerja dengan data nyata, mungkin perlu untuk menghitung ulang tingkat tumpang tindih tergantung pada ukuran spesifik FFT. Misalnya, dengan FFT 2048 poin dan level tumpang tindih 3, kita mendapatkan langkah 2048/3 = 682.666 ..., yang dalam praktiknya, tentu saja, tidak layak. Karena itu, kami membulatkannya ke keseluruhan, dan t hitung ulang sebagai 2048/683 = 2.998535871156662 ...

Atau Anda dapat sebaliknya - gunakan ukuran jendela, jelas dapat dibagi oleh 3 (katakanlah, 999), dan tambahkan sisanya ke ukuran yang diperlukan untuk FFT dengan nol (25).

Tampilan akhir jendela akan tergantung pada pilihan tingkat tumpang tindih dan pilihan fungsi pembatas.

Beberapa contoh menarik


Di sini kita akan melihat beberapa solusi siap pakai, yang semuanya dimulai. Untuk kesederhanaan, kami mempertimbangkan fungsi interpolasi sederhana g(x) , tanpa tali pengikat lainnya.

Jendela polinomial


Mereka adalah yang paling tidak mahal secara komputasi. Menggunakan rumus yang diturunkan sebelumnya

 frac2x Gamma kiri(n+ frac12 kanan)2F1 kiri( frac12,1n; frac32;x2 kanan) sqrt pi Gamma(n)


kami memperoleh polinomial dengan jumlah nol tertentu pada turunan yang lebih tinggi yang memberikan kelancaran yang diperlukan dari jendela di tepinya.

10 polinomial pertama

 beginarraycx frac12x kiri(3x2 kanan) frac18x kiri(3x410x2+15 kanan) frac116x kiri(5x6+21x435x2+35 kanan) frac1128x kiri(35x8180x6+378x4420x2+315 kanan) frac1256x kiri(63x10+385x8990x6+1386x41155x2+693 kanan) fracx kiri(231x121638x10+5005x88580x6+9009x46006x2+3003 kanan)1024 fracx kiri(429x14+3465x1212285x10+25025x832175x6+27027x415015x2+6435 kanan)2048 fracx kiri(6435x1658344x14+235620x12556920x10+850850x8875160x6+612612x4291720x2+109395 kanan)32768 fracx kiri(12155x18+122265x16554268x14+1492260x122645370x10+3233230x82771340x6+1662804x4692835x2+230945 kanan)65536 endarray



Dengan 75% tumpang tindih jendela dengan nilai n yang berbeda, jendela akan terlihat seperti ini:



Dan dalam kasus ekstraksi root - seperti ini (saat menggunakan 75% tumpang tindih):



atau lebih (saat menggunakan 50% tumpang tindih):



Jendela paling halus


Fungsi

 tanh kiri( frackx sqrt1x2 kanan)


Sangat menarik karena dapat terdiferensiasi tanpa batas dan semua turunannya di tepinya adalah 0 (yang dapat dibuktikan dengan mempertimbangkan turunannya berdasarkan aturan diferensiasi - dalam setiap istilah akan ada faktor nol). Ini memungkinkan kami untuk membangun windows berdasarkan basisnya, semua turunannya tidak memiliki celah:



"Rok" tampilan jendela


Kebutuhan untuk jenis jendela ini disebabkan oleh peningkatan resolusi FFT, tetapi mengurangi efek "ketidakpastian frekuensi waktu" pada frekuensi tinggi dengan meningkatkan konsentrasi mereka di tengah.

Pertama, kami menentukan jenis fungsi jendela yang diinginkan - misalnya, sebagai berikut:

 log kiri(k2x2+1 kanan)+ log kiri(k2+1 kanan) frack2 kiri(1x2 kanan)k2+1



Di sini, istilah pertama menentukan bentuk fungsi itu sendiri, yang kedua - menyediakan persimpangan dengan sumbu absis, yang ketiga (parabola) mengatur ulang turunan di tepi untuk docking yang halus; dan parameternya k mendefinisikan "ketajaman" puncak. Dalam formulir ini, itu belum cocok untuk digunakan - pertama Anda perlu mendapatkan fungsi pembatasan dari itu melalui integrasi dan penskalaan:

 frackx kiri(k2 kiri(x2+3 kanan)+6 kanan)+3 kiri(k2+1 kanan) kiri(kx kiri( log kiri(k2+1 kanan) log kiri(k2x2+1 kanan) kanan)2 tan1(kx) kanan)4k36 kiri(k2+1 kanan) tan1(k)+6k


Untuk kenyamanan, Anda dapat mengikat parameter k ke tingkat tumpang tindih t - misalnya, sehingga turunan ke-4 di tengah jendela adalah 0 - dan kemudian k akan dianggap sebagai  sqrt3(t1) :



Di sini, untuk kejelasan, semua jendela dikurangi ke skala yang sama.

Jendela Tampilan Jarum


Ini adalah versi yang lebih "agresif" dari jendela sebelumnya. Hiperbola dipilih sebagai dasar, yang darinya, melalui transformasi yang berurutan

 frac1x to frac1 sqrtx2 to frac1 sqrtx2+1 to frac1 sqrtk2x2+1 to frac left(1x2 right)2 sqrtk2x2+1


dan menggunakan langkah yang sama dalam bentuk integrasi dan penskalaan mendapatkan formula

 frackx kiri(2k2 kiri(x24 kanan)3 kanan) sqrtk2x2+1+ kiri(8 kiri(k4+k2 kanan)+3 kanan) sinh1(kx) kiri(8 kiri(k4+k2 kanan)+3 kanan) sinh1(k)3k sqrtk2+1 kiri(2k2+1 kanan)


Di sini Anda juga dapat mengikat parameter k ke tingkat tumpang tindih. Solusi langsung dari persamaan derivatif ke-4 memberikan hasil yang rumit, jadi buat saja gambar untuk jendela sebelumnya pada gambar dan rupa dengan mendefinisikan k bagaimana k(t1) dengan demikian memastikan peran parameter k sebagai "fine tuning". Di k=2.22 jendela akan terlihat seperti ini:



Jendela asimetris


Fungsi jendela tidak harus simetris sama sekali. Katakanlah kita membutuhkan jendela dengan serangan tajam dan atenuasi yang halus. Kita bisa mendapatkannya sesuai dengan skema yang sudah akrab - pertama menentukan bentuk fungsi yang diinginkan, dan kemudian dengan integrasi kita memperoleh fungsi pembatasan. Di sini tugasnya sedikit lebih rumit karena fakta bahwa, karena asimetri, pusat tidak akan lagi melewati titik asal, sehingga langkah perhitungan tambahan ditambahkan. Ini juga mengarah pada fakta bahwa formula sebagai hasilnya agak rumit. Misalnya, pertimbangkan opsi paling sederhana - parabola dikalikan dengan jendela bobot polinomial:

(1x)2 kiri(1x10 kanan)2



Di sini, derajat x di jendela tertimbang (yaitu 10) menentukan "ketajaman" serangan. Kami menggunakan nilai tertentu, bukan parameter simbolis, untuk menyederhanakan rumus untuk kejelasan - jika Anda mau, Anda bisa menghitung ulang nanti.

Setelah integrasi, penskalaan tidak lagi cukup - Anda masih perlu menyelaraskan tepi:



Untuk melakukan ini, pertama-tama kita menggeser fungsi ke atas untuk menyelaraskan tepi kiri, dan kemudian skala ke dua di tepi kanan dan kurangi satu. Lalu kita mendapatkan formula berikut:

 frac8775 kiri( fracx2727 frac2x2626+ fracx2525 frac2x1515+ frac4x1414 frac2x1313+ fracx33x2+x+ frac11759261425 kanan)98561


Agar jendela akhir memiliki tampilan yang diinginkan, Anda juga perlu memberikan tingkat tumpang tindih yang cukup besar:



Kesimpulan


Demikian pula, Anda dapat membangun jendela dari fungsi berbentuk lonceng lainnya - misalnya, Gaussians; dan Anda juga dapat memodifikasi yang sudah dianggap memberikan kehalusan yang lebih besar atau mengubah bentuk kurva.

Karena pertimbangan, komposisi spektral fungsi jendela seperti itu tetap ada - studi terpisah harus dikhususkan untuk ini.

Versi artikel yang sedikit lebih maju (dengan kemampuan mengubah parameter di jendela secara dinamis dengan pertimbangan dan formula tersembunyi) dalam bentuk dokumen Wolfram Mathematica dapat diunduh di sini .

Source: https://habr.com/ru/post/id430536/


All Articles