Q-ti

FFT-спектральный анализатор avr

11 сообщений в этой теме

Q-ti    3

Доброй ночи .
Как реализовать вывод на lcd в цифрах , частоты с максимальной амплитудой на промежутке от 0 до 120Гц. С частотой дискретизации 240 Гц .
Прошу помочь в написании кода , потому что в математике 0 .

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alexeyslav    624

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

Дискретизацию надо поднять хотябы раз в 10 - до 2400Гц. тогда уже можно применять математику не упираясь в теоретический предел. Но всеравно конечность выборки даст о себе знать, точность будет так себе.

Суть метода проста - умножаем исходную выборку на синус интересующей нас частоты - это элементарная операция сдвига сигнала по частоте! Потом надо высчитать DC(постоянную) составляющую результирующего сигнала и у вас в кармане численная характеристика составляющей исходного сигнала выбранной частоты - ведь в результате сдвига выбранная частота сдвигается в постоянный ток(частота = 0).

Если не ошибаюсь, реализация такого алгоритма и называется ДПФ.

Только на практике из-за дискретности функции и конечности интервала выборки(объёма памяти) результат будет так себе, и для остроты пиков желательно перед применением ДПФ на входную выборку применить функцию "окна" - плавно свести начало и конец выборки к нулю, чтобы небыло разрыва.

Изменено пользователем Alexeyslav

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Q-ti    3

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

t.JPG

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alexeyslav    624

То что я и описал. Только учти, матиматика там ресурсоёмкая, контроллер нужен с достаточно большим объёмом памяти. Во-первых, чтобы поместить сам буффер(в программе это 256 семплов - если 16-битная выборка то 512 байт памяти нужно минимум) и во вторых, результат - это уже несколько больше, поскольку числа будут уже не целые... вобщем на дешёвых и широко распространённых контроллерах(типа меги 8-й) это реализовать НЕРЕАЛЬНО, нужны DSP-контроллеры иначе считать такую выборку как в программе будешь минуту.

Да, вижу в программе к выборке применяется окно Ханнинга.

И советую, сначала реализовать алгоритм на более человеческих условиях - делать всю математику на ПК на любом языке(хоть на бейсике в экселе, или на паскале), а уже ПОТОМ после того как получишь вменяемый результат переносить в МК ибо камней найдёшь массу, граблей насобираешь а делать это сразу на МК в сотню раз больнее.

Изменено пользователем Alexeyslav

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Загрузка...
ARV    327
3 часа назад, Q-ti сказал:

Прошу помочь в написании кода

Могу написать код за деньги. Если интересует - пишите в л.с.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Q-ti    3
7 минут назад, MagicianT сказал:

Похоже я и мои посты здесь невидимы.

Спасибо , посмотрю .

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Сообщения

    • Разбираюсь с входами подскажите подтяжка к + и - это с внутренним резистором или нет? //вход с подтяжкой к + GPIOA->CRL &= ~GPIO_CRL_CNF0; GPIOA->CRL |= GPIO_CRL_CNF0_1; GPIOA->ODR |= GPIO_ODR_ODR0;   //вход с подтяжкой к - GPIOA->CRL &= ~GPIO_CRL_CNF1; GPIOA->CRL |= GPIO_CRL_CNF1_1; GPIOA->ODR &= ~GPIO_ODR_ODR1;
    • Гость иван
      у меня еще два кольца вместе склеенных лежит, Методом подбора витков, оно затребовало 15+ 15,,, мотал я его заводским жгутом от петли размагничивания монитора Там ооочень плотно скручена жила, Я его испытывал,  осцилограмма чистейшая,,,, но хх у него 400ма Зараза Вот и думаю, может хрен с ним с этим хх? да поставить лучше кольцо? инвертор то, на 1,5киловатта
    • А конденсатор сетевого выпрямителя поменяли? Может он просто высох, вот и держит напругу стабилизация только на верхушках синусоиды сети, а в ямах проваливается, не хватает запаса на кондёре?
    • В общем разобрался со всеми проблемами: 1 которая была раньше (контролер прошивается но не стартует) решилась заменой STM. 2 неработал генератор - капелька припоя закотилась под 5 и 6 ножку контролера и зекоротила кварц.
    • просто широким жалом "отвертка" прогревается все 4 пина с одной стороны, с торца - скальпель или тонкую отвертку, приподнял одну сторону, взял пинцетом ИС - с другой стороны только коснуться "отверткой-жалом" и соик-8 снят ... сколько так ЕЕПРОМ-ок 24-х в свое время снято было без фена и т.п. ...
    • Гость иван
      Если разбить перевичку, то вторая плечо будет длиннее провод, несиметрия получится, А вот намотать ее между двух половин вторички, ,,  хмм, Это более реально, Хотя плохая связь между обмотами, может быть изза микрозазора в сердечнике Я то его на краску посадил
    • Нам - и даром не нужно ... тебе - сказали куда ходить!