Produit de convolution circulaire - Programmation
Marsh Posté le 13-05-2001 à 12:57:30
Question comme ça:
quelle est la différence entre le produit de convolution et le produit de convolution circulaire ?
Marsh Posté le 13-05-2001 à 15:29:15
Le produit de convolution, quand tu déborde d'un coté, tu laisse tomber les termes. Pour une convolution circulaire, tu "replies" les termes qui débordent pour les multiplier avec les premiers termes... Bref c'est pareil, sauf qu'on peut se représenter la convolution "normale" comme un système de deux reqlettes qu'on ferait coulisser pour calculer les produits, et la convolution circulaire comme un sytème de deux anneaux qu'on ferait tourner l'un par rapport à l'autre.
Voila c'est un peu imagé, mais je pense que c'est parlant
Marsh Posté le 13-05-2001 à 15:34:31
Ben franchement quand on connait la formule c'est VRAIMENT pas dur à faire !
Sauf si les deux "signaux" n'ont pas la même taille. Mais dans ce cas là le proiduit circulaire n'a aucun sens.
Par contre un truc comme ca serait fait pour être codé en assembleur avec le MMX
Marsh Posté le 13-05-2001 à 15:40:03
et pkoi pas le SSE 2 ?
faut bien ke qq utilise ces povres P4
Marsh Posté le 13-05-2001 à 16:29:48
Mon probleme c'est que je le fait bien en circulaire mais le gain est foireux. ex: pour un simple circuit RC je prends la réponse impulsionnnele 1-exp(-t/(RC)) et j'obtiens une valeur max superieure à la tension d'entrée bref mon circuit RC est un sur-générateur .
mon algo (pas optimisé et simpliset) est coherant puisque je l'ai retrouver dans des bouquin mais je pense qu'il doit avoir des normalisations a effectuer (comme pour la correlation) pour obtenir un gain coherant.
Matafan: tu "replies" les termes qui débordent pour les multiplier avec les premiers termes.
j'ai pas tout compris mais je crois qu'il y a de l'idée.
Pour robUx4:
J'en ai fait une version AMD 3Dnow sur Athlon.
Je suis toujours preneur d'une URL ui expliquerais dans les détails le principe exact de la convolution circulaire. j'ai passer déja plusieur DOC sur le net mais ça reste très théorique, il n'y pas d'exemples vraiment concret.
Marsh Posté le 13-05-2001 à 20:24:38
Ben pour la normalisation, tu dois juste diviser la somme par le nombre de termes additionnés. Par contre pour ton 1-exp(-t/(RC)) convolué avec lui même (je suppose que c'est ca que tu fais) ca doit jamais faire plus que 1 (si t > 0). Vérifie déjà que dans tes echantillons t'as pas un terme plus gros que 1 (si tu travailles en flottants).
C'est sur qu'à la base c'est une formule... Moi j'en avais un de codé en assembleur sur DSP Avec un DSP tu peux même dire que c'est circulaire et il se démerde tout seul
Marsh Posté le 13-05-2001 à 21:42:54
Merci pour les renseignements.
robUx4:
Interressant les propriétés du DSP.
Pour la Division de la somme par le nombre de termes additionnés je l'avais implémenter et tu m'en donne la confirmation.
Avec la réponse impulsionnelle du filtre faut-il la traiter (ex:fenetrage Hamming,etc...).
Marsh Posté le 13-05-2001 à 21:59:57
Cherche sur le web, il y a les PDF des 2 tomes de Numerical Recipes in C. Il y a des chances que ca y figure.
A+,
Marsh Posté le 13-05-2001 à 22:23:58
En effet suite a tes indications je viens de le trouver sur le net, très intéressant.
Merci.
Marsh Posté le 13-05-2001 à 23:00:23
Quelq'un peut me dire si j'ai bien capte ?
Un produit de convolution c'est un truc qu'on utilise(si on ne peut la determiner directement) lorsqu'on veut calculer la transformee inverse d'une transformee de Fourier,Laplace?
C'est bien ca ???
Maintenant la circularite c'est koi?
Merci ca peut paraitre stupide mais je suis pas un DIEU en math
Merci
Marsh Posté le 13-05-2001 à 23:06:55
Disons que la multiplication de 2 fontions dans le domaine fréquencielle revient a effectué une covolution de ces 2 fonctions dans le domaine temporelle.
ex:
*=convolution
.=multiplication
L[x(t)*y(t)] = X(P).Y(P)
Marsh Posté le 13-05-2001 à 11:54:08
Quelqu'un aurait-il un algo de produit de convolution circulaire en C ou autre chose qu'importe. de préférence un algo qui à déjà été mis en oeuvre et qui fonctionne.
Merci d'avance.