DFT - Menghapus efek jendela dalam domain spektral dengan konvolusi


11

Saya sedang memikirkan subjek windowing DFT dan sebuah pikiran muncul di benak saya. DFT akan menghasilkan spektrum sinyal yang berbelit-belit dengan spektrum jendela yang digunakan, oleh karena itu memiliki lobus utama dan lobus samping.

Saya pikir mungkin untuk menghapus efek jendela pada spektrum sinyal dengan berbelit-belit baik sinyal dan besarnya spektrum jendela, dan itu memang berfungsi seperti yang Anda lihat pada gambar berikut.

masukkan deskripsi gambar di sini

Kiri adalah spektrum asli yang dihasilkan dengan jendela hanning. Kanan adalah spektrum berbelit-belit oleh DFT dari jendela hanning. Atas adalah Spectrum itu sendiri, bawah adalah findpeakshasil MATLAB .

Saya tidak pernah membaca apa pun mengenai teknik ini, tetapi saya cukup yakin saya belum menemukan apa pun di sana. Jadi saya bertanya-tanya apakah ada manfaat dari melakukan pemrosesan ini pada spektrum atau jika ada kerugian untuk itu yang tidak saya lihat.

Dari apa yang saya lihat, ini dapat membantu deteksi puncak seperti yang dapat kita lihat pada gambar sebelumnya. Selain itu, sepertinya spektrumnya sedikit terdistorsi seperti yang dapat kita lihat pada 2 gambar berikut. :

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Di mana grafik biru adalah spektrum dan grafik merah adalah spektrum pasca-berbelit-belit.

  • Adakah yang memikirkan hal ini?
  • Apakah ada masalah yang dapat timbul dari konvolusi pasca-FFT ini?
  • Adakah kertas yang memperlakukan subjek?

EDIT

Anda dapat menemukan skrip di sini yang akan menghasilkan grafik berikut:

masukkan deskripsi gambar di sini


1
Bisakah Anda memberikan kode yang Anda gunakan untuk memplot angka? Saya berasumsi bahwa kelancaran fungsi yang berbelit-belit hanyalah masalah resolusi. Anda tidak dapat membatalkan windowing dengan memutar satu kali lagi dengan jendela yang sama (Anda memang perlu de convolve, yang mengacu pada jawaban rbj). Selain itu, perbaikan nyata akan menjadi resolusi frekuensi yang meningkat, dan / atau peningkatan penekanan sidelobe, tidak ada yang dicapai di sini. Menemukan puncak yang "benar" relatif mudah untuk kedua fungsi.
Matt L.

Saya baru saja mengedit posting saya untuk menambahkan contoh kode.
Pier-Yves Lessard

Jawaban:


1

Faktanya, ada kerugian dari saran Anda: sinyal yang Anda perlihatkan semuanya sangat jelas dibagi menjadi komponen frekuensinya, tetapi secara umum, sinyal kehidupan nyata cenderung lebih berisik.

Bergantung pada aplikasinya, Anda ingin mengurangi kebocoran (lobus utama yang lebih tinggi / lobus samping yang lebih kecil dari frekuensi sinyal dalam spektrum yang diubah) atau, sebagai contoh lain, lobus utama tersempit yang mungkin.

Dalam plot Anda, terlihat bahwa menghaluskan spektrum magnitudo dengan jendela melakukan kebalikannya: lobus utama menjadi lebih lebar dan lebih kecil, sementara produk-produk kebocoran mengubah transformasi penguatan sinyal waktu hingga dalam kekuasaan. Diterapkan pada sinyal bising, ini akan menghasilkan kerugian yang signifikan.

Saran Anda, bagaimanapun, masih cukup berguna untuk identifikasi puncak!


1

tetap setia pada subjek "menghapus efek jendela dalam domain freq melalui konvolusi" (meskipun OP mungkin ingin mencapai sesuatu yang lain atau yang serupa), saya merasa menambahkan komentar saya memiliki pengalaman pribadi dengan topik khusus ini.

Seringkali saya memiliki keharusan untuk menghapus jendela Hann dalam domain frekuensi, bekerja dalam kerangka kerja STFT yang menggunakan bingkai jendela Hann sebagai default, untuk melakukan pemrosesan spektral tingkat lanjut di mana spektrum input diharapkan sebagai jendela NON sebagai gantinya (misalnya konvolusi overlap-save atau penyaringan).

Dengan kata lain: ya, Anda bisa. Meskipun secara matematis menghapus jendela (baik dalam waktu atau domain frekuensi) menyiratkan merekonstruksi data yang hilang selamanya, dalam praktiknya Anda bisa dengan kemungkinan kerugian minimal.

Mari kita ambil jendela Hann (naik cosinus). Rumus domain waktunya adalah y = (1-cos (pi * x)) / 2 dengan x mulai dari nol hingga dan mengecualikan satu melalui frame. Representasi domain frekuensi yang sesuai adalah bin0 = (0,5,0i), bin1 = (- 0,5,0i). Untuk menghapus efeknya dalam domain waktu, Anda mungkin ingin membagi sinyal dengan fungsi jendela yang disebutkan di atas. Untuk melakukan hal yang sama dalam domain frekuensi, Anda dapat dengan mudah menggabungkan spektrum agar tidak berjendela dengan spektrum kebalikan dari fungsi tersebut. Karena fungsi ini nol di kedua ujungnya (sebenarnya secara matematis nol hanya pada titik pertama, kecuali kesalahan pembulatan), untuk menghindari infinity, Anda dapat bertukar infinity dengan nilai besar seperti 10.000 atau lebih. Hasil dari konvolusi tersebut adalah spektrum yang tidak berjendela. Dengan mengonversinya ke domain waktu,

