From b4a9fc0cec69b3985a30de7481237df6be175b0d Mon Sep 17 00:00:00 2001 From: zeefaad Date: Thu, 23 Oct 2025 12:29:31 +0200 Subject: [PATCH] Gray Mapping --- QAM/constellation.dat | 416 ++++++++++++++++++++++++++++++++++++++ QAM/constellation_ref.dat | 16 ++ QAM/out | Bin 20784 -> 20896 bytes QAM/qam.c | 68 ++++++- QAM/save/qam.c | 2 +- 5 files changed, 498 insertions(+), 4 deletions(-) create mode 100644 QAM/constellation.dat create mode 100644 QAM/constellation_ref.dat diff --git a/QAM/constellation.dat b/QAM/constellation.dat new file mode 100644 index 0000000..2706465 --- /dev/null +++ b/QAM/constellation.dat @@ -0,0 +1,416 @@ +-0.44721360 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 1.34164079 + 1.34164079 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 + 1.34164079 1.34164079 +-0.44721360 0.44721360 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 0.44721360 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-1.34164079 1.34164079 + 0.44721360 -1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 0.44721360 +-0.44721360 -1.34164079 +-0.44721360 0.44721360 +-1.34164079 1.34164079 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 + 0.44721360 -0.44721360 +-0.44721360 0.44721360 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-0.44721360 0.44721360 + 1.34164079 1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-1.34164079 0.44721360 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-1.34164079 1.34164079 +-0.44721360 1.34164079 + 0.44721360 -1.34164079 +-0.44721360 1.34164079 + 0.44721360 0.44721360 +-0.44721360 1.34164079 + 0.44721360 1.34164079 +-0.44721360 1.34164079 +-0.44721360 -1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 0.44721360 +-0.44721360 0.44721360 +-0.44721360 1.34164079 + 1.34164079 -1.34164079 +-0.44721360 1.34164079 + 1.34164079 -0.44721360 +-0.44721360 0.44721360 +-1.34164079 0.44721360 +-0.44721360 1.34164079 + 1.34164079 0.44721360 +-0.44721360 0.44721360 + 1.34164079 -0.44721360 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-1.34164079 -0.44721360 +-0.44721360 0.44721360 +-1.34164079 -0.44721360 +-0.44721360 0.44721360 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-0.44721360 0.44721360 +-0.44721360 -0.44721360 +-0.44721360 0.44721360 + 1.34164079 -1.34164079 +-1.34164079 1.34164079 + 0.44721360 -1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 1.34164079 + 1.34164079 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 + 1.34164079 1.34164079 +-0.44721360 0.44721360 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 0.44721360 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-1.34164079 1.34164079 + 0.44721360 -1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 0.44721360 +-0.44721360 -1.34164079 +-0.44721360 0.44721360 +-1.34164079 1.34164079 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 + 0.44721360 -0.44721360 +-0.44721360 0.44721360 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-0.44721360 0.44721360 + 1.34164079 1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-1.34164079 0.44721360 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-1.34164079 1.34164079 +-0.44721360 1.34164079 + 0.44721360 -1.34164079 +-0.44721360 1.34164079 + 0.44721360 0.44721360 +-0.44721360 1.34164079 + 0.44721360 1.34164079 +-0.44721360 1.34164079 +-0.44721360 -1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 0.44721360 +-0.44721360 0.44721360 +-0.44721360 1.34164079 + 1.34164079 -1.34164079 +-0.44721360 1.34164079 + 1.34164079 -0.44721360 +-0.44721360 0.44721360 +-1.34164079 0.44721360 +-0.44721360 1.34164079 + 1.34164079 0.44721360 +-0.44721360 0.44721360 + 1.34164079 -0.44721360 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-1.34164079 -0.44721360 +-0.44721360 0.44721360 +-1.34164079 -0.44721360 +-0.44721360 0.44721360 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-0.44721360 0.44721360 +-0.44721360 -0.44721360 +-0.44721360 0.44721360 + 1.34164079 -1.34164079 +-1.34164079 1.34164079 + 0.44721360 -1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 1.34164079 + 1.34164079 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 + 1.34164079 1.34164079 +-0.44721360 0.44721360 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 0.44721360 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-1.34164079 1.34164079 + 0.44721360 -1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 0.44721360 +-0.44721360 -1.34164079 +-0.44721360 0.44721360 +-1.34164079 1.34164079 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 + 0.44721360 -0.44721360 +-0.44721360 0.44721360 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-0.44721360 0.44721360 + 1.34164079 1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-1.34164079 0.44721360 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-1.34164079 1.34164079 +-0.44721360 1.34164079 + 0.44721360 -1.34164079 +-0.44721360 1.34164079 + 0.44721360 0.44721360 +-0.44721360 1.34164079 + 0.44721360 1.34164079 +-0.44721360 1.34164079 +-0.44721360 -1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 0.44721360 +-0.44721360 0.44721360 +-0.44721360 1.34164079 + 1.34164079 -1.34164079 +-0.44721360 1.34164079 + 1.34164079 -0.44721360 +-0.44721360 0.44721360 +-1.34164079 0.44721360 +-0.44721360 1.34164079 + 1.34164079 0.44721360 +-0.44721360 0.44721360 + 1.34164079 -0.44721360 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-1.34164079 -0.44721360 +-0.44721360 0.44721360 +-1.34164079 -0.44721360 +-0.44721360 0.44721360 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-0.44721360 0.44721360 +-0.44721360 -0.44721360 +-0.44721360 0.44721360 + 1.34164079 -1.34164079 +-1.34164079 1.34164079 + 0.44721360 -1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 1.34164079 + 1.34164079 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 + 1.34164079 1.34164079 +-0.44721360 0.44721360 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 0.44721360 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-1.34164079 1.34164079 + 0.44721360 -1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 0.44721360 +-0.44721360 -1.34164079 +-0.44721360 0.44721360 +-1.34164079 1.34164079 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 + 0.44721360 -0.44721360 +-0.44721360 0.44721360 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-0.44721360 0.44721360 + 1.34164079 1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-1.34164079 0.44721360 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-1.34164079 1.34164079 +-0.44721360 1.34164079 + 0.44721360 -1.34164079 +-0.44721360 1.34164079 + 0.44721360 0.44721360 +-0.44721360 1.34164079 + 0.44721360 1.34164079 +-0.44721360 1.34164079 +-0.44721360 -1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 0.44721360 +-0.44721360 0.44721360 +-0.44721360 1.34164079 + 1.34164079 -1.34164079 +-0.44721360 1.34164079 + 1.34164079 -0.44721360 +-0.44721360 0.44721360 +-1.34164079 0.44721360 +-0.44721360 1.34164079 + 1.34164079 0.44721360 +-0.44721360 0.44721360 + 1.34164079 -0.44721360 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-1.34164079 -0.44721360 +-0.44721360 0.44721360 +-1.34164079 -0.44721360 +-0.44721360 0.44721360 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-0.44721360 0.44721360 +-0.44721360 -0.44721360 +-0.44721360 0.44721360 + 1.34164079 -1.34164079 +-1.34164079 1.34164079 + 0.44721360 -1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 1.34164079 + 1.34164079 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 + 1.34164079 1.34164079 +-0.44721360 0.44721360 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 0.44721360 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-1.34164079 1.34164079 + 0.44721360 -1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 0.44721360 +-0.44721360 -1.34164079 +-0.44721360 0.44721360 +-1.34164079 1.34164079 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 + 0.44721360 -0.44721360 +-0.44721360 0.44721360 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-0.44721360 0.44721360 + 1.34164079 1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-1.34164079 0.44721360 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-1.34164079 1.34164079 +-0.44721360 1.34164079 + 0.44721360 -1.34164079 +-0.44721360 1.34164079 + 0.44721360 0.44721360 +-0.44721360 1.34164079 + 0.44721360 1.34164079 +-0.44721360 1.34164079 +-0.44721360 -1.34164079 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 0.44721360 +-0.44721360 0.44721360 +-0.44721360 1.34164079 + 1.34164079 -1.34164079 +-0.44721360 1.34164079 + 1.34164079 -0.44721360 +-0.44721360 0.44721360 +-1.34164079 0.44721360 +-0.44721360 1.34164079 + 1.34164079 0.44721360 +-0.44721360 0.44721360 + 1.34164079 -0.44721360 +-1.34164079 1.34164079 +-1.34164079 -1.34164079 +-0.44721360 1.34164079 +-1.34164079 -0.44721360 +-0.44721360 0.44721360 +-1.34164079 -0.44721360 +-0.44721360 0.44721360 +-0.44721360 -0.44721360 +-0.44721360 1.34164079 +-0.44721360 -0.44721360 +-0.44721360 0.44721360 +-0.44721360 -0.44721360 +-0.44721360 0.44721360 + 1.34164079 -1.34164079 diff --git a/QAM/constellation_ref.dat b/QAM/constellation_ref.dat new file mode 100644 index 0000000..2c119c2 --- /dev/null +++ b/QAM/constellation_ref.dat @@ -0,0 +1,16 @@ +-1.34164079 -1.34164079 +-1.34164079 -0.44721360 +-1.34164079 0.44721360 +-1.34164079 1.34164079 +-0.44721360 -1.34164079 +-0.44721360 -0.44721360 +-0.44721360 0.44721360 +-0.44721360 1.34164079 + 0.44721360 -1.34164079 + 0.44721360 -0.44721360 + 0.44721360 0.44721360 + 0.44721360 1.34164079 + 1.34164079 -1.34164079 + 1.34164079 -0.44721360 + 1.34164079 0.44721360 + 1.34164079 1.34164079 diff --git a/QAM/out b/QAM/out index 85fbb74103fb4befa4002a0ccef6b6f141eb121a..50b6c9ccacf8fbb99bf6f9bdddd160204ffb47c6 100755 GIT binary patch delta 4920 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 delta 4122 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 1); +} + +// Iteration de XOR +int gray_to_bin(int g) { + int b = g; + while (g >>= 1) + b ^= g; + return b; +} + // Modulation QAM void modulate (qam_system* qam, double complex* symbols, int nb_symbols, double complex* s) { for (int k = 0; k < nb_symbols; k++) { @@ -80,12 +92,30 @@ void demodulate(qam_system* qam, double complex* s, int nb_symbols, uint8_t* bit } } + /* + // Ancienne methode (non gray) // index du symbole (id) : même mappage que dans bits_to_symbols() int id = i_cl * sm + j_cl; for (int b = 0; b < qam->k; b++) { bits_hat[k * qam->k + b] = (id >> (qam->k - 1 - b)) & 1; } + */ + + // Gray mapping + if (qam->k % 2 != 0) { + printf("demodulate : k pair (k = %d)\n", qam->k); + exit(1); + } + int bits_per_axis = qam->k / 2; + + int i_bin = gray_to_bin(i_cl); + int j_bin = gray_to_bin(j_cl); + + for (int b = 0; b < bits_per_axis; b++) { + bits_hat[k * qam->k + b] = (i_bin >> (bits_per_axis - 1 - b)) & 1; + bits_hat[k * qam->k + bits_per_axis + b] = (j_bin >> (bits_per_axis - 1 - b)) & 1; + } } } @@ -111,7 +141,7 @@ void add_noise (double complex* s, int len, double sigma) { } // Changer le tableau de bits en boolen ou alors la represenation binaire et shifter pour extraire les bits (pas bien si M plus grand) -void bits_to_symbols (qam_system* qam, uint8_t* bits, int nb_bits, double complex* symbols) { +/*void bits_to_symbols (qam_system* qam, uint8_t* bits, int nb_bits, double complex* symbols) { int nb_symbols = nb_bits / qam->k; int sm = sqrt(qam->M); for (int k = 0; k < nb_symbols; k++) { @@ -123,6 +153,37 @@ void bits_to_symbols (qam_system* qam, uint8_t* bits, int nb_bits, double comple int j = id % sm; symbols[k] = qam->constellation[i][j]; } +}*/ + +void bits_to_symbols (qam_system* qam, uint8_t* bits, int nb_bits, double complex* symbols) { + int nb_symbols = nb_bits / qam->k; + int sm = (int)sqrt(qam->M); + + // k pair + if (qam->k % 2 != 0) { + printf("bits_to_symbols : k doit être pair (k = %d) \n", qam->k); + exit(1); + } + int bits_per_axis = qam->k / 2; + + for (int sym = 0; sym < nb_symbols; sym++) { + // Construire les indices binaires i_bin (MSB...) et j_bin (LSB...) + int i_bin = 0; + int j_bin = 0; + for (int b = 0; b < bits_per_axis; b++) { + i_bin = (i_bin << 1) | bits[sym * qam->k + b]; + j_bin = (j_bin << 1) | bits[sym * qam->k + bits_per_axis + b]; + } + + int i_gray = bin_to_gray(i_bin); + int j_gray = bin_to_gray(j_bin); + + if (i_gray < 0 || i_gray >= sm || j_gray < 0 || j_gray >= sm) { + printf("bits_to_symbols : IOOR i_gray = %d j_gray = %d sm = %d \n", i_gray, j_gray, sm); + exit(1); + } + symbols[sym] = qam->constellation[i_gray][j_gray]; + } } double compare_bits(uint8_t* bits1, uint8_t* bits2, int nb_bits) { @@ -166,7 +227,7 @@ void reconstruction_text(int nb_chars, uint8_t* output_bits, char* texte_recup) texte_recup[nb_chars] = '\0'; } -void conversion_text_to_bits(int nb_chars, int nb_bits, char* texte, uint8_t* input_bits) { +void text_to_bits(int nb_chars, int nb_bits, char* texte, uint8_t* input_bits) { for(int i = 0; i < nb_chars; i++){ for(int b = 0; b < 8; b++){ input_bits[i*8 + b] = (texte[i] >> (7-b)) & 1; @@ -183,6 +244,7 @@ void free_constellation(qam_system* qam) { } int main () { + // Initialisation du system qam qam_system qam; qam.M = 16; qam.k = (int)log2((double)(qam.M)); @@ -198,7 +260,7 @@ int main () { int nb_bits = nb_chars * 8; int nb_symbols = (nb_bits + qam.k - 1) / qam.k; uint8_t* input_bits = malloc(nb_bits * sizeof(uint8_t)); - conversion_text_to_bits(nb_chars, nb_bits, texte, input_bits); + text_to_bits(nb_chars, nb_bits, texte, input_bits); // Conversion en symboles double complex* symbols = malloc(sizeof(double complex) * nb_symbols); diff --git a/QAM/save/qam.c b/QAM/save/qam.c index 29095a6..bd47434 100644 --- a/QAM/save/qam.c +++ b/QAM/save/qam.c @@ -210,7 +210,7 @@ int main () { modulate(&qam, symbols, nb_symbols, s); // Ajout du bruit - add_noise(s, total_samples, 0); + add_noise(s, total_samples, 120); FILE *fp_ref = fopen("constellation_ref.dat", "w"); fill_constellation_data(&qam, fp_ref);