Saya memiliki dua vektor data spasial (masing-masing panjangnya sekitar 2000 elemen). Yang satu adalah versi yang berbelit-belit dari yang lain. Saya mencoba menentukan kernel yang akan menghasilkan konvolusi seperti itu. Saya tahu bahwa saya dapat melakukan ini dengan menemukan transformasi Fourier terbalik dari rasio transformasi Fourier output dan input vektor. Memang, ketika saya melakukan ini saya mendapatkan lebih atau kurang bentuk yang saya harapkan. Namun, vektor kernel saya memiliki dimensi yang sama dengan dua vektor input ketika pada kenyataannya konvolusi hanya menggunakan sekitar seperlima (~ 300-400) poin. Fakta bahwa saya mendapatkan bentuk yang tepat tetapi jumlah poin yang salah membuat saya berpikir bahwa saya tidak menggunakan fungsi ifft dan fft dengan benar. Sepertinya jika saya benar-benar melakukan hal yang benar ini harus terjadi secara alami. Saat ini saya hanya melakukan;
FTInput = fft(in);
FtOutput = fft(out);
kernel = ifft(FtOutput./FTInput).
Apakah ini benar dan terserah saya untuk menginterpretasikan vektor keluaran dengan benar atau apakah saya terlalu menyederhanakan tugas? Saya yakin itu yang terakhir, saya hanya tidak yakin di mana.
sumber
Jawaban:
Jika Anda memiliki noise di sinyal Anda, divisi domain Fourier langsung akan menyebabkan banyak kesalahan dalam hasil Anda. Beberapa cara untuk menghindarinya adalah dengan menggunakan apa yang disebut FFT saluran ganda ( Bagian 1 dan Bagian 2 ). Saya juga dapat menyarankan dekonvolusi melalui filter adaptif, filter LMS atau NLMS ([Normalized] Least Mean Squares) khususnya yang mudah dimengerti, tidak terlalu mahal dalam hal siklus CPU jika sinyal Anda panjang. Filter adaptif LMS sangat kuat terhadap noise.
sumber