• No se han encontrado resultados

Proyecto final parte 2. Para esta parte veremos la transformada de Fourier (discreta) mediante MatLab, con el

N/A
N/A
Protected

Academic year: 2021

Share "Proyecto final parte 2. Para esta parte veremos la transformada de Fourier (discreta) mediante MatLab, con el"

Copied!
10
0
0

Texto completo

(1)

Proyecto final parte 2    Para esta parte veremos la transformada de Fourier (discreta) mediante MatLab, con el  comando FFT.  Como vamos a trabajar con frecuencias, podremos ahora analizar los sistemas  para filtros.  Esta parte del  proyecto consta de dos secciones (Teórica y práctica)  Se les pide contestar estas preguntas.  1. ¿Qué es FFT en matlab y cómo funciona de forma práctica?    Practica 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.  2. Que es un filtro Butterworth y como se utiliza en matlab (butter)?    Practica 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.  3. ¿Por qué la voz es una señal aleatoria?(graba tres veces tu voz diciendo alguna vocal,  durante un tiempo, Ej.“aaaaaaaa”  y checa para cada vez que grabaste las graficas en  tiempo y en frecuencia y responde si son o no iguales las graficas y espectros.)  Practica 3. grabe, reproduzca y grafique en tiempo y en frecuencia, tu propia voz;  siguiendo el  programa de matlab dado.  4. Escuche las señales senoidales de la practica 1.  5. Sume una de las señales senoidales del  punto 1, con las señales del punto 3(tu voz),  una a una.(3 sumas)  6. Aplique los tres filtros de punto 2 al punto 5 una a una. Con el punto 5. (9  combinaciones)  7. Presente conclusiones de que hizo y para que se hizo.  8. Problema 1: Suponga un locutor grabando con un ruido GIS    (frec. Aguda= suponga 15 000hz), debemos limpiar la señal.   9. Problema2: Suponga que se grabó una canción (puede grabar una música que  contenga platillos(agudos), tambores(grave)), con gis. Limpie señal.  10. Problema 3: Suponga Locutor grabado con ruido blanco(aparece en todo el espectro  de frecuencias). Limpie lo mejor posible la señal  11. Problema 4: Suponga canción con ruido blanco. Limpie lo mejor posible la señal.  12. Enviar a mail profesora_elizabeth@yahoo.com.mx, hasta el lunes 18 de mayo.   

(2)

              Laboratorios de señales y sistemas EFCH  %Lab. 1. Desplejando senoidal y cosenoidal en el dominio del tiempo  clear all clc A=4; f=1; %frecuencia fundamental hz w0=2*pi*f; t=0:.001:1; fase=pi/6; senoidal=A*sin(w0*t+fase); figure(1) plot(t,senoidal) cosenoidal= A*cos(w0*t+fase); figure(2) plot(t,cosenoidal) %Lab.2  Desplegando una señal senoidal en el dominio del tiempo y de la frecuencia.  clear all clc A=4; f=100; %hz T=1/f; %Periodo de señal Tm=3*T; %Duración de muestra w0=2*pi*f; N=50; %Num muestras

tao=Tm/N; %intervalo muestreo t=0:tao:Tm;

fs=1/tao; %frecuencia muestreo df=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ía stem(fref,simple)

figure(3)

tfsin=abs(fftshift(fft(senoidal/length(senoidal))));% desplazamos stem(fref,tfsin)

figure(4) %para frecuencias positivas

(3)

axis([0,1000,0,4]) %debe  aparecer  una espiga grande de magnitud A=4;  exactamente a la frecuencia pedida  f=100 hz ahora llamada frecuencia fundamental, y lo demás son armónicos o frecuencias  múltiplos con magnitud pequeña.          

%lab3 Sumando dos señales clear all clc A=4; f1=100; %hz f2=300; T1=1/f1; %Periodo de señal T2=1/f2;

Tm=3*T2;%Duraciòn de muestra de la frec mas grande w01=2*pi*f1;

w02=2*pi*f2;

N=256; %Num muestras, potencia de dos grande tao=Tm/N; %intervalo muestreo

t=0:tao:Tm;

fs=1/tao; %frecuencia muestreo df=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 on plot(t,senoidal2,'r') figure(3) tfsin=abs(fftshift(fft(senoidal)/length(senoidal)));% desplazamos stem(fref,tfsin)

figure(4) %para frecuencias positivas stem(fref,2*tfsin) %multiplico por 2

axis([0,1000,0,2.2*max(tfsin)])%controlando ejes x y y  

 

(4)

clear all clc A=2; f=1000; %frecuencia fundamental hz %Datos de entrada fs=8000; %Dato de entrada N=24000; %Dato de entrada ts=1/fs; T=N*ts; %Duración de la señal stopTime=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)  

Frecuencias de las notas musicales La: 55_110_220_440 / Mi: 165_330_660 / Do: 275_550 Sol: 385_770 / Si: 495 / Re: 605 / Fa: 715    

%Lab5. Comentarios. De manera general este programa graba voz o algún ruido por micrófono, después se escucha la voz en una bocina, después se le suma un ruido(sinoidal), después se filtra ese ruido con el butter, y se escuchara la voz sin ruido.

Pasos para grabar, almacenar y escuchar una voz en matlab. 1) Grabar voz

signal = wavrecord (samples,fs,1,’double’); 2) escuchar lo grabado

wavplay ( signal,fs) 3) grabar a un archivo

[fid,message] = fopen (’voz.dat’,'wt’); fprintf(fid,’%f\n’,signal);

fclose(fid);

(5)

load voz.dat %Crea la variable vozQ12 signal=voz;

clear voz;

5) observar el oscilograma del espectro plot(signal);

%Lab. 5. Programa completo que graba una voz en matlab, y la mezcla con un tono, luego

%con un filtro le quita el ruido y queda la voz limpia.

%Este programa servirá como base para que el alumno lo modifique y realice su %proyecto final.

tiempoReg = 5; %-Periodo de la grabación

fs = 44100; %-Frecuencia de muestreo NO MODIFICAR farm = 200; %-Frecuencia fundamental

samples = fs*tiempoReg; %-Num de muestras

display(’****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 s if (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 grabado

display(’.');

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 B display(’.');

display(’Se tomará una frase ya grabada en disco’) load voz.dat %Crea la variable vozQ12

signal=voz; clear voz;

opcion=input(’Desea escuchar el archivo? ‘,’s’); if (opcion==’s’||opcion==’S')

wavplay ( signal,fs) %Para escuchar lo grabado end

end

%******************************************************** % señal: oscilograma y espectro

%

(6)

% 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 DFT

frecDomain=fs*(0:samples-1)’/samples; %Dominio de la frecuencia en Hz figure(2);plot(frecDomain(400:44100),abs(signalw(400:44100)));%exhibicióndel espectro

title(’Espectro de la señal de voz’); display(’.');

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 DFT

frecDomain=fs*(0:samples-1)’/samples; %Dominio de la frecuencia en Hz figure(4);plot(frecDomain(400:44100),abs(noisySignalw(400:44100))); %exhibición del espectro

title(’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 grabado end

%******************************************************** % filtrado( señal + ruido): oscilograma y espectro

%******************************************************** display(’.');

display(’********************************************************’); display(’ filtrado( señal + ruido): oscilograma y espectro’);

(7)

display(’.');

display(’Presione una tecla para observar el oscilograma y el espectro’); input(’de la señal + ruido’);

%%%%%%%%%%%%%%%%%%%%%%Filtro supresor de banda orden=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 DFT

frecDomain=fs*(0:samples-1)’/samples; %Dominio de la frecuencia en Hz figure(6);plot(frecDomain(400:44100),abs(filteredSignalw(400:44100))); %exhibición del espectro

title(’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 grabado end

%******************************************************** display(’.');

display(’Presione una tecla para observar la respuesta’); input(’en frecuencia del filtro’);

[H,W]=freqz(b,a,256); %256 muestras W=W*fs/(2*pi);

figure(7);plot(W(1:128),abs(H(1:128)));

%para producir ruido blanco es con randn(); o wgn.

% http://www.it.uniovi.es/old/material/telematica/ftd/Practica2.pdf     clear all clc %filtro pasaaltas

[b,a]=butter(9,0.7,'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. %anteriores

%filtro pasabajas de 5 orden que corte en 300hz

[b,a]=butter(5,300/500,'low'); %Se establece los parámetros del filtro figure(2)

Freqz(b,a,128,1000); %Gráfica de la frecuencia en decibeles y defazamiento de ángulo.

(8)

%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 dominio

figure(3) 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(4) bodemag(H)

(9)

  Ejemplos de valores butter para mover la frecuencia de corte. El valor es entre 0 y 1 en cada  extremo, al centro .5 mas a la derecha 0.7, o más a la izquierda  .3, por ejemplo.   Este método es para evitar utilizar la frecuencia de muestreo que verán en las próximas  materias y sabrán utilizar.   

%INFORMACION SACADA DE PDF TUTORIALCONTROLTOOLBOX

%ADICIONALMENTE PARA ENCONTRAR LAS RAICES EN CAP3 DE EBOOK MATLAB Y SIST

t = [0:0.2:20]';%no comentar wn = 1; % no comentar

(10)

%SISTEMA ESTABLE.

d = 2; %descomentar parte e

den = [1,2*d*wn,wn^2]; %fin de descomentar parte e %SISTEMA OSCILATORIO

% d = 0; %descomentar parte o

% den = [1,2*d*wn,wn^2]; %descomentar parte i %SISTEMA INESTABLE

% d = -0.1; %descomentar parte i

% den = [1,2*d*wn,wn^2]; %descomentar parte i

ye = step (num,den,t); figure (1)

plot (t,ye);

title ('Respuesta a un escalon unitario'); xlabel ('tiempo(seg)'); grid; figure(2) impulse (num,den,t); ramp = t; y = lsim (num,den,ramp,t); figure(3) plot (t,y,t,ramp);

title ('Respuesta a una rampa'); xlabel ('tiempo(seg)');

noise = rand (size(t)); y = lsim (num,den,noise,t); figure(4)

plot (t,y,t,noise);

title ('Respuesta a un ruido aleatorio'); xlabel ('tiempo(seg)'); figure(5) pzmap(num,den) figure(6) bode(num,den) figure(7) freqz(num, den, 128, 1000)  

Referencias

Documento similar

Rania Elsayed , Investigadora en Computación e información, División de Formación Científica y Educación Continua, Autoridad Nacional para Teledetección y Ciencias Espaciales,

En el caso de voz onomatopéyica hay dos modalidades, voz entrenada y voz sin entrenar. En el caso de voz entrenada cada usuario tiene su propia grabación de entrenamiento y

Seguidamente conectamos a la bocina encargada de alimentar la antena parabólica uno de los amplificadores de bajo ruido (LNA), para lo que tuvimos que emplear algunas de

The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,

Este proyecto se basa en la utilización de un simulador de bucle local, un simulador de ruido multi-output con dos inyectores de ruido, uno para cada lado del circuito, y

Este documento detalla la estructuración del código fuente del códec y el driver ACM desarrollado, un pequeño manual de instrucciones para su compilación e

Y es que si agotamos los adjetivos del ruido, nos encontramos con un montón: ruido apocalíptico, ruido lejano, ruido obsceno, ruido egoísta, ruido ligero,

Esta tesis aborda el problema del reconocimiento automático de voz en condiciones de ruido. A fin de mejorar su robustez, a lo largo de este trabajo se examinarán