מבוא אינטראקטיבי להתמרות פורייה

ג'ז סוונסון

התמרות פורייה הן כלי שניתן להשתמש בו בתחומים רבים. כאן יינתן הסבר על מה שהתמרת פורייה עושה, ועל דרכים שונות שאפשר להשתמש בה. כמו על איך מכינים דברים יפים בעזרתה, כמו למשל הדבר הזה:

אני הולך להסביר איך האנימציה הזאת עובדת, ותוך כדי אסביר את התמרת פורייה!

בסוף היום אתם אמורים להכיר:

נכון לעכשיו, אנחנו הולכים לעזוב את המתמטיקה ואת המשוואות. אמנם יש הרבה מתמטיקה מעניינת מאחורי הנושא הזה, אבל עדיף להתחיל עם מה שזה עושה בפועל, ועם הסיבות להשתמש בזה; אם אתם רוצים לדעת יותר על איך מבצעים התמרת פורייה, יש בהמשך קישורים לקריאה ולהרחבה!

אז מה זה הדבר הזה?

אם נפשט את הדברים, התמרת פורייה היא דרך לפצל משהו לכמה גלים בצורת סינוס. כרגיל, השם מגיע מאיזה איש שחי לפני זמן רב שקראו לו פורייה.

אז בואו ונתחיל עם כמה דוגמאות פשוטות, ונתקדם בהדרגה. דבר ראשון אנחנו הולכים להתבונן בגלים - דפוסים החוזרים על עצמם בזמן.

הנה גל לדוגמה:

הדפוס הגלי הזה יכול להתפצל לגלי סינוס. וכן על זה הדרך, כאשר נחבר את שני גלי הסינוס נקבל את הגל המקורי.

התמרת פורייה היא דרך עבורנו לקחת את הגל המחובר, ולקבל ממנו את גלי הסינוס שמרכיבים אותו בחזרה. בדוגמה הזאת, אתם יכולים כמעט לבצע את זה בראש, רק על ידי הסתכלות על הגל המקורי.

למה זה? מסתבר שדברים רבים בעולם האמיתי פועלים בהתבסס על גלי סינוס. אנו בדרך כלל קוראים להם תדרי הגל.

הדוגמה הברורה ביותר היא הקול - כאשר אנו שומעים קול, איננו שומעים את הקו המפותל הזה, אלא אנו שומעים את התדרים של גלי הסינוס שמרכיבים את הקול.

המסוגלות לפצל אותם בעזרת מחשב יכולה לעזור לנו להבין מה בן אדם שומע בפועל. אנו יכולים להבין כמה גבוה או נמוך הקול, או להבין איזה תו מתנגן.

אנו יכולים להשתמש בתהליך הזה גם כדי לנתח גלים שלא נראים כאילו הם מורכבים מגלי סינוס.

בואו נתבונן בטיפוס הזה. הוא נקרא גל מרובע.

אולי זה לא נראה כך, אבל גם אותו ניתן לפצל לכמה גלי סינוס.

הפעם אנו צריכים הרבה גלי סינוס - למעשה אנו צריכים כמות אינסופית בכדי לייצג אותו באמת. ככל שנחבר עוד ועוד גלי סינוס, צורת הגל תהיה קרובה יותר ויותר אל הגל המרובע שאיתו התחלנו.

הזיזו את המחוון שלמעלה בכדי לקבוע כמה גלי סינוס יהיו

בהסתכלות בלבד, תבחינו שלמעשה רק גלי הסינוס הראשונים הם אלה שיוצרים את ההבדל הגדול. כאשר המחוון נמצא באמצע הסקלה, יש לנו כבר את הצורה הכללית של הגל, אבל היא מפותלת מאוד. אנו זקוקים כעת רק לשאר הגלים הקטנים כדי לגרום לפיתול להתיישר.

כאשר תאזינו לגל, אתם תשמעו שהקול נעשה נמוך, מפני שהסרנו את התדרים הגבוהים.

התהליך הזה עובד כך עבור כל קו שחוזר על עצמו. נסו את זה, ציירו דפוס משלכם!

ציירו כאן!

הזיזו את המחוון כדי לראות איך תוספת של עוד גלי סינוס, גורמת לציור המוצג להיות קרוב יותר ויותר לצורה המקורית שלכם

גם כאן, מלבד תוספת הפיתול, הגל נראה די דומה אפילו שהוא מורכב רק מחצי כמות גלי הסינוס.

עצם העובדה שהגל נראה דומה, יכולה לשמש לנו כיתרון. ע"י שימוש בהתמרת פורייה, אנו יכולים לקבל את החלקים החשובים של קול, ולאחסן רק את אלו שקרובים מאוד לקול המקורי.

בדרך כלל, אחסון גל במחשב מתבצע כאחסון של סדרת נקודות.

מה שאפשר לעשות במקום זה, הוא לייצג את הגל על-ידי כמה גלי סינוס. לאחר מכן, אנו יכולים לצמצם את נפח האחסון שלו ע"י התעלמות מהתדרים הנמוכים. התוצאה הסופית שנקבל אמנם לא תהיה זהה לגל שהכנסנו, אבל עדיין הקול המעובד יישמע די דומה למאזין שמקשיב לו.

זאת למעשה דרך הפעולה של שמירת קול בקבצי MP3, אם כי הם יותר מתוחכמים בבחירת התדירויות שהם בוחרים להסיר או להשאיר.

אז במקרה זה, אנו יכולים להשתמש בהתמרות פורייה בכדי לקבל מושג על התכונות היסודיות של גל, ולאחר מכן להשתמש בהבנה הזאת כדי, למשל, לכווץ קבצים.

או-קיי, בואו נעמיק יותר לתוך התמרת פורייה. החלק הבא נראה די מגניב, וגם נותן לנו מעט יותר הבנה על מה שהתמרת פורייה עושה. אבל הרוב נראה מגניב.

אפיציקלים

בהתחלה אמרנו שהתמרת פורייה מפצלת דברים לגלי סינוס. העניין הוא, שגלי הסינוס שהיא יוצרת הם לא סתם גלים רגילים, אלא גלים תלת מימדיים. נוכל לקרוא להם "סינוסים מרוכבים" או בפשטות "ספירלות".

אם נתבונן מהצד, הם יראו לנו כמו גלי סינוס. אבל מבט מקדימה יחשוף פרופיל של מעגלים.

עד עכשיו כל מה שעשינו דרש רק את כלי הסינוס הדו-מימדיים והרגילים. כשאנו מבצעים התמרת פורייה על גלים דו-מימדיים, החלקים המרוכבים מתבטלים כך שלמעשה נשארים בידנו גלי סינוס רגילים.

אך אנו יכולים להשתמש בגלים התלת מימדיים כדי להכין משהו כיפי שנראה כך:

מה הולך פה?

ובכן, אפשר לחשוב על הציור כעל צורה תלת מימדית, בשל האופן בו הוא משתנה במשך הזמן. אם נדמיין שבנאדם מצייר את היד הזאת באמצעות עיפרון ודף, אזי שלושת המימדים מייצגים את מיקום חוד העיפרון בכל רגע נתון. מימדי x ו- y, מספרים לנו על מיקום חוד העיפרון על הדף, ומימד הזמן מציין לנו את הזמן באותו הרגע.

כעת, כשיש בידנו דפוס תלת מימדי, איננו יכולים עוד להשתמש בגלי הסינוס הדו-מימדיים כדי לייצג אותו.לא משנה כמה גלים דו-מימדיים נצרף האחד אל השני, לעולם לא נקבל משהו תלת מימדי כתוצאה מכך. אם כן, עלינו לחפש דרך אחרת לייצוג.

אנו יכולים להשתמש בספירלות הסינוס התלת מימדיות שדנו בהן קודם כדי לייצג באופן תלת מימדי. אם נצרף הרבה ספירלות זו לזו, נוכל לקבל משהו שנראה כמו הדפוס התלת מימדי שלנו.

עלינו לזכור, הגלים הללו נראים כמו מעגלים, כאשר מסתכלים עליהם בפרופיל קדמי. השם של תבנית של מעגל שנע מסביב למעגל אחר הוא אפיציקל.

השתמש במחוון לעיל כדי לשלוט בכמות המעגלים הקיימים.

כמו מקודם, אנו מקבלים קירוב די טוב עבור הדפוס שלנו בעזרת מעגלים בודדים. ומאחר והדפוס הוא צורה די פשוטה, כל המעגלים האחרונים שנוסיף רק יחדדו מעט את הקצוות של הצורה.

כל זה תקף לכל ציור שהוא, באמת! עכשיו תורכם לשחק עם זה.

צייר כאן!

השתמשו במחוון כדי לשלוט בכמות המעגלים בה תשתמשו כדי לצייר

שוב, אתם תראו שאת רוב הצורות אנו יכולים להעריך באופן די טוב, באמצעות מספר קטן של מעגלים בלבד, במקום לשמור את כל הנקודות שמחברות את הצורה.

האם ניתן להשתמש בזה עבור נתונים אמיתיים? ובכן, אנו יכולים! במציאות יש לנו פורמט נתונים נוסף שנקרא SVG, שככל הנראה עושה עבודה טובה יותר בעיבוד סוגי הצורות שאנו מציירים. אז לעת עתה, כל מה שאמרנו זה רק כדי להכין גיפים (gifs) קטנים ומגניבים.

בכל מקרה, ישנו סוג נוסף של פורמט נתונים חזותיים שעושה שימוש בהתמרות פורייה.

JPEGs

האם ידעתם שהתמרות פורייה יכולות להיות שימושיות גם בתמונות? למעשה, אנו משתמשים בזה כל הזמן, מפני שכך פורמט JPEG עובד! אנו מיישמים את אותם העקרונות עבור תמונות - מפצלים משהו אל כמה גלי סינוס, ורק אז מאחסנים אותם, אבל רק את אלה החשובים.

כעת כשאנו באים להתעסק עם תמונות, אנו זקוקים לסוג שונה של גל סינוס. אנו זקוקים לסוג סינוס כזה שלא משנה איזו תמונה תהיה ברשותנו, עדיין נוכל לצרף כמה מגלי הסינוס הללו כדי לקבל בחזרה את התמונה המקורית.

כדי לעשות את זה, כל אחד מגלי הסינוס יהיו תמונות בעצמם. במקום גל שהוא קו, יש לנו כעת תמונה עם איזורים שחורים ולבנים. כדי לייצג את הגודל של גל, לכל תמונה תהיה ניגודיות (קונטרסט) גבוהה או נמוכה יותר.

אנו יכולים להשתמש בשיטה הזאת כדי לייצג צבע, אבל לעת עתה נתחיל עם תמונות בשחור ולבן. בכדי לייצג תמונות חסרות צבע, אנו צריכים כמה תמונות גל אופקיות,

בצירוף כמה תמונות גל אנכיות.

תמונות גל אופקיות ואנכיות לא יכולות לייצג בעצמם את סוגי התמונות שאנו מקבלים. אנו זקוקים גם לתמונות נוספות , אותן נקבל על ידי הכפלה של שני סוגי התמונות זה בזה.

×
=

כדי לשחזר תמונה של 8X8, אלו הן כל התמונות להן אנו זקוקים.

אם ניקח את התמונות, נתאים את הניגודיות שלהן לכמות הנכונה, ואז נחבר אותן ביחד, אנו יכולים ליצור כל תמונה.

ניקח לדוגמה את האות 'A'. אמנם היא קצת קטנה, אבל אנחנו רוצים שהיא תהיה קטנה, אחרת נצטרך הרבה יותר תמונות כדי לשחזר אותה.

ככל שנוסיף עוד ועוד מהתמונות הללו, בסופו של דבר נקבל איזה משהו שנראה קרוב יותר ויותר אל התמונה המקורית. אבל נדמה לי שתבחינו כאן בדפוס, כאשר נקבל קירוב סביר באמצעות רק כמה מהן.

עבור תמונת JPEG אמיתית ישנם רק עוד כמה פרטים נוספים.

התמונה מחולקת ל"חתיכות" של 8X8, וכל חתיכה עוברת תהליך פיצול נפרד. אנו משתמשים בסט אחד של תדירויות כדי לקבוע כמה בהיר או כהה כל פיקסל יהיה, ובנוסף עוד שני סטים של תדירויות עבור הצבע, סט עבור אדום-ירוק, וסט עבור כחול-צהוב. מספר התדירויות בהן נשתמש בכל "חתיכה" יקבע את איכות תמונת ה- JPEG המתקבלת.

הנה תמונת JPEG אמיתית, ומוגדלת כדי שנוכל להבחין בפרטים. כאשר נשחק ברמות האיכות נוכל לראות את התהליך הזה קורה.

סיכום

אז, מה היה לנו?

זוהי רק הקדמה לפתיחת המבוא של יישומי התמרת פוריה. התמרת פורייה היא כלי חזק במיוחד, מפני שפיצול דברים לתדירויות הוא כל כך יסודי. משתמשים בהן בתחומים רבים, כולל תכנון מעגלים אלקטרוניים, אותות סלולריים, דימות תהודה מגנטית (MRI), ופיזיקה קוונטית!

שאלות לסקרנים

דילגתי כאן על רוב המתמטיקה, אבל אם אתם מעוניינים בעקרונות הבסיסיים של אופן הפעולה של התמרות פורייה, הנה כמה שאלות שיכולות להנחות את המחקר שלכם:

לקריאה נוספת

אם תרצו להעמיק עוד בנושא, הנה רשימת מקורות טובים שתוכלו לבדוק:

An Interactive Guide To The Fourier Transform מאמר מעולה שמעמיק יותר לתוך המתמטיקה של מה שקורה.

But what is the Fourier Transform? A visual introduction. סרטון וידאו נהדר של 3Blue1Brown, שמסביר בנוסף את המתמטיקה של התמרות פורייה מפרספקטיבה של אודיו.

A Tale of Math & Art: Creating the Fourier Series Harmonic Circles Visualization מאמר נוסף שמסביר איך ניתן להשתמש באפיציקלים כדי לצייר מסלול, מוסבר מפרספקטיבה של אלגברה לינארית.

Fourier transform (Wikipedia) וכמובן, המאמר בוויקיפדיה הוא גם די טוב.

המחבר

שמי ג'אז! אני עובד במשרה מלאה בחברת חיפוש באיזור המפרץ של סן-פרנסיסקו, ובזמני הפנוי אני אוהב להכין משחקים וקודים אינטראקטיביים כמו זה!

האתר הזה הוא קוד-פתוח, אתם יכולים להתרשם מהקוד ב- GitHub! אם יש לכם איזה משוב או שתרצו לשאול שאלות כלשהן, תרגישו חופשי לשלוח לי אימייל לכתובת fourier [at] jezzamon [dot] com, או לצייץ לי בטוויטר.

אם אתם רוצים לראות עוד עבודות שלי, אתם יכולים לבקר בדף הבית שלי, ואם תרצו לראות מה הדבר הבא שאני מכין, אתם יכולים לעקוב אחרי חשבון הטוויטר שלי, @jezzamonn!