analisis de se+æales aleatorias

13
ANALISIS DE SEÑALES ALEATORIAS INTRODUCCIÓN: Señal aleatoria: su fase, frecuencia y amplitud son desconocidas y no se pueden predecir antes de observar la señal. Los valores futuros de la señal no se pueden predecir a partir de los observados. La señal de voz es una señal especial pues codifica mediante sonidos el lenguaje hablado. Se organiza jerárquicamente: Diálogo, Frase, Palabra, Sílaba, Fonema Y Sonido Señal aleatoria: Existe incertidumbre sobre el valor que tomará la señal (previo a su ocurrencia). Una señal aleatoria, tiene mucha fluctuación respecto a su comportamiento. Los valores futuros de una señal aleatoria no se pueden predecir con exactitud, solo se pueden basar en los promedios de conjuntos de señales con características similares. Señal Aleatoria OBJETIVO: Aprender a aplicar la transformada de Fourier en Matlab y sus variantes con el Análisis de Voz De Igual Forma aprender a aplicar transformada de Fourier (discreta) mediante MatLab, con el comando FFT. MATERIAL: MICROFONO COMPUTADORA SOFTWARE MATLAB 1. ¿Qué es FFT en matlab y cómo funciona de forma práctica? La Transformada Rápida de Fourier (Fast Fourier Transform) (FFT) es un algoritmo eficiente O(NlogN) para calcular la DFT •orignalmente descubierta por Gauss a primcipios de 1800 •redescubierta por Cooley y Tukey en IBM durante 1960

Upload: netbom

Post on 25-Dec-2015

2 views

Category:

Documents


0 download

DESCRIPTION

pds

TRANSCRIPT

Page 1: ANALISIS DE SE+æALES ALEATORIAS

ANALISIS DE SEÑALES ALEATORIAS

INTRODUCCIÓN:

Señal aleatoria: su fase, frecuencia y amplitud son desconocidas y no se pueden predecir antes de observar la señal. Los valores futuros de la señal no se pueden predecir a partir de los observados.

La señal de voz es una señal especial pues codifica mediante sonidos el lenguaje hablado. Se organiza jerárquicamente: Diálogo, Frase, Palabra, Sílaba, Fonema Y Sonido

Señal aleatoria: Existe incertidumbre sobre el valor que tomará la señal (previo a su ocurrencia).

Una señal aleatoria, tiene mucha fluctuación respecto a su comportamiento. Los valores futuros de una señal aleatoria no se pueden predecir con exactitud, solo se pueden basar en los promedios de conjuntos de señales con características similares.

Señal Aleatoria

OBJETIVO:

Aprender a aplicar la transformada de Fourier en Matlab y sus variantes con el Análisis de VozDe Igual Forma aprender a aplicar transformada de Fourier (discreta) mediante MatLab, con el comando FFT.

MATERIAL:MICROFONOCOMPUTADORASOFTWARE MATLAB

1. ¿Qué es FFT en matlab y cómo funciona de forma práctica?

La Transformada Rápida de Fourier (Fast Fourier Transform) (FFT) es un algoritmo eficiente O(NlogN) para calcular la DFT•orignalmente descubierta por Gauss a primcipios de 1800•redescubierta por Cooley y Tukey en IBM durante 1960•C.S. Burrus, de la Universidad de Rice University siendo jefe del departamento de Ingeniería, literalmente "escribió el libro" de los algoritmos de la rápida Transformada

Discreta de Fourier DFT.

La FFT explota las simetrías en la matriz W para aproximarse "divide y conquistaras". No hablaremos del actual algoritmo de la FFT aquí, veamos estas notas si usted está interesado en leer más a cerca de la idea detrás de la FFT.

Page 2: ANALISIS DE SE+æALES ALEATORIAS

>> X = fft(x)Hace la FFT del vector x. “X” es un vector de números complejos ordenados desde k=0...N-1.Se recomienda que la longitud del vector x sea una potencia de 2. Lo que no se recomienda es que la longitud de x sea un número primo.Otra opción del la FFT es especificar el número de puntos con el que se quiere hacer la FFT.>> X = fft(x,N)Si la longitud de x es menor que N, el vector se rellena con ceros. Si es mayor, el vector es truncado.>> x = ifft(X)Hace la FFT inversa del vector X. También se puede especificar el número de puntos N con el que quiero hacer la IFFT.>> x = ifft(X,N)>> X = fftshift(X)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 frecuencia.

2. Que es un filtro Butterworth y como se utiliza en matlab (butter)?El filtro de Butterworth es uno de los filtros electrónicos más básicos, diseñado para producir la respuesta más plana que sea posible hasta la frecuencia de corte. En otras palabras, la salida se mantiene constante casi hasta la frecuencia de corte, luego disminuye a razón de 20ndB por década, donde n es el número de polos del filtro.

¿Por qué la voz es una señal aleatoria?

Forma de onda de la palabra 'Explorador'.

La señal de voz está constituida por un conjunto de sonidos generados por el aparato fonador. Esta señal acústica puede ser transformada por un micrófono en una señal eléctrica. La señal de voz en el tiempo puede ser representada en un par de ejes cartesianos. Como todos los sonidos, está formado esencialmente por curvas elementales (senos y cosenos) pero las posibles combinaciones de éstas pueden ser complejas. A manera de ejemplo, se muestra la forma de onda de la palabra ‘explorador’. La representación de la señal de voz en función del tiempo es importante puesto que brinda información sobre características importantes como la energía y los cruces por cero, las cuales facilitan su estudio y análisis.

DESARROLLO:

Ejercicio 1: Realice un programa en matlab de un seno a una frecuencia de 300hz, 1000hz y 5000hz, graficar en tiempo, aplicar el FFT y graficar.

Page 3: ANALISIS DE SE+æALES ALEATORIAS

PARA LA FRECUENCIA DE 300 Hz Seria esta la respuesta y continúe con las otras.

Dominio en el tiempo Dominio en la frecuencia

Ejemplos para seguir y generar un excelente programa al respecto de las figuras:

1.-

Tinicial=0; % Definimos el tiempo inicial Tfinal=0.01; % Definimos el tiempo final step=0.001; % Definimos el paso entre instantes de tiempo t=Tinicial:step:Tfinal-step; % Se genera el vector de tiempos y=1*sin(300*2*pi*t); % Se genera y plot(t,y); hold on; % Dibujamos y------------------------------------------------------------------------------------------------------------------------clear allclcA=4;f=1000; %hzfs=4400;T=1/f; %Periodo de señalTm=3*T; %Duraciòn de muestraw0=2*pi*f;N=50; %Num muestrastao=Tm/N; %intervalo muestreot=0:tao:Tm;fs=1/tao; %frecuencia muestreodf=fs/N;fref=-fs/2:df:fs/2;fase=pi/6;senoidal=A*sin(w0*t+fase);figure(1)plot(t,senoidal)figure(3)tfsin=abs(fftshift(fft(senoidal))); %k=[?N/2+1:N/2] stem(fref,tfsin)

Page 4: ANALISIS DE SE+æALES ALEATORIAS

--------------------------------------------------------------------------------------------------------------clear allclcA=4;f=5000; %hzT=1/f; %Periodo de señalTm=3*T; %Duración de muestraw0=2*pi*f;N=50; %Num muestrastao=Tm/N; %intervalo muestreot=0:tao:Tm;fs=1/tao; %frecuencia muestreodf=fs/N;fref=-fs/2:df:fs/2;fase=pi/6;senoidal=A*sin(w0*t+fase);figure(1)plot(t,senoidal)figure(2)simple=fft(senoidal) %No da como deberíastem(fref,simple)figure(3)tfsin=abs(fftshift(fft(senoidal/length(senoidal))));% desplazamosstem(fref,tfsin)figure(4) %para frecuencias positivasstem(fref,2*tfsin) %multiplico por 2 y obtengo lo que debe apareceraxis([0,1000,0,4])

2.-

Obtenga la transformada de Fourier de una señal exponencial modulada en amplitud con una frecuencia de portadora de 200Hz, x(t)=exp(-2·t)·sin(2·pi·200·t).

% Ejemplo de una ffT de una señal exponencial modulada en amplitud% con una frecuencia portadora de 200Hz.% Definicion de la señalt=-0.25:0.001:0.25;x=exp(-2*t).*sin(2*pi*200*t);% Representacion en el tiemposubplot(3,1,1);plot(t,x);title('x(t)=exp(-2t)·sin(2·pi·200·t)');xlabel('Tiempo (t)');ylabel('x(t)');% Transformada de FourierX=fftshift(fft(x));% Magnitud y fase de la transformadaXm=abs(X);Xf=unwrap(angle(X))*180/pi;% Base de frecuenciasdelta_t = t(2)-t(1);f = ((1:length(t)) - ceil(length(t)/2)) / length(t) / delta_t;% Representacion en frecuenciasubplot(3,1,2);plot(f,Xm,'r');

Page 5: ANALISIS DE SE+æALES ALEATORIAS

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)');

A partir de la transformada de Fourier, es posible reconstruir la señal en el dominio del tiempo. El comando ifft() sirve para obtener la transformada inversa de Fourier de una serie de números complejos:

>> x=ifft(X);

3.-

Obtenga la transformada de Fourier de una señal exponencial modulada en amplitud, x(t)=exp(-2·t)·sin(2·pi·3·t). Realice la transformada inversa y obtenga la señal en el tiempo a partir de su transformada.

% Ejemplo de una ffT de una señal exponencial modulada en amplitud% Obtención de la señal en el tiempo a partir de su transformada% Definicion de la señalt=-0.25:0.001:0.25;x=exp(-2*t).*sin(2*pi*3*t);% Representacion en el tiempofigure(1);plot(t,x);title('x(t)=exp(-2t)·sin(2·pi·200·t)');xlabel('Tiempo (t)');ylabel('x(t)');% Transformada y representacion en frecuenciaXt=fft(x);X=fftshift(Xt);% Magnitud y fase de la transformadaXm=abs(X);Xf=unwrap(angle(X))*180/pi;% Base de frecuenciasdelta_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)');

% Obtener la señal en el dominio del tiempo a partir de su transformadaxrec=ifft(Xt);figure(3);plot(t,xrec);title('Transformada inversa')xlabel('Tiempo (t)');ylabel('xrec(t)');

Page 6: ANALISIS DE SE+æALES ALEATORIAS

4.-

clearclose allclcf1=90;f2=100;f3=240;f4=360;fm=input('Frecuencia de muestreo (Hz) ');tt=input('Duración del muestreo en ms ');N=input('Longitud de la DFT aumentada ');t=(fm*tt)*0.001;x1=cos(2*pi*(f1/fm)*(0:t-1))+cos(2*pi*(f2/fm)*(0:t-1));x2=x1+cos(2*pi*(f3/fm)*(0:t-1))+cos(2*pi*(f4/fm)*(0:t-1));y=fft(x2);t1=0:(fm/t):fm-(fm/t);plot(t1,abs(y),'*-r');yy=fft(x2,N);hold ont2=0:(fm/N):fm-(fm/N);plot(t2,abs(yy),'+-k')axis([0 fm/2 0 max([abs(y) abs(yy)])]);grid--------------------------------------------------------------------------------------------------------------------------clear allclcA=4;f1=100; %hzf2=300;T1=1/f1; %Periodo de señalT2=1/f2;Tm=3*T2;%Duraciòn de muestra de la frec mas grandew01=2*pi*f1;w02=2*pi*f2;N=256; %Num muestras, potencia de dos grandetao=Tm/N; %intervalo muestreot=0:tao:Tm;fs=1/tao; %frecuencia muestreodf=fs/N;fref=-fs/2:df:fs/2;fase=pi/16;senoidal1=A*sin(w01*t+fase);senoidal2=A*sin(w02*t+fase);senoidal=senoidal1+senoidal2;%finalmente las sumo.%plot(senoidal)figure(1)plot(t,senoidal1)hold onplot(t,senoidal2,'r')figure(3)tfsin=abs(fftshift(fft(senoidal)/length(senoidal)));% desplazamosstem(fref,tfsin)figure(4) %para frecuencias positivas

Page 7: ANALISIS DE SE+æALES ALEATORIAS

stem(fref,2*tfsin) %multiplico por 2axis([0,1000,0,2.2*max(tfsin)])%controlando ejes x y y

Dos señales

Ejercicio 2.- Realice un programa en matlab para graficar el filtro, multiplique por un seno y grafique la señal de salida; el filtro debe ser pasabajas, pasaaltas, pasamedias.

En base al siguiente código mostramos el pasa altas fig1 y pasa bajas fig2

%filtro pasaaltas[b,a]=butter(9,300/500,'high') %[b,a]=butter(n,Wn,'Tipo')figure(1)Freqz(b,a,128,1000) %similar a bode. Freqz es lineal. Bode logaritmico%freqz(num, den,w) se puede sust en los prog.%anterioresfigure(2)%H=tf(a,b)bode(b,a)%freqz(b,a)%filtro pasabajas de 5 orden que corte en 300hz[b,a]=butter(5,300/500,'high'); %Se establece los parámetros del filtrofigure(3)

Page 8: ANALISIS DE SE+æALES ALEATORIAS

Freqz(b,a,128,1000); %Gráfica de la frecuencia en decibeles y desfasamiento de ángulo.%respuesta al impulso de un filtro pasabandas de 100 a 200hz de 5orden.n=5;Wn=[100 200]/500; %parámetros del filtro[b,a]=butter(n,Wn); %comando para un filtro butterworth[y,t]=impz(b,a,101); %cambio de dominiofigure(4)stem(t,y)%otro filtro pasobajos[n,Wn]=buttord(2*pi*1000,2*pi*2000,1,30,'s')[nu,de]=butter(n,Wn,'s')[z,p,k]=buttap(n)H=tf(nu,de)figure(5)bodemag(H)figure(6)freqz(nu,de);

Escuchando una senoidalclear allclcA=2;f=1000; %frecuencia fundamental hz%Datos de entradafs=8000; %Dato de entradaN=24000; %Dato de entradats=1/fs;T=N*ts; %Duración de la señalstopTime=T*(1-1/N);t=0:ts:stopTime;w0=2*pi*f;fase=pi/6;senoidal=A*sin(w0*t+fase);figure(1)plot(t,senoidal)axis([0,0.003,-1.2*A,1.2*A])wavplay ( senoidal,fs)

Page 9: ANALISIS DE SE+æALES ALEATORIAS

Ejercicio 3. Grabe, reproduzca y grafique en tiempo y en frecuencia, tu propia voz; siguiendo el programa de matlab dado.Diagramas de las notas musicales

Primer sonido LaEstas pueden graficarse con el siguiente programa:

clear allclcA=2;%Aquí se modifica la frecuencia para %La: 55_110_220_440%Mi: 165_330_660%Do: 275_550%sol: 385_770%si: 495%Re: 605%Fa: 715f=440; %Frecuencia fundamental en Hz.%Datos de entradafs=8000; %dato de entradaN=24000; %Dato de entradats=1/fs;T=N*ts; %Duracion de la señalstopTime=T*(1-1/N);t=0:ts:stopTime);w0=2*pi*f;fase=pi/6;senoidal=Asin(w0*t+fase);figure(1)plot(t,senoidal)axis([0,0.003 ,−1.2∗A ,1.2∗A ])wavplay(senoidal,fs)

Así también grabe, reproduzca y grafique en tiempo y en frecuencia, tu propia voz; realizando algún programa en Matlab, aplicando además una función ventana.

%Este programa sirve como muestra para que ser usadotiempoReg = 5; %-Periodo de la grabaciónfs = 44100; %-Frecuencia de muestreo NO MODIFICARfarm = 200; %-Frecuencia fundamental

Page 10: ANALISIS DE SE+æALES ALEATORIAS

samples = fs*tiempoReg; %-Num de muestrasdisplay('****MENU DE OPCIONES DE SEÑAL****');display('.');display(' a) Muestreo de voz');display(' b) Recuperar una muestra de voz ya grabada');display('.');opcion=input('Elija una opción ','s'); %debes oprimir tecla sif (opcion=='a'||opcion=='A')display('.');display('Se muestreará a 44100Hz por 5 segundos');input('Presiona cualquier tecla para empezar a grabar');signal = wavrecord (samples,fs,1,'double');display('.');input('Presiona cualquier tecla para reproducir lo grabado');wavplay ( signal,fs) %Para escuchar lo grabadodisplay('.');display('El registro de voz quedará en un archivo de disco: “voz.dat”');[fid,message] = fopen ('voz.dat','wt');fprintf(fid,'%f\n',signal);fclose(fid);elseif (opcion=='b'||opcion=='B') %deberás oprimir b o Bdisplay('.');display('Se tomará una frase ya grabada en disco')load voz.dat %Crea la variable vozQ12signal=voz;clear voz;opcion=input('Desea escuchar el archivo? ','s');if (opcion=='s'||opcion=='S')wavplay ( signal,fs) %Para escuchar lo grabadoendend%********************************************************% señal: oscilograma y espectro%% variables% signal : contiene oscilograma% signalw : contiene espectro% frecDomain : contiene dominio frecuencia%********************************************************display('.');display('********************************************************');display(' señal: oscilograma y espectro');display('********************************************************');display('.');display('Presione una tecla para observar el oscilograma y el espectro');input('de la señal de voz');figure(1); plot(signal);title('Oscilograma de la señal de voz');ylabel('Amplitud');signalw=fft(signal,samples); %Cálculo de la DFTfrecDomain=fs*(0:samples-1)'/samples; %Dominio de la frecuencia en Hzfigure(2);plot(frecDomain(400:44100),abs(signalw(400:44100)));%exhibición del espectrotitle('Espectro de la señal de voz');display('.');

Page 11: ANALISIS DE SE+æALES ALEATORIAS

display('********************************************************');display(' señal + ruido: oscilograma y espectro');display('********************************************************');display('.');display('Presione una tecla para observar el oscilograma y el espectro');input('de la señal + ruido');t=(0:1/fs:tiempoReg)';t=t(1:samples);noisySignal = signal + 0.01*sin(2*pi*farm*t);figure(3);plot(noisySignal(1:samples));title('Oscilograma de la señal + ruido');ylabel('Amplitud');noisySignalw=fft(noisySignal,samples); %Cálculo de la DFTfrecDomain=fs*(0:samples-1)'/samples; %Dominio de la frecuencia en Hzfigure(4);plot(frecDomain(400:44100),abs(noisySignalw(400:44100)));%exhibición del espectrotitle('Espectro de la señal + ruido');ylabel('Amplitud');xlabel('Frecuencia en Hz');opcion=input('Desea escuchar el archivo? ','s');if (opcion=='s'|| opcion=='S')wavplay ( noisySignal,fs) %Para escuchar lo grabadoend%********************************************************% filtrado( señal + ruido): oscilograma y espectro%********************************************************display('.');display('********************************************************');display(' filtrado( señal + ruido): oscilograma y espectro');display('********************************************************');display('.');display('Presione una tecla para observar el oscilograma y el espectro');input('de la señal + ruido');%Filtro supersor de bandaorden=3;[b,a] = butter(orden,[(farm-30)*2/fs,(farm+30)*2/fs],'stop');filteredSignal=filter(b,a,noisySignal);figure(5);plot(filteredSignal(1:samples));title('Osilograma de la señal + ruido fitlrada');ylabel('Amplitud');filteredSignalw=fft(filteredSignal,samples); %Cálculo de la DFTfrecDomain=fs*(0:samples-1)'/samples; %Dominio de la frecuencia en Hzfigure(6);plot(frecDomain(400:44100),abs(filteredSignalw(400:44100)));%exhibición del espectrotitle('Espectro de la filtro señal + ruido');ylabel('Amplitud');xlabel('Frecuencia en Hz');opcion=input('Desea escuhcar el archivo? ','s');if (opcion=='s'||opcion=='S')wavplay ( filteredSignal,fs) %Para escuchar lo grabadoend%********************************************************display('.');display('Presione una tecla para observar la respuesta');input('en frecuencia del filtro');

Page 12: ANALISIS DE SE+æALES ALEATORIAS

[H,W]=freqz(b,a,256); %256 muestrasW=W*fs/(2*pi);figure(7);plot(W(1:128),abs(H(1:128)))