Тред обработки сигналов N1. Первый. Ламповый. Твой 3015715 В конец треда | Веб
Сделаем програмач снова великим!
Пока без шапки, надеюсь накидаем что-нибудь
2 3015724
Аноны, подскажите плиз, куда копать. Вот у меня есть звучание аудиофайла в конкретный момент времени, по какому принципу строится визуализация музыки как на старых магнитофонах, или на старой программе WinAmp?
3 3015726
>>015724
Фрагмент сигнала, скажем, 0.1 секунды умножается на оконную функцию, потом делается быстрое преобразование фурье, берется абсолютное значение и логарифмическая шкала по частоте. Ну либо, куча кроссовер-фильтров с очень крутой ачх, и так же абсолютное значение
4 3015727
>>015726
Cпасибо анон. Оконная функция это та которая пробегает по всему массиву и делает финальный результат типа reduce? Или это что-то сложней, типа scan?
5 3015728
>>015727
Преобразование Фурье на самом деле получается не от фрагмента сигнала, а от этого фрагмента, повторенного бесконечность раз назад и вперед. При этом на краях у реального сигнала будет скорее всего резкий разрыв, который внесет сильный "искажения" в высокочастотную часть спектра. Не совсем правильно называть это искажениями. Поэтому сигнал предварительно умножают на оконную функцию. Она просто плавно зануляет края.
см ОП пик
6 3015729
>>015728
Вот сейчас нарисовал это и понял вдруг, что неплохо бы попробовать оконную функцию, которая устраняет разрывы на краях еще и в парочке производных. Слава Резиновой Уточке!
7 3015821
>>015715 (OP)
Лет пятнадцать назад, еще в 32-битном мире, делал линейку VST-эффектов для обработки звука. Прицел был на гитару, но по отзывам в интернете оказалось, что пользуются в основном даже не с гитарой. У меня там были не слишком сильно отличающаяся от оригинала эмуляция Boss MT-2, фильтр шума делением спектра, хорус со сдвигом частот. Потом ушел от этой темы, но вроде все еще могу что-нибудь пояснить, если кому-нибудь это интересно.
8 3015834
>>015821
Кстати, остались нерешенными некоторые задумки:
# Применение длинного преобразования Фурье, но с короткой латентностью.
# Деление спектра 0 / 0 с помощью правила Лопиталя, если первая производная тоже 0 / 0, то можно взять вторую. А теперь даже нейросети можно в этом домене применять.

На пикрелейтедах апскейл x2 бикубиком в фотошопе, а потом деление на спектр функции Гаусса с помощью либы libfftw. Нейросети делают такое не намного лучше, но очень намного дольше.
9 3015859
Я тот анон с /math/. Как и обещал предоставляю код который позволяет делать преобразование фурье.

https://pastebin.com/9Uty8cRh
10 3015870
>>015859
P.S. основные функции в которых происходит всё действо это
makeFFT и addIQ.

На вход addIQ надо подать байтный массив комплексных 32 битных чисел типа int.

В функции makeFFT dB_buffer - это то что уже можно использовать для визуализации музыки. Ну а вот как правильно оцифровывать всё это я хз.
11 3015981
На всякий случай, наикратчайшее описание, что такое преобразование Фурье для чайников:

1) Линейная комбинация это k1x1 + k2x2 + ... + kNxN
2) Ортогональная система функций позволяет представить любую другую (с некоторыми ограничениями) функцию в виде линейной комбинации функций этой системы
3) Синусы с различной частотой и фазой как раз и являются ортогональной системой функций
4) Любой сигнал можно представить в виде линейной комбинации синусов. Нахождение коэффициентов этой комбинации и есть преобразование Фурье
5) Преобразование Фурье хорошо оптимизируется. Алгоритм называется БПФ. Первым придумал Гаусс, потом переизобрели два чувака из MIT. Всё это было задолго до появления компьютеров.
6) Основное применение строго по матану - это свертка функций. Всякие деления и вычитания амплитуд спектров - это уже интересные "извращения".

>>015859 >>015870

1) Может, лучше не наследовать от классов Qt, так получится более универсально.
2) Либа libfftw иногда не очень предсказуема. Сталкивался с тем, что она сильно накапливает ошибку при преобразовании вперед-назад, что проявляется в виде слышимого шума. Также она иногда может создать очень медленный "план", сталкивался с этим при 2D-преобразовании. Также у либы гротескно-оверпрайснутая лицензия для коммерческого софта.
12 3016014
>>015981
Интересный ты перец брат. Поясни про оверпрайс.
https://www.fftw.org/
Там же гпл лицензия.

Похуй в принципе, тему интересную ты поднял. Студент?
13 3016035
>>016014
Может я че напутал, но они (fftw) вроде просили раньше 5k$ за применение в проприетарном софте. Для комерсов это фигня, но для стартапов в одно рыло это жеско. Поэтому я просто написал свое БПФ на интринсиках, которое всего в два раза медленнее fftw, но зато супер простое и предсказуемое и заодно могу легко скомпилить под WebAssembly, чтобы оно вертелось в браузере.

На самом деле, хотя все алгоритмы и есть в либах, но периодически встречаются кейсы, когда имеет смысл переписать самому, или более мягкий вариант например обернуть сишную либу в питон. Из последнего, что я обернул, модуль - dict для питона на основе xxhash с забиванием буя на коллизии - очень сильная экономия памяти + скорость. Потом опять же для питона зазеркалил классический крестовый map, который на основе red-black tree. Это мне было нужно для обучения нейросеток на колабе - там среда позволяет нормально компилировать сишные модули для Ру.
14 3016057
>>016014

>Студент?


вечный
окно.png11 Кб, 600x600
15 3016158
Screenshot20240123-235145~2.png269 Кб, 720x1600
16 3016381
>>015981
Ну я просто скопировал свой класс который в Qt проекте использовался.
Так буквально можно в несколько действий убрать всю связь с Qt.
Хороший тред.

Кстати кто знает как правильно патом спектр рисовать после преобразования fftw и перестановки местами двух половин.
Вопрос как правильно отрисовать "бины". Именно с визуальной точки зрения, если я рисую бин в виде прямоугольника, то левый край прямо угольника это начало бина, или оно в центре бина, или же правый край прямоугольника? Линия какого цвета соответствует началу бина? Я для себя выбрал левый край
17 3016404
Непонятно брат зачем, пахнет аутизмом жоским.
18 3016408
>>016404
На жоском аутизме делаются самые лучшие вещи. А потом уходят в продакшен и превращаются в говно для быдла.
19 3016417
>>016408
Вообще похуй конечно, без аутирования тут не разберёшься глубоко, но есть риск заняться бесплодным изобретательством велосипедов (что немного видно в твоём случае) и фокусе на не имеющих смысла вещах (типа какие бары сделать ор). Тебе, видимо, скучно пиздец, что ты вопросы придумываешь.

Попробуй вейвлеты покопать интереса ради, если спектральные представления сигналов интересны. Базис фурьешный идеально локализован в пространстве частот, но совершенно не локализован во времени. Есть компромисс между этими крайними случаями, позволяющий локальную во времени информацию пощупать. Вейвлеты и банки фильтров брат.
20 3016427
>>016417
Почему ты называешь меня братом? Вейвлеты та же хня, там просто быстрее получаешь инфу о сигнале, но сложнее ее превратить в выходной сигнал. Почему ты называешь меня братом?
21 3016452
>>016427
Бля брат мне каждый аутист теоретик брат
image.jpeg4 Кб, 90x200
22 3016757
>>016427
>>016452
Аноны, поясните по самому сигналу. Если взять например скрипку, какую нибудь ноту, и вырезать из неё милипиздрическую часть, прокатить оконную функцию, сделать преобразования фурье, посчитать пики (столкбики), то вот эти столбики после того как станут на определённые уровни, больше не будут прыгать. А если например взять звук лягушки - ква, продолжительностью 1 секунду, то мы разрезаем этот звук на куски по 0,1 секунды, для каждого куска прогоняем оконную функцию, для каждого куска делаем преобразование фурье, для каждого преобразования считаем пики и в итоге когда идёт проигрывание звука ква, то наши пики пляшут, правильно ли я понимаю? Так же вопрос, что относительно пиков представляет собой удар в барабан в песни? Все частоты (пики) одновременно подпрыгивают?
23 3016801
>>016757
Возьми за щеку, шиз семёнящий.
24 3016813
>>016757
Ну нет, столбики на нотах скаканут только в определённом диапазоне частот, не которые останутся на местах. Возможно удар в барабан должен низкие частоты сильно поднять, патом когда удар стихнет, столбики низких частот тоже в низ опустятся. Модешь за эталон взять приложение на андроид Spectroid, поднести к микрофону телефона интересующий тебя звук и посмотреть как будет выглядеть спектр интересующего тебя звука. Правда там не по столбикам, а просто не прерывная линия, но всё равно будет наглядно.
25 3016826
>>016813
А получается что если свет волна, то например свет от фонаря на улице можно таким же преобразованием фурье на радугу разложить? То есть узнать, сколько будет в свете красного, жёлтого, фиолетового, глядя на пики после преобразования?
26 3016830
>>016813
А как работает этот Спектроид? Вот например кто то говорит, он вырезает из речи последний отрывок длинной 0,1 секунду, бесконечно зацикливает его и обрабатывает? Тогда получается что он и любой визуализатор запаздывает в своей визуализации на эту 0,1 секунду?
27 3016855
>>016826
Да можно.

>>016830
Да он всегда немного в прошлом. АЦП преобразовывает аналоговый звук в дискретный сигнал. Патом ты в реал тайме берёшь копишь данные с АЦП пока не накопишь на одно преобразование фурье. Делаешь преобразование фурье, и видишь сколько мощностей на тех или иных частотах было за то время пока ты копил данные с АЦП.

Допустим АЦП измеряет напряжение на микрофоне с частотой 48000 Гц. То есть на одно измерение АЦП уходит 0.0000208 секунды или 20.8 микросекунд. Ты решил что тебе будет достаточно 2048 отчётов для преобразования Фурье. То есть каждые 0.042 секунды, или 42 миллисекунд ты будешь накапливать 2048 отчётов и делать из них спектр. Запаздывать ты будешь как раз таки в данном случае на 42 миллисекунды.
Насчёт бесконечно зацикливает, это что то лишнее ты приплёл.
28 3016862
>>016855

> копишь, пока не накопишь


А как понять что я уже накопил на преобразование Фурье?
29 3016867
>>016855

> Насчёт бесконечно зацикливает, это что то лишнее ты приплёл.


Вот же пик, там анон выделяет из сигнала кусок, потом сглаживает края и склеивает в длинную простыню, и на неё делает преобразование Фурье, почему он кстати не мог просто сделать на вот этот кусочек преобразование и не лупить его? Или вообще сделать на изначальный сигнал?
30 3016881
>>016867
Я конечно не мастер цифровой обработки сигналов, но мне сказали старшие товарищи что бы сигнал выглядел нормально, нужно пропускать через оконные функции так как при каждом отчёте накопленном, фазы у накопленных снимков сигнала будут разные, и тогда спектр будет не нормальную информацию показывать.

>>016862

