Частотное разложение пошагово: Рецепты частотного разложения

Рецепты частотного разложения

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

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

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

Разложение на две частоты с помощью фильтров Размытие по Гауссу (Gaussian Blur) и Цветовой контраст (High Pass).

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

Для того, чтобы разложить изображение на две частоты, нужно выполнить следующие операции:

1. Создаем копию фонового слоя или объединяем видимые слои на отдельный слой.

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

3. Делаем две копии слоя Base. Первую называем Low или Низкая частота, вторую, соответственно, High или Высокая частота.

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

5. К слою High применяем фильтр Цветовой контраст (High Pass) с таким радиусом, чтобы видеть только ту текстуру кожи, которая нам нужна. Радиус не должен быть слишком малым, иначе часть хорошей текстуры уйдет на слой с низкой частотой, то есть Low. Также он не должен быть и слишком большим, чтобы не выносить на слой с высокой частотой те самые, более крупные дефекты в виде локальных объемов, от которых нам необходимо избавляться.

Неправильный выбор радиуса фильтра Цветовой контраст. Слишком большой радиус.

 Неправильный выбор радиуса фильтра Цветовой контраст. Слишком маленький радиус. 

Оптимальный радиус фильтра Цветовой контраст

6. Подобрав необходимый радиус фильтра Цветовой контраст (High Pass), например, 5 пикселей, запоминаем его и применяем. Очень желательно прописать радиус фильтра в названии слоя. Например, High 5. Дело в том, что если вас неожиданно отвлекут от работы, например, телефонным звонком, вы вполне можете забыть значение и тогда придется начинать все заново.

7. Применяем фильтр Размытие по Гауссу (Gaussian Blur) с таким же радиусом, то есть, в данном случае, 5 пикселей.

8. Меняем режим наложения слоя High на Линейный свет (Linear light)

9. Снижаем контраст слоя High в два раза. Для этого создаем корректирующий слой Яркость/Контрастность, включаем параметр Использовать прежние и ставим значение контраста на минус 50. Применяем через обтравочную маску к слою High.

10. Мы разложили изображение на две частоты. Теперь можно по отдельности работать с детализацией, цветом и объемом. Я не буду подробно останавливаться на процессе, так как подробнее вы можете узнать об этом, купив запись онлайн мастер-класса «Частотное разложение — просто как 2х2»

11. Если же нам важно наоборот, контролировать, какие дефекты останутся на низкой частоте, то есть, работа с низкой частотой в приоритете, то нужно сначала отключить видимость слоя High, затем подобрать нужный радиус Размытия по Гауссу для слоя Low, прописать это значение в названии слоя, а затем, включив видимость слоя High, применить фильтр Цветовой контраст с тем же радиусом, что и фильтр Размытие по Гауссу. Далее все аналогично.

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

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

Недостатки и ограничения метода: недостаточная гибкость, по сравнению с разложением изображения на три пространственных частоты, опасность появления артефактов на контрастных границах при работе на слое с текстурой, некоторая математическая неточность, обусловленная особенностью математики фильтра Цветовой контраст (подробнее об этом можно почитать здесь). Впрочем, надо отметить, что в 99% случаев этой погрешностью можно пренебречь, так как вы сами при ретуши вносите гораздо более существенные «погрешности», несоизмеримо большие.

Разложение на две частоты с помощью операции вычитания.

Для реализации этого метода нужно выполнить следующее:

1. Сделайте копию фонового слоя или копию видимых слоев, аналогично предыдущему алгоритму.

2. Точно также сделайте две копии, назвав одну Low, а другую High.

3. Отключите видимость слоя High.

4. Подберите радиус размытия для слоя Low, примените фильтр Размытие по Гауссу.

5. Перейдите на слой High. Если вы работаете с глубиной цвета 8 бит, то примените команду Внешний канал (Apply Image), установив следующие параметры – слой Low, канал RGB, режим наложения Вычитание, масштаб 2, сдвиг 128. Если вы работаете с глубиной цвета 16 бит, то примените команду Внешний канал, установив следующие параметры – слой Low, канал RGB, инвертировать, режим наложения Добавление, масштаб 2, сдвиг 0.

Параметры команды Внешний канал для режима 8 бит

Параметры команды Внешний канал для режима 16 бит

6. Измените режим наложения слоя High на Линейный свет (Linear light).

Достоинства метода: более аккуратная математика, отсутствие «проблемы High Pass», возможность применения любых фильтров размытия, а не только Размытия по Гауссу. Например, за счет применения фильтра Размытие по поверхности можно полностью решить проблему грязи на контрастных границах, легкость применения при построении «частотных эквалайзеров», то есть, многополосного разложения на пространственные частоты.

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

Разложение на три полосы частот.

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

Именно метод с разложением на три полосы частот я использую для ретуши фотографий, к которым предъявляются очень высокие требования по качеству постобработки. Подробный процесс ретуши со всеми объяснениями вы сможете найти в обучающем онлайн-курсе с домашними заданиями «Секреты профессиональной ретуши»

Как разложить изображение на три пространственных частоты:

1. Делаем базовый слой, как описано выше.

2. Создаем три копии слоя, называя их соответственно Low, Mid и High.

3. Подбираем радиус фильтра Цветовой контраст для слоя High. На этом слое будет только текстура кожи, без излишней информации о локальных объемах и дефектах. Радиус фильтра прописываем в названии слоя.

4. Подбираем радиус фильтра Размытие по Гауссу для слоя Low. Основным критерием здесь является размытие дефектов мелких и средних размеров. Должны остаться только дефекты относительно крупные, такие как следы крупных родимых или пигментных пятен, неровностей светотеневого рисунка. Однако, переусердствовать тоже не следует, иначе средняя частота получится слишком широкой. Как показала практика, оптимальное соотношение между высокой и низкой частотой в большинстве случаев лежит в пределах от 1:3 до 1:4, то есть, радиус размытия в 3-4 раза больше радиуса фильтра Цветовой контраст. Прописываем радиус фильтра в названии слоя.

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

6. Размываем слой Mid по Гауссу с радиусом, который использован на слое High для фильтра Цветовой контраст.

7. Меняем режим наложения слоя Mid на Линейный свет.

8. Меняем режим наложения слоя High на Линейный свет. Уменьшаем контраст этого слоя в два раза, аналогично первому методу.

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

Достоинства метода: больше гибкости в работе, более качественный результат ретуши.

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

Полосовой фильтр.

Этот метод в зарубежных источниках имеет название Inverted High Pass, однако, по аналогии с электрическими фильтрами, здесь имеет место простое подавление некоторой полосы частот, то есть это аналог режекторного или полосового фильтра.

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

Алгоритм действий:

1. Делаем копию фонового слоя, называя ее, например, Fast Retouch, то есть Быстрая Ретушь.

2. Размываем данный слой по Гауссу с таким радиусом, чтобы убрать ненужные локальные объемы.

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

4. Изменяем режим наложения слоя Fast Retouch на Линейный свет. Мы должны увидеть размытую картинку.

5. Теперь снова размываем данный слой по Гауссу, только теперь с радиусом в 2-4 раза меньшим, проявляя мелкую текстуру кожи. Мы получим изображение, которое выглядит несколько необычно.

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

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

Правильно! Использовать для размытия фильтр, оставляющий четкие границы, например, Размытие по поверхности.

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

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

Многополосное разложение или «эквалайзер».

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

Алгоритм создания эквалайзера:

1. Определяемся со значениями радиусов, которые будем использовать. Обычно используются значения 5, 10, 15, 25, 40 пикселей, но вы можете выбирать любые, которые вам подходят.

2. Создаем базовый слой, как в предыдущих методах.

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

4. Называем копии осмысленно, например, по диапазонам радиусов, то есть, 40, 40-25, 25-15, 15-10, 10-5, 5.

5. Отключаем все слои выше слоя 40. Размываем этот слой по Гауссу с радиусом 40 пикселей

6. Включаем вышележащий слой 40-25, переходим на него и выполняем вычитание слоя 40 с помощью команды Внешний канал.

7. Размываем данный слой по Гауссу с радиусом 25 пикселей. Получаем полосу частот от 40 до 25 пикселей.

8. Меняем режим наложения на Линейный свет.

9. Переходим на слой 25-15 и, ВНИМАНИЕ! Не включаем видимость слоя!

10. Выполняем вычитание из данного слоя содержимого всех слоев. То есть, в настройках команды Внешний канал в качестве источника нужно поставить Объединено. Таким образом мы вычтем из данного слоя изображение, размытое на 25 пикселей.

11. Теперь включаем видимость слоя 25-15 и меняем режим наложения на Линейный свет.

12. Размываем слой 25-15 на 15 пикселей.

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

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

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

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

Частотное разложение без потерь.

Все предыдущие способы разложения изображения на пространственные частоты имеют общий недостаток (хотя это скорее особенность), возникающий из-за целочисленной арифметики Photoshop, то есть, из-за округления чисел до целых при расчете. В результате, например, 5 разделить на 2 будет равно уже не 2.5, а 3.

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

Как правило, это отличие не превышает один-два тоновых уровня. Те изменения, которые вносятся впоследствии в картинку при ретуши, несоизмеримо больше. Поэтому не следует обращать на это внимания.

Однако, если для вас все же критична даже такая микроскопическая разница, можете воспользоваться способом честного частотного разложения, без потерь.

Для режима 8 бит алгоритм будет следующий:

1. Создаем базовый слой. Делаем три копии базового слоя.

2. Называем первый слой Low, следующий High_Dark, и верхний High_Light.

3. Отключаем видимость слоев High_Light и High_Dark.

4. Размываем слой Low с необходимым радиусом. При этом можно использовать любые фильтры размытия.

5. Включаем слой High_Dark. Переходим на него. Применяем команду Внешний канал со следующими настройками: источник слой Low, канал RGB, инвертировать, режим наложения Линейный осветлитель (Linear Dodge).

6. Меняем режим наложения слоя High_Dark на Линейный затемнитель (Linear Burn).

7. Включаем слой High_Light и переходим на него. Применяем команду Внешний канал со следующими настройками: источник слой Low, канал RGB, инвертировать, режим наложения Линейный затемнитель.

8. Меняем режим наложения слоя High_Light на Линейный осветлитель.

Если вынести разложенную картинку на отдельный слой с помощью комбинации клавиш CTRL+ALT+SHIFT+E, то при наложении ее на исходную в режиме Разница, с предельно усиленным контрастом, мы ничего не увидим. То есть, метод обеспечивает математически точное частотное разложение. К сожалению, в режиме 16 бит данный метод имеет видимую погрешность. Для 16 бит используется несколько другой алгоритм, который также дает погрешность, но уже на уровне единичных пикселей, что абсолютно некритично.

9. Таким образом, мы получаем два слоя для текстуры – один High_Light со светлой составляющей на черном фоне и второй High_Dark с темной составляющей на белом фоне. Ретушь текстуры в данном случае придется производить в два этапа, сначала одну составляющую, затем другую.

Достоинства метода: математически точное частотное разложение, без погрешностей.

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

Алгоритм визуализации высокочастотной составляющей.

При работе с фильтрами размытия, такими как Размытие по поверхности (Surface Blur) или Медиана (Median) имеется определенная проблема. Заключается она в том, что довольно часто хочется реализовать видимость высокочастотной составляющей, как будто мы применяем фильтр Цветовой контраст. Это необходимо для того, чтобы иметь возможность контролировать, какая текстура будет впоследствии вынесена на высокочастотный слой.

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

Алгоритм визуализации следующий:

1. Создаем базовый слой. Делаем две копии, называем одну Low, другую High. Слой High отключаем.

2. Копируем слой Low, называем копию Temp, что означает временный.

3. Слой Temp инвертируем и устанавливаем непрозрачность 50%. Получаем 50% серый.

4. Теперь над слоем Temp создаем временный корректирующий слой Инверсия (Invert).

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

6. Теперь, если мы будем размывать каким-либо фильтром слой Low, мы увидим серую картинку с текстурой, как будто мы применяем фильтр Цветовой контраст. В данном случае я применил фильтр Медиана

7. Подобрав таким образом параметры фильтра, применяем его, удаляем все временные слои.

8. Затем включаем слой High и получаем высокочастотную составляющую путем вычитания с помощью команды Внешний канал.

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

Более подробно о самых современных методиках быстрой ретуши вы можете узнать из записи онлайн-мастер-класса «Частотное разложение 2.0. Эксклюзивные методики быстрой ретуши» (предупреждаю, что материал там не для начинающих).

А для тех, кто делает только первые шаги в ретуши, рекомендую запись моего трехдневного онлайн-марафона по ретуши «Сделай первые шаги в ретуши портретов»

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

Автор: Евгений Карташов


05/01/2014   
Просмотров : 556207   
Источник: photo-monster. ru   
Автор: Евгений Карташов



Частотное разложение в Фотошопе (Полный урок)

Всем привет на уроке от WiFiGiD.RU. Сегодня мы поговорим про частотное разложение фотографии в Фотошопе. Для начала давайте я коротко расскажу, что это за зверь такой.

