Цветомузыка без ПК

Предлагаю к сборке вариант автономной цветомузыки. Этот вариант цветомузыки, в отличие от варианта цветомузыки на Arduino, не требует для работы персонального компьютера. Всю обработку аудио потока выполняет микроконтроллер STM32F103C8T6.
Переключение музыкальных и динамических программ осуществляется кнопочками или по Bluetooth со смартфона.



Схема цветомузыки:

Для сборки контроллера вам потребуется:
Светодиодная лента

Модуль микроконтроллера

Модуль bluetooth (если требуется управление со смартфона)

Модуль микрофонного усилителя

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


Можно использовать обе схемы. Вы можете выбрать контакт аналогового(аудио) входа A0 или A1 на модуле STM32 подключением вывода A15 к общему ( G ) выводу или оставив A15 не подключённым. После изменения входа требуется перезагрузка микроконтроллера.

Программа для микроконтроллера STM32 доступна для скачивания c google диска. Выберите прошивку MC_**led.HEX c номером совпадающим с количеством светодиодов в вашей ленте:
30,60,72,90,120,144,150,180,210,216,240
Программирование STM32 выполняется через переходник USB-UART с помощью программы Flash loader demonstrator. В интернете есть несколько описаний процесса программирования STM32. Вы можете выбрать описание которое вам покажется более понятным.

Если позднее у вас изменится количество светодиодов в ленте вы сможете настроить их количество с помощью кнопки подключённой к выводу B8. Нажмите и удерживайте кнопку пока все светодиоды не будут задействованы.
Сохраните режим после установки количества светодиодов в ленте !!!

Сохранение установленного режима производится кнопкой подключённой к выводу B9. Сохранённый режим будет устанавливаться при включении устройства. Для выполнения сохранения нажмите и удерживайте кнопку 3-4 секунды.

Назначение кнопок:
Кнопка(контакт) B9 – Сохранение установленного режима как режима при включении питания;
Кнопка(контакт) B8 – Установка количества активных светодиодов в ленте;
Кнопка(контакт) B7 – Выбор динамической программы;
Кнопка(контакт) B6 – Выбор музыкальной программы;
Кнопка(контакт) B5 – Включение/выключение режима перебора динамических программ;
Кнопка(контакт) B4 – Установка яркости ленты.
Кнопка(контакт) B3 – Установка темпа переключения.

Управление возможно и/или c кнопок или из приложения под Android.

Программа "Цветомузыка" под Android доступна для скачивания на Google Play.




Для подключения к контроллеру с модулем bluetooth просто коснитесь значка

При первом подключении, если устройство не обнаруживается, то выполните сопряжение c модулем в настройках bluetooth телефона!!!

Приятного отдыха.

Видео работы:
Музыкальные программы

Динамические программы
Добавить в избранное +130 +204
+
avatar
  • ABATAPA
  • 30 августа 2018, 07:47
+8
Цветомузыка… 80-ые… Эх…
+
avatar
  • Nefelisk
  • 30 августа 2018, 07:48
+13
«Так, а что значит заметка „в отличии от Ардуино не требует ПК“. На Ардуино так же можно собрать цветомузыку на адресной ленте с разных источников (микрофон, аудиовыход любого устройства) с управлением по IR, кнопкам или любому другому беспроводному соединению которое захочешь прикрутить. И при всем при этом не будет требовать пк. Не понимаю смысла в данном заявлении)»
+
avatar
  • Alex_74
  • 30 августа 2018, 07:56
+1
Типа такой — www.youtube.com/watch?v=BRrXSYXCs88
+
avatar
  • juraspb
  • 30 августа 2018, 08:20
+5
У меня до этой на mysku были три статьи цветомузыка на Arduino. Обработку сигнала там выполнял ПК.
+
avatar
  • Nefelisk
  • 30 августа 2018, 10:21
+2
«А, в таком случае возможно оправданно. Просто „звучало“ так, будто Ардуинка на это не способно а СТН запросто...»
+
avatar
0
сейчас есть примеры отличной светомузыки на ардуино без пк
+
avatar
  • Mixnsk
  • 30 августа 2018, 10:17
+1
Или вот вариант от гайвера, тоже уложился в ардуинку

www.youtube.com/watch?v=nu31By9Phdc
+
avatar
  • Deluks
  • 30 августа 2018, 19:30
0
Гавер топ! =)
+
avatar
  • juraspb
  • 04 октября 2018, 22:24
-1
Я сам не пишу о своих устройствах крутое. Это решать вам.
www.youtube.com/watch?v=sFQip-zjMoY
www.youtube.com/watch?v=5vanh8qdEC8 — итог: отзывы о Гайвере
www.youtube.com/watch?v=DBuPlFtg0Nw
+
avatar
  • BigB
  • 30 августа 2018, 22:04
+2
Его версия 2.0 www.youtube.com/watch?v=UCz8JVM37BM
+
avatar
  • Boing
  • 19 октября 2018, 23:05
0
большое спасибо! подписался на канал, буду постигать азы Ардуино… коль с 8366 не взлетело от недостатка мозгов и пошаговых мануалов)
+
avatar
  • demon54
  • 30 августа 2018, 07:49
+2
Класс, жаль на STM софт не в исходниках )))
+
avatar
+2
Исходники не выложите? Очень любопытно посмотреть на реализацию преобразования Фурье
+
avatar
  • Dimon_
  • 30 августа 2018, 08:04
+1
Да нет там никакого Фурье. Исключительно по уровню громкости. Это по первому примеру видно. На малых громкостях хоть как-то к вступлению привязано. А основная часть композиции — отвлечённые мерцания, бо уровень звука одинаково громкий.
+
avatar
  • AndyBig
  • 30 августа 2018, 08:10
+1
Нет, привязка цветов к частотам прослеживается.
+
avatar
  • juraspb
  • 30 августа 2018, 08:22
+2
Ищите STM32F10x_DSP_Lib. Фурье кинул к прошивкам.
+
avatar
  • AndyBig
  • 30 августа 2018, 09:06
+1
Вот один из вариантов БПФ для STM32F103 без сторонних библиотек — github.com/yohanes-erwin/stm32f103-keil/tree/master/dsp-fft-audio-spectrum-analyzer
+
avatar
+2
Вот вырезка из моего БПФ, если интересно (хочу собрать анализатор спектра на СТМ32), все писал сам на С++, библиотек не использую:
Дополнительная информация
for (int i = 0; i < FFT_SIZE; ++i)
	{
		int index = __RBIT (i) >> (31 - FFT_SIZE_BITS);
		int value = (source [index] - 2010) << (CMPLX_FRACTION_BITS - 11);
		//value = value*g_fftWindow [index] >> CMPLX_FRACTION_BITS;
		g_fftData [i] = CCmplx (value, 0);
	}
	
	// How far the second element is located from the first one.
	// Initially they are located one after another, so it is 1.
	// Also, how many member pairs each FFT has. The first one
	// has two members or one pair.
	int stride = 1;

	// How many different FFTs we must compute. Since the first
	// FFT consists of only two elements, we must initially compute
	// FFT_SIZE/2 functions.
	for (int nFuncs = FFT_SIZE_D2; nFuncs; nFuncs >>= 1)
	{
		// Compute all FFTs
		int pos1 = 0;
		for (int nFunc = 0; nFunc < nFuncs; ++nFunc)
		{
			int nRoot = 0;
			for (int nMember = 0; nMember < stride; ++nMember)
			{
				int pos2 = pos1 + stride;
				
				CCmplx secondElem = g_fftData [pos2]*g_unityRoots [nRoot];
				g_fftData [pos2] = g_fftData [pos1] - secondElem;
				g_fftData [pos1] = g_fftData [pos1] + secondElem;

				nRoot += nFuncs;
				++pos1;
			}

			pos1 += stride;
		}

		stride <<= 1;
	}
}
Оцифровываю входной сигнал на частоте 32 КГц, стерео, длина БПФ — 1024 сэмпла (гармоники 31.25 Гц — 16000 Гц), одно преобразование вместе с нормализацией результата (вычисление квадратного корня) занимает на STM32F103C8T6 (которая по факту оказалась 128 Кб) около 6 мс (т.е. два канала — чуть больше трети процессорного времени). Компилирую IAR (отлично оптимизирует).

Использую 32-битные вычисления в формате S15.16 (т.е. знак, 15 бит целая часть, 16 — дробная), код требует 8 Кб ОЗУ для вычисления БПФ и 4 Кб ПЗУ (512*4*2) под таблицу корней из единицы (от w^0 до w^511, вторая половина не нужна). За счет применения арифметики 32 бит можно не делить на 2 результат вычисления каждой «бабочки», а поделить один раз на 1024 в конце преобразования. Еще 8 Кб требуется для буфера АЦП (два канала по 2048 сэмплов по 16 бит). В принципе, можно сократить буфер почти в 2 раза (1024 сэмпла на каждый канал + небольшой буфер для АЦП, откуда копировать данные), но пока в 20 Кб ОЗУ укладываюсь.

Написал свой класс CCmplx для работы с комплексными числами, разместил в заголовке (это важно, чтобы компилятор мог инлайнить), в нем ничего особенного — простая арифметика, но так код выглядит красивей. Также следует отметить, что IAR прекрасно соптимизировал умножение двух 32-разрядных чисел, приведенных к 64-битному типу в одну команду SMULL.

