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

Вниз

(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 вся ветка

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

Наверх





Память: 0.48 MB
Время: 0.036 c
1-1088054215
nick
2004-06-24 09:16
2004.07.11
Как освободить память


1-1087966283
Игорь
2004-06-23 08:51
2004.07.11
Две строки в одной ячейки TStringGrid


14-1087972511
Карелин Артем
2004-06-23 10:35
2004.07.11
Где найти анализатор логов сервера формата IAS? (MicroSoft)


14-1088091911
Igorek
2004-06-24 19:45
2004.07.11
Внутренняя голосовая связь


14-1087556934
Vlad Oshin
2004-06-18 15:08
2004.07.11
Люди! дайте песенку, пожалуйста





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский