Разделение источника аудиосигнала с нейронной сетью

То, что я пытаюсь сделать, - это разделение источников звука и извлечение его основного тона из необработанного сигнала. Я сам смоделировал этот процесс, как показано ниже: model to decomposite the raw signal Каждый источник осциллирует в нормальных режимах, часто делает его частотное умножение на частоту компонентов. Он известен как Harmonic. А затем резонанс, наконец, объединены линейно.

Как видно выше, у меня есть много намеков на частотную характеристику аудиосигналов, но почти не знаю, как "разделить" его. Я пробовал бесчисленные мои собственные модели. Это один из них:

  • FFT PCM
  • Получить пиковые частотные ячейки и амплитуды.
  • Вычислить частотные ячейки кандидата.
  • Для каждого кандидата по тангажу, используя рекуррентную нейронную сеть, анализируйте все пики и найдите соответствующую комбинацию пиков.
  • Отдельные анализируемые кандидаты по тангажу.

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

Ответ 1

Поскольку никто на самом деле не пытался ответить на это, и потому что вы отметили его тегом neural-network, я собираюсь обратиться к пригодности нейронной сети к этой проблеме. Поскольку вопрос был несколько нетехническим, этот ответ также будет "высоким".

Нейронные сети требуют какой-то набор образцов, из которого можно учиться. Чтобы "научить" нейронную сеть решить эту проблему, вам, по существу, нужно будет иметь рабочий набор известных решений для работы. У тебя есть это? Если да, читайте дальше. Если нет, то нейронные, вероятно, не то, что вы ищете. Вы заявили, что у вас есть "много намеков", но нет реального решения. Это заставляет меня поверить, что у вас, вероятно, нет наборов образцов. Если вы можете получить их, отлично, иначе вам может быть не повезло.

Предположим теперь, что у вас есть образец набора Raw Signal образцов и соответствующих Source 1 и Source 2 выводов... Ну, теперь вам понадобится метод для определения топологии. Предполагая, что вы не знаете много о том, как работают нейронные сети (и не хотят), и если вы также не знаете точной степени сложности проблемы, я бы, вероятно, рекомендовал с открытым исходным кодом NEAT, чтобы вы начали. Я никоим образом не связан с этим проектом, но я использовал его, и он позволяет (относительно) разумно эволюционировать топологии нейронной сети, чтобы соответствовать этой проблеме.

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

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

Прогнозирование временных рядов через нейронные сети

Размер скользящего окна может быть важным, особенно если вы не, используя рекуррентные нейронные сети. Рекуррентные сети позволяют нейронным сетям запоминать предыдущие временные шаги (за счет производительности - NEAT уже повторяется, так что выбор для вас здесь). Вероятно, вам понадобится длина скользящего окна (т.е. Количество временных меток в прошлом, предоставленных на каждом временном шаге) примерно равным вашему консервативному предположению о наибольшем количестве предыдущих временных меток, необходимых для получения достаточной информации для разделения формы волны.

Я бы сказал, что для этого вам, вероятно, достаточно информации.

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

Я бы предположил, что вы захотите иметь 2 выходных нейрона, обеспечивающих нормализованную амплитуду (которую вы бы денормализировали через инверсию сигмоидной функции) в качестве вывода, представляющего Source 1 и Source 2 соответственно. Для значения пригодности (как вы судите о способности каждой тестируемой сети решить проблему) было бы что-то вроде линии отрицательной ошибки RMS выходного сигнала от фактического известного сигнала (т.е. Тестировалось против образцов я имел в виду ранее, что вам нужно будет купить).

Достаточно сказать, что это не будет тривиальной операцией, но она может работать, если у вас достаточно образцов для тренировки сети. Какое количество образцов? Хорошо, как правило, это число, которое достаточно велико, так что простая полиномиальная функция порядка N (где N - количество нейронов в сетевой сети, которое требуется для решения проблемы) не может подходит всем образцам точно. Это в основном для обеспечения того, чтобы вы не просто перенастраивали проблему, что является серьезной проблемой для нейронных сетей.

Надеюсь, это было полезно! Удачи.

Дополнительная заметка: ваша работа на сегодняшний день не была бы напрасной, если вы спуститесь по этому маршруту. Нейронная сеть, скорее всего, получит дополнительную "помощь" в виде БПФ и других "входов" для моделирования сигналов, поэтому вы можете подумать о том, чтобы пройти обработку сигнала, которую вы уже сделали, организовать в аналоговое непрерывное представление и подавать его как входной сигнал вместе с входным сигналом.