U NIVERSIDAD NACIONAL DE S AN A NTONIO A BAD DEL C USCO FACULTAD DE I NGENIERÍA E LÉCTRICA , E LECTRÓNICA , I NFORMÁTICA Y M ECÁNICA E SCUELA P ROFESIONAL DE I NGENIERÍA E LECTRÓNICA SEÑALES ALEATORIAS, FILTROS DIGITALES IIR, FIR Asignatura: I NSTRUMENTACIÓN E LECTRÓNICA Docente : Palomino Peña, Celso Alumno : : Chirme Sisa, David Cusco - Perú 2022 - II 182960 Í NDICE GENERAL 1. Espectro de señales determinísticas 2 1.1. Estime el espectro de las siguientes señales determinísticas . . . . . . . . . . . . . . 2 1.1.1. Una señal sinusoidal con una frecuencia de 1.2 Hz . . . . . . . . . . . . . . 2 1.1.2. Una señal compuesta de varias sinusoides : 0.6 Hz, 2.4 Hz, 3.2 Hz. . . . . . . 3 1.2. Periodogramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3. Espectrogramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2. Filtros digitales IIR - FIR 13 2.1. Filtro digital IIR Elíptico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2. Filtro FIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3. Espectro de señales aleatorias y procesamiento de audio 21 3.1. Ruido Blanco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2. Análisis de señales de voz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2.1. Análisis de la vocal A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2.2. Análisis de la vocal E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.2.3. Análisis de la vocal I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.2.4. Análisis de la vocal O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.2.5. Análisis de la vocal U . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4. Filtro adaptativo 38 1 C APÍTULO 1: E SPECTRO DE SEÑALES DETERMINÍSTICAS 1.1. 1.1.1. Estime el espectro de las siguientes señales determinísticas Una señal sinusoidal con una frecuencia de 1.2 Hz La señal que que se analizará es: X(t) = sin(2π(1.2)t) (1.1) El código para generar la señal en el dominio del tiempo y la frecuencia se muestra a continuación: % a ) onda senoidal de 1.2 Hz % datos 3 f = 1.2; % frecuencia de la onda 4 Fs = 100; % frecuencia de muestreo >= 2 f 5 T = 1/ Fs ; % periodo de muestras 6 L = 500; % longitud de la onda 7 t = (0: L -1) * T ; 1 2 8 9X = sin (2* pi * f * t ) ; % grafica en el dominio del tiempo 11 subplot (2 , 1 , 1) ; 12 plot (t , X ) ; grid on 13 title ( 'X ( t ) en el tiempo ') 14 xlabel ( 't ( s ) ') 15 ylabel ( 'X ( t ) = sin (2\ pi 1.2 t ) ') 16 % dominio de la frecuencia 17 Y = fft ( X ) ; 18 P2 = abs ( Y / L ) ; % espectro bilateral 19 P1 = P2 (1: L /2+1) ; % espectro unilateral 20 P1 (2: end -1) = 2* P1 (2: end -1) ; 21 % graficar el espectro 22 subplot (2 , 1 , 2) 23 f = Fs *(0:( L /2) ) / L ; 24 plot (f , P1 ) ; grid on 25 title ( ' Espectro de X ( t ) ') 26 xlabel ( 'f ( Hz ) ') 27 ylabel ( '| P1 ( f ) | ') 10 En la figura 1.1 se tiene la onda en el tiempo y la frecuencia. 2 Figura 1.1: Señal en el tiempo y la frecuencia 1.1.2. Una señal compuesta de varias sinusoides : 0.6 Hz, 2.4 Hz, 3.2 Hz. Para este caso se tiene: X(t) = sin(2π(0.6)t) + 0.5sin(2π(2.4)t) + 0.8sin(2π(3.2)t) El código para generar las ondas en el tiempo y frecuencia se muestra a continuación: % b ) onda compuesta de % 2.4 Hz y 3.2 Hz 3 % datos 4 f1 = 0.6; % frecuencia 5 f2 = 2.4; % frecuencia 6 f3 = 3.2; % frecuencia 7 Fs = 100; % frecuencia 8 T = 1/ Fs ; % periodo de 9 L = 500; % longitud de 10 t = (0: L -1) * T ; 1 senoides de 0.6 Hz 2 de la onda1 de la onda2 de la onda3 de muestreo >= max ( f1 , f2 , f3 ) muestras la onda 3 (1.2) 11 12 X = sin (2* pi * f1 * t ) + 0.5* sin (2* pi * f2 * t ) + 0.8* sin (2* pi * f3 * t ) ; % grafica en el dominio del tiempo 14 subplot (2 , 1 , 1) ; 15 plot (t , X ) ; grid on 16 title ( 'X ( t ) = sin (2\ pi (0.6) t ) + 0.5 sin (2\ pi (2.4) t ) + 0.8 sin (2\ pi (3.2) t ) ') 17 xlabel ( 't ( s ) ') 18 ylabel ( 'X ( t ) ') 19 % dominio de la frecuencia 20 Y = fft ( X ) ; 21 P2 = abs ( Y / L ) ; % espectro bilateral 22 P1 = P2 (1: L /2+1) ; % espectro unilateral 23 P1 (2: end -1) = 2* P1 (2: end -1) ; 24 % graficar el espectro 25 subplot (2 , 1 , 2) 26 f = Fs *(0:( L /2) ) / L ; 27 plot (f , P1 ) ; grid on 28 title ( ' Espectro de X ( t ) ') 29 xlabel ( 'f ( Hz ) ') 30 ylabel ( '| P1 ( f ) | ') 13 Figura 1.2: Señal en el tiempo y la frecuencia 4 1.2. Periodogramas Realice el cálculo del periodograma de una señal sinusoidal compuesta de tres frecuencias y amplitudes iguales. Grafique los resultados. Considere las frecuencias 0.2, 2, 6 Hz. Evalué y compare resultados utilizando las ventanas de Hammning, Bartlet y Kaiser. Asuma que la frecuencia de muestreo de la señal sinusoidal es de 8 kHz. En procesamiento de señales, el periodograma es la densidad espectral de una señal dada por la ecuación (1.3). S( f ) = |X( f )|2 (1.3) X(t) = sin(2π(0.2)t) + sin(2π(2)t) + sin(2π(6)t) (1.4) La señal a analizar es: El código a continuación se encarga de calcular el periodograma de la señal y también usando las ventanas Hamming, Bartlett y Kaiser. % % periodogramas clear ; 3 % parametros de la onda 4 f1 = 0.2; % frecuencia de la onda1 5 f2 = 2.0; % frecuencia de la onda2 6 f3 = 6.0; % frecuencia de la onda3 7 Fs = 8000; % frecuencia de muestreo 8 T = 1/ Fs ; % periodo de muestras 9 L = 2^ nextpow2 (68000) ; % longitud del vector 10 t = (0: L -1) * T ; % vector tiempo 1 2 clc ; 11 12 X = sin (2* pi * f1 * t ) + sin (2* pi * f2 * t ) + sin (2* pi * f3 * t ) ; % grafica en el dominio del tiempo 14 subplot (2 , 1 , 1) ; 15 plot (t , X ) ; grid on 16 title ( 'X ( t ) = sin (2\ pi (0.2) t ) + sin (2\ pi (2) t ) + sin (2\ pi (6) t ) ') 17 xlabel ( 't ( s ) ') 18 ylabel ( 'X ( t ) ') 19 % dominio de la frecuencia 20 Y = fft ( X ) ; 21 % periodograma - densidad espectral 22 SDP2 = (1/( L * Fs ) ) * abs ( Y ) .^2; % densidad bilateral 23 SDP1 = SDP2 (1: L /2+1) ; 24 % grafica del periodograma 25 subplot (2 , 1 , 2) 26 f = Fs *(0: L /2) / L ; 27 stem (f , SDP1 ) ; grid on 28 title ( ' Periodograma de X ( t ) ') 29 xlabel ( 'f ( Hz ) ') 30 ylabel ( '| P1 ( f ) |^2 ') 13 31 32 %periodograma unsando la ventana hamming 5 33 [ Sxx , f ] = periodogram (X , hamming ( length ( X ) ) ,[0.2 , 2.0 , 6.0] , Fs ) ; % grafica del periograma 35 figure 36 stem (f , Sxx ) ; grid on 37 title ( ' Periodograma - Ventana Hamming X ( t ) ') 38 xlabel ( 'f ( Hz ) ') 39 ylabel ( '| P1 ( f ) |^2 ') 40 %periodograma unsando la ventana bartlett 41 [ Sxx , f ] = periodogram (X , bartlett ( length ( X ) ) ,[0.2 , 2.0 , 6.0] , Fs ) ; 42 % grafica del periograma 43 figure 44 stem (f , Sxx ) ; grid on 45 title ( ' Periodograma - Ventana Bartlett X ( t ) ') 46 xlabel ( 'f ( Hz ) ') 47 ylabel ( '| P1 ( f ) |^2 ') 48 %periodograma unsando la ventana kaiser 49 [ Sxx , f ] = periodogram (X , kaiser ( length ( X ) ) ,[0.2 , 2.0 , 6.0] , Fs ) ; 50 % grafica del periograma 51 figure 52 stem (f , Sxx ) ; grid on 53 title ( ' Periodograma - Ventana Kaiser X ( t ) ') 54 xlabel ( 'f ( Hz ) ') 55 ylabel ( '| P1 ( f ) |^2 ') 34 El resultado se muestra en la figura 1.3 Figura 1.3: Señal en el tiempo y el periodograma 6 Figura 1.4: El periodograma usando la ventana Hamming Figura 1.5: El periodograma usando la ventana Bartlett El periodograma lleva la información de densidad de potencia, y la comparación se muestra en la table 1.1. 7 Figura 1.6: El periodograma usando la ventada Kaiser Frecuencia (Hz) Sin ventana Vent. Hamming Vent. Bartlett Vent. Kaiser 0.2 2.0 2.0 3.287 3.357 2.990 3.012 3.004 3.006 3.077 3.072 3.072 4.173 4.083 4.098 Cuadro 1.1: Tabla de comparación de las ventanas 1.3. Espectrogramas 1.3.a Calcule y grafique un espectrograma de banda ancha de una señal sinusoidal compuesta de tres frecuencias y amplitudes iguales. Grafique los resultados. Considere las frecuencias 0.2, 2, 6 Hz. Evalué y compare resultados utilizando las ventanas de Hammning, Hanning La señal a analizar es: X(t) = sin(2π(0.2)t) + sin(2π(2)t) + sin(2π(6)t) (1.5) El código para generar la señal en el tiempo y el espectrograma de banda ancha se muestra a continuación: 8 % parametros de la onda = 0.2; % frecuencia de la onda1 3 f2 = 2.0; % frecuencia de la onda2 4 f3 = 6.0; % frecuencia de la onda3 5 Fs = 8000; % frecuencia de muestreo 6 T = 1/ Fs ; % periodo de muestras 7 L = 2^ nextpow2 (68000) ; % longitud del vector 8 t = (0: L -1) * T ; % vector tiempo 1 2 f1 9 10 X = sin (2* pi * f1 * t ) + sin (2* pi * f2 * t ) + sin (2* pi * f3 * t ) ; % grafica en el dominio del tiempo 12 subplot (2 , 1 , 1) ; 13 plot (t , X ) ; grid on 14 title ( 'X ( t ) = sin (2\ pi (0.2) t ) + sin (2\ pi (2) t ) + sin (2\ pi (6) t ) ') 15 xlabel ( 't ( s ) ') 16 ylabel ( 'X ( t ) ') 11 17 % espectrograma de banda ancha enfatiza cambios temporales % con periodo de ventanas de 3 ms aprox 20 % el tiempo de duracion de la onda es T_total = T * length ( X ) *1000 [ ms ] 21 % la longitud de la ventana es WL = ( length ( X ) / T_total ) *3 = 24 22 % ventana hamming 23 nfft = 256; 24 window_length = 24; 25 window_func = hamming ( window_length ) ; 26 Noverlap = window_length /2; % numero de punto de solapamiento 27 % calculando el espectrograma 28 subplot (2 , 1 , 2) ; 29 spectrogram (X , window_func , Noverlap , nfft , Fs , ' yaxis ') ; 30 title ( " Espectrograma de banda ancha - Ventana Hamming " ) ; 18 19 31 32 % grafica en el dominio del tiempo 33 figure 34 subplot (2 , 1 , 1) ; X ) ; grid on 36 title ( 'X ( t ) = sin (2\ pi (0.2) t ) + sin (2\ pi (2) t ) + sin (2\ pi (6) t ) ') 37 xlabel ( 't ( s ) ') 38 ylabel ( 'X ( t ) ') 39 % ventana hanning 40 nfft = 256; 41 window_length = 24; 42 window_func = hanning ( window_length ) ; 43 Noverlap = window_length /2; % numero de punto de solapamiento 44 % calculando el espectrograma 45 subplot (2 , 1 , 2) ; 46 spectrogram (X , window_func , Noverlap , nfft , Fs , ' yaxis ') ; 47 title ( " Espectrograma de banda ancha - Ventana Hanning " ) ; 35 plot (t , 9 Figura 1.7: Espectrograma de banda ancha con ventana Hamming Figura 1.8: Espectrograma de banda ancha con ventana Hanning 10 1.3.b Calcule y grafique un espectrograma de banda angosta de una señal sinusoidal compuesta de tres frecuencias y amplitudes iguales. Grafique los resultados. Considere las frecuencias 0.2, 2, 6 Hz. Evalúe y compare resultados utilizando las ventanas de Hammning, Hanning El código se muestra a continuación: % parametros de la onda = 0.2; % frecuencia de la onda1 3 f2 = 2.0; % frecuencia de la onda2 4 f3 = 6.0; % frecuencia de la onda3 5 Fs = 8000; % frecuencia de muestreo 6 T = 1/ Fs ; % periodo de muestras 7 L = 2^ nextpow2 (68000) ; % longitud del vector 8 t = (0: L -1) * T ; % vector tiempo 1 2 f1 9 10 X = sin (2* pi * f1 * t ) + sin (2* pi * f2 * t ) + sin (2* pi * f3 * t ) ; % grafica en el dominio del tiempo 12 subplot (2 , 1 , 1) ; 13 plot (t , X ) ; grid on 14 title ( 'X ( t ) = sin (2\ pi (0.2) t ) + sin (2\ pi (2) t ) + sin (2\ pi (6) t ) ') 15 xlabel ( 't ( s ) ') 16 ylabel ( 'X ( t ) ') 11 17 % espectrograma de banda angosta enfatiza cambios de frecuencia % con periodo de ventanas de 20 ms aprox , lo que implica WL = 160 20 % ventana hamming 21 nfft = 256; 22 window_length = 130; 23 window_func = hamming ( window_length ) ; 24 Noverlap = window_length /2; 25 % calculando el espectrograma 26 subplot (2 , 1 , 2) ; 27 spectrogram (X , window_func , Noverlap , nfft , Fs , ' yaxis ') ; 28 title ( " Espectrograma de banda angosta - Ventana Hamming " ) ; 18 19 29 30 % grafica en el dominio del tiempo 31 figure 32 subplot (2 , 1 , 1) ; X ) ; grid on 34 title ( 'X ( t ) = sin (2\ pi (0.2) t ) + sin (2\ pi (2) t ) + sin (2\ pi (6) t ) ') 35 xlabel ( 't ( s ) ') 36 ylabel ( 'X ( t ) ') 37 % ventana hanning 38 nfft = 256; 39 window_length = 130; 40 window_func = hanning ( window_length ) ; 41 Noverlap = window_length /2; % numero de punto de solapamiento 42 % calculando el espectrograma 43 subplot (2 , 1 , 2) ; 44 spectrogram (X , window_func , Noverlap , nfft , Fs , ' yaxis ') ; 45 title ( " Espectrograma de banda angosta - Ventana Hanning " ) ; 33 plot (t , 11 Figura 1.9: Espectrograma de banda angosta con ventana Hamming Figura 1.10: Espectrograma de banda angosta con ventana Hanning 12 C APÍTULO 2: F ILTROS DIGITALES IIR - FIR 2.1. Filtro digital IIR Elíptico Evalúe el comportamiento de un filtro digital IIR Elíptico paso bajo de decimo orden, cuya frecuencia de corte es 3.4 Khz y emplea una frecuencia de muestreo de 8 kHz. Para generar un filtro digital de IIR elíptico se usa el código a continuación. % requer imient os del filtro = 3400; % frecuencia de corte 3 fs = 8000; % frecuencia de muestreo 4 [b , a ] = ellip (10 ,0.1 ,50 , fc /( fs /2) ) ; % creacion del filtro 5 freqz (b ,a ,[] , fs ) % diagrama de bode 1 2 fc La respuesta en frecuencia del filtro se muestra en la figura 2.1. Figura 2.1: Respuesta en frecuencia del filtro 13 a) Determinar la Respuesta al impulso. El código para generar la respuesta al impulso se tiene a continuación: 1 fvtool (b ,a , ' Analysis ' , ' impulse ') Figura 2.2: Respuesta al impulso del filtro b) Determine su magnitud, fase y retardo de grupo El código a continuación calcula la magnitud, fase y retardo de grupo. 1 n =512; 2 [ gd , f ] = grpdelay (b ,a ,n , fs ) ; % retardo de grupo w ]= freqz (b ,a ,[] , fs ) ; % respuesta en frecuencia 4 angulo = unwrap ( angle ( h ) ) ; % obteniendo la fase 5 magnitud = mag2db ( abs ( h ) ) ; % magnitud en dB 6 subplot (3 ,1 ,1) ; 7 plot (w , magnitud ) 8 title ( " Magnitud del filtro " ) ; 9 ylabel ( " Magnitud ( dB ) " ) 10 xlabel ( " f ( Hz ) " ) 11 subplot (3 ,1 ,2) ; 12 plot (w , angulo *180/ pi ) 13 title ( " Fase del filtro " ) ; 14 ylabel ( " Fase (\ circ ) " ) 15 xlabel ( " f ( Hz ) ) " ) 16 subplot (3 ,1 ,3) ; 17 plot (f , gd ) 18 title ( " Retardo de grupo del filtro " ) ; 19 ylabel ( " (\ circ ) / rad " ) 20 xlabel ( " f ( Hz ) " ) 3 [h , 14 Figura 2.3: Magnitud, Fase y Retardo de grupo c) Indique como probaría si el diseño del filtro esta de acuerdo a las especificaciones planteadas Para comprobar el filtro se tiene que generar un onda con varios armónicos y hacer que el filtro cumpla su trabajo. El código a continuación muestra la utilización del filtro. 1 fs = 8000; = 0:1/ fs :1; 3 f1 = 1000; % frecuencia 1 4 f2 = 2000; % frecuencia 2 5 f3 = 3000; % frecuencia 3 6 f4 = 3500; % frecuencia 4 7 f5 = 3600; % frecuencia 5 8 % onda generada 9 X = sin (2* pi * f1 * t ) + sin (2* pi * f2 * t ) + sin (2* pi * f3 * t ) ... 10 + sin (2* pi * f4 * t ) + sin (2* pi * f5 * t ) ; 11 % onda filtrada 12 X_filt = filter (b , a , X ) ; 13 subplot (2 ,2 ,1) ; 14 plot (t , X ) 15 title ( " Onda de prueba " ) ; 16 subplot (2 ,2 ,2) ; 17 profft (X , fs ) 18 title ( " FFT de onda de prueba " ) ; 19 subplot (2 ,2 ,3) ; 20 plot (t , X_filt ) ; 21 title ( " Onda filtrada " ) ; 22 subplot (2 ,2 ,4) ; 23 profft ( X_filt , fs ) 24 title ( " FFT de onda filtrada " ) ; 2t 15 Figura 2.4: Aplicación del filtro IIR 2.2. Filtro FIR Evalúe utilizando el comportamiento de un filtro digital FIR paso bajo de orden 10, cuya frecuencia de corte es 3.4 kHz y emplea una frecuencia de muestreo de 8 kHz El filtro se diseña usando el toolbox fdatool. Exportando el filtro al workspace de Matlab, se tiene el siguiente código para usar estos filtros. % numerador del filtro -0.0708 , 0.0998 , -0.1241 , 0.1403 , 0.8273 , 0.1403 , -0.1241 , ... 3 0.0998 -0.0708 0.0412]; 4 b = Num ; 5 a = 1; 6 %Filtro FIR de orden 10 7 freqz (b ,a ,[] , fs ) 1 2 Num =[0.0412 , 16 Figura 2.5: Diseño del filtro FIR Figura 2.6: Respuesta en frecuencia del filtro FIR a) Respuesta al impulso 1 %Respuesta al impulso a , ' Analysis ' , ' impulse ') 2 fvtool (b , 17 Figura 2.7: Respuesta al impulso del filtro FIR b) Determine su magnitud, fase y retardo de grupo. 1 % Magnitud fase y retardo de grupo 2 n =512; 3 fs =8000; 4 [ gd , f ] = grpdelay (b ,a ,n , fs ) ; % retardo de grupo w ] = freqz (b ,a ,[] , fs ) ; % respuesta en frecuencia 6 angulo = unwrap ( angle ( h ) ) ; % fase 7 magnitud = mag2db ( abs ( h ) ) ; % magnitud 8 subplot (3 ,1 ,1) ; 9 plot (w , magnitud ) 10 title ( " Magnitud del filtro " ) ; 11 ylabel ( " Magnitud ( dB ) " ) 12 xlabel ( " f ( Hz ) " ) 13 subplot (3 ,1 ,2) ; 14 plot (w , angulo *180/ pi ) 15 title ( " Fase del filtro " ) ; 16 ylabel ( " Fase (\ circ ) " ) 17 xlabel ( " f ( Hz ) " ) 18 subplot (3 ,1 ,3) ; 19 plot (f , gd ) 20 title ( " Retardo de grupo del filtro " ) ; 21 ylabel ( " (\ circ ) / rad " ) 22 xlabel ( " f ( Hz ) " ) 5 [h , 18 Figura 2.8: Magnitud, fase y retardo de grupo del filtro FIR c) Indique como probaría si el diseño del filtro esta de acuerdo a las especificaciones planteadas Para comprobar el filtro se tiene que generar un onda con varios armónicos y hacer que el filtro cumpla su trabajo. El código a continuación muestra la utilización del filtro. 1 fs = 8000; = 0:1/ fs :1; 3 f1 = 1000; % frecuencia 1 4 f2 = 2000; % frecuencia 2 5 f3 = 3000; % frecuencia 3 6 f4 = 3500; % frecuencia 4 7 f5 = 3600; % frecuencia 5 8 % onda generada 9 X = sin (2* pi * f1 * t ) + sin (2* pi * f2 * t ) + sin (2* pi * f3 * t ) ... 10 + sin (2* pi * f4 * t ) + sin (2* pi * f5 * t ) ; 11 % onda filtrada 12 X_filt = filter (b , a , X ) ; 13 subplot (2 ,2 ,1) ; 14 plot (t , X ) 15 title ( " Onda de prueba " ) ; 16 subplot (2 ,2 ,2) ; 17 profft (X , fs ) 18 title ( " FFT de onda de prueba " ) ; 19 subplot (2 ,2 ,3) ; 20 plot (t , X_filt ) ; 21 title ( " Onda filtrada " ) ; 22 subplot (2 ,2 ,4) ; 23 profft ( X_filt , fs ) 24 title ( " FFT de onda filtrada " ) ; 2t 19 Figura 2.9: Aplicación del filtro FIR Se observa que el filtro no es tan efectivo como filtro IIR, no obstante tiene un retardo de grupo lineal. 20 C APÍTULO 3: E SPECTRO DE SEÑALES ALEATORIAS Y PROCESAMIENTO DE AUDIO 3.1. Ruido Blanco Para generar el ruido blanco y representar en el dominio temporal y de la frecuencia se usa el siguiente código: % generando el ruido blanco % considerando 3 Fs = 1000; % frecuencia de muestreo 4 L = 10000; % longitud del ruido 5 t = (0: L -1) / Fs ; 6 mu = 0; 7 sigma = 0.5; 8 RB = sigma * randn (L , 1) + mu ; 9 subplot (2 , 1 , 1) ; 10 plot (t , RB ) ; 11 title ( ' Ruido blanco ') 12 xlabel ( 't ( s ) ') 13 ylabel ( ' RB ( t ) ') 1 2 14 % espectro del ruido blanco = fft ( RB ) ; 17 P2 = abs ( Y / L ) ; % espectro bilateral 18 P1 = P2 (1: L /2+1) ; % espectro unilateral 19 P1 (2: end -1) = 2* P1 (2: end -1) ; 20 % graficar el espectro 21 subplot (2 , 1 , 2) ; 22 f = Fs *(0:( L /2) ) / L ; 23 plot (f , P1 ) ; grid on 24 title ( ' Espectro del ruido blanco ') 25 xlabel ( 'f ( Hz ) ') 26 ylabel ( '| P1 ( f ) | ') 15 16 Y 21 Figura 3.1: Ruido blanco en el tiempo y la frecuencia 3.2. Análisis de señales de voz Los archivo de audio se grabaron con el software Audacity a una frecuencia de muestreo de 8kHz y se guardaron con el formato vocal(a,e,etc).wav. Figura 3.2: Grabación del audio con Audacity 22 3.2.1. Análisis de la vocal A Para generar el periodograma, y los espectrogramas de banda ancha y banda angosta se usa el código que sigue: % leer los archivos de audio Fs ] = audioread ( 'a . wav ') ; % vocal a 3 T = 1/ Fs ; 1 2 [X , 4 % vocal en el dominio del tiempo % las grabaciones tienen cada una 7 % frecuencia de muestreo de 8000 Hz 8 t = (0: length ( X ) -1) *1/ Fs ; % vector tiempo , audio a 9 % tomando la porcion importante de datos 10 t = t (3500:6500) ; 11 X = X (3500:6500) ; 12 % grafica en el tiempo 13 subplot (2 , 1 , 1) ; 14 plot (t , X ) ; grid on 15 title ( ' Audio de la vocal a ') 16 xlabel ( 't ( s ) ') 17 ylabel ( 'X ( t ) ') 5 6 18 % dominio de la frecuencia = length ( X ) ; 21 Y = fft ( X ) ; 22 P2 = abs ( Y / L ) ; % espectro bilateral 23 P1 = P2 (1:( L + 1) /2+1) ; % espectro unilateral 24 P1 (2: end -1) = 2* P1 (2: end -1) ; 25 % graficar el espectro 26 subplot (2 , 1 , 2) ; 27 f = Fs *(0:(( L +1) /2) ) / L ; 28 plot (f , P1 ) ; grid on 29 title ( ' Espectro de la vocal a ') 30 xlabel ( 'f ( Hz ) ') 31 ylabel ( '| P1 ( f ) | ') 19 20 L 32 % calculo del periodograma ventana hamming = hamming ( L ) ; 35 [ Sxx , f ] = periodogram (X , win ,1024 , Fs ) ; 36 figure 37 subplot (2 , 1 , 1) ; 38 stem (f , Sxx ) ; grid on 39 title ( ' Periodograma - Ventana Hamming vocal a ') 40 xlabel ( 'f ( Hz ) ') 41 ylabel ( '| P1 ( f ) |^2 ') 42 % calculo del periodograma ventana hanning 43 win = hanning ( L ) ; 44 [ Sxx , f ] = periodogram (X , win ,1024 , Fs ) ; 45 subplot (2 , 1 , 2) ; 46 stem (f , Sxx ) ; grid on 47 title ( ' Periodograma - Ventana Hanning vocal a ') 48 xlabel ( 'f ( Hz ) ') 49 ylabel ( '| P1 ( f ) |^2 ') 33 34 win 50 % % 53 % 54 % 55 % 51 52 espectrograma de banda ancha enfatiza cambios temporales con periodo de ventanas de 3 ms aprox el tiempo de duracion de la onda es T_total = T * length ( X ) *1000 [ ms ] la longitud de la ventana es WL = ( length ( X ) / T_total ) *3 = 24 ventana hamming 23 56 nfft = 256; 57 window_length = 24; = hamming ( window_length ) ; 59 Noverlap = window_length /2; % numero de punto de solapamiento 60 % calculando el espectrograma 61 figure 62 subplot (2 , 1 , 1) ; 63 spectrogram (X , window_func , Noverlap , nfft , Fs , ' yaxis ') ; 64 title ( " Espectrograma de banda ancha - Ventana Hamming vocal a " ) ; 58 window_func 65 % ventana hanning = hanning ( window_length ) ; 68 Noverlap = window_length /2; % numero de punto de solapamiento 69 % calculando el espectrograma 70 subplot (2 , 1 , 2) ; 71 spectrogram (X , window_func , Noverlap , nfft , Fs , ' yaxis ') ; 72 title ( " Espectrograma de banda ancha - Ventana Hanning vocal a " ) ; 66 67 window_func Figura 3.3: Vocal a en el tiempo y la frecuencia 24 Figura 3.4: Espectrograma de la vocal a Figura 3.5: Periodograma de la vocal a 25 3.2.2. Análisis de la vocal E El código se muestra a continuación: % ler los archivos de audio Fs ] = audioread ( 'e . wav ') ; % vocal e 3 T = 1/ Fs ; 1 2 [X , 4 % vocal en el dominio del tiempo % las grabaciones tienen cada una 7 % frecuencia de muestreo de 8000 Hz 8 t = (0: length ( X ) -1) *1/ Fs ; % vector tiempo 9 % tomando la porcion importante de datos 10 t = t (4000:7000) ; 11 X = X (4000:7000) ; 12 % grafica en el tiempo 13 subplot (2 , 1 , 1) ; 14 plot (t , X ) ; grid on 15 title ( ' Audio de la vocal e ') 16 xlabel ( 't ( s ) ') 17 ylabel ( 'X ( t ) ') 5 6 18 % dominio de la frecuencia = length ( X ) ; 21 Y = fft ( X ) ; 22 P2 = abs ( Y / L ) ; % espectro bilateral 23 P1 = P2 (1:( L + 1) /2+1) ; % espectro unilateral 24 P1 (2: end -1) = 2* P1 (2: end -1) ; 25 % graficar el espectro 26 subplot (2 , 1 , 2) ; 27 f = Fs *(0:(( L +1) /2) ) / L ; 28 plot (f , P1 ) ; grid on 29 title ( ' Espectro de la vocal e ') 30 xlabel ( 'f ( Hz ) ') 31 ylabel ( '| P1 ( f ) | ') 19 20 L 32 % calculo del periodograma ventana hamming = hamming ( L ) ; 35 [ Sxx , f ] = periodogram (X , win ,1024 , Fs ) ; 36 figure 37 subplot (2 , 1 , 1) ; 38 stem (f , Sxx ) ; grid on 39 title ( ' Periodograma - Ventana Hamming vocal e ') 40 xlabel ( 'f ( Hz ) ') 41 ylabel ( '| P1 ( f ) |^2 ') 42 % calculo del periodograma ventana hanning 43 win = hanning ( L ) ; 44 [ Sxx , f ] = periodogram (X , win ,1024 , Fs ) ; 45 subplot (2 , 1 , 2) ; 46 stem (f , Sxx ) ; grid on 47 title ( ' Periodograma - Ventana Hanning vocal e ') 48 xlabel ( 'f ( Hz ) ') 49 ylabel ( '| P1 ( f ) |^2 ') 33 34 win 50 % espectrograma de banda ancha enfatiza cambios temporales % con periodo de ventanas de 3 ms aprox 53 % el tiempo de duracion de la onda es T_total = T * length ( X ) *1000 [ ms ] 54 % la longitud de la ventana es WL = ( length ( X ) / T_total ) *3 = 24 55 % ventana hamming 56 nfft = 256; 51 52 26 57 window_length = 24; = hamming ( window_length ) ; 59 Noverlap = window_length /2; % numero de punto de solapamiento 60 % calculando el espectrograma 61 figure 62 subplot (2 , 1 , 1) ; 63 spectrogram (X , window_func , Noverlap , nfft , Fs , ' yaxis ') ; 64 title ( " Espectrograma de banda ancha - Ventana Hamming vocal e " ) ; 58 window_func 65 % ventana hanning = hanning ( window_length ) ; 68 Noverlap = window_length /2; % numero de punto de solapamiento 69 % calculando el espectrograma 70 subplot (2 , 1 , 2) ; 71 spectrogram (X , window_func , Noverlap , nfft , Fs , ' yaxis ') ; 72 title ( " Espectrograma de banda ancha - Ventana Hanning vocal e " ) ; e 66 67 window_func Figura 3.6: Vocal e en el tiempo y frecuencia 27 Figura 3.7: Periodograma de la vocal e Figura 3.8: Espectrograma de la vocal e 28 3.2.3. Análisis de la vocal I % leer los archivos de audio Fs ] = audioread ( 'i . wav ') ; % vocal i 3 T = 1/ Fs ; 1 2 [X , 4 % vocal en el dominio del tiempo % las grabaciones tienen cada una 7 % frecuencia de muestreo de 8000 Hz 8 t = (0: length ( X ) -1) *1/ Fs ; % vector tiempo 9 % tomando la porcion importante de datos 10 t = t (4000:7000) ; 11 X = X (4000:7000) ; 12 % grafica en el tiempo 13 subplot (2 , 1 , 1) ; 14 plot (t , X ) ; grid on 15 title ( ' Audio de la vocal i ') 16 xlabel ( 't ( s ) ') 17 ylabel ( 'X ( t ) ') 5 6 18 % dominio de la frecuencia = length ( X ) ; 21 Y = fft ( X ) ; 22 P2 = abs ( Y / L ) ; % espectro bilateral 23 P1 = P2 (1:( L + 1) /2+1) ; % espectro unilateral 24 P1 (2: end -1) = 2* P1 (2: end -1) ; 25 % graficar el espectro 26 subplot (2 , 1 , 2) ; 27 f = Fs *(0:(( L +1) /2) ) / L ; 28 plot (f , P1 ) ; grid on 29 title ( ' Espectro de la vocal i ') 30 xlabel ( 'f ( Hz ) ') 31 ylabel ( '| P1 ( f ) | ') 19 20 L 32 % calculo del periodograma ventana hamming = hamming ( L ) ; 35 [ Sxx , f ] = periodogram (X , win ,1024 , Fs ) ; 36 figure 37 subplot (2 , 1 , 1) ; 38 stem (f , Sxx ) ; grid on 39 title ( ' Periodograma - Ventana Hamming vocal i ') 40 xlabel ( 'f ( Hz ) ') 41 ylabel ( '| P1 ( f ) |^2 ') 42 % calculo del periodograma ventana hanning 43 win = hanning ( L ) ; 44 [ Sxx , f ] = periodogram (X , win ,1024 , Fs ) ; 45 subplot (2 , 1 , 2) ; 46 stem (f , Sxx ) ; grid on 47 title ( ' Periodograma - Ventana Hanning vocal i ') 48 xlabel ( 'f ( Hz ) ') 49 ylabel ( '| P1 ( f ) |^2 ') 33 34 win 50 % espectrograma de banda ancha enfatiza cambios temporales % con periodo de ventanas de 3 ms aprox 53 % el tiempo de duracion de la onda es T_total = T * length ( X ) *1000 [ ms ] 54 % la longitud de la ventana es WL = ( length ( X ) / T_total ) *3 = 24 55 % ventana hamming 56 nfft = 256; 57 window_length = 24; 58 window_func = hamming ( window_length ) ; 51 52 29 59 Noverlap = window_length /2; % numero de punto de solapamiento % calculando el espectrograma 61 figure 62 subplot (2 , 1 , 1) ; 63 spectrogram (X , window_func , Noverlap , nfft , Fs , ' yaxis ') ; 64 title ( " Espectrograma de banda ancha - Ventana Hamming vocal i " ) ; 60 65 % ventana hanning = hanning ( window_length ) ; 68 Noverlap = window_length /2; % numero de punto de solapamiento 69 % calculando el espectrograma 70 subplot (2 , 1 , 2) ; 71 spectrogram (X , window_func , Noverlap , nfft , Fs , ' yaxis ') ; 72 title ( " Espectrograma de banda ancha - Ventana Hanning vocal i " ) ; 66 67 window_func Figura 3.9: Vocal i en el tiempo y frecuencia 30 Figura 3.10: Periodograma de la vocal i Figura 3.11: Espectrograma de la vocal i 31 3.2.4. Análisis de la vocal O % leer los archivos de audio Fs ] = audioread ( 'o . wav ') ; % vocal o 3 T = 1/ Fs ; 1 2 [X , 4 % vocal en el dominio del tiempo % las grabaciones tienen cada una 7 % frecuencia de muestreo de 8000 Hz 8 t = (0: length ( X ) -1) *1/ Fs ; % vector tiempo 9 % tomando la porcion importante de datos 10 t = t (3500:7000) ; 11 X = X (3500:7000) ; 12 % grafica en el tiempo 13 subplot (2 , 1 , 1) ; 14 plot (t , X ) ; grid on 15 title ( ' Audio de la vocal o ') 16 xlabel ( 't ( s ) ') 17 ylabel ( 'X ( t ) ') 5 6 18 % dominio de la frecuencia = length ( X ) ; 21 Y = fft ( X ) ; 22 P2 = abs ( Y / L ) ; % espectro bilateral 23 P1 = P2 (1:( L + 1) /2+1) ; % espectro unilateral 24 P1 (2: end -1) = 2* P1 (2: end -1) ; 25 % graficar el espectro 26 subplot (2 , 1 , 2) ; 27 f = Fs *(0:(( L +1) /2) ) / L ; 28 plot (f , P1 ) ; grid on 29 title ( ' Espectro de la vocal o ') 30 xlabel ( 'f ( Hz ) ') 31 ylabel ( '| P1 ( f ) | ') 19 20 L 32 % calculo del periodograma ventana hamming = hamming ( L ) ; 35 [ Sxx , f ] = periodogram (X , win ,1024 , Fs ) ; 36 figure 37 subplot (2 , 1 , 1) ; 38 stem (f , Sxx ) ; grid on 39 title ( ' Periodograma - Ventana Hamming vocal o ') 40 xlabel ( 'f ( Hz ) ') 41 ylabel ( '| P1 ( f ) |^2 ') 42 % calculo del periodograma ventana hanning 43 win = hanning ( L ) ; 44 [ Sxx , f ] = periodogram (X , win ,1024 , Fs ) ; 45 subplot (2 , 1 , 2) ; 46 stem (f , Sxx ) ; grid on 47 title ( ' Periodograma - Ventana Hanning vocal o ') 48 xlabel ( 'f ( Hz ) ') 49 ylabel ( '| P1 ( f ) |^2 ') 33 34 win 50 % espectrograma de banda ancha enfatiza cambios temporales % con periodo de ventanas de 3 ms aprox 53 % el tiempo de duracion de la onda es T_total = T * length ( X ) *1000 [ ms ] 54 % la longitud de la ventana es WL = ( length ( X ) / T_total ) *3 = 24 55 % ventana hamming 56 nfft = 256; 57 window_length = 24; 58 window_func = hamming ( window_length ) ; 51 52 32 59 Noverlap = window_length /2; % numero de punto de solapamiento % calculando el espectrograma 61 figure 62 subplot (2 , 1 , 1) ; 63 spectrogram (X , window_func , Noverlap , nfft , Fs , ' yaxis ') ; 64 title ( " Espectrograma de banda ancha - Ventana Hamming vocal o " ) ; 60 65 % ventana hanning = hanning ( window_length ) ; 68 Noverlap = window_length /2; % numero de punto de solapamiento 69 % calculando el espectrograma 70 subplot (2 , 1 , 2) ; 71 spectrogram (X , window_func , Noverlap , nfft , Fs , ' yaxis ') ; 72 title ( " Espectrograma de banda ancha - Ventana Hanning vocal o " ) ; 66 67 window_func Figura 3.12: Vocal o en el tiempo y frecuencia 33 Figura 3.13: Periodograma de la vocal o Figura 3.14: Espectrograma de la vocal o 34 3.2.5. Análisis de la vocal U % leer los archivos de audio Fs ] = audioread ( 'u . wav ') ; % vocal u 3 T = 1/ Fs ; 1 2 [X , 4 % vocal en el dominio del tiempo % las grabaciones tienen cada una 7 % frecuencia de muestreo de 8000 Hz 8 t = (0: length ( X ) -1) *1/ Fs ; % vector tiempo 9 % tomando la porcion importante de datos 10 t = t (4000:7000) ; 11 X = X (4000:7000) ; 12 % grafica en el tiempo 13 subplot (2 , 1 , 1) ; 14 plot (t , X ) ; grid on 15 title ( ' Audio de la vocal u ') 16 xlabel ( 't ( s ) ') 17 ylabel ( 'X ( t ) ') 5 6 18 % dominio de la frecuencia = length ( X ) ; 21 Y = fft ( X ) ; 22 P2 = abs ( Y / L ) ; % espectro bilateral 23 P1 = P2 (1:( L + 1) /2+1) ; % espectro unilateral 24 P1 (2: end -1) = 2* P1 (2: end -1) ; 25 % graficar el espectro 26 subplot (2 , 1 , 2) ; 27 f = Fs *(0:(( L +1) /2) ) / L ; 28 plot (f , P1 ) ; grid on 29 title ( ' Espectro de la vocal u ') 30 xlabel ( 'f ( Hz ) ') 31 ylabel ( '| P1 ( f ) | ') 19 20 L 32 % calculo del periodograma ventana hamming = hamming ( L ) ; 35 [ Sxx , f ] = periodogram (X , win ,1024 , Fs ) ; 36 figure 37 subplot (2 , 1 , 1) ; 38 stem (f , Sxx ) ; grid on 39 title ( ' Periodograma - Ventana Hamming vocal u ') 40 xlabel ( 'f ( Hz ) ') 41 ylabel ( '| P1 ( f ) |^2 ') 42 % calculo del periodograma ventana hanning 43 win = hanning ( L ) ; 44 [ Sxx , f ] = periodogram (X , win ,1024 , Fs ) ; 45 subplot (2 , 1 , 2) ; 46 stem (f , Sxx ) ; grid on 47 title ( ' Periodograma - Ventana Hanning vocal u ') 48 xlabel ( 'f ( Hz ) ') 49 ylabel ( '| P1 ( f ) |^2 ') 33 34 win 50 % espectrograma de banda ancha enfatiza cambios temporales % con periodo de ventanas de 3 ms aprox 53 % el tiempo de duracion de la onda es T_total = T * length ( X ) *1000 [ ms ] 54 % la longitud de la ventana es WL = ( length ( X ) / T_total ) *3 = 24 55 % ventana hamming 56 nfft = 256; 57 window_length = 24; 58 window_func = hamming ( window_length ) ; 51 52 35 59 Noverlap = window_length /2; % numero de punto de solapamiento % calculando el espectrograma 61 figure 62 subplot (2 , 1 , 1) ; 63 spectrogram (X , window_func , Noverlap , nfft , Fs , ' yaxis ') ; 64 title ( " Espectrograma de banda ancha - Ventana Hamming vocal u " ) ; 60 65 % ventana hanning = hanning ( window_length ) ; 68 Noverlap = window_length /2; % numero de punto de solapamiento 69 % calculando el espectrograma 70 subplot (2 , 1 , 2) ; 71 spectrogram (X , window_func , Noverlap , nfft , Fs , ' yaxis ') ; 72 title ( " Espectrograma de banda ancha - Ventana Hanning vocal u " ) ; 66 67 window_func Figura 3.15: Vocal u en el tiempo y frecuencia 36 Figura 3.16: Periodograma de la vocal u Figura 3.17: Espectrograma de la vocal u 37 C APÍTULO 4: F ILTRO ADAPTATIVO 4.1. Realice la mezcla de un ruido blanco con una señal de voz “a” y aplíquele un filtro adaptivo de tal forma de atenuar el ruido blanco y reproducir la “a” con mayor claridad. El código para leer la señal de audio, la adición de ruido y el filtrado de la señal se presenta a continuación. % leer el archivo de audio Fs ] = audioread ( 'a . wav ') ; % vocal a 3 T = 1/ Fs ; % frecuencia de muestreo de 8000 Hz 4 t = (0: length ( X ) -1) *1/ Fs ; % vector tiempo 5 % tomando la porcion importante de datos 6 %t = t (3500:6500) ; 7 %X = X (3500:6500) ; 8 % grafica en el tiempo 9 subplot (2 , 1 , 1) ; 10 plot (t , X ) ; grid on 11 title ( ' Audio de la vocal a ') 12 xlabel ( 't ( s ) ') 13 ylabel ( 'X ( t ) ') 14 % dominio de la frecuencia 15 L = length ( X ) ; 16 Y = fft ( X ) ; 17 P2 = abs ( Y / L ) ; % espectro bilateral 18 P1 = P2 (1: L /2+1) ; % espectro unilateral 19 P1 (2: end -1) = 2* P1 (2: end -1) ; 20 % graficar el espectro 21 subplot (2 , 1 , 2) ; 22 f = Fs *(0:( L /2) ) / L ; 23 plot (f , P1 ) ; grid on 24 title ( ' Espectro de la vocal a ') 25 xlabel ( 'f ( Hz ) ') 26 ylabel ( '| P1 ( f ) | ') 1 2 [X , 27 % reproducir audio = audioplayer (X , Fs ) ; 30 play ( a ) ; 31 pause (1) ; 28 29 a 32 % ruido blanco = 0; 35 sigma = 0.005; 36 RB = sigma * randn (L , 1) + mu ; 37 % grafica en el tiempo 38 figure 33 34 mu 38 39 subplot (2 , 1 , 1) ; RB ) ; 41 title ( ' Ruido blanco ') 42 xlabel ( 't ( s ) ') 43 ylabel ( ' RB ( t ) ') 44 % espectro del ruido blanco 45 Y = fft ( RB ) ; 46 P2 = abs ( Y / L ) ; % espectro bilateral 47 P1 = P2 (1: L /2+1) ; % espectro unilateral 48 P1 (2: end -1) = 2* P1 (2: end -1) ; 49 % graficar el espectro 50 subplot (2 , 1 , 2) ; 51 f = Fs *(0:(( L +1) /2) ) / L ; 52 plot (f , P1 ) ; grid on 53 title ( ' Espectro del ruido blanco ') 54 xlabel ( 'f ( Hz ) ') 55 ylabel ( '| P1 ( f ) | ') 40 plot (t , 56 % adicion de ruido blanco = X + RB ; 59 figure 60 subplot (2 , 1 , 1) ; 61 plot (t , X_RB ) 62 title ( ' Audio + Ruido blanco ') 63 xlabel ( 't ( s ) ') 64 ylabel ( ' Audio + RB ( t ) ') 65 % espectro del audio + el rudio blanco 66 Y = fft ( X_RB ) ; 67 P2 = abs ( Y / L ) ; % espectro bilateral 68 P1 = P2 (1: L /2+1) ; % espectro unilateral 69 P1 (2: end -1) = 2* P1 (2: end -1) ; 70 % graficar el espectro 71 subplot (2 , 1 , 2) ; 72 f = Fs *(0:(( L +1) /2) ) / L ; 73 plot (f , P1 ) ; grid on 74 title ( ' Espectro del audio + rudio blanco ') 75 xlabel ( 'f ( Hz ) ') 76 ylabel ( '| P1 ( f ) | ') 77 % reproducir audio con ruido 78 a_ruido = audioplayer ( X_RB , Fs ) ; 79 play ( a_ruido ) ; 80 pause (1) ; 57 58 X_RB 81 % reduccion de rudio = n o i s e R e d u c t i o n _ Y W ( X_RB , Fs ) ; % filtrando ruido 84 figure 85 subplot (2 , 1 , 1) ; 86 plot (t , X_filtered ) ; 87 title ( ' Audio Filtrado ') 88 xlabel ( 't ( s ) ') 89 ylabel ( ' Audio ') 90 % espectro del audio filtrado 91 Y = fft ( X_filtered ) ; 92 P2 = abs ( Y / L ) ; % espectro bilateral 93 P1 = P2 (1: L /2+1) ; % espectro unilateral 94 P1 (2: end -1) = 2* P1 (2: end -1) ; 95 % graficar el espectro 96 subplot (2 , 1 , 2) ; 97 f = Fs *(0:(( L +1) /2) ) / L ; 98 plot (f , P1 ) ; grid on 99 title ( ' Espectro del audio filtrado ') 100 xlabel ( 'f ( Hz ) ') 101 ylabel ( '| P1 ( f ) | ') 102 % reproducir audio con ruido 82 83 X_filtered 39 103 a_filtrado = audioplayer ( X_filtered , Fs ) ; 104 play ( a_filtrado ) ; Figura 4.1: Lectura de audio Figura 4.2: Ruido Blanco 40 Figura 4.3: Audio con ruido adicionado Figura 4.4: Audio filtrado 41