18
PREPARATORIO Realizado por: Alumno(s): - Angel Ricardo Torres Cuenca. Grupo: - Patricia Lizbeth Gavilanes Echeverría. - William Santiago Coloma Gómez. Semestre: 2015-B ESCUELA POLITÉCNICA NACIONAL FACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA LABORATORIO DE COMUNICACIÓN DIGITAL Práctica #: 3 Tema: Análisis espectral en Matlab y Simulink. GR1 Fecha de entrega: 19/10/2015 f.______________________ Sanción: _______________________________________________________

Comunicacion Digital Prepa3

Embed Size (px)

DESCRIPTION

Analisis espectral de señales

Citation preview

PREPARATORIO

Realizado por:

Alumno(s): - Angel Ricardo Torres Cuenca. Grupo:

- Patricia Lizbeth Gavilanes Echeverría.

- William Santiago Coloma Gómez.

Semestre: 2015-B

ESCUELA POLITÉCNICA NACIONAL FACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

LABORATORIO DE COMUNICACIÓN DIGITAL

Práctica #: 3 Tema: Análisis espectral en Matlab y Simulink.

GR1

Fecha de entrega: 19/10/2015 f.______________________

Sanción: _______________________________________________________

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

LABORATORIO DE COMUNICACIÓN DIGITAL

PRÁCTICA N° 3

Tema: Análisis espectral en Matlab y Simulink.

Objetivos:

­ Aplicar los conceptos relacionados a la teoría de análisis de señal en el dominio del tiempo y la frecuencia.

­ Utilizar SIMULINK para analizar señales en el dominio del tiempo y frecuencia.

PREPARATORIO

1. Consultar sobre las funciones de MATLAB para procesamiento de señales: fir1, fir2, buttord, butter, cheb1ord, cheb2ord, cheby1, cheby2, filter, filtfilt, freqz, pwelch, randy guide. (La consulta consiste en realizar un párrafo explicativo de 3 o 4 líneas sobre el uso de la función, sus parámetros, y los datos devueltos por la función).

fir1:

Se multiplica la respuesta en el tiempo de un filtro ideal con una función ventana. Truncando la

respuesta ideal a un número finito de elementos.

num=fir1(n,Wp)

n: Orden del filtro Wp: Vector que contiene las frecuencias de corte. Si sólo tiene un elemento se obtiene un filtro pasabajos y si contiene dos elementos se obtiene un filtro pasabanda.

fir2

Esta función nos permite seleccionar la respuesta frecuencial del filtro.

Ejemplo, filtro pasa bajo:

f = [0 0.6 0.6 1]; m = [1 1 0 0];

b = fir2(30,f,m); [h,w] = freqz(b,1,128); plot(f,m,w/pi,abs(h)) legend('Ideal','Diseño fir2') title('Comparación entre respuestas en frecuencia')

buttord

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

A partir de las especificaciones de atenuación máxima en la banda de paso y mínima en la de

rechazo así como de las respectivas frecuencias de corte de cada una de las bandas, nos da el

orden del filtro y la frecuencia natural del filtro.

Es decir, determina el orden del filtro para las especificaciones

[nB,WnB]=buttord(Wp,Ws,Rp,Rs) Wp, Ws, Rp y Rs corresponden a las especificaciones. WnB: Frecuencia a -3 dB.

Butter

A partir del orden del filtro y de la frecuencia natural, la función butter nos da los polinomios

correspondientes al numerador y al denominador de la función de transferencia.

Es decir, Obtiene los coeficientes del filtro.

[numB,denB]=butter[nB,WnB]

En el diseño de filtros Pasabanda o rechazo de banda el orden del filtro resulta ser en realidad el

doble del especificado por el comando buttord.

Los más usuales son los siguientes:

Butterworth – Pasabajas: [num,den]=butter(nB,Wn)

Butterworth – Pasaaltas: [num,den]=butter(nB,Wn,’high’)

cheb1ord y cheby1

Filtros IIR proceden directamente de la aplicación de métodos que tradicionalmente se han

aplicado en el desarrollo de filtros analógicos tales como eran las aproximaciones de Butterword,

Chebyshev o Elíptica.

Matlab dispone de funciones semejantes a las anteriores para el desarrollo de aproximaciones

