Bonjour à tous,
Me revoilà avec encore une question
Elle sera un peu difficile à expliquer mais je vais essayer d'être le plus clair possible.
L'idée du patch
Je souhaite calculer un filtre à partir d'une différence entre deux réponses fréquentielles.
L'idée étant d'enregistrer un bruit rose avec un micro A, puis avec un micro B. Et d'ensuite calculer un filtre pour que, appliqué sur un enregistrement de voix effectué avec le micro B, il ressemble le plus possible à ce que serait un enregistrement de la même voix avec le micro A.
Ceci permettrait notamment d'améliorer les raccords en post-synchro (si on sait avec quel micro à été initialement enregistrée la réplique). Ou encore d'imiter le timbre d'un micro que l'on ne possède pas.
Ce ne serait évidemment pas parfait, puisqu'on ne modifie que le spectre fréquentiel, et pas la directivité ou la distortion harmonique. Mais c'est déjà ça.
Comment faire ?
Je me suis alors penché sur les transformées de fourrier. L'idée :
- Analyser et enregistrer dans une table les réponse fréquentielles de deux enregistrement de bruit rose (fait préalablement) avec deux micros différents.
- Faire la différence (division) de ces deux tables afin d'obtenir le niveau à appliquer par bande de fréquences au micro B pour qu'il s'approche de la réponse du micro A.
- Appliquer cette table de réponse différentielle à un filtre de fourrier ou j'envoie une voix enregistrée avec le micro B.
Le patch
J'ai choisit pour ça de travailler avec les objets [rfft~] et [rifft~], avec des block de 1024 pour travailler sur des bandes de fréquence d'environs 47Hz. Compromis entre précession et rapidité de traitement.
Je vous met en pièce-jointe les patch. Vous trouverez des indications dans les commentaires des patch.
Problème
Le résultat n'est pas convaincant. Et c'est là que j'ai besoin de votre aide.
Sur le papier, d'après-moi, ça devrait fonctionner. Mais ça ne fonctionne pas bien. Je me retrouve toujours avec un résultat comprenant beaucoup trop de basses et bas-médiums. Quoi que je fasse, je ne trouve pas le problème.
Si certains d'entre vous sont plus familiers que moi à ce genre de traitement, vous aurez peut-être une réponse à me donner. Parce que là, je seche...
Merci, encore, d'avance pour vos réponses !
Dernière modification par TomObey (2013-06-09 17:47:09)
Hors ligne
Pou référence :
http://fr.audiofanzine.com/plugin-rever … ution.html
Je ne suis pas certain que le bruit rose soit le plus facile à gérer pour faire ce travail ? Tu as essayé sur des sinusoïdes qui balayent les fréquences ?
Hors ligne
Oui, j'avais essayé aussi.
Mais je n'avais pas non plut été convaincu par le résultat.
Mais j'avoue avoir poussé ma recherche plutôt du côté bruit rose.
Je devrais peut-être revenir au balayage, en y consacrant plus de temps j'arriverai peut-être à des meilleurs résultats.
Merci pour le lien en tout cas, je vais lire ça.
Hors ligne
J'ai regardé tout ça, je connaissais déjà le principe, mais ton lien est plutôt bien expliqué. Merci
Partons donc plutôt sur un filtre [FIR~] plutôt que sur un filtre [rfft~]
Une question cependant :
- J'enregistre les IR de mes micros A et B (admettons avec une impulsion de Dirac, avec une enceinte et une salle supposées neutres).
- J'ai une voix enregistrée avec le micro A
- Avant de lui appliquer un filtre [FIR~] avec la réponse impulsionnelle du micro B, il faut que je revienne à une normale, à une certaine neutralité. Sinon je garderais des traces de la couleur du micro A.
C'est alors qu’intervient la notion de "différentiel", je ne veux pas appliquer un filtre qui modifie un enregistrement neutre vers la couleur B, mais plutôt passer d'une couleur A à une couleur B. Comment puis-je calculer la réponse impulsionnelle "différentielle" de ces deux réponses impulsionnelles enregistrées ?
Quelqu'un aurait une idée ?
Dernière modification par TomObey (2013-06-10 23:57:46)
Hors ligne
ça existe sous forme de plug très simple : tu choisis le micro que tu as utilisé pour la prise d'un coté et le micro que tu souhaite émuler de l'autre. pour l'avoir testé, ça donnait une idée assez juste des différents micro et je l'ai utilisé sur des mixs de musique avec satisfaction :
http://www.antarestech.com/products/amm.shtml
quand à reproduire tout ça dans Pd : pour la méthode, il existe un autre plug pour émuler n'importe quel circuit électronique audio :
http://www.waves.com/Content.aspx?id=319
Hors ligne
Merci pour les liens
Pour le premier, c'est tout à fait ça que je voudrais faire !
Mais avec mes propres mesures, de mes propres micros (pas forcement dans la liste).
Pour le second lien, c'est intéressant mais dans mon cas ça ne suffira pas. Puis-ce que ce plug-in me permettrait d'émuler le micro B, mais ne tiendra pas compte de mon micro A.
Comment puis-je faire un filtre inverse à partir d'une réponse impulsionnelle ?
En ayant la réponse impulsionnelle du micro A et B, j'aimerai pouvoir appliquer le filtre inverse du micro A, c'est-à-dire revenir à une certaine neutralité, avant d'appliquer le filtre de la réponse impulsionnelle B (ça, je pense avoir compris).
Quelqu'un aurait une idée ?
Merci encore à vous de me lancer toutes ces pistes, ça m'aide vraiment
Hors ligne
Ca s'appelle une convolution inverse ce que tu cherches.
Il faut connaître le signal d'origine et faire cette opération pour avoir l'empreinte du micro.
Par contre, à moins d'être dans une chambre anéchoïque, tu récupères toute l'acoustique de la salle. Je dis ça, je dis rien, mais ça demande pas mal de précision sur toute la chaîne que tu vas utiliser. Tout va teinter le signal dans le bazar. Mais si tu maintiens tout absolument pareil sauf pour les micros alors tu dois pouvoir arriver à quelque chose. Mais si tu as de la réverbération ou une coloration de la salle, ce sera quand même présent au final dans les empreintes. Et ça, je ne pense pas que ce soit ce que tu veux faire.
Hors ligne
Convolution inverse ?
J'aime le nom, ça ressemble à ce que je cherche
Si j'ai bien compris donc :
- La convolution consiste à appliquer les caractéristiques fréquentielles et temporelles d'une réponse impulsionnelle (H) à une source lamda (X), afin d'émuler un système et obtenir le résultat (Y)
- La déconvolution consiste à construire une réponse impulsionnelle (H) à partir d'une source bien connue (X) (balayage de sinusoïde, ou tout autre son riche en fréquences) et de cette même source modifié par le système que l'on souhaite émuler (Y)
- La convolution inverse consiste à appliquer l'inverse des caractéristiques fréquentielles et temporelles d'une réponse impulsionnelle (H) à une source qui a déjà été modifié par un système (Y), afin d'essayer de se rapprocher de la source avant qu'elle ne soit altéré par le système en question (X)
Si j'ai bon, la question serait :
Comment faire pour faire une convolution inverse ? Il faudrait que je puisse calculer une réponse impulsionnelle inverse ? Quelqu'un aurait une piste pour faire ça sur Pure-Data ?
Hors ligne
En se basant sur ce schéma expliquant la structure d'un FIR
Il faudrait que j'aille dans l'autre sens, en connaissant Y et H, retrouver donc X
Est-ce possible ?
Hors ligne
Salut, il me semble que dans la librairie timbreID tu devrais trouver ton bonheur...
Hors ligne
Chouette cette lib nononononononononono !
http://puredata.info/downloads/timbreid
http://williambrent.conflations.com/pag … l#timbreID
Hors ligne
TomObey a écrit:
En se basant sur ce schéma expliquant la structure d'un FIR
http://herve.boeglen.free.fr/Tsignal/ch … iagfir.gif
Il faudrait que j'aille dans l'autre sens, en connaissant Y et H, retrouver donc X
Est-ce possible ?
Salut,
en fait la convolution inverse s'appelle deconvolution dans la littérature. Il y a eu beaucoup de travaux là-dessus, le but étant souvent de retrouvé le signal initial après passage dans un milieu ou dispositif réalisant un filtrage de ce signal.
J'ai trouvé un lien où l'on en parle (http://www.dspguide.com/ch17/2.htm)
D'après ce que je comprends, comme à une convolution dans le domaine temporel correspond une multiplication dans le domaine fréquentiel, il est possible de retrouver la réponse h de ton filtre) par division de la fft du signal de sortie sur la fft de ton signal d'entrée.
Si tu utilises une impulsion comme signal d'entrée, le spectre correspondant est égal à 1 sur toutes les fréquences. Donc normalement, la fft de ton signal de sortie correspondra directement à la réponse fréquentielle de ton filtre, et la réponse temporelle h(t) devrait t'être donnée par transformée inverse (rfft~ sous pd).
Bon en pratique ça n'a pas l'air si simple. Notamment apparemment il faut paufiner l'entrée impulsionnelle et en présence de bruit ça devient vraiment difficile. A tester !
Thierry
"If these signals were combined by addition or multiplication instead of convolution, the solution would be easy: subtraction is used to "de-add" and division is used to "de-multiply". Convolution is different; there is not a simple inverse operation that can be called "deconvolution." Convolution is too messy to be undone by directly manipulating the time domain signals.
Fortunately, this problem is simpler in the frequency domain. Remember, convolution in one domain corresponds with multiplication in the other domain. Again referring to the signals in Fig. 17-5: if b × f = d, and given b and d, find f. This is an easy problem to solve: the frequency response of the filter, (f), is the frequency spectrum of the desired pulse, (d), divided by the frequency spectrum of the detected pulse, (b). Since the detected pulse is asymmetrical, it will have a nonzero phase. This means that a complex division must be used (that is, a magnitude & phase divided by another magnitude & phase). In case you have forgotten, Chapter 9 defines how to perform a complex division of one spectrum by another. The required filter kernel, (e), is then found from the frequency response by the custom filter method (IDFT, shift, truncate, & multiply by a window)."
"Figure 17-6 shows the general approach. The frequency spectrum of the original audio signal is illustrated in (a). Figure (b) shows the frequency response of the recording equipment, a relatively smooth curve except for several sharp resonance peaks. The spectrum of the recorded signal, shown in (c), is equal to the true spectrum, (a), multiplied by the uneven frequency response, (b). The goal of the deconvolution is to counteract the undesired convolution. In other words, the frequency response of the deconvolution filter, (d), must be the inverse of (b). That is, each peak in (b) is cancelled by a corresponding dip in (d). If this filter were perfectly designed, the resulting signal would have a spectrum, (e), identical to that of the original."
Hors ligne
Un thread dans Hurleurs : http://puredata.hurleur.com/sujet-4189- … onvolution
avec des liens vers des articles : http://pcfarina.eng.unipr.it/Public/Pap … nd2007.pdf
Hors ligne
Je commence à comprendre,
Merci beaucoup pour l'explication et les liens Thierry
Je vais prendre le temps de bien lire tout ça et je verrais ce que ça donne.
Hors ligne
Je partage avec vous le lien du patch fait par Katjav.
Merci à Thierry, puisque je suis tombé sur le patch en question dans le lien qu'il m'a donné ci dessus.
C'est un très bon patch pour générer des IR
http://www.katjaas.nl/expochirp/expochirp.html
Hors ligne