|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Sergey Andrianov 2:5020/1507.400 28 Mar 2002 22:25:40 To : voodoochile Subject : Re: Получение огибающей звуковой волны -------------------------------------------------------------------------------- Однажды 28-Mar-02 в 15:28 voodoochile (via gate) написал All по поводу -=- Получение огибающей звуковой волны -=- v> Я пытаюсь написать WAV->MIDI преобразователь(преобразует аудио не v> только в последовательность стартов-стопов, но и генерирует функции для v> volume, pitch) v> Задачу построения огибающей я решил примитивно(имитация аналогового v> пик-детектора): v> if(envelope[Chan] < ps[ii]) { v> ps[ii] = (short)(ps[ii] + ga * (envelope[Chan] - ps[ii])); v> envelope[Chan] = ps[ii]; v> } else { v> ps[ii] = (short)(ps[ii] + gr * (envelope[Chan] - ps[ii])); v> envelope[Chan] = ps[ii]; v> } v> Это одна итерация цикла. v> Здесь v> envelope[Chan] -- значение огибающей, v> ps[ii] - то, что приходит из входного буфера. Вообще-то пиковый детектор он на то и пиковый детектор, чтобы давать не огибающую, а что-то совсем другое. Думаю, для огибающей все-таки нужен выпрямитель с ФHЧ. То есть вместо pp[ii] берешь abs(pp[ii]), и ga=gr, а раз так, то условие можно убрать: envelope[ii] := envelope[ii-1]*(1-k) + abs(ps[ii])*k, где k << 1. v> ВОПРОС: v> существуют ли иные алгоритмы получения огибающей и частоты тона, v> работающие в режиме реального времени? v> Частоту тона мерить здесь оч. сложно, поскольку цепляются не только пики v> основного тона :(( Можно произвести Фурье-анализ, можно пропустить сигнал через ФHЧ, можно пытаться разделить сигнал на несколько частотных полос и искать в наинизшей области, в которой амплитуда не менее определенного процента от максимальной (т.е. набор полосовых фильтров и детекторов огибающей + сравнение/выбор полосы + измерение периода отфильтрованного узкополосного сигнала в выбранной полосе). Kстати, приготовься к тому, что алгоритм все равно при некоторых сигналах будет работать неправильно. Тебе,наверное, интересно будет узнать, что некоторые инструменты вообще не содержат в спектре основного тона. В этом случае перед обработкой можно применить нельнейное преобразование, например, численный аналог триггера Шмитта. v> Я нашел в Сети статью каких-то японцев v> http://www.icspat.com/papers/30mfi.pdf . v> Они пытаются получать эти пики при помощи нейронной сети. Все вроде v> понятно, но не ясно , KАKИМ ОБРАЗОМ рассчитываются значения весов v> нейронов! Они не рассчитываются, они "обучаются". v> Hайти в сети исходные тексты программ по этой тематике мне пока не v> удалось. Hеудивительно. До свидания, в 21:09 MSK Sergey --- * Origin: Sergiev Posad (2:5020/1507.400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/52053CA38A55.html, оценка из 5, голосов 10
|