chebyshev. En este caso, en la aproximación tipo I de chebyshev o llamada también directa, las

funciones a utilizar son la chen1ord y la cheby1.

El orden obtenido a partir de esa función, que requiere las mismas entradas de datos que la

correspondiente de la aproximación Butterword, es de 7. Este orden es muy inferior al de las

anteriores aproximaciones.

[n,Wn]=cheb1ord(Wp,Ws,Rp,Rs,'s')

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

[b,a]=cheby1(n,Rs,Wn)

Regresa el grado mínimo y frecuencia que puede tener el filtro con ciertas características

deseadas.

Significado de las iniciales:

Wp = Frecuencia de corte, ésta debe estar entre 0 y 1 donde .5 sería la frecuencia de muestreo (teorema de Nyquist). Ws = Frecuencia de paro, esta es donde la señal es atenuada casi por completo, está en las mismas unidades de Wp, y está entre 0 y 1. Rp = Atenuación del rizo. Rs = Atenuación de las frecuencias no deseadas.

cheb2ord y cheby2

Mediante las funciones de matlab cheb2ord y cheby2 obtenemos de forma relativamente sencilla

la aproximación buscada. Eso se debe a que la forma de obtener una a partir de la otra es

mediante una sencilla transformación matemática que implica dejar inalterado el orden de la

aproximación. El único cambio que se introduce es que el rizado se traslada a la banda de rechazo

siendo ahora la banda de paso máximamente plana como lo era en el caso de Buterword. Si bien,

el orden es menor pues ahora no tenemos un exceso de atenuación en la banda de rechazo tan

acentuado como en el caso de la Butterword.

[n,Wn]=cheb2ord(Wp,Ws,Rp,Rs,'s')

[b,a]=cheby2(n,Rs,Wn)

Regresa el grado mínimo y frecuencia que puede tener el filtro con ciertas características

deseadas.

Wp= Frecuencia de corte, ésta debe estar entre 0 y 1 donde .5 sería la frecuencia de muestreo (teorema de Nyquist). Ws= Frecuencia de paro, esta es donde la señal es atenuada casi por completo, está en las mismas unidades de Wp, y está entre 0 y 1. Rp= Atenuación del riso. Rs=Atenuación de las frecuencias no deseadas.

filter

Mediante sencillas transformaciones por medio de la función filter podemos obtener la respuesta

en Z del filtro digital.

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

Señal de Salida del Filtro Para una Señal de Entrada

y=filter(num,den,x)

Donde: x es la señal de entrada.

filtfilt

y = filtfilt (b, a, x)

Realiza filtrado digital de fase cero mediante el procesamiento de los datos de entrada, x, en

ambas direcciones directa e inversa.

b: proporciona los coeficientes del numerador del filtro y el vector de los coeficientes proporciona un denominador. Si utiliza un filtro de todos los polos, introduzca 1 para b. Si utiliza un filtro de todo ceros (FIR), introduzca 1 para a. Después de filtrar los datos en la dirección de avance, filtfilt invierte la secuencia filtrada y se ejecuta de nuevo a través del filtro. El resultado tiene las siguientes características: Distorsión de Fase Cero; Una función de transferencia del filtro, que es igual a la magnitud al cuadrado de la función de transferencia filtro original. Para una orden de filtro que es el doble del orden del filtro especificado por b y a filtfilt minimiza la puesta en marcha y termina transitorios, haciendo coincidir las condiciones iniciales, y se puede utilizar tanto para reales y complejos.

freqz

Mediante sencillas transformaciones por medio de la función freqz podemos obtener la respuesta

en Z del filtro digital.

Respuesta de Magnitud y Fase de Filtros

[H,F]=freqz(num,den): Por defecto asume 512 puntos equidistantemente espaciados y el eje de

frecuencias es normalizada.

[H,F]=freqz(num,den,n,Fs): Donde se especifica número de puntos n y la frecuencia de muestreo

Fs.

[H,F]=freqz(num,den,f,Fs): Donde f es un vector en el que se especifica las frecuencias particulares

en las que se obtendrá la respuesta de magnitud y fase.

pwelch

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

Esta función estima la densidad de potencia espectral (PSD) de una señal utilizando el método de

