Como trabalhar e Verificar Convolution Integral e Sum Problemas

Dominando integrais de convolução e montantes vem através da prática. Aqui estão soluções detalhadas analíticas para os problemas de um integral de convolução e dois soma de convolução, cada um seguido por verificações numéricas detalhadas, usando Pylab do shell interativo IPython (a versão QT em particular).

convolução de tempo contínuo

Aqui está uma convolução exemplo integrante empregando sinais de extensão semi-infinitos. Considere a convolução de x(t) = você(t) (A função degrau unitário) e

image0.jpg

(Uma verdadeira decaimento exponencial a partir de t = 0). A figura fornece uma trama das formas de onda.

O intervalo de suporte de saída é

image2.jpg

Você precisa de dois casos (passos) para formar a solução analítica válidos durante todo o eixo do tempo.

  • Caso 1: Usando a Figura b, você pode ver claramente que, para t lt; 0, segue-se que y(t) = 0.

  • Caso 2: Novamente olhando Figura b, você vê que para t # 8805- 0, alguma sobreposição sempre ocorre entre os dois sinais do integrando. A saída é integrante convolução

    image3.jpg

Colocar as duas peças juntas, a solução analítica para y(t) é

image4.jpg

Para verificar esta solução analítica, siga os mesmos passos utilizados no exemplo anterior:

  1. Escrever uma função Python simples para traçar a solução analítica:

    Dentro [133]: Def expo_conv (t, A, alfa): ...: y = zeros (len (t)) ...: para k, tk em enumerate (t): ...: se tk> = 0 :. ..: y [k] = A / alfa * (1 - exp (-alfa * tk)) ...: retorno y
  2. Para a convolução numérica, uso ssd.conv_integral (). Primeiro você escrever código Python na janela de comando para gerar os sinais x(t) e h(t) E, em seguida, realizar a convolução:

    Dentro [135]: T = arange (-4,14, 0,01) Em [136]: Xc2 = ssd.step (T) [137]: Hc2 = ssd.step (t) * exp (-1 * t) Em [138]: Yc2_num, tyc2 = ssd.conv_integral (XC2, t, hc2, t, ( 'r', 'r')) Suporte de saída: (-8,00, 5,99) Em [143]: Subplot (211) Em [144]: Plot (t, expo_conv (t, 1,1)) Em [149]: Subplot (212) Em [151]: Lote (tyc2, yc2_num) Em [156]: Savefig ( 'c2_outputs.pdf')

    Note que a quinta do argumento conv_integral função é ( 'R', 'r'). Para sinais com extensão infinita à direita, cada um 'R' conta a função que ambos os sinais estão certos; lados e para retornar apenas o intervalo de suporte válido sob essa hipótese.

    Os valores padrão de ( 'F', 'f') significa apoio finito para ambos os sinais ao longo dos eixos de tempo de entrada t1 e t2 dada para a função.

Mais uma vez, a concordância é excelente, de modo que a solução analítica é verificada.

Verifique convolução de tempo discreto

Para o caso de convolução de tempo discreto, aqui estão dois exemplos de soma de convolução. O primeiro emprega sequências de extensão finita (sinais) ea segunda emprega sinais de extensão semi-infinitos. Você encontra dois tipos de sequências na resolução de problemas, mas as sequências extensão finita são o ponto de partida de costume quando você está trabalhando em primeiro lugar com a soma de convolução.

Duas sequências de comprimento finito

Considere a soma de convolução de duas sequências x[n] e h[n], Mostrado aqui, junto com a configuração soma de convolução.

Quando convolving sequências de duração finita, você pode fazer a solução analítica quase por inspeção ou talvez usando uma tabela (mesmo uma folha de cálculo) para organizar os valores de seqüência para cada valor de N, que produz uma sobreposição diferente de zero entre h[k] e x[n - k].

O intervalo de suporte para a saída segue a regra dada para o domínio de tempo contínuo. A saída y[n] Começa na soma dos dois pontos de entrada a partir da sequência e termina na soma de sequência de entrada que termina pontos. Para o problema na mão o que corresponde a y[n] A partir de [0 + -1] = -1 e terminando em [3 + 1] = 4.

