Demande info sur l'implementation des oscillateurs numeriques (perf catastrophique)
- 5 réponses
- 2 participants
- 575 vues
- 2 followers
Choc
6968

Membre d’honneur
Membre depuis 24 ans
20 Janvier 2005 à 12:19Demande info sur l'implementation des oscillateurs numeriques (perf catastrophique)
#1
Salut,
Bon j'explique mon probleme....Je bose sur analyseur resynthetiseur additif...
La partie analyse fonctionne bien et dans des temps correcte...
Par contre la resynthese c'est une horreur (en perf)...
Voila je possede une liste de partiels avec leur date de naissance et de mort, chaque partiel bouge en frequence est en amplitude....Les informations concernant la mise a jour des frequence et de l' amplitude sont donné a une frequence F1....largement superieure a la frequence d'echantillonnage Fe...
Pour generer un partiel, a present je fesais ca...
J'interpolle la liste des frequence echantillonnés à F1 vers la frequence Fe...(type reechantillonnage classique )....je fais la meme chose pour les amplitudes.....et puis je generer le partiel....x=A_interpolle*cos(2pi*f_interpolle*n/Fe+phase_init)
Et bien en terme de performances sonore ca va, mais les calculs sont horriblement long
-J'ai entendu parler de certaines techniques comme la mise a jour des informations frequnetielle et de l'amplitude de l'oscillateur tous les 100 echantillons (borne max)
-J'ai egalement entendu parler de reechantillonnage par spline
Je remercie d'avance toute personne qui pourra me filer un coup de main ou des idée (et les autres aussi
) ...
Bon j'explique mon probleme....Je bose sur analyseur resynthetiseur additif...
La partie analyse fonctionne bien et dans des temps correcte...
Par contre la resynthese c'est une horreur (en perf)...
Voila je possede une liste de partiels avec leur date de naissance et de mort, chaque partiel bouge en frequence est en amplitude....Les informations concernant la mise a jour des frequence et de l' amplitude sont donné a une frequence F1....largement superieure a la frequence d'echantillonnage Fe...
Pour generer un partiel, a present je fesais ca...
J'interpolle la liste des frequence echantillonnés à F1 vers la frequence Fe...(type reechantillonnage classique )....je fais la meme chose pour les amplitudes.....et puis je generer le partiel....x=A_interpolle*cos(2pi*f_interpolle*n/Fe+phase_init)
Et bien en terme de performances sonore ca va, mais les calculs sont horriblement long
-J'ai entendu parler de certaines techniques comme la mise a jour des informations frequnetielle et de l'amplitude de l'oscillateur tous les 100 echantillons (borne max)
-J'ai egalement entendu parler de reechantillonnage par spline
Je remercie d'avance toute personne qui pourra me filer un coup de main ou des idée (et les autres aussi
Site personnel: https://www.enib.fr/~choqueuse/
signaler
guitoo
759

Posteur·euse AFfolé·e
Membre depuis 23 ans
20 Janvier 2005 à 12:26
#2
Il faut faut utiliser un algo iteratif.
s[0]= a cos(phi_0)
s[1] = a cos(phi_0+delta_phi)
C = 2cos(delta_phi)
s[n+1] = C.s[n]-s[n-1]
delta_phi = 2 pi f / Fe
de cette maniere tu ne caclule que 2 cosinus par partiel
et tu fait une addition et une multiplication par echantillon et par partiel
s[0]= a cos(phi_0)
s[1] = a cos(phi_0+delta_phi)
C = 2cos(delta_phi)
s[n+1] = C.s[n]-s[n-1]
delta_phi = 2 pi f / Fe
de cette maniere tu ne caclule que 2 cosinus par partiel
et tu fait une addition et une multiplication par echantillon et par partiel
signaler
Choc
6968

Membre d’honneur
Membre depuis 24 ans
20 Janvier 2005 à 12:32
#3
Merci
Ca donne quoi lorsque f varie dans le temps
La formule est elle encore applicable (ou bien customisable) 
Ca donne quoi lorsque f varie dans le temps
Site personnel: https://www.enib.fr/~choqueuse/
signaler
guitoo
759

Posteur·euse AFfolé·e
Membre depuis 23 ans
20 Janvier 2005 à 12:40
#4
Si tu veut faire varier f dans le temps. ça ne pose pas de probleme. il suffit de recalculer delta_phi.
pour avoir les meilleures performances possible il faut toujours essayer de limter les cos et /.
tu calcule une fois pour toute 2 pi/F et a chaque fois que tu change la frequence de ton partiel tu rajoute une multiplication mais aussi un cosinus. Il ya peut etre un moyen de s'en passer.(si ta frequence est piloté par une autre oscillateur par exemple)
Si la variation de frequence est modifié par l'utilisateur ce n'es pas la peine a mon avis de mettre a jour delta phi pour chaque echantillon. Si elle evolue selon une fonction bien precise regarde si tu ne peux pas mathematiquement la simplfier ou l'aprocher avec de la synthese AM ou FM.
pour avoir les meilleures performances possible il faut toujours essayer de limter les cos et /.
tu calcule une fois pour toute 2 pi/F et a chaque fois que tu change la frequence de ton partiel tu rajoute une multiplication mais aussi un cosinus. Il ya peut etre un moyen de s'en passer.(si ta frequence est piloté par une autre oscillateur par exemple)
Si la variation de frequence est modifié par l'utilisateur ce n'es pas la peine a mon avis de mettre a jour delta phi pour chaque echantillon. Si elle evolue selon une fonction bien precise regarde si tu ne peux pas mathematiquement la simplfier ou l'aprocher avec de la synthese AM ou FM.
signaler
Choc
6968

Membre d’honneur
Membre depuis 24 ans
20 Janvier 2005 à 12:50
#5
Merci
Le truc c'est que la frequence de reception des amplitudes et des frequences est tres tres rapide (periode 100 echantillons)
Les frequences n'evolues pas de facon periodique, donc c'est un peu mort.
Je vais essayer d'implementer ce que tu m'as dit
Citation : tu calcule une fois pour toute 2 pi/F et a chaque fois que tu change la frequence de ton partiel
Le truc c'est que la frequence de reception des amplitudes et des frequences est tres tres rapide (periode 100 echantillons)
Citation : si ta frequence est piloté par une autre oscillateur par exemple
Les frequences n'evolues pas de facon periodique, donc c'est un peu mort.
Je vais essayer d'implementer ce que tu m'as dit
Site personnel: https://www.enib.fr/~choqueuse/
signaler
guitoo
759

Posteur·euse AFfolé·e
Membre depuis 23 ans
20 Janvier 2005 à 16:49
#6
Je crois que j'ai ecris une betise. si on fai varier la frequence en fonction du temps il faut recaluler le terme s[n-1].
signaler
- Liste des modérateurs
- Charte
- Options