Bonjour à tous,
Je suis nouveau en programmation, est-ce que c'est possible de vous m'aider pour faire des fonctions pour un projet.
J'ai débuté mon projet et suis bloqué à une fonction voici la description:
Supposons, par exemple, que nous voulions transmettre la valeur 13 (en binaire : 1101). Nous effectuons alors le produit matriciel suivant :
voir photo en pièce jointe.
Le produit matriciel s’obtient en multipliant chaque ligne de la matrice génératrice par le vecteur de donnée à transmettre: - Faire un ET binaire entre chaque bit et faire un XOR entre les bits obtenus. Ainsi, en multipliant la 3e ligne de la matrice par la donnée (1101):
(1 0 1 1) * (1 1 0 1) = (1 & 1) ^ (0 & 1) ^ (1 & 0) ^ (1 & 1) = 1 ^ 0 ^ 0 ^ 1 = 0
#define MAT_GEN 0x0DB87421u //Matrice génératrice de Hamming
#define MAT_GEN_MASK 0xF0000000u //Masque de la matrice génératrice
uint hamm_produit_mat(uint matrice, uint data,uint nb_lignes, uint nb_cols, uint mask);
Calcule et retourne le produit matriciel de la matrice matrice par la donnée sur 4 bits data. Le résultat est un nombre sur 8 bits. Les paramètres nb_lignes, nb_colonnes et mask désignent respectivement le nombre de lignes, le nombre de colonnes et le masque à utiliser pour la matrice matrice.
Pour que le produit matriciel soit possible, il faut que le nombre minimal de bits de la donnée (data) soit inférieur ou égal au nombre de colonnes de la matrice. S’il n’est pas possible, retournez le code d’erreur : 0xFFFFFFFFu. Pour obtenir le nombre minimal de bits d’un nombre n: - 1 si le nombre est nul - (int)(log2(n)) + 1. //log2 est une fonction de <math.h>
Par exemple : hamm_produit_mat(MAT_GEN, 13u, 8, 4, MAT_GEN_MASK) doit nous retourner la valeur 85 (soit 0101 0101).
j'ai commencé par définir une macro-fonction qui isole et retourne la valeur de la ligne LN d’une matrice voici son prototype HAMM_MAT_LN(MAT, LN, NB_COL, NB_LN, MASK).
ma question est ce c'est possible de m'aider pour coder cette fonction uint hamm_produit_mat(uint matrice, uint data,uint nb_lignes, uint nb_cols, uint mask);
merci
Partager