Dalgacık dönüşümü (Wavelet Transform), sinyal işleme, veri analizi ve matematiksel modelleme alanlarında devrim yaratan bir yöntem olarak modern bilim ve teknolojinin temel taşlarından birini oluşturur. Geleneksel Fourier dönüşümünün zaman-frekans analizinde sunduğu sınırlamaları aşmak amacıyla geliştirilen dalgacık dönüşümü, sinyallerin hem zaman hem de frekans domeninde eşzamanlı olarak incelenmesini mümkün kılar. Bu özellik, özellikle düzensiz, geçici veya yerel özellikler sergileyen sinyallerin analizinde büyük bir avantaj sağlar. Örneğin, bir ses sinyalindeki ani bir patlama sesini veya bir görüntüdeki keskin kenarları tespit etmek, dalgacık dönüşümü ile çok daha kolay ve etkili bir şekilde gerçekleştirilebilir.
Dalgacık dönüşümünün tarihsel gelişimi, 20. yüzyılın sonlarına doğru matematikçi ve mühendislerin karmaşık problemlere çözüm arayışlarıyla şekillenmiştir. 1980’lerde Jean Morlet tarafından petrol araştırmaları sırasında ortaya atılan bu kavram, daha sonra Yves Meyer, Ingrid Daubechies ve Stéphane Mallat gibi isimlerin katkılarıyla matematiksel bir çerçeveye oturtulmuştur (Mallat, n.d.). Fourier dönüşümünden farklı olarak, dalgacık dönüşümü sabit bir pencere boyutu kullanmaz; bunun yerine, ölçeklenebilen ve kaydırılabilen küçük dalga benzeri fonksiyonlar (wavelets) ile sinyali analiz eder. Bu esneklik, dalgacık dönüşümünü sinyal sıkıştırma, gürültü azaltma, görüntü işleme ve hatta makine öğrenimi gibi geniş bir yelpazede vazgeçilmez bir araç haline getirmiştir.
Dalgacık Dönüşümünün Temel Kavramları
Dalgacık (Wavelet)
Dalgacık, kelime anlamıyla "küçük dalga" demektir ve matematiksel olarak sınırlı bir süre boyunca salınan bir fonksiyondur. Geleneksel sinüs ve kosinüs dalgalarından farklı olarak, dalgacıklar sıfır ortalama değere sahip olacak şekilde tasarlanır ve belirli bir zaman aralığında yoğunlaşır. Bu özellik, dalgacıkların yerel özellikleri analiz etmek için ideal olmasını sağlar. Örneğin, Haar dalgacığı gibi basit bir dalgacık, bir kare dalga formunda olabilir ve ani değişimlerin tespitinde kullanılır.
Ölçekleme ve Kaydırma Kavramları
Dalgacık dönüşümünün temelinde, bir ana dalgacık fonksiyonunun (mother wavelet) ölçeklenmesi ve kaydırılması yatar. Ölçekleme, dalgacığın genişliğini veya sıklığını değiştirirken, kaydırma ise dalgacığın zaman eksenindeki pozisyonunu ayarlar. Bu iki işlem, sinyalin farklı çözünürlüklerde ve zaman dilimlerinde analiz edilmesini sağlar. Matematiksel olarak, bir dalgacık fonksiyonu şu şekilde ifade edilir:
Burada a ölçek parametresi, b ise kaydırma parametresidir. Ölçek küçüldükçe dalgacık daralır ve yüksek frekanslı bileşenleri yakalar; ölçek büyüdükçe ise genişler ve düşük frekanslı bileşenleri analiz eder.
Sürekli ve Ayrık Dalgacık Dönüşümleri
Dalgacık dönüşümü iki ana kategoriye ayrılır: Sürekli Dalgacık Dönüşümü (Continuous Wavelet Transform - CWT) ve Ayrık Dalgacık Dönüşümü (Discrete Wavelet Transform - DWT). Sürekli dönüşüm, ölçek ve kaydırma parametrelerinin sürekli değiştiği durumlarda kullanılır ve teorik analizler için uygundur. Ayrık dönüşüm ise pratik uygulamalarda daha yaygındır; ölçek ve kaydırma parametreleri genellikle ikinin katları (dyadic grid) şeklinde seçilir.
Matematiksel Temeller
Sürekli Dalgacık Dönüşümü (CWT)
Sürekli Dalgacık Dönüşümü, bir sinyalin dalgacıklarla nasıl eşleştiğini ölçen bir integral dönüşümüdür. Matematiksel olarak şu şekilde tanımlanır:
Burada x(t) analiz edilen sinyal, ψ∗(t) ise dalgacığın kompleks eşleniğidir. Bu dönüşüm, sinyalin her bir zaman ve ölçek kombinasyonu için bir katsayı üretir ve sonuç genellikle bir zaman-ölçek grafiği (scalogram) olarak görselleştirilir.
Ayrık Dalgacık Dönüşümü (DWT) ve Çoklu Çözünürlük Analizi
Ayrık Dalgacık Dönüşümü, sinyali bir dizi filtre bankasından geçirerek ayrıştırır. Bu süreçte, sinyal düşük geçişli (low-pass) ve yüksek geçişli (high-pass) filtrelere tabi tutulur, böylece "yaklaşım" (approximation) ve "detay" (detail) katsayıları elde edilir. Çoklu çözünürlük analizi (Multiresolution Analysis - MRA), sinyali farklı çözünürlük seviyelerinde incelemeyi sağlar ve özellikle sıkıştırma uygulamalarında etkilidir.
Örnek Dalgacık Fonksiyonları
Farklı dalgacık türleri, analiz edilecek sinyalin doğasına göre seçilir. Bazı yaygın dalgacıklar şunlardır:
- Haar Dalgacığı: En basit dalgacık, keskin değişimleri tespit eder.
- Daubechies Dalgacığı: Daha pürüzsüz ve karmaşık sinyaller için uygundur.
- Morlet Dalgacığı: Frekans analizi için idealdir ve sinüzoidal bir yapıya sahiptir.
Dalgacık Dönüşümünün Uygulama Alanları
Sinyal İşleme ve Sıkıştırma
Dalgacık dönüşümü, sinyal işlemede gürültü azaltma ve veri sıkıştırma gibi alanlarda yaygın olarak kullanılır. Örneğin, JPEG2000 görüntü sıkıştırma standardı, DWT’yi temel alır ve dosya boyutunu kalite kaybı olmadan küçültür. Ses sinyallerinde ise geçici gürültülerin ayrıştırılması için tercih edilir.
Görüntü Analizi ve İşleme
Görüntü işlemede, dalgacık dönüşümü kenar tespiti, doku analizi ve sıkıştırma gibi görevlerde kullanılır. Çoklu çözünürlük özelliği sayesinde, bir görüntünün hem genel yapısı hem de ince detayları aynı anda analiz edilebilir.
Veri Bilimi ve Makine Öğrenimi
Veri biliminde, dalgacık dönüşümü özellik çıkarımı için güçlü bir araçtır. Zaman serisi verilerinde anomalilerin tespiti veya finansal verilerin analizi gibi uygulamalarda sıkça kullanılır.
Diğer Mühendislik ve Bilimsel Uygulamalar
Dalgacıklar, deprem analizi, biyomedikal sinyal işleme (örneğin EEG ve EKG) ve akustik analiz gibi alanlarda da etkilidir. Örneğin, bir deprem sinyalindeki ani değişimler dalgacıklarla kolayca tespit edilebilir.
Avantajlar ve Sınırlamalar
Dalgacık Dönüşümünün Üstün Yönleri
Dalgacık dönüşümünün en büyük avantajı, zaman-frekans analizinde sunduğu esnekliktir. Fourier dönüşümünden farklı olarak, yerel özelliklere odaklanabilir ve farklı ölçeklerdeki bilgileri ayrıştırabilir. Ayrıca, sıkıştırma ve gürültü azaltma gibi uygulamalarda verimliliği artırır.
Karşılaşılan Zorluklar ve Kısıtlamalar
Buna karşın, dalgacık dönüşümünün uygulanması karmaşık olabilir. Doğru dalgacık türünün seçimi ve hesaplama maliyeti, bazı durumlarda zorluk yaratabilir. Ayrıca, sürekli dönüşüm pratik uygulamalarda genellikle çok fazla veri ürettiği için tercih edilmez.
Soldan sağa: MATLAB'de zamanla değişen iki bileşenli bir hiperbolik chirp sinyalinin analizi, kısa zamanlı Fourier dönüşümü anlık frekansları net bir şekilde ayırt edemezken, sürekli Dalgacık Dönüşümü doğru bir şekilde yakalarken. (Kredi: mathworks.com)
Dalgacık Dönüşümünün 1 boyutlu, 2 boyutlu ve 3 boyutlu ortamlarda gösterimi. (Kredi: ataspinar.com)
Dalgacık Dönüşümü Kullanarak Durum Uzayını Görselleştirme
# Dalgacık dönüşümünün hesaplanmasıı ve zaman-frekans grafiği olarak verilmesi def plot_wavelet(time, signal, scales, waveletname = 'cmor', cmap = plt.cm.seismic, title = 'Wavelet Transform (Power Spectrum) of signal', ylabel = 'Period (years)', xlabel = 'Time'): dt = time[1] - time[0] [coefficients, frequencies] = pywt.cwt(signal, scales, waveletname, dt) power = (abs(coefficients)) ** 2 period = 1. / frequencies levels = [0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8] contourlevels = np.log2(levels) fig, ax = plt.subplots(figsize=(15, 10)) im = ax.contourf(time, np.log2(period), np.log2(power), contourlevels, extend='both',cmap=cmap) ax.set_title(title, fontsize=20) ax.set_ylabel(ylabel, fontsize=18) ax.set_xlabel(xlabel, fontsize=18) yticks = 2**np.arange(np.ceil(np.log2(period.min())), np.ceil(np.log2(period.max()))) ax.set_yticks(np.log2(yticks)) ax.set_yticklabels(yticks) ax.invert_yaxis() ylim = ax.get_ylim() ax.set_ylim(ylim[0], -1) cbar_ax = fig.add_axes([0.95, 0.5, 0.03, 0.25]) fig.colorbar(im, cax=cbar_ax, orientation="vertical") plt.show() # Sinyal ve hareketlinin ortalaması zaman domeninde çizilir def plot_signal_plus_average(time, signal, average_over = 5): fig, ax = plt.subplots(figsize=(15, 3)) time_ave, signal_ave = get_ave_values(time, signal, average_over) ax.plot(time, signal, label='signal') ax.plot(time_ave, signal_ave, label = 'time average (n={})'.format(5)) ax.set_xlim([time[0], time[-1]]) ax.set_ylabel('Signal Amplitude', fontsize=18) ax.set_title('Signal + Time Average', fontsize=18) ax.set_xlabel('Time', fontsize=18) ax.legend() plt.show() # Sinyalin Fourier dönüşümü hesaplanır. def get_fft_values(y_values, T, N, f_s): f_values = np.linspace(0.0, 1.0/(2.0*T), N//2) fft_values_ = fft(y_values) fft_values = 2.0/N * np.abs(fft_values_[0:N//2]) return f_values, fft_values # Fourier dönüşümü ve güç spektrumu çizilir. def plot_fft_plus_power(time, signal): dt = time[1] - time[0] N = len(signal) fs = 1/dt fig, ax = plt.subplots(figsize=(15, 3)) variance = np.std(signal)**2 f_values, fft_values = get_fft_values(signal, dt, N, fs) fft_power = variance * abs(fft_values) ** 2 # FFT power spectrum ax.plot(f_values, fft_values, 'r-', label='Fourier Transform') ax.plot(f_values, fft_power, 'k--', linewidth=1, label='FFT Power Spectrum') ax.set_xlabel('Frequency [Hz / year]', fontsize=18) ax.set_ylabel('Amplitude', fontsize=18) ax.legend() plt.show() # Veri seti yükleme ve parametrelerin girilmesi dataset = "veri_setinin_yolu" df_nino = pd.read_table(dataset) N = df_nino.shape[0] t0=1871 dt=0.25 time = np.arange(0, N) * dt + t0 signal = df_nino.values.squeeze() scales = np.arange(1, 128) plot_signal_plus_average(time, signal) plot_fft_plus_power(time, signal) plot_wavelet(time, signal, scales)
Çıktı:
(Kredi: ataspinar.com)