Я - логарифм. Причём совмещая операцию извлечения корня из суммы квадратов Re и Im на последнем этапе и логарифмизации результата в одну операцию логарифмизации, в этом случае корень и вычислять не нужно, т.к. log(sqrt(R²+I²)) = 0.5*log(R²+I²).
Прошу пояснить, что такое нормализация и какую цель она преследует. Я как-то традиционно после FFT корень из суммы квадратов Re и Im гармоник вычислял и все. А логарифм... зачем? В чем смысл?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
я в целом имел в виду вывод конечного результата на дисплей/матрицу. Сам в данный момент просто принял некое значение за максимум (20 светодиодов), а получаемые значения отображаю пропорционально, получается линейная шкала. Но встречал в разных проектах и логарифмическую, поэтому и спросил
Вывод в логарифмической шкале интересен, если речь идёт от звуке (в контексте AVR это обычно так и есть). Поскольку у человека шкала слуха логарифмическая, то и результат более оправданно будет выглядеть в этом случае. Скажем, такой набор мощности звука:
Код:
P, 2P, 4P, 8P, 16P, 32P, 64P, 128P
будет воспринимать линейно. И имеет смысл на мощности 16P зажигать именно 5 светодиодов из 8, а не один, как было бы при линейной шкале (16P - как раз одна восьмая из 128P).
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Нет. Жалко времени на доп. расчёты. Но поскольку лишнее мельтешение тоже видеть не хочется, применяется другой подход. Значения спектра выводятся в виде столбиков на экран и запоминаются. При следующем показе новых данных, если новый столбик выше предыдущего, он отображается как есть, а если ниже - рисуется старый, уменьшенный на 1. Получается быстрое нарастание, но медленный спад, что выглядит приятно для глаза: http://wiselord.github.io/avr/ampcontrol/
Всем добрый вечер подскажите допустим имеем микрофон подключённый к ацп атмеги +лсд . Как можно определить пик частоты ? Хочется чет наподобие спектрального анализатора .
Спасибо видел но немного не то , хотелось бы выводить только цифры , пиковую частоту в Гц . Я так понимаю это то что мне нужно но по какой формуле высчитать эту частоту не пойму .
Спасибо видел но немного не то , хотелось бы выводить только цифры , пиковую частоту в Гц . Я так понимаю это то что мне нужно но по какой формуле высчитать эту частоту не пойму
вам хочется, чтобы кто-то за вас сделал то, что вам хочется?
у вас есть библиотека FFT, которая выдает массив амплитуд частот. неужели вы сами не можете перебрать этот массив и найти в нем наибольшее значение?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Да вы хоть почитайте про библиотеку и вообще принцип FFT! каждая частота в массиве после FFT имеет фиксированное значение, зависящее от общего количества полос (а оно в свою очередь зависит от размера буфера семплов) и частоты семплирования. Например, при частоте семплирования 32 кГц и размере буфера в 128 семплов вы получите значения амплитуд 64 частот, первая будет иметь частоту 0 Гц (т.е. это будет постоянная составляющая) вторая 250 Гц, третья 500 Гц и так далее с шагом 250 Гц, последняя 64-я будет, как вы можете догадаться 15750 Гц.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Зарегистрирован: Пт мар 19, 2021 08:58:45 Сообщений: 103
Рейтинг сообщения:0
Мужики пытаюсь въехать в ДПФ. поэтому подниму эту тему, она как раз подходит. У меня вопрос по поводу настройки периферии атмеги328, точнее таймера для измерения сигнала в 100Гц к примеру. Т.е. период 10000uS хочу произвести 32 измерения равно 312,5 uS - дискретность 3,2kHz. АЦП будет 10bit 125kHz = (11,5+2)/0,125+(4/16MHz) =108.25uS на 1 преобразование АЦП, т.е. убираемся в 312,5uS аж 2 целых два раза. Правильно ли я иду? И второй вопрос, люди вот все делают для N выборок так:
Код:
for (int k = 0; k < 1024; k++) { for (int n = 0; n < 1024; n++) { x_real[k] += x_n[n] * Math.Cos( (-2) * Math.PI * k * n / 1024 ); x_imag[k] += x_n[n] * Math.Sin( (-2) * Math.PI * k * n / 1024); } x_Ampl[k] = Math.Sqrt( x_real[k] * x_real[k] + x_imag[k] * x_imag[k] ); }
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Мужики пытаюсь въехать в ДПФ. поэтому подниму эту тему, она как раз подходит. У меня вопрос по поводу настройки периферии атмеги328, точнее таймера для измерения сигнала в 100Гц к примеру. Т.е. период 10000uS хочу произвести 32 измерения равно 312,5 uS - дискретность 3,2kHz. АЦП будет 10bit 125kHz = (11,5+2)/0,125+(4/16MHz) =108.25uS на 1 преобразование АЦП, т.е. убираемся в 312,5uS аж 2 целых два раза. Правильно ли я иду? И второй вопрос, люди вот все делают для N выборок так:
Код:
for (int k = 0; k < 1024; k++) { for (int n = 0; n < 1024; n++) { x_real[k] += x_n[n] * Math.Cos( (-2) * Math.PI * k * n / 1024 ); x_imag[k] += x_n[n] * Math.Sin( (-2) * Math.PI * k * n / 1024); } x_Ampl[k] = Math.Sqrt( x_real[k] * x_real[k] + x_imag[k] * x_imag[k] ); }
Слушайте, это же дичь какая-то в формулах. Первое - массивы с реальными и мнимыми частями СПМ наверное следует обнулить перед накоплением в цикле по к. Иначе там датчик случайных чисел получиться. Второе - под знаком тригонометрической функции должно быть вот так (если говорить про ДПФ или БПФ).
x_real[k] += x_n[n] * Math.Cos( 2* Math.PI * k * n); x_imag[k] += x_n[n] * Math.Sin( 2 * Math.PI * k * n); n=0..N-1 k=0..N/2 x_real симметричен относительно точки k=N/2, x_imag антисимметричен относительно точки k=N/2 - их можно не считать, но помнить про них, если потом потребуется обратная операция. В математическом смысле, следовало бы еще результат (x_Ampl[k]) умножить на величину интервала дискретизации. Обычно это не делают, но про него следует помнить. Вы расскажите что хотите - может подскажу. Если речь идет про "изучение", то микроконтроллер этой архитектуры вообще не для этого.
Второе - под знаком тригонометрической функции должно быть вот так (если говорить про ДПФ или БПФ).
x_real[k] += x_n[n] * Math.Cos( 2* Math.PI * k * n); x_imag[k] += x_n[n] * Math.Sin( 2 * Math.PI * k * n); n=0..N-1 k=0..N/2 x_real симметричен относительно точки k=N/2, x_imag антисимметричен относительно точки k=N/2 - их можно не считать, но помнить про них, если потом потребуется обратная операция. В математическом смысле, следовало бы еще результат (x_Ampl[k]) умножить на величину интервала дискретизации. Обычно это не делают, но про него следует помнить. Вы расскажите что хотите - может подскажу. Если речь идет про "изучение", то микроконтроллер этой архитектуры вообще не для этого.
Eddy_Em и C.H. да я понимаю что АВР-ка не подходит для данного изучения, но пока тренируюсь на ней... Хочу понять как считать Real и Imag, и уже из них угол Fi = arctg(Re/Im) и амплитуду A = sqrt(Re^2 + Im^2), в дальнейшем уже на STM32 уже понять как измеряется емкость и.т.п. У меня нет какого то проекта и STM32 я только начинаю изучать. Поэтому пока позвучал немного теории и вот первое с чем столкнулся изложил выше. C.H. по поводу примера формул, почему k=0..N/2 и n=0..N-1? где можно об этом прочитать и аргуметировать
по поводу примера формул, почему k=0..N/2 и n=0..N-1? где можно об этом прочитать и аргуметировать
Это называется основы ЦОС (Цифровая обработка сигналов). 1. Частота Найквиста (её же определяет теорема Котельникова) - Спектр, сигнала подлежащего преобразованию АЦП должен быть ограничен половиной его частоты дискретизации, ИНАЧЕ наложения спектральных линий друг на друга. 2. k=0..N/2 - это следствие функций синус и косинус. Считать можно, но можно просто взять их отраженную копию относительно точки k=N/2.
И прошу прощения - память моя подвела (этой темой 17 лет не занимался плотно), 1/1024 (исходя из N=1024) должно быть под синусом и косинусом.
Это все можно прочитать в любом букваре по ЦОС. Классика Марпл–мл. С.Л. Цифровой спектральный анализ и его приложения.
kote52, ну так лучше на ПК и проверять все, а когда уж заработает — переносить код на МК. Только МК, умеющий флоаты и имеющий математический сопроцессор, стоит ой как дорого. Иначе придется искать реализацию простого БПФ в целых числах. Но для спектрального анализа нет смысла БПФ применять: ведь фаза нам не нужна, соответственно, не нужны и комплексные числа. Для этого сгодится ДКП, а косинусы можно таблично вычислять.
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Все эти преобразование можно на любом камне считать - они же не потоковые (не реал тайм). Тем более Вы на Си пишете и уж как нибудь float там будет работать. Мой опыт показывает, что само по себе ДПФ нужно лишь как обучалка. В приложениях или уж БПФ или ряд Фурье (гармоники).
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения