Se connecter
Se connecter

ou
Créer un compte

ou

TIPE synthese sonore: analyse/resynthese additive par temps fréquence

  • 181 réponses
  • 10 participants
  • 20 507 vues
  • 12 followers
Sujet de la discussion TIPE synthese sonore: analyse/resynthese additive par temps fréquence
Bonjour à tous,
Voilà, je dois présenter un TIPE sur la synthèse sonore analogique en vue de passer des concours des grandes écoles.
Je voudrais savoir si certains pouvaient m'indiquer des livres (ou site si ça existe) qui approfondissent ce thème (au moins des auteurs).
Ma difficulté est de comprendre le principe de la synthese FM (pas du pt de vue mathematique mais du pt de vue réalisation). En fait j'aimerais savoir si on pouvait me donner de quoi elaborer une simulation de montage qui utiliserait le principe de la FM.
De même je cherche une idée ou quelques conseils pour realiser un montage qui simule une synthèse AM (multiplieur etc...) car je connais bien le principe mais je vois pas quel algorithme appliquer pr avoir des sons semblables à ceux d'instruments de musique par exemple.
Le but final est de faire une experience au labo de physique et de faire une analyse spectrale du signal emis (par exemple le son d'une guitare) et de le comparer au signal qu'on a voulu imiter.
Aussi, je voudrais savoir si qqun pouvait m'indiquer un site où l'on peut trouver l'analyse spectrale de différents instruments de musique (peu importe lesquels)
Merci à vous.
Afficher le sujet de la discussion
81
Re tout le monde, c'est pour dire que j'ai passé l'oral blanc de mon TIPE, et ca c'est super bien passé (un peu long mais le contenu a été apprécié). Le programme ça les a convaincu de mon serieux et ils n'ont pas réussi à me coller dessus :8).
- Enfin voilà c'etait pour remercier ceux qui me sont venus en aide en particulier choc :bravo:.
- Sinon je n'ai pas encore programmer de truc pr interpoler meme grossièrement une enveloppe temporelle pour un partiel (car je ne vois pas de méthode simple), donc tous les conseils sont bienvenus...Merci à vous...
82
Felicitation :mrg:

Pour l'interpolation c'est pas trivial t'inquietes
83
Salut Abel_b, en passant merci Choc pour toutes ces informations sur la synthese disseminées sur les forums :clin:,

Je dois dire que j'ai un peu halluciné en voyant ce sujet de discution sachant que je suis également en PSI et que je travaille sur le même TIPE !!

Perso, je me suis pas trop pris la tête sur les parametrages de fenêtre pour FFT, j'ai juste pris des echantillons suffisament long pour obtenir une décomposition correcte, T=50ms.

Pour l'interpolation, j'ai pu approximer les enveloppes avec des exponentielles croissantes et descroissantes ... Le resultat est assez satisfaisant pour les premières harmoniques, apres ... on en parle pas !!
Mon son original est un la de piano (effectivement, le la est a 440Hz) échantilloné a 44100Hz.

Comment as tu pu tenir si longtemps uniquement sur la décomposition ? J'avoue que cette performance m'impressionne.

Est ce que tu pourais me donner les harmoniques présentes dans ton son de guitare ?

Enfin, j'espère que tu n'es pas en région parisienne sinon on risque fort de passer nos tipes l'un apres l'autre !

Bon courage, Sim.
84

Citation : j'ai pu approximer les enveloppes avec des exponentielles croissantes et descroissantes



Oui c'est une bonne idée ca, pour les equations de cordes vibrantes par exemple, on arrive a des solutions mathematiques composés de plusieurs vibrations (harmonique) possedant chacunes une enveloppe en decroissance exponentielle.

En tout cas bravo, les gens perso, j'aurais jamais pu faire a bac+2 ce que vous etes en train de faire! le signal c'ets passionnant, surtout si on aime bien la musique et le design sonore !

Objectif dea atiam a l'ircam dans 3 ans ? :mrg:
85
à L'ircam ...

Il est aussi fascinant (étude sur l'influence des marteaux dans le son d'un piano, Emilie Simon, son beaucoup.1) qu'effrayant (concert pour mib ...)

Bon, je me lance ... Moi aussi je veux avoir des conseils de choc !!

J'essaye, sous matlab, de réaliser une synthèse soustractive, à partir d'un filtre passe bande centré en 440Hz et d'une source type bruit blanc ou creneau, pour obtenir les harmoniques d'une corde de piano mais ...

Problème !!

Le créneau n'offre qu'une harmonique sur deux, et le bruit blanc ne donne plus que le fondamentale ...

mais comment obtenir les harmoniques manquants ?

Merci beaucoup.

Sim
86

Citation : J'essaye, sous matlab, de réaliser une synthèse soustractive, à partir d'un filtre passe bande centré en 440Hz et d'une source type bruit blanc ou creneau, pour obtenir les harmoniques d'une corde de piano mais ...
Le créneau n'offre qu'une harmonique sur deux, et le bruit blanc ne donne plus que le fondamentale ...
mais comment obtenir les harmoniques manquants ?



je l'ai deja dis a d'autres peronnes par mail, les sons de piano par synthese soustractive, ca doit etre super mega tendu du slip si on suit votre approche.

Quel sont les caracteristique du filtre a utiliser ?

Y a un combo (c'est le mot à utiliser tu vas voir pourquoi :mrg: ) eventuellement a faire:

Prend la representation temps frequence d'un piano.

- Bon on peut dire que c'est approximativement harmonique (les partiels sont placés à des frequences multiples de la fondamentale), cool !
- Bon apres tu remarques qu'a l'excitation (tendu a visualiser sur un spectrogramme du à la pauvre resolution de cette representation temps fréquence), que le son est au debut inharmonique, comme si c'etait du bruit
- Enfin, tu remarquera qu'une fois l'attaque passée, le son semble harmonique, mais les amplitudes des harmoniques les plus elevées diminuent petit a petit. Comme si on appliquait un filtre passe bas avec une fréquence de coupure qui decroit dans le temps...

yeah, facile a simuler ces trois caracteristiques avec un filtre qui va bien.

1. Generateur bruit blanc (qui contient un spectre plat). Genere juste un bruit blanc assez bref pour l'excitation (optionnel: filtre le et applique lui une enveloppe d'amplitude)
2. on injecte ca dans un comb filter (un filtre en peigne) qui n'est rien d'autre qu'une ligne de retard. Le module de la fonction de transfert d'un comb filter, ca ressemble a un peigne...Ce filtre va te sculpter petit a petit ton bruit blanc pour te donner un son harmonique (le placement des harmoniques va dependre du retard ta ligne de retard).



3. Bon apres y a plus qu'a mettre un petit filtre passe bas....



Cet algorithme a un nom....c'est l'algorithme de karplus strong..



(le signal qui va dans Z^(-1/2)*1/2 et qui est ajouté au meme signal *1/2 correspond a une implementation simple d'un filtre passe bas ca revient a faire y(n)=0.5x(n)+0.5x(n-1) ca lisse donc. Comme ce filtre est dans la boucle, il va lisser de plus en plus comme si la frequence de coupure de ton filtre passe bas diminuée)

Bon on dirait de la bidouille comme ca, mais non en fait ca a une justification physique. C'ets J.O smith qui a fait le lien entre la physique et cet algorithme..Ca s'appelle de la synthese par guide d'onde, mais bon tu vois que y a un generateur + 2 filtres, donc c'est legitime de parler de synthese soustractive aussi :mrg:

lien sur le papier de smith: https://ccrma.stanford.edu/%7Ejos/pmudw/pmudw.pdf
des exemples sonores: https://ccrma.stanford.edu/%7Ejos/pasp/Sound_Examples.html

Note1: le bruit blanc ne genere pas une fondamentale. Toutes les frequences (harmoniques ou non) ont une valeur egale.
Note2: ouaih l'ircam ca peut impressionner par le papier. mais ne te leurre pas ca n'ets rien d'autre qu'une institution qui beneficie d'une cretaine reputation. Reputation justifiée ou pas ? si un jours tu y vas tu constateras par toi meme !
87

Citation : Pour l'interpolation, j'ai pu approximer les enveloppes avec des exponentielles croissantes et descroissantes ...



Mais comment tu fais pour interpoler cette enveloppe ?? car moi j'ai plusieurs valeurs d'amplitude et les partiels associés, le truc c'est que je ne vois pas comment programmer une procédure qui trouve la "meilleure" enveloppe d'approximation pour un partiel avec un tps de calcul assez rapide (sachant que moi je compte le faire avc une fonction affine par morceaux). Mon autre problème est que je travaille sur un son de 1sec qui a donc été tronqué, du coup je ne peux pas observer la décroissance à la fin mais j'ai l'attaque et le maintiens.

PS : je suis de Clermont Ferrand donc pas de soucis, on passera pas en meme temps.

EDIT : juste une question, ton prgramme il met combien de temps pr fenetrer, transformer(FFT), trouver les pics principaux ??? moi ca doit prendre 5/10 minutes en tout ce qui n'est pas négligeable pr un son de 1sec....Est ce que ca pourrait etre du a maple qui n'est pas dédié à ça ou il y a des methode pr optimiser ??

Re-EDIT : tu m'avais demandé les partiels de mon son, le début est un peu chaotique donc je n'en tiens pas vraiement compte, je trouve des maxis à 345 Hz puis des partiels assez présents (mais moins) à 516 Hz et 1722 Hz (sachant que ma precision est de 86 Hz) dans les premieres fenetres.
Ensuite qud le son est "stable", on a bcp de 430Hz avc encore un peu de 386 Hz ainsi que du 940 Hz (alterné avec 860Hz) puis d'autres partiels de faible amplitude. Vois par toi même (dsl pour l'encombrement). Ici on a une liste contenant des listes de fenetres elle meme contenant les points [freq,amplitude].

pics := [[[1, 4.0136720789999999697]], [[3, 31.252435885836521315]], [[3, 68.583688877081072645], [20, 18.921699377251064395]], [[3, 62.457033631593006984], [20, 23.910226134870700313]], [[2, 30.923489926111695742], [4, 42.454052778600499329], [6, 17.591850462846710727], [20, 19.944366903960423204]], [[4, 30.497603751426412174], [6, 9.6741371961288921005], [10, 8.3976737710059953235], [20, 16.734981406228382817]], [[4, 28.540342769473506318], [10, 10.938277539195674086], [20, 13.433206484916760796]], [[2, 24.734471670786654400], [4, 33.927896182891570451], [7, 8.0773817928168599516], [9, 8.0037907366566750205], [20, 10.242199575669443752]], [[2, 24.753039920861418845], [4, 35.409839743936338698], [6, 13.342826011525838522], [10, 8.9253868689327848902], [20, 11.248649651047135981]], [[3, 30.377458283231126934], [6, 11.595917352535917843], [20, 11.410058973932304532]], [[2, 29.533326304551958224], [4, 29.723283203785733317], [10, 10.584472927394691029], [20, 12.094075692789532706]], [[2, 25.397915515827614280], [4, 31.608340857330347528], [6, 14.870570215132477677], [9, 8.5004669382056203144], [20, 10.580105714930405772]], [[3, 29.863743430518421384], [6, 7.1592169063416962470], [9, 7.4023355893284073913], [20, 12.421670885770919192]], [[3, 26.456488951488187731], [6, 12.406097717030388901], [10, 9.4393911146348970533], [20, 10.397460869181098707]], [[2, 30.605470679179839457], [4, 28.099193507728730080], [9, 9.9231161974685550531], [20, 12.303556543048640180]], [[2, 24.273030115710820644], [4, 27.484021129409615139], [6, 12.153649141281883654], [10, 7.2197797960828529390], [20, 12.201549903342510597]], [[3, 25.425095071239540622], [6, 8.6682841251289359003], [10, 7.2996598727299824822], [20, 12.525459699938566389]], [[2, 25.941720737625770357], [4, 27.361291545071286989], [10, 7.0186122451277108888], [20, 13.597327153700259925]], [[2, 21.178086450347921580], [4, 27.878559554392307391], [10, 9.7836042026022257933], [20, 14.638468395613959168]], [[3, 24.074382921252466625], [6, 6.7792139830382809248], [9, 7.7045752908239054951], [20, 14.292216180368374765]], [[3, 23.032783804654976760], [6, 9.0473032969046726110], [10, 8.0203985137522171827], [20, 14.353864463708466531]], [[2, 28.930783020578840191], [4, 21.558535268459956885], [10, 9.8944444679386623283], [20, 14.358765439350827697]], [[2, 21.282604089056930112], [4, 21.041617276089998614], [6, 10.115385430012004529], [9, 6.8626299440434639233], [20, 12.760098453635573650]], [[3, 21.864629742582350583], [6, 6.0294056889161345220], [10, 8.4409772784788916216], [15, 5.8146146795152453737], [20, 12.474494424370828044]], [[2, 20.515890423247925695], [4, 23.740758133116896684], [10, 6.3860565644400199105], [20, 10.198117074433711092]], [[2, 17.062636778337694036], [4, 23.220081119965982522], [8, 6.1505411387117987024], [10, 8.3628963824429002172], [15, 5.8504543102063890715], [20, 7.0530546350173628875]], [[3, 19.540634576174230663], [6, 7.3747495564910165953], [9, 6.6525236725343871650], [15, 7.6105271124674125206], [18, 4.4388775410739309600], [20, 7.9491468631862284207]], [[3, 19.258813943588112069], [6, 6.6928909974439330147], [10, 7.6655762561610402923], [15, 5.7150551252628280718], [20, 7.0944714932396714350]], [[2, 25.381675220387168838], [4, 16.395962923780749531], [10, 8.4829838087115270260], [15, 6.5932108630057745372], [20, 8.1490777662640221527]], [[2, 16.508654783288242395], [4, 16.714174242755229344], [9, 6.8490968591672645134], [15, 7.4555803709752837069], [20, 8.7759038123820165629]], [[3, 17.602194725371341351], [6, 5.3586643720202313030], [10, 7.3805853002069136247], [15, 7.9758854480031452948], [18, 4.6258547899907801140], [20, 9.6954504608376461087]], [[2, 14.397755007420486697], [4, 20.378333857795002501], [10, 9.6704881579131901610], [15, 6.7073223000291349998], [20, 9.9398942222325844011]], [[2, 13.988614317961432127], [4, 18.897956153398301862], [8, 6.4769947615063694533], [10, 4.5560338288562502849], [15, 8.6937937763945960582], [17, 4.3595944203447524623], [20, 10.793557582720378771]], [[4, 16.013104025202235184], [6, 8.0170544147909605408], [10, 5.7768479377239271783], [15, 7.5930735981319345105], [18, 4.9264279885034451452], [20, 9.5920340894154474631]], [[4, 15.829922747791888415], [6, 5.0033183325432672325], [10, 7.1128265281339735480], [15, 6.1906078355905073092], [20, 8.6223487741925606418]], [[2, 19.126194273197697583], [4, 14.624504146325419866], [10, 8.6426972342873911835], [15, 6.0554841898430885997], [18, 5.0238996968020413505], [20, 9.7818340046620146033]], [[3, 14.267428580537277815], [9, 5.7296559481091466848], [15, 5.6249140966545795241], [20, 7.7264037667656322622]], [[3, 15.456806713902559069], [6, 6.6808934377781533582], [9, 5.7212351426159746540], [15, 5.6024087458941656115], [18, 4.6706643543021538269], [20, 7.7683422085822334951]], [[2, 10.254120788509843520], [4, 16.772804744047375297], [6, 8.4046522722347907387], [10, 9.2059363183181428655], [15, 6.4907608186288162405], [20, 5.3605407462305020408]], [[2, 12.689222577743312734], [4, 15.080680794711363349], [9, 7.0022820953761538911], [15, 3.9689434873317222117], [20, 3.6659643455364423170]], [[4, 13.853815680236396394], [6, 7.6628204537954674183], [10, 4.9424152796976149317], [15, 5.1555274750688183619], [20, 3.9385040119468388815]], [[4, 13.596816251705185379], [10, 5.6279284833166840788], [15, 4.5924119494979227784]], [[2, 13.999558108185916527], [4, 13.922461042994189500], [10, 6.2557085374618715561], [15, 3.5360373563462465583]], [[3, 11.977476934922669131], [10, 5.3258352233246434609], [15, 3.3093391720917559562]], [[3, 12.649700803714224377], [6, 6.3891768347307684038], [9, 4.7155882382370961432], [15, 3.3448870158446754412], [18, 2.9801990228388926855]], [[4, 13.334590017359641271], [10, 5.4536657075491239529]], [[2, 12.900252602858286206], [4, 11.481951272592112858], [10, 6.3570831462912652769], [17, 3.3547071426600206725]], [[4, 11.407742974632824694], [9, 5.3450816897771788187], [18, 2.7966846059772562634]], [[4, 12.078242839468998132], [10, 4.8533243957696509494], [18, 2.9271965478572853548]], [[2, 9.8506981428380458018], [4, 12.832963392967313256], [10, 4.1768135260849285355]], [[4, 10.536333246464676018], [8, 3.9815781866140633459], [10, 4.1322558977433223678]], [[4, 10.529470193644101522], [9, 3.6671562007169584895], [14, 2.7845537751562881934]], [[4, 11.035197629047473232], [10, 3.6837486916726057253]], [[2, 11.588627613491498069], [4, 8.9911849798215976428], [10, 4.4582650533920791811]], [[3, 9.5833594871530043811], [9, 4.3232368343996076276], [14, 2.2574208169479517270]], [[4, 10.591367804791851138], [9, 4.4989215590496122317], [12, 2.5489553792176545261]], [[2, 6.6824989633445538540], [4, 11.761936525494799265], [10, 4.6958736010039337440]], [[5, 10.863421339262397389], [8, 3.8255331767514370379]], [[3, 9.0344964588465685100], [9, 2.8151240871595119621], [14, 2.2940496138268557279]], [[4, 9.7683253585427372400], [9, 2.5120333297288110516]], [[2, 8.8127016822890930163], [5, 9.2672613697944627328], [10, 3.5049874174710604330]], [[3, 8.7206237005784380861], [5, 8.5438178517837365970], [9, 2.6660951350010650683], [14, 2.0310234766371981129]], [[4, 8.6445296051300457274], [9, 2.8910557700242532780], [14, 2.0092308228067783758]], [[2, 4.9075993671694392434], [4, 10.031541592331496863], [9, 3.7071167379356787469], [13, 2.5840529953025139851]], [[2, 6.0356886755873599432], [5, 10.283378484047147503], [9, 3.4662574321959307583], [13, 2.5288246462698039698]], [[3, 7.2137920844638199181], [5, 7.4514270460854988216], [9, 2.2674291714145661616], [15, 2.0273816727246319801]], [[2, 5.7102166894071217611], [4, 8.2486384169052157339], [9, 2.0529372679324606372]], [[5, 9.1375450232647773330]], [[3, 7.4289335677929935324], [5, 8.4184374999807307183]], [[5, 7.7554864974041722703], [15, 1.9319435585589038730]], [[2, 4.4765306118859436444], [4, 7.9470053799243451867], [9, 1.8632436989925826250], [13, 2.0874843979740541096]], [[5, 8.5280858440924543815], [9, 2.2782282521827975000], [13, 2.2783879733133304320]], [[3, 6.1984154013935076762], [5, 8.4168410463071160256], [9, 2.3825193008844809488]], [[2, 4.2701927295612610760], [4, 7.0806338818516927118], [9, 2.0032144890662519696], [12, 1.6019730612679761871]], [[5, 7.9812908475914664126], [13, 1.9828248917932062509]], [[3, 5.7416743464520810670], [5, 9.1256008125453735867], [8, 2.1221441530377250829]], [[3, 5.2339486174702154158], [5, 7.9708034826883721781]], [[2, 3.8262703739494678768], [4, 6.6840011937484768636], [13, 1.5386334734147596577], [20, 1.7982444320491251249]], [[5, 7.9940941621848346132]], [[3, 5.2521571618428666276], [5, 8.7988809379006994166], [20, 1.9747057914762065235]], [[5, 7.0367058476523824933], [9, 1.6218725268527087301], [20, 1.9149095268012350503]], [[5, 6.7861970733542792134], [9, 1.8517591415966768325], [11, 1.6382266422646009782], [20, 1.9935990671384190159]], [[5, 9.3903733488649459057], [20, 2.3976234272168251809]], [[3, 5.2522411761164010866], [5, 7.9262308856614884090], [20, 2.0646945070298098314]], [[2, 3.3353574349397147222], [5, 6.5058407363967797020], [20, 2.2936091118619424013]], [[5, 8.3850999185518544400], [20, 2.1415343045398590101]]]
88
Tu peux passer en log et ensuite faire une regression lineaire :mrg:

y=e^(ax)
log(y)=ax
tu trouve a par regression lineaire et zouu

pour les temps de calcul, t'as bien utilise rune fft et pas une Dft ?
5/10 minutes c'ets tres tres long ! tu fenetres sur combien de points ?
89
J'ai fait des fenetres sur 512 echantillons mais le probleme est que je stocke à chaque fois les infos ss forme de liste (ce qui a tendance à faire ramer surtout quand on fait des listes de liste de liste contenant des 10aines de milliers d'éléments). Sinon j'ai fait une FFT, (avc la TFD ca prenait 20/25 minutes).

