Fourier Dönüşümlerine İnteraktif bir Giriş

Jez Swanson

Çeviren: Harun Hindioğlu

Fourier dönüşümleri birçok farklı şeyin yapılmasında kullanılabilecek bir araçtır. Bu sayfa Fourier dönüşümlerinin işleyişini açıklamakta ve yararlı olabilecek bazı kullanım yollarını göstermektedir. Bir de bu dönüşümlerle bunun gibi eğlenceli şeyleri nasıl yapacağınızı gösterir:

Fourier dönüşümlerinin işleyişini anlatırken bu animasyonu da açıklayacağım!

Okumayı bitirdiğinizde:

Matematik ve denklemleri şimdilik bu işin dışında tutacağız. Fourier dönüşümlerinin arkasında bir sürü ilginç matematiksel işlem var ama onun aslında ne yaptığı ve onu neden kullanmak isteyeceğinizle başlamayı yeğlerim. Konu hakkında daha detaylı bilgiye ulaşmak isterseniz, bazı ileri okuma önerilerini aşağıda bulabilirsiniz!

Evet, şimdi bu nedir?

Fourier dönüşümü basitçe, bir şeyi sinüs dalgaları halinde ayırmanın bir yoludur. İsmi, genelde olduğu gibi, uzun zaman önce yaşamış olan Fourier adında birinden gelir.

Hadi birkaç basit örnekle başlayarak ilerleyelim. Öncelikle zaman içinde tekrarlayan modeller olan dalgalara bakacağız.

İşte bir dalga örneği:

Buradaki dalga modeli sinüs dalgalarına ayrılabilir. Bu iki sinüs dalgasını bir araya getirirsek başlangıçtaki dalgayı tekrar elde ederiz.

Fourier dönüşümü birleşik dalga elde etmenin ve her bir sinüs dalgasını yeniden ortaya çıkarmanın bir yoludur. Bu örnekte, yalnızca başlangıçtaki dalgaya bakarak bunu neredeyse zihinden de yapabilirsiniz.

Neden? Öyle görünüyor ki gerçek dünyadaki birçok şey bu sinüs dalgaları aracılığıyla etkileşim halinde. Biz onlara genelde dalga frekansları diyoruz.

Bunun en belirgin örneği sestir. Bir ses duyduğumuzda, onu dalgalı bir hat şeklinde değil sesi meydana getiren sinüs dalgalarının farklı frekansları şeklinde duyarız.

Dalgaları bilgisayarda ayırabiliyor olmak bize insanların aslında ne duyduğuna dair bir fikir verir. Sesin ne kadar yüksek veya kısık olduğunu anlayabilir veya hangi nota olduğunu tahmin edebiliriz.

Bu işlemi sinüs dalgalarından oluşuyormuş gibi görünmeyen dalgalar üzerinde de yapabiliriz.

Hadi şuna bir göz atalım. Buna kare dalga denir.

Öyle gibi görünmese de sinüs dalgalarına ayrılabilir.

Bu kez çok sayıda sinüs dalgasına ihtiyacımız var. Teknik olarak, kare dalgayı tam anlamıyla karşılayabilmesi için sonsuz sayıda lazım. Daha çok sinüs dalgası ekledikçe model de gitgide başlangıçtaki kare dalgaya yaklaşacaktır.

Kaç sinüs dalgası olduğunu görmek için üstteki düğmeyi çubuğun üzerinde kaydırın.

Gerçekten de belirgin ölçüde en büyük farkı yaratanların ilk birkaç sinüs dalgası olduğunu göreceksiniz. Düğmeyi ortaya getirdiğinizde, dalganın şekli genel hatlarıyla ortaya çıkar ama pürüzlüdür. Artık pürüzleri düzleştirmek için tek ihtiyacımız olan diğer küçük dalgalar.

Dalgayı dinlediğinizde, sesin giderek azaldığını duyarsınız çünkü daha yüksek frekansları siliyoruz.

Bu işlem, tekrarlayan her dizide bu şekilde gerçekleşir. Hadi siz de kendinizinkini çizmeyi deneyin!

Buraya çizin!

Sinüs dalgaları eklendikçe çizimin sizinkine nasıl yaklaştığını görmek için düğmeyi hareket ettirin.

Fazladan pürüzün haricinde, sinüs dalgalarının yalnızca yarısı kullanıldığında bile dalga yine oldukça benzer bir hale gelir.

Aslında dalganın bu benzerliğini lehimize kullanabiliriz. Fourier dönüşümünü kullanarak sesin önemli kısımlarını alabilir ve onlardan orijinal sese oldukça yakın bir şey elde edebiliriz.

Bilgisayarlarda dalgalar normalde nokta dizileri halinde saklanır.

Bunun yerine, onları bir grup sinüs dalgasıyla gösterebiliriz. Ardından daha küçük frekansları yok sayarak sesi sıkıştırabiliriz. Sonuç aynı olmaz ama kulağa, orijinaline oldukça yakın gelecektir.

MP3'lerin yaptığı da aslında budur. Yalnızca, onlar hangi frekansların korunup hangilerinin atılacağı konusunda daha akıllıdırlar.

Özetle bu durumda Fourier dönüşümlerini bir dalganın temel özellikleri hakkında fikir sahibi olmak için kullanabilir, böylece edindiğimiz fikirden, veri sıkıştırma gibi şeyler yaparken yararlanabiliriz.

Evet, şimdi Fourier dönüşümünün biraz daha derinine inelim. Sıradaki bölüm, Fourier dönüşümünün işleviyle ilgili daha fazla fikir verecektir.

Dış Çemberler

Yazının başında bu dönüşümün, sinüs dalgalarına ayırmada kullanıldığını söyledim. Olay şu ki Fourier dönüşümüyle ortaya çıkan sinüs dalgaları normal sinüs dalgaları değil, 3B'dir. Onlara "karmaşık sinüsoidler" denilebilir. Ya da yalnızca "spiraller"…

Yandan bakınca sinüs dalgaları gibi görünürler. Ama üstten bakınca, çember gibidirler.

Şimdiye kadar yaptığımız her şey için normal 2B sinüs dalgalarına ihtiyaç duyduk. 2B dalgalar üzerinde Fourier dönüşümü yaptığımızda karmaşık kısımlar nötrlenir, böylece sinüs dalgaları elde ederiz.

Ama 3B sinüs dalgalarını şunun gibi gözüken eğlenceli bir şeyler yapmak için kullanabiliriz:

Burada neler oluyor?

Evet, zamanla izlediği yol dolayısıyla çizimi 3B şekle sahip olarak düşünebiliriz. Bir el çizdiğinizi hayal edin; kaleminizin ucunun olduğu noktada üç boyut da mevcut olacaktır. X ve Y düzlemleri bize konumu verir, zaman düzlemi de o andaki zamandır.

Bu şekildeki bir 3B modeli 2B sinüs dalgaları kullanarak gösteremeyiz. Ne kadar 2B sinüs dalgası eklersek ekleyelim, asla 3B bir şekil elde edemeyiz. Öyleyse başka bir şeye ihtiyacımız var.

Kullanabileceğimiz şey yukarıda bahsettiğimiz 3B spiral sinüs dalgaları. Onlardan çok sayıda eklediğimizde, 3B modelimize benzeyen bir şey elde edebiliriz.

Unutmayın, bu dalgalara üstten baktığımızda çember gibi görünürler. Bir çemberin etrafında hareket eden diğer çembere dış çember denir.

Kutucukta bulunan çember sayısını belirlemek için üstteki düğmeyi kullanın.

Öncekinde olduğu gibi yalnızca birkaç çemberle modelimize epey yakın bir sonuç elde ederiz. Çünkü bu oldukça basit bir şekil ve son çembelerin tek yaptıkları sınırları birazcık daha keskinleştirmek.

Bütün bunlar her çizime uygulanabilir, gerçekten! Şimdi onu test etme sırası sizde.

Buraya çizin!

Çizimde kullanılacak çember sayısını belirlemek için düğmeyi hareket ettirin.

Birçok şekil için bütün noktaları saklamak yerine yalnızca az sayıda çemberle gayet güzel bir çizim yakınlığının elde edilebildiğini kez daha görüyorsunuz.

Bunu gerçek veri için de kullanabilir miyiz? Şey… Evet! Aslında, oluşturmaya çalıştığımız şekiller gibi işlerde muhtemelen daha iyi sonuçlar verecek olan SVG (Vektör İmaj Formatı) adında bir başka veri formatı daha var. Yani, bu şimdilik sadece küçük güzel gifler yapmaya yarar.

Ancak Fourier dönüşümlerini kullanan bir başka görsel veri çeşidi daha var.

JPEG

Fourier dönüşümlerinin görseller üzerine de uygulanabileceğini biliyor muydunuz? Aslında onu sürekli kullanıyoruz çünkü JPEG'ler onunla çalışır! Aynı ilkeleri görsellere uyguluyarak onları sinüs dalgası gruplarına ayırıyor ve sadece önemli olanları saklıyoruz.