Пробовал на РС реализовывать Фурье с 16-разрядной арифметикой — с делением на два на каждом этапе получается более-менее приемлемая точность, но явно хуже, чем 32 бита. Скорость на СТМ такого алгоритма не смотрел, т.к. 32-битный выполняется вполне быстро.
+
avatar
  • Boing
  • 19 октября 2018, 23:07
0
это так круто звучит, что захотелось применить! Только одна проблема… я нуб абсолютно во всех словах, которые у вас написаны :))))
+
avatar
  • mVlad77
  • 05 ноября 2018, 17:33
0
Труд, наверное хороший! Но потратив целый рабочий день на поиск быстрого преобразования фурье, оказалось, что
библиотека stm_fft целиком на ASM (скорость на порядок быстрее), уже давно лежит в комплекте ARDUINO у Roger Clark.

Кому итог важнее — прямая ссылка
github.com/rogerclarkmelbourne/Arduino_STM32/tree/master/STM32F1/libraries/stm_fft

PS. У автора этого проекта две проблемы — 1. схема аудио входа заметно усложнена. Видел несколько вариантов, везде гораздо проще! 2. Отсутствие исходников прошивки, хотя автор использует чужой код который подразумевает публикацию исходников!
+
avatar
  • AndyBig
  • 05 ноября 2018, 17:42
+1
На порядок — это вряд ли, даже в разы — вряд ли :) Современные компиляторы отлично оптимизируют код.
+
avatar
  • mVlad77
  • 05 ноября 2018, 17:52
-1
от формата расчетов (типа чисел) зависит скорость.
Там на ASM не используются дробные числа (иначе таких сложностей и заморочек я не понимаю) — все в целых. Думаю, что даже два порядка можно выиграть по сравнению с компилятором, который подставляет подпрограммы вычисления вещественных чисел. Тем более по сравнению с кодом, который опубликован выше.
+
avatar
  • AndyBig
  • 05 ноября 2018, 18:10
0
Так компилятор-то тут при чем? Если написать на Си целочисленную математику, аналогичную ассемблеровскому варианту, то и результат по скорости работы будет сопоставим с ассемблерным :)
Так бы и написали — библиотека с целочисленным БПФ (скорость на порядок быстрее), тогда бы и вопросов не было :)
+
avatar
  • mVlad77
  • 05 ноября 2018, 19:18
0
Не забивайте себе голову тонкостями. Компилятор как раз скрывает ту огромную пропасть между вычислениями с плавающей точкой и целочисленными на ASM. Вам было лень глянуть по ссылке, лишь бы прицепиться.

Глядите код FFT, кто хочет разрабатывать гирлянды. Мне вот пока некогда удивлять разработками, а окно с гирляндой на НГ требует звания «самого красивого и неповторимого» в доме.
Так что ждем разработок с открытым кодом! Кстати, в VK автор честно говорил, что надергал эффектов из файла эффектов, собранного А. Гайвером, который ему там выложили.
+
avatar
  • AndyBig
  • 05 ноября 2018, 20:56
0
Не забивайте себе голову тонкостями. Компилятор как раз скрывает ту огромную пропасть между вычислениями с плавающей точкой и целочисленными на ASM.
Простите, но это у Вас голова забита непонятно чем. Вы приводите один алгоритм с меньшей вычислительной мощностью и менее точным результатом и пытаетесь сравнить его с другим алгоритмом, который больше вычисляет и дает более точный результат. При этом разницу в скорости работы списываете только на ASM :)
И даже в этом случае заявления о «скорость на порядок быстрее» — совершенно голословно и не обосновано. Такую разницу можно получить только если в компиляторе отключить всякую оптимизацию, а в ассемблере тщательно вылизать код до последнего байта.
+
avatar
  • juraspb
  • 06 ноября 2018, 17:15
0
Почитайте комментарии в VK повнимательней, я всех прошу присылать видео интересных эффектов, а код пишу сам.
+
avatar
  • mVlad77
  • 06 ноября 2018, 20:30
0
Поймаю Вас, господин Петруханов, на лжи.
+
avatar
  • juraspb
  • 08 ноября 2018, 14:35
0
В файле указан источник с видео.

/*
  Скетч создан на основе FASTSPI2 EFFECTS EXAMPLES автора teldredge (www.funkboxing.com)
  А также вот этой статьи https://www.tweaking4all.com/hardware/arduino/adruino-led-strip-effects/#cylon
  Доработан, переведён и разбит на файлы 2017 AlexGyver
  Отправляем в монитор порта номер режима, он активируется
*/

Вот эти видео: www.tweaking4all.com/hardware/arduino/adruino-led-strip-effects/#cylon
+
avatar
+1
Идея использования чисел с плавающей точкой отпала после первой же попытки — достаточно было глянуть код, который генерирует компилятор для их поддержки, чтобы понять, что МК не успеет.
Тем более по сравнению с кодом, который опубликован выше.
Посмотрите внимательнее, там используются целые числа, представляющие дробные с помощью фиксированного масштаба. Поэтому «тем более» в данном случае абсолютно неприменимо.

Вышеприведенный код (совместно с вычислением 511-ти абсолютных величин результата) занимает треть процессорного времени на 72 МГц стм32 при независимой обработке двух каналов с частотой дискретизации 32 КГц. Для моей задачи нет смысла пытаться делать быстрее.

Хотя пути для оптимизации есть:

1. Использование Radix-4 FFT вместо Radix-2. Позволяет выполнять на 20 или 25% (не помню точно) меньше умножений. Минус — алгоритм сложнее.
2. Использования 16-битной арифметики, чтобы результат умножения умещался в 32-битный регистр. Позволит использовать более быстрые команды умножения и упростит последующий сдвиг (хотя IAR оказался весьма хорош и для 32-битного варианта). Минус — падает точность, плюс надо делить результат умножения каждой бабочки на 2, это дополнительные команды сдвига.

В итоге, думаю, качественный код на асме для Radix-4 FFT будет раза в полтора быстрее того, что опубликован выше. Бесспорно, иногда это необходимо, но для моей задачи не надо точно. Если захотите сравнить, у меня вычисление блока FFT длиной 1024 сэмпла совместно с оконной функцией занимает около 5 мс. Сами ST заявляют около 3 мс для этого же МК, вот как раз и есть 1.5 раза.

И да, не надо недооценивать компиляторы — тот же IAR обеспечивает очень хорошую оптимизацию выходного кода.
+
avatar
  • AndyBig
  • 05 ноября 2018, 19:07
+1
тот же IAR обеспечивает очень хорошую оптимизацию выходного кода.
По-моему еще лет 5 или 6 назад на электрониксе поднималась тема качества кода от разных компиляторов на примере нескольких алгоритмов. IAR был на одном из первых мест. Самая тщательная ручная оптимизация выдаваемого им ассемблерного листинга давала выигрыш по скорости не больше 10%, а по объему кода — вообще до 5% :)
С тех пор, я думаю, компиляторы не стали хуже :)
+
avatar
  • mVlad77
  • 05 ноября 2018, 19:28
0
Это видимо когда код вида int a = 5 + 2; такая разница.
а вот когда ASM код продумано использует команды и возможность доступа к данным через режимы адресации процессора, двойной выигрыш запросто.
+
avatar
+1
Вы, видимо, не знакомы с кодом, который генерируют современные компиляторы. Возьмите IAR, попробуйте, поймете сами.

Я начинал программирование как на Z-80, так и на x86 именно с ассемблера. На Z-80 не было альтернатив, на х86 на асме иногда и сейчас пишу код, который обгоняет компилятор студии в два раза (но компилятор у студии в этом плане так себе, надо сказать, да и бывают алгоритмы, которые упираются в производительность памяти, поэтому тут хоть оптимизируй, хоть нет, скорость не растет). Также пишу для AVR исключительно на асме. Поэтому первым делом, когда начал изучать стм32, я ознакомился с его системой команд. И лично осознал ранее неоднократно виденный посыл — писать на асме под RISC — дело неблагодарное. Но тем не менее, я всегда смотрю, что генерит мне IAR в интересных местах. И, надо сказать, результат приятно удивляет.
+
avatar
  • AndyBig
  • 05 ноября 2018, 20:48
0
Это видимо когда код вида int a = 5 + 2; такая разница.
Там нормально разбирающиеся люди проводили разбор и Ваш пример (на который вообще не генерируется свой код, кстати) там бы не проканал :)
а вот когда ASM код продумано использует команды
Вы, наверное, не смотрели листинги после компилятора, иначе бы знали, что компиляторы очень продуманно используют и код и даже многие трюки для ускорения или облегчения программы :)
+
avatar
  • mVlad77
  • 05 ноября 2018, 19:35
0
Выложите пример. Только не кусок мифического кода, а полный.
1. Заполнение массива SINусом,
2. 100000 раз вычисление FFT вашей чудо функцией
3. 100000 раз вычислением функцией из библиотеки
4. Ну и разницу в часах :) времени работы.

а так рассказывать сказки и я могу.
+
avatar
0
а так рассказывать сказки и я могу.
Но вы, похоже, не умеете читать. Я вам выше писал результат. Повторю еще ровно один раз:

