реклама на сайте
подробности

 
 
> Matlab, fft2, баг?, Несовпадение результатов двумерного фурье.
fillsv
сообщение Feb 2 2016, 20:46
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 21-04-10
Пользователь №: 56 788



Столкнулся с необходимостью делать двумерное фурье набора картинок. Это можно делать двумя путями:
1) через цикл прогнать все картинки по одной.
2) загнать из в трехмерную матрицу и обработать одной командой.
Забавность заключается в том, что при выполнении двумерного фурье двуми, казалось бы, идентичными способами, получаются слегка разные результаты. Ниже пример этого в коде:
Создаем исходный массив:
Код
A = rand(100,100,10);

Обработка через цикл:
Код
for ii = 1:10
    f1(:,:,ii) = fft2(A(:,:, ii));
end

Обработка единой матрицы:
Код
f2 = fft2(A);

Сравнение результатов:
Код
std(f1(:)-f2(:))

ans =

   1.6847e-14

С практической точки зрения, отличие двух результатов, конечно же, ничтожное. Однако таки интересно, почему оно есть? В хелпе по этому поводу написано следующее:
Цитата("Matlab 2015a Help")
If the dimensionality of X is greater than 2, the fft2 function returns the 2-D DFT for each higher dimensional slice of X. For example, if size(X) = [100 100 3], then fft2 computes the DFT of X(:,:,1), X(:,:,2) and X(:,:,3).

Таки это баг или все в пределах нормы?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
MiPe
сообщение Feb 3 2016, 07:49
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 17-08-11
Пользователь №: 66 760



Это нормально. Если посмотреть код функции fft2, то она вызывает либо fftn, либо fft.
В первом случае вызывается fftn, потому что на входе матрица. Во втором случае вызывается fft, потому что на входе не матрица.

Обе функции fftn и fft - встроенные в MATLAB и обращаются к библиотеке FFTW.

О вычислительной разнице между одномерным и многомерным преобразованием написано в документации FFTW:

http://www.fftw.org/fftw3_doc/Multi_002ddi...Transforms.html

Цитата
We should remind the user that the separable product of 1d transforms along each dimension, as computed by FFTW, is not always the same thing as the usual multi-dimensional transform. A multi-dimensional R2HC (or HC2R) transform is not identical to the multi-dimensional DFT, requiring some post-processing to combine the requisite real and imaginary parts, as was described in The Halfcomplex-format DFT.
Go to the top of the page
 
+Quote Post
fillsv
сообщение Feb 3 2016, 16:09
Сообщение #3





Группа: Участник
Сообщений: 11
Регистрация: 21-04-10
Пользователь №: 56 788



Спасибо! Это можно на досуге покопать поподробнее)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01349 секунд с 7
ELECTRONIX ©2004-2016