>Допустим АЦП измеряет напряжение на микрофоне с частотой 48000 Гц. То есть на одно измерение АЦП уходит 0.0000208 секунды или 20.8 микросекунд. Ты решил что тебе будет достаточно 2048 отчётов для преобразования Фурье. То есть каждые 0.042 секунды, или 42 миллисекунд ты будешь накапливать 2048 отчётов.



Представь что АЦП раз в 20.8 микросекунд тебе даёт цифру в виде напряжения на микрофоне в этот момент времени. Ты каждые 20.8 микросекунд считываешь эту цифру и складываешь в массив из 2048 элементов. Когда заполнишь весь массив делаешь преобразование фурье над этим массивом. И патом заново с 0 начинаешь копить.
31 3016893
>>016881
Так мы над уже накопленным массивом из 2048 элементов делаем оконную функцию?
32 3016917
>>016893
Да. Можно во время накопления, можно после.

>>015859 Здесь во время накопления и оконная функция делается и нормировка происходит. Оконную функцию я заранее генерирую под размер fft в функции createWindowBlackmanHarris()
33 3016964
>>016757 >>016830
Эта задержка называется latency. Тебе звуковой драйвер всегда отдает сигнал блоками. Во многиз звуковых программах (DAW - Digital Audio Workstation) есть такая настройка в конфиге.

Сложность (нагрузка на проц) БПФ - логарифмичекская O(log(N)), поэтому выгоднее обрабатывать сигнал блоками побольше. При этом будет и разрешение по частоте выше, это плюс, но увеличится латентность, это минус.

>>016867
Преобразование Фурье это сумма синусов с разными частотами, амплитудами и фазами. Преобразование ты делаешь на одном блоке сигнала, я блоки красными линиями разделил, но если ты потом сложишь эти синусы, то у тебя получится как раз такой бесконечный сигнал. Спектр у такой "пилы" будет не очень информативный, поэтому накладывают оконную функцию. Если делают свертку сигналов (например, ты срисовал микрофоном импульсную характеристику помещения и накладываешь ее на какой-то сигнал, то есть делаешь реверберацию), то оконная функция конечно не нужна.
34 3016986
>>016964
Мне говорили кстати говорили старшие товарищи что есть пределы увеличения размера fft, дальше нет смысла его увеличивать ради точности. Точность особо не вырастет, надо также и частоту дискретизации учитывать и увеличивать.
35 3017022
>>016986
Оно еще к тому же внутри выполняется слоями, поэтому слишком большое преобразование накопит ошибку. В ряде применений подразумевается еще и обратное преобразование потом, то есть плюс еще ошибка.

Передискретизация оно же oversampling, хорошо делается на звуке кубической интерполяцией, но у меня в принципе и линейная нормально работала. Конкретно был кейс, когда эмулировал гитарную педаль. Она, если по простому, обрезает сигнал на некотором уровне, а что осталось, усиливает раз в 100. При таком усилении шум дискретизации и шум квантования (16 бит) были прямо слышны. 8x частота с линейной интерполяцией и переквантование в 32 бита решили вопрос.
36 3017086
>>017022
Так если драйвер инфу блоками отдаёт, то зачем копить отдельно в массив эту дату? По сути предлагается брать этот блок и поэлементно из него перенести данные в наш массив (2024 длинны)? Можно же просто преобразование Фурье на этот блок применить?
37 3017111
>>017086
Классическое БПФ выполняется на массивах размером степени двойки. Я сталкивался с тем, что в WINAPI (win32) функции waveIn нормально отдают блоки по 480 семплов на частоте 48kHz, а если попробовать 512, то всё начинает "заикаться". Да, libfftw может придумать "план" для разных размеров массива, но это может обернуться непредсказуемой ошибкой. Дальше, входной сигнал вообще-то комплексный с нулевой мнимой частью. Это если ты хочешь, чтобы каждый слой БПФ отрабатывал строго по одному алгоритму. Хотя, с другой стороны, это предмет для оптимизации и libfftw кушает на входе просто действительный сигнал. Дальше, libfftw опять это инкапсулирует в себе, но вообще-то есть такая штука как "прореживание", такая специальная перестановка, и оно может быть на входе либо на выходе. Вот три возможных причины переносить в свой массив сигнал на входе - расширить массив до степени двойки, дополнить числа нулями до комплексных, выполнить прореживание на входе.
38 3017124
>>015859
В моём алгоритме, в функции addIQ можно кормить отчётам не кратно степени двойки
39 3017140
>>017111

> по 480 семплов на частоте 48kHz,


Можешь пожалуйста подробно написать что это значит? Что такое семпл? Это значение с которой должны рыгнуть колнка? Что из себя вообще представляет блок данных, который отдаёт драйвер? Это просто массив чисел, или структур? Что вообще это такое то
40 3017189
>>017140
Начать надо с того, что лучше всего использовать драйвер ASIO. Такой драйвер отдает нормально массивы любого размера. Семпл - это просто один отсчет сигнала. Напряжение с микрофона в текущий момент времени, умноженное на какой-то коэффициент. Это число, у драйвера ASIO может быть float, у функций waveIn, боюсь соврать, вроде int. Если стерео или больше каналов, то оно с интерливингом, то есть с чередованием. Соответственно при частоте дискретизации или она же частота семплирования 48 килогерц для моно сигнала 480 семплов будут представлять собой фрагмент сигнала длительностью ровно одну сотую секунды. Это просто массив из 480 float'ов или int'ов, смотря что за драйвер и как у него попросишь отдавать сигнал.
41 3017368
>>017189
спасииибоо
Снимок экрана 2024-01-24 в 19.20.40.png1,3 Мб, 2266x1214
42 3017509
>>017189
А вот на пикриле я сделал имитацию сигнала уже в виде суммы трёх тригонометрических функций. Вот вопрос вот в чём, правильно ли я понимаю, что на спектре будет три значения? Если да то какие именно значения у графика спектров будут по осям x и у? То есть что откладываем по x и что по y?
image.png57 Кб, 982x425
43 3017535
>>017509
По X частота, по Y спектральная мощность. Спектр трёх функций даст тебе мощность на частотах этих функций. Для одного синуса вся мощность сигнала будет сосредоточена в одной частоте, и будет только одна палочка на спектре, все остальные частоты будут в 0.

Для двух синусов две палочки две палочки будут иметь значение, другие частоты(палочки) будут в 0.
44 3017536
И так же вопрос, если мы говорим о сигнале, который имеет волновую природу, например звук, то разложение его на ряд Фурье имеет под собой природную основу и выполняется хорошо. Но если на вход мы подаём просто набор рандомных точек, то что будет? Кто нибудь пробовал применять разложения сигнала на спектр который имеет искусственную природу?
45 3017543
>>017535

> Для двух синусов две палочки две палочки будут иметь значение



ну вот если взять функцию 3sin(x2 / 4), то где будет отложена палочка по оси X и на какую высоту она подымется по оси Y?
спектр двух синусов.png5 Кб, 600x600
46 3017563
>>017509
У тебя там в косинусе икс аж в кубе. У этой штуки сложный спектр будет. Если бы просто были три синуса с разной амплитудой, периодом и фазой, то на амплитудном спектре это три полоски. На самом деле скорее три "горки". Одиночные прям резкие пики могут быть только у синусов, укладывающихся ровно целое число раз в твой массив сигнала. По иксу откладывается частота. По игреку амплитуда. Там еще есть момент, что это может быть не амплитуда, а мощность, то есть БПФ по разному немного считать можно, будет спектр мощности. Мощность это квадрат амплитуды. Частоты - от нуля - до половины частоты дискретизации, например 24кГц., а дальше амплитудные спектр симметричен относительно этой частоты, а фаза симметрична со знаком минус, то есть на выходе БПФ на самом деле половина избыточной информации.
47 3017569
>>017563

> У этой штуки сложный спектр будет


Правильно ли я понимаю что в ряде Фурье не может быть синусоид у которых аргумент x не в первой степени, если такие попадаются, то они в свою очередь будут разложены на более простые функции? то есть функция sin(x2) будет представлена в спектре несколькими функциями?
48 3017586
>>017569
Синусы (от аргумента в первой степени) - ортогональная система. То есть их суммой (или интегралом для непрерывного случая) можно представить вообще любую функцию, единственно что без разрывов и бесконечностей. Да, sin(x2) будет представлен целой кучей синусов.
photo2023-11-1514-17-28.jpg105 Кб, 950x951
49 3017589
Что за тред? Почему он важен?
Что здесь происходит?
Скуфы из НИИ учатся математике чтобы строить орудия убийства украинцев?
50 3017604
>>017589
имхо шиз сам с собой беседует
51 3017611
>>017589
Шиз семёнит по жести брат, тред зашкварен, хуй с ним.
Figure1.png26 Кб, 640x480
52 3017656
53 3018395
>>017656
это типа спектр sin(x2)
54 3022031
Вы ебанутые? Про вейвлет почитайте. Вообще странно, что на доске для макак-кноподавов, которые от слова синус в обморок падают такие треды.
55 3022585
>>022031
Просто в ньюфаг-треде один анон пояснил другому, как информативно раскладывать сигнал на амплитуды сверток с другими функциями.
17060782469380.mp415,6 Мб, mp4,
1280x720, 0:47
56 3031176
Анончик, ты тута? Объясни, пожалуйста, что тут происходит? Зачем нам внизу окно, которое показывает интенсивностью цвета частоты? Почему сразу нельзя сделать анимацию подпрыгивающих пиков? Или это какой-то дебаг?
57 3032633
>>031176
То что происходит внизу называется водопад. Это интенсивность цвета во времени. Если бы верхний спектр был в 3д, и у него была бы толщина. То если бы мы на него сверху посмотрели то увидели бы интенсивность цвета на каждой частоте. И вот такие снимки сверху каждый кадр делаются и формируется картинка водопада. Зачем он нужен? Ну я конечно анализом спектров не занимаюсь, но те кто занимаются всегда пользуются водопадами. С помощью них можно оценить во времени что происходило в частотной области. Какой то опытный знающий радио инженер посмотрит на водопад, и такой, ага вот на частоте радиостанция с AM модуляцией.
Вообщем это снимки верхнего спектра каждый кадр которые объединяются в одном изображение
58 3032697
ЦОС это какой-то душный гуан. Пробовал закатиться в ЦОС, но охуел от сложности и духоты.
59 3032795
Да я шиз и что с того? Не могу сам с собой разговаривать? А кто мне запретит? Ты? То-то же.
Хочу сигнал обработать - обработаю у тебя на глазах и ничего ты мне не сделаешь, трястись в сторонке будешь пока я синусоиды кручу и спектр мучу на спинах твоих отцов.

Нахуй я это делаю? Могу себе позволить, и позволю, и тебе по губам косинусом кожаным проведу.
60 3033459
>>032795
чего тебя так корёжит-то?
61 3041209
>>032697
Что сложного?
62 3041252
>>033459
А мне нравится как он отвечает.
63 3046940
Бамп годному треду
64 3046941
Какую литературу посоветуете по ЦОСу и по ЦОИ?
65 3046948
>>017604
>>017611

