Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2017.05.21;
Скачать: [xml.tar.bz2];

Вниз

Быстрое преобразование Фурье 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 вся ветка

Форум: "Media";
Текущий архив: 2017.05.21;
Скачать: [xml.tar.bz2];

Наверх





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


2-1441934811
dmk
2015-09-11 04:26
2017.05.21
TCheckBox.OnClick


15-1461842570
Pavia
2016-04-28 14:22
2017.05.21
Состоялся первый запуск с российского космодрома Восточный.


2-1441974701
Иван Д.
2015-09-11 15:31
2017.05.21
Еще один вопрос про Post-запрос


2-1441869771
vegarulez
2015-09-10 10:22
2017.05.21
Как сделать класс или объект.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский