practica con matlab

19
ESCUELA POLITECNICA DEL EJERCITO ESPE-L PRACTICA CON MATLAB OBJETIVOS: Realizar la siguiente practica de matlab para observar las diferencias que se presentan en cada uno de los siguientes casos. Observar la diferencia que existe al aplicar diferentes valores de amplitud y frecuencias. MARCO TEORICO: SEÑALES Y SISTEMAS Definimos una señal como una función matemática que depende de una o más variables independientes, y cuyo valor nos da información sobre el fenómeno físico al que está asociada. Igualmente definimos un sistema como cualquier transformación realizada sobre una señal. • Las señales discretas se representan con una secuencia de números denominados muestras. • Una muestra de una señal o secuencia se denota por x[n] siendo n entero en el intervalo − ∞ < n < ∞ (x[n]=x[nT]) • x[n] está definida únicamente para valores enteros de n. • Una señal en tiempo discreto se representa como {x[n]} • Las señales discretas se pueden representar como una secuencia de números entre paréntesis {x[n]} = {− 0.2, 2.2, 1, 1,0.2, − 3.7, 2.9}; x(n) = (1 4)n • La flecha ↑indica la muestra con índice n=0 Desarrollo:

Upload: edi-quingaluisa

Post on 12-Feb-2015

72 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Practica Con Matlab

PRACTICA CON MATLAB

OBJETIVOS:

Realizar la siguiente practica de matlab para observar las diferencias que se presentan en cada uno de los siguientes casos.

Observar la diferencia que existe al aplicar diferentes valores de amplitud y frecuencias.

MARCO TEORICO:

SEÑALES Y SISTEMAS

Definimos una señal como una función matemática que depende de una o más variables independientes, y cuyo valor nos da información sobre el fenómeno físico al que está asociada.

Igualmente definimos un sistema como cualquier transformación realizada sobre una señal.

• Las señales discretas se representan con una secuencia de números denominados muestras.• Una muestra de una señal o secuencia se denota por x[n] siendo n entero en el intervalo − ∞ < n < ∞ (x[n]=x[nT])• x[n] está definida únicamente para valores enteros de n.• Una señal en tiempo discreto se representa como {x[n]}• Las señales discretas se pueden representar como una secuencia de números entre paréntesis{x[n]} = {− 0.2, 2.2, 1, 1,0.2, − 3.7, 2.9}; x(n) = (1 4)n ↑• La flecha ↑indica la muestra con índice n=0

Desarrollo:

1. Se desea generar 2 periodos de una sinusoide analógica de amplitud 1 frecuencia 200 hz, muestreada a 1khz

Sabemos que una sinusoide continua de frecuencia Fa queda definida por la siguiente expresión:

Page 2: Practica Con Matlab

x (t )=Acos (2π Fat+θ)

Donde A y θ son, respectivamente, la amplitud y fase del sistema. Si muestreamos auna frecuencia Fm obtenemos:

x (n )≡ x (nT )=Acos (2πnT +θ)=Acos(2 πnFaFm

+θ).

Sustituyendo en nuestro caso tendríamos:

x (n )=cos (2 πn 2001000 )=cos (πn0,4 )

De forma inmediata se comprueba que el periodo de la señal discreta es de 5 muestras, como nos piden dos periodos el número de muestras a generar es de 10.

Las instrucciones de matlab para generar y dibujar la señal son:

n=0:9;Fm=1000;Fa=200;x=cos(2*pi*Fa*n/Fm);stem(n,x)xlabel('n')ylabel('x(n)')grid onCon estas se obtiene la siguiente figura 1,34:

Page 3: Practica Con Matlab

2. Realice la misma operación, pero ahora la sinusoide a muestrear es de 1.2Hz.n=0:9;Fm=1000;Fa=1200;x=cos(2*pi*Fa*n/Fm);stem(n,x)xlabel('n')ylabel('x(n)')grid on

Page 4: Practica Con Matlab

3. suponga sobre la gráfica obtenida sobre la gráfica 2.63 los puntos obtenidos en el 1.62 ¿Qué ocurre?? Que consecuencias se puede obtener sobre las gráficas.

Con el siguiente código podemos obtener ambas gráficas, donde en lugar de emplear la instrucción hold on hemos utilizado la opción plot para suponer múltiples graficas (Figura 1.36)

plot(n,x,'o',n,xx,'+')legend('Fa=200Hz','Fa=1200Hz')xlabel('n')ylabel('x(n)')

n=0:9;t=0:0.01:9;Fa1=200;Fa2=1200;Fs=1000;xt1=cos(2*pi*Fa1*t/Fs);xt2=cos(2*pi*Fa2*t/Fs);x1=cos(2*pi*Fa1*n/Fs);x2=cos(2*pi*Fa2*n/Fs);plot(t,xt1,'k-',t,xt2,'k:',n,x1,'ko',n,x2,'k+')xlabel('n')

Page 5: Practica Con Matlab

Se observa que los puntos de las dos señales coinciden. La razón es que la segunda señal (la componente de 1.2KHz)no cumple el teorema de muestreo. Mediante la relación siguiente podemos determinar la frecuencia aparente obtenida tras el muestreo.

Fa=Fb±KFm

Siendo Fm una frecuencia en el intervalo [-Fm/2. Fm/2].

4. Repita el aparto anterior pero ahora la señal a muestrear es la suma de cuatro sinusoides de amplitud uno y frecuencias 100, 200 y 600 y 2100 Hz. Utilice señales de tipo coseno. Comente los resultados.

El siguiente código me permite calcular las secuencias y representar el espectro de la suma. En lugar de utilizar un bucle para calcular cada una de las secuencias hemos utilizado las propiedades de Matlab, para trabajar con matrices de datos y la función sum que al ser aplicada sobre una matriz suma sus elementos por columnas.

N=1000;n=0:N-1;Fa=[100, 200, 600, 2100]'; %tenemos un vector de frecuenciasFm=1000;x=cos(2*pi*Fa*n/Fm); %calculamos todas las sinusoidesx=sum(x); %sumamos las sinusoides

Page 6: Practica Con Matlab

plot(-N/2:N/2-1,abs(fftshift(fft(x))));xlabel('FRECUENCIA')grid on

La grafica se muestra en la figura 1.39. Interpretamos esa gráfica. Las frecuencias analógicas de 600 Hz y 2100 Hz no verifican el teorema de muestreo por lo que aplicando la ecuación (1.7) obtenemos que las frecuencias aparentes correspondientes son:

600Hz→−400Hz2100Hz→100Hz

Independientemente de que se trate de frecuencias positivas y negativas, cada una de estas señales está representada en el espectro de 2 picos. Por lo que observamos picos en frecuencias 100,200 y 400, sin embargo para amplitud en frecuencia 100 es el doble. Esto es debido a que para esta frecuencia contribuyen las frecuencias analógicas de 100 Hz y 2100 Hz, que por efecto de aliasing se corresponden la misma frecuencia aparente

Page 7: Practica Con Matlab

5. Repita el apartado anterior pero sustituyendo la frecuencia de 2100Hz por una de 1900Hz.¿Obtendriamos el mismo resultado si hubiésemos generado las señales con funciones seno?

N=1000;n=0:N-1;Fa=[100,200,600,1900]';Fm=1000;x=cos(2*pi*Fa*n/Fm);xx=sin(2*pi*Fa*n/Fm);x=sum(x);xx=sum(xx);subplot (211)plot(-N/2:N/2-1,abs(fftshift(fft(x))));xlabel('Frecuencia (Hz)')title('a')grid onsubplot(212)plot(-N/2:N/2-1,abs(fftshift(fft(x))));xlabel('Frecuencia (Hz)')title('b')grid on

Page 8: Practica Con Matlab

6. Genere una señal cuadrada de 100 puntos con una frecuencia de 150Hz y muestreada a 1000hz. Represente el espectro de la señal y explique el resultado

Sabemos que una señal cuadrada analogica esta formada por una suma infinita de armonicos decrece a medida que aumenta la frecuencia del mismo.

