Как сделать ресемплинг

Добавил пользователь Владимир З.
Обновлено: 05.10.2024

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

Что такое ресемплинг? В изначальном значении этого слова ресемплинг означает пересчёт дискретных значений звукового файла под необходимые нам параметры.. Страшные словосочетания, согласен:) Но простым человеческим языком это изменение частоты дискретизации, например, с 44100 Hz на 88200Hz.. Эти характеристики относятся к цифровому звуку и означают что в одной секунде звука содержится 44100 или же 88200 дискретных значений (т. е. по сути очень маленьких семплов), т. е. частота 88200 даёт более точный результат.. Но углубляться в эту тему я сейчас не собираюсь, достаточно знать что стандартом для CD является значение в 44100Hz..Другим, более интересным значением термина ресемплинг является именно то, о чём я буду рассказывать ниже..Суть в том, что мы можем обыграть даже простые партии синтезаторов , драм-линий, вокала и остальных элементов трека гораздо эффективнее и интереснее при помощи ресемплинга.. Что же для этого нужно? Всё просто — выбери какую нибудь часть, допустим, ударных [4 тактов будет вполне достаточно] и сохрани её на жёсткий диск посредством рендеринга или запиши на предварительно созданную аудио-дорожку.. Как это сделать, надеюсь, объяснять не нужно?:) Дальше: вытворяем с этим аудио-фрагментов всё, что считаем нужным — реверс, обработку разных отрезков разными эффектами , автоматизацию, нарезку на мелкие части и многократное их повторение или перемешивание и т. д… Тут уж дело фантазии:) Что это нам даёт? Громадные и гибкие возможности в управлении, индивидуальность, нестандартные ходы, независимость от новомодных вычурных VST , возможность создания неограниченных переплетений эффектов… В общем-то перечислять можно долго.. Этот приём очень старый, но большинством продюсеров почему то игнорируется.. Хотя, нет — знаю почему.. Тупо лень:)

redrum

Member

когда в проект (частота 48кГц) импортирую мп3/вав файл его приходится ресэмплировать чтобы он "не исказился"..
как мне правильно сделать его на 1\2\3 тона выше?
пример: в обджект эдиторе после ресэмплинга следующие цифры -
pitch -1.47
pitch factor 0.91875
stretch factor 1.08844


вопрос 2: не могу догнать что такое pitch factor и stretch factor (хэлп на англ читал)

буду признателен за доходчивый ответ

olegsound

Moderator

redrum, при импорте не нужен ресемплинг из обжект эдитора - от меняет высоту и время воспроизведения.

В данном режиме оригинальная высота файла обозначается как 1, 0.91 говорит о том, что файл теперь звучит немного ниже (на 1.47 тона).
То же с темпом воспроизведения - он больше 1, то есть файл теперь играется дольше оригинала.

Без изменения высоты и длительности? Не использовать режим Resample а напр. Standart, и задать нужное изменение высоты вручную в обжект эдиторе.

redrum

Member

olegsound, спасибо! дело в том что у меня проект по дефолту 48кГц и импортируя файл предлагают его либо пересэмплировать либо переконвертировать во избежании искажения файла. (при 44кГц такой заморочки нет),
попробую конкретицировать вопрос:
после подобного ресэмплинга импортированный файл звучит без изменений но в обджект эдиторе он преобретариет следующие значения (как я написал в 1м посте).. значит ли, чтобы поднять на его 1 тон (без привязки к темпу), нужно питч поставить: -0,47, а на 2 тона: 0,53 ?

Jolla

Well-Known Member

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

от -1.47 тон вверх: - 0.47, 2 тона: 1.47, 3 тона : 2.47 соответственно. меняется целая часть значения.

AlexLazer

Well-Known Member

Я конвертирую при импорте и заморочек потом нет. И если большая часть материала в 44.1 то зачем создавать проект 48 .

Целью прогнозного моделирования является создание моделей, которые делают хорошие прогнозы на основе новых данных.

У нас нет доступа к этим новым данным во время обучения, поэтому мы должны использовать статистические методы для оценки эффективности модели на новых данных.

Этот класс методов называется методами передискретизации, поскольку они передискретизируют ваши доступные данные обучения.

В этом руководстве вы узнаете, как реализовать методы пересэмплирования с нуля в Python.

После завершения этого урока вы узнаете:

  • Как реализовать поезд и протестировать разделение ваших данных.
  • Как реализовать кросс-валидацию ваших данных.
  • Обновление январь / 2017: Изменено вычисление fold_size в cross_validation_split (), чтобы оно всегда было целым числом. Исправляет проблемы с Python 3.
  • Обновление май / 2018: Исправлена ​​опечатка LOOCV.
  • Обновление Авг / 2018: Протестировано и обновлено для работы с Python 3.6.


Описание

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

Затем можно использовать точные оценки производительности, чтобы помочь вам выбрать, какой набор параметров модели использовать или какую модель выбрать.

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

Существует два распространенных метода пересчета:

  • Поезд и тестовый раздел ваших данных.
  • K-кратная перекрестная проверка.

В этом уроке мы рассмотрим использование каждого и когда использовать один метод над другим.

Руководство

Этот урок разделен на 3 части:

  1. Поезд и тест Сплит.
  2. K-кратная перекрестная проверка.
  3. Как выбрать метод пересэмплирования.

Эти шаги обеспечат основы, необходимые для обработки повторной выборки набора данных для оценки производительности алгоритма на новых данных.

1. Тренировка и тестовый сплит

Разделение поезда и теста является самым простым методом повторной выборки.

Как таковой, он наиболее широко используется.

Разделение поезда и теста включает в себя разделение набора данных на две части:

  • Учебный набор данных.
  • Тестовый набор данных.

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

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

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

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

Мы можем реализовать обучение и тестирование разбиения набора данных в одной функции.

Ниже приведена функция с именемtrain_test_split ()разбить набор данных на поезд и проверить разделение. Он принимает два аргумента: набор данных для разделения в виде списка списков и необязательный процент разделения.

Используется процент разделения по умолчанию 0,6 или 60%. Это назначит 60% набора данных обучающему набору данных, а оставшиеся 40% - тестовому набору данных. 60/40 для поезда / теста является хорошим разделением данных по умолчанию.

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

Строки, которые остаются в копии набора данных, затем возвращаются в качестве тестового набора данных.

randrange ()Функция из случайной модели используется для генерации случайного целого числа в диапазоне от 0 до размера списка.

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

Полный пример приведен ниже.

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

Выполнение примера приводит к выводу ниже.

Данные в обучающем и тестовом наборе напечатаны, показывая, что 6/10 или 60% записей были назначены набору обучающих данных, а 4/10 или 40% записей были назначены набору тестов.

2. K-кратная перекрестная проверка

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

K-кратный метод перекрестной проверки (также называемый просто перекрестной проверкой) - это метод повторной выборки, который обеспечивает более точную оценку производительности алгоритма

Для этого сначала разбивают данные на k групп. Затем алгоритм обучается и оценивается k раз, а производительность суммируется с использованием средней оценки производительности. Каждая группа данных называется сгибанием, отсюда и название k-кратной перекрестной проверки.

Он работает, сначала обучая алгоритм для k-1 групп данных и оценивая его в k-й удерживающей группе в качестве тестового набора. Это повторяется, так что каждой из k групп предоставляется возможность удержаться и использоваться в качестве тестового набора.

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

Вам следует выбрать значение для k, которое разбивает данные на группы с достаточным количеством строк, чтобы каждая группа все еще представляла исходный набор данных. Хорошим значением по умолчанию является k = 3 для небольшого набора данных или k = 10 для большего набора данных. Быстрый способ проверить, являются ли размеры сгиба репрезентативными, состоит в том, чтобы рассчитать итоговую статистику, такую ​​как среднее значение и стандартное отклонение, и посмотреть, насколько значения отличаются от одной и той же статистики для всего набора данных.

Мы можем повторно использовать то, что мы узнали в предыдущем разделе, при создании разделения обучения и теста при реализации перекрестной проверки в k-кратном порядке.

Вместо двух групп мы должны вернуть k-кратные значения или k групп данных.

Ниже приведена функция с именемcross_validation_split ()который реализует перекрестную проверку данных.

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

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

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

Затем мы создаем список строк с требуемым размером и добавляем их в список сгибов, который затем возвращается в конце.

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

Полный пример приведен ниже.

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

Значение k, равное 4, используется в демонстрационных целях. Мы ожидаем, что 10 рядов, разделенных на 4 сгиба, приведут к 2 строкам на сгиб, а остаток от 2 не будет использоваться при разбиении.

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

3. Как выбрать метод пересэмплирования

Золотой стандарт для оценки производительности алгоритмов машинного обучения на новых данных - перекрестная проверка в k-кратном размере.

При правильной настройке перекрестная проверка в k-кратном режиме дает надежную оценку производительности по сравнению с другими методами, такими как разделение на поезда и тесты.

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

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

Только одна модель построена и оценена.

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

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

В таких случаях может быть мало необходимости использовать перекрестную валидацию в k-кратном порядке в качестве оценки алгоритма, и разделение по поездам и тестам может быть столь же надежным.

расширения

В этом уроке мы рассмотрели два наиболее распространенных метода повторной выборки.

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

  • Повторный поезд и тест, Именно здесь используется разделение поезда и теста, но процесс повторяется много раз.
  • LOOCV или Leave One Out Cross Validation, Это форма k-кратной перекрестной проверки, где значение k фиксируется на n (количество обучающих примеров).
  • стратификация, В задачах классификации именно здесь баланс значений классов в каждой группе должен соответствовать исходному набору данных.

Вы реализовали расширение?
Поделитесь своим опытом в комментариях ниже.

Обзор

В этом руководстве вы узнали, как реализовать методы пересэмплирования в Python с нуля.

В частности, вы узнали:

  • Как реализовать метод разделения поездов и испытаний.
  • Как реализовать метод перекрестной проверки k-кратности.
  • Когда использовать каждый метод

У вас есть вопросы о методах пересэмплирования или об этом посте?
Задайте свои вопросы в комментариях, и я сделаю все возможное, чтобы ответить.

Читайте также: