Durante a convolução em um sinal, por que precisamos inverter a resposta ao impulso durante o processo?
convolution
impulse-response
winuall
fonte
fonte
Respostas:
Adaptado de uma resposta para uma pergunta diferente (como mencionado em um comentário) na esperança de que essa pergunta não seja levantada repetidamente pelo Community Wiki como uma das principais perguntas ....
Dividimos o sinal de entrada em uma soma de sinais de pulso unitários em escala. A resposta do sistema ao sinal de pulso da unidade é a resposta de impulso ou resposta de pulso e, pela propriedade de escala, o valor de entrada único ou, se você preferir cria uma resposta ⋯ , 0 , 0 , 1 , 0 , 0 , ⋯ h [ 0 ] , h [ 1 ] , ⋯ , h [ n ] , ⋯ x [ 0 ] x [ 0 ] ( ⋯ , 0 , 0 , 1 , 0 , 0 , ⋯ ) = ⋯ 0 , 0 ,x ⋯, 0, 0, 1, 0, 0,⋯
Da mesma forma, o valor de entrada único ou cria cria uma resposta Observe o atraso na resposta para . Podemos continuar mais nesse sentido, mas é melhor mudar para uma forma mais tabular e mostrar as várias saídas alinhadas corretamente no tempo. Nós temosx[1]
então você pode obter a resposta somando a ésima coluna para obter a amada fórmula de convolução que confunde gerações de estudantes, porque a resposta ao impulso parece estar "invertida" ou retrocedendo no tempo. Mas, o que as pessoas parecem esquecer é que, em vez disso, poderíamos ter escrito para que seja a entrada que parece "invertida" ou retrocedendo no tempo! Em outras palavras, são seres humanosn
fonte
Aqui está um exemplo de C / C ++ que mostra que a convolução pode ser feita sem o uso inverso da resposta ao impulso. Se você inspecionar a
convolve_scatter()
função, nenhuma variável será negada em qualquer lugar. Isso é convolução de dispersão, onde cada amostra de entrada é dispersa (somada) para várias amostras de saída na memória, usando pesos dados pela resposta ao impulso. Isso é um desperdício, porque as amostras de saída precisarão ser lidas e gravadas várias vezes.Normalmente, a convolução é feita como convolução de coleta , como em
convolve_gather()
. Nesse método, cada amostra de saída é formada separadamente, reunindo (somando) amostras de entrada, com a resposta ao impulso reverso como pesos. A amostra de saída reside no registro de um processador usado como acumulador enquanto isso é feito. Normalmente, esse é o método de escolha, porque haverá apenas uma gravação de memória por cada amostra filtrada. Agora há mais leituras de memória da entrada, mas apenas quantas leituras de memória da saída no método de dispersão.Ele envolve as seqüências:
e usando as saídas dos dois métodos de convolução:
Não consigo imaginar alguém usando o método de dispersão, a menos que o filtro varie no tempo; nesse caso, os dois métodos produzirão resultados diferentes e um poderá ser mais apropriado.
fonte
É apenas 'invertido' para computação pontual.
O @Dilip explica o que a integral / soma de convolução representa, mas para explicar por que uma das duas funções de entrada (geralmente
h(t)
) é ativada para fins de computação, considere um sistema de tempo discreto comx[n]
resposta de entrada e impulsoh[n]
:Você pode usar sua função de entrada
x[n]
e, para cada amostra diferente de zero *,x[n]
calcular a resposta de impulso escalonada da amostran
e depois até que o deslocamento no tempo diminuah[n]
para zero (assumindo um causalh[n]
). Isso não envolveria 'inversão' (ou mais precisamente 'reversão de tempo') de umx[n]
ou de outroh[n]
. No entanto, no final, você teria que adicionar / sobrepor todos esses 'ecos' escalados + deslocados da resposta ao impulso para cada diferente de zerox[n]
.Ou , por conveniência, você pode reverter uma das funções sobre a origem da hora (geralmente 0), fazendo seu cálculo {multiplicar, adicionar, multiplicar, adicionar, ...} em vez de {multiplicar, multiplicar, ..., adicionar , adicionar, ...}. Isso resulta no mesmo sinal de saída, porque ele executará exatamente as mesmas operações de multiplicação e adição. Por exemplo, pense na contribuição da saída de um sinal de entrada diferente de zero no tempo 0
x[0]
. Quandok
= 0 para a equação a resposta ao impulso será revertida apenas no tempo, mas não deslocada, fornecendo a primeira resposta de amostra para a qual é . Então, incrementar um passo mudará para o passo certo uma vez, de modo que o tempo invertidoh[n]
x[n]
x[0]h[0]
k
h[n]
h[n]
A segunda entrada (h[1]
) estará agora em cimax[0]
, esperando para ser multiplicada. Isso produzirá a contribuição desejadax[0]h[1]
no momenton=1
, exatamente como teria sido feito no método anterior.* Eu digo diferente de zero
x[n]
porque a resposta ao impulso é redimensionada para zero, contribuindo assim para a saída final .h[n]
y[n]
fonte
No índice c [n], a convolução de a [n] e b [n] é tal que:
"c [n] é um somatório de todos os produtos (a [k] b [m]) tal que m + k = n", então m = n - k ou k = n - m, o que significa que uma das seqüências tem que ser invertido.
Agora, por que a convolução se comporta dessa maneira em primeiro lugar? Por causa de sua conexão com polinômios multiplicadores.
A multiplicação de dois polinômios resulta em um novo polinômio com coeficientes. Os coeficientes do polinômio do produto definem a operação de convolução. Agora, no processamento do sinal, as funções de transferência - transformadas de Laplace ou z-transformadas são esses polinômios, com cada coeficiente correspondendo a um atraso de tempo diferente. A combinação dos coeficientes do produto e dos multiplicandos resulta no fato de que "a multiplicação em uma representação corresponde à convolução na representação transformada".
fonte
Durante a convolução, nenhum "giro" da resposta ao impulso precisa ocorrer ...
No entanto, se você deseja impedir qualquer alteração de fase, pode distorcer um sinal com uma resposta de impulso e, em seguida, reverter a resposta de impulso e recolocar para cancelar os efeitos de fase.
No processamento off-line, você pode reverter o sinal facilmente após a primeira convolução para chegar à mesma conclusão (como sugerem os comentários).
fonte
Basta escrever a integral de convolução como um nomeadamente a integração do produto de e sobre todos os pares de argumento que soma de . ∬
Agora, a forma de ondulação das mãos mostra claramente a simetria envolvida aqui e que não há "inversão". Converter isso em uma integral unidimensional adequada, no entanto, exige que um dos dois argumentos seja a variável de integração real. É isso ou encontrar uma forma simétrica rígida que não envolva a movimentação das mãos. O último é mais complicado. Basicamente, é necessário recuperar a normalização, criando algo (ao usar a função / distribuição do Dirac delta) como Se você reorganizar de uma maneira, obterá e da propriedade de peneiração do operador Dirac
fonte