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