Konvolüsyon (evrişim), iki fonksiyonun "karıştırılması" işlemidir ve sinyal işleme, görüntü işleme ve olasılık teorisinde temeldir.
Konvolüsyon Tanımı
(f * g)(t) = ∫₋∞^∞ f(τ)g(t-τ)dτ
Konvolüsyon Teoremi:
ℱ{f * g} = ℱ{f} · ℱ{g}
ℱ{f · g} = (1/2π)(ℱ{f} * ℱ{g})
Konvolüsyon teoremi, zaman domeninde karmaşık evrişim işlemini frekans domeninde basit çarpıma dönüştürür. Bu, FFT algoritmaları ile çok hızlı hesaplama imkanı verir.
Uygulamalar
Sinyal Filtreleme: Gürültü azaltma, düzgünleştirme
Görüntü İşleme: Bulanıklaştırma, keskinleştirme, kenar tespiti
Olasılık: Bağımsız rassal değişkenlerin toplamının dağılımı
Diferensiyel Denklemler: Green fonksiyonu ile çözüm
def convolution_time_domain(f, g, t_range, N=1000):
"""Zaman domeninde doğrudan konvolüsyon"""
t = np.linspace(t_range[0], t_range[1], N)
dt = t[1] - t[0]
def conv_at_t(t_val):
tau = t
integrand = f(tau) * g(t_val - tau)
return np.trapz(integrand, tau)
return conv_at_t
def convolution_frequency_domain(f_signal, g_signal):
"""FFT ile hızlı konvolüsyon"""
F = fft.fft(f_signal)
G = fft.fft(g_signal)
H = F * G
result = fft.ifft(H)
return result.real
def gaussian_convolution_example():
t = np.linspace(-10, 10, 1024)
dt = t[1] - t[0]
sigma1, sigma2 = 1.0, 1.5
f = np.exp(-t**2/(2*sigma1**2))
g = np.exp(-t**2/(2*sigma2**2))
conv_result = convolution_frequency_domain(f, g) * dt
sigma_result = np.sqrt(sigma1**2 + sigma2**2)
analytic = np.sqrt(2*np.pi*sigma_result**2) * np.exp(-t**2/(2*sigma_result**2))
error = np.max(np.abs(conv_result - analytic))
print(f"Konvolüsyon hatası: {error:.6f}")
print(f"Sonuç sigma: {sigma_result:.4f}")
gaussian_convolution_example()
Özel Konvolüsyonlar
Dirac Delta ile Konvolüsyon: f * δ = f (özdeşlik)
Dikdörtgen Pencere: Düzgünleştirme (smoothing)
Gauss Çekirdeği: Bulanıklaştırma, gürültü azaltma
Türev Çekirdeği: Kenar tespiti