1. Моя функция вычисляет FFT совместно с оконной функцией (если не знаете, что это, то она требует еще 1024 умножения) за примерно 5 мс. Точных значений не запоминал, т.к. мне достаточно такого порядка точности.
2. Исходные данные на время выполнения не влияют. Можно заполнить массив нулями, можно — данными с АЦП, результат одинаковый, погрешность — десятки тактов (на частоте 72 МГц).
3. Библиотека по вашей ссылке от ST (вы сами-то хоть открывали исходник?). Результат работы библиотеки от ST без вычисления оконной функции на данном МК я приводил ранее — 3 мс.
4. Итого, моя функция + 1024 умножения = 5 мс. Функция от ST = 3 мс. Разница около полутора раз (3*1.5 = 4.5, что весьма близко, если убрать 1024 умножения).
5. Обратите внимание на разрядность — ST использует 16-битную арифметику, я — 32.
6. ST оптимизировали первый проход, где по факту умножений делать не надо (там умножения всегда на 1), я этого не делал (делаю умножения на 1).

Вывод: основной прирост за счет разных алгоритмов, а не за счет ручного написания на асме.
+
avatar
  • mVlad77
  • 05 ноября 2018, 20:11
0
Давайте я сам по приложенной методике потестирую? А то цифры Ваши у меня сомнения вызывают :) Но, как говорится — нет кода, каждый останется при своем мнении.

Про Z80 я пассаж оценил :) я там пару игр написал на чистом ASM. А знаете, я еще на КР580ВМ80А писал копировщик, который на вход принимал данные с магнитофона, и тут же этот бит выдавал на выход. Так мы «защищенные» от копирования игры на БК-0010, полученные на кассетах из ногинск-7 копировали :)
+
avatar
  • AndyBig
  • 05 ноября 2018, 20:51
0
А знаете, я еще на КР580ВМ80А писал копировщик
Вам пора уже окунуться в современный мир с современными компиляторами :)
+
avatar
0
Ваш копировщик можно было заменить компаратором, далеко не все «файлы», скопированные таким образом потом читались даже на первой копии (на спектруме проверяли такое).
Давайте я сам по приложенной методике потестирую?
Тестируйте. Ниже сгенерированный IAR'ом код. Необходимы только две таблицы — оконная функция (1024 32-битный числа, все могут быть 65536, вам она не нужна) и таблица корней из единицы (512 корней, каждый состоит из двух 32-битных чисел, значения в интервале от -65536 до 65536, первый — {65536, 0}, второй — {65534, 402} и т.д., чтобы было понятно). В принципе, если скорость не зависит от исходных данных, скорее всего и от корней зависеть не будет, можно взять любые данные, может можно от ST адаптировать.

код
#define SHT_PROGBITS 0x1

        EXTERN g_fftWindow
        EXTERN g_unityRoots

        PUBLIC _Z5DoFFTPti
        PUBLIC g_fftData


        SECTION `.bss`:DATA:REORDER:NOROOT(2)
        DATA
g_fftData:
        DS8 8192

        SECTION `.text`:CODE:NOROOT(2)
        THUMB
_Z5DoFFTPti:
        PUSH     {R4-R11,LR}
        SUB      SP,SP,#+8
        MOVS     R2,#+0
        LDR.N    R3,??DataTable2
        LDR.N    R4,??DataTable2_1
??DoFFT_0:
        RBIT     R5,R2
        LSRS     R5,R5,#+21
        LDRH     R6,[R0, R5, LSL #+1]
        LSRS     R5,R5,#+1
        SUBS     R6,R6,R1
        LDR      R5,[R4, R5, LSL #+2]
        LSLS     R6,R6,#+5
        MULS     R6,R6,R5
        ASRS     R6,R6,#+16
        STR      R6,[R3], #+4
        ADDS     R2,R2,#+1
        MOVS     R6,#+0
        CMP      R2,#+1024
        STR      R6,[R3], #+4
        BLT.N    ??DoFFT_0
        MOVS     R2,#+1
        MOV      R7,#+512
        MOVS     R1,#+0
        B.N      ??DoFFT_1
??DoFFT_2:
        MOVS     R1,#+0
        CMP      R7,#+0
        BLE.N    ??DoFFT_3
        MOV      R2,R0
??DoFFT_1:
        STR      R2,[SP, #+0]
        STR      R7,[SP, #+4]
??DoFFT_4:
        LDR      R0,[SP, #+0]
        LDR.N    R6,??DataTable2_2
        CMP      R0,#+0
        BLE.N    ??DoFFT_5
        LDR.N    R2,??DataTable2
        ADDS     R0,R0,R1
        ADD      R11,R2,R0, LSL #+3
        LDR.W    R0,[SP, #+0]
        ADD      R12,R2,R1, LSL #+3
??DoFFT_6:
        LDR      R9,[R6, #+4]
        LDR      LR,[R11, #+4]
        LDR      R8,[R6, #+0]
        LDR      R10,[R11, #+0]
        SMULL    R2,R3,R8,R10
        SMULL    R4,R5,R9,LR
        LSRS     R2,R2,#+16
        LSRS     R4,R4,#+16
        ORR      R2,R2,R3, LSL #+16
        ORR      R4,R4,R5, LSL #+16
        SUBS     R2,R2,R4
        SMULL    R4,R5,R9,R10
        SMULL    R8,R9,R8,LR
        LSRS     R4,R4,#+16
        LSR      R3,R8,#+16
        ORR      R4,R4,R5, LSL #+16
        ORR      R3,R3,R9, LSL #+16
        ADD      R4,R3,R4
        LDR      R5,[R12, #+0]
        LDR      R3,[R12, #+4]
        SUBS     R5,R5,R2
        SUBS     R3,R3,R4
        STR      R5,[R11], #+4
        STR      R3,[R11], #+4
        ADDS     R1,R1,#+1
        LDR      R3,[R12, #+4]
        ADDS     R4,R4,R3
        LDR      R3,[R12, #+0]
        ADD      R2,R2,R3
        STR      R2,[R12, #+0]
        STR      R4,[R12, #+4]
        SUBS     R0,R0,#+1
        ADD      R6,R6,R7, LSL #+3
        ADD      R12,R12,#+8
        BNE.N    ??DoFFT_6
??DoFFT_5:
        LDR      R0,[SP, #+0]
        LDR      R2,[SP, #+4]
        ADDS     R1,R0,R1
        SUBS     R2,R2,#+1
        STR      R2,[SP, #+4]
        BNE.N    ??DoFFT_4
??DoFFT_3:
        LDR      R0,[SP, #+0]
        LSLS     R0,R0,#+1
        ASRS     R7,R7,#+1
        STR      R0,[SP, #+0]
        BNE.N    ??DoFFT_2
        LDR.N    R2,??DataTable2
        ADD      R3,R2,#+8
        MOVW     R1,#+511
        MOVS     R4,#+1
??DoFFT_7:
        LDR      R5,[R3, #+4]
        LDR      R0,[R3, #+0]
        ASRS     R5,R5,#+10
        ASRS     R0,R0,#+10
        MULS     R5,R5,R5
        MLA      R0,R0,R0,R5
        CBNZ.N   R0,??DoFFT_8
        MOVS     R5,#+0
        B.N      ??DoFFT_9
        Nop      
??DoFFT_8:
        CLZ      R5,R0
        RSB      R5,R5,#+32
        LSRS     R5,R5,#+1
        LSL      R5,R4,R5
        UDIV     R6,R0,R5
        ADDS     R5,R6,R5
        LSRS     R5,R5,#+1
        UDIV     R11,R0,R5
        ADD      R5,R11,R5
        LSRS     R5,R5,#+1
        UDIV     R0,R0,R5
        ADDS     R5,R0,R5
        LSRS     R5,R5,#+1
??DoFFT_9:
        SUBS     R1,R1,#+1
        STR      R5,[R3], #+8
        BNE.N    ??DoFFT_7
        LDR      R0,[R2, #+0]
        CMP      R0,#+0
        IT       MI 
        RSBMI    R0,R0,#+0
        ASRS     R0,R0,#+11
        STR      R0,[R2, #+0]
        ADD      SP,SP,#+8
        MOV      R0,#+4096
        LDR      R1,[R2, R0]
        CMP      R1,#+0
        IT       MI 
        RSBMI    R1,R1,#+0
        ASRS     R1,R1,#+11
        STR      R1,[R2, R0]
        POP      {R4-R11,PC}      ;; return


        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable2:
        DC32     g_fftData

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable2_1:
        DC32     g_fftWindow

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable2_2:
        DC32     g_unityRoots

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable2_3:
        DC32     0xffffaf67

        SECTION `.text`:CODE:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
??DataTable2_4:
        DC32     0xfffef3a1

        SECTION `.iar_vfe_header`:DATA:NOALLOC:NOROOT(2)
        SECTION_TYPE SHT_PROGBITS, 0
        DATA
        DC32 0

        END
// 
// 8 192 bytes in section .bss
//   622 bytes in section .text
// 
//   622 bytes of CODE memory
// 8 192 bytes of DATA memory
//
//Errors: none
//Warnings: none

А то цифры Ваши у меня сомнения вызывают
У меня есть работающий макет, выводящий данные на дисплей 40х8 точек, время выполнения замерял как программно, так и осциллографом.

Можете начать с замера скорости работы вашей библиотеки.
+
avatar
  • mVlad77
  • 06 ноября 2018, 09:22
0
Компараторы в СССР были в дефиците. Осциллографы для настройки этого чудо-узла тоже.
Позже, глючный компаратор 554CA3 на входе с мафона меняли, кстати, на 564ЛН2. Работало надежнее.
+
avatar
0
И да, код включает вычисление модуля результата, моя реализация корня использует деление (примерно 50 тактов на корень), можете вырезать этот кусок.
+
avatar
  • mVlad77
  • 06 ноября 2018, 09:10
-1
Ну отказ от прямого сравнения двух процедур в равных условиях говорит о двух вещах:
1. «У меня ВСЕ есть. Все работает круто. Там… Где-то… внутри… может», Я вообще гений, пока, впрочем, непризнанный" — я оцениваю такой расклад в 0%.
2. ASM код от ST как и было изначально мной оценено НА ПОРЯДОК уделывает Ваши студенческие изыски в этом направлении — я оцениваю такой расклад в 100%. И я понимаю, что потратить кучу нервов и сил, вникая в алгоритмы FFT (Вы ведь вникали, а не содрали код, изменили названия переменных) и тут первой же ссылкой тебя, крутого программера, с облаков опускают на грешную землю.

PS. Простите, я и так много тут написал, но я такое уже видел BolgenOS :):):):):):):):):)
+
avatar
+1
Вы адекватный человек? Или может вы употребляете запрещенные вещества? Иначе мне просто непонятен уровень вашего (уж простите) идиотизма. Выше вам несколько раз было сказано, за какое время отрабатывает функция. И эти результаты были измерены как программно, так и аппаратно. «Там… Где-то… внутри… может» — очень похоже, что вы так проектируете свои устройства, у меня подход другой.

Вам был предоставлен кусок кода. Вы провели тестирование? Где результаты? Конкретные числа. Я свои предоставил.
И я понимаю, что потратить кучу нервов и сил, вникая в алгоритмы FFT (Вы ведь вникали, а не содрали код, изменили названия переменных) и тут первой же ссылкой тебя, крутого программера, с облаков опускают на грешную землю.
Похоже, вы забыли принять лекарства. Мой алгоритм работает ровно так, как надо мне, за время, которое меня полностью устраивает, даже, в принципе, быстрее. И я очень рад, что потратил время и разобрался в преобразовании Фурье лично, а не содрал алгоритм — это одно из фундаментальных преобразований, используемых в математике и вычислительной технике, считаю его понимание важным.

На этом предлагаю вам остановить поток сознания и вернуться к вашим гирляндам и красивым окнам, ибо беспредметных разговоров вести желания не имею.
+
avatar
  • mVlad77
  • 08 ноября 2018, 18:41
0
Нда, когда у людей кончаются аргументы, начинаются жалобы администрации… раз пошли посты стирать — на сем дискуссию завершаю. (Смысл тут что-то писать, если просто выносят, не разбираясь ?), не ищите у людей тех препаратов, что лежат в вашей аптечке. Давайте считать, что у меня для Вас просто бисер кончился.
+
avatar
  • AndyBig
  • 08 ноября 2018, 21:25
+1
Это же Вы писали «Давайте я сам по приложенной методике потестирую?». Потестировали? Результаты есть? Покажите. Не потестировали и результатов нет? Тогда молчите, потому что у Вас нет никаких оснований делать какие-то выводы с «порядками» :)
+
avatar
  • mVlad77
  • 09 ноября 2018, 08:22
0
ответил Вам ниже
+
avatar
  • juraspb
  • 06 ноября 2018, 17:05
0
Лицензия на библиотеку stm_fft не подразумевает открытие исходного кода.
Микрофонный усилитель используется готовый и подключается 3 проводниками. Проще некуда.
+
avatar
  • mVlad77
  • 06 ноября 2018, 20:28
0
Да ладно (Вы хоть свой VK.com читаете, что там пишите? — вам дали файл алекса гайвера, вы оттуда 4 спецэффекта себе перетащили, три недели назад и уже забыли — я вам скриншотом напомню), а вот что делать с использованием SPI для работы со светодиодами. Это ведь стержень — быстрая выдача информации? Я про этот код говорил. У Вас же за «общение» с WS8212B используется тот же конкретный порт (а он жестко определенный спецификой железа).
Я этот код видел под GNU GPL. И даже на автора могу ссылку дать.

Спорим, что Вы порт для выдачи данных с А7 на соседний порт (A5 например) не сможете перенести? — у Вас вся логика программы слетит :). SPI DMA там ведь не прокатит.

PS. В этом проекте Вашего труда чуть (аналоговая схема — да, такого я не встречал, но излишне сложна, считаю бесполезна. Другие делают проще. Плата микрофона, случайно, такая же как у Алекса Гайвера. Код для захвата (оцифровки) AUDIO — думаю, что код заимствован GNU GPL, FFT — не свое от STM, WS2812b DMA SPI — тоже GNU GPL). Если бы так же меркантильно думал Roger Clark, с надеждой продавать STM32 arduino, то Вы бы с помощью delay() делали бы задержки :) Но нет, там огромный труд, позволяющий легко и просто работать со сложным ARM железом в привычной среде. И все открыто и, более того, автор еще и активно все это развивает на общественных началах.

+
avatar
  • juraspb
  • 08 ноября 2018, 15:07
0
В файле Гайвера указан источник с видео.

/*
  Скетч создан на основе FASTSPI2 EFFECTS EXAMPLES автора teldredge (www.funkboxing.com)
  А также вот этой статьи https://www.tweaking4all.com/hardware/arduino/adruino-led-strip-effects/#cylon
  Доработан, переведён и разбит на файлы 2017 AlexGyver
  Отправляем в монитор порта номер режима, он активируется
*/

Вот эти видео: www.tweaking4all.com/hardware/arduino/adruino-led-strip-effects/#cylon

У меня есть открытый проект на Github.
Этот проект сборка указанного проекта в одну STM32. Смотрите.

Если вам принципиален открытый проект возьмите его и переложите на любой процессор сами.

Информация по лицензии DSP LIB

;******************** © COPYRIGHT 2009  STMicroelectronics ********************
;* File Name          : cr4_fft_1024_stm32.s
;* Author             : MCD Application Team
;* Version            : V2.0.0
;* Date               : 04/27/2009
;* Description        : Optimized 1024-point radix-4 complex FFT for Cortex-M3
;********************************************************************************
;* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
;* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
;* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
;* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
;* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
;* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
;*******************************************************************************/
+
avatar
  • mVlad77
  • 08 ноября 2018, 18:49
0
Не понял. При чем тут гайвер? там процессор другой.
В вашей программе для STM32 основная фишка — использование DMA и SPI интерфейса для выдачи данных на ленту в фоновом режиме. Этот код в коммерческих проектах Вы не можете использовать и обязаны публиковать любые разработки, в которых данный код заимствуется. Связываться с закрытым кодом не хочу.
+
avatar
  • juraspb
  • 08 ноября 2018, 21:17
0
Какой проект делать каждый решает сам.
Главное чтобы проектов было больше и у каждого был выбор.
+
avatar
  • AndyBig
  • 08 ноября 2018, 21:27
0
использование DMA и SPI интерфейса для выдачи данных на ленту в фоновом режиме. Этот код в коммерческих проектах Вы не можете использовать и обязаны публиковать любые разработки, в которых данный код заимствуется
А в моих разработках тоже изпользуются и DMA и SPI для выдачи на WS2812 :) Я тоже не могу использовать этот код в коммерческих целях и кому-то там чего-то обязан? :)
+
avatar
  • mVlad77
  • 09 ноября 2018, 08:35
0
Код — это функция, у которой имеются входные параметры, понятия «исходный код» и «машинный код» несколько разные вещи, не находите? Я должен возиться с его (это не про juraspb) скомпилированным кодом, пытаясь повторно причесать и скомпилировать его? ЧТО бы загрузить в платку? — это мне зачем? Я и так знаю, что математики в STM сделавшие FFT на ASM гораздо талантливее подобных «горе мастеров».

Я ссылку на тестирование FFT дал (ее тут стерли) www.stm32duino.com/viewtopic.php?t=1145 — вот есть тестовый пример, что мешает тому, кто жалобы строчит, по аналогичной общепринятой методике свой «великий код» протестировать? Заодно и правильность результатов проверить?

А по поводу, AndyBig, Ваших разработок — toster.ru/q/374189
+
avatar
  • AndyBig
  • 09 ноября 2018, 10:32
0
это мне зачем? Я и так знаю, что математики в STM сделавшие FFT на ASM гораздо талантливее подобных «горе мастеров»
Ну то есть настаиваете на позиции «не читал, но осуждаю».
Я ссылку на тестирование FFT дал (ее тут стерли)
Тогда давайте ссылку на конкретный пост с тестированием, где вычисление FFT для массива на 1024 значения занимает меньше 0.5 миллисекунды. Мне не улыбается лопатить все страницы темы по ссылке.
А по поводу, AndyBig, Ваших разработок — toster.ru/q/374189
Вы не ответили на вопрос. Или это Ваш вопрос по ссылке и Вам 17 лет? Тогда это многое объясняет.
+
avatar
  • mVlad77
  • 09 ноября 2018, 11:00
0
Там читать нечего его машинный листинг пусть процессор читает. Текст на СИ он предоставить отказался, в связи с гениальностью написанного — или это Ваш второй ник?
(Я сразу говорил, что полностью согласен с этим мнением: After testing various C FFT routines, including FHT, real-FFT, CMSIS libraries, and finding them all to be too slow to run real-time 38khz audio FFTs with a size of 1024 on the STM32F103C,I finally figured out how to make the Arduino environment accept assembly functions.)

Тогда давайте ссылку на конкретный пост с тестированием, где вычисление FFT для массива на 1024 значения занимает меньше 0.5 миллисекунды. Мне не улыбается лопатить все страницы темы по ссылке.
Вы, видимо, не понимаете английский (тогда что Вам в этой профессии делать ?). По приведенной ссылке
www.stm32duino.com/viewtopic.php?f=3&t=1145
в первом же посте все есть — сама FFT библиотека + header, а так же проект, который ее тестирует — cr4_fft_1024_stm32.s + cr4_fft_1024_stm32.h + arduino sketch). Скетч, выводит результат преобразования на экранчик ILI9341 только что бы любой желающий смог визуально оценить результаты вычисления FFT). Тестирование идет именно по описанной мой методике — формируется «синус» определенной частотой во входном буфере и рассчитывается выходной. Еще результат на экран выводится, что уже не так важно.

Вы не ответили на вопрос. Или это Ваш вопрос по ссылке и Вам 17 лет?
Лицензия требует предоставления исходного кода продукта, основанного на коде GPL («В общем случае распространитель программы, полученной на условиях GPL, либо программы, основанной на таковой, обязан предоставить получателю возможность получить соответствующий исходный код» )? — заметьте, кусочек GNU GPL кода Вы включили, а выложить должны весь проект — в этом и суть свободного ПО, каждый вносит посильный вклад, а польза всем :)
+
avatar
  • AndyBig
  • 09 ноября 2018, 12:33
0
Текст на СИ он предоставить отказался
Для Вас непреодолимая проблема встроить ассемблерный текст?
в первом же посте все есть
И там же указано время выполнения — 2 мс, что никак не на порядок быстрее 5 мс. К тому же отличие в разрядности вычислений существенное.
Лицензия требует предоставления исходного кода продукта
Я вроде задал простой вопрос, а Вы уже второй пост рассказываете мне что такое GNU GPL.
+
avatar
  • Dimon_
  • 30 августа 2018, 07:59
+1
в отличие от варианта цветомузыки на Arduino, не требует для работы персонального компьютера.
А кто сказал, что ардуине для работы требуется наличие ПК?
Ардуина, также, как и STM — вполне автономный микроконтроллер. Ардуина не хуже и не лучше STM умеет управлять лентой WS2812.
Или имеется в виду, что у вас STM запрограммировался сам по себе, без наличия ПК, исключительно силой мысли?

Словом, странный тезис, не имеющий под собой никакого смысла.
+
avatar
  • demon54
  • 30 августа 2018, 08:03
0
Думаю, имелось ввиду, что у меги не хватает бустродействия, на вычисления.
+
avatar
  • AndyBig
  • 30 августа 2018, 08:09
+3
Тут не столько в управлении лентой, сколько в обработке сигнала, разбивки его на частотный спектр. ARM на 70 МГц и с более объемной оперативкой с этим все же более успешно справится, чем AVR на 16 МГц :)
+
avatar
  • ladasvet
  • 30 августа 2018, 16:28
+2
Дискретные преобразования Фурье мы реализовывали даже на Z80 c частотой 8 МГц. :). 20 лет назад.
+
avatar
  • AndyBig
  • 30 августа 2018, 16:33
+1
Я Вам больше скажу — его можно реализовать даже вообще без контроллеров и процессоров, просто на бумаге :)
+
avatar
  • ladasvet
  • 31 августа 2018, 08:46
0
К сожалению, бумага в ответ на DTMF-сигнал не пошлет управляющие сигналы исполнительному устройству. :) А так то, да можно было бы. Даже знание ассемблера было бы не нужно.
+
avatar
  • AndyBig
  • 31 августа 2018, 08:59
0
Так там максимальная частота меньше 2 кГц, и полос не два десятка :)
Ну и DTMF вроде другим, более эффективным алгоритмом обрабатывались :)
+
avatar
0
ДПФ для декодирования DTMF был реализован и на 4 МГц Z80 в АОНах «Русь». Изучал тогда его код (там сигнал размером 1 бит, поэтому вместо умножения применялся AND, что и позволило все сделать в реальном времени), но только спустя годы понял, что это и было преобразование Фурье…
+
avatar
  • juraspb
  • 31 августа 2018, 08:35
0
Не забудьте ещё про DMA на приём данных с АЦП и DMA на передачу данных по SPI и UART.
+
avatar
  • AndyBig
  • 31 августа 2018, 08:44
0
Тут не те частоты, чтобы DMA давал сильное преимущество, но в целом — да :) Один раз запустил АЦП по ПДП в кольцевой буфер и потом только время от времени достаешь готовый набор результатов :)
+
avatar
  • juraspb
  • 30 августа 2018, 08:25
