Другой Способ Разложить Сигнал На Спектр

Привет всем, здесь я хочу рассказать об алгоритме анализа аудиосигнала, который позволяет разбирать сигнал на отдельные волны, конечно это не дает 100% точности, но тем не менее результат, на мой взгляд, вполне хороший .



Другой способ разложить сигнал на спектр

Лучше всего работу видно на музыке: И ссылки на другие примеры разных жанров.

Металдет-Торнадо душ: Вне связи: Итак, для декомпозиции необходимо предпринять следующие шаги: — из исходного сигнала необходимо получить 8 промежуточных сигналов; — Из этих промежуточных сигналов и исходного сигнала нужно получить 8 сигналов — слоев, которые можно разобрать на отдельные волны; — Посчитайте, сколько волн в каждом слое и какова их амплитуда.

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

По сути, это производная дискретной функции.

Чтобы найти ее для каждого момента исходного сигнала, нужно задать 1 параметр: период, за который находится эта производная.

Значение производной представляет собой коэффициент наклона в заданном интервале; его можно найти, например, методом наименьших квадратов.

Требуется рассчитать 8 промежуточных сигналов с 8 разными периодами.

Самый простой набор периодов: 4, 8, 16, 32, 64, 128, 256, 512. Если период указан, производная рассчитывается для каждого отсчета сигнала по формуле наименьших квадратов.

Это похоже на скользящую среднюю, только здесь это не скользящая средняя, а скользящая производная текущего интервала.

Это создает 8 производных сигналов и 1 исходный сигнал.

Теперь необходимо проинтегрировать каждый из 8 производных сигналов.

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

После этого получается 8 промежуточных слоев.

Следующим шагом является получение слоев, которые можно разделить на отдельные волны.

Итак, теперь вам нужно получить 8 слоев.

Слои рассчитываются следующим образом: Layer0=промежуточный0-исходный сигнал слой1=промежуточный1-промежуточный0 слой2=промежуточный2-промежуточный1 слой3=промежуточный3-промежуточный2 слой4=промежуточный4-промежуточный3 слой5=промежуточный5-промежуточный4 слой6=промежуточный6-промежуточный5 слой7=промежуточный7-промежуточный6 слой8=промежуточный7 Последний слой не является разницей, а просто равен последнему промежуточному сигналу.

Можно попробовать другой способ, а именно вычислить последующие промежуточные сигналы из предыдущих промежуточных.

Но текущая программа использует 1 вариант. Теперь, чтобы разобрать слои на отдельные волны, нужно просто посчитать области, где значения увеличиваются, а где уменьшаются.

На самом деле длительность участков — это их длины волн.

Участки сигналов, где значения сигналов постоянны, следует просто пропускать.

Чтобы найти амплитуду сигнала в спектре в определенном интервале, нужно сложить все амплитуды волн, умноженные на их длину.



Другой способ разложить сигнал на спектр

Код, вычисляющий промежуточный сигнал, выглядит следующим образом: здесь wavesize — это количество сэмплов signal[] – массив с исходным сигналом SY=0,SX=0,SXX=0,SXY=0,Ky=0 — переменные типа float Шаг2=ШАГ/2, где ШАГ — период (4,8,16,32,64,128,256,512)

   

for(int i=Step2;i<wavesize-Step2;i++){

Теги: #Звук #программирование #цветная музыка
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.