Pendant la convolution sur un signal, pourquoi devons-nous inverser la réponse impulsionnelle pendant le processus?
convolution
impulse-response
winuall
la source
la source
Réponses:
Adapté d'une réponse à une question différente (comme mentionné dans un commentaire) dans l'espoir que cette question ne sera pas soulevée à plusieurs reprises par Community Wiki comme l'une des principales questions ....
Nous décomposons le signal d'entrée en une somme de signaux d'impulsions unitaires mis à l'échelle. La réponse du système au signal impulsionnel unitaire est la réponse impulsionnelle ou la réponse impulsionnelle et ainsi par la propriété de mise à l'échelle la valeur d'entrée unique , ou, si vous préférez crée une réponseX ⋯ , 0 , 0 , 1 , 0 , 0 , ⋯
De même, la valeur d'entrée unique ou crée crée une réponse Notez le retard dans la réponse à . Nous pouvons continuer plus loin dans cette veine, mais il est préférable de passer à une forme plus tabulaire et d'afficher les différentes sorties correctement alignées dans le temps. On a x [ 1 ] ( ⋯ , 0 , 0 , 0 , 1 , 0 , ⋯ ) = ⋯ 0 , 0 , 0 , x [ 1 ] , 0 , ⋯ 0 , x [ 1 ] h [ 0 ] , x [ 1 ] h [ 1 ] , ⋯ ,x [ 1 ]
alors vous pouvez obtenir la réponse en additionnant la -ième colonne pour obtenir la formule de convolution bien-aimée qui embrouille des générations d'étudiants parce que la réponse impulsionnelle semble être "retournée" ou reculée dans le temps. Mais, ce que les gens semblent oublier, c'est qu'au lieu de cela, nous aurions pu écrire pour que ce soit l' entrée qui semble "retournée" ou qui recule dans le temps! En d'autres termes, ce sont les êtres humainsn
la source
Voici un exemple C / C ++ qui montre que la convolution peut être effectuée sans utiliser la réponse impulsionnelle à l'envers. Si vous inspectez la
convolve_scatter()
fonction, aucune variable n'est nulle part. Il s'agit d'une convolution de diffusion où chaque échantillon d'entrée est diffusé (additionné) à plusieurs échantillons de sortie en mémoire, en utilisant des poids donnés par la réponse impulsionnelle. C'est un gaspillage car les échantillons de sortie devront être lus et écrits plusieurs fois.Normalement, la convolution se fait en rassemblant la convolution, comme dans
convolve_gather()
. Dans cette méthode, chaque échantillon de sortie est formé séparément, en rassemblant (sommant) des échantillons d'entrée, avec la réponse impulsionnelle inversée comme poids. L'échantillon de sortie réside dans le registre d'un processeur utilisé comme accumulateur pendant que cela est fait. C'est normalement la méthode de choix, car il n'y aura qu'une seule écriture en mémoire pour chaque échantillon filtré. Il y a maintenant plus de lectures en mémoire de l'entrée, mais seulement autant qu'il y a eu de lectures en mémoire de la sortie dans la méthode de diffusion.Il convole les séquences:
et en utilisant les deux méthodes de convolution sorties:
Je ne peux pas imaginer que quiconque utilise la méthode de diffusion, sauf si le filtre varie dans le temps, auquel cas les deux méthodes produiront des résultats différents et l'une peut être plus appropriée.
la source
Il n'est "retourné" que pour le calcul ponctuel.
@Dilip explique ce que représente l'intégrale / la sommation de convolution, mais pour expliquer pourquoi l'une des deux fonctions d'entrée est (souvent
h(t)
) inversée à des fins de calcul, considérons un système à temps discret avec entréex[n]
et réponse impulsionnelleh[n]
:Vous pouvez prendre votre fonction d'entrée
x[n]
et, pour chaque échantillon non nul *,x[n]
calculer la réponse impulsionnelle mise à l'échelle à partir de l'échantillonn
et ainsi de suite jusqu'à ce que le décalage temporel s'éteigneh[n]
à zéro (en supposant une causalitéh[n]
). Cela n'impliquerait aucun «retournement» (ou plus exactement «inversion du temps») de l'unx[n]
ou de l'autreh[n]
. Cependant, à la fin, vous devrez ajouter / superposer tous ces «échos» échelonnés + décalés de la réponse impulsionnelle pour chaque non-zérox[n]
.x[0]
k
h[n]
x[n]
, ce qui estx[0]h[0]
. Ensuite, l'incrémentationk
de un se déplacerah[n]
vers la droite d'un pas de temps, de telle sorte que lah[n]
seconde entrée (h[1]
) inversée dans le temps sera maintenant placée au-dessus dex[0]
, attendant d'être multipliée. Cela donnera la contribution souhaitéex[0]h[1]
au momentn=1
, tout comme cela aurait été fait dans la méthode précédente.x[n]
h[n]
y[n]
la source
A l'indice c [n], la convolution de a [n] et b [n], est telle que:
"c [n] est une somme de tous les produits (a [k] b [m]) tels que m + k = n", donc m = n - k ou k = n - m, ce qui signifie que l'une des séquences doit être retourné.
Maintenant, pourquoi la convolution se comporte-t-elle ainsi en premier lieu? En raison de sa connexion avec la multiplication des polynômes.
La multiplication de deux polynômes donne un nouveau polynôme avec des coefficients. Les coefficients du polynôme produit définissent le fonctionnement de la convolution. Maintenant, dans le traitement du signal, les fonctions de transfert - les transformées de Laplace ou les transformées z sont ces polynômes, chaque coefficient correspondant à un retard différent. La mise en correspondance des coefficients du produit et des multiplicandes entraîne le fait que «la multiplication dans une représentation correspond à la convolution dans la représentation transformée».
la source
Pendant la convolution, aucun "retournement" de la réponse impulsionnelle ne doit se produire du tout ...
Cependant, si vous souhaitez éviter toute altération de phase, vous pouvez convoluer un signal avec une réponse impulsionnelle, puis inverser la réponse impulsionnelle et retravailler pour annuler les effets de phase.
Dans le traitement hors ligne, vous pouvez tout aussi facilement inverser le signal après la première convolution pour arriver à la même conclusion (comme le suggèrent les commentaires).
la source
la source