Главная страница
    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.046 c
1-1088599378
Provodnick
2004-06-30 16:42
2004.07.11
PasteExcelTable не работает в Word


1-1088444654
Петр
2004-06-28 21:44
2004.07.11
86400 отсчетов


14-1088063193
Романов Р.В.
2004-06-24 11:46
2004.07.11
Что такое


1-1088357174
Sphinx
2004-06-27 21:26
2004.07.11
Объеденение текста в RichEdit


1-1087912779
Buster
2004-06-22 17:59
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский