Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Быстрое дискретное двумерное преобразование фурье


Страницы:   1 2

Norsk ©   (2005-10-27 13:00:00) 

Необходим алгоритм вычесления БДДПФ  с целью получения фазового спектра изображения, а также алгоритм обратного БДДПФ. заранее спасибо


MBo   (2006-02-15 12:39:00) [1]

>а саму библиотеку 'fftw3.dll' где взять, там можно скачать файлы

Сейчас там для Windows лежит архив с DLL версии 3.1
Я раньше качал fftw-3.0.1BC.zip - исходники и fftw-3.0.1-w32-pl1.zip - DLL-ки - это там тоже есть в разделе Older Versions
fftw_interface.pas относится к версии 3.01, но он все равно неполный, так что при использовании 3.1, наверно, лучше перевести на паскаль актуальный fftw3.h


Kaban   (2006-02-15 11:22:00) [2]

а саму библиотеку 'fftw3.dll' где взять, там можно скачать файлы
libfftw3-3.dll, libfftw3f-3.dll, libfftw3l-3.dll
но названия функций в них отличаются
от используемых в файле fftw_interface
это она и есть?


AlterEgo of WondeRu   (2006-02-09 14:26:00) [3]

misha_gr   (06.02.06 16:35) [24]
ссылки нет, ибо статья не закончена...


misha_gr   (2006-02-06 16:35:00) [4]

Вопрос к WondeRu.
Извиняюсь, что бросаю сюда, но в анкете мейл не указан. Спрашивал у Анонимщика ссылку на его статью, он отослал к Вам )))


Nailspb   (2006-02-06 11:12:00) [5]

Уважаемые.

Что лучше использовать для разложения сигнала со звуковой карты в частотный вид? Поправьте если что не так.


Memric   (2006-02-05 19:11:00) [6]

Пожалуйста, помогите с двумерным БПФ.
Ничё не выходит: добавил функцию 2D fft в fft_interface, но при запросе функции, почему-то, выдаёт ошибку классов.
Если можно, приведите готовый кусок кода.


WondeRu   (2005-11-02 18:07:00) [7]

MBo ©   (02.11.05 17:42) [20]
как упаковываются данные.

именно с этим у меня была и непонятка!
Двумерное мне понадобится, поэтому как разберусь сразу дам знать!


MBo   (2005-11-02 17:42:00) [8]

>WondeRu
в fftw.pas описаны далеко не все функции, поэтому стоит опираться на документацию. Двумерные я не пробовал  - там надо изучить, как упаковываются данные.


WondeRu   (2005-11-02 17:33:00) [9]

MBo ©   (02.11.05 11:35) [18]
Спасибо!


MBo   (2005-11-02 11:35:00) [10]

>WondeRu ©   (31.10.05 18:06) [10]
>видел это, но есть ли реальный пример...


procedure TForm1.Button1Click(Sender: TObject);
var
 aIn,aOut: array of Single;
 N,i:Integer;
 plan:Pointer;
begin
 N:=256;
 SetLength(aIn,2*N);
 SetLength(aOut,2*N);
 for i:=0 to N -1 do begin
   aIn[2*i]:=3*sin(i)+cos(i/3);
   aIn[2*i+1]:=0;
   Series1.AddXY(i,aIn[2*i]);
 end;
 plan := fftwf_plan_dft_1d(N, @aIn[0], @aOut[0], FFTW_FORWARD, FFTW_ESTIMATE);
 fftwf_execute(plan);
 fftwf_destroy_plan(plan);
 for i:=0 to N - 1  do
   Series2.AddXY(i, Hypot(aOut[2*i],aOut[2*i+1]));
end;


Norsk   (2005-11-02 09:29:00) [11]

Преобразование Фурье переводит сигнал из временной (или пространственной) в частотную область. В тупую по формулам его обычно не вычисляют а используют матричное представление. Для вычисления ПФ сложность оценивают как N^4 (N - размер квадратной матрицы, и обычно N=8). БПФ - основано на том что элементы матрицы ПФ повторяються, а такдже на том что все вычисления делят на отдельные потоки (и сложность сокращаеться значительно).
Я не нашел Алгоритмм БДДПФ, и пришлось исполььзовать простой алгоритм (матричный, с компл числами). Вроде не особо тормозит (размер матриц у меня 100 на 100, т.к. требуется спектр всего изображения, а не отдельных блоков)


Digitman   (2005-11-02 09:19:00) [12]


> PAVIA ©   (01.11.05 20:56) [15]

http://algolist.manual.ru/maths/fft.php


PAVIA   (2005-11-01 20:56:00) [13]

Извиняюсь из-за ошибок, голова болела после пяти пар. Но вы все-таки не ответили на вопрос. Раз уж поросяти исправляю ошибки.
Что такое ряд Фурье? Что такое Быстрые Преобразования Фурье?
Насколько я знаю Ряд Фурье это разложение интеграла в ряд косинусов и синусов. То БПФ я понимаю это разложение в ряд и обратно преобразование, быстрым способом. Я знаю, что эти преобразования применяется во многих областях. Так же я узнал, что в ряд Фурье можно разложить статистические данные, но как это делается, я не знаю. Также я узнал, что есть преобразования X…, которые в два раза быстрее, чем БПФ за счет того, что не используют комплексные числа.
Вопрос:
Как применяют БПФ? Можете привести пример и объяснить, как и почему делают так. На примере, используя БПФ для удаления помех с картинки или любой другой.


Jeer   (2005-11-01 18:50:00) [14]

vrem   (01.11.05 18:07) [13]

Тоже, в школу захотелось ? :))


> какие частоты состовляют


vrem   (2005-11-01 18:07:00) [15]

PAVIA ©  
Поддерживаю [12] Jeer, читать не очень, но не быстро в школу, а печатать больше - и скорость печати поднимется и ошибок меньше станет.

что касается fft - это очень полезная штука. Суть её, как я понимаю - на входе имеем музыку, шум - любой сигнал, а на выходе - точно знаем какие частоты состовляют исследуемый сигнал. Их можно увеличить или уменьшить и обратно превратить в сигнал = получится эквалайзер хоть сколько полосный, а можно вырезать из сигнала шум - sound forge имеет плагин такой.


Jeer   (2005-11-01 12:18:00) [16]

PAVIA ©   (31.10.05 19:08) [11]

"преоброзования", "применяеться", "делыеться", "удоления"

Быстро в школу.
Учить русский, для начала.

"Так же я узнал, что в ряд.."
"Также я узнала, что есть преоброзования X..."

И определись с полом, наконец.


PAVIA   (2005-10-31 19:08:00) [17]

Что такое ряд Фурье? Что такое Быстрые преоброзования Фурье?
Насколько я знаю Ряд Фурье это разложение интеграла в ряд косинусов и синусов. То БПФ я понимаю это разложение в ряд и обратно преоброзование,быстрым способом. Я знаю что эти преоброзования применяеться во многих облостях. Так же я узнал, что в ряд фурье можно разложить статистические данные, но как это делыеться я не знаю. Также я узнала, что есть преоброзования X... которые в два раза бычтрее чем ФФТ за счет того, что не используют комплексные числа.
Вопрос:
Как применяют БПФ? Можети привести пример и объеснить как и почему делают так. Для примера используя БПФ для удоления помех с картинки или любой другой.


WondeRu   (2005-10-31 18:06:00) [18]

видел это, но есть ли реальный пример... что куда запихивать? какие размерности массивов и т.п.?


Jeer   (2005-10-31 15:09:00) [19]

Пользовался.
На сайте все есть.

