Decapfour | Voila j'explique c'est qu'est le codage hdbn pour ceux qui ne connaissent pas :
En gros vous avez un signal numérique, donc des 1 et des 0, par exemple celui la : {1, 0 , 1 , 0 , 0, 0, 1, 1, 1, 1} ; c'est le signal d'entrée.
il faut le transformer avec le codage hdbn. hdb + n, n étant un entier de 2 à 4
- Premièrement, le hdbn est bipolaire, c'est à dire que si on trouve un 1 dans le signal d'entrée, le prochain 1 que l'on trouvera sera transformé en -1, sauf dans le cas de la transformation des n+1 zeros que je vais preciser juste après
- Deuxiemmement, lorsque n+1 zeros sont detectés a la suite sur le signal d'entrée, ces n+1 zeros sont tranformés en autre chose : au debut, on fixe v+ a 1 ( v+ = +1, v-=-1, etc)
si v+, on regarde la polarité du dernier bit a 1 sur le signal d'entrée que je vais nommer b+ ou b-
pareil pour v-
si on a v- et b- , alors on obtient le couple {b+, (n-1 zeros),v+}, soit {1,0,1} dans le cas d'un hdb2
si v- b+, {(n zeros),v+} soit {0,0,1}
si v+ b +, {b-, (n-1 zeros),v-} soit {-1,0,-1}
si v+ b-, {(n zeros),v-} soit {0,0,-1}
dans ce cas la uniquement on peut avoir deux "1" du meme signe a la suite.
Voila si ce n'est pas clair ( c'est deja bien le bordel quand on comprend ) n'hesitez pas a demander des precisions.
Je pense que je dois avoir des problèmes qui sont assez classique en C, style pointeurs, etc, si vous vouyez des choses qui ne vous paraissent pas bonnes ou pas evidentes faites moi signe.
En l'état le code est un peu sans dessus dessous, certaines fonction n'ont que peu d'interet pour le moment, mais vont etre utiles par la suite.
merci d'avance
Citation :
#include <stdio.h>
#include <stdlib.h>
#define TAILLE 10
int hdbn() ;
int reset() ;
int main (void) {
int polarite_B = 1 ;
int compteur, compteur_zeros,compteur2 ;
int n, signal;
int signal_in[TAILLE] = {1, 0 , 1 , 0 , 0, 0, 1, 1, 1, 1} ;
int compteur_bipolaire ;
int polarite_V;
int tampon[n+1];
polarite_V = reset();
printf("Donnez l'ordre n du codage hdbn\n" ) ;
scanf("%d",&n);
compteur_bipolaire = 0 ;
compteur_zeros = 0 ;//mise a zero du compteur de zeros
//definition du signal d'entrée + remise du compteur a zero pour future utilisation
for (compteur = 0;compteur <= TAILLE ;compteur++)
{
if ( signal_in[compteur] == 1 )
{
compteur_zeros = 0 ;//si on detecte un 1 avant que le compteur arrive a n+1, on remet le compteur de zeros à 0
if ( compteur_bipolaire == 1 )
{signal_in[compteur] = -1 ;}
compteur_bipolaire = 1 ;
}
else if ( signal_in[compteur] == 0 )
compteur_zeros = compteur_zeros + 1 ;//si on detecte un zero, on incremente le compteur de zeros
if ( compteur_zeros == n+1 )//si n+1 zeros sont découverts à la suite, on lance le codage hdbn
{
polarite_B = signal_in[compteur-(n+1)];
*tampon = hdbn(n,compteur,polarite_V,polarite_B);
for ( compteur2 = 0;compteur2 <=n+1; compteur2++)
{
signal_in[compteur2+compteur] = *(tampon+compteur) ; }
}
}
scanf("%d",&compteur) ;
}
int reset() {
int polarite_V ;
polarite_V = -1 ;
return polarite_V ;
}
int hdbn ( int n, int *signal_in, int compteur, int polarite_V, int polarite_B ){
int compteur2,compteur3 ;
//déclaration des signaux de sortie
int S_plus[TAILLE];
int S_moins[TAILLE];
// int S[TAILLE] = S_moins[] + S_plus[] ;
int tampon[n+1];
if ( polarite_V < 0 )
{
if ( polarite_B < 0)
{
for ( compteur2 = 0; compteur2 <= n+1;compteur2++ )
{
tampon[compteur2]= 0 ;
}//mettre des zeros dans le tampon
//v+ et b+ donnent v- et b-
tampon[0]= -1 ;
tampon[n+1]= -1 ;
}
if ( polarite_B > 0)
{
for ( compteur2 = 0; compteur2 <= n+1;compteur2++ )
{
tampon[compteur2]= 0 ;
}//mettre des zeros dans le tampon
//v+ donne v-
tampon[n+1]= -1 ;
}
}
if ( polarite_V > 0)
{
if ( polarite_B < 0)
{
for ( compteur2 = 0; compteur2 <= n+1;compteur2++ )
{
tampon[compteur2]= 0 ;
}//mettre des zeros dans le tampon
//v- et b- donnent v+ et b+
tampon[0]= 1 ;
tampon[n+1]= 1 ;
}
if ( polarite_B > 0)
{
for ( compteur2 = 0; compteur2 <= n+1;compteur2++ )
{
tampon[compteur2]= 0 ;
}//mettre des zeros dans le tampon
//v+ donne v-
tampon[n+1]= -1 ;
}
}
for ( compteur2 = 0; compteur2 <= n+1;compteur2++ )
{
printf("tampon %d : %d\n",compteur2,*(tampon+compteur2));
}
return *tampon ;
}
|
|