Быстрое преобразование Фурье fft для DUE
- Войдите на сайт для отправки комментариев
Пнд, 21/09/2015 - 18:05
Добрый!
Залип на вопросе ФФТ.
Пытаюсь снять с аналогового входа сигнал и пропустить его чз ФФТ.
Вроде даже есть библиотека здесь: http://forum.arduino.cc/index.php?topic=225204.0 - библиотека не включается из-за ошибки в ней
Есть вот: https://coolarduino.wordpress.com/2014/03/11/fft-library-for-arduino-due-sam3x-cpu/ - включилась. Но при попытке достучаться - молчит.
Кто-нить знает про работающее ФФТ для DUE?
Да, оно бывает работающее. Я знаю, точно бывает, сам видел. Только не такое уж и быстрое оно. Писать долго, работает медленно т.к. много умножений.
не такое уж и быстрое
Попытайтесь сделать простое FT на выборке в 32768 отсчетов и сравните в FFT. Тогда сразу поймете, где быстрое, а где - нет.
не такое уж и быстрое
Попытайтесь сделать простое FT на выборке в 32768 отсчетов и сравните в FFT. Тогда сразу поймете, где быстрое, а где - нет.
Если FT на DSP а FFT на ардуине, то пойму только что задача не по камню.
Если FT на DSP а FFT на ардуине, то пойму только что задача не по камню.
Простого FT на DSP не бывает. Там только FFT. По понятным причинам: в приведденном мною примере FFT - это порядка полумиллиона операций, а простое FT - более миллиарда.
Согласен, но при всем том - есть примеры БЫСТРО работающего ФФТ : http://arduino.ru/projects/analizator-spektra-zvuka-na-arduino
На AVR - платах это работает.
На ARM - запустить не удалось. Может нужно код в "чистом " С писать или еще что-то - я не знаю.
Кто-нить видел живую библиотеку FFT для DUE?
Есть вот: https://coolarduino.wordpress.com/2014/03/11/fft-library-for-arduino-due-sam3x-cpu/ - включилась. Но при попытке достучаться - молчит.
Kak eto molchit, tam zhe primer est' chtob cherez serial printovat'. Biblioteka, kstati na C.
Согласен, но при всем том - есть примеры БЫСТРО работающего ФФТ : http://arduino.ru/projects/analizator-spektra-zvuka-na-arduino
Сайт https://coolarduino.wordpress.com/2014/03/11/fft-library-for-arduino-due-sam3x-cpu/ приказал долго жить.
Есть какая-нибудь FFT библиотека, компилящаяся под DUE? Какие-то нашел, но с ними примеры не компилятся.
Вот допилил как-то, но не компилится - выдает ошибку.
Arduino: 1.6.0 (Windows XP), Плата"Arduino Due (Programming Port)"
Error while uploading: missing 'recipe.S.o.pattern' configuration parameter
Попробуй скачать здесь: https://cloud.mail.ru/public/FtFv/WorrYQnFB
Отпишись если чё не так потом.
А все работает )
Пример для Ардуины Due
Время измерения подобрано 1 сек. (5 мкс на analogRead(A0) + 483 мкс задержка между отсчетами.
Получается 2048*0.488 мс=1 сек.
Вход ловит наводку 50 Гц, для длительности 1 сек это 50-я гармоника.
Что и видно в мониторе - начиная с 0 гармоники (1007 ступенек АЦП) и максимум на 50 гармонике - 363 ступеньки. (Ну это на моей плате с проводками на входах )
Ура! ))
Большое спасибо!
Рад за вас. Но в оригинале частота сэмплирования задаётся просто
Немножко врет однако.
В спектре должны быть 100-я гармоника амплитудой 10 и нулевая амплитудой 15
Показывает нулевую ампл. -29 и сотую ампл. 9
зы. Ну хотя
зызы
ахаха..
Magnitudes:
0 -2998
100 1399
0 -2999
Ясен пень, там же целочисленная математика, ошибки округления. Магнитуда 10 от 2047 всего 0.488%.
На due в 20 раз медленнее.
Кстати есть целочисленные библиотеки, где входные данные с плавающей точкой.
Там типа
и обратное
Это скетч FFT с плавающей точкой
У меня время (мерялось в 2014) примерно
Вот еще добавил измерение фазы
Коллеги,
Два вопроса - я так понял на MEGA это не работает - не хватает памяти нужно DUE
И второй вопрос - библиотеки где взять? ссылки не работают
не могу найти UTFT.h - это что за зверь? TFT ?
прямо в тексте этого сообщения выделяете UTFT.h, нажимаете правую кнопку мыши и выбираете "Искать UTFT.h в гугле"
И, на будущее - стесняйтесь задавать идиотские вопросы...
B707, я хоть и новичок в этом вопросе но я уже искал в инете UTFT.h
И нашёл несколько... но во всех них написано что это библиотека для TFT дисплея... Судя по Скетчу вывод информации идёт в сериальный порт. Причём тут библиотека TFT и FFT ума не приложу...
Может всё таки аффтары ответят???
Коллега, послушайте, все авторы которые ниже offline..
Может быть вы знаете что за зверь UTFT.h которые они применяют ниже в своих скетчах по FFT.
Смотрел в гугле - везде находится только UTFT.h - что это библиотека TFT.
Но причём тут TFT и FFT??? ведь в скетчах вывод информации идёт на экран монитора...
ХЕЛП!
попробуйте закомментировать строчку с этой либой - и посмотрите, вылезут ли ошибки при компиляции
Спасибо, вечером проверю.
А ещё глупый вопрос - в Arduino IDE нет платы DUE... нужно другую прогу закачать?
А ещё глупый вопрос - в Arduino IDE нет платы DUE... нужно другую прогу закачать?
нужно установить поддержку Дуе, как - описано в тысячах мест в гугле, вот первая попавшаяся ссылка:
http://robotosha.ru/arduino/install-core-arduino-ide.html
Спасибо, вечером проверю.
А ещё глупый вопрос - в Arduino IDE нет платы DUE... нужно другую прогу закачать?
andriano, скажите а по поводу моего вопроса касательно UTFT.h - который используется в скетчах - нет понятия что это?
Спасибо!
https://habr.com/ru/post/196600/
Для работы с TFT дисплеями используется набор библиотек UTFT. Наиболее свежие версии этих библиотек можно найти на сайте разработчика: http://www.henningkarlsen.com/electronics/
Коллега, добрый день!
Писал тут всем... по поводу библиотеки UTFT.h которую Вы все используете в скетчах FFT.
ЧТо это за зверь? Гугл говорит что это библиотека TFT...
Но это странно!
Прошу помощи - где взять правильный UTFT.h
ХЕЛП!
Заранее огромное спасибо!
Я понял! Так а зачем тут TFT ? У ВАс же в скетчах вывод идёт на Сериальный порт на экран монитора или я что-то не заметил случайно??? Я думал UTFT.h это что-то имеющее отношение к FFT
Ну это кусок программы, где использовался вывод на экран.
Для FFT он не нужен, #include <UTFT.h> можно закомментировать.
В свою программу вы вставляете функцию FFTAnalysis, и обращаетесь к ней, как показано в примере.
Спасибо за инфу.
А ссылкой не поделитесь где взять FFTAnalysis ?
Что-то так в прямую не ищется!
Заранее благодарен!
Спасибо за инфу.
А ссылкой не поделитесь где взять FFTAnalysis ?
Что-то так в прямую не ищется!
Заранее благодарен!
Андрей, второй раз делаю замечание за идиотские вопросы. Сначала думаем. потом спрашиваем. FFTAnalysis - это функция, (например строка 118 из кода сообщения 16) - искать ее в инете не надо.
Спасибо я исправлюсь!
andriano, скажите а по поводу моего вопроса касательно UTFT.h - который используется в скетчах - нет понятия что это?
Спасибо!
Подозреваю, что UTFT никакого отношения к FFT не имеет, но может использоваться в конкретном проекте для вывода результатов FFT на экран.
Знаешь, если бы она использовалась конкретно в этом проекте, то было бы не так смешно. А так жеж ведь и не используется даже, просто инклудили и все. Но вполне очевидный совет выкинуть ту строку, хотяб закоментировать, он не слышит ))) С таким уровнем только с БПФ остается разбиратся!
Послушайте, совместными Вашими усилиями всё сделал. плату DUE купил, всё скомпилил без ошибок...
А что должно быть на выходе то?
Правильно ли я понимаю что надо смотреть на Serial порте?
Там какая-то мешанина выплёвывается и всё..
Я думал будет или числа или бары... может с 2016 года в IDE print.serial изменился кардинально..
Тут точно нужен совет :)
Послушайте, совместными Вашими усилиями всё сделал. плату DUE купил, всё скомпилил без ошибок...
А что должно быть на выходе то?
Правильно ли я понимаю что надо смотреть на Serial порте?
Там какая-то мешанина выплёвывается и всё..
Я думал будет или числа или бары... может с 2016 года в IDE print.serial изменился кардинально..
Тут точно нужен совет :)
А у Вас скорость порта в скетче и в мониторе порта совпадает?
Сорян... не обратил на это внимание... конечно не совпадали.
Сейчас исправил.
Выводится 16 колонок с цифрами - матрица ..
Так и должно быть
А все работает )
Пример для Ардуины Due
Время измерения подобрано 1 сек. (5 мкс на analogRead(A0) + 483 мкс задержка между отсчетами.
Получается 2048*0.488 мс=1 сек.
Вход ловит наводку 50 Гц, для длительности 1 сек это 50-я гармоника.
Что и видно в мониторе - начиная с 0 гармоники (1007 ступенек АЦП) и максимум на 50 гармонике - 363 ступеньки. (Ну это на моей плате с проводками на входах )
Ура! ))
Большое спасибо!
Коллеги, а какие в этом примере нужно поменять константы чтобы буфер сделать не 2048 а 1024 и потом сэмплинг не 80кгц сделать а 20кгц - это мне достаточно!
Спасибо
Про частоту прям в цитировании вашем написано, про размер в коде на англицком.
Да там написано что 2048 константа находится в Splitradix.h
Нашёл её.. Интересно если её изменить то... будет работать? Там же константы внутри - массив … он универсальный или рассчитан на 2048
Второй момент... там ещё есть константа в теле проги 1023... ещё то;е поделить пополам надо?? т.е. 511 ??
И третье… по поводу 80кгц... там таймер закомментирован. вместо этого стоит задержка при чтении с порта 50мкс... это 20 килогерц как раз..
Но у меня вопрос - почему применяется delay ? это же просто задержка и всё. почему не делается анализ таймера через micros() ??? получается несинхронное чтение АЦП тогда и как следствие - Jitter...
Я не прав?
Но у меня вопрос - почему применяется delay ? это же просто задержка и всё. почему не делается анализ таймера через micros() ??? получается несинхронное чтение АЦП тогда и как следствие - Jitter...
Я не прав?
Для сравнения можете посмотреть здесь: http://arduino.ru/forum/proekty/konstruktsiya-vykhodnogo-dnya-prostoi-spektranalizator-480-polos-60-db-na-stm32f103-i-
там первый вариант точно так же - на задержке (но и написан он целиком менее, чем за день), а последний - уже по таймеру через DMA - как положено (но на доведение до ума ушло почти два месяца).
Но у меня вопрос - почему применяется delay ? это же просто задержка и всё. почему не делается анализ таймера через micros() ??? получается несинхронное чтение АЦП тогда и как следствие - Jitter...
Я не прав?
Для сравнения можете посмотреть здесь: http://arduino.ru/forum/proekty/konstruktsiya-vykhodnogo-dnya-prostoi-spektranalizator-480-polos-60-db-na-stm32f103-i-
там первый вариант точно так же - на задержке (но и написан он целиком менее, чем за день), а последний - уже по таймеру через DMA - как положено (но на доведение до ума ушло почти два месяца).
прерывание таймера это заморочисто… Я попробую по micros() потом подам синус с генератора на вход ADC и проверю что выдаёт Фурье на выходе. Для этого мне и нужен был вывод через плоттер на монитор. Графику удобнее глядеть чем числа..!
Коллеги,
не подскажите как вычислить major peak (частоту главного пика) для FFT/FHT
такая функция нужна для определения частоты спектра (делаю доплеровский радар.)
функция есть в библиотеке в библиотеке ArduinoFFT но она с плавающей точкой и медленно работает.
Есть библиотеки FFT.h и FHT.h у них логарифмический выход в байтах они очень быстрые и меня устраивают.
Но там нет стандартной функции типа major_peak();
может есть какой-то код... поделитесь пожалуйста.
можно конечно самому писать типа методом сравнения и нормализации но нужен хороший алгоритм. сложность в том например что на выходе в первых двух бинах всегда пик постоянной составляющей... что с ним делать ? отрезать ? начинать перебирать бины с 3-го??
...major peak (частоту главного пика) для FFT/FHT
...частоты спектра
А что это такое?
...major peak (частоту главного пика) для FFT/FHT
...частоты спектра
А что это такое?
major peak?
к примеру на вход FFT или FHT подан синусоидный сигнал.
На выходе в одном из бинов - пик.
Специальная подпрограмма хитрым способом находит его (отличая от первых бинов где находится пик постоянки) и используя сэмлинг рейт вычисляет фактическую частоту этого пика выдавая значение float
А если на входе будет 10 синусоид, то кто из них будет major peak?
Если частота входного сигнала и время измерения известны, то надо поделить первое на второе, и получится номер гармоники (бина). Это видимо и будет major peak.