iraysyvalo
-
Messages : 9 647 Inscrit le 19/11/02
Ville : Lyon
Non connecté
|
|
Posté le 20 août 2005 - 22 h 36 m 58 s |
|
|
Reprise du message précédent :
Je suis sceptique sur un point :
i = (Fs * k * SINTABSIZE) / Fe;
T'es pas forcement sur que c'est un int ...
|
|
| |
Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.
|
tempo
Zen
Messages : 2 177 Inscrit le 14/09/02
Ville : Grenoble (SMH)
Non connecté
|
|
Posté le 21 août 2005 - 01 h 08 m 02 s |
|
|
Le 20 août 2005 - 22 h 36, iraysyvalo a écrit :
Je suis sceptique sur un point :
i = (Fs * k * SINTABSIZE) / Fe;
T'es pas forcement sur que c'est un int ... 
|
c'est un peu la base du C
si tu fais des calcul entre entiers (+-/*), le resultat est un entier amoins de 'caster' un des entiers en float ou double...
t'as qu'a faire un gcc -S et voir le code assembleur:
Dans l'initialisation de la table de valeur, tu trouves du code qui manipule des flottants (les mnemo commencent par f: fildl, fmulp, ...)
1.
2. initSinTab:
3. pushl %ebp
4. movl %esp, %ebp
5. pushl %ebx
6. subl , %esp
7. movl {TEXTE}, -20(%ebp)
8. jmp .L2
9. .L3:
10. fildl -20(%ebp)
11. fldl .LC0
12. fmulp %st, %st(1)
13. fldl .LC1
14. fdivrp %st, %st(1)
15. fstpl -16(%ebp)
16. movl -20(%ebp), %ebx
17. subl , %esp
18. pushl -12(%ebp)
19. pushl -16(%ebp)
20. call sin
21. addl , %esp
22. fstpl -32(%ebp)
23. movl -32(%ebp), %eax
24. movl -28(%ebp), %edx
25. movl %eax, sintab(,%ebx,8)
26. movl %edx, sintab+4(,%ebx,8)
27. leal -20(%ebp), %eax
28. incl (%eax)
29. .L2:
30. cmpl 23, -20(%ebp)
31. jle .L3
32. movl -4(%ebp), %ebx
33. leave
34. ret
35. .size initSinTab, .-initSinTab
36. .globl compute
37. .type compute, @function
et dans le calcul du buffer de sortie, y'a que du traitement bien propre d'entiers et de pointeurs (hum, a mon gout ca passe trop par la pile, un codage 'a la mano' est plus joli que ce jus de gcc...)
1.
2. compute:
3. pushl %ebp
4. movl %esp, %ebp
5. subl , %esp
6. movl {TEXTE}, -8(%ebp)
7. jmp .L7
8.
9. .L8:
10. movl -8(%ebp), %eax
11. movl %eax, -4(%ebp)
12. movl -4(%ebp), %eax
13. imull 16(%ebp), %eax
14. movl %eax, -4(%ebp)
15. leal -4(%ebp), %eax
16. sall , (%eax)
17. movl -4(%ebp), %edx
18. leal 20(%ebp), %eax
19. movl %eax, -20(%ebp)
20. movl %edx, %eax
21. movl -20(%ebp), %ecx
22. movl {TEXTE}, %edx
23. divl (%ecx)
24. movl %eax, -20(%ebp)
25. movl -20(%ebp), %eax
26. movl %eax, -4(%ebp)
27. leal -4(%ebp), %eax
28. andl 23, (%eax)
29. movl -8(%ebp), %eax
30. sall , %eax
31. movl %eax, %ecx
32. addl 12(%ebp), %ecx
33. movl -4(%ebp), %eax
34. movl sintab+4(,%eax,8), %edx
35. movl sintab(,%eax,8), %eax
36. movl %eax, (%ecx)
37. movl %edx, 4(%ecx)
38. leal -8(%ebp), %eax
39. incl (%eax)
40. .L7:
41. movl -8(%ebp), %eax
42. cmpl 8(%ebp), %eax
43. jb .L8
44. leave
45. ret
46. .size compute, .-compute
47. .section .rodata
48. .LC3:
49. .string "%u\t%f\n"
50. .text
(PS: dans ce compute, j'ai remplace la multiplication TABSIZE par un decalage a gauche)
|
|
| |
|
tempo
Zen
Messages : 2 177 Inscrit le 14/09/02
Ville : Grenoble (SMH)
Non connecté
|
|
Posté le 21 août 2005 - 11 h 25 m 41 s |
|
|
allez, je me defoule un peu...
donc toujours la meme fonction 'compute' mais cette fois ci compilée avec l'option -mcpu=pentium3 de gcc. on passe moins par la pile... (nos variables sont directement dans les registres 32 bits de la CPU). A noter que les seules instructions sur de flottants sont un fldl (lecture de la table de valeur) et fstpl (ecriture dans le buffer de sortie)
1. compute:
2. pushl %ebp
3. xorl %ecx, %ecx
4. movl %esp, %ebp
5. pushl %edi
6. movl 16(%ebp), %edi
7. pushl %esi
8. movl 8(%ebp), %esi
9. pushl %ebx
10. movl 20(%ebp), %ebx
11. cmpl %esi, %ecx
12. jae .L16
13. .p2align 4,,15
14. .L14:
15. movl %ecx, %eax
16. xorl %edx, %edx
17. imull %edi, %eax
18. sall , %eax
19. divl %ebx
20. andl 23, %eax
21. fldl sintab(,%eax,8)
22. movl 12(%ebp), %eax
23. fstpl (%eax,%ecx,8)
24. incl %ecx
25. cmpl %esi, %ecx
26. jb .L14
27. .L16:
28. popl %ebx
29. popl %esi
30. popl %edi
31. popl %ebp
32. ret
33. .size compute, .-compute
34. .section .rodata.str1.1,"aMS",@progbits,1
35. .LC4:
36. .string "%u\t%f\n"
37. .text
38. .p2align 4,,15
39.
EDIT: ces  balises de code:
- faudra ajouter l'assembleur (generique, pas besoin de coloration syntaxique car avec tous les types de CPU ca risque d'etre dur de gerer les nom de registre et mnemo...)
- il faut lire sall 'dollar' 10, %eax et andl 'dollar' 1023, %eax
|
|
| |
Message édité 3 fois, la dernière par tempo le 21 août 2005 - 11 h 38. |
| |
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 617 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 21 août 2005 - 18 h 41 m 18 s |
|
|
Ah oui, je me suis un peu emballé pour la division
Bon, allez, j'implémente tout ça dès que j'ai fini avec ma modulation de phase (le code est super simple, mais je vais faire appel à tes lumière pour voir si tu peux m'aider à rendre le processus plus facile) et mon BufferViewer (gnuplot a l'air bien mais c'est encore mieux quand les graphiques sont le fruit de nos entrailles  ).
Je vois que l'assembleur ne te fait pas peur... Ça tombe bien, je comptais me faire un peu d'optimisation en MMX/SSE !
Et tu sais pourquoi gcc prend la syntaxe AT&T ? edit : et c'est quoi, ces l à la fin des mnémos  ?
edit : au temps pour moi, ce sont les mnémos avec AT&T... voir http://bulkan.upm.edu.ph/~pfalcone/compsci/lang.html pour que je me réponde à ma question !
|
|
| |
Message édité 2 fois, la dernière par Petit_PimoOosE le 22 août 2005 - 05 h 10. |
| |
Huile de fraise.
|
iraysyvalo
-
Messages : 9 647 Inscrit le 19/11/02
Ville : Lyon
Non connecté
|
|
Posté le 22 août 2005 - 17 h 32 m 20 s |
|
|
Attends attends tempo ..
Je sais que le compilateur, il s'en fout, pour lui ce sera a un int .. pour lui, t'es sense savoir ce que tu fais.
Le probleme est qu'en toute generalite, le numerateur n'est pas forcement un multiple de la frequence Fe. Bref, bon, je m'egare !
|
|
| |
Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 617 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 22 août 2005 - 18 h 43 m 35 s |
|
|
Ah c'est sûr, mais de toute façon, il nous faut un int en sortie, et c'est un peu le principe de la table, de ne pas faire les valeurs intermédiaires. Après, il faut interpoler... Allez, je me bouge !
|
|
| |
Huile de fraise.
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 617 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 22 août 2005 - 19 h 31 m 58 s |
|
|
Bon, je suis en train de créer un projet SourceForge. Par contre, je ne sais pas encore quelle license utiliser, sachant que je ne suis pas sûr que la GPL soit celle que je veux...
Par ailleurs, je ne suis pas sûr qu'il reste intéressant de faire de l'interpolation quand on utilise une table, à partir du moment où on dispose de méthodes comme la synthèse récursive. Je suis bon pour faire des benchs...
|
|
| |
Huile de fraise.
|
tempo
Zen
Messages : 2 177 Inscrit le 14/09/02
Ville : Grenoble (SMH)
Non connecté
|
|
Posté le 22 août 2005 - 20 h 03 m 49 s |
|
|
pour la division, si le resultat n'est pas entier il est arrondi a l'entier inferieur.
evidement on genere une erreur sur l'index i.
de la, on peut evidement interpoler entre sintab[i] et sintab[i+1].
mais si le nombre d'elements n dans le tableau est suffisament important l'erreur est assimilable au plus a celle due a un dephasage de 2*PI/n: elle est bornée entre 0 (cas ou la division est precisement i) et sin (2*PI*i/n)-sin(2*PI*(i+1)/n) (cas ou la division tend vers i+1) ...
(la j'ai plus mes formules de developpements limités trigo...)
A comparer a la distorsion due a l'echantillonage... (alors, la DHT ?  )
Pour la licence: LGPL !!!  (si tu veux vraiment que ce soit libre de chez libre...)
|
|
| |
|
iraysyvalo
-
Messages : 9 647 Inscrit le 19/11/02
Ville : Lyon
Non connecté
|
|
Posté le 23 août 2005 - 11 h 33 m 05 s |
|
|
Ok, effectivement, entre les bruits, les distorsions et autres
Huh, c'est quoi la synthese recursive de signal ?
|
|
| |
Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.
|
tempo
Zen
Messages : 2 177 Inscrit le 14/09/02
Ville : Grenoble (SMH)
Non connecté
|
|
Posté le 23 août 2005 - 13 h 35 m 45 s |
|
|
Le 23 août 2005 - 11 h 33, iraysyvalo a écrit :
Ok, effectivement, entre les bruits, les distorsions et autres 
Huh, c'est quoi la synthese recursive de signal ?
|
il faut revenir au debut (voir premier post de Pimooose...  ):
calcul de l'echantillon k du buffer a partir des echantillons precedents.
j'avoue que je ne connaissais pas cette technique appliquée a la génération d'un signal.
Par contre les systèmes recursifs sont tres classiques dans le filtrage de signaux
(par exemple filtres RII - a reponse impulsionnelle infinie -...)
|
|
| |
|
iraysyvalo
-
Messages : 9 647 Inscrit le 19/11/02
Ville : Lyon
Non connecté
|
|
Posté le 23 août 2005 - 14 h 29 m 02 s |
|
|
|
|
|
| |
Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 617 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 23 août 2005 - 16 h 52 m 04 s |
|
|
Le 23 août 2005 - 14 h 29, iraysyvalo a écrit :
Huh, ah, il parlait de ca .. j'appelerais plutot ca utiliser la periodicite et une formule de transformationt somme-produit.
|
le site que j'avais trouvé en parlait comme ça, j'ai pas cherché à approfondir
En parlant de filtres passe/coupe, je pense mettre le sujet sur la table un de ces 4
|
|
| |
Huile de fraise.
|
iraysyvalo
-
Messages : 9 647 Inscrit le 19/11/02
Ville : Lyon
Non connecté
|
|
|
| |
Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.
|
Petit_PimoOosE
rsqrtps & pshufb
Messages : 4 617 Inscrit le 15/06/03
Ville : Montréal
Non connecté
|
|
Posté le 27 août 2005 - 17 h 22 m 16 s |
|
|
Bon, ne vous en faites pas, je ne suis pas très actif en ce moment mais c'est juste pour des raisons indépendantes de ma volonté. Je reviendrai !
|
|
| |
Huile de fraise.
|
|