Какая разница семёнит или нет? Тема сама по себе интересна
66 3049706
>>046948
Тема интересная. Но на доске овер 90% это макаки и вкатуны. Такой себе "человеческий материал". Это тема для белых людей из https://2ch.hk/ra/ (М) - там смогут понять и оценить. А серезьёзные вещи обсуждать среди дрочеров - это бесперсктивно. Если хотя бы один ввкатится в ЦОС, считай что ОП победил.
67 3050708
поясните по хардкору вкратце за БПФ/FFT, что это такое и нахуя оно вообще нужно?
mmm.jpg58 Кб, 768x1152
68 3050809
>>050708
Что непонятного ?
https://simple.wikipedia.org/wiki/Fourier_transform

Шиз больше нагоняет важности на себя, тогда как по сути, это рядовой и даже бытовой вопрос математики.
изображение.png142 Кб, 327x338
sage 69 3050811
>>031176
Какая-то шизопрограмма на дельфи с крутилкой.
70 3050904
>>050809
я не понимаю, зачем оно вообще нужно.
недавно озадачился покупкой осциллографа, читаю обзоры на eevblog.com, а там в каждом топике срач "у этого осла FFT хуйня, вот у моего осла FFT ого-го, а у твоего - фи"

> https://simple.wikipedia.org/wiki/Fourier_transform


я правильно понимаю, что это нужно только для сложных сигналов типа звука, а для простой электроники с постоянными частотами никакие разложения нах не нужны?
71 3051068
>>050708
Это просто разложение сложного сигнала на простейшие составляющие - косинусы и синусы, и у каждой составляющей какой-то вес. Позволяет проще выполнять математические операции над сигналом.
72 3051083
>>050811
Это Qt
73 3051220
>>051068

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



то есть это надо для каких-нибудь фильтраций шумов, усилений слабых сигналов, и так далее, а рядовому ардуинщику с простыми 32кгц кристаллами никакое разложение нахуй не надо?
74 3051264
>>051220
Ну если рядовой ардуинщик не работает с обработкой сигналов (исключая стандартный АЦП/ЦАП в комплекте) - это понятное дело не надо.
Другое дело что тема достаточно интересная, если не упарываться математическими формулировками
75 3051578
Тема конечно интересная! Я вот думаю если таблетку взять которую врач выписал и её на спектр поделить прикинь чо получится. Оболочка это типа синупсы а внутри мякотка самая косинусовая. Пить её я конечно не буду, разрывы начинаются. Вообще тема интересная.

Прикинь сижу я значить дома мамкин борщ хуярю, а с улицы меня сигналом облучают. Сигнал во времени вроде как конечный, и мощность в нем конечная без разрывов. Я возьму вот >>051068 и разложу сигнал-то, разложенным сигналом ты попробуй ещё облучи кого. Его же надо собрать обратно. Туда ещё можно, а обратно никак. Сумма синусоид она ж большая границ-то нет они же бесконечные. Кто ещё шиз тут ишь чо ух бля.
76 3051850
>>051578
Нет, все-таки таблетки ты лучше пей
77 3051863
Хочу фитить бэйзлайны для одной своей параши. Ирл анончик подсказал одну статью (Mixture models for baseline estimation doi:10.1016/j.chemolab.2011.11.001), но кодом делится не может, так как прототип в его конторе.
Если вкратце, то бэйзлайн моделится взвешенной регрессией P-сплайнов, и каждую иттерацию веса пересчитываются, моделя сигнал как 2 компоненты - случайный шум - нормальное распределение с какими-то сигмой и мю + равномерное распределение для регионов где сигнал есть. Ну и типа получается, что если шум сплайном сгладить, то среднее - как раз бэйзлйан.
В статье предлагают взять какой-то инишиал гэс по весам и по параметрам (сделал как в статье), и в каждой итерации делать ЕМ.
Беру как априорную вероятность 0.5, домножаю его на плотность вероятности гаусовское расределение с сигмой, мю, в точках текущих остатков (Сигнал - бэйзлайн). Получаю постериорное как posterior = gaus / (gaus + (1 - prior) * unif)
И далее апдейчу параметры... и...
Как апдейтнуть новую вероятность принадлежности к региону сигнала с сигмой я хз. Беру как prior, sigma = mean(posterior), std(res[posterior >= 0.5]). Результат калистый, плохо аппроксимируется. У кореша норм. Спросить не могу, потому что буду казаться лохом. Пусть лучше буду казаться лохом здесь.
78 3052929
>>051863
Поясни конкретнее, мало что понятно. У тебя спектр чего-то с пиками, позиция и интенсивность которых имеет физический смысл? Почему нельзя включить фон в модель? Покажи пример, что ли. Пробовал fityk.nieto.pl использовать для анализа спектров своих?
79 3053554
>>050809
Ну и своими словами-то объяснить слабо?

>>051068
вот этот хотяб попытался
15307a1b079ffabb7c527afd899d8065.jpg34 Кб, 640x640
80 3057209
>>051083
Ананасик мой любименький, вот скажи мне как брат брату, ну вот разложил я сигнал на отрезке 1...2сек на пики частот по мощностям. А вот если я хочу как в винампе аквалайзеры прикрутить, это что мне надо делать? Это мне эти сами пики как-то надо делить(умножать), и обратно из преобразованного графика выстраивать первоначальную звуковую волну и отдавать на звуковой драйвер? Просвяти плиз бибизьяна
81 3057379
>>057209
Ну тут мои знания заканчиваются. Могу сказать только следующие вещи:
В принципе можно получившийся набор частот воспринимать как ползунки эквалайзера, и добавлять и прибавлять к ним нужное количество мощности. Затем проводить обратное преобразование фурье и получать сигнал. Но это чревато искажениями сигнала. И как мне сказали старшие товарищи, это не круто.

