Remontnouta.ru

ПК Ремонт техники
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Описание работы с библиотекой численного преобразования Фурье FFTW

Описание работы с библиотекой численного преобразования Фурье FFTW

Подробно выполнение численного преобразования Фурье разбирается в лабораторной работе №5.

Библиотека FFTW — свободно распространяемая библиотека для выполнения быстрого дискретного преобразования Фурье.

Описание функций библиотеки FFTW

План БПФ

Для выполнения преобразования Фурье при помощи библиотеки fftw необходимо вначале создать план, т.е. заполнить настройки БПФ:

Двумерный план создается аналогично:

Удаление плана после выполнения БПФ:

Выполнение БПФ

Простое (не сдвиговое) преобразование Фурье можно выполнить при помощи функции:

Чтобы выполнить полное сдвиговое приобразование Фурье нужно выполнить следующую последовать действий:

Пример выполнения одномерного преобразования Фурье

После выполнения программы, если все настроено верно, должен создаться файл "spectr.txt".

Настройки Visual Studio для работы с библиотекой FFTW

Для того, чтобы использовать библиотеку FFTW, необходимо проделать следующие настройки (пункт меню Project->[имя проекта]Properties):

  1. Выбрать конфигурацию "All Configurations"
  2. В разделе "Свойства конфигурации -> Каталоги VC++" добавить в "Каталоги включения" и "Каталоги библиотек" путь $(VCInstallDir)fftw;
  3. В разделе "Свойства конфигурации -> Компоновщик -> Ввод" добавить в "Дополнительные зависимости" библиотеку libfftw3-3.lib;

Установка библиотеки

Для того, чтобы использовать библиотеку FFTW на домашнем компьютере (для Visual Studio 2015), необходимо:

  1. разархивировать файлы из fftw.zip в C:Program FilesMicrosoft Visual Studio 14.0VCfftw
  2. в переменную окружения PATH (меню Пуск->Панель управления->Система и безопасность->Система->Дополнительные параметры системы, кнопка Переменные среды) добавить путь C:Program FilesMicrosoft Visual Studio 14.0VCfftw

Настройки Qt Creator для работы с библиотекой FFTW

Чтобы подключить библиотеку FFTW к проекту в Qt Creator необходимо в файле проекта ( *.pro ) добавить строки:

Для того, чтобы использовать библиотеку FFTW на домашнем компьютере, необходимо:

Шаг №4: Указываем путь к файлам с реализацией библиотеки

Переходим на вкладку «Компоновщик» > «Общие» . Ищем пункт «Дополнительные каталоги библиотек» > нажимаем на стрелочку в конце > «Изменить» :

Опять же, нажимаем на иконку с папкой, а затем на появившееся троеточие. Нам нужно указать следующий путь: C:LibsSDL2-2.0.9libx86 . Будьте внимательны, в папке lib находятся две папки: x64 и x86 . Даже если у вас Windows разрядности x64, указывать нужно папку x86 . Затем «Выбор папки» и «ОК» :

После этого переходим в «Компоновщик» > «Ввод» . Затем «Дополнительные зависимости» > нажимаем на стрелочку в конце > «Изменить» :

В появившемся текстовом блоке вставляем:

Затем переходим в «Компоновщик» > «Система» . После этого «Подсистема» > нажимаем на стрелочку вниз > выбираем «Консоль (/SUBSYSTEM:CONSOLE)» > «Применить» > «ОК» :

Предупреждение, или TXLib – это всего лишь инструмент

Библиотека TXLib – это всего лишь инструмент для того, чтобы облегчить первые шаги в программировании. Однако этот инструмент, как и любой другой, может быть применен неправильно. (Тем не менее, в основу TXLib заложены некоторые принципы, помогающие конструктивному неиллюзорному обучению.)

Читайте так же:
Виндовс 10 разбить диск на разделы

Сама по себе любая библиотека или язык программирования не научит начинающего писать программы грамотно. Научит этому разработка своих, достаточно больших проектов, в сочетании с тесным общением профессионалов, желающих помочь начинающим. Такие профессионалы должны обладать и опытом разработки больших программ, и педагогическими навыками, чтобы передать свой опыт начинающим. К сожалению, не всегда это совпадает. Профессионалы-программисты зачастую не хотят лезть в обучение, где хватает своих проблем. С другой стороны, недобросовестные учителя, иногда даже в сильных школах и курсах, хватаются за удобные инструменты обучения (чужие или свои библиотеки, среды и языки программирования), не удосуживаясь следить за качеством кода обучаемых, за стилем и направлением их мышления, ограничиваясь лишь видимостью обучения. Такие образовательные иллюзии очень вредны. Заметны они становятся достаточно поздно, когда выясняется, что ученик, легко пишущий небольшие программы (пусть даже алгоритмически насыщенные, олимпиадные), принципиально не способен написать что-то большее, путается в коде, а другие, в том числе и профессионалы, его не понимают в силу спутанности его мышления и неумения внятно выразить мысли на уровне современных стандартов. Чтобы преодолеть этот барьер, воздвигнутый нерадивым преподавателем (или вашей собственной нерадивостью), приходится серьезно и самостоятельно переучиваться – иногда будучи уже студентом или аспирантом. Либо смириться и «носить кофе программистам».