Şimdi görsellerle çalıştığımıza göre bize farklı bir sinüs dalgası türü lazım. Öyle bir şeye ihtiyacımız var ki elimizde nasıl bir görsel olursa olsun, bir grup sinüs dalgasını bir araya getirerek  başlangıçtaki görsele dönebilelim.

Bunu yapabilmek için her bir sinüs dalgası da görsel olmalı. Çizgi şeklindeki dalga yerine, elimizde artık siyah ve beyaz bölgeleri olan görseller var. Her görseldeki daha fazla veya az kontrast bir dalganın boyutunu temsil eder.

Aynı şekilde bunu renkleri temsil etmekte de kullanabiliriz ama şimdilik siyah-beyaz görsellerle başlayalım. Renksiz görseller için bize birkaç yatay dalga görseli lazım.

Ve birkaç tane de dikey dalga görseli.

Yatay ve dikey görseller bizimki gibi görsel türlerini kendi başlarına temsil etmekte yetersiz kalırlar. Bu yüzden hem yatay hem dikey görsellerin sayılarını birlikte katlayarak fazladan dalgalar oluşturmak gerekir.

×
=

İşte 8x8'lik bir görsel için gereken bütün görseller.

Bu görselleri alıp kontrastlarını boyutlarına göre ayarladıktan sonra bir araya getirirsek her görseli oluşturabiliriz.

Hadi bu "A" harfiyle başlayalım. Oldukça küçük ama bize de küçük lazım yoksa çok sayıda başka görsel elde ederiz.

Bu görsellerden daha çok ekledikçe, gerçek görsele gitgide daha yaklaşan bir sonuç elde edeceğiz. Ama sadece birkaç tane eklediğimiz halde, aslına yakınlık makul ölçüde sağlandığı için herhalde buradaki modeli anlamışsınızdır.

                                                           

Mevcut JPEG görsellerin fazladan birkaç detayı daha var.

JPEG'de görsel 8x8'lik parçalara ayrılır ve her parça kendi içinde sinüs dalgalarına ayrılır. Her pikselin ne ölçüde açık veya koyu renkte olduğunu belirlemek için bir frekans grubu kullanırız. Ardından, biri kırmızı-yeşil, diğeri mavi-sarı renkler için iki grup daha kullanırız. Her bir parça için kullandığımız frekans sayısı JPEG'in kalitesini belirler.

İşte detayları görebilmemiz için büyütülmüş gerçek bir JPEG görsel. Kalite düzeyiyle oynadığımızda bu sürecin işleyişini görebiliriz.

Sonuç

Öyleyse özetleyelim:

Buradakiler sadece yüzeysel birkaç uygulama. Fourier dönüşümü son derece güçlü bir araçtır çünkü frekanslara ayırmak işin özüne inmektir. Devre tasarımı, cep telefonu sinyalleri, manyetik rezonans görüntüleme (MRI) ve kuantum fiziği dahil birçok alanda kullanılırlar!

Merak edenler için sorular

Burada işin matematik kısmının çoğunu atladım ama fourier dönüşümlerinin temelinde yatan çalışma ilkelerini merak ediyorsanız, işte araştırmanıza rehber olabilecek birkaç soru:

İleri 'okuma'

Daha fazlasını öğrenmek için bakabileceğiniz gerçek anlamda iyi bazı kaynaklar:

An Interactive Guide To The Fourier Transform Olan biteni daha ziyade matematiksel açıdan irdeleyen mükemmel bir makale.

But what is the Fourier Transform? A visual introduction Fourier dönüşümlerinin matematiğinin ses perspektifinden de açıklandığı, 3Blue1Brown tarafından yayınlanan mükemmel bir Youtube videosu.

A Tale of Math & Art: Creating the Fourier Series Harmonic Circles Visualization Şekil çizmek için dış çemberleri nasıl kullanabileceğinizi anlatan bir başka makale, konuyu lineer cebir üzerinden ele alıyor.

Fourier dönüşümü (Vikipedi) Ve tabi ki Vikipedi makalesi de oldukça iyi.

Yazar

Ben Jez! Bay bölgesinde bir araştırma şirketinde tam-zamanlı çalışıyorum ve boş vakitlerimi oyun üreterek ve bunun gibi interaktif kodlar yazarak geçirmeyi seviyorum!

Bu web sayfası açık kaynak kodlu bir sayfa, kodlarına GitHub'dan göz atabilirsiniz! Herhangi bir öneriniz veya sormak istediğiniz bir soru varsa bana Twitter üzerinden tweet atmaktan çekinmeyin.

Diğer işlerimi de görmek istiyorsanız, anasayfamı ziyaret edin! Sıradaki işimi merak ediyorsanız Twitter hesabımı takip edebilirsiniz @jezzamonn!