ARDUINO Анализатор аудиоспектра. Обсуждение проекта

rufat66

✩✩✩✩✩✩✩
10 Фев 2023
15
1
@Олег Поляков, поправил так, запустилась, работает, теперь артефакты по краям.

C++:
for (int i = 0; i < 64; i ++) {
А она и не будет включаться. Там надо код под 128 править.


А 65 вы откуда взяли???
Думаю что из массива будет выделена возможная четная часть и отправлена в буфер.

ЗЫ: чукча не программист ни разу.
 

Олег Поляков

★★✩✩✩✩✩
18 Янв 2022
86
95
www.1812.ru
Думаю что из массива будет выделена возможная четная часть и отправлена в буфер.

ЗЫ: чукча не программист ни разу.
Неправильно думаете.
По факту:
1. Вы выставили у себя в скетче WIDTH = 32 и HEIGHT = 8. Это вы сделали правильно.
2. Вы не исправили размерность и наполнение массива тонов. Претензий нет - об этом нигде в скетче в комментариях не написано.
3. Я вам дал примерный код массива тонов размерностью под вашу матрицу 31 с приблизительным наполнением.
4. Его надо было вставить (для пущей верности) в двух местах скетча. Сделали ли вы это - я не понял.
5. Зачем было менять размерность массива тонов, если каждый элемент массива отвечает за настройку каждого вертикального столбика вашей матрицы (а у вас их 32) - для меня загадка.

В итоге, мы топчемся на месте при всём желании вам помочь.
 
  • Лойс +1
Реакции: novvel

rufat66

✩✩✩✩✩✩✩
10 Фев 2023
15
1
На данный момент результат такой:
Слева и справа артефакты, по центру синус 4 кГц
IMG_20230212_233414.jpg
 
Изменено:

Олег Поляков

★★✩✩✩✩✩
18 Янв 2022
86
95
www.1812.ru
@rufat66,
и не будет правильно работать, пока вы внимательно не прочтёте то, что я вам выше написал.

Эта строка у вас неправильная:
C++:
// массив тонов, расположены примерно по параболе. От 80 Гц до 16 кГц
byte posOffset[64] = {2, 3, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 55, 57, 59, 62, 64, 68, 70, 72, 74, 78, 80, 82, 84, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 100, 101, 102, 105, 109, 110, 111, 112, 114, 116, 118,120}; //оригинал AlexGyver для 16 полос
 

rufat66

✩✩✩✩✩✩✩
10 Фев 2023
15
1
@rufat66,
и не будет правильно работать, пока вы внимательно не прочтёте то, что я вам выше написал.

Эта строка у вас неправильная:
C++:
// массив тонов, расположены примерно по параболе. От 80 Гц до 16 кГц
byte posOffset[64] = {2, 3, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 55, 57, 59, 62, 64, 68, 70, 72, 74, 78, 80, 82, 84, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 100, 101, 102, 105, 109, 110, 111, 112, 114, 116, 118,120}; //оригинал AlexGyver для 16 полос
Строку поправил. В примере от novel, эта строка встречается один раз.


C++:
byte posOffset[31] = {2, 3, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 60, 80, 100, 120};
В вашем примере с этим массивом выглядит так:
настройка 8*32
IMG_20230213_002214.jpg

настройка 8*20 (слева синус, справа артефакт)
IMG_20230213_002400.jpg
 
Изменено:

Олег Поляков

★★✩✩✩✩✩
18 Янв 2022
86
95
www.1812.ru
@rufat66,
в скетче, который вы прислали, вижу следующее:
C++:
#define WIDTH 15           // ширина матрицы (число диодов) количество полос
#define HEIGHT 8           // высота матрицы (число диодов) высота полос
А скиншоты вы прислали с другими размерами.

Строку поправил. В примере от novel, эта строка встречается один раз.
Всё правильно. В этом скетче нет настройки ширины спектра.
Скажите, novel'овский скетч с WIDTH=32 и HEIGHT=8 у вас заработал?
 

rufat66

✩✩✩✩✩✩✩
10 Фев 2023
15
1
Всё правильно. В этом скетче нет настройки ширины спектра.
Скажите, novel'овский скетч с WIDTH=32 и HEIGHT=8 у вас заработал?
Скетчь novel с настройкой 8*32 ведет себя так:
Свип 500 - 15000 Гц


Ваш скетч с настройкой 8*32 работает так:
Свип 500 - 15000 Гц

 

Вложения

Изменено:

novvel

★★★✩✩✩✩
29 Сен 2018
568
191
@rufat66,
C++:
byte posOffset
на сколько я помню должен быть на 1 больше чем полос в анализаторе, т.е. при 32 полосах, должно быть
C++:
byte posOffset[33]
т.к. где то в коде вычитается самый первый тон как загрязненный НЧ помехами.
(это все по памяти, проверять не на чем) И еще в моем коде без правки массива под свои частоты, будет только до 6кгц вроде бы. И не путай высоту и ширину матрицы, иначе мы так не разберемся, у тебя загвоздка не в высотах столбиков, а в их количестве. Еще в моем коде нужно правильно выбрать схему, если она как у гайвера то ее надо выбрать в коде, иначе делать как у меня и замерять параметры смещения, если этого не сделать, то частоты будут все криво работать. Еще для разгрузки контроллера отключи пики попробуй и отключи нормализацию в коде. Потом по результату отпишись.

Вот этот скетч по идее должен работать, по схеме гайвера собрано если, с кондером после микрофона или от линейного выхода пк/телефона.
И еще: под своим кодом я имел ввиду тот, который первый, самый простой без эффектов и дополнительных режимов, который весит 17кб в посте https://community.alexgyver.ru/threads/analizator-audiospektra.31/post-63861.
 

Вложения

Изменено:

Олег Поляков

★★✩✩✩✩✩
18 Янв 2022
86
95
www.1812.ru
на сколько я помню должен быть на 1 больше чем полос в анализаторе, т.е. при 32 полосах, должно быть
А ведь точно!
Вот что значат бессонные ночи. Осоловеешь тут.

Ваш скетч с настройкой 8*32 работает так:
Свип 500 - 15000 Гц
Кажется, разобрались благодаря внимательности novvel.

Пропишите везде, где фигурирует строчку:
C++:
  yte posOffset[33] = {2, 3, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 54, 60, 80, 100, 120};
Очень надеюсь, что это решит проблему с артефактами.
 

rufat66

✩✩✩✩✩✩✩
10 Фев 2023
15
1
@Олег Поляков, с этим массивом стало так:
Свип 500 - 15000 Гц


Если переключить в скетче novel ширину спектра с 256, на 128, с правой стороны появляется еще 3 полосы.
Если в скетче Олега ширину со 128 на 256, матрица перестает запускаться, не хватает памяти.
 
Изменено:

novvel

★★★✩✩✩✩
29 Сен 2018
568
191
Не знаю что такое свип, но помеха какая то на вход как будто есть, поднять можно нижние массивы повыше, что бы помеху не хватали, если она есть.
 
  • Лойс +1
Реакции: Олег Поляков

rufat66

✩✩✩✩✩✩✩
10 Фев 2023
15
1
@novvel, оранжевые по середине, это плавающие сами по себе пиксели.
в вашем скетче, первые две линейки мерцают сами по себе.
 
Изменено:

novvel

★★★✩✩✩✩
29 Сен 2018
568
191
@rufat66, от чего питается и от чего получает сигнал, по какой схеме собрано, какие настройки сделаны или это мой готовый был загружен что я давал выше?
 

rufat66

✩✩✩✩✩✩✩
10 Фев 2023
15
1
@novvel, не похоже шумы, пиксели мерцают с определенной частотой, только белым цветом, на входе тишина, даже если вытащить разъем из звуковой карты, подключал к телефону, менял источники питания. но через них виднеется прорисовка спектра.
Да ваш скетч, с мелкими подстройками.
Пробовал смещать массив, ничего не меняется.
 
Изменено:

Олег Поляков

★★✩✩✩✩✩
18 Янв 2022
86
95
www.1812.ru
Если переключить в скетче novel ширину спектра с 256, на 128, с правой стороны появляется еще 3 полосы.
В этом скетче от novvel не реализовано переключение ширины спектра с 256 на 128. Если вы считаете, что поменяв в одном месте в коде число, всё заработает как надо, то глубоко ошибаетесь.

В моём скетче такая возможность штатно реализована через изменение константы SPECTRUM.
 

novvel

★★★✩✩✩✩
29 Сен 2018
568
191
@rufat66, ну не знаю тогда, это видимо проблема с кодом, предлагаю взять чистый скетч на 17кб который и заново настроить, для проверки всей схемы, что нет сбоев по питанию и сигналу. Либо тупо не хватает производительности.
 

rufat66

✩✩✩✩✩✩✩
10 Фев 2023
15
1
@novvel,

C++:
if (maxLevel[pos] >= 0) maxLevel[pos]--;              // уменьшить высоту точки на 1
убрал "--" перестали мерцать первые две полосы.
 

novvel

★★★✩✩✩✩
29 Сен 2018
568
191
@rufat66, у тебя просто перестали работать пики вероятно) я предлагал попробовать самый простой скетч без пиков и прочего.....там должно все работать.
 

rufat66

✩✩✩✩✩✩✩
10 Фев 2023
15
1
@novvel, По вашей рекомендации так и сделал, только на нем, точь-в-точь тоже самое.
Если если поставить -1, пики не добирают одну клетку, если вернуть как было, снова мерцает. Это холодный старт.

Полосы все работают, в первых 9 полосах пики зависают, в остальных падают до 0. На второй половине матрицы, пики начинают съезжать.

IMG_20230217_001845.jpg

IMG_20230217_002402.jpg

Если генератором встать на первые две линии, часть матрицы начинает мерцать. Справа, две лини не знаю откуда, может наводки, может отражения сигнала какие то, думаю это пока не важно, странно что два пикселя в центре, красный и синий, которых нет в настройках.

IMG_20230217_002248.jpg
 

novvel

★★★✩✩✩✩
29 Сен 2018
568
191
@rufat66, непонятно что это, покажи монтаж проводов на матрице, монтаж платы и прочее, какой БП используется тоже покажи. Ну и я говорил еще попробовать без пиков сделать, может поможет в чем то из-за разгрузки контроллера. Пики зависают из-за убирания в коде того самого минуса.

1676653915601.png

UPD: короче залил скетч 20х12 в принципе работает на моих 10 полосах без тормозов, на 109+ пикселе как у тебя начинается радуга, т.е. это баг кода. первые 2 просто черные, других помех нет, 7 столбцов отлично работают между ними.
 
