Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
LoPuX
2 / 2 / 3
Регистрация: 03.05.2015
Сообщений: 63
1

БПФ на Atmega8A

09.05.2015, 23:57. Просмотров 2205. Ответов 13
Метки нет (Все метки)

Здравствуйте, подскажите пожалуйста, вот в голову пришло сделать гитарный тюнер. Сдуру сразу развел плату, четыре семисегментных индикатора, усилитель для микрофона на вход к ацп. Все спаял, и решил писать код. БПФ. А оказывается что памяти то нужно много. Так вот собственно что, получится ли у меня что нибудь?
Диапазон определяемых частот 70-400 Гц.
Допустим возьму я частоту дискретизации Fs=2048 Гц (для наглядности), количество отсчетов N=1024, значит выборка будет происходить за t=0,5 с (не считая вычислений), (t=N/Fs).
А шаг частот в спектре f=2 Гц (f=Fs/N).
После, чтобы повысить точность (уменьшить шаг) добью массив значений N его тремя нулями после каждого отсчета; надеюсь я понятно рассуждаю: s[N-1]=>s'[4*(N-1)]. Так значит точность увеличилась до f=Fs/(4*N)=0,5 Гц. Мне пойдет).
Вопрос, реально ли это на Atmega8A? Массив s'[4*(N-1)], для каждого значения нужно 10 бит, итого если N=1024 нужно 5,1 кБайта. На микроконтроллере всего 8 кБ.
Знаком с C++, но доразобраться могу в чем надо, с ассемблером все не очень хорошо, но если надо будет разберусь. Хотел взять за основу реализацию на C https://ru.wikibooks.org/wiki/%D0%A0...80%D1%8C%D0%B5. Там массив мнимой части сигнала используется, мне его нужно вычеркнуть, и еще в нем есть зеркальный эффект, как я понимаю это лишние вычисления, допустим их я тоже вычеркну, подправлю код. Понимаю что лучше взять что-нибудь на ассемблере, если есть что подскажите.
Какие пути решения, что вы мне можете посоветовать?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2015, 23:57
Ответы с готовыми решениями:

ATmega8a, ATmega32a и т.д.
Доброго времени суток! Компания атмель вместо родных нам мег восьмых, шестнадцатых и т.д. стала...

Atmega8A-AU + ESP8266
Уважаемые воротилы AVR, у меня к Вам вопрос. Заварганил я значит платку на Atmega8a, законнектил...

Atmega8a ISP 5V
Здравствуйте Можно ли прошивать Atmega8a у которого питание 3.3v, программатором c 5v, если на...

atmega8a ADC
Читаю доку на atmega8 не могу понять что значит цифровое питание и аналоговое при использовании...

Сон в Atmega8a
Решил на днях попробовать спяцие режимы авр. В качестве подопытного использую Atmega8a. С точки...

13
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
10.05.2015, 00:07 2
Спектроанализатор и визуализация
0
LoPuX
2 / 2 / 3
Регистрация: 03.05.2015
Сообщений: 63
10.05.2015, 00:21  [ТС] 3
raxp, т.е. все-таки это реально сделать на 1024 отсчета и используя бпф элм чена?
0
Ethereal
5496 / 1948 / 255
Регистрация: 17.02.2013
Сообщений: 2,895
10.05.2015, 01:13 4
DELETED
0
LoPuX
2 / 2 / 3
Регистрация: 03.05.2015
Сообщений: 63
10.05.2015, 01:24  [ТС] 5
Ethereal Да, справедливо, точность не повысится, это интерполяция. Значение полученной мной частоты не будет равняться истинному значению. Но так результат будет поприемлемей чтоли. у меня же 4 семисегментных индикаторов. Последний будет показывать десятичную часть. Я бы с радостью увеличил количество отсчетов, но массив будет расти, и время выборки. А у меня отстойный мк. Вообщем помогите советом.
0
ValeryS
Модератор
7484 / 5666 / 726
Регистрация: 14.02.2011
Сообщений: 19,374
Завершенные тесты: 1
10.05.2015, 10:06 6
Цитата Сообщение от LoPuX Посмотреть сообщение
Массив s'[4*(N-1)], для каждого значения нужно 10 бит, итого если N=1024 нужно 5,1 кБайта.
умножай еще на 2
для FFT нужны комплексные числа, плюс работать нужно с плавающей арифметикой
для 1024 точки нужно по грубым прикидкам 10000 комплексных умножений
далее расчитывать синусы и косинусы на лету будешь? скорость упадет, в памяти таблицу хранить ? места много
мое мнение, камень не пойдет для реальной работы
1
LoPuX
2 / 2 / 3
Регистрация: 03.05.2015
Сообщений: 63
10.05.2015, 10:37  [ТС] 7
ValeryS, Спасибо что разъяснили.
0
ValeryS
Модератор
7484 / 5666 / 726
Регистрация: 14.02.2011
Сообщений: 19,374
Завершенные тесты: 1
10.05.2015, 11:05 8
Лучший ответ Сообщение было отмечено LoPuX как решение

Решение

LoPuX,
я сейчас работаю над анализатором спектра от 1000 до примерно 40000 гЦ
точнее мне нужно ловить резонансную частоту колебательного контура в заданном диапазоне
взял за основу камень stm32f103 и то по прикидкам для нормальной скорости нужно 256 отсчетов
пока остановился и пишу программку для большого компа для анализа алгоритмов
а там уже будет видно что проще или генератор белого шума и БПФ
или ГКЧ(Генератор качающейся частоты) и простейший БПФ на 4 отсчета
рекомендую
"Руководство программиста по работе со звуком" Тим Кинтцель http://www.livelib.ru/book/1000003311
Часть VI. Обработка звука
Глава 24. Преобразования Фурье
там эти преобразования изложены на пальцах, минимум математики
1
LoPuX
2 / 2 / 3
Регистрация: 03.05.2015
Сообщений: 63
10.05.2015, 12:57  [ТС] 9
ValeryS Спасибо за литературу, все понятно, да еще и с кодом. Думаю тоже на arm лучше записывать, придется новое осваивать)))
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
10.05.2015, 13:49 10
Если бюджет позволяет, то лучше взять STM32F4 там какой никакой всё же математический сопроцессор имеется http://www.compel.ru/lib/ne/2012/6/3...dre-cortex-m4/
0
ValeryS
Модератор
7484 / 5666 / 726
Регистрация: 14.02.2011
Сообщений: 19,374
Завершенные тесты: 1
10.05.2015, 13:58 11
Цитата Сообщение от Витальич Посмотреть сообщение
Если бюджет позволяет, то лучше взять STM32F4
так на пробу то я взять могу
но в серию каждую копейку экономят, если не пойдет на 103 то буду надавливать на F4 там еще и частотку задрать можно
0
Витальич
10.05.2015, 14:12
  #12

Не по теме:

Вот анонсирует ST кристаллы F7, интересно будут снимать что нибудь с производства, если да, то первый кандидат F1. F0 не тронут, имхо конечно.

0
Ethereal
5496 / 1948 / 255
Регистрация: 17.02.2013
Сообщений: 2,895
10.05.2015, 22:19 13
Цитата Сообщение от LoPuX Посмотреть сообщение
вот в голову пришло сделать гитарный тюнер
Ты хочешь сделать скорей частотомер, чем тюнер. Видел я тюнеры, в них кнопкой выбираешь ноту и если струна звучит выше/ниже, то он стрелкой показывает. Но если струна звучит вообще не в кассу, то он совершенно беспомощен. Даже выше/ниже показать не может. Очевидно, в тюнерах какой-то весьма простой алгоритм, а не тот, что собираешься ваять ты. От этого и в убогие ресурсы влезает.

Возможно в тюнерах вообще ДПФ примерно такое как в АОН-ах. Т.е наготово прописаны синус/косинусоиды на Ля (к примеру) и на частоты чуть выше/ниже этого Ля. И так на каждую из 6 нот. Может там оцифровка вообще однобитная. В АОН-ах именно такая и была. Вообще без ЦАП-а. И все всюду влезало.
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
10.05.2015, 22:26 14
Примитивный гитарный тюнер на буратине
0
10.05.2015, 22:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2015, 22:26

ATmega8a-pu и TSOP v4836
есть TSOP v4836 подключен как указано на схеме. Выход подключен к ATmega8a-pu PD2 и подтянут через...

Контроллеры с буквой А (ATmega8A и др.)
Всем добрый день. Абсолютно случайно наткнулся в нигазине на ATmega8a. Посмотрев даташит, был...

Делитель частоты (Си, ATmega8A)
Здравствуйте. Совсем недавно стал изучать микроконтроллеры семейства AVR. Мне дали задание -...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru