Подведение итогов дня 099

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

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



100 Days Of ML Code — День 099
Обзор дня 098medium.com



Сегодня мы продолжим с того места, на котором остановились в 99-м дне.

Процесс

Работа с окнами — это когда мы берем сигнал и разбиваем его на крошечные кусочки. Затем мы берем каждый из этих крошечных кусочков и делаем то, что называется периодизацией. На самом деле ничего в этом нет, мы просто притворяемся, что маленький бит повторяется бесконечно, так что это периодическая выборка, а затем к каждому из этих маленьких окон мы применяем метод, называемый быстрым преобразованием Фурье, который вы часто будете видеть сокращенно как БПФ, и поэтому мы применяем это процесс, чтобы преобразовать наш набор значений амплитуд во временной области в информацию о частоте. Итак, я собираюсь пройтись по каждому из этих шагов более подробно.

Оконный режим

Первый шаг — оконная обработка, поэтому мы делим звук на равные по размеру перекрывающиеся кадры. Итак, позвольте мне показать вам, что я имею в виду. Мы выбираем количество образцов, которые будут включены в каждый кадр. Например, размер нашего кадра может составлять 1024 семпла. Итак, это крошечные кадры. Таким образом, 1024 выборки при частоте дискретизации 44 100 герц составляют примерно 140-ю долю секунды. Так малюсенькие доли секунды.

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

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

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

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

Периодизация

Итак, мы берем маленькое окошко, как на изображении А выше, и повторяем его, и повторяем, и повторяем, и повторяем, и повторяем, и снова, и снова, как на изображении В выше. Мы просто притворяемся, что повторение продолжается вечно. Итак, мы выполнили периодическое требование теоремы Фурье.

Быстрое преобразование Фурье

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

Что приходит, так это эти выборки амплитуды во времени в кадре. Таким образом, если размер нашего кадра равен 1024, у нас будет 1024 входных значения амплитуды. На выходе получится набор амплитуд и фаз для каждого частотного бина.

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

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

Давайте рассмотрим пример здесь, чтобы убедиться, что это совершенно ясно. Таким образом, мой размер кадра составляет 1024 выборки, а моя частота дискретизации составляет 44 100 Гц, тогда моя частота Найквиста будет 44 100, деленная на 2, то есть 22 050. Итак, мое количество бинов - это размер кадра, 1024, разделенный на два. Итак, это 512, а ширина моего бина будет моей частотой Найквиста, которая равна 22 050 Гц, деленная на количество моих бинов, 512. Получается около 43 Герц. Это чуть больше 43 герц. Это означает, что мои частотные интервалы будут располагаться через ноль, 43, 86, 129 и т. д. и т. д. вплоть до 22 050 Гц.

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

Проблемы и компромиссы

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

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

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

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

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

Вау, ты все еще здесь. Это 100-й день. Вы заслуживаете похвалы за то, что продержались здесь до конца. Я надеюсь, вы нашли путешествие от дня 001 до дня 100 информативным. Спасибо, что нашли время в своем графике и позволили мне быть вашим проводником в этом путешествии. И до следующего раза, будь легендой.