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

Вниз

(fft.dll)   Найти похожие ветки 

 
Batoon ©   (2004-04-24 18:14) [0]

Подскажите, как вызывать на DELPHI функцию FFT из fft.dll


 
uny   (2004-04-24 18:31) [1]

из soundforge dll-ка?


 
Batoon ©   (2004-04-24 18:39) [2]

ну допустим ДА


 
uny   (2004-04-24 18:42) [3]

легче просто исходник fft достать, он маленький, а в этой dll может не чистое fft, а адаптированное под soundforge
(из опыта:)


 
Batoon ©   (2004-04-24 18:48) [4]

не мог ли бы ты выслать на мыло откомпилированный.дело в том, что я скачал с www.fftw.org и у меня не получается его компилить(конечно же на C)


 
uny   (2004-04-24 18:55) [5]

я такое нашёл -

type
flip = array of extended;
{
размер=nn*2, где nn=количество входных данных, (степень двойки, т.е. 8,16,32,64 и т.д.),

входные данные записываются так -
число1, ноль, число2, ноль,..., число nn, ноль
нули, т.к. возвращает мнимые числа и на месте нулей будет мнимая часть.

isign=указывает направление - прямое=1 или обратное=-1 преобразование
}

PROCEDURE four1(VAR data: flip; nn,isign: integer);
VAR
  ii,jj,n,mmax,m,j,istep,i: integer;
  wtemp,wr,wpr,wpi,wi,theta: extended;
  tempr,tempi: extended;
BEGIN
  n := 2*nn;
  j := 1;
  FOR ii := 1 TO nn DO BEGIN
     i := 2*ii-1;
     IF (j > i) THEN BEGIN
        tempr := data[j];
        tempi := data[j+1];
        data[j] := data[i];
        data[j+1] := data[i+1];
        data[i] := tempr;
        data[i+1] := tempi
     END;
     m := n DIV 2;
     WHILE ((m >= 2) AND (j > m))  DO BEGIN
        j := j-m;
        m := m DIV 2
     END;
     j := j+m
  END;
  mmax := 2;
  WHILE (n > mmax) DO BEGIN
     istep := 2*mmax;
     theta := 6.283185307179586476925286766559/(isign*mmax);
     wpr := -2.0*sqr(sin(0.5*theta));
     wpi := sin(theta);
     wr := 1.0;
     wi := 0.0;
     FOR ii := 1 TO (mmax DIV 2) DO BEGIN
        m := 2*ii-1;
        FOR jj := 0 TO ((n-m) DIV istep) DO BEGIN
           i := m + jj*istep;
           j := i+mmax;
           tempr := wr*data[j]-wi*data[j+1];
           tempi := wr*data[j+1]+wi*data[j];
           data[j] := data[i]-tempr;
           data[j+1] := data[i+1]-tempi;
           data[i] := data[i]+tempr;
           data[i+1] := data[i+1]+tempi
        END;
        wtemp := wr;
        wr := wr*wpr-wi*wpi+wr;
        wi := wi*wpr+wtemp*wpi+wi
     END;
     mmax := istep
  END;

//что бы туда сюда совпадало с оригиналом.
for ii:=1 to nn*2 do data[ii]:=data[ii]/sqrt(nn);

END;


 
Batoon ©   (2004-04-24 18:57) [6]

uny THANK YOU


 
uny   (2004-04-24 20:21) [7]

данные в массиве располагаются с 1 элемента, не с нулевого и последний не nn*2-1, а nn*2


 
Batoon ©   (2004-04-24 21:56) [8]

то есть после преобразования в data вместо 0 записываются данные преобразования?


 
uny   (2004-04-24 22:19) [9]

в оригинале flip = array[1..64*2] of extended; (заместо 64 любое число степень двойки)

в нём
1 - реальная часть 1 числа данных
2 - мнимая часть 1 числа данных

3 - реальная часть 2 числа данных
4 - мнимая часть 2 числа данных
и т.д.

после преобразования
1 - реальная часть 1 числа результата
2 - мнимая часть 1 числа результата

3 - реальная часть 2 числа результата
4 - мнимая часть 2 числа результата
и т.д.

мне было удобнее с динамическими массивами просто:)


 
Batoon ©   (2004-04-24 23:07) [10]

как понять МНИМАЯ?
P.S: объясните пожалуйста чайнику


 
тихий вовочка ©   (2004-04-26 08:08) [11]

Мнимая? О комплексных числах слышал что-нибудь? У них есть вещественная re и мнимая im части. А что у тебя не получилось с fftw? Спрашивай, я уже год ей пользуюсь и очень доволен


 
Batoon ©   (2004-04-26 12:00) [12]

да у меня она не компилится на c. А скомпилинную нигде взять не могу.
Если небольшая - скинь ПЖЛАСТА на мыло. И скажи, как функцию вызывать


 
тихий вовочка ©   (2004-04-26 15:51) [13]

На каком Си? Билдер или Вижал? У них на сайте (www.fftw.org) лежит третья версия как для Виндов, так и для Линуха. Для Билдера надо извлечь библиотечку из fftw3.dll с помощью implib, которая лежит у Билдера в папке Bin. А чтобы вызвать функцию нужно сначала создать план. Какой тебе именно нужен - не знаю. У них на сайте есть pdf с кучей примеров.
Например

   fftw_complex *c_arr_rvs = new fftw_complex[pwr];
   fftw_complex *c_arr_fwd = new fftw_complex[pwr];

   fftw_plan p;

    //Create FFT byte code
    p = fftw_plan_dft_1d(pwr,c_arr_fwd,c_arr_rvs,FFTW_FORWARD,FFTW_ESTIMATE);

    for(i = 0; i < pwr; i++)
      {
        c_arr_fwd[i][0] = fDatArray[i];
        c_arr_fwd[i][1] = 0;
      }

   //Do FFT
   fftw_execute(p);
   fftw_destroy_plan(p);
...



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

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

Наверх




Память: 0.5 MB
Время: 0.059 c
14-1087494698
Подкрадуха
2004-06-17 21:51
2004.07.11
SDK для SkyStar1


3-1086780258
Navy
2004-06-09 15:24
2004.07.11
Немогу добавить запись.


3-1086999876
bulanov
2004-06-12 04:24
2004.07.11
Фильтр


4-1085738519
alexdosh
2004-05-28 14:01
2004.07.11
как определить куда проинсталлирована программа(любая)?


4-1086076538
Lamerr
2004-06-01 11:55
2004.07.11
LPT-порт