Ca aurait ptetr + rapide en ne travaillant que sur les fenetres indiduellement puis en regroupant à la fin, car moi jme trimballe tt le tps des tres tres grande listes.
90
Sympa Choc cette petite méthode ... :P:

Je vais me pencher sur ce "filtre en peigne" pour voir comment ca marche et comme l'implémenter.

Je ne connais pas non plus les fonctions en Z, on verra si je peux les remplacer par un passe pas en S.
(Des S, des Z ... j'espère mettre fait compris !!)

Abel_b, j'ai utilisé exclusivement la fonction FFT sous matlab pour décomposer mon signal et ca a pris plus d'une heure pour un signal composé de 194 échantillons durant 50ms, composé de 2205 points chacun.

Mais bon, une fois que c'est fait, on en parle plus !!

Merci pour les harmoniques. En ce qui concerne la liste ... désolé, je ne comprends pas ce que ca représente, disons que la décomposition sous matlab est un peu plus "transparente" !

Pour les approximations, j'y suis allé à la main (affichage des enveloppes et approximation des "tau" (genre réponse d'un premier ordre à un dirac, S.I. style !)) !! Je ne cherche pas à faire un programme d'approchement systématique.

Ce sujet est vraiment passionnant, j'ai bien envie de creer sous matlab un la avec les harmoniques qui apparaissent et disparaissent. Ce logiciel donne ici une bonne maitrise de ce qu'on fait, autant en profiter !!

A plus,
Sim.