Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
5
CONVOLUCIÓN EN TIEMPO CONTINUO (CONVOLUCIÓN INTEGRAL) Y DISCRETO
(CONVOLUCIÓN SUMA) EN MATLAB®
1. OBJETIVOS
2. JUSTIFICACIÓN
3. MARCO TEÓRICO
En el dominio del tiempo, la convolución puede considerarse como un método para encontrar
la respuesta de estado cero de un sistema LTI (Lineal Invariante en el tiempo, Linear Time –
Invariant). En otras palabras, la convolución representa la respuesta al impulso para sistemas
LTI, donde el término “respuesta al impulso” se refiere a la salida del sistema LTI debido a
una entrada de impulso aplicada en el tiempo 𝑡 = 0. La respuesta al impulso caracteriza por
completo el comportamiento de cualquier sistema LTI. Esto es una propiedad básica de
todos los sistemas LTI. En el caso en tiempo continuo, un impulso real de ancho cero y
amplitud infinita no puede generarse en realidad y suele aproximarse físicamente como un
pulso de gran amplitud y ancho estrecho; así la respuesta al impulso puede aproximarse
como el comportamiento del sistema en respuesta a una entrada de elevada amplitud y
extremada corta duración.
Esta operación de convolución, aunque difícil de calcular, incluso en casos simples, tiene un
valor teórico significativo. Nos permite no sólo determinar la respuesta del sistema para
casos muy generales, sino que también proporciona una manera de caracterizar sistemas
causales y estables, donde la causalidad se relaciona con la causa y efecto de la entrada y la
salida del sistema, dándonos las condiciones para el procesamiento en tiempo real, mientras
que la estabilidad representa una característica de mayor utilidad los sistemas. Estas dos
condiciones son de gran importancia práctica.
Página 1 de 13
3.1. Convolución Integral o En Tiempo Continuo
Dadas dos señales continuas 𝑥(𝑡) y ℎ(𝑡), la convolución de estas señales está dada por:
∞
𝑦(𝑡) = 𝑥(𝑡) ∗ ℎ(𝑡) = ∫ 𝑥(𝜏)ℎ(𝑡 − 𝜏)𝑑𝜏
−∞
Página 2 de 13
analítica. Integre el producto 𝑥(𝜏)ℎ(𝑡 − 𝜏) como una función de 𝜏, con los límites de
integración desde 𝜏 = 𝑏 hasta 𝜏 = 𝑡 , donde 𝑏 ≤ 𝑡 < 𝑐 . La integral se calcula
parcialmente.
f. Repita el patrón establecido en los pasos d y e, tantas veces como sea necesario,
hasta que 𝑥(𝑡) ∗ ℎ(𝑡) sea calculado para toda 𝑡.
Figura 2. Convolución como proceso de deslizar una señal reflejada más allá de otra: 𝑥(𝑡 − 𝜏)ℎ(𝜏). Las
variables 𝜆 y 𝜏 se usan indistintamente.
Considere un sistema lineal en tiempo discreto y una entrada arbitraria 𝑥[𝑛] a ese sistema.
Cualquier señal arbitraria 𝑥[𝑛] puede expresarse como una combinación lineal de muestras
desplazadas en la forma:
∞
𝑥[𝑛] = ∑ 𝑥[𝑘]𝛿[𝑛 − 𝑘]
𝑘=−∞
Página 3 de 13
Usando la propiedad de superposición de los sistemas lineales, se deduce que la salida 𝑦[𝑛]
puede expresarse como una combinación lineal de las respuestas del sistema cuando la
excitación está constituida por muestras unitarias desplazadas en el tiempo. Entonces, para
un sistema LTI:
∞
A menudo es muy útil graficar tanto 𝑥[𝑘] como ℎ[𝑛 − 𝑘] e identificar los intervalos apropiados
de corrimientos en el tiempo. Es conveniente también, definir una secuencia intermedia 𝑤𝑛 [𝑘]
como el producto de 𝑥[𝑘] y ℎ[𝑛 − 𝑘]. Este procedimiento se resume a continuación:
a. Graficar tanto 𝑥[𝑘] como ℎ[𝑛 − 𝑘] como una función de la variable independiente 𝑘.
Para determinar ℎ[𝑛 − 𝑘], refleje primero ℎ[𝑘] en torno a 𝑘 = 0 para obtener ℎ[−𝑘] y
luego recorra en el tiempo ℎ[−𝑘] en −𝑛.
b. Empiece con un corrimiento en el tiempo 𝑛 grande y negativo.
c. Escriba la forma funcional para 𝑤𝑛 [𝑘].
d. Aumente el corrimiento en el tiempo 𝑛 hasta que la forma funcional de 𝑤𝑛 [𝑘] cambie.
El valor de 𝑛 al cual ocurre el cambio define el fin del intervalo presente y el principio
del nuevo intervalo.
e. Permita que 𝑛 esté en un nuevo intervalo. Repita los pasos c y d hasta que identifique
todos los intervalos de corrimientos en el tiempo 𝑛 y las formas funcionales
correspondientes para 𝑤𝑛 [𝑘] . Esto suele implicar que 𝑛 crezca hasta un número
positivo muy grande.
f. Para cada intervalo de los corrimientos en el tiempo 𝑛, sume todos los valores de las
𝑤𝑛 [𝑘] correspondientes para obtener 𝑦[𝑛] sobre ese intervalo.
Página 4 de 13
Figura 4. Convolución como proceso de deslizar una señal reflejada más allá de otra: 𝑥[𝑘]ℎ[𝑛 − 𝑘]. 𝒂) La
respuesta al impulso ℎ[𝑛] del sistema. 𝒃) La señal de entrada 𝑥[𝑛]. 𝒄) La entrada descrita como una
función de 𝑘. 𝒅) La respuesta al impulso reflejada y recorrida en el tiempo ℎ[𝑛 − 𝑘] descrita como una
función de 𝑘. 𝒆) La señal producto 𝑤𝑛 [𝑘] para el intervalo de corrimientos en el tiempo 2 ≤ 𝑛 ≤ 6. 𝒇) La
señal producto 𝑤𝑛 [𝑘] para el intervalo de corrimientos en el tiempo 6 < 𝑛 ≤ 11. 𝒈) La señal producto
𝑤𝑛 [𝑘] para el intervalo de corrimientos en el tiempo 11 < 𝑛 ≤ 15. 𝒉) La salida 𝑦[𝑛].
4. TRABAJO PREVIO
a. Para las señales 𝑥[𝑛] y ℎ[𝑛] dadas, determine la convolución 𝑦[𝑛] = ℎ[𝑛] ∗ 𝑥[𝑛]:
1 𝑛
𝑥[𝑛] = 1, −5 ≤ 𝑛 ≤ 5, ℎ[𝑛] = (2) 𝑢[𝑛]
1 𝑛 1 𝑛
𝑥[𝑛] = 𝛿[𝑛] + 2𝛿[𝑛 − 1] + (2) 𝑢[𝑛], ℎ[𝑛] = (2) 𝑢[𝑛]
Página 5 de 13
b. Halle la convolución 𝑦[𝑛] = ℎ[𝑛] ∗ 𝑥[𝑛] para cada uno de los dos pares de secuencias
finitas dadas:
1 1 1 1
𝑥[𝑛] = {1, − 2 , 4 , − 8 , 16} , ℎ[𝑛] = {1, −1,1, −1}
𝑥[𝑛] = {1,2,3,0, −1}, ℎ[𝑛] = {2, −1,3,1, −2}
d. Use la integral de convolución para hallar la respuesta 𝑦(𝑡) del sistema LTI con respuesta
al impulso ℎ(𝑡) a la entrada 𝑥(𝑡):
𝑥(𝑡) = (2 + 𝑡)𝑒 −2𝑡 𝑢(𝑡), ℎ(𝑡) = 𝑒 −𝑡 𝑢(𝑡)
𝑡
𝑥(𝑡) = 𝑒 −3𝑡 𝑢(𝑡), ℎ(𝑡) = 𝑟𝑒𝑐𝑡 (2)
5. ACTIVIDAD
Sintaxis
conv(u,v,shape)
convnum(X,Y,DT,TY)
convplot(X,H,TX,TH,TS)
Descripción
La función conv permite calcular la convolución de las señales u y v; el parámetro shape es
opcional y su uso no es relevante para el análisis objeto de esta práctica.
Página 6 de 13
Es importante recordar que MATLAB® no realiza cálculos de forma continua, es otras
palabras, todos los cálculos realizados por MATLAB® se operan de forma discreta. Esto
implica que para realizar la convolución en tiempo continuo con la función conv será
necesario recurrir a modificaciones en cuanto al vector de tiempo que mostrará el resultado
de la convolución para que su representación sea la correcta.
Por otra parte, el comando convnum realiza la convolución numérica de las señales X y Y,
tanto en tiempo continuo como en tiempo discreto. El parámetro DT es el intervalo de
muestreo, por defecto tiene un valor de 1; TY es opcional y su uso no es objeto de estudio en
esta práctica.
Nota: Se puede obtener los mismos resultados de la función convnum usando la rutina conv
con la siguiente sintaxis: ts*conv(u,v), donde ts es el intervalo de muestreo. Las
funciones convnum y conv no dan el principio o duración de la convolución, por lo tanto,
para graficar sus resultados se debe conocer el intervalo en se extiende la convolución.
Ejemplo 1: Cálculo de la convolución en tiempo continuo
Calcule la convolución entre las señales: 𝑥(𝑡) = 3cos(0.5𝜋𝑡) y ℎ(𝑡) = 2tri(𝑡 − 1).
Comandos
%% Convolución en Tiempo Continuo
ts = 0.005; %Intervalo de muestreo
tx = -1:ts:1; %Variable de tiempo para la señal x(t)
th = 0:ts:2; %Variable de tiempo para la señal h(t)
x = 3*cos(0.5*pi*tx); %Generación de señal x(t)
h = 2*tri(th-1); %Generación de la señal h(t)
y1 = ts*conv(x,h); %Calcula la convolución
y2 = convnum(x,h,ts); %Calcula la convolución con ADSP Toolbox
ty = -1:ts:3; %Variable de tiempo para la convolución y(t)
subplot(2,2,1),plot(tx,x),grid on
xlabel('Tiempo (s)'),ylabel('Amplitud'),title('Señal Original x(t)')
subplot(2,2,2),plot(th,h),grid on
xlabel('Tiempo (s)'),ylabel('Amplitud'),title('Señal Original h(t)')
subplot(2,2,3),plot(ty,y1),grid on
xlabel('Tiempo (s)'),ylabel('Amplitud'),title('Señal de Convolución
y(t)=x(t)*h(t)')
subplot(2,2,4),plot(ty,y2),grid on
xlabel('Tiempo (s)'),ylabel('Amplitud'),title('Señal de Convolución con ADSP
Toolbox y(t)=x(t)*h(t)')
Página 7 de 13
Gráfica
Página 8 de 13
Gráfica
Para ello, se tomará como base el código de la función conv_322.m desarrollada en 1998 por CDR Thad
Welch y que está disponible en la página oficial de MATLAB® como una contribución de Marco Suarez. Si se
quiere ver su código original, visitar el enlace:
https://www.mathworks.com/matlabcentral/fileexchange/47088-conv-322-m?focused=3823053&tab=function
Comandos
Para el ejemplo que nos ocupa, vamos a crear una función llamada ConvCon que permitirá calcular la
convolución de dos señales continuas. Para ello, copie las siguientes sentencias en un fichero nuevo, desde el
editor de MATLAB®, y guárdelo con el nombre ConvCon.m:
function ConvCon(x,x_start,h,h_start,ts)
%""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
% PROPÓSITO:
% Calcular numéricamente y graficar la convolución integral de dos señales.
% y(t) = x(t)*h(t).
% La entrada, x(t), y la respuesta al impulso, h(t), serán graficadas, así
% como la señal de convolución, y(y).
%
Página 9 de 13
% USO:
% ConvCon(x,x_start,h,h_start,ts)
%
% ARGUMENTOS DE ENTRADA:
% x ---------> Versión de la señal de entrada.
% x_start ---> Tiempo de inicio de la señal de entrada en segundos
% h ---------> Versión de la señal respuesta al impulso.
% h_start ---> Tiempo de inicio de la señal de respuesta al impulso en
% segundos.
% ts --------> Intervalo de tiempo entre muestras (en segundos)
%
% ARGUMENTOS DE SALIDA: NO HAY
%
% COMENTARIOS:
% Las señales 'x' y 'h' deben ser funciones definidas numéricamente, con
% una única variable independiente, que debe ser 't'. El tiempo de muestreo
% 'ts' debe ser el mismo que el de las señales 'x' y 'h'
%
% VER TAMBIÉN:
% ConvDis
%""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
% (C) NOMBRE ALUMNO, 2017.
% Versión 1.0
%""""""""""""""""""""""""""""""""""""""""
expand = 0.1;
total_length = length(x)+length(h)-1;
t = x_start+h_start+ts*(0:total_length-1);
t_min = min([x_start h_start t]);
t_max = max([x_start+ts*length(x) h_start+ts*length(h) t]);
y = ts*conv(x,h);
y_min = min([x h y]);
y_max = max([x h y]);
tmin = t_min-expand*(t_max-t_min);
tmax = t_max+expand*(t_max-t_min);
ymin = y_min-expand*(y_max-y_min);
ymax = y_max+expand*(y_max-y_min);
x_time=x_start+ts*(0:length(x)-1);
h_time=h_start+ts*(0:length(h)-1);
subplot(3,1,1)
plot([tmin x_time(1)-ts x_time x_time(length(x_time))+ts tmax],[0 0 x 0 0],'r')
grid on, title('Señal de Entrada, x(t)')
ylabel('Amplitud'), xlabel('Tiempo (segundos)')
axis([tmin tmax min(x)-0.1 max(x)+0.1])
subplot(3,1,2)
plot([tmin h_time(1)-ts h_time h_time(length(h_time))+ts tmax],[0 0 h 0 0],'g')
grid on, title('Señal Respuesta al Impulso, h(t)')
xlabel('Tiempo (segundos)'), ylabel('Amplitud')
axis([tmin tmax min(h)-0.1 max(h)+0.1])
Página 10 de 13
subplot(3,1,3)
plot([tmin t(1)-ts t tmax],[0 0 y 0],'b')
grid on, title('Convolución y(t)= x(t)*h(t)')
xlabel('Tiempo (segundos)'),ylabel('Amplitud')
axis([tmin tmax ymin ymax])
end
Finalmente, vamos a crear una función llamada ConvDis que permitirá calcular la convolución entre señales
discretas. Para ello, copie las siguientes sentencias en un fichero nuevo, desde el editor de MATLAB®, y
guárdelo con el nombre ConvDis.m:
function ConvDis(x,x_start,h,h_start)
%""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
% PROPÓSITO:
% Calcular numéricamente y graficar la convolución suma de dos señales.
% y[n] = x[n]*h[n].
% La entrada, x[n], y la respuesta al impulso, h[n], serán graficadas, así
% como la señal de convolución, y[n].
%
% USO:
% ConvCon(x,x_start,h,h_start)
%
% ARGUMENTOS DE ENTRADA:
% x ---------> Versión de la señal de entrada.
% x_start ---> Tiempo de inicio de la señal de entrada en segundos
% h ---------> Versión de la señal respuesta al impulso.
% h_start ---> Tiempo de inicio de la señal de respuesta al impulso en
% segundos.
%
% ARGUMENTOS DE SALIDA: NO HAY
%
% COMENTARIOS:
% Las señales 'x' y 'h' deben ser funciones definidas numéricamente, con
% una única variable independiente, que debe ser 'n'.
%
% VER TAMBIÉN:
% ConvCon
%""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
% (C) NOMBRE ALUMNO, 2017.
% Versión 1.0
%""""""""""""""""""""""""""""""""""""""""
total_length = length(x)+length(h)-1;
n = x_start+h_start+(0:total_length-1);
nmin = min([x_start h_start n])-1;
nmax = max([x_start+length(x) h_start+length(h) n])+1;
y = conv(x,h);
ymin = min([x h y])-1;
ymax = max([x h y])+1;
x_time=x_start+(0:length(x)-1);
h_time=h_start+(0:length(h)-1);
Página 11 de 13
subplot(3,1,1)
stem([nmin x_time(1)-1 x_time x_time(length(x_time))+1 nmax],[0 0 x 0 0],'r')
grid on, title('Señal de Entrada, x[n]')
ylabel('Amplitud'), xlabel('Tiempo (segundos)')
axis([nmin nmax min(x)-0.1 max(x)+0.1])
subplot(3,1,2)
stem([nmin h_time(1)-1 h_time h_time(length(h_time))+1 nmax],[0 0 h 0 0],'g')
grid on, title('Señal Respuesta al Impulso, h[n]')
xlabel('Tiempo (segundos)'), ylabel('Amplitud')
axis([nmin nmax min(h)-0.1 max(h)+0.1])
subplot(3,1,3)
stem([nmin n(1)-1 n nmax],[0 0 y 0],'b')
grid on, title('Convolución y[n]= x[n]*h[n]')
xlabel('Tiempo (segundos)'),ylabel('Amplitud')
axis([nmin nmax ymin ymax])
end
Gráfica
Solucionando los ejemplos 1 y 2 con las funciones creadas, se obtienen los siguientes resultados:
>> ConvCon(x,-1,h,0,ts)
Página 12 de 13
>> ConvDis(x,0,h,0)
6. EVALUACIÓN
NOTA: Se deberá entregar un informe en formato pdf de los resultados en forma individual a
la siguiente semana de terminado la sesión de la práctica.
7. BIBLIOGRAFÍA
Página 13 de 13