Welch:

[Pxx, f]=pwelch(x, window, noverlap, nfft, fs)

La señal x a analizar se divide en k secciones de nfft puntos que pueden estar solapadas. k se

calcula a partir de:

m: tamaño de x n: número de puntos solapados l=nfft: tamaño de cada sección

Se aplica la ventana especificada window a cada sección de x Se calcula el espectro de cada sección a partir de la fft Se obtiene el promedio de los espectros, que se multiplica por 1/fs para obtener la PSD (unidades de potencia/Hz; V2 /Hz o g 2 /Hz).

randy guide

Una de las tantas herramientas con la que cuenta MatLab, es la creación de GUIs. La forma de

implementar las GUI con MatLab es crear los objetos y definir las acciones que cada uno va a

realizar. Al usar GUIDE obtendremos dos archivos:

Un archivo FIG – Contiene la descripción de los componentes que contiene la interfase. Un archivo M – Contiene las funciones y los controles del GUI así como el callback Un callback se define como la acción que llevará a cabo un objeto de la GUI cuando el usuario lo

active. Para ejemplificarlo, suponga que en una ventana existe un botón el cual al presionarlo

ejecutará una serie de acciones, a eso se le conoce como la función del callback.

De todo lo anterior mencionaremos las partes más importantes de GUIDE:

Inspector de propiedades: Cada control cuenta con diferentes propiedades y es aquí donde podremos cambiar: el color, el nombre, el tag, el valor, el callback entre otros. Activar Figura: Una vez que hayamos terminado de diseñar presionamos este botón para activar la figura y poder probar nuestra GUI. Push Button: Crea un botón Radio Button: Crea un botón circular Edit Text: Crea una campo de texto Axes: Crea una área para gráficas. Frame: Crea un marco que puede contener otros controles Static Text: Crea un letrero

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

2. Consultar y detallar el funcionamiento de los bloques de Simulink que permitan obtener el

espectro de magnitud de una señal. SIMULINK que es un programa de simulación con interfaz gráfico que suplementa al MATLAB. Esta nueva herramienta nos permite describir gráficamente un sistema dibujando su diagrama en bloques, su resultado es muy conveniente para la simulación de sistemas dinámicos. Entre las diferentes librerías que tiene SIMULINK son: • Continous (Bloques para sistemas en tiempo continuo) • Discrete (Bloques para sistemas en tiempo discretos) • Functions & Tables • Math (Sumadores, Ganancias matriciales o constantes, etc.) • Nonlinear • Signals & Sistems (multiplexores, demultexores, etc.) • Sinks (Graficadores, etc.) • Sources (Varias fuentes de entradas)

EL bloque TO WORKSPACE envía las variables generadas en el SIMULINK al MATLAB,

esta se genera en la ventana de comandos de Matlab.

El bloque ‘Signal Generator ’ puede generar cuatro diferentes tipos de formas de onda:

onda seno (‘sine’), onda cuadrada (‘square’), onda diente de sierra (‘sawtooth’) y onda

aleatoria (‘ramdom’). Los parámetros de las señales son expresados en hercios o

radianes por segundo. Se puede invertir la onda configurando el valor de la amplitud en negativo

en la ventada de dialogo de parámetros.

Un analizador de espectros (Signal Processing Blockset/Signal Processing

Sinks/Spectrum Scope). En el Spectrum Scope, establecer Buffer size, Buffer overlap y

Number of spectral averages.

El bloque de Suma, es aquel que realiza la operación de sumatoria o resta en sus

entradas. Este bloque puede sumar o restar escalar, vector o matriz de entradas.

También se pueden colapsar los elementos de una señal.

El bloque “muestreo” es necesario dado que los generadores son señales en tiempo

continuo y el analizador de espectros calcula la FFT de una señal discreta.

El bloque ’Gain’ multiplica la entrada por un valor constante (ganancia). La entrada y la

ganancia pueden ser un escalar, un vector o una matriz. El valor de la ganancia se

especifica a través del parámetro ’Gain’. El parámetro ’Multiplication’ determina se la

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

multiplicación es matricial o elemento a elemento. El orden de las multiplicaciones en las

operaciones matriciales es configurado a través de este parámetro.

El bloque Scope muestra su entrada con respecto al tiempo de simulación. El bloque

scope puede tener varios ejes (uno por cada puerto) y todos los ejes tienen un rango

de tiempo común con los independientes y los ejes. El bloque scope le permite ajustar

la cantidad de tiempo y el rango de valores de entrada que se muestra. Puede mover y

redimensionar la ventana del alcance y se pueden modificar los valores del alcance de los

parámetros durante la simulación. Al final, este bloque a nivel de prácticas muestra la forma de las

ondas de las señales en forma gráfica.

Este bloque está conectado a la salida de un sistema que muestra el contenido de

frecuencia de la memoria intermedia en la ventana gráfica.

3. Graficar en el tiempo el producto de funciones g1 y g2 en los siguientes casos:

a) g1(t) = a1*cos (3**f1*t)

g2(t) Un tren de pulsos periódico con amplitud A, periodo T, frecuencia f2, tiempo de

duración del pulso en alto τ2 y tiempo de duración del estado en bajo τ1.

Para los valores de frecuencia f1 = 5kHz, a1=2, f2= 2.5kHz, tao1= 0.1 ms y A=3.

Figura 1. Función g1(t) Figura 2. Función g2(t)

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

Figura 3. Función g1(t)*g2(t)

b) g1(t) = 2sin(4*f1*t)

g2(t) es una función diente de sierra de periodo T = 1/f2 de acuerdo a la siguiente figura:

Para los valores de frecuencia f1 = 5 KHz, f2 = 2.5Khz, T = 4mseg y A = 1.5.

Figura 4. Función g1(t) Figura 5. Función g2(t)

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

Figura 6. Función g1(t)*g2(t)

c) g1(t) = a1*cos (5**f1*t)

g2(t) es una función diente de sierra de periodo T = 1/f2 de acuerdo a la siguiente figura:

Para los valores de frecuencia f1 = 1.5kHz y f2 = 4kHz, a1=3y A=6.

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

Figura 7. Función g1(t) Figura 8. Función g2(t)

Figura 9. Función g1(t)*g2(t)

Ejemplo de Código:

A continuación se presenta el código de la gráfica correspondiente al literal b).

NOTA: Para las gráficas del resto de literales, es el mismo código pero cambiando las

funciones g1 y g2 por las correspondientes de cada literal.

a1=2; f1=5000; f2=2500; fs=30*f1; t=0:(1/fs):(4/f1);

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

%Literal b) g1=2*sin(4*pi*f1*t); figure plot(t,g1,'r') title('Función g1(t)') xlabel('tiempo'); axis([0 4/f1 -1.1*a1 1.1*a1])

y2=0.75*sawtooth(2*pi*f2*t,0.5)+0.75; y3=0.5*square(2*pi*f2*t)+0.5; g2=-(y2.*y3); figure plot(t,g2,'r') title('Función g2(t)') xlabel('tiempo'); axis([0 4/f1 -1.7 0.1])

g=g1.*g2; figure plot(t,g); title('Función g1(t)*g2(t)'); xlabel('tiempo')

4. Elaborar un archivo .m que permita graficar en una misma figura:

- Las 2 señales.

- La señal (multiplicada) en función del tiempo.

- El espectro de potencia de dicha señal, de las funciones: a, b y c, del literal anterior.

El archivo debe ser generado en un GUI (Interfaz Gráfica de Usuario) independiente por

cada literal de funciones, donde se pueda ingresar en un textbox los valores de Amplitud,

Periodo y Número de periodos de las señales; y con un botón se generen todas las señales.

NOTA: Las graficas de los espectros de potencia de las señales se muestran en otras

figuras para mejor visualización.

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

Figura 10. GUIDE literal a.

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

Figura 11. GUIDE literal b.

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

Figura 12. GUIDE literal c.

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

Código GUIDE figura 10

A continuación se presenta el código del pushbutton que ejecuta al GUIDE.

%Función 1 a1=str2double(get(handles.edit2,'string')); T1=str2double(get(handles.edit3,'string')); nT=str2double(get(handles.edit4,'string')); f1=(1/T1); fs=20*f1; t=0:(1/fs):(nT/f1); g1=a1*cos(2*pi*f1*t); %Primera función axes(handles.axes1) plot(handles.axes1,t,g1,'r'); hold on

%Función 2 a2=str2double(get(handles.edit5,'string')); T2=str2double(get(handles.edit6,'string')); nT2=str2double(get(handles.edit7,'string')); h=str2double(get(handles.edit8,'string')); f2=(1/T2); fs2=20*f2; t2=0:(1/fs2):(nT2/f2); g2=(a2/2)*square(2*pi*f2*t2,h)+(a2/2);%2da Función plot(handles.axes1,t2,g2); % axes(handles.axes1) hold on axis([0 nT2/f2 -1.2*a2*a1 1.2*a2*a1])

% Función 1*2 g=g1.*((a2/2)*square(2*pi*f2*t,h)+(a2/2)); plot(handles.axes1,t,g,'g'); xlabel('tiempo'); hold on hold off

%Espectro de potencia g1(t) n=2048; G1=fft(g1,n); fx1=fs/n*(1:n/2); y1=G1.*conj(G1); plot(handles.axes4,fx1,(y1(1:n/2)))

%Espectro de potencia g2(t) G2=fft(g2,n); fx2=fs2/n*(1:n/2); y2=G2.*conj(G2); plot(handles.axes5,fx2,(y2(1:n/2)))

%Espectro de Potencia g1(t)*g2(t) G=fft(g,n);

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

y=G.*conj(G); if fs >= fs2 fx1=fs/n*(1:n/2); plot(handles.axes7,fx1,y(1:n/2)); else fx2=fs2/n*(1:n/2); plot(handles.axes7,fx2,y(1:n/2)); end

NOTA: EL código empleado en los otros GUIDES es exactamente el mismo pero cambiando

las funciones g1 y g2 por las correspondientes a cada literal.

5. Elaborar un GUI en Matlab, donde se visualice dos señales, una señal cuadrada simétrica y

una señal diente de sierra; de modo que la amplitud y la frecuencia sean ingresados

mediante una barra deslizante. (Nota: Los rangos de amplitud deben ser de 1 a 10, y los de

frecuencia de 10 a 10000).

Figura 12. GUIDE literal 3.5.

Ejemplo de Código:

A continuación se presenta el código de la gráfica de la onda cuadrada correspondiente al

slider de la frecuencia.

INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES LABORATORIO DE COMUNICACIÓN DIGITAL

function sliderf1_Callback(hObject, eventdata, handles) % hObject handle to sliderf1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) a1=get(handles.sliderA1,'value'); fa=get(handles.sliderf1,'value'); A1=a1+1; f1=(fa+1)*10; F1=100*f1; t1=0:1/F1:3/f1; x=A1*square(2*pi*f1*t1); axes(handles.axes5); plot(t1,x,'b'); grid on; ylabel('AMPLITUD');xlabel('TIEMPO');

Referencias:

[1] Tutorial MatLAb Capitulo3

http://www.frsn.utn.edu.ar/tecnicas3/practicos/td3tp6_teoria.pdf

[2] Ayuda de MATLAB

[3] Manual de Interfaz Gráfica de Usiario PARTE 1 Autor: Diego Orlando BArragán

https://www.dspace.espol.edu.ec/bitstream/123456789/10740/11/MATLAB_GUIDE.pdf

[4] Taller de SIMULINK y Procesamiento de Señales Dr. Javier Vega Pineda

http://www.depi.itchihuahua.edu.mx/jvega/TallerSimulinkIEEE/1Taller%20de%20SIMULIN

K%20y%20Procesamiento%20deSe%25F1ales.pdf

[5] Introduccion al Simulink Modelado y simulación de sistemas dinámicos – Teodoro Álamo

,Daniel Lim’on, Manuel Gil, Manuel Ruiz, Guillermo Heredia. Departamento de Ingeniería

de Sistemas y Automática- Universidad de Sevilla.

[6] Dispositivos y sistemas de comunicación inalámbrica-Uso de MATLAB en comunicaciones.-

Dr. José Manuel Rodríguez Ascariz- Universidad de Alcalá-

https://www.depeca.uah.es/depeca/repositorio/subir_web/web/1296410069jmra2009/j

mra_uso_deMATLABenComunicaciones.pdf