- ハミング距離の計算方法: ハミング距離は、2つの等しい長さのビット列の間の異なるビットの数を計算します。以下は、2つのビット列のハミング距離を計算するC言語の関数の例です。
#include <stdio.h>
int hammingDistance(char* str1, char* str2, int length) {
int distance = 0;
for (int i = 0; i < length; i++) {
if (str1[i] != str2[i]) {
distance++;
}
}
return distance;
}
int main() {
char* bitString1 = "1010101";
char* bitString2 = "1001001";
int length = 7;
int distance = hammingDistance(bitString1, bitString2, length);
printf("Hamming Distance: %d\n", distance);
return 0;
}
- エラー検出: ハミング距離を使用してエラーを検出する方法です。送信側は、データにパリティビットを追加して送信します。受信側では、受信したデータとパリティビットのハミング距離を計算し、距離が0でない場合はエラーが発生したことを検出します。以下は、エラー検出のためのC言語の関数の例です。
#include <stdio.h>
int checkErrorDetection(char* data, int length) {
int errorDetected = 0;
char parityBit = data[length - 1];
data[length - 1] = '\0'; // パリティビットを一時的に削除
int distance = hammingDistance(data, "0000000", length - 1); // 送信時のパリティビットを含めない
if (distance != 0) {
errorDetected = 1;
}
data[length - 1] = parityBit; // パリティビットを元に戻す
return errorDetected;
}
int main() {
char* data = "10101010"; // パリティビットを含むデータ
int length = 9; // パリティビットを含むデータの長さ
int errorDetected = checkErrorDetection(data, length);
if (errorDetected) {
printf("Error detected!\n");
} else {
printf("No errors detected.\n");
}
return 0;
}
- エラー訂正: ハミング距離を使用してエラーを訂正する方法です。送信側は、データに冗長ビットを追加して送信します。受信側では、受信したデータと冗長ビットのハミング距離を計算し、最も近いビット列を正しいデータとして訂正します。以下は、エラー訂正のためのC言語の関数の例です。
#include <stdio.h>
void correctError(char* data, int length) {
int minDistance = length + 1; // 初期値を最大距離よりも大きく設定
int errorIndex = -1;
char parityBit = data[length - 1];
data[length - 1] = '\0'; // パリティビットを一時的に削除
// すべての可能なデータパターンとの距離を計算して最小距離を見つける
for (int i = 0; i < length - 1; i++) {
int distance = hammingDistance(data, "0000000", length - 1); // 送信時のパリティビットを含めない
if (distance < minDistance) {
minDistance = distance;
errorIndex = i;
}
data[i] = (data[i] == '0') ? '1' : '0'; // 次のデータパターンを試すためにビットを反転させる
}
if (minDistance > 0) {
printf("Error corrected at index: %d\n", errorIndex);
} else {
printf("No errors detected.\n");
}
data[length - 1] = parityBit; // パリティビットを元に戻す
}
int main() {
char* data = "10101010"; // 冗長ビットを含むデータ
int length = 9; // 冗長ビットを含むデータの長さ
correctError(data, length);
printf("Corrected data: %s\n", data);
return 0;
}
上記のコード例を使用して、ハミング距離によるエラー検出および訂正の方法を実装することができます。これにより、データの送信時および受信時に発生するエラーを検出し、必要に応じて訂正することができます。