Искусство программирования — это искусство мышления, не надо это забывать, уважаемые школьники, студенты и особенно преподаватели.

  • Сделай сам. В TXLib многие вещи сделаны или оставлены не совсем удобными для применения. Это – предложение подумать, как сделать это самому, и, как правило, для этого в TXLib есть средства. Сделав, покажите решение другим, если они быстро поймут его и оценят — то ваше решение удачное.
  • Загляни в Help. (Слово неспроста выбрано английским, потому что большинство информации в современном программировании – на английском языке. Учите его.) Под системой помощи понимается не только TXLib Help, но и весь Internet.
  • Посмотри, как сделано. Загляни в код (см. «Исходные тексты»). Он создавался в том числе как пример программной системы со своей логикой и со своей реализацией, а некоторые функции можно понять только по коду, потому что их нет в системе помощи. Не всегда решения, примененные в TXLib оптимальны даже с точки зрения автора – он надеется, что это убережет желающих научиться качественно, но нетерпеливых учеников, от   Ctrl+C и Ctrl+V   плагиата.
  • Посмотри, как сделано иначе. TXLib – не единственная графическая библиотека, и реализация «простого графического холста», примененная в ней – не единственное решение. Посмотри, как устроены десятки других графических библиотек. Но избегай плохого кода (его можно определить по тому, как морщатся профессионалы, глядя на него, если у вас нет более объективных средств такого определения) – он научит вас плохому. Хороший, но сложный код (глядя на него, профессионалы не морщатся, а вздыхают) – отложи до времени и вернись к нему позже.
  • Выйди за пределы «песочницы». Это усиление принципа «сделай сам». Собери вместе свои мысли про хорошую библиотеку, посмотри, как устроен TXLib и его аналоги, сделай свою библиотеку, лучше TXLib’а. Это нетрудно. 🙂 Примеры таких библиотек можно найти на сайте TXLib и в Интернете, и некоторые из них сделаны как раз начинающими.
Читайте так же:
Виндовс не удается форматировать флешку

Удачи, и May the Source be with you! 🙂

Библиотека классов MFC

  1. File toNew toProject.
  2. Project types: Win32, Templates: Win32 Project.
  3. Ok.
  4. An empty project.
  5. Finish.
  6. Добавляем в проект файл *.cpp.
  7. Project toProperties. Вкладка Configuration Properties toGeneral.
  8. Значение поля Character Set установливаем Use Multi-Byte Character Set.
  9. Значение поля Use of MFC устанавливаем Use MFC in a Static Library .
  10. Ok.

Введем код программы:

Комментарий к программе

Первая строка – файл заголовков afxwin.h, предназначен для программирования под Windows с использованием библиотеки MFC. Он включает описание классов, функций и переменных, а также ссылается на windows.h.

Замечание: В каждой программе на С++ есть главная функция программы. В Dos, это main() , в Windows – WinMain() . В рассматриваемой программе ее нет, так как в MFC есть класс CWinApp , который включает главную функцию программы.

Во второй строке создается класс CMyApp , как производный от CWinApp и который наследует все его свойства, методы и т.д. В этом классе объявлен конструктор по умолчанию (без параметров). Он необходим, иначе не скомпилировать программу. В конце программы от класса CMyApp создается объект класса CMyApp theApp . Он тоже без параметров. CWinApp имеет виртуальный метод InitInstance() . Этот метод должен возвращать ненулевое значение, если инициализация прошла нормально, а иначе 0. Он предназначен, чтобы описать класс окна программы и отобразить окно на экране. В конструкторе класса CMainWnd вызывается функция создания окна Create(…) , в которой есть несколько параметров. Первый параметр указывает на имя класса окна, он пока не нужен и поэтому NULL , дальше указатель – имя окна программы. WS_OVERLAPPEDWINDOW определяет стиль окна (обычное перекрывающее окно с заголовком, кнопкой вызова системного меню, кнопками минимизации и максимизации и рамкой). Параметр rectDefault говорит о том, что размер окна присвоит Windows по умолчанию. Рассмотрим функцию Create(…) подробнее:

BOOL CFrameWnd::Create(LPCSTR ClassName, LPCSTR Title, DWORD Style = WS_OVERLAPPEDWINDOW, const RECT &XYSize = rectDefault, CWnd *Parent = 0, LPCSTR MenuName = 0, DWORD ExStyle = 0, CCreateContext *Context = 0);

Читайте так же:
Загрузка линукс с флешки без установки

Первый параметр, ClassName , определяет имя класса окна для оконной подсистемы Windows. Обычно его не нужно явно задавать, так как MFC выполняет всю необходимую работу. Параметр Title определяет заголовок окна. Параметр Style задает стиль окна. По умолчанию создается стандартное перекрываемое окно. Можно задать свой стиль, объединив с помощью операции «или» (|)несколько констант из приведенных ниже:

КонстантаЭлемент окна
WS_OVERLAPPEDСтандартное окно с рамкой
WS_MAXIMIZEBOXКнопка максимизации
WS_MINIMIZEBOXКнопка минимизации
WS_SYSMENUСистемное меню
WS_HSCROLLГоризонтальная полоса прокрутки
WS_VSCROLLВертикальная полоса прокрутки

В примере используется член-функция со следующим прототипом:

virtual BOOL CWinApp::InitInstance();

Это виртуальная функция, которая вызывается каждый раз при запуске программы. В ней должны производиться все действия, связанные с инициализацией приложения. Функция должна возвращать TRUE при успешном завершении и FALSE в противном случае. В программе в функции сначала создается объект класса CMainWnd , и указатель на него запоминается в переменной m_pMainWnd . Эта переменная является членом класса CWinThread . Она имеет тип CWnd* и используется почти во всех MFC-программах, так как содержит указатель на главное окно. Так как m_pMainWnd указывает на CMainWnd , то можно вывести на экран окно:

Параметр определяет, каким образом окно будет показано на экране. Наиболее распространенные значения следующие:

КонстантаДействие
SW_HIDEОкно становится невидимым
SW_MAXIMIZEОкно максимизируется
SW_MINIMIZEОкно минимизируется
SW_SHOWОкно отображается, если было невидимо
SW_RESTOREОкно приводится к нормальному размеру

Запустив программу на выполнение, получим в результате окно.

Дополнение. При создании окна часто используют структуру Rect.

Замечание. В библиотеке MFC используется ряд глобальных функций. Все они начинаются с префикса Afx. (Когда MFC только разрабатывалась, то проект назывался AFX – Application Framework ). После ряда существенных изменений, AFX была переработана в MFC, но прежнее название сохранилось во многих идентификаторах библиотеки и в названиях файлов.

Продолжение программы. Вставка элементов управления в окно (Controls)

Для работы возьмем наш первый проект и внесем изменения. Добавим следующий код после всех #include :

Необходимо изменить описания конструктора класса окна:

Комментарии к программе

Результат создания объектов оператором new проверяется через проверку на NULL . Если ошибка, то все действия с этим элементом отменятся. Программный код реализации элементов управления находится в DLL Windows. То есть, в компиляторе нет реализации этих функций в библиотеках (lib), там только ссылки. Все элементы управления должны иметь идентификатор – число, которое определяет этот элемент управления. Первыми двумя строками, используя #define , объявляем идентификаторы. Дальше в класс рамки окна вставляются указатели на объекты элементов управления. Это только указатели. Объекта самого нет. Каждый объект использует память и, до того как он не понадобится, хранится только указатель. В конструкторе окна создадим соответствующие объекты с помощью оператора new, а после этого вызовем функцию Create(…) , которая из объекта создаст элемент управления. Заметим, что у MyStatic нет идентификатора. Он задан по умолчанию, как 0xffff.

Читайте так же:
Библиотека значков windows 10

Функция Create(…) используется очень часто и есть у многих объектов. Обычно она требует:

  1. строку для имени или надписи;
  2. стиль;
  3. размеры и положение;
  4. куда вставлять;
  5. идентификатор.
Продолжение программы. События элемента управления

Задача. Проиллюстрировать работу событий элемента управления на примере работы с мышью. При нажатии левой кнопки мыши элемент управления – кнопка должна переместиться в заданное место окна, а при нажатии правой кнопки мыши кнопка должна возвратиться в исходное место.

Продолжение программы. Создание строки состояния

Задача. Создать строку состояния (пока пустую). В описания включаемых файлов добавим:

Примеры из библиотек:

Большинство библиотек содержат примеры. Это небольшие скетчи (программы) которые раскрывают функционал библиотеки. Наиболее удобный способ просмотра примеров, с помощью средств Arduino IDE. Выберите пункт меню: Файл > Примеры, откроется список с названиями библиотек у которых есть примеры. Наведите курсор на название библиотеки и Вы увидите список примеров содержащихся в ней, клик на примере приведёт к появлению нового окна Arduino IDE со скетчем примера.

Альтернативный способ просмотра примеров заключается в запуске файлов скетчей из папки:
путь > libraries > название библиотеки > examples > название примера.

Синхронизация файлов

Благодаря синхронизации Creative библиотеки автоматически становятся доступными на разных устройствах, в разных приложениях и Интернете. Для синхронизации библиотек между разными устройствами необходимо включить синхронизацию файлов в Creative Cloud Desktop. Состояние синхронизации библиотек можно проверить с помощью значка Creative Cloud на панели «Библиотеки».

Photoshop: значок состояния синхронизации библиотекСостояние синхронизации библиотек

A. Синхронизация включена B. Синхронизация отключена

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

Если эти шаги не принесут результата: скачайте и замените файл windows.h (внимание: для опытных пользователей)

Если ни один из предыдущих трех шагов по устранению неполадок не разрешил проблему, можно попробовать более агрессивный подход (примечание: не рекомендуется пользователям ПК начального уровня), загрузив и заменив соответствующую версию файла windows.h. Мы храним полную базу данных файлов windows.h со 100%-ной гарантией отсутствия вредоносного программного обеспечения для любой применимой версии C-Free . Чтобы загрузить и правильно заменить файл, выполните следующие действия:

  1. Найдите версию операционной системы Windows в нижеприведенном списке «Загрузить файлы windows.h».
  2. Нажмите соответствующую кнопку «Скачать», чтобы скачать версию файла Windows.
  3. Скопируйте этот файл в соответствующее расположение папки C-Free:

Если этот последний шаг оказался безрезультативным и ошибка по-прежнему не устранена, единственно возможным вариантом остается выполнение чистой установки Windows 10.

Как работать с библиотекой?

Допустим, вы купили какой то модуль или датчик, загуглили по нему информацию, нашли статью с примером. Примеры обычно простенькие, показать как подключается и работает. Скачали библиотеку из статьи, попробовали, всё работает. Что дальше? Дальше следует открыть папку с библиотекой и посмотреть официальные примеры, разобраться как они работают и что умеют. Примеры находятся в папке examples в папке с библиотекой. Примеры обычно не раскрывают всех возможностей библиотеки, поэтому открываем и читаем заголовочный файл, который название_библиотеки.h. В нем можно найти буквально список инструментов библиотеки, очень часто с описанием для каждого. Вооружившись этой информацией, можно выжать из модуля все возможности, которые ему прописал разработчик библиотеки. Давайте рассмотрим банальную библиотеку servo, я думаю большинство с ней работали. Даже у меня есть небольшой видеоурок по работе с Servo! Посмотрим примеры, которые лежат в папке с библиотекой:

  • Минимальный импульс* – 544 мкс
  • Максимальный импульс* – 2400 мкс
  • Стандартный импульс после attach() – 1500 мкс – значит серво повернётся на соответствующий угол после подключения!
  • Максимальное количество серво можно узнать, выведя дефайн MAX_SERVOS в порт (Serial.print(MAX_SERVOS)) – для Arduino NANO это будет 12 серво
  • В классе Servo мы можем увидеть методы, которые не были раскрыты в примерах:
    • Версия attach() с возможностью указать мин. и макс. длину импульса* вручную!
    • detach() – отключить серво от управления
    • writeMicroseconds() – подать управляющий сигнал в мкс, а не в градусах
    • read() – считать текущее положение серво (последнее отправленное через write() )
    • И некоторые другие

    *Длина импульса – сервопривод управляется ШИМ сигналом с определённой длиной импульса, длина эта на максимальный и минимальный угол поворота серво отличается у разных производителей (минимум – 450-600, максимум – 2000-2400), поэтому библиотека серво является очень универсальным инструментом! Перед кодом также находится весьма подробное описание библиотеки и расписаны некоторые тонкости. Что я хочу этим сказать: очень часто именно заголовочный файл несёт основную массу полезной информации по возможностям библиотеки, и в “статьях” о модулях и датчиках вы эту информацию скорее всего не найдёте. Всегда изучайте заголовочный файл, если нужно серьёзно поработать с каким-то модулем или вообще библиотекой в целом.

    голоса
    Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector