Welch-Berlekamp algoritmasındaki hata sayısını nasıl belirliyorsunuz?


9

Reed-Solomon kodlarının kodunu çözmek için Welch-Berlekamp algoritmasında , bilinmeyen konumlarda hataları olan bir mesajı temsil eden noktaların listesi verilir (ve algoritmaya verilir). Çıktı, hataların meydana geldiği durumlar dışında verilen tüm noktalardan geçen bir polinomdur.(birben,bben)ebbene

Yöntem, formun doğrusal denklemleri sisteminin çözülmesini içerir

bbenE(birben)=S(birben)

derecesine ve en fazla derecesine sahip olduğu tüm için . Değişkenler ve katsayılarıdır .benEeSe+kES

derecesine sahip olduğundan emin olmak için, genellikle katsayısının 1 olduğu kısıtlamasını yukarıdaki doğrusal sisteme ekler . Ancak, uygulamada bir mutlaka bilmiyor . Bununla uğraşmak Bir verimsiz (ama yine de polinom zamanlı) yolu denemektir ile başlayan tüm değerler için bir çözüm bulunana dek aşağı gidiyor.Eexeee(n+k-1)/2-1

Sorum şu: belirlemek için daha etkili bir yolu yoktur ? eAlternatif olarak, doğrusal sistemde tam değer yerine bir üst sınır kullanmasına izin veren bir değişiklik var mı?e

Özellikle Reed-Solomon kodları için bu özel kod çözücüyü kullanmak istiyorum, diğer tekniklere dayanan tamamen farklı bir algoritma değil.


DW'nin cevabına yanıt olarak, işte çalışan örneğim. Her şey modulo 7 yapılır.

plain message is: [2, 3, 2]
polynomial is: 2 + 3 t^1 + 2 t^2
encoded message is: [[0, 2], [1, 0], [2, 2], [3, 1], [4, 4]]
corrupted message is: [[0, 2], [1, 0], [2, 3], [3, 1], [4, 4]]

Hata üçüncü noktada.

olduğunda , söz konusu polinom denklemie=2

bben(e0+e1x+e2x2)-q0-q1x-q2x2-q3x3-q4x4=0

Ve takmak sistemi matris biçiminde verir:x=0,1,2,3,4

[2, 0, 0, 6, 0, 0, 0, 0, 0]
[0, 0, 0, 6, 6, 6, 6, 6, 0]
[3, 6, 5, 6, 5, 3, 6, 5, 0]
[1, 3, 2, 6, 4, 5, 1, 3, 0]
[4, 2, 1, 6, 3, 5, 6, 3, 0]
[0, 0, 1, 0, 0, 0, 0, 0, 1]

Son satır, kısıtlamasıdır . Gauss eliminasyonunu uyguladıke2=1

[1, 0, 0, 0, 0, 0, 1, 4, 0]
[0, 1, 0, 0, 0, 0, 3, 3, 1]
[0, 0, 1, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 1, 0, 0, 2, 1, 0]
[0, 0, 0, 0, 1, 0, 2, 2, 5]
[0, 0, 0, 0, 0, 1, 4, 5, 2]

Ve her iki serbest değişken için 1 seçerek,

[2, 2, 1, 4, 1, 0, 1, 1]

Hangi anlama gelir

E is 2 + 2 t^1 + 1 t^2
Q is 4 + 1 t^1 + 0 t^2 + 1 t^3 + 1 t^4

Ve , . Not olduğu gibi faktörlerEQQ(t+6)(t3+2t2+2t+3)mod7

İçin Ben iyi bir çözüm elde edersiniz:e=1

system is:    
[2, 0, 6, 0, 0, 0, 0]
[0, 0, 6, 6, 6, 6, 0]
[3, 6, 6, 5, 3, 6, 0]
[1, 3, 6, 4, 5, 1, 0]
[4, 2, 6, 3, 5, 6, 0] 
[0, 1, 0, 0, 0, 0, 1]

reduced system is:

[1, 0, 0, 0, 0, 0, 5]
[0, 1, 0, 0, 0, 0, 1]
[0, 0, 1, 0, 0, 0, 3]
[0, 0, 0, 1, 0, 0, 3]
[0, 0, 0, 0, 1, 0, 6]
[0, 0, 0, 0, 0, 1, 2]

solution is [5, 1, 3, 3, 6, 2]
Q is 3 + 3 t^1 + 6 t^2 + 2 t^3
E is 5 + 1 t^1
P(x) = 2 + 3 t^1 + 2 t^2 # this is correct!
r(x) = 0

Yukarıdaki karşı örnek örneği sıfırdan yazdığım kod tarafından oluşturulmuş olsa da (temelde denediğim ilk şeydi), çözümlerin elle geçerli olduğunu kontrol edebiliriz, bu yüzden kodum buggy olsa bile hala iddia için geçerli bir karşı örnek kullanarak çalışır.e=2


@DW çözelti vektörü geçerlidir. Aslında 1 * 2 + 1 * 1 + 4 * 1'dir (matrisin son sütunu dışarıda bırakıldığı için çözelti vektörünün boyutu birdir). dışarıda bırakmak benim bir yazım , ancak benim uygulamada doğrudur. Etkisini, örneğin, [1, 0] noktasını kullanan sistemin ikinci satırında görebilirsiniz ve ilk üç girişin tümü sıfırdır, çünkü 0 ile çarpılır. Örneğim net değilse gönderebilirim github üzerindeki kodum. Kodumu temiz görüyorum, ancak genelliği nedeniyle daha karışık olurdu. bi
JeremyKun

Yanıtlar:


3

Aynı prosedür aslında herhangi bir sayıda hatayı düzeltmek için çalışır e.

Gereksinim hata polinomunun E(x) her noktada sıfır olmalı aiburada bir hata vardı. Hiçbir şey bunun sadece bu noktalarda sıfır olması gerektiğini söylemez; sahip olabilirsinE(x) diğer noktalarda da sıfırdır ve derecesi olduğu sürece sorun olmaz e.

Yani, eğer e hataların sayısında bir üst sınır, bir polinom var E(x) istenen tüm özelliklere sahip (yani, tam olarak derecesi vardır eve hatanın olduğu her noktada sıfırdır). Örneğin,e hatalar, sonra bir polinom var E(x) sıfır sayısını tam olarak elde etmek için her hatada sıfır ve birkaç noktada daha sıfır e.

Son olarak, doğruluk teoremi böyle bir polinom E(x)mevcutsa, Berlekamp-Welch algoritması onu bulabilecektir. Yani, daha az olsa bile e hatalar, prosedür hala tanımlamak için doğru çalışır E(x). Bir kez sahip olduğunuzdaE(x), tanımlayabilirsiniz ne hatasız konumlar ve daha sonra basit bir şekilde deşifre edebilirsiniz.


Sorudaki "karşı örnek" hakkındaki konuşmanın sonucunu belgelemek için:

Bu aslında geçerli bir karşı örnek değil. Kusur, Berlekamp-Welch'in düzeltmesini beklemeniz gereken kaç hatanın hesaplanmasıydı. Mesafenk+1, bu yüzden düzeltebilmenizi beklemelisiniz (nk)/2hatalar (Ran G.'nin işaret ettiği gibi). Karşı örneğinizden=5 ve k=3, yani (nk)/2=1, bu nedenle bu yordamın yalnızca bir hatayı düzeltebileceğini, yani, e=1. Yani, prosedürü bir örneklee=2, yordamın düzgün çalışmasını beklemek için hiçbir neden yoktur.

Dolayısıyla, karşı örnek aslında bir karşı örnek değildir ve yukarıdaki cevabımla çelişmez.


1
@JeremyKun mesafe nk+1 böylece kod (nk)/2hataları değil mi?
Ran G.

Bir kanıt eksik olmasına rağmen, bu cevaptaki açıklama benim için anlamlı. Sıfırları ayarlamaE(x)algoritmaya, polinomu enterpolasyon sırasında göz ardı etmesi gereken noktaları "anlatır". Bu nedenle, sıfırlar kümesiE(x) içeren hangi hataları olmuş içinde, kod çözme çalışması gerektiğini noktasının seti. Bu durumda daha fazla serbest değişken olmalıdır (diğer sıfır yerlerini rastgele ayarlamak için).
Ran

Ooooh bu sorun mu ... Singleton sınırını berbat ettiğim mi? Doğrulamak için, eğern=7, tek bir hata girin ve ayarlayın e=2, her şeyin yolunda gitmesini beklemeliyiz. Bunu şimdi deneyeceğim.
JeremyKun

Tamam, bu denediğim örnekler üzerinde çalışıyor. Mükemmel!
JeremyKun
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.