Comment travailler et de vérifier intégrale de convolution et de résumer les problèmes

Maîtriser intégrales de convolution et sommes vient par la pratique. Voici des solutions analytiques détaillés à l'une intégrale de convolution et deux somme de convolution problèmes, chacune suivie d'vérifications numériques détaillées, en utilisant PyLab du shell interactif IPython (la version QT en particulier).

Sommaire

Convolution temps continu

Voici une convolution exemple intégrante employant des signaux de mesure semi-infinies. Envisager la convolution X(t) = u(t) (Une fonction échelon unitaire) et

image0.jpg

(une véritable décroissance exponentielle à partir de t = 0). La figure présente un graphique des formes d'onde.

Comment travailler et de vérifier intégrale de convolution et de résumer les problèmes

L'intervalle de support de sortie est

image2.jpg

Vous avez besoin de deux cas (étapes) pour former la solution analytique valable sur l'axe du temps ensemble.

  • Cas 1: En utilisant la figure b, vous pouvez voir clairement que pour t lt; 0, il en résulte que y(t) = 0.

  • Cas 2: Encore une fois en regardant la figure b, vous voyez que, pour t # 8805- 0, un certain chevauchement se produit toujours entre les deux signaux de l'intégrale. La sortie intégrale de convolution est

    image3.jpg

Mettre ensemble les deux pièces, la solution analytique pour y(t) est

image4.jpg

Pour vérifier cette solution analytique, suivez les mêmes étapes que dans l'exemple précédent:

  1. Écrire un simple fonction Python pour tracer la solution analytique:

    Dans [133]: Def expo_conv (T, A, alpha): ...: Y = zéros (len (t)) ...: pour k, tk dans enumerate (t): ...: si tk> = 0 :. ..: y [k] = A / alpha * (1 - exp (-alpha * tk)) ...: retour Y
  2. Pour la convolution numérique, l'utilisation ssd.conv_integral (). Vous écrivez d'abord le code Python dans la fenêtre de commande pour générer les signaux X(t) Et h(t) Et ensuite effectuer la convolution:




    Dans [135]: T = arange (-4,14, 0,01) Dans [136]: Xc2 = ssd.step (t) Dans [137]: Hc2 = ssd.step (t) * exp (-1 * t) Dans [138]: Yc2_num, tyc2 = ssd.conv_integral (xc2, t, hc2, t ('r', 'r')) Support de sortie: (-8,00, 5,99) Dans [143]: Intrigue secondaire (211) Dans [144]: Parcelle (t, expo_conv (t, 1,1)) Dans [149]: Intrigue secondaire (212) Dans [151]: Parcelle (tyc2, yc2_num) Dans [156]: Savefig ('c2_outputs.pdf')

    Notez que le cinquième argument de la conv_integral fonction est («r», «r»). Pour les signaux avec étendue infinie vers la droite, chaque 'r' raconte la fonction que les deux signaux sont à droite; verso et ne retourner que l'intervalle de support valide dans cette hypothèse.

    Les valeurs par défaut de («f», «f») des moyens support fini pour les deux signaux sur les axes de temps d'entrée t1 et t2 compte tenu de la fonction.

    Comment travailler et de vérifier intégrale de convolution et de résumer les problèmes

Une fois de plus, l'accord est excellent, donc la solution analytique est vérifiée.

Vérifiez convolution discrète temps

Pour le cas de convolution discrète-temps, voici deux exemples de convolution de somme. Le premier emploie mesure suites finies (signaux) et la seconde utilise des signaux de mesure semi-infinies. Vous rencontrez les deux types de séquences en résolution de problèmes, mais mesure les suites finies êtes le point de départ habituel lorsque vous êtes le premier à travailler avec la somme de convolution.

Deux séquences de longueur finie

Considérons la somme de convolution des deux séquences X[n] Et h[n], Représenté ici, de même que la somme de convolution installation.

Comment travailler et de vérifier intégrale de convolution et de résumer les problèmes

Lorsque convolution séquences de durée finie, vous pouvez faire la solution analytique, presque par l'inspection ou peut-être en utilisant une table (même une feuille de calcul) pour organiser les valeurs de séquence pour chaque valeur de n, qui produit un chevauchement non nul entre h[k] Et X[n - k].

L'intervalle de soutien pour la sortie suit la règle donnée pour le domaine en temps continu. Le résultat y[n] Partir de la somme des deux points de départ de la séquence d'entrée et se termine à la somme de la séquence d'entrée se terminant points. Pour le problème à la main ce qui correspond à y[n] À partir de [0 + -1] = -1 et se terminant à [3 + 1] = 4.

En regardant la figure b, vous pouvez voir que n augmente à partir de n lt; -1, Premier chevauchement se produit lorsque n = -1. Le dernier point de chevauchement se produit lorsque n - 3 = 1 ou n = 4. Vous pouvez mettre en place une table de feuille de calcul pour évaluer les produits de somme de six liés à l'intervalle de support de sortie.

Comment travailler et de vérifier intégrale de convolution et de résumer les problèmes

Pour vérifier ces (tableur) valeurs de calcul à la main, utiliser les fonctions Python en ssd.py à effectuer la somme de convolution. La fonction de convolution somme est y, ny = ssd.conv_sum (x1, nx1, x2, NX2, l'étendue = ('f', 'f')).

Dans [208]: N = arange (-4,6) Dans [209]: = 2 * xd1 ssd.drect (n, 4) [210]: Hd1 = 1,5 * ssd.dimpulse (n) - 0,5 * ssd.drect (n + 1,3) Dans [211]: Yd1_num, ND1 = ssd.conv_sum (xd1, n, HD1, n) le soutien de sortie: (-8, 10) Dans [212]: Tige (ND1, yd1_num)

Voir la séquence de sortie numérique des résultats tracée.

Comment travailler et de vérifier intégrale de convolution et de résumer les problèmes

Les résultats du calcul numérique correspondent bien au calcul de la main.

Un fini et une séquence semi-infini

Comme second exemple de travailler avec la convolution examiner une séquence d'impulsions de durée finie de 2M + 1 points convolution avec la séquence exponentielle semi-infini unn u[n] (Une véritable décroissance exponentielle à partir de n = 0). Une parcelle de la forme d'onde est donnée ici.

Comment travailler et de vérifier intégrale de convolution et de résumer les problèmes

Avec l'aide de la figure b, vous avez trois cas à considérer dans l'évaluation de la convolution pour toutes les valeurs de n. L'intervalle d'appui pour la convolution est

image10.jpg

Voici les étapes pour chaque cas:

  • Cas 1: De la figure b, vous voyez que, pour n + M lt; 0 ou n lt; -M pas de chevauchement se produit entre les deux séquences de la somme, de sorte y[n] = 0.

  • Cas 2: Le chevauchement partiel entre les deux séquences se produit lorsque n + M # 8805- 0 et n - M # 8804- 0 ou -M # 8804- n # 8804- M. Les limites de somme à partir de k = 0 et finissent à k = n + M. Utilisation de la formule géométrique série de somme finie, la somme de convolution évalue à

    image11.jpg
  • Case 3: Chevauchement complet se produit lorsque n - M > 0 ou n > M. Les limites de somme à ce titre occurrence du k = n - M à k = n + M. Encore une fois, en utilisant la formule géométrique série de somme finie, la somme de convolution évalue à

    image12.jpg

Rassembler les morceaux, la solution analytique complète pour ce problème est

image13.jpg

Pour comparer la solution analytique avec la solution numérique, vous suivez les étapes de comploter la fonction analytique contre une parcelle de la somme de convolution réelle:

  1. Écrire une fonction Python pour évaluer y[n] En fonction par morceaux:

    Dans [239]: Def expo_pulse_conv (n, A, M): ...: Y = zéros (len (n)) ...: pour k, nk en énumérer (n): ...: si nk> = -M et nk lt; = M: ...: y [k] = 2 * (1 - a ** (nk + M + 1)) / (1 - a) ...: elif nk> M: ...: y [k] = 2 * (un ** (NK-M) - un ** (nk + M + 1)) / (1 - a) ...: retour Y
  2. Trouver la somme de convolution réelle en utilisant la fonction conv_sum () puis tracer les résultats:

    Dans [255]: N = arange (-5,30) # n valeurs pour x [n] h [n] dans [256]: XD2 = 2 * ssd.drect (n + 4,9) # créer x [n] [257]: HD2 = ssd.dstep (n) * 0,6 ** n # créent h [n] [258]: Yd2_num, nd2 = ssd.conv_sum (XD2, n, HD2, n, ('f', 'r')) Support de sortie: (-10, +24) Dans [259]: Intrigue secondaire (211) Dans [260]: Tige (n, expo_pulse_conv (n, 0.6,4)) # analyticalIn [265]: Intrigue secondaire (212) Dans [266]: Tige (nd2, yd2_num) # numericalIn [271]: Savefig ('d2_outputs.pdf')

    Utilisez le cinquième argument de la conv_sum () fonctionner de déclarer l'étendue de la deuxième séquence d'entrée à droite; face («r»), par opposition à la valeur par défaut de fini ('F'). Ce paramètre garantit que la fonction ne retourne pas de résultats invalides.

    Comment travailler et de vérifier intégrale de convolution et de résumer les problèmes

Ici, vous voyez que la solution analytique morceaux se compare favorablement au calcul numérique de somme de convolution directe.


» » » » Comment travailler et de vérifier intégrale de convolution et de résumer les problèmes