Mungkin Anda tidak dapat menghapus jendela persegi panjang, karena jumlah data yang hilang dengan mengalikan area besar sinyal dengan nol tidak mungkin diperoleh secara teori. Tapi saya pikir ini tergantung pada konten spektrum. Misalnya, jika itu adalah spektrum sinusoid polos, dengan menghapus pola jendela persegi panjang dengan berbelit-belit dengan spektrum fungsi yang bernilai tinggi di mana persegi panjangnya nol, dan satu di mana itu adalah satu (yaitu kebalikannya), Anda mungkin masih dapat memperoleh (secara substansial) spektrum sinusoid untuk merekonstruksi seluruh sinyal.


0

itu adalah pertanyaan yang bagus dan wawasan yang bagus yang saya yakin orang lain miliki. yang de -convolution dalam domain frekuensi adalah seperti mengalikan dalam domain waktu dan jika Anda deconvolving efek jendela Hann dalam domain frekuensi, itu seperti membagi dengan efek jendela Hann dalam domain waktu. di bagian ekor tempat jendela Hann menjadi nol, ada jumlah yang terlalu kecil untuk dikhawatirkan.

biasanya efek jendela ditinggalkan karena jika Anda mengubah kembali Anda mungkin ingin efek jendela dalam domain waktu. atau jika Anda tidak pernah mengubah kembali (ini adalah analisis atau pemodelan alg dan bukan modifikasi alg) maka Anda hanya tertarik pada parameter yang merupakan properti dari puncak tersebut, dan Anda hanya berurusan dengan efek yang diketahui dari penggabungan dengan yang diketahui kernel dan yang mungkin memodifikasi parameter yang diekstraksi secara deterministik. maka Anda hanya mengkompensasinya dalam parameter yang diekstrak.

terakhir, tergantung pada apa yang Anda lakukan, Anda mungkin ingin mempertimbangkan untuk menggunakan jendela guassian untuk analisis. memiliki masalah sidelobe yang sangat sedikit dan dalam kondisi linier (seperti filter), setiap sinusoid berjendela mempertahankan bentuk berjendela ketika diubah kembali ke domain waktu. jendela itu dapat dibatalkan dan jendela Hann diterapkan setelah mengubah kembali ke domain waktu.


6
Pada prinsipnya saya setuju dengan pernyataan Anda. Padahal, OP tidak berbicara tentang dekonvolusi, tetapi menggabungkan spektrum yang diperoleh dengan spektrum jendela hanning. (yaitu pada dasarnya windowing dengan jendela hanning-squared)
Maximilian Matthé

1
tidak, OP berbicara tentang menghilangkan efek, bukan menggandakan efek. pembagian sama dengan perkalian oleh timbal balik. itu dikalikan dengan angka yang memberi Anda hasil yang kami sebut hasil bagi . adalah bahwa convolving dalam satu domain adalah sama dengan mengalikan dalam domain lainnya, maka dekonvolusi adalah sama dengan convolving dengan sesuatu khusus ditentukan.
robert bristow-johnson

2
OP berbicara tentang menghilangkan riak, dengan melakukan konvolusi spektrum yang diperoleh dengan spektrum jendela. Ini menghasilkan penggandaan sinyal dengan jendela kuadrat (satu jendela dari penggandaan awal dalam waktu, yang kedua berasal dari konvolusi dalam frekuensi)
Maximilian Matthé

1
Ya tidak. Saya melakukan konvolusi dari besarnya spektrum yang menghasilkan hasil yang berbeda dari penggandaan jendela kuadrat. Saya tidak yakin apa yang diwakilinya secara matematis ... Saya melihatnya sebagai korelasi silang antara kedua besaran spektrum (karena spektrum windows simetris).
Pier-Yves Lessard

0

Teknik yang Anda gunakan untuk merapikan spektrum sering digunakan ketika menganalisis spektrum itu sendiri dan Anda tidak peduli tentang efek dalam domain waktu (misalnya melakukan deteksi sinyal berbasis frekuensi atau pengukuran bandwidth). Bahkan tidak ada persyaratan bahwa jendela yang digunakan untuk perataan sama dengan jendela yang digunakan dalam domain waktu. Salah satu alasan utama untuk menggunakan jendela waktu-domain sebelum DFT adalah untuk meminimalkan diskontinuitas dalam wrap-around yang DFT mengasumsikan di ujung sinyal (DFT secara inheren melingkar). Tujuan perataan dalam domain frekuensi adalah untuk memfasilitasi analisis seperti deteksi puncak atau pengukuran bandwidth. Jendela "terbaik" untuk satu mungkin bukan jendela "terbaik" untuk yang lain. Bahkan, saya belum pernah melihat DFT dari jendela yang digunakan untuk smoothing spektral.


Cara saya memahaminya, adalah bahwa saya melakukan korelasi silang dengan spektrum, sebelum mendapatkan puncak di pusat lobus utama. Menggunakan jendela waktu domain sepertinya pilihan yang jelas dan saya tidak melihat mengapa saya akan menggunakan korelasi jendela boxcar untuk menemukan di mana spektrum jendela hanning berada. Mengapa kita menginginkan sesuatu selain jendela yang sama?
Pier-Yves Lessard

Ya, hasil yang Anda gambarkan adalah konvolusi dengan autokorelasi jendela, tetapi itu hanya berputar dengan jendela yang berbeda. Autokorelasi akan menghasilkan puncak yang SANGAT ketat di DC. Jadi, Anda secara efektif menggabungkan spektrum sinyal dengan filter low pass yang sangat ketat. Respons frekuensi filter ini yang memberi Anda hasil yang Anda lihat, bukan fakta bahwa ini merupakan autokorelasi. Fakta bahwa ini merupakan autokorelasi adalah kebetulan.
cassman
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.