Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.05.21;
Скачать: CL | DM;

Вниз

Быстрое преобразование Фурье 2D   Найти похожие ветки 

 
MathLamer   (2009-04-28 10:57) [0]

Ув. мастера. Нужна реалицация FFT 2D на Паскале. Поделитесь пожалуйста, если у кого есть.


 
MBo ©   (2009-04-28 15:19) [1]

двумерное фурье нетрудно сделать из одномерного - фурье по строкам, потом по столбцам.
для практических целей я использую библиотеку с fftw.org


 
MathLamer   (2009-04-28 16:46) [2]

Спасибо за подсказку, в этой библиотеке уже реализовано 2D. Хотелось бы конечно исходник на Паскале. Если не найду то возьму fftw.


 
MathLamer   (2009-04-28 16:49) [3]

Спасибо за подсказку, в этой библиотеке уже реализовано 2D. Хотелось бы конечно исходник на Паскале. Если не найду то возьму fftw.


 
Pavia ©   (2009-04-29 01:38) [4]

Вот мой.
procedure FFT(M:TComplexMap; inv:Boolean); Overload;
Var i,j:Integer;
LL,LL1,NN,MM:Integer;
N:TComplexMap;
p1,p2:PComplex;
begin
If (M<>Nil) and (M.UnitFormat=uf1Unit) then
 begin
 if (M.Height and (M.Height-1)<>0) or (M.Height=0) then exit; // Если M.Height<> 2^x то выход
 if (M.Width and (M.Width-1)<>0) or (M.Width=0) then exit; // Если M.Width<> 2^x то выход
 // Вспомогательный
 N:=TComplexMap.Create(M.UnitFormat);
 N.Fast:=True;
 N.Width:=M.Height;
 N.Height:=M.Width;

 MM:=Log2Int(M.Width);
 NN:=Log2Int(M.Height);

 //Делаем Фурье построчно
 for j:=0 to M.Height-1 do
   FFT(MM,M.ScanLine[j],inv);

 // Транспонируем
 p1:=M.Map;
 p2:=N.Map;
 LL:=M.LineLen;
 LL1:=SizeOf(Complex)-M.Width*LL ;
 for j:=0 to M.Height-1 do
  begin
  p1:=M.ScanLine[j];
  for i:= 0 to M.Width-1 do
    begin
    p2^:=p1^;
    Inc(DWord(p1),SizeOf(Complex));
    Inc(DWord(p2),LL);
    end;
    inc(DWord(p2),LL1);
  end;

 //Делаем Фурье построчно
 for j:=0 to N.Height-1 do
   FFT(NN,N.ScanLine[j],inv);

 // Транспонируем
 p1:=N.Map;
 p2:=M.Map;
 LL:=N.LineLen;
 LL1:=SizeOf(Complex)-N.Width*LL ;
 for j:=0 to N.Height-1 do
  begin
  p1:=N.ScanLine[j];
  for i:= 0 to N.Width-1 do
    begin
    p2^:=p1^;
    Inc(DWord(p1),SizeOf(Complex));
    Inc(DWord(p2),LL);
    end;
    inc(DWord(p2),LL1);
  end;

 N.Free;
 end;
end;


Бери лучше FFTW у него скорость в 10 а то во все 30 раз больше чем просто если реализовывать в паскале.


 
MathLamer   (2009-04-29 03:11) [5]

Ухтыж ка,  всем спасибо.



Страницы: 1 вся ветка

Текущий архив: 2017.05.21;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.005 c
2-1441974701
Иван Д.
2015-09-11 15:31
2017.05.21
Еще один вопрос про Post-запрос


15-1461913150
ВладОшин
2016-04-29 09:59
2017.05.21
Получить уровень вложенности кода.


2-1441716490
TheEd
2015-09-08 15:48
2017.05.21
Что-то туплю с раскрашиванием строк TDBGrid(Eh)


8-1240992981
Diha
2009-04-29 12:16
2017.05.21
Воспройзведение видео с помощью Дельфи


15-1461854802
Германн
2016-04-28 17:46
2017.05.21
Существует ли такая VM, которая знает что такое LPT-порт?