Форум: "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