Частотное разложение изображения – процедура при которой текстура рисунка отделяется от слоя с оттенком и другими цветовыми тонами.

Очень часто используется при обработке портретных фото. При работе с частотным разложением у нас будет два слоя. Первый (верхний) – слой текстуры кожи и других поверхностей. Второй (нижний или фоновый) – будет содержать информацию только о тоне и цвете.

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

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

Содержание

  1. ШАГ 1: Создание дополнительных слоев
  2. ШАГ 2: Правка текстуры
  3. ШАГ 3: Исправление тона
  4. Задать вопрос автору статьи

и амплитуда a :

 f = np.массив ([261,6, 329,6, 392,0])
а = np.массив ([1,5, 0,5, 1])
s, t = sine_wave (f = f.reshape (3, 1),
                 а=а.изменить(3, 1),
                 продолжительность=0,25,
                 sample_rate=10e3) 

Результатом является набор из трех синусоидальных кривых длиной 0,25 с:

Общий сигнал определяется суммой трех кривых:

 s = np.sum(s, axis=0) 

Преобразование Фурье

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

Мы не будем вдаваться в подробности того, как работает преобразование Фурье. Лучшее объяснение, которое я видел за последнее время, — это вводное видео Гранта Сандерсона. Дело в том, что преобразование описывает сигналы как смеси периодических составляющих. Попробуем на нашем аккорде.

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

 s = s * np.blackman(s.size) 

Оконная функция (зеленая) оказывает сужающее действие на сигнал:

Поскольку функция s определена для данного момента времени t , мы называем это представление сигнала временем 9(е) {\ Displaystyle {\ шляпа {s}} (е)}). Это новое представление называется частотной областью. Он состоит из массива коэффициентов Фурье :

 S = np.fft.fft(s) 

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

 freq = np.fft.fftfreq(s.size, d=1/10e3) 

Результатом является массив из коэффициентов Фурье , большинство из которых равны нулю. Но на частотах аккорда и вблизи них коэффициенты велики. Результат: «рецепт» аккорда с точки зрения синусоидальных монотонов.

Это называется спектром сигнала s . Он показывает величину каждой частотной составляющей.

Частотно-временное представление

Теперь мы знаем, как расплетать политонические сигналы, но давайте введем еще одно усложнение — сигналы, компоненты которых меняются со временем. Такие сигналы называются нестационарный . Например,
подумайте о монотонном сигнале, тон которого меняется в какой-то момент (см. Блокнот для кода, который генерирует этот сигнал):

Мы можем вычислить преобразование Фурье этого сигнала, как и раньше:

 с *= np. blackman(s.size)
S = np.fft.fft(s)
freq = np.fft.fftfreq(s.size, d=1/10e3) 

И постройте амплитуду S в зависимости от массива частот freq :

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

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

Библиотека для построения графиков Python matplotlib предлагает удобный способ построения графика время-частота, также известного как спектрограмма . В одной строке кода он создает график 2D-изображения, показывающий зависимость частоты от времени.

 _ = plt.specgram(s, Fs=1/10e3,
                   NFFT=512, noverlap=480) 

Немного поработав, мы можем получить очень богатое представление наших данных:

График использует алгоритм, называемый кратковременным преобразованием Фурье, или STFT. Это просто делает преобразование Фурье в скользящем окне длиной NFFT с перекрытием точек, перекрывающихся в предыдущем окне. Мы хотим NFFT должен быть длинным, чтобы получить хорошее разрешение по частоте, и мы хотим, чтобы nooverlap был большим, чтобы получить хорошее разрешение по времени.

Обратите внимание, что мы не можем точно увидеть точную частоту компонентов — они не служат достаточно долго, чтобы их можно было зафиксировать. И есть некоторая неопределенность в отношении сроков перехода,
потому что для получения приличного разрешения по частоте нам нужен длинный сегмент сигнала (в данном случае 512 отсчетов) — поэтому мы теряем информацию о времени. Но в целом этот сюжет лучше, чем
только спектр: мы видим, что есть по крайней мере два сильных сигнала с частотами около 250 и 400 Гц, и что изменение происходит примерно через 0,125 с.

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

Существует большое сходство между этим частотно-временным разложением и нотной записью:

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

Человеческий голос произносит «SEG». Сонорные гласные имеют гармоники (горизонтальные полосы), а шипящие звуки «С» и первой части «Г» — шумоподобные.
спектральные отклики.

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

Наконец, вот вулканический «крик» — гармонический толчок, предшествующий взрывному извержению на горе Редут, Аляска, в марте 2009 года. На слух это звучит невероятно, но спектрограмма
тоже интересно. В отличие от чириканья летучей мыши, этот 15-минутный временной ряд нужно ускорить, чтобы его услышать.

Продолжить изучение

Все рисунки в этой записной книжке можно воспроизвести с помощью кода в записной книжке Jupyter, прилагаемой к этой статье, на https://github.com/seg/tutorials-2018. Вы даже можете запустить код в облаке и поиграть с ним в браузере. Ничего не сломаешь — не волнуйся!

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

Счастливого разложения!

Автор, ответственный за переписку

  • Автор, ответственный за переписку: Matt Hall, Agile Scientific, Mahone Bay, Новая Шотландия, Канада. Электронная почта: mattagilescientific.com

Благодарности

Фортепианная запись из BWV846 Баха лицензирована Кимико Ишизака CC-BY на http://welltemperedclavier.org. Данные чириканья летучих мышей лицензированы CC-BY-NC пользователем http://freesound.org klankschap. Спасибо Алисии Хотовек-Эллис за ее помощь с данными о горе Редут, записанными вулканической обсерваторией Геологической службы США на Аляске.

Внешние ссылки

найти литературу о
Частотно-временное разложение
  • Мадагаскарский рабочий процесс — воспроизводимый с помощью Мадагаскарского программного обеспечения с открытым исходным кодом