Nuestra señal contendrá armónicos a las frecuencias: 150hz,450hz,750hz,1050hz,1350hz,1650hz,1950hz….. como la frecuencia de muestreo es de 1khz para que no se produzca aliasing, las frecuencias analógicas deberán estar comprendidas en el intervalo [-500hz,…….,500hz]. En nuestra señal cuadrada esto no se verifica a partir de la frecuencia de 750hz. Veamos cuáles serán las frecuencias aparentes obtenidas para cada uno de los armónicos para ello utilizamos la expresión (1,7). En la práctica podemos obtener las frecuencias aparentes sin mas que restar a la señal múltiplos de la frecuencia de muestreo hasta que nos encontremos en el intervalo de frecuencias determinado por la frecuencia de muestreo.

Frecuencia original

Frecuencia aparente

150HZ 150Hz no produce aliasing

450Hz 450hz no produce aliasing

750Hz -250Hz

1050Hz 50Hz

1350Hz 350HZ

1650Hz -450Hz

Page 9: Practica Con Matlab

1950Hz -50hz

N=1000;n=0:N-1;F=150;Fm=1000;x=square(2*pi*F*n/Fm);subplot(211)stem(n(1:50),x(1:50))xlabel('n')ylabel('x(n)')title('(a)')subplot(212)plot(-N/2:N/2-1,abs(fftshift(fft(x))));xlabel('Frecuencia')title('(b)')

7. Escriba una función que acepte como parámetros un vector de muestras, el numero de bits del cuantificador y el rango de entrada, y devuelva la señal cuantificada por redondeo. Considérese que el intervalo de entrada es bipolar.

Programación:function y=cuanti(x,bits,m)% x: señal de entrada

Page 10: Practica Con Matlab

% bits: numero de bits del cuantificador% m: rango de entrada del cuantificador% la cuantificacion se realiza por redondeo.

resol=2*m/(2^bits-1); %Resolucion del cuantificador.nivel=x/resol; %Determinamos el numeo de %niveles del cuantificador %correspondientes (no enteros).nivel=round(nivel); %Redondeamos al nivel mas proximo(entero)y=nivel*reol; %Exprsamos la señal cuantizada en las %la unidades de la señal original.

8. La siguiente ecuación en diferencias recursiva permite calcular el valor de la raíz cuadrada de A, tomando como condición inicial x(-1) una aproximación burda a dicha raíz. Para valores de A 1, x(-1)=1 es una aproximación adecuada.

x (n )=12 [ Ax (n−1)

+ x(n−1)]a) Escriba un programa que permita calcular el valor de la raíz cuadrada de 2.

Compruebe que a partir de un pequeño número de iteraciones el valor almacenado en x(n) coincide √2

b) Repita el procedimiento anterior cuantificando el resultado de cada iteración antes de realimentar de nuevo el sistema. Muestre las graficas obtenidas para un cuantificador de 4, 5, 6, 8 y 12 bits, si el intervalo de entrada al cuantificador es de ±5

SOLUCION:a) El siguiente programa muestra la implementación recursiva de la ecuación en

diferencias del sistema, mediante un bucle. El bucle finalizara cuando la diferencia entre el valor calculado con esta expresión y el valor real sea menor que 1/10000.

clearA=2;valor_exacto=sqrt(2);n=1;x(n)=1; %condicion inicialerror=1/10000;while(abs(x(n)-valor_exacto)>=error) n=n+1; x(n)=0.5*(A/x(n-1)+x(n-1));

Page 11: Practica Con Matlab

endSi ejecutamos disp(x). Matlab nos devuelve por pantalla

Observamos que con muy pocas iteraciones el resultado converge al valor de √2 . Para otro valor de A. por ejemplo A = 356 obtenemos la secuencia

Observamos que la convergencia es rápida

b) Veamos cómo se modifican los resultados al cuantificar cada operación tras cada iteración. En este caso vamos a fijar el número de iteraciones en 15, independiente del número de bits considerado, y mostraremos en una gráfica los resultados. El programa utilizado es el siguiente:

%CuantificaciónClearA=2;m=5;valor_exacto=sqrt(2);n=1;N=10; %numero de iteracionesx(:,n)= [1, 1,1,1,1]’; % condición inicialj=1;for(bits=[4, 5, 6, 8, 12])

for (n=2:N)x(j,n)=cuanti(0.5*(A/x(j,n-1)+x(j,x-1)),bits,m);endj=j+1;

n=1:N;plot(n,x(1,:),’k-‘,n,x(“,:),’k:’,n,x(3:),’k.-’,n,x(4,:),’k--’,n,x(5,:),’k-‘)legend([‘b=4 valor=’ num2str(x(1,N))], [‘b=5 valor=’ num2str(x(2,N))], \dots[‘b=6 valor=’ num2str(x(3,N))], [‘b=8 valor=’ num2str(x(4,N))], \dots[‘b=12 valor=’ num2str(x(5,N))])xlabel(‘iteracion’)ylabel(‘valor aproximado de la raiz’)

Page 12: Practica Con Matlab

9. En esta práctica se estudiaran los conceptos de estabilidad y linealidad básicos a la hora de analizar sistemas discretos. Determine si los sistemas definidos por las ecuaciones en diferencias siguientes verifican las propiedades de linealidad, invarianza temporal y estabilidad

a) y (n )=x2 (n )+1.

b) y (n )=n−1ny (n−1 )+ 1

nx (n )

c) y (n )=ay (n−1 )+x (n ) , paraa=1.2 y a=0.8clearclose allN=100;x1=sin(2*pi*0.1*(0:N-1));x2=sin(2*pi*0.3*(0:N-1));alfa=3;beta=0.5;x3=alfa*x1+beta*x2;x4=[1 zeros(1,N-1)];ret=5;x5=[zeros(1,ret) x1(1:N-ret)];y1(1)=x1(1);y2(1)=x2(1);y3(1)=x3(1); y4(1)=x4(1);

Page 13: Practica Con Matlab

y5(1)=x5(1);for(n=2:N) y1(n)=((n-1)/n)*y1(n-1)+x1(n)/n; y2(n)=((n-1)/n)*y2(n-1)+x2(n)/n; y3(n)=((n-1)/n)*y3(n-1)+x3(n)/n; y4(n)=((n-1)/n)*y4(n-1)+x4(n)/n; y5(n)=((n-1)/n)*y5(n-1)+x5(n)/n;end plot(y3,'ro')title('Linealidad del sistema 2')hold onplot(alfa*y1+beta*y2,'g*');xlabel('n')disp('Pulse una tecla')pauseclfstem(y4,'r')title('Estabilidad del sistema 2')xlabel('n')disp('Pulse una tecla')pauseclfplot(y5,'ro') title('Invarianza temporal sistema 2')plot([zeros(1,ret) y1(1:N-ret)],'g*');xlabel('n')disp('Pulse una tecla')pause

Page 14: Practica Con Matlab
Page 15: Practica Con Matlab

10. La primera aplicación de la auto correlación de una señal es determinar las posibles repeticiones de patrones en las señal. Para probar este punto se va a generar una sinusoide de frecuencia igual a 100hz con amplitud 1 y muestreada a 1Khz (consideremos una secuencia de 100 puntos). Determinar la autocorrelación de esta señal normalizada a uno y represéntela junto a la secuencia .¿qué conclusiones se puede sacar?

%Generación de la señaln=0:99;x=cos(2*pi*n*0.1);%cálculo de la autocorrelacióny=xcorr(x,'coeff');%Respuesta de las dos señalessubplot(211),stem(x,'k'),title('(a)')subplot(212),stem(y,'k'),title('( b)')xlabel('Muestras')Podemos que la autocorrelación tiene una longitud doble a la señal temporal.

Page 16: Practica Con Matlab

CONCLUSIONES:

Se pudo observar que existe una gran diferencia al utilizar diferentes valores de frecuencia al graficar una función.

Se pudo observar que en el procesamiento de señales el aliasing es el efecto que causa que señales continuas distintas se tornen indistinguibles cuando se muestrean digitalmente.

El aliasing produce que la señal original no puede ser reconstruida de forma unívoca a partir de la señal digital.

RECOMENDACIÓN

Se recomienda seguir realizando estas prácticas ya que podemos observar las diferentes situaciones que se presentan o sus semejanzas.