0
У меня до этой на mysku были три статьи цветомузыка на Arduino. Обработку сигнала там выполнял ПК.
И исходники на тот проект выложены. И для Arduino и для ПК.
+
avatar
  • Dimon_
  • 30 августа 2018, 08:57
0
У меня до этой на mysku были три статьи цветомузыка на Arduino. Обработку сигнала там выполнял ПК.
Так ведь этого из текста статьи совсем не видно, попробуйте прочесть текст отвечённо. Вы так и напишите, а то ведь всё читается, что, мол, ардуине для работы нужен ПК.
+
avatar
  • juraspb
  • 30 августа 2018, 09:33
0
Уже понял.:)
+
avatar
0
На AVR две проблемы для реализации БПФ:
1. Мало быстродействия (ну тут еще вопрос, может один канал 32 КГц и реально, если все оптимизировать).
2. Мало ОЗУ
Видел на ютубе проект БПФ на AVR длиной 128 сэмплов, но для полноценного спектра звука надо 1024.
+
avatar
  • juraspb
  • 03 сентября 2018, 14:03
0
3. На вывод по SPI требуется достаточно много процессорного времени. В STM вывод по SPI через DMA.
+
avatar
0
А вот тут не соглашусь. Делал на AVR вывод на 600 диодов 50 раз в секунду с жесткой палитрой 256 цветов примерно за 50% процессорного времени с использованием инвертированного на транзисторе выхода USART на прерываниях (т.е. можно использовать любые другие прерывания, главное в начале обработчика сразу же разрешить их). Если взять 300 диодов и 25 «кадров» в секунду, понадобится всего 12% времени. Это допустимо.
+
avatar
  • juraspb
  • 03 сентября 2018, 16:03
0
Я не писал что это невозможно.
+
avatar
  • Piksel
  • 30 августа 2018, 08:06
+8
Вот здесь на ардуино на обычной НАНО, всего хватает!!! И прошивка открытая.
alexgyver.ru/colormusic/
Сделал себе один в один — красотища!!!
+
avatar
0
Благодарю, а то едет лента, думал для подсветки монитора сделать, и опционально вариант для музыки. Попробую объединить в одно общее
+
avatar
  • klop
  • 30 августа 2018, 08:07
+1
Этот вариант цветомузыки, в отличие от варианта цветомузыки на Arduino, не требует для работы персонального компьютера
Прежде чем утверждать подобное, посмотрите проект на хабре: Невероятно эффектная цветомузыка на Arduino и светодиодах. Причем есть открытый исходный код.
+
avatar
  • juraspb
  • 30 августа 2018, 08:31
+1
У меня для предыдущего проекта на Arduino исходники тоже выложены.
+
avatar
  • Alex_74
  • 30 августа 2018, 09:01
+1
Есть известная схема цветомузыки с АРУ Elektor Electronics, 6/04 radio-hobby.org/modules/news/article.php?storyid=209. Схема после настроек норм от 5 В работает. Я ее (до разделительных фильтров после С8) подключил к светомузыке на Arduino — www.youtube.com/watch?v=BRrXSYXCs88 Теперь от микрофона лучше работать стала.
+
avatar
  • Cucumber
  • 30 августа 2018, 09:01
+2
Делал такую. Эффекты отстают от музыки. Разобрал.
+
avatar
  • vigera
  • 30 августа 2018, 09:51
-1
Эффекты отстают от музыки
А синхронность этих эффектов вообще кому-то важна?)

На тех дискотеках, где бывал юношей в 70-х — 80-х, как-то совершенно не отложилась в памяти особая прелесть попадания цвета в такт музыке.
То-ли потому, что преимущественно уже хорошо под газом туда попадал, то-ли кроме девчонок ничего там не интересовало, а может и вовсе дискотечная попса того времени просто абсолютно в душе не резонировала...)
+
avatar
  • Piksel
  • 30 августа 2018, 08:12
+9
Я думаю, что автор не так про ардуино хотел выразиться. Обзор интересный, времени и сил было потрачено, молодец.
Не нужно сразу набрасываться, человек все таки старался…
+
avatar
  • xxxtaz
  • 30 августа 2018, 09:05
0
А можно посмотреть как это выглядит в сборе? В какой корпус упаковали?
+
avatar
  • juraspb
  • 30 августа 2018, 09:48
+2
Платы просто в термоусадке.



Кнопки не паял. Пользуюсь приложением.
+
avatar
  • Dimon_
  • 30 августа 2018, 10:06
+4
Нет, работа проведена большая. Спору нет, обзор заслуживает плюса уже даже за то, что автор не бросает свою идею, развивает её. Такая увлечённость всегда подкупает. Но, вот почему-то, глядя на видео, не наблюдаю я сильной привязки к музыке. В 80-х конструкции из «Радио» были лучше привязаны, особенно более поздние, с «пилой» для пропорционального управления моментом включения тиристоров, с компрессорами и т.д.
Эх…

К чему я.
Люди, кто-нибудь, дайте рабочий алгоритм выявления BPM или хотя бы сильных долей музыки на микроконтроллере, а?
То, что любой пятилетний ребёнок делает без труда на утреннике, притопывая в такт музыке, на микроконтроллерах в реалтайме, насколько я могу судить, до сих пор ещё не реализовано…
+
avatar
0
Погуглите beat detector или BPM detector. Вот есть для ардуино (подробно не смотрел)
+
avatar
  • Dimon_
  • 30 августа 2018, 11:04
+3
Да читал я всё это. Чувак выделяет НЧ, предполагая, что в той части спектра может быть только бочка. Это популярная, и, увы, тупиковая идея; отфильтовывание — это совсем не выделение ритма.
НЧ составляющая в фонограмме присутствует и от других инструментов, поэтому ритм из нижних частот выделять — это утопия.
Бóльшая часть роковых композиций, к примеру, во вступлении вообще не имеет бочки или барабанов. Например, только одни гитарные рифы. Или только хет и тарелки. Или только гитарный перебор. Однако уже со вступления песни мы легко можем начать притопывать ногой или прихлопывать рукой в такт музыке. Безо всяких НЧ-составляющих.
+
avatar
  • juraspb
  • 30 августа 2018, 11:27
+6
4 миллиарда лет эволюции и пятилетний ребёнок притоптывает ногой.
+
avatar
  • Dimon_
  • 30 августа 2018, 12:00
+1
Чё-то вы как-то глубоко копаете :)
Я ж говорю не об искусственном интеллекте для сочинения музыкальных партитур. Творчество — да, продукт исключительно интеллекта.
Но я-то всего лишь о выделении такта из ритмичной музыки, это куда более простая вычислительная задача, причём на PC реализованная во множестве исполнений :)
+
avatar
  • juraspb
  • 30 августа 2018, 12:35
+2
Ребёнок выделит такт в любой композиции, а программа не всегда. Хорошо если в половине. И демки в интернете с классными цветомузыками не на всех композициях работают хорошо. Выкладывают конечно самые лучшие. Мне и моим коллегам моя цветомузыка нравится. Она тоже не идеальна, но вариант. Чем больше вариантов тем лучше.
+
avatar
  • Dfcz22
  • 30 августа 2018, 13:13
0
Найдете, поделитесь плз.
+
avatar
  • Dfcz22
  • 30 августа 2018, 13:11
0
Только миллионов, до миллиардов нам людям еще далеко. :)
+
avatar
  • abyrwalg
  • 30 августа 2018, 17:05
0
миллионы — это компромисс с 7526-м годом;)
+
avatar
  • kalobyte
  • 31 августа 2018, 00:29
-1
не годом, а летом
до потопа не было зимы и весь календарный период назывался летом
а педевикия твоя врет, там не сотворение мира как человечества, а мир в плане перемирия после войны с китайцами
мир имеет 5 значений и раньше записывался через 5 разных букв и, пока в 17м году не провели реформу и не выкинули лишние 3 штуки
+
avatar
  • muraveiX
  • 30 августа 2018, 12:13
0
Делайте автокорреляцию. :)
+
avatar
-1
Погуглите алгоритмы тогда. Скорее всего кто-то уже что-то придумал, задачка известная.
+
avatar
  • u3712
  • 30 августа 2018, 16:20
+1
а. автокорреляционная функция над входным буфером — получили огибающую (одну)
б. автокорреляционная функция над огибающими — получили ритм
Как видите, никакой привязке к частотам. ))… и ритм может восстанавливать.
Можно и аппаратно, если лениво писать довольно простой код — 564ГГ1 по огибающей (выпрямленному). Но придется подавлять «ритм» в отсутствии музыки.
+
avatar
  • Dimon_
  • 30 августа 2018, 17:08
0
Ой. А поподробнее можете расписать?
Вот именно, как раз, с АКФ и проблема. Знаний матухи не хватает. И про Хинчина с Колмогоровым я почти ничего не знаю :)
Вы сумеете изобразить это в действующем скетчике?
+
avatar
  • u3712
  • 31 августа 2018, 00:00
+1
Автореляция — это удивительно просто. Берете ваш массив данных и начинаете его накладывать самого на себя. Я делаю вычитание, а положено умножение (поэлементно), потом модуль и сложить все числа. Вот вы и получили F(0).
Сдвиг на 0 — полное совпадение. Сдвиг на 1 { F(1) } — получили меньше, еще… и т.д.
Вначале результат будет уменьшаться, затем повышаться, потом снова уменьшаться и снова подниматься. Так вот — самый первый горб (кроме 0) — это и есть период повтора функции (ритм). А его высота — мера интенсивности этого ритма. Ничего сложного.
По похожему алгоритму работал русский АОН, а там ой-ой какой гадкий и шумный сигнал.
Так что — почаще оцифровывайте, будет четче результат. И на ARMе конечно.
+
avatar
  • juraspb
  • 31 августа 2018, 09:05
0
1. Ритм может быть такой что МК просто памяти не хватит.
2. Даже если его выделить, сложнее решить что с этим ритмом делать. Что зажигать и на сколько, и что делать с остальной информацией. И главный вопрос будет ли это красиво на большинстве музыкальных композиции.

Я в проекте с проекте с Ардуинкой приглашал писать свои варианты обработки. Никто не откликнулся.
Кому нужны исходники может посмотреть проект на Arduino + FFT для STM на диске вместе с прошивками. Я по просьбе своих коллег положил два проекта в одну STM и добавил управление со смартфона.
+
avatar
  • u3712
  • 31 августа 2018, 11:21
0
Ну, вообще-то, человек под «ритмом» понимает вполне конкретный диапазон частот. Тот самый, с которым можно топать. )) Если ритм выходит из этих рамок, то ФАПЧ разрывается.
Памяти хватит, просто возьмите не_AVR и ограничте частоту сверху — ритм на 10кГц не возможен (т.к. издевательство над человеком).
Из того, что делал — определение сигнала «занято» — вводными были диапазон тона 300-1500Гц (вместо халявных 425) и ритм занято а-бы-какой с непонятной скважностью и стабильностью параметров. И это на фоне разговора. Оно работало.
/disconnect
+
avatar
  • kalobyte
  • 31 августа 2018, 00:24
0
НЧ составляющая в фонограмме присутствует и от других инструментов, поэтому ритм из нижних частот выделять — это утопия.
так и человек выделяет как раз нч ударные в качестве такта
Однако уже со вступления песни мы легко можем начать притопывать ногой или прихлопывать рукой в такт музыке.
попробовал представить себе, как можно притоптывать в такт гитаре или саксофону

подкинь что ли примеров
+
avatar
  • arbatjc
  • 30 августа 2018, 10:45
0
Спасибо! Плюс, однозначно!!!
+
avatar
  • Grean
  • 30 августа 2018, 13:52
+1
Ардуино, микропроцессоры… И как без всего этого обходились лет 30 назад — только тиристоры КУ202 и ещё небольшая кучка деталей. Ещё фотосветильники с переделанными светофильтрами. Тепло, аналогово. Моя ЦМП до сих пор на даче лежит, жалко выкинуть. Может даже и заработает если включить. За обзор респект, интересно почитать о новом уровне старой идеи.
+
avatar
  • Dimon_
  • 30 августа 2018, 14:23
+4
И как без всего этого обходились лет 30 назад
Ну как обходились.., да, обходились, конечно.
Я сам, собравший не одну ЦМП разной сложности, и, как и большинство радиолюбителей той поры, прочитывающий «Радио», могу сказать, что те «аналоговые» и «тёплые» тоже не были панацеей. Прежде всего, потому, что утомляли зрителя довольно быстро. Именно поэтому тот же «Радио» не гнушался публикациями цветомузыкальных оргáнов и цветомузыкальных клавиатур — все понимали, что в световом сопровождении музыки альтернативы человеку пока нет.
Я сам в конце восьмидесятых ушёл от голого аналога в ЦМУ к дискретным элементам: генератор на логических элементах+счётчик+ПЗУ и выход на тиристоры. Даже такая конструкция в визуальном смысле тогда смотрелась куда выигрышнее, чем голый аналог после трёх-четырёх фильтров, поскольку в ПЗУ вшивались уже всякие «бегущие огни», «рассыпания», мигания и прочее.
Сегодняшние светодиодные технологии — да, позволяют ещё более разнообразить цветовую картину: ведь тогда, со всеми светофильтрами, цапонами и пастой от шариковых ручек, мы даже близко не могли достичь такой цветовой палитры. Так что зря вы так уж сильно ностальгируете по «тёплому аналоговому», WS2812 куда более вариативна и выразительна, чем N-канальные ЦМУ с лампами накаливания. Но проблема осталась там же и практически не сдвинулась за все эти годы — полностью автоматизировать процесс светового визуального сопровождения музыки всё равно удачно не получается. На любой концертной площадке работает DMX-светотехника, которую программируют люди.
+
avatar
  • vigera
  • 30 августа 2018, 14:41
