Professional Documents
Culture Documents
1. Introducción
Como ya estudiamos en diversos ejemplos de la práctica anterior, MATLAB es
muy utilizado en la definición, manipulación y representación de señales
analógicas. Siendo rigurosos, el procedimiento seguido en esos ejemplos no es
adecuado para el análisis de señales analógicas; es más, en general, MATLAB
no permite analizar señales analógicasi. Esto se debe a que la forma natural de
representar una señal en MATLAB es definir una secuencia finita de valores
mediante un vector fila. Así, como veremos en el siguiente ejercicio, podemos
definir la secuencia de instantes de tiempo equidistantes (intervalo 1 ms) entre 0
y 0.25s. Y del mismo modo, definimos una señal sinusoide como una secuencia
de valores.
Ejercicio 1
Genere una secuencia de instantes de tiempo que parta de t=0s y llegue hasta
t=0.25s en intervalos de 1ms. Construya una función seno en esa base de
tiempo de amplitud 1 y frecuencia 5Hz. Use plot para dibujar la forma de onda.
Además, destaque cada punto de la gráfica con *.
Por tanto, siendo estrictos, en MATLAB toda señal es discreta en tiempo, mien-
tras que en amplitud puede ser discreta (cuantizada) o continua (aunque limi-
tada por la precisión de los tipos numéricos). No obstante, si los intervalos
temporales entre valores son suficientemente pequeños y el rango temporal en
el que se define la señal es suficientemente amplio, la secuencia de valores
empleada para representar la señal y las operaciones realizadas para su análisis
proporcionan una buena aproximación a los resultados teóricos. En el caso más
simple y frecuente, los valores se toman en instantes equiespaciados, intervalo
que no debe confundirse con el periodo de muestreo. De momento, ignoraremos
el efecto de la discretización de señales (utilizaremos intervalos de tiempo sufi-
cientemente pequeños, de modo que los efectos sean despreciables). Asimismo,
la amplitud de las señales está sometida a una discretización que, dada la pre-
cisión de los tipos numéricos empleados en MATLAB, podemos ignorar.
SEÑAL PULSO
% Ejemplo de señal pulso
>> t=-10:0.01:10;
>> f_pulso=[zeros(1,950),ones(1,101),zeros(1,950)];
>> plot(t,f_pulso);
SEÑAL SAMPLING
% Ejemplo de señal sampling
>> t=-10:0.01:10;
% Señal sampling nula en t=n*pi, n=1,2,...
>> f_sampling=sin(t)./t;
>> plot(t,f_sampling);
% Señal sinc nula en t=n, n=1,2,...
>> f_sinc=sinc(t);
>> plot(t,f_sinc);
SEÑAL TRIANGULAR
% Ejemplo de señal triangular de periodo 0.1Hz
% Es un caso particular de señal diente de sierra con width=0.5
>> t=-10:0.01:10;
>> f_triangular=sawtooth(2*pi*0.1*t,0.5);
>> plot(t,f_triangular);
SEÑAL EXPONENCIAL
% Ejemplo de señal exponencial decreciente
>> t=-10:0.01:10;
% tau: constante de tiempo (RC)
>> tau=200e-2;
>> f_expon=exp(-t/tau);
>> plot(t,f_expon);
SEÑAL CUADRADA
% Ejemplo de señal cuadrada de frecuencia 0.5Hz
% square(x,duty) genera una onda cuadrada de periodo 2*pi con un duty cycle dado
>> t=-10:0.01:10;
>> duty=50; % porcentaje del periodo en el que la señal es positiva
>> f_cuadrada=square(2*pi*0.5*t,duty);
>> plot(t,f_cuadrada);
2. Análisis de Fourier
Las series de Fourier permiten describir señales periódicas como una combi-
nación de señales armónicas (sinusoides). Con esta herramienta, podemos anal-
izar una señal periódica en términos de su contenido frecuencial o espectro.
Además, nos permite establecer la dualidad entre tiempo y frecuencia, de forma
que operaciones realizadas en el dominio del tiempo tienen su dual en el
dominio frecuencial. Utilizando operaciones sobre vectores, se pueden calcular
fácilmente los coeficientes de Fourier correspondientes a una señal. En el ejerci-
cio 2, se definen el vector n, que contiene los índices de los coeficientes, y el
vector cn, que contiene los coeficientes. Los coeficientes cn, son los coefi-
cientes espectrales de la señal. La gráfica de esos coeficientes en función del
índice armónico n o de las frecuencias nωo se denomina espectro. Hay dos tipos
de gráficos, uno con la magnitud de los coeficientes y otro de la fase. Ambas
funciones son discretas en frecuencia.
Ejercicio 2
Ejercicio 3
st(1)=st(1)+1;
plot(t,st,'r');
hold on;
% Señal cuadrada original
f_cuadrada=square(2*pi*f*t,50);
plot(t,f_cuadrada);
xlabel(‘tiempo’);
ylabel(‘Amplitud’);
MATLAB está equipado con funciones especiales que nos van a permitir real-
izar un análisis de Fourier de funciones definidas por un conjunto de valores
discretos. Por ejemplo, el comando fft() nos permite obtener la transformada
rápida de Fourier (fast Fourier Transform) de una secuencia de números
definida por el vector x. Por ejemplo:
>> X=fft(x);
donde X es un vector de números complejos ordenados desde k=0...N-1. Si
queremos que sea más eficiente en el cálculo de la ffT, la longitud del vector x
deberá ser una potencia de 2. Podemos rellenar de ceros el vector x para que
tenga la longitud apropiada. Esto se consigue automáticamente haciendo:
>> X=fft(x,N);
donde N es exponente de 2. Mientras más largo sea x, más fina será la escala
para la ffT. Debido a un fenómeno de plegamiento del espectro, sólo la primera
mitad de los puntos obtenidos son de utilidad. La función fftshift() reordena el
vector X en orden creciente de frecuencia. Si X es el vector resultante de hacer
una ffT, utilizando esta función reordenamos los puntos en función de la fre-
cuencia.
>> X=fftshift(X);
Ejercicio 4
% Definicion de la señal
t=-0.25:0.001:0.25;
x=exp(-2*t).*sin(2*pi*200*t);
% Representacion en el tiempo
subplot(3,1,1);
plot(t,x);
title('x(t)=exp(-2t)·sin(2·pi·200·t)');
xlabel('Tiempo (t)');ylabel('x(t)');
% Transformada de Fourier
X=fftshift(fft(x));
% Magnitud y fase de la transformada
Xm=abs(X);
Xf=unwrap(angle(X))*180/pi;
% Base de frecuencias
delta_t = t(2)-t(1);
f = ((1:length(t)) - ceil(length(t)/2)) / length(t) / delta_t;
% Representacion en frecuencia
subplot(3,1,2);
plot(f,Xm,'r');
title('Módulo de transformada de Fourier de x(t)');
xlabel('frecuencia (Hz)');ylabel('|X(jw)|');
subplot(3,1,3);
plot(f,Xf,'r');zoom;
title('fase de la transformada de Fourier de x(t)');
xlabel('frecuencia (Hz)');ylabel('fase X(jw)');
Ejercicio 5
% Definicion de la señal
t=-0.25:0.001:0.25;
x=exp(-2*t).*sin(2*pi*3*t);
% Representacion en el tiempo
figure(1);
plot(t,x);
title('x(t)=exp(-2t)·sin(2·pi·200·t)');
xlabel('Tiempo (t)');ylabel('x(t)');
% Transformada y representacion en frecuencia
Xt=fft(x);
X=fftshift(Xt);
% Magnitud y fase de la transformada
Xm=abs(X);
Xf=unwrap(angle(X))*180/pi;
% Base de frecuencias
delta_t = t(2)-t(1);
f = ((1:length(t)) - ceil(length(t)/2)) / length(t) / delta_t;
figure(2);
subplot(2,1,1);
plot(f,Xm,'r');zoom;
title('Módulo de transformada de Fourier de x(t)');
xlabel('frecuencia (Hz)');ylabel('|X(jw)|');
subplot(2,1,2);
plot(f,Xf,'r');zoom;
title('fase de la transformada de Fourier de x(t)');
xlabel('frecuencia (Hz)');ylabel('fase X(jw)');
3. Producto de Convolución
La convolución es una potente herramienta matemática utilizada en el proce-
sado de señales. Aunque en general se define como un operador que permite
determinar la respuesta de un sistema lineal, invariante en el tiempo ante una
determinada entrada, también se puede aplicar a dos señales arbitrarias. La con-
volución de f y g se denota por f*g y se define como la integral del producto de
ambas funciones después de que una sea invertida y desplazada. En MATLAB
contamos con la función conv() que realiza la la convolución de los vectores x y
h. El vector resultante tiene un tamaño igual a length(x)+length(h)-1.
>> y=conv(x,h);
Ejercicio 6
% Convolucion
g_conv = conv(g,g_escalon);
subplot(3,1,3);
plot(t,g_conv(1:length(g)),'r')
title('Convolucion');
xlabel('Tiempo (t)');
Ejercicio 7
5. Cálculo simbólico
Durante la práctica hemos representado las señales mediante vectores y hemos
manipulado las señales esencialmente mediante operaciones con vectores. Esta
es la forma habitual de trabajar con MATLAB. No obstante, aunque en prin-
cipio MATLAB no se diseño para realizar operaciones simbólicas, sí es posible
definir y manipular señales (y funciones en general) de manera simbólica, si
disponemos del Toolbox para el cálculo simbólico. Así, como en el ejercicio 8,
podemos definir una función seno o delta de dirac y calcular su transformada de
Fourier de forma simbólica.
Ejercicio 8
6. Cuestionario de Evaluación
1
T
t
−τ/2 τ/2
Fig. 1