Частотно-временная декомпозиция — SEG Wiki

  • 1 Преобразование Фурье
  • 2 Частотно-временное представление
  • 3 Продолжить изучение
  • 4 Автор, ответственный за переписку
  • 5 Благодарностей
  • 6 Внешние ссылки
  • Рассмотрим форму волны или сигнала s как функцию времени t . Например, синусоидальная волна с некоторой амплитудой a и с некоторой частотой f может быть определена как

    s (t) = asin⁡ (2πft) {\ displaystyle s (t) = a \ sin (2 \ pi ft)}.

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

     по определению sine_wave(f, a, продолжительность, частота дискретизации):
        t = np.arange(0, продолжительность, 1/sample_rate)
        return a * np.sin(2 * np.pi * f * t), t 

    Теперь мы можем вызвать эту функцию, передав ей частоту f = 261,63 Гц. Мы попросим 0,25 с с частотой дискретизации 10 кГц.

     с, t = sine_wave(f=261,63,
                       а=1,
                       продолжительность=0,25,
                       sample_rate=10e3) 

    Это приводит к следующему сигналу, обычно называемому временной ряд , который мы визуализируем путем построения графика s в зависимости от времени t :

    Я изобразил результирующий массив в виде линии, но на самом деле это ряд дискретных точек, представленных в Python в виде массива чисел, начиная с этих четырех:

     array([ 0.  , 0.1636476 , 0.32288289, 0.47341253]) 

    Построим первые 80 точек:

    Когда воздух вибрирует на этой частоте, мы слышим среднее До или До4. Вы можете прослушать примечание для себя в Jupyter Notebook, сопровождающем эту статью, по адресу https://github.com/seg/tutorials-2018.
    (В блокноте также содержится весь код для построения графиков.) Код для отображения массива s , так как звук очень короткий:

     из IPython.display import Audio
    фс = 10e3
    Audio(s, rate=fs) 

    Этот сигнал имеет длину всего 0,25 с, а шевелений уже много. Мы бы хотели иметь сейсмические данные на этой частоте! Большинство сейсмических данных воспроизводятся только на нижних 20–30 клавишах 88-клавишного фортепиано — действительно, самая нижняя клавиша — это A0, что на частоте 27,5 Гц превышает пиковую частоту многих старых съемок.

    Если бы мы хотели узнать частоту этого сигнала, мы могли бы предположить, что это чистый тон, и просто подсчитать количество циклов в единицу времени. Но естественные сигналы редко бывают монотонными, так что давайте сделаем более интересный сигнал. Мы можем использовать нашу функцию, чтобы создать до-мажорный аккорд с тремя нотами (C4, E4 и G4), передав векторы-столбцы (изменив форму массивов) для частоты 9.0021 f и амплитуда a :

     f = np.массив ([261,6, 329,6, 392,0])
    а = np.массив ([1,5, 0,5, 1])
    s, t = sine_wave (f = f.reshape (3, 1),
                     а=а.изменить(3, 1),
                     продолжительность=0,25,
                     sample_rate=10e3) 

    Результатом является набор из трех синусоидальных кривых длиной 0,25 с:

    Общий сигнал определяется суммой трех кривых:

     s = np.sum(s, axis=0) 

    Преобразование Фурье

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

    Мы не будем вдаваться в подробности того, как работает преобразование Фурье. Лучшее объяснение, которое я видел за последнее время, — это вводное видео Гранта Сандерсона. Дело в том, что преобразование описывает сигналы как смеси периодических составляющих. Попробуем на нашем аккорде.

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

     s = s * np.blackman(s.size) 

    Оконная функция (зеленая) оказывает сужающее действие на сигнал:

    Поскольку функция s определена для данного момента времени t , мы называем это представление сигнала временем 9(е) {\ Displaystyle {\ шляпа {s}} (е)}). Это новое представление называется частотной областью. Он состоит из массива коэффициентов Фурье :

     S = np.fft.fft(s) 

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

     freq = np.fft.fftfreq(s.size, d=1/10e3) 

    Результатом является массив из коэффициентов Фурье , большинство из которых равны нулю. Но на частотах аккорда и вблизи них коэффициенты велики. Результат: «рецепт» аккорда с точки зрения синусоидальных монотонов.

    Это называется спектром сигнала s . Он показывает величину каждой частотной составляющей.

    Частотно-временное представление

    Теперь мы знаем, как расплетать политонические сигналы, но давайте введем еще одно усложнение — сигналы, компоненты которых меняются со временем. Такие сигналы называются нестационарный . Например,
    подумайте о монотонном сигнале, тон которого меняется в какой-то момент (см. Блокнот для кода, который генерирует этот сигнал):

    Мы можем вычислить преобразование Фурье этого сигнала, как и раньше:

     с *= np. blackman(s.size)
    S = np.fft.fft(s)
    freq = np.fft.fftfreq(s.size, d=1/10e3) 

    И постройте амплитуду S в зависимости от массива частот freq :

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

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

    Библиотека для построения графиков Python matplotlib предлагает удобный способ построения графика время-частота, также известного как спектрограмма . В одной строке кода он создает график 2D-изображения, показывающий зависимость частоты от времени.

     _ = plt.specgram(s, Fs=1/10e3,
                       NFFT=512, noverlap=480) 

    Немного поработав, мы можем получить очень богатое представление наших данных:

    График использует алгоритм, называемый кратковременным преобразованием Фурье, или STFT. Это просто делает преобразование Фурье в скользящем окне длиной NFFT с перекрытием точек, перекрывающихся в предыдущем окне. Мы хотим NFFT должен быть длинным, чтобы получить хорошее разрешение по частоте, и мы хотим, чтобы nooverlap был большим, чтобы получить хорошее разрешение по времени.

    Обратите внимание, что мы не можем точно увидеть точную частоту компонентов — они не служат достаточно долго, чтобы их можно было зафиксировать. И есть некоторая неопределенность в отношении сроков перехода,
    потому что для получения приличного разрешения по частоте нам нужен длинный сегмент сигнала (в данном случае 512 отсчетов) — поэтому мы теряем информацию о времени. Но в целом этот сюжет лучше, чем
    только спектр: мы видим, что есть по крайней мере два сильных сигнала с частотами около 250 и 400 Гц, и что изменение происходит примерно через 0,125 с.

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

    Существует большое сходство между этим частотно-временным разложением и нотной записью:

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

    Человеческий голос произносит «SEG». Сонорные гласные имеют гармоники (горизонтальные полосы), а шипящие звуки «С» и первой части «Г» — шумоподобные.
    спектральные отклики.

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

    Наконец, вот вулканический «крик» — гармонический толчок, предшествующий взрывному извержению на горе Редут, Аляска, в марте 2009 года. На слух это звучит невероятно, но спектрограмма
    тоже интересно. В отличие от чириканья летучей мыши, этот 15-минутный временной ряд нужно ускорить, чтобы его услышать.

    Продолжить изучение

    Все рисунки в этой записной книжке можно воспроизвести с помощью кода в записной книжке Jupyter, прилагаемой к этой статье, на https://github.com/seg/tutorials-2018. Вы даже можете запустить код в облаке и поиграть с ним в браузере. Ничего не сломаешь — не волнуйся!

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