+1
утомляли зрителя довольно быстро
+1!
Я, вероятно, в авангарде этих самых утомляемых зрителей до сих пор)

Ещё до расцвета диктуемой журналом «Радио» моды на ЦУ, собирал в старших классах тиристорную.
Однако балдеть под мигающие в такт музыке три цветные лампочки дома почему-то ни разу не довелось) Как-то наоборот, своей искусственной примитивностью убивали тогда весь кайф от прослушивания излюбленного арт-рока)
+
avatar
  • abyrwalg
  • 30 августа 2018, 17:26
0
+
avatar
  • vigera
  • 30 августа 2018, 17:44
0
Эхх!
Да уж! Ближайшие ассоциации — лохотрон, гомеопатия, астрология, телекинез, левитация!)))
+
avatar
  • Eeyore
  • 30 августа 2018, 17:52
+1
Я еще и родителей заставлял сидеть смотреть на мигающие лампочки. Теперь даже немного стыдно.
+
avatar
  • Boing
  • 19 октября 2018, 23:38
0
а вы знаете толк..)
+
avatar
  • liteon
  • 31 августа 2018, 03:09
0
те «аналоговые» и «тёплые» тоже не были панацеей. Прежде всего, потому, что утомляли зрителя довольно быстро.
Решалось применением дополнительного, фонового канала засветки, яркость которого уменьшалась с ростом сигнала, что позволяло компенсировать неприятное мерцание переливом цветовой гаммы. Например, так было реализовано в ряде промышленных ЦМУ тех лет.
+
avatar
  • Dimon_
  • 31 августа 2018, 09:24
-1
Решалось применением дополнительного, фонового канала засветки, яркость которого уменьшалась с ростом сигнала
Спасибо большое за открывание мне сокровенных редких знаний.

Встречный вопрос.
Вытекающий из контекста комментариев к этому обзору.
Мои реплики:
«пилой» для пропорционального управления моментом включения тиристоров
с компрессорами
ПЗУ и выход на тиристоры
Я сам, собравший не одну ЦМП разной сложности
и, как и большинство радиолюбителей той поры, прочитывающий «Радио», могу сказать
Я сам в конце восьмидесятых ушёл от голого аналога в ЦМУ к дискретным элементам
N-канальные ЦМУ
DMX-светотехника
— вот это всё, в общем и целом, не натолкнуло вас на мысль, что я «немножечко в теме»?
Т.е. написав свою реплику, вы всерьёз полагали, что про существование фонового канала в ЦМУ я вот за эти несколько десятилетий ни разу не слышал?
И только вы сейчас, в конце второго десятилетия 21-го века, мне вдруг открыли эти сокровенные знания? :)
Ну, спасибо, чо :)
+
avatar
  • AndyBig
  • 30 августа 2018, 16:32
+2
И как без всего этого обходились лет 30 назад
Примитивно и однообразно :) Так же как обходились без персональных компьютеров и мобильных телефонов :)
+
avatar
  • Rokko
  • 30 августа 2018, 23:15
0
Какие нафиг тиристоры. Разноцветные лампы и стартерыот ртутных ламп. И все нормально дискотечило.
+
avatar
  • kalobyte
  • 31 августа 2018, 00:34
0
для неопытного школьника потянет она

я когда был тупым школьником, то тоже делал на тиристорах
спасли только стеклянные колпаки от промышленной сду (походу это были колпаки как на ментовских мигалках) + снег на подоконнике, который служил рассеивающим экраном
с улицы нереально круто смотрелось, цвета сочнейшие, светодиоды не тянут такой динамический диапазон по цвету, хоть тоже он и насыщен
+
avatar
  • ded1971
  • 30 августа 2018, 14:17
0
Плюс за годноту!
+
avatar
0
А привязку к системам умного дома типа homeassistant не планировали сделать?
Чтобы mqtt понимало через esp-шку или по блутусу интерфейс какой-нить?
+
avatar
  • juraspb
  • 30 августа 2018, 16:54
0
В этом направлении не думал. Баловство всё это. Быстро надоест со смартфона свет включать, форточки закрывать… Праздник украсить это другое дело.
+
avatar
+1
Ну мне не охота 100500 приложений заводить для каждой гирлянды, а вот пара дополнительных ползунков на страничке было бы удобнее…
+
avatar
  • Switch
  • 30 августа 2018, 21:58
0
Работа проделана большая. Но музыкальные эффекты ни очем. Увеличте кол-во музыкальных эффектов и будет бомба. Очень нравятся эффекты с проекта цветомузыка чип и дип. Которую они клонировали с забугорного проекта. У меня 300 диодов 5 метров. А чип и дип проект максимум 180. А Ваш судя по описанию максимум 240 диодов? Если реализуете 300 диодов + эффекты с чип и дипа готов Вам перевести 20$ за труды.
+
avatar
  • juraspb
  • 30 августа 2018, 22:43
0
На 300 диодов прошивку выложил. Без эффектов чипа и дипа.
+
avatar
  • ssurneed
  • 30 августа 2018, 22:17
0
Не правильно для WS2812B использовать 3,3V логический выход stm32.
+
avatar
  • juraspb
  • 30 августа 2018, 22:28
-1
Правильно. Смотрите datasheet.
+
avatar
  • ssurneed
  • 30 августа 2018, 22:31
0
В даташите 0.7VDD минимальный уровень логической единицы, 0,7*5 это 3.5V
+
avatar
  • juraspb
  • 30 августа 2018, 22:59
0
Вы правы. Поставьте преобразователь уровней если сомневаетесь. Мой комплект и 3 комплекта у моих коллег работают без проблем.
+
avatar
  • juraspb
  • 31 августа 2018, 11:51
0
Схему подправил.
Буфер желающие могут подобрать сами из имеющегося в наличии хлама. В китайском контроллере SP105E (на STM32) в качестве буфера стоит 74HC245. Этот буфер по входу точно такой же как и WS2812B — 4.5*0.7=4.15

Меньше не больше и мы не калибры собираем.
+
avatar
  • ssurneed
  • 31 августа 2018, 21:25
0
А если сделать инверсный сигнал, то можно собрать преобразователь уровней на одном дешёвом транзисторе.
+
avatar
  • juraspb
  • 01 сентября 2018, 06:38
0
Правильней всего использовать серию 74AHCT у неё входные уровни ттл.

Вроде дешевле уже некуда.
+
avatar
0
Может быть там выход СТМ работает в режиме «открытый сток» + подтягивающий до 5В резистор?
+
avatar
  • juraspb
  • 03 сентября 2018, 14:00
0
ОС сделать можно но с подтяжкой к +3,3В.
+
avatar
0
До 3.3 смысла нет. А вот до 5 — есть. Причем, многие выводы СТМ 5v-tolerant.
+
avatar
-2
мне как световику смотреть на єто…
+
avatar
  • juraspb
  • 31 августа 2018, 13:47
+1
Продолжайте.
+
avatar
0
А мне нравится!
И+, и спасибо, и молодец!
+
avatar
  • radan
  • 02 сентября 2018, 19:17
+1
Покажите на что смотреть, световик, мы оценим.
+
avatar
  • fos319
  • 05 сентября 2018, 09:47
0
juraspb, планируется ли развитие проекта, апдейты прошивок?
+
avatar
  • juraspb
  • 05 сентября 2018, 15:30
0
До нового года да. Дальше если будет интерес.
Пока делаю доработки по просьбам пользователей.
В планах сделать поинтересней последние 4 программы.
+
avatar
0
Уважаемый juraspb, давно интересуюсь Вашим проектом, сделал на ПК- все ОК, сейчас на STM32- у меня проблема с установкой количества диодов, а именно кн8, залил с последнего архива в котором файл только на 30 диодов, помогите пожалуйста. А лучше выложить видео по настройке. Еще вопрос- есть ли в программе функция АРУ и Компрессора(еще бы с регулировкой). Спасибо, проект обалденный, многие делал и смотрел- Ваш более «Цветомузыкальный».
+
avatar
  • juraspb
  • 05 сентября 2018, 21:30
0
АРУ и компрессора пока нет.
Прошу прощения в описании перепутал B8 и B9.
B9 — замкните на G для изменения количества светодиодов и удерживайте до выполнения изменения.
B8 — замкните на G для сохранения установленного режима.
или чуть подождите исправлю прошивку под описание и добавлю прошивки на разное количество светодиодов.
Вечером обновлю программу под Android.
Меня попросили кое что добавить и я временно удалил прошивки.
Видео изменения количества светодиодов положил в папку с прошивками.
+
avatar
  • belokota
  • 20 сентября 2018, 16:03
0
Здравствуйте! Спасибо за конструкцию! Собрал устройство. Никак не пойму как меняется яркость при настройке. Она должна плавно меняться от тусклого к яркому и обратно при удержании замкнутой кнопки? Мне кажется что у меня дошло до яркого, а назад не хочет. И не убирайте пожалуйста прошивку на 180 светодиодов. Или можно из любой прошивки получить 180? Какой шаг изменения количества светодиодов? Я сейчас тестирую на 30-ти светодиодной ленте.Пожелание — побольше бы динамических эффектов.
+
avatar
  • juraspb
  • 21 сентября 2018, 11:02
