Como verificar uma convolução problema integrante numericamente

Aqui está uma solução detalhada analítica para um problema integrante convolução, seguido de verificação numérico detalhado, 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 problemas de convolução.

Configure Pylab

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

Video: Sinais e Sistemas - aula03

Configurando no Ubuntu Linux é talvez o mais fácil porque você pode simplesmente usar o Ubuntu Software Center. No Mac e Windows OS, 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 completos estão incluídos, 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 a integral de convolução de dois sinais de tempo contínuo X(t) e h(t) mostrando.

[Ilustração por Mark Wickert, PhD]

Video: Grings - Exercício de Convolução - Aula 21

Para chegar à solução analítica, você precisa quebrar 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:

A partir do estudo de integrais de convolução, você descobrir 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 iniciais para X(t) e h(t) E termina com os valores final. Assim, o intervalo de suporte para y(t) É no máximo


Video: Convolução - Sinais e Sistemas

Neste exemplo, cada um dos casos é tratar como um passo para a 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 onda h(λ) e X(t - λ) não se sobrepõem no integrando integrante convolução, portanto, para caso 1 a integral é apenas y(t) = 0 para t lt; -1.

  • Caso 2: Considere o próximo intervalo à direita do Caso 1. Este caso é formado pela condição conjunta da borda do sinal em t + 1 0 e ≥ t + 1 lt; 3, que é equivalente à escrita -1 ≤ 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) Nesse intervalo, avaliando a integral de convolução:

  • Caso 3: O próximo intervalo da série é t + 1 3 e ≥ t - 4 lt; 0 ou 2 ≤ t lt; 4. O integrando é novamente 2 x 3, mas agora os limites de integração executado a partir de 0 a 3. Avaliar os rendimentos integrais de convolução a seguir:

  • Caso 4: O intervalo final envolvendo sobreposição de sinal ocorre quando t - 4 ≥ 0 e t - 4 lt; 3, o que implica que 4 ≤ t ≤ 7. Os limites de integração executado a partir de t - 4 a 3, de modo que o resultado integrante convolução é



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

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

Verificando esta solução com Python envolve dois passos: (1) que traçam a solução analítica e (2), comparando-o com o lote de solução numérica, utilizando 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 seccionalmente 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 enumerar (t): # tornar os valores de y (t) ...: se tk gt; = -1 e tk lt; 2: ...: Y [k] = 6 * tk + 6 ...: tk elif gt; = 2 e tk lt; 4: ...: Y [k] = 18 ...: tk elif gt; = 4 e tk lt; = 7: ...: Y [k] = 42-6 * tk ...: y retorno

    Note-se que a linguagem Python é sensível a 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 de bloco de código automaticamente.

  2. Numericamente avaliar a convolução primeiro criando 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, medida = ( ‘F’, ‘f’)) executa a convolução real.

    Você carrega versões de 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 é como se segue (apenas instruções de código críticos mostrados):

    Dentro [89]: T = arange (-8,9, 0,01) Em [90]: XC1 = 2 * ssd.rect (t-1.5,5) Em [91]: HC1 = 3 * ssd.rect (t-1.5,3) Em [93]: Subtrama (211) [94]: Lote (t, XC1) Em [99]: Subtrama (212) [100]: Lote (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]: Subtrama (211) [117]: Lote (t, pulse_conv (t)) Em [123]: Subtrama (212) [125]: Lote (tyc1, yc1_num) Em [130]: Savefig ( `c1_outputs.pdf`)

    A figura seguinte mostra gráficos dos sinais X(t) e h(t).

    [Ilustração por Mark Wickert, PhD]

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

[Ilustração por Mark Wickert, PhD]

De uma perspectiva enredo, as duas soluções concordam, de modo que a solução analítica é confirmado.


Publicações relacionadas