Інтерактивний вступ до перетворень Фур’є

Jez Swanson

Переклад українською – Єгор Коротенко

Перетворення Фур'є — це інструмент, який використовується в багатьох різних сферах. Ця стаття є поясненням того, що робить перетворення Фур'є, та деяких способів його корисного застосування. А також того, як з його допомогою можна створювати гарні речі, як-от цю:

Я збираюся пояснити, як працює ця анімація, і попутно розповісти про перетворення Фур'є!

Наприкінці ви матимете хороше уявлення про:

Наразі ми залишимо математику та рівняння осторонь. За цим стоїть багато цікавої математики, але краще спочатку почати з того, що воно насправді робить і навіщо його використовувати. Якщо ви хочете дізнатися більше про те, як саме це працює, нижче наведено список рекомендованої літератури!

То що ж це таке?

Простіше кажучи, перетворення Фур'є — це спосіб розкласти щось на набір синусоїд. Як зазвичай, назва походить від імені людини, яка жила давно, на прізвище Фур'є.

Почнемо з кількох простих прикладів і поступово перейдемо до складніших. Спершу ми розглянемо хвилі — закономірності, що повторюються з часом.

Ось приклад хвилі:

Цей хвилястий візерунок можна розкласти на синусоїдальні хвилі. Тобто, коли ми додаємо ці дві синусоїдальні хвилі, ми знову отримуємо вихідну хвилю.

Перетворення Фур'є — це спосіб, що дозволяє нам узяти комбіновану хвилю і знову отримати кожну з синусоїдальних хвиль. У цьому прикладі ви можете зробити це майже в умі, просто поглянувши на початкову хвилю.

Навіщо? Виявляється, чимало речей у реальному світі взаємодіють на основі цих синусоїдальних хвиль. Ми зазвичай називаємо їх частотами хвилі.

Найбільш очевидним прикладом є звук — коли ми чуємо звук, ми не чуємо цю хвилясту лінію, а чуємо різні частоти синусоїдальних хвиль, що утворюють цей звук.

Можливість розділити їх на комп'ютері може дати нам розуміння того, що насправді чує людина. Ми можемо зрозуміти, наскільки високим чи низьким є звук, або визначити, яка це нота.

Ми також можемо застосовувати цей процес до хвиль, які не виглядають так, ніби вони складаються з синусоїдальних хвиль.

Давайте поглянемо на цей приклад. Він називається прямокутним сигналом.

Це не так легко помітити, але його також можна розкласти на синусоїди.

Цього разу нам потрібно їх багато — технічно, нескінченна кількість, щоб ідеально її представити. У міру того як ми додаємо все більше і більше синусоїд, патерн стає все ближчим і ближчим до прямокутної хвилі, з якої ми починали.

Перетягніть повзунок угорі, щоб поекспериментувати з кількістю синусоїд.

Візуально ви помітите, що насправді саме перші кілька синусоїд вносять найбільшу різницю. Коли повзунок знаходиться на середині, ми маємо загальну форму хвилі, але вона вся хвиляста. Нам просто потрібна решта малих хвиль, щоб згладити цю хвилястість.

Коли ви послухаєте хвилю, ви почуєте, як звук стає нижчим, оскільки ми видаляємо вищі частоти.

Цей процес працює так само для будь-якої лінії, що повторюється. Cпробуйте намалювати власну!

Малюйте тут!

Переміщуйте повзунок, щоб побачити, як у міру додавання більшої кількості синусоїд результат стає все ближчим і ближчим до вашого малюнка

Знову ж таки, окрім додаткової хвилястості, хвиля виглядає досить схожою лише з половиною синусоїд.

Ми, на справді, можемо використати той факт, що хвиля є досить схожою, собі на користь. За допомогою перетворення Фур’є ми можемо виділити важливі частини звуку та зберегти лише їх, щоб отримати результат, досить близький до оригінального звуку.

Зазвичай на комп’ютері ми зберігаємо хвилю як послідовність точок.

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

Це, по суті, те, що роблять MP3-файли, за винятком того, що вони винахідливіше вибирають, які частоти залишати, а які відкидати.

Отже, у цьому випадку ми можемо використовувати перетворення Фур'є, щоб зрозуміти фундаментальні властивості хвилі, а потім ми можемо використовувати це для таких речей, як стиснення.

Гаразд, тепер давайте детальніше заглибимося в перетворення Фур'є. Ця наступна частина виглядає круто, а також дає трохи краще розуміння того, що саме робить перетворення Фур'є. Але здебільшого вона просто класно виглядає.

Епіцикли

На самому початку я сказав, що воно розкладає все на синусоїди. Річ у тім, що створювані ним синусоїди — це не просто звичайні синусоїди, вони тривимірні. Ви могли б назвати їх «комплексними синусоїдами». Або просто «спіралями».

Якщо поглянути збоку, вони виглядають як синусоїди. Однак спереду вони виглядають як кола.

Дотепер усе, що ми робили, потребувало лише звичайних двовимірних синусоїдальних хвиль. Коли ми виконуємо перетворення Фур’є для двовимірних хвиль, комплексні частини взаємно знищуються, тож у результаті ми отримуємо лише синусоїдальні хвилі.

Але ми можемо використовувати 3D-синусоїди, щоб створити щось цікаве на вигляд, як-от це:

Що тут відбувається?

Що ж, ми можемо розглядати малюнок як тривимірну фігуру завдяки тому, як він рухається в часі. Якщо ви уявите, як людина малює руку, ці три виміри представляють положення кінчика її олівця в цей момент. Виміри x та y вказують на положення, а часовий вимір — це час у цей момент.

Тепер, коли ми маємо 3D-патерн, ми не можемо використовувати звичайні 2D-синусоїди для його представлення. Скільки б 2D-синусоїд ми не додавали, ми ніколи не отримаємо щось тривимірне. Тому нам потрібно щось інше.

Ми можемо використати тривимірні спіральні синусоїдальні хвилі, розглянуті раніше. Якщо ми додамо велику кількість таких хвиль, ми зможемо отримати щось схоже на нашу тривимірну структуру.

Пам’ятайте, ці хвилі виглядають як кола, коли ми дивимося на них спереду. Назва візерунка, утвореного рухом одного кола навколо іншого, — епіцикл.

Використовуйте повзунок угорі, щоб керувати кількістю кіл.

Як і раніше, ми отримуємо досить хороше наближення нашого візерунка лише за допомогою кількох кіл. Оскільки це досить проста фігура, останні з них лише роблять краї трохи чіткішими.

Усе це справді стосується будь-якого малюнка! Тепер у вас є можливість поекспериментувати з цим.

Малюйте тут!

Використовуйте повзунок, щоб керувати кількістю кіл, що використовуються для вашого малюнка

Знову ж таки, ви побачите, що для більшості фігур ми можемо досить добре апроксимувати(наблизити) їх за допомогою лише невеликої кількості кіл, замість того, щоб зберігати всі точки.

Чи можемо ми використовувати це для реальних даних? Що ж, ми могли б! Насправді у нас є інший формат даних під назвою SVG, який, мабуть, краще підходить для тих типів фігур, які ми зазвичай створюємо. Тож наразі це справді лише для створення крутих маленьких гіфок.

Однак існує інший тип візуальних даних, який використовує перетворення Фур’є.

JPEG-файли

Чи знаєте ви, що перетворення Фур’є також можна використовувати для зображень? Насправді ми використовуємо це постійно, оскільки саме так працюють JPEG! Ми застосовуємо ті ж самі принципи до зображень — розкладаємо щось на низку синусоїд, а потім зберігаємо лише найважливіші.

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

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

Ми також можемо використовувати їх для представлення кольору таким самим чином, але наразі почнемо з чорно-білих зображень. Щоб представити безколірні зображення, нам знадобляться певні зображення горизонтальних хвиль,

Разом із деякими зображеннями вертикальних хвиль.

Самих лише горизонтальних та вертикальних зображень недостатньо, щоб представити типи зображень, які ми отримуємо. Нам також потрібні додаткові, які можна отримати, перемноживши їх між собою.

×
=

Для зображення розміром 8x8 ось усі потрібні нам зображення.

Якщо ми візьмемо ці зображення, налаштуємо їхню контрастність до потрібного рівня та додамо їх, ми зможемо створити будь-яке зображення.

Почнемо з цієї літери 'А'. Вона досить маленька, але вона має бути маленькою, інакше ми отримаємо занадто багато інших зображень.

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

Для справжніх JPEG-зображень є лише кілька додаткових деталей.

Зображення розбивається на блоки 8x8, і кожен блок розділяється окремо. Ми використовуємо набір частот, щоб визначити, наскільки світлим або темним є кожен піксель, а потім ще два набори для кольору: один для червоно-зеленого і ще один для синьо-жовтого. Кількість частот, які ми використовуємо для кожного блоку, визначає якість JPEG.

Ось справжнє зображення JPEG, збільшене так, щоб ми могли бачити деталі. Коли ми експериментуємо з рівнями якості, ми можемо побачити, як відбувається цей процес.

Висновок

Отже, підсумуємо:

Це лише поверхневий огляд деяких застосувань. Перетворення Фур'є — це надзвичайно потужний інструмент, оскільки розкладання на частоти є дуже фундаментальним. Вони використовуються в багатьох галузях, зокрема в проектуванні схем, сигналах мобільного зв'язку, магнітно-резонансній томографії (МРТ) та квантовій фізиці!

Питання для допитливих

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

Додаткові матеріали

Щоб дізнатися більше, ви можете ознайомитися з деякими дійсно чудовими ресурсами:

Інтерактивний посібник із перетворення Фур'є Чудова стаття, яка детальніше розглядає математику того, що відбувається.

Але що таке перетворення Фур'є? Візуальний вступ. Чудове відео на YouTube від 3Blue1Brown, де також пояснюється математика перетворень Фур'є з точки зору аудіо.

Історія про математику та мистецтво: створення візуалізації гармонійних кіл ряду Фур'є Ще одна стаття, яка пояснює, як можна використовувати епіцикли для малювання траєкторії, описана з точки зору лінійної алгебри.

Перетворення Фур'є (Вікіпедія) І, звісно, стаття у Вікіпедії також досить хороша.

Автор

Я — Джез! Я працюю на повну ставку в пошуковій компанії у районі Затоки, а у вільний час мені подобається створювати ігри та інтерактивні програмні штуки, подібні до цієї!

Ця вебсторінка має відкритий вихідний код, ви можете переглянути його на GitHub! Якщо у вас є відгуки або ви хочете поставити запитання, не соромтеся писати мені на fourier [at] jezzamon [dot] com або напишіть мені в Twitter.

Якщо ви хочете побачити більше моїх робіт, завітайте на мою домашню сторінку, а якщо хочете дізнатися, що я створюватиму далі, ви можете підписатися на мій Twitter-акаунт, @jezzamonn!

Переклад

Переклад українською мовою – Єгор Коротенко korotenky.com.