Можно генерировать специальные фильтры низких частот, которые будут одни частоты выделять, другие гасить. Но тут уже без преобразования фурье можно обойтись. Ты один раз генерируешь нужный тебе фильтр, а затем подмешиваешь его в сигнал. Это самый правильный вариант, но я в этом не шарю совсем.

Вообщем либо вручную в получившиеся столбики частот добавлять/убавлять мощность, но мириться с искажениями звука.
Либо вообще не использовать преобразование фурье и просто подмешивать в сигнал другой сигнал, который как эквалайзер изменит твою частотную характеристику.

Я помню хотел выделить из звука определённый набор частот и воспроизвести его, я делал так: сделал преобразование фурье, мощности ненужных частот приравнял к нулю, нужные частоты не трогал. Сделал обратное преобразование фурье, воспроизвёл получившийся звук. (На двух картинках визуализация) Вроде работало, но мне старшие товарищи сказали, что это не серьёзно и так никто не делает.

Вот и всё что я могу тебе сказать
82 3057543
>>017536

> Но если на вход мы подаём просто набор рандомных точек, то что будет? Кто нибудь пробовал применять разложения сигнала на спектр который имеет искусственную природу?


Белый/розовый/лазурный шум. Цвет дают по распределению частот в шуме. Использовали для всяких спецэффектов, имитация голоса иои дождя, всякое такое.
83 3057908
Я не знаю, смеяться или плакать.
84 3065374
>>017536
Если такое правило, что чем короче сигнал во времени, тем шире его спектр. Соответственно предельно короткий сигнал (точка) произведет предельно широкий спектр.
85 3065378
>>053554

>вот этот хотяб попытался


Так а что, непонятно?
4.mp420 Мб, mp4,
1280x604, 0:17
86 3127945
>>032633
Анончик, спасибо тебе большое, благодаря тебе я сделал первый шаг в этом удивительном и полном опасностей и приключений мире!
87 3130246
Тест
88 3152686
>>031176
Анончик, ананасик, пожалуйста помоги. Что же мне делать, вот на видосе выше который я прислал там плавная анимация потому что звук идёт с микрофона, при попытке же визуализировать аудиофайл присходит жопа!!!! Драйвер отдаёт семпл буфер длинной 0.371 секунды! И получается что вот эти прыгунки прыгают с фризами! Что же делать, как добиться плавной анимации как у тебя? Хуже всего то что пики ударных смогут не попадать в указанный рейт и получатся пропуски ударных на анимации.
89 3152739
>>031176
Ананасик, ещё вот пишет что в этом буффере длинной 0.371 секунды содержится 16384 семплов. Это похоже на правду? Что такое один семпл то? Это как раз один всплеск синусоиды и есть этот сэмпл?
90 3154739
>>152739
Сэмпл - это 1 замер значения твоей непрерывной синусоиды. Чем чаще ты делаешь замеры, тем точнее ты описываешь свою синусоиду, это называется дискретизация
Соответственно 16384 * 1 / 0.371 = 44161.7 сэмлов в секунду, т.е. у тебя волна с частотой дискретизации 44.1 khz, похоже на правду, это распространенное значение
91 3154773
Шизло, а можешь еще про вейвлеты посеменить научно-популярно?
Для работы на оборонку надо.
Детектить сигналы хочу.

Как мне подобрать параметры чтобы morlet выглядел красиво?
92 3154890
>>154773
Спокнись, шизло
93 3154963
>>154739
Спасибо, а что значит khz в таком случае?
94 3154981
Слушай, получается тогда у нас на железе не синусоида а облако точек? И динамик тупо из одной точки в другую мембрану двигает?
95 3154982
А как быть с преобразованием Фурье? Ему же не точки нужны а непрерывный график
96 3155011
>>154890
Но я на самом деле решил спросить у тебя что-то полезное.
Шизло, почему ты мне не отвечаешь?
97 3155118
Ептить, вы январский тред подняли.

>>152686

>Драйвер отдаёт семпл буфер длинной 0.371 секунды!


Так не должно быть в реалтаймном приложении. Должен быть буфер порядка одной сотой секунды, а не такой огромный.

>>154963

>khz


Килогерцы.

>>154981
С железками все интереснее. На динамик вообще может идти Pulse Width Modulation, чтобы выходной транзистор был или полностью открытый или полностью закрытый, то есть не грелся.
98 3155287
>>155118
То есть на этой анимации >>031176 буферы идут с частотой 0,01 секунды? Имхо там всё несколько хитрее
99 3155498
>>155287
Это анимация амплитуды спектра, то есть sqrt(re^2 + im^2). Для каждого буфера считаешь амплитуду и у тебя есть в отдельном массиве накопленная амплитуда. Делаешь как-то так integral_amlp[ i ] = 0.9 integral_amlp[ i ] + 0.1 current_ampl[ i ], и показываешь integral_ampl, когда у монитора обратный ход развертки условных 60 раз в секунду. Буферы поступают с одним интервалом, а показываешь с другим.
100 3155566
>>155498
Это твоя анимация? Разьясни пож вот эту формулу sqrt(re^2 + im^2), чем амплитуда спектра отличается от спектра?
image.png4 Кб, 640x640
101 3155584
>>155566
Не моя, но я такое делал. Спектр - массив комплексных чисел. Комплексное число можно представить в виде амплитуды и фазы. Вот амплитуда это и есть то, что показывается.
IMG9531.JPG203 Кб, 1200x900
102 3155655
>>155498
0.9 integral_amlp[ i ] + 0.1 current_ampl[ i ]
да нет бред какой-то, у нас не будет ярких пиков в момент ударных или жёстких синтов, думаю там грубо говоря так сделано - у нас сразу в память считаются все семплы композиции - создаётся массив из 100500 семплов, и у нас есть окно которое едет по этому массиву, как каретка, каждый фрейм сдвигается немного вправо и выдаёт новое значение спектра которое и отображается юзеру
103 3155703
>>155655
Можешь наращивать амплитуду сразу, и только отпускать по ФНЧ, так во многих DAW сделано.