Изменено:

Олег Поляков

★★✩✩✩✩✩
18 Янв 2022
86
95
www.1812.ru
В принципе из Nano мы выжали всё, что она могла дать. Большого смысла оптимизировать код под широкие полосы отображения частот на этой платформе я не вижу. Поэтому, подготавливаю финальную версию своей прошивки, которую выложу на форуме.
Сейчас я занимаюсь переносом наработок на esp32.
На этой плате очень приличный 12-битный АЦП, памяти более, чем достаточно для любых хотелок, + блютуз и вай-фай на борту.

Если народу интересно, то буду выкладывать скетчи аудио спектро-анализатора для esp32.
 

novvel

★★★✩✩✩✩
29 Сен 2018
568
191
@Олег Поляков, Ну я думаю тебе лучше сделать финалку, старые стереть в "той" теме и делать уже на есп и выложить ссылку на свою тему в "той", что бы не смешалось все в кучу. Будет старая версия и ссылка на новую разработку того же плана на другой платформе.
 
  • Лойс +1
Реакции: Олег Поляков

DevilAvgon

✩✩✩✩✩✩✩
11 Май 2021
6
0
Ребят помогите пожалуйста, делаю матрицу высотой 16 а длиной 20, пишет что не хватает памяти на ардуино нано, так вот вопрос в том что, получится ли это всё сделать на UNO ?
 

DevilAvgon

✩✩✩✩✩✩✩
11 Май 2021
6
0
@novvel,Тоже хотел сделать высотой 16 а длина 20 и не получается ошибку выдает и пишет что памяти нету, хочу вот перезалить всё или на ESP8266 или же на UNO
 

novvel

★★★✩✩✩✩
29 Сен 2018
568
191
@DevilAvgon, на уно тот же проц что и на нано в принципе, разница не велика, вот на мега2560 возможно и взлетит.