Mam dwa wektory danych przestrzennych (każdy o długości około 2000 elementów). Jedna jest złożoną wersją drugiej. Próbuję ustalić jądro, które wywołałoby taki splot. Wiem, że mogę to zrobić, znajdując odwrotną transformatę Fouriera stosunku transformacji Fouriera wektorów wyjściowych i wejściowych. Rzeczywiście, kiedy to robię, uzyskuję mniej więcej taki kształt, jakiego się spodziewałem. Jednak mój wektor jądra ma taką samą wymiarowość jak dwa wektory wejściowe, podczas gdy w rzeczywistości splot wykorzystywał tylko około jednej piątej (~ 300-400) punktów. Fakt, że otrzymuję właściwy kształt, ale zła liczba punktów sprawia, że myślę, że nie używam funkcji ifft i fft całkiem poprawnie. Wygląda na to, że gdybym naprawdę postępował właściwie, powinno to nastąpić naturalnie. W tej chwili po prostu robię;
FTInput = fft(in);
FtOutput = fft(out);
kernel = ifft(FtOutput./FTInput).
Czy to prawda i ode mnie zależy, czy poprawnie zinterpretuje wektor wyjściowy, czy też uprościłem zadanie? Jestem pewien, że to ten drugi, po prostu nie jestem pewien, gdzie.
źródło
Odpowiedzi:
Jeśli w sygnale występuje szum, prosty podział domen Fouriera spowoduje wiele błędów w wyniku. Niektóre sposoby, aby tego uniknąć, to stosowanie tak zwanego dwukanałowego FFT ( część 1 i część 2 ). Mogę również zasugerować dekonwolucję za pomocą filtrów adaptacyjnych, w szczególności filtrów LMS lub NLMS ([znormalizowane] najmniejszych średnich kwadratów), które są łatwe do zrozumienia, nie są niezwykle drogie pod względem cykli procesora w przypadku długich sygnałów. Filtry adaptacyjne LMS są bardzo odporne na hałas.
źródło