>у нас есть окно которое едет по этому массиву


У тебя на пике непрерывное преобразование. Есть формула для пересчета уже готового с учетом нового поступившего отсчета, но это очень медленно будет, проц не потянет.
104 3155761
>>155703

> У тебя на пике непрерывное преобразование


Не понял, какая разница, и там и там массив семплов, ты предлагаешь массив семплов длинной 0,01 секунды, пусть там будет 100 семплов, и ширину окна можно сделать чтобы влезало 100 семплов, и над этими 100 семплами в обоих случаях мы делаем преобразование Фурье
105 3155789
>>155761
На каждый семпл все 100 пересчитываются по формуле - сложность N2, пока у бпф NlogN. А если ты будешь бпф-ом считать, а не пересчетом, то получится вообще сложность N2logN. Проц не потянет это.
106 3155800
>>155789
Блять пиздец ты сложно пишешь, я же не знаю что такое бпф, и вообще не понял струткуру этого предложения, что за пока у бпф NlogN?
107 3155817
>>155800
Если просто, то имеет смысл никогда повторно не пересчитывать преобразования для одних и тех же фрагментов сигнала. То есть окно не скользящее, а шагающее и без пересечений должно быть, иначе для проца очень тяжело.
108 3155821
>>155817
Ты чё, ты чёё. У нас же напрямую спектр зависит от положения окна
109 3155828
>>155817
Если выбрать супер маленькую ширину окна, то почему должно помереть то, опять таки не вижу разницы для проца, и в том и в том случае он считает буфер шириной 100 семплов
image.png11 Кб, 2609x790
110 3158162
>>152686
Ебать, этот тред ещё жив. На этом >>031176 спектре частота дискретизации 48000, а устройство отдающее мне IQ отчёты отдаёт посылками по 256 отчётов, то есть каждые 5 миллисекунд. Отчёты я коплю до 2048 отчётов, а затем делаю над ними FFT. У меня там скользящее среднее, то есть я беру 5 успешно созданных FFT, нахожу их среднее арифметическое, и отрисовываю. Когда создаётся новое FFT, я самоё старое FFT из этих 5 перезаписываю новым и снова нахожу среднее арифметическое и отрисовываю. То есть у меня всегда существует 5 массивов FFT. На картинке как бы показана история массивов FFT и как я из них выбираю какие будут попадать в отрисовку.
111 3160741
>>154773

Мимо другое шизло, интересно видеть, как тред всплывает. Какие ещё параметры подобрать, что значит красиво выглядеть?

С практических позиций, если хочешь сигналы детектить, попробуй с dtcwt разобраться, спектр вроде как почти не меняется по форме если сигнал двигается во времени. У обычного dwt проблема с инвариантностью спектра относительно сдвига по времени, поэтому вряд ли ты что-то полезное с морлетом вытащить сможешь.

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

В октаве есть пакет LTFAT, либо на питоне с таким же названием, если матлаба нет.
112 3161481
>>160741

>Мимо другое шизло, интересно видеть, как тред всплывает. Какие ещё параметры подобрать, что значит красиво выглядеть?



А вот так вот. Лучше формулировки не нашлось.

Я собираюсь на картинках обучать нейросеть путем transfer learning.
Идея в том, что чем больше картинки похожи на объекты, которые видел и классифицировал человек, тем больше эта нейросеть найдет различий в в картинках и значит в исходных сигналах. Жалко что оно не рисует лошадок и кошечек, но некие пятна Рошарха меня бы устроили

пока какая-то хуйня рисуется и считается, но у меня и данных весьма мало. Я на глаз нихуя не могу увидеть.
Картинки вроде разные. Но чем разные - хз.

Это и есть реальные сценарии. А зачем это шизло объясняет самому себе какую-то хуйню - непонятно.
113 3161707
>>158162
Анончик, благодарю тебя! А вот мне никак не получить буффер меньше 16000 семплов, я его визуализировал и вот такую шнягу я увидел!!! Это блять что такое - стереосигнал? У тебя тоже стереосигнал и ты на него забил? Или это чистить надо до моно сигнала?
114 3161765
Аганасики, ещё у меня вопрос блять тупорылый, вот у нас есть семплы, а не непрерывная функция, а преобразование Фурье работает с непрерывной функцией, и значит мы используем некий суррогат который делает примерно то же самое что Фурье, только с точками? Вот у меня примере написано что этим занимается некий forward discrete cosine transform
115 3161807
>>161481
Ничо не понял, но задача нетривиальная похоже. Лучше смотреть в сторону эмбеддингов для картинок, чем на вейвлеты, и попробовать уже на них модель строить. Если данных мало, никто не мешает малые вариации внести в картинки.

Вейвлеты не факт что вообще помогут тебе тут. Непонятно, дискретное преобразование ты пытаешься делать или непрерывное, чем и где, и о каких параметрах говоришь. Если ты хочешь вырезать шум, сделать акцент на деталях, убрать усредненный фон, имея возможность делать это на нескольких уровнях - тогда вперёд. Вейвлеты, если простым языком, это локальные средние и локальные разницы, где среднее на текущем разрешении разлагается на последующем. Может быть полезным для экстракции фич, базара ноль. В своей работе я в табличных данных погряз, не трогаю картинки и мало что знаю о нейросетях современных. Но как я понимаю стандарт индустрии сейчас - эмбеддинги, а не вейвлеты. Сейчас не восьмидесятые.
Снимок экрана 2024-05-19 в 16.22.57.png517 Кб, 3390x1322
116 3161825
Аноны, скажите опытным взглядом, этот спектр похож на правду? Почему есть отрицательные значения? Алсо почему в конце в ултравысоких частотах есть всплеск?
117 3161849
Так же получается что длина массива с амплитудами должна равняться длине массива с семплами?
118 3161863
Вы разбудили шиза.
119 3161886
>>161807

