-1

現在、メッセージングシステムを実装中です。エラー保護されたメッセージを受信者に送信したいのですが、基本的には失敗しています。つまり、エラー修正コードを計算しています。私は次のようにエラー修正のためにlibraryを使用します。あなたは、私が発生する可能性がある20%のエラーから画像を保護したい見ることができるように大きな入力の場合のPythonとReed Solomonでのエラー修正

from reedsolo import RSCodec 

with open("imageToSend.png", "rb") as pic: 
    picContent = pic.read() 

correctionLength = int((len(picContent)/100)*20) 
rs = RSCodec(correctionLength) 

rs.encode(picContent) 


は以下MWEを考えてみましょう。ここの問題?コード化されたbytearrayは空です。そして私の質問:大規模なファイルを小規模なものに分割せずにエラーから守ることは可能ですか?

+0

投票者について:ここには広すぎるものはありません。 – deviantfan

+0

データをマトリックス形式にコピー/分離しなければならないオーバーヘッドを気にしない場合は、2層の検出/訂正方式を使用できます。行は、誤り検出のためにCRCまたはRS ECCバイトが追加され、行列は、行指向CRC/RS ECCによって検出された消去の訂正のためにRS ECC行を付加し、誤り行ごとにただ1つのパリティ行を訂正することを必要とする。インターリーブは、大きなドロップアウトに対処するために使用できます。 – rcgldr

答えて

1

Is it possible to protect large files from errors, without chunking them into smaller pieces

コードによって異なります。 bytewise RSでは、チャンクが必要です(しかし、このlibはあなたのために働きます)。

As you can see I want to protect the image from 20% errors that might occur. The problem here?

はい。この数字は、最初はパーセントのようなものではありません。あなたは実際にlibの例を読んで、RSがどのように動作するか少し知る必要があります。
数値は、エラー訂正に使用する255バイトのうちの何バイトを使用するかです。例えば。 40は215バイトのデータごとに40バイトのRSコード(約20%)が存在し、255バイトで20バイトまでのエラーを訂正できることを意味します。

最後に、LDPCの原理は、あなたが調べたいものかもしれません。エラーを訂正するのにRSより少し悪いですが、それほど多くはありません。そしてそれはです。多くはです。

コメントからの追加:
修正できる場合は、エラーの場所によって異なります。はい。完全な255ブロックがなくなった場合、それを修正することはできません。このスパンを大きくするために、高次のRS符号を使用することもできます(例えば、1つの独立したブロックは255の代わりに65536バイトを持つことができます)。しかし)これはもう(すでに遅い)255-RSよりはるかに遅く、b )私が知っているRSライブラリはそれを行うことができません(あなたのものです)。あなたはそれを自分で書く必要があります。

もう一度、LDPCが助けてくれれば、それはまったく違うことです。例えば。どれだけ多くのエラーが訂正/検出するにはあまりにも多くの明確な値を持っていませんが、エラーパターンにも依存します。それはRSより新しいので、コード/ライブラリのオンライン数は少なく、おそらくあなたの場合はありません。

((それも古いですが、何十年も誰も興味がなく、誰かがそれが役に立つと気づくまで))。

+0

説明のためにありがとう - 私は実際にいくつかの背景情報を間違っているか、それぞれ十分に得られなかった。私はまだ2つの質問があります。あなたは多分答えるほど親切だと思うかもしれません。1)1000バイトのファイルがあり、訂正コードを40(215バイトのチャンクごとに約20%)に設定します。私はこの大きなメッセージを受け取った人に送りますが、その途中でキャラクターの20%が変更されます(「A」が「Z」に、「B」が「K」などに変わります)。その後回復可能なはずですか? –

+0

2)「100文字のランダムな文字列を作成する」のようにしようとするとRSCodec(20)でエンコードするので(20%という意味でしょうか?)、私はランダムに20文字(全体の長さは同じです)を切り替え、デコード機能は私に 'reedsolo.ReedSolomonError:エラーを見つけることができませんでした。これは奇妙なことですよね?それともそれがどういうふうに誤解していますか? –

+0

@JJAbrams 'それは20%を意味するでしょうか?そうではありません。それは私の答えの要点です。これは、255バイトのブロック内のRSコードからのバイト数です。 20を渡すとは、235バイトのデータごとに20バイトのRSコードが追加され、この235 + 20バイトの最大10バイトのエラーを修正できることを意味します。それは255の約4%です。実際に最大20%のエラーを修正したい場合は、104を渡す必要があります。 – deviantfan

関連する問題