Como verificar um problema Integral Convolution Numericamente

Aqui está uma solução detalhada analítica para um problema integrante convolução, seguido de verificação numérica detalhada, usando Pylab do shell interativo IPython (a versão QT em particular). A intenção da solução numérica é demonstrar como as ferramentas de computador podem verificar soluções analíticas para os problemas de convolução.

Configurar Pylab

Para começar com o Pylab eo IPython shell interativo, você pode facilmente configurar as ferramentas no Mac OS, Windows e Ubuntu Linux.

Configurando no Ubuntu Linux é talvez o mais fácil porque você pode simplesmente usar o Ubuntu Software Center. No Mac e sistema operacional Windows, você pode usar um instalação monolítica, que instala a maioria de tudo que você precisa de uma só vez. Confira a versão livre de Enthought, mas outros estão disponíveis na web.

Verifique convolução de tempo contínuo

Aqui está um exemplo de convolução empregando sinais de extensão finita. soluções analíticas completas estão incluídas, mas o foco é a verificação numérica, em particular, utilizando Pylab eo módulo de código personalizado disponível gratuitamente ssd.py mencionado anteriormente.

Considere o integral de convolução de dois sinais de tempo contínuo x(t) e h(t) mostrando.

Para chegar à solução analítica, é preciso dividir o problema em cinco casos, ou intervalos de tempo t onde você pode avaliar a integral para formar uma solução contígua por partes. Quando você coloca esses cinco intervalos contíguos juntos, você tem uma solução completa para todos os valores de t:

image1.jpg

A partir do estudo de integrais de convolução, você descobre que você pode escrever o apoio ou o intervalo activo para o output y(t) Em termos dos intervalos de apoio para cada um dos sinais de entrada. Esse resultado indica que o intervalo de suporte de saída é executado a partir da soma dos valores de partida para x(t) e h(t) E termina nos valores fim. Assim, o intervalo de suporte para y(t) É no máximo

image2.jpgimage3.jpg

Neste exemplo, cada um dos casos é tratar como um passo na solução que se segue:

  • Caso 1: Você começa com t + 1 lt; 0, ou equivalentemente t lt; -1. O produto de formas de ondah(# 955-) e x(t - # 955-) não se sobrepõem no integrando integrante convolução, assim, para caso 1 a integral é apenas y(t) = 0 para t lt; -1.

  • Caso 2: Considere o intervalo seguinte à direita do Processo 1. A presente caso é formado pela condição conjunto da borda de sinal em t + 1 # 8805- 0 e t + 1 lt; 3, que é equivalente à escrita -1 # 8804- t lt; 2. O integrando da integral de convolução é de 2 x 3, com os limites de integração correndo de 0 a t + 1.

    você encontra y(t) Neste intervalo, avaliando a integral de convolução:

    image4.jpg
  • Caso 3: O próximo intervalo da série é t + 1 # 8805- 3 ​​e t - 4 lt; 0 ou 2 # 8804- t lt; 4. O integrando é novamente 2 x 3, mas agora os limites de integração executar de 0 a 3. A avaliação dos rendimentos integrais de convolução a seguir:

    image5.jpg
  • Caso 4: O intervalo final envolvendo sobreposição de sinais ocorre quando t - 4 # 8805- 0 e t - 4 lt; 3, o que implica que quatro # 8804- t # 8804- 7. Os limites de integração executado a partir de t - 4-3, de modo que o resultado de convolução é integrante

    image6.jpg
  • Caso 5: Você pode ver que, quando t - 4> 3 ou t > 7, não há sobreposição entre os sinais do integrando, de modo que a saída é y(t) = 0, t > 7.

Coletando as várias peças da solução, você tem o seguinte:

image7.jpg

Verificando esta solução com Python envolve duas etapas: (1) que traçam a solução analítica e (2) comparando-o com o enredo da solução numérica, usando funções encontradas no módulo de código ssd.py. Aqui estão os detalhes para concluir essas etapas:

  1. Crie uma função piecewise em Python que você pode, então, avaliar ao longo de um intervalo definido pelo usuário de valores de tempo.

    Você pode escrever esta função bem no shell IPython como mostrado aqui:

    Dentro [68]: Def pulse_conv (t): ...: y = zeros (len (t)) # inicializar matriz de saída ...: para k, tk em enumerate (t): # make valores y (t) ...: Se TK> = -1 e TK lt; 2: ...: y [k] = 6 * tk + 6 ...: elif tk> = 2 e tk lt; 4: ...: y [k] = 18 ...: elif tk> = 4 e tk lt; = 7: ...: y [k] = 42-6 * tk ...: retorno y

    Note-se que a linguagem Python é sensível aos travessões, então preste atenção aos travessões ao entrar este código em IPython. A boa notícia é que IPython entende as necessidades de Python e faz um bom trabalho de recuo bloco de código automaticamente.

  2. Numericamente avaliar a convolução pelo primeiro criar representações das formas de onda reais da convolução e, em seguida, realizar a convolução numérica.

    Para ter acesso às funções no módulo ssd.py, você precisa importar o módulo em sua sessão IPython, usando Em [69]: ssd importação.

    Em seguida, você pode acessar as funções do módulo usando o prefixo namespace ssd. A função y, ny = ssd.conv_integral (x1, TX1, x2, tx2, extensão = ( 'f', 'f')) executa a convolução real.

    Você carrega versões tempo amostrados dos sinais a serem convolved nos argumentos x1 e x2, com tx1 e tx2 sendo os eixos de tempo correspondentes. Todos os quatro destas variáveis ​​são NumPy ndarrays. A função retorna o resultado de convolução y Seguido por Nova Iorque, como uma tupla Python. As formas de impulsos rectangulares são criadas com a função ssd.rect (N, tau) e eixo do tempo mudando nos argumentos da função.

    Juntando tudo, o código para numericamente aproximar a saída integrante convolução é a seguinte (apenas instruções de código críticos apresentados):

    Dentro [89]: T = arange (-8,9, 01) Em [90]: XC1 = 2 * ssd.rect (t-1.5,5) Em [91]: HC1 = 3 * ssd.rect (t-1.5,3) Em [93]: Subplot (211) Em [94]: Plot (t, XC1) Em [99]: Subplot (212) Em [100]: Plot (t, HC1) Em [101]: Savefig ( 'c1_intputs.pdf') Em [115]: Yc1_num, tyc1 = ssd.conv_integral (XC1, t, HC1, t) Suporte de saída: (-16,00, 17,98) Em [116]: Subplot (211) Em [117]: Plot (t, pulse_conv (t)) Em [123]: Subplot (212) Em [125]: Lote (tyc1, yc1_num) Em [130]: Savefig ( 'c1_outputs.pdf')

    A figura a seguir mostra gráficos dos sinais x(t) e h(t).

Finalmente, a representação numérica de y(t) É representada graficamente ao longo com a solução analítica mostrado.

A partir de uma perspectiva de trama, as duas soluções de acordo, de modo que a solução analítica é confirmada.

menu