>Но как я понимаю стандарт индустрии сейчас - эмбеддинги, а не вейвлеты. Сейчас не восьмидесятые.



Все так, но у меня маловато исходных данных.
В этом случае стандартом является моя схема.
120 3161891
>>161807
А, кажется я неудачно описал.
Исходные данные - это типичные сигналы, но их мало и я собираюсь делать из них картинки. А потом уже это вот все
121 3161943
>>161891
Тогда могу dtcwt посоветовать и со спектра фичи вытаскивать по уровням, тут хороший гайд:
https://www.mathworks.com/help/wavelet/ug/dual-tree-complex-wavelet-transforms.html

Нафиг тебе морлеты не нужны
122 3163389
Как рассчитать простой ФНЧ? Сколько ячеек задержки и какие множители, и наоборот, от параметров к АЧХ.
123 3167907
>>161707
я не знаю что тебе ответить. У меня моно сигнал.
124 3207485
Вернулся к вам, пездюки
125 3207494
>>207485
Держи тред в тонусе.
Единственная проблема в том, что 99,9% вакансий на эту тему будет связано с ВПК. Пацифисту будет больно этим заниматься.
126 3207656
>>057379

>мощности ненужных частот приравнял к нулю, нужные частоты не трогал. Сделал обратное преобразование фурье, воспроизвёл получившийся звук. (На двух картинках визуализация) Вроде работало, но мне старшие товарищи сказали, что это не серьёзно и так никто не делает.


А как делают?
127 3207660
>>015715 (OP)
Оконная функция применяется только 1 раз, к каждому входящему фрагменту, или ещё и на выходе нужно, после fft? Если да, то это одна и та же должна быть функция, или видоизменённая?
Снимок экрана 2024-06-30 в 12.17.26.png566 Кб, 2666x1786
128 3207919
>>207660
Зачем второй раз? я вообще не особо понимаю нахрен она нужна? То есть без неё просто будет каждый некий всплеск раз когда подгружается новый чанк? Например в композиции момент когда скрипка тянет одну ноту, но тут приходит с драйвера следующий чанк и на визуализации мы видим мусорный всплеск? Вот кстати на втором графике показана как она выглядит
09g845oh.jpg48 Кб, 962x815
129 3208170
Я просто в разных источниках слышал разное - в одних, что перед прямым фурье взвешивается сигнал, в других, что после обратного... Путаница.

>https://habr.com/ru/articles/324152/


В этой статье, например, на рисунке показано, что окно применяется перед оконечным сумматором. [См. изображение].

>https://habr.com/ru/articles/430536/


А в этой статье применяются уже в 2 местах - и в начале, и в конце.

Также встречаются материалы и с обработкой окном в начале.
130 3208176
На картирке FTT вместо FFT, только заметил. ))
131 3211637
>>207656

Можно генерировать специальные фильтры низких частот, которые будут одни частоты выделять, другие гасить. Но тут уже без преобразования фурье можно обойтись. Ты один раз генерируешь нужный тебе фильтр, а затем подмешиваешь его в сигнал. Это самый правильный вариант, но я в этом не шарю совсем.
image.png15 Кб, 440x363
132 3213457
Аноны, какой канонический способ реализации пикрил йобы после синтеза фильтра? Не хочется изобретать велосипедов, но питоновскими функциями пользоваться не вариант. Пистон используется исключительно для синтеза, т. е. для получения коэффициентов передаточной функции, которые определяют его топологию.
133 3227356
Аноны, кто какими либами для вычисления ффт пользуется? Язык C/C++. Реализовал классический Cooley–Tukey но там всегда размер буфера данных это степень двойки. Добить нулями в конце не вариант, т.к. результат преобразования будет отличаться. Как то же это в питоне и матлабе делается...
134 3233089
Пиздос меня из-за вашего цоса ебаного числанули
Артаваздович в треде? Я тебе колеса спущу
135 3239096
>>227356
fftw

>>233089
Помянем
Снимок экрана 2024-09-12 в 17.03.10.png314 Кб, 2222x1256
136 3270952
>>015715 (OP)
Аноны, есть кто живой в этом ёбнутом треде?
Снимок экрана 2024-09-12 в 17.06.14.png47 Кб, 1602x206
137 3270955
>>270952
На вход я подаю массив на пикриле
Почему значения амплитуды колеблются от примерно -6 до 6?
На оригинальном семпл буфере значения от -1 до 1
17262306542971.mp46,4 Мб, mp4,
640x360, 2:44
138 3271933
>>015715 (OP)
Алсо, смотрите, ананасики, что получается, всё равно конечно результат колбасит, не получается так же плавно как в винампе. Почему? Наверно как раз из за того что фаза начинается не с 0, для этого и нужна оконная функция. Буду проверять
3.mp44,2 Мб, mp4,
640x384, 0:19
139 3271935
>>271933
бляяяя не то видео
22.mp45,4 Мб, mp4,
640x384, 0:18
140 3272016
>>271935
Короче оконная функция просто убирает мусорные всплески около нуля, но пики всё равно колбасит. И проц реально херачит. Бля почему же на винампе так плавно сделано, кто знает то
Обновить тред
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски

Скачать тред только с превьюс превью и прикрепленными файлами

Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах.Подробнее