{--------------------------------------------------------------}
{ Delphi interface to the FFTW library -- FFTW Version 3.0.1.  }
{ Note that this interface is incomplete. Additional function  }
{ interface entries may be added in an anologous manner, see   }
{ fftw  for more details.                  }
{                                                              }
{ Last modified 22/DEC/03                                      }
{ Written by Mark G. Beckett (g.beckett@epcc.ed.ac.uk          }
{--------------------------------------------------------------}

unit fftw_interface;

interface
{EPCC (MGB) - Note that the FFTW memory allocation routines can not be used
 for data arrays, because the DLL is allocated a separate heap that is not
 accessible from the Delphi runtime environment.}
function fftwf_malloc(n : Integer) : Pointer; cdecl;

procedure fftwf_free(p : Pointer); cdecl;

function fftwf_plan_dft_1d(n : Integer; inData : PSingle;
 outData : PSingle; sign : Integer; flags : Longword) : Pointer; cdecl;

function fftwf_plan_dft_r2c_1d(n : Integer;
 inData : PSingle; outData : PSingle; flags : Longword) : Pointer; cdecl;

function fftwf_plan_dft_r2c_3d(nx : Integer; ny : Integer; nz : Integer;
                                inData : PSingle; outData : PSingle;
                                flags : Longword) : Pointer; cdecl;

function fftwf_plan_dft_c2r_3d(nx : Integer; ny : Integer; nz : Integer;
                                inData : PSingle; outData : PSingle;
                                flags : Longword) : Pointer; cdecl;

function fftwf_plan_dft_c2r_1d(n : Integer;
 inData : PSingle; outData : PSingle; flags : Longword) : Pointer; cdecl;

procedure fftwf_destroy_plan(plan : Pointer); cdecl;

procedure fftwf_execute(plan : Pointer); cdecl;

const
{EPCC (MGB) - FFTW documented constants, taken from "api/fftw3.h". Comments
to the right of the definitions are transcribed from the original header
file.}

FFTW_FORWARD        = -1;
FFTW_BACKWARD        = 1;

FFTW_MEASURE         = 0;
FFTW_DESTROY_INPUT   = 1;   {1U << 0}
FFTW_UNALIGNED       = 2;   {1U << 1}
FFTW_CONSERVE_MEMORY = 4;   {1U << 2}
FFTW_EXHAUSTIVE      = 8;   {1U << 3} {NO_EXHAUSTIVE is default }
FFTW_PRESERVE_INPUT  = 16;  {1U << 4} {cancels FFTW_DESTROY_INPUT}
FFTW_PATIENT         = 32;  {1U << 5} {IMPATIENT is default }
FFTW_ESTIMATE        = 64;  {1U << 6}

{FFTW undocumented constants have not been defined in this implementation.
They are not required for typical usage of the library.}

implementation

uses
 SysUtils;
 function fftwf_malloc(n : Integer): Pointer;
  cdecl; external 'fftw3.dll';
 procedure fftwf_free(p : Pointer);
  cdecl; external 'fftw3.dll';
 {Commented prototypes are taken from FFTW library. }

 {fftw_plan fftwf_plan_dft_1d)(int n, C *in, C *out, int sign, unsigned flags)}
 function fftwf_plan_dft_1d(n : Integer; inData : PSingle;
  outData : PSingle; sign : Integer; flags : Longword) : Pointer;
  cdecl; external 'fftw3.dll';

 { fftw_plan fftwf_plan_dft_r2c_1d(int n, float *in, \
                 fftw_complex *out, unsigned flags);}
 function fftwf_plan_dft_r2c_1d(n : Integer;
  inData : PSingle; outData : PSingle; flags : Longword) : Pointer;
  cdecl; external 'fftw3.dll';

 {fftw_plan fftwf_plan_dft_r2c_3d(int nx, int ny, int nz, R *in, C *out,
                 unsigned flags)}
 function fftwf_plan_dft_r2c_3d(nx : Integer; ny : Integer; nz : Integer;
  inData : PSingle; outData : PSingle; flags : Longword) : Pointer;
  cdecl; external 'fftw3.dll';

 {fftw_plan fftwf_plan_dft_c2r_1d(int n, C *in, R *out, unsigned flags)}
 function fftwf_plan_dft_c2r_1d(n : Integer;
  inData : PSingle; outData : PSingle; flags : Longword) : Pointer;
  cdecl; external 'fftw3.dll';

 {fftw_plan fftwf_plan_dft_c2r_3d(int nx, int ny, int nz,
     C *in, R *out, unsigned flags)}
 function fftwf_plan_dft_c2r_3d(nx : Integer; ny : Integer; nz : Integer;
  inData : PSingle; outData : PSingle; flags : Longword) : Pointer;
  cdecl; external 'fftw3.dll';

  {void fftwf_destroy_plan(fftw_plan p)}
  procedure fftwf_destroy_plan(plan : Pointer);
  cdecl; external 'fftw3.dll';

  {void fftwf_execute(const fftw_plan p)}
  procedure fftwf_execute(plan : Pointer);
  cdecl; external 'fftw3.dll';

end.


WondeRu   (2005-10-31 13:37:00) [20]

Jeer ©   (31.10.05 10:44) [7]
http://www.fftw.org- очень даже.


у Вас есть примеры на Delphi по использованию сего творения?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо