Besoin d'aide !

Cpcdos Messages postés 425 Date d'inscription samedi 11 juillet 2009 Statut Membre Dernière intervention 28 octobre 2016 - 4 août 2011 à 17:56
 Utilisateur anonyme - 5 août 2011 à 20:19
Bonjour , voilà j'ai besoin d'aide , c'est pour chercher en inverse

cet a dire que à la fin , la variable bt me donne "175"
et je voudrais retrouver "500" dans la variable Freq grâce a 175 (l'inverse)


freq = 500
Srate = 8000
i1 = 540

D1 = 2 * pi * Freq / SRate

D2 = 127 * Math.Sin(i1 * D1)

bt = CByte(D2 + 128)

' bt = 175



Voici le calcul posé (sans variables) :

d1 2 x PI x 500 / 8000     (1/8)PI

d2 127 x sin(540 x (1/8)PI ) 46.51661119

bt cbyte(46.51661119 + 128)   > bt cbyte(768128.8006)    =  175



j'arrive pas a modifier mon code de façon a
récupérer le 500 de la variable freq .


Pouvez vous m'aidez , ça serai vraiment Sympa

Merci

Microsf01
Copyright©Microsf01
Favier Sébastien 01
http://microsf01.fr.nf/

12 réponses

Cpcdos Messages postés 425 Date d'inscription samedi 11 juillet 2009 Statut Membre Dernière intervention 28 octobre 2016 1
4 août 2011 à 17:57
( récupérer le 500 a partir de 175 (dans mon calcul) )


Microsf01
Copyright©Microsf01
Favier Sébastien 01
http://microsf01.fr.nf/
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 août 2011 à 18:19
bt = CByte((127 * Math.Sin(i1 * (2 * pi * Freq / SRate)))+ 128)

tu connais bt,i1 et SRate ===>>
175 = CByte((127 * Math.Sin(540 * (2 * pi * Freq / 8000)))+ 128)
ce qui te fait une équation à une seule inconnue, qui est frécisément Freq

Equation de surcroît du premier degré !

De l'algèbre simple, quoi, avant de parler de développement


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
Cpcdos Messages postés 425 Date d'inscription samedi 11 juillet 2009 Statut Membre Dernière intervention 28 octobre 2016 1
4 août 2011 à 19:28
Je vous remercie pour votre réponse
mais SI je remplace l'inconnue Freq par ce que je dois trouver , "500" , je trouve
bt = 2
[i]
enfaite il faut que je révise mes maths , pourtant j'ai passé mon brevet /i

-------------------------------------------------------------------------------

donc par exemple
l'inconnue c'est x

2x + 1 = 9

2x + 1 - 1 = 9 - 1
donc
2x = 8

et ensuite je fais 8/2 et ca me donne l'inconnue

DONC


l'inconnue c'est Freq

donc

CByte((127 * Math.Sin(540 * (2 * pi * Freq / 8000)))+ 128) = 175

freq = 175 (127 / Math.sin(540 / (2 PI *8000))) - 128

freq = 118510934

ensuite
Cbyte(118510934)

Mais là il y a une erreur sur VB.net
message:
"L'expresion constante n'est pas representable dans le type byte"

le problème c'est pour l'utilisation de Cbyte , il faut pas le le nombre a "convertir" dépasse entre 0 et 255

Ai-je fait une faute pour que cela dépasse 255 ??

Microsf01
Copyright©Microsf01
Favier Sébastien 01
http://microsf01.fr.nf/
0
Utilisateur anonyme
4 août 2011 à 21:29
Bonsoir,

Non il n'y a surement pas d'erreur mais cette valeur doit surement être stockée sur plusieurs bytes.

Bonne soirée.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cpcdos Messages postés 425 Date d'inscription samedi 11 juillet 2009 Statut Membre Dernière intervention 28 octobre 2016 1
4 août 2011 à 21:42
Microsf01
Copyright©Microsf01
Favier Sébastien 01
http://microsf01.fr.nf/
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 août 2011 à 10:10
Je commencerais personnellement à vérifier la valeur de PI en mode debug.

Mais ce n'est pas tout !
Comment peut-on raisonnablement espérer retrouver une donnée exacte (un integer au départ) à partir d'un résultat de type byte, lui-même obtenu par des opérations utilisant des décimales ? ===>> car alors que ce résultat était avec décimales, sa transformation en byte fait disparaître ces décimales.
Cette "affaire" ne génêrerait dans la plupart des cas qu'un delta d'erreur insignifiant. Tel n'est pas le cas lorsqu'un sinus est utilisé.



____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 août 2011 à 10:24
Pour être plus "visuellement" pratique :
entre toto 1.1 et titi 1.5, on a une différence de 36%
La différence entre cbyte(toto) et cbyte(titi) serait de 100% puisque cbyte(toto) 1 et cbyte(titi) 2
!
Bref... je vais aller à la pêche à l'éperlan (on y est plus raisonnable autour de moi, entre pêcheurs sages et réalistes)


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
Cpcdos Messages postés 425 Date d'inscription samedi 11 juillet 2009 Statut Membre Dernière intervention 28 octobre 2016 1
5 août 2011 à 10:27
OK
bein merci de ton aide , je vais essayer de trouver une solution


Microsf01
Copyright©Microsf01
Favier Sébastien 01
http://microsf01.fr.nf/
0
Cpcdos Messages postés 425 Date d'inscription samedi 11 juillet 2009 Statut Membre Dernière intervention 28 octobre 2016 1
5 août 2011 à 10:28
eu Merci de VOS Aides ;)

Microsf01
Copyright©Microsf01
Favier Sébastien 01
http://microsf01.fr.nf/
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 août 2011 à 11:28
bein merci de ton aide , je vais essayer de trouver une solution


Hé bien, moi, je vais te dire ce que tu "peux faire" ===>>
Abandonner cette démarche de réversibilité de de qui n'est pas réversible.
ou alors :
Accompagner ton "fichier wav" d'un autre fichier contenant les vraies valeurs (et dans l'ordre) pour retransposer en fichier "originel"
Et même ainsi : Pi, déjà, n'est pas un nombre fini, ce qui fait que :
- dans un sens (vers des bytes) tu auras un résultat utilisable dans ton fichier .wav
- dans ton fichier annexe, tu ne sauras y mettre la correspondance "finie" de valeurs "non finies". Tu ne pourras donc même pas utiliser parfaitement ces valeurs. Et alors ? que vas-tu faire ? Chercher la valeur "approximative" entière la plus proche ? ===>> bonjour les dégâts !

Ah mais !.....
Que faire alors pour tout retrouver parfaitement ?
Ben, ma foi ... heu .... re-heu..... hmm ... re-hmmm ... conserver en "parallèle" le vrai fichier, tel qu'il était ... et .... M O U A R F !
___________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
Utilisateur anonyme
5 août 2011 à 20:09
Bonsoir,
Je vais préciser ce que je t'expliquais plus haut :
Souvent (dans les fichiers midi par exemple) on stocke un grand chiffre comme le tiens en le décomposant sur plusieurs bytes.
exemple byte1 : 63
byte2 : 28
byte3 : 4
puis on fait la conversion :
(byte1 * (256 * 256)) + (byte2 * 256) + byte3
dans ce cas : 4128768 + 7168 + 4
soit : 4135940

Il est facile de renverser le calcul dans l'autre sens pour obtenir les 3 bytes à écrire dans ton fichier compressé à partir de ta fréquence (Freq).

J'espère que je me suis bien fait comprendre.

Bonne soirée.
0
Utilisateur anonyme
5 août 2011 à 20:19
je suis un peu fatigué et j'ai oublié de parler de l'essentiel.
Dans ton cas tu peux parfaitement écrire :
Dim b() As Byte = BitConverter.GetBytes(118510934)

Tu obtiens donc un tableau de bytes tout prêt à écrire dans ton fichier.

Et pour l'inverse :

Dim b() As Byte = {86, 85, 16, 7}
Dim n As Integer = BitConverter.ToInt32(b, 0)


Ce qui te redonne le chiffre.
Bonne soirée.
0
Rejoignez-nous