0
Добрый день.
Нажимаете и держите кнопку — яркость увеличивается. Для уменьшения отпустите кнопку и снова нажмите и держите — яркость уменьшается. Каждый раз при отпускании кнопки меняется направление изменения.
Шаг изменения количества светодиодов (кнопка на контакте B8): 30,60,72,90,120,144,150,180,210,216,240,300.
Эффекты добавлю. (Только ремонт в детской доделаю). Пока предлагайте варианты, лучше на сайте цветомузыка.
Сайт размещён на сервере у меня дома и не всегда включён (по ночам выключаю).
Если есть желание могу сделать группу в Facebook.
+
avatar
  • juraspb
  • 29 сентября 2018, 17:09
+1
Доступна новая прошивка с конфигурацией через встроенный USB.
+
avatar
0
Уважаемый juraspb, (1).есть проблема с USB управлением-(пишет «error comand. enter: AT+H.....») скрин не получилось загрузить,(2). иногда (в разное время включения) зависает контроллер на программе «ШКАЛА».
+
avatar
  • juraspb
  • 02 октября 2018, 16:58
0
Добрый день
Это отвечает контроллер таким образом связь есть.
На все команды так отвечает?
В терминалке после команды поставьте коды $0D$0A (возврата и перевода строки). AT+H$0D$0A.
Как на картинке.


Последние четыре музыкальные программы доработаю. Написал их на скорую руку (что бы были задействованы все кнопки), к новому году переделаю.
+
avatar
0
Да, программа на все запросы отвечает одинаково, завтра буду пробовать Ваш вариант. Спасибо.
+
avatar
  • belokota
  • 03 октября 2018, 10:03
0
Не получается отослать команды по usb. Использую указанный вами терминал. Какую бы команду не отсылал, терминал выдаёт сообщение что неправильная команда. Вы не могли бы описать конкретнее(пошагово) или видео не большое приложить как работает прошитая STM32 с терминалом? При добавлении кода, так же ошибки.
+
avatar
0
В общем мне не помогло, выкладываю «Скрины»





Может что то надо на STM32 переключить?
+
avatar
  • juraspb
  • 03 октября 2018, 12:30
0
STM-ка отвечает правильно. Ошибка в команде.
AT,H-английские символы?
!!!!!Все символы вводить только на Английском.!!!

С работы приду, сниму видео.
+
avatar
0
Разобрался, программа «Терминал» должна быть версией 1.9, а не 1.93. Окно с портами должно быть как у Jurasb на скрине.
В файле «readme» все команды «АТ», или еще что нибудь можно менять?
Еще бы добавить «Плавность» регулируемую, как в музыкальные так и в динамические.
+
avatar
  • juraspb
  • 03 октября 2018, 16:33
0
1. По AT+H выводятся все действующие команды. При добавлении новых команд буду добавлять их в HELP (AT+H).

2. В динамической есть темп. Или вы что то другое имеете ввиду?
+
avatar
  • juraspb
  • 04 октября 2018, 16:35
0
!!!
Добавил на google диск тестовую прошивку MCmic.HEX — в данной прошивке при работе в динамическом режиме реализована функция включения/выключения ленты по хлопку.
Данная функция работает(должна работать) при не очень высоком уровне шума в помещении.
Прошивка тестовая и лента может не всегда корректно включаться и выключаться.
Жду откликов на корректность работы данной функции.
+
avatar
  • juraspb
  • 04 октября 2018, 22:19
0
Группу в VK сделал
vk.com/club171670176
Удобнее вопросы задавать.
+
avatar
  • belokota
  • 03 октября 2018, 14:24
0
Подтверждаю, версия точно такая же как у автора заработала с платой. По умолчанию будут воспроизводиться на ленте все динамические программы, которые есть в прошивке?
+
avatar
  • juraspb
  • 03 октября 2018, 16:52
0
В новой версии нет.
Добавляйте динамические программы в список воспроизведения из терминалки или с помощью новой кнопочки ADD в приложении (начиная с версии 1.5 от 03.10.18). В терминалке можно просмотреть список, добавить в конец списка или в конкретную позицию, удалить из списка. Перед выключением питания не забудьте сохранить список, команда AT+W в терминалке или кнопочка SAVE в приложении, иначе изменения будут потеряны.
При нажатии кнопки ADD в конец списка добавляется текущая динамическая программа.
Так вы сможете выбрать для воспроизведения именно те программы которые вам нравятся и в том порядке в котором вы их вводите.
Список может содержать до 256 программ.
+
avatar
  • belokota
  • 04 октября 2018, 15:11
0
Не могли бы вы написать что надо ввести в терминале что бы воспроизводились все динамические программы? И пример удаления какой либо программы из списка. Это было бы не плохим примером для понимания процесса настройки прошивки.
+
avatar
  • juraspb
  • 04 октября 2018, 16:34
0
Все сразу добавить нельзя.

Можно вводить так (всегда меняем одну цифру)
AT+A0,0$0D$0A enter
AT+A1,0$0D$0A enter
AT+A2,0$0D$0A enter
AT+A3,0$0D$0A enter

AT+A20,0$0D$0A enter
AT+A0,1$0D$0A enter
AT+A1,1$0D$0A enter
AT+A2,1$0D$0A enter
если вводить в таком порядке то будут чередоваться именно программы, так как вторая цифра(0..7) изменяет цветовое решение программы.

Порядок удаления программы
Если вам не нравится какая либо программа, установите её c помощью «крутилок», запомните её двузначный номер например: 19,4
Выведите список программ командой
AT+P$0D$0A

0,0,1
1,1,1
2,8,3
3,3,2
4,11,1
5,19,4 — программа которую мы хотим удалить 19,4 пятая (5) в списке
6,…


AT+D5$0D$0A удалится 5 программа из списка

Из программы под android добавить в список очень просто, «крутилками» устанавливаем программу и нажимаем кнопочку ADD. Программа добавится в конц списка воспроизведения.

Список может включать до 256 программ.

!!!
Добавил на google диск тестовую прошивку MCmic.HEX — в данной прошивке при работе в динамическом режиме реализована функция включения/выключения ленты по хлопку.
Данная функция работает(должна работать) при не очень высоком уровне шума в помещении.
Прошивка тестовая и лента может не всегда корректно включаться и выключаться.
Жду откликов на корректность работы данной функции.
+
avatar
  • juraspb
  • 04 октября 2018, 22:19
0
Группу в VK сделал
vk.com/club171670176
Удобнее вопросы задавать.
+
avatar
  • Miha_I
  • 16 декабря 2018, 18:18
0
Автор где исходники на этот проект, не надо всех посылать за исходниками, в другую тему. У меня часть эффектов будет меняться (может все, пока не знаю), поэтому и приложение под android будет другое, мне нужен код отвечающий за bluetooth (и на android то же), не хочешь выкладывать весь код, выложи хотя бы часть кода.
p.s. да можно поднять документацию и написать самому, но это займет больше времени, а его не так уж много.
+
avatar
  • Bomzhara
  • 17 декабря 2018, 05:27
0
Трудно зайти по ссылке выше в комменте? Такое ощущение, что он обязан тебе. Кому нужно, все уже взяли всё и тема там обновляется.
+
avatar
  • Miha_I
  • 17 декабря 2018, 14:56
0
В группе vk я был, там нет исходников (там Руководство пользователя, Руководство по загрузке прошивки, история изменений и MC.hex), на гугл-диске тоже нет, мне интересно взглянуть на код отвечающий за обработку bluetooth-команд, а автор выкладывает ссылки на предыдущие проекты, которые работают без bluetooth, к тому же не я один прошу выложить исходники на этот проект.
+
avatar
  • juraspb
  • 17 декабря 2018, 12:21
0
+
avatar
  • Miha_I
  • 17 декабря 2018, 15:09
0
У вас ссылка битая.
+
avatar
  • sepulka
  • 01 января 2019, 19:26
0
Добрый день.
С Новым Годом.

Где можно почитать: какая кнопка ( B3...B9 ), что делает?
+
avatar
  • sepulka
  • 01 января 2019, 20:10
0
Нашел.
Возможно что либо изменено?
+
avatar
  • sepulka
  • 01 января 2019, 20:50
0
Описание кнопок актуально?
+
avatar
  • juraspb
  • 01 января 2019, 21:36
0
B9 -> B1, B9 или B0 завести на Gain платы микрофона
+
avatar
  • sepulka
  • 02 января 2019, 15:17
0
А действие по кнопкам B3 — B8, такое как написано, или есть изменения? Буду использовать только линейный вход ( не микрофон ).
+
avatar
  • juraspb
  • 03 января 2019, 22:07
0
Остальные кнопки не менялись.
+
avatar
  • sepulka
  • 04 января 2019, 07:48
0
Спасибо.
Ясно.

С Рождеством !!!
+
avatar
0
Подскажите, какие должны быть настройки UART на bluetooth модуле?
+
avatar
  • juraspb
  • 11 марта 2019, 19:17
0
По умолчанию. 9600,8,1