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

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

17.11.2013, 22:48. Показов 17745. Ответов 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
8489 / 6156 / 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
8489 / 6156 / 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
8489 / 6156 / 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
8489 / 6156 / 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
8489 / 6156 / 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
8489 / 6156 / 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
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.04.2014, 16:45
Project Options / Debugger / Work Dirrectory = "."
Миниатюры
Подключение библиотеки fftw. Преобразование Фурье.  
0
 Аватар для raxper
10237 / 6615 / 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
8489 / 6156 / 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
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru