Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/89: Рейтинг темы: голосов - 89, средняя оценка - 4.96
192 / 128 / 52
Регистрация: 19.01.2010
Сообщений: 518

Подключение библиотеки fftw. Преобразование Фурье.

17.11.2013, 22:48. Показов 17549. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую. Есть необходимость использовать быстрое преобразование Фурье. Скачал библиотеку , покурил мануалы и понял, что без помощи не разберусь. Как подключить библиотеку к борланд с++ 6, Может кто сталкивался уже?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.11.2013, 22:48
Ответы с готовыми решениями:

Неправильное преобразование при использовании библиотеки FFTW
Мне надо использовать библиотеку FFTW. Сайт с примером. Я написал код, основанный на примере с сайта. Мне надо с помощью БПФ получить АЧХ...

Найти коэффиценты разложения в ряд Фурье, используя быстрое преобразование Фурье (БПФ)
Прошу помочь мне в нелеггкой задачке нужно для заданной на периоде 2∏ функции f(x) найти коэффициенты разложения в ряд Фурье, используя...

Преобразование звукового сигнала в спектр (Фурье-преобразование)
Доброго времени суток! Мне необходимо преобразовать звуковой файл в спектр, а как и с чего начать я не понимаю

17
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.11.2013, 23:22
В данном случае тебе надо сгенерить из def -> lib под C++Builder.
Либо забить и вызывать ф-ции из DLL динамически ...

В утилиту Implib через командную строку передается сначала имя создаваемого файла импортируемой библиотеки, а затем имя файла описания. Например:

Code
1
Implib.exe VCLIB.lib VCLIB.def
Созданный файл .lib можно статически связывать с проектом C++Builder.
В целом, как видим, статическое связывание библиотек, созданных в разных системах, сопряжено с определенными сложностями. Так что надежнее всего использовать в этих случаях динамическое связывание. Тем более, что этот вариант имеет и ряд других преимуществ, описанных в предыдущих разделах.
Архангельский "Приемы программирование в С++ Builder6 и 2006"


DLL в C++Builder и Microsoft Visual C++
1
192 / 128 / 52
Регистрация: 19.01.2010
Сообщений: 518
18.11.2013, 13:02  [ТС]
Что-то не получается. Написал батник (может в нем ошибка?), который из "деф" делает "либ".
Windows Batch file
1
2
3
4
5
chcp 866
"C:\Program Files (x86)\Borland\CBuilder6\Bin\implib.exe" -a FFTW3-3.lib "C:\fttw3\libfftw3-3.def"
"C:\Program Files (x86)\Borland\CBuilder6\Bin\implib.exe" -a FFTW3F-3.lib "C:\fttw3\libfftw3f-3.def"
"C:\Program Files (x86)\Borland\CBuilder6\Bin\implib.exe" -a FFTW3l-3.lib "C:\fttw3\libfftw3l-3.def"
pause
А он мне в ответ:



Я так понял он ждет на входе dll. Указал расширение dll, запустил, вроде без ошибок, либы создались. Кидаю либы, дллки и заголовочный файл в папку с проектом. В билдере через "Add to project" добавляю либы, в опциях добавляю пути к дллкам, дописываю в проекте #include <fftw3.h>, а он ругается на этот инклюд при компилировании (Unable to open include file).
0
192 / 128 / 52
Регистрация: 19.01.2010
Сообщений: 518
18.11.2013, 13:09  [ТС]
Implib.exe пробовал с ключем "-a", как написано в мануале на сайте библиотеки , так и без ключа, как написано у Вас. Результат все равно как на картинке.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.11.2013, 15:00
Хз, походу говорит что def -не корректен
В нем внутри идет название dll
Code
1
2
3
4
LIBRARY libfftw3f-3.dll
EXPORTS
fftwf_alignment_of
...
Название "libfftw3f-3.dll" содержит "-", вероятно из-за этого, можно попробовать поубирать "-" и переименовать DLL- ки соответвтвенно

Цитата Сообщение от Avazart Посмотреть сообщение
Либо забить и вызывать ф-ции из DLL динамически ...
1
192 / 128 / 52
Регистрация: 19.01.2010
Сообщений: 518
18.11.2013, 18:49  [ТС]
Занялся динамическим вызовом, но и тут проблемы
Накатал код подключения дллки, вроде работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
       typedef void __cdecl(*dll_func)(void);
 
        dll_func Func = NULL;
        HMODULE hDLL = LoadLibrary("libfftw3-3.dll");
        if(!hDLL)
                cout << "Impossible to load library" << endl;
        else    cout << "success load lib" << endl;
 
        Func = (dll_func)GetProcAddress(hDLL, "fftw_plan_r2r_1d");
        if(!Func)
                cout << "Impossible to find function" << endl;
        else    cout << "success find function" << endl;
Но как передавать в функцию fftw_plan_r2r_1d свои параметры?
Согласно мануалу, функция выглядит так:
fftw_plan fftw_plan_r2r_1d(int n, double *in, double *out, fftw_r2r_kind kind, unsigned flags)
Как мне объявлять переменные типа "fftw_plan"? Они же определены только в самой библиотеке. Пробовал в typedef прописывать такие же переменные вместо void, но компиль ругается.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.11.2013, 19:01
Цитата Сообщение от Selot Посмотреть сообщение
Как мне объявлять переменные типа "fftw_plan"?
Хедер библиотеки подключи что была видна структура fftw_plan

