Mais là tu ne fais que divisé la variable en 3 autres variables? ce n'est pas la question posée (en tout pas pas celle j'ai comprie!)Envoyé par Trap D
Mais là tu ne fais que divisé la variable en 3 autres variables? ce n'est pas la question posée (en tout pas pas celle j'ai comprie!)Envoyé par Trap D
heu effectivement, là je ne comprends plus : .
Je vais suivre les conseils de ggnore. C'est vrai qu'il y a surement mieux, mais c'est quand même une bonne piste...
merci en tout cas à tous pour votre aide et à bientôt..
Effectivement 2Eurocents, y'a plus simple pour le dernier
gege2061 >> Comment veux-tu transporter autant d'informations sur 12 bits que sur 32. Ou alors je ne comprends pas son problème (que fait le convertisseur 12 bits ? )
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Bah c'est la question! netpit cherche un moyen de faire rentrée 32 dans 12 avec le moins de perte possible.Envoyé par Trap D
Envoyé par Trap D
Oubli mon convertisseur, ça pourrait être n'importe quoi d'autre !Envoyé par Trap D
effectivement je perd forcément en "qualité" mais ça n'est pas un problème (12 bits c'est bien pour mon application) . L'important dans l'affaire est de correctement convertir...
bon je sors, à demain
En compressant.Envoyé par netpit
Rien à voir avec le langage C...Je m'explique : j'ai un signal stocké par exemple dans une variable A codée sur 32 bits que je veux transmettre à la variable B qui elle n'a que 12 bits. Quelle traitement faire subir à A afin de diminuer sa dynamique de 32 à 12 bits en "dégradant" le moins possible mon signal ?
Il faut une table de compression, comme les tables 'Loi A / Loi µ' utilisées en téléphonie (12 bits -> 8 bits).
Pas de Wi-Fi à la maison : CPL
Comment est-ce réalisé ?Envoyé par Emmanuel Delahaye
Comment fonctionne la table de compression ? J'ai cherché sur Internet "Loi A/Loi µ'", et je n'ai rien trouvé pour ce qui est d'un codage informatique
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Merci
J'étudie cà !
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Bonjour,
Je prend ce fil en cours, mais je pense qu'il manque une information essentielle pour traiter le problème : que signifie la valeur sur 32 bits, et que signifie la valeur sur 12 bits ?
Si, comme j'en ai l'impression, ce sont tous les 2 des échantillonages linéaires sur des valeurs entières, alors la première réponse donnée est la bonne : effectuer un décalage à droite de 20 bits (équivallent à une division par 2^20).
Sinon il faut donner l'info, la solution devrait être simple de toute façon.
Amicalement.
La variable sur 32 bits (que j'ai appelé A) contient un signal numérique en temps réel. Par exemple une sinusoide. Je dois le convertir en analogique avec un CNA qui n'est que sur 12 bits.Envoyé par sovitec
Je m'oriente pour l'instant vers un décalage vers la droite de 20 bits, permettant une division par 2^20.
J'espère avoir répondu à ta question.
En fait ma question était : quels sont les formats des variables ?Envoyé par netpit
Pour la variable 32 bits : est ce un entier signé ? un entier non signé ? un flottant ? Représente t-il un échantillonage linéaire ? logarithmique ?
De même pour la variable 12 bits : est-ce une vraie variable 12 bits ? une variable 16/32 bits dont on ne prend en compte que les 12 bits de poid faible ? les 12 bits de poid fort ? Quel type d'échantillonage ? ...
On ne pourrait faire une simple règle de trois ?
la valeur divisée par le max sur 32 bits, multipliée par le max sur 12 bits ?
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Ouh la ... si on est en entiers, on fait un "underflow" avec la première division et tout est à 0.Envoyé par Trap D
Si l'on accepte un passage en entiers très longs (64 bits), il vaut mieux commencer par la multiplication, suivie par la division.
Mais cela revient au même que de diviser par 2^20 (pour les entiers signés) ou faire >> 20 (pour les entiers non-signés)
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
variable A (en C) : non signé sur 32 bits flottantEnvoyé par sovitec
variable B (autre langage: VHDL) : 12 bits réels (permet de travailler bit par bit)
CNA: on lui rentre "0...000" (12 bits) : il sort 2 volts (min) et pour "1..111" (12 bits) il sort 3 volts (le max)
Euh ? flottant non signé ça n'existe pas en C.Envoyé par netpit
Comment s'effectue la conversion C -> VHDL ?Envoyé par netpit
Je suppose donc que c'est un échantillonage linéaire.Envoyé par netpit
là, je préfère ne pas rentrer trop dans les détails ! Pour rester clair, je programme une carte FPGA (Xilinx) avec 2 programmes :l'un proche du C (pour le micro-controlleur), l'autre en VHDL (pour le design). J'ai un "compilateur" qui se charge du téléchargement dans la carte des 2 programmes.Envoyé par sovitec
oui excuse-moi c'est parceque le type de ma variable est spécifique au langage proche du C. Il faut lire que c'est un int non signé.Envoyé par sovitec
ouiEnvoyé par sovitec
Alors le décalage à droite de 20 bits (j'espère que ça existe dans ton pseudo C) fera parfaitement l'affaire : c'est rapide, et tu ne pourras pas faire mieux au niveau qualité de conversion.
Cordialement.
Tu as entendu parler des cast ?Envoyé par 2Eurocents
Code : Sélectionner tout - Visualiser dans une fenêtre à part val = (short int) ((((double) (unsigned long)val) * (double) 0x000007FF) / (double)(unsigned long)0xFFFFFFFF) ;
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Oui, c'était le sens de ma remarque ... Pour attirer la vigilance sur le fait qu'il ne faut pas rester bêtement en entier pour ce genre d'opération.Envoyé par Trap D
Désolé de t'avoir froissé, Trap D, ce n'était pas le but.
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager