CUDA cufftPlan2d план размер вопрос - PullRequest
0 голосов
/ 03 апреля 2011

Я изучаю код, стоящий за примером convolutionFFT2D для Nvidia CUDA sdk, но я не понимаю смысл этой строки:

cufftPlan2d(&fftPlan, fftH, fftW/2, CUFFT_C2C);

Очевидно, это инициализирует сложную плоскость для запуска БПФ, но я не вижу смысла делить ширину плана на 2.

Просто чтобы быть точным: fftH и fftW являются округленными значениями для размеров imageX + kernelX + 1 и imageY + kernelY + 1 (только по соображениям скорости). Я знаю, что в частотной области у вас обычно есть положительный компонент и симметричный отрицательный компонент той же частоты ... но это звучит как вырезка половины моих данных изображения ...

Может кто-нибудь объяснить мне это немного лучше? Я никогда не использовал БПФ (я просто знаю теорию, лежащую в основе преобразования Фурье)

1 Ответ

1 голос
/ 03 апреля 2011

Когда вы выполняете реальное или сложное БПФ, половина данных в частотной области избыточна из-за симметрии.Это касается только одной оси 2D БПФ.Вы можете думать о 2D БПФ как о двух операциях 1D БПФ, первая работает со всеми строками, и для реального изображения это даст вам сложные значения строк.На втором этапе вы применяете 1D БПФ к каждому столбцу, но поскольку значения строк теперь являются сложными, это будет комплексное БПФ без избыточности в выходных данных.Следовательно, вам нужно только ширина / 2 точки по горизонтальной оси, но вам все еще нужно указывать высоту по вертикальной оси.

...