Antes de começar uma advertência: esta é uma postagem "técnica", somente para pessoas com alguma formação matemática. Dito isso, vamos começar!
Suponha que um sistema discreto tenha uma resposta ao impulso dada por um certo h(n). Então, é fácil mostrar que a resposta desse sistema a uma entrada x(n) qualquer é dada por:
y(n) = h(n) * x(n) = x(n)*h(n) = \sum_{k=-\infty}^{k=+\infty} x(k)h(n-k)
Um exemplo: h(n) = a^n u(n), onde u(n) é a função degrau unitário, x(n) = b^n u(n), sendo |a| < 1, |b| < 1 e a \neq b, então a saída y(n) é dada por:
y(n) = \sum_{k=0}^{k=n} x(k)h(n-k)
y(n) = \sum_{k=0}^{k=n} b^k a^{n-k}
y(n) = a^n \sum_{k=0}^{k=n} (b/a)^{k}
y(n) = a^n \frac{1-(b/a)^{n+1}}{1-(b/a)}
y(n) = \frac{a^{n+1}-b^{n+1}}{a-b}
A convolução pode ser facilmente calculada usando-se o comando convol do Scilab:
convol - convolution
Calling Sequence
[y]=convol(h,x) [y,e1]=convol(h,x,e0)
Arguments
- h - a vector, first input sequence ("short" one)
- x - a vector, second input sequence ( "long" one)
- e0 - a vector,old tail to overlap add (not used in first call)
- y - a vector, the convolution.
- e1 - new tail to overlap add (not used in last call)
Description
Calculates the convolution
y= h*x
of two
discrete sequences by using the fft.
--------------------=================-------------------
clc;
close;
k=0:30;
x1 = [ones(1,10), zeros(1,15)];
x2 = sin(%pi*k/6);
h1 = (0.8).^(k);
y1 = convol(h1,x1);
y2 = convol(h1,x2);
subplot(3,2,1); bar(x1,0.2); title('x1');
subplot(3,2,2); bar(x2,0.2); title('x2');
subplot(3,2,3); bar(y1,0.2); title('y1 = h1*x1');
subplot(3,2,4); bar(y2(1:31),0.2); title('y1 = h1*x2');
subplot(3,1,3); bar(h1,0.2); title('h1');
Saída gráfica:
Nenhum comentário:
Postar um comentário