Bell Labs, 1947
Richard Hamming, 1946'da Bell Telephone Laboratories'a katıldı. O dönemde orada çalışan taşıyıcı bilgisayarlar sadece haftanın çalışma günlerinde çalışıyor ve mühendisler hataları düzeltebilecekleri şekilde yeniden başlatılıyordu. Hafta sonları, makineler hata olduğunda duruyordu - bu, Pazartesi gününe kadar bekleyen işleri bırakan.
Hamming öfkeliydi. 'Eğer makine hata tespit edebilirse,' diye düşündü, 'niçin hata konumunu belirleyip düzeltebilir?' Bu keder, ikameyi tam olarak anlamakla ve dik kenarlık parite kontrolleriyle derin bir tanışıklıkla sahneye kondu.
İlk Keşif: Dik Kenarlı Kodlar
Hamming'in ilk fikri: Mesaj bitlerini m×n dikdörtgen şeklinde düzenleyin, her satır ve her sütuna tekil kontrol ekleyin. Tek bir hata, tam olarak bir satır kontrolünü ve bir sütun kontrolünü başarısız eder. Kesişme konumunu hata konumunu belirtir.
Yataylık Redundans Oranı: (m+1)(n+1) / mn. Kalculus, sabit mesaj boyutu için dikdörtgeni en az hatalı kılmaz. Ama m ve n arttıkça, çift hata daha olası hale gelir - bu, mühendislik değerlendirmesiyle hiçbir evrensel yanıt yoktur.
Dik Kenarlı Redundansı Azaltma
4x4 dikdörtgen, 16 mesaj biti ile 4 satır kontrolü ve 4 sütun kontrolü ile 9 kontrol biti ile 16 mesaj biti ile çalışır.
Redundans oranı: (m+1)(n+1) / mn = 25/16 ≈ 1.56.
10x10 dikdörtgen için: 100 mesaj biti, 121 toplam bit, hata ≈ 1.21.
Sendromun Dikdörtgen Sayısı
Dikdörtgen kod kavrama birkaç hafta sonra, Hamming New Jersey tarlaları boyunca New York'a doğru giderken, başarılarını mental olarak gözden geçirdi. Üçgen kod ortaya çıktı - daha iyi redandans. Ardından küp. Ardından 4-boyutlu, 5-boyutlu...
Her ek boyut redandansı iyileştiriyordu. n boyutlu bir küp, 2^n köşeye sahip ve sadece n+1 kontrol biti kullanıyor. Bu optimal miydi?
Sayım Argumentosu
n+1 kontrol biti sendrom oluşturur: bir (n+1)-bit ikili sayı. Bu sendrom, hata olan 2^n ve özel 'hata yok' sonucunu tanımlamalıdır: her hata pozisyonu için 2^n.
2^(n+1) = 2·2^n - neredeyse yeterli. 2 faktörü eksik. Hamming sorunu bir kenara koydu.
Ana Kavram
Sonra Hamming, yeni bir fikirle geri döndü: sendromu hata pozisyonunu adlandırabilecek bir ikili sayı olarak kullanın. Pozisyon 1 = 001, pozisyon 2 = 010, pozisyon 3 = 011 vb. 'hata yok' için sıfır tüm sıfırları saklayın.
Bu, kontrol bitlerinin herhangi bir tek biti ters çevirdiğinde tam olarak doğru bir adres üretmelerini sağlayacak şekilde tasarlanmasını sağlar.
(7,4) Kodu Tasarımı
7 bitlik bir kodda (3 kontrol biti, 4 mesaj biti), ikili pozisyonda 001, 010, 011, 100, 101, 110, 111'dir.
İlk kontrol biti, bit 0 = 1 olan pozisyonları kapsar: 1, 3, 5, 7.
İkinci kontrol biti, bit 1 = 1 olan pozisyonları kapsar: 2, 3, 6, 7.
Üçüncü kontrol biti, bit 2 = 1 olan pozisyonları kapsar: 4, 5, 6, 7.
Kontrol bitleri, 2'nin kuvveti pozisyonlarda bulunur: 1, 2, 4. Mesaj bitleri, kalanlar: 3, 5, 6, 7.
Eğer bit 6 ters çevrilirse, kontrol bitleri 2 ve 3 başarısız olur (110 ikili = 6). Sendrom 110 = 6. Pozisyon 6'i ters çevirin. Mesaj bitleri 3,5,6,7 = 1,0,0,1. Kod makinesi, sendromu düzeltici bir eyleme - aynı ikili temsilini paylaşan bir adrese ve eyleme - değiştirir.
Tek Hata Düzeltme, Çift Hata Tanım
Hamming kodu (7,4) tek hataları düzeltir. Ama iki bit ters çevrilirse? Ekstra koruma olmadan, decoder sendrom kuralına uygular ve hatalı mesajı düzeltmeye çalışır - sessiz bir yanlış düzeltme.
SECDED: Bir Daha Parite Dizesi
Tamamen kodluma (7 bit) uygulanan tek bir parite dizesi ekle (p₀). Şimdi sendrom 4 giriş taşır: özgün 3 denetimi plus p₀.
``
eski sendrom yeni p₀ anlam
000 0 doğru
000 1 p₀'de sadece hata
xxx 1 tek hata, eski sendrom ismi verir
xxx 0 çift hata - belirtilmesi gerekiyor
``
Dört durum kapsamlıdır. Çift hata iki biti ters çevirir: eski sendrom 000'u okuyamaz (iki kontrolünü birlikte bozar), ama p₀ iki kez ters çevrilir ve 0'a geri döner. xxx + 0 kalıbı kesinlikle belirgindir.
Nasıl SECDED Çalışır
SECDED kuralı, paritenin modüler yapısını kullanır. Eşit parite ile, tek bir ters çeviri p₀'yu değiştirir. İki ters çeviri p₀'yu değiştirmeyecek. Bu nedenle, p₀, hataları mod 2 sayar.
Dik Geometrik Görüntü
Hamming, aynı noktaya farklı bir yöntemle ulaştı: analitik geometri. Her n-bit dizesini, n-boyutlu hipercubun bir köşesi olarak temsil edin. Bir bit ters çevrilirse, bir nokta bir eksen boyunca bir kenar uzunluğu boyunca hareket eder. İki ters çevirim: iki kenar. Metrik, Hamming mesafesidir.
Bir kod sözcüğü etrafındaki Hamming topunu t radius olarak tanımlayın: kod sözcüğünden t bit-flips mesafesindeki tüm noktaları. Tek hata düzeltme için t = 1.
Tek hata düzeltme koşulu: her iki farklı kod sözcüğü etrafındaki topun çaprazlamasına oluşturulması. Eğer çaprazlarsa, alıcı kelimeyi hangi kod sözcüğüne ait olduğunu belirleyemeyecek ve kodlayıcı başarısız olacaktır.
Bu, doğrudan minimum mesafeye geçer: iki topun çaprazlamasına oluşturulmaması için kod sözcüklerinin en azından 3 metre uzağa olması gerekir (d_min ≥ 3).
Bu, (7,4) kodunun d_min = 3'ü karşılamaktadır. Hamming'in sınırlaması: 2^7 / (1 + 7) = 16 = 2^4. Tam olarak 16 kod sözcüğü. Bir mükemmel kod: 16 topun çaprazlamasına oluşturulmaması ve {0,1}^7'yi dolduran boşluk veya çakışma olmadan dolduran 16 top.
Mühendislik Kararları
Hamming açık bir şekilde belirtti: hata düzeltme kodları, saf matematikten ziyade mühendislik kararları içerir.
Mesaj uzunluğu: daha uzun mesajlar daha verimli kodlama sağlar (log n parite biti için n mesaj biti). Ancak daha uzun mesajlar da daha fazla gürültü toplar ve hataların düzeltilmesi için iki ek hata algılama riski artar.
Hata düzeltme düzeyi ve algılama: bir hata düzeltme için iki ek hata algılama için değişim. Kanalın gürültü özelliklerine göre optimal bölünme belirir.
Saha bakım değeri: ekipman daha karmaşık hale gelirse, alan teknisyenleri her hatayiğeni ilk prensiplerden analiz edemez. Kendi kendine teşhis eden bir sistem, bakım için gereken becerinin önemli ölçüde azalmasına katkıda bulunur. Hamming bunu, genellikle saf güvenilirlik kazancından daha önemli olan en önemli avantajlardan biri olarak adlandırdı.
Still: Şans Hazır Bir Akıl için Hazır Olanı Tutar
Hamming, 12. bölümü doğrudan bir meydan okuma ile kapattı. Olayın keşfinin, büyük ölçüde Bell Labs'taki ana görevlerini yerine getirirken, çoğunlukla rastgele anlarda üç ila altı ay sürebileceğini belirtti.
O, bunun mümkün olmasını sağladığını üç şeyde belirledi:
1. Hazırlık: sorunun ortaya çıkmadan önce parite kontrolleri, ikili aritmetik ve grup teorisi hakkındaki derin bilgisi.
2. Geçmiş başarıları gözden geçirme: geçmiş çözümlerin tarzını içselleştirmek için alışkanlık olarak geçmiş çözümleri tekrarlamak. Üçgen kodu, dikdörtgen kodu üzerinde mental olarak gözden geçirirken ona geldi.
3. Gözükeçlik için kabul etmemek: bir kez elini yaktı, görünürdeki mükemmellikle yetinmeyi kabul etti. Koda kadar gitmeye zorladı ve en iyi olduğu kanıtlanıncaya kadar.