Observe a figura b, você pode ver que quanto n aumenta desde n lt; -1, Primeiro sobreposição ocorre quando n = -1. O último ponto de sobreposição ocorre quando n - 3 = 1 ou n = 4. Você pode configurar uma tabela de planilha para avaliar os produtos soma-de-seis relacionados com o intervalo de suporte de saída.

Para verificar estas (planilha) valores de cálculo mão, use as funções do Python em ssd.py para realizar a soma de convolução. A função de soma de convolução é y, ny = ssd.conv_sum (x1, nx1, x2, nx2, extensão = ( 'f', 'f')).

Dentro [208]: N = arange (-4,6) Em [209]: Xd1 = 2 * ssd.drect (n, 4) [210]: HD1 = 1,5 * ssd.dimpulse (N) - 0,5 * ssd.drect (n + 1,3) Em [211]: Yd1_num, ND1 = ssd.conv_sum (xd1, n, HD1, n) Suporte de saída: (-8, +10) Em [212]: Haste (ND1, yd1_num)

Veja a seqüência de saída resultados numéricos plotados.

Os resultados do cálculo numérico de facto correspondem ao cálculo da mão.

Um finito e uma seqüência semi-infinita

Como um segundo exemplo de trabalhar com a convolução considerar uma sequência de impulsos de duração finita de 2M + 1 pontos convolved com a sequência exponencial semi-infinita umanvocê[n] (Uma verdadeira decaimento exponencial a partir de n = 0). Um lote de formas de onda é dada aqui.

Com a ajuda da Figura b, tem três casos a considerar na avaliação da convolução para todos os valores de n. O intervalo de apoio para a convolução é

image10.jpg

Aqui estão os passos para cada caso:

  • Caso 1: A partir da Figura b, você vê que para n + M lt; 0 ou n lt; -M não há sobreposição entre as duas sequências de a soma, então y[n] = 0.

  • Caso 2: sobreposição parcial entre as duas sequências quando ocorre n + M # 8805- 0 e n - M # 8804- 0 ou -M # 8804- n # 8804- M. Os limites de soma começar em k = 0 e terminam às k = n + M. Usando a fórmula soma da série geométrica finita, a soma de convolução é avaliada como

    image11.jpg
  • Caso 3: sobreposição completa ocorre quando n - M > 0 ou n > M. Os limites de soma no âmbito deste caso executados a partir de k = n - M para k = n + M. Mais uma vez, utilizando a fórmula de soma série geométrica finita, a soma de convolução para avalia

    image12.jpg

Juntando as peças, a solução analítica completa para este problema é

image13.jpg

Para comparar a solução analítica com a solução numérica, que segue os passos de traçar a função analítica contra uma parcela da soma de convolução real:

  1. Escrever uma função Python para avaliar y[n] Como uma função definida por partes:

    Dentro [239]: Def expo_pulse_conv (n, a, M): ...: y = zeros (len (n)) ...: para k, nk em enumerate (n): ...: se nk> = -M e nk lt; = H: ...: Y [k] = 2 * (1 - a ** (NK + M + 1)) / (1 - a) ...: elif NK> H: ​​...: y [k] = 2 * (a ** (nk-M) - a ** (nk + M + 1)) / (1 - a) ...: retorno y
  2. Encontre a soma de convolução real usando a função conv_sum () e, em seguida, traçando os resultados:

    Dentro [255]: N = arange (-5,30) # N valores de x [n] h [n] em [256]: Xd2 = 2 * ssd.drect (n + 4,9) # cria x [n] em [257]: Hd2 = ssd.dstep (n) * 0,6 ** n # criar h [n] em [258]: Yd2_num, ND2 = ssd.conv_sum (xd2, n, HD2, n, ( 'f', 'r')) Suporte de saída: (-10, 24) Em [259]: Subplot (211) Em [260]: Da haste (N, expo_pulse_conv (N, 0.6,4)) # analyticalIn [265]: Subplot (212) Em [266]: Haste (ND2, yd2_num) # numericalIn [271]: Savefig ( 'd2_outputs.pdf')

    Use o quinto argumento para o conv_sum () funcionam para declarar o âmbito da segunda sequência de entrada para a direita; sided ( 'R'), ao contrário do valor padrão de finita ( 'F'). Essa configuração garante que a função não retorna resultados inválidos.

Aqui, você vê que a solução analítica por partes compara favoravelmente com o cálculo numérico soma de convolução direta.

menu