Добавлено через 2 минуты
C++
1
2
3
4
typedef fftw_plan
     (__cdecl *DLL_fftw_plan_r2r_1d)(int n, double *in, double *out, fftw_r2r_kind kind, unsigned flags);
 
//...
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
22.04.2014, 12:36
Ровно такая же беда. Скачал, сконвертировал, подключил - не работает.

Прям открываю консольку, подключаю заголовочник, добавляю в проект сконвертированные либы, запихиваю официальный пример, все собирается без ошибок, но при запуске падает с ошибкой, что не может найти библиотеку:


Архивы для скачивания
Сам архив со всеми потрохами последней версии: fftw334.rar

Нашел так же предыдущую версию: fftw312.rar

Архив со стандартными борландовыми программами преобразований форматов библиотек: implib_and_coff2omf.rar
(_b - builder6, _r - rad xe2)

Уже преобразованные к борландовому виду либы: lib_b.rar


Прошу помощи.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.04.2014, 14:23
XE3, вроде работает c созданием с помощью implib -c -a.
Но неплохо бы иметь более сложный пример нежели данный оф пример.
Вложения
Тип файла: zip test fftw334.zip (3.18 Мб, 101 просмотров)
2
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.04.2014, 14:50
Вот вроде нашел пример который делает вроде что-то чудовещное:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <complex>
#include "fftw3.h"
#pragma comment (lib,"libfftw3-3.dll.lib")
#pragma comment (lib,"libfftw3f-3.dll.lib")
#pragma comment (lib,"libfftw3l-3.dll.lib")
// ---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1* Form1;
 
// ---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject* Sender)
{
    int N= 10;
 
    std::complex<double> *in= new std::complex<double>[N];
    std::complex<double> *out= new std::complex<double>[N];
 
    fftw_plan p= fftw_plan_dft_1d(N, reinterpret_cast<fftw_complex*>(in),
            reinterpret_cast<fftw_complex*>(out), FFTW_FORWARD, FFTW_ESTIMATE);
    double pi= acos(-1.);
    for (int i= 0; i< N; i++)
        in[i]= sin(2* pi* 0.2* i);
 
    fftw_execute(p);
 
    for (int i= 0; i< N; i++)
    {
        RichEdit1->Lines->Add(  String(out[i].real())+" + "+
                                                        String(out[i].imag())+"j"
                                                    );
    }
 
    fftw_destroy_plan(p);
    delete[]in;
    delete[]out;
}
// ---------------------------------------------------------------------------
Взято отСелЯ FFTw библиотека, пример использования?


Еще натолкнулся на такой ресурс https://parallel.ru/cluster/fftw.html может будет полезен.
Ссылка на доку http://www.fftw.org/fftw3.pdf
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
22.04.2014, 16:03
Avazart, большое спасибо. Нечто чудовищное и доку видал, ресурс почитаю. Но только после того, как запущу эту хренобазу. Это какое-то дьявольское колдунство: ваш проект запускается, а собираю точно такой же свой (хоть с вашими библиотеками, хоть со своими, со всеми наборами ключей) и он показывает мне ровно тот же самый кукиш.
Вложения
Тип файла: rar TempProject.rar (2.71 Мб, 51 просмотров)
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.04.2014, 16:10
Дай угадаю, dll положили в папку с проектом, а не в Win32/Release ?

В настойках проекта в опции Debug в рабочую папку нужно ставить в "."
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
22.04.2014, 16:27
Цитата Сообщение от Avazart Посмотреть сообщение
Дай угадаю, dll положили в папку с проектом, а не в Win32/Release ?
Именно так.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.04.2014, 16:45
Project Options / Debugger / Work Dirrectory = "."
Миниатюры
Подключение библиотеки fftw. Преобразование Фурье.  
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
22.04.2014, 21:41
Matlab vs FFTW. FFT
Программы на C# из книги Смита по ЦОС. FFTW
2
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
23.04.2014, 00:43
Смотрю документацию и найти не могу. Эта библиотека умеет делать обратное преобразования Фурье (т.е. из Фурье свертки восстановить первоначальную ф-цию), интересует 2D случай?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.04.2014, 01:37
Еще раз https://parallel.ru/cluster/fftw.html (рус)

Для построения многомерного плана (вместо приставки fftw_ используется fftwnd_, где n размерность) используются функции:

fftwnd_plan fftw2d_create_plan(int nx, int ny, fftw_direction dir, int flags) - для двумерного БПФ;
fftwnd_plan fftw3d_create_plan(int nx, int ny, int nz, fftw_direction dir, int flags) - для трехмерного БПФ.
1
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
23.04.2014, 02:20
Avazart, спасибо. Просто искал отдельную ф-ция, а там оказывается просто флажок.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.04.2014, 02:20
Помогаю со студенческими работами здесь

Подключение lib-файла FFTW для сборки проекта для android из OSX
Привет всем! Я только новичек в QT, не судите строго) Собираю проект под Android с OSX. Использую стороннюю библиотеку FFTW. ...

Быстрое преобразование Фурье и ошибка "Неявное преобразование типа"
А подскажите еще по одной прблемке: Есть программа реализующая БПФ (ну должна по крайней мере это делать) using System; using...

Подключение библиотеки Crypto. Если возможно, нужна ссылка на скачивание данной библиотеки
Возникли сложности с подключением библиотеки Crypto: import Crypto.Cipher.AES Выдает следующую ошибку: ...

Преобразование Фурье
Вот такой пример: есть синусоида (один период длительностью 1сек) с амплитудой=1 как разбить спомощью функции fft в маткаде на элементы...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru