









Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Tratamiento digital de señales, Profesor: helena helena, Carrera: Ingeniería en Tecnologías de Telecomunicación, Universidad: UAH
Tipo: Ejercicios
1 / 15
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!










PRÁCTICA 1 Entrega del estudio previo de la práctica Para la evaluación de la práctica cada alumno debe hacer entrega del “ Estudio previo ” en formato impreso, en el día y aula donde se realiza la práctica y siempre al comienzo de la clase de laboratorio. El estudio previo es un trabajo individual para cada alumno, y por lo tanto deberá constar en el mismo el nombre completo del alumno y fecha de entrega. El estudio previo de esta práctica consta de las siguientes preguntas: Cuestión 1 : A partir del código indicar si alguna línea producirá error. En caso afirmativo indicar cuál y la razón del mismo.
A=ones(5); A=A+A; B=zeros(2,5); C=ones(2,4); D=[A; B]; E=[A; B; C]; Cuestión 2 : Escriba la sentencia en Matlab® que permite extraer la segunda columna completa de la matriz D. Cuestión 3 : A partir del código que sigue, ¿en qué se diferencian las funciones F1, F2 y F3? n=[0:29]; x=cos(2pin/10); N1=64; N2=128; N3=256; X1=abs(fft(x,N1)); X2=abs(fft(x,N2)); X3=abs(fft(x,N3)); F1=[0 : N1-1]/N1; F2=[0 : N2-1]/N2; F3=[0 : N3-1]/N3; figure; subplot(3,1,1); plot(F1, X1, ‘-x’), title(‘N=64’), axis([0 1 0 20]); subplot(3,1,2); plot(F2, X2, ‘-x’), title(‘N=128’), axis([0 1 0 20]); subplot(3,1,3); plot(F3, X3, ‘-x’), title(‘N=256’), axis([0 1 0 20]); Cuestión 4 : Indique la expresión matemática que relacionan la DTFT (Discrete Time Fourier Transform) y la DFT (Discrete Fourier Transform). PARTE 1: Introducción a Matlab® 1.1.- Introducción Matlab® es un entorno de computación y desarrollo de aplicaciones orientado para llevar a cabo proyectos donde se encuentren implicados una gran cantidad de cálculos matemáticos y la
visualización gráfica de los mismos. Matlab® integra análisis numérico, cálculo matricial, procesado de señal, simulación y visualización gráfica en un entorno completo. El nombre Matlab® hace referencia a Matrix LABoratory , y fue diseñado en un principio para proporcionar un acceso fácil al software de matrices, aunque actualmente se utiliza en todo tipo de aplicaciones científicas. En esta práctica se pretende que el alumno se familiarice con las principales funciones de Matlab®, que serán de gran utilidad en el desarrollo futuro del laboratorio. Para ejecutar el programa se puede hacer un clic sobre su icono en el escritorio o bien ir a inicio/programas y ejecutarlo. Aparecerá entonces el prompt (>>) del programa, donde ya se pueden introducir comandos. Matlab® distingue entre mayúsculas y minúsculas, y los comandos suelen ir siempre en minúsculas. 1.2.- Comandos iniciales El primer comando que se puede ejecutar en Matlab® es el comando de ayuda help. >> help lista todas las funciones de Matlab®, agrupadas según su función y ubicación en los directorios del disco duro. >> help elfun lista todas las funciones asociadas al grupo de matemática elemental. Se pueden listar las funciones asociadas a todos los grupos. Se puede obtener ayuda de cada función en particular: >> help sin hace aparecer la ayuda correspondiente a la función seno. >> help round hace aparecer la ayuda correspondiente a la función de redondeo, y funciones relacionadas. 1.3.- Variables y funciones incorporadas Matlab® no requiere ninguna declaración previa a la asignación para crear variables. Cada vez que encuentra una nueva declaración, crea una variable y la guarda en memoria. Además, si una variable existe previamente, pero se reasigna, y esta operación cambia el tamaño que la variable ocupaba en memoria, Matlab® redimensiona el tamaño de la memoria para acomodar la variable. Los nombres de las variables deben empezar por una letra, seguidos de cualquier combinación de letras y números. Matlab® sólo lee los primeros 31 caracteres en el nombre de una variable.
e=5; t= Nota : Si se acaba la asignación de la variable con punto y coma “;”, Matlab® no muestra la asignación. En caso de no escribir “;”, Matlab® visualiza el valor actual de la variable asignada. Operadores :
v2=[1 3 8]; v_new=[v v2] Y el nuevo vector v_new tendrá dimensión 8. Importante : Muchas veces se necesita crear vectores cuyos elementos estén equi-‐espaciados. Veremos muchos ejemplos de esto a lo largo de las prácticas. Para este tipo de vectores Matlab® incorpora un constructor de vectores que opera del siguiente modo: vector=valor_inicial:paso:valor_final; Ejemplos: t=0:0.1:10; define un vector de 101 componentes, con valores incrementados en 0. a=10:10:100; define un vector de 10 componentes, con valores 10, 20, 30 … 100 Los comentarios en Matlab® se escriben tras el símbolo %. Si al aplicar el constructor no especificamos el paso, Matlab® asigna paso 1 por defecto. w=1:100; whos; Matrices : Las matrices se definen en Matlab® fila a fila. Cada fila se define como un vector, y se separa una fila de otra mediante un ; matriz=[1 9 0;2 5 8;9 1 3] Matlab® dispone de algunos constructores de matrices especiales, m=[] %matriz vacía m=zeros(n,m)%matriz de n filas, m columnas y todos sus elementos 0 m=ones(n,m) % idéntica a la anterior, con todos los elementos 1 m=eye(n) % Matriz identidad de dimensión n Es posible asignar valores directamente a una matriz: m=zeros(2,3); m(1,3)=5; m Operaciones útiles con matrices: Concatenación: A=ones(5); B=zeros(5); C=[A;B] Se pueden concatenar matrices con el mismo número de columnas exclusivamente: D=ones(3,5); C=[A; B; D] La anterior es una operación correcta. Sin embargo las siguientes sentencias producirán un mensaje de error:
E=ones(3,4); C=[A; B; D; E] Operaciones útiles con matrices: Eliminación de filas o columnas: Para eliminar filas o columnas de una matriz se utiliza el operador de vacío [], especificando que filas o columnas quieren eliminarse: A=[1 2 3 4 5] matriz=[A; A; A; A; A] matriz(:,2)=[] % elimina la segunda columna matriz(3,:)=[] % elimina la tercera fila Nota : Fíjese en cómo se especifican todos los elementos de una fila o columna con el operador “:”, donde matriz(:,3) especifica todas las filas, columna 3, matriz (1,:) especifica todas las columnas, fila 1, y matriz(:,:) especifica todas las filas y columnas de la matriz. Otros Operadores y Comandos : sum: El comando sum(M) toma la matriz M y devuelve un vector cuyas componentes son las sumas de las columnas de M. Si aplicamos este comando a un vector, nos devuelve la suma de las componentes del vector. M=eye(5) sum(M) det : Calcula el determinante de una matriz det(M) inv : Calcula la inversa de una matriz. Recuerda que la inversa no está definida en matrices con determinante igual a 0. M=[1 3 4; 2 5 3; 1 8 2] mat_inv=inv(M) M*mat_inv transpose ó ‘: Calcula la matriz transpuesta a una dada. mt=transpose(M) Observe que el operador ‘ es análogo a utilizar el comando transpose. mt=M’
E=ones(3,4); >> C=[A; B; D; E] Operaciones útiles con matrices: Eliminación de filas o columnas: Para eliminar filas o columnas de una matriz se utiliza el operador de vacío [], especificando que filas o columnas quieren eliminarse: >> A=[1 2 3 4 5] >> matriz=[A; A; A; A; A] >> matriz(:,2)=[] % elimina la segunda columna >> matriz(3,:)=[] % elimina la tercera fila Nota : Fíjese en cómo se especifican todos los elementos de una fila o columna con el operador “:”, donde matriz(:,3) especifica todas las filas, columna 3, matriz (1,:) especifica todas las columnas, fila 1, y matriz(:,:) especifica todas las filas y columnas de la matriz. Otros Operadores y Comandos : sum: El comando sum(M) toma la matriz M y devuelve un vector cuyas componentes son las sumas de las columnas de M. Si aplicamos este comando a un vector, nos devuelve la suma de las componentes del vector. >> M=eye(5) >> sum(M) det : Calcula el determinante de una matriz >> det(M) inv : Calcula la inversa de una matriz. Recuerda que la inversa no está definida en matrices con determinante igual a 0. >> M=[1 3 4; 2 5 3; 1 8 2] >> mat_inv=inv(M) >>M*mat_inv transpose ó ‘: Calcula la matriz transpuesta a una dada. >> mt=transpose(M) Observe que el operador ‘ es análogo a utilizar el comando transpose. >> mt=M’ eig : Obtiene los autovalores asociados a una matriz dada (pueden ser complejos).
1.6.- Ficheros m-file (.m)* Normalmente nadie programa directamente en la línea de comandos de Matlab® a no ser que se necesiten cosas muy simples. La idea es escribir “programas” utilizando los comandos de Matlab® en ficheros de texto, nombrados con la extensión .m, que pueden ser ejecutados directamente desde el prompt de Matlab®. Un ejemplo:
clear all; close all; edit dibuj_sin.m Escribir el siguiente texto en el fichero y guardarlo: x=0:0.001:2; y=sin(2pix); plot(x,y); axis([0 2 - 1.1 1.1]) grid; x=0:0.001:2; y=sin(4pix); hold on plot(x,y,’r’); title(‘funciones seno con distinta frecuencia’); xlabel(‘eje x’); ylabel(‘eje y’); Ejecutar en el prompt de Matlab® el comando: dibuj_sin 1.7.- Funciones en Matlab® Las funciones en Matlab® son m-‐files con una estructura que permite pasar y devolver parámetros. Se definen de la siguiente forma: function [parametro_devolver1,parámetro_devolver2,..] = nombre_funcion( parametro1, parametro2,…); Como ejemplo vamos a crear una función que nos devuelva el cuadrado de un número y le sume 37: edit cuadrado37.m function [cuad]=cuadrado37(x); cuad=x^2+37; Guardamos el fichero y ya tenemos la función cuadrado37 definida. x=5; y=cuadrado37(x) Las funciones son muy útiles en Matlab®, porque permiten definir acciones que pueden ser repetidas muchas veces con diferentes parámetros.
1. 8 .- Programación y Control Matlab®, como todos los lenguajes de programación, contiene, además de su amplia gama de funciones internas una serie de constructores que le permiten controlar el flujo de ejecución de los programas. Los principales constructores son if y for. If : La sentencia if evalúa una expresión lógica (verdadera o falsa), y ejecuta una serie de comandos en caso de que la expresión sea verdadera. Las sentencias if deben ser terminadas con un end. El conjunto de operadores lógicos y relacionales disponibles es el siguiente: Operadores relacionales: ==, >, <, >=, <=, ~=. Operadores lógicos: &, |, ~, xor. (AND, OR, NOT, XOR) Ejemplo:
x=3; if (x==3) y=cuadrado37(x); end for : Cuando queremos que un comando se ejecute un número determinado de veces, lo más cómodo es incluirlo en un bucle for , que debe ser acabado con un comando end. Ejemplo: edit prueba.m x=1:0.001:2; y=zeros(5,1001); for (i=1:5) y(i,:)=sin(i2pi*x); plot(x,y); hold on; end 1.9.- Ejercicios para la preparación de la práctica Ejercicio 1 Considera la función y=1-‐e-‐2t. Define la función filtro _exp.m, que dependa de un sólo parámetro, t. Dibuja la función entre 0 y 200, con intervalos de 1 s. Supongamos que tenemos un conjunto de parámetros E=[2 3 1 0.7 8], que vamos a utilizar para decidir si dibujamos la función o no. Haz un programa que dibuje la función en el caso de que E>2, en figuras distintas. Ejercicio 2 La función rand es el generador de números aleatorios de Matlab®. Vamos a generar con ella matrices binarias aleatorias, de dimensión 10 (para ello puedes generar aleatoriamente una variable y, si esta variable es mayor que 0.5 se asigna un valor de 1 a la matriz, si es menor o igual que 0.5 se asigna un valor de 0). Haz un programa que genere matrices aleatorias binarias hasta que consiga un determinante impar.
¿Qué pasaría si el número de muestras utilizadas ( N ) es igual al número de de muestras en x[n]****? Para observarlo, fijamos N1=30 , calculamos la fft(x,N1) y la representamos. ¿Cómo es la FFT obtenida? Vamos a ver un segundo ejemplo. Esta vez vamos a fijar N en un valor grande, y vamos a variar el número de repeticiones del periodo fundamental de nuestra señal x[n] (recuerda que en el ejemplo anterior teníamos 3 periodos de la sinusoide). n=[0:29]; x1=cos(2pin/10); % 3 periodos x2=[x1 x1]; % 6 periodos x3=[x1 x1 x1]; % 9 periodos N=2048; X1=abs(fft(x1,N)); X2=abs(fft(x2,N)); X3=abs(fft(x3,N)); F=[0 : N-1]/N; figure; subplot(3,1,1); plot(F, X1, ‘-x’), title(‘3 periodos’), axis([0 1 0 50]); subplot(3,1,2); plot(F, X2, ‘-x’), title(‘6 periodos’), axis([0 1 0 50]); subplot(3,1,3); plot(F, X3, ‘-x’), title(‘9 periodos’), axis([0 1 0 50]); El código anterior produce 3 gráficos. El primero es la transformada de 3 periodos de un coseno. El correspondiente gráfico son 2 funciones sinc , la primera centrada en 0.1fs y la segunda en 0.9fs. Los 2 gráficos siguientes también están formados por 2 funciones sinc , pero la frecuencia de estas funciones es mayor, y también su amplitud. A medida que x[n] se extienda a más periodos, las funciones sinc empezarán a parecerse más y más a impulsos. En principio sabemos que una sinusoide se transforma en una delta de Dirac en el dominio de la frecuencia, entonces, ¿por qué tenemos funciones sinc cuando calculamos la FFT de un coseno con Matlab®? Hay que observar que la FFT no da directamente el espectro de una señal. Como hemos visto en los 2 experimentos previos, la FFT puede variar muchísimo dependiendo del número de puntos (N) con que la calculemos, y el número de periodos de la señal representados. Además de esto hay otro problema: La FFT contiene información entre 0 y fs , pero sabemos que la frecuencia de muestreo f s debe ser al menos el doble de la mayor frecuencia de la señal. Por lo tanto, el espectro de nuestra señal debe estar siempre por debajo de fs /2 (la frecuencia de Nyquist). Además, hay que recordar que una señal real debe tener una transformada simétrica en frecuencias positivas y negativas. Luego, en vez de tener el espectro de 0 a fs , sería más apropiado mostrar el espectro desde – fs /2 hasta fs /2. Esto se puede conseguir con Matlab® mediante la función fftshift. Veamos un ejemplo: n=[0:149]; x1=cos(2pin/10); N=2048; X=abs(fft(x1,N)); X=fftshift(X); F=[-N/2 : N/2-1]/N; figure; plot(F,X), xlabel(‘frecuencia/f_s’);
Sea x(t) una señal de tiempo continuo con transformada de Fourier X(j ω ). Si muestreamos x(t) a intervalos uniformes de longitud Ts obtendremos la señal x δ (t) cuyo espectro se relaciona con el espectro de x(t) mediante la expresión:
k s s s
∞
1 1 ω δ^ ω^ ω^ ω δ^ ω^ ω^ ω donde Wx es el ancho de banda de x(t). Llamaremos x[n] a la secuencia de muestras de x(t) : x[n] = x(nTs), n entero A partir de x[n] – señal de tiempo discreto– podemos calcular dos transformadas, la DTFT (Discrete Time Fourier Transform) que representaremos como X(ej^ Ω ) o la DFT (Discrete Fourier Transform) que representaremos como X[k]. Las relaciones entre estas transformadas son las siguientes:
Ω ∞ = −∞ − ∞ = −∞ = = = ⎭ ⎬ ⎫ ⎩ ⎨ ⎧
j s j T s n j nT s n Ts X j TF Ts xnTs t nT s T xne TXe TXe ω s ω s δ^ ω^..^ δ
k N j jn T n j j T x jT s s s s s
2
Ω = Ω ∞ = −∞ Ω
π ω ω ω^ ω ω^ ω donde Ω = ω ·∙Ts y N es el número de puntos de la DFT. La representación de espectros de señales de tiempo continuo mediante el algoritmo FFT (Fast Fourier Transform) se basa en las expresiones anteriores. La representación y el tratamiento de señales de tiempo continuo en un ordenador se lleva a cabo mediante las secuencias de muestras x[n] o X[k] según estemos interesados en una representación de la forma de onda x(t) o de su espectro X(j ω ) respectivamente. Resoluciones en el tiempo y en la frecuencia Al muestrear una función perdemos los valores que ésta toma entre dos muestras, de modo que la resolución de la representación en el dominio del tiempo será dt = Ts , donde generalmente Ts deberá tomar un valor mucho menor que el máximo establecido por el teorema del muestreo ( 1 /2Wx(Hz) ). Supongamos que la señal x[n] consta de N muestras tomadas en el intervalo [(no+1)Ts, (no+N)Ts]. Por definición, la DFT de x[n] , X[k] , tendrá también N muestras, repartidas esta vez en el intervalo [0, ω s] y separadas d ω = ω s /N. Las resoluciones en el tiempo y en la frecuencia no son pues independientes, sino que están ligadas por la expresión d ω = 2 π /(N dt) o bien df=1/(N dt).
2 2 G (^) x ω ω= k 2 π df = Ts Xdk La densidad espectral de potencia de una secuencia se obtiene más fácilmente con la función de MATLAB®^ spectrum.m. Representación paso bajo de señales paso banda A toda señal paso banda x(t) le corresponde una señal z(t) denominada señal analítica , tal que:
donde,
π
T F
..
La función paso bajo equivalente de la señal x(t) , a la que denotaremos con xl(t) , dada por la expresión en el dominio del tiempo:
− j t l j t j t^ l l
0 0 0
ω ω o en el dominio de la frecuencia,
La señal xl(t) será en general compleja, admitirá pues dos representaciones, cartesiana y polar,
j ( t )
θ
a partir de las cuales podemos expresar la señal paso banda x(t) :
0 0 0 2 2 2 2 0 0 0 θ ω ω ω ω ω ω θ
i q i q i q
2.3.- Ejercicios Los problemas de esta sección y la siguiente , han sido extraídos, traducidos y/o adaptados del libro: Proakis, J G y Salehi, M. (2000): Contemporary Communication Systems Using MATLAB®. Brooks/Cole, cuya lectura recomendamos encarecidamente. Ejercicio 1 (Proakis & Salehi 2000-‐Prob. 1.5) Represente los espectros de amplitud y de fase de las señales x 1 (t) y x 2 (t) mostradas en la figura. Sugerencia : fs =10 Hz ., tiempo de observación de la señal Δ w = 10 s ., resolución en frecuencia df = 0,01 Hz. Puede utilizarse la función de MATLAB fftseq. Ejercicio 2 Modifica el programa del problema 1.1 para representar x 1 (-‐t) y x 2 (-‐t) y calcular sus espectros de amplitud y fase. Comparar el resultado obtenido con el resultado del problema anterior. 2.4.- Otros ejercicios propuestos Ejercicio 1 (Proakis & Salehi 2000-‐Prob. 1. 7 ) Este problema trata de ilustrar el análisis de sistemas LTI en el dominio de la frecuencia. La señal x(t) , representada en la figura, consiste en un segmento sinusoidal unido a varios segmentos rectos. Se pide: a) Calcular y representar la FFT de x(t). b) Si la señal se aplica a la entrada de un filtro paso bajo ideal con un ancho de banda de 1,5 Hz ., obtener la salida del filtro y representarla. c) Repetir el apartado anterior para el caso en que el filtro no sea ideal y tenga una respuesta al impulso dada por ( )
Sugerencia : fs = 5 Hz ., tiempo de observación de la señal Δ w = 10 s ., resolución en frecuencia df = 0,01 Hz. x 1 (t) -‐ 1 1 2
t x 2 (t) -‐ 1 1 2
t 2 -‐ (^2 1 3 4) t x(t)